skapi-js 2.2.8 → 2.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/skapi.mjs CHANGED
@@ -203,7 +203,7 @@ import {CognitoUserPool,AuthenticationDetails,CognitoUserSession,CognitoRefreshT
203
203
  limitations under the License.
204
204
 
205
205
  */
206
- var Po=Object.defineProperty;var So=Object.getOwnPropertyDescriptor;var ke=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var P=(e,t,r,n)=>{for(var i=So(t,r),s=e.length-1,o;s>=0;s--)(o=e[s])&&(i=(o(t,r,i))||i);return i&&Po(t,r,i),i};function ve(e){let r=(typeof globalThis<"u"?globalThis:void 0)?.process;if(r&&typeof r.getBuiltinModule=="function")try{return r.getBuiltinModule(e)}catch{}try{if(typeof ke=="function")return ke(e)}catch{}return null}var Bt,Kt,Ht=()=>Bt!==void 0?Bt:Bt=ve("fs"),Gt=()=>Kt!==void 0?Kt:Kt=ve("path"),me=typeof globalThis<"u"?globalThis:void 0,pt=me?.window;function ko(e){if(Buffer)return Buffer.from(e).toString("base64");let t="",r=new Uint8Array(e),n=32768;for(let i=0;i<r.length;i+=n){let s=r.subarray(i,i+n);t+=String.fromCharCode.apply(null,Array.from(s));}if(typeof btoa=="function")return btoa(t);throw new Error("No base64 encoder available in this environment.")}if(pt)pt.global=pt,pt.global._runningInNodeJS=false;else if(me&&(me.global=me,typeof me.window>"u")){class e{constructor(){this.result=null;this.error=null;this.onload=null;this.onloadend=null;this.onerror=null;}readAsDataURL(n){n.arrayBuffer().then(i=>{let s=ko(i),o=n.type||"application/octet-stream";this.result=`data:${o};base64,${s}`,this.onload&&this.onload({target:this}),this.onloadend&&this.onloadend({target:this});}).catch(i=>{this.error=i,this.onerror&&this.onerror({target:this});});}readAsArrayBuffer(n){n.arrayBuffer().then(i=>{this.result=i,this.onload&&this.onload({target:this}),this.onloadend&&this.onloadend({target:this});}).catch(i=>{this.error=i,this.onerror&&this.onerror({target:this});});}readAsText(n,i="utf-8"){n.text().then(s=>{this.result=s,this.onload&&this.onload({target:this}),this.onloadend&&this.onloadend({target:this});}).catch(s=>{this.error=s,this.onerror&&this.onerror({target:this});});}}me.FileReader=e;class t{constructor(){this.status=0;this.statusText="";this.readyState=0;this.responseText="";this.response=null;this.responseType="";this.responseURL="";this.timeout=0;this.withCredentials=false;this.onload=null;this.onerror=null;this.onabort=null;this.ontimeout=null;this.onprogress=null;this.onreadystatechange=null;this.upload={onprogress:null};this._method="GET";this._url="";this._headers={};this._aborted=false;}open(n,i){this._method=n,this._url=i,this.readyState=1;}setRequestHeader(n,i){this._headers[n]=i;}getResponseHeader(n){return null}abort(){this._aborted=true,this.onabort&&this.onabort({});}send(n){if(this._aborted)return;let i={method:this._method,headers:this._headers};n&&this._method!=="GET"&&this._method!=="HEAD"&&(i.body=n),fetch(this._url,i).then(async s=>{if(!this._aborted){if(this.status=s.status,this.statusText=s.statusText,this.responseURL=s.url,this.readyState=4,this.responseType==="blob")this.response=await s.blob();else if(this.responseType==="json")try{this.response=await s.json();}catch{this.response=null;}else this.responseType==="arraybuffer"?this.response=await s.arrayBuffer():(this.responseText=await s.text(),this.response=this.responseText);this.onload&&this.onload({});}}).catch(s=>{this._aborted||this.onerror&&this.onerror(s);});}}me.XMLHttpRequest=t,me.window={_runningInNodeJS:true,alert:r=>console.error("[Alert]",r),sessionStorage:(()=>{let r=new Map;return {getItem:n=>r.has(n)?r.get(n):null,setItem:(n,i)=>{r.set(n,String(i));},removeItem:n=>{r.delete(n);}}})(),localStorage:{getItem:r=>{let n=Ht(),i=Gt();if(!n||!i)return null;try{let s=i.resolve(process.cwd(),"states","localStorage",`${r}.skapi`);return n.existsSync(s)?n.readFileSync(s,"utf8"):null}catch{return null}},setItem:(r,n)=>{let i=Ht(),s=Gt();if(!(!i||!s))try{let o=s.resolve(process.cwd(),"states","localStorage");i.existsSync(o)||i.mkdirSync(o,{recursive:!0});let l=s.resolve(o,`${r}.skapi`);i.writeFileSync(l,n,"utf8");}catch{}},removeItem:r=>{let n=Ht(),i=Gt();if(!(!n||!i))try{let s=i.resolve(process.cwd(),"states","localStorage",`${r}.skapi`);n.existsSync(s)&&n.unlinkSync(s);}catch{}}},location:{href:"",origin:"",hostname:"",protocol:"",replace:r=>{}},navigator:{userAgent:`nodejs/${me?.process?.versions?.node||"unknown"}`,mediaDevices:{getUserMedia:async r=>{throw new Error("getUserMedia is not supported in Node.js environment.")}}},addEventListener:()=>{},removeEventListener:()=>{}};}var a=class extends Error{constructor(t,r){if(Array.isArray(t)&&t.length<=2){let n=t[1];if(t.length>2)for(let i=2;i<t.length&&typeof t[i]=="string";i++)n+=t[i];super((n||"Something went wrong.").trim()),this.name=r?.name||"SKAPI",this.code=r?.code||t[0]||"ERROR",r?.cause&&(this.cause=r.cause);}else super((t?.message||(typeof t=="string"?t:"Something went wrong.")).trim()),typeof t=="string"?(this.name=r?.name||"SKAPI",this.code=r?.code||"ERROR",r?.cause&&(this.cause=r.cause)):t instanceof Error?(this.cause=t,this.name=t.name,t.hasOwnProperty("code")&&(this.code=t.code)):typeof t=="object"&&t?.code&&t?.message&&(this.name=r?.name||"SKAPI",this.code=r?.code||"ERROR",this.cause=t?.cause);}};var ye="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Wt=BigInt(ye.length),vo=2*1024*1024,No=["aud","cognito:username","event_id","exp","iat","iss","jti","origin_jti","secret_key","token_use"],Qr={auth_time:"log",sub:"user_id"},Zr=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l"],en=["us31","us72","ap51","ap22","ap41","eu71","ap21","us32","us71","af51","ap31","ap43","ap23","ap42","ca01","eu01","eu72","eu51","eu73","eu11","me51","sa31"],zr=typeof TextEncoder<"u"?new TextEncoder:null;function Do(){if(typeof globalThis<"u")return globalThis.Buffer}function K(e){if(zr)return zr.encode(e);let t=unescape(encodeURIComponent(e)),r=new Uint8Array(t.length);for(let n=0;n<t.length;n++)r[n]=t.charCodeAt(n);return r}function Qt(e){if(e instanceof Uint8Array)return e;if(typeof e=="string")return K(e);if(typeof ArrayBuffer<"u"&&e instanceof ArrayBuffer)return new Uint8Array(e);if(typeof ArrayBuffer<"u"&&ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);if(Array.isArray(e))return Uint8Array.from(e);let t=Do();if(t)return new Uint8Array(t.from(e));throw new Error("No byte conversion available in this environment.")}var R=class R{static hash(t){typeof t!="string"&&(console.warn("coercing non-string value to empty string"),t="");let r=R.sb(t),n=1732584193,i=-271733879,s=-1732584194,o=271733878,l,u,c,f;for(let g=0;g<r.length;g+=16)l=n,u=i,c=s,f=o,n=R.ff(n,i,s,o,r[g],7,-680876936),o=R.ff(o,n,i,s,r[g+1],12,-389564586),s=R.ff(s,o,n,i,r[g+2],17,606105819),i=R.ff(i,s,o,n,r[g+3],22,-1044525330),n=R.ff(n,i,s,o,r[g+4],7,-176418897),o=R.ff(o,n,i,s,r[g+5],12,1200080426),s=R.ff(s,o,n,i,r[g+6],17,-1473231341),i=R.ff(i,s,o,n,r[g+7],22,-45705983),n=R.ff(n,i,s,o,r[g+8],7,1770035416),o=R.ff(o,n,i,s,r[g+9],12,-1958414417),s=R.ff(s,o,n,i,r[g+10],17,-42063),i=R.ff(i,s,o,n,r[g+11],22,-1990404162),n=R.ff(n,i,s,o,r[g+12],7,1804603682),o=R.ff(o,n,i,s,r[g+13],12,-40341101),s=R.ff(s,o,n,i,r[g+14],17,-1502002290),i=R.ff(i,s,o,n,r[g+15],22,1236535329),n=R.gg(n,i,s,o,r[g+1],5,-165796510),o=R.gg(o,n,i,s,r[g+6],9,-1069501632),s=R.gg(s,o,n,i,r[g+11],14,643717713),i=R.gg(i,s,o,n,r[g],20,-373897302),n=R.gg(n,i,s,o,r[g+5],5,-701558691),o=R.gg(o,n,i,s,r[g+10],9,38016083),s=R.gg(s,o,n,i,r[g+15],14,-660478335),i=R.gg(i,s,o,n,r[g+4],20,-405537848),n=R.gg(n,i,s,o,r[g+9],5,568446438),o=R.gg(o,n,i,s,r[g+14],9,-1019803690),s=R.gg(s,o,n,i,r[g+3],14,-187363961),i=R.gg(i,s,o,n,r[g+8],20,1163531501),n=R.gg(n,i,s,o,r[g+13],5,-1444681467),o=R.gg(o,n,i,s,r[g+2],9,-51403784),s=R.gg(s,o,n,i,r[g+7],14,1735328473),i=R.gg(i,s,o,n,r[g+12],20,-1926607734),n=R.hh(n,i,s,o,r[g+5],4,-378558),o=R.hh(o,n,i,s,r[g+8],11,-2022574463),s=R.hh(s,o,n,i,r[g+11],16,1839030562),i=R.hh(i,s,o,n,r[g+14],23,-35309556),n=R.hh(n,i,s,o,r[g+1],4,-1530992060),o=R.hh(o,n,i,s,r[g+4],11,1272893353),s=R.hh(s,o,n,i,r[g+7],16,-155497632),i=R.hh(i,s,o,n,r[g+10],23,-1094730640),n=R.hh(n,i,s,o,r[g+13],4,681279174),o=R.hh(o,n,i,s,r[g],11,-358537222),s=R.hh(s,o,n,i,r[g+3],16,-722521979),i=R.hh(i,s,o,n,r[g+6],23,76029189),n=R.hh(n,i,s,o,r[g+9],4,-640364487),o=R.hh(o,n,i,s,r[g+12],11,-421815835),s=R.hh(s,o,n,i,r[g+15],16,530742520),i=R.hh(i,s,o,n,r[g+2],23,-995338651),n=R.ii(n,i,s,o,r[g],6,-198630844),o=R.ii(o,n,i,s,r[g+7],10,1126891415),s=R.ii(s,o,n,i,r[g+14],15,-1416354905),i=R.ii(i,s,o,n,r[g+5],21,-57434055),n=R.ii(n,i,s,o,r[g+12],6,1700485571),o=R.ii(o,n,i,s,r[g+3],10,-1894986606),s=R.ii(s,o,n,i,r[g+10],15,-1051523),i=R.ii(i,s,o,n,r[g+1],21,-2054922799),n=R.ii(n,i,s,o,r[g+8],6,1873313359),o=R.ii(o,n,i,s,r[g+15],10,-30611744),s=R.ii(s,o,n,i,r[g+6],15,-1560198380),i=R.ii(i,s,o,n,r[g+13],21,1309151649),n=R.ii(n,i,s,o,r[g+4],6,-145523070),o=R.ii(o,n,i,s,r[g+11],10,-1120210379),s=R.ii(s,o,n,i,r[g+2],15,718787259),i=R.ii(i,s,o,n,r[g+9],21,-343485551),n=R.ad(n,l),i=R.ad(i,u),s=R.ad(s,c),o=R.ad(o,f);return R.rh(n)+R.rh(i)+R.rh(s)+R.rh(o)}static rh(t){let r="";for(let n=0;n<=3;n++)r+=R.alphabet.charAt(t>>n*8+4&15)+R.alphabet.charAt(t>>n*8&15);return r}static ad(t,r){let n=(t&65535)+(r&65535);return (t>>16)+(r>>16)+(n>>16)<<16|n&65535}static rl(t,r){return t<<r|t>>>32-r}static cm(t,r,n,i,s,o){return R.ad(R.rl(R.ad(R.ad(r,t),R.ad(i,o)),s),n)}static ff(t,r,n,i,s,o,l){return R.cm(r&n|~r&i,t,r,s,o,l)}static gg(t,r,n,i,s,o,l){return R.cm(r&i|n&~i,t,r,s,o,l)}static hh(t,r,n,i,s,o,l){return R.cm(r^n^i,t,r,s,o,l)}static ii(t,r,n,i,s,o,l){return R.cm(n^(r|~i),t,r,s,o,l)}static sb(t){let r,n=(t.length+8>>6)+1,i=new Array(n*16);for(r=0;r<n*16;r++)i[r]=0;for(r=0;r<t.length;r++)i[r>>2]|=t.charCodeAt(r)<<r%4*8;return i[r>>2]|=128<<r%4*8,i[n*16-2]=t.length*8,i}};R.alphabet="0123456789abcdef";var Z=R;function tn(e){if(e===0)return ye[0];let t="";for(;e>0;)t=ye[e%62]+t,e=Math.floor(e/62);return t}function se(e){return e.split("").reverse().reduce((t,r,n)=>t+ye.indexOf(r)*62**n,0)}function Te(e=6){let t="",r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",n=r.length,i=0;for(;i<e;)t+=r.charAt(Math.floor(Math.random()*n)),i+=1;return t}function zt(){return typeof window>"u"||!!window?._runningInNodeJS}function H(){return !zt()&&typeof document<"u"&&typeof document.createElement=="function"}function ht(e){let t;try{t=JSON.stringify(e);}catch{throw new a("Invalid data type.",{code:"INVALID_REQUEST"})}if(new Blob([t]).size>vo)throw new a("Data should not exceed 2MB",{code:"INVALID_REQUEST"})}function Jr(e){return e===""||e==="on"||e==="true"}function Yr(e){return e==="false"}function Xr(e,t,r){t.name&&r(e,t.name,t.value);}var mt=H(),Uo=typeof SubmitEvent<"u",xo=typeof HTMLFormElement<"u";function j(e,t,r){let n={},i=[];function s(u,c,f){if(t?.ignoreEmpty&&f==="")return;if(t?.nullIfEmpty&&f===""&&(f=null),typeof r=="function"){let p=r(c,f);p!==void 0&&(f=p);}let g=c.split("[").map(p=>{let h=p.replace("]",""),m=Number(h);return !isNaN(m)&&!h.includes(".")?h=m:(h[0]==='"'&&h[h.length-1]==='"'||h[0]==="'"&&h[h.length-1]==="'")&&(h=h.replace(/"/g,"").replace(/'/g,"")),h}),d=u;if(typeof g[0]=="number")throw new a("Form key cannot start with an array index.",{code:"INVALID_REQUEST"});for(let p=0;p<g.length;p++){let h=g[p];p<g.length-1?(d[h]===void 0&&(typeof g[p+1]=="number"?d[h]=[]:d[h]={}),d=d[h]):d[h]===void 0?d[h]=f:Array.isArray(d[h])?d[h].push(f):d[h]=[d[h],f];}}function o(u,c,f){if(f instanceof File)u.push({name:c,file:f});else if(f instanceof FileList&&f&&f.length>0)for(let g=0;g<=f.length-1;g++){let d=f.item(g);d&&u.push({name:c,file:d});}}let l=u=>{u.name&&(u.type==="number"?u.value&&s(n,u.name,Number(u.value)):u.type==="checkbox"||u.type==="radio"?u.checked?u.type==="checkbox"&&u.value===""||Jr(u.value)?s(n,u.name,true):Yr(u.value)?s(n,u.name,false):u.value&&s(n,u.name,u.value):u.type==="checkbox"&&(Jr(u.value)?s(n,u.name,false):Yr(u.value)&&s(n,u.name,true)):u.type==="file"?u.files&&u.files.length>0&&o(i,u.name,u.files):s(n,u.name,u.value));};if(mt&&(e instanceof HTMLInputElement||e instanceof HTMLSelectElement||e instanceof HTMLTextAreaElement))return l(e),ht(n),{data:n,files:i};if(mt&&e instanceof FormData){for(let u of e.entries()){let c=u[0],f=u[1];if(f instanceof File||f instanceof FileList)o(i,c,f);else if(f instanceof Blob){let g=f;if(g.type==="application/json")try{let d=JSON.parse(g.text());s(n,c,d);}catch{s(n,c,g);}}else s(n,c,f);}return ht(n),{data:n,files:i}}if(mt&&Uo&&e instanceof SubmitEvent&&(e=e.target),mt&&xo&&e instanceof HTMLFormElement){let u=e.querySelectorAll("input"),c=e.querySelectorAll("select"),f=e.querySelectorAll("textarea");for(let g=0;g<c.length;g++)Xr(n,c[g],s);for(let g=0;g<f.length;g++)Xr(n,f[g],s);for(let g=0;g<u.length;g++)l(u[g]);return ht(n),{data:n,files:i}}return ht(e),{data:e,files:i}}function Ke(e){let t={};for(let r in e){let n=e[r];if(!No.includes(r))if(Qr[r])t[Qr[r]]=n;else if(r.includes("custom:"))t[r.replace("custom:","")]=n;else if(r==="address"){let i=n;if(i&&typeof i=="object"&&Object.keys(i).length){if(i?.formatted)try{t[r]=JSON.parse(i.formatted);}catch{t[r]=i.formatted;}}else t[r]=i;}else t[r]=n;}for(let r of ["address_public","birthdate_public","email_public","gender_public","phone_number_public","access_group"])r.includes("_public")?t.hasOwnProperty(r.split("_")[0])?t[r]=t.hasOwnProperty(r)?!!Number(t[r]):false:delete t[r]:t[r]=t.hasOwnProperty(r)?Number(t[r]):0;for(let r of ["email","phone_number"])t.hasOwnProperty(r)?t[r+"_verified"]=t[r+"_verified"]===true:delete t[r+"_verified"];return t}function Jt(e){if(e=jo(e),e.split("-").length===7){let t=e.split("-"),r,n;try{r=en[Zr.indexOf(t[1][0])],n=t.slice(2).join("-");}catch{throw new Error("INVALID_PARAMETER: Service ID is invalid: "+e)}if(!r)throw new Error("INVALID_PARAMETER: Service ID is invalid: "+e);return {service:r+t[0]+t[1].slice(1),owner:n}}return {service:e,owner:""}}function Yt(e,t){let r=en.indexOf(e.slice(0,4)),n=Zr[r],s=`${e.slice(4,-4)}-${n}${e.slice(-4)}-${t}`;return Vo(s)}function Co(e){let t=0n;for(let r of e){let n=ye.indexOf(r);if(n<0)throw new Error(`INVALID_PARAMETER: Invalid base62 character: ${r}`);t=t*Wt+BigInt(n);}return t}function Oo(e,t=1){if(e<0n)throw new Error("INVALID_PARAMETER: Negative values are not supported.");if(e===0n)return "0".repeat(Math.max(1,t));let r="",n=e;for(;n>0n;){let i=Number(n%Wt);r=ye[i]+r,n/=Wt;}return r.length<t&&(r="0".repeat(t-r.length)+r),r}function Lo(e){if(e===0n)return Uint8Array.from([0]);let t=[],r=e;for(;r>0n;)t.push(Number(r&0xffn)),r>>=8n;return t.reverse(),Uint8Array.from(t)}function Mo(e){let t=0n;for(let r of e)t=(t<<8n)+BigInt(r);return t}function Fo(e){let t=String(e).replace(/-/g,"");if(!/^[0-9a-fA-F]{32}$/.test(t))throw new Error("INVALID_PARAMETER: Invalid UUID format.");let r=new Uint8Array(16);for(let n=0;n<16;n++)r[n]=parseInt(t.slice(n*2,n*2+2),16);return r}function qo(e){let t=Array.from(Qt(e),r=>r.toString(16).padStart(2,"0")).join("");return [t.slice(0,8),t.slice(8,12),t.slice(12,16),t.slice(16,20),t.slice(20)].join("-")}function Vo(e){let t=String(e);if(t.split("-").length===2)return t;let r=t.match(/^([0-9A-Za-z]+)-([0-9A-Za-z]+)-([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/);if(!r)throw new Error("INVALID_PARAMETER: Input must match <base62>-<base62>-<uuid>.");let[,n,i,s]=r;if(n.length<2)throw new Error("INVALID_PARAMETER: The first part must contain at least 2 characters.");if(i.length>=ye.length)throw new Error("INVALID_PARAMETER: The middle section is too long to encode.");let o=n.slice(0,2),l=n.slice(2),u=i+o,c=ye[i.length]+l+u,f=Fo(s),g=Oo(Mo(f));return `${c}-${g}`}function jo(e){let t=String(e);if(t.split("-").length!==2)return t;let r=t.split("-");if(r.length!==2||!r[0]||!r[1])throw new Error("INVALID_PARAMETER: Corrupt compressed token: "+t);let[n,i]=r,s=ye.indexOf(n[0]);if(s<0)throw new Error("INVALID_PARAMETER: Corrupt compressed token: "+t);let o=n.slice(1),l=s+2;if(o.length<l)throw new Error("INVALID_PARAMETER: Corrupt compressed token: "+t);let u=o.slice(0,o.length-l),c=o.slice(o.length-l),f=c.slice(s),g=c.slice(0,s),d=f+u;if(!/^[0-9A-Za-z]+$/.test(d)||!/^[0-9A-Za-z]+$/.test(g))throw new Error("INVALID_PARAMETER: Corrupt compressed token: "+t);let p=Co(i),h=Lo(p);if(h.length>16)throw new Error("INVALID_PARAMETER: Corrupt compressed token: "+t);let m=new Uint8Array(16);m.set(h,16-h.length);let _=qo(m);return `${d}-${g}-${_}`}function He(e){if(typeof TextDecoder<"u")return new TextDecoder().decode(e);let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return decodeURIComponent(escape(t))}function Xt(...e){let t=0;for(let i of e)t+=i.length;let r=new Uint8Array(t),n=0;for(let i of e)r.set(i,n),n+=i.length;return r}function Bo(e,t="User ID"){let r=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;if(e){if(typeof e!="string")throw new a(`${t} should be type: string.`,{code:"INVALID_PARAMETER"});if(!e.match(r))throw new a(`${t} is invalid.`,{code:"INVALID_PARAMETER"})}else throw new a(`${t} is empty.`,{code:"INVALID_PARAMETER"});return e}function Ko(e){if(e&&(typeof e!="string"||e.charAt(0)!=="+"||isNaN(Number(e.substring(1)))))throw new a('"phone_number" is invalid. The format should be "+00123456789". Type: string.',{code:"INVALID_PARAMETER"});return e||""}function Ho(e){if(e){if(typeof e!="string")throw new a('"birthdate" is invalid. The format should be "yyyy-mm-dd". Type: string.',{code:"INVALID_PARAMETER"});{let t=new RegExp(/([12]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01]))/);if(e.length!==10||e.split("-").length!==3||!t.test(e))throw new a('"birthdate" is invalid. The format should be "yyyy-mm-dd". Type: string.',{code:"INVALID_PARAMETER"})}}return e||""}function Go(e){if(e){if(typeof e!="string")throw new a('"password" should be type: string.',{code:"INVALID_PARAMETER"});if(e.length<6)throw new a('"password" should be at least 6 characters.',{code:"INVALID_PARAMETER"});if(e.length>60)throw new a('"password" can be up to 60 characters max.',{code:"INVALID_PARAMETER"})}else throw new a('"password" is required.',{code:"INVALID_PARAMETER"});return e}function Wo(e,t="email"){if(e){if(typeof e!="string")throw new a(`"${t}"should be type: string.`,{code:"INVALID_PARAMETER"});if(e.length<5)throw new a(`"${t}" should be at least 5 characters.`,{code:"INVALID_PARAMETER"});if(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.test(e)&&(e=e.trim(),e.split("@")[1].split(".").length>=2))return e.toLowerCase()}else throw new a(`"${t}" is required.`,{code:"INVALID_PARAMETER"});throw new a(`"${e}" is an invalid email.`,{code:"INVALID_PARAMETER"})}function Qo(e){let t=typeof window<"u",r=(()=>{let i=t&&window.location.origin||null;return i&&i.slice(-1)==="/"&&(i=i.slice(0,-1)),i})(),n=i=>{if(typeof i=="string"){if(i==="*")return "*";{let s=i.trim();if(s[0]==="/"&&r){if(r.slice(0,5)==="file:")throw new a(`"${i}" is an invalid url. Relative URL does not work on local file system. Use full URL string.`,{code:"INVALID_PARAMETER"});s=r+s;}else if(s[0]==="."&&r){if(r.slice(0,5)==="file:")throw new a(`"${i}" is an invalid url. Relative URL does not work on local file system. Use full URL string.`,{code:"INVALID_PARAMETER"});let l=t?window.location.href.split("?")[0]:"";l.slice(-1)!=="/"&&(l+="/"),s=l+s.slice(1);}let o;try{o=new URL(s);}catch{throw new a(`"${i}" is an invalid url.`,{code:"INVALID_PARAMETER"})}if(o.protocol)return o.href}}throw new a(`"${i}" is an invalid url.`,{code:"INVALID_PARAMETER"})};return Array.isArray(e)?e.map(i=>n(i)):n(e)}var zo=/^[a-z0-9]{2,20}$/,Jo=/[a-z]/,Yo=/^[0-9]+e[0-9]+$/,Xo=["tp","admin","public","authorized","newsletter","forward","all","true","false","null"];function Zo(e,t){if(e==null){if(t?.allowNull)return null;throw new a('"group" is required.',{code:"INVALID_PARAMETER"})}if(!t?.nameOnly){if(e==="public")return 0;if(e==="authorized")return 1;if(typeof e=="number"){if(!Number.isInteger(e)||e<0||e>99)throw new a('"group" should be an integer between 0 and 99.',{code:"INVALID_PARAMETER"});return e}}if(typeof e!="string"||!zo.test(e)||!Jo.test(e)||Yo.test(e)||Xo.includes(e))throw new a("Newsletter group name must be 2-20 lowercase alphanumeric characters, contain a letter, and not be a reserved name.",{code:"INVALID_PARAMETER"});return e}function ea(e,t,r=[],n){let i=j(e,n),s=i.data;t.service="string",t.owner="string";let o={};for(let l in t)if(s&&typeof s=="object"&&!Array.isArray(s)&&s.hasOwnProperty(l))if(typeof s[l]=="function")o[l]=s[l];else try{o[l]=JSON.parse(JSON.stringify(s[l]));}catch{o[l]=s[l];}n?.precall&&n.precall({data:o,files:i?.files||[]});try{return $o(o,t,r)}catch(l){throw new a(l.message,{code:"INVALID_PARAMETER"})}}var y={UserId:Bo,PhoneNumber:Ko,Birthdate:Ho,Password:Go,Email:Wo,Url:Qo,newsletterGroup:Zo,Params:ea};var Y="skapi.enc.v1",sn=6e5,Ge=12,yt=null,Ne=null;function on(){return new a("Encryption requires Web Crypto, which needs a secure context (https, or localhost) in the browser, or Node 18 or newer. A page served over plain http has crypto.getRandomValues but crypto.subtle is undefined.",{code:"NOT_SUPPORTED"})}function an(){if(Ne)return Ne;let e=typeof globalThis<"u"?globalThis:void 0;if(e?.crypto?.subtle&&typeof e.crypto.getRandomValues=="function")return Ne=e.crypto,Ne;try{let t=typeof globalThis<"u"?globalThis:void 0,r=null;if(t?.process&&typeof t.process.getBuiltinModule=="function"&&(r=t.process.getBuiltinModule("crypto")),!r&&typeof ke=="function"&&(r=ke("crypto")),r?.webcrypto?.subtle)return Ne=r.webcrypto,Ne}catch{}throw on()}function re(){if(yt)return yt;let e=an();if(!e.subtle)throw on();return yt=e.subtle,yt}function er(){try{return re(),!0}catch{return false}}function X(e){let t=an(),r=new Uint8Array(e),n=65536;for(let i=0;i<e;i+=n)t.getRandomValues(r.subarray(i,Math.min(i+n,e)));return r}function V(e){let t=Qt(e),r;if(typeof Buffer<"u"&&typeof Buffer.from=="function")r=Buffer.from(t).toString("base64");else if(typeof btoa=="function"){let n="";for(let s=0;s<t.length;s+=32768)n+=String.fromCharCode.apply(null,Array.from(t.subarray(s,s+32768)));r=btoa(n);}else throw new a("No base64 encoder available in this environment.",{code:"NOT_SUPPORTED"});return r.replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function $(e){if(typeof e!="string")throw new a("Expected a base64url string.",{code:"INVALID_PARAMETER"});let t=e.replace(/-/g,"+").replace(/_/g,"/"),r=t.length%4;if(r===2)t+="==";else if(r===3)t+="=";else if(r===1)throw new a("Malformed base64url string.",{code:"INVALID_PARAMETER"});if(typeof Buffer<"u"&&typeof Buffer.from=="function"){let n=Buffer.from(t,"base64");return new Uint8Array(n.buffer,n.byteOffset,n.byteLength)}if(typeof atob=="function"){let n=atob(t),i=new Uint8Array(n.length);for(let s=0;s<n.length;s++)i[s]=n.charCodeAt(s);return i}throw new a("No base64 decoder available in this environment.",{code:"NOT_SUPPORTED"})}async function bt(e){let t=await re().digest("SHA-256",e);return new Uint8Array(t)}async function ze(e,t,r,n){let i=re(),s=await i.importKey("raw",e,"HKDF",false,["deriveBits"]),o=await i.deriveBits({name:"HKDF",hash:"SHA-256",salt:t,info:r},s,n*8);return new Uint8Array(o)}async function Ue(e,t,r,n){let i=re(),s=K(e.normalize("NFC")),o=await i.importKey("raw",s,"PBKDF2",false,["deriveBits"]),l=new Uint8Array(await i.deriveBits({name:"PBKDF2",salt:t,iterations:r,hash:"SHA-256"},o,256)),u=await ze(l,t,n,32);q(l),q(s);let c=await oe(u);return q(u),c}async function oe(e){return re().importKey("raw",e,{name:"AES-GCM"},false,["encrypt","decrypt"])}async function ln(){let e=X(32),t=await oe(e);return {bytes:e,key:t}}async function ne(e,t,r){let n=X(Ge),i=await re().encrypt({name:"AES-GCM",iv:n,additionalData:r,tagLength:128},e,t);return {iv:n,ct:new Uint8Array(i)}}async function ae(e,t,r,n){let i=await re().decrypt({name:"AES-GCM",iv:t,additionalData:n,tagLength:128},e,r);return new Uint8Array(i)}var _t={name:"ECDH",namedCurve:"P-256"};async function cn(){let e=re(),t=await e.generateKey(_t,true,["deriveBits"]),r=new Uint8Array(await e.exportKey("raw",t.publicKey)),n=new Uint8Array(await e.exportKey("pkcs8",t.privateKey)),i=await tr(n);return {pubRaw:r,pkcs8:n,priv:i}}async function tr(e){return re().importKey("pkcs8",e,_t,false,["deriveBits"])}async function un(e){if(e.length!==65||e[0]!==4)throw new a("Malformed public key: expected a 65 byte uncompressed P-256 point.",{code:"INVALID_PARAMETER"});return re().importKey("raw",e,_t,false,[])}async function rr(e){return V(await bt(e))}async function dn(e,t,r,n){let i=re(),s=await un(e),o=await i.generateKey(_t,true,["deriveBits"]),l=new Uint8Array(await i.deriveBits({name:"ECDH",public:s},o.privateKey,256)),u=await ze(l,new Uint8Array(32),r,32);q(l);let c=await oe(u);q(u);let{iv:f,ct:g}=await ne(c,t,n);return {epk:new Uint8Array(await i.exportKey("raw",o.publicKey)),iv:f,ct:g}}async function fn(e,t,r,n,i,s){let o=re(),l=await un(t),u=new Uint8Array(await o.deriveBits({name:"ECDH",public:l},e,256)),c=await ze(u,new Uint8Array(32),i,32);q(u);let f=await oe(c);return q(c),ae(f,r,n,s)}function q(e){e&&e.length&&e.fill(0);}function ta(e,t){if(e.length!==t.length)return false;let r=0;for(let n=0;n<e.length;n++)r|=e[n]^t[n];return r===0}function nr(e){return K(JSON.stringify(e))}function Je(e,t,r){return Xt(e,new Uint8Array([0]),K(t),new Uint8Array([0]),K(r))}var Ie="0123456789ABCDEFGHJKMNPQRSTVWXYZ",We=16,rn=26,nn=28;function gn(e){let t=2166136261;for(let r=0;r<e.length;r++)t^=e[r],t=t*16777619>>>0;return t&1023}function pn(e){if(e.length!==We)throw new a(`A recovery code needs exactly ${We} bytes.`,{code:"INVALID_PARAMETER"});let t="",r=0,n=0;for(let s=0;s<e.length;s++)for(r=r<<8|e[s],n+=8;n>=5;)n-=5,t+=Ie[r>>n&31];n>0&&(t+=Ie[r<<5-n&31]);let i=gn(e);return t+=Ie[i>>5&31]+Ie[i&31],(t.match(/.{1,4}/g)||[]).join("-")}function hn(e){if(typeof e!="string")throw new a("Recovery code should be a string.",{code:"INVALID_PARAMETER"});let t=e.toUpperCase().replace(/[\s\-_]/g,"").replace(/O/g,"0").replace(/[IL]/g,"1");if(t.length!==nn)throw new a(`That does not look like a recovery code: expected ${nn} characters, got ${t.length}.`,{code:"ENCRYPTION_BAD_RECOVERY_CODE"});let r=t.slice(0,rn),n=t.slice(rn),i=0,s=0,o=[];for(let c=0;c<r.length;c++){let f=Ie.indexOf(r[c]);if(f<0)throw new a(`That does not look like a recovery code: "${r[c]}" is not a valid character.`,{code:"ENCRYPTION_BAD_RECOVERY_CODE"});i=i<<5|f,s+=5,s>=8&&(s-=8,o.push(i>>s&255));}let l=new Uint8Array(o.slice(0,We)),u=gn(l);if(n!==Ie[u>>5&31]+Ie[u&31])throw new a("That recovery code has a typo in it: the check characters do not match.",{code:"ENCRYPTION_BAD_RECOVERY_CODE"});return l}async function ir(e,t,r){let n=await ze(e,t,r,32),i=await oe(n);return q(n),i}var Zt=[83,75,69,78,67,70],mn=2,Qe=56,yn=16,ra=4*1024*1024;function sr(e){if(!e||e.length<Qe)return false;for(let t=0;t<Zt.length;t++)if(e[t]!==Zt[t])return false;return true}function Pe(e,t,r){e[t]=r>>>24&255,e[t+1]=r>>>16&255,e[t+2]=r>>>8&255,e[t+3]=r&255;}function De(e,t){return (e[t]<<24>>>0)+(e[t+1]<<16)+(e[t+2]<<8)+e[t+3]}function na(e,t,r){let n=Math.floor(r/4294967296);Pe(e,t,n),Pe(e,t+4,r>>>0);}function ia(e,t){return De(e,t)*4294967296+De(e,t+4)}async function bn(e,t,r,n,i,s){let o=K(`${Y}|binfile|${r}|${n}|${i}|${s}`),l=await ze(e,t,o,32),u=await oe(l);return q(l),u}async function _n(e){return (await bt(Xt(K(`${Y}|dekid`),e))).subarray(0,8)}function wn(e,t,r){return nr([`${Y}|binchunk`,V(e),t,r])}function sa(e,t,r,n,i,s){let o=new Uint8Array(Qe+s.length);return o.set(Zt,0),o[6]=mn,o[7]=s.length?1:0,Pe(o,8,e),Pe(o,12,t),o.set(r,16),na(o,32,n),o.set(i,40),Pe(o,48,s.length),Pe(o,52,0),s.length&&o.set(s,Qe),o}async function En(e,t,r,n,i=ra){let s=X(yn),o=await bn(e,s,r.service,r.owner,r.recordOwner,r.recordId),l=await _n(e),u=n?K(JSON.stringify(n)):new Uint8Array(0);if(u.length>4096)throw new a("Encrypted file metadata is too large.",{code:"INVALID_PARAMETER"});let c=t.length===0?1:Math.ceil(t.length/i),f=sa(i,c,s,t.length,l,u),g=await bt(f),d=[],p=f.length;for(let _=0;_<c;_++){let b=t.subarray(_*i,Math.min((_+1)*i,t.length)),A=await ne(o,b,wn(g,_,c));d.push(A),p+=4+A.iv.length+A.ct.length;}let h=new Uint8Array(p);h.set(f,0);let m=f.length;for(let _ of d)Pe(h,m,_.iv.length+_.ct.length),m+=4,h.set(_.iv,m),m+=_.iv.length,h.set(_.ct,m),m+=_.ct.length;return h}function oa(e){if(!sr(e))throw new a("This file is not an encrypted skapi file.",{code:"INVALID_PARAMETER"});let t=De(e,48),r=Qe+t;if(e.length<r)throw new a("Encrypted file header is truncated.",{code:"INVALID_REQUEST"});let n=null;return t&&(n=JSON.parse(He(e.subarray(Qe,r)))),{version:e[6],chunkBytes:De(e,8),count:De(e,12),fileId:e.subarray(16,16+yn),plainLen:ia(e,32),dekId:e.subarray(40,48),meta:n,headerLen:r}}async function An(e,t,r){let n=oa(t);if(n.version!==mn)throw new a(`This file was encrypted by a different version of the SDK (container v${n.version}).`,{code:"NOT_SUPPORTED"});if(!n.count||!n.chunkBytes)throw new a("Encrypted file header is malformed.",{code:"INVALID_PARAMETER"});let i=await _n(e);if(!ta(i,n.dekId))throw new a("This file was encrypted under a previous data key for this record, so it can no longer be opened. It was most likely left behind by an interrupted access change.",{code:"ENCRYPTION_FILE_STALE_KEY"});let s=await bn(e,n.fileId,r.service,r.owner,r.recordOwner,r.recordId),o=await bt(t.subarray(0,n.headerLen)),l=[],u=n.headerLen,c=0;for(let d=0;d<n.count;d++){if(u+4>t.length)throw new a("Encrypted file is truncated.",{code:"INVALID_REQUEST"});let p=De(t,u);if(u+=4,p<Ge+16||u+p>t.length)throw new a("Encrypted file is truncated.",{code:"INVALID_REQUEST"});let h=await ae(s,t.subarray(u,u+Ge),t.subarray(u+Ge,u+p),wn(o,d,n.count));u+=p,l.push(h),c+=h.length;}let f=new Uint8Array(c),g=0;for(let d of l)f.set(d,g),g+=d.length;return {bytes:f,meta:n.meta}}var aa="__skapi__keyring",Ye="__skapi_enc__",Tn=1,la="skapi-enc",Ae="keys",ar=new WeakMap;function In(e){if(!e)return null;if(e===true&&(e={}),typeof e!="object")throw new a('"options.encryption" should be a boolean or an object.',{code:"INVALID_PARAMETER"});let t=typeof e.iterations=="number"?e.iterations:sn;if(t<1e5)throw new a('"encryption.iterations" must be at least 100000.',{code:"INVALID_PARAMETER"});let r=e.trustPolicy==="strict"?"strict":"tofu";return {enabled:true,iterations:t,trustPolicy:r,persistDevice:e.persistDevice!==false,minPasswordLength:typeof e.minPasswordLength=="number"?e.minPasswordLength:0,withheld:e.withheld==="sentinel"?"sentinel":"null",recovery:e.recovery==="none"?"none":"code",table:typeof e.table=="string"&&e.table?e.table:aa}}function L(){return ar.get(this)||null}function Pn(e){if(!e){ar.delete(this);return}ar.set(this,{cfg:e,status:"locked",reason:"NO_SESSION_KEY",user_id:"",scope:"",mk:null,ikPriv:null,pubRaw:null,fpr:"",keyringRecordId:"",pins:{},dek:new Map,roll:new Set,passthrough:new Map,rawRead:false,ready:null,unlocking:false,pendingRecoveryCode:"",peerPub:new Map,peerInflight:new Map});}function lr(){let e=L.call(this);if(e){e.user_id&&_r.call(this,e).catch(()=>{}),e.ready=null,e.unlocking=false,e.pendingRecoveryCode="";for(let[,t]of e.dek)q(t.bytes);e.dek.clear(),e.roll.clear(),e.passthrough.clear(),e.peerPub.clear(),e.peerInflight.clear(),e.pins={},e.mk=null,e.ikPriv=null,e.pubRaw=null,e.fpr="",e.keyringRecordId="",e.user_id="",e.status="locked",e.reason="NO_SESSION_KEY";}}function Sn(){let e=L.call(this);return e?{status:e.status,reason:e.status==="unlocked"?void 0:e.reason,user_id:e.user_id||void 0,fingerprint:e.fpr||void 0}:{status:"disabled"}}function kn(e,t){return typeof t=="string"&&t===e.cfg.table}function xe(){return `${this.service}/${this.owner}`}function cr(e,t,r,n){let[i,s]=e.split("/");return nr([Y,i,s,t,r,n])}function vn(e,t,r,n,i){let[s,o]=e.split("/");return K(`${Y}|dekwrap|${s}|${o}|${t}|${r}|${n}|${i}`)}function ur(e){return e.anch==="uid"?e.uid:e.anch==="rid"?e.rid:""}function Et(e){return !!e&&typeof e=="object"&&!Array.isArray(e)&&typeof e[Ye]=="number"&&typeof e.ct=="string"&&typeof e.iv=="string"&&typeof e.own=="string"&&typeof e.anch=="string"&&!!e.k&&typeof e.k=="object"&&!Array.isArray(e.k)}var Nn="__skapi_no_access__";function ee(e,t,r){if(e.withheld!=="sentinel")return null;let n={[Nn]:true,reason:t};return r&&(n.recipients=r),Object.freeze(n)}function dr(e){return !!e&&typeof e=="object"&&e[Nn]===true}var ca=256*1024,et="__skenc_ct__",Dn="payload.bin",ua=`/${et}/${Dn}`;function fr(e,t){return e===et&&t===Dn}async function da(e,t,r){let n=t?.table,i=typeof n=="string"?n:n?.name;if(n&&(typeof n=="string"||n.access_group!==void 0))return {group:typeof n=="string"?0:Rn(n.access_group),table:i,record:null};if(!r)return {group:n?.access_group!==void 0?Rn(n.access_group):0,table:i,record:null};let s=e.dek.get(r);if(s)return {group:s.access_group,table:i,record:null};let o=await Ee.call(this,r);if(!o)throw new a(`Record "${r}" not found.`,{code:"NOT_EXISTS"});return {group:o.table.access_group,table:o.table.name,record:o}}function fa(e){return this.getFile(e,{dataType:"blob"})}async function Ee(e){let t=/^[a-zA-Z0-9]+$/.test(e)?{record_id:e}:{unique_id:e};return (await this.getRecords(t,{limit:1}))?.list?.[0]||null}function Rn(e){return e==="private"||e==="*"||e==="**"?"private":e==="public"?0:e==="authorized"?1:e==="admin"?99:typeof e=="number"?e:0}function or(e,t,r){let n=this.user?.user_id;if(!(!e||!e.user_id||!n||e.user_id===n))throw new a(`Record "${t}" belongs to another user (${e.user_id}), so ${r} would either seal it under the wrong key or strand its contents. Encryption only operates on records you own, no matter what access level you hold.`,{code:"ENCRYPTION_NOT_RECORD_OWNER"})}async function gr(e,t,r){let n=L.call(this);if(!n)return {send:e,plain:e,encrypted:false,omit:false};let i=t?.record_id||"",s=i,o=t?.unique_id||"";if(i&&n.passthrough.has(i)){let F=n.passthrough.get(i);return n.passthrough.delete(i),{send:F,plain:e,encrypted:true,omit:false}}let{group:l,table:u,record:c}=await da.call(this,n,t,s);if(l!=="private"){let F=true;if(!r&&i){let z=c||await Ee.call(this,i);if(z&&z.encrypted){if(or.call(this,z,i,"making it non-private"),z.encrypted.status==="failed")throw new a(`Cannot make record "${i}" non-private: its current contents could not be decrypted (${z.encrypted.reason}), so they cannot be written back in the clear. Unlock encryption, or supply the record's data with the access group change.`,{code:"ENCRYPTION_LOCKED"});let Be=!!z.bin&&Object.keys(z.bin).some(gt=>(z.bin[gt]||[]).some(Wr=>Wr&&Wr.encrypted));if(!Be&&s){let gt=n.dek.get(s);gt&&(q(gt.bytes),n.dek.delete(s));}return {send:z.data,plain:z.data,encrypted:false,omit:false,files:Be?"decrypt":void 0}}}let J=c;i&&!J&&(J=await Ee.call(this,i).catch(()=>null)),J&&J.encrypted&&or.call(this,J,i,"making it non-private");let ft=!!J&&!!J.bin&&Object.keys(J.bin).some(z=>(J.bin[z]||[]).some(Be=>Be&&Be.encrypted));if(ft&&(F=false),F&&s){let z=n.dek.get(s);z&&(q(z.bytes),n.dek.delete(s));}return {send:e,plain:e,encrypted:false,omit:!r,files:ft?"decrypt":void 0}}if(kn(n,u))return {send:e,plain:e,encrypted:false,omit:false};if(n.ready&&!n.unlocking)try{await n.ready;}catch{}if(!r)return {send:e,plain:e,encrypted:false,omit:true};if(dr.call(this,e))throw new a("This record's data could not be decrypted by this session, so it cannot be written back. Writing it would replace the record with the placeholder.",{code:"ENCRYPTION_CANNOT_REWRITE_WITHHELD"});if(n.status!=="unlocked"||!n.mk)throw new a("Encryption is enabled but locked, so this private record cannot be written. Call unlockEncryption({ password }) first, or the user must log in with their password.",{code:"ENCRYPTION_LOCKED"});if(e&&typeof e=="object"&&!Array.isArray(e)&&Object.prototype.hasOwnProperty.call(e,Ye))throw new a(`"${Ye}" is a reserved key in record data.`,{code:"INVALID_PARAMETER"});if(t?.service&&t.service!==this.service||t?.owner&&t.owner!==this.owner)throw new a("Encrypted records cannot be written to another project. The encryption key is derived per project, so a record written under one service and read under another could never be decrypted. Construct a separate Skapi instance for that project.",{code:"INVALID_REQUEST"});let f=this.user?.user_id;if(!f)throw new a("User login is required to write an encrypted record.",{code:"INVALID_REQUEST"});let g=xe.call(this),d=false;if(i&&n.roll.has(i)){d=true,n.roll.delete(i);let F=n.dek.get(i);n.dek.delete(i),F&&q(F.bytes);}let p=c;i&&!p&&!n.dek.has(i)&&(p=await Ee.call(this,i).catch(()=>null)),p&&or.call(this,p,i,"making it private");let h=!!p&&!p.encrypted&&!!p.bin&&Object.keys(p.bin).some(F=>(p.bin[F]||[]).some(J=>J&&!J.encrypted)),m=null;if(i&&!d&&(m=n.dek.get(i)||null,!m)){let F=p||c||await Ee.call(this,i);if(F&&(s=F.record_id||i,m=n.dek.get(s)||null,!o&&F.unique_id&&(o=F.unique_id),!m&&F.encrypted?.status==="failed"))throw new a(`Cannot update encrypted record "${i}": its current contents could not be decrypted (${F.encrypted.reason}), so its existing key wraps cannot be preserved. Updating anyway would revoke everyone it is shared with.`,{code:"ENCRYPTION_LOCKED"})}s===i&&m&&m.rid&&(s=m.rid),!o&&m&&m.anch==="uid"&&m.uid&&(o=m.uid);let _,b,A;if(m){if(m.own&&m.own!==f)throw new a(`Record "${i}" belongs to another user (${m.own}). Encryption only operates on records you own.`,{code:"ENCRYPTION_NOT_RECORD_OWNER"});_=m.bytes,b=m.key,A=Object.assign({},m.recipients);}else {let F=await ln();_=F.bytes,b=F.key,A={};}let w=o?"uid":s?"rid":"new",I=w==="uid"?o:w==="rid"?s:"",E=cr(g,f,w,I),N=Je(E,f,"mk"),C=await ne(n.mk,_,N);A[f]={t:"mk",iv:V(C.iv),ct:V(C.ct)},m&&(m.anch!==w||ur(m)!==I)&&(A=await ga.call(this,n,_,A,g,f,w,I,E));let D=K(JSON.stringify(e===void 0?null:e)),v=await ne(b,D,E);q(D);let U={[Ye]:Tn,enc:"A256GCM",kw:"ECDH-ES+A256GCM",anch:w,uid:o,rid:s,own:f,iv:V(v.iv),ct:V(v.ct),k:A},x,M,de=U.ct;s&&de.length>ca&&(x=$(de),U.ct="",U.ct_ref=ua,m&&m.ctRef&&(M=m.ctRef));let ie=JSON.stringify(U).length;if(ie>2*1024*1024)throw new a(`Encrypted record data is too large: once encrypted and base64 encoded it becomes ${ie} bytes, over the ${2*1024*1024} byte limit. Encryption costs about 33% plus roughly 230 bytes per additional recipient.`,{code:"ENCRYPTED_DATA_TOO_LARGE"});return s&&n.dek.set(s,{bytes:_,key:b,recipients:A,anch:w,uid:o,rid:s,own:f,access_group:"private"}),{send:U,plain:e,encrypted:true,omit:false,spill:x,retireCt:M,dek:{bytes:_,key:b,recipients:A,anch:w,uid:o,rid:s,own:f,access_group:"private"},files:h?"encrypt":void 0}}function Un(e,t){let r=L.call(this);!r||!t||!e||r.dek.has(e)||r.dek.set(e,Object.assign({},t,{rid:e}));}async function ga(e,t,r,n,i,s,o,l){let u=Object.keys(r).filter(g=>g!==i);if(!u.length)return r;let c=await wr.call(this,u),f={[i]:r[i]};for(let g of u){let d=c[g];d&&(f[g]=await xn.call(this,t,d,n,o,i,g,l));}return f}async function xn(e,t,r,n,i,s,o){let l=vn(r,n,i,s,t.fpr),u=Je(o,s,t.fpr),c=await dn(t.pubRaw,e,l,u);return {t:"ecdh",epk:V(c.epk),iv:V(c.iv),ct:V(c.ct),fpr:t.fpr}}async function Cn(e,t){if(!Et(e))return {value:e};if(t.access_group!=="private")return {value:e};let r=L.call(this);if(!r)return {value:null,flag:{status:"failed",reason:"ENCRYPTION_DISABLED"}};if(r.rawRead)return {value:e};if(kn(r,t.table_name))return {value:e};if(e[Ye]!==Tn)return {value:ee(r.cfg,"UNSUPPORTED_VERSION"),flag:{status:"failed",reason:"UNSUPPORTED_VERSION"}};if(r.ready&&!r.unlocking)try{await r.ready;}catch{}if(e.own!==t.user_id)return {value:ee(r.cfg,"BINDING_MISMATCH"),flag:{status:"failed",reason:"BINDING_MISMATCH"}};if(e.uid&&t.unique_id&&e.uid!==t.unique_id)return {value:ee(r.cfg,"BINDING_MISMATCH"),flag:{status:"failed",reason:"BINDING_MISMATCH"}};if(e.rid&&t.record_id&&e.rid!==t.record_id)return {value:ee(r.cfg,"BINDING_MISMATCH"),flag:{status:"failed",reason:"BINDING_MISMATCH"}};let n=this.user?.user_id,i=n?e.k[n]:null;if(!i)return {value:ee(r.cfg,"NOT_A_RECIPIENT",Object.keys(e.k)),flag:{status:"failed",reason:"NOT_A_RECIPIENT",recipients:Object.keys(e.k)}};if(r.status!=="unlocked"||!r.mk)return {value:ee(r.cfg,"NO_SESSION_KEY"),flag:{status:"failed",reason:"NO_SESSION_KEY"}};let s=xe.call(this),o=ur(e),l=cr(s,e.own,e.anch,o),u;try{if(i.t==="mk")u=await ae(r.mk,$(i.iv),$(i.ct),Je(l,n,"mk"));else if(i.t==="ecdh"){if(!r.ikPriv)return {value:ee(r.cfg,"NO_SESSION_KEY"),flag:{status:"failed",reason:"NO_SESSION_KEY"}};u=await fn(r.ikPriv,$(i.epk),$(i.iv),$(i.ct),vn(s,o,e.own,n,i.fpr),Je(l,n,i.fpr));}else return {value:ee(r.cfg,"UNSUPPORTED_VERSION"),flag:{status:"failed",reason:"UNSUPPORTED_VERSION"}}}catch{return {value:ee(r.cfg,"BAD_KEY"),flag:{status:"failed",reason:"BAD_KEY"}}}let c;try{if(e.ct_ref){if(!t.ctUrl)return q(u),{value:ee(r.cfg,"DATA_UNAVAILABLE"),flag:{status:"failed",reason:"DATA_UNAVAILABLE"}};let p=await fa.call(this,t.ctUrl);c=new Uint8Array(await p.arrayBuffer());}else c=$(e.ct);}catch{return q(u),{value:ee(r.cfg,"DATA_UNAVAILABLE"),flag:{status:"failed",reason:"DATA_UNAVAILABLE"}}}let f,g;try{g=await oe(u),f=await ae(g,$(e.iv),c,l);}catch{return q(u),{value:ee(r.cfg,"CORRUPT"),flag:{status:"failed",reason:"CORRUPT"}}}let d;try{d=JSON.parse(He(f));}catch{return q(f),q(u),{value:ee(r.cfg,"CORRUPT"),flag:{status:"failed",reason:"CORRUPT"}}}if(q(f),t.record_id){let p=r.dek.get(t.record_id);p?(p.bytes=u,p.key=g,p.recipients=e.k,p.anch=e.anch,p.uid=e.uid,p.own=e.own,p.access_group="private",p.ctRef=e.ct_ref||""):r.dek.set(t.record_id,{bytes:u,key:g,recipients:e.k,anch:e.anch,uid:e.uid,rid:t.record_id,own:e.own,access_group:"private",ctRef:e.ct_ref||""});}else q(u);return {value:d,flag:{status:"encrypted",recipients:Object.keys(e.k)}}}function Xe(e,t){let[r,n]=e.split("/");return K(`${Y}|kek|${r}|${n}|${t}`)}function Ze(e,t,r,n){let[i,s]=e.split("/");return K(`${Y}|mk|${i}|${s}|${t}|PBKDF2-SHA256|${r}|${n}`)}function On(e,t){let[r,n]=e.split("/");return K(`${Y}|recovery|${r}|${n}|${t}`)}function Ln(e,t,r){let[n,i]=e.split("/");return K(`${Y}|rk|${n}|${i}|${t}|HKDF-SHA256|${r}`)}function Mn(e,t){let[r,n]=e.split("/");return K(`${Y}|self|${r}|${n}|${t}`)}function Fn(e,t){let[r,n]=e.split("/");return K(`${Y}|ik|${r}|${n}|${t}`)}async function At(e){let r=((await this.getRecords({table:{name:e.cfg.table,access_group:"private"},index:{name:"$user_id",value:this.user.user_id,condition:"="}},{limit:2}))?.list||[]).filter(n=>n.user_id===this.user.user_id);return r.length?(r.sort((n,i)=>n.uploaded-i.uploaded),r[0]):null}async function pr(e,t,r){let n=X(We),i=pn(n),s=X(16),o=V(s),l=await ir(n,s,On(e,t)),u=await ne(l,r,Ln(e,t,o));return q(n),{code:i,wrap:{id:V(X(6)),p:"recovery",kdf:{a:"HKDF-SHA256",s:o},iv:V(u.iv),ct:V(u.ct),created:Date.now()}}}async function pa(e,t,r,n){let i=hn(n),s=(r||[]).filter(o=>o.p==="recovery");s.sort((o,l)=>(l.created||0)-(o.created||0));for(let o of s)try{let l=await ir(i,$(o.kdf.s),On(e,t)),u=await ae(l,$(o.iv),$(o.ct),Ln(e,t,o.kdf.s));return q(i),u}catch{}return q(i),null}async function ha(e,t,r,n,i){let s=X(16),o=V(s),l=await Ue(n,s,e.cfg.iterations,Xe(t,r)),u=await ne(l,i,Ze(t,r,e.cfg.iterations,o));return {id:V(X(6)),p:"password",kdf:{a:"PBKDF2-SHA256",it:e.cfg.iterations,s:o},iv:V(u.iv),ct:V(u.ct),created:Date.now()}}async function ma(e,t){let r=this.user.user_id,n=e.scope,i=X(16),s=V(i),o=await Ue(t,i,e.cfg.iterations,Xe(n,r)),l=X(32),u=await ne(o,l,Ze(n,r,e.cfg.iterations,s)),c=await oe(l),f=await cn(),g=await ne(c,f.pkcs8,Fn(n,r));q(f.pkcs8);let d=null;e.cfg.recovery==="code"&&(d=await pr(n,r,l));let p=await ne(c,l,Mn(n,r));q(l);let h=await rr(f.pubRaw),m=Date.now(),_=[{id:V(X(6)),p:"password",kdf:{a:"PBKDF2-SHA256",it:e.cfg.iterations,s},iv:V(u.iv),ct:V(u.ct),created:m}];d&&_.push(d.wrap);let b={v:1,alg:"ECDH-P-256",user_id:r,wraps:_,ik:{iv:V(g.iv),ct:V(g.ct)},self:{iv:V(p.iv),ct:V(p.ct)},pub:V(f.pubRaw),fpr:h,pins:null,created:m,updated:m};await this.postRecord({v:1,alg:"ECDH-P-256",user_id:r,pub:V(f.pubRaw),fpr:h,created:m},{table:{name:e.cfg.table,access_group:"authorized"},index:{name:"pubkey",value:r}});let A=await this.postRecord(b,{table:{name:e.cfg.table,access_group:"private"}}),w=await At.call(this,e);if(w&&w.record_id!==A.record_id){await qn.call(this,e,w,t);return}e.mk=c,e.ikPriv=f.priv,e.pubRaw=f.pubRaw,e.fpr=h,e.keyringRecordId=A.record_id,d&&(e.pendingRecoveryCode=d.code),e.user_id=r,e.pins={},e.status="unlocked",e.reason="";}async function qn(e,t,r){let n=this.user.user_id,i=e.scope,s=t.data;if(t.user_id!==n||s&&s.user_id&&s.user_id!==n)throw new a("The encryption keyring does not belong to this user.",{code:"ENCRYPTION_KEYRING_CORRUPT"});let l=(Array.isArray(s?.wraps)?s.wraps:[]).filter(f=>f.p==="password");if(!l.length)throw new a("The keyring has no password wrap.",{code:"ENCRYPTION_KEYRING_CORRUPT"});l.sort((f,g)=>(g.created||0)-(f.created||0));let u=null;for(let f of l)try{let g=$(f.kdf.s),d=await Ue(r,g,f.kdf.it,Xe(i,n));u=await ae(d,$(f.iv),$(f.ct),Ze(i,n,f.kdf.it,f.kdf.s));break}catch{}if(!u)throw new a("Incorrect password: the encryption keyring could not be opened.",{code:"ENCRYPTION_BAD_PASSWORD"});let c=await oe(u);q(u),await hr.call(this,e,t,c);}async function hr(e,t,r){let n=this.user.user_id,i=t.data,s=await ae(r,$(i.ik.iv),$(i.ik.ct),Fn(e.scope,n)),o=await tr(s);q(s);let l={};if(i.pins&&typeof i.pins=="object"&&i.pins.ct)try{let u=await ae(r,$(i.pins.iv),$(i.pins.ct),K(`${Y}|pins|${e.scope}|${n}`));l=JSON.parse(He(u)),q(u);}catch{l={};}e.mk=r,e.ikPriv=o,e.pubRaw=$(i.pub),e.fpr=i.fpr,e.keyringRecordId=t.record_id,e.user_id=n,e.pins=l,e.status="unlocked",e.reason="";}async function Rt(e){let t=L.call(this);if(!t||!this.user?.user_id)return;if(!er()){t.status="locked",t.reason="NO_WEB_CRYPTO";return}if(this.user?.is_openid){t.status="locked",t.reason="OPENID_UNSUPPORTED";return}if(t.cfg.minPasswordLength&&e.length<t.cfg.minPasswordLength){t.status="locked",t.reason="WEAK_PASSWORD";return}t.scope=xe.call(this);let r=await At.call(this,t);r?await qn.call(this,t,r,e):await ma.call(this,t,e),t.cfg.persistDevice&&await Kn.call(this,t).catch(()=>{});}async function Vn(e){await this.__connection;let t=L.call(this);if(!t)throw new a("Encryption is not enabled for this instance.",{code:"INVALID_REQUEST"});if(!this.user?.user_id)throw new a("User login is required.",{code:"INVALID_REQUEST"});if(!e?.password||typeof e.password!="string")throw new a('"password" is required.',{code:"INVALID_PARAMETER"});if(await Rt.call(this,e.password),t.status!=="unlocked")throw new a(`Encryption could not be unlocked: ${t.reason}`,{code:"ENCRYPTION_LOCKED"});return {status:t.status}}async function jn(e){this.__projectIdInput&&await this.__projectIdInput;let t=L.call(this);return t?(e?.forgetDevice&&await _r.call(this,t).catch(()=>{}),lr.call(this),this.__cached_requests={},{status:t.status}):{status:"disabled"}}async function $n(e,t){let r=L.call(this);if(!r)return;if(r.status!=="unlocked"||!r.mk)throw new a("Encryption must be unlocked before changing the password, or the encryption keyring would be left wrapped under a password that no longer exists. Call unlockEncryption({ password }) first.",{code:"ENCRYPTION_LOCKED"});let i=(await this.getRecords({record_id:r.keyringRecordId},{limit:1}))?.list?.[0];if(!i)throw new a("The encryption keyring could not be read, so the password change was stopped before it could strand it.",{code:"ENCRYPTION_KEYRING_CORRUPT"});let s=this.user.user_id,o=i.data,l=(o.wraps||[]).filter(m=>m.p==="password");l.sort((m,_)=>(_.created||0)-(m.created||0));let u=null;for(let m of l)try{let _=await Ue(e,$(m.kdf.s),m.kdf.it,Xe(r.scope,s));u=await ae(_,$(m.iv),$(m.ct),Ze(r.scope,s,m.kdf.it,m.kdf.s));break}catch{}if(!u)throw new a("Incorrect current password: the encryption keyring was not re-wrapped.",{code:"ENCRYPTION_BAD_PASSWORD"});let c=X(16),f=V(c),g=await Ue(t,c,r.cfg.iterations,Xe(r.scope,s)),d=await ne(g,u,Ze(r.scope,s,r.cfg.iterations,f));q(u);let p=Date.now(),h=(o.wraps||[]).concat([{id:V(X(6)),p:"password",kdf:{a:"PBKDF2-SHA256",it:r.cfg.iterations,s:f},iv:V(d.iv),ct:V(d.ct),created:p}]);await this.postRecord(Object.assign({},o,{wraps:h,updated:p}),{record_id:r.keyringRecordId});}async function Bn(){let e=L.call(this);if(!e||e.status!=="unlocked"||!e.keyringRecordId)return;let r=(await this.getRecords({record_id:e.keyringRecordId},{limit:1}))?.list?.[0];if(!r)return;let n=r.data,i=(n.wraps||[]).filter(o=>o.p==="password").sort((o,l)=>(l.created||0)-(o.created||0)),s=(n.wraps||[]).filter(o=>o.p!=="password");i.length<=1||await this.postRecord(Object.assign({},n,{wraps:[i[0]].concat(s),updated:Date.now()}),{record_id:e.keyringRecordId});}function mr(){return typeof indexedDB<"u"&&!!indexedDB}function yr(){return new Promise((e,t)=>{let r=indexedDB.open(la,1);r.onupgradeneeded=()=>{let n=r.result;n.objectStoreNames.contains(Ae)||n.createObjectStore(Ae);},r.onsuccess=()=>e(r.result),r.onerror=()=>t(r.error);})}function br(e){return `${e.scope}#${this.user?.user_id}`}async function Kn(e){if(!mr()||!e.mk)return;let t=await yr();await new Promise((r,n)=>{let i=t.transaction(Ae,"readwrite");i.objectStore(Ae).put({mk:e.mk,keyringRecordId:e.keyringRecordId,saved:Date.now()},br.call(this,e)),i.oncomplete=()=>r(),i.onerror=()=>n(i.error);}),t.close();}async function ya(e){if(!mr())return null;let t=await yr(),r=await new Promise((n,i)=>{let o=t.transaction(Ae,"readonly").objectStore(Ae).get(br.call(this,e));o.onsuccess=()=>n(o.result||null),o.onerror=()=>i(o.error);});return t.close(),r&&r.mk?r:null}async function _r(e){if(!mr())return;let t=await yr();await new Promise((r,n)=>{let i=t.transaction(Ae,"readwrite");i.objectStore(Ae).delete(br.call(this,e)),i.oncomplete=()=>r(),i.onerror=()=>n(i.error);}),t.close();}function Hn(){let e=L.call(this);!e||e.ready||(e.unlocking=true,e.ready=ba.bind(this)().catch(()=>false).then(()=>{e.unlocking=false;}));}async function ba(){let e=L.call(this);if(!e||!this.user?.user_id||!e.cfg.persistDevice||!er())return false;e.scope=xe.call(this);try{let t=await ya.call(this,e);if(!t)return !1;let r=await At.call(this,e);return r?(await hr.call(this,e,r,t.mk),!0):(await _r.call(this,e).catch(()=>{}),!1)}catch{return e.status="locked",e.reason="NO_SESSION_KEY",false}}async function wr(e){let t=L.call(this);if(!t)throw new a("Encryption is not enabled for this instance.",{code:"INVALID_REQUEST"});let r={},n=[],i=false;for(let s of e){let o=t.peerPub.get(s);o?r[s]=o:n.push(s);}return await Promise.all(n.map(async s=>{let o=t.peerInflight.get(s);o||(o=(async()=>{let c=((await this.getRecords({table:{name:t.cfg.table,access_group:"authorized"},index:{name:"$user_id",value:s,condition:"="}},{limit:10}))?.list||[]).filter(p=>p.user_id===s&&p.data?.pub);if(!c.length)return null;c.sort((p,h)=>h.uploaded-p.uploaded);let f=$(c[0].data.pub),g=await rr(f),d=t.pins[s];if(d&&d!==g)throw new a(`The public key for user "${s}" has changed since it was first seen. This is expected if they reset their account, and is what a key substitution attack also looks like. Verify the new fingerprint out of band, then call pinPeerKey({ user_id, fingerprint }).`,{code:"ENCRYPTION_PEER_KEY_CHANGED"});if(!d){if(t.cfg.trustPolicy==="strict")throw new a(`No pinned key for user "${s}" and trustPolicy is "strict". Pin it first with pinPeerKey().`,{code:"ENCRYPTION_PEER_NOT_PINNED"});t.pins[s]=g,i=true;}return {pubRaw:f,fpr:g}})().finally(()=>t.peerInflight.delete(s)),t.peerInflight.set(s,o));let l=await o;l&&t.peerPub.set(s,l),r[s]=l;})),i&&await zn.call(this,t).catch(()=>{}),r}async function Gn(e,t){let r=xe.call(this),n=e.dek.get(t);if(n)return {entry:n,scope:r};let i=await Ee.call(this,t);if(!i)throw new a(`Record "${t}" not found.`,{code:"NOT_EXISTS"});if(i.encrypted?.status==="failed"&&i.encrypted.reason==="DATA_UNAVAILABLE")throw new a(`Cannot change sharing on record "${t}": its data could not be read, so whether it is encrypted is unknown. Retry once the record reads normally.`,{code:"ENCRYPTION_DATA_UNAVAILABLE"});if(!i.encrypted)return null;if(i.user_id!==this.user?.user_id)throw new a("Only the record owner can share or revoke an encrypted record, because adding or removing a key wrap means writing the record.",{code:"ENCRYPTION_GRANT_REQUIRES_OWNER"});let s=e.dek.get(i.record_id)||e.dek.get(t);if(!s)throw new a(`Cannot change sharing on record "${t}": its data could not be decrypted`+(i.encrypted.reason?` (${i.encrypted.reason})`:"")+".",{code:"ENCRYPTION_LOCKED"});return {entry:s,scope:r}}async function Er(e,t){let r=L.call(this);if(!r)return;let n=await Gn.call(this,r,e);if(!n)return;let{entry:i,scope:s}=n,o=this.user.user_id;if(i.own!==o)throw new a("Only the record owner can share an encrypted record, because adding a key wrap means writing the record.",{code:"ENCRYPTION_GRANT_REQUIRES_OWNER"});let l=await wr.call(this,t),u=t.filter(d=>!l[d]);if(u.length)throw new a(`These users have no encryption key yet, so they cannot be given access: ${u.join(", ")}. A user's key is created the first time they log in with encryption enabled.`,{code:"ENCRYPTION_RECIPIENT_HAS_NO_KEY"});let c=ur(i),f=cr(s,i.own,i.anch,c),g=Object.assign({},i.recipients);for(let d of t)d!==o&&(g[d]=await xn.call(this,i.bytes,l[d],s,c,i.own,d,f));await wa.call(this,r,e,i,g);}async function Wn(e,t){let r=L.call(this);if(!r)return;let n=await Gn.call(this,r,e);if(!n)return;let{entry:i}=n,s=this.user.user_id;if(i.own!==s)throw new a("Only the record owner can revoke access to an encrypted record.",{code:"ENCRYPTION_GRANT_REQUIRES_OWNER"});let o=Object.keys(i.recipients).filter(c=>c===s?true:t?!t.includes(c):false).filter(c=>c!==s),l=await Ee.call(this,e);if(!l)throw new a(`Record "${e}" not found.`,{code:"NOT_EXISTS"});_a(l,e);let u={};if(o.length){u=await wr.call(this,o);let c=o.filter(f=>!u[f]);if(c.length)throw new a(`Cannot revoke on record "${e}": these users keep access but their encryption keys could not be read, so re-sharing after the key roll would fail and lock them out: ${c.join(", ")}.`,{code:"ENCRYPTION_RECIPIENT_HAS_NO_KEY"})}r.roll.add(l.record_id||e),await this.postRecord(l.data,{record_id:l.record_id||e,table:{name:l.table.name,access_group:"private"}}),o.length&&await Er.call(this,l.record_id||e,o);}function _a(e,t){if(e?.encrypted?.status==="failed")throw new a(`Cannot change sharing on record "${t}": its current data could not be read (${e.encrypted.reason}), so re-writing the record would destroy it.`,{code:"ENCRYPTION_DATA_UNAVAILABLE"})}async function wa(e,t,r,n){let i=await Ea.call(this,t);if(!i)throw new a(`Cannot change sharing on record "${t}": its stored envelope could not be read.`,{code:"ENCRYPTION_DATA_UNAVAILABLE"});r.recipients=n,e.dek.set(t,r);let s=Object.assign({},i,{k:n});e.passthrough.set(t,s),await this.postRecord(void 0,{record_id:t});}async function Ea(e){let t=L.call(this);if(!t)return null;t.rawRead=true;let r;try{r=(await this.getRecords({record_id:e},{limit:1}))?.list?.[0];}finally{t.rawRead=false;}return r&&Et(r.data)?r.data:null}async function Qn(e){this.__projectIdInput&&await this.__projectIdInput;let t=L.call(this);if(!t||t.status!=="unlocked")throw new a("Encryption is locked.",{code:"ENCRYPTION_LOCKED"});t.pins[e.user_id]=e.fingerprint,t.peerPub.delete(e.user_id),await zn.call(this,t);}async function zn(e){if(!e.mk||!e.keyringRecordId)return;let r=(await this.getRecords({record_id:e.keyringRecordId},{limit:1}))?.list?.[0];if(!r)return;let n=await ne(e.mk,K(JSON.stringify(e.pins)),K(`${Y}|pins|${e.scope}|${e.user_id}`));await this.postRecord(Object.assign({},r.data,{pins:{iv:V(n.iv),ct:V(n.ct)},updated:Date.now()}),{record_id:e.keyringRecordId});}function Jn(){let e=L.call(this);if(!e||!e.pendingRecoveryCode)return null;let t=e.pendingRecoveryCode;return e.pendingRecoveryCode="",t}async function Yn(e){await this.__connection;let t=L.call(this);if(!t)throw new a("Encryption is not enabled for this instance.",{code:"INVALID_REQUEST"});if(!this.user?.user_id)throw new a("User login is required. Reset the password and log in first, then use the recovery code.",{code:"INVALID_REQUEST"});if(!e?.code||typeof e.code!="string")throw new a('"code" is required.',{code:"INVALID_PARAMETER"});t.scope=xe.call(this);let r=this.user.user_id,n=await At.call(this,t);if(!n)throw new a("This account has no encryption keyring, so there is nothing to recover.",{code:"NOT_EXISTS"});let i=await pa(t.scope,r,n.data?.wraps||[],e.code);if(!i)throw new a("That recovery code did not open the keyring. Check it against the copy you saved when encryption was set up.",{code:"ENCRYPTION_BAD_RECOVERY_CODE"});let s=await oe(i);await hr.call(this,t,n,s);let o=false,l=null,u=(n.data?.wraps||[]).slice();if(e.password&&(u=u.filter(c=>c.p!=="password"),u.push(await ha(t,t.scope,r,e.password,i)),o=true),t.cfg.recovery==="code"){let c=await pr(t.scope,r,i);u=u.filter(f=>f.p!=="recovery"),u.push(c.wrap),l=c.code;}return q(i),await this.postRecord(Object.assign({},n.data,{wraps:u,updated:Date.now()}),{record_id:n.record_id}),t.cfg.persistDevice&&await Kn.call(this,t).catch(()=>{}),{status:t.status,repaired:o,recoveryCode:l}}async function Xn(){await this.__connection;let e=L.call(this);if(!e)throw new a("Encryption is not enabled for this instance.",{code:"INVALID_REQUEST"});if(e.status!=="unlocked"||!e.mk)throw new a("Encryption must be unlocked to issue a recovery code. Only someone who can already decrypt can create one.",{code:"ENCRYPTION_LOCKED"});if(e.cfg.recovery!=="code")throw new a('Recovery codes are disabled for this instance ("recovery" is "none").',{code:"INVALID_REQUEST"});let r=(await this.getRecords({record_id:e.keyringRecordId},{limit:1}))?.list?.[0];if(!r)throw new a("The encryption keyring could not be read.",{code:"ENCRYPTION_KEYRING_CORRUPT"});let n=r.data?.self;if(!n||!n.ct)throw new a("This keyring predates recovery-code rotation and cannot issue a new code. Use unlockWithRecoveryCode() with the existing code, which issues a replacement.",{code:"ENCRYPTION_KEYRING_CORRUPT"});let i=await ae(e.mk,$(n.iv),$(n.ct),Mn(e.scope,e.user_id)),s=await pr(e.scope,e.user_id,i);q(i);let o=(r.data.wraps||[]).filter(l=>l.p!=="recovery").concat([s.wrap]);return await this.postRecord(Object.assign({},r.data,{wraps:o,updated:Date.now()}),{record_id:e.keyringRecordId}),{recoveryCode:s.code}}var wt="__skenc__",Zn="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";function Aa(e){if(e===0)return "0";let t="";for(;e>0;)t=Zn[e%62]+t,e=Math.floor(e/62);return t}function Ra(e){let t=0;for(let r of e){let n=Zn.indexOf(r);if(n<0)return NaN;t=t*62+n;}return t}function Tt(e){if(typeof e!="string")return null;let t=e.lastIndexOf(wt);if(t<0)return null;let r=Ra(e.slice(t+wt.length));return Number.isFinite(r)?{key:e.slice(0,t),plainSize:r}:null}function Ar(e){try{let t=String(e).split("?")[0].split("/").slice(3);if(t.length<12||t[4]!=="records"||t[7]!=="bin")return null;let r=Tt(t[10]);return r?{recordId:t[5],recordOwner:t[3],filename:t[t.length-1],plainSize:r.plainSize}:null}catch{return null}}function ei(e,t){return {service:this.service,owner:this.owner,recordOwner:t,recordId:e}}async function ti(e,t,r){let n=L.call(this);if(!n||!e)return {key:t,file:r,encrypted:false};let i=n.dek.get(e);if(!i)return {key:t,file:r,encrypted:false};if(Tt(t))throw new a(`"${wt}" is reserved in an upload form key.`,{code:"INVALID_PARAMETER"});if(t===et)return {key:t,file:r,encrypted:false};let s=new Uint8Array(await r.arrayBuffer()),o={n:r.name,t:r.type||"",lm:r.lastModified||0},l=await En(i.bytes,s,ei.call(this,e,i.own),o);return q(s),{key:`${t}${wt}${Aa(r.size)}`,file:new File([l],r.name,{type:"application/octet-stream"}),encrypted:true}}async function ri(e,t){let r=L.call(this),n=Ar(e);if(!r||!n)return t;let i=r.dek.get(n.recordId);if(!i)throw new a(`Cannot open this file: the data key for record "${n.recordId}" is not available. Read the record first, and make sure encryption is unlocked.`,{code:"ENCRYPTION_LOCKED"});let s=new Uint8Array(await t.arrayBuffer());if(!sr(s))throw new a("This file is marked as encrypted but its contents are not an encrypted container.",{code:"ENCRYPTION_FILE_CORRUPT"});let o=await An(i.bytes,s,ei.call(this,n.recordId,n.recordOwner)),l=o.meta&&o.meta.t||"application/octet-stream";return new Blob([o.bytes],{type:l})}function Ta(e){let t=[];for(let r in e?.bin||{})for(let n of e.bin[r]||[])n&&n.encrypted&&t.push({formKey:r,url:n.url,filename:n.filename});return t}function Ia(e){let t=[];for(let r in e?.bin||{})for(let n of e.bin[r]||[])n&&!n.encrypted&&t.push({formKey:r,url:n.url,filename:n.filename});return t}async function Rr(e,t,r){let n=L.call(this);if(!n)return [];let i=await Ee.call(this,e);if(!i)return [];let s=t==="decrypt"?Ta(i):Ia(i);if(!s.length)return [];let o=[],l=new FormData,u=false;for(let c of s){let f=i.bin[c.formKey].find(d=>d.url===c.url);if(!f||typeof f.getFile!="function")continue;let g=await f.getFile("blob");g&&(l.append(c.formKey,new File([g],c.filename,{type:g.type||"application/octet-stream"})),o.push(c.url),u=true);}if(!u)return [];if(t==="decrypt"){let c=n.dek.get(e);c&&(q(c.bytes),n.dek.delete(e));}return await this.uploadFiles(l,{record_id:e,progress:r}),o}var B=null;function St(e){let t={tkid:"ticket_id",cond:"condition",stmp:"timestamp",upd:"updated",acts:"actions",actn:"action",cnt:"count",ttl:"time_to_live",plch:"placeholder",hash:"hash",desc:"description",pmc:"limit_per_user",fail:"failed",rv:"rules_version"},r={};for(let n in e)if(n==="tkid"){let i=e[n].split("#");if(i.length===1){r.ticket_id=i[0];continue}r.ticket_id=i[1],r.consume_id=i[2],r.user_id=i.slice(3).join("#");let s=i[2].slice(-4);if(r.is_test=s===":CHK",!e.stmp){let o=i[2].slice(0,-4);/^[0-9]+$/.test(o)?r.timestamp=parseInt(o,10):r.timestamp=se(i[2].slice(0,-4));}}else t[n]?r[t[n]]=e[n]:r[n]=e[n];return r}async function ii(e){if(!e?.ticket_id)throw new a("Ticket ID is required.",{code:"INVALID_PARAMETER"});if(!/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/.test(e.ticket_id))throw new a('Invalid "ticket_id". Use letters, digits, "_" and "-" (up to 64 chars, starting with a letter or digit).',{code:"INVALID_PARAMETER"});if(!e.method)throw new a('Method is required. Should be either "GET" or "POST"',{code:"INVALID_PARAMETER"});let t=String(e.method).toUpperCase();if(t!=="GET"&&t!=="POST")throw new a('Method should be either "GET" or "POST".',{code:"INVALID_PARAMETER"});let r=!!e.auth;if(r&&t==="GET")throw new a("Signed-in consumption is POST only.",{code:"INVALID_PARAMETER"});await this.__connection;let n=r?"tpa":t==="GET"?"tg":"tp",i=`https://${this.service.slice(0,4)}.${this.customApiDomain}/${n}/${this.service}/${e.ticket_id}`,s=await S.bind(this)(i,e.data||{},{method:t,auth:r},{ignoreService:true});if(s&&typeof s=="object"&&s.stage)throw new a(s.message,{code:s.code,cause:s});return !s||typeof s!="object"||Array.isArray(s)||typeof s.tkid!="string"?s:St(s)}async function si(e,t){await this.__connection;let r=await S.bind(this)("ticket",Object.assign({exec:"list"},e||{}),{auth:true,fetchOptions:t});return r.list=r.list.map(St),r}async function oi(e){if(!e?.ticket_id)throw new a("Ticket ID is required.",{code:"INVALID_PARAMETER"});let t=e.before===void 0||e.before===null?Date.now():e.before;if(typeof t!="number"||!Number.isInteger(t)||t<=0)throw new a('"before" should be a time in milliseconds since the epoch.',{code:"INVALID_PARAMETER"});return S.bind(this)("register-ticket",{exec:"clearlog",ticket_id:e.ticket_id,before:t},{auth:true})}async function ai(e,t){await this.__connection;let r=await S.bind(this)("ticket",Object.assign({exec:"consumed"},e||{}),{auth:true,fetchOptions:t});return r.list=r.list.map(St),r}async function li(e){let t=await S.bind(this)("register-ticket",Object.assign({exec:"reg"},e),{auth:true});return t&&typeof t=="object"&&t.ticket&&(t.ticket=St(t.ticket)),t}async function ci(e){return S.bind(this)("register-ticket",Object.assign({exec:"unreg"},e),{auth:true})}var Da=3600;async function Oe(){if(await this.__connection,this.session){let e=Math.floor(Date.now()/1e3),r=this.session.getIdToken().getExpiration();if(r<e+Da){this.log("request:requesting new token",null);try{await W.bind(this)().getSession({refreshToken:!0}),this.log("request:received new tokens",{exp:this.session?.idToken?.payload?.exp,currentTime:e,expiresIn:r-e,token:this.session?.accessToken?.jwtToken,refreshToken:this.session?.refreshToken?.token});}catch(n){throw this.log("request:new token error",n),new a("User login is required.",{code:"INVALID_REQUEST"})}}else this.log("request:tokens",{exp:this.session.idToken.payload.exp,currentTime:e,expiresIn:r-e,token:this.session.accessToken.jwtToken,refreshToken:this.session.refreshToken.token});return this.session?.idToken?.jwtToken}else throw this.log("request:no session",null),be.bind(this)(),new a("User login is required.",{code:"INVALID_REQUEST"})}function ni(e,t){return new Promise((r,n)=>{t.refreshSession(e.getRefreshToken(),(i,s)=>{this.log("getSession:refreshSessionCallback",{refreshErr:i,refreshedSession:s}),i?(be.bind(this)(),n(i)):s.isValid()?r(s):(be.bind(this)(),n(new a("Invalid session.",{code:"INVALID_REQUEST"})));});})}function W(){if(!this.userPool)throw new a("User pool is missing",{code:"INVALID_REQUEST"});let e=()=>{let s=B.getSignInUserSession().getIdToken().payload||null,o=Ke(s);return this.log("normalized user attribute",o),this.__user=o,o},t=async s=>new Promise((o,l)=>{this.log("getSession:option",s);let{refreshToken:u=false,skipUserUpdateEventTrigger:c=false}=s||{};if(u&&c&&(c=false),B=this.userPool.getCurrentUser(),!B){this.log("getSession:cognitoUser",B),be.bind(this)(),l(null);return}let f=g=>{let d=g.getIdToken().payload;if(this.log("getSession:respond:sessionAttribute",d),d["custom:service"]!==this.service)throw this.log("getSession:respond","invalid service, signing out"),be.bind(this)(),new a("Invalid session.",{code:"INVALID_REQUEST"});return this.session=g,e(),c||this._runOnUserUpdateListeners(this.user),this.session};B.getSession((g,d)=>{if(this.log("getSession:getSessionCallback",{err:g,session:d}),!d){be.bind(this)(),l(new a("Current session does not exist.",{code:"INVALID_REQUEST"}));return}if(g){ni.bind(this)(d,B).then(b=>o(f(b))).catch(l);return}let p=Math.floor(Date.now()/1e3),h=d.getIdToken(),m=h.getExpiration(),_=m<p;if(this.log("getSession:currentTime",p),this.log("getSession:idTokenExp",m),this.log("getSession:isExpired",_),this.log("getSession:existingBearerToken",this.bearerToken),this.bearerToken=h.getJwtToken(),_||u||!d.isValid())ni.bind(this)(d,B).then(b=>o(f(b))).catch(l);else try{o(f(d));}catch(b){l(b);}});}),r=(s,o)=>{let l=o||s.includes(this.service+"-")?s:this.service+"-"+Z.hash(s);return {cognitoUser:new CognitoUser({Username:l,Pool:this.userPool}),cognitoUsername:l}};return {getSession:t,authenticateUser:(s,o,l=false,u=false)=>new Promise((c,f)=>{this.__request_signup_confirmation=null,this.__disabledAccount=null;let g=r(s,l),d=g.cognitoUsername,p=new AuthenticationDetails({Username:d,Password:o});g.cognitoUser.authenticateUser(p,{newPasswordRequired:(h,m)=>{this.__disabledAccount=null,this.__request_signup_confirmation=d,h["custom:signup_ticket"]==="PASS"||h["custom:signup_ticket"]==="MEMBER"||h["custom:signup_ticket"]==="OIDPASS"?g.cognitoUser.completeNewPasswordChallenge(o,{},{onSuccess:_=>{B=g.cognitoUser,t().then(async b=>{if(L.call(this))try{await Rt.bind(this)(o);}catch(A){this.log("encryption:ensureKeyring:failed",A);}c(this.user);});},onFailure:_=>{f(new a(_.message||"Failed to authenticate user.",{code:_.code}));}}):f(new a("User's signup confirmation is required.",{code:"SIGNUP_CONFIRMATION_NEEDED"}));},onSuccess:h=>t({skipUserUpdateEventTrigger:true}).then(async m=>{if(this.__disabledAccount=null,L.call(this))try{await Rt.bind(this)(o);}catch(_){this.log("encryption:ensureKeyring:failed",_);}this._runOnLoginListeners(this.user),this._runOnUserUpdateListeners(this.user),c(this.user);}),onFailure:h=>{let m=[],{parsed:_,code:b}=Pt(h),A=typeof h?.message=="string"?h.message:"";if(b==="NotAuthorizedException"?A.includes("User is disabled.")?(this.__disabledAccount=d,m=["This account is disabled.","USER_IS_DISABLED"]):u?m=["The account already exists.","ACCOUNT_EXISTS"]:m=["Incorrect username or password.","INCORRECT_USERNAME_OR_PASSWORD"]:b==="UserNotFoundException"?m=["Incorrect username or password.","INCORRECT_USERNAME_OR_PASSWORD"]:b==="UserNotConfirmedException"?(this.__request_signup_confirmation=d,m=["User's signup confirmation is required.","SIGNUP_CONFIRMATION_NEEDED"]):(b==="TooManyRequestsException"||b==="LimitExceededException")&&(m=["Too many attempts. Please try again later.","REQUEST_EXCEED"]),_.code==="SIGNUP_CONFIRMATION_NEEDED"&&(this.__request_signup_confirmation=d),m.length){let w=m[1],I=m[0];f(new a(I,{code:w,cause:h}));}else f(_);}});}),createCognitoUser:r,signup:(s,o,l)=>new Promise((u,c)=>{this.userPool.signUp(s,o,l,null,(f,g)=>{if(f){let{parsed:d,code:p}=Pt(f),h=[];p==="UsernameExistsException"?h=["The account already exists.","EXISTS"]:p==="InvalidPasswordException"?h=["Invalid password. Password must be at least 6 characters.","INVALID_PARAMETER"]:p==="InvalidParameterException"?h=[d.message||"Invalid parameter.","INVALID_PARAMETER"]:p==="TooManyRequestsException"||p==="LimitExceededException"?h=["Too many attempts. Please try again later.","REQUEST_EXCEED"]:p==="CodeDeliveryFailureException"?h=["Failed to deliver verification code.","CODE_DELIVERY_FAILURE"]:p==="UserLambdaValidationException"&&(h=[d.message||"Signup validation failed.",d.code==="EXISTS"?"EXISTS":"INVALID_REQUEST"]),h.length?c(new a(h[0],{code:h[1],cause:f})):c(d);return}u(g);});})}}function Pt(e){let t=typeof e?.code=="string"&&e.code.trim()?e.code.trim():"ERROR",n=((typeof e?.message=="string"?e.message:typeof e=="string"?e:"An error occurred.")||"An error occurred.").trim();n||(n="An error occurred.");let i=n.match(/#([A-Za-z0-9_]+)\s*:\s*([\s\S]+)/),s=i?.[1]?.trim()||t,o=i?.[2]?.trim()||n;return {parsed:new a(o,{code:s,cause:e}),code:t}}async function ui(e){await this.__authConnection;let t=e?.refreshToken||false;if(!t)return this.user;try{return await W.bind(this)().getSession(Object.assign({skipUserUpdateEventTrigger:!t,refreshToken:t},e)),this.user}catch{return null}}async function di(e){await this.__connection,e=y.Params(e,{token:"string",id:"string",merge:o=>{if(o===void 0)return false;if(typeof o=="string")return [o];if(Array.isArray(o)){for(let l of o)if(typeof l!="string")throw new a('"merge" array items should be type: <string>.',{code:"INVALID_PARAMETER"})}if(typeof o!="boolean"&&!Array.isArray(o))throw new a('"merge" should be type: <boolean | string[]>.',{code:"INVALID_PARAMETER"});return o},template:o=>{if(typeof o!="object"||o===null)throw new a('"template" should be type: <object>.',{code:"INVALID_PARAMETER"});if(o.welcome!==void 0&&(typeof o.welcome!="string"||!o.welcome))throw new a('"template.welcome" should be a non-empty <string> (template message_id).',{code:"INVALID_PARAMETER"});return o}});let t={token:e.token,id:e.id,merge:e.merge};e.template?.welcome&&(t.template_welcome=e.template.welcome);let r=await S.bind(this)("openid-logger",t),n=r.logger.split("#"),i=this.service+"-"+n[0],s=n[1];return {userProfile:await W.bind(this)().authenticateUser(i,s,true,true),openid:r.openid}}function Ua(e){let t=typeof globalThis<"u"?globalThis:void 0;if(t?.Buffer)return t.Buffer.from(e,"base64").toString("utf8");if(typeof atob=="function"){let r=atob(e),n=new Uint8Array(r.length);for(let i=0;i<r.length;i++)n[i]=r.charCodeAt(i);return typeof TextDecoder<"u"?new TextDecoder().decode(n):r}throw new Error("No base64 decoder available in this environment")}function xa(e){let t=e.split(".");if(t.length!==3)throw new Error("Invalid JWT format");let n=t[1].replace(/-/g,"+").replace(/_/g,"/"),i=Ua(n);return JSON.parse(i)}async function fi(e){await this.__authConnection,this.log("loginWithToken:params",e),e=y.Params(e,{idToken:"string",accessToken:"string",refreshToken:"string"},["idToken"]);let t=xa(e.idToken);if(this.log("loginWithToken:idTokenPayload",t),t["custom:service"]!==this.service)throw new a("Token does not belong to this service.",{code:"INVALID_REQUEST"});let r=Math.floor(Date.now()/1e3);if(t.exp&&t.exp<r)throw new a("Token has expired.",{code:"INVALID_REQUEST"});if(this.__user=Ke(t),this.session=null,e.accessToken&&e.refreshToken)try{if(this.session=new CognitoUserSession({IdToken:new CognitoIdToken({IdToken:e.idToken}),AccessToken:new CognitoAccessToken({AccessToken:e.accessToken}),RefreshToken:new CognitoRefreshToken({RefreshToken:e.refreshToken})}),this.log("loginWithToken:session",this.session),this.log("loginWithToken:CognitoUser",CognitoUser),this.log("loginWithToken:userPool",this.userPool),CognitoUser&&this.userPool){this.log("loginWithToken:cognito:username",t["cognito:username"]);let n={Username:t["cognito:username"],Pool:this.userPool};this.log("loginWithToken:cognitoUserParams",n),B=new CognitoUser(n),B.setSignInUserSession(this.session),this.log("loginWithToken:cognitoUserRestored",{cognitoUserType:typeof B,cognitoUserKeys:Object.keys(B||{}),cognitoUser:B});}}catch(n){this.log("loginWithToken:err",n);try{this.log("loginWithToken:err:stringified",JSON.stringify(n));}catch{this.log("loginWithToken:err:stringifyFail",String(n));}try{let i=Object.keys(n||{}),s=Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(n||{}):[],o=Object.getOwnPropertyDescriptors?Object.getOwnPropertyDescriptors(n||{}):{};this.log("loginWithToken:createSessionError:allKeys",{keys:i,symbols:s,descriptors:o});}catch(i){this.log("loginWithToken:createSessionError:allKeysFail",String(i));}}return this._runOnLoginListeners(this.user),this._runOnUserUpdateListeners(this.user),this.user}async function Q(){return await this.__connection,this.__user?.service===this.service?this.__user?.owner===this.host:(await tt.bind(this)(),false)}async function be(e=false){let t=null;B&&(e?t=new Promise((n,i)=>{B.globalSignOut({onSuccess:s=>{this.log("globalSignOut:success",s),n(s);},onFailure:s=>{this.log("globalSignOut:error",s),i(s);}});}):B.signOut()),lr.bind(this)();let r={session:null,__startKeyHistory:{},__cached_requests:{},__user:null};t&&(t=await t);for(let n in r)this[n]=r[n];return this._runOnUserUpdateListeners(null),this._runOnLoginListeners(null),t}async function tt(e){await this.__connection;let{data:t}=j(e);return await be.bind(this)(t?.global),"SUCCESS: The user has been logged out."}async function gi(){if(!this.__request_signup_confirmation)throw new a("Least one login attempt is required.",{code:"INVALID_REQUEST"});return await S.bind(this)("confirm-signup",{username:this.__request_signup_confirmation})}async function pi(e=false){if(typeof e=="string")e=y.Url(e);else if(typeof e!="boolean")throw new a("Argument should be type: <boolean | string>.",{code:"INVALID_REQUEST"});if(!this.__disabledAccount)throw new a("Least one signin attempt of disabled account is required.",{code:"INVALID_REQUEST"});return await S.bind(this)("recover-account",{username:this.__disabledAccount,redirect:e}),"SUCCESS: Recovery e-mail has been sent."}async function Tr(e){let t=y.Params(e,{username:"string",email:"string",password:"string"},["password"]);await this.__authConnection;let r=null;if(t.email)try{r=y.Email(t.email);}catch{t.username=t.email,delete t.email;}if(!t.username&&!t.email)throw new a('Least one of "username" or "email" is required.',{code:"INVALID_PARAMETER"});let n=t.username||t.email;try{return await W.bind(this)().authenticateUser(n,t.password)}catch(i){if((i?.code==="UserNotFoundException"||i?.code==="NotAuthorizedException")&&r&&r!==n)return await W.bind(this)().authenticateUser(r,t.password);throw i}}async function hi(e,t){await this.__authConnection;let r={username:"string",password:c=>y.Password(c),email:c=>y.Email(c),name:"string",address:c=>{if(!c)return "";if(typeof c=="string")return c;if(typeof c=="object")return JSON.stringify(c)},gender:"string",birthdate:c=>c?y.Birthdate(c):"",phone_number:c=>c?y.PhoneNumber(c):"",email_public:["boolean",()=>false],address_public:["boolean",()=>false],gender_public:["boolean",()=>false],birthdate_public:["boolean",()=>false],phone_number_public:["boolean",()=>false],access_group:"number",misc:"string",picture:c=>c?y.Url(c):"",profile:c=>c?y.Url(c):"",family_name:"string",given_name:"string",middle_name:"string",nickname:"string",website:c=>c?y.Url(c):""},n=y.Params(e||{},r,["email","password"]);await tt.bind(this)(),t=y.Params(t||{},{email_subscription:c=>{let f=c;if(typeof c=="number"||typeof c=="string"&&c!=="public"&&c!=="authorized"){let g=y.newsletterGroup(c);if(typeof g=="number"&&g!==0&&g!==1)throw new a('"option.email_subscription" takes 0 (public), 1 (authorized), true, false or the name of a newsletter group.',{code:"INVALID_PARAMETER"});f=g;}else if(typeof c!="boolean"&&typeof c!="string")throw new a('"option.email_subscription" takes 0 (public), 1 (authorized), true, false or the name of a newsletter group.',{code:"INVALID_PARAMETER"});if(f!==false&&!t?.signup_confirmation)throw new a('"option.signup_confirmation" is required for email subscription.',{code:"INVALID_PARAMETER"});return f},signup_confirmation:c=>{let f=c;if(typeof c=="string")f=y.Url(c);else if(typeof c=="boolean")f=c;else throw new a('"option.signup_confirmation" should be type: <string | boolean>.',{code:"INVALID_PARAMETER"});if(f&&!n.email)throw new a('"email" is required for signup confirmation.',{code:"INVALID_PARAMETER"});return f},login:c=>{if(typeof c=="boolean"){if(t.signup_confirmation&&c)throw new a('"login" is not allowed when "option.signup_confirmation" is true.',{code:"INVALID_PARAMETER"});return c}throw new a('"option.login" should be type: boolean.',{code:"INVALID_PARAMETER"})},template:c=>{if(typeof c!="object"||c===null)throw new a('"option.template" should be type: <object>.',{code:"INVALID_PARAMETER"});if(c.signup_confirmation!==void 0){if(typeof c.signup_confirmation!="string"||!c.signup_confirmation)throw new a('"option.template.signup_confirmation" should be a non-empty <string> (template message_id).',{code:"INVALID_PARAMETER"});if(!t?.signup_confirmation)throw new a('"option.signup_confirmation" is required when "option.template.signup_confirmation" is set.',{code:"INVALID_PARAMETER"})}if(c.welcome!==void 0&&(typeof c.welcome!="string"||!c.welcome))throw new a('"option.template.welcome" should be a non-empty <string> (template message_id).',{code:"INVALID_PARAMETER"});return c}});let i=t?.login||false;if(n.signup_confirmation=t?.signup_confirmation||false,n.email_subscription=t?.email_subscription===void 0||t?.email_subscription===null?false:t.email_subscription,n.email_public&&!n.signup_confirmation)throw new a('"option.signup_confirmation" should be true if "email_public" is set to true.',{code:"INVALID_PARAMETER"});n.service=this.service,n.owner=this.owner;let s=W.bind(this)().createCognitoUser(n.username||n.email);for(let c of ["email_public","address_public","gender_public","birthdate_public","phone_number_public"])n[c]=n[c]?"1":"0";n.access_group&&(n.access_group=n.access_group.toString());let o=(await S.bind(this)("signupkey",{username:s.cognitoUsername,signup_confirmation:typeof n.signup_confirmation=="boolean"?JSON.stringify(n.signup_confirmation):n.signup_confirmation,email_subscription:n.email_subscription,template_confirmation:t?.template?.signup_confirmation||"",template_welcome:t?.template?.welcome||""})).split(":"),l=o.slice(1).join(":"),u=[new CognitoUserAttribute({Name:"custom:signup",Value:o[0]}),new CognitoUserAttribute({Name:"locale",Value:l.split("#")[1]}),new CognitoUserAttribute({Name:"custom:signup_ticket",Value:l})];for(let c in r){let f=["email_public","address_public","gender_public","birthdate_public","phone_number_public","misc","service","owner"];n[c]!==""&&(c==="username"||c==="password"||c==="access_group"||(f.includes(c)?u.push(new CognitoUserAttribute({Name:"custom:"+c,Value:n[c]})):u.push(new CognitoUserAttribute({Name:c,Value:n[c]}))));}return await W.bind(this)().signup(s.cognitoUsername,n.password,u),n.signup_confirmation?(B=s.cognitoUser,this.__request_signup_confirmation=s.cognitoUsername,"SUCCESS: The account has been created. User's signup confirmation is required."):i?Tr.bind(this)({email:n.username||n.email,password:n.password}):"SUCCESS: The account has been created."}async function mi(){await this.__connection;let e=await S.bind(this)("remove-account",{disable:this.__user.user_id},{auth:true});return await tt.bind(this)(),e}async function yi(e){await this.__connection;let t=y.Params(e,{email:i=>y.Email(i),code:["number","string"],new_password:i=>y.Password(i)},["email","code","new_password"]),r=t.code,n=t.new_password;return typeof r=="number"&&(r=r.toString()),new Promise(async(i,s)=>{W.bind(this)().createCognitoUser(t.email).cognitoUser.confirmPassword(r,n,{onSuccess:l=>{i("SUCCESS: New password has been set.");},onFailure:l=>{s(new a(l?.message||"Failed to reset password.",{code:l?.code||"ERROR",cause:l}));}});})}async function bi(e,t,r){await this.__connection;let n;if(!B)throw new a("The user has to be logged in.",{code:"INVALID_REQUEST"});if(e==="email"||e==="phone_number"){if(!this.__user.hasOwnProperty(e))throw new a(`No ${e==="email"?"e-mail":"phone number"} to verify`,{code:"INVALID_REQUEST"});if(this.__user?.[`${e}_verified`])return `SUCCESS: "${e}" is verified.`;n=(t?y.Params(t,{code:"string"}):{}).code||"";}else return;let i,s=r?.template?.verification;if(s!==void 0){if(typeof s!="string"||!s)throw new a('"template.verification" should be a non-empty <string> (template message_id).',{code:"INVALID_PARAMETER"});i={template_verification:s};}return new Promise((o,l)=>{let u={onSuccess:c=>{n?W.bind(this)().getSession({refreshToken:true}).then(()=>{this.__user&&(this.__user[e+"_verified"]=true),o(`SUCCESS: "${e}" is verified.`);}).catch(f=>{l(f);}):o("SUCCESS: Verification code has been sent.");},onFailure:c=>{l(new a(c.message||"Failed to request verification code.",{code:c?.code}));}};n?B?.verifyAttribute(e,n,u):(u.inputVerificationCode=null,B?.getAttributeVerificationCode(e,u,i));})}function _i(e,t){return bi.bind(this)("phone_number",e,t)}function wi(e,t){return bi.bind(this)("email",e,t)}async function Ei(e,t){await this.__connection;let r=y.Params(e,{email:s=>y.Email(s)},["email"]),n,i=t?.template?.verification;if(i!==void 0){if(typeof i!="string"||!i)throw new a('"template.verification" should be a non-empty <string> (template message_id).',{code:"INVALID_PARAMETER"});n={template_verification:i};}return new Promise(async(s,o)=>{W.bind(this)().createCognitoUser(r.email).cognitoUser.forgotPassword({onSuccess:u=>{s("SUCCESS: Verification code has been sent.");},onFailure:u=>{let{parsed:c,code:f}=Pt(u),g={UserNotFoundException:"NOT_EXISTS",InvalidParameterException:"INVALID_PARAMETER",NotAuthorizedException:"INVALID_REQUEST",LimitExceededException:"REQUEST_EXCEED",TooManyRequestsException:"REQUEST_EXCEED",CodeDeliveryFailureException:"CODE_DELIVERY_FAILURE"}[f]||c.code||f||"ERROR";o(new a(c.message,{code:g,cause:u}));}},n);})}async function Ai(e){if(await this.__connection,!this.session)throw new a("User login is required.",{code:"INVALID_REQUEST"});let t=y.Params(e,{current_password:"string",new_password:"string"});if(!t?.current_password)throw new a('"current_password" is required to change password.',{code:"INVALID_PARAMETER"});if(!t?.new_password)throw new a('"new_password" is required to change password.',{code:"INVALID_PARAMETER"});return y.Password(t.current_password),y.Password(t.new_password),L.call(this)&&await $n.bind(this)(t.current_password,t.new_password),new Promise((r,n)=>{B.changePassword(t.current_password,t.new_password,(i,s)=>{if(i){if(i?.code==="InvalidParameterException")n(new a("Invalid password parameter.",{code:"INVALID_PARAMETER"}));else if(i?.code==="NotAuthorizedException")n(new a("Incorrect password.",{code:"INVALID_REQUEST"}));else if(i?.code==="TooManyRequestsException"||i?.code==="LimitExceededException")n(new a("Too many attempts. Please try again later.",{code:"REQUEST_EXCEED"}));else {let{parsed:o}=Pt(i);n(o);}return}L.call(this)&&Bn.bind(this)().catch(o=>this.log("encryption:prune:failed",o)),r("SUCCESS: Password has been changed.");});})}async function Ri(e){if(await this.__connection,!this.session)throw new a("User login is required.",{code:"INVALID_REQUEST"});let t=y.Params(e||{},{user_id:i=>y.UserId(i),email:i=>y.Email(i),address:i=>{if(!i)return "";if(typeof i=="string")return i;if(typeof i=="object")return JSON.stringify(i)},name:"string",gender:"string",birthdate:i=>i?y.Birthdate(i):"",phone_number:i=>i?y.PhoneNumber(i):"",email_public:"boolean",phone_number_public:"boolean",address_public:"boolean",gender_public:"boolean",birthdate_public:"boolean",misc:"string",picture:i=>i?y.Url(i):"",profile:i=>i?y.Url(i):"",family_name:"string",given_name:"string",middle_name:"string",nickname:"string",website:i=>i?y.Url(i):""});if(t&&typeof t=="object"&&!Object.keys(t).length)return this.user;let r=[["email_public","email_verified","User's e-mail should be verified to set"],["phone_number_public","phone_number_verified","User's phone number should be verified to set"]];if(this.__user){for(let i of r)if(t[i[0]]&&!this.__user[i[1]])throw new a(`${i[2]} "${i[0]}" to true.`,{code:"INVALID_REQUEST"})}let n=[];for(let i in t){if(t[i]===this.user[i]){n.push(i);continue}if(["email_public","phone_number_public","address_public","gender_public","birthdate_public","misc"].includes(i)){let o=t[i];typeof o=="boolean"&&(o=o?"1":"0"),t["custom:"+i]=o,n.push(i);}}for(let i of n)delete t[i];if(t.user_id)if(t.user_id===this.user.user_id)delete t.user_id;else return S.bind(this)("admin-edit-profile",{attributes:t},{auth:true});if(t&&typeof t=="object"&&Object.keys(t).length){let i=[];for(let s in t)i.push(new CognitoUserAttribute({Name:s,Value:t[s]}));return await new Promise((s,o)=>{B?.updateAttributes(i,(l,u)=>{l&&o([l?.code||l?.name,l?.message||"Failed to update user settings."]),s(u);});}),await W.bind(this)().getSession({refreshToken:true}),this.user}return this.user}async function Ti(e,t){e=j(e).data,e||(e={searchFor:"timestamp",condition:">",value:0},t||(t={}),t.ascending=false),await this.__connection;let r={user_id:s=>y.UserId(s),email:"string",phone_number:"string",locale:s=>{if(typeof s!="string"||typeof s=="string"&&s.length>5)throw new a('Value of "locale" should be a country code.',{code:"INVALID_PARAMETER"});return s},name:"string",address:"string",gender:"string",birthdate:s=>y.Birthdate(s),subscribers:"number",timestamp:"number",access_group:"number",approved:"string"},n=["searchFor","value"],i=(s,o)=>{let l=r[e.searchFor];if(typeof l=="function")return l(s);if(typeof s!==l)throw new a(`${o} does not match the type of "${e.searchFor}" index.`,{code:"INVALID_PARAMETER"});return s};if(e=y.Params(e,{searchFor:["user_id","name","email","phone_number","address","gender","birthdate","locale","subscribers","timestamp","access_group","approved"],condition:[">",">=","=","<","<=","gt","gte","eq","lt","lte",()=>"="],value:s=>Array.isArray(s)?s.map(o=>i(o,"Value")):i(s,"Value"),range:s=>i(s,"Range")},n),e?.condition&&e?.condition!=="="&&e.hasOwnProperty("range"))throw new a("Conditions does not apply on range search.",{code:"INVALID_PARAMETER"});if(Array.isArray(e.value)&&(e.condition!=="="||e.range))throw new a(`Conditions are not allowed on a list of "${e.searchFor}" values. Search for a single value to use a condition or range.`,{code:"INVALID_PARAMETER"});if(typeof e?.value=="string"&&!e?.value)throw new a("Value should not be an empty string.",{code:"INVALID_PARAMETER"});if(typeof e?.searchFor=="string"&&!e?.searchFor)throw new a('"searchFor" should not be an empty string.',{code:"INVALID_PARAMETER"});return S.bind(this)("get-users",e,{auth:true,fetchOptions:t})}async function Ii(e){await this.__connection;let t=await S.bind(this)("last-verified-email",e,{auth:true});return t.includes("SUCCESS")?(await W.bind(this)().getSession({refreshToken:true}),this.user):t}var Le=null,ki=typeof SubmitEvent<"u",Oa=typeof HTMLFormElement<"u",nt=H(),Ir=0;function vi(e){if(!e)return null;let t=Number(e);if(Number.isFinite(t))return Math.max(0,t*1e3);let r=Date.parse(e);return Number.isNaN(r)?null:Math.max(0,r-Date.now())}var Sr=6,Pi=6e4;function Ni(e,t){let r=e>0?e:Math.min(Pi,500*Math.pow(2,t));r=Math.min(Pi,r);let n=Math.floor(Math.random()*Math.min(1e3,Math.max(50,r*.25)));return r+n}function Di(e){return new a(`Too many requests: ${e} still answered 429 after ${Sr} retries.`,{code:"TOO_MANY_REQUESTS"})}function Pr(e,t){return t>0?e/t*100:0}var Si=e=>{let{auth:t,type:r,endpoints:n,stable:i}=e,s=n[0],o=n[1];if(Ir++,r==="admin"){let l=Object.entries(s).filter(([u,c])=>u.includes(t?"_private":"_public")&&u!=="get_users_private"&&u!=="service_public"&&typeof c=="string").map(([,u])=>u);if(!l.length)throw new a("No available admin gateways.",{code:"INVALID_REQUEST"});return l[Ir%l.length]}if(r==="record"){let l=Object.entries(o).filter(([u,c])=>u.includes(t?"record_private":"record_public")&&typeof c=="string").map(([,u])=>u);if(!l.length)throw new a("No available record gateways.",{code:"INVALID_REQUEST"});return i?l[0]:l[Ir%l.length]}throw new a("Invalid gateway type.",{code:"INVALID_REQUEST"})};async function La(e,t,r){let n=await Promise.all([this.admin_endpoint,this.record_endpoint]),i=n[0],s=n[1],o=e.split("?"),l=o.length>1?"?"+o[1]:"";switch(e=o[0],e){case "get-users":return i.get_users_private+e+l;case "service":return i.service_public+e+l;case "get-newsletters":case "get-public-newsletters":case "subscribe-newsletter":case "subscribe-public-newsletter":case "signupkey":case "admin-newsletter-request":case "admin-signup":case "confirm-signup":case "openid-logger":case "block-account":case "admin-edit-profile":case "remove-account":case "post-secure":case "recover-account":case "mock":case "grant-access":case "last-verified-email":case "ticket":case "register-ticket":case "get-newsletter-subscription":case "send-inquiry":case "register-newsletter-group":case "delete-newsletter-group":case "newsletter-group-endpoint":case "invitation-list":case "csr":case "csr-poll":case "csr-cancel":case "csr-finalize":return Si.bind(this)({auth:t,type:"admin",endpoints:n})+e+l;case "post-record":return (t?s.post_private:s.post_public)+e+l;case "get-records":return (t?s.get_private:s.get_public)+e+l;case "del-files":case "del-records":return s.del_private+e+l;case "store-subscription":case "get-vapid-public-key":case "push-notification":case "delete-subscription":case "subscription":case "get-subscription":case "get-table":case "get-tag":case "get-uniqueid":case "get-index":case "get-signed-url":case "get-signed-urls":case "extract-file-text":case "grid-query":case "grant-private-access":case "request-private-access-key":case "get-ws-group":case "check-schema":case "get-feed":case "castspell":case "dopamine":case "getspell":return Si.bind(this)({auth:t,type:"record",endpoints:n,stable:r})+e+l;default:return y.Url(e)+l}}var rt={};function Ui(){Le&&(Le.terminate(),Le=null);}async function S(e,t=null,r,n){this.log("request",{url:e,data:t,options:r,_etc:n||{}}),r=r||{};let{auth:i=false,method:s="post",bypassAwaitConnection:o=false}=r;s=s.toUpperCase();let l=null,u=null,c=await La.bind(this)(e,!!i,!!r.stableGateway),f=t?.service||this.service,g=t?.owner||this.owner;if(!o&&(l=await this.__connection,!l))throw new a("Invalid connection. The service could have been disabled, or has a restricted CORS.",{code:"INVALID_REQUEST"});let d=r?.tokenHeaders?.idToken===true;(i||d)&&(u=await Oe.bind(this)());let p={},{fetchMore:h=false,progress:m}=r?.fetchOptions||{};if(r?.fetchOptions&&Object.keys(r.fetchOptions).length){for(let v of ["limit","startKey","ascending"])if(r.fetchOptions.hasOwnProperty(v)){if(v==="startKey"&&r.fetchOptions[v]===null)continue;p[v]=r.fetchOptions[v];}p=y.Params(p,{limit:v=>{if(typeof v!="number")throw new a("Fetch limit should be a number.",{code:"INVALID_REQUEST"});if(v>1e3)throw new a("Fetch limit should be below 1000.",{code:"INVALID_REQUEST"});return v},startKey:v=>v,ascending:"boolean"});}let _=n?.ignoreService?{}:{service:f,owner:g};Object.assign(_,p),t=j(t).data,t?t&&typeof t=="object"&&(t=Object.assign(_,t)):t=_;let b=`${s}:${i?"auth":"public"}:${e}`,A=(()=>{if(t&&typeof t=="object"&&Object.keys(t).length&&!(nt&&t instanceof FormData)){let v=function(U){return typeof U=="object"&&U!==null?Object.keys(U).sort().reduce((x,M)=>(typeof U[M]=="object"&&U[M]!==null?x[M]=v(U[M]):x[M]=U[M],x),{}):U};return Z.hash(b+"/"+JSON.stringify(v(t)))}return Z.hash(b+"/"+f)})(),{requestKey:w,requestKeyWithStartKey:I}=Ma.bind(this)({params:t,url:e,fetchMore:h,hashedParams:A});if(!w||w&&typeof w=="object")return w;if(this.log("requestKey",I),typeof I=="string"&&rt[I]instanceof Promise)return this.log("request:returning pending",I),rt[I];let E={Accept:"*/*"};if(Object.prototype.hasOwnProperty.call(r,"contentType")&&r.contentType!==void 0){let v=r.contentType===null?"application/x-www-form-urlencoded":r.contentType;v&&(E["Content-Type"]=v);}else E["Content-Type"]="application/json";if(u&&(E.Authorization=u),r?.tokenHeaders){let v=(M,de)=>typeof M=="string"?M:M===true?de:null,U=v(r.tokenHeaders.accessToken,this.session?.accessToken?.jwtToken||null),x=v(r.tokenHeaders.idToken,this.bearerToken||this.session?.idToken?.jwtToken||u||null);U&&(E["X-Access-Token"]=U),x&&(E["X-Id-Token"]=x);}let C={public_identifier:this.__public_identifier,service:f,owner:g,resolves_offloaded_data:true};E["Content-Meta"]=JSON.stringify(C),r.revalidate&&(E["Cache-Control"]="no-cache",E.Pragma="no-cache");let D={headers:E};if(r?.responseType&&(D.responseType=r.responseType),s==="GET"){if(t){let v=[];if(nt&&t instanceof FormData?v=Array.from(t.entries()).map(([U,x])=>{let M=typeof x=="string"?x:x.name;return encodeURIComponent(U)+"="+encodeURIComponent(M)}):v=Object.keys(t).map(U=>{let x=t[U];return typeof x!="string"&&(x=JSON.stringify(x)),encodeURIComponent(U)+"="+encodeURIComponent(x)}),v.length){let U=c.includes("?")?c.endsWith("?")||c.endsWith("&")?"":"&":"?";c+=U+v.join("&");}}D.body=null;}else if(nt&&t instanceof FormData)D.body=t;else if(E["Content-Type"]==="application/x-www-form-urlencoded"&&t&&typeof t=="object"){let v=new URLSearchParams;for(let U of Object.keys(t)){let x=t[U];v.append(U,typeof x=="string"?x:JSON.stringify(x));}D.body=v.toString();}else typeof t=="string"?D.body=t:D.body=t?JSON.stringify(t):null;if(D.method=s,Le===null){let v={batchSize:this.requestBatchSize,breakWhenError:false,onProgress:U=>{this.onBatchProcess.forEach(x=>x(U));}};Le=new ys(v);}return this.log("request-opt",D),new Promise((v,U)=>{Le.add([async()=>{let x=xi.bind(this)(c,D,m);rt[I]=x;try{let M=qa.bind(this)({hashedParam:w,requestKeyWithStartKey:I,url:e,fetched:await x});return delete rt[I],this.log("request:end",M),v(M),M}catch(M){throw delete rt[I],this.log("request:err",M),U(M),M}}]);})}function Ma(e){let{params:t={},url:r,fetchMore:n=false,hashedParams:i}=e||{};if(t.startKey){if(!(typeof t.startKey=="object"&&Object.keys(t.startKey).length)&&t.startKey!=="start"&&t.startKey!=="end")throw new a(`"${t.startKey}" is invalid startKey key.`,{code:"INVALID_PARAMETER"});t.startKey==="start"&&(n=false,delete t.startKey);}if(!n){if(this.__cached_requests?.[r]?.[i]&&delete this.__cached_requests[r][i],this.__startKeyHistory?.[r]?.[i]){if(Array.isArray(this.__startKeyHistory[r][i])&&this.__startKeyHistory[r][i].length)for(let u of this.__startKeyHistory[r][i]){let c=i+Z.hash(u);this.__cached_requests?.[r]&&this.__cached_requests?.[r]?.[c]&&delete this.__cached_requests[r][c];}delete this.__startKeyHistory[r][i];}return {requestKeyWithStartKey:i,requestKey:i}}if(!Array.isArray(this.__startKeyHistory?.[r]?.[i]))return {requestKeyWithStartKey:i,requestKey:i};let s=this.__startKeyHistory[r][i],o=s[s.length-1],l=i;if(o){if(o==="end")return {requestKey:{list:[],startKey:"end",endOfList:true,startKeyHistory:s},requestKeyWithStartKey:l};l+=Z.hash(o),t.startKey=JSON.parse(o);}return this.__cached_requests?.[r]?.[l]?{requestKey:this.__cached_requests[r][l],requestKeyWithStartKey:l}:{requestKeyWithStartKey:l,requestKey:i}}function Fa(e){let t=r=>r&&typeof r=="object"&&r.encrypted?Object.assign({},r,{data:null}):r;return Array.isArray(e)?e.map(t):e&&typeof e=="object"?Array.isArray(e.list)?Object.assign({},e,{list:e.list.map(t)}):t(e):e}function xi(e,t,r,n=0){return new Promise((i,s)=>{let o=new XMLHttpRequest;o.open(t.method||"GET",e);for(var l in t.headers||{})o.setRequestHeader(l,t.headers[l]);t.responseType&&(o.responseType=t.responseType),o.onload=()=>{if(o.status<400)if(t.responseType=="json"||t.responseType=="blob")i(o.response);else {let u=o.responseText;try{u=JSON.parse(u);}catch{}i(u);}else if(o.status===429){let u=o.getResponseHeader("Retry-After"),c=vi(u);if(c!==null){if(n>=Sr){s(Di(`"${e.split("?")[0]}"`));return}setTimeout(()=>{xi(e,t,r,n+1).then(i,s);},Ni(c,n));}else s("Too many requests");}else {let u=o.status,c=["INVALID_CORS","INVALID_REQUEST","SERVICE_DISABLED","INVALID_PARAMETER","ERROR","EXISTS","NOT_EXISTS"],f=t.responseType=="blob"?o.response:o.responseText;try{f=JSON.parse(f);}catch{}if(typeof f=="string"){let g=f.split(":"),d=g.splice(0,1)[0].trim(),p=g.join(":").trim();s(new a(p||f,{code:c.includes(d)?d:"ERROR"}));}else if(typeof f=="object"&&(f?.message||f?.stage||f?.code)){let g=f?.code||(u?u.toString():null)||"ERROR",d=f.message,p=f?.cause;p===void 0&&f.stage&&(p=f),typeof d=="string"&&(d=d.trim()),d||(d=String(g)),s(new a(d,{cause:p,code:g}));}else s(f);}},o.onerror=()=>s("Network error"),o.onabort=()=>s("Aborted"),o.ontimeout=()=>s("Timeout"),typeof r=="function"&&(o.onprogress=u=>{r({status:"download",progress:Pr(u.loaded,u.total),loaded:u.loaded,total:u.total,abort:()=>o.abort()});},o.upload&&(o.upload.onprogress=u=>{r({status:"upload",progress:Pr(u.loaded,u.total),loaded:u.loaded,total:u.total,abort:()=>o.abort()});})),o.send(t.body);})}function qa(e){let{hashedParam:t,requestKeyWithStartKey:r,url:n,fetched:i}=e;if(!i?.startKey)return i;this.__startKeyHistory.hasOwnProperty(n)||(this.__startKeyHistory[n]={}),this.__startKeyHistory[n].hasOwnProperty(t)||(this.__startKeyHistory[n][t]=[]);let s=i.startKey==="end"?"end":JSON.stringify(i.startKey);return this.__startKeyHistory[n][t].includes(s)||this.__startKeyHistory[n][t].push(s),this.__cached_requests?.[n]||(this.__cached_requests[n]={}),this.__cached_requests[n][r]=i,Object.assign({startKeyHistory:this.__startKeyHistory[n][t]},i)}function Va(e){if(e instanceof a)return e;if(typeof e=="string"){let t=e.trim();if(t==="Network error")return new a("Network error",{code:"NETWORK_ERROR"});if(t==="Aborted")return new a("Aborted",{code:"ABORTED"});if(t==="Timeout")return new a("Timeout",{code:"TIMEOUT"});if(t==="Too many requests")return new a("Too many requests",{code:"TOO_MANY_REQUESTS"});let r=/<Code>([^<]+)<\/Code>/.exec(t)?.[1]?.trim()||"",n=/<Message>([^<]+)<\/Message>/.exec(t)?.[1]?.trim()||"";return r||n?new a(n||r,{code:r||"UPLOAD_FAILED",cause:t}):new a(t.length>300?t.slice(0,300):t||"Upload failed.",{code:"UPLOAD_FAILED",cause:t})}if(e&&typeof e=="object"){let t=e.code||e.Code,r=e.message||e.Message;if(t||r)return new a(String(r||t),{code:String(t||"UPLOAD_FAILED"),cause:e})}return new a("Upload failed.",{code:"UPLOAD_FAILED",cause:e})}var ja=5,$a=100;function Ba(e){let t=String(e?.code??"");if(t==="404"||t==="501")return true;let r=String(e?.message??e??"");return /missing authentication token/i.test(r)||/not implemented/i.test(r)||t==="403"&&/not found/i.test(r)}function Ka(e,t){let r=Array.isArray(e?.list)?e.list:[],n=Array.isArray(e?.failed)?e.failed:[],i=new Array(t);for(let s of n)s&&Number.isInteger(s.index)&&s.index>=0&&s.index<t&&(i[s.index]=new a(String(s.message||"Upload permit refused."),{code:String(s.code||"ERROR")}));for(let s=0;s<t;s++){if(i[s])continue;let o=r[s];o&&typeof o.url=="string"?i[s]={fields:o.fields||null,url:o.url,cdn:o.cdn}:i[s]=new a("No upload permit was answered for this file.",{code:"ERROR"});}return i}async function it(e,t){await this.__connection;let{record_id:r,service:n=this.service,progress:i,timeout:s,throwOnFileError:o=false}=t;if(!r)throw new a('"record_id" is required.',{code:"INVALID_PARAMETER"});if(s!=null){if(typeof s!="number"||!Number.isFinite(s)||s<0)throw new a('"timeout" should be a number of milliseconds, 0 or more.',{code:"INVALID_PARAMETER"})}else s=0;if(ki&&e instanceof SubmitEvent&&(e=e.target),Oa&&e instanceof HTMLFormElement&&(e=new FormData(e)),!nt||!(e instanceof FormData))throw new a('"fileList" should be a FormData or HTMLFormElement.',{code:"INVALID_PARAMETER"});let u={reserved_key:Te(),service:n,request:"post"};t?.record_id&&(u.id=t.record_id);let c,f=(w,I,E,N,C=0)=>new Promise((D,v)=>{c=new XMLHttpRequest,c.open("POST",w),s>0&&(c.timeout=s),c.onload=()=>{let U=c.responseText;try{U=JSON.parse(U);}catch{}if(c.status>=200&&c.status<300)D(U);else if(c.status===429){let x=c.getResponseHeader("Retry-After"),M=vi(x);if(M!==null){if(C>=Sr){v(Di(`the upload of "${N}" to "${w}"`));return}setTimeout(()=>{f(w,I,E,N,C+1).then(D,v);},Ni(M,C));}else v("Too many requests");}else v(U);},c.onerror=()=>v("Network error"),c.onabort=()=>v("Aborted"),c.ontimeout=()=>v(new a(`Upload timeout: "${N}" was not finished within ${s} ms.`,{code:"TIMEOUT"})),c.upload&&typeof E=="function"&&(c.upload.onprogress=E),c.send(I);});function g(w){let I="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";if(w===0)return I[0];let E="";for(;w>0;)E=I[w%62]+E,w=Math.floor(w/62);return E}let d=[],p=[],h=[],m=[],_=[];for(let[w,I]of e.entries())I instanceof File&&_.push([w,I]);let b=_.length>=ja&&!this.__bulkPermitsUnavailable,A=0;for(;A<_.length;){let w=_.slice(A,A+(b?$a:1));A+=w.length;let I=[];for(let[N,C]of w){let D=await ti.bind(this)(r,N,C);I.push({file:C,uploadFile:D.file,params:{key:D.key+"/"+D.file.name,sizeKey:g(D.file.size),contentType:D.file.type||null}});}let E=null;if(b)try{let N=await S.bind(this)("get-signed-urls",Object.assign({files:I.map(C=>C.params)},u),{auth:!!this.__user});E=Ka(N,I.length);}catch(N){if(!Ba(N))throw N;this.__bulkPermitsUnavailable=true,b=false;}if(!E){E=[];for(let N of I){let{fields:C=null,url:D,cdn:v}=await S.bind(this)("get-signed-url",Object.assign(N.params,u),{auth:!!this.__user});E.push({fields:C,url:D,cdn:v});}}for(let N=0;N<I.length;N++){let{file:C,uploadFile:D}=I[N],v=E[N];if(v instanceof a){if(m.push(""),p.push(C),h.push({file:C,name:C.name,error:v}),o)throw v;continue}m.push(v.cdn);let U=new FormData;for(let x in v.fields||{})U.append(x,v.fields[x]);U.append("file",D);try{await f(v.url,U,typeof i=="function"?x=>i({status:"upload",progress:Pr(x.loaded,x.total),currentFile:C,completed:d,failed:p,loaded:x.loaded,total:x.total,abort:()=>c.abort()}):null,C.name),d.push(C);}catch(x){p.push(C);let M=Va(x);if(h.push({file:C,name:C.name,error:M}),o)throw M}}}return {completed:d,failed:p,errors:h,bin_endpoints:m}}var kt={};function k(e){let{preventMultipleCalls:t=false}=e||{};return function(r,n,i){let s=i.value;i.value=function(...o){let l=o[0],u=true,c=null,f="",g={},d=false;if(ki&&l instanceof SubmitEvent){l.preventDefault();let b=window.location.href;c=l.target;let A=new URL(c.action);f=A.href;let w=f?f.match(/(?<=\{).*?(?=\})/g):"";if(w)for(let I of w){if(!I)continue;let E=c.querySelector(`[name="${I}"]`);if(E)if(E.type==="file")for(let N=0;N<=E.files.length-1;N++)E.files[N]&&(g[I]||(g[I]=[]),g[I].push(new Promise((C,D)=>{let v=new FileReader;v.onload=function(){C(v.result);},v.readAsDataURL(E.files[N]),v.onerror=D;})));else f=f.replace(`{${I}}`,E.value);}c.getAttribute("action")===null?u=false:d=A.href===b;}let p=async b=>{if(f)for(let A in g)g[A].length&&(f=f.replace(`{${A}}`,(await Promise.all(g[A])).join(",")));if(c&&u){let A=L.call(this)?Fa(b):b;window.sessionStorage.setItem(`${this.service}:${Z.hash(f)}`,JSON.stringify(A)),d?window.location.replace(f):window.location.href=f;}return b},h,m=b=>{throw b instanceof a?b.name=n+"()":b=b instanceof Error?b:new a(b,{name:n+"()"}),b},_=async()=>{try{if(this.__projectIdInput&&await this.__projectIdInput,h=s.bind(this)(...o),h instanceof Promise){let b=await h;return p(b)}return p(h)}catch(b){throw m(b)}};if(t){let b=`${n}:${this?.__public_identifier||""}:${this?.service||""}:${this?.owner||""}`;return kt?.[b]||(kt[b]=_().finally(()=>{delete kt[b];})),kt[b]}return _()};}}async function Ci(){await this.__connection;let e=`${this.service}:${Z.hash(window.location.href.split("?")[0])}`,t=window.sessionStorage.getItem(e);if(window.sessionStorage.removeItem(e),t!==null){try{t=JSON.parse(t);}catch{}return t}return null}var Ha=256,Ga=256,Wa=256,Oi=256,Qa="\u{10FFFF}",za=/[\u0000-\u001F\u007F]|\u{10FFFF}/u,Ja={"/":"%2F","!":"%21","*":"%2A","#":"%23"},Ya={"%2F":"/","%21":"!","%2A":"*","%23":"#"};function Xa(e){return e.replace(/%/g,"%25").replace(/[\/!*#]/g,r=>Ja[r]||r)}function le(e){return typeof e!="string"?e:e.replace(/%(2F|21|2A|23)/gi,r=>{let n=r.toUpperCase();return Ya[n]||r}).replace(/%25/gi,"%")}function fe(e,t,r={}){let{allowEmpty:n=false,maxLength:i,blockKeyDelimiters:s=false,disallowLeadingDollar:o=false,onlyAlphanumeric:l=false}=r;if(typeof e!="string")throw new a(`"${t}" should be type: <string>.`,{code:"INVALID_PARAMETER"});if(l&&/[^a-zA-Z0-9]/.test(e))throw new a(`"${t}" should only contain alphanumeric characters.`,{code:"INVALID_PARAMETER"});if(!n&&e.length===0)throw new a(`"${t}" is required.`,{code:"INVALID_PARAMETER"});if(i&&e.length>i)throw new a(`"${t}" should be <= ${i} characters.`,{code:"INVALID_PARAMETER"});if(za.test(e)||e.includes(Qa))throw new a(`"${t}" cannot include control characters or unsupported sentinel characters.`,{code:"INVALID_PARAMETER"});if(s&&(e=Xa(e),i&&e.length>i))throw new a(`"${t}" should be <= ${i} characters. "/", "!", "*", "#" and "%" count as 3 characters each.`,{code:"INVALID_PARAMETER"});if(o&&e.startsWith("$"))throw new a(`"${t}" cannot start with "$".`,{code:"INVALID_PARAMETER"});return e}function Me(e,t="table.name",r={}){return fe(e,t,{allowEmpty:r.allowEmpty===true,maxLength:Ha,blockKeyDelimiters:true})}function Nt(e,t="tag",r={}){return fe(e,t,{allowEmpty:r.allowEmpty===true,maxLength:Ga,blockKeyDelimiters:true})}function st(e,t="index.name",r={}){return fe(e,t,{allowEmpty:r.allowEmpty===true,maxLength:Wa,blockKeyDelimiters:true,disallowLeadingDollar:true})}function Li(e,t="index.value"){return fe(e,t,{allowEmpty:true,maxLength:Oi})}function kr(e){return typeof e=="string"&&e.slice(-1)==="."}function vr(e,t){return fe(e,t,{allowEmpty:true,maxLength:Oi,blockKeyDelimiters:true})}function Mi(e){if(!e.record_id&&!e.unique_id)return null;let t={};return e?.service&&(t.service=e.service),e?.owner&&(t.owner=e.owner),e?.record_id?t.record_id=fe(e.record_id,"record_id",{allowEmpty:false,onlyAlphanumeric:true}):e?.unique_id&&(t.unique_id=e.unique_id),t}function Nr(e){if(e===void 0)return 0;if(typeof e=="number"){if(e>99||e<0)throw new a('"table.access_group" value should be within a range of 0 ~ 99.',{code:"INVALID_REQUEST"})}else if(typeof e=="string"){if(e={"*":"private",private:"private",public:0,authorized:1,admin:99}[e],e===void 0)throw new a('"table.access_group" is invalid.',{code:"INVALID_PARAMETER"})}else throw new a('"table.access_group" should be type: <number | string>.',{code:"INVALID_PARAMETER"});if(!this.__user&&e)throw new a("Unsigned users have no access to records with access group.",{code:"INVALID_REQUEST"});return e}var vt=4503599627370496;function Dt(e){if(typeof e=="number"){if(e>vt||e<-vt)throw new a(`Number value should be within range -${vt} ~ +${vt}`,{code:"INVALID_PARAMETER"});return e}if(typeof e=="boolean")return e;if(typeof e=="string")return Li(e,"index.value");throw new a('"index.value" should be type: <number | boolean | string>.',{code:"INVALID_PARAMETER"})}function Fi(e,t){if(!t.index||!("value"in t.index))throw new a('"index.value" is required.',{code:"INVALID_PARAMETER"});if(t.index.name==="$record_id")throw new a(`Cannot do "index.range" on ${t.index.name}`,{code:"INVALID_PARAMETER"});if(typeof t.index.value!=typeof e)throw new a('"index.range" type should match the type of "index.value".',{code:"INVALID_PARAMETER"});return typeof e=="string"?kr(t.index.name)?vr(e,"index.range"):Li(e,"index.range"):e}var Ut={},Za=10080*60,el=3600,qi=2;function tl(e,t){if(!t)return String(qi);let r=Math.max(60,e-300)*1e3;return "g"+qi+"w"+Math.floor(Date.now()/r)}function rl(e){if(!this.user?.user_id)return false;let t=e[6]==="**"?"**":parseInt(e[6]),r=this.user?.access_group??-1;return !(this.user.user_id!==e[3]&&(t==="**"||r<t))}function nl(e){if(typeof e=="string"){if(e.startsWith("!J%"))try{return JSON.parse(e.substring(3))}catch{return e}return e==="!D%{}"?{}:e==="!L%[]"?[]:e}if(e&&typeof e=="object"&&!Array.isArray(e)&&typeof e.__json__=="string"&&Object.keys(e).length===1)try{return JSON.parse(e.__json__)}catch{}return e}async function xt(e){return typeof e=="string"?e:e&&typeof e.text=="function"?await e.text():await new Promise((t,r)=>{try{let n=new FileReader;n.onload=()=>t(n.result),n.onerror=()=>r(n.error||new Error("Failed to read blob")),n.readAsText(e);}catch(n){r(n);}})}function Ur(e){return !!e&&typeof e=="object"&&!Array.isArray(e)&&typeof e.__data__=="string"&&Object.keys(e).length===1&&e.__data__.endsWith("/__data__/__json__.json")}var Fe=new Map,il=1024,sl=/^[0-9A-Za-z]+\/[0-9A-Za-z]+\/__data__\/__json__\.json$/,ji=/^[0-9A-Za-z_-]+$/,ol=/^(\d{2}|\*\*)$/;function $i(e){if(typeof e!="string")return null;let t=e.split("?")[0].split("/");if(t.length<15||t[0]!=="https:"||t[1]!==""||!t[2])return null;let r=t.slice(3);return r[0]!=="publ"&&r[0]!=="auth"||r[4]!=="records"||r[7]!=="bin"||!ji.test(r[1])?null:{origin:t.slice(0,3).join("/"),service:r[1]}}function al(e){let t=$i(e);!t||Fe.get(t.service)===t.origin||(Fe.size>=il&&!Fe.has(t.service)&&Fe.clear(),Fe.set(t.service,t.origin));}function Vi(e,t){if(typeof t!="string"||!sl.test(t))return null;let r=typeof e.usr_tbl=="string"?e.usr_tbl.split("/"):null,n=typeof e.tbl=="string"?e.tbl.split("/"):null,i=null,s=null;if(typeof e.srvc=="string"){let f=e.srvc.split("!")[0].split("/");f.length===2&&(i=f[0],s=f[1]);}i||(i=r?.[2]||n?.[1]||null,i&&i===this.service&&(s=this.owner));let o=typeof e.usr=="string"&&e.usr?e.usr:r?.[0]||null,l=r?.[3]||n?.[2]||null,u=e.rec;for(let f of [i,s,o,u])if(typeof f!="string"||!ji.test(f))return null;if(typeof l!="string"||!ol.test(l))return null;let c=null;if(Array.isArray(e.bin))for(let f of e.bin){let g=$i(f);if(g&&g.service===i){c=g.origin;break}}return c=c||Fe.get(i)||null,c?`${c}/${l==="00"?"publ":"auth"}/${i}/${s}/${o}/records/${u}/${l}/bin/${t}`:null}async function Se(e,t,r=false,n=false,i=false){let s={user_id:"",record_id:"",updated:0,uploaded:0,readonly:false,table:{name:"",access_group:0,subscription:{is_subscription_record:false,upload_to_feed:false,notify_subscribers:false,feed_referencing_records:false,notify_referencing_records:false}},referenced_count:0,source:{referencing_limit:null,prevent_multiple_referencing:false,can_remove_referencing_records:false,only_granted_can_reference:false},ip:"",bin:{}},o=false,l=[],u=null;function c(d){let p=d=="**"?"private":parseInt(d);return p=p==0?"public":p==1?"authorized":p==99?"admin":p,p}let f={ip:d=>{let p=d.split("#"),h=p[0];p.length>1&&(s.unique_id=p.slice(1).join("#")),h.slice(-1)==="R"?(s.readonly=true,h=h.slice(0,-1)):s.readonly=false,/^\d{1,3}-\d{1,3}-\d{1,3}-\d{1,3}$/.test(h)&&(h=h.split("-").join("."),o=true),s.ip=h;},rec:d=>{if(!d)return;s.record_id=d;let p=d.substring(0,d.length-9),h=se(p);s.uploaded=h;},usr:d=>{s.user_id=d;},tbl:d=>{if(d&&!s.table.name){let p=d.split("/");s.table.name=le(p[0]),s.table.access_group=c(p[2]),p?.[3]&&(s.table.subscription.is_subscription_record=true);}},usr_tbl:d=>{let p=d.split("/");s.user_id||(s.user_id=p[0]),s.table.name||(s.table.name=le(p[1]),s.table.access_group=c(p[3]),p?.[4]&&(s.table.subscription.is_subscription_record=true));},idx:d=>{if(!d)return;let p=d.split("!"),h=le(p.splice(0,1)[0]),m=ll("!"+p.join("!"));s.index={name:h,value:m};},ref:d=>{d&&(s.reference=d.split("/")[0]);},tags:d=>{s.tags=Array.isArray(d)?d.map(p=>le(p)):d;},upd:d=>{s.updated=d;},acpt_mrf:d=>{s.source.prevent_multiple_referencing=!d;},ref_limt:d=>{s.source.referencing_limit=d;},rfd:d=>{s.referenced_count=d;},bin:async d=>{let p={},h=s?.reference||null;if(Array.isArray(d)){let m=await Promise.all(d.map(async _=>{try{let b=_.split("/").slice(3).join("/"),A=b.split("/");if(A.length<12)return null;let w=A[A.length-1],I=A[10];if(I==="__data__"&&w==="__json__.json")return {isDataFile:!0,rawUrl:_};if(fr(I,w))return {isDataFile:!0,rawUrl:_};let E=Tt(I),N=A[9],C=A[8],D=c(A[6]),v=_,U=D!=="public"&&rl.call(this,A)?{expires:el,browserCache:Za}:null;if(D!=="public"&&!i)try{v=await _e.bind(this)(_,{dataType:"endpoint",_ref:h});}catch(M){console.error("Error getting signed url for private file:",M),v=_;}let x={access_group:D,filename:w,url:v,path:b,size:E?E.plainSize:se(N),uploaded:se(C),getFile:(M,de)=>{let ie={dataType:M||"download",progress:de,_ref:h},F=()=>_e.bind(this)(v,Object.assign({},ie,{_update:x}));return U?_e.bind(this)(_,Object.assign({},ie,U)).catch(()=>F()):F()}};return E&&(x.encrypted=!0,x.stored_size=se(N)),{pathKey:E?E.key:I,obj:x}}catch{return null}}));for(let _ of m)if(_&&!_.isDataFile){if(p[_.pathKey]){p[_.pathKey].push(_.obj);continue}p[_.pathKey]=[_.obj];}}s.bin=p;},prv_acs:d=>{for(let p in d)["notify_subscribers","upload_to_feed","feed_referencing_records","notify_referencing_records"].includes(p)?s.table.subscription[p]=d[p]:p==="referencing_index_restrictions"&&Array.isArray(d[p])?s.source[p]=d[p].map(m=>m&&typeof m=="object"&&typeof m.name=="string"?Object.assign({},m,{name:le(m.name)}):m):s.source[p]=d[p];},data:async d=>{let p={access_group:s.table.access_group,table_name:s.table.name,user_id:s.user_id,record_id:s.record_id,unique_id:s.unique_id,ctUrl:u},h=()=>{L.call(this)&&(s.encrypted={status:"failed",reason:"DATA_UNAVAILABLE"});},m=async b=>{if(n||!L.call(this)&&!Et(b))return b;let A=await Cn.bind(this)(b,p);return A.flag&&(s.encrypted=A.flag),A.value},_=nl(d);if(_!==d){s.data=await m(_);return}if(Ur(d)){let b=d.__data__,A=l.find(w=>w.endsWith(b))||null;if(!A&&!r){await Promise.resolve();let w=Vi.call(this,e,b),I=false,E;if(w)try{let N=await _e.bind(this)(w,{dataType:"blob",_ref:s.reference||null});E=JSON.parse(await xt(N)),I=!0;}catch{}if(I){s.data=await m(E);return}h();}if(A){if(r){s.data=d;return}try{let w=await _e.bind(this)(A,{dataType:"blob",_ref:s.reference||null}),I=await xt(w);s.data=await m(JSON.parse(I));}catch(w){let I=Vi.call(this,e,b),E=false,N;if(I&&I!==A)try{let C=await _e.bind(this)(I,{dataType:"blob",_ref:s.reference||null});N=JSON.parse(await xt(C)),E=!0;}catch{}if(E){s.data=await m(N);return}console.error("Failed to fetch offloaded record data:",w),s.data=null,h();}return}}s.data=await m(d);}};if(e.record_id)return e;if(Array.isArray(e.bin))for(let d of e.bin)try{if(typeof d!="string")continue;al(d);let p=d.split("/").slice(3);p.length>=12&&p[10]==="__data__"&&p[p.length-1]==="__json__.json"&&l.push(d),p.length>=12&&fr(p[10],p[p.length-1])&&(u=d);}catch{}let g=[];for(let d in f)if(e.hasOwnProperty(d)){let p=f[d](e[d]);p instanceof Promise&&g.push(p);}return o&&(s.user_id="anonymous:"+s.user_id),await Promise.all(g),s}function ll(e){let t=e.substring(3);switch(e.substring(0,3)){case "!S%":return t;case "!N%":let n=t.split("."),i=Number(n[0])-4503599627370496;return n.length===1?i:parseFloat(i.toString()+"."+n[1]);case "!B%":return t==="1";case "!L%":case "!D%":try{return JSON.parse(t)}catch{throw new a("Value parse error.",{code:"PARSE_ERROR"})}default:return e}}async function Bi(e){let{endpoints:t}=e;if(typeof t=="string"&&(t=[t]),!Array.isArray(t))throw new a('"endpoints" should be type: array | string.',{code:"INVALID_PARAMETER"});let r=await S.bind(this)("del-files",{endpoints:t,storage:"records"},{auth:true,method:"post"}),n=[];for(let i in r)n.push(Se.bind(this)(r[i]));return Promise.all(n)}async function _e(e,t){if(typeof e!="string")throw new a('"url" should be type: string.',{code:"INVALID_PARAMETER"});let r=e,n=e.split("?"),i=n.shift()||"",s=n.length?"?"+n.join("?"):"",o=y.Url(i);e=o+s;let l=false,u=o.split("/"),f=u[2].split("."),g=null;f.length===3&&f[1]==="skapi"&&(g=f[0],l=true);let d=u.slice(3),p=false;if(!l&&(d[0]==="auth"||d[0]==="publ"))try{y.UserId(d[2]),y.UserId(d[3]),p=d[0]=="auth",l=!0;}catch{throw new a("Invalid file url.",{code:"INVALID_PARAMETER"})}let h=g?null:d[1];if(t=y.Params(t,{expires:["number",()=>0],browserCache:["number",()=>0],refresh:["boolean",()=>false],dataType:["base64","blob","endpoint","text","info",()=>"download"],progress:["function","undefined",null],_ref:[null,"string"],_update:w=>w}),t?.dataType==="info")return {url:e,filename:d[d.length-1],fileKey:d[d.length-2],access_group:d[6]==="**"?"private":d[6]==="01"?"authorized":d[6]==="00"?"public":parseInt(d[6]),uploader:d[3],record_id:d[4]==="records"?d[5]:"N/A",filesize:se(d[9]),uploaded:se(d[8])};let m=e.split("/").slice(-1)[0],_=t.expires;if(_){if(!l)throw new a("Expires option can only be used on skapi cdn endpoints.",{code:"INVALID_PARAMETER"});if(_<0)throw new a('"config.expires" should be > 0. (seconds)',{code:"INVALID_PARAMETER"});let w={request:g?"get-host":"get",id:g||d[5],key:r.split("?")[0],expires:_};h&&(w.service=h);let I=t.browserCache,E={auth:true};if(I){if(I<0)throw new a('"config.browserCache" should be > 0. (seconds)',{code:"INVALID_PARAMETER"});E.method="get",E.stableGateway=true,w.browser_cache=I;let N=this.session?.idToken?.payload?.sub||this.user?.user_id;N&&(w.uid=N),w.nocache=tl(_,t.refresh);}e=(await S.bind(this)("get-signed-url",w,E)).url;}else if(p){let w=Math.floor(Date.now()/1e3);if(!this.bearerToken&&(!this.session?.idToken?.payload?.exp||this.session.idToken.payload.exp<w)){this.log("getFile:requesting new token",null);try{await W.bind(this)().getSession({refreshToken:!0}),this.log("getFile:received new tokens",{exp:this.session?.idToken?.payload?.exp,currTime:w,expiresIn:this.session?.idToken?.payload?.exp-w,token:this.session?.accessToken?.jwtToken,refreshToken:this.session?.refreshToken?.token});}catch(C){throw this.log("getFile:new token error",C),new a("User login is required.",{code:"INVALID_REQUEST"})}}let I=this.bearerToken||this.session?.idToken?.jwtToken;if(!I||!this.user?.user_id)throw new a("User login is required.",{code:"INVALID_REQUEST"});e+=`${e.includes("?")?"&":"?"}t=${encodeURIComponent(I)}`;let E=d[6]==="**"?"**":parseInt(d[6]),N=this.user?.access_group??-1;if(this.user.user_id!==d[3]&&(E==="**"||N<E)){let C=d[5];if(this.__private_access_key[C]&&typeof this.__private_access_key[C]=="string")e+=`&p=${encodeURIComponent(this.__private_access_key[C])}`;else if(this.owner!==this.host)try{let D=await this.requestPrivateRecordAccessKey({record_id:C,reference_id:t?._ref});e+=`&p=${encodeURIComponent(D)}`;}catch{}}}if((L.call(this)?Ar(e):null)&&t?.dataType!=="endpoint"&&t?.dataType!=="info"){let w=await S.bind(this)(e,null,{method:"get",contentType:null,responseType:"blob",fetchOptions:{progress:t?.progress}},{ignoreService:true}),I=await ri.bind(this)(e,w);if(t?.dataType==="blob")return I;if(t?.dataType==="text")return await xt(I);if(t?.dataType==="base64")return await new Promise((C,D)=>{let v=new FileReader;v.onloadend=()=>C(v.result),v.onerror=()=>D(v.error),v.readAsDataURL(I);});let E=URL.createObjectURL(I),N=document.createElement("a");return N.href=E,document.body.appendChild(N),N.setAttribute("download",m),N.click(),document.body.removeChild(N),setTimeout(()=>URL.revokeObjectURL(E),6e4),null}if(t?.dataType==="endpoint")return t._update&&(t._update.url=e),e;if(t?.dataType==="download"){let w=document.createElement("a");return w.href=e,document.body.appendChild(w),w.setAttribute("download",m),w.target="_blank",w.click(),document.body.removeChild(w),null}return new Promise(async(w,I)=>{try{let E=await S.bind(this)(e,null,{method:"get",contentType:null,responseType:t?.dataType==="text"?"text":"blob",fetchOptions:{progress:t?.progress}},{ignoreService:!0});if(t?.dataType==="base64"){let N=new FileReader;N.onloadend=()=>w(N.result),N.readAsDataURL(E);}else w(E);}catch(E){if(t?.browserCache&&!t?.refresh)try{w(await _e.bind(this)(r,Object.assign({},t,{refresh:!0})));return}catch(N){I(N);return}I(E);}})}function Ct(e,t){return `${e||this.service}/${t||this.owner}`}function Dr(e,t){let r=this.__my_unique_ids[e];return r?r[t]:void 0}function Ki(e,t,r){this.__my_unique_ids[e]||(this.__my_unique_ids[e]={}),this.__my_unique_ids[e][t]=r;}function cl(e,t){this.__my_unique_ids[e]&&delete this.__my_unique_ids[e][t];}function Hi(e,t){return !t||t.table===void 0?e:Object.assign({},e,{table:t.table})}async function ot(e){if(await this.__connection,!this.__user&&this.connection?.opt?.require_login===true)throw new a(`This project requires users to sign in before reading its database, so "${e}" is not available to a signed-out visitor.`,{code:"REQUIRE_LOGIN"})}async function Gi(e,t=false){e=j(e,{ignoreEmpty:true}).data||{};let r=Ct.bind(this)(e?.service,e?.owner),n="",i=Mi(e);if(i){if(e=i,n=e.record_id||e.unique_id,typeof n=="string"){typeof this.__private_access_key?.[n]=="string"&&(e.private_key=this.__private_access_key?.[n]||void 0);let s=Dr.bind(this)(r,n);s&&(t?cl.bind(this)(r,n):e.record_id=s);}}else {let s=await Q.bind(this)(),o=e?.reference,l=false;typeof o=="object"&&Object.keys(o).length&&(o?.record_id||o?.unique_id?(n=o.record_id||o.unique_id,n&&typeof this.__private_access_key?.[n]=="string"&&(e.private_key=this.__private_access_key?.[n]||void 0),e.reference=n):o?.user_id&&(l=o.user_id===this.user?.user_id,e.reference=o.user_id)),typeof e?.table=="string"&&(e.table={name:e.table,access_group:0}),e.index&&e.index.hasOwnProperty("range")&&e.index.hasOwnProperty("condition")&&delete e.index.range;let u=c=>({table:{name:f=>Me(f,"table.name"),access_group:Nr.bind(this),subscription:f=>y.UserId(f,'User ID in "subscription"')},reference:"string",index:{name:["$updated","$uploaded","$referenced_count","$user_id",f=>st(f,"index.name")],value:f=>{let g={$updated:"number",$uploaded:"number",$referenced_count:"number",$user_id:y.UserId};if(g.hasOwnProperty(c.index.name)){let d=g[c.index.name];if(typeof d=="function")return d(f);if(d!==typeof f)throw new a(`"index.value" should be type: ${d}.`,{code:"INVALID_PARAMETER"});return f}return typeof f=="string"&&!f?"":typeof f=="string"&&kr(c.index.name)?vr(f,"index.value"):Dt(f)},condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq"],range:f=>Fi(f,c)},tag:f=>{if(f==null)return f;if(typeof f=="string")return Nt(f,"tag");throw new a('"tag" should be type: string.',{code:"INVALID_PARAMETER"})},private_key:"string"});e=y.Params(e||{},u(e),l||s?[]:["table"],{ignoreEmpty:true});}return {query:e,is_reference_fetch:n}}async function Wi(e,t){await this.__connection,await ot.call(this,"getRecords");let r=await Gi.bind(this)(e),n=r.is_reference_fetch,i=await S.bind(this)("get-records",r.query,{fetchOptions:t,auth:!!this.__user,method:this.__user?"post":"get"});n&&i?.reference_private_key&&typeof i.reference_private_key=="string"&&(this.__private_access_key[n]=i.reference_private_key);let s=[];for(let o in i.list)s.push(Se.bind(this)(i.list[o]));return i.list=await Promise.all(s),i}function xr(e){let t="",r=[],n=Ct.bind(this)(e?.service,e?.owner),i=y.Params(e||{},{record_id:o=>{let l=typeof o=="string"?Dr.bind(this)(n,o):void 0;return l||fe(o,"record_id",{allowEmpty:false})},unique_id:["string",null],readonly:"boolean",table:{name:o=>Me(o,"table.name"),subscription:[null,{is_subscription_record:"boolean",upload_to_feed:"boolean",notify_subscribers:"boolean",feed_referencing_records:"boolean",notify_referencing_records:"boolean"}],access_group:Nr.bind(this)},notification:o=>{if(o==null)return o;if(typeof o!="object"||Array.isArray(o))throw new a('"notification" should be an object with "title" and "body".',{code:"INVALID_PARAMETER"});for(let l of ["title","body"])if(typeof o[l]!="string"||!o[l].trim())throw new a(`"notification.${l}" is required.`,{code:"INVALID_PARAMETER"});return {title:o.title,body:o.body}},source:{referencing_limit:o=>{if(o===null)return null;if(typeof o=="number"){if(0>o)throw new a('"reference_limit" should be >= 0',{code:"INVALID_PARAMETER"});if(o>4503599627370546)throw new a('"reference_limit" should be <= 4503599627370546',{code:"INVALID_PARAMETER"});return o}throw new a('"reference_limit" should be type: <number | null>',{code:"INVALID_PARAMETER"})},prevent_multiple_referencing:"boolean",can_remove_referencing_records:"boolean",only_granted_can_reference:"boolean",allow_granted_to_grant_others:"boolean",referencing_index_restrictions:o=>{if(o===void 0)return;if(!o||Array.isArray(o)&&!o.length)return null;let l={name:c=>st(c,'"name" in "index_restrictions"'),value:c=>Dt(c),condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq","!=","ne",()=>null],range:c=>{if(c!==null&&typeof o.value!=typeof c)throw new a('Index restriction "range" type should match the type of "value".',{code:"INVALID_PARAMETER"});if(!o.hasOwnProperty("value"))throw new a('Index restriction "value" is required.',{code:"INVALID_PARAMETER"});return c}};Array.isArray(o)||(o=[o]);let u=o.map(c=>y.Params(c,l,["name"]));if(u.length)for(let c of u)c.condition&&c.hasOwnProperty("range")&&delete c.range;return u}},reference:o=>{if(o===null)return {record_id:null};if(o){if(typeof o=="string"){t=o;let l=Dr.bind(this)(n,o);return l||o}if(typeof o!="object")throw new a('"reference" should be type: <string | object>.',{code:"INVALID_PARAMETER"});return y.Params(o,{unique_id:"string",record_id:l=>l==null?l:(t=l,typeof this.__private_access_key?.[l]=="string"&&(e.reference_private_key=this.__private_access_key[l]||void 0),fe(l,"reference.record_id",{allowEmpty:false,onlyAlphanumeric:true}))})}},index:[null,{name:o=>st(o,"index.name"),value:o=>Dt(o)}],tags:o=>{if(o==null)return o;if(typeof o=="string"&&(o=o.split(",").map(l=>l.trim())),!Array.isArray(o))throw new a('"tag" should be type: <string | string[]>.',{code:"INVALID_PARAMETER"});return o.map(l=>Nt(l,"tag"))},remove_bin:o=>{if(!o)return null;let l=[];if(Array.isArray(o))for(let u of o)if(typeof u=="string")l.push(u.split("?")[0]);else if(u.url&&u.size&&u.filename){let f=u.url.split("/").slice(0,3).join("/")+"/"+u.path;l.push(f);}else throw new a('"remove_bin" should be type: <string[] | BinaryFile[] | null>',{code:"INVALID_PARAMETER"});else throw new a('"remove_bin" should be type: <string[] | BinaryFile[] | null>',{code:"INVALID_PARAMETER"});return l},progress:"function",data:o=>o},[],{precall:o=>{let l=o?.data||{};if(!l?.record_id&&!l.table)throw new a('"table.name" is required.',{code:"INVALID_PARAMETER"});typeof l.table=="string"&&(l.table={name:l.table},l?.record_id||(l.table.access_group=0)),o.files&&(r=o.files);}}),s=e.progress||null;if(delete i.progress,!this.__user){let o=!!(i.table?.subscription?.is_subscription_record||i.table?.subscription?.upload_to_feed||i.table?.subscription?.notify_subscribers||i.table?.subscription?.feed_referencing_records||i.table?.subscription?.notify_referencing_records);if(i.record_id)throw new a("Public users cannot update existing records.",{code:"INVALID_REQUEST"});if(i.table.access_group!=="public"&&i.table.access_group!==0)throw new a("Public users can only post records to public tables.",{code:"INVALID_REQUEST"});if(o)throw new a("Public users cannot post subscription records.",{code:"INVALID_REQUEST"});if(i.remove_bin)throw new a("Public users cannot remove files from records.",{code:"INVALID_REQUEST"});if(i.unique_id)throw new a("Public users cannot set unique_id for records.",{code:"INVALID_REQUEST"})}return {config:i,progress:s,is_reference_post:t,files:r}}async function Cr(e){if(await this.__connection,!Array.isArray(e)||!e.length)throw new a('"params" should be a non-empty array.',{code:"INVALID_PARAMETER"});let t=[],r,n,i=null,s={},o={},u={_is_bulk_:await Promise.all(e.map(async(h,m)=>{if(!h||typeof h!="object"||Array.isArray(h))throw new a(`"params[${m}]" should be type: <object>.`,{code:"INVALID_PARAMETER"});o[m]={has:h.data!==void 0,value:h.data};let _=xr.bind(this)(h),b=_.config;if(L.call(this)){let A=Object.prototype.hasOwnProperty.call(b,"data"),w=await gr.bind(this)(b.data,Hi(h,b),A);w.encrypted&&(b.data=w.send,s[m]=w.plain);}if(_.is_reference_post&&t.push(_.is_reference_post),typeof b.progress=="function"&&i===null&&(i=b.progress),b.service!==void 0){if(r===void 0)r=b.service;else if(r!==b.service)throw new a('All bulk params should share the same "service" value.',{code:"INVALID_PARAMETER"})}if(b.owner!==void 0){if(n===void 0)n=b.owner;else if(n!==b.owner)throw new a('All bulk params should share the same "owner" value.',{code:"INVALID_PARAMETER"})}return delete b.progress,delete b.service,delete b.owner,b})),service:"",owner:""};r!==void 0&&(u.service=r),n!==void 0&&(u.owner=n);let c={auth:!!this.__user,method:"post"},f={};Object.keys(f).length&&Object.assign(c,{fetchOptions:f});let g=await S.bind(this)("post-record",u,c),d=await Promise.all(g.map((h,m)=>Se.bind(this)(h,"called from postRecord",o[m]?.has===true,s.hasOwnProperty(m))));for(let h=0;h<d.length;h++)s.hasOwnProperty(h)&&d[h]&&!d[h].error?(d[h].data=s[h],d[h].encrypted={status:"encrypted"}):o[h]?.has&&d[h]&&!g[h]?.error&&Ur(g[h]?.data)&&(d[h].data=o[h].value);let p=Ct.bind(this)(r,n);for(let h=0;h<g.length;h++){let m=g[h],_=d[h];if(m&&typeof m=="object"&&m.error&&_&&!_.record_id&&(_.error=m.error),typeof m?.reference_private_key=="string")for(let b of t)this.__private_access_key[b]=m.reference_private_key;_?.unique_id&&Ki.bind(this)(p,_.unique_id,_.record_id);}return d}async function Or(e,t,r){if(await this.__connection,!t)throw new a('"config" argument is required.',{code:"INVALID_PARAMETER"});let n=xr.bind(this)(t),i=n.config,s=n.progress,o=n.is_reference_post,l={auth:!!this.__user,method:"post"},u=[],c=j(e);r&&Array.isArray(r)&&r.length&&(u=u.concat(r)),c.files&&Array.isArray(c.files)&&c.files.length&&(u=u.concat(c.files));let f=t?.data!==void 0?t.data:c.data,g=f!==void 0,d=await gr.bind(this)(f,Hi(t,i),g),p=null;p=Object.assign({},i),delete p.data,d.omit||(p.data=d.send);let h={};if(typeof s=="function"&&(h.progress=s),Object.keys(h).length&&Object.assign(l,{fetchOptions:h}),d.files==="decrypt"&&t?.record_id){let w=await Rr.bind(this)(t.record_id,"decrypt",s);if(w.length){let I=p.remove_bin;p.remove_bin=Array.isArray(I)?I.concat(w):w;}}if(d.spill&&t?.record_id){let w=new FormData;if(w.append(et,new File([d.spill],"payload.bin",{type:"application/octet-stream"})),await it.bind(this)(w,{record_id:t.record_id}),d.retireCt){let I=p.remove_bin,E=[d.retireCt];p.remove_bin=Array.isArray(I)?I.concat(E):E;}}let m=await S.bind(this)("post-record",p,l);if(d.encrypted&&m?.rec&&Un.bind(this)(m.rec,d.dek),d.files==="encrypt"&&m?.rec)try{let w=await Rr.bind(this)(m.rec,"encrypt",s);w.length&&await Or.bind(this)(void 0,{record_id:m.rec,remove_bin:w});}catch(w){console.error("Failed to encrypt existing attachments after making the record private:",w);}if(H()&&u.length){let w=new FormData;for(let N of u)w.append(N.name,N.file,N.file.name);let I={record_id:m.rec,progress:s};i.hasOwnProperty("service")&&(I.service=i.service);let{bin_endpoints:E}=await it.bind(this)(w,I);m.bin?m.bin.push(...E):m.bin=E;}o&&typeof m?.reference_private_key=="string"&&(this.__private_access_key[o]=m.reference_private_key);let _=!!m&&Ur(m.data),b=!d.omit&&d.send!==void 0,A=await Se.bind(this)(m,"called from postRecord",b,d.encrypted);if(_&&b&&!d.encrypted&&(A.data=d.plain),d.encrypted&&(A.data=d.plain,A.encrypted={status:"encrypted",recipients:Object.keys(d.send.k||{})}),A.unique_id){let w=Ct.bind(this)(i?.service,i?.owner);Ki.bind(this)(w,A.unique_id,A.record_id),H()&&(this.__uniqueIdsPersistTimer!==null&&clearTimeout(this.__uniqueIdsPersistTimer),this.__uniqueIdsPersistTimer=setTimeout(()=>{this.__uniqueIdsPersistTimer=null;try{window.sessionStorage.setItem(`${w}:uniqueids`,JSON.stringify(this.__my_unique_ids[w]||{}));}catch{}},500));}return A}async function Qi(e,t){await ot.call(this,"getTables");let r=await S.bind(this)("get-table",y.Params(e||{},{table:i=>Me(i,"table",{allowEmpty:true}),condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq","!=","ne"]}),Object.assign({auth:!!this.__user},{fetchOptions:t})),n={cnt_rec:"number_of_records",tbl:"table",srvc:"service",grp_:"number_of_records_in_access_group_"};if(Array.isArray(r?.list))for(let i of r.list){for(let s in n){if(s==="grp_"){for(let o in i)if(o.startsWith("grp_")){let l=o.substring(4);l==="pv"?l="private":l==="00"?l="public":l==="01"?l="authorized":l==="99"&&(l="admin"),i[`number_of_records_in_access_group_${l}`]=i[o],delete i[o];}}i.hasOwnProperty(s)&&(i[n[s]]=i[s],delete i[s]);}typeof i.table=="string"&&(i.table=le(i.table));}return r}async function zi(e,t){if(await ot.call(this,"getIndexes"),!e?.table)throw new a('"table" is required.',{code:"INVALID_PARAMETER"});let r=y.Params(e||{},{table:s=>Me(s,"table",{allowEmpty:true}),index:s=>st(s,"index.name"),order:{by:["average_number","total_number","number_count","average_bool","total_bool","bool_count","string_count","index_name","number_of_records"],value:s=>{if(e?.order?.by==="index_name"&&typeof s=="string")return fe(s,"order.value",{allowEmpty:true,maxLength:256,blockKeyDelimiters:true});if(typeof s!="string"&&typeof s!="number"&&typeof s!="boolean")throw new a('"order.value" should be type: <string | number | boolean>.',{code:"INVALID_PARAMETER"});return s},condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq","!=","ne"]}},["table"]);if(r.hasOwnProperty("order")){if(!r.order?.by)throw new a('"order.by" is required.',{code:"INVALID_PARAMETER"});if(r.order.hasOwnProperty("condition")&&!r.order.hasOwnProperty("value"))throw new a('"value" is required for "condition".',{code:"INVALID_PARAMETER"});if(r.hasOwnProperty("index")&&r.index.substring(r.index.length-1)!==".")throw new a('"index" should be a parent index name of the compound index when using "order.by"',{code:"INVALID_PARAMETER"})}let n=await S.bind(this)("get-index",r,Object.assign({auth:!!this.__user},{fetchOptions:t})),i={cnt_bool:"boolean_count",cnt_numb:"number_count",totl_numb:"total_number",totl_bool:"total_bool",avrg_numb:"average_number",avrg_bool:"average_bool",cnt_str:"string_count"};return Array.isArray(n?.list)&&(n.list=n.list.map(s=>{let o=s.idx.split("/"),l={table:le(o[1]),index:le(o[2]),number_of_records:s.cnt_rec};for(let u in i)Object.prototype.hasOwnProperty.call(s,u)&&(l[i[u]]=s[u]);return l})),n}async function Ji(e,t){await ot.call(this,"getTags");let r=await S.bind(this)("get-tag",y.Params(e||{},{table:n=>Me(n,"table",{allowEmpty:true}),tag:n=>Nt(n,"tag",{allowEmpty:true}),condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq","!=","ne"]}),Object.assign({auth:!!this.__user},{fetchOptions:t}));return Array.isArray(r?.list)&&(r.list=r.list.map(n=>{let i=n.tag.split("/");return {table:le(i[1]),tag:le(i[0]),number_of_records:n.cnt_rec}})),r}async function Yi(e,t){await ot.call(this,"getUniqueId");let r=await S.bind(this)("get-uniqueid",y.Params(e||{},{unique_id:"string",condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq","!=","ne"]}),Object.assign({auth:!!this.__user},{fetchOptions:t}));if(Array.isArray(r?.list))for(let n in r.list){let i=r.list[n];r.list[n]={unique_id:i.unq,record_id:i.rec};}return r}async function Xi(e,t){await this.__connection;let r=await Gi.bind(this)(e,true),n=r.is_reference_fetch,i=await S.bind(this)("del-records",r.query,{auth:true,fetchOptions:t});return n&&typeof i?.reference_private_key=="string"&&(this.__private_access_key[n]=i.reference_private_key),Array.isArray(i?.list)&&(i.list=await Promise.all(i.list.map(async s=>{if(!s||typeof s!="object")return s;try{return await Se.bind(this)(s,"called from deleteRecords",!0,!1,!0)}catch{return s}}))),i?.message||i}async function Zi(e){if(L.call(this)){let t=typeof e.user_id=="string"?[e.user_id]:e.user_id;Array.isArray(t)&&t.length&&await Er.bind(this)(e.record_id,t);}return ns.bind(this)({record_id:e.record_id,user_id:e.user_id,execute:"add"})}async function es(e){let t=await ns.bind(this)({record_id:e.record_id,user_id:e.user_id||null,execute:"remove"});if(L.call(this)){let r=typeof e.user_id=="string"?[e.user_id]:e.user_id;await Wn.bind(this)(e.record_id,Array.isArray(r)&&r.length?r:null);}return t}async function ts(e,t){let r={record_id:e.record_id||void 0,user_id:e.user_id||void 0,execute:"list"};if(!r.record_id&&!r.user_id)throw new a("Either record_id or user_id must be provided.",{code:"INVALID_PARAMETER"});if(r.user_id)if(typeof r.user_id=="string")y.UserId(r.user_id),r.user_id=[r.user_id];else if(Array.isArray(r.user_id))for(let s of r.user_id)y.UserId(s);else throw new a("user_id should be type: <string | string[]>",{code:"INVALID_PARAMETER"});let n=s=>(s.rec_usr?(s.record_id=s.rec_usr.split("/")[0],s.user_id=s.rec_usr.split("/")[1]):s.usr_rec&&(s.user_id=s.usr_rec.split("/")[0],s.record_id=s.usr_rec.split("/")[1]),s),i=await S.bind(this)("grant-private-access",r,{auth:true,fetchOptions:t});return i.list=i.list.map(n),i}function rs(e){let t=e.record_id,r=e.reference_id||void 0;if(!t)throw new a("Record ID is required.",{code:"INVALID_PARAMETER"});if(typeof t!="string")throw new a("Record ID should be type: <string | string[]>",{code:"INVALID_PARAMETER"});if(r&&typeof r!="string")throw new a("Reference ID should be type: <string>",{code:"INVALID_PARAMETER"});if(typeof this.__private_access_key[t]=="string")return Promise.resolve(this.__private_access_key[t]);if(Ut[t])return Ut[t];let n=S.bind(this)("request-private-access-key",{record_id:t,reference_id:r},{auth:true}).then(i=>{let s=typeof i=="string"?i:i?.private_key;if(typeof s!="string")throw new a("Invalid private access key response.",{code:"ERROR"});return this.__private_access_key[t]=s,s}).finally(()=>{delete Ut[t];});return Ut[t]=n,n}function ns(e){e.execute;let r=y.Params(e,{record_id:"string",user_id:n=>{if(!n)throw new a("User ID is required.",{code:"INVALID_PARAMETER"});let i=n;if(typeof i=="string"&&(i=[i]),i.length>100)throw new a("Cannot process more than 100 users at once.",{code:"INVALID_REQUEST"});for(let s of i)y.UserId(s,'User ID in "user_id"');return i},execute:["add","remove"]},["execute","record_id","user_id"]);return r.user_id||(r.user_id=null),S.bind(this)("grant-private-access",r,{auth:true})}var ul=100;async function is(e){if(await this.__connection,!Array.isArray(e)||!e.length)throw new a('"items" should be a non-empty array.',{code:"INVALID_PARAMETER"});let t=[],r=[],n=[];for(let s=0;s<e.length;s++){let o=e[s];try{if(!o||typeof o!="object"||Array.isArray(o))throw new a(`"items[${s}]" should be an object with "config".`,{code:"INVALID_PARAMETER"});let l=o.config;if(!l||typeof l!="object"||Array.isArray(l))throw new a(`"items[${s}].config" is required.`,{code:"INVALID_PARAMETER"});xr.bind(this)(Object.assign({},l));let u=Object.assign({},l);delete u.data;let c=l.data!==void 0?l.data:o.data;if(c!==void 0){let f=c!==null&&typeof c=="object"?j(c):{data:c,files:[]};if(f.files&&f.files.length)throw new a(`"items[${s}].data" carries files. postRecords() does not attach files; use uploadFiles() on the saved record.`,{code:"INVALID_PARAMETER"});u.data=f.data;}n.push({index:s,config:u});}catch(l){r.push({index:s,code:String(l?.code||"INVALID_PARAMETER"),message:String(l?.message||l)});}}let i=0;for(;i<n.length;){let s=n.slice(i,i+ul),o=await Cr.bind(this)(s.map(u=>Object.assign({},u.config)));if(!Array.isArray(o)||!o.length){for(let u of s)r.push({index:u.index,code:"ERROR",message:"The server answered nothing for this record."});i+=s.length;continue}let l=Math.min(o.length,s.length);for(let u=0;u<l;u++){let c=o[u];if(c&&c.record_id)t.push(c);else {let f=c?.error||{};r.push({index:s[u].index,code:String(f.code||"ERROR"),message:String(f.message||"The record was not saved.")});}}i+=l;}return r.sort((s,o)=>s.index-o.index),{list:t,failed:r}}var O={},G={},ce={},pe={},ge={},Ot={},Lt={};function ss(e,t,r){e[t]||(e[t]=[]),e[t].push(r);}async function Mt(e,t,r){let n=[];if(e[t]){for(let i of e[t])if(i){let s=r(i);s instanceof Promise&&(s=await s),n.push(s);}delete e[t];}return n}var dl="stun:stun.skapi.com:3468";function os(e){if(e==null||e==="")return [{urls:dl}];let t=r=>typeof r=="string"&&/^(stun|stuns|turn|turns):/.test(r);if(typeof e=="string"){if(!t(e))throw new a('"ice" should be a "stun:", "stuns:", "turn:" or "turns:" url, or a list of { urls, username, credential }.',{code:"INVALID_PARAMETER"});return [{urls:e}]}if(!Array.isArray(e)||!e.length)throw new a('"ice" should be a url string, or a non-empty list of { urls, username, credential }.',{code:"INVALID_PARAMETER"});return e.map((r,n)=>{if(!r||typeof r!="object"||Array.isArray(r))throw new a(`"ice[${n}]" should be an object: { urls, username, credential }.`,{code:"INVALID_PARAMETER"});let i=r.urls,s=Array.isArray(i)?i:[i];if(!s.length||!s.every(t))throw new a(`"ice[${n}].urls" should be a "stun:", "stuns:", "turn:" or "turns:" url, or a list of them.`,{code:"INVALID_PARAMETER"});let o={urls:i};for(let l of ["username","credential"])if(r[l]!==void 0){if(typeof r[l]!="string")throw new a(`"ice[${n}].${l}" should be type: <string>.`,{code:"INVALID_PARAMETER"});o[l]=r[l];}if(s.some(l=>/^turns?:/.test(l))&&(!o.username||!o.credential))throw new a(`"ice[${n}]" is a TURN server: it needs "username" and "credential".`,{code:"INVALID_PARAMETER"});return o})}async function Mr(e,t){if(!this?.session?.accessToken?.jwtToken)throw new a("Access token is required.",{code:"INVALID_PARAMETER"});let r=await this.__socket;async function n(i,s,o){this.log("answerSdpOffer from",s),await O[s].setRemoteDescription(new RTCSessionDescription(i));let l=await O[s].createAnswer();await O[s].setLocalDescription(l),o.send(JSON.stringify({action:"rtc",uid:s,content:{sdpanswer:l},token:this.session.accessToken.jwtToken}));}O?.[t]?e?(await Mt(Lt,t,i=>n.bind(this)(i,t,r)),await n.bind(this)(e,t,r)):await Mt(Lt,t,i=>n.bind(this)(i,t,r)):e&&ss(Lt,t,e);}async function Fr(e,t){if(this.log("receiveIceCandidate",e),O?.[t]&&O[t]?.remoteDescription&&O[t]?.remoteDescription?.type){if(!e)return Mt(Ot,t,r=>O[t].addIceCandidate(r));await Mt(Ot,t,r=>O[t].addIceCandidate(r)),await O[t].addIceCandidate(e);}else ss(Ot,t,e);}async function ue(e){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebRTC is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});y.Params(e,{cid:s=>{if(typeof s!="string")throw new a('"cid" should be type: <string>.',{code:"INVALID_PARAMETER"});if(s&&s.slice(0,4)!=="cid:")throw new a('"cid" should be a valid connection id.',{code:"INVALID_PARAMETER"});return s},close:"boolean"});let t=await this.__socket,{cid:r,close_all:n=false}=e||{};if(!n&&!r)throw new a('"cid" is required.',{code:"INVALID_PARAMETER"});let i=s=>{if(!s)throw new a('"cid" is required.',{code:"INVALID_PARAMETER"});if(delete Lt[s],delete Ot[s],G[s]&&Object.values(G[s]).forEach(o=>{o.readyState!=="closed"&&o.close();}),delete G[s],O?.[s]){O[s].connectionState!=="closed"&&(O[s].close(),t.send(JSON.stringify({action:"rtc",uid:s,content:{hungup:this.user.user_id},token:this.session.accessToken.jwtToken})));let o={type:"connectionstatechange",target:O[s],timestamp:new Date().toISOString(),state:O[s].connectionState,iceState:O[s].iceConnectionState,signalingState:O[s].signalingState};ge[s]&&ge[s](o),this.log("closeRTC",o);}delete ge[s],delete pe[s],delete ce[s],delete O[s];};if(n)for(let s in O)i(s);else i(r);this.log("Cleaning up media stream..."),this.__mediaStream&&(this.__mediaStream.getTracks().forEach(s=>{s.stop();}),this.__mediaStream=null);}async function as(e){if(e instanceof MediaStream)return e;if(!e.video&&!e.audio){let t=new MediaStream,r=document.createElement("canvas");r.width=1,r.height=1;let i=r.captureStream().getVideoTracks()[0];return t.addTrack(i),t}return window.navigator.mediaDevices.getUserMedia(e)}async function ls(e,t){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebRTC is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});if(typeof t!="function")throw new a("Callback is required.",{code:"INVALID_PARAMETER"});if(!this?.session?.accessToken?.jwtToken)throw new a("Access token is required.",{code:"INVALID_PARAMETER"});e=y.Params(e,{cid:o=>{if(typeof o!="string")throw new a('"cid" should be type: <string>.',{code:"INVALID_PARAMETER"});if(o&&o.slice(0,4)!=="cid:")throw new a('"cid" should be a valid connection id.',{code:"INVALID_PARAMETER"});return o},ice:o=>o,media:o=>o,channels:["text-chat","file-transfer","video-chat","voice-chat","gaming",{ordered:"boolean",maxPacketLifeTime:"number",maxRetransmits:"number",protocol:"string"},()=>[{ordered:true,maxPacketLifeTime:10,protocol:"default"}]]},["cid"]);let{cid:r,ice:n}=e;if(!(e?.media instanceof MediaStream)&&(e?.media?.video||e?.media?.audio)&&window.location.hostname!=="localhost"&&window.location.protocol!=="https:")throw new a("Media stream is only supported on either localhost or https.",{code:"INVALID_REQUEST"});let i=this.__socket?await this.__socket:this.__socket;if(!i)throw new a("No realtime connection. Execute connectRealtime() before this method.",{code:"INVALID_REQUEST"});if(i.readyState!==1)throw new a("Realtime connection is not ready.",{code:"INVALID_REQUEST"});let s={iceServers:os(n)};O?.[r]||(O[r]=new RTCPeerConnection(s)),e?.media&&(this.__mediaStream=await as(e.media),this.__mediaStream.getTracks().forEach(o=>{O[r].addTrack(o,this.__mediaStream);})),ge[r]=t,G[r]||(G[r]={});for(let o=0;o<e.channels.length;o++){let l=e.channels[o];if(typeof l=="string")switch(l){case "text-chat":l={ordered:true,maxRetransmits:10,protocol:"text-chat"};break;case "file-transfer":l={ordered:false,maxPacketLifeTime:3e3,protocol:"file-transfer"};break;case "video-chat":l={ordered:true,maxRetransmits:10,protocol:"video-chat"};break;case "voice-chat":l={ordered:true,maxRetransmits:10,protocol:"voice-chat"};break;case "gaming":l={ordered:false,maxPacketLifeTime:100,protocol:"gaming"};break;default:l={ordered:true,maxRetransmits:10,protocol:"default"};break}let u=l.protocol||"default";if(Object.keys(G[r]).includes(u))throw new a(`Data channel with the protocol "${u}" already exists.`,{code:"INVALID_REQUEST"});let c=O[r].createDataChannel(u,l);G[r][u]=c;}for(let o in G[r]){let l=G[r][o];ds.bind(this)(r,l);}return us.bind(this)(r,["onnegotiationneeded"]),await Lr.bind(this)(r),{hangup:()=>ce[r]&&ce[r](false),connection:new Promise(o=>{ce[r]=(l=>{if(this.log("receiver picked up the call",r),!l)return ue.bind(this)({cid:r}),null;O[r].onnegotiationneeded=()=>{this.log("onnegotiationneeded",`sending offer to "${r}".`),Lr.bind(this)(r),ge[r]&&ge[r]({type:"negotiationneeded",target:O[r],timestamp:new Date().toISOString(),signalingState:O[r].signalingState,connectionState:O[r].iceConnectionState,gatheringState:O[r].iceGatheringState});},o({target:O[r],channels:G[r],hangup:()=>ue.bind(this)({cid:r}),media:this.__mediaStream});}).bind(this);})}}function cs(e){return async(t,r)=>{t=t||{},t=j(t).data;let n=e.sender_cid,i=await this.__socket;if(!pe[n])return null;if(typeof r!="function")throw new a("Callback is required.",{code:"INVALID_PARAMETER"});if(!(t?.media instanceof MediaStream)&&(t?.media?.video||t?.media?.audio)&&window.location.hostname!=="localhost"&&window.location.protocol!=="https:")throw new a("Media stream is only supported on either localhost or https.",{code:"INVALID_REQUEST"});let s=os(t.ice);return O?.[n]||(O[n]=new RTCPeerConnection({iceServers:s})),t?.media&&(this.__mediaStream=await as(t.media),this.__mediaStream.getTracks().forEach(o=>{O[n].addTrack(o,this.__mediaStream);})),delete pe[n],ge[n]=r,G[n]||(G[n]={}),O[n].ondatachannel=o=>{this.log("ondatachannel",`received data channel "${o.channel.label}".`);let l=o.channel;G[n][l.label]=l,ds.bind(this)(n,l);},us.bind(this)(n,["onnegotiationneeded"]),await Mr.bind(this)(null,n),await Fr.bind(this)(null,n),i.send(JSON.stringify({action:"rtc",uid:n,content:{pickup:this.user.user_id},token:this.session.accessToken.jwtToken})),{target:O[n],channels:G[n],hangup:()=>ue.bind(this)({cid:n}),media:this.__mediaStream}}}async function Lr(e){if(!this?.session?.accessToken?.jwtToken)throw new a("Access token is required.",{code:"INVALID_PARAMETER"});this.log("sendOffer",e);let t=await this.__socket,r=await O[e].createOffer();await O[e].setLocalDescription(r);let n=O[e].localDescription;this.log("rtcSdpOffer to",n),t.send(JSON.stringify({action:"rtc",uid:e,content:{sdpoffer:n},token:this.session.accessToken.jwtToken}));}async function fl(e,t){if(!this?.session?.accessToken?.jwtToken)throw new a("Access token is required.",{code:"INVALID_PARAMETER"});this.log("sendIceCandidate to",t);let r=await this.__socket;if(!e.candidate){this.log("candidate-end","all ice candidates have been sent");return}let n=ge[t]||(()=>{}),i=e.candidate;this.log("ice gathering state set to",O[t].iceGatheringState),n({type:"icecandidate",target:O[t],timestamp:new Date().toISOString(),candidate:e.candidate.candidate,sdpMid:e.candidate.sdpMid,sdpMLineIndex:e.candidate.sdpMLineIndex,usernameFragment:e.candidate.usernameFragment,protocol:e.candidate.protocol,gatheringState:O[t].iceGatheringState,connectionState:O[t].iceConnectionState}),r.send(JSON.stringify({action:"rtc",uid:t,content:{candidate:i},token:this.session.accessToken.jwtToken}));}function us(e,t){let r=new Set(t),n=ge[e]||(o=>{}),i=O[e],s={ontrack:o=>{n({type:"track",target:i,timeStamp:o.timeStamp,streams:o.streams,track:o.track});},onicecandidate:o=>{fl.bind(this)(o,e),o.candidate?n({type:"icecandidate",target:i,timestamp:new Date().toISOString(),candidate:o.candidate.candidate,sdpMid:o.candidate.sdpMid,sdpMLineIndex:o.candidate.sdpMLineIndex,usernameFragment:o.candidate.usernameFragment,protocol:o.candidate.protocol,gatheringState:i.iceGatheringState,connectionState:i.iceConnectionState}):n({type:"icecandidateend",target:i,timestamp:new Date().toISOString()});},onicecandidateerror:o=>{n({type:"icecandidateerror",target:i,timestamp:new Date().toISOString(),errorCode:o.errorCode,errorText:o.errorText,url:o.url,hostCandidate:o.hostCandidate,gatheringState:i.iceGatheringState,connectionState:i.iceConnectionState});},oniceconnectionstatechange:()=>{n({type:"iceconnectionstatechange",target:i,timestamp:new Date().toISOString(),state:i.iceConnectionState,gatheringState:i.iceGatheringState,signalingState:i.signalingState});},onicegatheringstatechange:()=>{n({type:"icegatheringstatechange",target:i,timestamp:new Date().toISOString(),state:i.iceGatheringState,connectionState:i.iceConnectionState,signalingState:i.signalingState});},onsignalingstatechange:()=>{n({type:"signalingstatechange",target:i,timestamp:new Date().toISOString(),state:i.signalingState,connectionState:i.iceConnectionState,gatheringState:i.iceGatheringState});},onnegotiationneeded:()=>{Lr.bind(this)(e),n({type:"negotiationneeded",target:i,timestamp:new Date().toISOString(),signalingState:i.signalingState,connectionState:i.iceConnectionState,gatheringState:i.iceGatheringState});},onconnectionstatechange:()=>{n({type:"connectionstatechange",target:i,timestamp:new Date().toISOString(),state:i.connectionState,iceState:i.iceConnectionState,signalingState:i.signalingState});let o=i.connectionState;(o==="disconnected"||o==="failed"||o==="closed")&&ue.bind(this)({cid:e});}};for(let[o,l]of Object.entries(s))r.has(o)||(i[o]=l);}function ds(e,t,r){let n=new Set(r),i=ge[e]||(o=>{}),s={onmessage:o=>{let l={type:o.type,target:t,timeStamp:o.timeStamp,data:o.data,lastEventId:o.lastEventId,origin:o.origin,readyState:t.readyState,bufferedAmount:t.bufferedAmount};this.log(`${t.label}: message`,o.data),i(l);},onerror:o=>{let l={type:o.type,target:t,timeStamp:o.timeStamp,error:o.error.message,errorCode:o.error.errorDetail,readyState:t.readyState,label:t.label};this.log(`${t.label}: error`,o.error.message),i(l);},onclose:o=>{let l={type:o.type,target:t,timeStamp:o.timeStamp,readyState:t.readyState,label:t.label,id:t.id};this.log(`${t.label}: closed`,null),i(l),G[e]&&(delete G[e][t.label],Object.keys(G[e]).length===0&&ue.bind(this)({cid:e}));},onbufferedamountlow:o=>{let l={target:t,bufferedAmount:t.bufferedAmount,bufferedAmountLowThreshold:t.bufferedAmountLowThreshold,type:o.type,timeStamp:o.timeStamp};this.log(`${t.label}: bufferedamountlow`,t.bufferedAmount),i(l);},onopen:o=>{this.log("dataChannel",`data channel: "${t.label}" is open and ready to send messages.`);let l={type:o.type,target:t,timeStamp:o.timeStamp,readyState:t.readyState,label:t.label,id:t.id,ordered:t.ordered,maxRetransmits:t.maxRetransmits,protocol:t.protocol};i(l);}};for(let[o,l]of Object.entries(s))n.has(o)||(t[o]=l);}var we;function fs(){return we}var Re=null,at=true,qe=0;async function gl(){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebSocket is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});if(await this.getProfile(),!this.session)throw new a("No access.",{code:"INVALID_REQUEST"});let e=await this.record_endpoint;return new WebSocket(e.websocket_private+"?token="+this.session.accessToken.jwtToken)}var qr=null;async function Ft(){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebSocket is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});at=true;let e=this.__socket?await this.__socket:this.__socket;ue.bind(this)({close_all:true}),we&&je.bind(this)({group:null}),qe=0,Re&&(Re.terminate(),Re=null);try{e&&e.close();}catch{}return window.removeEventListener("visibilitychange",qr),this.__socket=null,null}async function Ve(e,t=50,r){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebSocket is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});if(typeof e!="function")throw new a("Callback must be a function.",{code:"INVALID_REQUEST"});if(r==="reconnect"){if(this.__socket instanceof Promise){let i=await this.__socket;if(i.readyState!==WebSocket.CLOSED&&i.readyState!==WebSocket.CLOSING)return this.__socket}}else if(at&&(qr=()=>{!document.hidden&&!at&&Ve.bind(this)(e,0,"reconnect");},this.__socket instanceof Promise))return this.__socket;Re&&(Re.terminate(),Re=null);let n={value:null};return this.__socket=new Promise(async(i,s)=>{let o=l=>{this.__socket===n.value&&(this.__socket=null),s(l);};try{await Oe.bind(this)();}catch(l){o(l);return}setTimeout(async()=>{try{let l=await gl.bind(this)();l.onopen=()=>{at=!1,qe=0,r!=="reconnect"&&window.addEventListener("visibilitychange",qr),this.log("realtime onopen","Connected to WebSocket server."),e({type:"success",message:"Connected to WebSocket server."}),we&&l.send(JSON.stringify({action:"joinRoom",rid:we,token:this.session.accessToken.jwtToken}));let u=`
206
+ var Po=Object.defineProperty;var So=Object.getOwnPropertyDescriptor;var ke=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var P=(e,t,r,n)=>{for(var i=So(t,r),s=e.length-1,o;s>=0;s--)(o=e[s])&&(i=(o(t,r,i))||i);return i&&Po(t,r,i),i};function ve(e){let r=(typeof globalThis<"u"?globalThis:void 0)?.process;if(r&&typeof r.getBuiltinModule=="function")try{return r.getBuiltinModule(e)}catch{}try{if(typeof ke=="function")return ke(e)}catch{}return null}var Kt,Ht,Gt=()=>Kt!==void 0?Kt:Kt=ve("fs"),Wt=()=>Ht!==void 0?Ht:Ht=ve("path"),me=typeof globalThis<"u"?globalThis:void 0,pt=me?.window;function ko(e){if(Buffer)return Buffer.from(e).toString("base64");let t="",r=new Uint8Array(e),n=32768;for(let i=0;i<r.length;i+=n){let s=r.subarray(i,i+n);t+=String.fromCharCode.apply(null,Array.from(s));}if(typeof btoa=="function")return btoa(t);throw new Error("No base64 encoder available in this environment.")}if(pt)pt.global=pt,pt.global._runningInNodeJS=false;else if(me&&(me.global=me,typeof me.window>"u")){class e{constructor(){this.result=null;this.error=null;this.onload=null;this.onloadend=null;this.onerror=null;}readAsDataURL(n){n.arrayBuffer().then(i=>{let s=ko(i),o=n.type||"application/octet-stream";this.result=`data:${o};base64,${s}`,this.onload&&this.onload({target:this}),this.onloadend&&this.onloadend({target:this});}).catch(i=>{this.error=i,this.onerror&&this.onerror({target:this});});}readAsArrayBuffer(n){n.arrayBuffer().then(i=>{this.result=i,this.onload&&this.onload({target:this}),this.onloadend&&this.onloadend({target:this});}).catch(i=>{this.error=i,this.onerror&&this.onerror({target:this});});}readAsText(n,i="utf-8"){n.text().then(s=>{this.result=s,this.onload&&this.onload({target:this}),this.onloadend&&this.onloadend({target:this});}).catch(s=>{this.error=s,this.onerror&&this.onerror({target:this});});}}me.FileReader=e;class t{constructor(){this.status=0;this.statusText="";this.readyState=0;this.responseText="";this.response=null;this.responseType="";this.responseURL="";this.timeout=0;this.withCredentials=false;this.onload=null;this.onerror=null;this.onabort=null;this.ontimeout=null;this.onprogress=null;this.onreadystatechange=null;this.upload={onprogress:null};this._method="GET";this._url="";this._headers={};this._aborted=false;}open(n,i){this._method=n,this._url=i,this.readyState=1;}setRequestHeader(n,i){this._headers[n]=i;}getResponseHeader(n){return null}abort(){this._aborted=true,this.onabort&&this.onabort({});}send(n){if(this._aborted)return;let i={method:this._method,headers:this._headers};n&&this._method!=="GET"&&this._method!=="HEAD"&&(i.body=n),fetch(this._url,i).then(async s=>{if(!this._aborted){if(this.status=s.status,this.statusText=s.statusText,this.responseURL=s.url,this.readyState=4,this.responseType==="blob")this.response=await s.blob();else if(this.responseType==="json")try{this.response=await s.json();}catch{this.response=null;}else this.responseType==="arraybuffer"?this.response=await s.arrayBuffer():(this.responseText=await s.text(),this.response=this.responseText);this.onload&&this.onload({});}}).catch(s=>{this._aborted||this.onerror&&this.onerror(s);});}}me.XMLHttpRequest=t,me.window={_runningInNodeJS:true,alert:r=>console.error("[Alert]",r),sessionStorage:(()=>{let r=new Map;return {getItem:n=>r.has(n)?r.get(n):null,setItem:(n,i)=>{r.set(n,String(i));},removeItem:n=>{r.delete(n);}}})(),localStorage:{getItem:r=>{let n=Gt(),i=Wt();if(!n||!i)return null;try{let s=i.resolve(process.cwd(),"states","localStorage",`${r}.skapi`);return n.existsSync(s)?n.readFileSync(s,"utf8"):null}catch{return null}},setItem:(r,n)=>{let i=Gt(),s=Wt();if(!(!i||!s))try{let o=s.resolve(process.cwd(),"states","localStorage");i.existsSync(o)||i.mkdirSync(o,{recursive:!0});let l=s.resolve(o,`${r}.skapi`);i.writeFileSync(l,n,"utf8");}catch{}},removeItem:r=>{let n=Gt(),i=Wt();if(!(!n||!i))try{let s=i.resolve(process.cwd(),"states","localStorage",`${r}.skapi`);n.existsSync(s)&&n.unlinkSync(s);}catch{}}},location:{href:"",origin:"",hostname:"",protocol:"",replace:r=>{}},navigator:{userAgent:`nodejs/${me?.process?.versions?.node||"unknown"}`,mediaDevices:{getUserMedia:async r=>{throw new Error("getUserMedia is not supported in Node.js environment.")}}},addEventListener:()=>{},removeEventListener:()=>{}};}var a=class extends Error{constructor(t,r){if(Array.isArray(t)&&t.length<=2){let n=t[1];if(t.length>2)for(let i=2;i<t.length&&typeof t[i]=="string";i++)n+=t[i];super((n||"Something went wrong.").trim()),this.name=r?.name||"SKAPI",this.code=r?.code||t[0]||"ERROR",r?.cause&&(this.cause=r.cause);}else super((t?.message||(typeof t=="string"?t:"Something went wrong.")).trim()),typeof t=="string"?(this.name=r?.name||"SKAPI",this.code=r?.code||"ERROR",r?.cause&&(this.cause=r.cause)):t instanceof Error?(this.cause=t,this.name=t.name,t.hasOwnProperty("code")&&(this.code=t.code)):typeof t=="object"&&t?.code&&t?.message&&(this.name=r?.name||"SKAPI",this.code=r?.code||"ERROR",this.cause=t?.cause);}};var ye="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Qt=BigInt(ye.length),vo=2*1024*1024,No=["aud","cognito:username","event_id","exp","iat","iss","jti","origin_jti","secret_key","token_use"],Qr={auth_time:"log",sub:"user_id"},Zr=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l"],en=["us31","us72","ap51","ap22","ap41","eu71","ap21","us32","us71","af51","ap31","ap43","ap23","ap42","ca01","eu01","eu72","eu51","eu73","eu11","me51","sa31"],zr=typeof TextEncoder<"u"?new TextEncoder:null;function Do(){if(typeof globalThis<"u")return globalThis.Buffer}function K(e){if(zr)return zr.encode(e);let t=unescape(encodeURIComponent(e)),r=new Uint8Array(t.length);for(let n=0;n<t.length;n++)r[n]=t.charCodeAt(n);return r}function zt(e){if(e instanceof Uint8Array)return e;if(typeof e=="string")return K(e);if(typeof ArrayBuffer<"u"&&e instanceof ArrayBuffer)return new Uint8Array(e);if(typeof ArrayBuffer<"u"&&ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);if(Array.isArray(e))return Uint8Array.from(e);let t=Do();if(t)return new Uint8Array(t.from(e));throw new Error("No byte conversion available in this environment.")}var R=class R{static hash(t){typeof t!="string"&&(console.warn("coercing non-string value to empty string"),t="");let r=R.sb(t),n=1732584193,i=-271733879,s=-1732584194,o=271733878,l,u,c,f;for(let g=0;g<r.length;g+=16)l=n,u=i,c=s,f=o,n=R.ff(n,i,s,o,r[g],7,-680876936),o=R.ff(o,n,i,s,r[g+1],12,-389564586),s=R.ff(s,o,n,i,r[g+2],17,606105819),i=R.ff(i,s,o,n,r[g+3],22,-1044525330),n=R.ff(n,i,s,o,r[g+4],7,-176418897),o=R.ff(o,n,i,s,r[g+5],12,1200080426),s=R.ff(s,o,n,i,r[g+6],17,-1473231341),i=R.ff(i,s,o,n,r[g+7],22,-45705983),n=R.ff(n,i,s,o,r[g+8],7,1770035416),o=R.ff(o,n,i,s,r[g+9],12,-1958414417),s=R.ff(s,o,n,i,r[g+10],17,-42063),i=R.ff(i,s,o,n,r[g+11],22,-1990404162),n=R.ff(n,i,s,o,r[g+12],7,1804603682),o=R.ff(o,n,i,s,r[g+13],12,-40341101),s=R.ff(s,o,n,i,r[g+14],17,-1502002290),i=R.ff(i,s,o,n,r[g+15],22,1236535329),n=R.gg(n,i,s,o,r[g+1],5,-165796510),o=R.gg(o,n,i,s,r[g+6],9,-1069501632),s=R.gg(s,o,n,i,r[g+11],14,643717713),i=R.gg(i,s,o,n,r[g],20,-373897302),n=R.gg(n,i,s,o,r[g+5],5,-701558691),o=R.gg(o,n,i,s,r[g+10],9,38016083),s=R.gg(s,o,n,i,r[g+15],14,-660478335),i=R.gg(i,s,o,n,r[g+4],20,-405537848),n=R.gg(n,i,s,o,r[g+9],5,568446438),o=R.gg(o,n,i,s,r[g+14],9,-1019803690),s=R.gg(s,o,n,i,r[g+3],14,-187363961),i=R.gg(i,s,o,n,r[g+8],20,1163531501),n=R.gg(n,i,s,o,r[g+13],5,-1444681467),o=R.gg(o,n,i,s,r[g+2],9,-51403784),s=R.gg(s,o,n,i,r[g+7],14,1735328473),i=R.gg(i,s,o,n,r[g+12],20,-1926607734),n=R.hh(n,i,s,o,r[g+5],4,-378558),o=R.hh(o,n,i,s,r[g+8],11,-2022574463),s=R.hh(s,o,n,i,r[g+11],16,1839030562),i=R.hh(i,s,o,n,r[g+14],23,-35309556),n=R.hh(n,i,s,o,r[g+1],4,-1530992060),o=R.hh(o,n,i,s,r[g+4],11,1272893353),s=R.hh(s,o,n,i,r[g+7],16,-155497632),i=R.hh(i,s,o,n,r[g+10],23,-1094730640),n=R.hh(n,i,s,o,r[g+13],4,681279174),o=R.hh(o,n,i,s,r[g],11,-358537222),s=R.hh(s,o,n,i,r[g+3],16,-722521979),i=R.hh(i,s,o,n,r[g+6],23,76029189),n=R.hh(n,i,s,o,r[g+9],4,-640364487),o=R.hh(o,n,i,s,r[g+12],11,-421815835),s=R.hh(s,o,n,i,r[g+15],16,530742520),i=R.hh(i,s,o,n,r[g+2],23,-995338651),n=R.ii(n,i,s,o,r[g],6,-198630844),o=R.ii(o,n,i,s,r[g+7],10,1126891415),s=R.ii(s,o,n,i,r[g+14],15,-1416354905),i=R.ii(i,s,o,n,r[g+5],21,-57434055),n=R.ii(n,i,s,o,r[g+12],6,1700485571),o=R.ii(o,n,i,s,r[g+3],10,-1894986606),s=R.ii(s,o,n,i,r[g+10],15,-1051523),i=R.ii(i,s,o,n,r[g+1],21,-2054922799),n=R.ii(n,i,s,o,r[g+8],6,1873313359),o=R.ii(o,n,i,s,r[g+15],10,-30611744),s=R.ii(s,o,n,i,r[g+6],15,-1560198380),i=R.ii(i,s,o,n,r[g+13],21,1309151649),n=R.ii(n,i,s,o,r[g+4],6,-145523070),o=R.ii(o,n,i,s,r[g+11],10,-1120210379),s=R.ii(s,o,n,i,r[g+2],15,718787259),i=R.ii(i,s,o,n,r[g+9],21,-343485551),n=R.ad(n,l),i=R.ad(i,u),s=R.ad(s,c),o=R.ad(o,f);return R.rh(n)+R.rh(i)+R.rh(s)+R.rh(o)}static rh(t){let r="";for(let n=0;n<=3;n++)r+=R.alphabet.charAt(t>>n*8+4&15)+R.alphabet.charAt(t>>n*8&15);return r}static ad(t,r){let n=(t&65535)+(r&65535);return (t>>16)+(r>>16)+(n>>16)<<16|n&65535}static rl(t,r){return t<<r|t>>>32-r}static cm(t,r,n,i,s,o){return R.ad(R.rl(R.ad(R.ad(r,t),R.ad(i,o)),s),n)}static ff(t,r,n,i,s,o,l){return R.cm(r&n|~r&i,t,r,s,o,l)}static gg(t,r,n,i,s,o,l){return R.cm(r&i|n&~i,t,r,s,o,l)}static hh(t,r,n,i,s,o,l){return R.cm(r^n^i,t,r,s,o,l)}static ii(t,r,n,i,s,o,l){return R.cm(n^(r|~i),t,r,s,o,l)}static sb(t){let r,n=(t.length+8>>6)+1,i=new Array(n*16);for(r=0;r<n*16;r++)i[r]=0;for(r=0;r<t.length;r++)i[r>>2]|=t.charCodeAt(r)<<r%4*8;return i[r>>2]|=128<<r%4*8,i[n*16-2]=t.length*8,i}};R.alphabet="0123456789abcdef";var Z=R;function tn(e){if(e===0)return ye[0];let t="";for(;e>0;)t=ye[e%62]+t,e=Math.floor(e/62);return t}function se(e){return e.split("").reverse().reduce((t,r,n)=>t+ye.indexOf(r)*62**n,0)}function Te(e=6){let t="",r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",n=r.length,i=0;for(;i<e;)t+=r.charAt(Math.floor(Math.random()*n)),i+=1;return t}function Jt(){return typeof window>"u"||!!window?._runningInNodeJS}function H(){return !Jt()&&typeof document<"u"&&typeof document.createElement=="function"}function ht(e){let t;try{t=JSON.stringify(e);}catch{throw new a("Invalid data type.",{code:"INVALID_REQUEST"})}if(new Blob([t]).size>vo)throw new a("Data should not exceed 2MB",{code:"INVALID_REQUEST"})}function Jr(e){return e===""||e==="on"||e==="true"}function Yr(e){return e==="false"}function Xr(e,t,r){t.name&&r(e,t.name,t.value);}var mt=H(),Uo=typeof SubmitEvent<"u",xo=typeof HTMLFormElement<"u";function j(e,t,r){let n={},i=[];function s(u,c,f){if(t?.ignoreEmpty&&f==="")return;if(t?.nullIfEmpty&&f===""&&(f=null),typeof r=="function"){let p=r(c,f);p!==void 0&&(f=p);}let g=c.split("[").map(p=>{let h=p.replace("]",""),m=Number(h);return !isNaN(m)&&!h.includes(".")?h=m:(h[0]==='"'&&h[h.length-1]==='"'||h[0]==="'"&&h[h.length-1]==="'")&&(h=h.replace(/"/g,"").replace(/'/g,"")),h}),d=u;if(typeof g[0]=="number")throw new a("Form key cannot start with an array index.",{code:"INVALID_REQUEST"});for(let p=0;p<g.length;p++){let h=g[p];p<g.length-1?(d[h]===void 0&&(typeof g[p+1]=="number"?d[h]=[]:d[h]={}),d=d[h]):d[h]===void 0?d[h]=f:Array.isArray(d[h])?d[h].push(f):d[h]=[d[h],f];}}function o(u,c,f){if(f instanceof File)u.push({name:c,file:f});else if(f instanceof FileList&&f&&f.length>0)for(let g=0;g<=f.length-1;g++){let d=f.item(g);d&&u.push({name:c,file:d});}}let l=u=>{u.name&&(u.type==="number"?u.value&&s(n,u.name,Number(u.value)):u.type==="checkbox"||u.type==="radio"?u.checked?u.type==="checkbox"&&u.value===""||Jr(u.value)?s(n,u.name,true):Yr(u.value)?s(n,u.name,false):u.value&&s(n,u.name,u.value):u.type==="checkbox"&&(Jr(u.value)?s(n,u.name,false):Yr(u.value)&&s(n,u.name,true)):u.type==="file"?u.files&&u.files.length>0&&o(i,u.name,u.files):s(n,u.name,u.value));};if(mt&&(e instanceof HTMLInputElement||e instanceof HTMLSelectElement||e instanceof HTMLTextAreaElement))return l(e),ht(n),{data:n,files:i};if(mt&&e instanceof FormData){for(let u of e.entries()){let c=u[0],f=u[1];if(f instanceof File||f instanceof FileList)o(i,c,f);else if(f instanceof Blob){let g=f;if(g.type==="application/json")try{let d=JSON.parse(g.text());s(n,c,d);}catch{s(n,c,g);}}else s(n,c,f);}return ht(n),{data:n,files:i}}if(mt&&Uo&&e instanceof SubmitEvent&&(e=e.target),mt&&xo&&e instanceof HTMLFormElement){let u=e.querySelectorAll("input"),c=e.querySelectorAll("select"),f=e.querySelectorAll("textarea");for(let g=0;g<c.length;g++)Xr(n,c[g],s);for(let g=0;g<f.length;g++)Xr(n,f[g],s);for(let g=0;g<u.length;g++)l(u[g]);return ht(n),{data:n,files:i}}return ht(e),{data:e,files:i}}function Ke(e){let t={};for(let r in e){let n=e[r];if(!No.includes(r))if(Qr[r])t[Qr[r]]=n;else if(r.includes("custom:"))t[r.replace("custom:","")]=n;else if(r==="address"){let i=n;if(i&&typeof i=="object"&&Object.keys(i).length){if(i?.formatted)try{t[r]=JSON.parse(i.formatted);}catch{t[r]=i.formatted;}}else t[r]=i;}else t[r]=n;}for(let r of ["address_public","birthdate_public","email_public","gender_public","phone_number_public","access_group"])r.includes("_public")?t.hasOwnProperty(r.split("_")[0])?t[r]=t.hasOwnProperty(r)?!!Number(t[r]):false:delete t[r]:t[r]=t.hasOwnProperty(r)?Number(t[r]):0;for(let r of ["email","phone_number"])t.hasOwnProperty(r)?t[r+"_verified"]=t[r+"_verified"]===true:delete t[r+"_verified"];return t}function Yt(e){if(e=jo(e),e.split("-").length===7){let t=e.split("-"),r,n;try{r=en[Zr.indexOf(t[1][0])],n=t.slice(2).join("-");}catch{throw new Error("INVALID_PARAMETER: Service ID is invalid: "+e)}if(!r)throw new Error("INVALID_PARAMETER: Service ID is invalid: "+e);return {service:r+t[0]+t[1].slice(1),owner:n}}return {service:e,owner:""}}function Xt(e,t){let r=en.indexOf(e.slice(0,4)),n=Zr[r],s=`${e.slice(4,-4)}-${n}${e.slice(-4)}-${t}`;return Vo(s)}function Co(e){let t=0n;for(let r of e){let n=ye.indexOf(r);if(n<0)throw new Error(`INVALID_PARAMETER: Invalid base62 character: ${r}`);t=t*Qt+BigInt(n);}return t}function Oo(e,t=1){if(e<0n)throw new Error("INVALID_PARAMETER: Negative values are not supported.");if(e===0n)return "0".repeat(Math.max(1,t));let r="",n=e;for(;n>0n;){let i=Number(n%Qt);r=ye[i]+r,n/=Qt;}return r.length<t&&(r="0".repeat(t-r.length)+r),r}function Lo(e){if(e===0n)return Uint8Array.from([0]);let t=[],r=e;for(;r>0n;)t.push(Number(r&0xffn)),r>>=8n;return t.reverse(),Uint8Array.from(t)}function Mo(e){let t=0n;for(let r of e)t=(t<<8n)+BigInt(r);return t}function Fo(e){let t=String(e).replace(/-/g,"");if(!/^[0-9a-fA-F]{32}$/.test(t))throw new Error("INVALID_PARAMETER: Invalid UUID format.");let r=new Uint8Array(16);for(let n=0;n<16;n++)r[n]=parseInt(t.slice(n*2,n*2+2),16);return r}function qo(e){let t=Array.from(zt(e),r=>r.toString(16).padStart(2,"0")).join("");return [t.slice(0,8),t.slice(8,12),t.slice(12,16),t.slice(16,20),t.slice(20)].join("-")}function Vo(e){let t=String(e);if(t.split("-").length===2)return t;let r=t.match(/^([0-9A-Za-z]+)-([0-9A-Za-z]+)-([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/);if(!r)throw new Error("INVALID_PARAMETER: Input must match <base62>-<base62>-<uuid>.");let[,n,i,s]=r;if(n.length<2)throw new Error("INVALID_PARAMETER: The first part must contain at least 2 characters.");if(i.length>=ye.length)throw new Error("INVALID_PARAMETER: The middle section is too long to encode.");let o=n.slice(0,2),l=n.slice(2),u=i+o,c=ye[i.length]+l+u,f=Fo(s),g=Oo(Mo(f));return `${c}-${g}`}function jo(e){let t=String(e);if(t.split("-").length!==2)return t;let r=t.split("-");if(r.length!==2||!r[0]||!r[1])throw new Error("INVALID_PARAMETER: Corrupt compressed token: "+t);let[n,i]=r,s=ye.indexOf(n[0]);if(s<0)throw new Error("INVALID_PARAMETER: Corrupt compressed token: "+t);let o=n.slice(1),l=s+2;if(o.length<l)throw new Error("INVALID_PARAMETER: Corrupt compressed token: "+t);let u=o.slice(0,o.length-l),c=o.slice(o.length-l),f=c.slice(s),g=c.slice(0,s),d=f+u;if(!/^[0-9A-Za-z]+$/.test(d)||!/^[0-9A-Za-z]+$/.test(g))throw new Error("INVALID_PARAMETER: Corrupt compressed token: "+t);let p=Co(i),h=Lo(p);if(h.length>16)throw new Error("INVALID_PARAMETER: Corrupt compressed token: "+t);let m=new Uint8Array(16);m.set(h,16-h.length);let _=qo(m);return `${d}-${g}-${_}`}function He(e){if(typeof TextDecoder<"u")return new TextDecoder().decode(e);let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return decodeURIComponent(escape(t))}function Zt(...e){let t=0;for(let i of e)t+=i.length;let r=new Uint8Array(t),n=0;for(let i of e)r.set(i,n),n+=i.length;return r}function Bo(e,t="User ID"){let r=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;if(e){if(typeof e!="string")throw new a(`${t} should be type: string.`,{code:"INVALID_PARAMETER"});if(!e.match(r))throw new a(`${t} is invalid.`,{code:"INVALID_PARAMETER"})}else throw new a(`${t} is empty.`,{code:"INVALID_PARAMETER"});return e}function Ko(e){if(e&&(typeof e!="string"||e.charAt(0)!=="+"||isNaN(Number(e.substring(1)))))throw new a('"phone_number" is invalid. The format should be "+00123456789". Type: string.',{code:"INVALID_PARAMETER"});return e||""}function Ho(e){if(e){if(typeof e!="string")throw new a('"birthdate" is invalid. The format should be "yyyy-mm-dd". Type: string.',{code:"INVALID_PARAMETER"});{let t=new RegExp(/([12]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01]))/);if(e.length!==10||e.split("-").length!==3||!t.test(e))throw new a('"birthdate" is invalid. The format should be "yyyy-mm-dd". Type: string.',{code:"INVALID_PARAMETER"})}}return e||""}function Go(e){if(e){if(typeof e!="string")throw new a('"password" should be type: string.',{code:"INVALID_PARAMETER"});if(e.length<6)throw new a('"password" should be at least 6 characters.',{code:"INVALID_PARAMETER"});if(e.length>60)throw new a('"password" can be up to 60 characters max.',{code:"INVALID_PARAMETER"})}else throw new a('"password" is required.',{code:"INVALID_PARAMETER"});return e}function Wo(e,t="email"){if(e){if(typeof e!="string")throw new a(`"${t}"should be type: string.`,{code:"INVALID_PARAMETER"});if(e.length<5)throw new a(`"${t}" should be at least 5 characters.`,{code:"INVALID_PARAMETER"});if(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.test(e)&&(e=e.trim(),e.split("@")[1].split(".").length>=2))return e.toLowerCase()}else throw new a(`"${t}" is required.`,{code:"INVALID_PARAMETER"});throw new a(`"${e}" is an invalid email.`,{code:"INVALID_PARAMETER"})}function Qo(e){let t=typeof window<"u",r=(()=>{let i=t&&window.location.origin||null;return i&&i.slice(-1)==="/"&&(i=i.slice(0,-1)),i})(),n=i=>{if(typeof i=="string"){if(i==="*")return "*";{let s=i.trim();if(s[0]==="/"&&r){if(r.slice(0,5)==="file:")throw new a(`"${i}" is an invalid url. Relative URL does not work on local file system. Use full URL string.`,{code:"INVALID_PARAMETER"});s=r+s;}else if(s[0]==="."&&r){if(r.slice(0,5)==="file:")throw new a(`"${i}" is an invalid url. Relative URL does not work on local file system. Use full URL string.`,{code:"INVALID_PARAMETER"});let l=t?window.location.href.split("?")[0]:"";l.slice(-1)!=="/"&&(l+="/"),s=l+s.slice(1);}let o;try{o=new URL(s);}catch{throw new a(`"${i}" is an invalid url.`,{code:"INVALID_PARAMETER"})}if(o.protocol)return o.href}}throw new a(`"${i}" is an invalid url.`,{code:"INVALID_PARAMETER"})};return Array.isArray(e)?e.map(i=>n(i)):n(e)}var zo=/^[a-z0-9]{2,20}$/,Jo=/[a-z]/,Yo=/^[0-9]+e[0-9]+$/,Xo=["tp","admin","public","authorized","newsletter","forward","all","true","false","null"];function Zo(e,t){if(e==null){if(t?.allowNull)return null;throw new a('"group" is required.',{code:"INVALID_PARAMETER"})}if(!t?.nameOnly){if(e==="public")return 0;if(e==="authorized")return 1;if(typeof e=="number"){if(!Number.isInteger(e)||e<0||e>99)throw new a('"group" should be an integer between 0 and 99.',{code:"INVALID_PARAMETER"});return e}}if(typeof e!="string"||!zo.test(e)||!Jo.test(e)||Yo.test(e)||Xo.includes(e))throw new a("Newsletter group name must be 2-20 lowercase alphanumeric characters, contain a letter, and not be a reserved name.",{code:"INVALID_PARAMETER"});return e}function ea(e,t,r=[],n){let i=j(e,n),s=i.data;t.service="string",t.owner="string";let o={};for(let l in t)if(s&&typeof s=="object"&&!Array.isArray(s)&&s.hasOwnProperty(l))if(typeof s[l]=="function")o[l]=s[l];else try{o[l]=JSON.parse(JSON.stringify(s[l]));}catch{o[l]=s[l];}n?.precall&&n.precall({data:o,files:i?.files||[]});try{return $o(o,t,r)}catch(l){throw new a(l.message,{code:"INVALID_PARAMETER"})}}var y={UserId:Bo,PhoneNumber:Ko,Birthdate:Ho,Password:Go,Email:Wo,Url:Qo,newsletterGroup:Zo,Params:ea};var Y="skapi.enc.v1",sn=6e5,Ge=12,yt=null,Ne=null;function on(){return new a("Encryption requires Web Crypto, which needs a secure context (https, or localhost) in the browser, or Node 18 or newer. A page served over plain http has crypto.getRandomValues but crypto.subtle is undefined.",{code:"NOT_SUPPORTED"})}function an(){if(Ne)return Ne;let e=typeof globalThis<"u"?globalThis:void 0;if(e?.crypto?.subtle&&typeof e.crypto.getRandomValues=="function")return Ne=e.crypto,Ne;try{let t=typeof globalThis<"u"?globalThis:void 0,r=null;if(t?.process&&typeof t.process.getBuiltinModule=="function"&&(r=t.process.getBuiltinModule("crypto")),!r&&typeof ke=="function"&&(r=ke("crypto")),r?.webcrypto?.subtle)return Ne=r.webcrypto,Ne}catch{}throw on()}function re(){if(yt)return yt;let e=an();if(!e.subtle)throw on();return yt=e.subtle,yt}function tr(){try{return re(),!0}catch{return false}}function X(e){let t=an(),r=new Uint8Array(e),n=65536;for(let i=0;i<e;i+=n)t.getRandomValues(r.subarray(i,Math.min(i+n,e)));return r}function V(e){let t=zt(e),r;if(typeof Buffer<"u"&&typeof Buffer.from=="function")r=Buffer.from(t).toString("base64");else if(typeof btoa=="function"){let n="";for(let s=0;s<t.length;s+=32768)n+=String.fromCharCode.apply(null,Array.from(t.subarray(s,s+32768)));r=btoa(n);}else throw new a("No base64 encoder available in this environment.",{code:"NOT_SUPPORTED"});return r.replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function $(e){if(typeof e!="string")throw new a("Expected a base64url string.",{code:"INVALID_PARAMETER"});let t=e.replace(/-/g,"+").replace(/_/g,"/"),r=t.length%4;if(r===2)t+="==";else if(r===3)t+="=";else if(r===1)throw new a("Malformed base64url string.",{code:"INVALID_PARAMETER"});if(typeof Buffer<"u"&&typeof Buffer.from=="function"){let n=Buffer.from(t,"base64");return new Uint8Array(n.buffer,n.byteOffset,n.byteLength)}if(typeof atob=="function"){let n=atob(t),i=new Uint8Array(n.length);for(let s=0;s<n.length;s++)i[s]=n.charCodeAt(s);return i}throw new a("No base64 decoder available in this environment.",{code:"NOT_SUPPORTED"})}async function bt(e){let t=await re().digest("SHA-256",e);return new Uint8Array(t)}async function ze(e,t,r,n){let i=re(),s=await i.importKey("raw",e,"HKDF",false,["deriveBits"]),o=await i.deriveBits({name:"HKDF",hash:"SHA-256",salt:t,info:r},s,n*8);return new Uint8Array(o)}async function Ue(e,t,r,n){let i=re(),s=K(e.normalize("NFC")),o=await i.importKey("raw",s,"PBKDF2",false,["deriveBits"]),l=new Uint8Array(await i.deriveBits({name:"PBKDF2",salt:t,iterations:r,hash:"SHA-256"},o,256)),u=await ze(l,t,n,32);q(l),q(s);let c=await oe(u);return q(u),c}async function oe(e){return re().importKey("raw",e,{name:"AES-GCM"},false,["encrypt","decrypt"])}async function ln(){let e=X(32),t=await oe(e);return {bytes:e,key:t}}async function ne(e,t,r){let n=X(Ge),i=await re().encrypt({name:"AES-GCM",iv:n,additionalData:r,tagLength:128},e,t);return {iv:n,ct:new Uint8Array(i)}}async function ae(e,t,r,n){let i=await re().decrypt({name:"AES-GCM",iv:t,additionalData:n,tagLength:128},e,r);return new Uint8Array(i)}var _t={name:"ECDH",namedCurve:"P-256"};async function cn(){let e=re(),t=await e.generateKey(_t,true,["deriveBits"]),r=new Uint8Array(await e.exportKey("raw",t.publicKey)),n=new Uint8Array(await e.exportKey("pkcs8",t.privateKey)),i=await rr(n);return {pubRaw:r,pkcs8:n,priv:i}}async function rr(e){return re().importKey("pkcs8",e,_t,false,["deriveBits"])}async function un(e){if(e.length!==65||e[0]!==4)throw new a("Malformed public key: expected a 65 byte uncompressed P-256 point.",{code:"INVALID_PARAMETER"});return re().importKey("raw",e,_t,false,[])}async function nr(e){return V(await bt(e))}async function dn(e,t,r,n){let i=re(),s=await un(e),o=await i.generateKey(_t,true,["deriveBits"]),l=new Uint8Array(await i.deriveBits({name:"ECDH",public:s},o.privateKey,256)),u=await ze(l,new Uint8Array(32),r,32);q(l);let c=await oe(u);q(u);let{iv:f,ct:g}=await ne(c,t,n);return {epk:new Uint8Array(await i.exportKey("raw",o.publicKey)),iv:f,ct:g}}async function fn(e,t,r,n,i,s){let o=re(),l=await un(t),u=new Uint8Array(await o.deriveBits({name:"ECDH",public:l},e,256)),c=await ze(u,new Uint8Array(32),i,32);q(u);let f=await oe(c);return q(c),ae(f,r,n,s)}function q(e){e&&e.length&&e.fill(0);}function ta(e,t){if(e.length!==t.length)return false;let r=0;for(let n=0;n<e.length;n++)r|=e[n]^t[n];return r===0}function ir(e){return K(JSON.stringify(e))}function Je(e,t,r){return Zt(e,new Uint8Array([0]),K(t),new Uint8Array([0]),K(r))}var Ie="0123456789ABCDEFGHJKMNPQRSTVWXYZ",We=16,rn=26,nn=28;function gn(e){let t=2166136261;for(let r=0;r<e.length;r++)t^=e[r],t=t*16777619>>>0;return t&1023}function pn(e){if(e.length!==We)throw new a(`A recovery code needs exactly ${We} bytes.`,{code:"INVALID_PARAMETER"});let t="",r=0,n=0;for(let s=0;s<e.length;s++)for(r=r<<8|e[s],n+=8;n>=5;)n-=5,t+=Ie[r>>n&31];n>0&&(t+=Ie[r<<5-n&31]);let i=gn(e);return t+=Ie[i>>5&31]+Ie[i&31],(t.match(/.{1,4}/g)||[]).join("-")}function hn(e){if(typeof e!="string")throw new a("Recovery code should be a string.",{code:"INVALID_PARAMETER"});let t=e.toUpperCase().replace(/[\s\-_]/g,"").replace(/O/g,"0").replace(/[IL]/g,"1");if(t.length!==nn)throw new a(`That does not look like a recovery code: expected ${nn} characters, got ${t.length}.`,{code:"ENCRYPTION_BAD_RECOVERY_CODE"});let r=t.slice(0,rn),n=t.slice(rn),i=0,s=0,o=[];for(let c=0;c<r.length;c++){let f=Ie.indexOf(r[c]);if(f<0)throw new a(`That does not look like a recovery code: "${r[c]}" is not a valid character.`,{code:"ENCRYPTION_BAD_RECOVERY_CODE"});i=i<<5|f,s+=5,s>=8&&(s-=8,o.push(i>>s&255));}let l=new Uint8Array(o.slice(0,We)),u=gn(l);if(n!==Ie[u>>5&31]+Ie[u&31])throw new a("That recovery code has a typo in it: the check characters do not match.",{code:"ENCRYPTION_BAD_RECOVERY_CODE"});return l}async function sr(e,t,r){let n=await ze(e,t,r,32),i=await oe(n);return q(n),i}var er=[83,75,69,78,67,70],mn=2,Qe=56,yn=16,ra=4*1024*1024;function or(e){if(!e||e.length<Qe)return false;for(let t=0;t<er.length;t++)if(e[t]!==er[t])return false;return true}function Pe(e,t,r){e[t]=r>>>24&255,e[t+1]=r>>>16&255,e[t+2]=r>>>8&255,e[t+3]=r&255;}function De(e,t){return (e[t]<<24>>>0)+(e[t+1]<<16)+(e[t+2]<<8)+e[t+3]}function na(e,t,r){let n=Math.floor(r/4294967296);Pe(e,t,n),Pe(e,t+4,r>>>0);}function ia(e,t){return De(e,t)*4294967296+De(e,t+4)}async function bn(e,t,r,n,i,s){let o=K(`${Y}|binfile|${r}|${n}|${i}|${s}`),l=await ze(e,t,o,32),u=await oe(l);return q(l),u}async function _n(e){return (await bt(Zt(K(`${Y}|dekid`),e))).subarray(0,8)}function wn(e,t,r){return ir([`${Y}|binchunk`,V(e),t,r])}function sa(e,t,r,n,i,s){let o=new Uint8Array(Qe+s.length);return o.set(er,0),o[6]=mn,o[7]=s.length?1:0,Pe(o,8,e),Pe(o,12,t),o.set(r,16),na(o,32,n),o.set(i,40),Pe(o,48,s.length),Pe(o,52,0),s.length&&o.set(s,Qe),o}async function En(e,t,r,n,i=ra){let s=X(yn),o=await bn(e,s,r.service,r.owner,r.recordOwner,r.recordId),l=await _n(e),u=n?K(JSON.stringify(n)):new Uint8Array(0);if(u.length>4096)throw new a("Encrypted file metadata is too large.",{code:"INVALID_PARAMETER"});let c=t.length===0?1:Math.ceil(t.length/i),f=sa(i,c,s,t.length,l,u),g=await bt(f),d=[],p=f.length;for(let _=0;_<c;_++){let b=t.subarray(_*i,Math.min((_+1)*i,t.length)),A=await ne(o,b,wn(g,_,c));d.push(A),p+=4+A.iv.length+A.ct.length;}let h=new Uint8Array(p);h.set(f,0);let m=f.length;for(let _ of d)Pe(h,m,_.iv.length+_.ct.length),m+=4,h.set(_.iv,m),m+=_.iv.length,h.set(_.ct,m),m+=_.ct.length;return h}function oa(e){if(!or(e))throw new a("This file is not an encrypted skapi file.",{code:"INVALID_PARAMETER"});let t=De(e,48),r=Qe+t;if(e.length<r)throw new a("Encrypted file header is truncated.",{code:"INVALID_REQUEST"});let n=null;return t&&(n=JSON.parse(He(e.subarray(Qe,r)))),{version:e[6],chunkBytes:De(e,8),count:De(e,12),fileId:e.subarray(16,16+yn),plainLen:ia(e,32),dekId:e.subarray(40,48),meta:n,headerLen:r}}async function An(e,t,r){let n=oa(t);if(n.version!==mn)throw new a(`This file was encrypted by a different version of the SDK (container v${n.version}).`,{code:"NOT_SUPPORTED"});if(!n.count||!n.chunkBytes)throw new a("Encrypted file header is malformed.",{code:"INVALID_PARAMETER"});let i=await _n(e);if(!ta(i,n.dekId))throw new a("This file was encrypted under a previous data key for this record, so it can no longer be opened. It was most likely left behind by an interrupted access change.",{code:"ENCRYPTION_FILE_STALE_KEY"});let s=await bn(e,n.fileId,r.service,r.owner,r.recordOwner,r.recordId),o=await bt(t.subarray(0,n.headerLen)),l=[],u=n.headerLen,c=0;for(let d=0;d<n.count;d++){if(u+4>t.length)throw new a("Encrypted file is truncated.",{code:"INVALID_REQUEST"});let p=De(t,u);if(u+=4,p<Ge+16||u+p>t.length)throw new a("Encrypted file is truncated.",{code:"INVALID_REQUEST"});let h=await ae(s,t.subarray(u,u+Ge),t.subarray(u+Ge,u+p),wn(o,d,n.count));u+=p,l.push(h),c+=h.length;}let f=new Uint8Array(c),g=0;for(let d of l)f.set(d,g),g+=d.length;return {bytes:f,meta:n.meta}}var aa="__skapi__keyring",Ye="__skapi_enc__",Tn=1,la="skapi-enc",Ae="keys",lr=new WeakMap;function In(e){if(!e)return null;if(e===true&&(e={}),typeof e!="object")throw new a('"options.encryption" should be a boolean or an object.',{code:"INVALID_PARAMETER"});let t=typeof e.iterations=="number"?e.iterations:sn;if(t<1e5)throw new a('"encryption.iterations" must be at least 100000.',{code:"INVALID_PARAMETER"});let r=e.trustPolicy==="strict"?"strict":"tofu";return {enabled:true,iterations:t,trustPolicy:r,persistDevice:e.persistDevice!==false,minPasswordLength:typeof e.minPasswordLength=="number"?e.minPasswordLength:0,withheld:e.withheld==="sentinel"?"sentinel":"null",recovery:e.recovery==="none"?"none":"code",table:typeof e.table=="string"&&e.table?e.table:aa}}function L(){return lr.get(this)||null}function Pn(e){if(!e){lr.delete(this);return}lr.set(this,{cfg:e,status:"locked",reason:"NO_SESSION_KEY",user_id:"",scope:"",mk:null,ikPriv:null,pubRaw:null,fpr:"",keyringRecordId:"",pins:{},dek:new Map,roll:new Set,passthrough:new Map,rawRead:false,ready:null,unlocking:false,pendingRecoveryCode:"",peerPub:new Map,peerInflight:new Map});}function cr(){let e=L.call(this);if(e){e.user_id&&wr.call(this,e).catch(()=>{}),e.ready=null,e.unlocking=false,e.pendingRecoveryCode="";for(let[,t]of e.dek)q(t.bytes);e.dek.clear(),e.roll.clear(),e.passthrough.clear(),e.peerPub.clear(),e.peerInflight.clear(),e.pins={},e.mk=null,e.ikPriv=null,e.pubRaw=null,e.fpr="",e.keyringRecordId="",e.user_id="",e.status="locked",e.reason="NO_SESSION_KEY";}}function Sn(){let e=L.call(this);return e?{status:e.status,reason:e.status==="unlocked"?void 0:e.reason,user_id:e.user_id||void 0,fingerprint:e.fpr||void 0}:{status:"disabled"}}function kn(e,t){return typeof t=="string"&&t===e.cfg.table}function xe(){return `${this.service}/${this.owner}`}function ur(e,t,r,n){let[i,s]=e.split("/");return ir([Y,i,s,t,r,n])}function vn(e,t,r,n,i){let[s,o]=e.split("/");return K(`${Y}|dekwrap|${s}|${o}|${t}|${r}|${n}|${i}`)}function dr(e){return e.anch==="uid"?e.uid:e.anch==="rid"?e.rid:""}function Et(e){return !!e&&typeof e=="object"&&!Array.isArray(e)&&typeof e[Ye]=="number"&&typeof e.ct=="string"&&typeof e.iv=="string"&&typeof e.own=="string"&&typeof e.anch=="string"&&!!e.k&&typeof e.k=="object"&&!Array.isArray(e.k)}var Nn="__skapi_no_access__";function ee(e,t,r){if(e.withheld!=="sentinel")return null;let n={[Nn]:true,reason:t};return r&&(n.recipients=r),Object.freeze(n)}function fr(e){return !!e&&typeof e=="object"&&e[Nn]===true}var ca=256*1024,et="__skenc_ct__",Dn="payload.bin",ua=`/${et}/${Dn}`;function gr(e,t){return e===et&&t===Dn}async function da(e,t,r){let n=t?.table,i=typeof n=="string"?n:n?.name;if(n&&(typeof n=="string"||n.access_group!==void 0))return {group:typeof n=="string"?0:Rn(n.access_group),table:i,record:null};if(!r)return {group:n?.access_group!==void 0?Rn(n.access_group):0,table:i,record:null};let s=e.dek.get(r);if(s)return {group:s.access_group,table:i,record:null};let o=await Ee.call(this,r);if(!o)throw new a(`Record "${r}" not found.`,{code:"NOT_EXISTS"});return {group:o.table.access_group,table:o.table.name,record:o}}function fa(e){return this.getFile(e,{dataType:"blob"})}async function Ee(e){let t=/^[a-zA-Z0-9]+$/.test(e)?{record_id:e}:{unique_id:e};return (await this.getRecords(t,{limit:1}))?.list?.[0]||null}function Rn(e){return e==="private"||e==="*"||e==="**"?"private":e==="public"?0:e==="authorized"?1:e==="admin"?99:typeof e=="number"?e:0}function ar(e,t,r){let n=this.user?.user_id;if(!(!e||!e.user_id||!n||e.user_id===n))throw new a(`Record "${t}" belongs to another user (${e.user_id}), so ${r} would either seal it under the wrong key or strand its contents. Encryption only operates on records you own, no matter what access level you hold.`,{code:"ENCRYPTION_NOT_RECORD_OWNER"})}async function pr(e,t,r){let n=L.call(this);if(!n)return {send:e,plain:e,encrypted:false,omit:false};let i=t?.record_id||"",s=i,o=t?.unique_id||"";if(i&&n.passthrough.has(i)){let F=n.passthrough.get(i);return n.passthrough.delete(i),{send:F,plain:e,encrypted:true,omit:false}}let{group:l,table:u,record:c}=await da.call(this,n,t,s);if(l!=="private"){let F=true;if(!r&&i){let z=c||await Ee.call(this,i);if(z&&z.encrypted){if(ar.call(this,z,i,"making it non-private"),z.encrypted.status==="failed")throw new a(`Cannot make record "${i}" non-private: its current contents could not be decrypted (${z.encrypted.reason}), so they cannot be written back in the clear. Unlock encryption, or supply the record's data with the access group change.`,{code:"ENCRYPTION_LOCKED"});let Be=!!z.bin&&Object.keys(z.bin).some(gt=>(z.bin[gt]||[]).some(Wr=>Wr&&Wr.encrypted));if(!Be&&s){let gt=n.dek.get(s);gt&&(q(gt.bytes),n.dek.delete(s));}return {send:z.data,plain:z.data,encrypted:false,omit:false,files:Be?"decrypt":void 0}}}let J=c;i&&!J&&(J=await Ee.call(this,i).catch(()=>null)),J&&J.encrypted&&ar.call(this,J,i,"making it non-private");let ft=!!J&&!!J.bin&&Object.keys(J.bin).some(z=>(J.bin[z]||[]).some(Be=>Be&&Be.encrypted));if(ft&&(F=false),F&&s){let z=n.dek.get(s);z&&(q(z.bytes),n.dek.delete(s));}return {send:e,plain:e,encrypted:false,omit:!r,files:ft?"decrypt":void 0}}if(kn(n,u))return {send:e,plain:e,encrypted:false,omit:false};if(n.ready&&!n.unlocking)try{await n.ready;}catch{}if(!r)return {send:e,plain:e,encrypted:false,omit:true};if(fr.call(this,e))throw new a("This record's data could not be decrypted by this session, so it cannot be written back. Writing it would replace the record with the placeholder.",{code:"ENCRYPTION_CANNOT_REWRITE_WITHHELD"});if(n.status!=="unlocked"||!n.mk)throw new a("Encryption is enabled but locked, so this private record cannot be written. Call unlockEncryption({ password }) first, or the user must log in with their password.",{code:"ENCRYPTION_LOCKED"});if(e&&typeof e=="object"&&!Array.isArray(e)&&Object.prototype.hasOwnProperty.call(e,Ye))throw new a(`"${Ye}" is a reserved key in record data.`,{code:"INVALID_PARAMETER"});if(t?.service&&t.service!==this.service||t?.owner&&t.owner!==this.owner)throw new a("Encrypted records cannot be written to another project. The encryption key is derived per project, so a record written under one service and read under another could never be decrypted. Construct a separate Skapi instance for that project.",{code:"INVALID_REQUEST"});let f=this.user?.user_id;if(!f)throw new a("User login is required to write an encrypted record.",{code:"INVALID_REQUEST"});let g=xe.call(this),d=false;if(i&&n.roll.has(i)){d=true,n.roll.delete(i);let F=n.dek.get(i);n.dek.delete(i),F&&q(F.bytes);}let p=c;i&&!p&&!n.dek.has(i)&&(p=await Ee.call(this,i).catch(()=>null)),p&&ar.call(this,p,i,"making it private");let h=!!p&&!p.encrypted&&!!p.bin&&Object.keys(p.bin).some(F=>(p.bin[F]||[]).some(J=>J&&!J.encrypted)),m=null;if(i&&!d&&(m=n.dek.get(i)||null,!m)){let F=p||c||await Ee.call(this,i);if(F&&(s=F.record_id||i,m=n.dek.get(s)||null,!o&&F.unique_id&&(o=F.unique_id),!m&&F.encrypted?.status==="failed"))throw new a(`Cannot update encrypted record "${i}": its current contents could not be decrypted (${F.encrypted.reason}), so its existing key wraps cannot be preserved. Updating anyway would revoke everyone it is shared with.`,{code:"ENCRYPTION_LOCKED"})}s===i&&m&&m.rid&&(s=m.rid),!o&&m&&m.anch==="uid"&&m.uid&&(o=m.uid);let _,b,A;if(m){if(m.own&&m.own!==f)throw new a(`Record "${i}" belongs to another user (${m.own}). Encryption only operates on records you own.`,{code:"ENCRYPTION_NOT_RECORD_OWNER"});_=m.bytes,b=m.key,A=Object.assign({},m.recipients);}else {let F=await ln();_=F.bytes,b=F.key,A={};}let w=o?"uid":s?"rid":"new",I=w==="uid"?o:w==="rid"?s:"",E=ur(g,f,w,I),N=Je(E,f,"mk"),C=await ne(n.mk,_,N);A[f]={t:"mk",iv:V(C.iv),ct:V(C.ct)},m&&(m.anch!==w||dr(m)!==I)&&(A=await ga.call(this,n,_,A,g,f,w,I,E));let D=K(JSON.stringify(e===void 0?null:e)),v=await ne(b,D,E);q(D);let U={[Ye]:Tn,enc:"A256GCM",kw:"ECDH-ES+A256GCM",anch:w,uid:o,rid:s,own:f,iv:V(v.iv),ct:V(v.ct),k:A},x,M,de=U.ct;s&&de.length>ca&&(x=$(de),U.ct="",U.ct_ref=ua,m&&m.ctRef&&(M=m.ctRef));let ie=JSON.stringify(U).length;if(ie>2*1024*1024)throw new a(`Encrypted record data is too large: once encrypted and base64 encoded it becomes ${ie} bytes, over the ${2*1024*1024} byte limit. Encryption costs about 33% plus roughly 230 bytes per additional recipient.`,{code:"ENCRYPTED_DATA_TOO_LARGE"});return s&&n.dek.set(s,{bytes:_,key:b,recipients:A,anch:w,uid:o,rid:s,own:f,access_group:"private"}),{send:U,plain:e,encrypted:true,omit:false,spill:x,retireCt:M,dek:{bytes:_,key:b,recipients:A,anch:w,uid:o,rid:s,own:f,access_group:"private"},files:h?"encrypt":void 0}}function Un(e,t){let r=L.call(this);!r||!t||!e||r.dek.has(e)||r.dek.set(e,Object.assign({},t,{rid:e}));}async function ga(e,t,r,n,i,s,o,l){let u=Object.keys(r).filter(g=>g!==i);if(!u.length)return r;let c=await Er.call(this,u),f={[i]:r[i]};for(let g of u){let d=c[g];d&&(f[g]=await xn.call(this,t,d,n,o,i,g,l));}return f}async function xn(e,t,r,n,i,s,o){let l=vn(r,n,i,s,t.fpr),u=Je(o,s,t.fpr),c=await dn(t.pubRaw,e,l,u);return {t:"ecdh",epk:V(c.epk),iv:V(c.iv),ct:V(c.ct),fpr:t.fpr}}async function Cn(e,t){if(!Et(e))return {value:e};if(t.access_group!=="private")return {value:e};let r=L.call(this);if(!r)return {value:null,flag:{status:"failed",reason:"ENCRYPTION_DISABLED"}};if(r.rawRead)return {value:e};if(kn(r,t.table_name))return {value:e};if(e[Ye]!==Tn)return {value:ee(r.cfg,"UNSUPPORTED_VERSION"),flag:{status:"failed",reason:"UNSUPPORTED_VERSION"}};if(r.ready&&!r.unlocking)try{await r.ready;}catch{}if(e.own!==t.user_id)return {value:ee(r.cfg,"BINDING_MISMATCH"),flag:{status:"failed",reason:"BINDING_MISMATCH"}};if(e.uid&&t.unique_id&&e.uid!==t.unique_id)return {value:ee(r.cfg,"BINDING_MISMATCH"),flag:{status:"failed",reason:"BINDING_MISMATCH"}};if(e.rid&&t.record_id&&e.rid!==t.record_id)return {value:ee(r.cfg,"BINDING_MISMATCH"),flag:{status:"failed",reason:"BINDING_MISMATCH"}};let n=this.user?.user_id,i=n?e.k[n]:null;if(!i)return {value:ee(r.cfg,"NOT_A_RECIPIENT",Object.keys(e.k)),flag:{status:"failed",reason:"NOT_A_RECIPIENT",recipients:Object.keys(e.k)}};if(r.status!=="unlocked"||!r.mk)return {value:ee(r.cfg,"NO_SESSION_KEY"),flag:{status:"failed",reason:"NO_SESSION_KEY"}};let s=xe.call(this),o=dr(e),l=ur(s,e.own,e.anch,o),u;try{if(i.t==="mk")u=await ae(r.mk,$(i.iv),$(i.ct),Je(l,n,"mk"));else if(i.t==="ecdh"){if(!r.ikPriv)return {value:ee(r.cfg,"NO_SESSION_KEY"),flag:{status:"failed",reason:"NO_SESSION_KEY"}};u=await fn(r.ikPriv,$(i.epk),$(i.iv),$(i.ct),vn(s,o,e.own,n,i.fpr),Je(l,n,i.fpr));}else return {value:ee(r.cfg,"UNSUPPORTED_VERSION"),flag:{status:"failed",reason:"UNSUPPORTED_VERSION"}}}catch{return {value:ee(r.cfg,"BAD_KEY"),flag:{status:"failed",reason:"BAD_KEY"}}}let c;try{if(e.ct_ref){if(!t.ctUrl)return q(u),{value:ee(r.cfg,"DATA_UNAVAILABLE"),flag:{status:"failed",reason:"DATA_UNAVAILABLE"}};let p=await fa.call(this,t.ctUrl);c=new Uint8Array(await p.arrayBuffer());}else c=$(e.ct);}catch{return q(u),{value:ee(r.cfg,"DATA_UNAVAILABLE"),flag:{status:"failed",reason:"DATA_UNAVAILABLE"}}}let f,g;try{g=await oe(u),f=await ae(g,$(e.iv),c,l);}catch{return q(u),{value:ee(r.cfg,"CORRUPT"),flag:{status:"failed",reason:"CORRUPT"}}}let d;try{d=JSON.parse(He(f));}catch{return q(f),q(u),{value:ee(r.cfg,"CORRUPT"),flag:{status:"failed",reason:"CORRUPT"}}}if(q(f),t.record_id){let p=r.dek.get(t.record_id);p?(p.bytes=u,p.key=g,p.recipients=e.k,p.anch=e.anch,p.uid=e.uid,p.own=e.own,p.access_group="private",p.ctRef=e.ct_ref||""):r.dek.set(t.record_id,{bytes:u,key:g,recipients:e.k,anch:e.anch,uid:e.uid,rid:t.record_id,own:e.own,access_group:"private",ctRef:e.ct_ref||""});}else q(u);return {value:d,flag:{status:"encrypted",recipients:Object.keys(e.k)}}}function Xe(e,t){let[r,n]=e.split("/");return K(`${Y}|kek|${r}|${n}|${t}`)}function Ze(e,t,r,n){let[i,s]=e.split("/");return K(`${Y}|mk|${i}|${s}|${t}|PBKDF2-SHA256|${r}|${n}`)}function On(e,t){let[r,n]=e.split("/");return K(`${Y}|recovery|${r}|${n}|${t}`)}function Ln(e,t,r){let[n,i]=e.split("/");return K(`${Y}|rk|${n}|${i}|${t}|HKDF-SHA256|${r}`)}function Mn(e,t){let[r,n]=e.split("/");return K(`${Y}|self|${r}|${n}|${t}`)}function Fn(e,t){let[r,n]=e.split("/");return K(`${Y}|ik|${r}|${n}|${t}`)}async function At(e){let r=((await this.getRecords({table:{name:e.cfg.table,access_group:"private"},index:{name:"$user_id",value:this.user.user_id,condition:"="}},{limit:2}))?.list||[]).filter(n=>n.user_id===this.user.user_id);return r.length?(r.sort((n,i)=>n.uploaded-i.uploaded),r[0]):null}async function hr(e,t,r){let n=X(We),i=pn(n),s=X(16),o=V(s),l=await sr(n,s,On(e,t)),u=await ne(l,r,Ln(e,t,o));return q(n),{code:i,wrap:{id:V(X(6)),p:"recovery",kdf:{a:"HKDF-SHA256",s:o},iv:V(u.iv),ct:V(u.ct),created:Date.now()}}}async function pa(e,t,r,n){let i=hn(n),s=(r||[]).filter(o=>o.p==="recovery");s.sort((o,l)=>(l.created||0)-(o.created||0));for(let o of s)try{let l=await sr(i,$(o.kdf.s),On(e,t)),u=await ae(l,$(o.iv),$(o.ct),Ln(e,t,o.kdf.s));return q(i),u}catch{}return q(i),null}async function ha(e,t,r,n,i){let s=X(16),o=V(s),l=await Ue(n,s,e.cfg.iterations,Xe(t,r)),u=await ne(l,i,Ze(t,r,e.cfg.iterations,o));return {id:V(X(6)),p:"password",kdf:{a:"PBKDF2-SHA256",it:e.cfg.iterations,s:o},iv:V(u.iv),ct:V(u.ct),created:Date.now()}}async function ma(e,t){let r=this.user.user_id,n=e.scope,i=X(16),s=V(i),o=await Ue(t,i,e.cfg.iterations,Xe(n,r)),l=X(32),u=await ne(o,l,Ze(n,r,e.cfg.iterations,s)),c=await oe(l),f=await cn(),g=await ne(c,f.pkcs8,Fn(n,r));q(f.pkcs8);let d=null;e.cfg.recovery==="code"&&(d=await hr(n,r,l));let p=await ne(c,l,Mn(n,r));q(l);let h=await nr(f.pubRaw),m=Date.now(),_=[{id:V(X(6)),p:"password",kdf:{a:"PBKDF2-SHA256",it:e.cfg.iterations,s},iv:V(u.iv),ct:V(u.ct),created:m}];d&&_.push(d.wrap);let b={v:1,alg:"ECDH-P-256",user_id:r,wraps:_,ik:{iv:V(g.iv),ct:V(g.ct)},self:{iv:V(p.iv),ct:V(p.ct)},pub:V(f.pubRaw),fpr:h,pins:null,created:m,updated:m};await this.postRecord({v:1,alg:"ECDH-P-256",user_id:r,pub:V(f.pubRaw),fpr:h,created:m},{table:{name:e.cfg.table,access_group:"authorized"},index:{name:"pubkey",value:r}});let A=await this.postRecord(b,{table:{name:e.cfg.table,access_group:"private"}}),w=await At.call(this,e);if(w&&w.record_id!==A.record_id){await qn.call(this,e,w,t);return}e.mk=c,e.ikPriv=f.priv,e.pubRaw=f.pubRaw,e.fpr=h,e.keyringRecordId=A.record_id,d&&(e.pendingRecoveryCode=d.code),e.user_id=r,e.pins={},e.status="unlocked",e.reason="";}async function qn(e,t,r){let n=this.user.user_id,i=e.scope,s=t.data;if(t.user_id!==n||s&&s.user_id&&s.user_id!==n)throw new a("The encryption keyring does not belong to this user.",{code:"ENCRYPTION_KEYRING_CORRUPT"});let l=(Array.isArray(s?.wraps)?s.wraps:[]).filter(f=>f.p==="password");if(!l.length)throw new a("The keyring has no password wrap.",{code:"ENCRYPTION_KEYRING_CORRUPT"});l.sort((f,g)=>(g.created||0)-(f.created||0));let u=null;for(let f of l)try{let g=$(f.kdf.s),d=await Ue(r,g,f.kdf.it,Xe(i,n));u=await ae(d,$(f.iv),$(f.ct),Ze(i,n,f.kdf.it,f.kdf.s));break}catch{}if(!u)throw new a("Incorrect password: the encryption keyring could not be opened.",{code:"ENCRYPTION_BAD_PASSWORD"});let c=await oe(u);q(u),await mr.call(this,e,t,c);}async function mr(e,t,r){let n=this.user.user_id,i=t.data,s=await ae(r,$(i.ik.iv),$(i.ik.ct),Fn(e.scope,n)),o=await rr(s);q(s);let l={};if(i.pins&&typeof i.pins=="object"&&i.pins.ct)try{let u=await ae(r,$(i.pins.iv),$(i.pins.ct),K(`${Y}|pins|${e.scope}|${n}`));l=JSON.parse(He(u)),q(u);}catch{l={};}e.mk=r,e.ikPriv=o,e.pubRaw=$(i.pub),e.fpr=i.fpr,e.keyringRecordId=t.record_id,e.user_id=n,e.pins=l,e.status="unlocked",e.reason="";}async function Rt(e){let t=L.call(this);if(!t||!this.user?.user_id)return;if(!tr()){t.status="locked",t.reason="NO_WEB_CRYPTO";return}if(this.user?.is_openid){t.status="locked",t.reason="OPENID_UNSUPPORTED";return}if(t.cfg.minPasswordLength&&e.length<t.cfg.minPasswordLength){t.status="locked",t.reason="WEAK_PASSWORD";return}t.scope=xe.call(this);let r=await At.call(this,t);r?await qn.call(this,t,r,e):await ma.call(this,t,e),t.cfg.persistDevice&&await Kn.call(this,t).catch(()=>{});}async function Vn(e){await this.__connection;let t=L.call(this);if(!t)throw new a("Encryption is not enabled for this instance.",{code:"INVALID_REQUEST"});if(!this.user?.user_id)throw new a("User login is required.",{code:"INVALID_REQUEST"});if(!e?.password||typeof e.password!="string")throw new a('"password" is required.',{code:"INVALID_PARAMETER"});if(await Rt.call(this,e.password),t.status!=="unlocked")throw new a(`Encryption could not be unlocked: ${t.reason}`,{code:"ENCRYPTION_LOCKED"});return {status:t.status}}async function jn(e){this.__projectIdInput&&await this.__projectIdInput;let t=L.call(this);return t?(e?.forgetDevice&&await wr.call(this,t).catch(()=>{}),cr.call(this),this.__cached_requests={},{status:t.status}):{status:"disabled"}}async function $n(e,t){let r=L.call(this);if(!r)return;if(r.status!=="unlocked"||!r.mk)throw new a("Encryption must be unlocked before changing the password, or the encryption keyring would be left wrapped under a password that no longer exists. Call unlockEncryption({ password }) first.",{code:"ENCRYPTION_LOCKED"});let i=(await this.getRecords({record_id:r.keyringRecordId},{limit:1}))?.list?.[0];if(!i)throw new a("The encryption keyring could not be read, so the password change was stopped before it could strand it.",{code:"ENCRYPTION_KEYRING_CORRUPT"});let s=this.user.user_id,o=i.data,l=(o.wraps||[]).filter(m=>m.p==="password");l.sort((m,_)=>(_.created||0)-(m.created||0));let u=null;for(let m of l)try{let _=await Ue(e,$(m.kdf.s),m.kdf.it,Xe(r.scope,s));u=await ae(_,$(m.iv),$(m.ct),Ze(r.scope,s,m.kdf.it,m.kdf.s));break}catch{}if(!u)throw new a("Incorrect current password: the encryption keyring was not re-wrapped.",{code:"ENCRYPTION_BAD_PASSWORD"});let c=X(16),f=V(c),g=await Ue(t,c,r.cfg.iterations,Xe(r.scope,s)),d=await ne(g,u,Ze(r.scope,s,r.cfg.iterations,f));q(u);let p=Date.now(),h=(o.wraps||[]).concat([{id:V(X(6)),p:"password",kdf:{a:"PBKDF2-SHA256",it:r.cfg.iterations,s:f},iv:V(d.iv),ct:V(d.ct),created:p}]);await this.postRecord(Object.assign({},o,{wraps:h,updated:p}),{record_id:r.keyringRecordId});}async function Bn(){let e=L.call(this);if(!e||e.status!=="unlocked"||!e.keyringRecordId)return;let r=(await this.getRecords({record_id:e.keyringRecordId},{limit:1}))?.list?.[0];if(!r)return;let n=r.data,i=(n.wraps||[]).filter(o=>o.p==="password").sort((o,l)=>(l.created||0)-(o.created||0)),s=(n.wraps||[]).filter(o=>o.p!=="password");i.length<=1||await this.postRecord(Object.assign({},n,{wraps:[i[0]].concat(s),updated:Date.now()}),{record_id:e.keyringRecordId});}function yr(){return typeof indexedDB<"u"&&!!indexedDB}function br(){return new Promise((e,t)=>{let r=indexedDB.open(la,1);r.onupgradeneeded=()=>{let n=r.result;n.objectStoreNames.contains(Ae)||n.createObjectStore(Ae);},r.onsuccess=()=>e(r.result),r.onerror=()=>t(r.error);})}function _r(e){return `${e.scope}#${this.user?.user_id}`}async function Kn(e){if(!yr()||!e.mk)return;let t=await br();await new Promise((r,n)=>{let i=t.transaction(Ae,"readwrite");i.objectStore(Ae).put({mk:e.mk,keyringRecordId:e.keyringRecordId,saved:Date.now()},_r.call(this,e)),i.oncomplete=()=>r(),i.onerror=()=>n(i.error);}),t.close();}async function ya(e){if(!yr())return null;let t=await br(),r=await new Promise((n,i)=>{let o=t.transaction(Ae,"readonly").objectStore(Ae).get(_r.call(this,e));o.onsuccess=()=>n(o.result||null),o.onerror=()=>i(o.error);});return t.close(),r&&r.mk?r:null}async function wr(e){if(!yr())return;let t=await br();await new Promise((r,n)=>{let i=t.transaction(Ae,"readwrite");i.objectStore(Ae).delete(_r.call(this,e)),i.oncomplete=()=>r(),i.onerror=()=>n(i.error);}),t.close();}function Hn(){let e=L.call(this);!e||e.ready||(e.unlocking=true,e.ready=ba.bind(this)().catch(()=>false).then(()=>{e.unlocking=false;}));}async function ba(){let e=L.call(this);if(!e||!this.user?.user_id||!e.cfg.persistDevice||!tr())return false;e.scope=xe.call(this);try{let t=await ya.call(this,e);if(!t)return !1;let r=await At.call(this,e);return r?(await mr.call(this,e,r,t.mk),!0):(await wr.call(this,e).catch(()=>{}),!1)}catch{return e.status="locked",e.reason="NO_SESSION_KEY",false}}async function Er(e){let t=L.call(this);if(!t)throw new a("Encryption is not enabled for this instance.",{code:"INVALID_REQUEST"});let r={},n=[],i=false;for(let s of e){let o=t.peerPub.get(s);o?r[s]=o:n.push(s);}return await Promise.all(n.map(async s=>{let o=t.peerInflight.get(s);o||(o=(async()=>{let c=((await this.getRecords({table:{name:t.cfg.table,access_group:"authorized"},index:{name:"$user_id",value:s,condition:"="}},{limit:10}))?.list||[]).filter(p=>p.user_id===s&&p.data?.pub);if(!c.length)return null;c.sort((p,h)=>h.uploaded-p.uploaded);let f=$(c[0].data.pub),g=await nr(f),d=t.pins[s];if(d&&d!==g)throw new a(`The public key for user "${s}" has changed since it was first seen. This is expected if they reset their account, and is what a key substitution attack also looks like. Verify the new fingerprint out of band, then call pinPeerKey({ user_id, fingerprint }).`,{code:"ENCRYPTION_PEER_KEY_CHANGED"});if(!d){if(t.cfg.trustPolicy==="strict")throw new a(`No pinned key for user "${s}" and trustPolicy is "strict". Pin it first with pinPeerKey().`,{code:"ENCRYPTION_PEER_NOT_PINNED"});t.pins[s]=g,i=true;}return {pubRaw:f,fpr:g}})().finally(()=>t.peerInflight.delete(s)),t.peerInflight.set(s,o));let l=await o;l&&t.peerPub.set(s,l),r[s]=l;})),i&&await zn.call(this,t).catch(()=>{}),r}async function Gn(e,t){let r=xe.call(this),n=e.dek.get(t);if(n)return {entry:n,scope:r};let i=await Ee.call(this,t);if(!i)throw new a(`Record "${t}" not found.`,{code:"NOT_EXISTS"});if(i.encrypted?.status==="failed"&&i.encrypted.reason==="DATA_UNAVAILABLE")throw new a(`Cannot change sharing on record "${t}": its data could not be read, so whether it is encrypted is unknown. Retry once the record reads normally.`,{code:"ENCRYPTION_DATA_UNAVAILABLE"});if(!i.encrypted)return null;if(i.user_id!==this.user?.user_id)throw new a("Only the record owner can share or revoke an encrypted record, because adding or removing a key wrap means writing the record.",{code:"ENCRYPTION_GRANT_REQUIRES_OWNER"});let s=e.dek.get(i.record_id)||e.dek.get(t);if(!s)throw new a(`Cannot change sharing on record "${t}": its data could not be decrypted`+(i.encrypted.reason?` (${i.encrypted.reason})`:"")+".",{code:"ENCRYPTION_LOCKED"});return {entry:s,scope:r}}async function Ar(e,t){let r=L.call(this);if(!r)return;let n=await Gn.call(this,r,e);if(!n)return;let{entry:i,scope:s}=n,o=this.user.user_id;if(i.own!==o)throw new a("Only the record owner can share an encrypted record, because adding a key wrap means writing the record.",{code:"ENCRYPTION_GRANT_REQUIRES_OWNER"});let l=await Er.call(this,t),u=t.filter(d=>!l[d]);if(u.length)throw new a(`These users have no encryption key yet, so they cannot be given access: ${u.join(", ")}. A user's key is created the first time they log in with encryption enabled.`,{code:"ENCRYPTION_RECIPIENT_HAS_NO_KEY"});let c=dr(i),f=ur(s,i.own,i.anch,c),g=Object.assign({},i.recipients);for(let d of t)d!==o&&(g[d]=await xn.call(this,i.bytes,l[d],s,c,i.own,d,f));await wa.call(this,r,e,i,g);}async function Wn(e,t){let r=L.call(this);if(!r)return;let n=await Gn.call(this,r,e);if(!n)return;let{entry:i}=n,s=this.user.user_id;if(i.own!==s)throw new a("Only the record owner can revoke access to an encrypted record.",{code:"ENCRYPTION_GRANT_REQUIRES_OWNER"});let o=Object.keys(i.recipients).filter(c=>c===s?true:t?!t.includes(c):false).filter(c=>c!==s),l=await Ee.call(this,e);if(!l)throw new a(`Record "${e}" not found.`,{code:"NOT_EXISTS"});_a(l,e);let u={};if(o.length){u=await Er.call(this,o);let c=o.filter(f=>!u[f]);if(c.length)throw new a(`Cannot revoke on record "${e}": these users keep access but their encryption keys could not be read, so re-sharing after the key roll would fail and lock them out: ${c.join(", ")}.`,{code:"ENCRYPTION_RECIPIENT_HAS_NO_KEY"})}r.roll.add(l.record_id||e),await this.postRecord(l.data,{record_id:l.record_id||e,table:{name:l.table.name,access_group:"private"}}),o.length&&await Ar.call(this,l.record_id||e,o);}function _a(e,t){if(e?.encrypted?.status==="failed")throw new a(`Cannot change sharing on record "${t}": its current data could not be read (${e.encrypted.reason}), so re-writing the record would destroy it.`,{code:"ENCRYPTION_DATA_UNAVAILABLE"})}async function wa(e,t,r,n){let i=await Ea.call(this,t);if(!i)throw new a(`Cannot change sharing on record "${t}": its stored envelope could not be read.`,{code:"ENCRYPTION_DATA_UNAVAILABLE"});r.recipients=n,e.dek.set(t,r);let s=Object.assign({},i,{k:n});e.passthrough.set(t,s),await this.postRecord(void 0,{record_id:t});}async function Ea(e){let t=L.call(this);if(!t)return null;t.rawRead=true;let r;try{r=(await this.getRecords({record_id:e},{limit:1}))?.list?.[0];}finally{t.rawRead=false;}return r&&Et(r.data)?r.data:null}async function Qn(e){this.__projectIdInput&&await this.__projectIdInput;let t=L.call(this);if(!t||t.status!=="unlocked")throw new a("Encryption is locked.",{code:"ENCRYPTION_LOCKED"});t.pins[e.user_id]=e.fingerprint,t.peerPub.delete(e.user_id),await zn.call(this,t);}async function zn(e){if(!e.mk||!e.keyringRecordId)return;let r=(await this.getRecords({record_id:e.keyringRecordId},{limit:1}))?.list?.[0];if(!r)return;let n=await ne(e.mk,K(JSON.stringify(e.pins)),K(`${Y}|pins|${e.scope}|${e.user_id}`));await this.postRecord(Object.assign({},r.data,{pins:{iv:V(n.iv),ct:V(n.ct)},updated:Date.now()}),{record_id:e.keyringRecordId});}function Jn(){let e=L.call(this);if(!e||!e.pendingRecoveryCode)return null;let t=e.pendingRecoveryCode;return e.pendingRecoveryCode="",t}async function Yn(e){await this.__connection;let t=L.call(this);if(!t)throw new a("Encryption is not enabled for this instance.",{code:"INVALID_REQUEST"});if(!this.user?.user_id)throw new a("User login is required. Reset the password and log in first, then use the recovery code.",{code:"INVALID_REQUEST"});if(!e?.code||typeof e.code!="string")throw new a('"code" is required.',{code:"INVALID_PARAMETER"});t.scope=xe.call(this);let r=this.user.user_id,n=await At.call(this,t);if(!n)throw new a("This account has no encryption keyring, so there is nothing to recover.",{code:"NOT_EXISTS"});let i=await pa(t.scope,r,n.data?.wraps||[],e.code);if(!i)throw new a("That recovery code did not open the keyring. Check it against the copy you saved when encryption was set up.",{code:"ENCRYPTION_BAD_RECOVERY_CODE"});let s=await oe(i);await mr.call(this,t,n,s);let o=false,l=null,u=(n.data?.wraps||[]).slice();if(e.password&&(u=u.filter(c=>c.p!=="password"),u.push(await ha(t,t.scope,r,e.password,i)),o=true),t.cfg.recovery==="code"){let c=await hr(t.scope,r,i);u=u.filter(f=>f.p!=="recovery"),u.push(c.wrap),l=c.code;}return q(i),await this.postRecord(Object.assign({},n.data,{wraps:u,updated:Date.now()}),{record_id:n.record_id}),t.cfg.persistDevice&&await Kn.call(this,t).catch(()=>{}),{status:t.status,repaired:o,recoveryCode:l}}async function Xn(){await this.__connection;let e=L.call(this);if(!e)throw new a("Encryption is not enabled for this instance.",{code:"INVALID_REQUEST"});if(e.status!=="unlocked"||!e.mk)throw new a("Encryption must be unlocked to issue a recovery code. Only someone who can already decrypt can create one.",{code:"ENCRYPTION_LOCKED"});if(e.cfg.recovery!=="code")throw new a('Recovery codes are disabled for this instance ("recovery" is "none").',{code:"INVALID_REQUEST"});let r=(await this.getRecords({record_id:e.keyringRecordId},{limit:1}))?.list?.[0];if(!r)throw new a("The encryption keyring could not be read.",{code:"ENCRYPTION_KEYRING_CORRUPT"});let n=r.data?.self;if(!n||!n.ct)throw new a("This keyring predates recovery-code rotation and cannot issue a new code. Use unlockWithRecoveryCode() with the existing code, which issues a replacement.",{code:"ENCRYPTION_KEYRING_CORRUPT"});let i=await ae(e.mk,$(n.iv),$(n.ct),Mn(e.scope,e.user_id)),s=await hr(e.scope,e.user_id,i);q(i);let o=(r.data.wraps||[]).filter(l=>l.p!=="recovery").concat([s.wrap]);return await this.postRecord(Object.assign({},r.data,{wraps:o,updated:Date.now()}),{record_id:e.keyringRecordId}),{recoveryCode:s.code}}var wt="__skenc__",Zn="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";function Aa(e){if(e===0)return "0";let t="";for(;e>0;)t=Zn[e%62]+t,e=Math.floor(e/62);return t}function Ra(e){let t=0;for(let r of e){let n=Zn.indexOf(r);if(n<0)return NaN;t=t*62+n;}return t}function Tt(e){if(typeof e!="string")return null;let t=e.lastIndexOf(wt);if(t<0)return null;let r=Ra(e.slice(t+wt.length));return Number.isFinite(r)?{key:e.slice(0,t),plainSize:r}:null}function Rr(e){try{let t=String(e).split("?")[0].split("/").slice(3);if(t.length<12||t[4]!=="records"||t[7]!=="bin")return null;let r=Tt(t[10]);return r?{recordId:t[5],recordOwner:t[3],filename:t[t.length-1],plainSize:r.plainSize}:null}catch{return null}}function ei(e,t){return {service:this.service,owner:this.owner,recordOwner:t,recordId:e}}async function ti(e,t,r){let n=L.call(this);if(!n||!e)return {key:t,file:r,encrypted:false};let i=n.dek.get(e);if(!i)return {key:t,file:r,encrypted:false};if(Tt(t))throw new a(`"${wt}" is reserved in an upload form key.`,{code:"INVALID_PARAMETER"});if(t===et)return {key:t,file:r,encrypted:false};let s=new Uint8Array(await r.arrayBuffer()),o={n:r.name,t:r.type||"",lm:r.lastModified||0},l=await En(i.bytes,s,ei.call(this,e,i.own),o);return q(s),{key:`${t}${wt}${Aa(r.size)}`,file:new File([l],r.name,{type:"application/octet-stream"}),encrypted:true}}async function ri(e,t){let r=L.call(this),n=Rr(e);if(!r||!n)return t;let i=r.dek.get(n.recordId);if(!i)throw new a(`Cannot open this file: the data key for record "${n.recordId}" is not available. Read the record first, and make sure encryption is unlocked.`,{code:"ENCRYPTION_LOCKED"});let s=new Uint8Array(await t.arrayBuffer());if(!or(s))throw new a("This file is marked as encrypted but its contents are not an encrypted container.",{code:"ENCRYPTION_FILE_CORRUPT"});let o=await An(i.bytes,s,ei.call(this,n.recordId,n.recordOwner)),l=o.meta&&o.meta.t||"application/octet-stream";return new Blob([o.bytes],{type:l})}function Ta(e){let t=[];for(let r in e?.bin||{})for(let n of e.bin[r]||[])n&&n.encrypted&&t.push({formKey:r,url:n.url,filename:n.filename});return t}function Ia(e){let t=[];for(let r in e?.bin||{})for(let n of e.bin[r]||[])n&&!n.encrypted&&t.push({formKey:r,url:n.url,filename:n.filename});return t}async function Tr(e,t,r){let n=L.call(this);if(!n)return [];let i=await Ee.call(this,e);if(!i)return [];let s=t==="decrypt"?Ta(i):Ia(i);if(!s.length)return [];let o=[],l=new FormData,u=false;for(let c of s){let f=i.bin[c.formKey].find(d=>d.url===c.url);if(!f||typeof f.getFile!="function")continue;let g=await f.getFile("blob");g&&(l.append(c.formKey,new File([g],c.filename,{type:g.type||"application/octet-stream"})),o.push(c.url),u=true);}if(!u)return [];if(t==="decrypt"){let c=n.dek.get(e);c&&(q(c.bytes),n.dek.delete(e));}return await this.uploadFiles(l,{record_id:e,progress:r}),o}var B=null;function St(e){let t={tkid:"ticket_id",cond:"condition",stmp:"timestamp",upd:"updated",acts:"actions",actn:"action",cnt:"count",ttl:"time_to_live",plch:"placeholder",hash:"hash",desc:"description",pmc:"limit_per_user",fail:"failed",rv:"rules_version"},r={};for(let n in e)if(n==="tkid"){let i=e[n].split("#");if(i.length===1){r.ticket_id=i[0];continue}r.ticket_id=i[1],r.consume_id=i[2],r.user_id=i.slice(3).join("#");let s=i[2].slice(-4);if(r.is_test=s===":CHK",!e.stmp){let o=i[2].slice(0,-4);/^[0-9]+$/.test(o)?r.timestamp=parseInt(o,10):r.timestamp=se(i[2].slice(0,-4));}}else t[n]?r[t[n]]=e[n]:r[n]=e[n];return r}async function ii(e){if(!e?.ticket_id)throw new a("Ticket ID is required.",{code:"INVALID_PARAMETER"});if(!/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/.test(e.ticket_id))throw new a('Invalid "ticket_id". Use letters, digits, "_" and "-" (up to 64 chars, starting with a letter or digit).',{code:"INVALID_PARAMETER"});if(!e.method)throw new a('Method is required. Should be either "GET" or "POST"',{code:"INVALID_PARAMETER"});let t=String(e.method).toUpperCase();if(t!=="GET"&&t!=="POST")throw new a('Method should be either "GET" or "POST".',{code:"INVALID_PARAMETER"});let r=!!e.auth;if(r&&t==="GET")throw new a("Signed-in consumption is POST only.",{code:"INVALID_PARAMETER"});await this.__connection;let n=r?"tpa":t==="GET"?"tg":"tp",i=`https://${this.service.slice(0,4)}.${this.customApiDomain}/${n}/${this.service}/${e.ticket_id}`,s=await S.bind(this)(i,e.data||{},{method:t,auth:r},{ignoreService:true});if(s&&typeof s=="object"&&s.stage)throw new a(s.message,{code:s.code,cause:s});return !s||typeof s!="object"||Array.isArray(s)||typeof s.tkid!="string"?s:St(s)}async function si(e,t){await this.__connection;let r=await S.bind(this)("ticket",Object.assign({exec:"list"},e||{}),{auth:true,fetchOptions:t});return r.list=r.list.map(St),r}async function oi(e){if(!e?.ticket_id)throw new a("Ticket ID is required.",{code:"INVALID_PARAMETER"});let t=e.before===void 0||e.before===null?Date.now():e.before;if(typeof t!="number"||!Number.isInteger(t)||t<=0)throw new a('"before" should be a time in milliseconds since the epoch.',{code:"INVALID_PARAMETER"});return S.bind(this)("register-ticket",{exec:"clearlog",ticket_id:e.ticket_id,before:t},{auth:true})}async function ai(e,t){await this.__connection;let r=await S.bind(this)("ticket",Object.assign({exec:"consumed"},e||{}),{auth:true,fetchOptions:t});return r.list=r.list.map(St),r}async function li(e){let t=await S.bind(this)("register-ticket",Object.assign({exec:"reg"},e),{auth:true});return t&&typeof t=="object"&&t.ticket&&(t.ticket=St(t.ticket)),t}async function ci(e){return S.bind(this)("register-ticket",Object.assign({exec:"unreg"},e),{auth:true})}var Da=3600;async function Oe(){if(await this.__connection,this.session){let e=Math.floor(Date.now()/1e3),r=this.session.getIdToken().getExpiration();if(r<e+Da){this.log("request:requesting new token",null);try{await W.bind(this)().getSession({refreshToken:!0}),this.log("request:received new tokens",{exp:this.session?.idToken?.payload?.exp,currentTime:e,expiresIn:r-e,token:this.session?.accessToken?.jwtToken,refreshToken:this.session?.refreshToken?.token});}catch(n){throw this.log("request:new token error",n),new a("User login is required.",{code:"INVALID_REQUEST"})}}else this.log("request:tokens",{exp:this.session.idToken.payload.exp,currentTime:e,expiresIn:r-e,token:this.session.accessToken.jwtToken,refreshToken:this.session.refreshToken.token});return this.session?.idToken?.jwtToken}else throw this.log("request:no session",null),be.bind(this)(),new a("User login is required.",{code:"INVALID_REQUEST"})}function ni(e,t){return new Promise((r,n)=>{t.refreshSession(e.getRefreshToken(),(i,s)=>{this.log("getSession:refreshSessionCallback",{refreshErr:i,refreshedSession:s}),i?(be.bind(this)(),n(i)):s.isValid()?r(s):(be.bind(this)(),n(new a("Invalid session.",{code:"INVALID_REQUEST"})));});})}function W(){if(!this.userPool)throw new a("User pool is missing",{code:"INVALID_REQUEST"});let e=()=>{let s=B.getSignInUserSession().getIdToken().payload||null,o=Ke(s);return this.log("normalized user attribute",o),this.__user=o,o},t=async s=>new Promise((o,l)=>{this.log("getSession:option",s);let{refreshToken:u=false,skipUserUpdateEventTrigger:c=false}=s||{};if(u&&c&&(c=false),B=this.userPool.getCurrentUser(),!B){this.log("getSession:cognitoUser",B),be.bind(this)(),l(null);return}let f=g=>{let d=g.getIdToken().payload;if(this.log("getSession:respond:sessionAttribute",d),d["custom:service"]!==this.service)throw this.log("getSession:respond","invalid service, signing out"),be.bind(this)(),new a("Invalid session.",{code:"INVALID_REQUEST"});return this.session=g,e(),c||this._runOnUserUpdateListeners(this.user),this.session};B.getSession((g,d)=>{if(this.log("getSession:getSessionCallback",{err:g,session:d}),!d){be.bind(this)(),l(new a("Current session does not exist.",{code:"INVALID_REQUEST"}));return}if(g){ni.bind(this)(d,B).then(b=>o(f(b))).catch(l);return}let p=Math.floor(Date.now()/1e3),h=d.getIdToken(),m=h.getExpiration(),_=m<p;if(this.log("getSession:currentTime",p),this.log("getSession:idTokenExp",m),this.log("getSession:isExpired",_),this.log("getSession:existingBearerToken",this.bearerToken),this.bearerToken=h.getJwtToken(),_||u||!d.isValid())ni.bind(this)(d,B).then(b=>o(f(b))).catch(l);else try{o(f(d));}catch(b){l(b);}});}),r=(s,o)=>{let l=o||s.includes(this.service+"-")?s:this.service+"-"+Z.hash(s);return {cognitoUser:new CognitoUser({Username:l,Pool:this.userPool}),cognitoUsername:l}};return {getSession:t,authenticateUser:(s,o,l=false,u=false)=>new Promise((c,f)=>{this.__request_signup_confirmation=null,this.__disabledAccount=null;let g=r(s,l),d=g.cognitoUsername,p=new AuthenticationDetails({Username:d,Password:o});g.cognitoUser.authenticateUser(p,{newPasswordRequired:(h,m)=>{this.__disabledAccount=null,this.__request_signup_confirmation=d,h["custom:signup_ticket"]==="PASS"||h["custom:signup_ticket"]==="MEMBER"||h["custom:signup_ticket"]==="OIDPASS"?g.cognitoUser.completeNewPasswordChallenge(o,{},{onSuccess:_=>{B=g.cognitoUser,t().then(async b=>{if(L.call(this))try{await Rt.bind(this)(o);}catch(A){this.log("encryption:ensureKeyring:failed",A);}c(this.user);});},onFailure:_=>{f(new a(_.message||"Failed to authenticate user.",{code:_.code}));}}):f(new a("User's signup confirmation is required.",{code:"SIGNUP_CONFIRMATION_NEEDED"}));},onSuccess:h=>t({skipUserUpdateEventTrigger:true}).then(async m=>{if(this.__disabledAccount=null,L.call(this))try{await Rt.bind(this)(o);}catch(_){this.log("encryption:ensureKeyring:failed",_);}this._runOnLoginListeners(this.user),this._runOnUserUpdateListeners(this.user),c(this.user);}),onFailure:h=>{let m=[],{parsed:_,code:b}=Pt(h),A=typeof h?.message=="string"?h.message:"";if(b==="NotAuthorizedException"?A.includes("User is disabled.")?(this.__disabledAccount=d,m=["This account is disabled.","USER_IS_DISABLED"]):u?m=["The account already exists.","ACCOUNT_EXISTS"]:m=["Incorrect username or password.","INCORRECT_USERNAME_OR_PASSWORD"]:b==="UserNotFoundException"?m=["Incorrect username or password.","INCORRECT_USERNAME_OR_PASSWORD"]:b==="UserNotConfirmedException"?(this.__request_signup_confirmation=d,m=["User's signup confirmation is required.","SIGNUP_CONFIRMATION_NEEDED"]):(b==="TooManyRequestsException"||b==="LimitExceededException")&&(m=["Too many attempts. Please try again later.","REQUEST_EXCEED"]),_.code==="SIGNUP_CONFIRMATION_NEEDED"&&(this.__request_signup_confirmation=d),m.length){let w=m[1],I=m[0];f(new a(I,{code:w,cause:h}));}else f(_);}});}),createCognitoUser:r,signup:(s,o,l)=>new Promise((u,c)=>{this.userPool.signUp(s,o,l,null,(f,g)=>{if(f){let{parsed:d,code:p}=Pt(f),h=[];p==="UsernameExistsException"?h=["The account already exists.","EXISTS"]:p==="InvalidPasswordException"?h=["Invalid password. Password must be at least 6 characters.","INVALID_PARAMETER"]:p==="InvalidParameterException"?h=[d.message||"Invalid parameter.","INVALID_PARAMETER"]:p==="TooManyRequestsException"||p==="LimitExceededException"?h=["Too many attempts. Please try again later.","REQUEST_EXCEED"]:p==="CodeDeliveryFailureException"?h=["Failed to deliver verification code.","CODE_DELIVERY_FAILURE"]:p==="UserLambdaValidationException"&&(h=[d.message||"Signup validation failed.",d.code==="EXISTS"?"EXISTS":"INVALID_REQUEST"]),h.length?c(new a(h[0],{code:h[1],cause:f})):c(d);return}u(g);});})}}function Pt(e){let t=typeof e?.code=="string"&&e.code.trim()?e.code.trim():"ERROR",n=((typeof e?.message=="string"?e.message:typeof e=="string"?e:"An error occurred.")||"An error occurred.").trim();n||(n="An error occurred.");let i=n.match(/#([A-Za-z0-9_]+)\s*:\s*([\s\S]+)/),s=i?.[1]?.trim()||t,o=i?.[2]?.trim()||n;return {parsed:new a(o,{code:s,cause:e}),code:t}}async function ui(e){await this.__authConnection;let t=e?.refreshToken||false;if(!t)return this.user;try{return await W.bind(this)().getSession(Object.assign({skipUserUpdateEventTrigger:!t,refreshToken:t},e)),this.user}catch{return null}}async function di(e){await this.__connection,e=y.Params(e,{token:"string",id:"string",merge:o=>{if(o===void 0)return false;if(typeof o=="string")return [o];if(Array.isArray(o)){for(let l of o)if(typeof l!="string")throw new a('"merge" array items should be type: <string>.',{code:"INVALID_PARAMETER"})}if(typeof o!="boolean"&&!Array.isArray(o))throw new a('"merge" should be type: <boolean | string[]>.',{code:"INVALID_PARAMETER"});return o},template:o=>{if(typeof o!="object"||o===null)throw new a('"template" should be type: <object>.',{code:"INVALID_PARAMETER"});if(o.welcome!==void 0&&(typeof o.welcome!="string"||!o.welcome))throw new a('"template.welcome" should be a non-empty <string> (template message_id).',{code:"INVALID_PARAMETER"});return o}});let t={token:e.token,id:e.id,merge:e.merge};e.template?.welcome&&(t.template_welcome=e.template.welcome);let r=await S.bind(this)("openid-logger",t),n=r.logger.split("#"),i=this.service+"-"+n[0],s=n[1];return {userProfile:await W.bind(this)().authenticateUser(i,s,true,true),openid:r.openid}}function Ua(e){let t=typeof globalThis<"u"?globalThis:void 0;if(t?.Buffer)return t.Buffer.from(e,"base64").toString("utf8");if(typeof atob=="function"){let r=atob(e),n=new Uint8Array(r.length);for(let i=0;i<r.length;i++)n[i]=r.charCodeAt(i);return typeof TextDecoder<"u"?new TextDecoder().decode(n):r}throw new Error("No base64 decoder available in this environment")}function xa(e){let t=e.split(".");if(t.length!==3)throw new Error("Invalid JWT format");let n=t[1].replace(/-/g,"+").replace(/_/g,"/"),i=Ua(n);return JSON.parse(i)}async function fi(e){await this.__authConnection,this.log("loginWithToken:params",e),e=y.Params(e,{idToken:"string",accessToken:"string",refreshToken:"string"},["idToken"]);let t=xa(e.idToken);if(this.log("loginWithToken:idTokenPayload",t),t["custom:service"]!==this.service)throw new a("Token does not belong to this service.",{code:"INVALID_REQUEST"});let r=Math.floor(Date.now()/1e3);if(t.exp&&t.exp<r)throw new a("Token has expired.",{code:"INVALID_REQUEST"});if(this.__user=Ke(t),this.session=null,e.accessToken&&e.refreshToken)try{if(this.session=new CognitoUserSession({IdToken:new CognitoIdToken({IdToken:e.idToken}),AccessToken:new CognitoAccessToken({AccessToken:e.accessToken}),RefreshToken:new CognitoRefreshToken({RefreshToken:e.refreshToken})}),this.log("loginWithToken:session",this.session),this.log("loginWithToken:CognitoUser",CognitoUser),this.log("loginWithToken:userPool",this.userPool),CognitoUser&&this.userPool){this.log("loginWithToken:cognito:username",t["cognito:username"]);let n={Username:t["cognito:username"],Pool:this.userPool};this.log("loginWithToken:cognitoUserParams",n),B=new CognitoUser(n),B.setSignInUserSession(this.session),this.log("loginWithToken:cognitoUserRestored",{cognitoUserType:typeof B,cognitoUserKeys:Object.keys(B||{}),cognitoUser:B});}}catch(n){this.log("loginWithToken:err",n);try{this.log("loginWithToken:err:stringified",JSON.stringify(n));}catch{this.log("loginWithToken:err:stringifyFail",String(n));}try{let i=Object.keys(n||{}),s=Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(n||{}):[],o=Object.getOwnPropertyDescriptors?Object.getOwnPropertyDescriptors(n||{}):{};this.log("loginWithToken:createSessionError:allKeys",{keys:i,symbols:s,descriptors:o});}catch(i){this.log("loginWithToken:createSessionError:allKeysFail",String(i));}}return this._runOnLoginListeners(this.user),this._runOnUserUpdateListeners(this.user),this.user}async function Q(){return await this.__connection,this.__user?.service===this.service?this.__user?.owner===this.host:(await tt.bind(this)(),false)}async function be(e=false){let t=null;B&&(e?t=new Promise((n,i)=>{B.globalSignOut({onSuccess:s=>{this.log("globalSignOut:success",s),n(s);},onFailure:s=>{this.log("globalSignOut:error",s),i(s);}});}):B.signOut()),cr.bind(this)();let r={session:null,__startKeyHistory:{},__cached_requests:{},__user:null};t&&(t=await t);for(let n in r)this[n]=r[n];return this._runOnUserUpdateListeners(null),this._runOnLoginListeners(null),t}async function tt(e){await this.__connection;let{data:t}=j(e);return await be.bind(this)(t?.global),"SUCCESS: The user has been logged out."}async function gi(){if(!this.__request_signup_confirmation)throw new a("Least one login attempt is required.",{code:"INVALID_REQUEST"});return await S.bind(this)("confirm-signup",{username:this.__request_signup_confirmation})}async function pi(e=false){if(typeof e=="string")e=y.Url(e);else if(typeof e!="boolean")throw new a("Argument should be type: <boolean | string>.",{code:"INVALID_REQUEST"});if(!this.__disabledAccount)throw new a("Least one signin attempt of disabled account is required.",{code:"INVALID_REQUEST"});return await S.bind(this)("recover-account",{username:this.__disabledAccount,redirect:e}),"SUCCESS: Recovery e-mail has been sent."}async function Ir(e){let t=y.Params(e,{username:"string",email:"string",password:"string"},["password"]);await this.__authConnection;let r=null;if(t.email)try{r=y.Email(t.email);}catch{t.username=t.email,delete t.email;}if(!t.username&&!t.email)throw new a('Least one of "username" or "email" is required.',{code:"INVALID_PARAMETER"});let n=t.username||t.email;try{return await W.bind(this)().authenticateUser(n,t.password)}catch(i){if((i?.code==="UserNotFoundException"||i?.code==="NotAuthorizedException")&&r&&r!==n)return await W.bind(this)().authenticateUser(r,t.password);throw i}}async function hi(e,t){await this.__authConnection;let r={username:"string",password:c=>y.Password(c),email:c=>y.Email(c),name:"string",address:c=>{if(!c)return "";if(typeof c=="string")return c;if(typeof c=="object")return JSON.stringify(c)},gender:"string",birthdate:c=>c?y.Birthdate(c):"",phone_number:c=>c?y.PhoneNumber(c):"",email_public:["boolean",()=>false],address_public:["boolean",()=>false],gender_public:["boolean",()=>false],birthdate_public:["boolean",()=>false],phone_number_public:["boolean",()=>false],access_group:"number",misc:"string",picture:c=>c?y.Url(c):"",profile:c=>c?y.Url(c):"",family_name:"string",given_name:"string",middle_name:"string",nickname:"string",website:c=>c?y.Url(c):""},n=y.Params(e||{},r,["email","password"]);await tt.bind(this)(),t=y.Params(t||{},{email_subscription:c=>{let f=c;if(typeof c=="number"||typeof c=="string"&&c!=="public"&&c!=="authorized"){let g=y.newsletterGroup(c);if(typeof g=="number"&&g!==0&&g!==1)throw new a('"option.email_subscription" takes 0 (public), 1 (authorized), true, false or the name of a newsletter group.',{code:"INVALID_PARAMETER"});f=g;}else if(typeof c!="boolean"&&typeof c!="string")throw new a('"option.email_subscription" takes 0 (public), 1 (authorized), true, false or the name of a newsletter group.',{code:"INVALID_PARAMETER"});if(f!==false&&!t?.signup_confirmation)throw new a('"option.signup_confirmation" is required for email subscription.',{code:"INVALID_PARAMETER"});return f},signup_confirmation:c=>{let f=c;if(typeof c=="string")f=y.Url(c);else if(typeof c=="boolean")f=c;else throw new a('"option.signup_confirmation" should be type: <string | boolean>.',{code:"INVALID_PARAMETER"});if(f&&!n.email)throw new a('"email" is required for signup confirmation.',{code:"INVALID_PARAMETER"});return f},login:c=>{if(typeof c=="boolean"){if(t.signup_confirmation&&c)throw new a('"login" is not allowed when "option.signup_confirmation" is true.',{code:"INVALID_PARAMETER"});return c}throw new a('"option.login" should be type: boolean.',{code:"INVALID_PARAMETER"})},template:c=>{if(typeof c!="object"||c===null)throw new a('"option.template" should be type: <object>.',{code:"INVALID_PARAMETER"});if(c.signup_confirmation!==void 0){if(typeof c.signup_confirmation!="string"||!c.signup_confirmation)throw new a('"option.template.signup_confirmation" should be a non-empty <string> (template message_id).',{code:"INVALID_PARAMETER"});if(!t?.signup_confirmation)throw new a('"option.signup_confirmation" is required when "option.template.signup_confirmation" is set.',{code:"INVALID_PARAMETER"})}if(c.welcome!==void 0&&(typeof c.welcome!="string"||!c.welcome))throw new a('"option.template.welcome" should be a non-empty <string> (template message_id).',{code:"INVALID_PARAMETER"});return c}});let i=t?.login||false;if(n.signup_confirmation=t?.signup_confirmation||false,n.email_subscription=t?.email_subscription===void 0||t?.email_subscription===null?false:t.email_subscription,n.email_public&&!n.signup_confirmation)throw new a('"option.signup_confirmation" should be true if "email_public" is set to true.',{code:"INVALID_PARAMETER"});n.service=this.service,n.owner=this.owner;let s=W.bind(this)().createCognitoUser(n.username||n.email);for(let c of ["email_public","address_public","gender_public","birthdate_public","phone_number_public"])n[c]=n[c]?"1":"0";n.access_group&&(n.access_group=n.access_group.toString());let o=(await S.bind(this)("signupkey",{username:s.cognitoUsername,signup_confirmation:typeof n.signup_confirmation=="boolean"?JSON.stringify(n.signup_confirmation):n.signup_confirmation,email_subscription:n.email_subscription,template_confirmation:t?.template?.signup_confirmation||"",template_welcome:t?.template?.welcome||""})).split(":"),l=o.slice(1).join(":"),u=[new CognitoUserAttribute({Name:"custom:signup",Value:o[0]}),new CognitoUserAttribute({Name:"locale",Value:l.split("#")[1]}),new CognitoUserAttribute({Name:"custom:signup_ticket",Value:l})];for(let c in r){let f=["email_public","address_public","gender_public","birthdate_public","phone_number_public","misc","service","owner"];n[c]!==""&&(c==="username"||c==="password"||c==="access_group"||(f.includes(c)?u.push(new CognitoUserAttribute({Name:"custom:"+c,Value:n[c]})):u.push(new CognitoUserAttribute({Name:c,Value:n[c]}))));}return await W.bind(this)().signup(s.cognitoUsername,n.password,u),n.signup_confirmation?(B=s.cognitoUser,this.__request_signup_confirmation=s.cognitoUsername,"SUCCESS: The account has been created. User's signup confirmation is required."):i?Ir.bind(this)({email:n.username||n.email,password:n.password}):"SUCCESS: The account has been created."}async function mi(){await this.__connection;let e=await S.bind(this)("remove-account",{disable:this.__user.user_id},{auth:true});return await tt.bind(this)(),e}async function yi(e){await this.__connection;let t=y.Params(e,{email:i=>y.Email(i),code:["number","string"],new_password:i=>y.Password(i)},["email","code","new_password"]),r=t.code,n=t.new_password;return typeof r=="number"&&(r=r.toString()),new Promise(async(i,s)=>{W.bind(this)().createCognitoUser(t.email).cognitoUser.confirmPassword(r,n,{onSuccess:l=>{i("SUCCESS: New password has been set.");},onFailure:l=>{s(new a(l?.message||"Failed to reset password.",{code:l?.code||"ERROR",cause:l}));}});})}async function bi(e,t,r){await this.__connection;let n;if(!B)throw new a("The user has to be logged in.",{code:"INVALID_REQUEST"});if(e==="email"||e==="phone_number"){if(!this.__user.hasOwnProperty(e))throw new a(`No ${e==="email"?"e-mail":"phone number"} to verify`,{code:"INVALID_REQUEST"});if(this.__user?.[`${e}_verified`])return `SUCCESS: "${e}" is verified.`;n=(t?y.Params(t,{code:"string"}):{}).code||"";}else return;let i,s=r?.template?.verification;if(s!==void 0){if(typeof s!="string"||!s)throw new a('"template.verification" should be a non-empty <string> (template message_id).',{code:"INVALID_PARAMETER"});i={template_verification:s};}return new Promise((o,l)=>{let u={onSuccess:c=>{n?W.bind(this)().getSession({refreshToken:true}).then(()=>{this.__user&&(this.__user[e+"_verified"]=true),o(`SUCCESS: "${e}" is verified.`);}).catch(f=>{l(f);}):o("SUCCESS: Verification code has been sent.");},onFailure:c=>{l(new a(c.message||"Failed to request verification code.",{code:c?.code}));}};n?B?.verifyAttribute(e,n,u):(u.inputVerificationCode=null,B?.getAttributeVerificationCode(e,u,i));})}function _i(e,t){return bi.bind(this)("phone_number",e,t)}function wi(e,t){return bi.bind(this)("email",e,t)}async function Ei(e,t){await this.__connection;let r=y.Params(e,{email:i=>y.Email(i)},["email"]),n;if(t?.template!==void 0){if(typeof t.template!="object"||t.template===null||Array.isArray(t.template))throw new a('"template" should be type: <object>.',{code:"INVALID_PARAMETER"});if(t.template.verification!==void 0)throw new a('"template.verification" is not an option of forgotPassword(). Use "template.forgot_password" (template message_id).',{code:"INVALID_PARAMETER"});let i=t.template.forgot_password;if(i!==void 0){if(typeof i!="string"||!i)throw new a('"template.forgot_password" should be a non-empty <string> (template message_id).',{code:"INVALID_PARAMETER"});n={template_forgot_password:i};}}return new Promise(async(i,s)=>{W.bind(this)().createCognitoUser(r.email).cognitoUser.forgotPassword({onSuccess:l=>{i("SUCCESS: Verification code has been sent.");},onFailure:l=>{let{parsed:u,code:c}=Pt(l),f={UserNotFoundException:"NOT_EXISTS",InvalidParameterException:"INVALID_PARAMETER",NotAuthorizedException:"INVALID_REQUEST",LimitExceededException:"REQUEST_EXCEED",TooManyRequestsException:"REQUEST_EXCEED",CodeDeliveryFailureException:"CODE_DELIVERY_FAILURE"}[c]||u.code||c||"ERROR";s(new a(u.message,{code:f,cause:l}));}},n);})}async function Ai(e){if(await this.__connection,!this.session)throw new a("User login is required.",{code:"INVALID_REQUEST"});let t=y.Params(e,{current_password:"string",new_password:"string"});if(!t?.current_password)throw new a('"current_password" is required to change password.',{code:"INVALID_PARAMETER"});if(!t?.new_password)throw new a('"new_password" is required to change password.',{code:"INVALID_PARAMETER"});return y.Password(t.current_password),y.Password(t.new_password),L.call(this)&&await $n.bind(this)(t.current_password,t.new_password),new Promise((r,n)=>{B.changePassword(t.current_password,t.new_password,(i,s)=>{if(i){if(i?.code==="InvalidParameterException")n(new a("Invalid password parameter.",{code:"INVALID_PARAMETER"}));else if(i?.code==="NotAuthorizedException")n(new a("Incorrect password.",{code:"INVALID_REQUEST"}));else if(i?.code==="TooManyRequestsException"||i?.code==="LimitExceededException")n(new a("Too many attempts. Please try again later.",{code:"REQUEST_EXCEED"}));else {let{parsed:o}=Pt(i);n(o);}return}L.call(this)&&Bn.bind(this)().catch(o=>this.log("encryption:prune:failed",o)),r("SUCCESS: Password has been changed.");});})}async function Ri(e){if(await this.__connection,!this.session)throw new a("User login is required.",{code:"INVALID_REQUEST"});let t=y.Params(e||{},{user_id:i=>y.UserId(i),email:i=>y.Email(i),address:i=>{if(!i)return "";if(typeof i=="string")return i;if(typeof i=="object")return JSON.stringify(i)},name:"string",gender:"string",birthdate:i=>i?y.Birthdate(i):"",phone_number:i=>i?y.PhoneNumber(i):"",email_public:"boolean",phone_number_public:"boolean",address_public:"boolean",gender_public:"boolean",birthdate_public:"boolean",misc:"string",picture:i=>i?y.Url(i):"",profile:i=>i?y.Url(i):"",family_name:"string",given_name:"string",middle_name:"string",nickname:"string",website:i=>i?y.Url(i):""});if(t&&typeof t=="object"&&!Object.keys(t).length)return this.user;let r=[["email_public","email_verified","User's e-mail should be verified to set"],["phone_number_public","phone_number_verified","User's phone number should be verified to set"]];if(this.__user){for(let i of r)if(t[i[0]]&&!this.__user[i[1]])throw new a(`${i[2]} "${i[0]}" to true.`,{code:"INVALID_REQUEST"})}let n=[];for(let i in t){if(t[i]===this.user[i]){n.push(i);continue}if(["email_public","phone_number_public","address_public","gender_public","birthdate_public","misc"].includes(i)){let o=t[i];typeof o=="boolean"&&(o=o?"1":"0"),t["custom:"+i]=o,n.push(i);}}for(let i of n)delete t[i];if(t.user_id)if(t.user_id===this.user.user_id)delete t.user_id;else return S.bind(this)("admin-edit-profile",{attributes:t},{auth:true});if(t&&typeof t=="object"&&Object.keys(t).length){let i=[];for(let s in t)i.push(new CognitoUserAttribute({Name:s,Value:t[s]}));return await new Promise((s,o)=>{B?.updateAttributes(i,(l,u)=>{l&&o([l?.code||l?.name,l?.message||"Failed to update user settings."]),s(u);});}),await W.bind(this)().getSession({refreshToken:true}),this.user}return this.user}async function Ti(e,t){e=j(e).data,e||(e={searchFor:"timestamp",condition:">",value:0},t||(t={}),t.ascending=false),await this.__connection;let r={user_id:s=>y.UserId(s),email:"string",phone_number:"string",locale:s=>{if(typeof s!="string"||typeof s=="string"&&s.length>5)throw new a('Value of "locale" should be a country code.',{code:"INVALID_PARAMETER"});return s},name:"string",address:"string",gender:"string",birthdate:s=>y.Birthdate(s),subscribers:"number",timestamp:"number",access_group:"number",approved:"string"},n=["searchFor","value"],i=(s,o)=>{let l=r[e.searchFor];if(typeof l=="function")return l(s);if(typeof s!==l)throw new a(`${o} does not match the type of "${e.searchFor}" index.`,{code:"INVALID_PARAMETER"});return s};if(e=y.Params(e,{searchFor:["user_id","name","email","phone_number","address","gender","birthdate","locale","subscribers","timestamp","access_group","approved"],condition:[">",">=","=","<","<=","gt","gte","eq","lt","lte",()=>"="],value:s=>Array.isArray(s)?s.map(o=>i(o,"Value")):i(s,"Value"),range:s=>i(s,"Range")},n),e?.condition&&e?.condition!=="="&&e.hasOwnProperty("range"))throw new a("Conditions does not apply on range search.",{code:"INVALID_PARAMETER"});if(Array.isArray(e.value)&&(e.condition!=="="||e.range))throw new a(`Conditions are not allowed on a list of "${e.searchFor}" values. Search for a single value to use a condition or range.`,{code:"INVALID_PARAMETER"});if(typeof e?.value=="string"&&!e?.value)throw new a("Value should not be an empty string.",{code:"INVALID_PARAMETER"});if(typeof e?.searchFor=="string"&&!e?.searchFor)throw new a('"searchFor" should not be an empty string.',{code:"INVALID_PARAMETER"});return S.bind(this)("get-users",e,{auth:true,fetchOptions:t})}async function Ii(e){await this.__connection;let t=await S.bind(this)("last-verified-email",e,{auth:true});return t.includes("SUCCESS")?(await W.bind(this)().getSession({refreshToken:true}),this.user):t}var Le=null,ki=typeof SubmitEvent<"u",Oa=typeof HTMLFormElement<"u",nt=H(),Pr=0;function vi(e){if(!e)return null;let t=Number(e);if(Number.isFinite(t))return Math.max(0,t*1e3);let r=Date.parse(e);return Number.isNaN(r)?null:Math.max(0,r-Date.now())}var kr=6,Pi=6e4;function Ni(e,t){let r=e>0?e:Math.min(Pi,500*Math.pow(2,t));r=Math.min(Pi,r);let n=Math.floor(Math.random()*Math.min(1e3,Math.max(50,r*.25)));return r+n}function Di(e){return new a(`Too many requests: ${e} still answered 429 after ${kr} retries.`,{code:"TOO_MANY_REQUESTS"})}function Sr(e,t){return t>0?e/t*100:0}var Si=e=>{let{auth:t,type:r,endpoints:n,stable:i}=e,s=n[0],o=n[1];if(Pr++,r==="admin"){let l=Object.entries(s).filter(([u,c])=>u.includes(t?"_private":"_public")&&u!=="get_users_private"&&u!=="service_public"&&typeof c=="string").map(([,u])=>u);if(!l.length)throw new a("No available admin gateways.",{code:"INVALID_REQUEST"});return l[Pr%l.length]}if(r==="record"){let l=Object.entries(o).filter(([u,c])=>u.includes(t?"record_private":"record_public")&&typeof c=="string").map(([,u])=>u);if(!l.length)throw new a("No available record gateways.",{code:"INVALID_REQUEST"});return i?l[0]:l[Pr%l.length]}throw new a("Invalid gateway type.",{code:"INVALID_REQUEST"})};async function La(e,t,r){let n=await Promise.all([this.admin_endpoint,this.record_endpoint]),i=n[0],s=n[1],o=e.split("?"),l=o.length>1?"?"+o[1]:"";switch(e=o[0],e){case "get-users":return i.get_users_private+e+l;case "service":return i.service_public+e+l;case "get-newsletters":case "get-public-newsletters":case "subscribe-newsletter":case "subscribe-public-newsletter":case "signupkey":case "admin-newsletter-request":case "admin-signup":case "confirm-signup":case "openid-logger":case "block-account":case "admin-edit-profile":case "remove-account":case "post-secure":case "recover-account":case "mock":case "grant-access":case "last-verified-email":case "ticket":case "register-ticket":case "get-newsletter-subscription":case "send-inquiry":case "register-newsletter-group":case "delete-newsletter-group":case "newsletter-group-endpoint":case "invitation-list":case "csr":case "csr-poll":case "csr-cancel":case "csr-finalize":return Si.bind(this)({auth:t,type:"admin",endpoints:n})+e+l;case "post-record":return (t?s.post_private:s.post_public)+e+l;case "get-records":return (t?s.get_private:s.get_public)+e+l;case "del-files":case "del-records":return s.del_private+e+l;case "store-subscription":case "get-vapid-public-key":case "push-notification":case "delete-subscription":case "subscription":case "get-subscription":case "get-table":case "get-tag":case "get-uniqueid":case "get-index":case "get-signed-url":case "get-signed-urls":case "extract-file-text":case "grid-query":case "grant-private-access":case "request-private-access-key":case "get-ws-group":case "check-schema":case "get-feed":case "castspell":case "dopamine":case "getspell":return Si.bind(this)({auth:t,type:"record",endpoints:n,stable:r})+e+l;default:return y.Url(e)+l}}var rt={};function Ui(){Le&&(Le.terminate(),Le=null);}async function S(e,t=null,r,n){this.log("request",{url:e,data:t,options:r,_etc:n||{}}),r=r||{};let{auth:i=false,method:s="post",bypassAwaitConnection:o=false}=r;s=s.toUpperCase();let l=null,u=null,c=await La.bind(this)(e,!!i,!!r.stableGateway),f=t?.service||this.service,g=t?.owner||this.owner;if(!o&&(l=await this.__connection,!l))throw new a("Invalid connection. The service could have been disabled, or has a restricted CORS.",{code:"INVALID_REQUEST"});let d=r?.tokenHeaders?.idToken===true;(i||d)&&(u=await Oe.bind(this)());let p={},{fetchMore:h=false,progress:m}=r?.fetchOptions||{};if(r?.fetchOptions&&Object.keys(r.fetchOptions).length){for(let v of ["limit","startKey","ascending"])if(r.fetchOptions.hasOwnProperty(v)){if(v==="startKey"&&r.fetchOptions[v]===null)continue;p[v]=r.fetchOptions[v];}p=y.Params(p,{limit:v=>{if(typeof v!="number")throw new a("Fetch limit should be a number.",{code:"INVALID_REQUEST"});if(v>1e3)throw new a("Fetch limit should be below 1000.",{code:"INVALID_REQUEST"});return v},startKey:v=>v,ascending:"boolean"});}let _=n?.ignoreService?{}:{service:f,owner:g};Object.assign(_,p),t=j(t).data,t?t&&typeof t=="object"&&(t=Object.assign(_,t)):t=_;let b=`${s}:${i?"auth":"public"}:${e}`,A=(()=>{if(t&&typeof t=="object"&&Object.keys(t).length&&!(nt&&t instanceof FormData)){let v=function(U){return typeof U=="object"&&U!==null?Object.keys(U).sort().reduce((x,M)=>(typeof U[M]=="object"&&U[M]!==null?x[M]=v(U[M]):x[M]=U[M],x),{}):U};return Z.hash(b+"/"+JSON.stringify(v(t)))}return Z.hash(b+"/"+f)})(),{requestKey:w,requestKeyWithStartKey:I}=Ma.bind(this)({params:t,url:e,fetchMore:h,hashedParams:A});if(!w||w&&typeof w=="object")return w;if(this.log("requestKey",I),typeof I=="string"&&rt[I]instanceof Promise)return this.log("request:returning pending",I),rt[I];let E={Accept:"*/*"};if(Object.prototype.hasOwnProperty.call(r,"contentType")&&r.contentType!==void 0){let v=r.contentType===null?"application/x-www-form-urlencoded":r.contentType;v&&(E["Content-Type"]=v);}else E["Content-Type"]="application/json";if(u&&(E.Authorization=u),r?.tokenHeaders){let v=(M,de)=>typeof M=="string"?M:M===true?de:null,U=v(r.tokenHeaders.accessToken,this.session?.accessToken?.jwtToken||null),x=v(r.tokenHeaders.idToken,this.bearerToken||this.session?.idToken?.jwtToken||u||null);U&&(E["X-Access-Token"]=U),x&&(E["X-Id-Token"]=x);}let C={public_identifier:this.__public_identifier,service:f,owner:g,resolves_offloaded_data:true};E["Content-Meta"]=JSON.stringify(C),r.revalidate&&(E["Cache-Control"]="no-cache",E.Pragma="no-cache");let D={headers:E};if(r?.responseType&&(D.responseType=r.responseType),s==="GET"){if(t){let v=[];if(nt&&t instanceof FormData?v=Array.from(t.entries()).map(([U,x])=>{let M=typeof x=="string"?x:x.name;return encodeURIComponent(U)+"="+encodeURIComponent(M)}):v=Object.keys(t).map(U=>{let x=t[U];return typeof x!="string"&&(x=JSON.stringify(x)),encodeURIComponent(U)+"="+encodeURIComponent(x)}),v.length){let U=c.includes("?")?c.endsWith("?")||c.endsWith("&")?"":"&":"?";c+=U+v.join("&");}}D.body=null;}else if(nt&&t instanceof FormData)D.body=t;else if(E["Content-Type"]==="application/x-www-form-urlencoded"&&t&&typeof t=="object"){let v=new URLSearchParams;for(let U of Object.keys(t)){let x=t[U];v.append(U,typeof x=="string"?x:JSON.stringify(x));}D.body=v.toString();}else typeof t=="string"?D.body=t:D.body=t?JSON.stringify(t):null;if(D.method=s,Le===null){let v={batchSize:this.requestBatchSize,breakWhenError:false,onProgress:U=>{this.onBatchProcess.forEach(x=>x(U));}};Le=new ys(v);}return this.log("request-opt",D),new Promise((v,U)=>{Le.add([async()=>{let x=xi.bind(this)(c,D,m);rt[I]=x;try{let M=qa.bind(this)({hashedParam:w,requestKeyWithStartKey:I,url:e,fetched:await x});return delete rt[I],this.log("request:end",M),v(M),M}catch(M){throw delete rt[I],this.log("request:err",M),U(M),M}}]);})}function Ma(e){let{params:t={},url:r,fetchMore:n=false,hashedParams:i}=e||{};if(t.startKey){if(!(typeof t.startKey=="object"&&Object.keys(t.startKey).length)&&t.startKey!=="start"&&t.startKey!=="end")throw new a(`"${t.startKey}" is invalid startKey key.`,{code:"INVALID_PARAMETER"});t.startKey==="start"&&(n=false,delete t.startKey);}if(!n){if(this.__cached_requests?.[r]?.[i]&&delete this.__cached_requests[r][i],this.__startKeyHistory?.[r]?.[i]){if(Array.isArray(this.__startKeyHistory[r][i])&&this.__startKeyHistory[r][i].length)for(let u of this.__startKeyHistory[r][i]){let c=i+Z.hash(u);this.__cached_requests?.[r]&&this.__cached_requests?.[r]?.[c]&&delete this.__cached_requests[r][c];}delete this.__startKeyHistory[r][i];}return {requestKeyWithStartKey:i,requestKey:i}}if(!Array.isArray(this.__startKeyHistory?.[r]?.[i]))return {requestKeyWithStartKey:i,requestKey:i};let s=this.__startKeyHistory[r][i],o=s[s.length-1],l=i;if(o){if(o==="end")return {requestKey:{list:[],startKey:"end",endOfList:true,startKeyHistory:s},requestKeyWithStartKey:l};l+=Z.hash(o),t.startKey=JSON.parse(o);}return this.__cached_requests?.[r]?.[l]?{requestKey:this.__cached_requests[r][l],requestKeyWithStartKey:l}:{requestKeyWithStartKey:l,requestKey:i}}function Fa(e){let t=r=>r&&typeof r=="object"&&r.encrypted?Object.assign({},r,{data:null}):r;return Array.isArray(e)?e.map(t):e&&typeof e=="object"?Array.isArray(e.list)?Object.assign({},e,{list:e.list.map(t)}):t(e):e}function xi(e,t,r,n=0){return new Promise((i,s)=>{let o=new XMLHttpRequest;o.open(t.method||"GET",e);for(var l in t.headers||{})o.setRequestHeader(l,t.headers[l]);t.responseType&&(o.responseType=t.responseType),o.onload=()=>{if(o.status<400)if(t.responseType=="json"||t.responseType=="blob")i(o.response);else {let u=o.responseText;try{u=JSON.parse(u);}catch{}i(u);}else if(o.status===429){let u=o.getResponseHeader("Retry-After"),c=vi(u);if(c!==null){if(n>=kr){s(Di(`"${e.split("?")[0]}"`));return}setTimeout(()=>{xi(e,t,r,n+1).then(i,s);},Ni(c,n));}else s("Too many requests");}else {let u=o.status,c=["INVALID_CORS","INVALID_REQUEST","SERVICE_DISABLED","INVALID_PARAMETER","ERROR","EXISTS","NOT_EXISTS"],f=t.responseType=="blob"?o.response:o.responseText;try{f=JSON.parse(f);}catch{}if(typeof f=="string"){let g=f.split(":"),d=g.splice(0,1)[0].trim(),p=g.join(":").trim();s(new a(p||f,{code:c.includes(d)?d:"ERROR"}));}else if(typeof f=="object"&&(f?.message||f?.stage||f?.code)){let g=f?.code||(u?u.toString():null)||"ERROR",d=f.message,p=f?.cause;p===void 0&&f.stage&&(p=f),typeof d=="string"&&(d=d.trim()),d||(d=String(g)),s(new a(d,{cause:p,code:g}));}else s(f);}},o.onerror=()=>s("Network error"),o.onabort=()=>s("Aborted"),o.ontimeout=()=>s("Timeout"),typeof r=="function"&&(o.onprogress=u=>{r({status:"download",progress:Sr(u.loaded,u.total),loaded:u.loaded,total:u.total,abort:()=>o.abort()});},o.upload&&(o.upload.onprogress=u=>{r({status:"upload",progress:Sr(u.loaded,u.total),loaded:u.loaded,total:u.total,abort:()=>o.abort()});})),o.send(t.body);})}function qa(e){let{hashedParam:t,requestKeyWithStartKey:r,url:n,fetched:i}=e;if(!i?.startKey)return i;this.__startKeyHistory.hasOwnProperty(n)||(this.__startKeyHistory[n]={}),this.__startKeyHistory[n].hasOwnProperty(t)||(this.__startKeyHistory[n][t]=[]);let s=i.startKey==="end"?"end":JSON.stringify(i.startKey);return this.__startKeyHistory[n][t].includes(s)||this.__startKeyHistory[n][t].push(s),this.__cached_requests?.[n]||(this.__cached_requests[n]={}),this.__cached_requests[n][r]=i,Object.assign({startKeyHistory:this.__startKeyHistory[n][t]},i)}function Va(e){if(e instanceof a)return e;if(typeof e=="string"){let t=e.trim();if(t==="Network error")return new a("Network error",{code:"NETWORK_ERROR"});if(t==="Aborted")return new a("Aborted",{code:"ABORTED"});if(t==="Timeout")return new a("Timeout",{code:"TIMEOUT"});if(t==="Too many requests")return new a("Too many requests",{code:"TOO_MANY_REQUESTS"});let r=/<Code>([^<]+)<\/Code>/.exec(t)?.[1]?.trim()||"",n=/<Message>([^<]+)<\/Message>/.exec(t)?.[1]?.trim()||"";return r||n?new a(n||r,{code:r||"UPLOAD_FAILED",cause:t}):new a(t.length>300?t.slice(0,300):t||"Upload failed.",{code:"UPLOAD_FAILED",cause:t})}if(e&&typeof e=="object"){let t=e.code||e.Code,r=e.message||e.Message;if(t||r)return new a(String(r||t),{code:String(t||"UPLOAD_FAILED"),cause:e})}return new a("Upload failed.",{code:"UPLOAD_FAILED",cause:e})}var ja=5,$a=100;function Ba(e){let t=String(e?.code??"");if(t==="404"||t==="501")return true;let r=String(e?.message??e??"");return /missing authentication token/i.test(r)||/not implemented/i.test(r)||t==="403"&&/not found/i.test(r)}function Ka(e,t){let r=Array.isArray(e?.list)?e.list:[],n=Array.isArray(e?.failed)?e.failed:[],i=new Array(t);for(let s of n)s&&Number.isInteger(s.index)&&s.index>=0&&s.index<t&&(i[s.index]=new a(String(s.message||"Upload permit refused."),{code:String(s.code||"ERROR")}));for(let s=0;s<t;s++){if(i[s])continue;let o=r[s];o&&typeof o.url=="string"?i[s]={fields:o.fields||null,url:o.url,cdn:o.cdn}:i[s]=new a("No upload permit was answered for this file.",{code:"ERROR"});}return i}async function it(e,t){await this.__connection;let{record_id:r,service:n=this.service,progress:i,timeout:s,throwOnFileError:o=false}=t;if(!r)throw new a('"record_id" is required.',{code:"INVALID_PARAMETER"});if(s!=null){if(typeof s!="number"||!Number.isFinite(s)||s<0)throw new a('"timeout" should be a number of milliseconds, 0 or more.',{code:"INVALID_PARAMETER"})}else s=0;if(ki&&e instanceof SubmitEvent&&(e=e.target),Oa&&e instanceof HTMLFormElement&&(e=new FormData(e)),!nt||!(e instanceof FormData))throw new a('"fileList" should be a FormData or HTMLFormElement.',{code:"INVALID_PARAMETER"});let u={reserved_key:Te(),service:n,request:"post"};t?.record_id&&(u.id=t.record_id);let c,f=(w,I,E,N,C=0)=>new Promise((D,v)=>{c=new XMLHttpRequest,c.open("POST",w),s>0&&(c.timeout=s),c.onload=()=>{let U=c.responseText;try{U=JSON.parse(U);}catch{}if(c.status>=200&&c.status<300)D(U);else if(c.status===429){let x=c.getResponseHeader("Retry-After"),M=vi(x);if(M!==null){if(C>=kr){v(Di(`the upload of "${N}" to "${w}"`));return}setTimeout(()=>{f(w,I,E,N,C+1).then(D,v);},Ni(M,C));}else v("Too many requests");}else v(U);},c.onerror=()=>v("Network error"),c.onabort=()=>v("Aborted"),c.ontimeout=()=>v(new a(`Upload timeout: "${N}" was not finished within ${s} ms.`,{code:"TIMEOUT"})),c.upload&&typeof E=="function"&&(c.upload.onprogress=E),c.send(I);});function g(w){let I="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";if(w===0)return I[0];let E="";for(;w>0;)E=I[w%62]+E,w=Math.floor(w/62);return E}let d=[],p=[],h=[],m=[],_=[];for(let[w,I]of e.entries())I instanceof File&&_.push([w,I]);let b=_.length>=ja&&!this.__bulkPermitsUnavailable,A=0;for(;A<_.length;){let w=_.slice(A,A+(b?$a:1));A+=w.length;let I=[];for(let[N,C]of w){let D=await ti.bind(this)(r,N,C);I.push({file:C,uploadFile:D.file,params:{key:D.key+"/"+D.file.name,sizeKey:g(D.file.size),contentType:D.file.type||null}});}let E=null;if(b)try{let N=await S.bind(this)("get-signed-urls",Object.assign({files:I.map(C=>C.params)},u),{auth:!!this.__user});E=Ka(N,I.length);}catch(N){if(!Ba(N))throw N;this.__bulkPermitsUnavailable=true,b=false;}if(!E){E=[];for(let N of I){let{fields:C=null,url:D,cdn:v}=await S.bind(this)("get-signed-url",Object.assign(N.params,u),{auth:!!this.__user});E.push({fields:C,url:D,cdn:v});}}for(let N=0;N<I.length;N++){let{file:C,uploadFile:D}=I[N],v=E[N];if(v instanceof a){if(m.push(""),p.push(C),h.push({file:C,name:C.name,error:v}),o)throw v;continue}m.push(v.cdn);let U=new FormData;for(let x in v.fields||{})U.append(x,v.fields[x]);U.append("file",D);try{await f(v.url,U,typeof i=="function"?x=>i({status:"upload",progress:Sr(x.loaded,x.total),currentFile:C,completed:d,failed:p,loaded:x.loaded,total:x.total,abort:()=>c.abort()}):null,C.name),d.push(C);}catch(x){p.push(C);let M=Va(x);if(h.push({file:C,name:C.name,error:M}),o)throw M}}}return {completed:d,failed:p,errors:h,bin_endpoints:m}}var kt={};function k(e){let{preventMultipleCalls:t=false}=e||{};return function(r,n,i){let s=i.value;i.value=function(...o){let l=o[0],u=true,c=null,f="",g={},d=false;if(ki&&l instanceof SubmitEvent){l.preventDefault();let b=window.location.href;c=l.target;let A=new URL(c.action);f=A.href;let w=f?f.match(/(?<=\{).*?(?=\})/g):"";if(w)for(let I of w){if(!I)continue;let E=c.querySelector(`[name="${I}"]`);if(E)if(E.type==="file")for(let N=0;N<=E.files.length-1;N++)E.files[N]&&(g[I]||(g[I]=[]),g[I].push(new Promise((C,D)=>{let v=new FileReader;v.onload=function(){C(v.result);},v.readAsDataURL(E.files[N]),v.onerror=D;})));else f=f.replace(`{${I}}`,E.value);}c.getAttribute("action")===null?u=false:d=A.href===b;}let p=async b=>{if(f)for(let A in g)g[A].length&&(f=f.replace(`{${A}}`,(await Promise.all(g[A])).join(",")));if(c&&u){let A=L.call(this)?Fa(b):b;window.sessionStorage.setItem(`${this.service}:${Z.hash(f)}`,JSON.stringify(A)),d?window.location.replace(f):window.location.href=f;}return b},h,m=b=>{throw b instanceof a?b.name=n+"()":b=b instanceof Error?b:new a(b,{name:n+"()"}),b},_=async()=>{try{if(this.__projectIdInput&&await this.__projectIdInput,h=s.bind(this)(...o),h instanceof Promise){let b=await h;return p(b)}return p(h)}catch(b){throw m(b)}};if(t){let b=`${n}:${this?.__public_identifier||""}:${this?.service||""}:${this?.owner||""}`;return kt?.[b]||(kt[b]=_().finally(()=>{delete kt[b];})),kt[b]}return _()};}}async function Ci(){await this.__connection;let e=`${this.service}:${Z.hash(window.location.href.split("?")[0])}`,t=window.sessionStorage.getItem(e);if(window.sessionStorage.removeItem(e),t!==null){try{t=JSON.parse(t);}catch{}return t}return null}var Ha=256,Ga=256,Wa=256,Oi=256,Qa="\u{10FFFF}",za=/[\u0000-\u001F\u007F]|\u{10FFFF}/u,Ja={"/":"%2F","!":"%21","*":"%2A","#":"%23"},Ya={"%2F":"/","%21":"!","%2A":"*","%23":"#"};function Xa(e){return e.replace(/%/g,"%25").replace(/[\/!*#]/g,r=>Ja[r]||r)}function le(e){return typeof e!="string"?e:e.replace(/%(2F|21|2A|23)/gi,r=>{let n=r.toUpperCase();return Ya[n]||r}).replace(/%25/gi,"%")}function fe(e,t,r={}){let{allowEmpty:n=false,maxLength:i,blockKeyDelimiters:s=false,disallowLeadingDollar:o=false,onlyAlphanumeric:l=false}=r;if(typeof e!="string")throw new a(`"${t}" should be type: <string>.`,{code:"INVALID_PARAMETER"});if(l&&/[^a-zA-Z0-9]/.test(e))throw new a(`"${t}" should only contain alphanumeric characters.`,{code:"INVALID_PARAMETER"});if(!n&&e.length===0)throw new a(`"${t}" is required.`,{code:"INVALID_PARAMETER"});if(i&&e.length>i)throw new a(`"${t}" should be <= ${i} characters.`,{code:"INVALID_PARAMETER"});if(za.test(e)||e.includes(Qa))throw new a(`"${t}" cannot include control characters or unsupported sentinel characters.`,{code:"INVALID_PARAMETER"});if(s&&(e=Xa(e),i&&e.length>i))throw new a(`"${t}" should be <= ${i} characters. "/", "!", "*", "#" and "%" count as 3 characters each.`,{code:"INVALID_PARAMETER"});if(o&&e.startsWith("$"))throw new a(`"${t}" cannot start with "$".`,{code:"INVALID_PARAMETER"});return e}function Me(e,t="table.name",r={}){return fe(e,t,{allowEmpty:r.allowEmpty===true,maxLength:Ha,blockKeyDelimiters:true})}function Nt(e,t="tag",r={}){return fe(e,t,{allowEmpty:r.allowEmpty===true,maxLength:Ga,blockKeyDelimiters:true})}function st(e,t="index.name",r={}){return fe(e,t,{allowEmpty:r.allowEmpty===true,maxLength:Wa,blockKeyDelimiters:true,disallowLeadingDollar:true})}function Li(e,t="index.value"){return fe(e,t,{allowEmpty:true,maxLength:Oi})}function vr(e){return typeof e=="string"&&e.slice(-1)==="."}function Nr(e,t){return fe(e,t,{allowEmpty:true,maxLength:Oi,blockKeyDelimiters:true})}function Mi(e){if(!e.record_id&&!e.unique_id)return null;let t={};return e?.service&&(t.service=e.service),e?.owner&&(t.owner=e.owner),e?.record_id?t.record_id=fe(e.record_id,"record_id",{allowEmpty:false,onlyAlphanumeric:true}):e?.unique_id&&(t.unique_id=e.unique_id),t}function Dr(e){if(e===void 0)return 0;if(typeof e=="number"){if(e>99||e<0)throw new a('"table.access_group" value should be within a range of 0 ~ 99.',{code:"INVALID_REQUEST"})}else if(typeof e=="string"){if(e={"*":"private",private:"private",public:0,authorized:1,admin:99}[e],e===void 0)throw new a('"table.access_group" is invalid.',{code:"INVALID_PARAMETER"})}else throw new a('"table.access_group" should be type: <number | string>.',{code:"INVALID_PARAMETER"});if(!this.__user&&e)throw new a("Unsigned users have no access to records with access group.",{code:"INVALID_REQUEST"});return e}var vt=4503599627370496;function Dt(e){if(typeof e=="number"){if(e>vt||e<-vt)throw new a(`Number value should be within range -${vt} ~ +${vt}`,{code:"INVALID_PARAMETER"});return e}if(typeof e=="boolean")return e;if(typeof e=="string")return Li(e,"index.value");throw new a('"index.value" should be type: <number | boolean | string>.',{code:"INVALID_PARAMETER"})}function Fi(e,t){if(!t.index||!("value"in t.index))throw new a('"index.value" is required.',{code:"INVALID_PARAMETER"});if(t.index.name==="$record_id")throw new a(`Cannot do "index.range" on ${t.index.name}`,{code:"INVALID_PARAMETER"});if(typeof t.index.value!=typeof e)throw new a('"index.range" type should match the type of "index.value".',{code:"INVALID_PARAMETER"});return typeof e=="string"?vr(t.index.name)?Nr(e,"index.range"):Li(e,"index.range"):e}var Ut={},Za=10080*60,el=3600,qi=2;function tl(e,t){if(!t)return String(qi);let r=Math.max(60,e-300)*1e3;return "g"+qi+"w"+Math.floor(Date.now()/r)}function rl(e){if(!this.user?.user_id)return false;let t=e[6]==="**"?"**":parseInt(e[6]),r=this.user?.access_group??-1;return !(this.user.user_id!==e[3]&&(t==="**"||r<t))}function nl(e){if(typeof e=="string"){if(e.startsWith("!J%"))try{return JSON.parse(e.substring(3))}catch{return e}return e==="!D%{}"?{}:e==="!L%[]"?[]:e}if(e&&typeof e=="object"&&!Array.isArray(e)&&typeof e.__json__=="string"&&Object.keys(e).length===1)try{return JSON.parse(e.__json__)}catch{}return e}async function xt(e){return typeof e=="string"?e:e&&typeof e.text=="function"?await e.text():await new Promise((t,r)=>{try{let n=new FileReader;n.onload=()=>t(n.result),n.onerror=()=>r(n.error||new Error("Failed to read blob")),n.readAsText(e);}catch(n){r(n);}})}function xr(e){return !!e&&typeof e=="object"&&!Array.isArray(e)&&typeof e.__data__=="string"&&Object.keys(e).length===1&&e.__data__.endsWith("/__data__/__json__.json")}var Fe=new Map,il=1024,sl=/^[0-9A-Za-z]+\/[0-9A-Za-z]+\/__data__\/__json__\.json$/,ji=/^[0-9A-Za-z_-]+$/,ol=/^(\d{2}|\*\*)$/;function $i(e){if(typeof e!="string")return null;let t=e.split("?")[0].split("/");if(t.length<15||t[0]!=="https:"||t[1]!==""||!t[2])return null;let r=t.slice(3);return r[0]!=="publ"&&r[0]!=="auth"||r[4]!=="records"||r[7]!=="bin"||!ji.test(r[1])?null:{origin:t.slice(0,3).join("/"),service:r[1]}}function al(e){let t=$i(e);!t||Fe.get(t.service)===t.origin||(Fe.size>=il&&!Fe.has(t.service)&&Fe.clear(),Fe.set(t.service,t.origin));}function Vi(e,t){if(typeof t!="string"||!sl.test(t))return null;let r=typeof e.usr_tbl=="string"?e.usr_tbl.split("/"):null,n=typeof e.tbl=="string"?e.tbl.split("/"):null,i=null,s=null;if(typeof e.srvc=="string"){let f=e.srvc.split("!")[0].split("/");f.length===2&&(i=f[0],s=f[1]);}i||(i=r?.[2]||n?.[1]||null,i&&i===this.service&&(s=this.owner));let o=typeof e.usr=="string"&&e.usr?e.usr:r?.[0]||null,l=r?.[3]||n?.[2]||null,u=e.rec;for(let f of [i,s,o,u])if(typeof f!="string"||!ji.test(f))return null;if(typeof l!="string"||!ol.test(l))return null;let c=null;if(Array.isArray(e.bin))for(let f of e.bin){let g=$i(f);if(g&&g.service===i){c=g.origin;break}}return c=c||Fe.get(i)||null,c?`${c}/${l==="00"?"publ":"auth"}/${i}/${s}/${o}/records/${u}/${l}/bin/${t}`:null}async function Se(e,t,r=false,n=false,i=false){let s={user_id:"",record_id:"",updated:0,uploaded:0,readonly:false,table:{name:"",access_group:0,subscription:{is_subscription_record:false,upload_to_feed:false,notify_subscribers:false,feed_referencing_records:false,notify_referencing_records:false}},referenced_count:0,source:{referencing_limit:null,prevent_multiple_referencing:false,can_remove_referencing_records:false,only_granted_can_reference:false},ip:"",bin:{}},o=false,l=[],u=null;function c(d){let p=d=="**"?"private":parseInt(d);return p=p==0?"public":p==1?"authorized":p==99?"admin":p,p}let f={ip:d=>{let p=d.split("#"),h=p[0];p.length>1&&(s.unique_id=p.slice(1).join("#")),h.slice(-1)==="R"?(s.readonly=true,h=h.slice(0,-1)):s.readonly=false,/^\d{1,3}-\d{1,3}-\d{1,3}-\d{1,3}$/.test(h)&&(h=h.split("-").join("."),o=true),s.ip=h;},rec:d=>{if(!d)return;s.record_id=d;let p=d.substring(0,d.length-9),h=se(p);s.uploaded=h;},usr:d=>{s.user_id=d;},tbl:d=>{if(d&&!s.table.name){let p=d.split("/");s.table.name=le(p[0]),s.table.access_group=c(p[2]),p?.[3]&&(s.table.subscription.is_subscription_record=true);}},usr_tbl:d=>{let p=d.split("/");s.user_id||(s.user_id=p[0]),s.table.name||(s.table.name=le(p[1]),s.table.access_group=c(p[3]),p?.[4]&&(s.table.subscription.is_subscription_record=true));},idx:d=>{if(!d)return;let p=d.split("!"),h=le(p.splice(0,1)[0]),m=ll("!"+p.join("!"));s.index={name:h,value:m};},ref:d=>{d&&(s.reference=d.split("/")[0]);},tags:d=>{s.tags=Array.isArray(d)?d.map(p=>le(p)):d;},upd:d=>{s.updated=d;},acpt_mrf:d=>{s.source.prevent_multiple_referencing=!d;},ref_limt:d=>{s.source.referencing_limit=d;},rfd:d=>{s.referenced_count=d;},bin:async d=>{let p={},h=s?.reference||null;if(Array.isArray(d)){let m=await Promise.all(d.map(async _=>{try{let b=_.split("/").slice(3).join("/"),A=b.split("/");if(A.length<12)return null;let w=A[A.length-1],I=A[10];if(I==="__data__"&&w==="__json__.json")return {isDataFile:!0,rawUrl:_};if(gr(I,w))return {isDataFile:!0,rawUrl:_};let E=Tt(I),N=A[9],C=A[8],D=c(A[6]),v=_,U=D!=="public"&&rl.call(this,A)?{expires:el,browserCache:Za}:null;if(D!=="public"&&!i)try{v=await _e.bind(this)(_,{dataType:"endpoint",_ref:h});}catch(M){console.error("Error getting signed url for private file:",M),v=_;}let x={access_group:D,filename:w,url:v,path:b,size:E?E.plainSize:se(N),uploaded:se(C),getFile:(M,de)=>{let ie={dataType:M||"download",progress:de,_ref:h},F=()=>_e.bind(this)(v,Object.assign({},ie,{_update:x}));return U?_e.bind(this)(_,Object.assign({},ie,U)).catch(()=>F()):F()}};return E&&(x.encrypted=!0,x.stored_size=se(N)),{pathKey:E?E.key:I,obj:x}}catch{return null}}));for(let _ of m)if(_&&!_.isDataFile){if(p[_.pathKey]){p[_.pathKey].push(_.obj);continue}p[_.pathKey]=[_.obj];}}s.bin=p;},prv_acs:d=>{for(let p in d)["notify_subscribers","upload_to_feed","feed_referencing_records","notify_referencing_records"].includes(p)?s.table.subscription[p]=d[p]:p==="referencing_index_restrictions"&&Array.isArray(d[p])?s.source[p]=d[p].map(m=>m&&typeof m=="object"&&typeof m.name=="string"?Object.assign({},m,{name:le(m.name)}):m):s.source[p]=d[p];},data:async d=>{let p={access_group:s.table.access_group,table_name:s.table.name,user_id:s.user_id,record_id:s.record_id,unique_id:s.unique_id,ctUrl:u},h=()=>{L.call(this)&&(s.encrypted={status:"failed",reason:"DATA_UNAVAILABLE"});},m=async b=>{if(n||!L.call(this)&&!Et(b))return b;let A=await Cn.bind(this)(b,p);return A.flag&&(s.encrypted=A.flag),A.value},_=nl(d);if(_!==d){s.data=await m(_);return}if(xr(d)){let b=d.__data__,A=l.find(w=>w.endsWith(b))||null;if(!A&&!r){await Promise.resolve();let w=Vi.call(this,e,b),I=false,E;if(w)try{let N=await _e.bind(this)(w,{dataType:"blob",_ref:s.reference||null});E=JSON.parse(await xt(N)),I=!0;}catch{}if(I){s.data=await m(E);return}h();}if(A){if(r){s.data=d;return}try{let w=await _e.bind(this)(A,{dataType:"blob",_ref:s.reference||null}),I=await xt(w);s.data=await m(JSON.parse(I));}catch(w){let I=Vi.call(this,e,b),E=false,N;if(I&&I!==A)try{let C=await _e.bind(this)(I,{dataType:"blob",_ref:s.reference||null});N=JSON.parse(await xt(C)),E=!0;}catch{}if(E){s.data=await m(N);return}console.error("Failed to fetch offloaded record data:",w),s.data=null,h();}return}}s.data=await m(d);}};if(e.record_id)return e;if(Array.isArray(e.bin))for(let d of e.bin)try{if(typeof d!="string")continue;al(d);let p=d.split("/").slice(3);p.length>=12&&p[10]==="__data__"&&p[p.length-1]==="__json__.json"&&l.push(d),p.length>=12&&gr(p[10],p[p.length-1])&&(u=d);}catch{}let g=[];for(let d in f)if(e.hasOwnProperty(d)){let p=f[d](e[d]);p instanceof Promise&&g.push(p);}return o&&(s.user_id="anonymous:"+s.user_id),await Promise.all(g),s}function ll(e){let t=e.substring(3);switch(e.substring(0,3)){case "!S%":return t;case "!N%":let n=t.split("."),i=Number(n[0])-4503599627370496;return n.length===1?i:parseFloat(i.toString()+"."+n[1]);case "!B%":return t==="1";case "!L%":case "!D%":try{return JSON.parse(t)}catch{throw new a("Value parse error.",{code:"PARSE_ERROR"})}default:return e}}async function Bi(e){let{endpoints:t}=e;if(typeof t=="string"&&(t=[t]),!Array.isArray(t))throw new a('"endpoints" should be type: array | string.',{code:"INVALID_PARAMETER"});let r=await S.bind(this)("del-files",{endpoints:t,storage:"records"},{auth:true,method:"post"}),n=[];for(let i in r)n.push(Se.bind(this)(r[i]));return Promise.all(n)}async function _e(e,t){if(typeof e!="string")throw new a('"url" should be type: string.',{code:"INVALID_PARAMETER"});let r=e,n=e.split("?"),i=n.shift()||"",s=n.length?"?"+n.join("?"):"",o=y.Url(i);e=o+s;let l=false,u=o.split("/"),f=u[2].split("."),g=null;f.length===3&&f[1]==="skapi"&&(g=f[0],l=true);let d=u.slice(3),p=false;if(!l&&(d[0]==="auth"||d[0]==="publ"))try{y.UserId(d[2]),y.UserId(d[3]),p=d[0]=="auth",l=!0;}catch{throw new a("Invalid file url.",{code:"INVALID_PARAMETER"})}let h=g?null:d[1];if(t=y.Params(t,{expires:["number",()=>0],browserCache:["number",()=>0],refresh:["boolean",()=>false],dataType:["base64","blob","endpoint","text","info",()=>"download"],progress:["function","undefined",null],_ref:[null,"string"],_update:w=>w}),t?.dataType==="info")return {url:e,filename:d[d.length-1],fileKey:d[d.length-2],access_group:d[6]==="**"?"private":d[6]==="01"?"authorized":d[6]==="00"?"public":parseInt(d[6]),uploader:d[3],record_id:d[4]==="records"?d[5]:"N/A",filesize:se(d[9]),uploaded:se(d[8])};let m=e.split("/").slice(-1)[0],_=t.expires;if(_){if(!l)throw new a("Expires option can only be used on skapi cdn endpoints.",{code:"INVALID_PARAMETER"});if(_<0)throw new a('"config.expires" should be > 0. (seconds)',{code:"INVALID_PARAMETER"});let w={request:g?"get-host":"get",id:g||d[5],key:r.split("?")[0],expires:_};h&&(w.service=h);let I=t.browserCache,E={auth:true};if(I){if(I<0)throw new a('"config.browserCache" should be > 0. (seconds)',{code:"INVALID_PARAMETER"});E.method="get",E.stableGateway=true,w.browser_cache=I;let N=this.session?.idToken?.payload?.sub||this.user?.user_id;N&&(w.uid=N),w.nocache=tl(_,t.refresh);}e=(await S.bind(this)("get-signed-url",w,E)).url;}else if(p){let w=Math.floor(Date.now()/1e3);if(!this.bearerToken&&(!this.session?.idToken?.payload?.exp||this.session.idToken.payload.exp<w)){this.log("getFile:requesting new token",null);try{await W.bind(this)().getSession({refreshToken:!0}),this.log("getFile:received new tokens",{exp:this.session?.idToken?.payload?.exp,currTime:w,expiresIn:this.session?.idToken?.payload?.exp-w,token:this.session?.accessToken?.jwtToken,refreshToken:this.session?.refreshToken?.token});}catch(C){throw this.log("getFile:new token error",C),new a("User login is required.",{code:"INVALID_REQUEST"})}}let I=this.bearerToken||this.session?.idToken?.jwtToken;if(!I||!this.user?.user_id)throw new a("User login is required.",{code:"INVALID_REQUEST"});e+=`${e.includes("?")?"&":"?"}t=${encodeURIComponent(I)}`;let E=d[6]==="**"?"**":parseInt(d[6]),N=this.user?.access_group??-1;if(this.user.user_id!==d[3]&&(E==="**"||N<E)){let C=d[5];if(this.__private_access_key[C]&&typeof this.__private_access_key[C]=="string")e+=`&p=${encodeURIComponent(this.__private_access_key[C])}`;else if(this.owner!==this.host)try{let D=await this.requestPrivateRecordAccessKey({record_id:C,reference_id:t?._ref});e+=`&p=${encodeURIComponent(D)}`;}catch{}}}if((L.call(this)?Rr(e):null)&&t?.dataType!=="endpoint"&&t?.dataType!=="info"){let w=await S.bind(this)(e,null,{method:"get",contentType:null,responseType:"blob",fetchOptions:{progress:t?.progress}},{ignoreService:true}),I=await ri.bind(this)(e,w);if(t?.dataType==="blob")return I;if(t?.dataType==="text")return await xt(I);if(t?.dataType==="base64")return await new Promise((C,D)=>{let v=new FileReader;v.onloadend=()=>C(v.result),v.onerror=()=>D(v.error),v.readAsDataURL(I);});let E=URL.createObjectURL(I),N=document.createElement("a");return N.href=E,document.body.appendChild(N),N.setAttribute("download",m),N.click(),document.body.removeChild(N),setTimeout(()=>URL.revokeObjectURL(E),6e4),null}if(t?.dataType==="endpoint")return t._update&&(t._update.url=e),e;if(t?.dataType==="download"){let w=document.createElement("a");return w.href=e,document.body.appendChild(w),w.setAttribute("download",m),w.target="_blank",w.click(),document.body.removeChild(w),null}return new Promise(async(w,I)=>{try{let E=await S.bind(this)(e,null,{method:"get",contentType:null,responseType:t?.dataType==="text"?"text":"blob",fetchOptions:{progress:t?.progress}},{ignoreService:!0});if(t?.dataType==="base64"){let N=new FileReader;N.onloadend=()=>w(N.result),N.readAsDataURL(E);}else w(E);}catch(E){if(t?.browserCache&&!t?.refresh)try{w(await _e.bind(this)(r,Object.assign({},t,{refresh:!0})));return}catch(N){I(N);return}I(E);}})}function Ct(e,t){return `${e||this.service}/${t||this.owner}`}function Ur(e,t){let r=this.__my_unique_ids[e];return r?r[t]:void 0}function Ki(e,t,r){this.__my_unique_ids[e]||(this.__my_unique_ids[e]={}),this.__my_unique_ids[e][t]=r;}function cl(e,t){this.__my_unique_ids[e]&&delete this.__my_unique_ids[e][t];}function Hi(e,t){return !t||t.table===void 0?e:Object.assign({},e,{table:t.table})}async function ot(e){if(await this.__connection,!this.__user&&this.connection?.opt?.require_login===true)throw new a(`This project requires users to sign in before reading its database, so "${e}" is not available to a signed-out visitor.`,{code:"REQUIRE_LOGIN"})}async function Gi(e,t=false){e=j(e,{ignoreEmpty:true}).data||{};let r=Ct.bind(this)(e?.service,e?.owner),n="",i=Mi(e);if(i){if(e=i,n=e.record_id||e.unique_id,typeof n=="string"){typeof this.__private_access_key?.[n]=="string"&&(e.private_key=this.__private_access_key?.[n]||void 0);let s=Ur.bind(this)(r,n);s&&(t?cl.bind(this)(r,n):e.record_id=s);}}else {let s=await Q.bind(this)(),o=e?.reference,l=false;typeof o=="object"&&Object.keys(o).length&&(o?.record_id||o?.unique_id?(n=o.record_id||o.unique_id,n&&typeof this.__private_access_key?.[n]=="string"&&(e.private_key=this.__private_access_key?.[n]||void 0),e.reference=n):o?.user_id&&(l=o.user_id===this.user?.user_id,e.reference=o.user_id)),typeof e?.table=="string"&&(e.table={name:e.table,access_group:0}),e.index&&e.index.hasOwnProperty("range")&&e.index.hasOwnProperty("condition")&&delete e.index.range;let u=c=>({table:{name:f=>Me(f,"table.name"),access_group:Dr.bind(this),subscription:f=>y.UserId(f,'User ID in "subscription"')},reference:"string",index:{name:["$updated","$uploaded","$referenced_count","$user_id",f=>st(f,"index.name")],value:f=>{let g={$updated:"number",$uploaded:"number",$referenced_count:"number",$user_id:y.UserId};if(g.hasOwnProperty(c.index.name)){let d=g[c.index.name];if(typeof d=="function")return d(f);if(d!==typeof f)throw new a(`"index.value" should be type: ${d}.`,{code:"INVALID_PARAMETER"});return f}return typeof f=="string"&&!f?"":typeof f=="string"&&vr(c.index.name)?Nr(f,"index.value"):Dt(f)},condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq"],range:f=>Fi(f,c)},tag:f=>{if(f==null)return f;if(typeof f=="string")return Nt(f,"tag");throw new a('"tag" should be type: string.',{code:"INVALID_PARAMETER"})},private_key:"string"});e=y.Params(e||{},u(e),l||s?[]:["table"],{ignoreEmpty:true});}return {query:e,is_reference_fetch:n}}async function Wi(e,t){await this.__connection,await ot.call(this,"getRecords");let r=await Gi.bind(this)(e),n=r.is_reference_fetch,i=await S.bind(this)("get-records",r.query,{fetchOptions:t,auth:!!this.__user,method:this.__user?"post":"get"});n&&i?.reference_private_key&&typeof i.reference_private_key=="string"&&(this.__private_access_key[n]=i.reference_private_key);let s=[];for(let o in i.list)s.push(Se.bind(this)(i.list[o]));return i.list=await Promise.all(s),i}function Cr(e){let t="",r=[],n=Ct.bind(this)(e?.service,e?.owner),i=y.Params(e||{},{record_id:o=>{let l=typeof o=="string"?Ur.bind(this)(n,o):void 0;return l||fe(o,"record_id",{allowEmpty:false})},unique_id:["string",null],readonly:"boolean",table:{name:o=>Me(o,"table.name"),subscription:[null,{is_subscription_record:"boolean",upload_to_feed:"boolean",notify_subscribers:"boolean",feed_referencing_records:"boolean",notify_referencing_records:"boolean"}],access_group:Dr.bind(this)},notification:o=>{if(o==null)return o;if(typeof o!="object"||Array.isArray(o))throw new a('"notification" should be an object with "title" and "body".',{code:"INVALID_PARAMETER"});for(let l of ["title","body"])if(typeof o[l]!="string"||!o[l].trim())throw new a(`"notification.${l}" is required.`,{code:"INVALID_PARAMETER"});return {title:o.title,body:o.body}},source:{referencing_limit:o=>{if(o===null)return null;if(typeof o=="number"){if(0>o)throw new a('"reference_limit" should be >= 0',{code:"INVALID_PARAMETER"});if(o>4503599627370546)throw new a('"reference_limit" should be <= 4503599627370546',{code:"INVALID_PARAMETER"});return o}throw new a('"reference_limit" should be type: <number | null>',{code:"INVALID_PARAMETER"})},prevent_multiple_referencing:"boolean",can_remove_referencing_records:"boolean",only_granted_can_reference:"boolean",allow_granted_to_grant_others:"boolean",referencing_index_restrictions:o=>{if(o===void 0)return;if(!o||Array.isArray(o)&&!o.length)return null;let l={name:c=>st(c,'"name" in "index_restrictions"'),value:c=>Dt(c),condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq","!=","ne",()=>null],range:c=>{if(c!==null&&typeof o.value!=typeof c)throw new a('Index restriction "range" type should match the type of "value".',{code:"INVALID_PARAMETER"});if(!o.hasOwnProperty("value"))throw new a('Index restriction "value" is required.',{code:"INVALID_PARAMETER"});return c}};Array.isArray(o)||(o=[o]);let u=o.map(c=>y.Params(c,l,["name"]));if(u.length)for(let c of u)c.condition&&c.hasOwnProperty("range")&&delete c.range;return u}},reference:o=>{if(o===null)return {record_id:null};if(o){if(typeof o=="string"){t=o;let l=Ur.bind(this)(n,o);return l||o}if(typeof o!="object")throw new a('"reference" should be type: <string | object>.',{code:"INVALID_PARAMETER"});return y.Params(o,{unique_id:"string",record_id:l=>l==null?l:(t=l,typeof this.__private_access_key?.[l]=="string"&&(e.reference_private_key=this.__private_access_key[l]||void 0),fe(l,"reference.record_id",{allowEmpty:false,onlyAlphanumeric:true}))})}},index:[null,{name:o=>st(o,"index.name"),value:o=>Dt(o)}],tags:o=>{if(o==null)return o;if(typeof o=="string"&&(o=o.split(",").map(l=>l.trim())),!Array.isArray(o))throw new a('"tag" should be type: <string | string[]>.',{code:"INVALID_PARAMETER"});return o.map(l=>Nt(l,"tag"))},remove_bin:o=>{if(!o)return null;let l=[];if(Array.isArray(o))for(let u of o)if(typeof u=="string")l.push(u.split("?")[0]);else if(u.url&&u.size&&u.filename){let f=u.url.split("/").slice(0,3).join("/")+"/"+u.path;l.push(f);}else throw new a('"remove_bin" should be type: <string[] | BinaryFile[] | null>',{code:"INVALID_PARAMETER"});else throw new a('"remove_bin" should be type: <string[] | BinaryFile[] | null>',{code:"INVALID_PARAMETER"});return l},progress:"function",data:o=>o},[],{precall:o=>{let l=o?.data||{};if(!l?.record_id&&!l.table)throw new a('"table.name" is required.',{code:"INVALID_PARAMETER"});typeof l.table=="string"&&(l.table={name:l.table},l?.record_id||(l.table.access_group=0)),o.files&&(r=o.files);}}),s=e.progress||null;if(delete i.progress,!this.__user){let o=!!(i.table?.subscription?.is_subscription_record||i.table?.subscription?.upload_to_feed||i.table?.subscription?.notify_subscribers||i.table?.subscription?.feed_referencing_records||i.table?.subscription?.notify_referencing_records);if(i.record_id)throw new a("Public users cannot update existing records.",{code:"INVALID_REQUEST"});if(i.table.access_group!=="public"&&i.table.access_group!==0)throw new a("Public users can only post records to public tables.",{code:"INVALID_REQUEST"});if(o)throw new a("Public users cannot post subscription records.",{code:"INVALID_REQUEST"});if(i.remove_bin)throw new a("Public users cannot remove files from records.",{code:"INVALID_REQUEST"});if(i.unique_id)throw new a("Public users cannot set unique_id for records.",{code:"INVALID_REQUEST"})}return {config:i,progress:s,is_reference_post:t,files:r}}async function Or(e){if(await this.__connection,!Array.isArray(e)||!e.length)throw new a('"params" should be a non-empty array.',{code:"INVALID_PARAMETER"});let t=[],r,n,i=null,s={},o={},u={_is_bulk_:await Promise.all(e.map(async(h,m)=>{if(!h||typeof h!="object"||Array.isArray(h))throw new a(`"params[${m}]" should be type: <object>.`,{code:"INVALID_PARAMETER"});o[m]={has:h.data!==void 0,value:h.data};let _=Cr.bind(this)(h),b=_.config;if(L.call(this)){let A=Object.prototype.hasOwnProperty.call(b,"data"),w=await pr.bind(this)(b.data,Hi(h,b),A);w.encrypted&&(b.data=w.send,s[m]=w.plain);}if(_.is_reference_post&&t.push(_.is_reference_post),typeof b.progress=="function"&&i===null&&(i=b.progress),b.service!==void 0){if(r===void 0)r=b.service;else if(r!==b.service)throw new a('All bulk params should share the same "service" value.',{code:"INVALID_PARAMETER"})}if(b.owner!==void 0){if(n===void 0)n=b.owner;else if(n!==b.owner)throw new a('All bulk params should share the same "owner" value.',{code:"INVALID_PARAMETER"})}return delete b.progress,delete b.service,delete b.owner,b})),service:"",owner:""};r!==void 0&&(u.service=r),n!==void 0&&(u.owner=n);let c={auth:!!this.__user,method:"post"},f={};Object.keys(f).length&&Object.assign(c,{fetchOptions:f});let g=await S.bind(this)("post-record",u,c),d=await Promise.all(g.map((h,m)=>Se.bind(this)(h,"called from postRecord",o[m]?.has===true,s.hasOwnProperty(m))));for(let h=0;h<d.length;h++)s.hasOwnProperty(h)&&d[h]&&!d[h].error?(d[h].data=s[h],d[h].encrypted={status:"encrypted"}):o[h]?.has&&d[h]&&!g[h]?.error&&xr(g[h]?.data)&&(d[h].data=o[h].value);let p=Ct.bind(this)(r,n);for(let h=0;h<g.length;h++){let m=g[h],_=d[h];if(m&&typeof m=="object"&&m.error&&_&&!_.record_id&&(_.error=m.error),typeof m?.reference_private_key=="string")for(let b of t)this.__private_access_key[b]=m.reference_private_key;_?.unique_id&&Ki.bind(this)(p,_.unique_id,_.record_id);}return d}async function Lr(e,t,r){if(await this.__connection,!t)throw new a('"config" argument is required.',{code:"INVALID_PARAMETER"});let n=Cr.bind(this)(t),i=n.config,s=n.progress,o=n.is_reference_post,l={auth:!!this.__user,method:"post"},u=[],c=j(e);r&&Array.isArray(r)&&r.length&&(u=u.concat(r)),c.files&&Array.isArray(c.files)&&c.files.length&&(u=u.concat(c.files));let f=t?.data!==void 0?t.data:c.data,g=f!==void 0,d=await pr.bind(this)(f,Hi(t,i),g),p=null;p=Object.assign({},i),delete p.data,d.omit||(p.data=d.send);let h={};if(typeof s=="function"&&(h.progress=s),Object.keys(h).length&&Object.assign(l,{fetchOptions:h}),d.files==="decrypt"&&t?.record_id){let w=await Tr.bind(this)(t.record_id,"decrypt",s);if(w.length){let I=p.remove_bin;p.remove_bin=Array.isArray(I)?I.concat(w):w;}}if(d.spill&&t?.record_id){let w=new FormData;if(w.append(et,new File([d.spill],"payload.bin",{type:"application/octet-stream"})),await it.bind(this)(w,{record_id:t.record_id}),d.retireCt){let I=p.remove_bin,E=[d.retireCt];p.remove_bin=Array.isArray(I)?I.concat(E):E;}}let m=await S.bind(this)("post-record",p,l);if(d.encrypted&&m?.rec&&Un.bind(this)(m.rec,d.dek),d.files==="encrypt"&&m?.rec)try{let w=await Tr.bind(this)(m.rec,"encrypt",s);w.length&&await Lr.bind(this)(void 0,{record_id:m.rec,remove_bin:w});}catch(w){console.error("Failed to encrypt existing attachments after making the record private:",w);}if(H()&&u.length){let w=new FormData;for(let N of u)w.append(N.name,N.file,N.file.name);let I={record_id:m.rec,progress:s};i.hasOwnProperty("service")&&(I.service=i.service);let{bin_endpoints:E}=await it.bind(this)(w,I);m.bin?m.bin.push(...E):m.bin=E;}o&&typeof m?.reference_private_key=="string"&&(this.__private_access_key[o]=m.reference_private_key);let _=!!m&&xr(m.data),b=!d.omit&&d.send!==void 0,A=await Se.bind(this)(m,"called from postRecord",b,d.encrypted);if(_&&b&&!d.encrypted&&(A.data=d.plain),d.encrypted&&(A.data=d.plain,A.encrypted={status:"encrypted",recipients:Object.keys(d.send.k||{})}),A.unique_id){let w=Ct.bind(this)(i?.service,i?.owner);Ki.bind(this)(w,A.unique_id,A.record_id),H()&&(this.__uniqueIdsPersistTimer!==null&&clearTimeout(this.__uniqueIdsPersistTimer),this.__uniqueIdsPersistTimer=setTimeout(()=>{this.__uniqueIdsPersistTimer=null;try{window.sessionStorage.setItem(`${w}:uniqueids`,JSON.stringify(this.__my_unique_ids[w]||{}));}catch{}},500));}return A}async function Qi(e,t){await ot.call(this,"getTables");let r=await S.bind(this)("get-table",y.Params(e||{},{table:i=>Me(i,"table",{allowEmpty:true}),condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq","!=","ne"]}),Object.assign({auth:!!this.__user},{fetchOptions:t})),n={cnt_rec:"number_of_records",tbl:"table",srvc:"service",grp_:"number_of_records_in_access_group_"};if(Array.isArray(r?.list))for(let i of r.list){for(let s in n){if(s==="grp_"){for(let o in i)if(o.startsWith("grp_")){let l=o.substring(4);l==="pv"?l="private":l==="00"?l="public":l==="01"?l="authorized":l==="99"&&(l="admin"),i[`number_of_records_in_access_group_${l}`]=i[o],delete i[o];}}i.hasOwnProperty(s)&&(i[n[s]]=i[s],delete i[s]);}typeof i.table=="string"&&(i.table=le(i.table));}return r}async function zi(e,t){if(await ot.call(this,"getIndexes"),!e?.table)throw new a('"table" is required.',{code:"INVALID_PARAMETER"});let r=y.Params(e||{},{table:s=>Me(s,"table",{allowEmpty:true}),index:s=>st(s,"index.name"),order:{by:["average_number","total_number","number_count","average_bool","total_bool","bool_count","string_count","index_name","number_of_records"],value:s=>{if(e?.order?.by==="index_name"&&typeof s=="string")return fe(s,"order.value",{allowEmpty:true,maxLength:256,blockKeyDelimiters:true});if(typeof s!="string"&&typeof s!="number"&&typeof s!="boolean")throw new a('"order.value" should be type: <string | number | boolean>.',{code:"INVALID_PARAMETER"});return s},condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq","!=","ne"]}},["table"]);if(r.hasOwnProperty("order")){if(!r.order?.by)throw new a('"order.by" is required.',{code:"INVALID_PARAMETER"});if(r.order.hasOwnProperty("condition")&&!r.order.hasOwnProperty("value"))throw new a('"value" is required for "condition".',{code:"INVALID_PARAMETER"});if(r.hasOwnProperty("index")&&r.index.substring(r.index.length-1)!==".")throw new a('"index" should be a parent index name of the compound index when using "order.by"',{code:"INVALID_PARAMETER"})}let n=await S.bind(this)("get-index",r,Object.assign({auth:!!this.__user},{fetchOptions:t})),i={cnt_bool:"boolean_count",cnt_numb:"number_count",totl_numb:"total_number",totl_bool:"total_bool",avrg_numb:"average_number",avrg_bool:"average_bool",cnt_str:"string_count"};return Array.isArray(n?.list)&&(n.list=n.list.map(s=>{let o=s.idx.split("/"),l={table:le(o[1]),index:le(o[2]),number_of_records:s.cnt_rec};for(let u in i)Object.prototype.hasOwnProperty.call(s,u)&&(l[i[u]]=s[u]);return l})),n}async function Ji(e,t){await ot.call(this,"getTags");let r=await S.bind(this)("get-tag",y.Params(e||{},{table:n=>Me(n,"table",{allowEmpty:true}),tag:n=>Nt(n,"tag",{allowEmpty:true}),condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq","!=","ne"]}),Object.assign({auth:!!this.__user},{fetchOptions:t}));return Array.isArray(r?.list)&&(r.list=r.list.map(n=>{let i=n.tag.split("/");return {table:le(i[1]),tag:le(i[0]),number_of_records:n.cnt_rec}})),r}async function Yi(e,t){await ot.call(this,"getUniqueId");let r=await S.bind(this)("get-uniqueid",y.Params(e||{},{unique_id:"string",condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq","!=","ne"]}),Object.assign({auth:!!this.__user},{fetchOptions:t}));if(Array.isArray(r?.list))for(let n in r.list){let i=r.list[n];r.list[n]={unique_id:i.unq,record_id:i.rec};}return r}async function Xi(e,t){await this.__connection;let r=await Gi.bind(this)(e,true),n=r.is_reference_fetch,i=await S.bind(this)("del-records",r.query,{auth:true,fetchOptions:t});return n&&typeof i?.reference_private_key=="string"&&(this.__private_access_key[n]=i.reference_private_key),Array.isArray(i?.list)&&(i.list=await Promise.all(i.list.map(async s=>{if(!s||typeof s!="object")return s;try{return await Se.bind(this)(s,"called from deleteRecords",!0,!1,!0)}catch{return s}}))),i?.message||i}async function Zi(e){if(L.call(this)){let t=typeof e.user_id=="string"?[e.user_id]:e.user_id;Array.isArray(t)&&t.length&&await Ar.bind(this)(e.record_id,t);}return ns.bind(this)({record_id:e.record_id,user_id:e.user_id,execute:"add"})}async function es(e){let t=await ns.bind(this)({record_id:e.record_id,user_id:e.user_id||null,execute:"remove"});if(L.call(this)){let r=typeof e.user_id=="string"?[e.user_id]:e.user_id;await Wn.bind(this)(e.record_id,Array.isArray(r)&&r.length?r:null);}return t}async function ts(e,t){let r={record_id:e.record_id||void 0,user_id:e.user_id||void 0,execute:"list"};if(!r.record_id&&!r.user_id)throw new a("Either record_id or user_id must be provided.",{code:"INVALID_PARAMETER"});if(r.user_id)if(typeof r.user_id=="string")y.UserId(r.user_id),r.user_id=[r.user_id];else if(Array.isArray(r.user_id))for(let s of r.user_id)y.UserId(s);else throw new a("user_id should be type: <string | string[]>",{code:"INVALID_PARAMETER"});let n=s=>(s.rec_usr?(s.record_id=s.rec_usr.split("/")[0],s.user_id=s.rec_usr.split("/")[1]):s.usr_rec&&(s.user_id=s.usr_rec.split("/")[0],s.record_id=s.usr_rec.split("/")[1]),s),i=await S.bind(this)("grant-private-access",r,{auth:true,fetchOptions:t});return i.list=i.list.map(n),i}function rs(e){let t=e.record_id,r=e.reference_id||void 0;if(!t)throw new a("Record ID is required.",{code:"INVALID_PARAMETER"});if(typeof t!="string")throw new a("Record ID should be type: <string | string[]>",{code:"INVALID_PARAMETER"});if(r&&typeof r!="string")throw new a("Reference ID should be type: <string>",{code:"INVALID_PARAMETER"});if(typeof this.__private_access_key[t]=="string")return Promise.resolve(this.__private_access_key[t]);if(Ut[t])return Ut[t];let n=S.bind(this)("request-private-access-key",{record_id:t,reference_id:r},{auth:true}).then(i=>{let s=typeof i=="string"?i:i?.private_key;if(typeof s!="string")throw new a("Invalid private access key response.",{code:"ERROR"});return this.__private_access_key[t]=s,s}).finally(()=>{delete Ut[t];});return Ut[t]=n,n}function ns(e){e.execute;let r=y.Params(e,{record_id:"string",user_id:n=>{if(!n)throw new a("User ID is required.",{code:"INVALID_PARAMETER"});let i=n;if(typeof i=="string"&&(i=[i]),i.length>100)throw new a("Cannot process more than 100 users at once.",{code:"INVALID_REQUEST"});for(let s of i)y.UserId(s,'User ID in "user_id"');return i},execute:["add","remove"]},["execute","record_id","user_id"]);return r.user_id||(r.user_id=null),S.bind(this)("grant-private-access",r,{auth:true})}var ul=100;async function is(e){if(await this.__connection,!Array.isArray(e)||!e.length)throw new a('"items" should be a non-empty array.',{code:"INVALID_PARAMETER"});let t=[],r=[],n=[];for(let s=0;s<e.length;s++){let o=e[s];try{if(!o||typeof o!="object"||Array.isArray(o))throw new a(`"items[${s}]" should be an object with "config".`,{code:"INVALID_PARAMETER"});let l=o.config;if(!l||typeof l!="object"||Array.isArray(l))throw new a(`"items[${s}].config" is required.`,{code:"INVALID_PARAMETER"});Cr.bind(this)(Object.assign({},l));let u=Object.assign({},l);delete u.data;let c=l.data!==void 0?l.data:o.data;if(c!==void 0){let f=c!==null&&typeof c=="object"?j(c):{data:c,files:[]};if(f.files&&f.files.length)throw new a(`"items[${s}].data" carries files. postRecords() does not attach files; use uploadFiles() on the saved record.`,{code:"INVALID_PARAMETER"});u.data=f.data;}n.push({index:s,config:u});}catch(l){r.push({index:s,code:String(l?.code||"INVALID_PARAMETER"),message:String(l?.message||l)});}}let i=0;for(;i<n.length;){let s=n.slice(i,i+ul),o=await Or.bind(this)(s.map(u=>Object.assign({},u.config)));if(!Array.isArray(o)||!o.length){for(let u of s)r.push({index:u.index,code:"ERROR",message:"The server answered nothing for this record."});i+=s.length;continue}let l=Math.min(o.length,s.length);for(let u=0;u<l;u++){let c=o[u];if(c&&c.record_id)t.push(c);else {let f=c?.error||{};r.push({index:s[u].index,code:String(f.code||"ERROR"),message:String(f.message||"The record was not saved.")});}}i+=l;}return r.sort((s,o)=>s.index-o.index),{list:t,failed:r}}var O={},G={},ce={},pe={},ge={},Ot={},Lt={};function ss(e,t,r){e[t]||(e[t]=[]),e[t].push(r);}async function Mt(e,t,r){let n=[];if(e[t]){for(let i of e[t])if(i){let s=r(i);s instanceof Promise&&(s=await s),n.push(s);}delete e[t];}return n}var dl="stun:stun.skapi.com:3468";function os(e){if(e==null||e==="")return [{urls:dl}];let t=r=>typeof r=="string"&&/^(stun|stuns|turn|turns):/.test(r);if(typeof e=="string"){if(!t(e))throw new a('"ice" should be a "stun:", "stuns:", "turn:" or "turns:" url, or a list of { urls, username, credential }.',{code:"INVALID_PARAMETER"});return [{urls:e}]}if(!Array.isArray(e)||!e.length)throw new a('"ice" should be a url string, or a non-empty list of { urls, username, credential }.',{code:"INVALID_PARAMETER"});return e.map((r,n)=>{if(!r||typeof r!="object"||Array.isArray(r))throw new a(`"ice[${n}]" should be an object: { urls, username, credential }.`,{code:"INVALID_PARAMETER"});let i=r.urls,s=Array.isArray(i)?i:[i];if(!s.length||!s.every(t))throw new a(`"ice[${n}].urls" should be a "stun:", "stuns:", "turn:" or "turns:" url, or a list of them.`,{code:"INVALID_PARAMETER"});let o={urls:i};for(let l of ["username","credential"])if(r[l]!==void 0){if(typeof r[l]!="string")throw new a(`"ice[${n}].${l}" should be type: <string>.`,{code:"INVALID_PARAMETER"});o[l]=r[l];}if(s.some(l=>/^turns?:/.test(l))&&(!o.username||!o.credential))throw new a(`"ice[${n}]" is a TURN server: it needs "username" and "credential".`,{code:"INVALID_PARAMETER"});return o})}async function Fr(e,t){if(!this?.session?.accessToken?.jwtToken)throw new a("Access token is required.",{code:"INVALID_PARAMETER"});let r=await this.__socket;async function n(i,s,o){this.log("answerSdpOffer from",s),await O[s].setRemoteDescription(new RTCSessionDescription(i));let l=await O[s].createAnswer();await O[s].setLocalDescription(l),o.send(JSON.stringify({action:"rtc",uid:s,content:{sdpanswer:l},token:this.session.accessToken.jwtToken}));}O?.[t]?e?(await Mt(Lt,t,i=>n.bind(this)(i,t,r)),await n.bind(this)(e,t,r)):await Mt(Lt,t,i=>n.bind(this)(i,t,r)):e&&ss(Lt,t,e);}async function Ft(e,t){if(this.log("receiveIceCandidate",e),O?.[t]&&O[t]?.remoteDescription&&O[t]?.remoteDescription?.type){if(!e)return Mt(Ot,t,r=>O[t].addIceCandidate(r));await Mt(Ot,t,r=>O[t].addIceCandidate(r)),await O[t].addIceCandidate(e);}else ss(Ot,t,e);}async function ue(e){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebRTC is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});y.Params(e,{cid:s=>{if(typeof s!="string")throw new a('"cid" should be type: <string>.',{code:"INVALID_PARAMETER"});if(s&&s.slice(0,4)!=="cid:")throw new a('"cid" should be a valid connection id.',{code:"INVALID_PARAMETER"});return s},close:"boolean"});let t=await this.__socket,{cid:r,close_all:n=false}=e||{};if(!n&&!r)throw new a('"cid" is required.',{code:"INVALID_PARAMETER"});let i=s=>{if(!s)throw new a('"cid" is required.',{code:"INVALID_PARAMETER"});if(delete Lt[s],delete Ot[s],G[s]&&Object.values(G[s]).forEach(o=>{o.readyState!=="closed"&&o.close();}),delete G[s],O?.[s]){O[s].connectionState!=="closed"&&(O[s].close(),t.send(JSON.stringify({action:"rtc",uid:s,content:{hungup:this.user.user_id},token:this.session.accessToken.jwtToken})));let o={type:"connectionstatechange",target:O[s],timestamp:new Date().toISOString(),state:O[s].connectionState,iceState:O[s].iceConnectionState,signalingState:O[s].signalingState};ge[s]&&ge[s](o),this.log("closeRTC",o);}delete ge[s],delete pe[s],delete ce[s],delete O[s];};if(n)for(let s in O)i(s);else i(r);this.log("Cleaning up media stream..."),this.__mediaStream&&(this.__mediaStream.getTracks().forEach(s=>{s.stop();}),this.__mediaStream=null);}async function as(e){if(e instanceof MediaStream)return e;if(!e.video&&!e.audio){let t=new MediaStream,r=document.createElement("canvas");r.width=1,r.height=1;let i=r.captureStream().getVideoTracks()[0];return t.addTrack(i),t}return window.navigator.mediaDevices.getUserMedia(e)}async function ls(e,t){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebRTC is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});if(typeof t!="function")throw new a("Callback is required.",{code:"INVALID_PARAMETER"});if(!this?.session?.accessToken?.jwtToken)throw new a("Access token is required.",{code:"INVALID_PARAMETER"});e=y.Params(e,{cid:o=>{if(typeof o!="string")throw new a('"cid" should be type: <string>.',{code:"INVALID_PARAMETER"});if(o&&o.slice(0,4)!=="cid:")throw new a('"cid" should be a valid connection id.',{code:"INVALID_PARAMETER"});return o},ice:o=>o,media:o=>o,channels:["text-chat","file-transfer","video-chat","voice-chat","gaming",{ordered:"boolean",maxPacketLifeTime:"number",maxRetransmits:"number",protocol:"string"},()=>[{ordered:true,maxPacketLifeTime:10,protocol:"default"}]]},["cid"]);let{cid:r,ice:n}=e;if(!(e?.media instanceof MediaStream)&&(e?.media?.video||e?.media?.audio)&&window.location.hostname!=="localhost"&&window.location.protocol!=="https:")throw new a("Media stream is only supported on either localhost or https.",{code:"INVALID_REQUEST"});let i=this.__socket?await this.__socket:this.__socket;if(!i)throw new a("No realtime connection. Execute connectRealtime() before this method.",{code:"INVALID_REQUEST"});if(i.readyState!==1)throw new a("Realtime connection is not ready.",{code:"INVALID_REQUEST"});let s={iceServers:os(n)};O?.[r]||(O[r]=new RTCPeerConnection(s)),e?.media&&(this.__mediaStream=await as(e.media),this.__mediaStream.getTracks().forEach(o=>{O[r].addTrack(o,this.__mediaStream);})),ge[r]=t,G[r]||(G[r]={});for(let o=0;o<e.channels.length;o++){let l=e.channels[o];if(typeof l=="string")switch(l){case "text-chat":l={ordered:true,maxRetransmits:10,protocol:"text-chat"};break;case "file-transfer":l={ordered:false,maxPacketLifeTime:3e3,protocol:"file-transfer"};break;case "video-chat":l={ordered:true,maxRetransmits:10,protocol:"video-chat"};break;case "voice-chat":l={ordered:true,maxRetransmits:10,protocol:"voice-chat"};break;case "gaming":l={ordered:false,maxPacketLifeTime:100,protocol:"gaming"};break;default:l={ordered:true,maxRetransmits:10,protocol:"default"};break}let u=l.protocol||"default";if(Object.keys(G[r]).includes(u))throw new a(`Data channel with the protocol "${u}" already exists.`,{code:"INVALID_REQUEST"});let c=O[r].createDataChannel(u,l);G[r][u]=c;}for(let o in G[r]){let l=G[r][o];ds.bind(this)(r,l);}return us.bind(this)(r,["onnegotiationneeded"]),await Mr.bind(this)(r),{hangup:()=>ce[r]&&ce[r](false),connection:new Promise(o=>{ce[r]=(l=>{if(this.log("receiver picked up the call",r),!l)return ue.bind(this)({cid:r}),null;O[r].onnegotiationneeded=()=>{this.log("onnegotiationneeded",`sending offer to "${r}".`),Mr.bind(this)(r),ge[r]&&ge[r]({type:"negotiationneeded",target:O[r],timestamp:new Date().toISOString(),signalingState:O[r].signalingState,connectionState:O[r].iceConnectionState,gatheringState:O[r].iceGatheringState});},o({target:O[r],channels:G[r],hangup:()=>ue.bind(this)({cid:r}),media:this.__mediaStream});}).bind(this);})}}function cs(e){return async(t,r)=>{t=t||{},t=j(t).data;let n=e.sender_cid,i=await this.__socket;if(!pe[n])return null;if(typeof r!="function")throw new a("Callback is required.",{code:"INVALID_PARAMETER"});if(!(t?.media instanceof MediaStream)&&(t?.media?.video||t?.media?.audio)&&window.location.hostname!=="localhost"&&window.location.protocol!=="https:")throw new a("Media stream is only supported on either localhost or https.",{code:"INVALID_REQUEST"});let s=os(t.ice);return O?.[n]||(O[n]=new RTCPeerConnection({iceServers:s})),t?.media&&(this.__mediaStream=await as(t.media),this.__mediaStream.getTracks().forEach(o=>{O[n].addTrack(o,this.__mediaStream);})),delete pe[n],ge[n]=r,G[n]||(G[n]={}),O[n].ondatachannel=o=>{this.log("ondatachannel",`received data channel "${o.channel.label}".`);let l=o.channel;G[n][l.label]=l,ds.bind(this)(n,l);},us.bind(this)(n,["onnegotiationneeded"]),await Fr.bind(this)(null,n),await Ft.bind(this)(null,n),i.send(JSON.stringify({action:"rtc",uid:n,content:{pickup:this.user.user_id},token:this.session.accessToken.jwtToken})),{target:O[n],channels:G[n],hangup:()=>ue.bind(this)({cid:n}),media:this.__mediaStream}}}async function Mr(e){if(!this?.session?.accessToken?.jwtToken)throw new a("Access token is required.",{code:"INVALID_PARAMETER"});this.log("sendOffer",e);let t=await this.__socket,r=await O[e].createOffer();await O[e].setLocalDescription(r);let n=O[e].localDescription;this.log("rtcSdpOffer to",n),t.send(JSON.stringify({action:"rtc",uid:e,content:{sdpoffer:n},token:this.session.accessToken.jwtToken}));}async function fl(e,t){if(!this?.session?.accessToken?.jwtToken)throw new a("Access token is required.",{code:"INVALID_PARAMETER"});this.log("sendIceCandidate to",t);let r=await this.__socket;if(!e.candidate){this.log("candidate-end","all ice candidates have been sent");return}let n=ge[t]||(()=>{}),i=e.candidate;this.log("ice gathering state set to",O[t].iceGatheringState),n({type:"icecandidate",target:O[t],timestamp:new Date().toISOString(),candidate:e.candidate.candidate,sdpMid:e.candidate.sdpMid,sdpMLineIndex:e.candidate.sdpMLineIndex,usernameFragment:e.candidate.usernameFragment,protocol:e.candidate.protocol,gatheringState:O[t].iceGatheringState,connectionState:O[t].iceConnectionState}),r.send(JSON.stringify({action:"rtc",uid:t,content:{candidate:i},token:this.session.accessToken.jwtToken}));}function us(e,t){let r=new Set(t),n=ge[e]||(o=>{}),i=O[e],s={ontrack:o=>{n({type:"track",target:i,timeStamp:o.timeStamp,streams:o.streams,track:o.track});},onicecandidate:o=>{fl.bind(this)(o,e),o.candidate?n({type:"icecandidate",target:i,timestamp:new Date().toISOString(),candidate:o.candidate.candidate,sdpMid:o.candidate.sdpMid,sdpMLineIndex:o.candidate.sdpMLineIndex,usernameFragment:o.candidate.usernameFragment,protocol:o.candidate.protocol,gatheringState:i.iceGatheringState,connectionState:i.iceConnectionState}):n({type:"icecandidateend",target:i,timestamp:new Date().toISOString()});},onicecandidateerror:o=>{n({type:"icecandidateerror",target:i,timestamp:new Date().toISOString(),errorCode:o.errorCode,errorText:o.errorText,url:o.url,hostCandidate:o.hostCandidate,gatheringState:i.iceGatheringState,connectionState:i.iceConnectionState});},oniceconnectionstatechange:()=>{n({type:"iceconnectionstatechange",target:i,timestamp:new Date().toISOString(),state:i.iceConnectionState,gatheringState:i.iceGatheringState,signalingState:i.signalingState});},onicegatheringstatechange:()=>{n({type:"icegatheringstatechange",target:i,timestamp:new Date().toISOString(),state:i.iceGatheringState,connectionState:i.iceConnectionState,signalingState:i.signalingState});},onsignalingstatechange:()=>{n({type:"signalingstatechange",target:i,timestamp:new Date().toISOString(),state:i.signalingState,connectionState:i.iceConnectionState,gatheringState:i.iceGatheringState});},onnegotiationneeded:()=>{Mr.bind(this)(e),n({type:"negotiationneeded",target:i,timestamp:new Date().toISOString(),signalingState:i.signalingState,connectionState:i.iceConnectionState,gatheringState:i.iceGatheringState});},onconnectionstatechange:()=>{n({type:"connectionstatechange",target:i,timestamp:new Date().toISOString(),state:i.connectionState,iceState:i.iceConnectionState,signalingState:i.signalingState});let o=i.connectionState;(o==="disconnected"||o==="failed"||o==="closed")&&ue.bind(this)({cid:e});}};for(let[o,l]of Object.entries(s))r.has(o)||(i[o]=l);}function ds(e,t,r){let n=new Set(r),i=ge[e]||(o=>{}),s={onmessage:o=>{let l={type:o.type,target:t,timeStamp:o.timeStamp,data:o.data,lastEventId:o.lastEventId,origin:o.origin,readyState:t.readyState,bufferedAmount:t.bufferedAmount};this.log(`${t.label}: message`,o.data),i(l);},onerror:o=>{let l={type:o.type,target:t,timeStamp:o.timeStamp,error:o.error.message,errorCode:o.error.errorDetail,readyState:t.readyState,label:t.label};this.log(`${t.label}: error`,o.error.message),i(l);},onclose:o=>{let l={type:o.type,target:t,timeStamp:o.timeStamp,readyState:t.readyState,label:t.label,id:t.id};this.log(`${t.label}: closed`,null),i(l),G[e]&&(delete G[e][t.label],Object.keys(G[e]).length===0&&ue.bind(this)({cid:e}));},onbufferedamountlow:o=>{let l={target:t,bufferedAmount:t.bufferedAmount,bufferedAmountLowThreshold:t.bufferedAmountLowThreshold,type:o.type,timeStamp:o.timeStamp};this.log(`${t.label}: bufferedamountlow`,t.bufferedAmount),i(l);},onopen:o=>{this.log("dataChannel",`data channel: "${t.label}" is open and ready to send messages.`);let l={type:o.type,target:t,timeStamp:o.timeStamp,readyState:t.readyState,label:t.label,id:t.id,ordered:t.ordered,maxRetransmits:t.maxRetransmits,protocol:t.protocol};i(l);}};for(let[o,l]of Object.entries(s))n.has(o)||(t[o]=l);}var we;function fs(){return we}var Re=null,at=true,qe=0;async function gl(){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebSocket is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});if(await this.getProfile(),!this.session)throw new a("No access.",{code:"INVALID_REQUEST"});let e=await this.record_endpoint;return new WebSocket(e.websocket_private+"?token="+this.session.accessToken.jwtToken)}var qr=null;async function qt(){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebSocket is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});at=true;let e=this.__socket?await this.__socket:this.__socket;ue.bind(this)({close_all:true}),we&&je.bind(this)({group:null}),qe=0,Re&&(Re.terminate(),Re=null);try{e&&e.close();}catch{}return window.removeEventListener("visibilitychange",qr),this.__socket=null,null}async function Ve(e,t=50,r){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebSocket is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});if(typeof e!="function")throw new a("Callback must be a function.",{code:"INVALID_REQUEST"});if(r==="reconnect"){if(this.__socket instanceof Promise){let i=await this.__socket;if(i.readyState!==WebSocket.CLOSED&&i.readyState!==WebSocket.CLOSING)return this.__socket}}else if(at&&(qr=()=>{!document.hidden&&!at&&Ve.bind(this)(e,0,"reconnect");},this.__socket instanceof Promise))return this.__socket;Re&&(Re.terminate(),Re=null);let n={value:null};return this.__socket=new Promise(async(i,s)=>{let o=l=>{this.__socket===n.value&&(this.__socket=null),s(l);};try{await Oe.bind(this)();}catch(l){o(l);return}setTimeout(async()=>{try{let l=await gl.bind(this)();l.onopen=()=>{at=!1,qe=0,r!=="reconnect"&&window.addEventListener("visibilitychange",qr),this.log("realtime onopen","Connected to WebSocket server."),e({type:"success",message:"Connected to WebSocket server."}),we&&l.send(JSON.stringify({action:"joinRoom",rid:we,token:this.session.accessToken.jwtToken}));let u=`
207
207
  let interval = 15000; // Set interval time 15 seconds
208
208
 
209
209
  function runInterval() {
@@ -212,7 +212,7 @@ var Po=Object.defineProperty;var So=Object.getOwnPropertyDescriptor;var ke=(e=>t
212
212
  }
213
213
 
214
214
  runInterval(); // Start interval
215
- `,c=new Blob([u],{type:"application/javascript"});Re=new Worker(URL.createObjectURL(c)),Re.onmessage=f=>{l.readyState===1&&l.send(JSON.stringify({action:"keepAlive"}));},i(l);},l.onmessage=async u=>{let c="";try{c=JSON.parse(decodeURI(u.data)),this.log("socket onmessage",c);}catch{return}let f;switch(!0){case !!c?.["#message"]:f="message";break;case !!c?.["#private"]:f="private";break;case !!c?.["#notice"]:f="notice";break;case !!c?.["#rtc"]:f="rtc";break;case !!c?.["#error"]:f="error";break}if(!f)return;let g={type:f,message:c?.["#rtc"]||c?.["#message"]||c?.["#private"]||c?.["#notice"]||c?.["#error"]||null,sender:c?.["#user_id"]||null,sender_cid:c?.["#scid"]?"cid:"+c["#scid"]:null,sender_rid:c?.["#srid"]||null,code:c?.["#code"]||null};if(f==="notice")e(g);else if(f==="rtc"){if(g.sender!==this.user.user_id){let d=g.message;if(d.hungup){ce[g.sender_cid]&&(ce[g.sender_cid](!1),delete ce[g.sender_cid]),pe[g.sender_cid]&&delete pe[g.sender_cid],O?.[g.sender_cid]&&ue.bind(this)({cid:g.sender_cid}),g.type="rtc:closed",e(g);return}if(d.candidate&&Fr.bind(this)(d.candidate,g.sender_cid),d.sdpoffer&&(Mr.bind(this)(d.sdpoffer,g.sender_cid),pe[g.sender_cid]||(pe[g.sender_cid]=g.sender_cid,delete g.message,g.connectRTC=cs.bind(this)(g),g.type="rtc:incoming",g.hangup=(()=>{O[g.sender_cid]?ue.bind(this)({cid:g.sender_cid}):pe[g.sender_cid]&&(delete pe[g.sender_cid],l.send(JSON.stringify({action:"rtc",uid:g.sender_cid,content:{hungup:this.user.user_id},token:this.session.accessToken.jwtToken})));}).bind(this),e(g))),d.pickup&&ce[g.sender_cid]&&(ce[g.sender_cid](!0),delete ce[g.sender_cid]),d.sdpanswer&&O[g.sender_cid])if(O[g.sender_cid].signalingState==="have-local-offer")await O[g.sender_cid].setRemoteDescription(new RTCSessionDescription(d.sdpanswer));else throw new a("Invalid signaling state.",{code:"INVALID_REQUEST"})}}else e(g);},l.onclose=()=>{at?(this.log("realtime onclose","WebSocket connection closed."),e({type:"close",message:"WebSocket connection closed."})):(this.log("realtime onclose","WebSocket unexpected close."),e({type:"error",message:"Skapi: WebSocket unexpected close."}),qe++,qe<3?(this.log("realtime onclose","Reconnecting to WebSocket server..."+qe),e({type:"reconnect",message:"Reconnecting to WebSocket server..."+qe}),Ve.bind(this)(e,3e3,"reconnect")):(this.log("realtime onclose","Max reconnection attempts reached."),e({type:"error",message:"Skapi: Max reconnection attempts reached."})));},l.onerror=()=>{this.log("realtime onerror","WebSocket connection error."),e({type:"error",message:"Skapi: WebSocket connection error."});};}catch(l){o(l);}},t);}),n.value=this.__socket,this.__socket}async function gs(e,t,r){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebSocket is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});let n=this.__socket?await this.__socket:this.__socket;if(!n)throw new a("No realtime connection. Execute connectRealtime() before this method.",{code:"INVALID_REQUEST"});if(!t)throw new a("No recipient.",{code:"INVALID_REQUEST"});await Oe.bind(this)(),e=j(e).data;let i="";if(r&&(r=y.Params(r,{config:{always:"boolean"},title:"string",body:"string"},["title","body"]),i=JSON.stringify({title:r.title,body:r.body}),new Blob([i]).size>3072))throw new a("Notification size exceeds 3kb.",{code:"INVALID_PARAMETER"});if(n.readyState===1){try{y.UserId(t),n.send(JSON.stringify({action:"sendMessage",uid:t,content:e,notification:i,notificationConfig:r?.config||{},token:`IdT:${this.service}:${this.owner}:`+(this.bearerToken||this.session?.idToken?.jwtToken||"null")}));}catch(s){if(this.log("postRealtime:err",{err:s}),we!==t)throw new a(`User has not joined to the recipient group. Run joinRealtime({ group: "${t}" })`,{code:"INVALID_REQUEST"});n.send(JSON.stringify({action:"broadcast",rid:t,content:e,notification:i,notificationConfig:r?.config||{},token:`IdT:${this.service}:${this.owner}:`+(this.bearerToken||this.session?.idToken?.jwtToken||"null")}));}return {type:"success",message:"Message sent."}}throw new a("Realtime connection is not open. Try reconnecting with connectRealtime().",{code:"INVALID_REQUEST"})}async function je(e){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebSocket is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});let t=this.__socket?await this.__socket:this.__socket;if(!t)throw new a("No realtime connection. Execute connectRealtime() before this method.",{code:"INVALID_REQUEST"});await Oe.bind(this)(),e=j(e,{nullIfEmpty:true}).data;let{group:r=null}=e;if(!r&&!we)return {type:"success",message:"Left realtime message group."};if(r!==null&&typeof r!="string")throw new a('"group" must be a string | null.',{code:"INVALID_PARAMETER"});return t.readyState===1&&t.send(JSON.stringify({action:"joinRoom",rid:r,token:this.session.accessToken.jwtToken})),we=r,{type:"success",message:r?`Joined realtime message group: "${r}".`:"Left realtime message group."}}async function ps(e,t){e=y.Params(e,{user_id:n=>y.UserId(n,'User ID in "user_id"'),group:["string",()=>{if(!we)throw new a('No group has been joined. Otherwise "group" is required.',{code:"INVALID_REQUEST"});return we}]});let r=await S.bind(this)("get-ws-group",e,{fetchOptions:t,auth:true,method:"post"});return r.list=r.list.map(n=>({user_id:n.uid.split("#")[1],cid:"cid:"+n.cid})),r}async function hs(e,t){if(await this.__connection,e||(e={searchFor:"group",value:" ",condition:">"}),e=y.Params(e,{searchFor:["group","number_of_users",()=>"group"],value:["string","number",()=>e?.searchFor&&e?.searchFor==="number_of_users"?0:" "],condition:[">",">=","=","<","<=","!=","gt","gte","eq","lt","lte","ne"],range:["string","number"]}),e.condition||(e.value===" "||!e.value?e.condition=">":e.condition="="),e.range&&e.condition&&delete e.condition,e.searchFor==="number_of_users"&&typeof e.value!="number")throw new a('"value" must be a number.',{code:"INVALID_PARAMETER"});if(e.searchFor==="group"&&typeof e.value!="string")throw new a('"value" must be a string.',{code:"INVALID_PARAMETER"});if(e.hasOwnProperty("range")&&typeof e.range!=typeof e.value)throw new a(`"range" must be a ${typeof e.value}.`,{code:"INVALID_PARAMETER"});let r=await S.bind(this)("get-ws-group",e,{fetchOptions:t,auth:true,method:"post"});return r.list=r.list.map(n=>({group:n.rid.split("#")[1],number_of_users:n.cnt})),r}var pl=typeof FormData<"u",bs=typeof HTMLFormElement<"u",_s=typeof SubmitEvent<"u",he={},lt={},te={};function ct(e){return Object.freeze({id:e,status:"stopped"})}function jr(e){return !!e&&typeof e=="object"&&e.status==="stopped"}var ws=3;function Es(e,t,r){let n=false,i=Array.isArray(e?.chunks)?e.chunks.slice():[];i.sort((s,o)=>(s?.seq||0)-(o?.seq||0));for(let s of i)if(!(!s||typeof s.seq!="number"||s.seq<=t.seq)&&(t.seq=s.seq,n=true,r&&typeof s.txt=="string"&&s.txt!==""))try{r(s.txt,s.seq,"poll");}catch(o){console.error(o);}return typeof e?.last_seq=="number"&&e.last_seq>t.seq&&(t.seq=e.last_seq,n=true),n}var hl=2e3,As=5e3,ml=2e3,yl=5,bl=1500,qt=null;function Rs(e,t,r){let n=new Map,i=false,s=false,o=0,l={socket:0,poll:0},u=(d,p,h)=>{if(e.seq=d,!(!t||typeof p!="string"||p===""))try{t(p,d,h);}catch(m){console.error(m);}},c=()=>{for(let d of Array.from(n.keys()))d<=e.seq&&n.delete(d);for(;;){let d=e.seq+1;if(!n.has(d))break;let p=n.get(d);n.delete(d),u(d,p.txt,p.via);}};return {cursor:e,open:()=>{i||s||(i=true,c());},fromPoll:d=>{if(s)return false;let p=e.seq,h=e.seq,m=Array.isArray(d?.chunks)?d.chunks:[];for(let b of m){if(!b||typeof b.seq!="number"||b.seq<=e.seq)continue;let A=!n.has(b.seq);A&&(l.poll++,r&&l.poll===1&&r("poll",b.seq)),n.set(b.seq,{txt:typeof b.txt=="string"?b.txt:"",via:A?"poll":n.get(b.seq).via}),b.seq>h&&(h=b.seq);}typeof d?.last_seq=="number"&&d.last_seq>h&&(h=d.last_seq);let _=Array.from(n.keys()).sort((b,A)=>b-A);for(let b of _){if(b<=e.seq){n.delete(b);continue}if(b>h)break;let A=n.get(b);n.delete(b),u(b,A.txt,A.via);}return h>e.seq&&(e.seq=h),c(),e.seq>p},fromSocket:(d,p)=>{s||typeof d!="number"||!Number.isFinite(d)||(o=Date.now(),!(d<=e.seq)&&(!n.has(d)&&n.size>=ml||(n.has(d)||(l.socket++,r&&l.socket===1&&r("socket",d)),n.set(d,{txt:typeof p=="string"?p:"",via:n.has(d)?n.get(d).via:"socket"}),i&&c())));},warm:()=>o!==0&&Date.now()-o<hl,stats:()=>({socket:l.socket,poll:l.poll}),close:()=>{s=true,n.clear();}}}function Ts(e){if(!this||!this.__network_logs)return {onTransport:void 0,done:()=>{}};let t=Date.now(),r=false;return {onTransport:(n,i)=>{console.log(`%cSKAPI: stream chunk arrived over ${n==="socket"?"WEBSOCKET":"POLL"}`,`color: ${n==="socket"?"green":"orange"};`,{id:e,first_seq:i,after_ms:Date.now()-t});},done:n=>{if(r||!n)return;r=true;let i=n.stats();console.log("%cSKAPI: stream transport","color: blue;",{id:e,over_websocket:i.socket,over_poll:i.poll,took_ms:Date.now()-t});}}}function Is(e,t){let r={stop:()=>{}};if(typeof window>"u"||window._runningInNodeJS||qt)return r;let n={stopped:false,socket:null,opened:null,joined:false,attempts:0,unavailable:false};qt=n;let i=c=>{if(n.stopped)return;let f=c?.data;if(typeof f!="string")return;let g=null;try{g=JSON.parse(f);}catch{try{g=JSON.parse(decodeURI(f));}catch{return}}let d=g?.["#message"];if(d==null)return;if(typeof d=="string")try{d=JSON.parse(d);}catch{return}if(typeof d!="object")return;let p=g?.["#srid"];if(typeof p=="string"&&p!==e)return;let h=d.seq;typeof h=="string"&&h!==""&&(h=Number(h)),t.fromSocket(h,d.txt);},s=()=>{if(n.socket){try{n.socket.removeEventListener("message",i);}catch{}try{n.socket.removeEventListener("close",l);}catch{}n.socket=null;}},o=async()=>{let c=n.opened,f=n.joined;if(n.opened=null,n.joined=false,s(),!(!f&&!c))try{let g=this.__socket?await this.__socket:null;if(c&&g===c){await Ft.bind(this)();return}f&&g&&fs()===room&&await je.bind(this)({group:null});}catch{}},l=()=>{n.stopped||(s(),!n.unavailable&&(n.attempts>=yl||(n.attempts+=1,setTimeout(()=>{n.stopped||u();},bl))));},u=async()=>{try{let c=this.__socket?await this.__socket:null;if(n.stopped){o();return}if(!c){if(!this.session){n.unavailable=!0,o();return}if(await Ve.bind(this)(()=>{},0),c=this.__socket?await this.__socket:null,n.stopped){o();return}c&&!n.opened&&(n.opened=c);}if(!c||c.readyState!==1)return;if(c.addEventListener("message",i),c.addEventListener("close",l),n.socket=c,!n.joined&&(await je.bind(this)({group:e}),n.joined=!0,n.stopped)){o();return}}catch{}};return u(),{stop:()=>{n.stopped||(n.stopped=true,qt===n&&(qt=null),o());}}}function Ps(e){return e?.status==="running"||e?.status==="pending"}function Ss(e){return !!e&&typeof e=="object"&&!Array.isArray(e)&&typeof e.status=="string"&&typeof e.id=="string"&&"in_queue"in e}function ks(e,t,r,n){if(!e||typeof e!="string")throw new a('"requestId" should be type: <string>.',{code:"INVALID_PARAMETER"});if(e.includes("#"))return e;if(!t||typeof t!="string"||!r||typeof r!="string")throw new a('"url" and "method" are required to address a request by its short id.',{code:"INVALID_PARAMETER"});return y.Url(t),`[${r.toUpperCase()}]${t.toLowerCase()}#${n}:${e}`}function vs({id:e,auth:t,service:r,owner:n,latency:i=1e3,queue:s,seedExecuted:o,onResponse:l,onError:u,onStream:c,realtimeGroup:f}){if(typeof i!="number")throw new a('"latency" should be a number.',{code:"INVALID_PARAMETER"});if(i<0)throw new a('"latency" should be a non-negative number.',{code:"INVALID_PARAMETER"});s&&!he?.[s]&&(he[s]=new ys({breakWhenError:false,batchSize:1}));let g={stop:null,aborted:false,queue:s};te[e]=g;let d=null,p=()=>{te[e]===g&&delete te[e];},h=()=>new Promise((_,b)=>{let A=false;if(g.aborted){p(),_(ct(e));return}let w={seq:0},I=Ts.call(this,e),E=c&&f?Rs(w,c,I.onTransport):null,N=E?Is.call(this,f,E):null,C=()=>{I.done(E),N&&N.stop(),E&&E.close();};d=C;let D=0,v=false,U=0,x=typeof o=="number"&&o>0?o:void 0,M=async()=>{if(!(A||v)&&!(E&&E.warm()&&Date.now()-D<As)){v=true;try{for(;;){let ie={id:e,service:r,owner:n};c&&(ie.since=w.seq),D=Date.now();let F=await S.bind(this)("csr-poll",ie,{auth:t});if(A)return;let J=E?E.fromPoll(F):c?Es(F,w,c):!1;E&&E.open();let ft=Ps(F);if(typeof F?.executed=="number"&&F.executed>0&&(x=F.executed),F?.more&&J){U=0;continue}if(ft){U=0;return}if(U=F?.more?U+1:0,F?.more&&U<ws)return;A=!0,l&&l(F,x!==void 0?{executed:x}:void 0),clearInterval(de),C(),p(),_(F);return}}catch(ie){if(A)return;A=true,u&&u(ie),clearInterval(de),C(),p(),b(ie);}finally{v=false;}}},de=setInterval(M,i);E&&M(),g.stop=()=>{A||(A=true,clearInterval(de),C(),p(),_(ct(e)));};}),m=()=>{let _=te[e];_&&(_.stop?_.stop():(_.aborted=true,delete te[e]));};if(s){let _=new Promise((b,A)=>{let w=false,I=he[s].add([async()=>{try{let E=await h();return w||(w=!0,b(E)),E}catch(E){throw w||(w=true,A(E)),E}}])[0];lt[e]=I,g.stop=()=>{if(!w){g.aborted=true,d&&d();try{he[s]&&he[s].remove(lt[e]);}catch{}delete lt[e],p(),w=true,b(ct(e));}};});return Object.assign(_,{stop:m})}else return Object.assign(h(),{stop:m})}function jt(e){let t=0,r=[];if(e?.id){if(e.url&&e.method){let n=e.service||this.service;r.push(`[${e.method.toUpperCase()}]${e.url.toLowerCase()}#${n}:${e.id}`);}r.push(e.id);}else if(e?.queue)for(let n in te)te[n]?.queue===e.queue&&r.push(n);else for(let n in te)r.push(n);for(let n of r){let i=te[n];i&&(i.stop?i.stop():(i.aborted=true,delete te[n]),t+=1);}return t}function $r(e,t){if(!e.queue)throw new a('"queue" is required.',{code:"INVALID_PARAMETER"});let r=()=>S.bind(this)("csr-poll",{service:e.service||this.service,owner:e.owner||this.owner,queue:e.queue+":"},{auth:true});return this.__projectIdInput?this.__projectIdInput.then(r):r()}function _l(e){if(typeof Buffer<"u"&&typeof Buffer.from=="function")return Buffer.from(e).toString("base64");if(typeof btoa=="function"){let t="";for(let n=0;n<e.length;n+=32768)t+=String.fromCharCode.apply(null,Array.from(e.subarray(n,n+32768)));return btoa(t)}throw new a("No base64 encoder available in this environment.",{code:"NOT_SUPPORTED"})}var ms=2*1024*1024-64*1024;function Vt(e){return typeof File<"u"&&e instanceof File||typeof Blob<"u"&&e instanceof Blob}function Vr(e){if(Array.isArray(e)){let t=[];for(let r of e)Vt(r)||t.push(Vr(r));return t}if(e&&typeof e=="object"&&!Vt(e)){let t=Object.getPrototypeOf(e);if(t!==Object.prototype&&t!==null)return e;let r={};for(let n in e)Vt(e[n])||(r[n]=Vr(e[n]));return r}return e}function wl(e){if(e==null)return null;let t=j(e)?.data;return !t||typeof t!="object"||Array.isArray(t)?null:Vr(t)}function Ns(e,t,r){if(r!==void 0){if(Array.isArray(r)){for(let n of r)Ns(e,t,n);return}if(Vt(r)){e.append(t,r);return}if(r===null){e.append(t,"");return}if(typeof r=="object"){e.append(t,JSON.stringify(r));return}e.append(t,String(r));}}async function El(e){if(e==null)throw new a('"multipart": true needs a form body in the first argument.',{code:"INVALID_PARAMETER"});if(typeof FormData>"u"||typeof Response>"u")throw new a('"multipart": true is not available in this environment.',{code:"NOT_SUPPORTED"});let t;if(_s&&e instanceof SubmitEvent)t=new FormData(e.target);else if(bs&&e instanceof HTMLFormElement)t=new FormData(e);else if(e instanceof FormData)t=e;else if(typeof e=="object"&&!Array.isArray(e)){t=new FormData;for(let s in e)Ns(t,s,e[s]);}else throw new a('"form" should be a submit event, a form element, FormData, or an object.',{code:"INVALID_PARAMETER"});let r=new Response(t),n=r.headers.get("content-type"),i=_l(new Uint8Array(await r.arrayBuffer()));if(i.length>ms)throw new a(`Multipart body is too large: ${i.length} bytes once base64 encoded, and the limit is ${ms}. Upload the file first and send its url instead.`,{code:"INVALID_PARAMETER"});return {body_b64:i,body_content_type:n}}function Al(e){if(e!=null){if(typeof e=="boolean")return e;if(typeof e=="object"&&!Array.isArray(e))return {user:!!e.user,service:!!e.service};throw new a('"skapiHeaders" should be type: <boolean> or { user?: boolean; service?: boolean }.',{code:"INVALID_PARAMETER"})}}function Rl(e){if(!(!e||typeof e!="object")){for(let t in e)if(typeof t=="string"&&t.toLowerCase().indexOf("x-skapi-")===0)throw new a(`"headers" cannot set "${t}": the "x-skapi-" prefix is reserved. Use "skapiHeaders" to tell the destination who the caller is.`,{code:"INVALID_PARAMETER"})}}async function Ds(e,t){let r=false,n=!!(e?.secretName||e?.clientSecretName),i=t?.signal;if(i?.aborted)throw new a('"signal" was already aborted.',{code:"INVALID_REQUEST"});if(typeof e.poll=="number"&&e.poll<0)throw new a('"poll" should be a non-negative number.',{code:"INVALID_PARAMETER"});let s=e?.onResponse,o=e?.onError,l=e?.onStream,u=typeof e.poll=="number"?e.poll:e.poll?1e3:0;delete e.poll,(u||e.stream)&&!e.queue&&(e.queue=(this.__user?.user_id||"anonymous")+"-"+Te());let c=(d,p=new WeakSet)=>{if(!(r||!d||typeof d!="object"||p.has(d))){p.add(d);for(let h in d){let m=d[h];if(typeof m=="string"){if(m.includes("$CLIENT_SECRET")){r=true;return}}else m&&typeof m=="object"&&c(m,p);}}};if(e=y.Params(e,{url:d=>{if(!d||typeof d!="string")throw new a('"url" should be type: <string>.',{code:"INVALID_PARAMETER"});return y.Url(d),d.includes("$CLIENT_SECRET")&&(r=true),d},secretName:"string",clientSecretName:"string",method:d=>{if(d&&typeof d!="string")throw new a('"method" should be one of "GET", "POST", "PUT", "PATCH", "DELETE" or "HEAD".',{code:"INVALID_PARAMETER"});let p=d.toLowerCase();if(p!=="get"&&p!=="post"&&p!=="delete"&&p!=="put"&&p!=="patch"&&p!=="head")throw new a('"method" should be one of "GET", "POST", "PUT", "PATCH", "DELETE" or "HEAD".',{code:"INVALID_PARAMETER"});return p},stream:d=>{if(d!=null&&typeof d!="boolean")throw new a('"stream" should be type: <boolean>.',{code:"INVALID_PARAMETER"});return !!d},realtime:d=>{if(d!=null&&typeof d!="boolean")throw new a('"realtime" should be type: <boolean>.',{code:"INVALID_PARAMETER"});return !!d},headers:d=>{if(d&&typeof d!="object")throw new a('"headers" should be type: <object>.',{code:"INVALID_PARAMETER"});return Rl(d),c(d),d},skapiHeaders:d=>Al(d),data:d=>{if(d&&typeof d!="object")throw new a('"data" should be type: <object>.',{code:"INVALID_PARAMETER"});return c(d),d},params:d=>{if(d&&typeof d!="object")throw new a('"params" should be type: <object>.',{code:"INVALID_PARAMETER"});return c(d),d},body_b64:"string",body_content_type:"string",expires:"number",queue:"string"},t?.requireSecretName?["clientSecretName","method","url"]:["method","url"]),e.realtime&&!e.stream)throw new a('"realtime" requires "stream": true.',{code:"INVALID_PARAMETER"});if(e.body_b64&&e.data)throw new a('"data" cannot be sent with "multipart": true.',{code:"INVALID_PARAMETER"});n&&!r&&(delete e.secretName,delete e.clientSecretName),await this.__connection;let f=!!this.__user,g=()=>S.bind(this)("csr",e,{auth:f,tokenHeaders:{accessToken:!!f}}).then(d=>{if(d.status==="running"||d.status==="pending"){let p=`[${e.method.toUpperCase()}]${e.url.toLowerCase()}`,h=e.service||this.service,m=e.owner||this.owner,_=`${p}#${h}:${d.id}`;if(i){let b=()=>{jt.call(this,{id:_});};i.aborted?b():i.addEventListener("abort",b,{once:true});}Object.assign(d,{poll:b=>vs.call(this,{id:_,auth:f,service:h,owner:m,latency:b?.latency||1e3,queue:e?.queue,onResponse:s,onError:o,onStream:b?.onStream||l,realtimeGroup:d?.realtime_group})});}return s?s(d):d}).catch(d=>{if(o)return o(d);throw d});if(e?.queue){let d="base:"+e.queue;return he?.[d]||(he[d]=new ys({breakWhenError:false,batchSize:1})),new Promise((p,h)=>{he[d].add([async()=>{try{let m=await g();if(u>0){let _=m.poll({latency:u});return i&&(i.aborted?_.stop():i.addEventListener("abort",()=>_.stop(),{once:!0})),p(_),_}return p(m),m}catch(m){throw h(m),m}}]);})}else return g()}async function Us(e,t){if(!t||typeof t!="object")throw new a('"options" is required in the second argument.',{code:"INVALID_PARAMETER"});if(t.apiKeyHeader!==void 0||t.apiKeyScheme!==void 0)throw new a('"apiKeyHeader" and "apiKeyScheme" are no longer supported. Store the key as a client secret, name it with "secretName", and put "$CLIENT_SECRET" where the key goes.',{code:"INVALID_PARAMETER"});if(t.multipart!==void 0&&t.multipart!==null&&typeof t.multipart!="boolean")throw new a('"multipart" should be type: <boolean>.',{code:"INVALID_PARAMETER"});let r=t.responseType;if(r!=null){if(r==="response")throw new a(`"responseType": "response" is not available here. The request is relayed from the server and what comes back is the stored answer, not a live Response; the destination's status code is the "status_code" of the row forwardRequestHistory lists.`,{code:"INVALID_PARAMETER"});if(r!=="json"&&r!=="text")throw new a('"responseType" should be either "json" or "text".',{code:"INVALID_PARAMETER"})}let n=t.method||"POST",i=typeof n=="string"?n.toLowerCase():"",s=i==="get"||i==="delete"||i==="head"?"params":"data",o={url:t.url,method:n};if(t.secretName!==void 0&&(o.secretName=t.secretName),t.headers!==void 0&&(o.headers=t.headers),t.data!==void 0&&(o.data=t.data),t.params!==void 0&&(o.params=t.params),t.skapiHeaders!==void 0&&(o.skapiHeaders=t.skapiHeaders),t.service!==void 0&&(o.service=t.service),t.owner!==void 0&&(o.owner=t.owner),t.queue!==void 0&&(o.queue=t.queue),t.expires!==void 0&&(o.expires=t.expires),t.stream!==void 0&&(o.stream=t.stream),t.realtime!==void 0&&(o.realtime=t.realtime),t.poll!==void 0&&(o.poll=t.poll),t.onStream!==void 0&&(o.onStream=t.onStream),t.onResponse!==void 0&&(o.onResponse=t.onResponse),t.onError!==void 0&&(o.onError=t.onError),t.multipart){if(t.data!==void 0&&t.data!==null)throw new a('"data" cannot be sent with "multipart": true. The form itself is the body.',{code:"INVALID_PARAMETER"});let u=await El(e);o.body_b64=u.body_b64,o.body_content_type=u.body_content_type;}else {let u=wl(e);u&&Object.keys(u).length&&(o[s]=Object.assign({},u,o[s]||{}));}let l=Ds.call(this,o,{signal:t.signal});return r?l.then(u=>{if(Ss(u)||jr(u))return u;if(r==="text")return typeof u=="string"?u:JSON.stringify(u);if(typeof u=="string")try{return JSON.parse(u)}catch{return u}return u}):l}async function xs(e){return Ds.call(this,e,{requireSecretName:true})}async function Br(e,t){await this.__connection;let r=e.service||this.service,n=e.owner||this.owner;e=y.Params(e,{url:"string",method:["GET","POST","PUT","PATCH","DELETE","HEAD"],queue:"string",status:["pending","running","resolved","failed"],compact:"boolean",queue_exact:"boolean",queue_exclude:"string"},["url","method"]);let i=!!this.__user,s=`[${e.method.toUpperCase()}]${e.url.toLowerCase()}#${r}:`,o={id:s,queue:e?.queue,status:e?.status,service:r,owner:n};e?.compact&&(o.compact=true),e?.queue_exact&&(o.queue_exact=true),e?.queue_exclude&&(o.queue_exclude=e.queue_exclude),Object.keys(o).forEach(u=>{o[u]||delete o[u];}),o.queue&&(o.id_prefix=o.id,delete o.id);let l=await S.bind(this)("csr-poll",o,{auth:i,fetchOptions:t});return l.list=l.list.map(u=>{let c={id:u.id,status_code:u.rslv?.status_code||null,response_body:u.rslv?.body||u.rslv?.truncated||null,error:u?.err,created:u?.stmp,updated:u?.utmp,executed:typeof u?.att=="number"?u.att*1e3:void 0,responded:typeof u?.rtmp=="number"?u.rtmp:void 0,request_body:u?.reqbdy,expires:u?.expt,status:u.stts,queue_name:u?.qid,request_text:u?.reqtxt,response_text:u?.rslvtxt,response_complete_marker:u?.rslvmk!=null?!!u.rslvmk:void 0,compact:u?.cmpct?true:void 0};for(let f in c)c[f]===void 0&&delete c[f];return (c.status==="running"||c.status==="pending")&&(c.poll=f=>vs.call(this,{id:s+c.id,auth:i,service:r,owner:n,latency:f?.latency||1e3,queue:u?.qid,seedExecuted:c.executed,onResponse:f?.onResponse,onError:f?.onError,onStream:f?.onStream})),c}),l}async function Kr(e){await this.__connection,e=y.Params(e,{url:"string",method:["GET","POST","PUT","PATCH","DELETE","HEAD"],id:"string",queue:"string"},["url","method","id"]);let t=e?.service||this.service,r=e?.owner||this.owner,n=!!this.__user,i=`[${e.method.toUpperCase()}]${e.url.toLowerCase()}#${t}`,s=e.id,o=`${i}:${s}`,l=e?.queue;return l&&he?.[l]&&(he[l].remove(lt[o]),delete lt[o]),S.bind(this)("csr-cancel",{id:o,service:t,owner:r},{auth:n})}function Hr(e,t){let r=typeof t?.poll=="number"?t.poll:1e3;if(!Number.isFinite(r)||r<0)throw new a('"poll" should be a non-negative number.',{code:"INVALID_PARAMETER"});if(!e||typeof e!="string")throw new a('"requestId" should be type: <string>.',{code:"INVALID_PARAMETER"});if(t?.since!==void 0&&typeof t.since!="number")throw new a('"since" should be a number.',{code:"INVALID_PARAMETER"});if(t?.realtimeGroup!==void 0&&t.realtimeGroup!==null&&typeof t.realtimeGroup!="string")throw new a('"realtimeGroup" should be type: <string>.',{code:"INVALID_PARAMETER"});let n=typeof t?.since=="number"&&t.since>0?t.since:0,i=t?.onStream,s=t?.onResponse,o=t?.onError,l={stopped:false,fullId:e,resolve:null},u=null,c={stop:null,aborted:false},f=()=>{te[l.fullId]===c&&delete te[l.fullId];},g=()=>{l.stopped||(l.stopped=true,u&&u(),f(),l.resolve&&l.resolve(ct(l.fullId)));};c.stop=g;let d=new Promise(async(p,h)=>{l.resolve=p;try{await this.__connection;let m=!!this.__user,_=t?.service||this.service,b=t?.owner||this.owner;if(l.fullId=ks(e,t?.url,t?.method,_),l.stopped){p(ct(l.fullId));return}te[l.fullId]=c;let A={seq:n},w=0,I=Ts.call(this,l.fullId),E=i&&t?.realtimeGroup?Rs(A,i,I.onTransport):null,N=E?Is.call(this,t.realtimeGroup,E):null,C=()=>{I.done(E),N&&N.stop(),E&&E.close();};for(u=C;;){let D=await S.bind(this)("csr-poll",{id:l.fullId,service:_,owner:b,since:A.seq},{auth:m});if(l.stopped)return;if(!Ss(D)){C(),f(),s&&s(D),p(D);return}let v=E?E.fromPoll(D):Es(D,A,i);E&&E.open();let U=Ps(D);if(D.more&&v){w=0;continue}if(w=D.more?w+1:0,!U&&(!D.more||w>=ws)){C(),f(),s&&s(D),p(D);return}if(await new Promise(x=>setTimeout(x,E&&E.warm()?Math.max(r,As):r)),l.stopped)return}}catch(m){if(l.stopped)return;u&&u(),f(),o&&o(m),h(m);}});return Object.assign(d,{stop:g})}async function Gr(e,t,r){await this.__connection;let n=r?.service||this.service,i=r?.owner||this.owner,s=!!this.__user,o=ks(e,r?.url,r?.method,n);return S.bind(this)("csr-finalize",{id:o,data:t,service:n,owner:i},{auth:s})}var Cs=Hr,Os=Gr,Ls=Br,Ms=Kr,Fs=jt,qs=$r;async function Vs(e){await this.__connection;let t={name:"string",email:r=>(y.Email(r),r),subject:"string",message:"string"};return e=y.Params(e,t,["name","email","subject","message"]),await S.bind(this)("send-inquiry",e),"SUCCESS: Inquiry has been sent."}async function js(e,t){if(await this.__connection,pl&&e instanceof FormData||bs&&e instanceof HTMLFormElement||_s&&e instanceof SubmitEvent){if(!t)throw new a("Url string as a second argument is required when form is passed.",{code:"INVALID_PARAMETER"});let n=j(e);e={url:t,data:n.data,sync:true};}let r={url:n=>y.Url(n),data:n=>n,sync:["boolean",()=>true]};if(Array.isArray(e))for(let n of e)n=y.Params(n,r);else e=y.Params(e,r);return S.bind(this)("post-secure",e,{auth:true})}async function $s(e,t){await this.__connection;let{auth:r=false,method:n="POST",bypassAwaitConnection:i=false,responseType:s,contentType:o,tokenHeaders:l,progress:u}=t||{};if(t=Object.assign({auth:r,method:n,bypassAwaitConnection:i,responseType:s,contentType:o,tokenHeaders:l},{fetchOptions:{progress:u}}),typeof e!="object"&&(o==="application/json"||o===void 0))throw new a('"data" should be type: <object>.',{code:"INVALID_PARAMETER"});return S.bind(this)("mock",e,t)}async function Bs(e,t){await this.__connection,e=y.Params(e||{},{access_group:n=>{if(n==="authorized"&&(n=1),n==="public"&&(n=0),typeof n!="number")throw new a('"access_group" should be type number.',{code:"INVALID_PARAMETER"});if(n<0)throw new a('"access_group" should be zero or a positive number.',{code:"INVALID_PARAMETER"});if(n>this.__user.access_group)throw new a("User has no access.",{code:"INVALID_REQUEST"});return n}});let r=await S.bind(this)("get-feed",e,{auth:true,fetchOptions:t});return Array.isArray(r?.list)&&(r.list=await Promise.all(r.list.map(n=>Se.bind(this)(n)))),r}function ut(e){if(e===this.__user.user_id)throw new a(`"user_id" cannot be the user's own ID.`,{code:"INVALID_PARAMETER"});return y.UserId(e,'"user_id"')}async function Ks(e,t){if(e=j(e,{ignoreEmpty:true}).data,e=y.Params(e,{subscriber:n=>y.UserId(n,'User ID in "subscriber"'),subscription:ut.bind(this),blocked:"boolean"}),!e.subscriber&&!e.subscription)throw new a('At least either "subscriber" or "subscription" should have a value.',{code:"INVALID_PARAMETER"});let r=await S.bind(this)("get-subscription",e,Object.assign({auth:true},{fetchOptions:t}));return r.list=r.list.map((n=>{let i={};if(n.sub){let s=n.sub.split("#");i.subscriber=s[2],i.subscription=s[0];}else i.subscriber=n.subscriber,i.subscription=n.subscription;return i.timestamp=n?.timestamp||n.stmp,i.blocked=n?.blocked||n.grp.substring(0,1)==="N",Object.assign(i,n.opt),i})),r}async function Hs(e){await this.__connection,e=y.Params(e,{user_id:ut.bind(this),get_feed:"boolean",get_notified:"boolean",get_email:i=>{if(i&&(!this.__user.email||!this.__user.email_verified))throw new a("User has no verified email address.",{code:"INVALID_REQUEST"});return !!i}},["user_id"]);let t={};for(let i of ["get_feed","get_notified","get_email"])typeof e[i]=="boolean"&&(t[i]=e[i]);let r=await S.bind(this)("subscription",{subscribe:e.user_id,option:t},{auth:true}),n={};if(r.sub){let i=r.sub.split("#");n.subscriber=i[2],n.subscription=i[0];}else n.subscriber=r.subscriber,n.subscription=r.subscription;return n.timestamp=r?.timestamp||r.stmp,n.blocked=r?.blocked||r.grp.substring(0,1)==="N",Object.assign(n,r.opt),n}async function Gs(e){await this.__connection;let{user_id:t}=y.Params(e,{user_id:ut.bind(this)},["user_id"]);return await S.bind(this)("subscription",{unsubscribe:t},{auth:true})}async function Ws(e){await this.__connection;let{user_id:t}=y.Params(e,{user_id:ut.bind(this)},["user_id"]);return await S.bind(this)("subscription",{block:t},{auth:true})}async function Qs(e){await this.__connection;let{user_id:t}=y.Params(e,{user_id:ut.bind(this)},["user_id"]);return await S.bind(this)("subscription",{unblock:t},{auth:true})}async function zs(e,t){await this.__connection;let r=await Q.bind(this)();if(e=y.Params(e||{},{user_id:o=>{if(o!==this.__user.user_id&&!r)throw new a("No access.",{code:"INVALID_REQUEST"});return o},group:o=>y.newsletterGroup(o,{allowNull:true}),email:o=>{if(typeof o!="string"||!o.trim())throw new a('"email" should be a non-empty string.',{code:"INVALID_PARAMETER"});if(o.trim().length>255)throw new a('"email" should be at most 255 characters.',{code:"INVALID_PARAMETER"});return o.trim().toLowerCase()}}),e.email!==void 0){if(e.user_id!==void 0&&e.user_id!==null)throw new a('"email" cannot be used with "user_id".',{code:"INVALID_PARAMETER"});if(e.group===void 0||e.group===null)throw new a('"group" is required to search by "email".',{code:"INVALID_PARAMETER"})}let n=await S.bind(this)("get-newsletter-subscription",e,{auth:true,fetchOptions:t||null}),i=n?.list||n,s=[];Array.isArray(i)||(i=[]);for(let o of i){let l=o.subt.split("#"),u=true;l[0].charAt(0)==="@"&&(u=false,l[0]=l[0].substring(1));let c=/^\d+$/.test(l[0])?parseInt(l[0]):l[0],f={timestamp:o.stmp,group:c,subscribed_email:l[1],active:u};typeof o.email_token=="string"&&o.email_token&&(f.subscriber_token=o.email_token),s.push(f);}return n?.list?(n.list=s,n):s}async function Js(e){await this.__connection;let t=y.Params(e||{},{email:r=>Array.isArray(r)&&r.length>0?r.length===1?y.Email(r[0]):r.map(n=>y.Email(n)):y.Email(r),group:r=>y.newsletterGroup(r),redirect:r=>y.Url(r)},this.__user?["group"]:["email","group"]);return S.bind(this)(`subscribe-${this.__user?"":"public-"}newsletter`,t,{auth:!!this.__user})}async function Ys(e){await this.__connection;let t=y.Params(e||{},{group:r=>y.newsletterGroup(r,{nameOnly:true}),restriction:r=>{if(typeof r!="number"||!Number.isInteger(r)||r<0||r>99)throw new a('"restriction" should be a number between 0 and 99.',{code:"INVALID_PARAMETER"});return r},name:r=>{if(typeof r!="string"||r.length>60)throw new a('"name" should be a string of 60 characters or less.',{code:"INVALID_PARAMETER"});return r}},["group"]);return S.bind(this)("register-newsletter-group",t,{auth:true})}async function Xs(e){await this.__connection;let t=y.Params(e||{},{group:r=>y.newsletterGroup(r,{nameOnly:true})},["group"]);return S.bind(this)("delete-newsletter-group",t,{auth:true})}async function Zs(){return await this.__connection,S.bind(this)("newsletter-group-endpoint",null,{auth:true})}async function eo(e){await this.__connection,e=y.Params(e,{group:r=>y.newsletterGroup(r,{allowNull:true})},["group"]);let t=Object.assign({action:"unsubscribe"},e);return S.bind(this)("subscribe-newsletter",t,{auth:true})}async function to(e,t){let r=await Q.bind(this)(),n={message_id:"string",timestamp:"number",read:"number",complaint:"number",subject:"string",bounced:"number"};e||(t=Object.assign({ascending:false},t||{})),e=j(e).data,e=e||{searchFor:"timestamp",value:Date.now(),condition:"<",group:"public"},e=y.Params(e,{searchFor:["message_id","timestamp","subject","complaint","read","bounced"],value:u=>{if(typeof u!==n[e.searchFor])throw new a(`"value" type does not match the type of "${e.searchFor}" index.`,{code:"INVALID_PARAMETER"});if(typeof u=="string"&&!u)throw new a('"value" should not be empty string.',{code:"INVALID_PARAMETER"});return u},range:u=>{if(!e.hasOwnProperty("value")||typeof u!=typeof e.value)throw new a('"range" should match type of "value".',{code:"INVALID_PARAMETER"});return u},condition:[">",">=","=","<","<=","gt","gte","eq","lt","lte",()=>"="],group:u=>{let c=y.newsletterGroup(u);if(c===0)return 0;if(typeof c=="string")return c;if(!this.session)throw new a("User should be logged in.",{code:"INVALID_REQUEST"});if(u==="authorized")return 1;if(!r&&c>parseInt(this.user?.access_group||this.session?.idToken?.payload?.access_group))throw new a("User has no access.",{code:"INVALID_REQUEST"});return c}},["searchFor","value","group"]);let i=e.group===0||typeof e.group=="string"&&!this.__user?"get-public-newsletters":"get-newsletters",s=await S.bind(this)(i,e,Object.assign({method:"get",auth:i==="get-public-newsletters"?!!this.__user:true},{fetchOptions:t})),o={message_id:"mid",timestamp:"stmp",complaint:"cmpl",read:"read",subject:"subj",bounced:"bnce",url:"url",delivered:"delv",group:"grp",dry:"dry",sent:"sent"},l={message_id:"",timestamp:0,complaint:0,read:0,subject:"",bounced:"",url:"",delivered:0,group:e.group,dry:false,sent:0};return s.list=s.list.map(u=>{let c={};for(let f in o)c[f]=u[o[f]]||l[f];return c.bounced=String(c.bounced),c.dry=!!c.dry,c.sent||delete c.sent,c}),s}var $e="skapi:project_id";function ro(e){let t=e.trim().toLowerCase().replace(/^<|>$/g,"").replace(/[\s_\-.]+/g,"");return t==="serviceid"||t==="projectid"}function no(){try{return window.sessionStorage.getItem($e)||null}catch{return null}}function io(e){try{window.sessionStorage.setItem($e,e);}catch{}}function $t(e){try{window.sessionStorage.getItem($e)===e&&window.sessionStorage.removeItem($e);}catch{}}function so(){if(H())return typeof window.prompt=="function";let e=ve("tty");return !!(e&&ve("readline")&&e.isatty(0)&&e.isatty(2))}function oo(){return new a("Project ID is required.",{code:"INVALID_PARAMETER"})}var dt=null;function ao(e,t){if(!dt){dt=H()?Tl(e,t):Il(e,t);let r=()=>{dt=null;};dt.then(r,r);}return dt}async function Tl(e,t){await new Promise(o=>setTimeout(o,0));let r=`new Skapi() was given the placeholder "${e}" instead of your Project ID.`,n=`Enter your Project ID to continue. This browser tab remembers it until the tab is closed. To stop being asked, replace "${e}" in your code with the ID.`,i=`${r}
215
+ `,c=new Blob([u],{type:"application/javascript"});Re=new Worker(URL.createObjectURL(c)),Re.onmessage=f=>{l.readyState===1&&l.send(JSON.stringify({action:"keepAlive"}));},i(l);},l.onmessage=async u=>{let c="";try{c=JSON.parse(decodeURI(u.data)),this.log("socket onmessage",c);}catch{return}let f;switch(!0){case !!c?.["#message"]:f="message";break;case !!c?.["#private"]:f="private";break;case !!c?.["#notice"]:f="notice";break;case !!c?.["#rtc"]:f="rtc";break;case !!c?.["#error"]:f="error";break}if(!f)return;let g={type:f,message:c?.["#rtc"]||c?.["#message"]||c?.["#private"]||c?.["#notice"]||c?.["#error"]||null,sender:c?.["#user_id"]||null,sender_cid:c?.["#scid"]?"cid:"+c["#scid"]:null,sender_rid:c?.["#srid"]||null,code:c?.["#code"]||null};if(f==="notice")e(g);else if(f==="rtc"){if(g.sender!==this.user.user_id){let d=g.message;if(d.hungup){ce[g.sender_cid]&&(ce[g.sender_cid](!1),delete ce[g.sender_cid]),pe[g.sender_cid]&&delete pe[g.sender_cid],O?.[g.sender_cid]&&ue.bind(this)({cid:g.sender_cid}),g.type="rtc:closed",e(g);return}if(d.candidate&&Ft.bind(this)(d.candidate,g.sender_cid),d.sdpoffer&&(Fr.bind(this)(d.sdpoffer,g.sender_cid),pe[g.sender_cid]||(pe[g.sender_cid]=g.sender_cid,delete g.message,g.connectRTC=cs.bind(this)(g),g.type="rtc:incoming",g.hangup=(()=>{O[g.sender_cid]?ue.bind(this)({cid:g.sender_cid}):pe[g.sender_cid]&&(delete pe[g.sender_cid],l.send(JSON.stringify({action:"rtc",uid:g.sender_cid,content:{hungup:this.user.user_id},token:this.session.accessToken.jwtToken})));}).bind(this),e(g))),d.pickup&&ce[g.sender_cid]&&(ce[g.sender_cid](!0),delete ce[g.sender_cid]),d.sdpanswer&&O[g.sender_cid])if(O[g.sender_cid].signalingState==="have-local-offer")await O[g.sender_cid].setRemoteDescription(new RTCSessionDescription(d.sdpanswer)),await Ft.bind(this)(null,g.sender_cid);else throw new a("Invalid signaling state.",{code:"INVALID_REQUEST"})}}else e(g);},l.onclose=()=>{at?(this.log("realtime onclose","WebSocket connection closed."),e({type:"close",message:"WebSocket connection closed."})):(this.log("realtime onclose","WebSocket unexpected close."),e({type:"error",message:"Skapi: WebSocket unexpected close."}),qe++,qe<3?(this.log("realtime onclose","Reconnecting to WebSocket server..."+qe),e({type:"reconnect",message:"Reconnecting to WebSocket server..."+qe}),Ve.bind(this)(e,3e3,"reconnect")):(this.log("realtime onclose","Max reconnection attempts reached."),e({type:"error",message:"Skapi: Max reconnection attempts reached."})));},l.onerror=()=>{this.log("realtime onerror","WebSocket connection error."),e({type:"error",message:"Skapi: WebSocket connection error."});};}catch(l){o(l);}},t);}),n.value=this.__socket,this.__socket}async function gs(e,t,r){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebSocket is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});let n=this.__socket?await this.__socket:this.__socket;if(!n)throw new a("No realtime connection. Execute connectRealtime() before this method.",{code:"INVALID_REQUEST"});if(!t)throw new a("No recipient.",{code:"INVALID_REQUEST"});await Oe.bind(this)(),e=j(e).data;let i="";if(r&&(r=y.Params(r,{config:{always:"boolean"},title:"string",body:"string"},["title","body"]),i=JSON.stringify({title:r.title,body:r.body}),new Blob([i]).size>3072))throw new a("Notification size exceeds 3kb.",{code:"INVALID_PARAMETER"});if(n.readyState===1){try{y.UserId(t),n.send(JSON.stringify({action:"sendMessage",uid:t,content:e,notification:i,notificationConfig:r?.config||{},token:`IdT:${this.service}:${this.owner}:`+(this.bearerToken||this.session?.idToken?.jwtToken||"null")}));}catch(s){if(this.log("postRealtime:err",{err:s}),we!==t)throw new a(`User has not joined to the recipient group. Run joinRealtime({ group: "${t}" })`,{code:"INVALID_REQUEST"});n.send(JSON.stringify({action:"broadcast",rid:t,content:e,notification:i,notificationConfig:r?.config||{},token:`IdT:${this.service}:${this.owner}:`+(this.bearerToken||this.session?.idToken?.jwtToken||"null")}));}return {type:"success",message:"Message sent."}}throw new a("Realtime connection is not open. Try reconnecting with connectRealtime().",{code:"INVALID_REQUEST"})}async function je(e){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebSocket is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});let t=this.__socket?await this.__socket:this.__socket;if(!t)throw new a("No realtime connection. Execute connectRealtime() before this method.",{code:"INVALID_REQUEST"});await Oe.bind(this)(),e=j(e,{nullIfEmpty:true}).data;let{group:r=null}=e;if(!r&&!we)return {type:"success",message:"Left realtime message group."};if(r!==null&&typeof r!="string")throw new a('"group" must be a string | null.',{code:"INVALID_PARAMETER"});return t.readyState===1&&t.send(JSON.stringify({action:"joinRoom",rid:r,token:this.session.accessToken.jwtToken})),we=r,{type:"success",message:r?`Joined realtime message group: "${r}".`:"Left realtime message group."}}async function ps(e,t){e=y.Params(e,{user_id:n=>y.UserId(n,'User ID in "user_id"'),group:["string",()=>{if(!we)throw new a('No group has been joined. Otherwise "group" is required.',{code:"INVALID_REQUEST"});return we}]});let r=await S.bind(this)("get-ws-group",e,{fetchOptions:t,auth:true,method:"post"});return r.list=r.list.map(n=>({user_id:n.uid.split("#")[1],cid:"cid:"+n.cid})),r}async function hs(e,t){if(await this.__connection,e||(e={searchFor:"group",value:" ",condition:">"}),e=y.Params(e,{searchFor:["group","number_of_users",()=>"group"],value:["string","number",()=>e?.searchFor&&e?.searchFor==="number_of_users"?0:" "],condition:[">",">=","=","<","<=","!=","gt","gte","eq","lt","lte","ne"],range:["string","number"]}),e.condition||(e.value===" "||!e.value?e.condition=">":e.condition="="),e.range&&e.condition&&delete e.condition,e.searchFor==="number_of_users"&&typeof e.value!="number")throw new a('"value" must be a number.',{code:"INVALID_PARAMETER"});if(e.searchFor==="group"&&typeof e.value!="string")throw new a('"value" must be a string.',{code:"INVALID_PARAMETER"});if(e.hasOwnProperty("range")&&typeof e.range!=typeof e.value)throw new a(`"range" must be a ${typeof e.value}.`,{code:"INVALID_PARAMETER"});let r=await S.bind(this)("get-ws-group",e,{fetchOptions:t,auth:true,method:"post"});return r.list=r.list.map(n=>({group:n.rid.split("#")[1],number_of_users:n.cnt})),r}var pl=typeof FormData<"u",bs=typeof HTMLFormElement<"u",_s=typeof SubmitEvent<"u",he={},lt={},te={};function ct(e){return Object.freeze({id:e,status:"stopped"})}function jr(e){return !!e&&typeof e=="object"&&e.status==="stopped"}var ws=3;function Es(e,t,r){let n=false,i=Array.isArray(e?.chunks)?e.chunks.slice():[];i.sort((s,o)=>(s?.seq||0)-(o?.seq||0));for(let s of i)if(!(!s||typeof s.seq!="number"||s.seq<=t.seq)&&(t.seq=s.seq,n=true,r&&typeof s.txt=="string"&&s.txt!==""))try{r(s.txt,s.seq,"poll");}catch(o){console.error(o);}return typeof e?.last_seq=="number"&&e.last_seq>t.seq&&(t.seq=e.last_seq,n=true),n}var hl=2e3,As=5e3,ml=2e3,yl=5,bl=1500,Vt=null;function Rs(e,t,r){let n=new Map,i=false,s=false,o=0,l={socket:0,poll:0},u=(d,p,h)=>{if(e.seq=d,!(!t||typeof p!="string"||p===""))try{t(p,d,h);}catch(m){console.error(m);}},c=()=>{for(let d of Array.from(n.keys()))d<=e.seq&&n.delete(d);for(;;){let d=e.seq+1;if(!n.has(d))break;let p=n.get(d);n.delete(d),u(d,p.txt,p.via);}};return {cursor:e,open:()=>{i||s||(i=true,c());},fromPoll:d=>{if(s)return false;let p=e.seq,h=e.seq,m=Array.isArray(d?.chunks)?d.chunks:[];for(let b of m){if(!b||typeof b.seq!="number"||b.seq<=e.seq)continue;let A=!n.has(b.seq);A&&(l.poll++,r&&l.poll===1&&r("poll",b.seq)),n.set(b.seq,{txt:typeof b.txt=="string"?b.txt:"",via:A?"poll":n.get(b.seq).via}),b.seq>h&&(h=b.seq);}typeof d?.last_seq=="number"&&d.last_seq>h&&(h=d.last_seq);let _=Array.from(n.keys()).sort((b,A)=>b-A);for(let b of _){if(b<=e.seq){n.delete(b);continue}if(b>h)break;let A=n.get(b);n.delete(b),u(b,A.txt,A.via);}return h>e.seq&&(e.seq=h),c(),e.seq>p},fromSocket:(d,p)=>{s||typeof d!="number"||!Number.isFinite(d)||(o=Date.now(),!(d<=e.seq)&&(!n.has(d)&&n.size>=ml||(n.has(d)||(l.socket++,r&&l.socket===1&&r("socket",d)),n.set(d,{txt:typeof p=="string"?p:"",via:n.has(d)?n.get(d).via:"socket"}),i&&c())));},warm:()=>o!==0&&Date.now()-o<hl,stats:()=>({socket:l.socket,poll:l.poll}),close:()=>{s=true,n.clear();}}}function Ts(e){if(!this||!this.__network_logs)return {onTransport:void 0,done:()=>{}};let t=Date.now(),r=false;return {onTransport:(n,i)=>{console.log(`%cSKAPI: stream chunk arrived over ${n==="socket"?"WEBSOCKET":"POLL"}`,`color: ${n==="socket"?"green":"orange"};`,{id:e,first_seq:i,after_ms:Date.now()-t});},done:n=>{if(r||!n)return;r=true;let i=n.stats();console.log("%cSKAPI: stream transport","color: blue;",{id:e,over_websocket:i.socket,over_poll:i.poll,took_ms:Date.now()-t});}}}function Is(e,t){let r={stop:()=>{}};if(typeof window>"u"||window._runningInNodeJS||Vt)return r;let n={stopped:false,socket:null,opened:null,joined:false,attempts:0,unavailable:false};Vt=n;let i=c=>{if(n.stopped)return;let f=c?.data;if(typeof f!="string")return;let g=null;try{g=JSON.parse(f);}catch{try{g=JSON.parse(decodeURI(f));}catch{return}}let d=g?.["#message"];if(d==null)return;if(typeof d=="string")try{d=JSON.parse(d);}catch{return}if(typeof d!="object")return;let p=g?.["#srid"];if(typeof p=="string"&&p!==e)return;let h=d.seq;typeof h=="string"&&h!==""&&(h=Number(h)),t.fromSocket(h,d.txt);},s=()=>{if(n.socket){try{n.socket.removeEventListener("message",i);}catch{}try{n.socket.removeEventListener("close",l);}catch{}n.socket=null;}},o=async()=>{let c=n.opened,f=n.joined;if(n.opened=null,n.joined=false,s(),!(!f&&!c))try{let g=this.__socket?await this.__socket:null;if(c&&g===c){await qt.bind(this)();return}f&&g&&fs()===room&&await je.bind(this)({group:null});}catch{}},l=()=>{n.stopped||(s(),!n.unavailable&&(n.attempts>=yl||(n.attempts+=1,setTimeout(()=>{n.stopped||u();},bl))));},u=async()=>{try{let c=this.__socket?await this.__socket:null;if(n.stopped){o();return}if(!c){if(!this.session){n.unavailable=!0,o();return}if(await Ve.bind(this)(()=>{},0),c=this.__socket?await this.__socket:null,n.stopped){o();return}c&&!n.opened&&(n.opened=c);}if(!c||c.readyState!==1)return;if(c.addEventListener("message",i),c.addEventListener("close",l),n.socket=c,!n.joined&&(await je.bind(this)({group:e}),n.joined=!0,n.stopped)){o();return}}catch{}};return u(),{stop:()=>{n.stopped||(n.stopped=true,Vt===n&&(Vt=null),o());}}}function Ps(e){return e?.status==="running"||e?.status==="pending"}function Ss(e){return !!e&&typeof e=="object"&&!Array.isArray(e)&&typeof e.status=="string"&&typeof e.id=="string"&&"in_queue"in e}function ks(e,t,r,n){if(!e||typeof e!="string")throw new a('"requestId" should be type: <string>.',{code:"INVALID_PARAMETER"});if(e.includes("#"))return e;if(!t||typeof t!="string"||!r||typeof r!="string")throw new a('"url" and "method" are required to address a request by its short id.',{code:"INVALID_PARAMETER"});return y.Url(t),`[${r.toUpperCase()}]${t.toLowerCase()}#${n}:${e}`}function vs({id:e,auth:t,service:r,owner:n,latency:i=1e3,queue:s,seedExecuted:o,onResponse:l,onError:u,onStream:c,realtimeGroup:f}){if(typeof i!="number")throw new a('"latency" should be a number.',{code:"INVALID_PARAMETER"});if(i<0)throw new a('"latency" should be a non-negative number.',{code:"INVALID_PARAMETER"});s&&!he?.[s]&&(he[s]=new ys({breakWhenError:false,batchSize:1}));let g={stop:null,aborted:false,queue:s};te[e]=g;let d=null,p=()=>{te[e]===g&&delete te[e];},h=()=>new Promise((_,b)=>{let A=false;if(g.aborted){p(),_(ct(e));return}let w={seq:0},I=Ts.call(this,e),E=c&&f?Rs(w,c,I.onTransport):null,N=E?Is.call(this,f,E):null,C=()=>{I.done(E),N&&N.stop(),E&&E.close();};d=C;let D=0,v=false,U=0,x=typeof o=="number"&&o>0?o:void 0,M=async()=>{if(!(A||v)&&!(E&&E.warm()&&Date.now()-D<As)){v=true;try{for(;;){let ie={id:e,service:r,owner:n};c&&(ie.since=w.seq),D=Date.now();let F=await S.bind(this)("csr-poll",ie,{auth:t});if(A)return;let J=E?E.fromPoll(F):c?Es(F,w,c):!1;E&&E.open();let ft=Ps(F);if(typeof F?.executed=="number"&&F.executed>0&&(x=F.executed),F?.more&&J){U=0;continue}if(ft){U=0;return}if(U=F?.more?U+1:0,F?.more&&U<ws)return;A=!0,l&&l(F,x!==void 0?{executed:x}:void 0),clearInterval(de),C(),p(),_(F);return}}catch(ie){if(A)return;A=true,u&&u(ie),clearInterval(de),C(),p(),b(ie);}finally{v=false;}}},de=setInterval(M,i);E&&M(),g.stop=()=>{A||(A=true,clearInterval(de),C(),p(),_(ct(e)));};}),m=()=>{let _=te[e];_&&(_.stop?_.stop():(_.aborted=true,delete te[e]));};if(s){let _=new Promise((b,A)=>{let w=false,I=he[s].add([async()=>{try{let E=await h();return w||(w=!0,b(E)),E}catch(E){throw w||(w=true,A(E)),E}}])[0];lt[e]=I,g.stop=()=>{if(!w){g.aborted=true,d&&d();try{he[s]&&he[s].remove(lt[e]);}catch{}delete lt[e],p(),w=true,b(ct(e));}};});return Object.assign(_,{stop:m})}else return Object.assign(h(),{stop:m})}function $t(e){let t=0,r=[];if(e?.id){if(e.url&&e.method){let n=e.service||this.service;r.push(`[${e.method.toUpperCase()}]${e.url.toLowerCase()}#${n}:${e.id}`);}r.push(e.id);}else if(e?.queue)for(let n in te)te[n]?.queue===e.queue&&r.push(n);else for(let n in te)r.push(n);for(let n of r){let i=te[n];i&&(i.stop?i.stop():(i.aborted=true,delete te[n]),t+=1);}return t}function $r(e,t){if(!e.queue)throw new a('"queue" is required.',{code:"INVALID_PARAMETER"});let r=()=>S.bind(this)("csr-poll",{service:e.service||this.service,owner:e.owner||this.owner,queue:e.queue+":"},{auth:true});return this.__projectIdInput?this.__projectIdInput.then(r):r()}function _l(e){if(typeof Buffer<"u"&&typeof Buffer.from=="function")return Buffer.from(e).toString("base64");if(typeof btoa=="function"){let t="";for(let n=0;n<e.length;n+=32768)t+=String.fromCharCode.apply(null,Array.from(e.subarray(n,n+32768)));return btoa(t)}throw new a("No base64 encoder available in this environment.",{code:"NOT_SUPPORTED"})}var ms=2*1024*1024-64*1024;function jt(e){return typeof File<"u"&&e instanceof File||typeof Blob<"u"&&e instanceof Blob}function Vr(e){if(Array.isArray(e)){let t=[];for(let r of e)jt(r)||t.push(Vr(r));return t}if(e&&typeof e=="object"&&!jt(e)){let t=Object.getPrototypeOf(e);if(t!==Object.prototype&&t!==null)return e;let r={};for(let n in e)jt(e[n])||(r[n]=Vr(e[n]));return r}return e}function wl(e){if(e==null)return null;let t=j(e)?.data;return !t||typeof t!="object"||Array.isArray(t)?null:Vr(t)}function Ns(e,t,r){if(r!==void 0){if(Array.isArray(r)){for(let n of r)Ns(e,t,n);return}if(jt(r)){e.append(t,r);return}if(r===null){e.append(t,"");return}if(typeof r=="object"){e.append(t,JSON.stringify(r));return}e.append(t,String(r));}}async function El(e){if(e==null)throw new a('"multipart": true needs a form body in the first argument.',{code:"INVALID_PARAMETER"});if(typeof FormData>"u"||typeof Response>"u")throw new a('"multipart": true is not available in this environment.',{code:"NOT_SUPPORTED"});let t;if(_s&&e instanceof SubmitEvent)t=new FormData(e.target);else if(bs&&e instanceof HTMLFormElement)t=new FormData(e);else if(e instanceof FormData)t=e;else if(typeof e=="object"&&!Array.isArray(e)){t=new FormData;for(let s in e)Ns(t,s,e[s]);}else throw new a('"form" should be a submit event, a form element, FormData, or an object.',{code:"INVALID_PARAMETER"});let r=new Response(t),n=r.headers.get("content-type"),i=_l(new Uint8Array(await r.arrayBuffer()));if(i.length>ms)throw new a(`Multipart body is too large: ${i.length} bytes once base64 encoded, and the limit is ${ms}. Upload the file first and send its url instead.`,{code:"INVALID_PARAMETER"});return {body_b64:i,body_content_type:n}}function Al(e){if(e!=null){if(typeof e=="boolean")return e;if(typeof e=="object"&&!Array.isArray(e))return {user:!!e.user,service:!!e.service};throw new a('"skapiHeaders" should be type: <boolean> or { user?: boolean; service?: boolean }.',{code:"INVALID_PARAMETER"})}}function Rl(e){if(!(!e||typeof e!="object")){for(let t in e)if(typeof t=="string"&&t.toLowerCase().indexOf("x-skapi-")===0)throw new a(`"headers" cannot set "${t}": the "x-skapi-" prefix is reserved. Use "skapiHeaders" to tell the destination who the caller is.`,{code:"INVALID_PARAMETER"})}}async function Ds(e,t){let r=false,n=!!(e?.secretName||e?.clientSecretName),i=t?.signal;if(i?.aborted)throw new a('"signal" was already aborted.',{code:"INVALID_REQUEST"});if(typeof e.poll=="number"&&e.poll<0)throw new a('"poll" should be a non-negative number.',{code:"INVALID_PARAMETER"});let s=e?.onResponse,o=e?.onError,l=e?.onStream,u=typeof e.poll=="number"?e.poll:e.poll?1e3:0;delete e.poll,(u||e.stream)&&!e.queue&&(e.queue=(this.__user?.user_id||"anonymous")+"-"+Te());let c=(d,p=new WeakSet)=>{if(!(r||!d||typeof d!="object"||p.has(d))){p.add(d);for(let h in d){let m=d[h];if(typeof m=="string"){if(m.includes("$CLIENT_SECRET")){r=true;return}}else m&&typeof m=="object"&&c(m,p);}}};if(e=y.Params(e,{url:d=>{if(!d||typeof d!="string")throw new a('"url" should be type: <string>.',{code:"INVALID_PARAMETER"});return y.Url(d),d.includes("$CLIENT_SECRET")&&(r=true),d},secretName:"string",clientSecretName:"string",method:d=>{if(d&&typeof d!="string")throw new a('"method" should be one of "GET", "POST", "PUT", "PATCH", "DELETE" or "HEAD".',{code:"INVALID_PARAMETER"});let p=d.toLowerCase();if(p!=="get"&&p!=="post"&&p!=="delete"&&p!=="put"&&p!=="patch"&&p!=="head")throw new a('"method" should be one of "GET", "POST", "PUT", "PATCH", "DELETE" or "HEAD".',{code:"INVALID_PARAMETER"});return p},stream:d=>{if(d!=null&&typeof d!="boolean")throw new a('"stream" should be type: <boolean>.',{code:"INVALID_PARAMETER"});return !!d},realtime:d=>{if(d!=null&&typeof d!="boolean")throw new a('"realtime" should be type: <boolean>.',{code:"INVALID_PARAMETER"});return !!d},headers:d=>{if(d&&typeof d!="object")throw new a('"headers" should be type: <object>.',{code:"INVALID_PARAMETER"});return Rl(d),c(d),d},skapiHeaders:d=>Al(d),data:d=>{if(d&&typeof d!="object")throw new a('"data" should be type: <object>.',{code:"INVALID_PARAMETER"});return c(d),d},params:d=>{if(d&&typeof d!="object")throw new a('"params" should be type: <object>.',{code:"INVALID_PARAMETER"});return c(d),d},body_b64:"string",body_content_type:"string",expires:"number",queue:"string"},t?.requireSecretName?["clientSecretName","method","url"]:["method","url"]),e.realtime&&!e.stream)throw new a('"realtime" requires "stream": true.',{code:"INVALID_PARAMETER"});if(e.body_b64&&e.data)throw new a('"data" cannot be sent with "multipart": true.',{code:"INVALID_PARAMETER"});n&&!r&&(delete e.secretName,delete e.clientSecretName),await this.__connection;let f=!!this.__user,g=()=>S.bind(this)("csr",e,{auth:f,tokenHeaders:{accessToken:!!f}}).then(d=>{if(d.status==="running"||d.status==="pending"){let p=`[${e.method.toUpperCase()}]${e.url.toLowerCase()}`,h=e.service||this.service,m=e.owner||this.owner,_=`${p}#${h}:${d.id}`;if(i){let b=()=>{$t.call(this,{id:_});};i.aborted?b():i.addEventListener("abort",b,{once:true});}Object.assign(d,{poll:b=>vs.call(this,{id:_,auth:f,service:h,owner:m,latency:b?.latency||1e3,queue:e?.queue,onResponse:s,onError:o,onStream:b?.onStream||l,realtimeGroup:d?.realtime_group})});}return s?s(d):d}).catch(d=>{if(o)return o(d);throw d});if(e?.queue){let d="base:"+e.queue;return he?.[d]||(he[d]=new ys({breakWhenError:false,batchSize:1})),new Promise((p,h)=>{he[d].add([async()=>{try{let m=await g();if(u>0){let _=m.poll({latency:u});return i&&(i.aborted?_.stop():i.addEventListener("abort",()=>_.stop(),{once:!0})),p(_),_}return p(m),m}catch(m){throw h(m),m}}]);})}else return g()}async function Us(e,t){if(!t||typeof t!="object")throw new a('"options" is required in the second argument.',{code:"INVALID_PARAMETER"});if(t.apiKeyHeader!==void 0||t.apiKeyScheme!==void 0)throw new a('"apiKeyHeader" and "apiKeyScheme" are no longer supported. Store the key as a client secret, name it with "secretName", and put "$CLIENT_SECRET" where the key goes.',{code:"INVALID_PARAMETER"});if(t.multipart!==void 0&&t.multipart!==null&&typeof t.multipart!="boolean")throw new a('"multipart" should be type: <boolean>.',{code:"INVALID_PARAMETER"});let r=t.responseType;if(r!=null){if(r==="response")throw new a(`"responseType": "response" is not available here. The request is relayed from the server and what comes back is the stored answer, not a live Response; the destination's status code is the "status_code" of the row forwardRequestHistory lists.`,{code:"INVALID_PARAMETER"});if(r!=="json"&&r!=="text")throw new a('"responseType" should be either "json" or "text".',{code:"INVALID_PARAMETER"})}let n=t.method||"POST",i=typeof n=="string"?n.toLowerCase():"",s=i==="get"||i==="delete"||i==="head"?"params":"data",o={url:t.url,method:n};if(t.secretName!==void 0&&(o.secretName=t.secretName),t.headers!==void 0&&(o.headers=t.headers),t.data!==void 0&&(o.data=t.data),t.params!==void 0&&(o.params=t.params),t.skapiHeaders!==void 0&&(o.skapiHeaders=t.skapiHeaders),t.service!==void 0&&(o.service=t.service),t.owner!==void 0&&(o.owner=t.owner),t.queue!==void 0&&(o.queue=t.queue),t.expires!==void 0&&(o.expires=t.expires),t.stream!==void 0&&(o.stream=t.stream),t.realtime!==void 0&&(o.realtime=t.realtime),t.poll!==void 0&&(o.poll=t.poll),t.onStream!==void 0&&(o.onStream=t.onStream),t.onResponse!==void 0&&(o.onResponse=t.onResponse),t.onError!==void 0&&(o.onError=t.onError),t.multipart){if(t.data!==void 0&&t.data!==null)throw new a('"data" cannot be sent with "multipart": true. The form itself is the body.',{code:"INVALID_PARAMETER"});let u=await El(e);o.body_b64=u.body_b64,o.body_content_type=u.body_content_type;}else {let u=wl(e);u&&Object.keys(u).length&&(o[s]=Object.assign({},u,o[s]||{}));}let l=Ds.call(this,o,{signal:t.signal});return r?l.then(u=>{if(Ss(u)||jr(u))return u;if(r==="text")return typeof u=="string"?u:JSON.stringify(u);if(typeof u=="string")try{return JSON.parse(u)}catch{return u}return u}):l}async function xs(e){return Ds.call(this,e,{requireSecretName:true})}async function Br(e,t){await this.__connection;let r=e.service||this.service,n=e.owner||this.owner;e=y.Params(e,{url:"string",method:["GET","POST","PUT","PATCH","DELETE","HEAD"],queue:"string",status:["pending","running","resolved","failed"],compact:"boolean",queue_exact:"boolean",queue_exclude:"string"},["url","method"]);let i=!!this.__user,s=`[${e.method.toUpperCase()}]${e.url.toLowerCase()}#${r}:`,o={id:s,queue:e?.queue,status:e?.status,service:r,owner:n};e?.compact&&(o.compact=true),e?.queue_exact&&(o.queue_exact=true),e?.queue_exclude&&(o.queue_exclude=e.queue_exclude),Object.keys(o).forEach(u=>{o[u]||delete o[u];}),o.queue&&(o.id_prefix=o.id,delete o.id);let l=await S.bind(this)("csr-poll",o,{auth:i,fetchOptions:t});return l.list=l.list.map(u=>{let c={id:u.id,status_code:u.rslv?.status_code||null,response_body:u.rslv?.body||u.rslv?.truncated||null,error:u?.err,created:u?.stmp,updated:u?.utmp,executed:typeof u?.att=="number"?u.att*1e3:void 0,responded:typeof u?.rtmp=="number"?u.rtmp:void 0,request_body:u?.reqbdy,expires:u?.expt,status:u.stts,queue_name:u?.qid,request_text:u?.reqtxt,response_text:u?.rslvtxt,response_complete_marker:u?.rslvmk!=null?!!u.rslvmk:void 0,compact:u?.cmpct?true:void 0};for(let f in c)c[f]===void 0&&delete c[f];return (c.status==="running"||c.status==="pending")&&(c.poll=f=>vs.call(this,{id:s+c.id,auth:i,service:r,owner:n,latency:f?.latency||1e3,queue:u?.qid,seedExecuted:c.executed,onResponse:f?.onResponse,onError:f?.onError,onStream:f?.onStream})),c}),l}async function Kr(e){await this.__connection,e=y.Params(e,{url:"string",method:["GET","POST","PUT","PATCH","DELETE","HEAD"],id:"string",queue:"string"},["url","method","id"]);let t=e?.service||this.service,r=e?.owner||this.owner,n=!!this.__user,i=`[${e.method.toUpperCase()}]${e.url.toLowerCase()}#${t}`,s=e.id,o=`${i}:${s}`,l=e?.queue;return l&&he?.[l]&&(he[l].remove(lt[o]),delete lt[o]),S.bind(this)("csr-cancel",{id:o,service:t,owner:r},{auth:n})}function Hr(e,t){let r=typeof t?.poll=="number"?t.poll:1e3;if(!Number.isFinite(r)||r<0)throw new a('"poll" should be a non-negative number.',{code:"INVALID_PARAMETER"});if(!e||typeof e!="string")throw new a('"requestId" should be type: <string>.',{code:"INVALID_PARAMETER"});if(t?.since!==void 0&&typeof t.since!="number")throw new a('"since" should be a number.',{code:"INVALID_PARAMETER"});if(t?.realtimeGroup!==void 0&&t.realtimeGroup!==null&&typeof t.realtimeGroup!="string")throw new a('"realtimeGroup" should be type: <string>.',{code:"INVALID_PARAMETER"});let n=typeof t?.since=="number"&&t.since>0?t.since:0,i=t?.onStream,s=t?.onResponse,o=t?.onError,l={stopped:false,fullId:e,resolve:null},u=null,c={stop:null,aborted:false},f=()=>{te[l.fullId]===c&&delete te[l.fullId];},g=()=>{l.stopped||(l.stopped=true,u&&u(),f(),l.resolve&&l.resolve(ct(l.fullId)));};c.stop=g;let d=new Promise(async(p,h)=>{l.resolve=p;try{await this.__connection;let m=!!this.__user,_=t?.service||this.service,b=t?.owner||this.owner;if(l.fullId=ks(e,t?.url,t?.method,_),l.stopped){p(ct(l.fullId));return}te[l.fullId]=c;let A={seq:n},w=0,I=Ts.call(this,l.fullId),E=i&&t?.realtimeGroup?Rs(A,i,I.onTransport):null,N=E?Is.call(this,t.realtimeGroup,E):null,C=()=>{I.done(E),N&&N.stop(),E&&E.close();};for(u=C;;){let D=await S.bind(this)("csr-poll",{id:l.fullId,service:_,owner:b,since:A.seq},{auth:m});if(l.stopped)return;if(!Ss(D)){C(),f(),s&&s(D),p(D);return}let v=E?E.fromPoll(D):Es(D,A,i);E&&E.open();let U=Ps(D);if(D.more&&v){w=0;continue}if(w=D.more?w+1:0,!U&&(!D.more||w>=ws)){C(),f(),s&&s(D),p(D);return}if(await new Promise(x=>setTimeout(x,E&&E.warm()?Math.max(r,As):r)),l.stopped)return}}catch(m){if(l.stopped)return;u&&u(),f(),o&&o(m),h(m);}});return Object.assign(d,{stop:g})}async function Gr(e,t,r){await this.__connection;let n=r?.service||this.service,i=r?.owner||this.owner,s=!!this.__user,o=ks(e,r?.url,r?.method,n);return S.bind(this)("csr-finalize",{id:o,data:t,service:n,owner:i},{auth:s})}var Cs=Hr,Os=Gr,Ls=Br,Ms=Kr,Fs=$t,qs=$r;async function Vs(e){await this.__connection;let t={name:"string",email:r=>(y.Email(r),r),subject:"string",message:"string"};return e=y.Params(e,t,["name","email","subject","message"]),await S.bind(this)("send-inquiry",e),"SUCCESS: Inquiry has been sent."}async function js(e,t){if(await this.__connection,pl&&e instanceof FormData||bs&&e instanceof HTMLFormElement||_s&&e instanceof SubmitEvent){if(!t)throw new a("Url string as a second argument is required when form is passed.",{code:"INVALID_PARAMETER"});let n=j(e);e={url:t,data:n.data,sync:true};}let r={url:n=>y.Url(n),data:n=>n,sync:["boolean",()=>true]};if(Array.isArray(e))for(let n of e)n=y.Params(n,r);else e=y.Params(e,r);return S.bind(this)("post-secure",e,{auth:true})}async function $s(e,t){await this.__connection;let{auth:r=false,method:n="POST",bypassAwaitConnection:i=false,responseType:s,contentType:o,tokenHeaders:l,progress:u}=t||{};if(t=Object.assign({auth:r,method:n,bypassAwaitConnection:i,responseType:s,contentType:o,tokenHeaders:l},{fetchOptions:{progress:u}}),typeof e!="object"&&(o==="application/json"||o===void 0))throw new a('"data" should be type: <object>.',{code:"INVALID_PARAMETER"});return S.bind(this)("mock",e,t)}async function Bs(e,t){await this.__connection,e=y.Params(e||{},{access_group:n=>{if(n==="authorized"&&(n=1),n==="public"&&(n=0),typeof n!="number")throw new a('"access_group" should be type number.',{code:"INVALID_PARAMETER"});if(n<0)throw new a('"access_group" should be zero or a positive number.',{code:"INVALID_PARAMETER"});if(n>this.__user.access_group)throw new a("User has no access.",{code:"INVALID_REQUEST"});return n}});let r=await S.bind(this)("get-feed",e,{auth:true,fetchOptions:t});return Array.isArray(r?.list)&&(r.list=await Promise.all(r.list.map(n=>Se.bind(this)(n)))),r}function ut(e){if(e===this.__user.user_id)throw new a(`"user_id" cannot be the user's own ID.`,{code:"INVALID_PARAMETER"});return y.UserId(e,'"user_id"')}async function Ks(e,t){if(e=j(e,{ignoreEmpty:true}).data,e=y.Params(e,{subscriber:n=>y.UserId(n,'User ID in "subscriber"'),subscription:ut.bind(this),blocked:"boolean"}),!e.subscriber&&!e.subscription)throw new a('At least either "subscriber" or "subscription" should have a value.',{code:"INVALID_PARAMETER"});let r=await S.bind(this)("get-subscription",e,Object.assign({auth:true},{fetchOptions:t}));return r.list=r.list.map((n=>{let i={};if(n.sub){let s=n.sub.split("#");i.subscriber=s[2],i.subscription=s[0];}else i.subscriber=n.subscriber,i.subscription=n.subscription;return i.timestamp=n?.timestamp||n.stmp,i.blocked=n?.blocked||n.grp.substring(0,1)==="N",Object.assign(i,n.opt),i})),r}async function Hs(e){await this.__connection,e=y.Params(e,{user_id:ut.bind(this),get_feed:"boolean",get_notified:"boolean",get_email:i=>{if(i&&(!this.__user.email||!this.__user.email_verified))throw new a("User has no verified email address.",{code:"INVALID_REQUEST"});return !!i}},["user_id"]);let t={};for(let i of ["get_feed","get_notified","get_email"])typeof e[i]=="boolean"&&(t[i]=e[i]);let r=await S.bind(this)("subscription",{subscribe:e.user_id,option:t},{auth:true}),n={};if(r.sub){let i=r.sub.split("#");n.subscriber=i[2],n.subscription=i[0];}else n.subscriber=r.subscriber,n.subscription=r.subscription;return n.timestamp=r?.timestamp||r.stmp,n.blocked=r?.blocked||r.grp.substring(0,1)==="N",Object.assign(n,r.opt),n}async function Gs(e){await this.__connection;let{user_id:t}=y.Params(e,{user_id:ut.bind(this)},["user_id"]);return await S.bind(this)("subscription",{unsubscribe:t},{auth:true})}async function Ws(e){await this.__connection;let{user_id:t}=y.Params(e,{user_id:ut.bind(this)},["user_id"]);return await S.bind(this)("subscription",{block:t},{auth:true})}async function Qs(e){await this.__connection;let{user_id:t}=y.Params(e,{user_id:ut.bind(this)},["user_id"]);return await S.bind(this)("subscription",{unblock:t},{auth:true})}async function zs(e,t){await this.__connection;let r=await Q.bind(this)();if(e=y.Params(e||{},{user_id:o=>{if(o!==this.__user.user_id&&!r)throw new a("No access.",{code:"INVALID_REQUEST"});return o},group:o=>y.newsletterGroup(o,{allowNull:true}),email:o=>{if(typeof o!="string"||!o.trim())throw new a('"email" should be a non-empty string.',{code:"INVALID_PARAMETER"});if(o.trim().length>255)throw new a('"email" should be at most 255 characters.',{code:"INVALID_PARAMETER"});return o.trim().toLowerCase()}}),e.email!==void 0){if(e.user_id!==void 0&&e.user_id!==null)throw new a('"email" cannot be used with "user_id".',{code:"INVALID_PARAMETER"});if(e.group===void 0||e.group===null)throw new a('"group" is required to search by "email".',{code:"INVALID_PARAMETER"})}let n=await S.bind(this)("get-newsletter-subscription",e,{auth:true,fetchOptions:t||null}),i=n?.list||n,s=[];Array.isArray(i)||(i=[]);for(let o of i){let l=o.subt.split("#"),u=true;l[0].charAt(0)==="@"&&(u=false,l[0]=l[0].substring(1));let c=/^\d+$/.test(l[0])?parseInt(l[0]):l[0],f={timestamp:o.stmp,group:c,subscribed_email:l[1],active:u};typeof o.email_token=="string"&&o.email_token&&(f.subscriber_token=o.email_token),s.push(f);}return n?.list?(n.list=s,n):s}async function Js(e){await this.__connection;let t=y.Params(e||{},{email:r=>Array.isArray(r)&&r.length>0?r.length===1?y.Email(r[0]):r.map(n=>y.Email(n)):y.Email(r),group:r=>y.newsletterGroup(r),redirect:r=>y.Url(r)},this.__user?["group"]:["email","group"]);return S.bind(this)(`subscribe-${this.__user?"":"public-"}newsletter`,t,{auth:!!this.__user})}async function Ys(e){await this.__connection;let t=y.Params(e||{},{group:r=>y.newsletterGroup(r,{nameOnly:true}),restriction:r=>{if(typeof r!="number"||!Number.isInteger(r)||r<0||r>99)throw new a('"restriction" should be a number between 0 and 99.',{code:"INVALID_PARAMETER"});return r},name:r=>{if(typeof r!="string"||r.length>60)throw new a('"name" should be a string of 60 characters or less.',{code:"INVALID_PARAMETER"});return r}},["group"]);return S.bind(this)("register-newsletter-group",t,{auth:true})}async function Xs(e){await this.__connection;let t=y.Params(e||{},{group:r=>y.newsletterGroup(r,{nameOnly:true})},["group"]);return S.bind(this)("delete-newsletter-group",t,{auth:true})}async function Zs(){return await this.__connection,S.bind(this)("newsletter-group-endpoint",null,{auth:true})}async function eo(e){await this.__connection,e=y.Params(e,{group:r=>y.newsletterGroup(r,{allowNull:true})},["group"]);let t=Object.assign({action:"unsubscribe"},e);return S.bind(this)("subscribe-newsletter",t,{auth:true})}async function to(e,t){let r=await Q.bind(this)(),n={message_id:"string",timestamp:"number",read:"number",complaint:"number",subject:"string",bounced:"number"};e||(t=Object.assign({ascending:false},t||{})),e=j(e).data,e=e||{searchFor:"timestamp",value:Date.now(),condition:"<",group:"public"},e=y.Params(e,{searchFor:["message_id","timestamp","subject","complaint","read","bounced"],value:u=>{if(typeof u!==n[e.searchFor])throw new a(`"value" type does not match the type of "${e.searchFor}" index.`,{code:"INVALID_PARAMETER"});if(typeof u=="string"&&!u)throw new a('"value" should not be empty string.',{code:"INVALID_PARAMETER"});return u},range:u=>{if(!e.hasOwnProperty("value")||typeof u!=typeof e.value)throw new a('"range" should match type of "value".',{code:"INVALID_PARAMETER"});return u},condition:[">",">=","=","<","<=","gt","gte","eq","lt","lte",()=>"="],group:u=>{let c=y.newsletterGroup(u);if(c===0)return 0;if(typeof c=="string")return c;if(!this.session)throw new a("User should be logged in.",{code:"INVALID_REQUEST"});if(u==="authorized")return 1;if(!r&&c>parseInt(this.user?.access_group||this.session?.idToken?.payload?.access_group))throw new a("User has no access.",{code:"INVALID_REQUEST"});return c}},["searchFor","value","group"]);let i=e.group===0||typeof e.group=="string"&&!this.__user?"get-public-newsletters":"get-newsletters",s=await S.bind(this)(i,e,Object.assign({method:"get",auth:i==="get-public-newsletters"?!!this.__user:true},{fetchOptions:t})),o={message_id:"mid",timestamp:"stmp",complaint:"cmpl",read:"read",subject:"subj",bounced:"bnce",url:"url",delivered:"delv",group:"grp",dry:"dry",sent:"sent"},l={message_id:"",timestamp:0,complaint:0,read:0,subject:"",bounced:"",url:"",delivered:0,group:e.group,dry:false,sent:0};return s.list=s.list.map(u=>{let c={};for(let f in o)c[f]=u[o[f]]||l[f];return c.bounced=String(c.bounced),c.dry=!!c.dry,c.sent||delete c.sent,c}),s}var $e="skapi:project_id";function ro(e){let t=e.trim().toLowerCase().replace(/^<|>$/g,"").replace(/[\s_\-.]+/g,"");return t==="serviceid"||t==="projectid"}function no(){try{return window.sessionStorage.getItem($e)||null}catch{return null}}function io(e){try{window.sessionStorage.setItem($e,e);}catch{}}function Bt(e){try{window.sessionStorage.getItem($e)===e&&window.sessionStorage.removeItem($e);}catch{}}function so(){if(H())return typeof window.prompt=="function";let e=ve("tty");return !!(e&&ve("readline")&&e.isatty(0)&&e.isatty(2))}function oo(){return new a("Project ID is required.",{code:"INVALID_PARAMETER"})}var dt=null;function ao(e,t){if(!dt){dt=H()?Tl(e,t):Il(e,t);let r=()=>{dt=null;};dt.then(r,r);}return dt}async function Tl(e,t){await new Promise(o=>setTimeout(o,0));let r=`new Skapi() was given the placeholder "${e}" instead of your Project ID.`,n=`Enter your Project ID to continue. This browser tab remembers it until the tab is closed. To stop being asked, replace "${e}" in your code with the ID.`,i=`${r}
216
216
 
217
217
  ${n}`,s="";for(;;){let o=window.prompt(i,s);if(o===null)throw oo();if(s=o.trim(),!s){i=`${r}
218
218
 
@@ -224,7 +224,7 @@ ${n}`;}}}function Il(e,t){let r=globalThis.process,n=ve("readline");return new P
224
224
  This process remembers the ID until it exits. To stop being asked, replace "${e}" in your code with the ID.
225
225
  `),u();})}async function lo(e){let t=y.Params(e,{user_id:n=>y.UserId(n,'"user_id"')},["user_id"]);if(t?.service&&t?.owner?t={service:t?.service,owner:t?.owner,block:t.user_id}:t={block:t.user_id},!await Q.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}return await S.bind(this)("block-account",t,{auth:true})}async function co(e){let t=y.Params(e,{user_id:n=>y.UserId(n,'"user_id"')},["user_id"]);if(t?.service&&t?.owner?t={service:t?.service,owner:t?.owner,unblock:t.user_id}:t={unblock:t.user_id},!await Q.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}return await S.bind(this)("block-account",t,{auth:true})}async function uo(e){let t=y.Params(e,{user_id:n=>y.UserId(n,'"user_id"')},["user_id"]);if(t?.service&&t?.owner?t={service:t?.service,owner:t?.owner,delete:t.user_id}:t={delete:t.user_id},!await Q.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}return await S.bind(this)("remove-account",t,{auth:true})}async function fo(e,t){let r={email:s=>y.Email(s),password:s=>y.Password(s),name:"string",username:"string",gender:"string",address:s=>{if(!s)return "";if(typeof s=="string")return s;if(typeof s=="object")return JSON.stringify(s)},birthdate:s=>y.Birthdate(s),phone_number:s=>y.PhoneNumber(s),picture:s=>{if(s)return y.Url(s)},profile:s=>{if(s)return y.Url(s)},website:s=>{if(s)return y.Url(s)},nickname:"string",misc:"string",email_public:["boolean",()=>false],gender_public:["boolean",()=>false],address_public:["boolean",()=>false],birthdate_public:["boolean",()=>false],phone_number_public:["boolean",()=>false],openid_id:"string",access_group:s=>{try{typeof s=="string"&&(s=s==="admin"?99:parseInt(s));}catch{throw new a('"access_group" is invalid. Should be type <number>.',{code:"INVALID_PARAMETER"})}if(typeof s!="number"||s<1||s>100)throw new a('"access_group" is invalid. Should be type <number> of range 1~99',{code:"INVALID_PARAMETER"});return s}},n=y.Params(e,r,["email"]);if(t=y.Params(t,{confirmation_url:s=>{let o=s;if(typeof s=="string")o=y.Url(s);else throw new a('"options.confirmation_url" should be type: <string>.',{code:"INVALID_PARAMETER"});if(o&&!n.email)throw new a('"email" is required for signup confirmation.',{code:"INVALID_PARAMETER"});return o},email_subscription:s=>{if(typeof s!="boolean")throw new a('"options.email_subscription" should be type: <boolean>.',{code:"INVALID_PARAMETER"});if(!t?.confirmation_url)throw new a('"options.confirmation_url" is required for email subscription.',{code:"INVALID_PARAMETER"});return s},template:s=>{if(typeof s!="object"||!s.url||!s.subject)throw new a('"options.template" should be type: <object> with "url" and "subject".',{code:"INVALID_PARAMETER"});return {url:y.Url(s.url),subject:s.subject}}}),n.signup_confirmation=t?.confirmation_url||true,n.email_subscription=t?.email_subscription||false,n.template=t?.template||{},!await Q.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}return await S.bind(this)("admin-signup",n,{auth:true})}async function go(e){let t={email:s=>y.Email(s),password:s=>y.Password(s),openid_id:"string",name:"string",username:"string",gender:"string",address:s=>{if(!s)return "";if(typeof s=="string")return s;if(typeof s=="object")return JSON.stringify(s)},birthdate:s=>y.Birthdate(s),phone_number:s=>y.PhoneNumber(s),picture:s=>s?y.Url(s):"",profile:s=>s?y.Url(s):"",website:s=>s?y.Url(s):"",nickname:"string",misc:"string",email_public:["boolean",()=>false],gender_public:["boolean",()=>false],address_public:["boolean",()=>false],birthdate_public:["boolean",()=>false],phone_number_public:["boolean",()=>false],access_group:s=>{try{typeof s=="string"&&(s=parseInt(s));}catch{throw new a('"access_group" is invalid. Should be type <number>.',{code:"INVALID_PARAMETER"})}if(typeof s!="number"||s<1||s>100)throw new a('"access_group" is invalid. Should be type <number> of range 1~99',{code:"INVALID_PARAMETER"});return s}},r=["email","password"],n=y.Params(e,t,r);if(!await Q.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}return await S.bind(this)("admin-signup",n,{auth:true})}async function po(e){if(e=y.Params(e,{user_id:r=>y.UserId(r,'"user_id"'),access_group:r=>{try{typeof r=="string"&&(r=parseInt(r));}catch{throw new a('"access_group" is invalid. Should be type <number>.',{code:"INVALID_PARAMETER"})}if(typeof r=="number"&&r>0&&r<100)return r;throw new a('"access_group" is invalid. Should be type <number> of range 1~99',{code:"INVALID_PARAMETER"})}},["user_id","access_group"]),!await Q.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}return await S.bind(this)("grant-access",e,{auth:true})}async function ho(e,t){if(e=y.Params(e,{email:"string"}),!await Q.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}let n=await S.bind(this)("invitation-list",Object.assign({mode:"search"},e),{fetchOptions:t,auth:true});return n.list=n.list.map(i=>Ke(i.user)),n}async function mo(e){if(e=y.Params(e,{email:r=>y.Email(r)},["email"]),!await Q.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}return await S.bind(this)("invitation-list",Object.assign({mode:"cancel"},e),{auth:true})}async function yo(e){if(e=y.Params(e,{email:r=>y.Email(r)},["email"]),!await Q.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}return await S.bind(this)("invitation-list",Object.assign({mode:"resend"},e),{auth:true})}async function bo(e){let t=y.Params(e,{user_id:o=>y.UserId(o,'"user_id"'),email:o=>y.Email(o),address:o=>{if(!o)return "";if(typeof o=="string")return o;if(typeof o=="object")return JSON.stringify(o)},name:"string",gender:"string",birthdate:o=>o?y.Birthdate(o):"",phone_number:o=>o?y.PhoneNumber(o):"",misc:"string",picture:o=>o?y.Url(o):"",profile:o=>o?y.Url(o):"",nickname:"string",website:o=>o?y.Url(o):""},["user_id"]),r=t.service,n=t.owner;if(delete t.service,delete t.owner,await this.__connection,this.__user?.user_id&&t.user_id===this.__user.user_id)throw new a("Cannot modify attributes of the current user.",{code:"INVALID_REQUEST"});if(Object.keys(t).filter(o=>o!=="user_id"&&t[o]!==void 0).length===0)throw new a("At least one attribute to update is required.",{code:"INVALID_PARAMETER"});if(!await Q.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}let s={attributes:t};return r&&n&&(s.service=r,s.owner=n),await S.bind(this)("admin-edit-profile",s,{auth:true})}async function _o(e){if(typeof window>"u"||window._runningInNodeJS)throw new a("Push Notifications are not supported in Node.js environment.",{code:"NOT_SUPPORTED"});if(await this.__connection,!e.endpoint)throw new a("Missing parameter: endpoint",{code:"INVALID_PARAMETER"});if(!e.keys||!e.keys.p256dh||!e.keys.auth)throw new a("Missing parameter: keys.p256dh or keys.auth",{code:"INVALID_PARAMETER"});return await S.bind(this)("store-subscription",{endpoint:e.endpoint,keys:e.keys},{auth:true}),"SUCCESS: Subscribed to receive notifications."}async function wo(e){if(typeof window>"u"||window._runningInNodeJS)throw new a("Push Notifications are not supported in Node.js environment.",{code:"NOT_SUPPORTED"});if(await this.__connection,!e.endpoint)throw new a("Missing parameter: endpoint",{code:"INVALID_PARAMETER"});if(!e.keys||!e.keys.p256dh||!e.keys.auth)throw new a("Missing parameter: keys.p256dh or keys.auth",{code:"INVALID_PARAMETER"});return await S.bind(this)("delete-subscription",{endpoint:e.endpoint,keys:e.keys},{auth:true}),"SUCCESS: Unsubscribed from notifications."}async function Eo(){if(typeof window>"u"||window._runningInNodeJS)throw new a("Push Notifications are not supported in Node.js environment.",{code:"NOT_SUPPORTED"});return await this.__connection,{VAPIDPublicKey:await S.bind(this)("get-vapid-public-key",null,{auth:true})}}async function Ao(e,t){if(typeof window>"u"||window._runningInNodeJS)throw new a("Push Notifications are not supported in Node.js environment.",{code:"NOT_SUPPORTED"});await this.__connection;let{title:r,body:n}=j(e||{},{nullIfEmpty:true}).data;if(!r)throw new a("Missing parameter: message title",{code:"INVALID_PARAMETER"});if(!n)throw new a("Missing parameter: message body",{code:"INVALID_PARAMETER"});let i={title:r,body:n};return t?(typeof t=="string"&&(t=[t]),i.user_ids=t):i.user_ids="all_users",await S.bind(this)("push-notification",i,{auth:true}),"SUCCESS: Notification sent."}async function Ro(e){await this.__connection,e=y.Params(e,{spell:"string",name:"string",magic:r=>r},["spell","name"]);await S.bind(this)("castspell",e);return `The spell "${e.spell}" has been cast.`}async function To(e){return await this.__connection,e=y.Params(e||{},{search:["spell","name",()=>"spell"],value:"string"}),await S.bind(this)("getspell",e)}async function Io(e){await this.__connection,e=y.Params(e,{message:"string",name:"string"},["message","name"]);let t=await S.bind(this)("dopamine",e,{auth:true}),r=t?.previous_message?.message,n=t?.previous_message?.name;if(H())r&&n&&window.alert(`${n} said: ${r}`),window.location.href=t.video;else return r&&n?`${n} said: ${r}
226
226
  Watch the video here: ${t.video}`:`Your message has been uploaded for future generations to receive.
227
- Watch the video here: ${t.video}`}var T=class{constructor(t,r,n,i){this.__version="2.2.8";this.project_id="";this.session=null;this.connection=null;this.__my_unique_ids={};this.__uniqueIdsPersistTimer=null;this.userPool=null;this.__socket=null;this.__mediaStream=null;this.host="skapi";this.hostDomain="skapi.com";this.target_cdn="d3e9syvbtso631";this.customApiDomain="skapi.dev";this.requestBatchSize=50;this.__disabledAccount=null;this.__cached_requests={};this.__startKeyHistory={};this.__request_signup_confirmation=null;this.__private_access_key={};this.__class_properties_has_been_cached=false;this.__user=null;this._userProfileListeners=[];this._onLoginListeners=[];this._onBatchProcessListeners=[];this.validate={userId(t){try{return y.UserId(t),!0}catch{return false}},url(t){try{return y.Url(t),!0}catch{return false}},phoneNumber(t){try{return y.PhoneNumber(t),!0}catch{return false}},birthdate(t){try{return y.Birthdate(t),!0}catch{return false}},email(t){try{return y.Email(t),!0}catch{return false}},params(t,r,n){return y.Params(t,r,n)}};this.util={MD5:Z,generateRandom:Te,toBase62:tn,fromBase62:se,decodeProjectId:Jt,formatServiceId:Yt,extractFormData:j,terminatePendingRequests:Ui,request:(t,r,n)=>S.bind(this)(t,r,n,{ignoreService:true})};this.__projectIdInput=null;this.__network_logs=false;this.__endpoint_version="v2";this.__public_identifier="";this.bearerToken="";this.registerTicket=li.bind(this);this.unregisterTicket=ci.bind(this);if(!t||typeof t!="string")throw this._alert("Service ID is required."),new a("Service ID is required.",{code:"INVALID_PARAMETER"});if(ro(t)){let o=no(),l=null;if(o)try{l=this._resolveProject(o,r,n,i);}catch{$t(o);}if(l)H()&&console.info(`Skapi: "${t}" was replaced with the Project ID entered earlier in this tab (${o}). It is kept in sessionStorage under "${$e}"; delete that entry to enter a different one.`),this._start(l),this.__connection.catch(()=>$t(o));else if(so())this._startAfterProjectIdInput(t,r,n,i);else throw this._alert(`Replace "${t}" with your actual Project ID.`),new a("Project ID is required.",{code:"INVALID_PARAMETER"});return}let s;try{s=this._resolveProject(t,r,n,i);}catch(o){throw this._alert(o.message),o}this._start(s);}get user(){return this.__user&&Object.keys(this.__user).length?JSON.parse(JSON.stringify(this.__user)):null}set user(t){}get onLogin(){return this._onLoginListeners}set onLogin(t){typeof t=="function"&&this._onLoginListeners.push(t);}get onUserUpdate(){return this._userProfileListeners}set onUserUpdate(t){typeof t=="function"&&this._userProfileListeners.push(t);}_runOnUserUpdateListeners(t){for(let r of this._userProfileListeners)typeof r=="function"&&r(t);}_runOnLoginListeners(t){for(let r of this._onLoginListeners)typeof r=="function"&&r(t);}get onBatchProcess(){return this._onBatchProcessListeners}set onBatchProcess(t){typeof t=="function"&&this._onBatchProcessListeners.push(t);}_alert(t){H()&&typeof window.alert=="function"&&window.alert(t);}_resolveProject(t,r,n,i){let s=t.split("-").length;if(s===2||s===7)try{let u=Jt(t);n&&typeof n=="object"&&(i=n),r&&typeof r=="object"&&(n=r),r=u.owner,t=u.service;}catch{throw new a("Service ID is invalid.",{code:"INVALID_PARAMETER"})}if(!r||typeof r!="string")throw new a("Owner ID is invalid.",{code:"INVALID_PARAMETER"});if(r!==this.host)try{y.UserId(r,'"owner"');}catch{throw new a("Owner ID is invalid.",{code:"INVALID_PARAMETER"})}return {service:t,owner:r,options:n,__etc:i}}_startAfterProjectIdInput(t,r,n,i){let s=ao(t,o=>{this._resolveProject(o,r,n,i);}).then(o=>{io(o),this._start(this._resolveProject(o,r,n,i)),this.__connection.catch(()=>$t(o));});this.__projectIdInput=s,this.admin_endpoint=s.then(()=>this.admin_endpoint),this.record_endpoint=s.then(()=>this.record_endpoint),this.__authConnection=s.then(()=>this.__authConnection),this.__connection=s.then(()=>this.__connection);for(let o of [s,this.admin_endpoint,this.record_endpoint,this.__authConnection,this.__connection])o.catch(()=>{});}_start({service:t,owner:r,options:n,__etc:i}){this.service=t,this.owner=r;try{this.project_id=Yt(t,r);}catch{this.project_id="";}let s=true,o=false,l=null;if(n&&(typeof n.refetchServiceInfo=="boolean"&&(o=n.refetchServiceInfo),typeof n.autoLogin=="boolean"&&(s=n.autoLogin),n.encryption&&(l=In(n.encryption)),typeof n.requestBatchSize=="number")){if(n.requestBatchSize<1)throw new a('"requestBatchSize" must be greater than 0.',{code:"INVALID_PARAMETER"});this.requestBatchSize=n.requestBatchSize;}n?.eventListener&&typeof n.eventListener=="object"&&(n.eventListener?.onLogin&&typeof n.eventListener.onLogin=="function"&&(this.onLogin=n.eventListener.onLogin),n.eventListener?.onUserUpdate&&typeof n.eventListener.onUserUpdate=="function"&&(this.onUserUpdate=n.eventListener.onUserUpdate),n.eventListener?.onBatchProcess&&typeof n.eventListener.onBatchProcess=="function"&&(this.onBatchProcess=n.eventListener.onBatchProcess)),this.target_cdn=i?.target_cdn||this.target_cdn,this.hostDomain=i?.hostDomain||this.hostDomain,this.customApiDomain=i?.customApiDomain||this.customApiDomain,this.__network_logs=!!i?.network_logs;let u=`https://${this.target_cdn}.cloudfront.net`,c=t.substring(0,4);this.admin_endpoint=fetch(`${u}/${c}/admin-${this.__endpoint_version}.json`).then(h=>h.blob()).then(h=>new Promise((m,_)=>{let b=new FileReader;b.onloadend=()=>m(b.result),b.onerror=_,b.readAsDataURL(h);})).then(h=>{try{return typeof h=="string"?JSON.parse(atob(h.split(",")[1])):null}catch{throw new a("Service does not exist. Create your service from skapi.com",{code:"NOT_EXISTS"})}}),this.record_endpoint=fetch(`${u}/${c}/record-${this.__endpoint_version}.json`).then(h=>h.blob()).then(h=>new Promise((m,_)=>{let b=new FileReader;b.onloadend=()=>m(b.result),b.onerror=_,b.readAsDataURL(h);})).then(h=>{try{return typeof h=="string"?JSON.parse(atob(h.split(",")[1])):null}catch{throw new a("Service does not exist. Create your service from skapi.com",{code:"NOT_EXISTS"})}});let f=H();if(f&&!window.sessionStorage)throw this._alert("This browser is not supported."),new Error("This browser is not supported.");let g=f?JSON.parse(window.sessionStorage.getItem(`${t}#${r}`)||"null"):null;if(this.log("constructor:restore",g),g?.connection){for(let h in g)this[h]=g[h];g.__public_identifier||(this.__public_identifier=`${this.service}:${this.owner}:${Te(16)}`);}Pn.bind(this)(l),this.__authConnection=(async()=>{let h=await this.admin_endpoint,m={UserPoolId:h.userpool_id,ClientId:h.userpool_client};zt()&&(m.Storage=window.localStorage),this.userPool=new CognitoUserPool(m);try{this.user||await W.bind(this)().getSession({skipUserUpdateEventTrigger:!0}),this.user&&(!g?.connection&&!s?be.bind(this)():(l&&Hn.bind(this)(),this._runOnLoginListeners(this.user),this._runOnUserUpdateListeners(this.user)));}catch{}})();let d=`${this.service}/${this.owner}`,p=f?window.sessionStorage.getItem(`${d}:uniqueids`):null;if(p)try{let h=JSON.parse(p);this.__my_unique_ids=h&&typeof h=="object"&&!Array.isArray(h)?{[d]:h}:{};}catch{this.__my_unique_ids={};}this.__connection=(async()=>{let h=null;await this.record_endpoint,g?.connection||(h=this._updateConnection({refresh:o}));let m=()=>{if(this.__class_properties_has_been_cached)return;let _=()=>{let b={},A=["__startKeyHistory","__disabledAccount","__cached_requests","__request_signup_confirmation","__public_identifier","connection"];if(this.connection){for(let w of A)b[w]=this[w];if(l&&(b.__cached_requests={},b.__startKeyHistory={}),f){let w=`${t}#${r}`;try{window.sessionStorage.setItem(w,JSON.stringify(b));}catch{try{let E=Object.assign({},b,{__cached_requests:{},__startKeyHistory:{}});window.sessionStorage.setItem(w,JSON.stringify(E));}catch{try{window.sessionStorage.removeItem(w);}catch{}}}}this.__class_properties_has_been_cached=true;}};return h instanceof Promise?h.then(()=>_()):_()};return f&&(window.addEventListener("beforeunload",()=>{this.closeRealtime(),m();}),window.addEventListener("visibilitychange",()=>{m();})),await h,await this.__authConnection,this.connection})(),this.__connection.then(h=>{((h?.group||0)<3||this.__network_logs)&&this.version();}).catch(()=>{});}async getConnectionInfo(t){t?.refresh&&(this.__connection instanceof Promise&&await this.__connection,this.__connection=this._updateConnection({refresh:true}));let n=await this.__connection,i=n?.user_agent||(H()&&typeof window.navigator?.userAgent=="string"?window.navigator.userAgent:`skapi-node/${globalThis?.process?.versions?.node||"unknown"}`);return {project_id:this.project_id,user_ip:n.ip,user_agent:i,user_location:n.locale,service_name:n.service_name,version:this.__version,service_description:n?.service_description||"",ai_agent:n?.ai_agent||"",conf:n?.opt}}async _updateConnection(t){let r=t?.refresh||false;try{this.connection=await S.bind(this)("service",{service:this.service,owner:this.owner,refresh:r},{bypassAwaitConnection:!0,method:"get"});}catch(n){throw this.log("connection fail",n),this._alert("Service is not available: "+(n.message||n.toString())),this.connection=null,n}return this.connection}async version(){if(await this.__connection,H()){let r=`Built with:
227
+ Watch the video here: ${t.video}`}var T=class{constructor(t,r,n,i){this.__version="2.2.10";this.project_id="";this.session=null;this.connection=null;this.__my_unique_ids={};this.__uniqueIdsPersistTimer=null;this.userPool=null;this.__socket=null;this.__mediaStream=null;this.host="skapi";this.hostDomain="skapi.com";this.target_cdn="d3e9syvbtso631";this.customApiDomain="skapi.dev";this.requestBatchSize=50;this.__disabledAccount=null;this.__cached_requests={};this.__startKeyHistory={};this.__request_signup_confirmation=null;this.__private_access_key={};this.__class_properties_has_been_cached=false;this.__user=null;this._userProfileListeners=[];this._onLoginListeners=[];this._onBatchProcessListeners=[];this.validate={userId(t){try{return y.UserId(t),!0}catch{return false}},url(t){try{return y.Url(t),!0}catch{return false}},phoneNumber(t){try{return y.PhoneNumber(t),!0}catch{return false}},birthdate(t){try{return y.Birthdate(t),!0}catch{return false}},email(t){try{return y.Email(t),!0}catch{return false}},params(t,r,n){return y.Params(t,r,n)}};this.util={MD5:Z,generateRandom:Te,toBase62:tn,fromBase62:se,decodeProjectId:Yt,formatServiceId:Xt,extractFormData:j,terminatePendingRequests:Ui,request:(t,r,n)=>S.bind(this)(t,r,n,{ignoreService:true})};this.__projectIdInput=null;this.__network_logs=false;this.__endpoint_version="v2";this.__public_identifier="";this.bearerToken="";this.registerTicket=li.bind(this);this.unregisterTicket=ci.bind(this);if(!t||typeof t!="string")throw this._alert("Service ID is required."),new a("Service ID is required.",{code:"INVALID_PARAMETER"});if(ro(t)){let o=no(),l=null;if(o)try{l=this._resolveProject(o,r,n,i);}catch{Bt(o);}if(l)H()&&console.info(`Skapi: "${t}" was replaced with the Project ID entered earlier in this tab (${o}). It is kept in sessionStorage under "${$e}"; delete that entry to enter a different one.`),this._start(l),this.__connection.catch(()=>Bt(o));else if(so())this._startAfterProjectIdInput(t,r,n,i);else throw this._alert(`Replace "${t}" with your actual Project ID.`),new a("Project ID is required.",{code:"INVALID_PARAMETER"});return}let s;try{s=this._resolveProject(t,r,n,i);}catch(o){throw this._alert(o.message),o}this._start(s);}get user(){return this.__user&&Object.keys(this.__user).length?JSON.parse(JSON.stringify(this.__user)):null}set user(t){}get onLogin(){return this._onLoginListeners}set onLogin(t){typeof t=="function"&&this._onLoginListeners.push(t);}get onUserUpdate(){return this._userProfileListeners}set onUserUpdate(t){typeof t=="function"&&this._userProfileListeners.push(t);}_runOnUserUpdateListeners(t){for(let r of this._userProfileListeners)typeof r=="function"&&r(t);}_runOnLoginListeners(t){for(let r of this._onLoginListeners)typeof r=="function"&&r(t);}get onBatchProcess(){return this._onBatchProcessListeners}set onBatchProcess(t){typeof t=="function"&&this._onBatchProcessListeners.push(t);}_alert(t){H()&&typeof window.alert=="function"&&window.alert(t);}_resolveProject(t,r,n,i){let s=t.split("-").length;if(s===2||s===7)try{let u=Yt(t);n&&typeof n=="object"&&(i=n),r&&typeof r=="object"&&(n=r),r=u.owner,t=u.service;}catch{throw new a("Service ID is invalid.",{code:"INVALID_PARAMETER"})}if(!r||typeof r!="string")throw new a("Owner ID is invalid.",{code:"INVALID_PARAMETER"});if(r!==this.host)try{y.UserId(r,'"owner"');}catch{throw new a("Owner ID is invalid.",{code:"INVALID_PARAMETER"})}return {service:t,owner:r,options:n,__etc:i}}_startAfterProjectIdInput(t,r,n,i){let s=ao(t,o=>{this._resolveProject(o,r,n,i);}).then(o=>{io(o),this._start(this._resolveProject(o,r,n,i)),this.__connection.catch(()=>Bt(o));});this.__projectIdInput=s,this.admin_endpoint=s.then(()=>this.admin_endpoint),this.record_endpoint=s.then(()=>this.record_endpoint),this.__authConnection=s.then(()=>this.__authConnection),this.__connection=s.then(()=>this.__connection);for(let o of [s,this.admin_endpoint,this.record_endpoint,this.__authConnection,this.__connection])o.catch(()=>{});}_start({service:t,owner:r,options:n,__etc:i}){this.service=t,this.owner=r;try{this.project_id=Xt(t,r);}catch{this.project_id="";}let s=true,o=false,l=null;if(n&&(typeof n.refetchServiceInfo=="boolean"&&(o=n.refetchServiceInfo),typeof n.autoLogin=="boolean"&&(s=n.autoLogin),n.encryption&&(l=In(n.encryption)),typeof n.requestBatchSize=="number")){if(n.requestBatchSize<1)throw new a('"requestBatchSize" must be greater than 0.',{code:"INVALID_PARAMETER"});this.requestBatchSize=n.requestBatchSize;}n?.eventListener&&typeof n.eventListener=="object"&&(n.eventListener?.onLogin&&typeof n.eventListener.onLogin=="function"&&(this.onLogin=n.eventListener.onLogin),n.eventListener?.onUserUpdate&&typeof n.eventListener.onUserUpdate=="function"&&(this.onUserUpdate=n.eventListener.onUserUpdate),n.eventListener?.onBatchProcess&&typeof n.eventListener.onBatchProcess=="function"&&(this.onBatchProcess=n.eventListener.onBatchProcess)),this.target_cdn=i?.target_cdn||this.target_cdn,this.hostDomain=i?.hostDomain||this.hostDomain,this.customApiDomain=i?.customApiDomain||this.customApiDomain,this.__network_logs=!!i?.network_logs;let u=`https://${this.target_cdn}.cloudfront.net`,c=t.substring(0,4);this.admin_endpoint=fetch(`${u}/${c}/admin-${this.__endpoint_version}.json`).then(h=>h.blob()).then(h=>new Promise((m,_)=>{let b=new FileReader;b.onloadend=()=>m(b.result),b.onerror=_,b.readAsDataURL(h);})).then(h=>{try{return typeof h=="string"?JSON.parse(atob(h.split(",")[1])):null}catch{throw new a("Service does not exist. Create your service from skapi.com",{code:"NOT_EXISTS"})}}),this.record_endpoint=fetch(`${u}/${c}/record-${this.__endpoint_version}.json`).then(h=>h.blob()).then(h=>new Promise((m,_)=>{let b=new FileReader;b.onloadend=()=>m(b.result),b.onerror=_,b.readAsDataURL(h);})).then(h=>{try{return typeof h=="string"?JSON.parse(atob(h.split(",")[1])):null}catch{throw new a("Service does not exist. Create your service from skapi.com",{code:"NOT_EXISTS"})}});let f=H();if(f&&!window.sessionStorage)throw this._alert("This browser is not supported."),new Error("This browser is not supported.");let g=f?JSON.parse(window.sessionStorage.getItem(`${t}#${r}`)||"null"):null;if(this.log("constructor:restore",g),g?.connection){for(let h in g)this[h]=g[h];g.__public_identifier||(this.__public_identifier=`${this.service}:${this.owner}:${Te(16)}`);}Pn.bind(this)(l),this.__authConnection=(async()=>{let h=await this.admin_endpoint,m={UserPoolId:h.userpool_id,ClientId:h.userpool_client};Jt()&&(m.Storage=window.localStorage),this.userPool=new CognitoUserPool(m);try{this.user||await W.bind(this)().getSession({skipUserUpdateEventTrigger:!0}),this.user&&(!g?.connection&&!s?be.bind(this)():(l&&Hn.bind(this)(),this._runOnLoginListeners(this.user),this._runOnUserUpdateListeners(this.user)));}catch{}})();let d=`${this.service}/${this.owner}`,p=f?window.sessionStorage.getItem(`${d}:uniqueids`):null;if(p)try{let h=JSON.parse(p);this.__my_unique_ids=h&&typeof h=="object"&&!Array.isArray(h)?{[d]:h}:{};}catch{this.__my_unique_ids={};}this.__connection=(async()=>{let h=null;await this.record_endpoint,g?.connection||(h=this._updateConnection({refresh:o}));let m=()=>{if(this.__class_properties_has_been_cached)return;let _=()=>{let b={},A=["__startKeyHistory","__disabledAccount","__cached_requests","__request_signup_confirmation","__public_identifier","connection"];if(this.connection){for(let w of A)b[w]=this[w];if(l&&(b.__cached_requests={},b.__startKeyHistory={}),f){let w=`${t}#${r}`;try{window.sessionStorage.setItem(w,JSON.stringify(b));}catch{try{let E=Object.assign({},b,{__cached_requests:{},__startKeyHistory:{}});window.sessionStorage.setItem(w,JSON.stringify(E));}catch{try{window.sessionStorage.removeItem(w);}catch{}}}}this.__class_properties_has_been_cached=true;}};return h instanceof Promise?h.then(()=>_()):_()};return f&&(window.addEventListener("beforeunload",()=>{this.closeRealtime(),m();}),window.addEventListener("visibilitychange",()=>{m();})),await h,await this.__authConnection,this.connection})(),this.__connection.then(h=>{((h?.group||0)<3||this.__network_logs)&&this.version();}).catch(()=>{});}async getConnectionInfo(t){t?.refresh&&(this.__connection instanceof Promise&&await this.__connection,this.__connection=this._updateConnection({refresh:true}));let n=await this.__connection,i=n?.user_agent||(H()&&typeof window.navigator?.userAgent=="string"?window.navigator.userAgent:`skapi-node/${globalThis?.process?.versions?.node||"unknown"}`);return {project_id:this.project_id,user_ip:n.ip,user_agent:i,user_location:n.locale,service_name:n.service_name,version:this.__version,service_description:n?.service_description||"",ai_agent:n?.ai_agent||"",conf:n?.opt}}async _updateConnection(t){let r=t?.refresh||false;try{this.connection=await S.bind(this)("service",{service:this.service,owner:this.owner,refresh:r},{bypassAwaitConnection:!0,method:"get"});}catch(n){throw this.log("connection fail",n),this._alert("Service is not available: "+(n.message||n.toString())),this.connection=null,n}return this.connection}async version(){if(await this.__connection,H()){let r=`Built with:
228
228
  %c\r
229
229
  ##\\ ##\\ \r
230
230
  ## | \\__|\r
@@ -237,5 +237,5 @@ Watch the video here: ${t.video}`}var T=class{constructor(t,r,n,i){this.__versio
237
237
  ## | \r
238
238
  ## | \r
239
239
  \\__| \r
240
- Version: ${this.__version}`;console.log(r,"font-family: monospace; color:blue;"),this.connection.group===1&&console.log("%cSKAPI: THE SERVICE IS IN TRIAL MODE.","font-family: monospace; color:red;");}return this.__version}log(t,r){if(this.__network_logs){if(r!==null&&typeof r=="object")try{H()?r=JSON.parse(JSON.stringify(r)):r=JSON.stringify(r,null,2);}catch{r=String(r);}else typeof r=="string"&&r.length>100&&(r=r.substring(0,100)+"...");console.log(`%c${t}:`,"color: blue;",r);}}getFeed(t,r){return Bs.bind(this)(t,r)}closeRTC(t){return ue.bind(this)(t)}connectRTC(t,r){return ls.bind(this)(t,r)}connectRealtime(t){return Ve.bind(this)(t)}spellcast(t){return Ro.bind(this)(t)}getspell(t){return To.bind(this)(t)}dopamine(t){return Io.bind(this)(t)}getUniqueId(t,r){return Yi.bind(this)(t,r)}resendInvitation(t){return yo.bind(this)(t)}cancelInvitation(t){return mo.bind(this)(t)}getInvitations(t,r){return ho.bind(this)(t,r)}openIdLogin(t){return di.bind(this)(t)}loginWithToken(t){return fi.bind(this)(t)}registerNewsletterGroup(t){return Ys.bind(this)(t)}deleteNewsletterGroup(t){return Xs.bind(this)(t)}clientSecretRequest(t){return xs.bind(this)(t)}clientSecretRequestHistory(t,r){return Br.bind(this)(t,r)}clientSecretRequestStream(t,r){return Hr.bind(this)(t,r)}clientSecretRequestFinalize(t,r,n){return Gr.bind(this)(t,r,n)}cancelClientSecretRequest(t){return Kr.bind(this)(t)}stopClientSecretPolling(t){return jt.bind(this)(t||{})}isPollStopped(t){return jr(t)}clientSecretRequestQueueCount(t){return $r.bind(this)(t)}forwardRequestHistory(t,r){return Ls.bind(this)(t,r)}forwardRequestStream(t,r){return Cs.bind(this)(t,r)}forwardRequestFinalize(t,r,n){return Os.bind(this)(t,r,n)}cancelForwardRequest(t){return Ms.bind(this)(t)}stopForwardRequestPolling(t){return Fs.bind(this)(t||{})}forwardRequestQueueCount(t){return qs.bind(this)(t)}consumeTicket(t){return ii.bind(this)(t)}getConsumedTickets(t,r){return ai.bind(this)(t,r)}getTickets(t,r){return si.bind(this)(t,r)}clearTicketLog(t){return oi.bind(this)(t)}closeRealtime(){return Ft.bind(this)()}getRealtimeUsers(t,r){return ps.bind(this)(t,r)}sendInquiry(t){return Vs.bind(this)(t)}blockAccount(t){return lo.bind(this)(t)}unblockAccount(t){return co.bind(this)(t)}deleteAccount(t){return uo.bind(this)(t)}inviteUser(t,r){return fo.bind(this)(t,r)}createAccount(t){return go.bind(this)(t)}grantAccess(t){return po.bind(this)(t)}updateUserAttributes(t){return bo.bind(this)(t)}getRealtimeGroups(t,r){return hs.bind(this)(t,r)}newsletterGroupEndpoint(){return Zs.bind(this)()}postRealtime(t,r,n){return gs.bind(this)(t,r,n)}joinRealtime(t){return je.bind(this)(t)}getProfile(t){return ui.bind(this)(t)}getFile(t,r){return _e.bind(this)(t,r)}secureRequest(t,r){return js.bind(this)(t,r)}forwardRequest(t,r){return Us.bind(this)(t,r)}getFormResponse(){return Ci.bind(this)()}getRecords(t,r){return Wi.bind(this)(t,r)}getTables(t,r){return Qi.bind(this)(t,r)}getIndexes(t,r){return zi.bind(this)(t,r)}getTags(t,r){return Ji.bind(this)(t,r)}deleteRecords(t,r){return Xi.bind(this)(t,r)}resendSignupConfirmation(){return gi.bind(this)()}recoverAccount(t=false){return pi.bind(this)(t)}getUsers(t,r){return Ti.bind(this)(t,r)}disableAccount(){return mi.bind(this)()}lastVerifiedEmail(t){return Ii.bind(this)(t)}unsubscribeNewsletter(t){return eo.bind(this)(t)}subscribeNotification(t,r){return _o.bind(this)({endpoint:t,keys:r})}unsubscribeNotification(t,r){return wo.bind(this)({endpoint:t,keys:r})}vapidPublicKey(){return Eo.bind(this)()}pushNotification(t,r){return Ao.bind(this)(t,r)}getNewsletters(t,r){return to.bind(this)(t,r)}getNewsletterSubscription(t,r){return zs.bind(this)(t,r)}getEncryptionStatus(){return Sn.bind(this)()}isWithheld(t){return dr.call(this,t)}unlockEncryption(t){return Vn.bind(this)(t)}lockEncryption(t){return jn.bind(this)(t)}takeRecoveryCode(){return Jn.bind(this)()}unlockWithRecoveryCode(t){return Yn.bind(this)(t)}regenerateRecoveryCode(){return Xn.bind(this)()}pinPeerKey(t){return Qn.bind(this)(t)}grantPrivateRecordAccess(t){return Zi.bind(this)(t)}removePrivateRecordAccess(t){return es.bind(this)(t)}listPrivateRecordAccess(t,r){return ts.bind(this)(t,r)}requestPrivateRecordAccessKey(t){return rs.bind(this)(t)}deleteFiles(t){return Bi.bind(this)(t)}uploadFiles(t,r){return it.bind(this)(t,r)}mock(t,r){return $s.bind(this)(t,r)}login(t){return Tr.bind(this)(t)}logout(t){return tt.bind(this)(t)}signup(t,r){return hi.bind(this)(t,r)}resetPassword(t){return yi.bind(this)(t)}verifyEmail(t,r){return wi.bind(this)(t,r)}verifyPhoneNumber(t,r){return _i.bind(this)(t,r)}forgotPassword(t,r){return Ei.bind(this)(t,r)}changePassword(t){return Ai.bind(this)(t)}updateProfile(t){return Ri.bind(this)(t)}postRecord(t,r,n){return Or.bind(this)(t,r,n)}postRecords(t){return is.bind(this)(t)}getSubscriptions(t,r){return Ks.bind(this)(t,r)}subscribe(t){return Hs.bind(this)(t)}unsubscribe(t){return Gs.bind(this)(t)}blockSubscriber(t){return Ws.bind(this)(t)}unblockSubscriber(t){return Qs.bind(this)(t)}subscribeNewsletter(t){return Js.bind(this)(t)}bulkPostRecords(t){return Cr.bind(this)(t)}};P([k()],T.prototype,"getFeed"),P([k()],T.prototype,"closeRTC"),P([k()],T.prototype,"connectRTC"),P([k()],T.prototype,"spellcast"),P([k()],T.prototype,"getspell"),P([k()],T.prototype,"dopamine"),P([k()],T.prototype,"getUniqueId"),P([k()],T.prototype,"resendInvitation"),P([k()],T.prototype,"cancelInvitation"),P([k()],T.prototype,"getInvitations"),P([k()],T.prototype,"openIdLogin"),P([k()],T.prototype,"loginWithToken"),P([k()],T.prototype,"registerNewsletterGroup"),P([k()],T.prototype,"deleteNewsletterGroup"),P([k()],T.prototype,"clientSecretRequest"),P([k()],T.prototype,"clientSecretRequestHistory"),P([k()],T.prototype,"cancelClientSecretRequest"),P([k()],T.prototype,"forwardRequestHistory"),P([k()],T.prototype,"cancelForwardRequest"),P([k()],T.prototype,"consumeTicket"),P([k()],T.prototype,"getConsumedTickets"),P([k()],T.prototype,"getTickets"),P([k()],T.prototype,"clearTicketLog"),P([k()],T.prototype,"getRealtimeUsers"),P([k()],T.prototype,"sendInquiry"),P([k()],T.prototype,"blockAccount"),P([k()],T.prototype,"unblockAccount"),P([k()],T.prototype,"deleteAccount"),P([k()],T.prototype,"inviteUser"),P([k()],T.prototype,"createAccount"),P([k()],T.prototype,"grantAccess"),P([k()],T.prototype,"updateUserAttributes"),P([k()],T.prototype,"getRealtimeGroups"),P([k()],T.prototype,"newsletterGroupEndpoint"),P([k()],T.prototype,"postRealtime"),P([k()],T.prototype,"joinRealtime"),P([k()],T.prototype,"getProfile"),P([k()],T.prototype,"getFile"),P([k()],T.prototype,"secureRequest"),P([k()],T.prototype,"forwardRequest"),P([k()],T.prototype,"getFormResponse"),P([k()],T.prototype,"getRecords"),P([k()],T.prototype,"getTables"),P([k()],T.prototype,"getIndexes"),P([k()],T.prototype,"getTags"),P([k()],T.prototype,"deleteRecords"),P([k()],T.prototype,"resendSignupConfirmation"),P([k()],T.prototype,"recoverAccount"),P([k()],T.prototype,"getUsers"),P([k()],T.prototype,"disableAccount"),P([k()],T.prototype,"lastVerifiedEmail"),P([k()],T.prototype,"unsubscribeNewsletter"),P([k()],T.prototype,"subscribeNotification"),P([k()],T.prototype,"unsubscribeNotification"),P([k()],T.prototype,"vapidPublicKey"),P([k()],T.prototype,"pushNotification"),P([k()],T.prototype,"getNewsletters"),P([k()],T.prototype,"getNewsletterSubscription"),P([k()],T.prototype,"unlockEncryption"),P([k()],T.prototype,"unlockWithRecoveryCode"),P([k()],T.prototype,"grantPrivateRecordAccess"),P([k()],T.prototype,"removePrivateRecordAccess"),P([k()],T.prototype,"listPrivateRecordAccess"),P([k()],T.prototype,"requestPrivateRecordAccessKey"),P([k()],T.prototype,"deleteFiles"),P([k()],T.prototype,"uploadFiles"),P([k()],T.prototype,"mock"),P([k({preventMultipleCalls:true})],T.prototype,"login"),P([k()],T.prototype,"logout"),P([k({preventMultipleCalls:true})],T.prototype,"signup"),P([k({preventMultipleCalls:true})],T.prototype,"resetPassword"),P([k({preventMultipleCalls:true})],T.prototype,"verifyEmail"),P([k({preventMultipleCalls:true})],T.prototype,"verifyPhoneNumber"),P([k({preventMultipleCalls:true})],T.prototype,"forgotPassword"),P([k({preventMultipleCalls:true})],T.prototype,"changePassword"),P([k({preventMultipleCalls:true})],T.prototype,"updateProfile"),P([k()],T.prototype,"postRecord"),P([k()],T.prototype,"getSubscriptions"),P([k()],T.prototype,"subscribe"),P([k()],T.prototype,"unsubscribe"),P([k()],T.prototype,"blockSubscriber"),P([k()],T.prototype,"unblockSubscriber"),P([k()],T.prototype,"subscribeNewsletter");var Sl={};export{T as Skapi,a as SkapiError,Sl as Types};//# sourceMappingURL=skapi.mjs.map
240
+ Version: ${this.__version}`;console.log(r,"font-family: monospace; color:blue;"),this.connection.group===1&&console.log("%cSKAPI: THE SERVICE IS IN TRIAL MODE.","font-family: monospace; color:red;");}return this.__version}log(t,r){if(this.__network_logs){if(r!==null&&typeof r=="object")try{H()?r=JSON.parse(JSON.stringify(r)):r=JSON.stringify(r,null,2);}catch{r=String(r);}else typeof r=="string"&&r.length>100&&(r=r.substring(0,100)+"...");console.log(`%c${t}:`,"color: blue;",r);}}getFeed(t,r){return Bs.bind(this)(t,r)}closeRTC(t){return ue.bind(this)(t)}connectRTC(t,r){return ls.bind(this)(t,r)}connectRealtime(t){return Ve.bind(this)(t)}spellcast(t){return Ro.bind(this)(t)}getspell(t){return To.bind(this)(t)}dopamine(t){return Io.bind(this)(t)}getUniqueId(t,r){return Yi.bind(this)(t,r)}resendInvitation(t){return yo.bind(this)(t)}cancelInvitation(t){return mo.bind(this)(t)}getInvitations(t,r){return ho.bind(this)(t,r)}openIdLogin(t){return di.bind(this)(t)}loginWithToken(t){return fi.bind(this)(t)}registerNewsletterGroup(t){return Ys.bind(this)(t)}deleteNewsletterGroup(t){return Xs.bind(this)(t)}clientSecretRequest(t){return xs.bind(this)(t)}clientSecretRequestHistory(t,r){return Br.bind(this)(t,r)}clientSecretRequestStream(t,r){return Hr.bind(this)(t,r)}clientSecretRequestFinalize(t,r,n){return Gr.bind(this)(t,r,n)}cancelClientSecretRequest(t){return Kr.bind(this)(t)}stopClientSecretPolling(t){return $t.bind(this)(t||{})}isPollStopped(t){return jr(t)}clientSecretRequestQueueCount(t){return $r.bind(this)(t)}forwardRequestHistory(t,r){return Ls.bind(this)(t,r)}forwardRequestStream(t,r){return Cs.bind(this)(t,r)}forwardRequestFinalize(t,r,n){return Os.bind(this)(t,r,n)}cancelForwardRequest(t){return Ms.bind(this)(t)}stopForwardRequestPolling(t){return Fs.bind(this)(t||{})}forwardRequestQueueCount(t){return qs.bind(this)(t)}consumeTicket(t){return ii.bind(this)(t)}getConsumedTickets(t,r){return ai.bind(this)(t,r)}getTickets(t,r){return si.bind(this)(t,r)}clearTicketLog(t){return oi.bind(this)(t)}closeRealtime(){return qt.bind(this)()}getRealtimeUsers(t,r){return ps.bind(this)(t,r)}sendInquiry(t){return Vs.bind(this)(t)}blockAccount(t){return lo.bind(this)(t)}unblockAccount(t){return co.bind(this)(t)}deleteAccount(t){return uo.bind(this)(t)}inviteUser(t,r){return fo.bind(this)(t,r)}createAccount(t){return go.bind(this)(t)}grantAccess(t){return po.bind(this)(t)}updateUserAttributes(t){return bo.bind(this)(t)}getRealtimeGroups(t,r){return hs.bind(this)(t,r)}newsletterGroupEndpoint(){return Zs.bind(this)()}postRealtime(t,r,n){return gs.bind(this)(t,r,n)}joinRealtime(t){return je.bind(this)(t)}getProfile(t){return ui.bind(this)(t)}getFile(t,r){return _e.bind(this)(t,r)}secureRequest(t,r){return js.bind(this)(t,r)}forwardRequest(t,r){return Us.bind(this)(t,r)}getFormResponse(){return Ci.bind(this)()}getRecords(t,r){return Wi.bind(this)(t,r)}getTables(t,r){return Qi.bind(this)(t,r)}getIndexes(t,r){return zi.bind(this)(t,r)}getTags(t,r){return Ji.bind(this)(t,r)}deleteRecords(t,r){return Xi.bind(this)(t,r)}resendSignupConfirmation(){return gi.bind(this)()}recoverAccount(t=false){return pi.bind(this)(t)}getUsers(t,r){return Ti.bind(this)(t,r)}disableAccount(){return mi.bind(this)()}lastVerifiedEmail(t){return Ii.bind(this)(t)}unsubscribeNewsletter(t){return eo.bind(this)(t)}subscribeNotification(t,r){return _o.bind(this)({endpoint:t,keys:r})}unsubscribeNotification(t,r){return wo.bind(this)({endpoint:t,keys:r})}vapidPublicKey(){return Eo.bind(this)()}pushNotification(t,r){return Ao.bind(this)(t,r)}getNewsletters(t,r){return to.bind(this)(t,r)}getNewsletterSubscription(t,r){return zs.bind(this)(t,r)}getEncryptionStatus(){return Sn.bind(this)()}isWithheld(t){return fr.call(this,t)}unlockEncryption(t){return Vn.bind(this)(t)}lockEncryption(t){return jn.bind(this)(t)}takeRecoveryCode(){return Jn.bind(this)()}unlockWithRecoveryCode(t){return Yn.bind(this)(t)}regenerateRecoveryCode(){return Xn.bind(this)()}pinPeerKey(t){return Qn.bind(this)(t)}grantPrivateRecordAccess(t){return Zi.bind(this)(t)}removePrivateRecordAccess(t){return es.bind(this)(t)}listPrivateRecordAccess(t,r){return ts.bind(this)(t,r)}requestPrivateRecordAccessKey(t){return rs.bind(this)(t)}deleteFiles(t){return Bi.bind(this)(t)}uploadFiles(t,r){return it.bind(this)(t,r)}mock(t,r){return $s.bind(this)(t,r)}login(t){return Ir.bind(this)(t)}logout(t){return tt.bind(this)(t)}signup(t,r){return hi.bind(this)(t,r)}resetPassword(t){return yi.bind(this)(t)}verifyEmail(t,r){return wi.bind(this)(t,r)}verifyPhoneNumber(t,r){return _i.bind(this)(t,r)}forgotPassword(t,r){return Ei.bind(this)(t,r)}changePassword(t){return Ai.bind(this)(t)}updateProfile(t){return Ri.bind(this)(t)}postRecord(t,r,n){return Lr.bind(this)(t,r,n)}postRecords(t){return is.bind(this)(t)}getSubscriptions(t,r){return Ks.bind(this)(t,r)}subscribe(t){return Hs.bind(this)(t)}unsubscribe(t){return Gs.bind(this)(t)}blockSubscriber(t){return Ws.bind(this)(t)}unblockSubscriber(t){return Qs.bind(this)(t)}subscribeNewsletter(t){return Js.bind(this)(t)}bulkPostRecords(t){return Or.bind(this)(t)}};P([k()],T.prototype,"getFeed"),P([k()],T.prototype,"closeRTC"),P([k()],T.prototype,"connectRTC"),P([k()],T.prototype,"spellcast"),P([k()],T.prototype,"getspell"),P([k()],T.prototype,"dopamine"),P([k()],T.prototype,"getUniqueId"),P([k()],T.prototype,"resendInvitation"),P([k()],T.prototype,"cancelInvitation"),P([k()],T.prototype,"getInvitations"),P([k()],T.prototype,"openIdLogin"),P([k()],T.prototype,"loginWithToken"),P([k()],T.prototype,"registerNewsletterGroup"),P([k()],T.prototype,"deleteNewsletterGroup"),P([k()],T.prototype,"clientSecretRequest"),P([k()],T.prototype,"clientSecretRequestHistory"),P([k()],T.prototype,"cancelClientSecretRequest"),P([k()],T.prototype,"forwardRequestHistory"),P([k()],T.prototype,"cancelForwardRequest"),P([k()],T.prototype,"consumeTicket"),P([k()],T.prototype,"getConsumedTickets"),P([k()],T.prototype,"getTickets"),P([k()],T.prototype,"clearTicketLog"),P([k()],T.prototype,"getRealtimeUsers"),P([k()],T.prototype,"sendInquiry"),P([k()],T.prototype,"blockAccount"),P([k()],T.prototype,"unblockAccount"),P([k()],T.prototype,"deleteAccount"),P([k()],T.prototype,"inviteUser"),P([k()],T.prototype,"createAccount"),P([k()],T.prototype,"grantAccess"),P([k()],T.prototype,"updateUserAttributes"),P([k()],T.prototype,"getRealtimeGroups"),P([k()],T.prototype,"newsletterGroupEndpoint"),P([k()],T.prototype,"postRealtime"),P([k()],T.prototype,"joinRealtime"),P([k()],T.prototype,"getProfile"),P([k()],T.prototype,"getFile"),P([k()],T.prototype,"secureRequest"),P([k()],T.prototype,"forwardRequest"),P([k()],T.prototype,"getFormResponse"),P([k()],T.prototype,"getRecords"),P([k()],T.prototype,"getTables"),P([k()],T.prototype,"getIndexes"),P([k()],T.prototype,"getTags"),P([k()],T.prototype,"deleteRecords"),P([k()],T.prototype,"resendSignupConfirmation"),P([k()],T.prototype,"recoverAccount"),P([k()],T.prototype,"getUsers"),P([k()],T.prototype,"disableAccount"),P([k()],T.prototype,"lastVerifiedEmail"),P([k()],T.prototype,"unsubscribeNewsletter"),P([k()],T.prototype,"subscribeNotification"),P([k()],T.prototype,"unsubscribeNotification"),P([k()],T.prototype,"vapidPublicKey"),P([k()],T.prototype,"pushNotification"),P([k()],T.prototype,"getNewsletters"),P([k()],T.prototype,"getNewsletterSubscription"),P([k()],T.prototype,"unlockEncryption"),P([k()],T.prototype,"unlockWithRecoveryCode"),P([k()],T.prototype,"grantPrivateRecordAccess"),P([k()],T.prototype,"removePrivateRecordAccess"),P([k()],T.prototype,"listPrivateRecordAccess"),P([k()],T.prototype,"requestPrivateRecordAccessKey"),P([k()],T.prototype,"deleteFiles"),P([k()],T.prototype,"uploadFiles"),P([k()],T.prototype,"mock"),P([k({preventMultipleCalls:true})],T.prototype,"login"),P([k()],T.prototype,"logout"),P([k({preventMultipleCalls:true})],T.prototype,"signup"),P([k({preventMultipleCalls:true})],T.prototype,"resetPassword"),P([k({preventMultipleCalls:true})],T.prototype,"verifyEmail"),P([k({preventMultipleCalls:true})],T.prototype,"verifyPhoneNumber"),P([k({preventMultipleCalls:true})],T.prototype,"forgotPassword"),P([k({preventMultipleCalls:true})],T.prototype,"changePassword"),P([k({preventMultipleCalls:true})],T.prototype,"updateProfile"),P([k()],T.prototype,"postRecord"),P([k()],T.prototype,"getSubscriptions"),P([k()],T.prototype,"subscribe"),P([k()],T.prototype,"unsubscribe"),P([k()],T.prototype,"blockSubscriber"),P([k()],T.prototype,"unblockSubscriber"),P([k()],T.prototype,"subscribeNewsletter");var Sl={};export{T as Skapi,a as SkapiError,Sl as Types};//# sourceMappingURL=skapi.mjs.map
241
241
  //# sourceMappingURL=skapi.mjs.map