skapi-js 1.8.0 → 1.8.2

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.cjs CHANGED
@@ -1,4 +1,4 @@
1
- 'use strict';var amazonCognitoIdentityJs=require('amazon-cognito-identity-js'),fr=require('cocochex'),ln=require('qpass');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var fr__default=/*#__PURE__*/_interopDefault(fr);var ln__default=/*#__PURE__*/_interopDefault(ln);/**
1
+ 'use strict';var amazonCognitoIdentityJs=require('amazon-cognito-identity-js'),mr=require('cocochex'),gn=require('qpass');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var mr__default=/*#__PURE__*/_interopDefault(mr);var gn__default=/*#__PURE__*/_interopDefault(gn);/**
2
2
  * @license
3
3
  Apache License
4
4
  Version 2.0, January 2004
@@ -203,7 +203,7 @@
203
203
  limitations under the License.
204
204
 
205
205
  */
206
- var zn=Object.defineProperty;var Jn=Object.getOwnPropertyDescriptor;var se=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>(typeof require<"u"?require:e)[n]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var R=(t,e,n,r)=>{for(var s=Jn(e,n),i=t.length-1,o;i>=0;i--)(o=t[i])&&(s=(o(e,n,s))||s);return s&&zn(e,n,s),s};var X=typeof globalThis<"u"?globalThis:void 0,we=X?.window;function Gn(t){if(Buffer)return Buffer.from(t).toString("base64");let e="",n=new Uint8Array(t),r=32768;for(let s=0;s<n.length;s+=r){let i=n.subarray(s,s+r);e+=String.fromCharCode.apply(null,Array.from(i));}if(typeof btoa=="function")return btoa(e);throw new Error("No base64 encoder available in this environment.")}if(we)we.global=we,we.global._runningInNodeJS=false;else if(X&&(X.global=X,typeof X.window>"u")){class t{constructor(){this.result=null;this.error=null;this.onload=null;this.onloadend=null;this.onerror=null;}readAsDataURL(r){r.arrayBuffer().then(s=>{let i=Gn(s),o=r.type||"application/octet-stream";this.result=`data:${o};base64,${i}`,this.onload&&this.onload({target:this}),this.onloadend&&this.onloadend({target:this});}).catch(s=>{this.error=s,this.onerror&&this.onerror({target:this});});}readAsArrayBuffer(r){r.arrayBuffer().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});});}readAsText(r,s="utf-8"){r.text().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});});}}X.FileReader=t;class e{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(r,s){this._method=r,this._url=s,this.readyState=1;}setRequestHeader(r,s){this._headers[r]=s;}getResponseHeader(r){return null}abort(){this._aborted=true,this.onabort&&this.onabort({});}send(r){if(this._aborted)return;let s={method:this._method,headers:this._headers};r&&this._method!=="GET"&&this._method!=="HEAD"&&(s.body=r),fetch(this._url,s).then(async i=>{if(!this._aborted){if(this.status=i.status,this.statusText=i.statusText,this.responseURL=i.url,this.readyState=4,this.responseType==="blob")this.response=await i.blob();else if(this.responseType==="json")try{this.response=await i.json();}catch{this.response=null;}else this.responseType==="arraybuffer"?this.response=await i.arrayBuffer():(this.responseText=await i.text(),this.response=this.responseText);this.onload&&this.onload({});}}).catch(i=>{this._aborted||this.onerror&&this.onerror(i);});}}X.XMLHttpRequest=e,X.window={_runningInNodeJS:true,alert:n=>console.error("[Alert]",n),sessionStorage:{getItem:n=>null,setItem:(n,r)=>{},removeItem:n=>{}},localStorage:{getItem:n=>{let r=se("fs"),s=se("path");try{let i=s.resolve(process.cwd(),"states","localStorage",`${n}.skapi`);return r.existsSync(i)?r.readFileSync(i,"utf8"):null}catch{return null}},setItem:(n,r)=>{let s=se("fs"),i=se("path");try{let o=i.resolve(process.cwd(),"states","localStorage");s.existsSync(o)||s.mkdirSync(o,{recursive:!0});let u=i.resolve(o,`${n}.skapi`);s.writeFileSync(u,r,"utf8");}catch{}},removeItem:n=>{let r=se("fs"),s=se("path");try{let i=s.resolve(process.cwd(),"states","localStorage",`${n}.skapi`);r.existsSync(i)&&r.unlinkSync(i);}catch{}}},location:{href:"",origin:"",hostname:"",protocol:"",replace:n=>{}},navigator:{userAgent:`nodejs/${X?.process?.versions?.node||"unknown"}`,mediaDevices:{getUserMedia:async n=>{throw new Error("getUserMedia is not supported in Node.js environment.")}}},addEventListener:()=>{},removeEventListener:()=>{}};}var a=class extends Error{constructor(e,n){if(Array.isArray(e)&&e.length<=2){let r=e[1];if(e.length>2)for(let s=2;s<e.length&&typeof e[s]=="string";s++)r+=e[s];super((r||"Something went wrong.").trim()),this.name=n?.name||"SKAPI",this.code=n?.code||e[0]||"ERROR",n?.cause&&(this.cause=n.cause);}else super((e?.message||(typeof e=="string"?e:"Something went wrong.")).trim()),typeof e=="string"?(this.name=n?.name||"SKAPI",this.code=n?.code||"ERROR",n?.cause&&(this.cause=n.cause)):e instanceof Error?(this.cause=e,this.name=e.name,e.hasOwnProperty("code")&&(this.code=e.code)):typeof e=="object"&&e?.code&&e?.message&&(this.name=n?.name||"SKAPI",this.code=n?.code||"ERROR",this.cause=e?.cause);}};var Z="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Ce=BigInt(Z.length),Xn=2*1024*1024,Zn=["aud","cognito:username","event_id","exp","iat","iss","jti","origin_jti","secret_key","token_use"],Ge={auth_time:"log",sub:"user_id"},Yn=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l"],tt=["us31","us72","ap51","ap22","ap41","eu71","ap21","us32","us71","af51","ap31","ap43","ap23","ap42","ca01","eu01","eu72","eu51","eu73","eu11","me51","sa31"],Xe=typeof TextEncoder<"u"?new TextEncoder:null;function er(){if(typeof globalThis<"u")return globalThis.Buffer}function tr(t){if(Xe)return Xe.encode(t);let e=unescape(encodeURIComponent(t)),n=new Uint8Array(e.length);for(let r=0;r<e.length;r++)n[r]=e.charCodeAt(r);return n}function nr(t){if(t instanceof Uint8Array)return t;if(typeof t=="string")return tr(t);if(typeof ArrayBuffer<"u"&&t instanceof ArrayBuffer)return new Uint8Array(t);if(typeof ArrayBuffer<"u"&&ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);if(Array.isArray(t))return Uint8Array.from(t);let e=er();if(e)return new Uint8Array(e.from(t));throw new Error("No byte conversion available in this environment.")}var b=class b{static hash(e){typeof e!="string"&&(console.warn("coercing non-string value to empty string"),e="");let n=b.sb(e),r=1732584193,s=-271733879,i=-1732584194,o=271733878,u,l,c,g;for(let d=0;d<n.length;d+=16)u=r,l=s,c=i,g=o,r=b.ff(r,s,i,o,n[d],7,-680876936),o=b.ff(o,r,s,i,n[d+1],12,-389564586),i=b.ff(i,o,r,s,n[d+2],17,606105819),s=b.ff(s,i,o,r,n[d+3],22,-1044525330),r=b.ff(r,s,i,o,n[d+4],7,-176418897),o=b.ff(o,r,s,i,n[d+5],12,1200080426),i=b.ff(i,o,r,s,n[d+6],17,-1473231341),s=b.ff(s,i,o,r,n[d+7],22,-45705983),r=b.ff(r,s,i,o,n[d+8],7,1770035416),o=b.ff(o,r,s,i,n[d+9],12,-1958414417),i=b.ff(i,o,r,s,n[d+10],17,-42063),s=b.ff(s,i,o,r,n[d+11],22,-1990404162),r=b.ff(r,s,i,o,n[d+12],7,1804603682),o=b.ff(o,r,s,i,n[d+13],12,-40341101),i=b.ff(i,o,r,s,n[d+14],17,-1502002290),s=b.ff(s,i,o,r,n[d+15],22,1236535329),r=b.gg(r,s,i,o,n[d+1],5,-165796510),o=b.gg(o,r,s,i,n[d+6],9,-1069501632),i=b.gg(i,o,r,s,n[d+11],14,643717713),s=b.gg(s,i,o,r,n[d],20,-373897302),r=b.gg(r,s,i,o,n[d+5],5,-701558691),o=b.gg(o,r,s,i,n[d+10],9,38016083),i=b.gg(i,o,r,s,n[d+15],14,-660478335),s=b.gg(s,i,o,r,n[d+4],20,-405537848),r=b.gg(r,s,i,o,n[d+9],5,568446438),o=b.gg(o,r,s,i,n[d+14],9,-1019803690),i=b.gg(i,o,r,s,n[d+3],14,-187363961),s=b.gg(s,i,o,r,n[d+8],20,1163531501),r=b.gg(r,s,i,o,n[d+13],5,-1444681467),o=b.gg(o,r,s,i,n[d+2],9,-51403784),i=b.gg(i,o,r,s,n[d+7],14,1735328473),s=b.gg(s,i,o,r,n[d+12],20,-1926607734),r=b.hh(r,s,i,o,n[d+5],4,-378558),o=b.hh(o,r,s,i,n[d+8],11,-2022574463),i=b.hh(i,o,r,s,n[d+11],16,1839030562),s=b.hh(s,i,o,r,n[d+14],23,-35309556),r=b.hh(r,s,i,o,n[d+1],4,-1530992060),o=b.hh(o,r,s,i,n[d+4],11,1272893353),i=b.hh(i,o,r,s,n[d+7],16,-155497632),s=b.hh(s,i,o,r,n[d+10],23,-1094730640),r=b.hh(r,s,i,o,n[d+13],4,681279174),o=b.hh(o,r,s,i,n[d],11,-358537222),i=b.hh(i,o,r,s,n[d+3],16,-722521979),s=b.hh(s,i,o,r,n[d+6],23,76029189),r=b.hh(r,s,i,o,n[d+9],4,-640364487),o=b.hh(o,r,s,i,n[d+12],11,-421815835),i=b.hh(i,o,r,s,n[d+15],16,530742520),s=b.hh(s,i,o,r,n[d+2],23,-995338651),r=b.ii(r,s,i,o,n[d],6,-198630844),o=b.ii(o,r,s,i,n[d+7],10,1126891415),i=b.ii(i,o,r,s,n[d+14],15,-1416354905),s=b.ii(s,i,o,r,n[d+5],21,-57434055),r=b.ii(r,s,i,o,n[d+12],6,1700485571),o=b.ii(o,r,s,i,n[d+3],10,-1894986606),i=b.ii(i,o,r,s,n[d+10],15,-1051523),s=b.ii(s,i,o,r,n[d+1],21,-2054922799),r=b.ii(r,s,i,o,n[d+8],6,1873313359),o=b.ii(o,r,s,i,n[d+15],10,-30611744),i=b.ii(i,o,r,s,n[d+6],15,-1560198380),s=b.ii(s,i,o,r,n[d+13],21,1309151649),r=b.ii(r,s,i,o,n[d+4],6,-145523070),o=b.ii(o,r,s,i,n[d+11],10,-1120210379),i=b.ii(i,o,r,s,n[d+2],15,718787259),s=b.ii(s,i,o,r,n[d+9],21,-343485551),r=b.ad(r,u),s=b.ad(s,l),i=b.ad(i,c),o=b.ad(o,g);return b.rh(r)+b.rh(s)+b.rh(i)+b.rh(o)}static rh(e){let n="";for(let r=0;r<=3;r++)n+=b.alphabet.charAt(e>>r*8+4&15)+b.alphabet.charAt(e>>r*8&15);return n}static ad(e,n){let r=(e&65535)+(n&65535);return (e>>16)+(n>>16)+(r>>16)<<16|r&65535}static rl(e,n){return e<<n|e>>>32-n}static cm(e,n,r,s,i,o){return b.ad(b.rl(b.ad(b.ad(n,e),b.ad(s,o)),i),r)}static ff(e,n,r,s,i,o,u){return b.cm(n&r|~n&s,e,n,i,o,u)}static gg(e,n,r,s,i,o,u){return b.cm(n&s|r&~s,e,n,i,o,u)}static hh(e,n,r,s,i,o,u){return b.cm(n^r^s,e,n,i,o,u)}static ii(e,n,r,s,i,o,u){return b.cm(r^(n|~s),e,n,i,o,u)}static sb(e){let n,r=(e.length+8>>6)+1,s=new Array(r*16);for(n=0;n<r*16;n++)s[n]=0;for(n=0;n<e.length;n++)s[n>>2]|=e.charCodeAt(n)<<n%4*8;return s[n>>2]|=128<<n%4*8,s[r*16-2]=e.length*8,s}};b.alphabet="0123456789abcdef";var M=b;function nt(t){if(t===0)return Z[0];let e="";for(;t>0;)e=Z[t%62]+e,t=Math.floor(t/62);return e}function B(t){return t.split("").reverse().reduce((e,n,r)=>e+Z.indexOf(n)*62**r,0)}function ie(t=6){let e="",n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",r=n.length,s=0;for(;s<t;)e+=n.charAt(Math.floor(Math.random()*r)),s+=1;return e}function Le(){return typeof window>"u"||!!window?._runningInNodeJS}function V(){return !Le()&&typeof document<"u"&&typeof document.createElement=="function"}function Ee(t){let e;try{e=JSON.stringify(t);}catch{throw new a("Invalid data type.",{code:"INVALID_REQUEST"})}if(new Blob([e]).size>Xn)throw new a("Data should not exceed 2MB",{code:"INVALID_REQUEST"})}function Ze(t){return t===""||t==="on"||t==="true"}function Ye(t){return t==="false"}function et(t,e,n){e.name&&n(t,e.name,e.value);}var Re=V(),rr=typeof SubmitEvent<"u",ir=typeof HTMLFormElement<"u";function N(t,e,n){let r={},s=[];function i(l,c,g){if(e?.ignoreEmpty&&g==="")return;if(e?.nullIfEmpty&&g===""&&(g=null),typeof n=="function"){let _=n(c,g);_!==void 0&&(g=_);}let d=c.split("[").map(_=>{let p=_.replace("]",""),m=Number(p);return !isNaN(m)&&!p.includes(".")?p=m:(p[0]==='"'&&p[p.length-1]==='"'||p[0]==="'"&&p[p.length-1]==="'")&&(p=p.replace(/"/g,"").replace(/'/g,"")),p}),h=l;if(typeof d[0]=="number")throw new a("Form key cannot start with an array index.",{code:"INVALID_REQUEST"});for(let _=0;_<d.length;_++){let p=d[_];_<d.length-1?(h[p]===void 0&&(typeof d[_+1]=="number"?h[p]=[]:h[p]={}),h=h[p]):h[p]===void 0?h[p]=g:Array.isArray(h[p])?h[p].push(g):h[p]=[h[p],g];}}function o(l,c,g){if(g instanceof File)l.push({name:c,file:g});else if(g instanceof FileList&&g&&g.length>0)for(let d=0;d<=g.length-1;d++){let h=g.item(d);h&&l.push({name:c,file:h});}}let u=l=>{l.name&&(l.type==="number"?l.value&&i(r,l.name,Number(l.value)):l.type==="checkbox"||l.type==="radio"?l.checked?l.type==="checkbox"&&l.value===""||Ze(l.value)?i(r,l.name,true):Ye(l.value)?i(r,l.name,false):l.value&&i(r,l.name,l.value):l.type==="checkbox"&&(Ze(l.value)?i(r,l.name,false):Ye(l.value)&&i(r,l.name,true)):l.type==="file"?l.files&&l.files.length>0&&o(s,l.name,l.files):i(r,l.name,l.value));};if(Re&&(t instanceof HTMLInputElement||t instanceof HTMLSelectElement||t instanceof HTMLTextAreaElement))return u(t),Ee(r),{data:r,files:s};if(Re&&t instanceof FormData){for(let l of t.entries()){let c=l[0],g=l[1];if(g instanceof File||g instanceof FileList)o(s,c,g);else if(g instanceof Blob){let d=g;if(d.type==="application/json")try{let h=JSON.parse(d.text());i(r,c,h);}catch{i(r,c,d);}}else i(r,c,g);}return Ee(r),{data:r,files:s}}if(Re&&rr&&t instanceof SubmitEvent&&(t=t.target),Re&&ir&&t instanceof HTMLFormElement){let l=t.querySelectorAll("input"),c=t.querySelectorAll("select"),g=t.querySelectorAll("textarea");for(let d=0;d<c.length;d++)et(r,c[d],i);for(let d=0;d<g.length;d++)et(r,g[d],i);for(let d=0;d<l.length;d++)u(l[d]);return Ee(r),{data:r,files:s}}return Ee(t),{data:t,files:s}}function de(t){let e={};for(let n in t){let r=t[n];if(!Zn.includes(n))if(Ge[n])e[Ge[n]]=r;else if(n.includes("custom:"))e[n.replace("custom:","")]=r;else if(n==="address"){let s=r;if(s&&typeof s=="object"&&Object.keys(s).length){if(s?.formatted)try{e[n]=JSON.parse(s.formatted);}catch{e[n]=s.formatted;}}else e[n]=s;}else e[n]=r;}for(let n of ["address_public","birthdate_public","email_public","gender_public","phone_number_public","access_group"])n.includes("_public")?e.hasOwnProperty(n.split("_")[0])?e[n]=e.hasOwnProperty(n)?!!Number(e[n]):false:delete e[n]:e[n]=e.hasOwnProperty(n)?Number(e[n]):0;for(let n of ["email","phone_number"])e.hasOwnProperty(n)?e[n+"_verified"]=e[n+"_verified"]===true:delete e[n+"_verified"];return e}function Oe(t){if(t=gr(t),t.split("-").length===7){let e=t.split("-"),n,r;try{n=tt[B(e[1][0])],r=e.slice(2).join("-");}catch{throw new Error("INVALID_PARAMETER: Service ID is invalid.")}if(!n)throw new Error("INVALID_PARAMETER: Service ID is invalid.");return {service:n+e[0]+e[1].slice(1),owner:r}}return {service:t,owner:""}}function rt(t,e){let n=tt.indexOf(t.slice(0,4)),r=Yn[n],i=`${t.slice(4,-4)}-${r}${t.slice(-4)}-${e}`;return dr(i)}function sr(t){let e=0n;for(let n of t){let r=Z.indexOf(n);if(r<0)throw new Error(`INVALID_PARAMETER: Invalid base62 character: ${n}`);e=e*Ce+BigInt(r);}return e}function or(t,e=1){if(t<0n)throw new Error("INVALID_PARAMETER: Negative values are not supported.");if(t===0n)return "0".repeat(Math.max(1,e));let n="",r=t;for(;r>0n;){let s=Number(r%Ce);n=Z[s]+n,r/=Ce;}return n.length<e&&(n="0".repeat(e-n.length)+n),n}function ar(t){if(t===0n)return Uint8Array.from([0]);let e=[],n=t;for(;n>0n;)e.push(Number(n&0xffn)),n>>=8n;return e.reverse(),Uint8Array.from(e)}function cr(t){let e=0n;for(let n of t)e=(e<<8n)+BigInt(n);return e}function lr(t){let e=String(t).replace(/-/g,"");if(!/^[0-9a-fA-F]{32}$/.test(e))throw new Error("INVALID_PARAMETER: Invalid UUID format.");let n=new Uint8Array(16);for(let r=0;r<16;r++)n[r]=parseInt(e.slice(r*2,r*2+2),16);return n}function ur(t){let e=Array.from(nr(t),n=>n.toString(16).padStart(2,"0")).join("");return [e.slice(0,8),e.slice(8,12),e.slice(12,16),e.slice(16,20),e.slice(20)].join("-")}function dr(t){let e=String(t);if(e.split("-").length===2)return e;let n=e.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(!n)throw new Error("INVALID_PARAMETER: Input must match <base62>-<base62>-<uuid>.");let[,r,s,i]=n;if(r.length<2)throw new Error("INVALID_PARAMETER: The first part must contain at least 2 characters.");if(s.length>=Z.length)throw new Error("INVALID_PARAMETER: The middle section is too long to encode.");let o=r.slice(0,2),u=r.slice(2),l=s+o,c=Z[s.length]+u+l,g=lr(i),d=or(cr(g));return `${c}-${d}`}function gr(t){let e=String(t);if(e.split("-").length!==2)return e;let n=e.split("-");if(n.length!==2||!n[0]||!n[1])throw new Error("INVALID_PARAMETER: Corrupt compressed token.");let[r,s]=n,i=Z.indexOf(r[0]);if(i<0)throw new Error("INVALID_PARAMETER: Corrupt compressed token.");let o=r.slice(1),u=i+2;if(o.length<u)throw new Error("INVALID_PARAMETER: Corrupt compressed token.");let l=o.slice(0,o.length-u),c=o.slice(o.length-u),g=c.slice(i),d=c.slice(0,i),h=g+l;if(!/^[0-9A-Za-z]+$/.test(h)||!/^[0-9A-Za-z]+$/.test(d))throw new Error("INVALID_PARAMETER: Corrupt compressed token.");let _=sr(s),p=ar(_);if(p.length>16)throw new Error("INVALID_PARAMETER: Corrupt compressed token.");let m=new Uint8Array(16);m.set(p,16-p.length);let I=ur(m);return `${h}-${d}-${I}`}function hr(t,e="User ID"){let n=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;if(t){if(typeof t!="string")throw new a(`${e} should be type: string.`,{code:"INVALID_PARAMETER"});if(!t.match(n))throw new a(`${e} is invalid.`,{code:"INVALID_PARAMETER"})}else throw new a(`${e} is empty.`,{code:"INVALID_PARAMETER"});return t}function pr(t){if(t&&(typeof t!="string"||t.charAt(0)!=="+"||isNaN(Number(t.substring(1)))))throw new a('"phone_number" is invalid. The format should be "+00123456789". Type: string.',{code:"INVALID_PARAMETER"});return t||""}function mr(t){if(t){if(typeof t!="string")throw new a('"birthdate" is invalid. The format should be "yyyy-mm-dd". Type: string.',{code:"INVALID_PARAMETER"});{let e=new RegExp(/([12]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01]))/);if(t.length!==10||t.split("-").length!==3||!e.test(t))throw new a('"birthdate" is invalid. The format should be "yyyy-mm-dd". Type: string.',{code:"INVALID_PARAMETER"})}}return t||""}function _r(t){if(t){if(typeof t!="string")throw new a('"password" should be type: string.',{code:"INVALID_PARAMETER"});if(t.length<6)throw new a('"password" should be at least 6 characters.',{code:"INVALID_PARAMETER"});if(t.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 t}function br(t,e="email"){if(t){if(typeof t!="string")throw new a(`"${e}"should be type: string.`,{code:"INVALID_PARAMETER"});if(t.length<5)throw new a(`"${e}" should be at least 5 characters.`,{code:"INVALID_PARAMETER"});if(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.test(t)&&(t=t.trim(),t.split("@")[1].split(".").length>=2))return t.toLowerCase()}else throw new a(`"${e}" is required.`,{code:"INVALID_PARAMETER"});throw new a(`"${t}" is an invalid email.`,{code:"INVALID_PARAMETER"})}function yr(t){let e=typeof window<"u",n=(()=>{let s=e&&window.location.origin||null;return s&&s.slice(-1)==="/"&&(s=s.slice(0,-1)),s})(),r=s=>{if(typeof s=="string"){if(s==="*")return "*";{let i=s.trim();if(i[0]==="/"&&n){if(n.slice(0,5)==="file:")throw new a(`"${s}" is an invalid url. Relative URL does not work on local file system. Use full URL string.`,{code:"INVALID_PARAMETER"});i=n+i;}else if(i[0]==="."&&n){if(n.slice(0,5)==="file:")throw new a(`"${s}" is an invalid url. Relative URL does not work on local file system. Use full URL string.`,{code:"INVALID_PARAMETER"});let u=e?window.location.href.split("?")[0]:"";u.slice(-1)!=="/"&&(u+="/"),i=u+i.slice(1);}let o;try{o=new URL(i);}catch{throw new a(`"${s}" is an invalid url.`,{code:"INVALID_PARAMETER"})}if(o.protocol)return o.href}}throw new a(`"${s}" is an invalid url.`,{code:"INVALID_PARAMETER"})};return Array.isArray(t)?t.map(s=>r(s)):r(t)}function wr(t,e,n=[],r){let s=N(t,r),i=s.data;e.service="string",e.owner="string";let o={};for(let u in e)if(i&&typeof i=="object"&&!Array.isArray(i)&&i.hasOwnProperty(u))if(typeof i[u]=="function")o[u]=i[u];else try{o[u]=JSON.parse(JSON.stringify(i[u]));}catch{o[u]=i[u];}r?.precall&&r.precall({data:o,files:s?.files||[]});try{return fr__default.default(o,e,n)}catch(u){throw new a(u.message,{code:"INVALID_PARAMETER"})}}var f={UserId:hr,PhoneNumber:pr,Birthdate:mr,Password:_r,Email:br,Url:yr,Params:wr};var C=null;function Me(t){let e={tkid:"ticket_id",cond:"condition",stmp:"timestamp",actn:"action",cnt:"count",ttl:"time_to_live",plch:"placeholder",hash:"hash",desc:"description",pmc:"limit_per_user"},n={};for(let r in t)if(r==="tkid"){let s=t[r].split("#");if(s.length===1){n.ticket_id=s[0];continue}n.ticket_id=s[1],n.consume_id=s[2],n.user_id=s[3];let i=s[2].slice(-4);if(n.is_test=i===":CHK",!t.stmp){let o=s[2].slice(0,-4);/^[0-9]+$/.test(o)?n.timestamp=parseInt(o,10):n.timestamp=B(s[2].slice(0,-4));}}else e[r]?n[e[r]]=t[r]:n[r]=t[r];return n}async function st(t){if(!t.ticket_id)throw new a("Ticket ID is required.",{code:"INVALID_PARAMETER"});if(!t.method)throw new a('Method is required. Should be either "GET" or "POST"',{code:"INVALID_PARAMETER"});let e=t.ticket_id;await this.__connection;let n=await E.bind(this)(`https://${this.service.slice(0,4)}.${this.customApiDomain}/auth/consume/${this.service}/${this.owner}/${e}`,t?.data||{},{method:t.method,auth:!!t?.auth});return Me(n)}async function ot(t,e){await this.__connection;let n=await E.bind(this)("ticket",Object.assign({exec:"list"},t||{}),{auth:true,fetchOptions:e});return n.list=n.list.map(Me),n}async function at(t,e){await this.__connection;let n=await E.bind(this)("ticket",Object.assign({exec:"consumed"},t||{}),{auth:true,fetchOptions:e});return n.list=n.list.map(Me),n}async function ct(t){return E.bind(this)("register-ticket",Object.assign({exec:"reg"},t),{auth:true})}async function lt(t){return E.bind(this)("register-ticket",Object.assign({exec:"unreg"},t),{auth:true})}async function ae(){if(await this.__connection,this.session){let t=Math.floor(Date.now()/1e3),n=this.session.getIdToken().getExpiration();if(n<t){this.log("request:requesting new token",null);try{await q.bind(this)().getSession({refreshToken:!0}),this.log("request:received new tokens",{exp:this.session?.idToken?.payload?.exp,currentTime:t,expiresIn:n-t,token:this.session?.accessToken?.jwtToken,refreshToken:this.session?.refreshToken?.token});}catch(r){throw this.log("request:new token error",r),new a("User login is required.",{code:"INVALID_REQUEST"})}}else this.log("request:tokens",{exp:this.session.idToken.payload.exp,currentTime:t,expiresIn:n-t,token:this.session.accessToken.jwtToken,refreshToken:this.session.refreshToken.token});return this.session?.idToken?.jwtToken}else throw this.log("request:no session",null),Y.bind(this)(),new a("User login is required.",{code:"INVALID_REQUEST"})}function it(t,e){return new Promise((n,r)=>{e.refreshSession(t.getRefreshToken(),(s,i)=>{this.log("getSession:refreshSessionCallback",{refreshErr:s,refreshedSession:i}),s?(Y.bind(this)(),r(s)):i.isValid()?n(i):(Y.bind(this)(),r(new a("Invalid session.",{code:"INVALID_REQUEST"})));});})}function q(){if(!this.userPool)throw new a("User pool is missing",{code:"INVALID_REQUEST"});let t=()=>{let i=C.getSignInUserSession().getIdToken().payload||null,o=de(i);return this.log("normalized user attribute",o),this.__user=o,o},e=async i=>new Promise((o,u)=>{this.log("getSession:option",i);let{refreshToken:l=false,skipUserUpdateEventTrigger:c=false}=i||{};if(l&&c&&(c=false),C=this.userPool.getCurrentUser(),!C){this.log("getSession:cognitoUser",C),Y.bind(this)(),u(null);return}let g=d=>{let h=d.getIdToken().payload;if(this.log("getSession:respond:sessionAttribute",h),h["custom:service"]!==this.service)throw this.log("getSession:respond","invalid service, signing out"),Y.bind(this)(),new a("Invalid session.",{code:"INVALID_REQUEST"});return this.session=d,t(),c||this._runOnUserUpdateListeners(this.user),this.session};C.getSession((d,h)=>{if(this.log("getSession:getSessionCallback",{err:d,session:h}),!h){Y.bind(this)(),u(new a("Current session does not exist.",{code:"INVALID_REQUEST"}));return}if(d){it.bind(this)(h,C).then(y=>o(g(y))).catch(u);return}let _=Math.floor(Date.now()/1e3),p=h.getIdToken(),m=p.getExpiration(),I=m<_;if(this.log("getSession:currentTime",_),this.log("getSession:idTokenExp",m),this.log("getSession:isExpired",I),this.log("getSession:existingBearerToken",this.bearerToken),this.bearerToken=p.getJwtToken(),I||l||!h.isValid())it.bind(this)(h,C).then(y=>o(g(y))).catch(u);else try{o(g(h));}catch(y){u(y);}});}),n=(i,o)=>{let u=o||i.includes(this.service+"-")?i:this.service+"-"+M.hash(i);return {cognitoUser:new amazonCognitoIdentityJs.CognitoUser({Username:u,Pool:this.userPool}),cognitoUsername:u}};return {getSession:e,authenticateUser:(i,o,u=false,l=false)=>new Promise((c,g)=>{this.__request_signup_confirmation=null,this.__disabledAccount=null;let d=n(i,u),h=d.cognitoUsername,_=new amazonCognitoIdentityJs.AuthenticationDetails({Username:h,Password:o});d.cognitoUser.authenticateUser(_,{newPasswordRequired:(p,m)=>{this.__disabledAccount=null,this.__request_signup_confirmation=h,p["custom:signup_ticket"]==="PASS"||p["custom:signup_ticket"]==="MEMBER"||p["custom:signup_ticket"]==="OIDPASS"?d.cognitoUser.completeNewPasswordChallenge(o,{},{onSuccess:I=>{C=d.cognitoUser,e().then(y=>c(this.user));},onFailure:I=>{g(new a(I.message||"Failed to authenticate user.",{code:I.code}));}}):g(new a("User's signup confirmation is required.",{code:"SIGNUP_CONFIRMATION_NEEDED"}));},onSuccess:p=>e({skipUserUpdateEventTrigger:true}).then(m=>{this.__disabledAccount=null,this._runOnLoginListeners(this.user),this._runOnUserUpdateListeners(this.user),c(this.user);}),onFailure:p=>{let m=[],{parsed:I,code:y}=Ie(p),S=typeof p?.message=="string"?p.message:"";if(y==="NotAuthorizedException"?S.includes("User is disabled.")?(this.__disabledAccount=h,m=["This account is disabled.","USER_IS_DISABLED"]):l?m=["The account already exists.","ACCOUNT_EXISTS"]:m=["Incorrect username or password.","INCORRECT_USERNAME_OR_PASSWORD"]:y==="UserNotFoundException"?m=["Incorrect username or password.","INCORRECT_USERNAME_OR_PASSWORD"]:y==="UserNotConfirmedException"?(this.__request_signup_confirmation=h,m=["User's signup confirmation is required.","SIGNUP_CONFIRMATION_NEEDED"]):(y==="TooManyRequestsException"||y==="LimitExceededException")&&(m=["Too many attempts. Please try again later.","REQUEST_EXCEED"]),I.code==="SIGNUP_CONFIRMATION_NEEDED"&&(this.__request_signup_confirmation=h),m.length){let v=m[1],P=m[0];g(new a(P,{code:v,cause:p}));}else g(I);}});}),createCognitoUser:n,signup:(i,o,u)=>new Promise((l,c)=>{this.userPool.signUp(i,o,u,null,(g,d)=>{if(g){let{parsed:h,code:_}=Ie(g),p=[];_==="UsernameExistsException"?p=["The account already exists.","EXISTS"]:_==="InvalidPasswordException"?p=["Invalid password. Password must be at least 6 characters.","INVALID_PARAMETER"]:_==="InvalidParameterException"?p=[h.message||"Invalid parameter.","INVALID_PARAMETER"]:_==="TooManyRequestsException"||_==="LimitExceededException"?p=["Too many attempts. Please try again later.","REQUEST_EXCEED"]:_==="CodeDeliveryFailureException"?p=["Failed to deliver verification code.","CODE_DELIVERY_FAILURE"]:_==="UserLambdaValidationException"&&(p=[h.message||"Signup validation failed.","INVALID_REQUEST"]),p.length?c(new a(p[0],{code:p[1],cause:g})):c(h);return}l(d);});})}}function Ie(t){let e=typeof t?.code=="string"&&t.code.trim()?t.code.trim():"ERROR",r=((typeof t?.message=="string"?t.message:typeof t=="string"?t:"An error occurred.")||"An error occurred.").trim();r||(r="An error occurred.");let s=r.match(/#([A-Za-z0-9_]+)\s*:\s*([\s\S]+)/),i=s?.[1]?.trim()||e,o=s?.[2]?.trim()||r;return {parsed:new a(o,{code:i,cause:t}),code:e}}async function ut(t){await this.__authConnection;let e=t?.refreshToken||false;if(!e)return this.user;try{return await q.bind(this)().getSession(Object.assign({skipUserUpdateEventTrigger:!e,refreshToken:e},t)),this.user}catch{return null}}async function dt(t){await this.__connection,t=f.Params(t,{token:"string",id:"string",merge:o=>{if(o===void 0)return false;if(typeof o=="string")return [o];if(Array.isArray(o)){for(let u of o)if(typeof u!="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 e={token:t.token,id:t.id,merge:t.merge};t.template?.welcome&&(e.template_welcome=t.template.welcome);let n=await E.bind(this)("openid-logger",e),r=n.logger.split("#"),s=this.service+"-"+r[0],i=r[1];return {userProfile:await q.bind(this)().authenticateUser(s,i,true,true),openid:n.openid}}function Pr(t){let e=typeof globalThis<"u"?globalThis:void 0;if(e?.Buffer)return e.Buffer.from(t,"base64").toString("utf8");if(typeof atob=="function"){let n=atob(t),r=new Uint8Array(n.length);for(let s=0;s<n.length;s++)r[s]=n.charCodeAt(s);return typeof TextDecoder<"u"?new TextDecoder().decode(r):n}throw new Error("No base64 decoder available in this environment")}function Sr(t){let e=t.split(".");if(e.length!==3)throw new Error("Invalid JWT format");let r=e[1].replace(/-/g,"+").replace(/_/g,"/"),s=Pr(r);return JSON.parse(s)}async function gt(t){await this.__authConnection,this.log("loginWithToken:params",t),t=f.Params(t,{idToken:"string",accessToken:"string",refreshToken:"string"},["idToken"]);let e=Sr(t.idToken);if(this.log("loginWithToken:idTokenPayload",e),e["custom:service"]!==this.service)throw new a("Token does not belong to this service.",{code:"INVALID_REQUEST"});let n=Math.floor(Date.now()/1e3);if(e.exp&&e.exp<n)throw new a("Token has expired.",{code:"INVALID_REQUEST"});if(this.__user=de(e),this.session=null,t.accessToken&&t.refreshToken)try{if(this.session=new amazonCognitoIdentityJs.CognitoUserSession({IdToken:new amazonCognitoIdentityJs.CognitoIdToken({IdToken:t.idToken}),AccessToken:new amazonCognitoIdentityJs.CognitoAccessToken({AccessToken:t.accessToken}),RefreshToken:new amazonCognitoIdentityJs.CognitoRefreshToken({RefreshToken:t.refreshToken})}),this.log("loginWithToken:session",this.session),this.log("loginWithToken:CognitoUser",amazonCognitoIdentityJs.CognitoUser),this.log("loginWithToken:userPool",this.userPool),amazonCognitoIdentityJs.CognitoUser&&this.userPool){this.log("loginWithToken:cognito:username",e["cognito:username"]);let r={Username:e["cognito:username"],Pool:this.userPool};this.log("loginWithToken:cognitoUserParams",r),C=new amazonCognitoIdentityJs.CognitoUser(r),C.setSignInUserSession(this.session),this.log("loginWithToken:cognitoUserRestored",{cognitoUserType:typeof C,cognitoUserKeys:Object.keys(C||{}),cognitoUser:C});}}catch(r){this.log("loginWithToken:err",r);try{this.log("loginWithToken:err:stringified",JSON.stringify(r));}catch{this.log("loginWithToken:err:stringifyFail",String(r));}try{let s=Object.keys(r||{}),i=Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(r||{}):[],o=Object.getOwnPropertyDescriptors?Object.getOwnPropertyDescriptors(r||{}):{};this.log("loginWithToken:createSessionError:allKeys",{keys:s,symbols:i,descriptors:o});}catch(s){this.log("loginWithToken:createSessionError:allKeysFail",String(s));}}return this._runOnLoginListeners(this.user),this._runOnUserUpdateListeners(this.user),this.user}async function F(){return await this.__connection,this.__user?.service===this.service?this.__user?.owner===this.host:(await ge.bind(this)(),false)}async function Y(t=false){let e=null;C&&(t?e=new Promise((r,s)=>{C.globalSignOut({onSuccess:i=>{this.log("globalSignOut:success",i),r(i);},onFailure:i=>{this.log("globalSignOut:error",i),s(i);}});}):C.signOut());let n={session:null,__startKeyHistory:{},__cached_requests:{},__user:null};e&&(e=await e);for(let r in n)this[r]=n[r];return this._runOnUserUpdateListeners(null),this._runOnLoginListeners(null),e}async function ge(t){await this.__connection;let{data:e}=N(t);return await Y.bind(this)(e?.global),"SUCCESS: The user has been logged out."}async function ft(){if(!this.__request_signup_confirmation)throw new a("Least one login attempt is required.",{code:"INVALID_REQUEST"});return await E.bind(this)("confirm-signup",{username:this.__request_signup_confirmation})}async function ht(t=false){if(typeof t=="string")t=f.Url(t);else if(typeof t!="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 E.bind(this)("recover-account",{username:this.__disabledAccount,redirect:t}),"SUCCESS: Recovery e-mail has been sent."}async function Fe(t){let e=f.Params(t,{username:"string",email:"string",password:"string"},["password"]);if(await this.__authConnection,e.email)try{f.Email(e.email);}catch{e.username=e.email,delete e.email;}if(!e.username&&!e.email)throw new a('Least one of "username" or "email" is required.',{code:"INVALID_PARAMETER"});return await q.bind(this)().authenticateUser(e.username||e.email,e.password)}async function pt(t,e){await this.__authConnection;let n={username:"string",password:c=>f.Password(c),email:c=>f.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?f.Birthdate(c):"",phone_number:c=>c?f.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?f.Url(c):"",profile:c=>c?f.Url(c):"",family_name:"string",given_name:"string",middle_name:"string",nickname:"string",website:c=>c?f.Url(c):""},r=f.Params(t||{},n,["email","password"]);await ge.bind(this)(),e=f.Params(e||{},{email_subscription:c=>{if(typeof c!="boolean")throw new a('"option.email_subscription" should be type: <boolean>.',{code:"INVALID_PARAMETER"});if(!e?.signup_confirmation)throw new a('"option.signup_confirmation" is required for email subscription.',{code:"INVALID_PARAMETER"});return c},signup_confirmation:c=>{let g=c;if(typeof c=="string")g=f.Url(c);else if(typeof c=="boolean")g=c;else throw new a('"option.signup_confirmation" should be type: <string | boolean>.',{code:"INVALID_PARAMETER"});if(g&&!r.email)throw new a('"email" is required for signup confirmation.',{code:"INVALID_PARAMETER"});return g},login:c=>{if(typeof c=="boolean"){if(e.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(!e?.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 s=e?.login||false;if(r.signup_confirmation=e?.signup_confirmation||false,r.email_subscription=e?.email_subscription||false,r.email_public&&!r.signup_confirmation)throw new a('"option.signup_confirmation" should be true if "email_public" is set to true.',{code:"INVALID_PARAMETER"});r.service=this.service,r.owner=this.owner;let i=q.bind(this)().createCognitoUser(r.username||r.email);for(let c of ["email_public","address_public","gender_public","birthdate_public","phone_number_public"])r[c]=r[c]?"1":"0";r.access_group&&(r.access_group=r.access_group.toString());let o=(await E.bind(this)("signupkey",{username:i.cognitoUsername,signup_confirmation:typeof r.signup_confirmation=="boolean"?JSON.stringify(r.signup_confirmation):r.signup_confirmation,email_subscription:r.email_subscription,template_confirmation:e?.template?.signup_confirmation||"",template_welcome:e?.template?.welcome||""})).split(":"),u=o.slice(1).join(":"),l=[new amazonCognitoIdentityJs.CognitoUserAttribute({Name:"custom:signup",Value:o[0]}),new amazonCognitoIdentityJs.CognitoUserAttribute({Name:"locale",Value:u.split("#")[1]}),new amazonCognitoIdentityJs.CognitoUserAttribute({Name:"custom:signup_ticket",Value:u})];for(let c in n){let g=["email_public","address_public","gender_public","birthdate_public","phone_number_public","misc","service","owner"];r[c]!==""&&(c==="username"||c==="password"||c==="access_group"||(g.includes(c)?l.push(new amazonCognitoIdentityJs.CognitoUserAttribute({Name:"custom:"+c,Value:r[c]})):l.push(new amazonCognitoIdentityJs.CognitoUserAttribute({Name:c,Value:r[c]}))));}return await q.bind(this)().signup(i.cognitoUsername,r.password,l),r.signup_confirmation?(C=i.cognitoUser,this.__request_signup_confirmation=i.cognitoUsername,"SUCCESS: The account has been created. User's signup confirmation is required."):s?Fe.bind(this)({email:r.username||r.email,password:r.password}):"SUCCESS: The account has been created."}async function mt(){await this.__connection;let t=await E.bind(this)("remove-account",{disable:this.__user.user_id},{auth:true});return await ge.bind(this)(),t}async function _t(t){await this.__connection;let e=f.Params(t,{email:s=>f.Email(s),code:["number","string"],new_password:s=>f.Password(s)},["email","code","new_password"]),n=e.code,r=e.new_password;return typeof n=="number"&&(n=n.toString()),new Promise(async(s,i)=>{q.bind(this)().createCognitoUser(e.email).cognitoUser.confirmPassword(n,r,{onSuccess:u=>{s("SUCCESS: New password has been set.");},onFailure:u=>{i(new a(u?.message||"Failed to reset password.",{code:u?.code||"ERROR",cause:u}));}});})}async function bt(t,e,n){await this.__connection;let r;if(!C)throw new a("The user has to be logged in.",{code:"INVALID_REQUEST"});if(t==="email"||t==="phone_number"){if(!this.__user.hasOwnProperty(t))throw new a(`No ${t==="email"?"e-mail":"phone number"} to verify`,{code:"INVALID_REQUEST"});if(this.__user?.[`${t}_verified`])return `SUCCESS: "${t}" is verified.`;r=(e?f.Params(e,{code:"string"}):{}).code||"";}else return;let s,i=n?.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"});s={template_verification:i};}return new Promise((o,u)=>{let l={onSuccess:c=>{r?q.bind(this)().getSession({refreshToken:true}).then(()=>{this.__user&&(this.__user[t+"_verified"]=true),o(`SUCCESS: "${t}" is verified.`);}).catch(g=>{u(g);}):o("SUCCESS: Verification code has been sent.");},onFailure:c=>{u(new a(c.message||"Failed to request verification code.",{code:c?.code}));}};r?C?.verifyAttribute(t,r,l):(l.inputVerificationCode=null,C?.getAttributeVerificationCode(t,l,s));})}function yt(t,e){return bt.bind(this)("phone_number",t,e)}function wt(t,e){return bt.bind(this)("email",t,e)}async function Et(t,e){await this.__connection;let n=f.Params(t,{email:i=>f.Email(i)},["email"]),r,s=e?.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"});r={template_verification:s};}return new Promise(async(i,o)=>{q.bind(this)().createCognitoUser(n.email).cognitoUser.forgotPassword({onSuccess:l=>{i("SUCCESS: Verification code has been sent.");},onFailure:l=>{let{parsed:c,code:g}=Ie(l),d={UserNotFoundException:"NOT_EXISTS",InvalidParameterException:"INVALID_PARAMETER",NotAuthorizedException:"INVALID_REQUEST",LimitExceededException:"REQUEST_EXCEED",TooManyRequestsException:"REQUEST_EXCEED",CodeDeliveryFailureException:"CODE_DELIVERY_FAILURE"}[g]||c.code||g||"ERROR";o(new a(c.message,{code:d,cause:l}));}},r);})}async function Rt(t){if(await this.__connection,!this.session)throw new a("User login is required.",{code:"INVALID_REQUEST"});let e=f.Params(t,{current_password:"string",new_password:"string"});if(!e?.current_password)throw new a('"current_password" is required to change password.',{code:"INVALID_PARAMETER"});if(!e?.new_password)throw new a('"new_password" is required to change password.',{code:"INVALID_PARAMETER"});return f.Password(e.current_password),f.Password(e.new_password),new Promise((n,r)=>{C.changePassword(e.current_password,e.new_password,(s,i)=>{if(s){if(s?.code==="InvalidParameterException")r(new a("Invalid password parameter.",{code:"INVALID_PARAMETER"}));else if(s?.code==="NotAuthorizedException")r(new a("Incorrect password.",{code:"INVALID_REQUEST"}));else if(s?.code==="TooManyRequestsException"||s?.code==="LimitExceededException")r(new a("Too many attempts. Please try again later.",{code:"REQUEST_EXCEED"}));else {let{parsed:o}=Ie(s);r(o);}return}n("SUCCESS: Password has been changed.");});})}async function At(t){if(await this.__connection,!this.session)throw new a("User login is required.",{code:"INVALID_REQUEST"});let e=f.Params(t||{},{user_id:s=>f.UserId(s),email:s=>f.Email(s),address:s=>{if(!s)return "";if(typeof s=="string")return s;if(typeof s=="object")return JSON.stringify(s)},name:"string",gender:"string",birthdate:s=>s?f.Birthdate(s):"",phone_number:s=>s?f.PhoneNumber(s):"",email_public:"boolean",phone_number_public:"boolean",address_public:"boolean",gender_public:"boolean",birthdate_public:"boolean",misc:"string",picture:s=>s?f.Url(s):"",profile:s=>s?f.Url(s):"",family_name:"string",given_name:"string",middle_name:"string",nickname:"string",website:s=>s?f.Url(s):""});if(e&&typeof e=="object"&&!Object.keys(e).length)return this.user;e.email&&(e.preferred_username=this.service+"-"+M.hash(e.email));let n=[["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 s of n)if(e[s[0]]&&!this.__user[s[1]])throw new a(`${s[2]} "${s[0]}" to true.`,{code:"INVALID_REQUEST"})}let r=[];for(let s in e){if(e[s]===this.user[s]){r.push(s);continue}if(["email_public","phone_number_public","address_public","gender_public","birthdate_public","misc"].includes(s)){let o=e[s];typeof o=="boolean"&&(o=o?"1":"0"),e["custom:"+s]=o,r.push(s);}}for(let s of r)delete e[s];if(e.user_id)if(e.user_id===this.user.user_id)delete e.user_id;else return E.bind(this)("admin-edit-profile",{attributes:e},{auth:true});if(e&&typeof e=="object"&&Object.keys(e).length){let s=[];for(let i in e)s.push(new amazonCognitoIdentityJs.CognitoUserAttribute({Name:i,Value:e[i]}));return await new Promise((i,o)=>{C?.updateAttributes(s,(u,l)=>{u&&o([u?.code||u?.name,u?.message||"Failed to update user settings."]),i(l);});}),await q.bind(this)().getSession({refreshToken:true}),this.user}return this.user}async function It(t,e){t=N(t).data,t||(t={searchFor:"timestamp",condition:">",value:0},e||(e={}),e.ascending=false),await this.__connection;let n={user_id:s=>Array.isArray(s)?s.map(i=>f.UserId(i)):f.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=>f.Birthdate(s),subscribers:"number",timestamp:"number",access_group:"number",approved:"string"},r=["searchFor","value"];if(t=f.Params(t,{searchFor:["user_id","name","email","phone_number","address","gender","birthdate","locale","subscribers","timestamp","access_group","approved"],condition:[">",">=","=","<","<=","gt","gte","eq","lt","lte",()=>"="],value:s=>{let i=n[t.searchFor];if(typeof i=="function")return i(s);if(typeof s!==i)throw new a(`Value does not match the type of "${t.searchFor}" index.`,{code:"INVALID_PARAMETER"});return s},range:s=>{let i=n[t.searchFor];if(typeof i=="function")return i(s);if(typeof s!==i)throw new a(`Range does not match the type of "${t.searchFor}" index.`,{code:"INVALID_PARAMETER"});return s}},r),t?.condition&&t?.condition!=="="&&t.hasOwnProperty("range"))throw new a("Conditions does not apply on range search.",{code:"INVALID_PARAMETER"});if(t.searchFor==="user_id"&&(t.condition!=="="||t.range))throw new a(`Conditions are not allowed on "${t.searchFor}"`,{code:"INVALID_PARAMETER"});if(typeof t?.value=="string"&&!t?.value)throw new a("Value should not be an empty string.",{code:"INVALID_PARAMETER"});if(typeof t?.searchFor=="string"&&!t?.searchFor)throw new a('"searchFor" should not be an empty string.',{code:"INVALID_PARAMETER"});return E.bind(this)("get-users",t,{auth:true,fetchOptions:e})}async function Tt(t){await this.__connection;let e=await E.bind(this)("last-verified-email",t,{auth:true});return e.includes("SUCCESS")?(await q.bind(this)().getSession({refreshToken:true}),this.user):e}async function Pt(t){return await this.__connection,t=f.Params(t,{username:f.Email,redirect:f.Url},["username"]),await E.bind(this)("request-username-change",t,{auth:true})}var ce=null,kt=typeof SubmitEvent<"u",vr=typeof HTMLFormElement<"u",he=V(),qe=0;function vt(t){if(!t)return null;let e=Number(t);if(Number.isFinite(e))return Math.max(0,e*1e3);let n=Date.parse(t);return Number.isNaN(n)?null:Math.max(0,n-Date.now())}function Ve(t,e){return e>0?t/e*100:0}var St=t=>{let{auth:e,type:n,endpoints:r}=t,s=r[0],i=r[1];if(qe++,n==="admin"){let o=Object.entries(s).filter(([u,l])=>u.includes(e?"_private":"_public")&&u!=="get_users_private"&&u!=="service_public"&&typeof l=="string").map(([,u])=>u);if(!o.length)throw new a("No available admin gateways.",{code:"INVALID_REQUEST"});return o[qe%o.length]}if(n==="record"){let o=Object.entries(i).filter(([u,l])=>u.includes(e?"record_private":"record_public")&&typeof l=="string").map(([,u])=>u);if(!o.length)throw new a("No available record gateways.",{code:"INVALID_REQUEST"});return o[qe%o.length]}throw new a("Invalid gateway type.",{code:"INVALID_REQUEST"})};async function xr(t,e){let n=await Promise.all([this.admin_endpoint,this.record_endpoint]),r=n[0],s=n[1],i=t.split("?"),o=i.length>1?"?"+i[1]:"";switch(t=i[0],t){case "get-users":return r.get_users_private+t+o;case "service":return r.service_public+t+o;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 "request-username-change":case "send-inquiry":case "register-newsletter-group":case "newsletter-group-endpoint":case "invitation-list":case "csr":case "csr-poll":case "csr-cancel":return St.bind(this)({auth:e,type:"admin",endpoints:n})+t+o;case "post-record":return (e?s.post_private:s.post_public)+t+o;case "get-records":return (e?s.get_private:s.get_public)+t+o;case "del-files":case "del-records":return s.del_private+t+o;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 "extract-file-text":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 St.bind(this)({auth:e,type:"record",endpoints:n})+t+o;default:return f.Url(t)+o}}var fe={};function xt(){ce&&(ce.terminate(),ce=null);}async function E(t,e=null,n,r){this.log("request",{url:t,data:e,options:n,_etc:r||{}}),n=n||{};let{auth:s=false,method:i="post",bypassAwaitConnection:o=false}=n;i=i.toUpperCase();let u=null,l=e?.service||this.service,c=e?.owner||this.owner,g=null,d=await xr.bind(this)(t,!!s);if(!o&&(u=await this.__connection,!u))throw new a("Invalid connection. The service could have been disabled, or has a restricted CORS.",{code:"INVALID_REQUEST"});let h=n?.tokenHeaders?.idToken===true;(s||h)&&(g=await ae.bind(this)());let _={},{fetchMore:p=false,progress:m}=n?.fetchOptions||{};if(n?.fetchOptions&&Object.keys(n.fetchOptions).length){for(let k of ["limit","startKey","ascending"])if(n.fetchOptions.hasOwnProperty(k)){if(k==="startKey"&&n.fetchOptions[k]===null)continue;_[k]=n.fetchOptions[k];}_=f.Params(_,{limit:k=>{if(typeof k!="number")throw new a("Fetch limit should be a number.",{code:"INVALID_REQUEST"});if(k>1e3)throw new a("Fetch limit should be below 1000.",{code:"INVALID_REQUEST"});return k},startKey:k=>k,ascending:"boolean"});}let I=r?.ignoreService?{}:{service:l,owner:c};Object.assign(I,_),e=N(e).data,e?e&&typeof e=="object"&&(e=Object.assign(I,e)):e=I;let y=`${i}:${s?"auth":"public"}:${t}`,S=(()=>{if(e&&typeof e=="object"&&Object.keys(e).length&&!(he&&e instanceof FormData)){let k=function(D){return typeof D=="object"&&D!==null?Object.keys(D).sort().reduce((U,L)=>(typeof D[L]=="object"&&D[L]!==null?U[L]=k(D[L]):U[L]=D[L],U),{}):D};return M.hash(y+"/"+JSON.stringify(k(e)))}return M.hash(y+"/"+l)})(),{requestKey:v,requestKeyWithStartKey:P}=Dr.bind(this)({params:e,url:t,fetchMore:p,hashedParams:S});if(!v||v&&typeof v=="object")return v;if(this.log("requestKey",P),typeof P=="string"&&fe[P]instanceof Promise)return this.log("request:returning pending",P),fe[P];let x={Accept:"*/*"};if(Object.prototype.hasOwnProperty.call(n,"contentType")&&n.contentType!==void 0){let k=n.contentType===null?"application/x-www-form-urlencoded":n.contentType;k&&(x["Content-Type"]=k);}else x["Content-Type"]="application/json";if(g&&(x.Authorization=g),n?.tokenHeaders){let k=(L,Wn)=>typeof L=="string"?L:L===true?Wn:null,D=k(n.tokenHeaders.accessToken,this.session?.accessToken?.jwtToken||null),U=k(n.tokenHeaders.idToken,this.bearerToken||this.session?.idToken?.jwtToken||g||null);D&&(x["X-Access-Token"]=D),U&&(x["X-Id-Token"]=U);}let re={public_identifier:this.__public_identifier,service:l,owner:c};x["Content-Meta"]=JSON.stringify(re);let $={headers:x};if(n?.responseType&&($.responseType=n.responseType),i==="GET"){if(e){let k=[];if(he&&e instanceof FormData?k=Array.from(e.entries()).map(([D,U])=>{let L=typeof U=="string"?U:U.name;return encodeURIComponent(D)+"="+encodeURIComponent(L)}):k=Object.keys(e).map(D=>{let U=e[D];return typeof U!="string"&&(U=JSON.stringify(U)),encodeURIComponent(D)+"="+encodeURIComponent(U)}),k.length){let D=d.includes("?")?d.endsWith("?")||d.endsWith("&")?"":"&":"?";d+=D+k.join("&");}}$.body=null;}else if(he&&e instanceof FormData)$.body=e;else if(x["Content-Type"]==="application/x-www-form-urlencoded"&&e&&typeof e=="object"){let k=new URLSearchParams;for(let D of Object.keys(e)){let U=e[D];k.append(D,typeof U=="string"?U:JSON.stringify(U));}$.body=k.toString();}else typeof e=="string"?$.body=e:$.body=e?JSON.stringify(e):null;if($.method=i,ce===null){let k={batchSize:this.requestBatchSize,breakWhenError:false,onProgress:D=>{this.onBatchProcess.forEach(U=>U(D));}};ce=new ln__default.default(k);}return this.log("request-opt",$),new Promise((k,D)=>{ce.add([async()=>{let U=Dt.bind(this)(d,$,m);fe[P]=U;try{let L=Ur.bind(this)({hashedParam:v,requestKeyWithStartKey:P,url:t,fetched:await U});return delete fe[P],this.log("request:end",L),k(L),L}catch(L){throw delete fe[P],this.log("request:err",L),D(L),L}}]);})}function Dr(t){let{params:e={},url:n,fetchMore:r=false,hashedParams:s}=t||{};if(e.startKey){if(!(typeof e.startKey=="object"&&Object.keys(e.startKey).length)&&e.startKey!=="start"&&e.startKey!=="end")throw new a(`"${e.startKey}" is invalid startKey key.`,{code:"INVALID_PARAMETER"});e.startKey==="start"&&(r=false,delete e.startKey);}if(!r){if(this.__cached_requests?.[n]?.[s]&&delete this.__cached_requests[n][s],this.__startKeyHistory?.[n]?.[s]){if(Array.isArray(this.__startKeyHistory[n][s])&&this.__startKeyHistory[n][s].length)for(let l of this.__startKeyHistory[n][s]){let c=s+M.hash(l);this.__cached_requests?.[n]&&this.__cached_requests?.[n]?.[c]&&delete this.__cached_requests[n][c];}delete this.__startKeyHistory[n][s];}return {requestKeyWithStartKey:s,requestKey:s}}if(!Array.isArray(this.__startKeyHistory?.[n]?.[s]))return {requestKeyWithStartKey:s,requestKey:s};let i=this.__startKeyHistory[n][s],o=i[i.length-1],u=s;if(o){if(o==="end")return {requestKey:{list:[],startKey:"end",endOfList:true,startKeyHistory:i},requestKeyWithStartKey:u};u+=M.hash(o),e.startKey=JSON.parse(o);}return this.__cached_requests?.[n]?.[u]?{requestKey:this.__cached_requests[n][u],requestKeyWithStartKey:u}:{requestKeyWithStartKey:u,requestKey:s}}function Dt(t,e,n){return new Promise((r,s)=>{let i=new XMLHttpRequest;i.open(e.method||"GET",t);for(var o in e.headers||{})i.setRequestHeader(o,e.headers[o]);e.responseType&&(i.responseType=e.responseType),i.onload=()=>{if(i.status<400)if(e.responseType=="json"||e.responseType=="blob")r(i.response);else {let u=i.responseText;try{u=JSON.parse(u);}catch{}r(u);}else if(i.status===429){let u=i.getResponseHeader("Retry-After"),l=vt(u);l!==null?setTimeout(()=>{Dt(t,e,n).then(r,s);},l):s("Too many requests");}else {let u=i.status,l=["INVALID_CORS","INVALID_REQUEST","SERVICE_DISABLED","INVALID_PARAMETER","ERROR","EXISTS","NOT_EXISTS"],c=e.responseType=="blob"?i.response:i.responseText;try{c=JSON.parse(c);}catch{}if(typeof c=="string"){let g=c.split(":"),d=g.splice(0,1)[0].trim(),h=g.join(":").trim();s(new a(h||c,{code:l.includes(d)?d:"ERROR"}));}else if(typeof c=="object"&&c?.message){let g=c?.code||(u?u.toString():null)||"ERROR",d=c.message,h=c?.cause;typeof d=="string"&&(d=d.trim()),s(new a(d,{cause:h,code:g}));}else s(c);}},i.onerror=()=>s("Network error"),i.onabort=()=>s("Aborted"),i.ontimeout=()=>s("Timeout"),typeof n=="function"&&(i.onprogress=u=>{n({status:"download",progress:Ve(u.loaded,u.total),loaded:u.loaded,total:u.total,abort:()=>i.abort()});},i.upload&&(i.upload.onprogress=u=>{n({status:"upload",progress:Ve(u.loaded,u.total),loaded:u.loaded,total:u.total,abort:()=>i.abort()});})),i.send(e.body);})}function Ur(t){let{hashedParam:e,requestKeyWithStartKey:n,url:r,fetched:s}=t;if(!s?.startKey)return s;this.__startKeyHistory.hasOwnProperty(r)||(this.__startKeyHistory[r]={}),this.__startKeyHistory[r].hasOwnProperty(e)||(this.__startKeyHistory[r][e]=[]);let i=s.startKey==="end"?"end":JSON.stringify(s.startKey);return this.__startKeyHistory[r][e].includes(i)||this.__startKeyHistory[r][e].push(i),this.__cached_requests?.[r]||(this.__cached_requests[r]={}),this.__cached_requests[r][n]=s,Object.assign({startKeyHistory:this.__startKeyHistory[r][e]},s)}async function Pe(t,e){await this.__connection;let{record_id:n,service:r=this.service,progress:s}=e;if(!n)throw new a('"record_id" is required.',{code:"INVALID_PARAMETER"});if(kt&&t instanceof SubmitEvent&&(t=t.target),vr&&t instanceof HTMLFormElement&&(t=new FormData(t)),!he||!(t instanceof FormData))throw new a('"fileList" should be a FormData or HTMLFormElement.',{code:"INVALID_PARAMETER"});let o={reserved_key:ie(),service:r,request:"post"};e?.record_id&&(o.id=e.record_id);let u,l=(_,p,m)=>new Promise((I,y)=>{u=new XMLHttpRequest,u.open("POST",_),u.onload=()=>{let S=u.responseText;try{S=JSON.parse(S);}catch{}if(u.status>=200&&u.status<300)I(S);else if(u.status===429){let v=u.getResponseHeader("Retry-After"),P=vt(v);P!==null?setTimeout(()=>{l(_,p,m).then(I,y);},P):y("Too many requests");}else y(S);},u.onerror=()=>y("Network error"),u.onabort=()=>y("Aborted"),u.ontimeout=()=>y("Timeout"),u.upload&&typeof m=="function"&&(u.upload.onprogress=m),u.send(p);});function c(_){let p="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";if(_===0)return p[0];let m="";for(;_>0;)m=p[_%62]+m,_=Math.floor(_/62);return m}let g=[],d=[],h=[];for(let[_,p]of t.entries()){if(!(p instanceof File))continue;let m=Object.assign({key:_+"/"+p.name,sizeKey:c(p.size),contentType:p.type||null},o),{fields:I=null,url:y,cdn:S}=await E.bind(this)("get-signed-url",m,{auth:!!this.__user});h.push(S);let v=new FormData;for(let P in I)v.append(P,I[P]);v.append("file",p);try{await l(y,v,typeof s=="function"?P=>s({status:"upload",progress:Ve(P.loaded,P.total),currentFile:p,completed:g,failed:d,loaded:P.loaded,total:P.total,abort:()=>u.abort()}):null),g.push(p);}catch{d.push(p);}}return {completed:g,failed:d,bin_endpoints:h}}var Te={};function A(t){let{preventMultipleCalls:e=false}=t||{};return function(n,r,s){let i=s.value;s.value=function(...o){let u=o[0],l=true,c=null,g="",d={},h=false;if(kt&&u instanceof SubmitEvent){u.preventDefault();let y=window.location.href;c=u.target;let S=new URL(c.action);g=S.href;let v=g?g.match(/(?<=\{).*?(?=\})/g):"";if(v)for(let P of v){if(!P)continue;let x=c.querySelector(`[name="${P}"]`);if(x)if(x.type==="file")for(let j=0;j<=x.files.length-1;j++)x.files[j]&&(d[P]||(d[P]=[]),d[P].push(new Promise((re,$)=>{let k=new FileReader;k.onload=function(){re(k.result);},k.readAsDataURL(x.files[j]),k.onerror=$;})));else g=g.replace(`{${P}}`,x.value);}c.getAttribute("action")===null?l=false:h=S.href===y;}let _=async y=>{if(g)for(let S in d)d[S].length&&(g=g.replace(`{${S}}`,(await Promise.all(d[S])).join(",")));return c&&l&&(window.sessionStorage.setItem(`${this.service}:${M.hash(g)}`,JSON.stringify(y)),h?window.location.replace(g):window.location.href=g),y},p,m=y=>{throw y instanceof a?y.name=r+"()":y=y instanceof Error?y:new a(y,{name:r+"()"}),y},I=async()=>{try{if(p=i.bind(this)(...o),p instanceof Promise){let y=await p;return _(y)}return _(p)}catch(y){throw m(y)}};if(e){let y=`${r}:${this?.__public_identifier||""}:${this?.service||""}:${this?.owner||""}`;return Te?.[y]||(Te[y]=I().finally(()=>{delete Te[y];})),Te[y]}return I()};}}async function Ut(){await this.__connection;let t=`${this.service}:${M.hash(window.location.href.split("?")[0])}`,e=window.sessionStorage.getItem(t);if(window.sessionStorage.removeItem(t),e!==null){try{e=JSON.parse(e);}catch{}return e}return null}var Nr=128,Cr=64,Lr=128,Or=256,Mr="\u{10FFFF}",Fr=/[\u0000-\u001F\u007F]|\u{10FFFF}/u,qr=/[\/!*#]/,Vr={"/":"%2F","!":"%21","*":"%2A","#":"%23"},$r={"%2F":"/","%21":"!","%2A":"*","%23":"#"};function jr(t){return t.replace(/%/g,"%25").replace(/[\/!*#]/g,n=>Vr[n]||n)}function Q(t){return typeof t!="string"?t:t.replace(/%(2F|21|2A|23)/gi,n=>{let r=n.toUpperCase();return $r[r]||n}).replace(/%25/gi,"%")}function ee(t,e,n={}){let{allowEmpty:r=false,maxLength:s,blockKeyDelimiters:i=false,disallowLeadingDollar:o=false,onlyAlphanumeric:u=false}=n;if(typeof t!="string")throw new a(`"${e}" should be type: <string>.`,{code:"INVALID_PARAMETER"});if(u&&/[^a-zA-Z0-9]/.test(t))throw new a(`"${e}" should only contain alphanumeric characters.`,{code:"INVALID_PARAMETER"});if(!r&&t.length===0)throw new a(`"${e}" is required.`,{code:"INVALID_PARAMETER"});if(s&&t.length>s)throw new a(`"${e}" should be <= ${s} characters.`,{code:"INVALID_PARAMETER"});if(Fr.test(t)||t.includes(Mr))throw new a(`"${e}" cannot include control characters or unsupported sentinel characters.`,{code:"INVALID_PARAMETER"});if(i&&qr.test(t)&&(t=jr(t)),o&&t.startsWith("$"))throw new a(`"${e}" cannot start with "$".`,{code:"INVALID_PARAMETER"});return t}function $e(t,e="table.name"){return ee(t,e,{allowEmpty:false,maxLength:Nr,blockKeyDelimiters:true})}function je(t,e="tag"){return ee(t,e,{allowEmpty:false,maxLength:Cr,blockKeyDelimiters:true})}function pe(t,e="index.name"){return ee(t,e,{allowEmpty:false,maxLength:Lr,blockKeyDelimiters:true,disallowLeadingDollar:true})}function Nt(t,e="index.value"){return ee(t,e,{allowEmpty:true,maxLength:Or})}function Ct(t){if(!t.record_id&&!t.unique_id)return null;let e={};return t?.service&&(e.service=t.service),t?.owner&&(e.owner=t.owner),t?.record_id?e.record_id=ee(t.record_id,"record_id",{allowEmpty:false,onlyAlphanumeric:true}):t?.unique_id&&(e.unique_id=t.unique_id),e}function Be(t){if(t===void 0)return 0;if(typeof t=="number"){if(t>99||t<0)throw new a('"table.access_group" value should be within a range of 0 ~ 99.',{code:"INVALID_REQUEST"})}else if(typeof t=="string"){if(t={private:"private",public:0,authorized:1,admin:99}[t],t===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&&t)throw new a("Unsigned users have no access to records with access group.",{code:"INVALID_REQUEST"});return t}var Se=4503599627370496;function ke(t){if(typeof t=="number"){if(t>Se||t<-Se)throw new a(`Number value should be within range -${Se} ~ +${Se}`,{code:"INVALID_PARAMETER"});return t}if(typeof t=="boolean")return t;if(typeof t=="string")return Nt(t,"index.value");throw new a('"index.value" should be type: <number | boolean | string>.',{code:"INVALID_PARAMETER"})}function Lt(t,e){if(!e.index||!("value"in e.index))throw new a('"index.value" is required.',{code:"INVALID_PARAMETER"});if(e.index.name==="$record_id")throw new a(`Cannot do "index.range" on ${e.index.name}`,{code:"INVALID_PARAMETER"});if(typeof e.index.value!=typeof t)throw new a('"index.range" type should match the type of "index.value".',{code:"INVALID_PARAMETER"});return typeof t=="string"?Nt(t,"index.range"):t}var ve={};async function Br(t){return typeof t=="string"?t:t&&typeof t.text=="function"?await t.text():await new Promise((e,n)=>{try{let r=new FileReader;r.onload=()=>e(r.result),r.onerror=()=>n(r.error||new Error("Failed to read blob")),r.readAsText(t);}catch(r){n(r);}})}async function le(t,e,n=false){let r={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:{}},s=false,i=[];function o(c){let g=c=="**"?"private":parseInt(c);return g=g==0?"public":g==1?"authorized":g==99?"admin":g,g}let u={ip:c=>{let g=c.split("#"),d=g[0];g.length>1&&(r.unique_id=g.slice(1).join("#")),d.slice(-1)==="R"?(r.readonly=true,d=d.slice(0,-1)):r.readonly=false,/^\d{1,3}-\d{1,3}-\d{1,3}-\d{1,3}$/.test(d)&&(d=d.split("-").join("."),s=true),r.ip=d;},rec:c=>{if(!c)return;r.record_id=c;let g=c.substring(0,c.length-9),d=B(g);r.uploaded=d;},usr:c=>{r.user_id=c;},tbl:c=>{if(c&&!r.table.name){let g=c.split("/");r.table.name=Q(g[0]),r.table.access_group=o(g[2]),g?.[3]&&(r.table.subscription.is_subscription_record=true);}},usr_tbl:c=>{let g=c.split("/");r.user_id||(r.user_id=g[0]),r.table.name||(r.table.name=Q(g[1]),r.table.access_group=o(g[3]),g?.[4]&&(r.table.subscription.is_subscription_record=true));},idx:c=>{if(!c)return;let g=c.split("!"),d=Q(g.splice(0,1)[0]),h=Qr("!"+g.join("!"));typeof h=="string"&&(h=Q(h)),r.index={name:d,value:h};},ref:c=>{c&&(r.reference=c.split("/")[0]);},tags:c=>{r.tags=Array.isArray(c)?c.map(g=>Q(g)):c;},upd:c=>{r.updated=c;},acpt_mrf:c=>{r.source.prevent_multiple_referencing=!c;},ref_limt:c=>{r.source.referencing_limit=c;},rfd:c=>{r.referenced_count=c;},bin:async c=>{let g={},d=r?.reference||null;if(Array.isArray(c)){let h=await Promise.all(c.map(async _=>{try{let p=_.split("/").slice(3).join("/"),m=p.split("/");if(m.length<12)return null;let I=decodeURIComponent(m[m.length-1]),y=decodeURIComponent(m[10]);if(y==="__data__"&&I==="__json__.json")return {isDataFile:!0,rawUrl:_};let S=m[9],v=m[8],P=o(m[6]),x=_;if(P!=="public")try{x=await me.bind(this)(_,{dataType:"endpoint",_ref:d});}catch(re){console.error("Error getting signed url for private file:",re),x=_;}let j={access_group:P,filename:I,url:x,path:p,size:B(S),uploaded:B(v),getFile:(re,$)=>{let k={dataType:re||"download",progress:$,_ref:d,_update:j};return me.bind(this)(x,k)}};return {pathKey:y,obj:j}}catch{return null}}));for(let _ of h)if(_&&!_.isDataFile){if(g[_.pathKey]){g[_.pathKey].push(_.obj);continue}g[_.pathKey]=[_.obj];}}r.bin=g;},prv_acs:c=>{for(let g in c)["notify_subscribers","upload_to_feed","feed_referencing_records","notify_referencing_records"].includes(g)?r.table.subscription[g]=c[g]:r.source[g]=c[g];},data:async c=>{if(c==="!D%{}"){r.data={};return}if(c==="!L%[]"){r.data=[];return}if(c&&typeof c=="object"&&!Array.isArray(c)&&typeof c.__data__=="string"&&Object.keys(c).length===1&&c.__data__.endsWith("/__data__/__json__.json")){let g=c.__data__,d=i.find(h=>h.endsWith(g))||null;if(d){if(n){r.data=c;return}try{let h=await me.bind(this)(d,{dataType:"blob",_ref:r.reference||null}),_=await Br(h);r.data=JSON.parse(_);}catch(h){console.error("Failed to fetch offloaded record data:",h),r.data=null;}return}}r.data=c;}};if(t.record_id)return t;if(Array.isArray(t.bin))for(let c of t.bin)try{if(typeof c!="string")continue;let g=c.split("/").slice(3);g.length>=12&&decodeURIComponent(g[10])==="__data__"&&decodeURIComponent(g[g.length-1])==="__json__.json"&&i.push(c);}catch{}let l=[];for(let c in u)if(t.hasOwnProperty(c)){let g=u[c](t[c]);g instanceof Promise&&l.push(g);}return s&&(r.user_id="anonymous:"+r.user_id),await Promise.all(l),r}function Qr(t){let e=t.substring(3);switch(t.substring(0,3)){case "!S%":return e;case "!N%":let r=e.split("."),s=Number(r[0])-4503599627370496;return r.length===1?s:parseFloat(s.toString()+"."+r[1]);case "!B%":return e==="1";case "!L%":case "!D%":try{return JSON.parse(e)}catch{throw new a("Value parse error.",{code:"PARSE_ERROR"})}default:return t}}async function Ot(t){let{endpoints:e}=t;if(typeof e=="string"&&(e=[e]),!Array.isArray(e))throw new a('"endpoints" should be type: array | string.',{code:"INVALID_PARAMETER"});let n=await E.bind(this)("del-files",{endpoints:e,storage:"records"},{auth:true,method:"post"}),r=[];for(let s in n)r.push(le.bind(this)(n[s]));return Promise.all(r)}async function me(t,e){if(typeof t!="string")throw new a('"url" should be type: string.',{code:"INVALID_PARAMETER"});let n=t.split("?"),r=n.shift()||"",s=n.length?"?"+n.join("?"):"",i=f.Url(r);t=i+s;let o=false,u=i.split("/"),c=u[2].split("."),g=null;c.length===3&&c[1]==="skapi"&&(g=c[0],o=true);let d=u.slice(3),h=false;if(!o&&(d[0]==="auth"||d[0]==="publ"))try{f.UserId(d[2]),f.UserId(d[3]),h=d[0]=="auth",o=!0;}catch{throw new a("Invalid file url.",{code:"INVALID_PARAMETER"})}let _=g?null:d[1];if(e=f.Params(e,{expires:["number",()=>0],dataType:["base64","blob","endpoint","text","info",()=>"download"],progress:["function","undefined",null],_ref:[null,"string"],_update:y=>y}),e?.dataType==="info")return {url:t,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:B(d[9]),uploaded:B(d[8])};let p=t.split("/").slice(-1)[0],m=e.expires;if(m){if(!o)throw new a("Expires option can only be used on skapi cdn endpoints.",{code:"INVALID_PARAMETER"});if(m<0)throw new a('"config.expires" should be > 0. (seconds)',{code:"INVALID_PARAMETER"});let y={request:g?"get-host":"get",id:g||d[5],key:t,expires:m};_&&(y.service=_),t=(await E.bind(this)("get-signed-url",y,{auth:true})).url;}else if(h){let y=Math.floor(Date.now()/1e3);if(!this.bearerToken&&(!this.session?.idToken?.payload?.exp||this.session.idToken.payload.exp<y)){this.log("getFile:requesting new token",null);try{await q.bind(this)().getSession({refreshToken:!0}),this.log("getFile:received new tokens",{exp:this.session?.idToken?.payload?.exp,currTime:y,expiresIn:this.session?.idToken?.payload?.exp-y,token:this.session?.accessToken?.jwtToken,refreshToken:this.session?.refreshToken?.token});}catch(x){throw this.log("getFile:new token error",x),new a("User login is required.",{code:"INVALID_REQUEST"})}}let S=this.bearerToken||this.session?.idToken?.jwtToken;if(!S||!this.user?.user_id)throw new a("User login is required.",{code:"INVALID_REQUEST"});t+=`${t.includes("?")?"&":"?"}t=${encodeURIComponent(S)}`;let v=d[6]==="**"?"**":parseInt(d[6]),P=this.user?.access_group??-1;if(this.user.user_id!==d[3]&&(v==="**"||P<v)){let x=d[5];if(this.__private_access_key[x]&&typeof this.__private_access_key[x]=="string")t+=`&p=${encodeURIComponent(this.__private_access_key[x])}`;else if(this.owner!==this.host)try{let j=await this.requestPrivateRecordAccessKey({record_id:x,reference_id:e?._ref});t+=`&p=${encodeURIComponent(j)}`;}catch{}}}if(e?.dataType==="endpoint")return e._update&&(e._update.url=t),t;if(e?.dataType==="download"){let y=document.createElement("a");return y.href=t,document.body.appendChild(y),y.setAttribute("download",p),y.target="_blank",y.click(),document.body.removeChild(y),null}return new Promise(async(y,S)=>{try{let v=await E.bind(this)(t,null,{method:"get",contentType:null,responseType:e?.dataType==="text"?"text":"blob",fetchOptions:{progress:e?.progress}},{ignoreService:!0});if(e?.dataType==="base64"){let P=new FileReader;P.onloadend=()=>y(P.result),P.readAsDataURL(v);}else y(v);}catch(v){S(v);}})}async function Mt(t,e=false){t=N(t,{ignoreEmpty:true}).data||{};let n="",r=Ct(t);if(r)t=r,n=t.record_id||t.unique_id,typeof n=="string"&&(typeof this.__private_access_key?.[n]=="string"&&(t.private_key=this.__private_access_key?.[n]||void 0),this.__my_unique_ids[n]&&(e?delete this.__my_unique_ids[n]:t.record_id=this.__my_unique_ids[n]));else {let s=await F.bind(this)(),i=t?.reference,o=false;typeof i=="object"&&Object.keys(i).length&&(i?.record_id||i?.unique_id?(n=i.record_id||i.unique_id,n&&typeof this.__private_access_key?.[n]=="string"&&(t.private_key=this.__private_access_key?.[n]||void 0),t.reference=n):i?.user_id&&(o=i.user_id===this.user?.user_id,t.reference=i.user_id)),typeof t?.table=="string"&&(t.table={name:t.table,access_group:0}),t.index&&t.index.hasOwnProperty("range")&&t.index.hasOwnProperty("condition")&&delete t.index.range;let u=l=>({table:{name:c=>$e(c,"table.name"),access_group:Be.bind(this),subscription:c=>f.UserId(c,'User ID in "subscription"')},reference:"string",index:{name:["$updated","$uploaded","$referenced_count","$user_id",c=>pe(c,"index.name")],value:c=>{let g={$updated:"number",$uploaded:"number",$referenced_count:"number",$user_id:f.UserId};if(g.hasOwnProperty(l.index.name)){let d=g[l.index.name];if(typeof d=="function")return d(c);if(d!==typeof c)throw new a(`"index.value" should be type: ${d}.`,{code:"INVALID_PARAMETER"});return c}return typeof c=="string"&&!c?"":ke(c)},condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq"],range:c=>Lt(c,l)},tag:c=>{if(c==null)return c;if(typeof c=="string")return je(c,"tag");throw new a('"tag" should be type: string.',{code:"INVALID_PARAMETER"})},private_key:"string"});t=f.Params(t||{},u(t),o||s?[]:["table"],{ignoreEmpty:true});}return {query:t,is_reference_fetch:n}}async function Ft(t,e){await this.__connection;let n=await Mt.bind(this)(t),r=n.is_reference_fetch,s=await E.bind(this)("get-records",n.query,{fetchOptions:e,auth:!!this.__user,method:this.__user?"post":"get"});r&&s?.reference_private_key&&typeof s.reference_private_key=="string"&&(this.__private_access_key[r]=s.reference_private_key);let i=[];for(let o in s.list)i.push(le.bind(this)(s.list[o]));return s.list=await Promise.all(i),s}function qt(t){let e="",n=[],r=f.Params(t||{},{record_id:i=>typeof i=="string"&&this.__my_unique_ids[i]?this.__my_unique_ids[i]:ee(i,"record_id",{allowEmpty:false}),unique_id:["string",null],readonly:"boolean",table:{name:i=>$e(i,"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:Be.bind(this)},source:{referencing_limit:i=>{if(i===null)return null;if(typeof i=="number"){if(0>i)throw new a('"reference_limit" should be >= 0',{code:"INVALID_PARAMETER"});if(i>4503599627370546)throw new a('"reference_limit" should be <= 4503599627370546',{code:"INVALID_PARAMETER"});return i}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:i=>{if(i===void 0)return;if(!i||Array.isArray(i)&&!i.length)return null;let o={name:l=>pe(l,'"name" in "index_restrictions"'),value:l=>ke(l),condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq","!=","ne",()=>null],range:l=>{if(l!==null&&typeof i.value!=typeof l)throw new a('Index restriction "range" type should match the type of "value".',{code:"INVALID_PARAMETER"});if(!i.hasOwnProperty("value"))throw new a('Index restriction "value" is required.',{code:"INVALID_PARAMETER"});return l}};Array.isArray(i)||(i=[i]);let u=i.map(l=>f.Params(l,o,["name"]));if(u.length)for(let l of u)l.condition&&l.hasOwnProperty("range")&&delete l.range;return u}},reference:i=>{if(i===null)return {record_id:null};if(i){if(typeof i=="string")return e=i,this.__my_unique_ids[i]?this.__my_unique_ids[i]:i;if(typeof i!="object")throw new a('"reference" should be type: <string | object>.',{code:"INVALID_PARAMETER"});return f.Params(i,{unique_id:"string",record_id:o=>o==null?o:(e=o,typeof this.__private_access_key?.[o]=="string"&&(t.reference_private_key=this.__private_access_key[o]||void 0),ee(o,"reference.record_id",{allowEmpty:false,onlyAlphanumeric:true}))})}},index:[null,{name:i=>pe(i,"index.name"),value:i=>ke(i)}],tags:i=>{if(i==null)return i;if(typeof i=="string"&&(i=i.split(",").map(o=>o.trim())),!Array.isArray(i))throw new a('"tag" should be type: <string | string[]>.',{code:"INVALID_PARAMETER"});return i.map(o=>je(o,"tag"))},remove_bin:i=>{if(!i)return null;let o=[];if(Array.isArray(i))for(let u of i)if(typeof u=="string")o.push(decodeURIComponent(u.split("?")[0]));else if(u.url&&u.size&&u.filename){let c=u.url.split("/").slice(0,3).join("/")+"/"+u.path;o.push(c);}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 o},progress:"function",data:i=>i},[],{precall:i=>{let o=i?.data||{};if(!o?.record_id&&!o.table)throw new a('"table.name" is required.',{code:"INVALID_PARAMETER"});typeof o.table=="string"&&(o.table={name:o.table,access_group:0}),i.files&&(n=i.files);}}),s=t.progress||null;if(delete r.progress,!this.__user){let i=!!(r.table?.subscription?.is_subscription_record||r.table?.subscription?.upload_to_feed||r.table?.subscription?.notify_subscribers||r.table?.subscription?.feed_referencing_records||r.table?.subscription?.notify_referencing_records);if(r.record_id)throw new a("Public users cannot update existing records.",{code:"INVALID_REQUEST"});if(r.table.access_group!=="public"&&r.table.access_group!==0)throw new a("Public users can only post records to public tables.",{code:"INVALID_REQUEST"});if(i)throw new a("Public users cannot post subscription records.",{code:"INVALID_REQUEST"});if(r.remove_bin)throw new a("Public users cannot remove files from records.",{code:"INVALID_REQUEST"});if(r.unique_id)throw new a("Public users cannot set unique_id for records.",{code:"INVALID_REQUEST"})}return {config:r,progress:s,is_reference_post:e,files:n}}async function Vt(t){if(await this.__connection,!Array.isArray(t)||!t.length)throw new a('"params" should be a non-empty array.',{code:"INVALID_PARAMETER"});let e=[],n,r,s=null,o={_is_bulk_:t.map((d,h)=>{if(!d||typeof d!="object"||Array.isArray(d))throw new a(`"params[${h}]" should be type: <object>.`,{code:"INVALID_PARAMETER"});let _=qt.bind(this)(d),p=_.config;if(_.is_reference_post&&e.push(_.is_reference_post),typeof p.progress=="function"&&s===null&&(s=p.progress),p.service!==void 0){if(n===void 0)n=p.service;else if(n!==p.service)throw new a('All bulk params should share the same "service" value.',{code:"INVALID_PARAMETER"})}if(p.owner!==void 0){if(r===void 0)r=p.owner;else if(r!==p.owner)throw new a('All bulk params should share the same "owner" value.',{code:"INVALID_PARAMETER"})}return delete p.progress,delete p.service,delete p.owner,p}),service:"",owner:""};n!==void 0&&(o.service=n),r!==void 0&&(o.owner=r);let u={auth:!!this.__user,method:"post"},l={};Object.keys(l).length&&Object.assign(u,{fetchOptions:l});let c=await E.bind(this)("post-record",o,u),g=await Promise.all(c.map(d=>le.bind(this)(d,"called from postRecord")));for(let d=0;d<c.length;d++){let h=c[d],_=g[d];if(typeof h?.reference_private_key=="string")for(let p of e)this.__private_access_key[p]=h.reference_private_key;_?.unique_id&&(this.__my_unique_ids[_.unique_id]=_.record_id);}return g}async function $t(t,e,n){if(await this.__connection,!e)throw new a('"config" argument is required.',{code:"INVALID_PARAMETER"});let r=qt.bind(this)(e),s=r.config,i=r.progress,o=r.is_reference_post,u={auth:!!this.__user,method:"post"},l=[],c=N(t);n&&Array.isArray(n)&&n.length&&(l=l.concat(n)),c.files&&Array.isArray(c.files)&&c.files.length&&(l=l.concat(c.files));let g=null;g=Object.assign({data:c.data},s);let d={};typeof i=="function"&&(d.progress=i),Object.keys(d).length&&Object.assign(u,{fetchOptions:d});let h=await E.bind(this)("post-record",g,u);if(V()&&l.length){let m=new FormData;for(let S of l)m.append(S.name,S.file,S.file.name);let I={record_id:h.rec,progress:i};s.hasOwnProperty("service")&&(I.service=s.service);let{bin_endpoints:y}=await Pe.bind(this)(m,I);h.bin?h.bin.push(...y):h.bin=y;}o&&typeof h?.reference_private_key=="string"&&(this.__private_access_key[o]=h.reference_private_key);let _=!!h&&h.data&&typeof h.data=="object"&&!Array.isArray(h.data)&&typeof h.data.__data__=="string"&&h.data.__data__.endsWith("/__data__/__json__.json"),p=await le.bind(this)(h,"called from postRecord",true);return _&&(p.data=c.data),p.unique_id&&(this.__my_unique_ids[p.unique_id]=p.record_id,V()&&(this.__uniqueIdsPersistTimer!==null&&clearTimeout(this.__uniqueIdsPersistTimer),this.__uniqueIdsPersistTimer=setTimeout(()=>{this.__uniqueIdsPersistTimer=null;try{window.sessionStorage.setItem(`${this.service}:uniqueids`,JSON.stringify(this.__my_unique_ids));}catch{}},500))),p}async function jt(t,e){let n=await E.bind(this)("get-table",f.Params(t||{},{table:"string",condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq","!=","ne"]}),Object.assign({auth:!!this.__user},{fetchOptions:e})),r={cnt_rec:"number_of_records",tbl:"table",srvc:"service",grp_:"number_of_records_in_access_group_"};if(Array.isArray(n?.list))for(let s of n.list){for(let i in r){if(i==="grp_"){for(let o in s)if(o.startsWith("grp_")){let u=o.substring(4);u==="pv"?u="private":u==="00"?u="public":u==="01"?u="authorized":u==="99"&&(u="admin"),s[`number_of_records_in_access_group_${u}`]=s[o],delete s[o];}}s.hasOwnProperty(i)&&(s[r[i]]=s[i],delete s[i]);}typeof s.table=="string"&&(s.table=Q(s.table));}return n}async function Bt(t,e){if(!t?.table)throw new a('"table" is required.',{code:"INVALID_PARAMETER"});let n=f.Params(t||{},{table:"string",index:i=>pe(i,"index.name"),order:{by:["average_number","total_number","number_count","average_bool","total_bool","bool_count","string_count","index_name","number_of_records"],value:["string","number","boolean"],condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq","!=","ne"]}},["table"]);if(n.hasOwnProperty("order")){if(!n.order?.by)throw new a('"order.by" is required.',{code:"INVALID_PARAMETER"});if(n.order.hasOwnProperty("condition")&&!n.order.hasOwnProperty("value"))throw new a('"value" is required for "condition".',{code:"INVALID_PARAMETER"});if(n.hasOwnProperty("index")&&n.index.substring(n.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 r=await E.bind(this)("get-index",n,Object.assign({auth:!!this.__user},{fetchOptions:e})),s={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(r?.list)&&(r.list=r.list.map(i=>{let o=i.idx.split("/"),u={table:Q(o[1]),index:Q(o[2]),number_of_records:i.cnt_rec};for(let l in s)Object.prototype.hasOwnProperty.call(i,l)&&(u[s[l]]=i[l]);return u})),r}async function Qt(t,e){let n=await E.bind(this)("get-tag",f.Params(t||{},{table:"string",tag:"string",condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq","!=","ne"]}),Object.assign({auth:!!this.__user},{fetchOptions:e}));return Array.isArray(n?.list)&&(n.list=n.list.map(r=>{let s=r.tag.split("/");return {table:Q(s[1]),tag:Q(s[0]),number_of_records:r.cnt_rec}})),n}async function Kt(t,e){let n=await E.bind(this)("get-uniqueid",f.Params(t||{},{unique_id:"string",condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq","!=","ne"]}),Object.assign({auth:!!this.__user},{fetchOptions:e}));if(Array.isArray(n?.list))for(let r in n.list){let s=n.list[r];n.list[r]={unique_id:s.unq,record_id:s.rec};}return n}async function Ht(t,e){await this.__connection;let n=await Mt.bind(this)(t,true),r=n.is_reference_fetch,s=await E.bind(this)("del-records",n.query,{auth:true,fetchOptions:e});return r&&typeof s?.reference_private_key=="string"&&(this.__private_access_key[r]=s.reference_private_key),s?.message||s}function Wt(t){return Xt.bind(this)({record_id:t.record_id,user_id:t.user_id,execute:"add"})}function zt(t){return Xt.bind(this)({record_id:t.record_id,user_id:t.user_id||null,execute:"remove"})}async function Jt(t,e){let n={record_id:t.record_id||void 0,user_id:t.user_id||void 0,execute:"list"};if(!n.record_id&&!n.user_id)throw new a("Either record_id or user_id must be provided.",{code:"INVALID_PARAMETER"});if(n.user_id)if(typeof n.user_id=="string")f.UserId(n.user_id),n.user_id=[n.user_id];else if(Array.isArray(n.user_id))for(let i of n.user_id)f.UserId(i);else throw new a("user_id should be type: <string | string[]>",{code:"INVALID_PARAMETER"});let r=i=>(i.rec_usr?(i.record_id=i.rec_usr.split("/")[0],i.user_id=i.rec_usr.split("/")[1]):i.usr_rec&&(i.user_id=i.usr_rec.split("/")[0],i.record_id=i.usr_rec.split("/")[1]),i),s=await E.bind(this)("grant-private-access",n,{auth:true,fetchOptions:e});return s.list=s.list.map(r),s}function Gt(t){let e=t.record_id,n=t.reference_id||void 0;if(!e)throw new a("Record ID is required.",{code:"INVALID_PARAMETER"});if(typeof e!="string")throw new a("Record ID should be type: <string | string[]>",{code:"INVALID_PARAMETER"});if(n&&typeof n!="string")throw new a("Reference ID should be type: <string>",{code:"INVALID_PARAMETER"});if(typeof this.__private_access_key[e]=="string")return Promise.resolve(this.__private_access_key[e]);if(ve[e])return ve[e];let r=E.bind(this)("request-private-access-key",{record_id:e,reference_id:n},{auth:true}).then(s=>{let i=typeof s=="string"?s:s?.private_key;if(typeof i!="string")throw new a("Invalid private access key response.",{code:"ERROR"});return this.__private_access_key[e]=i,i}).finally(()=>{delete ve[e];});return ve[e]=r,r}function Xt(t){t.execute;let n=f.Params(t,{record_id:"string",user_id:r=>{if(!r)throw new a("User ID is required.",{code:"INVALID_PARAMETER"});let s=r;if(typeof s=="string"&&(s=[s]),s.length>100)throw new a("Cannot process more than 100 users at once.",{code:"INVALID_REQUEST"});for(let i of s)f.UserId(i,'User ID in "user_id"');return s},execute:["add","remove"]},["execute","record_id","user_id"]);return n.user_id||(n.user_id=null),E.bind(this)("grant-private-access",n,{auth:true})}var T={},O={},K={},z={},W={},xe={},De={};function Zt(t,e,n){t[e]||(t[e]=[]),t[e].push(n);}async function Ue(t,e,n){let r=[];if(t[e]){for(let s of t[e])if(s){let i=n(s);i instanceof Promise&&(i=await i),r.push(i);}delete t[e];}return r}async function Ke(t,e){if(!this?.session?.accessToken?.jwtToken)throw new a("Access token is required.",{code:"INVALID_PARAMETER"});let n=await this.__socket;async function r(s,i,o){this.log("answerSdpOffer from",i),await T[i].setRemoteDescription(new RTCSessionDescription(s));let u=await T[i].createAnswer();await T[i].setLocalDescription(u),o.send(JSON.stringify({action:"rtc",uid:i,content:{sdpanswer:u},token:this.session.accessToken.jwtToken}));}T?.[e]?t?(await Ue(De,e,s=>r.bind(this)(s,e,n)),await r.bind(this)(t,e,n)):await Ue(De,e,s=>r.bind(this)(s,e,n)):t&&Zt(De,e,t);}async function He(t,e){if(this.log("receiveIceCandidate",t),T?.[e]&&T[e]?.remoteDescription&&T[e]?.remoteDescription?.type){if(!t)return Ue(xe,e,n=>T[e].addIceCandidate(n));await Ue(xe,e,n=>T[e].addIceCandidate(n)),await T[e].addIceCandidate(t);}else Zt(xe,e,t);}async function H(t){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebRTC is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});f.Params(t,{cid:i=>{if(typeof i!="string")throw new a('"cid" should be type: <string>.',{code:"INVALID_PARAMETER"});if(i&&i.slice(0,4)!=="cid:")throw new a('"cid" should be a valid connection id.',{code:"INVALID_PARAMETER"});return i},close:"boolean"});let e=await this.__socket,{cid:n,close_all:r=false}=t||{};if(!r&&!n)throw new a('"cid" is required.',{code:"INVALID_PARAMETER"});let s=i=>{if(!i)throw new a('"cid" is required.',{code:"INVALID_PARAMETER"});if(delete De[i],delete xe[i],O[i]&&Object.values(O[i]).forEach(o=>{o.readyState!=="closed"&&o.close();}),delete O[i],T?.[i]){T[i].connectionState!=="closed"&&(T[i].close(),e.send(JSON.stringify({action:"rtc",uid:i,content:{hungup:this.user.user_id},token:this.session.accessToken.jwtToken})));let o={type:"connectionstatechange",target:T[i],timestamp:new Date().toISOString(),state:T[i].connectionState,iceState:T[i].iceConnectionState,signalingState:T[i].signalingState};W[i]&&W[i](o),this.log("closeRTC",o);}delete W[i],delete z[i],delete K[i],delete T[i];};if(r)for(let i in T)s(i);else s(n);this.log("Cleaning up media stream..."),this.__mediaStream&&(this.__mediaStream.getTracks().forEach(i=>{i.stop();}),this.__mediaStream=null);}async function Yt(t){if(t instanceof MediaStream)return t;if(!t.video&&!t.audio){let e=new MediaStream,n=document.createElement("canvas");n.width=1,n.height=1;let s=n.captureStream().getVideoTracks()[0];return e.addTrack(s),e}return window.navigator.mediaDevices.getUserMedia(t)}async function en(t,e){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebRTC is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});if(typeof e!="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"});t=f.Params(t,{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:["string",()=>"stun:stun.skapi.com:3468"],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:n,ice:r}=t;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=this.__socket?await this.__socket:this.__socket;if(!s)throw new a("No realtime connection. Execute connectRealtime() before this method.",{code:"INVALID_REQUEST"});if(s.readyState!==1)throw new a("Realtime connection is not ready.",{code:"INVALID_REQUEST"});let i={iceServers:[{urls:r}]};T?.[n]||(T[n]=new RTCPeerConnection(i)),t?.media&&(this.__mediaStream=await Yt(t.media),this.__mediaStream.getTracks().forEach(o=>{T[n].addTrack(o,this.__mediaStream);})),W[n]=e,O[n]||(O[n]={});for(let o=0;o<t.channels.length;o++){let u=t.channels[o];if(typeof u=="string")switch(u){case "text-chat":u={ordered:true,maxRetransmits:10,protocol:"text-chat"};break;case "file-transfer":u={ordered:false,maxPacketLifeTime:3e3,protocol:"file-transfer"};break;case "video-chat":u={ordered:true,maxRetransmits:10,protocol:"video-chat"};break;case "voice-chat":u={ordered:true,maxRetransmits:10,protocol:"voice-chat"};break;case "gaming":u={ordered:false,maxPacketLifeTime:100,protocol:"gaming"};break;default:u={ordered:true,maxRetransmits:10,protocol:"default"};break}let l=u.protocol||"default";if(Object.keys(O[n]).includes(l))throw new a(`Data channel with the protocol "${l}" already exists.`,{code:"INVALID_REQUEST"});let c=T[n].createDataChannel(l,u);O[n][l]=c;}for(let o in O[n]){let u=O[n][o];rn.bind(this)(n,u);}return nn.bind(this)(n,["onnegotiationneeded"]),await Qe.bind(this)(n),{hangup:()=>K[n]&&K[n](false),connection:new Promise(o=>{K[n]=(u=>{if(this.log("receiver picked up the call",n),!u)return H.bind(this)({cid:n}),null;T[n].onnegotiationneeded=()=>{this.log("onnegotiationneeded",`sending offer to "${n}".`),Qe.bind(this)(n),W[n]&&W[n]({type:"negotiationneeded",target:T[n],timestamp:new Date().toISOString(),signalingState:T[n].signalingState,connectionState:T[n].iceConnectionState,gatheringState:T[n].iceGatheringState});},o({target:T[n],channels:O[n],hangup:()=>H.bind(this)({cid:n}),media:this.__mediaStream});}).bind(this);})}}function tn(t){return async(e,n)=>{e=e||{},e=N(e).data;let r=t.sender_cid,s=await this.__socket;if(!z[r])return null;if(typeof n!="function")throw new a("Callback is required.",{code:"INVALID_PARAMETER"});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{ice:i="stun:stun.skapi.com:3468"}=e;return T?.[r]||(T[r]=new RTCPeerConnection({iceServers:[{urls:i}]})),e?.media&&(this.__mediaStream=await Yt(e.media),this.__mediaStream.getTracks().forEach(o=>{T[r].addTrack(o,this.__mediaStream);})),delete z[r],W[r]=n,O[r]||(O[r]={}),T[r].ondatachannel=o=>{this.log("ondatachannel",`received data channel "${o.channel.label}".`);let u=o.channel;O[r][u.label]=u,rn.bind(this)(r,u);},nn.bind(this)(r,["onnegotiationneeded"]),await Ke.bind(this)(null,r),await He.bind(this)(null,r),s.send(JSON.stringify({action:"rtc",uid:r,content:{pickup:this.user.user_id},token:this.session.accessToken.jwtToken})),{target:T[r],channels:O[r],hangup:()=>H.bind(this)({cid:r}),media:this.__mediaStream}}}async function Qe(t){if(!this?.session?.accessToken?.jwtToken)throw new a("Access token is required.",{code:"INVALID_PARAMETER"});this.log("sendOffer",t);let e=await this.__socket,n=await T[t].createOffer();await T[t].setLocalDescription(n);let r=T[t].localDescription;this.log("rtcSdpOffer to",r),e.send(JSON.stringify({action:"rtc",uid:t,content:{sdpoffer:r},token:this.session.accessToken.jwtToken}));}async function Kr(t,e){if(!this?.session?.accessToken?.jwtToken)throw new a("Access token is required.",{code:"INVALID_PARAMETER"});this.log("sendIceCandidate to",e);let n=await this.__socket;if(!t.candidate){this.log("candidate-end","all ice candidates have been sent");return}let r=W[e]||(()=>{}),s=t.candidate;this.log("ice gathering state set to",T[e].iceGatheringState),r({type:"icecandidate",target:T[e],timestamp:new Date().toISOString(),candidate:t.candidate.candidate,sdpMid:t.candidate.sdpMid,sdpMLineIndex:t.candidate.sdpMLineIndex,usernameFragment:t.candidate.usernameFragment,protocol:t.candidate.protocol,gatheringState:T[e].iceGatheringState,connectionState:T[e].iceConnectionState}),n.send(JSON.stringify({action:"rtc",uid:e,content:{candidate:s},token:this.session.accessToken.jwtToken}));}function nn(t,e){let n=new Set(e),r=W[t]||(o=>{}),s=T[t],i={ontrack:o=>{r({type:"track",target:s,timeStamp:o.timeStamp,streams:o.streams,track:o.track});},onicecandidate:o=>{Kr.bind(this)(o,t),o.candidate?r({type:"icecandidate",target:s,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:s.iceGatheringState,connectionState:s.iceConnectionState}):r({type:"icecandidateend",target:s,timestamp:new Date().toISOString()});},onicecandidateerror:o=>{r({type:"icecandidateerror",target:s,timestamp:new Date().toISOString(),errorCode:o.errorCode,errorText:o.errorText,url:o.url,hostCandidate:o.hostCandidate,gatheringState:s.iceGatheringState,connectionState:s.iceConnectionState});},oniceconnectionstatechange:()=>{r({type:"iceconnectionstatechange",target:s,timestamp:new Date().toISOString(),state:s.iceConnectionState,gatheringState:s.iceGatheringState,signalingState:s.signalingState});},onicegatheringstatechange:()=>{r({type:"icegatheringstatechange",target:s,timestamp:new Date().toISOString(),state:s.iceGatheringState,connectionState:s.iceConnectionState,signalingState:s.signalingState});},onsignalingstatechange:()=>{r({type:"signalingstatechange",target:s,timestamp:new Date().toISOString(),state:s.signalingState,connectionState:s.iceConnectionState,gatheringState:s.iceGatheringState});},onnegotiationneeded:()=>{Qe.bind(this)(t),r({type:"negotiationneeded",target:s,timestamp:new Date().toISOString(),signalingState:s.signalingState,connectionState:s.iceConnectionState,gatheringState:s.iceGatheringState});},onconnectionstatechange:()=>{r({type:"connectionstatechange",target:s,timestamp:new Date().toISOString(),state:s.connectionState,iceState:s.iceConnectionState,signalingState:s.signalingState});let o=s.connectionState;(o==="disconnected"||o==="failed"||o==="closed")&&H.bind(this)({cid:t});}};for(let[o,u]of Object.entries(i))n.has(o)||(s[o]=u);}function rn(t,e,n){let r=new Set(n),s=W[t]||(o=>{}),i={onmessage:o=>{let u={type:o.type,target:e,timeStamp:o.timeStamp,data:o.data,lastEventId:o.lastEventId,origin:o.origin,readyState:e.readyState,bufferedAmount:e.bufferedAmount};this.log(`${e.label}: message`,o.data),s(u);},onerror:o=>{let u={type:o.type,target:e,timeStamp:o.timeStamp,error:o.error.message,errorCode:o.error.errorDetail,readyState:e.readyState,label:e.label};this.log(`${e.label}: error`,o.error.message),s(u);},onclose:o=>{let u={type:o.type,target:e,timeStamp:o.timeStamp,readyState:e.readyState,label:e.label,id:e.id};this.log(`${e.label}: closed`,null),s(u),O[t]&&(delete O[t][e.label],Object.keys(O[t]).length===0&&H.bind(this)({cid:t}));},onbufferedamountlow:o=>{let u={target:e,bufferedAmount:e.bufferedAmount,bufferedAmountLowThreshold:e.bufferedAmountLowThreshold,type:o.type,timeStamp:o.timeStamp};this.log(`${e.label}: bufferedamountlow`,e.bufferedAmount),s(u);},onopen:o=>{this.log("dataChannel",`data channel: "${e.label}" is open and ready to send messages.`);let u={type:o.type,target:e,timeStamp:o.timeStamp,readyState:e.readyState,label:e.label,id:e.id,ordered:e.ordered,maxRetransmits:e.maxRetransmits,protocol:e.protocol};s(u);}};for(let[o,u]of Object.entries(i))r.has(o)||(e[o]=u);}var ne,te=null,_e=true,ue=0;async function Hr(){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 t=await this.record_endpoint;return new WebSocket(t.websocket_private+"?token="+this.session.accessToken.jwtToken)}var We=null;async function sn(){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebSocket is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});_e=true;let t=this.__socket?await this.__socket:this.__socket;H.bind(this)({close_all:true}),ne&&ze.bind(this)({group:null}),ue=0,te&&(te.terminate(),te=null);try{t&&t.close();}catch{}return window.removeEventListener("visibilitychange",We),this.__socket=null,null}async function Ne(t,e=50,n){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebSocket is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});if(typeof t!="function")throw new a("Callback must be a function.",{code:"INVALID_REQUEST"});if(n==="reconnect"){if(this.__socket instanceof Promise){let r=await this.__socket;if(r.readyState!==WebSocket.CLOSED&&r.readyState!==WebSocket.CLOSING)return this.__socket}}else if(_e&&(We=()=>{!document.hidden&&!_e&&Ne.bind(this)(t,0,"reconnect");},this.__socket instanceof Promise))return this.__socket;te&&(te.terminate(),te=null),this.__socket=new Promise(async r=>{await ae.bind(this)(),setTimeout(async()=>{let s=await Hr.bind(this)();s.onopen=()=>{_e=false,ue=0,n!=="reconnect"&&window.addEventListener("visibilitychange",We),this.log("realtime onopen","Connected to WebSocket server."),t({type:"success",message:"Connected to WebSocket server."}),ne&&s.send(JSON.stringify({action:"joinRoom",rid:ne,token:this.session.accessToken.jwtToken}));let i=`
206
+ var Xn=Object.defineProperty;var Zn=Object.getOwnPropertyDescriptor;var se=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>(typeof require<"u"?require:e)[n]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var A=(t,e,n,r)=>{for(var i=Zn(e,n),s=t.length-1,o;s>=0;s--)(o=t[s])&&(i=(o(e,n,i))||i);return i&&Xn(e,n,i),i};var X=typeof globalThis<"u"?globalThis:void 0,we=X?.window;function Yn(t){if(Buffer)return Buffer.from(t).toString("base64");let e="",n=new Uint8Array(t),r=32768;for(let i=0;i<n.length;i+=r){let s=n.subarray(i,i+r);e+=String.fromCharCode.apply(null,Array.from(s));}if(typeof btoa=="function")return btoa(e);throw new Error("No base64 encoder available in this environment.")}if(we)we.global=we,we.global._runningInNodeJS=false;else if(X&&(X.global=X,typeof X.window>"u")){class t{constructor(){this.result=null;this.error=null;this.onload=null;this.onloadend=null;this.onerror=null;}readAsDataURL(r){r.arrayBuffer().then(i=>{let s=Yn(i),o=r.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(r){r.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(r,i="utf-8"){r.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});});}}X.FileReader=t;class e{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(r,i){this._method=r,this._url=i,this.readyState=1;}setRequestHeader(r,i){this._headers[r]=i;}getResponseHeader(r){return null}abort(){this._aborted=true,this.onabort&&this.onabort({});}send(r){if(this._aborted)return;let i={method:this._method,headers:this._headers};r&&this._method!=="GET"&&this._method!=="HEAD"&&(i.body=r),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);});}}X.XMLHttpRequest=e,X.window={_runningInNodeJS:true,alert:n=>console.error("[Alert]",n),sessionStorage:{getItem:n=>null,setItem:(n,r)=>{},removeItem:n=>{}},localStorage:{getItem:n=>{let r=se("fs"),i=se("path");try{let s=i.resolve(process.cwd(),"states","localStorage",`${n}.skapi`);return r.existsSync(s)?r.readFileSync(s,"utf8"):null}catch{return null}},setItem:(n,r)=>{let i=se("fs"),s=se("path");try{let o=s.resolve(process.cwd(),"states","localStorage");i.existsSync(o)||i.mkdirSync(o,{recursive:!0});let l=s.resolve(o,`${n}.skapi`);i.writeFileSync(l,r,"utf8");}catch{}},removeItem:n=>{let r=se("fs"),i=se("path");try{let s=i.resolve(process.cwd(),"states","localStorage",`${n}.skapi`);r.existsSync(s)&&r.unlinkSync(s);}catch{}}},location:{href:"",origin:"",hostname:"",protocol:"",replace:n=>{}},navigator:{userAgent:`nodejs/${X?.process?.versions?.node||"unknown"}`,mediaDevices:{getUserMedia:async n=>{throw new Error("getUserMedia is not supported in Node.js environment.")}}},addEventListener:()=>{},removeEventListener:()=>{}};}var a=class extends Error{constructor(e,n){if(Array.isArray(e)&&e.length<=2){let r=e[1];if(e.length>2)for(let i=2;i<e.length&&typeof e[i]=="string";i++)r+=e[i];super((r||"Something went wrong.").trim()),this.name=n?.name||"SKAPI",this.code=n?.code||e[0]||"ERROR",n?.cause&&(this.cause=n.cause);}else super((e?.message||(typeof e=="string"?e:"Something went wrong.")).trim()),typeof e=="string"?(this.name=n?.name||"SKAPI",this.code=n?.code||"ERROR",n?.cause&&(this.cause=n.cause)):e instanceof Error?(this.cause=e,this.name=e.name,e.hasOwnProperty("code")&&(this.code=e.code)):typeof e=="object"&&e?.code&&e?.message&&(this.name=n?.name||"SKAPI",this.code=n?.code||"ERROR",this.cause=e?.cause);}};var Z="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Le=BigInt(Z.length),er=2*1024*1024,tr=["aud","cognito:username","event_id","exp","iat","iss","jti","origin_jti","secret_key","token_use"],Ze={auth_time:"log",sub:"user_id"},nr=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l"],rt=["us31","us72","ap51","ap22","ap41","eu71","ap21","us32","us71","af51","ap31","ap43","ap23","ap42","ca01","eu01","eu72","eu51","eu73","eu11","me51","sa31"],Ye=typeof TextEncoder<"u"?new TextEncoder:null;function rr(){if(typeof globalThis<"u")return globalThis.Buffer}function ir(t){if(Ye)return Ye.encode(t);let e=unescape(encodeURIComponent(t)),n=new Uint8Array(e.length);for(let r=0;r<e.length;r++)n[r]=e.charCodeAt(r);return n}function sr(t){if(t instanceof Uint8Array)return t;if(typeof t=="string")return ir(t);if(typeof ArrayBuffer<"u"&&t instanceof ArrayBuffer)return new Uint8Array(t);if(typeof ArrayBuffer<"u"&&ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);if(Array.isArray(t))return Uint8Array.from(t);let e=rr();if(e)return new Uint8Array(e.from(t));throw new Error("No byte conversion available in this environment.")}var b=class b{static hash(e){typeof e!="string"&&(console.warn("coercing non-string value to empty string"),e="");let n=b.sb(e),r=1732584193,i=-271733879,s=-1732584194,o=271733878,l,u,c,g;for(let d=0;d<n.length;d+=16)l=r,u=i,c=s,g=o,r=b.ff(r,i,s,o,n[d],7,-680876936),o=b.ff(o,r,i,s,n[d+1],12,-389564586),s=b.ff(s,o,r,i,n[d+2],17,606105819),i=b.ff(i,s,o,r,n[d+3],22,-1044525330),r=b.ff(r,i,s,o,n[d+4],7,-176418897),o=b.ff(o,r,i,s,n[d+5],12,1200080426),s=b.ff(s,o,r,i,n[d+6],17,-1473231341),i=b.ff(i,s,o,r,n[d+7],22,-45705983),r=b.ff(r,i,s,o,n[d+8],7,1770035416),o=b.ff(o,r,i,s,n[d+9],12,-1958414417),s=b.ff(s,o,r,i,n[d+10],17,-42063),i=b.ff(i,s,o,r,n[d+11],22,-1990404162),r=b.ff(r,i,s,o,n[d+12],7,1804603682),o=b.ff(o,r,i,s,n[d+13],12,-40341101),s=b.ff(s,o,r,i,n[d+14],17,-1502002290),i=b.ff(i,s,o,r,n[d+15],22,1236535329),r=b.gg(r,i,s,o,n[d+1],5,-165796510),o=b.gg(o,r,i,s,n[d+6],9,-1069501632),s=b.gg(s,o,r,i,n[d+11],14,643717713),i=b.gg(i,s,o,r,n[d],20,-373897302),r=b.gg(r,i,s,o,n[d+5],5,-701558691),o=b.gg(o,r,i,s,n[d+10],9,38016083),s=b.gg(s,o,r,i,n[d+15],14,-660478335),i=b.gg(i,s,o,r,n[d+4],20,-405537848),r=b.gg(r,i,s,o,n[d+9],5,568446438),o=b.gg(o,r,i,s,n[d+14],9,-1019803690),s=b.gg(s,o,r,i,n[d+3],14,-187363961),i=b.gg(i,s,o,r,n[d+8],20,1163531501),r=b.gg(r,i,s,o,n[d+13],5,-1444681467),o=b.gg(o,r,i,s,n[d+2],9,-51403784),s=b.gg(s,o,r,i,n[d+7],14,1735328473),i=b.gg(i,s,o,r,n[d+12],20,-1926607734),r=b.hh(r,i,s,o,n[d+5],4,-378558),o=b.hh(o,r,i,s,n[d+8],11,-2022574463),s=b.hh(s,o,r,i,n[d+11],16,1839030562),i=b.hh(i,s,o,r,n[d+14],23,-35309556),r=b.hh(r,i,s,o,n[d+1],4,-1530992060),o=b.hh(o,r,i,s,n[d+4],11,1272893353),s=b.hh(s,o,r,i,n[d+7],16,-155497632),i=b.hh(i,s,o,r,n[d+10],23,-1094730640),r=b.hh(r,i,s,o,n[d+13],4,681279174),o=b.hh(o,r,i,s,n[d],11,-358537222),s=b.hh(s,o,r,i,n[d+3],16,-722521979),i=b.hh(i,s,o,r,n[d+6],23,76029189),r=b.hh(r,i,s,o,n[d+9],4,-640364487),o=b.hh(o,r,i,s,n[d+12],11,-421815835),s=b.hh(s,o,r,i,n[d+15],16,530742520),i=b.hh(i,s,o,r,n[d+2],23,-995338651),r=b.ii(r,i,s,o,n[d],6,-198630844),o=b.ii(o,r,i,s,n[d+7],10,1126891415),s=b.ii(s,o,r,i,n[d+14],15,-1416354905),i=b.ii(i,s,o,r,n[d+5],21,-57434055),r=b.ii(r,i,s,o,n[d+12],6,1700485571),o=b.ii(o,r,i,s,n[d+3],10,-1894986606),s=b.ii(s,o,r,i,n[d+10],15,-1051523),i=b.ii(i,s,o,r,n[d+1],21,-2054922799),r=b.ii(r,i,s,o,n[d+8],6,1873313359),o=b.ii(o,r,i,s,n[d+15],10,-30611744),s=b.ii(s,o,r,i,n[d+6],15,-1560198380),i=b.ii(i,s,o,r,n[d+13],21,1309151649),r=b.ii(r,i,s,o,n[d+4],6,-145523070),o=b.ii(o,r,i,s,n[d+11],10,-1120210379),s=b.ii(s,o,r,i,n[d+2],15,718787259),i=b.ii(i,s,o,r,n[d+9],21,-343485551),r=b.ad(r,l),i=b.ad(i,u),s=b.ad(s,c),o=b.ad(o,g);return b.rh(r)+b.rh(i)+b.rh(s)+b.rh(o)}static rh(e){let n="";for(let r=0;r<=3;r++)n+=b.alphabet.charAt(e>>r*8+4&15)+b.alphabet.charAt(e>>r*8&15);return n}static ad(e,n){let r=(e&65535)+(n&65535);return (e>>16)+(n>>16)+(r>>16)<<16|r&65535}static rl(e,n){return e<<n|e>>>32-n}static cm(e,n,r,i,s,o){return b.ad(b.rl(b.ad(b.ad(n,e),b.ad(i,o)),s),r)}static ff(e,n,r,i,s,o,l){return b.cm(n&r|~n&i,e,n,s,o,l)}static gg(e,n,r,i,s,o,l){return b.cm(n&i|r&~i,e,n,s,o,l)}static hh(e,n,r,i,s,o,l){return b.cm(n^r^i,e,n,s,o,l)}static ii(e,n,r,i,s,o,l){return b.cm(r^(n|~i),e,n,s,o,l)}static sb(e){let n,r=(e.length+8>>6)+1,i=new Array(r*16);for(n=0;n<r*16;n++)i[n]=0;for(n=0;n<e.length;n++)i[n>>2]|=e.charCodeAt(n)<<n%4*8;return i[n>>2]|=128<<n%4*8,i[r*16-2]=e.length*8,i}};b.alphabet="0123456789abcdef";var M=b;function it(t){if(t===0)return Z[0];let e="";for(;t>0;)e=Z[t%62]+e,t=Math.floor(t/62);return e}function B(t){return t.split("").reverse().reduce((e,n,r)=>e+Z.indexOf(n)*62**r,0)}function ie(t=6){let e="",n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",r=n.length,i=0;for(;i<t;)e+=n.charAt(Math.floor(Math.random()*r)),i+=1;return e}function Oe(){return typeof window>"u"||!!window?._runningInNodeJS}function V(){return !Oe()&&typeof document<"u"&&typeof document.createElement=="function"}function Ee(t){let e;try{e=JSON.stringify(t);}catch{throw new a("Invalid data type.",{code:"INVALID_REQUEST"})}if(new Blob([e]).size>er)throw new a("Data should not exceed 2MB",{code:"INVALID_REQUEST"})}function et(t){return t===""||t==="on"||t==="true"}function tt(t){return t==="false"}function nt(t,e,n){e.name&&n(t,e.name,e.value);}var Re=V(),or=typeof SubmitEvent<"u",ar=typeof HTMLFormElement<"u";function N(t,e,n){let r={},i=[];function s(u,c,g){if(e?.ignoreEmpty&&g==="")return;if(e?.nullIfEmpty&&g===""&&(g=null),typeof n=="function"){let _=n(c,g);_!==void 0&&(g=_);}let d=c.split("[").map(_=>{let p=_.replace("]",""),y=Number(p);return !isNaN(y)&&!p.includes(".")?p=y:(p[0]==='"'&&p[p.length-1]==='"'||p[0]==="'"&&p[p.length-1]==="'")&&(p=p.replace(/"/g,"").replace(/'/g,"")),p}),h=u;if(typeof d[0]=="number")throw new a("Form key cannot start with an array index.",{code:"INVALID_REQUEST"});for(let _=0;_<d.length;_++){let p=d[_];_<d.length-1?(h[p]===void 0&&(typeof d[_+1]=="number"?h[p]=[]:h[p]={}),h=h[p]):h[p]===void 0?h[p]=g:Array.isArray(h[p])?h[p].push(g):h[p]=[h[p],g];}}function o(u,c,g){if(g instanceof File)u.push({name:c,file:g});else if(g instanceof FileList&&g&&g.length>0)for(let d=0;d<=g.length-1;d++){let h=g.item(d);h&&u.push({name:c,file:h});}}let l=u=>{u.name&&(u.type==="number"?u.value&&s(r,u.name,Number(u.value)):u.type==="checkbox"||u.type==="radio"?u.checked?u.type==="checkbox"&&u.value===""||et(u.value)?s(r,u.name,true):tt(u.value)?s(r,u.name,false):u.value&&s(r,u.name,u.value):u.type==="checkbox"&&(et(u.value)?s(r,u.name,false):tt(u.value)&&s(r,u.name,true)):u.type==="file"?u.files&&u.files.length>0&&o(i,u.name,u.files):s(r,u.name,u.value));};if(Re&&(t instanceof HTMLInputElement||t instanceof HTMLSelectElement||t instanceof HTMLTextAreaElement))return l(t),Ee(r),{data:r,files:i};if(Re&&t instanceof FormData){for(let u of t.entries()){let c=u[0],g=u[1];if(g instanceof File||g instanceof FileList)o(i,c,g);else if(g instanceof Blob){let d=g;if(d.type==="application/json")try{let h=JSON.parse(d.text());s(r,c,h);}catch{s(r,c,d);}}else s(r,c,g);}return Ee(r),{data:r,files:i}}if(Re&&or&&t instanceof SubmitEvent&&(t=t.target),Re&&ar&&t instanceof HTMLFormElement){let u=t.querySelectorAll("input"),c=t.querySelectorAll("select"),g=t.querySelectorAll("textarea");for(let d=0;d<c.length;d++)nt(r,c[d],s);for(let d=0;d<g.length;d++)nt(r,g[d],s);for(let d=0;d<u.length;d++)l(u[d]);return Ee(r),{data:r,files:i}}return Ee(t),{data:t,files:i}}function de(t){let e={};for(let n in t){let r=t[n];if(!tr.includes(n))if(Ze[n])e[Ze[n]]=r;else if(n.includes("custom:"))e[n.replace("custom:","")]=r;else if(n==="address"){let i=r;if(i&&typeof i=="object"&&Object.keys(i).length){if(i?.formatted)try{e[n]=JSON.parse(i.formatted);}catch{e[n]=i.formatted;}}else e[n]=i;}else e[n]=r;}for(let n of ["address_public","birthdate_public","email_public","gender_public","phone_number_public","access_group"])n.includes("_public")?e.hasOwnProperty(n.split("_")[0])?e[n]=e.hasOwnProperty(n)?!!Number(e[n]):false:delete e[n]:e[n]=e.hasOwnProperty(n)?Number(e[n]):0;for(let n of ["email","phone_number"])e.hasOwnProperty(n)?e[n+"_verified"]=e[n+"_verified"]===true:delete e[n+"_verified"];return e}function Me(t){if(t=pr(t),t.split("-").length===7){let e=t.split("-"),n,r;try{n=rt[B(e[1][0])],r=e.slice(2).join("-");}catch{throw new Error("INVALID_PARAMETER: Service ID is invalid: "+t)}if(!n)throw new Error("INVALID_PARAMETER: Service ID is invalid: "+t);return {service:n+e[0]+e[1].slice(1),owner:r}}return {service:t,owner:""}}function st(t,e){let n=rt.indexOf(t.slice(0,4)),r=nr[n],s=`${t.slice(4,-4)}-${r}${t.slice(-4)}-${e}`;return hr(s)}function cr(t){let e=0n;for(let n of t){let r=Z.indexOf(n);if(r<0)throw new Error(`INVALID_PARAMETER: Invalid base62 character: ${n}`);e=e*Le+BigInt(r);}return e}function lr(t,e=1){if(t<0n)throw new Error("INVALID_PARAMETER: Negative values are not supported.");if(t===0n)return "0".repeat(Math.max(1,e));let n="",r=t;for(;r>0n;){let i=Number(r%Le);n=Z[i]+n,r/=Le;}return n.length<e&&(n="0".repeat(e-n.length)+n),n}function ur(t){if(t===0n)return Uint8Array.from([0]);let e=[],n=t;for(;n>0n;)e.push(Number(n&0xffn)),n>>=8n;return e.reverse(),Uint8Array.from(e)}function dr(t){let e=0n;for(let n of t)e=(e<<8n)+BigInt(n);return e}function gr(t){let e=String(t).replace(/-/g,"");if(!/^[0-9a-fA-F]{32}$/.test(e))throw new Error("INVALID_PARAMETER: Invalid UUID format.");let n=new Uint8Array(16);for(let r=0;r<16;r++)n[r]=parseInt(e.slice(r*2,r*2+2),16);return n}function fr(t){let e=Array.from(sr(t),n=>n.toString(16).padStart(2,"0")).join("");return [e.slice(0,8),e.slice(8,12),e.slice(12,16),e.slice(16,20),e.slice(20)].join("-")}function hr(t){let e=String(t);if(e.split("-").length===2)return e;let n=e.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(!n)throw new Error("INVALID_PARAMETER: Input must match <base62>-<base62>-<uuid>.");let[,r,i,s]=n;if(r.length<2)throw new Error("INVALID_PARAMETER: The first part must contain at least 2 characters.");if(i.length>=Z.length)throw new Error("INVALID_PARAMETER: The middle section is too long to encode.");let o=r.slice(0,2),l=r.slice(2),u=i+o,c=Z[i.length]+l+u,g=gr(s),d=lr(dr(g));return `${c}-${d}`}function pr(t){let e=String(t);if(e.split("-").length!==2)return e;let n=e.split("-");if(n.length!==2||!n[0]||!n[1])throw new Error("INVALID_PARAMETER: Corrupt compressed token: "+e);let[r,i]=n,s=Z.indexOf(r[0]);if(s<0)throw new Error("INVALID_PARAMETER: Corrupt compressed token: "+e);let o=r.slice(1),l=s+2;if(o.length<l)throw new Error("INVALID_PARAMETER: Corrupt compressed token: "+e);let u=o.slice(0,o.length-l),c=o.slice(o.length-l),g=c.slice(s),d=c.slice(0,s),h=g+u;if(!/^[0-9A-Za-z]+$/.test(h)||!/^[0-9A-Za-z]+$/.test(d))throw new Error("INVALID_PARAMETER: Corrupt compressed token: "+e);let _=cr(i),p=ur(_);if(p.length>16)throw new Error("INVALID_PARAMETER: Corrupt compressed token: "+e);let y=new Uint8Array(16);y.set(p,16-p.length);let w=fr(y);return `${h}-${d}-${w}`}function _r(t,e="User ID"){let n=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;if(t){if(typeof t!="string")throw new a(`${e} should be type: string.`,{code:"INVALID_PARAMETER"});if(!t.match(n))throw new a(`${e} is invalid.`,{code:"INVALID_PARAMETER"})}else throw new a(`${e} is empty.`,{code:"INVALID_PARAMETER"});return t}function br(t){if(t&&(typeof t!="string"||t.charAt(0)!=="+"||isNaN(Number(t.substring(1)))))throw new a('"phone_number" is invalid. The format should be "+00123456789". Type: string.',{code:"INVALID_PARAMETER"});return t||""}function yr(t){if(t){if(typeof t!="string")throw new a('"birthdate" is invalid. The format should be "yyyy-mm-dd". Type: string.',{code:"INVALID_PARAMETER"});{let e=new RegExp(/([12]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01]))/);if(t.length!==10||t.split("-").length!==3||!e.test(t))throw new a('"birthdate" is invalid. The format should be "yyyy-mm-dd". Type: string.',{code:"INVALID_PARAMETER"})}}return t||""}function wr(t){if(t){if(typeof t!="string")throw new a('"password" should be type: string.',{code:"INVALID_PARAMETER"});if(t.length<6)throw new a('"password" should be at least 6 characters.',{code:"INVALID_PARAMETER"});if(t.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 t}function Er(t,e="email"){if(t){if(typeof t!="string")throw new a(`"${e}"should be type: string.`,{code:"INVALID_PARAMETER"});if(t.length<5)throw new a(`"${e}" should be at least 5 characters.`,{code:"INVALID_PARAMETER"});if(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.test(t)&&(t=t.trim(),t.split("@")[1].split(".").length>=2))return t.toLowerCase()}else throw new a(`"${e}" is required.`,{code:"INVALID_PARAMETER"});throw new a(`"${t}" is an invalid email.`,{code:"INVALID_PARAMETER"})}function Rr(t){let e=typeof window<"u",n=(()=>{let i=e&&window.location.origin||null;return i&&i.slice(-1)==="/"&&(i=i.slice(0,-1)),i})(),r=i=>{if(typeof i=="string"){if(i==="*")return "*";{let s=i.trim();if(s[0]==="/"&&n){if(n.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=n+s;}else if(s[0]==="."&&n){if(n.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=e?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(t)?t.map(i=>r(i)):r(t)}function Ar(t,e,n=[],r){let i=N(t,r),s=i.data;e.service="string",e.owner="string";let o={};for(let l in e)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];}r?.precall&&r.precall({data:o,files:i?.files||[]});try{return mr__default.default(o,e,n)}catch(l){throw new a(l.message,{code:"INVALID_PARAMETER"})}}var f={UserId:_r,PhoneNumber:br,Birthdate:yr,Password:wr,Email:Er,Url:Rr,Params:Ar};var C=null;function Fe(t){let e={tkid:"ticket_id",cond:"condition",stmp:"timestamp",actn:"action",cnt:"count",ttl:"time_to_live",plch:"placeholder",hash:"hash",desc:"description",pmc:"limit_per_user"},n={};for(let r in t)if(r==="tkid"){let i=t[r].split("#");if(i.length===1){n.ticket_id=i[0];continue}n.ticket_id=i[1],n.consume_id=i[2],n.user_id=i[3];let s=i[2].slice(-4);if(n.is_test=s===":CHK",!t.stmp){let o=i[2].slice(0,-4);/^[0-9]+$/.test(o)?n.timestamp=parseInt(o,10):n.timestamp=B(i[2].slice(0,-4));}}else e[r]?n[e[r]]=t[r]:n[r]=t[r];return n}async function at(t){if(!t.ticket_id)throw new a("Ticket ID is required.",{code:"INVALID_PARAMETER"});if(!t.method)throw new a('Method is required. Should be either "GET" or "POST"',{code:"INVALID_PARAMETER"});let e=t.ticket_id;await this.__connection;let n=await R.bind(this)(`https://${this.service.slice(0,4)}.${this.customApiDomain}/auth/consume/${this.service}/${this.owner}/${e}`,t?.data||{},{method:t.method,auth:!!t?.auth});return Fe(n)}async function ct(t,e){await this.__connection;let n=await R.bind(this)("ticket",Object.assign({exec:"list"},t||{}),{auth:true,fetchOptions:e});return n.list=n.list.map(Fe),n}async function lt(t,e){await this.__connection;let n=await R.bind(this)("ticket",Object.assign({exec:"consumed"},t||{}),{auth:true,fetchOptions:e});return n.list=n.list.map(Fe),n}async function ut(t){return R.bind(this)("register-ticket",Object.assign({exec:"reg"},t),{auth:true})}async function dt(t){return R.bind(this)("register-ticket",Object.assign({exec:"unreg"},t),{auth:true})}async function ae(){if(await this.__connection,this.session){let t=Math.floor(Date.now()/1e3),n=this.session.getIdToken().getExpiration();if(n<t){this.log("request:requesting new token",null);try{await q.bind(this)().getSession({refreshToken:!0}),this.log("request:received new tokens",{exp:this.session?.idToken?.payload?.exp,currentTime:t,expiresIn:n-t,token:this.session?.accessToken?.jwtToken,refreshToken:this.session?.refreshToken?.token});}catch(r){throw this.log("request:new token error",r),new a("User login is required.",{code:"INVALID_REQUEST"})}}else this.log("request:tokens",{exp:this.session.idToken.payload.exp,currentTime:t,expiresIn:n-t,token:this.session.accessToken.jwtToken,refreshToken:this.session.refreshToken.token});return this.session?.idToken?.jwtToken}else throw this.log("request:no session",null),Y.bind(this)(),new a("User login is required.",{code:"INVALID_REQUEST"})}function ot(t,e){return new Promise((n,r)=>{e.refreshSession(t.getRefreshToken(),(i,s)=>{this.log("getSession:refreshSessionCallback",{refreshErr:i,refreshedSession:s}),i?(Y.bind(this)(),r(i)):s.isValid()?n(s):(Y.bind(this)(),r(new a("Invalid session.",{code:"INVALID_REQUEST"})));});})}function q(){if(!this.userPool)throw new a("User pool is missing",{code:"INVALID_REQUEST"});let t=()=>{let s=C.getSignInUserSession().getIdToken().payload||null,o=de(s);return this.log("normalized user attribute",o),this.__user=o,o},e=async s=>new Promise((o,l)=>{this.log("getSession:option",s);let{refreshToken:u=false,skipUserUpdateEventTrigger:c=false}=s||{};if(u&&c&&(c=false),C=this.userPool.getCurrentUser(),!C){this.log("getSession:cognitoUser",C),Y.bind(this)(),l(null);return}let g=d=>{let h=d.getIdToken().payload;if(this.log("getSession:respond:sessionAttribute",h),h["custom:service"]!==this.service)throw this.log("getSession:respond","invalid service, signing out"),Y.bind(this)(),new a("Invalid session.",{code:"INVALID_REQUEST"});return this.session=d,t(),c||this._runOnUserUpdateListeners(this.user),this.session};C.getSession((d,h)=>{if(this.log("getSession:getSessionCallback",{err:d,session:h}),!h){Y.bind(this)(),l(new a("Current session does not exist.",{code:"INVALID_REQUEST"}));return}if(d){ot.bind(this)(h,C).then(m=>o(g(m))).catch(l);return}let _=Math.floor(Date.now()/1e3),p=h.getIdToken(),y=p.getExpiration(),w=y<_;if(this.log("getSession:currentTime",_),this.log("getSession:idTokenExp",y),this.log("getSession:isExpired",w),this.log("getSession:existingBearerToken",this.bearerToken),this.bearerToken=p.getJwtToken(),w||u||!h.isValid())ot.bind(this)(h,C).then(m=>o(g(m))).catch(l);else try{o(g(h));}catch(m){l(m);}});}),n=(s,o)=>{let l=o||s.includes(this.service+"-")?s:this.service+"-"+M.hash(s);return {cognitoUser:new amazonCognitoIdentityJs.CognitoUser({Username:l,Pool:this.userPool}),cognitoUsername:l}};return {getSession:e,authenticateUser:(s,o,l=false,u=false)=>new Promise((c,g)=>{this.__request_signup_confirmation=null,this.__disabledAccount=null;let d=n(s,l),h=d.cognitoUsername,_=new amazonCognitoIdentityJs.AuthenticationDetails({Username:h,Password:o});d.cognitoUser.authenticateUser(_,{newPasswordRequired:(p,y)=>{this.__disabledAccount=null,this.__request_signup_confirmation=h,p["custom:signup_ticket"]==="PASS"||p["custom:signup_ticket"]==="MEMBER"||p["custom:signup_ticket"]==="OIDPASS"?d.cognitoUser.completeNewPasswordChallenge(o,{},{onSuccess:w=>{C=d.cognitoUser,e().then(m=>c(this.user));},onFailure:w=>{g(new a(w.message||"Failed to authenticate user.",{code:w.code}));}}):g(new a("User's signup confirmation is required.",{code:"SIGNUP_CONFIRMATION_NEEDED"}));},onSuccess:p=>e({skipUserUpdateEventTrigger:true}).then(y=>{this.__disabledAccount=null,this._runOnLoginListeners(this.user),this._runOnUserUpdateListeners(this.user),c(this.user);}),onFailure:p=>{let y=[],{parsed:w,code:m}=Ie(p),v=typeof p?.message=="string"?p.message:"";if(m==="NotAuthorizedException"?v.includes("User is disabled.")?(this.__disabledAccount=h,y=["This account is disabled.","USER_IS_DISABLED"]):u?y=["The account already exists.","ACCOUNT_EXISTS"]:y=["Incorrect username or password.","INCORRECT_USERNAME_OR_PASSWORD"]:m==="UserNotFoundException"?y=["Incorrect username or password.","INCORRECT_USERNAME_OR_PASSWORD"]:m==="UserNotConfirmedException"?(this.__request_signup_confirmation=h,y=["User's signup confirmation is required.","SIGNUP_CONFIRMATION_NEEDED"]):(m==="TooManyRequestsException"||m==="LimitExceededException")&&(y=["Too many attempts. Please try again later.","REQUEST_EXCEED"]),w.code==="SIGNUP_CONFIRMATION_NEEDED"&&(this.__request_signup_confirmation=h),y.length){let S=y[1],P=y[0];g(new a(P,{code:S,cause:p}));}else g(w);}});}),createCognitoUser:n,signup:(s,o,l)=>new Promise((u,c)=>{this.userPool.signUp(s,o,l,null,(g,d)=>{if(g){let{parsed:h,code:_}=Ie(g),p=[];_==="UsernameExistsException"?p=["The account already exists.","EXISTS"]:_==="InvalidPasswordException"?p=["Invalid password. Password must be at least 6 characters.","INVALID_PARAMETER"]:_==="InvalidParameterException"?p=[h.message||"Invalid parameter.","INVALID_PARAMETER"]:_==="TooManyRequestsException"||_==="LimitExceededException"?p=["Too many attempts. Please try again later.","REQUEST_EXCEED"]:_==="CodeDeliveryFailureException"?p=["Failed to deliver verification code.","CODE_DELIVERY_FAILURE"]:_==="UserLambdaValidationException"&&(p=[h.message||"Signup validation failed.","INVALID_REQUEST"]),p.length?c(new a(p[0],{code:p[1],cause:g})):c(h);return}u(d);});})}}function Ie(t){let e=typeof t?.code=="string"&&t.code.trim()?t.code.trim():"ERROR",r=((typeof t?.message=="string"?t.message:typeof t=="string"?t:"An error occurred.")||"An error occurred.").trim();r||(r="An error occurred.");let i=r.match(/#([A-Za-z0-9_]+)\s*:\s*([\s\S]+)/),s=i?.[1]?.trim()||e,o=i?.[2]?.trim()||r;return {parsed:new a(o,{code:s,cause:t}),code:e}}async function gt(t){await this.__authConnection;let e=t?.refreshToken||false;if(!e)return this.user;try{return await q.bind(this)().getSession(Object.assign({skipUserUpdateEventTrigger:!e,refreshToken:e},t)),this.user}catch{return null}}async function ft(t){await this.__connection,t=f.Params(t,{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 e={token:t.token,id:t.id,merge:t.merge};t.template?.welcome&&(e.template_welcome=t.template.welcome);let n=await R.bind(this)("openid-logger",e),r=n.logger.split("#"),i=this.service+"-"+r[0],s=r[1];return {userProfile:await q.bind(this)().authenticateUser(i,s,true,true),openid:n.openid}}function vr(t){let e=typeof globalThis<"u"?globalThis:void 0;if(e?.Buffer)return e.Buffer.from(t,"base64").toString("utf8");if(typeof atob=="function"){let n=atob(t),r=new Uint8Array(n.length);for(let i=0;i<n.length;i++)r[i]=n.charCodeAt(i);return typeof TextDecoder<"u"?new TextDecoder().decode(r):n}throw new Error("No base64 decoder available in this environment")}function xr(t){let e=t.split(".");if(e.length!==3)throw new Error("Invalid JWT format");let r=e[1].replace(/-/g,"+").replace(/_/g,"/"),i=vr(r);return JSON.parse(i)}async function ht(t){await this.__authConnection,this.log("loginWithToken:params",t),t=f.Params(t,{idToken:"string",accessToken:"string",refreshToken:"string"},["idToken"]);let e=xr(t.idToken);if(this.log("loginWithToken:idTokenPayload",e),e["custom:service"]!==this.service)throw new a("Token does not belong to this service.",{code:"INVALID_REQUEST"});let n=Math.floor(Date.now()/1e3);if(e.exp&&e.exp<n)throw new a("Token has expired.",{code:"INVALID_REQUEST"});if(this.__user=de(e),this.session=null,t.accessToken&&t.refreshToken)try{if(this.session=new amazonCognitoIdentityJs.CognitoUserSession({IdToken:new amazonCognitoIdentityJs.CognitoIdToken({IdToken:t.idToken}),AccessToken:new amazonCognitoIdentityJs.CognitoAccessToken({AccessToken:t.accessToken}),RefreshToken:new amazonCognitoIdentityJs.CognitoRefreshToken({RefreshToken:t.refreshToken})}),this.log("loginWithToken:session",this.session),this.log("loginWithToken:CognitoUser",amazonCognitoIdentityJs.CognitoUser),this.log("loginWithToken:userPool",this.userPool),amazonCognitoIdentityJs.CognitoUser&&this.userPool){this.log("loginWithToken:cognito:username",e["cognito:username"]);let r={Username:e["cognito:username"],Pool:this.userPool};this.log("loginWithToken:cognitoUserParams",r),C=new amazonCognitoIdentityJs.CognitoUser(r),C.setSignInUserSession(this.session),this.log("loginWithToken:cognitoUserRestored",{cognitoUserType:typeof C,cognitoUserKeys:Object.keys(C||{}),cognitoUser:C});}}catch(r){this.log("loginWithToken:err",r);try{this.log("loginWithToken:err:stringified",JSON.stringify(r));}catch{this.log("loginWithToken:err:stringifyFail",String(r));}try{let i=Object.keys(r||{}),s=Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(r||{}):[],o=Object.getOwnPropertyDescriptors?Object.getOwnPropertyDescriptors(r||{}):{};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 F(){return await this.__connection,this.__user?.service===this.service?this.__user?.owner===this.host:(await ge.bind(this)(),false)}async function Y(t=false){let e=null;C&&(t?e=new Promise((r,i)=>{C.globalSignOut({onSuccess:s=>{this.log("globalSignOut:success",s),r(s);},onFailure:s=>{this.log("globalSignOut:error",s),i(s);}});}):C.signOut());let n={session:null,__startKeyHistory:{},__cached_requests:{},__user:null};e&&(e=await e);for(let r in n)this[r]=n[r];return this._runOnUserUpdateListeners(null),this._runOnLoginListeners(null),e}async function ge(t){await this.__connection;let{data:e}=N(t);return await Y.bind(this)(e?.global),"SUCCESS: The user has been logged out."}async function pt(){if(!this.__request_signup_confirmation)throw new a("Least one login attempt is required.",{code:"INVALID_REQUEST"});return await R.bind(this)("confirm-signup",{username:this.__request_signup_confirmation})}async function mt(t=false){if(typeof t=="string")t=f.Url(t);else if(typeof t!="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 R.bind(this)("recover-account",{username:this.__disabledAccount,redirect:t}),"SUCCESS: Recovery e-mail has been sent."}async function qe(t){let e=f.Params(t,{username:"string",email:"string",password:"string"},["password"]);if(await this.__authConnection,e.email)try{f.Email(e.email);}catch{e.username=e.email,delete e.email;}if(!e.username&&!e.email)throw new a('Least one of "username" or "email" is required.',{code:"INVALID_PARAMETER"});return await q.bind(this)().authenticateUser(e.username||e.email,e.password)}async function _t(t,e){await this.__authConnection;let n={username:"string",password:c=>f.Password(c),email:c=>f.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?f.Birthdate(c):"",phone_number:c=>c?f.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?f.Url(c):"",profile:c=>c?f.Url(c):"",family_name:"string",given_name:"string",middle_name:"string",nickname:"string",website:c=>c?f.Url(c):""},r=f.Params(t||{},n,["email","password"]);await ge.bind(this)(),e=f.Params(e||{},{email_subscription:c=>{if(typeof c!="boolean")throw new a('"option.email_subscription" should be type: <boolean>.',{code:"INVALID_PARAMETER"});if(!e?.signup_confirmation)throw new a('"option.signup_confirmation" is required for email subscription.',{code:"INVALID_PARAMETER"});return c},signup_confirmation:c=>{let g=c;if(typeof c=="string")g=f.Url(c);else if(typeof c=="boolean")g=c;else throw new a('"option.signup_confirmation" should be type: <string | boolean>.',{code:"INVALID_PARAMETER"});if(g&&!r.email)throw new a('"email" is required for signup confirmation.',{code:"INVALID_PARAMETER"});return g},login:c=>{if(typeof c=="boolean"){if(e.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(!e?.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=e?.login||false;if(r.signup_confirmation=e?.signup_confirmation||false,r.email_subscription=e?.email_subscription||false,r.email_public&&!r.signup_confirmation)throw new a('"option.signup_confirmation" should be true if "email_public" is set to true.',{code:"INVALID_PARAMETER"});r.service=this.service,r.owner=this.owner;let s=q.bind(this)().createCognitoUser(r.username||r.email);for(let c of ["email_public","address_public","gender_public","birthdate_public","phone_number_public"])r[c]=r[c]?"1":"0";r.access_group&&(r.access_group=r.access_group.toString());let o=(await R.bind(this)("signupkey",{username:s.cognitoUsername,signup_confirmation:typeof r.signup_confirmation=="boolean"?JSON.stringify(r.signup_confirmation):r.signup_confirmation,email_subscription:r.email_subscription,template_confirmation:e?.template?.signup_confirmation||"",template_welcome:e?.template?.welcome||""})).split(":"),l=o.slice(1).join(":"),u=[new amazonCognitoIdentityJs.CognitoUserAttribute({Name:"custom:signup",Value:o[0]}),new amazonCognitoIdentityJs.CognitoUserAttribute({Name:"locale",Value:l.split("#")[1]}),new amazonCognitoIdentityJs.CognitoUserAttribute({Name:"custom:signup_ticket",Value:l})];for(let c in n){let g=["email_public","address_public","gender_public","birthdate_public","phone_number_public","misc","service","owner"];r[c]!==""&&(c==="username"||c==="password"||c==="access_group"||(g.includes(c)?u.push(new amazonCognitoIdentityJs.CognitoUserAttribute({Name:"custom:"+c,Value:r[c]})):u.push(new amazonCognitoIdentityJs.CognitoUserAttribute({Name:c,Value:r[c]}))));}return await q.bind(this)().signup(s.cognitoUsername,r.password,u),r.signup_confirmation?(C=s.cognitoUser,this.__request_signup_confirmation=s.cognitoUsername,"SUCCESS: The account has been created. User's signup confirmation is required."):i?qe.bind(this)({email:r.username||r.email,password:r.password}):"SUCCESS: The account has been created."}async function bt(){await this.__connection;let t=await R.bind(this)("remove-account",{disable:this.__user.user_id},{auth:true});return await ge.bind(this)(),t}async function yt(t){await this.__connection;let e=f.Params(t,{email:i=>f.Email(i),code:["number","string"],new_password:i=>f.Password(i)},["email","code","new_password"]),n=e.code,r=e.new_password;return typeof n=="number"&&(n=n.toString()),new Promise(async(i,s)=>{q.bind(this)().createCognitoUser(e.email).cognitoUser.confirmPassword(n,r,{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 wt(t,e,n){await this.__connection;let r;if(!C)throw new a("The user has to be logged in.",{code:"INVALID_REQUEST"});if(t==="email"||t==="phone_number"){if(!this.__user.hasOwnProperty(t))throw new a(`No ${t==="email"?"e-mail":"phone number"} to verify`,{code:"INVALID_REQUEST"});if(this.__user?.[`${t}_verified`])return `SUCCESS: "${t}" is verified.`;r=(e?f.Params(e,{code:"string"}):{}).code||"";}else return;let i,s=n?.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=>{r?q.bind(this)().getSession({refreshToken:true}).then(()=>{this.__user&&(this.__user[t+"_verified"]=true),o(`SUCCESS: "${t}" is verified.`);}).catch(g=>{l(g);}):o("SUCCESS: Verification code has been sent.");},onFailure:c=>{l(new a(c.message||"Failed to request verification code.",{code:c?.code}));}};r?C?.verifyAttribute(t,r,u):(u.inputVerificationCode=null,C?.getAttributeVerificationCode(t,u,i));})}function Et(t,e){return wt.bind(this)("phone_number",t,e)}function Rt(t,e){return wt.bind(this)("email",t,e)}async function At(t,e){await this.__connection;let n=f.Params(t,{email:s=>f.Email(s)},["email"]),r,i=e?.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"});r={template_verification:i};}return new Promise(async(s,o)=>{q.bind(this)().createCognitoUser(n.email).cognitoUser.forgotPassword({onSuccess:u=>{s("SUCCESS: Verification code has been sent.");},onFailure:u=>{let{parsed:c,code:g}=Ie(u),d={UserNotFoundException:"NOT_EXISTS",InvalidParameterException:"INVALID_PARAMETER",NotAuthorizedException:"INVALID_REQUEST",LimitExceededException:"REQUEST_EXCEED",TooManyRequestsException:"REQUEST_EXCEED",CodeDeliveryFailureException:"CODE_DELIVERY_FAILURE"}[g]||c.code||g||"ERROR";o(new a(c.message,{code:d,cause:u}));}},r);})}async function It(t){if(await this.__connection,!this.session)throw new a("User login is required.",{code:"INVALID_REQUEST"});let e=f.Params(t,{current_password:"string",new_password:"string"});if(!e?.current_password)throw new a('"current_password" is required to change password.',{code:"INVALID_PARAMETER"});if(!e?.new_password)throw new a('"new_password" is required to change password.',{code:"INVALID_PARAMETER"});return f.Password(e.current_password),f.Password(e.new_password),new Promise((n,r)=>{C.changePassword(e.current_password,e.new_password,(i,s)=>{if(i){if(i?.code==="InvalidParameterException")r(new a("Invalid password parameter.",{code:"INVALID_PARAMETER"}));else if(i?.code==="NotAuthorizedException")r(new a("Incorrect password.",{code:"INVALID_REQUEST"}));else if(i?.code==="TooManyRequestsException"||i?.code==="LimitExceededException")r(new a("Too many attempts. Please try again later.",{code:"REQUEST_EXCEED"}));else {let{parsed:o}=Ie(i);r(o);}return}n("SUCCESS: Password has been changed.");});})}async function Tt(t){if(await this.__connection,!this.session)throw new a("User login is required.",{code:"INVALID_REQUEST"});let e=f.Params(t||{},{user_id:i=>f.UserId(i),email:i=>f.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?f.Birthdate(i):"",phone_number:i=>i?f.PhoneNumber(i):"",email_public:"boolean",phone_number_public:"boolean",address_public:"boolean",gender_public:"boolean",birthdate_public:"boolean",misc:"string",picture:i=>i?f.Url(i):"",profile:i=>i?f.Url(i):"",family_name:"string",given_name:"string",middle_name:"string",nickname:"string",website:i=>i?f.Url(i):""});if(e&&typeof e=="object"&&!Object.keys(e).length)return this.user;e.email&&(e.preferred_username=this.service+"-"+M.hash(e.email));let n=[["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 n)if(e[i[0]]&&!this.__user[i[1]])throw new a(`${i[2]} "${i[0]}" to true.`,{code:"INVALID_REQUEST"})}let r=[];for(let i in e){if(e[i]===this.user[i]){r.push(i);continue}if(["email_public","phone_number_public","address_public","gender_public","birthdate_public","misc"].includes(i)){let o=e[i];typeof o=="boolean"&&(o=o?"1":"0"),e["custom:"+i]=o,r.push(i);}}for(let i of r)delete e[i];if(e.user_id)if(e.user_id===this.user.user_id)delete e.user_id;else return R.bind(this)("admin-edit-profile",{attributes:e},{auth:true});if(e&&typeof e=="object"&&Object.keys(e).length){let i=[];for(let s in e)i.push(new amazonCognitoIdentityJs.CognitoUserAttribute({Name:s,Value:e[s]}));return await new Promise((s,o)=>{C?.updateAttributes(i,(l,u)=>{l&&o([l?.code||l?.name,l?.message||"Failed to update user settings."]),s(u);});}),await q.bind(this)().getSession({refreshToken:true}),this.user}return this.user}async function Pt(t,e){t=N(t).data,t||(t={searchFor:"timestamp",condition:">",value:0},e||(e={}),e.ascending=false),await this.__connection;let n={user_id:i=>Array.isArray(i)?i.map(s=>f.UserId(s)):f.UserId(i),email:"string",phone_number:"string",locale:i=>{if(typeof i!="string"||typeof i=="string"&&i.length>5)throw new a('Value of "locale" should be a country code.',{code:"INVALID_PARAMETER"});return i},name:"string",address:"string",gender:"string",birthdate:i=>f.Birthdate(i),subscribers:"number",timestamp:"number",access_group:"number",approved:"string"},r=["searchFor","value"];if(t=f.Params(t,{searchFor:["user_id","name","email","phone_number","address","gender","birthdate","locale","subscribers","timestamp","access_group","approved"],condition:[">",">=","=","<","<=","gt","gte","eq","lt","lte",()=>"="],value:i=>{let s=n[t.searchFor];if(typeof s=="function")return s(i);if(typeof i!==s)throw new a(`Value does not match the type of "${t.searchFor}" index.`,{code:"INVALID_PARAMETER"});return i},range:i=>{let s=n[t.searchFor];if(typeof s=="function")return s(i);if(typeof i!==s)throw new a(`Range does not match the type of "${t.searchFor}" index.`,{code:"INVALID_PARAMETER"});return i}},r),t?.condition&&t?.condition!=="="&&t.hasOwnProperty("range"))throw new a("Conditions does not apply on range search.",{code:"INVALID_PARAMETER"});if(t.searchFor==="user_id"&&(t.condition!=="="||t.range))throw new a(`Conditions are not allowed on "${t.searchFor}"`,{code:"INVALID_PARAMETER"});if(typeof t?.value=="string"&&!t?.value)throw new a("Value should not be an empty string.",{code:"INVALID_PARAMETER"});if(typeof t?.searchFor=="string"&&!t?.searchFor)throw new a('"searchFor" should not be an empty string.',{code:"INVALID_PARAMETER"});return R.bind(this)("get-users",t,{auth:true,fetchOptions:e})}async function St(t){await this.__connection;let e=await R.bind(this)("last-verified-email",t,{auth:true});return e.includes("SUCCESS")?(await q.bind(this)().getSession({refreshToken:true}),this.user):e}async function kt(t){return await this.__connection,t=f.Params(t,{username:f.Email,redirect:f.Url},["username"]),await R.bind(this)("request-username-change",t,{auth:true})}var ce=null,xt=typeof SubmitEvent<"u",Ur=typeof HTMLFormElement<"u",he=V(),Ve=0;function Dt(t){if(!t)return null;let e=Number(t);if(Number.isFinite(e))return Math.max(0,e*1e3);let n=Date.parse(t);return Number.isNaN(n)?null:Math.max(0,n-Date.now())}function $e(t,e){return e>0?t/e*100:0}var vt=t=>{let{auth:e,type:n,endpoints:r}=t,i=r[0],s=r[1];if(Ve++,n==="admin"){let o=Object.entries(i).filter(([l,u])=>l.includes(e?"_private":"_public")&&l!=="get_users_private"&&l!=="service_public"&&typeof u=="string").map(([,l])=>l);if(!o.length)throw new a("No available admin gateways.",{code:"INVALID_REQUEST"});return o[Ve%o.length]}if(n==="record"){let o=Object.entries(s).filter(([l,u])=>l.includes(e?"record_private":"record_public")&&typeof u=="string").map(([,l])=>l);if(!o.length)throw new a("No available record gateways.",{code:"INVALID_REQUEST"});return o[Ve%o.length]}throw new a("Invalid gateway type.",{code:"INVALID_REQUEST"})};async function Nr(t,e){let n=await Promise.all([this.admin_endpoint,this.record_endpoint]),r=n[0],i=n[1],s=t.split("?"),o=s.length>1?"?"+s[1]:"";switch(t=s[0],t){case "get-users":return r.get_users_private+t+o;case "service":return r.service_public+t+o;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 "request-username-change":case "send-inquiry":case "register-newsletter-group":case "newsletter-group-endpoint":case "invitation-list":case "csr":case "csr-poll":case "csr-cancel":return vt.bind(this)({auth:e,type:"admin",endpoints:n})+t+o;case "post-record":return (e?i.post_private:i.post_public)+t+o;case "get-records":return (e?i.get_private:i.get_public)+t+o;case "del-files":case "del-records":return i.del_private+t+o;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 "extract-file-text":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 vt.bind(this)({auth:e,type:"record",endpoints:n})+t+o;default:return f.Url(t)+o}}var fe={};function Ut(){ce&&(ce.terminate(),ce=null);}async function R(t,e=null,n,r){this.log("request",{url:t,data:e,options:n,_etc:r||{}}),n=n||{};let{auth:i=false,method:s="post",bypassAwaitConnection:o=false}=n;s=s.toUpperCase();let l=null,u=e?.service||this.service,c=e?.owner||this.owner,g=null,d=await Nr.bind(this)(t,!!i);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 h=n?.tokenHeaders?.idToken===true;(i||h)&&(g=await ae.bind(this)());let _={},{fetchMore:p=false,progress:y}=n?.fetchOptions||{};if(n?.fetchOptions&&Object.keys(n.fetchOptions).length){for(let k of ["limit","startKey","ascending"])if(n.fetchOptions.hasOwnProperty(k)){if(k==="startKey"&&n.fetchOptions[k]===null)continue;_[k]=n.fetchOptions[k];}_=f.Params(_,{limit:k=>{if(typeof k!="number")throw new a("Fetch limit should be a number.",{code:"INVALID_REQUEST"});if(k>1e3)throw new a("Fetch limit should be below 1000.",{code:"INVALID_REQUEST"});return k},startKey:k=>k,ascending:"boolean"});}let w=r?.ignoreService?{}:{service:u,owner:c};Object.assign(w,_),e=N(e).data,e?e&&typeof e=="object"&&(e=Object.assign(w,e)):e=w;let m=`${s}:${i?"auth":"public"}:${t}`,v=(()=>{if(e&&typeof e=="object"&&Object.keys(e).length&&!(he&&e instanceof FormData)){let k=function(D){return typeof D=="object"&&D!==null?Object.keys(D).sort().reduce((U,L)=>(typeof D[L]=="object"&&D[L]!==null?U[L]=k(D[L]):U[L]=D[L],U),{}):D};return M.hash(m+"/"+JSON.stringify(k(e)))}return M.hash(m+"/"+u)})(),{requestKey:S,requestKeyWithStartKey:P}=Cr.bind(this)({params:e,url:t,fetchMore:p,hashedParams:v});if(!S||S&&typeof S=="object")return S;if(this.log("requestKey",P),typeof P=="string"&&fe[P]instanceof Promise)return this.log("request:returning pending",P),fe[P];let x={Accept:"*/*"};if(Object.prototype.hasOwnProperty.call(n,"contentType")&&n.contentType!==void 0){let k=n.contentType===null?"application/x-www-form-urlencoded":n.contentType;k&&(x["Content-Type"]=k);}else x["Content-Type"]="application/json";if(g&&(x.Authorization=g),n?.tokenHeaders){let k=(L,Gn)=>typeof L=="string"?L:L===true?Gn:null,D=k(n.tokenHeaders.accessToken,this.session?.accessToken?.jwtToken||null),U=k(n.tokenHeaders.idToken,this.bearerToken||this.session?.idToken?.jwtToken||g||null);D&&(x["X-Access-Token"]=D),U&&(x["X-Id-Token"]=U);}let re={public_identifier:this.__public_identifier,service:u,owner:c};x["Content-Meta"]=JSON.stringify(re);let $={headers:x};if(n?.responseType&&($.responseType=n.responseType),s==="GET"){if(e){let k=[];if(he&&e instanceof FormData?k=Array.from(e.entries()).map(([D,U])=>{let L=typeof U=="string"?U:U.name;return encodeURIComponent(D)+"="+encodeURIComponent(L)}):k=Object.keys(e).map(D=>{let U=e[D];return typeof U!="string"&&(U=JSON.stringify(U)),encodeURIComponent(D)+"="+encodeURIComponent(U)}),k.length){let D=d.includes("?")?d.endsWith("?")||d.endsWith("&")?"":"&":"?";d+=D+k.join("&");}}$.body=null;}else if(he&&e instanceof FormData)$.body=e;else if(x["Content-Type"]==="application/x-www-form-urlencoded"&&e&&typeof e=="object"){let k=new URLSearchParams;for(let D of Object.keys(e)){let U=e[D];k.append(D,typeof U=="string"?U:JSON.stringify(U));}$.body=k.toString();}else typeof e=="string"?$.body=e:$.body=e?JSON.stringify(e):null;if($.method=s,ce===null){let k={batchSize:this.requestBatchSize,breakWhenError:false,onProgress:D=>{this.onBatchProcess.forEach(U=>U(D));}};ce=new gn__default.default(k);}return this.log("request-opt",$),new Promise((k,D)=>{ce.add([async()=>{let U=Nt.bind(this)(d,$,y);fe[P]=U;try{let L=Lr.bind(this)({hashedParam:S,requestKeyWithStartKey:P,url:t,fetched:await U});return delete fe[P],this.log("request:end",L),k(L),L}catch(L){throw delete fe[P],this.log("request:err",L),D(L),L}}]);})}function Cr(t){let{params:e={},url:n,fetchMore:r=false,hashedParams:i}=t||{};if(e.startKey){if(!(typeof e.startKey=="object"&&Object.keys(e.startKey).length)&&e.startKey!=="start"&&e.startKey!=="end")throw new a(`"${e.startKey}" is invalid startKey key.`,{code:"INVALID_PARAMETER"});e.startKey==="start"&&(r=false,delete e.startKey);}if(!r){if(this.__cached_requests?.[n]?.[i]&&delete this.__cached_requests[n][i],this.__startKeyHistory?.[n]?.[i]){if(Array.isArray(this.__startKeyHistory[n][i])&&this.__startKeyHistory[n][i].length)for(let u of this.__startKeyHistory[n][i]){let c=i+M.hash(u);this.__cached_requests?.[n]&&this.__cached_requests?.[n]?.[c]&&delete this.__cached_requests[n][c];}delete this.__startKeyHistory[n][i];}return {requestKeyWithStartKey:i,requestKey:i}}if(!Array.isArray(this.__startKeyHistory?.[n]?.[i]))return {requestKeyWithStartKey:i,requestKey:i};let s=this.__startKeyHistory[n][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+=M.hash(o),e.startKey=JSON.parse(o);}return this.__cached_requests?.[n]?.[l]?{requestKey:this.__cached_requests[n][l],requestKeyWithStartKey:l}:{requestKeyWithStartKey:l,requestKey:i}}function Nt(t,e,n){return new Promise((r,i)=>{let s=new XMLHttpRequest;s.open(e.method||"GET",t);for(var o in e.headers||{})s.setRequestHeader(o,e.headers[o]);e.responseType&&(s.responseType=e.responseType),s.onload=()=>{if(s.status<400)if(e.responseType=="json"||e.responseType=="blob")r(s.response);else {let l=s.responseText;try{l=JSON.parse(l);}catch{}r(l);}else if(s.status===429){let l=s.getResponseHeader("Retry-After"),u=Dt(l);u!==null?setTimeout(()=>{Nt(t,e,n).then(r,i);},u):i("Too many requests");}else {let l=s.status,u=["INVALID_CORS","INVALID_REQUEST","SERVICE_DISABLED","INVALID_PARAMETER","ERROR","EXISTS","NOT_EXISTS"],c=e.responseType=="blob"?s.response:s.responseText;try{c=JSON.parse(c);}catch{}if(typeof c=="string"){let g=c.split(":"),d=g.splice(0,1)[0].trim(),h=g.join(":").trim();i(new a(h||c,{code:u.includes(d)?d:"ERROR"}));}else if(typeof c=="object"&&c?.message){let g=c?.code||(l?l.toString():null)||"ERROR",d=c.message,h=c?.cause;typeof d=="string"&&(d=d.trim()),i(new a(d,{cause:h,code:g}));}else i(c);}},s.onerror=()=>i("Network error"),s.onabort=()=>i("Aborted"),s.ontimeout=()=>i("Timeout"),typeof n=="function"&&(s.onprogress=l=>{n({status:"download",progress:$e(l.loaded,l.total),loaded:l.loaded,total:l.total,abort:()=>s.abort()});},s.upload&&(s.upload.onprogress=l=>{n({status:"upload",progress:$e(l.loaded,l.total),loaded:l.loaded,total:l.total,abort:()=>s.abort()});})),s.send(e.body);})}function Lr(t){let{hashedParam:e,requestKeyWithStartKey:n,url:r,fetched:i}=t;if(!i?.startKey)return i;this.__startKeyHistory.hasOwnProperty(r)||(this.__startKeyHistory[r]={}),this.__startKeyHistory[r].hasOwnProperty(e)||(this.__startKeyHistory[r][e]=[]);let s=i.startKey==="end"?"end":JSON.stringify(i.startKey);return this.__startKeyHistory[r][e].includes(s)||this.__startKeyHistory[r][e].push(s),this.__cached_requests?.[r]||(this.__cached_requests[r]={}),this.__cached_requests[r][n]=i,Object.assign({startKeyHistory:this.__startKeyHistory[r][e]},i)}async function Pe(t,e){await this.__connection;let{record_id:n,service:r=this.service,progress:i}=e;if(!n)throw new a('"record_id" is required.',{code:"INVALID_PARAMETER"});if(xt&&t instanceof SubmitEvent&&(t=t.target),Ur&&t instanceof HTMLFormElement&&(t=new FormData(t)),!he||!(t instanceof FormData))throw new a('"fileList" should be a FormData or HTMLFormElement.',{code:"INVALID_PARAMETER"});let o={reserved_key:ie(),service:r,request:"post"};e?.record_id&&(o.id=e.record_id);let l,u=(_,p,y)=>new Promise((w,m)=>{l=new XMLHttpRequest,l.open("POST",_),l.onload=()=>{let v=l.responseText;try{v=JSON.parse(v);}catch{}if(l.status>=200&&l.status<300)w(v);else if(l.status===429){let S=l.getResponseHeader("Retry-After"),P=Dt(S);P!==null?setTimeout(()=>{u(_,p,y).then(w,m);},P):m("Too many requests");}else m(v);},l.onerror=()=>m("Network error"),l.onabort=()=>m("Aborted"),l.ontimeout=()=>m("Timeout"),l.upload&&typeof y=="function"&&(l.upload.onprogress=y),l.send(p);});function c(_){let p="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";if(_===0)return p[0];let y="";for(;_>0;)y=p[_%62]+y,_=Math.floor(_/62);return y}let g=[],d=[],h=[];for(let[_,p]of t.entries()){if(!(p instanceof File))continue;let y=Object.assign({key:_+"/"+p.name,sizeKey:c(p.size),contentType:p.type||null},o),{fields:w=null,url:m,cdn:v}=await R.bind(this)("get-signed-url",y,{auth:!!this.__user});h.push(v);let S=new FormData;for(let P in w)S.append(P,w[P]);S.append("file",p);try{await u(m,S,typeof i=="function"?P=>i({status:"upload",progress:$e(P.loaded,P.total),currentFile:p,completed:g,failed:d,loaded:P.loaded,total:P.total,abort:()=>l.abort()}):null),g.push(p);}catch{d.push(p);}}return {completed:g,failed:d,bin_endpoints:h}}var Te={};function I(t){let{preventMultipleCalls:e=false}=t||{};return function(n,r,i){let s=i.value;i.value=function(...o){let l=o[0],u=true,c=null,g="",d={},h=false;if(xt&&l instanceof SubmitEvent){l.preventDefault();let m=window.location.href;c=l.target;let v=new URL(c.action);g=v.href;let S=g?g.match(/(?<=\{).*?(?=\})/g):"";if(S)for(let P of S){if(!P)continue;let x=c.querySelector(`[name="${P}"]`);if(x)if(x.type==="file")for(let j=0;j<=x.files.length-1;j++)x.files[j]&&(d[P]||(d[P]=[]),d[P].push(new Promise((re,$)=>{let k=new FileReader;k.onload=function(){re(k.result);},k.readAsDataURL(x.files[j]),k.onerror=$;})));else g=g.replace(`{${P}}`,x.value);}c.getAttribute("action")===null?u=false:h=v.href===m;}let _=async m=>{if(g)for(let v in d)d[v].length&&(g=g.replace(`{${v}}`,(await Promise.all(d[v])).join(",")));return c&&u&&(window.sessionStorage.setItem(`${this.service}:${M.hash(g)}`,JSON.stringify(m)),h?window.location.replace(g):window.location.href=g),m},p,y=m=>{throw m instanceof a?m.name=r+"()":m=m instanceof Error?m:new a(m,{name:r+"()"}),m},w=async()=>{try{if(p=s.bind(this)(...o),p instanceof Promise){let m=await p;return _(m)}return _(p)}catch(m){throw y(m)}};if(e){let m=`${r}:${this?.__public_identifier||""}:${this?.service||""}:${this?.owner||""}`;return Te?.[m]||(Te[m]=w().finally(()=>{delete Te[m];})),Te[m]}return w()};}}async function Ct(){await this.__connection;let t=`${this.service}:${M.hash(window.location.href.split("?")[0])}`,e=window.sessionStorage.getItem(t);if(window.sessionStorage.removeItem(t),e!==null){try{e=JSON.parse(e);}catch{}return e}return null}var Or=128,Mr=64,Fr=128,qr=256,Vr="\u{10FFFF}",$r=/[\u0000-\u001F\u007F]|\u{10FFFF}/u,jr=/[\/!*#]/,Br={"/":"%2F","!":"%21","*":"%2A","#":"%23"},Qr={"%2F":"/","%21":"!","%2A":"*","%23":"#"};function Kr(t){return t.replace(/%/g,"%25").replace(/[\/!*#]/g,n=>Br[n]||n)}function Q(t){return typeof t!="string"?t:t.replace(/%(2F|21|2A|23)/gi,n=>{let r=n.toUpperCase();return Qr[r]||n}).replace(/%25/gi,"%")}function ee(t,e,n={}){let{allowEmpty:r=false,maxLength:i,blockKeyDelimiters:s=false,disallowLeadingDollar:o=false,onlyAlphanumeric:l=false}=n;if(typeof t!="string")throw new a(`"${e}" should be type: <string>.`,{code:"INVALID_PARAMETER"});if(l&&/[^a-zA-Z0-9]/.test(t))throw new a(`"${e}" should only contain alphanumeric characters.`,{code:"INVALID_PARAMETER"});if(!r&&t.length===0)throw new a(`"${e}" is required.`,{code:"INVALID_PARAMETER"});if(i&&t.length>i)throw new a(`"${e}" should be <= ${i} characters.`,{code:"INVALID_PARAMETER"});if($r.test(t)||t.includes(Vr))throw new a(`"${e}" cannot include control characters or unsupported sentinel characters.`,{code:"INVALID_PARAMETER"});if(s&&jr.test(t)&&(t=Kr(t)),o&&t.startsWith("$"))throw new a(`"${e}" cannot start with "$".`,{code:"INVALID_PARAMETER"});return t}function je(t,e="table.name"){return ee(t,e,{allowEmpty:false,maxLength:Or,blockKeyDelimiters:true})}function Be(t,e="tag"){return ee(t,e,{allowEmpty:false,maxLength:Mr,blockKeyDelimiters:true})}function pe(t,e="index.name"){return ee(t,e,{allowEmpty:false,maxLength:Fr,blockKeyDelimiters:true,disallowLeadingDollar:true})}function Lt(t,e="index.value"){return ee(t,e,{allowEmpty:true,maxLength:qr})}function Ot(t){if(!t.record_id&&!t.unique_id)return null;let e={};return t?.service&&(e.service=t.service),t?.owner&&(e.owner=t.owner),t?.record_id?e.record_id=ee(t.record_id,"record_id",{allowEmpty:false,onlyAlphanumeric:true}):t?.unique_id&&(e.unique_id=t.unique_id),e}function Qe(t){if(t===void 0)return 0;if(typeof t=="number"){if(t>99||t<0)throw new a('"table.access_group" value should be within a range of 0 ~ 99.',{code:"INVALID_REQUEST"})}else if(typeof t=="string"){if(t={private:"private",public:0,authorized:1,admin:99}[t],t===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&&t)throw new a("Unsigned users have no access to records with access group.",{code:"INVALID_REQUEST"});return t}var Se=4503599627370496;function ke(t){if(typeof t=="number"){if(t>Se||t<-Se)throw new a(`Number value should be within range -${Se} ~ +${Se}`,{code:"INVALID_PARAMETER"});return t}if(typeof t=="boolean")return t;if(typeof t=="string")return Lt(t,"index.value");throw new a('"index.value" should be type: <number | boolean | string>.',{code:"INVALID_PARAMETER"})}function Mt(t,e){if(!e.index||!("value"in e.index))throw new a('"index.value" is required.',{code:"INVALID_PARAMETER"});if(e.index.name==="$record_id")throw new a(`Cannot do "index.range" on ${e.index.name}`,{code:"INVALID_PARAMETER"});if(typeof e.index.value!=typeof t)throw new a('"index.range" type should match the type of "index.value".',{code:"INVALID_PARAMETER"});return typeof t=="string"?Lt(t,"index.range"):t}var ve={};async function Hr(t){return typeof t=="string"?t:t&&typeof t.text=="function"?await t.text():await new Promise((e,n)=>{try{let r=new FileReader;r.onload=()=>e(r.result),r.onerror=()=>n(r.error||new Error("Failed to read blob")),r.readAsText(t);}catch(r){n(r);}})}async function le(t,e,n=false){let r={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:{}},i=false,s=[];function o(c){let g=c=="**"?"private":parseInt(c);return g=g==0?"public":g==1?"authorized":g==99?"admin":g,g}let l={ip:c=>{let g=c.split("#"),d=g[0];g.length>1&&(r.unique_id=g.slice(1).join("#")),d.slice(-1)==="R"?(r.readonly=true,d=d.slice(0,-1)):r.readonly=false,/^\d{1,3}-\d{1,3}-\d{1,3}-\d{1,3}$/.test(d)&&(d=d.split("-").join("."),i=true),r.ip=d;},rec:c=>{if(!c)return;r.record_id=c;let g=c.substring(0,c.length-9),d=B(g);r.uploaded=d;},usr:c=>{r.user_id=c;},tbl:c=>{if(c&&!r.table.name){let g=c.split("/");r.table.name=Q(g[0]),r.table.access_group=o(g[2]),g?.[3]&&(r.table.subscription.is_subscription_record=true);}},usr_tbl:c=>{let g=c.split("/");r.user_id||(r.user_id=g[0]),r.table.name||(r.table.name=Q(g[1]),r.table.access_group=o(g[3]),g?.[4]&&(r.table.subscription.is_subscription_record=true));},idx:c=>{if(!c)return;let g=c.split("!"),d=Q(g.splice(0,1)[0]),h=Wr("!"+g.join("!"));typeof h=="string"&&(h=Q(h)),r.index={name:d,value:h};},ref:c=>{c&&(r.reference=c.split("/")[0]);},tags:c=>{r.tags=Array.isArray(c)?c.map(g=>Q(g)):c;},upd:c=>{r.updated=c;},acpt_mrf:c=>{r.source.prevent_multiple_referencing=!c;},ref_limt:c=>{r.source.referencing_limit=c;},rfd:c=>{r.referenced_count=c;},bin:async c=>{let g={},d=r?.reference||null;if(Array.isArray(c)){let h=await Promise.all(c.map(async _=>{try{let p=_.split("/").slice(3).join("/"),y=p.split("/");if(y.length<12)return null;let w=decodeURIComponent(y[y.length-1]),m=decodeURIComponent(y[10]);if(m==="__data__"&&w==="__json__.json")return {isDataFile:!0,rawUrl:_};let v=y[9],S=y[8],P=o(y[6]),x=_;if(P!=="public")try{x=await me.bind(this)(_,{dataType:"endpoint",_ref:d});}catch(re){console.error("Error getting signed url for private file:",re),x=_;}let j={access_group:P,filename:w,url:x,path:p,size:B(v),uploaded:B(S),getFile:(re,$)=>{let k={dataType:re||"download",progress:$,_ref:d,_update:j};return me.bind(this)(x,k)}};return {pathKey:m,obj:j}}catch{return null}}));for(let _ of h)if(_&&!_.isDataFile){if(g[_.pathKey]){g[_.pathKey].push(_.obj);continue}g[_.pathKey]=[_.obj];}}r.bin=g;},prv_acs:c=>{for(let g in c)["notify_subscribers","upload_to_feed","feed_referencing_records","notify_referencing_records"].includes(g)?r.table.subscription[g]=c[g]:r.source[g]=c[g];},data:async c=>{if(c==="!D%{}"){r.data={};return}if(c==="!L%[]"){r.data=[];return}if(c&&typeof c=="object"&&!Array.isArray(c)&&typeof c.__data__=="string"&&Object.keys(c).length===1&&c.__data__.endsWith("/__data__/__json__.json")){let g=c.__data__,d=s.find(h=>h.endsWith(g))||null;if(d){if(n){r.data=c;return}try{let h=await me.bind(this)(d,{dataType:"blob",_ref:r.reference||null}),_=await Hr(h);r.data=JSON.parse(_);}catch(h){console.error("Failed to fetch offloaded record data:",h),r.data=null;}return}}r.data=c;}};if(t.record_id)return t;if(Array.isArray(t.bin))for(let c of t.bin)try{if(typeof c!="string")continue;let g=c.split("/").slice(3);g.length>=12&&decodeURIComponent(g[10])==="__data__"&&decodeURIComponent(g[g.length-1])==="__json__.json"&&s.push(c);}catch{}let u=[];for(let c in l)if(t.hasOwnProperty(c)){let g=l[c](t[c]);g instanceof Promise&&u.push(g);}return i&&(r.user_id="anonymous:"+r.user_id),await Promise.all(u),r}function Wr(t){let e=t.substring(3);switch(t.substring(0,3)){case "!S%":return e;case "!N%":let r=e.split("."),i=Number(r[0])-4503599627370496;return r.length===1?i:parseFloat(i.toString()+"."+r[1]);case "!B%":return e==="1";case "!L%":case "!D%":try{return JSON.parse(e)}catch{throw new a("Value parse error.",{code:"PARSE_ERROR"})}default:return t}}async function Ft(t){let{endpoints:e}=t;if(typeof e=="string"&&(e=[e]),!Array.isArray(e))throw new a('"endpoints" should be type: array | string.',{code:"INVALID_PARAMETER"});let n=await R.bind(this)("del-files",{endpoints:e,storage:"records"},{auth:true,method:"post"}),r=[];for(let i in n)r.push(le.bind(this)(n[i]));return Promise.all(r)}async function me(t,e){if(typeof t!="string")throw new a('"url" should be type: string.',{code:"INVALID_PARAMETER"});let n=t.split("?"),r=n.shift()||"",i=n.length?"?"+n.join("?"):"",s=f.Url(r);t=s+i;let o=false,l=s.split("/"),c=l[2].split("."),g=null;c.length===3&&c[1]==="skapi"&&(g=c[0],o=true);let d=l.slice(3),h=false;if(!o&&(d[0]==="auth"||d[0]==="publ"))try{f.UserId(d[2]),f.UserId(d[3]),h=d[0]=="auth",o=!0;}catch{throw new a("Invalid file url.",{code:"INVALID_PARAMETER"})}let _=g?null:d[1];if(e=f.Params(e,{expires:["number",()=>0],dataType:["base64","blob","endpoint","text","info",()=>"download"],progress:["function","undefined",null],_ref:[null,"string"],_update:m=>m}),e?.dataType==="info")return {url:t,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:B(d[9]),uploaded:B(d[8])};let p=t.split("/").slice(-1)[0],y=e.expires;if(y){if(!o)throw new a("Expires option can only be used on skapi cdn endpoints.",{code:"INVALID_PARAMETER"});if(y<0)throw new a('"config.expires" should be > 0. (seconds)',{code:"INVALID_PARAMETER"});let m={request:g?"get-host":"get",id:g||d[5],key:t,expires:y};_&&(m.service=_),t=(await R.bind(this)("get-signed-url",m,{auth:true})).url;}else if(h){let m=Math.floor(Date.now()/1e3);if(!this.bearerToken&&(!this.session?.idToken?.payload?.exp||this.session.idToken.payload.exp<m)){this.log("getFile:requesting new token",null);try{await q.bind(this)().getSession({refreshToken:!0}),this.log("getFile:received new tokens",{exp:this.session?.idToken?.payload?.exp,currTime:m,expiresIn:this.session?.idToken?.payload?.exp-m,token:this.session?.accessToken?.jwtToken,refreshToken:this.session?.refreshToken?.token});}catch(x){throw this.log("getFile:new token error",x),new a("User login is required.",{code:"INVALID_REQUEST"})}}let v=this.bearerToken||this.session?.idToken?.jwtToken;if(!v||!this.user?.user_id)throw new a("User login is required.",{code:"INVALID_REQUEST"});t+=`${t.includes("?")?"&":"?"}t=${encodeURIComponent(v)}`;let S=d[6]==="**"?"**":parseInt(d[6]),P=this.user?.access_group??-1;if(this.user.user_id!==d[3]&&(S==="**"||P<S)){let x=d[5];if(this.__private_access_key[x]&&typeof this.__private_access_key[x]=="string")t+=`&p=${encodeURIComponent(this.__private_access_key[x])}`;else if(this.owner!==this.host)try{let j=await this.requestPrivateRecordAccessKey({record_id:x,reference_id:e?._ref});t+=`&p=${encodeURIComponent(j)}`;}catch{}}}if(e?.dataType==="endpoint")return e._update&&(e._update.url=t),t;if(e?.dataType==="download"){let m=document.createElement("a");return m.href=t,document.body.appendChild(m),m.setAttribute("download",p),m.target="_blank",m.click(),document.body.removeChild(m),null}return new Promise(async(m,v)=>{try{let S=await R.bind(this)(t,null,{method:"get",contentType:null,responseType:e?.dataType==="text"?"text":"blob",fetchOptions:{progress:e?.progress}},{ignoreService:!0});if(e?.dataType==="base64"){let P=new FileReader;P.onloadend=()=>m(P.result),P.readAsDataURL(S);}else m(S);}catch(S){v(S);}})}function xe(t,e){return `${t||this.service}/${e||this.owner}`}function Ke(t,e){let n=this.__my_unique_ids[t];return n?n[e]:void 0}function qt(t,e,n){this.__my_unique_ids[t]||(this.__my_unique_ids[t]={}),this.__my_unique_ids[t][e]=n;}function zr(t,e){this.__my_unique_ids[t]&&delete this.__my_unique_ids[t][e];}async function Vt(t,e=false){t=N(t,{ignoreEmpty:true}).data||{};let n=xe.bind(this)(t?.service,t?.owner),r="",i=Ot(t);if(i){if(t=i,r=t.record_id||t.unique_id,typeof r=="string"){typeof this.__private_access_key?.[r]=="string"&&(t.private_key=this.__private_access_key?.[r]||void 0);let s=Ke.bind(this)(n,r);s&&(e?zr.bind(this)(n,r):t.record_id=s);}}else {let s=await F.bind(this)(),o=t?.reference,l=false;typeof o=="object"&&Object.keys(o).length&&(o?.record_id||o?.unique_id?(r=o.record_id||o.unique_id,r&&typeof this.__private_access_key?.[r]=="string"&&(t.private_key=this.__private_access_key?.[r]||void 0),t.reference=r):o?.user_id&&(l=o.user_id===this.user?.user_id,t.reference=o.user_id)),typeof t?.table=="string"&&(t.table={name:t.table,access_group:0}),t.index&&t.index.hasOwnProperty("range")&&t.index.hasOwnProperty("condition")&&delete t.index.range;let u=c=>({table:{name:g=>je(g,"table.name"),access_group:Qe.bind(this),subscription:g=>f.UserId(g,'User ID in "subscription"')},reference:"string",index:{name:["$updated","$uploaded","$referenced_count","$user_id",g=>pe(g,"index.name")],value:g=>{let d={$updated:"number",$uploaded:"number",$referenced_count:"number",$user_id:f.UserId};if(d.hasOwnProperty(c.index.name)){let h=d[c.index.name];if(typeof h=="function")return h(g);if(h!==typeof g)throw new a(`"index.value" should be type: ${h}.`,{code:"INVALID_PARAMETER"});return g}return typeof g=="string"&&!g?"":ke(g)},condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq"],range:g=>Mt(g,c)},tag:g=>{if(g==null)return g;if(typeof g=="string")return Be(g,"tag");throw new a('"tag" should be type: string.',{code:"INVALID_PARAMETER"})},private_key:"string"});t=f.Params(t||{},u(t),l||s?[]:["table"],{ignoreEmpty:true});}return {query:t,is_reference_fetch:r}}async function $t(t,e){await this.__connection;let n=await Vt.bind(this)(t),r=n.is_reference_fetch,i=await R.bind(this)("get-records",n.query,{fetchOptions:e,auth:!!this.__user,method:this.__user?"post":"get"});r&&i?.reference_private_key&&typeof i.reference_private_key=="string"&&(this.__private_access_key[r]=i.reference_private_key);let s=[];for(let o in i.list)s.push(le.bind(this)(i.list[o]));return i.list=await Promise.all(s),i}function jt(t){let e="",n=[],r=xe.bind(this)(t?.service,t?.owner),i=f.Params(t||{},{record_id:o=>{let l=typeof o=="string"?Ke.bind(this)(r,o):void 0;return l||ee(o,"record_id",{allowEmpty:false})},unique_id:["string",null],readonly:"boolean",table:{name:o=>je(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:Qe.bind(this)},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=>pe(c,'"name" in "index_restrictions"'),value:c=>ke(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=>f.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"){e=o;let l=Ke.bind(this)(r,o);return l||o}if(typeof o!="object")throw new a('"reference" should be type: <string | object>.',{code:"INVALID_PARAMETER"});return f.Params(o,{unique_id:"string",record_id:l=>l==null?l:(e=l,typeof this.__private_access_key?.[l]=="string"&&(t.reference_private_key=this.__private_access_key[l]||void 0),ee(l,"reference.record_id",{allowEmpty:false,onlyAlphanumeric:true}))})}},index:[null,{name:o=>pe(o,"index.name"),value:o=>ke(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=>Be(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(decodeURIComponent(u.split("?")[0]));else if(u.url&&u.size&&u.filename){let g=u.url.split("/").slice(0,3).join("/")+"/"+u.path;l.push(g);}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,access_group:0}),o.files&&(n=o.files);}}),s=t.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:e,files:n}}async function Bt(t){if(await this.__connection,!Array.isArray(t)||!t.length)throw new a('"params" should be a non-empty array.',{code:"INVALID_PARAMETER"});let e=[],n,r,i=null,o={_is_bulk_:t.map((h,_)=>{if(!h||typeof h!="object"||Array.isArray(h))throw new a(`"params[${_}]" should be type: <object>.`,{code:"INVALID_PARAMETER"});let p=jt.bind(this)(h),y=p.config;if(p.is_reference_post&&e.push(p.is_reference_post),typeof y.progress=="function"&&i===null&&(i=y.progress),y.service!==void 0){if(n===void 0)n=y.service;else if(n!==y.service)throw new a('All bulk params should share the same "service" value.',{code:"INVALID_PARAMETER"})}if(y.owner!==void 0){if(r===void 0)r=y.owner;else if(r!==y.owner)throw new a('All bulk params should share the same "owner" value.',{code:"INVALID_PARAMETER"})}return delete y.progress,delete y.service,delete y.owner,y}),service:"",owner:""};n!==void 0&&(o.service=n),r!==void 0&&(o.owner=r);let l={auth:!!this.__user,method:"post"},u={};Object.keys(u).length&&Object.assign(l,{fetchOptions:u});let c=await R.bind(this)("post-record",o,l),g=await Promise.all(c.map(h=>le.bind(this)(h,"called from postRecord"))),d=xe.bind(this)(n,r);for(let h=0;h<c.length;h++){let _=c[h],p=g[h];if(_&&typeof _=="object"&&_.error&&p&&!p.record_id&&(p.error=_.error),typeof _?.reference_private_key=="string")for(let y of e)this.__private_access_key[y]=_.reference_private_key;p?.unique_id&&qt.bind(this)(d,p.unique_id,p.record_id);}return g}async function Qt(t,e,n){if(await this.__connection,!e)throw new a('"config" argument is required.',{code:"INVALID_PARAMETER"});let r=jt.bind(this)(e),i=r.config,s=r.progress,o=r.is_reference_post,l={auth:!!this.__user,method:"post"},u=[],c=N(t);n&&Array.isArray(n)&&n.length&&(u=u.concat(n)),c.files&&Array.isArray(c.files)&&c.files.length&&(u=u.concat(c.files));let g=null;g=Object.assign({data:c.data},i);let d={};typeof s=="function"&&(d.progress=s),Object.keys(d).length&&Object.assign(l,{fetchOptions:d});let h=await R.bind(this)("post-record",g,l);if(V()&&u.length){let y=new FormData;for(let v of u)y.append(v.name,v.file,v.file.name);let w={record_id:h.rec,progress:s};i.hasOwnProperty("service")&&(w.service=i.service);let{bin_endpoints:m}=await Pe.bind(this)(y,w);h.bin?h.bin.push(...m):h.bin=m;}o&&typeof h?.reference_private_key=="string"&&(this.__private_access_key[o]=h.reference_private_key);let _=!!h&&h.data&&typeof h.data=="object"&&!Array.isArray(h.data)&&typeof h.data.__data__=="string"&&h.data.__data__.endsWith("/__data__/__json__.json"),p=await le.bind(this)(h,"called from postRecord",true);if(_&&(p.data=c.data),p.unique_id){let y=xe.bind(this)(i?.service,i?.owner);qt.bind(this)(y,p.unique_id,p.record_id),V()&&(this.__uniqueIdsPersistTimer!==null&&clearTimeout(this.__uniqueIdsPersistTimer),this.__uniqueIdsPersistTimer=setTimeout(()=>{this.__uniqueIdsPersistTimer=null;try{window.sessionStorage.setItem(`${y}:uniqueids`,JSON.stringify(this.__my_unique_ids[y]||{}));}catch{}},500));}return p}async function Kt(t,e){let n=await R.bind(this)("get-table",f.Params(t||{},{table:"string",condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq","!=","ne"]}),Object.assign({auth:!!this.__user},{fetchOptions:e})),r={cnt_rec:"number_of_records",tbl:"table",srvc:"service",grp_:"number_of_records_in_access_group_"};if(Array.isArray(n?.list))for(let i of n.list){for(let s in r){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[r[s]]=i[s],delete i[s]);}typeof i.table=="string"&&(i.table=Q(i.table));}return n}async function Ht(t,e){if(!t?.table)throw new a('"table" is required.',{code:"INVALID_PARAMETER"});let n=f.Params(t||{},{table:"string",index:s=>pe(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:["string","number","boolean"],condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq","!=","ne"]}},["table"]);if(n.hasOwnProperty("order")){if(!n.order?.by)throw new a('"order.by" is required.',{code:"INVALID_PARAMETER"});if(n.order.hasOwnProperty("condition")&&!n.order.hasOwnProperty("value"))throw new a('"value" is required for "condition".',{code:"INVALID_PARAMETER"});if(n.hasOwnProperty("index")&&n.index.substring(n.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 r=await R.bind(this)("get-index",n,Object.assign({auth:!!this.__user},{fetchOptions:e})),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(r?.list)&&(r.list=r.list.map(s=>{let o=s.idx.split("/"),l={table:Q(o[1]),index:Q(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})),r}async function Wt(t,e){let n=await R.bind(this)("get-tag",f.Params(t||{},{table:"string",tag:"string",condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq","!=","ne"]}),Object.assign({auth:!!this.__user},{fetchOptions:e}));return Array.isArray(n?.list)&&(n.list=n.list.map(r=>{let i=r.tag.split("/");return {table:Q(i[1]),tag:Q(i[0]),number_of_records:r.cnt_rec}})),n}async function zt(t,e){let n=await R.bind(this)("get-uniqueid",f.Params(t||{},{unique_id:"string",condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq","!=","ne"]}),Object.assign({auth:!!this.__user},{fetchOptions:e}));if(Array.isArray(n?.list))for(let r in n.list){let i=n.list[r];n.list[r]={unique_id:i.unq,record_id:i.rec};}return n}async function Jt(t,e){await this.__connection;let n=await Vt.bind(this)(t,true),r=n.is_reference_fetch,i=await R.bind(this)("del-records",n.query,{auth:true,fetchOptions:e});return r&&typeof i?.reference_private_key=="string"&&(this.__private_access_key[r]=i.reference_private_key),i?.message||i}function Gt(t){return en.bind(this)({record_id:t.record_id,user_id:t.user_id,execute:"add"})}function Xt(t){return en.bind(this)({record_id:t.record_id,user_id:t.user_id||null,execute:"remove"})}async function Zt(t,e){let n={record_id:t.record_id||void 0,user_id:t.user_id||void 0,execute:"list"};if(!n.record_id&&!n.user_id)throw new a("Either record_id or user_id must be provided.",{code:"INVALID_PARAMETER"});if(n.user_id)if(typeof n.user_id=="string")f.UserId(n.user_id),n.user_id=[n.user_id];else if(Array.isArray(n.user_id))for(let s of n.user_id)f.UserId(s);else throw new a("user_id should be type: <string | string[]>",{code:"INVALID_PARAMETER"});let r=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 R.bind(this)("grant-private-access",n,{auth:true,fetchOptions:e});return i.list=i.list.map(r),i}function Yt(t){let e=t.record_id,n=t.reference_id||void 0;if(!e)throw new a("Record ID is required.",{code:"INVALID_PARAMETER"});if(typeof e!="string")throw new a("Record ID should be type: <string | string[]>",{code:"INVALID_PARAMETER"});if(n&&typeof n!="string")throw new a("Reference ID should be type: <string>",{code:"INVALID_PARAMETER"});if(typeof this.__private_access_key[e]=="string")return Promise.resolve(this.__private_access_key[e]);if(ve[e])return ve[e];let r=R.bind(this)("request-private-access-key",{record_id:e,reference_id:n},{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[e]=s,s}).finally(()=>{delete ve[e];});return ve[e]=r,r}function en(t){t.execute;let n=f.Params(t,{record_id:"string",user_id:r=>{if(!r)throw new a("User ID is required.",{code:"INVALID_PARAMETER"});let i=r;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)f.UserId(s,'User ID in "user_id"');return i},execute:["add","remove"]},["execute","record_id","user_id"]);return n.user_id||(n.user_id=null),R.bind(this)("grant-private-access",n,{auth:true})}var T={},O={},K={},z={},W={},De={},Ue={};function tn(t,e,n){t[e]||(t[e]=[]),t[e].push(n);}async function Ne(t,e,n){let r=[];if(t[e]){for(let i of t[e])if(i){let s=n(i);s instanceof Promise&&(s=await s),r.push(s);}delete t[e];}return r}async function We(t,e){if(!this?.session?.accessToken?.jwtToken)throw new a("Access token is required.",{code:"INVALID_PARAMETER"});let n=await this.__socket;async function r(i,s,o){this.log("answerSdpOffer from",s),await T[s].setRemoteDescription(new RTCSessionDescription(i));let l=await T[s].createAnswer();await T[s].setLocalDescription(l),o.send(JSON.stringify({action:"rtc",uid:s,content:{sdpanswer:l},token:this.session.accessToken.jwtToken}));}T?.[e]?t?(await Ne(Ue,e,i=>r.bind(this)(i,e,n)),await r.bind(this)(t,e,n)):await Ne(Ue,e,i=>r.bind(this)(i,e,n)):t&&tn(Ue,e,t);}async function ze(t,e){if(this.log("receiveIceCandidate",t),T?.[e]&&T[e]?.remoteDescription&&T[e]?.remoteDescription?.type){if(!t)return Ne(De,e,n=>T[e].addIceCandidate(n));await Ne(De,e,n=>T[e].addIceCandidate(n)),await T[e].addIceCandidate(t);}else tn(De,e,t);}async function H(t){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebRTC is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});f.Params(t,{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 e=await this.__socket,{cid:n,close_all:r=false}=t||{};if(!r&&!n)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 Ue[s],delete De[s],O[s]&&Object.values(O[s]).forEach(o=>{o.readyState!=="closed"&&o.close();}),delete O[s],T?.[s]){T[s].connectionState!=="closed"&&(T[s].close(),e.send(JSON.stringify({action:"rtc",uid:s,content:{hungup:this.user.user_id},token:this.session.accessToken.jwtToken})));let o={type:"connectionstatechange",target:T[s],timestamp:new Date().toISOString(),state:T[s].connectionState,iceState:T[s].iceConnectionState,signalingState:T[s].signalingState};W[s]&&W[s](o),this.log("closeRTC",o);}delete W[s],delete z[s],delete K[s],delete T[s];};if(r)for(let s in T)i(s);else i(n);this.log("Cleaning up media stream..."),this.__mediaStream&&(this.__mediaStream.getTracks().forEach(s=>{s.stop();}),this.__mediaStream=null);}async function nn(t){if(t instanceof MediaStream)return t;if(!t.video&&!t.audio){let e=new MediaStream,n=document.createElement("canvas");n.width=1,n.height=1;let i=n.captureStream().getVideoTracks()[0];return e.addTrack(i),e}return window.navigator.mediaDevices.getUserMedia(t)}async function rn(t,e){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebRTC is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});if(typeof e!="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"});t=f.Params(t,{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:["string",()=>"stun:stun.skapi.com:3468"],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:n,ice:r}=t;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 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:[{urls:r}]};T?.[n]||(T[n]=new RTCPeerConnection(s)),t?.media&&(this.__mediaStream=await nn(t.media),this.__mediaStream.getTracks().forEach(o=>{T[n].addTrack(o,this.__mediaStream);})),W[n]=e,O[n]||(O[n]={});for(let o=0;o<t.channels.length;o++){let l=t.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(O[n]).includes(u))throw new a(`Data channel with the protocol "${u}" already exists.`,{code:"INVALID_REQUEST"});let c=T[n].createDataChannel(u,l);O[n][u]=c;}for(let o in O[n]){let l=O[n][o];an.bind(this)(n,l);}return on.bind(this)(n,["onnegotiationneeded"]),await He.bind(this)(n),{hangup:()=>K[n]&&K[n](false),connection:new Promise(o=>{K[n]=(l=>{if(this.log("receiver picked up the call",n),!l)return H.bind(this)({cid:n}),null;T[n].onnegotiationneeded=()=>{this.log("onnegotiationneeded",`sending offer to "${n}".`),He.bind(this)(n),W[n]&&W[n]({type:"negotiationneeded",target:T[n],timestamp:new Date().toISOString(),signalingState:T[n].signalingState,connectionState:T[n].iceConnectionState,gatheringState:T[n].iceGatheringState});},o({target:T[n],channels:O[n],hangup:()=>H.bind(this)({cid:n}),media:this.__mediaStream});}).bind(this);})}}function sn(t){return async(e,n)=>{e=e||{},e=N(e).data;let r=t.sender_cid,i=await this.__socket;if(!z[r])return null;if(typeof n!="function")throw new a("Callback is required.",{code:"INVALID_PARAMETER"});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{ice:s="stun:stun.skapi.com:3468"}=e;return T?.[r]||(T[r]=new RTCPeerConnection({iceServers:[{urls:s}]})),e?.media&&(this.__mediaStream=await nn(e.media),this.__mediaStream.getTracks().forEach(o=>{T[r].addTrack(o,this.__mediaStream);})),delete z[r],W[r]=n,O[r]||(O[r]={}),T[r].ondatachannel=o=>{this.log("ondatachannel",`received data channel "${o.channel.label}".`);let l=o.channel;O[r][l.label]=l,an.bind(this)(r,l);},on.bind(this)(r,["onnegotiationneeded"]),await We.bind(this)(null,r),await ze.bind(this)(null,r),i.send(JSON.stringify({action:"rtc",uid:r,content:{pickup:this.user.user_id},token:this.session.accessToken.jwtToken})),{target:T[r],channels:O[r],hangup:()=>H.bind(this)({cid:r}),media:this.__mediaStream}}}async function He(t){if(!this?.session?.accessToken?.jwtToken)throw new a("Access token is required.",{code:"INVALID_PARAMETER"});this.log("sendOffer",t);let e=await this.__socket,n=await T[t].createOffer();await T[t].setLocalDescription(n);let r=T[t].localDescription;this.log("rtcSdpOffer to",r),e.send(JSON.stringify({action:"rtc",uid:t,content:{sdpoffer:r},token:this.session.accessToken.jwtToken}));}async function Jr(t,e){if(!this?.session?.accessToken?.jwtToken)throw new a("Access token is required.",{code:"INVALID_PARAMETER"});this.log("sendIceCandidate to",e);let n=await this.__socket;if(!t.candidate){this.log("candidate-end","all ice candidates have been sent");return}let r=W[e]||(()=>{}),i=t.candidate;this.log("ice gathering state set to",T[e].iceGatheringState),r({type:"icecandidate",target:T[e],timestamp:new Date().toISOString(),candidate:t.candidate.candidate,sdpMid:t.candidate.sdpMid,sdpMLineIndex:t.candidate.sdpMLineIndex,usernameFragment:t.candidate.usernameFragment,protocol:t.candidate.protocol,gatheringState:T[e].iceGatheringState,connectionState:T[e].iceConnectionState}),n.send(JSON.stringify({action:"rtc",uid:e,content:{candidate:i},token:this.session.accessToken.jwtToken}));}function on(t,e){let n=new Set(e),r=W[t]||(o=>{}),i=T[t],s={ontrack:o=>{r({type:"track",target:i,timeStamp:o.timeStamp,streams:o.streams,track:o.track});},onicecandidate:o=>{Jr.bind(this)(o,t),o.candidate?r({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}):r({type:"icecandidateend",target:i,timestamp:new Date().toISOString()});},onicecandidateerror:o=>{r({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:()=>{r({type:"iceconnectionstatechange",target:i,timestamp:new Date().toISOString(),state:i.iceConnectionState,gatheringState:i.iceGatheringState,signalingState:i.signalingState});},onicegatheringstatechange:()=>{r({type:"icegatheringstatechange",target:i,timestamp:new Date().toISOString(),state:i.iceGatheringState,connectionState:i.iceConnectionState,signalingState:i.signalingState});},onsignalingstatechange:()=>{r({type:"signalingstatechange",target:i,timestamp:new Date().toISOString(),state:i.signalingState,connectionState:i.iceConnectionState,gatheringState:i.iceGatheringState});},onnegotiationneeded:()=>{He.bind(this)(t),r({type:"negotiationneeded",target:i,timestamp:new Date().toISOString(),signalingState:i.signalingState,connectionState:i.iceConnectionState,gatheringState:i.iceGatheringState});},onconnectionstatechange:()=>{r({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")&&H.bind(this)({cid:t});}};for(let[o,l]of Object.entries(s))n.has(o)||(i[o]=l);}function an(t,e,n){let r=new Set(n),i=W[t]||(o=>{}),s={onmessage:o=>{let l={type:o.type,target:e,timeStamp:o.timeStamp,data:o.data,lastEventId:o.lastEventId,origin:o.origin,readyState:e.readyState,bufferedAmount:e.bufferedAmount};this.log(`${e.label}: message`,o.data),i(l);},onerror:o=>{let l={type:o.type,target:e,timeStamp:o.timeStamp,error:o.error.message,errorCode:o.error.errorDetail,readyState:e.readyState,label:e.label};this.log(`${e.label}: error`,o.error.message),i(l);},onclose:o=>{let l={type:o.type,target:e,timeStamp:o.timeStamp,readyState:e.readyState,label:e.label,id:e.id};this.log(`${e.label}: closed`,null),i(l),O[t]&&(delete O[t][e.label],Object.keys(O[t]).length===0&&H.bind(this)({cid:t}));},onbufferedamountlow:o=>{let l={target:e,bufferedAmount:e.bufferedAmount,bufferedAmountLowThreshold:e.bufferedAmountLowThreshold,type:o.type,timeStamp:o.timeStamp};this.log(`${e.label}: bufferedamountlow`,e.bufferedAmount),i(l);},onopen:o=>{this.log("dataChannel",`data channel: "${e.label}" is open and ready to send messages.`);let l={type:o.type,target:e,timeStamp:o.timeStamp,readyState:e.readyState,label:e.label,id:e.id,ordered:e.ordered,maxRetransmits:e.maxRetransmits,protocol:e.protocol};i(l);}};for(let[o,l]of Object.entries(s))r.has(o)||(e[o]=l);}var ne,te=null,_e=true,ue=0;async function Gr(){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 t=await this.record_endpoint;return new WebSocket(t.websocket_private+"?token="+this.session.accessToken.jwtToken)}var Je=null;async function cn(){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebSocket is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});_e=true;let t=this.__socket?await this.__socket:this.__socket;H.bind(this)({close_all:true}),ne&&Ge.bind(this)({group:null}),ue=0,te&&(te.terminate(),te=null);try{t&&t.close();}catch{}return window.removeEventListener("visibilitychange",Je),this.__socket=null,null}async function Ce(t,e=50,n){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebSocket is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});if(typeof t!="function")throw new a("Callback must be a function.",{code:"INVALID_REQUEST"});if(n==="reconnect"){if(this.__socket instanceof Promise){let r=await this.__socket;if(r.readyState!==WebSocket.CLOSED&&r.readyState!==WebSocket.CLOSING)return this.__socket}}else if(_e&&(Je=()=>{!document.hidden&&!_e&&Ce.bind(this)(t,0,"reconnect");},this.__socket instanceof Promise))return this.__socket;te&&(te.terminate(),te=null),this.__socket=new Promise(async r=>{await ae.bind(this)(),setTimeout(async()=>{let i=await Gr.bind(this)();i.onopen=()=>{_e=false,ue=0,n!=="reconnect"&&window.addEventListener("visibilitychange",Je),this.log("realtime onopen","Connected to WebSocket server."),t({type:"success",message:"Connected to WebSocket server."}),ne&&i.send(JSON.stringify({action:"joinRoom",rid:ne,token:this.session.accessToken.jwtToken}));let s=`
207
207
  let interval = 15000; // Set interval time 15 seconds
208
208
 
209
209
  function runInterval() {
@@ -212,9 +212,9 @@ var zn=Object.defineProperty;var Jn=Object.getOwnPropertyDescriptor;var se=(t=>t
212
212
  }
213
213
 
214
214
  runInterval(); // Start interval
215
- `,o=new Blob([i],{type:"application/javascript"});te=new Worker(URL.createObjectURL(o)),te.onmessage=u=>{s.readyState===1&&s.send(JSON.stringify({action:"keepAlive"}));},r(s);},s.onmessage=async i=>{let o="";try{o=JSON.parse(decodeURI(i.data)),this.log("socket onmessage",o);}catch{return}let u;switch(true){case !!o?.["#message"]:u="message";break;case !!o?.["#private"]:u="private";break;case !!o?.["#notice"]:u="notice";break;case !!o?.["#rtc"]:u="rtc";break;case !!o?.["#error"]:u="error";break}if(!u)return;let l={type:u,message:o?.["#rtc"]||o?.["#message"]||o?.["#private"]||o?.["#notice"]||o?.["#error"]||null,sender:o?.["#user_id"]||null,sender_cid:o?.["#scid"]?"cid:"+o["#scid"]:null,sender_rid:o?.["#srid"]||null,code:o?.["#code"]||null};if(u==="notice")t(l);else if(u==="rtc"){if(l.sender!==this.user.user_id){let c=l.message;if(c.hungup){K[l.sender_cid]&&(K[l.sender_cid](false),delete K[l.sender_cid]),z[l.sender_cid]&&delete z[l.sender_cid],T?.[l.sender_cid]&&H.bind(this)({cid:l.sender_cid}),l.type="rtc:closed",t(l);return}if(c.candidate&&He.bind(this)(c.candidate,l.sender_cid),c.sdpoffer&&(Ke.bind(this)(c.sdpoffer,l.sender_cid),z[l.sender_cid]||(z[l.sender_cid]=l.sender_cid,delete l.message,l.connectRTC=tn.bind(this)(l),l.type="rtc:incoming",l.hangup=(()=>{T[l.sender_cid]?H.bind(this)({cid:l.sender_cid}):z[l.sender_cid]&&(delete z[l.sender_cid],s.send(JSON.stringify({action:"rtc",uid:l.sender_cid,content:{hungup:this.user.user_id},token:this.session.accessToken.jwtToken})));}).bind(this),t(l))),c.pickup&&K[l.sender_cid]&&(K[l.sender_cid](true),delete K[l.sender_cid]),c.sdpanswer&&T[l.sender_cid])if(T[l.sender_cid].signalingState==="have-local-offer")await T[l.sender_cid].setRemoteDescription(new RTCSessionDescription(c.sdpanswer));else throw new a("Invalid signaling state.",{code:"INVALID_REQUEST"})}}else t(l);},s.onclose=()=>{_e?(this.log("realtime onclose","WebSocket connection closed."),t({type:"close",message:"WebSocket connection closed."})):(this.log("realtime onclose","WebSocket unexpected close."),t({type:"error",message:"Skapi: WebSocket unexpected close."}),ue++,ue<3?(this.log("realtime onclose","Reconnecting to WebSocket server..."+ue),t({type:"reconnect",message:"Reconnecting to WebSocket server..."+ue}),Ne.bind(this)(t,3e3,"reconnect")):(this.log("realtime onclose","Max reconnection attempts reached."),t({type:"error",message:"Skapi: Max reconnection attempts reached."})));},s.onerror=()=>{this.log("realtime onerror","WebSocket connection error."),t({type:"error",message:"Skapi: WebSocket connection error."});};},e);});}async function on(t,e,n){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebSocket is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});let r=this.__socket?await this.__socket:this.__socket;if(!r)throw new a("No realtime connection. Execute connectRealtime() before this method.",{code:"INVALID_REQUEST"});if(!e)throw new a("No recipient.",{code:"INVALID_REQUEST"});await ae.bind(this)(),t=N(t).data;let s="";if(n&&(n=f.Params(n,{config:{always:"boolean"},title:"string",body:"string"},["title","body"]),s=JSON.stringify({title:n.title,body:n.body}),new Blob([s]).size>3072))throw new a("Notification size exceeds 3kb.",{code:"INVALID_PARAMETER"});if(r.readyState===1){try{f.UserId(e),r.send(JSON.stringify({action:"sendMessage",uid:e,content:t,notification:s,notificationConfig:n?.config||{},token:`IdT:${this.service}:${this.owner}:`+(this.bearerToken||this.session?.idToken?.jwtToken||"null")}));}catch(i){if(this.log("postRealtime:err",{err:i}),ne!==e)throw new a(`User has not joined to the recipient group. Run joinRealtime({ group: "${e}" })`,{code:"INVALID_REQUEST"});r.send(JSON.stringify({action:"broadcast",rid:e,content:t,notification:s,notificationConfig:n?.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 ze(t){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebSocket is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});let e=this.__socket?await this.__socket:this.__socket;if(!e)throw new a("No realtime connection. Execute connectRealtime() before this method.",{code:"INVALID_REQUEST"});await ae.bind(this)(),t=N(t,{nullIfEmpty:true}).data;let{group:n=null}=t;if(!n&&!ne)return {type:"success",message:"Left realtime message group."};if(n!==null&&typeof n!="string")throw new a('"group" must be a string | null.',{code:"INVALID_PARAMETER"});return e.send(JSON.stringify({action:"joinRoom",rid:n,token:this.session.accessToken.jwtToken})),ne=n,{type:"success",message:n?`Joined realtime message group: "${n}".`:"Left realtime message group."}}async function an(t,e){t=f.Params(t,{user_id:r=>f.UserId(r,'User ID in "user_id"'),group:["string",()=>{if(!ne)throw new a('No group has been joined. Otherwise "group" is required.',{code:"INVALID_REQUEST"});return ne}]});let n=await E.bind(this)("get-ws-group",t,{fetchOptions:e,auth:true,method:"post"});return n.list=n.list.map(r=>({user_id:r.uid.split("#")[1],cid:"cid:"+r.cid})),n}async function cn(t,e){if(await this.__connection,t||(t={searchFor:"group",value:" ",condition:">"}),t=f.Params(t,{searchFor:["group","number_of_users",()=>"group"],value:["string","number",()=>t?.searchFor&&t?.searchFor==="number_of_users"?0:" "],condition:[">",">=","=","<","<=","!=","gt","gte","eq","lt","lte","ne"],range:["string","number"]}),t.condition||(t.value===" "||!t.value?t.condition=">":t.condition="="),t.range&&t.condition&&delete t.condition,t.searchFor==="number_of_users"&&typeof t.value!="number")throw new a('"value" must be a number.',{code:"INVALID_PARAMETER"});if(t.searchFor==="group"&&typeof t.value!="string")throw new a('"value" must be a string.',{code:"INVALID_PARAMETER"});if(t.hasOwnProperty("range")&&typeof t.range!=typeof t.value)throw new a(`"range" must be a ${typeof t.value}.`,{code:"INVALID_PARAMETER"});let n=await E.bind(this)("get-ws-group",t,{fetchOptions:e,auth:true,method:"post"});return n.list=n.list.map(r=>({group:r.rid.split("#")[1],number_of_users:r.cnt})),n}var Wr=typeof FormData<"u",zr=typeof HTMLFormElement<"u",Jr=typeof SubmitEvent<"u",J={},be={},G={};function Je(t){return Object.freeze({id:t,status:"stopped"})}function un(t){return !!t&&typeof t=="object"&&t.status==="stopped"}function dn({id:t,auth:e,service:n,owner:r,latency:s=1e3,queue:i,onResponse:o,onError:u}){if(typeof s!="number")throw new a('"latency" should be a number.',{code:"INVALID_PARAMETER"});if(s<0)throw new a('"latency" should be a non-negative number.',{code:"INVALID_PARAMETER"});i&&!J?.[i]&&(J[i]=new ln__default.default({breakWhenError:false,batchSize:1}));let l={stop:null,aborted:false,queue:i};G[t]=l;let c=()=>{G[t]===l&&delete G[t];},g=()=>new Promise((h,_)=>{let p=false;if(l.aborted){c(),h(Je(t));return}let m=setInterval(async()=>{try{let I=await E.bind(this)("csr-poll",{id:t,service:n,owner:r},{auth:e});if(I.status==="running"||I.status==="pending"||p)return;p=!0,o&&o(I),clearInterval(m),c(),h(I);}catch(I){if(p)return;p=true,u&&u(I),clearInterval(m),c(),_(I);}},s);l.stop=()=>{p||(p=true,clearInterval(m),c(),h(Je(t)));};}),d=()=>{let h=G[t];h&&(h.stop?h.stop():(h.aborted=true,delete G[t]));};if(i){let h=new Promise((_,p)=>{let m=false,I=J[i].add([async()=>{try{let y=await g();return m||(m=!0,_(y)),y}catch(y){throw m||(m=true,p(y)),y}}])[0];be[t]=I,l.stop=()=>{if(!m){l.aborted=true;try{J[i]&&J[i].remove(be[t]);}catch{}delete be[t],c(),m=true,_(Je(t));}};});return Object.assign(h,{stop:d})}else return Object.assign(g(),{stop:d})}function gn(t){let e=0,n=[];if(t?.id){if(t.url&&t.method){let r=t.service||this.service;n.push(`[${t.method.toUpperCase()}]${t.url.toLowerCase()}#${r}:${t.id}`);}n.push(t.id);}else if(t?.queue)for(let r in G)G[r]?.queue===t.queue&&n.push(r);else for(let r in G)n.push(r);for(let r of n){let s=G[r];s&&(s.stop?s.stop():(s.aborted=true,delete G[r]),e+=1);}return e}function fn(t,e){if(!t.queue)throw new a('"queue" is required.',{code:"INVALID_PARAMETER"});let n={service:t.service||this.service,owner:t.owner||this.owner,queue:t.queue+":"};return E.bind(this)("csr-poll",n,{auth:true})}async function hn(t){let e=false;if(typeof t.poll=="number"&&t.poll<0)throw new a('"poll" should be a non-negative number.',{code:"INVALID_PARAMETER"});let n=t?.onResponse,r=t?.onError,s=typeof t.poll=="number"?t.poll:t.poll?1e3:0;delete t.poll,s&&!t.queue&&(t.queue=(this.__user?.user_id||"anonymous")+"-"+ie());let i=l=>{for(let c in l)if(typeof l[c]=="string"&&l[c].includes("$CLIENT_SECRET")){e=true;break}};if(t=f.Params(t,{url:l=>{if(!l||typeof l!="string")throw new a('"url" should be type: <string>.',{code:"INVALID_PARAMETER"});return f.Url(l),l.includes("$CLIENT_SECRET")&&(e=true),l},clientSecretName:"string",method:l=>{if(l&&typeof l!="string")throw new a('"method" should be either "GET" or "POST" or "DELETE" or "PUT".',{code:"INVALID_PARAMETER"});let c=l.toLowerCase();if(c!=="get"&&c!=="post"&&c!=="delete"&&c!=="put")throw new a('"method" should be either "GET" or "POST" or "DELETE" or "PUT".',{code:"INVALID_PARAMETER"});return c},headers:l=>{if(l&&typeof l!="object")throw new a('"headers" should be type: <object>.',{code:"INVALID_PARAMETER"});return i(l),l},data:l=>{if(l&&typeof l!="object")throw new a('"data" should be type: <object>.',{code:"INVALID_PARAMETER"});return i(l),l},params:l=>{if(l&&typeof l!="object")throw new a('"params" should be type: <object>.',{code:"INVALID_PARAMETER"});return i(l),l},expires:"number",queue:"string"},["clientSecretName","method","url"]),!e)throw new a(`At least one parameter value should include "$CLIENT_SECRET" in ${t.method.toLowerCase()==="post"?'"data"':'"params"'} or "headers".`,{code:"INVALID_PARAMETER"});await this.__connection;let o=!!this.__user,u=()=>E.bind(this)("csr",t,{auth:o,tokenHeaders:{accessToken:!!o}}).then(l=>{if(l.status==="running"||l.status==="pending"){let c=`[${t.method.toUpperCase()}]${t.url.toLowerCase()}`,g=t.service||this.service,d=t.owner||this.owner,h=`${c}#${g}:${l.id}`;Object.assign(l,{poll:_=>dn.call(this,{id:h,auth:o,service:g,owner:d,latency:_?.latency||1e3,queue:t?.queue,onResponse:n,onError:r})});}return n?n(l):l}).catch(l=>{if(r)return r(l);throw l});if(t?.queue){let l="base:"+t.queue;return J?.[l]||(J[l]=new ln__default.default({breakWhenError:false,batchSize:1})),new Promise((c,g)=>{J[l].add([async()=>{try{let d=await u();if(s>0){let h=d.poll({latency:s});return c(h),h}return c(d),d}catch(d){throw g(d),d}}]);})}else return u()}async function pn(t,e){await this.__connection;let n=t.service||this.service,r=t.owner||this.owner;t=f.Params(t,{url:"string",method:["GET","POST","DELETE","PUT"],queue:"string",status:["pending","running","resolved","failed"]},["url","method"]);let s=!!this.__user,i=`[${t.method.toUpperCase()}]${t.url.toLowerCase()}#${n}:`,o={id:i,queue:t?.queue,status:t?.status,service:n,owner:r};Object.keys(o).forEach(l=>{o[l]||delete o[l];}),o.queue&&delete o.id;let u=await E.bind(this)("csr-poll",o,{auth:s,fetchOptions:e});return u.list=u.list.map(l=>{let c={id:l.id,status_code:l.rslv?.status_code||null,response_body:l.rslv?.body||l.rslv?.truncated||null,error:l?.err,created:l?.stmp,updated:l?.utmp,request_body:l?.reqbdy,expires:l?.expt,status:l.stts,queue_name:l?.qid};for(let g in c)c[g]===void 0&&delete c[g];return (c.status==="running"||c.status==="pending")&&(c.poll=g=>dn.call(this,{id:i+c.id,auth:s,service:n,owner:r,latency:g?.latency||1e3,queue:l?.qid,onResponse:g?.onResponse,onError:g?.onError})),c}),u}async function mn(t){await this.__connection,t=f.Params(t,{url:"string",method:["GET","POST","DELETE","PUT"],id:"string",queue:"string"},["url","method","id"]);let e=t?.service||this.service,n=t?.owner||this.owner,r=!!this.__user,s=`[${t.method.toUpperCase()}]${t.url.toLowerCase()}#${e}`,i=t.id,o=`${s}:${i}`,u=t?.queue;return u&&J?.[u]&&(J[u].remove(be[o]),delete be[o]),E.bind(this)("csr-cancel",{id:o,service:e,owner:n},{auth:r})}async function _n(t){await this.__connection;let e={name:"string",email:n=>(f.Email(n),n),subject:"string",message:"string"};return t=f.Params(t,e,["name","email","subject","message"]),await E.bind(this)("send-inquiry",t),"SUCCESS: Inquiry has been sent."}async function bn(t,e){if(await this.__connection,Wr&&t instanceof FormData||zr&&t instanceof HTMLFormElement||Jr&&t instanceof SubmitEvent){if(!e)throw new a("Url string as a second argument is required when form is passed.",{code:"INVALID_PARAMETER"});let r=N(t);t={url:e,data:r.data,sync:true};}let n={url:r=>f.Url(r),data:r=>r,sync:["boolean",()=>true]};if(Array.isArray(t))for(let r of t)r=f.Params(r,n);else t=f.Params(t,n);return E.bind(this)("post-secure",t,{auth:true})}async function yn(t,e){await this.__connection;let{auth:n=false,method:r="POST",bypassAwaitConnection:s=false,responseType:i,contentType:o,tokenHeaders:u,progress:l}=e||{};if(e=Object.assign({auth:n,method:r,bypassAwaitConnection:s,responseType:i,contentType:o,tokenHeaders:u},{fetchOptions:{progress:l}}),typeof t!="object"&&(o==="application/json"||o===void 0))throw new a('"data" should be type: <object>.',{code:"INVALID_PARAMETER"});return E.bind(this)("mock",t,e)}async function wn(t,e){await this.__connection,t=f.Params(t||{},{access_group:r=>{if(r==="authorized"&&(r=1),r==="public"&&(r=0),typeof r!="number")throw new a('"access_group" should be type number.',{code:"INVALID_PARAMETER"});if(r<0)throw new a('"access_group" should be zero or a positive number.',{code:"INVALID_PARAMETER"});if(r>this.__user.access_group)throw new a("User has no access.",{code:"INVALID_REQUEST"});return r}});let n=await E.bind(this)("get-feed",t,{auth:true,fetchOptions:e});for(let r in n.list)n.list[r]=await le.bind(this)(n.list[r]);return n}function ye(t){if(t===this.__user.user_id)throw new a(`"user_id" cannot be the user's own ID.`,{code:"INVALID_PARAMETER"});return f.UserId(t,'"user_id"')}async function En(t,e){if(t=N(t,{ignoreEmpty:true}).data,t=f.Params(t,{subscriber:r=>f.UserId(r,'User ID in "subscriber"'),subscription:ye.bind(this),blocked:"boolean"}),!t.subscriber&&!t.subscription)throw new a('At least either "subscriber" or "subscription" should have a value.',{code:"INVALID_PARAMETER"});let n=await E.bind(this)("get-subscription",t,Object.assign({auth:true},{fetchOptions:e}));return n.list=n.list.map((r=>{let s={};if(r.sub){let i=r.sub.split("#");s.subscriber=i[2],s.subscription=i[0];}else s.subscriber=r.subscriber,s.subscription=r.subscription;return s.timestamp=r?.timestamp||r.stmp,s.blocked=r?.blocked||r.grp.substring(0,1)==="N",Object.assign(s,r.opt),s})),n}async function Rn(t){await this.__connection,t=f.Params(t,{user_id:ye.bind(this),get_feed:["boolean",()=>false],get_notified:["boolean",()=>false],get_email:r=>{if(r&&!this.__user.email||!this.__user.email_verified)throw new a("User has no verified email address.",{code:"INVALID_REQUEST"});return !!r}},["user_id"]);let e=await E.bind(this)("subscription",{subscribe:t.user_id,option:{get_feed:t.get_feed,get_notified:t.get_notified,get_email:t.get_email||false}},{auth:true}),n={};if(e.sub){let r=e.sub.split("#");n.subscriber=r[2],n.subscription=r[0];}else n.subscriber=e.subscriber,n.subscription=e.subscription;return n.timestamp=e?.timestamp||e.stmp,n.blocked=e?.blocked||e.grp.substring(0,1)==="N",Object.assign(n,e.opt),n}async function An(t){await this.__connection;let{user_id:e}=f.Params(t,{user_id:ye.bind(this)},["user_id"]);return await E.bind(this)("subscription",{unsubscribe:e},{auth:true})}async function In(t){await this.__connection;let{user_id:e}=f.Params(t,{user_id:ye.bind(this)},["user_id"]);return await E.bind(this)("subscription",{block:e},{auth:true})}async function Tn(t){await this.__connection;let{user_id:e}=f.Params(t,{user_id:ye.bind(this)},["user_id"]);return await E.bind(this)("subscription",{unblock:e},{auth:true})}async function Pn(t,e){await this.__connection;let n=await F.bind(this)();t=f.Params(t,{user_id:o=>{if(o!==this.__user.user_id&&!n)throw new a("No access.",{code:"INVALID_REQUEST"});return o},group:o=>{if(o==="public"&&(o=0),o==="authorized"&&(o=1),typeof o!="number")throw new a('"group" should be type number | "public" | "authorized".',{code:"INVALID_PARAMETER"});return o}});let r=await E.bind(this)("get-newsletter-subscription",t,{auth:true,fetchOptions:e||null}),s=r?.list||r,i=[];Array.isArray(s)||(s=[]);for(let o of s){let u=o.subt.split("#"),l=true;u[0].charAt(0)==="@"&&(l=false,u[0]=u[0].substring(1));let c=parseInt(u[0]);i.push({timestamp:o.stmp,group:c,subscribed_email:u[1],active:l});}return r?.list?(r.list=i,r):i}async function Sn(t){await this.__connection;let e=f.Params(t||{},{email:n=>Array.isArray(n)&&n.length>0?n.length===1?f.Email(n[0]):n.map(r=>f.Email(r)):f.Email(n),group:["number","public","authorized","admin",n=>{if(typeof n!="string"||n.length>20||!/^[a-zA-Z0-9]+$/.test(n))throw new a('"group" should be an alphanumeric string without spaces and less than 20 characters.',{code:"INVALID_PARAMETER"});return n}],redirect:n=>f.Url(n)},this.__user?["group"]:["email","group"]);return E.bind(this)(`subscribe-${this.__user?"":"public-"}newsletter`,e,{auth:!!this.__user})}async function kn(t){await this.__connection,t=f.Params(t,{group:["number","public","authorized","admin"]},["group"]);let e=Object.assign({action:"unsubscribe"},t);return E.bind(this)("subscribe-newsletter",e,{auth:true})}async function vn(t,e){let n=await F.bind(this)(),r={message_id:"string",timestamp:"number",read:"number",complaint:"number",subject:"string",bounced:"number"};t||(e=Object.assign({ascending:false},e||{})),t=N(t).data,t=t||{searchFor:"timestamp",value:Date.now(),condition:"<",group:"public"},t=f.Params(t,{searchFor:["message_id","timestamp","subject","complaint","read","bounced"],value:l=>{if(typeof l!==r[t.searchFor])throw new a(`"value" type does not match the type of "${t.searchFor}" index.`,{code:"INVALID_PARAMETER"});if(typeof l=="string"&&!l)throw new a('"value" should not be empty string.',{code:"INVALID_PARAMETER"});return l},range:l=>{if(!t.hasOwnProperty("value")||typeof l!=typeof t.value)throw new a('"range" should match type of "value".',{code:"INVALID_PARAMETER"});return l},condition:[">",">=","=","<","<=","gt","gte","eq","lt","lte",()=>"="],group:l=>{if(l==="public")return 0;if(!this.session)throw new a("User should be logged in.",{code:"INVALID_REQUEST"});if(l==="authorized")return 1;if(typeof l=="number"){if(!n&&l>parseInt(this.user?.access_group||this.session?.idToken?.payload?.access_group))throw new a("User has no access.",{code:"INVALID_REQUEST"});return l}throw new a('"group" should be type: number | "public" | "authorized".',{code:"INVALID_PARAMETER"})}},["searchFor","value","group"]);let s=t.group===0?"get-public-newsletters":"get-newsletters",i=await E.bind(this)(s,t,Object.assign({method:"get",auth:s==="get-public-newsletters"?!!this.__user:true},{fetchOptions:e})),o={message_id:"mid",timestamp:"stmp",complaint:"cmpl",read:"read",subject:"subj",bounced:"bnce",url:"url",delivered:"delv"},u={message_id:"",timestamp:0,complaint:0,read:0,subject:"",bounced:"",url:"",delivered:0};return i.list=i.list.map(l=>{let c={};for(let g in o)c[g]=l[o[g]]||u[g];return c.bounced=String(c.bounced),c}),i}async function xn(t){let e=f.Params(t,{user_id:r=>f.UserId(r,'"user_id"')},["user_id"]);if(e?.service&&e?.owner?e={service:e?.service,owner:e?.owner,block:e.user_id}:e={block:e.user_id},!await F.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 E.bind(this)("block-account",e,{auth:true})}async function Dn(t){let e=f.Params(t,{user_id:r=>f.UserId(r,'"user_id"')},["user_id"]);if(e?.service&&e?.owner?e={service:e?.service,owner:e?.owner,unblock:e.user_id}:e={unblock:e.user_id},!await F.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 E.bind(this)("block-account",e,{auth:true})}async function Un(t){let e=f.Params(t,{user_id:r=>f.UserId(r,'"user_id"')},["user_id"]);if(e?.service&&e?.owner?e={service:e?.service,owner:e?.owner,delete:e.user_id}:e={delete:e.user_id},!await F.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 E.bind(this)("remove-account",e,{auth:true})}async function Nn(t,e){let n={email:i=>f.Email(i),password:i=>f.Password(i),name:"string",username:"string",gender:"string",address:i=>{if(!i)return "";if(typeof i=="string")return i;if(typeof i=="object")return JSON.stringify(i)},birthdate:i=>f.Birthdate(i),phone_number:i=>f.PhoneNumber(i),picture:i=>{if(i)return f.Url(i)},profile:i=>{if(i)return f.Url(i)},website:i=>{if(i)return f.Url(i)},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:i=>{try{typeof i=="string"&&(i=i==="admin"?99:parseInt(i));}catch{throw new a('"access_group" is invalid. Should be type <number>.',{code:"INVALID_PARAMETER"})}if(typeof i!="number"||i<1||i>100)throw new a('"access_group" is invalid. Should be type <number> of range 1~99',{code:"INVALID_PARAMETER"});return i}},r=f.Params(t,n,["email"]);if(e=f.Params(e,{confirmation_url:i=>{let o=i;if(typeof i=="string")o=f.Url(i);else throw new a('"options.confirmation_url" should be type: <string>.',{code:"INVALID_PARAMETER"});if(o&&!r.email)throw new a('"email" is required for signup confirmation.',{code:"INVALID_PARAMETER"});return o},email_subscription:i=>{if(typeof i!="boolean")throw new a('"options.email_subscription" should be type: <boolean>.',{code:"INVALID_PARAMETER"});if(!e?.confirmation_url)throw new a('"options.confirmation_url" is required for email subscription.',{code:"INVALID_PARAMETER"});return i},template:i=>{if(typeof i!="object"||!i.url||!i.subject)throw new a('"options.template" should be type: <object> with "url" and "subject".',{code:"INVALID_PARAMETER"});return {url:f.Url(i.url),subject:i.subject}}}),r.signup_confirmation=e?.confirmation_url||true,r.email_subscription=e?.email_subscription||false,r.template=e?.template||{},!await F.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 E.bind(this)("admin-signup",r,{auth:true})}async function Cn(t){let e={email:i=>f.Email(i),password:i=>f.Password(i),openid_id:"string",name:"string",username:"string",gender:"string",address:i=>{if(!i)return "";if(typeof i=="string")return i;if(typeof i=="object")return JSON.stringify(i)},birthdate:i=>f.Birthdate(i),phone_number:i=>f.PhoneNumber(i),picture:i=>i?f.Url(i):"",profile:i=>i?f.Url(i):"",website:i=>i?f.Url(i):"",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:i=>{try{typeof i=="string"&&(i=parseInt(i));}catch{throw new a('"access_group" is invalid. Should be type <number>.',{code:"INVALID_PARAMETER"})}if(typeof i!="number"||i<1||i>100)throw new a('"access_group" is invalid. Should be type <number> of range 1~99',{code:"INVALID_PARAMETER"});return i}},n=["email","password"],r=f.Params(t,e,n);if(!await F.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 E.bind(this)("admin-signup",r,{auth:true})}async function Ln(t){if(t=f.Params(t,{user_id:n=>f.UserId(n,'"user_id"'),access_group:n=>{try{typeof n=="string"&&(n=parseInt(n));}catch{throw new a('"access_group" is invalid. Should be type <number>.',{code:"INVALID_PARAMETER"})}if(typeof n=="number"&&n>0&&n<100)return n;throw new a('"access_group" is invalid. Should be type <number> of range 1~99',{code:"INVALID_PARAMETER"})}},["user_id","access_group"]),!await F.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 E.bind(this)("grant-access",t,{auth:true})}async function On(t,e){if(t=f.Params(t,{email:"string"}),!await F.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 r=await E.bind(this)("invitation-list",Object.assign({mode:"search"},t),{fetchOptions:e,auth:true});return r.list=r.list.map(s=>de(s.user)),r}async function Mn(t){if(t=f.Params(t,{email:n=>f.Email(n)},["email"]),!await F.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 E.bind(this)("invitation-list",Object.assign({mode:"cancel"},t),{auth:true})}async function Fn(t){if(t=f.Params(t,{email:n=>f.Email(n)},["email"]),!await F.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 E.bind(this)("invitation-list",Object.assign({mode:"resend"},t),{auth:true})}async function qn(t){let e=f.Params(t,{user_id:o=>f.UserId(o,'"user_id"'),email:o=>f.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?f.Birthdate(o):"",phone_number:o=>o?f.PhoneNumber(o):"",email_public:"boolean",phone_number_public:"boolean",address_public:"boolean",gender_public:"boolean",birthdate_public:"boolean",misc:"string",picture:o=>o?f.Url(o):"",profile:o=>o?f.Url(o):"",nickname:"string",website:o=>o?f.Url(o):""},["user_id"]),n=e.service,r=e.owner;if(delete e.service,delete e.owner,Object.keys(e).filter(o=>o!=="user_id"&&e[o]!==void 0).length===0)throw new a("At least one attribute to update is required.",{code:"INVALID_PARAMETER"});if(!await F.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"})}e.email&&(e.preferred_username=(n||this.service)+"-"+M.hash(e.email));let i={attributes:e};return n&&r&&(i.service=n,i.owner=r),await E.bind(this)("admin-edit-profile",i,{auth:true})}async function Vn(t){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,!t.endpoint)throw new a("Missing parameter: endpoint",{code:"INVALID_PARAMETER"});if(!t.keys||!t.keys.p256dh||!t.keys.auth)throw new a("Missing parameter: keys.p256dh or keys.auth",{code:"INVALID_PARAMETER"});return await E.bind(this)("store-subscription",{endpoint:t.endpoint,keys:t.keys},{auth:true}),"SUCCESS: Subscribed to receive notifications."}async function $n(t){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,!t.endpoint)throw new a("Missing parameter: endpoint",{code:"INVALID_PARAMETER"});if(!t.keys||!t.keys.p256dh||!t.keys.auth)throw new a("Missing parameter: keys.p256dh or keys.auth",{code:"INVALID_PARAMETER"});return await E.bind(this)("delete-subscription",{endpoint:t.endpoint,keys:t.keys},{auth:true}),"SUCCESS: Unsubscribed from notifications."}async function jn(){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 E.bind(this)("get-vapid-public-key",null,{auth:true})}}async function Bn(t,e){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:n,body:r}=N(t||{},{nullIfEmpty:true}).data;if(!n)throw new a("Missing parameter: message title",{code:"INVALID_PARAMETER"});if(!r)throw new a("Missing parameter: message body",{code:"INVALID_PARAMETER"});let s={title:n,body:r};return e?(typeof e=="string"&&(e=[e]),s.user_ids=e):s.user_ids="all_users",await E.bind(this)("push-notification",s,{auth:true}),"SUCCESS: Notification sent."}async function Qn(t){await this.__connection,t=f.Params(t,{spell:"string",name:"string",magic:n=>n},["spell","name"]);await E.bind(this)("castspell",t);return `The spell "${t.spell}" has been cast.`}async function Kn(t){return await this.__connection,t=f.Params(t||{},{search:["spell","name",()=>"spell"],value:"string"}),await E.bind(this)("getspell",t)}async function Hn(t){await this.__connection,t=f.Params(t,{message:"string",name:"string"},["message","name"]);let e=await E.bind(this)("dopamine",t,{auth:true}),n=e?.previous_message?.message,r=e?.previous_message?.name;if(V())n&&r&&window.alert(`${r} said: ${n}`),window.location.href=e.video;else return n&&r?`${r} said: ${n}
215
+ `,o=new Blob([s],{type:"application/javascript"});te=new Worker(URL.createObjectURL(o)),te.onmessage=l=>{i.readyState===1&&i.send(JSON.stringify({action:"keepAlive"}));},r(i);},i.onmessage=async s=>{let o="";try{o=JSON.parse(decodeURI(s.data)),this.log("socket onmessage",o);}catch{return}let l;switch(true){case !!o?.["#message"]:l="message";break;case !!o?.["#private"]:l="private";break;case !!o?.["#notice"]:l="notice";break;case !!o?.["#rtc"]:l="rtc";break;case !!o?.["#error"]:l="error";break}if(!l)return;let u={type:l,message:o?.["#rtc"]||o?.["#message"]||o?.["#private"]||o?.["#notice"]||o?.["#error"]||null,sender:o?.["#user_id"]||null,sender_cid:o?.["#scid"]?"cid:"+o["#scid"]:null,sender_rid:o?.["#srid"]||null,code:o?.["#code"]||null};if(l==="notice")t(u);else if(l==="rtc"){if(u.sender!==this.user.user_id){let c=u.message;if(c.hungup){K[u.sender_cid]&&(K[u.sender_cid](false),delete K[u.sender_cid]),z[u.sender_cid]&&delete z[u.sender_cid],T?.[u.sender_cid]&&H.bind(this)({cid:u.sender_cid}),u.type="rtc:closed",t(u);return}if(c.candidate&&ze.bind(this)(c.candidate,u.sender_cid),c.sdpoffer&&(We.bind(this)(c.sdpoffer,u.sender_cid),z[u.sender_cid]||(z[u.sender_cid]=u.sender_cid,delete u.message,u.connectRTC=sn.bind(this)(u),u.type="rtc:incoming",u.hangup=(()=>{T[u.sender_cid]?H.bind(this)({cid:u.sender_cid}):z[u.sender_cid]&&(delete z[u.sender_cid],i.send(JSON.stringify({action:"rtc",uid:u.sender_cid,content:{hungup:this.user.user_id},token:this.session.accessToken.jwtToken})));}).bind(this),t(u))),c.pickup&&K[u.sender_cid]&&(K[u.sender_cid](true),delete K[u.sender_cid]),c.sdpanswer&&T[u.sender_cid])if(T[u.sender_cid].signalingState==="have-local-offer")await T[u.sender_cid].setRemoteDescription(new RTCSessionDescription(c.sdpanswer));else throw new a("Invalid signaling state.",{code:"INVALID_REQUEST"})}}else t(u);},i.onclose=()=>{_e?(this.log("realtime onclose","WebSocket connection closed."),t({type:"close",message:"WebSocket connection closed."})):(this.log("realtime onclose","WebSocket unexpected close."),t({type:"error",message:"Skapi: WebSocket unexpected close."}),ue++,ue<3?(this.log("realtime onclose","Reconnecting to WebSocket server..."+ue),t({type:"reconnect",message:"Reconnecting to WebSocket server..."+ue}),Ce.bind(this)(t,3e3,"reconnect")):(this.log("realtime onclose","Max reconnection attempts reached."),t({type:"error",message:"Skapi: Max reconnection attempts reached."})));},i.onerror=()=>{this.log("realtime onerror","WebSocket connection error."),t({type:"error",message:"Skapi: WebSocket connection error."});};},e);});}async function ln(t,e,n){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebSocket is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});let r=this.__socket?await this.__socket:this.__socket;if(!r)throw new a("No realtime connection. Execute connectRealtime() before this method.",{code:"INVALID_REQUEST"});if(!e)throw new a("No recipient.",{code:"INVALID_REQUEST"});await ae.bind(this)(),t=N(t).data;let i="";if(n&&(n=f.Params(n,{config:{always:"boolean"},title:"string",body:"string"},["title","body"]),i=JSON.stringify({title:n.title,body:n.body}),new Blob([i]).size>3072))throw new a("Notification size exceeds 3kb.",{code:"INVALID_PARAMETER"});if(r.readyState===1){try{f.UserId(e),r.send(JSON.stringify({action:"sendMessage",uid:e,content:t,notification:i,notificationConfig:n?.config||{},token:`IdT:${this.service}:${this.owner}:`+(this.bearerToken||this.session?.idToken?.jwtToken||"null")}));}catch(s){if(this.log("postRealtime:err",{err:s}),ne!==e)throw new a(`User has not joined to the recipient group. Run joinRealtime({ group: "${e}" })`,{code:"INVALID_REQUEST"});r.send(JSON.stringify({action:"broadcast",rid:e,content:t,notification:i,notificationConfig:n?.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 Ge(t){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebSocket is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});let e=this.__socket?await this.__socket:this.__socket;if(!e)throw new a("No realtime connection. Execute connectRealtime() before this method.",{code:"INVALID_REQUEST"});await ae.bind(this)(),t=N(t,{nullIfEmpty:true}).data;let{group:n=null}=t;if(!n&&!ne)return {type:"success",message:"Left realtime message group."};if(n!==null&&typeof n!="string")throw new a('"group" must be a string | null.',{code:"INVALID_PARAMETER"});return e.send(JSON.stringify({action:"joinRoom",rid:n,token:this.session.accessToken.jwtToken})),ne=n,{type:"success",message:n?`Joined realtime message group: "${n}".`:"Left realtime message group."}}async function un(t,e){t=f.Params(t,{user_id:r=>f.UserId(r,'User ID in "user_id"'),group:["string",()=>{if(!ne)throw new a('No group has been joined. Otherwise "group" is required.',{code:"INVALID_REQUEST"});return ne}]});let n=await R.bind(this)("get-ws-group",t,{fetchOptions:e,auth:true,method:"post"});return n.list=n.list.map(r=>({user_id:r.uid.split("#")[1],cid:"cid:"+r.cid})),n}async function dn(t,e){if(await this.__connection,t||(t={searchFor:"group",value:" ",condition:">"}),t=f.Params(t,{searchFor:["group","number_of_users",()=>"group"],value:["string","number",()=>t?.searchFor&&t?.searchFor==="number_of_users"?0:" "],condition:[">",">=","=","<","<=","!=","gt","gte","eq","lt","lte","ne"],range:["string","number"]}),t.condition||(t.value===" "||!t.value?t.condition=">":t.condition="="),t.range&&t.condition&&delete t.condition,t.searchFor==="number_of_users"&&typeof t.value!="number")throw new a('"value" must be a number.',{code:"INVALID_PARAMETER"});if(t.searchFor==="group"&&typeof t.value!="string")throw new a('"value" must be a string.',{code:"INVALID_PARAMETER"});if(t.hasOwnProperty("range")&&typeof t.range!=typeof t.value)throw new a(`"range" must be a ${typeof t.value}.`,{code:"INVALID_PARAMETER"});let n=await R.bind(this)("get-ws-group",t,{fetchOptions:e,auth:true,method:"post"});return n.list=n.list.map(r=>({group:r.rid.split("#")[1],number_of_users:r.cnt})),n}var Xr=typeof FormData<"u",Zr=typeof HTMLFormElement<"u",Yr=typeof SubmitEvent<"u",J={},be={},G={};function Xe(t){return Object.freeze({id:t,status:"stopped"})}function fn(t){return !!t&&typeof t=="object"&&t.status==="stopped"}function hn({id:t,auth:e,service:n,owner:r,latency:i=1e3,queue:s,onResponse:o,onError:l}){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&&!J?.[s]&&(J[s]=new gn__default.default({breakWhenError:false,batchSize:1}));let u={stop:null,aborted:false,queue:s};G[t]=u;let c=()=>{G[t]===u&&delete G[t];},g=()=>new Promise((h,_)=>{let p=false;if(u.aborted){c(),h(Xe(t));return}let y=setInterval(async()=>{try{let w=await R.bind(this)("csr-poll",{id:t,service:n,owner:r},{auth:e});if(w.status==="running"||w.status==="pending"||p)return;p=!0,o&&o(w),clearInterval(y),c(),h(w);}catch(w){if(p)return;p=true,l&&l(w),clearInterval(y),c(),_(w);}},i);u.stop=()=>{p||(p=true,clearInterval(y),c(),h(Xe(t)));};}),d=()=>{let h=G[t];h&&(h.stop?h.stop():(h.aborted=true,delete G[t]));};if(s){let h=new Promise((_,p)=>{let y=false,w=J[s].add([async()=>{try{let m=await g();return y||(y=!0,_(m)),m}catch(m){throw y||(y=true,p(m)),m}}])[0];be[t]=w,u.stop=()=>{if(!y){u.aborted=true;try{J[s]&&J[s].remove(be[t]);}catch{}delete be[t],c(),y=true,_(Xe(t));}};});return Object.assign(h,{stop:d})}else return Object.assign(g(),{stop:d})}function pn(t){let e=0,n=[];if(t?.id){if(t.url&&t.method){let r=t.service||this.service;n.push(`[${t.method.toUpperCase()}]${t.url.toLowerCase()}#${r}:${t.id}`);}n.push(t.id);}else if(t?.queue)for(let r in G)G[r]?.queue===t.queue&&n.push(r);else for(let r in G)n.push(r);for(let r of n){let i=G[r];i&&(i.stop?i.stop():(i.aborted=true,delete G[r]),e+=1);}return e}function mn(t,e){if(!t.queue)throw new a('"queue" is required.',{code:"INVALID_PARAMETER"});let n={service:t.service||this.service,owner:t.owner||this.owner,queue:t.queue+":"};return R.bind(this)("csr-poll",n,{auth:true})}async function _n(t){let e=false;if(typeof t.poll=="number"&&t.poll<0)throw new a('"poll" should be a non-negative number.',{code:"INVALID_PARAMETER"});let n=t?.onResponse,r=t?.onError,i=typeof t.poll=="number"?t.poll:t.poll?1e3:0;delete t.poll,i&&!t.queue&&(t.queue=(this.__user?.user_id||"anonymous")+"-"+ie());let s=u=>{for(let c in u)if(typeof u[c]=="string"&&u[c].includes("$CLIENT_SECRET")){e=true;break}};if(t=f.Params(t,{url:u=>{if(!u||typeof u!="string")throw new a('"url" should be type: <string>.',{code:"INVALID_PARAMETER"});return f.Url(u),u.includes("$CLIENT_SECRET")&&(e=true),u},clientSecretName:"string",method:u=>{if(u&&typeof u!="string")throw new a('"method" should be either "GET" or "POST" or "DELETE" or "PUT".',{code:"INVALID_PARAMETER"});let c=u.toLowerCase();if(c!=="get"&&c!=="post"&&c!=="delete"&&c!=="put")throw new a('"method" should be either "GET" or "POST" or "DELETE" or "PUT".',{code:"INVALID_PARAMETER"});return c},headers:u=>{if(u&&typeof u!="object")throw new a('"headers" should be type: <object>.',{code:"INVALID_PARAMETER"});return s(u),u},data:u=>{if(u&&typeof u!="object")throw new a('"data" should be type: <object>.',{code:"INVALID_PARAMETER"});return s(u),u},params:u=>{if(u&&typeof u!="object")throw new a('"params" should be type: <object>.',{code:"INVALID_PARAMETER"});return s(u),u},expires:"number",queue:"string"},["clientSecretName","method","url"]),!e)throw new a(`At least one parameter value should include "$CLIENT_SECRET" in ${t.method.toLowerCase()==="post"?'"data"':'"params"'} or "headers".`,{code:"INVALID_PARAMETER"});await this.__connection;let o=!!this.__user,l=()=>R.bind(this)("csr",t,{auth:o,tokenHeaders:{accessToken:!!o}}).then(u=>{if(u.status==="running"||u.status==="pending"){let c=`[${t.method.toUpperCase()}]${t.url.toLowerCase()}`,g=t.service||this.service,d=t.owner||this.owner,h=`${c}#${g}:${u.id}`;Object.assign(u,{poll:_=>hn.call(this,{id:h,auth:o,service:g,owner:d,latency:_?.latency||1e3,queue:t?.queue,onResponse:n,onError:r})});}return n?n(u):u}).catch(u=>{if(r)return r(u);throw u});if(t?.queue){let u="base:"+t.queue;return J?.[u]||(J[u]=new gn__default.default({breakWhenError:false,batchSize:1})),new Promise((c,g)=>{J[u].add([async()=>{try{let d=await l();if(i>0){let h=d.poll({latency:i});return c(h),h}return c(d),d}catch(d){throw g(d),d}}]);})}else return l()}async function bn(t,e){await this.__connection;let n=t.service||this.service,r=t.owner||this.owner;t=f.Params(t,{url:"string",method:["GET","POST","DELETE","PUT"],queue:"string",status:["pending","running","resolved","failed"]},["url","method"]);let i=!!this.__user,s=`[${t.method.toUpperCase()}]${t.url.toLowerCase()}#${n}:`,o={id:s,queue:t?.queue,status:t?.status,service:n,owner:r};Object.keys(o).forEach(u=>{o[u]||delete o[u];}),o.queue&&delete o.id;let l=await R.bind(this)("csr-poll",o,{auth:i,fetchOptions:e});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,request_body:u?.reqbdy,expires:u?.expt,status:u.stts,queue_name:u?.qid};for(let g in c)c[g]===void 0&&delete c[g];return (c.status==="running"||c.status==="pending")&&(c.poll=g=>hn.call(this,{id:s+c.id,auth:i,service:n,owner:r,latency:g?.latency||1e3,queue:u?.qid,onResponse:g?.onResponse,onError:g?.onError})),c}),l}async function yn(t){await this.__connection,t=f.Params(t,{url:"string",method:["GET","POST","DELETE","PUT"],id:"string",queue:"string"},["url","method","id"]);let e=t?.service||this.service,n=t?.owner||this.owner,r=!!this.__user,i=`[${t.method.toUpperCase()}]${t.url.toLowerCase()}#${e}`,s=t.id,o=`${i}:${s}`,l=t?.queue;return l&&J?.[l]&&(J[l].remove(be[o]),delete be[o]),R.bind(this)("csr-cancel",{id:o,service:e,owner:n},{auth:r})}async function wn(t){await this.__connection;let e={name:"string",email:n=>(f.Email(n),n),subject:"string",message:"string"};return t=f.Params(t,e,["name","email","subject","message"]),await R.bind(this)("send-inquiry",t),"SUCCESS: Inquiry has been sent."}async function En(t,e){if(await this.__connection,Xr&&t instanceof FormData||Zr&&t instanceof HTMLFormElement||Yr&&t instanceof SubmitEvent){if(!e)throw new a("Url string as a second argument is required when form is passed.",{code:"INVALID_PARAMETER"});let r=N(t);t={url:e,data:r.data,sync:true};}let n={url:r=>f.Url(r),data:r=>r,sync:["boolean",()=>true]};if(Array.isArray(t))for(let r of t)r=f.Params(r,n);else t=f.Params(t,n);return R.bind(this)("post-secure",t,{auth:true})}async function Rn(t,e){await this.__connection;let{auth:n=false,method:r="POST",bypassAwaitConnection:i=false,responseType:s,contentType:o,tokenHeaders:l,progress:u}=e||{};if(e=Object.assign({auth:n,method:r,bypassAwaitConnection:i,responseType:s,contentType:o,tokenHeaders:l},{fetchOptions:{progress:u}}),typeof t!="object"&&(o==="application/json"||o===void 0))throw new a('"data" should be type: <object>.',{code:"INVALID_PARAMETER"});return R.bind(this)("mock",t,e)}async function An(t,e){await this.__connection,t=f.Params(t||{},{access_group:r=>{if(r==="authorized"&&(r=1),r==="public"&&(r=0),typeof r!="number")throw new a('"access_group" should be type number.',{code:"INVALID_PARAMETER"});if(r<0)throw new a('"access_group" should be zero or a positive number.',{code:"INVALID_PARAMETER"});if(r>this.__user.access_group)throw new a("User has no access.",{code:"INVALID_REQUEST"});return r}});let n=await R.bind(this)("get-feed",t,{auth:true,fetchOptions:e});for(let r in n.list)n.list[r]=await le.bind(this)(n.list[r]);return n}function ye(t){if(t===this.__user.user_id)throw new a(`"user_id" cannot be the user's own ID.`,{code:"INVALID_PARAMETER"});return f.UserId(t,'"user_id"')}async function In(t,e){if(t=N(t,{ignoreEmpty:true}).data,t=f.Params(t,{subscriber:r=>f.UserId(r,'User ID in "subscriber"'),subscription:ye.bind(this),blocked:"boolean"}),!t.subscriber&&!t.subscription)throw new a('At least either "subscriber" or "subscription" should have a value.',{code:"INVALID_PARAMETER"});let n=await R.bind(this)("get-subscription",t,Object.assign({auth:true},{fetchOptions:e}));return n.list=n.list.map((r=>{let i={};if(r.sub){let s=r.sub.split("#");i.subscriber=s[2],i.subscription=s[0];}else i.subscriber=r.subscriber,i.subscription=r.subscription;return i.timestamp=r?.timestamp||r.stmp,i.blocked=r?.blocked||r.grp.substring(0,1)==="N",Object.assign(i,r.opt),i})),n}async function Tn(t){await this.__connection,t=f.Params(t,{user_id:ye.bind(this),get_feed:["boolean",()=>false],get_notified:["boolean",()=>false],get_email:r=>{if(r&&!this.__user.email||!this.__user.email_verified)throw new a("User has no verified email address.",{code:"INVALID_REQUEST"});return !!r}},["user_id"]);let e=await R.bind(this)("subscription",{subscribe:t.user_id,option:{get_feed:t.get_feed,get_notified:t.get_notified,get_email:t.get_email||false}},{auth:true}),n={};if(e.sub){let r=e.sub.split("#");n.subscriber=r[2],n.subscription=r[0];}else n.subscriber=e.subscriber,n.subscription=e.subscription;return n.timestamp=e?.timestamp||e.stmp,n.blocked=e?.blocked||e.grp.substring(0,1)==="N",Object.assign(n,e.opt),n}async function Pn(t){await this.__connection;let{user_id:e}=f.Params(t,{user_id:ye.bind(this)},["user_id"]);return await R.bind(this)("subscription",{unsubscribe:e},{auth:true})}async function Sn(t){await this.__connection;let{user_id:e}=f.Params(t,{user_id:ye.bind(this)},["user_id"]);return await R.bind(this)("subscription",{block:e},{auth:true})}async function kn(t){await this.__connection;let{user_id:e}=f.Params(t,{user_id:ye.bind(this)},["user_id"]);return await R.bind(this)("subscription",{unblock:e},{auth:true})}async function vn(t,e){await this.__connection;let n=await F.bind(this)();t=f.Params(t,{user_id:o=>{if(o!==this.__user.user_id&&!n)throw new a("No access.",{code:"INVALID_REQUEST"});return o},group:o=>{if(o==="public"&&(o=0),o==="authorized"&&(o=1),typeof o!="number")throw new a('"group" should be type number | "public" | "authorized".',{code:"INVALID_PARAMETER"});return o}});let r=await R.bind(this)("get-newsletter-subscription",t,{auth:true,fetchOptions:e||null}),i=r?.list||r,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=parseInt(l[0]);s.push({timestamp:o.stmp,group:c,subscribed_email:l[1],active:u});}return r?.list?(r.list=s,r):s}async function xn(t){await this.__connection;let e=f.Params(t||{},{email:n=>Array.isArray(n)&&n.length>0?n.length===1?f.Email(n[0]):n.map(r=>f.Email(r)):f.Email(n),group:["number","public","authorized","admin",n=>{if(typeof n!="string"||n.length>20||!/^[a-zA-Z0-9]+$/.test(n))throw new a('"group" should be an alphanumeric string without spaces and less than 20 characters.',{code:"INVALID_PARAMETER"});return n}],redirect:n=>f.Url(n)},this.__user?["group"]:["email","group"]);return R.bind(this)(`subscribe-${this.__user?"":"public-"}newsletter`,e,{auth:!!this.__user})}async function Dn(t){await this.__connection,t=f.Params(t,{group:["number","public","authorized","admin"]},["group"]);let e=Object.assign({action:"unsubscribe"},t);return R.bind(this)("subscribe-newsletter",e,{auth:true})}async function Un(t,e){let n=await F.bind(this)(),r={message_id:"string",timestamp:"number",read:"number",complaint:"number",subject:"string",bounced:"number"};t||(e=Object.assign({ascending:false},e||{})),t=N(t).data,t=t||{searchFor:"timestamp",value:Date.now(),condition:"<",group:"public"},t=f.Params(t,{searchFor:["message_id","timestamp","subject","complaint","read","bounced"],value:u=>{if(typeof u!==r[t.searchFor])throw new a(`"value" type does not match the type of "${t.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(!t.hasOwnProperty("value")||typeof u!=typeof t.value)throw new a('"range" should match type of "value".',{code:"INVALID_PARAMETER"});return u},condition:[">",">=","=","<","<=","gt","gte","eq","lt","lte",()=>"="],group:u=>{if(u==="public")return 0;if(!this.session)throw new a("User should be logged in.",{code:"INVALID_REQUEST"});if(u==="authorized")return 1;if(typeof u=="number"){if(!n&&u>parseInt(this.user?.access_group||this.session?.idToken?.payload?.access_group))throw new a("User has no access.",{code:"INVALID_REQUEST"});return u}throw new a('"group" should be type: number | "public" | "authorized".',{code:"INVALID_PARAMETER"})}},["searchFor","value","group"]);let i=t.group===0?"get-public-newsletters":"get-newsletters",s=await R.bind(this)(i,t,Object.assign({method:"get",auth:i==="get-public-newsletters"?!!this.__user:true},{fetchOptions:e})),o={message_id:"mid",timestamp:"stmp",complaint:"cmpl",read:"read",subject:"subj",bounced:"bnce",url:"url",delivered:"delv"},l={message_id:"",timestamp:0,complaint:0,read:0,subject:"",bounced:"",url:"",delivered:0};return s.list=s.list.map(u=>{let c={};for(let g in o)c[g]=u[o[g]]||l[g];return c.bounced=String(c.bounced),c}),s}async function Nn(t){let e=f.Params(t,{user_id:r=>f.UserId(r,'"user_id"')},["user_id"]);if(e?.service&&e?.owner?e={service:e?.service,owner:e?.owner,block:e.user_id}:e={block:e.user_id},!await F.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 R.bind(this)("block-account",e,{auth:true})}async function Cn(t){let e=f.Params(t,{user_id:r=>f.UserId(r,'"user_id"')},["user_id"]);if(e?.service&&e?.owner?e={service:e?.service,owner:e?.owner,unblock:e.user_id}:e={unblock:e.user_id},!await F.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 R.bind(this)("block-account",e,{auth:true})}async function Ln(t){let e=f.Params(t,{user_id:r=>f.UserId(r,'"user_id"')},["user_id"]);if(e?.service&&e?.owner?e={service:e?.service,owner:e?.owner,delete:e.user_id}:e={delete:e.user_id},!await F.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 R.bind(this)("remove-account",e,{auth:true})}async function On(t,e){let n={email:s=>f.Email(s),password:s=>f.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=>f.Birthdate(s),phone_number:s=>f.PhoneNumber(s),picture:s=>{if(s)return f.Url(s)},profile:s=>{if(s)return f.Url(s)},website:s=>{if(s)return f.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}},r=f.Params(t,n,["email"]);if(e=f.Params(e,{confirmation_url:s=>{let o=s;if(typeof s=="string")o=f.Url(s);else throw new a('"options.confirmation_url" should be type: <string>.',{code:"INVALID_PARAMETER"});if(o&&!r.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(!e?.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:f.Url(s.url),subject:s.subject}}}),r.signup_confirmation=e?.confirmation_url||true,r.email_subscription=e?.email_subscription||false,r.template=e?.template||{},!await F.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 R.bind(this)("admin-signup",r,{auth:true})}async function Mn(t){let e={email:s=>f.Email(s),password:s=>f.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=>f.Birthdate(s),phone_number:s=>f.PhoneNumber(s),picture:s=>s?f.Url(s):"",profile:s=>s?f.Url(s):"",website:s=>s?f.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}},n=["email","password"],r=f.Params(t,e,n);if(!await F.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 R.bind(this)("admin-signup",r,{auth:true})}async function Fn(t){if(t=f.Params(t,{user_id:n=>f.UserId(n,'"user_id"'),access_group:n=>{try{typeof n=="string"&&(n=parseInt(n));}catch{throw new a('"access_group" is invalid. Should be type <number>.',{code:"INVALID_PARAMETER"})}if(typeof n=="number"&&n>0&&n<100)return n;throw new a('"access_group" is invalid. Should be type <number> of range 1~99',{code:"INVALID_PARAMETER"})}},["user_id","access_group"]),!await F.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 R.bind(this)("grant-access",t,{auth:true})}async function qn(t,e){if(t=f.Params(t,{email:"string"}),!await F.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 r=await R.bind(this)("invitation-list",Object.assign({mode:"search"},t),{fetchOptions:e,auth:true});return r.list=r.list.map(i=>de(i.user)),r}async function Vn(t){if(t=f.Params(t,{email:n=>f.Email(n)},["email"]),!await F.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 R.bind(this)("invitation-list",Object.assign({mode:"cancel"},t),{auth:true})}async function $n(t){if(t=f.Params(t,{email:n=>f.Email(n)},["email"]),!await F.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 R.bind(this)("invitation-list",Object.assign({mode:"resend"},t),{auth:true})}async function jn(t){let e=f.Params(t,{user_id:o=>f.UserId(o,'"user_id"'),email:o=>f.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?f.Birthdate(o):"",phone_number:o=>o?f.PhoneNumber(o):"",email_public:"boolean",phone_number_public:"boolean",address_public:"boolean",gender_public:"boolean",birthdate_public:"boolean",misc:"string",picture:o=>o?f.Url(o):"",profile:o=>o?f.Url(o):"",nickname:"string",website:o=>o?f.Url(o):""},["user_id"]),n=e.service,r=e.owner;if(delete e.service,delete e.owner,Object.keys(e).filter(o=>o!=="user_id"&&e[o]!==void 0).length===0)throw new a("At least one attribute to update is required.",{code:"INVALID_PARAMETER"});if(!await F.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"})}e.email&&(e.preferred_username=(n||this.service)+"-"+M.hash(e.email));let s={attributes:e};return n&&r&&(s.service=n,s.owner=r),await R.bind(this)("admin-edit-profile",s,{auth:true})}async function Bn(t){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,!t.endpoint)throw new a("Missing parameter: endpoint",{code:"INVALID_PARAMETER"});if(!t.keys||!t.keys.p256dh||!t.keys.auth)throw new a("Missing parameter: keys.p256dh or keys.auth",{code:"INVALID_PARAMETER"});return await R.bind(this)("store-subscription",{endpoint:t.endpoint,keys:t.keys},{auth:true}),"SUCCESS: Subscribed to receive notifications."}async function Qn(t){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,!t.endpoint)throw new a("Missing parameter: endpoint",{code:"INVALID_PARAMETER"});if(!t.keys||!t.keys.p256dh||!t.keys.auth)throw new a("Missing parameter: keys.p256dh or keys.auth",{code:"INVALID_PARAMETER"});return await R.bind(this)("delete-subscription",{endpoint:t.endpoint,keys:t.keys},{auth:true}),"SUCCESS: Unsubscribed from notifications."}async function Kn(){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 R.bind(this)("get-vapid-public-key",null,{auth:true})}}async function Hn(t,e){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:n,body:r}=N(t||{},{nullIfEmpty:true}).data;if(!n)throw new a("Missing parameter: message title",{code:"INVALID_PARAMETER"});if(!r)throw new a("Missing parameter: message body",{code:"INVALID_PARAMETER"});let i={title:n,body:r};return e?(typeof e=="string"&&(e=[e]),i.user_ids=e):i.user_ids="all_users",await R.bind(this)("push-notification",i,{auth:true}),"SUCCESS: Notification sent."}async function Wn(t){await this.__connection,t=f.Params(t,{spell:"string",name:"string",magic:n=>n},["spell","name"]);await R.bind(this)("castspell",t);return `The spell "${t.spell}" has been cast.`}async function zn(t){return await this.__connection,t=f.Params(t||{},{search:["spell","name",()=>"spell"],value:"string"}),await R.bind(this)("getspell",t)}async function Jn(t){await this.__connection,t=f.Params(t,{message:"string",name:"string"},["message","name"]);let e=await R.bind(this)("dopamine",t,{auth:true}),n=e?.previous_message?.message,r=e?.previous_message?.name;if(V())n&&r&&window.alert(`${r} said: ${n}`),window.location.href=e.video;else return n&&r?`${r} said: ${n}
216
216
  Watch the video here: ${e.video}`:`Your message has been uploaded for future generations to receive.
217
- Watch the video here: ${e.video}`}var w=class{constructor(e,n,r,s){this.__version="1.8.0";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=30;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(e){try{return f.UserId(e),!0}catch{return false}},url(e){try{return f.Url(e),!0}catch{return false}},phoneNumber(e){try{return f.PhoneNumber(e),!0}catch{return false}},birthdate(e){try{return f.Birthdate(e),!0}catch{return false}},email(e){try{return f.Email(e),!0}catch{return false}},params(e,n,r){return f.Params(e,n,r)}};this.util={MD5:M,generateRandom:ie,toBase62:nt,fromBase62:B,decodeServiceId:Oe,formatServiceId:rt,extractFormData:N,terminatePendingRequests:xt,request:(e,n,r)=>E.bind(this)(e,n,r,{ignoreService:true})};this.__network_logs=false;this.__endpoint_version="v1";this.__public_identifier="";this.bearerToken="";this.registerTicket=ct.bind(this);this.unregisterTicket=lt.bind(this);if(!e||typeof e!="string")throw this._alert("Service ID is required."),new a("Service ID is required.",{code:"INVALID_PARAMETER"});let i=e.split("-").length;if(i===2||i===7)try{let m=Oe(e);r&&typeof r=="object"&&(s=r),n&&typeof n=="object"&&(r=n),n=m.owner,e=m.service;}catch{throw this._alert("Service ID is invalid."),new a("Service ID is invalid.",{code:"INVALID_PARAMETER"})}if(!n||typeof n!="string")throw this._alert("Owner ID is invalid."),new a("Owner ID is invalid.",{code:"INVALID_PARAMETER"});if(e.toLowerCase()==="service_id")throw this._alert('Replace "service_id" with your actual Service ID.'),new a("Service ID is required.",{code:"INVALID_PARAMETER"});if(n!==this.host)try{f.UserId(n,'"owner"');}catch{throw this._alert("Owner ID is invalid."),new a("Owner ID is invalid.",{code:"INVALID_PARAMETER"})}this.service=e,this.owner=n;let l=true,c=false;if(r&&(typeof r.refetchServiceInfo=="boolean"&&(c=r.refetchServiceInfo),typeof r.autoLogin=="boolean"&&(l=r.autoLogin),typeof r.requestBatchSize=="number")){if(r.requestBatchSize<1)throw new a('"requestBatchSize" must be greater than 0.',{code:"INVALID_PARAMETER"});this.requestBatchSize=r.requestBatchSize;}r?.eventListener&&typeof r.eventListener=="object"&&(r.eventListener?.onLogin&&typeof r.eventListener.onLogin=="function"&&(this.onLogin=r.eventListener.onLogin),r.eventListener?.onUserUpdate&&typeof r.eventListener.onUserUpdate=="function"&&(this.onUserUpdate=r.eventListener.onUserUpdate),r.eventListener?.onBatchProcess&&typeof r.eventListener.onBatchProcess=="function"&&(this.onBatchProcess=r.eventListener.onBatchProcess)),this.target_cdn=s?.target_cdn||this.target_cdn,this.hostDomain=s?.hostDomain||this.hostDomain,this.customApiDomain=s?.customApiDomain||this.customApiDomain,this.__network_logs=!!s?.network_logs;let g=`https://${this.target_cdn}.cloudfront.net`,d=e.substring(0,4);this.admin_endpoint=fetch(`${g}/${d}/admin-${this.__endpoint_version}.json`).then(m=>m.blob()).then(m=>new Promise((I,y)=>{let S=new FileReader;S.onloadend=()=>I(S.result),S.onerror=y,S.readAsDataURL(m);})).then(m=>{try{return typeof m=="string"?JSON.parse(atob(m.split(",")[1])):null}catch{throw new a("Service does not exist. Create your service from skapi.com",{code:"NOT_EXISTS"})}}),this.record_endpoint=fetch(`${g}/${d}/record-${this.__endpoint_version}.json`).then(m=>m.blob()).then(m=>new Promise((I,y)=>{let S=new FileReader;S.onloadend=()=>I(S.result),S.onerror=y,S.readAsDataURL(m);})).then(m=>{try{return typeof m=="string"?JSON.parse(atob(m.split(",")[1])):null}catch{throw new a("Service does not exist. Create your service from skapi.com",{code:"NOT_EXISTS"})}});let h=V();if(h&&!window.sessionStorage)throw this._alert("This browser is not supported."),new Error("This browser is not supported.");let _=h?JSON.parse(window.sessionStorage.getItem(`${e}#${n}`)||"null"):null;if(this.log("constructor:restore",_),_?.connection){for(let m in _)this[m]=_[m];_.__public_identifier||(this.__public_identifier=`${this.service}:${this.owner}:${ie(16)}`);}this.__authConnection=(async()=>{let m=await this.admin_endpoint,I={UserPoolId:m.userpool_id,ClientId:m.userpool_client};Le()&&(I.Storage=window.localStorage),this.userPool=new amazonCognitoIdentityJs.CognitoUserPool(I);try{this.user||await q.bind(this)().getSession({skipUserUpdateEventTrigger:!0}),this.user&&(!_?.connection&&!l?Y.bind(this)():(this._runOnLoginListeners(this.user),this._runOnUserUpdateListeners(this.user)));}catch{}})();let p=h?window.sessionStorage.getItem(`${this.service}:uniqueids`):null;if(p)try{this.__my_unique_ids=JSON.parse(p);}catch{this.__my_unique_ids={};}this.__connection=(async()=>{let m=null;await this.record_endpoint,_?.connection||(m=this._updateConnection({refresh:c}));let I=()=>{if(this.__class_properties_has_been_cached)return;let y=()=>{let S={},v=["__startKeyHistory","__disabledAccount","__cached_requests","__request_signup_confirmation","__public_identifier","connection"];if(this.connection){for(let P of v)S[P]=this[P];h&&window.sessionStorage.setItem(`${e}#${n}`,JSON.stringify(S)),this.__class_properties_has_been_cached=true;}};return m instanceof Promise?m.then(()=>y()):y()};return h&&(window.addEventListener("beforeunload",()=>{this.closeRealtime(),I();}),window.addEventListener("visibilitychange",()=>{I();})),await m,await this.__authConnection,this.connection})(),this.__connection.then(m=>{((m?.group||0)<3||this.__network_logs)&&this.version();});}get user(){return this.__user&&Object.keys(this.__user).length?JSON.parse(JSON.stringify(this.__user)):null}set user(e){}get onLogin(){return this._onLoginListeners}set onLogin(e){typeof e=="function"&&this._onLoginListeners.push(e);}get onUserUpdate(){return this._userProfileListeners}set onUserUpdate(e){typeof e=="function"&&this._userProfileListeners.push(e);}_runOnUserUpdateListeners(e){for(let n of this._userProfileListeners)typeof n=="function"&&n(e);}_runOnLoginListeners(e){for(let n of this._onLoginListeners)typeof n=="function"&&n(e);}get onBatchProcess(){return this._onBatchProcessListeners}set onBatchProcess(e){typeof e=="function"&&this._onBatchProcessListeners.push(e);}_alert(e){V()&&typeof window.alert=="function"&&window.alert(e);}async getConnectionInfo(e){e?.refresh&&(this.__connection instanceof Promise&&await this.__connection,this.__connection=this._updateConnection({refresh:true}));let r=await this.__connection,s=r?.user_agent||(V()&&typeof window.navigator?.userAgent=="string"?window.navigator.userAgent:`skapi-node/${globalThis?.process?.versions?.node||"unknown"}`);return {user_ip:r.ip,user_agent:s,user_location:r.locale,service_name:r.service_name,version:this.__version,service_description:r?.service_description||"",ai_agent:r?.ai_agent||"",conf:r?.opt}}async _updateConnection(e){let n=e?.refresh||false;try{this.connection=await E.bind(this)("service",{service:this.service,owner:this.owner,refresh:n},{bypassAwaitConnection:!0,method:"get"});}catch(r){throw this.log("connection fail",r),this._alert("Service is not available: "+(r.message||r.toString())),this.connection=null,r}return this.connection}async version(){if(await this.__connection,V()){let n=`Built with:
217
+ Watch the video here: ${e.video}`}var E=class{constructor(e,n,r,i){this.__version="1.8.2";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=30;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(e){try{return f.UserId(e),!0}catch{return false}},url(e){try{return f.Url(e),!0}catch{return false}},phoneNumber(e){try{return f.PhoneNumber(e),!0}catch{return false}},birthdate(e){try{return f.Birthdate(e),!0}catch{return false}},email(e){try{return f.Email(e),!0}catch{return false}},params(e,n,r){return f.Params(e,n,r)}};this.util={MD5:M,generateRandom:ie,toBase62:it,fromBase62:B,decodeServiceId:Me,formatServiceId:st,extractFormData:N,terminatePendingRequests:Ut,request:(e,n,r)=>R.bind(this)(e,n,r,{ignoreService:true})};this.__network_logs=false;this.__endpoint_version="v1";this.__public_identifier="";this.bearerToken="";this.registerTicket=ut.bind(this);this.unregisterTicket=dt.bind(this);if(!e||typeof e!="string")throw this._alert("Service ID is required."),new a("Service ID is required.",{code:"INVALID_PARAMETER"});let s=e.split("-").length;if(s===2||s===7)try{let w=Me(e);r&&typeof r=="object"&&(i=r),n&&typeof n=="object"&&(r=n),n=w.owner,e=w.service;}catch{throw this._alert("Service ID is invalid."),new a("Service ID is invalid.",{code:"INVALID_PARAMETER"})}if(!n||typeof n!="string")throw this._alert("Owner ID is invalid."),new a("Owner ID is invalid.",{code:"INVALID_PARAMETER"});if(e.toLowerCase()==="service_id")throw this._alert('Replace "service_id" with your actual Service ID.'),new a("Service ID is required.",{code:"INVALID_PARAMETER"});if(n!==this.host)try{f.UserId(n,'"owner"');}catch{throw this._alert("Owner ID is invalid."),new a("Owner ID is invalid.",{code:"INVALID_PARAMETER"})}this.service=e,this.owner=n;let u=true,c=false;if(r&&(typeof r.refetchServiceInfo=="boolean"&&(c=r.refetchServiceInfo),typeof r.autoLogin=="boolean"&&(u=r.autoLogin),typeof r.requestBatchSize=="number")){if(r.requestBatchSize<1)throw new a('"requestBatchSize" must be greater than 0.',{code:"INVALID_PARAMETER"});this.requestBatchSize=r.requestBatchSize;}r?.eventListener&&typeof r.eventListener=="object"&&(r.eventListener?.onLogin&&typeof r.eventListener.onLogin=="function"&&(this.onLogin=r.eventListener.onLogin),r.eventListener?.onUserUpdate&&typeof r.eventListener.onUserUpdate=="function"&&(this.onUserUpdate=r.eventListener.onUserUpdate),r.eventListener?.onBatchProcess&&typeof r.eventListener.onBatchProcess=="function"&&(this.onBatchProcess=r.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 g=`https://${this.target_cdn}.cloudfront.net`,d=e.substring(0,4);this.admin_endpoint=fetch(`${g}/${d}/admin-${this.__endpoint_version}.json`).then(w=>w.blob()).then(w=>new Promise((m,v)=>{let S=new FileReader;S.onloadend=()=>m(S.result),S.onerror=v,S.readAsDataURL(w);})).then(w=>{try{return typeof w=="string"?JSON.parse(atob(w.split(",")[1])):null}catch{throw new a("Service does not exist. Create your service from skapi.com",{code:"NOT_EXISTS"})}}),this.record_endpoint=fetch(`${g}/${d}/record-${this.__endpoint_version}.json`).then(w=>w.blob()).then(w=>new Promise((m,v)=>{let S=new FileReader;S.onloadend=()=>m(S.result),S.onerror=v,S.readAsDataURL(w);})).then(w=>{try{return typeof w=="string"?JSON.parse(atob(w.split(",")[1])):null}catch{throw new a("Service does not exist. Create your service from skapi.com",{code:"NOT_EXISTS"})}});let h=V();if(h&&!window.sessionStorage)throw this._alert("This browser is not supported."),new Error("This browser is not supported.");let _=h?JSON.parse(window.sessionStorage.getItem(`${e}#${n}`)||"null"):null;if(this.log("constructor:restore",_),_?.connection){for(let w in _)this[w]=_[w];_.__public_identifier||(this.__public_identifier=`${this.service}:${this.owner}:${ie(16)}`);}this.__authConnection=(async()=>{let w=await this.admin_endpoint,m={UserPoolId:w.userpool_id,ClientId:w.userpool_client};Oe()&&(m.Storage=window.localStorage),this.userPool=new amazonCognitoIdentityJs.CognitoUserPool(m);try{this.user||await q.bind(this)().getSession({skipUserUpdateEventTrigger:!0}),this.user&&(!_?.connection&&!u?Y.bind(this)():(this._runOnLoginListeners(this.user),this._runOnUserUpdateListeners(this.user)));}catch{}})();let p=`${this.service}/${this.owner}`,y=h?window.sessionStorage.getItem(`${p}:uniqueids`):null;if(y)try{let w=JSON.parse(y);this.__my_unique_ids=w&&typeof w=="object"&&!Array.isArray(w)?{[p]:w}:{};}catch{this.__my_unique_ids={};}this.__connection=(async()=>{let w=null;await this.record_endpoint,_?.connection||(w=this._updateConnection({refresh:c}));let m=()=>{if(this.__class_properties_has_been_cached)return;let v=()=>{let S={},P=["__startKeyHistory","__disabledAccount","__cached_requests","__request_signup_confirmation","__public_identifier","connection"];if(this.connection){for(let x of P)S[x]=this[x];h&&window.sessionStorage.setItem(`${e}#${n}`,JSON.stringify(S)),this.__class_properties_has_been_cached=true;}};return w instanceof Promise?w.then(()=>v()):v()};return h&&(window.addEventListener("beforeunload",()=>{this.closeRealtime(),m();}),window.addEventListener("visibilitychange",()=>{m();})),await w,await this.__authConnection,this.connection})(),this.__connection.then(w=>{((w?.group||0)<3||this.__network_logs)&&this.version();});}get user(){return this.__user&&Object.keys(this.__user).length?JSON.parse(JSON.stringify(this.__user)):null}set user(e){}get onLogin(){return this._onLoginListeners}set onLogin(e){typeof e=="function"&&this._onLoginListeners.push(e);}get onUserUpdate(){return this._userProfileListeners}set onUserUpdate(e){typeof e=="function"&&this._userProfileListeners.push(e);}_runOnUserUpdateListeners(e){for(let n of this._userProfileListeners)typeof n=="function"&&n(e);}_runOnLoginListeners(e){for(let n of this._onLoginListeners)typeof n=="function"&&n(e);}get onBatchProcess(){return this._onBatchProcessListeners}set onBatchProcess(e){typeof e=="function"&&this._onBatchProcessListeners.push(e);}_alert(e){V()&&typeof window.alert=="function"&&window.alert(e);}async getConnectionInfo(e){e?.refresh&&(this.__connection instanceof Promise&&await this.__connection,this.__connection=this._updateConnection({refresh:true}));let r=await this.__connection,i=r?.user_agent||(V()&&typeof window.navigator?.userAgent=="string"?window.navigator.userAgent:`skapi-node/${globalThis?.process?.versions?.node||"unknown"}`);return {user_ip:r.ip,user_agent:i,user_location:r.locale,service_name:r.service_name,version:this.__version,service_description:r?.service_description||"",ai_agent:r?.ai_agent||"",conf:r?.opt}}async _updateConnection(e){let n=e?.refresh||false;try{this.connection=await R.bind(this)("service",{service:this.service,owner:this.owner,refresh:n},{bypassAwaitConnection:!0,method:"get"});}catch(r){throw this.log("connection fail",r),this._alert("Service is not available: "+(r.message||r.toString())),this.connection=null,r}return this.connection}async version(){if(await this.__connection,V()){let n=`Built with:
218
218
  %c\r
219
219
  $$\\ $$\\ \r
220
220
  $$ | \\__|\r
@@ -229,6 +229,6 @@ $$$$$$$ |$$ | \\$$\\\\$$$$$$$ |$$$$$$$ |$$ |\r
229
229
  \\__| \r
230
230
  Version: ${this.__version}
231
231
 
232
- Full Documentation: https://docs.skapi.com/skapi.md`;console.log(n,"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(e,n){if(this.__network_logs){if(n!==null&&typeof n=="object")try{V()?n=JSON.parse(JSON.stringify(n)):n=JSON.stringify(n,null,2);}catch{n=String(n);}else typeof n=="string"&&n.length>100&&(n=n.substring(0,100)+"...");console.log(`%c${e}:`,"color: blue;",n);}}getFeed(e,n){return wn.bind(this)(e,n)}closeRTC(e){return H.bind(this)(e)}connectRTC(e,n){return en.bind(this)(e,n)}connectRealtime(e){return Ne.bind(this)(e)}spellcast(e){return Qn.bind(this)(e)}getspell(e){return Kn.bind(this)(e)}dopamine(e){return Hn.bind(this)(e)}getUniqueId(e,n){return Kt.bind(this)(e,n)}resendInvitation(e){return Fn.bind(this)(e)}cancelInvitation(e){return Mn.bind(this)(e)}getInvitations(e,n){return On.bind(this)(e,n)}openIdLogin(e){return dt.bind(this)(e)}loginWithToken(e){return gt.bind(this)(e)}clientSecretRequest(e){return hn.bind(this)(e)}clientSecretRequestHistory(e,n){return pn.bind(this)(e,n)}cancelClientSecretRequest(e){return mn.bind(this)(e)}stopClientSecretPolling(e){return gn.bind(this)(e||{})}isPollStopped(e){return un(e)}clientSecretRequestQueueCount(e){return fn.bind(this)(e)}consumeTicket(e){return st.bind(this)(e)}getConsumedTickets(e,n){return at.bind(this)(e,n)}getTickets(e,n){return ot.bind(this)(e,n)}closeRealtime(){return sn.bind(this)()}getRealtimeUsers(e,n){return an.bind(this)(e,n)}sendInquiry(e){return _n.bind(this)(e)}blockAccount(e){return xn.bind(this)(e)}unblockAccount(e){return Dn.bind(this)(e)}deleteAccount(e){return Un.bind(this)(e)}inviteUser(e,n){return Nn.bind(this)(e,n)}createAccount(e){return Cn.bind(this)(e)}grantAccess(e){return Ln.bind(this)(e)}updateUserAttributes(e){return qn.bind(this)(e)}getRealtimeGroups(e,n){return cn.bind(this)(e,n)}postRealtime(e,n,r){return on.bind(this)(e,n,r)}joinRealtime(e){return ze.bind(this)(e)}getProfile(e){return ut.bind(this)(e)}getFile(e,n){return me.bind(this)(e,n)}secureRequest(e,n){return bn.bind(this)(e,n)}getFormResponse(){return Ut.bind(this)()}getRecords(e,n){return Ft.bind(this)(e,n)}getTables(e,n){return jt.bind(this)(e,n)}getIndexes(e,n){return Bt.bind(this)(e,n)}getTags(e,n){return Qt.bind(this)(e,n)}deleteRecords(e,n){return Ht.bind(this)(e,n)}resendSignupConfirmation(){return ft.bind(this)()}recoverAccount(e=false){return ht.bind(this)(e)}getUsers(e,n){return It.bind(this)(e,n)}disableAccount(){return mt.bind(this)()}lastVerifiedEmail(e){return Tt.bind(this)(e)}unsubscribeNewsletter(e){return kn.bind(this)(e)}subscribeNotification(e,n){return Vn.bind(this)({endpoint:e,keys:n})}unsubscribeNotification(e,n){return $n.bind(this)({endpoint:e,keys:n})}vapidPublicKey(){return jn.bind(this)()}pushNotification(e,n){return Bn.bind(this)(e,n)}getNewsletters(e,n){return vn.bind(this)(e,n)}getNewsletterSubscription(e,n){return Pn.bind(this)(e,n)}requestUsernameChange(e){return Pt.bind(this)(e)}grantPrivateRecordAccess(e){return Wt.bind(this)(e)}removePrivateRecordAccess(e){return zt.bind(this)(e)}listPrivateRecordAccess(e,n){return Jt.bind(this)(e,n)}requestPrivateRecordAccessKey(e){return Gt.bind(this)(e)}deleteFiles(e){return Ot.bind(this)(e)}uploadFiles(e,n){return Pe.bind(this)(e,n)}mock(e,n){return yn.bind(this)(e,n)}login(e){return Fe.bind(this)(e)}logout(e){return ge.bind(this)(e)}signup(e,n){return pt.bind(this)(e,n)}resetPassword(e){return _t.bind(this)(e)}verifyEmail(e,n){return wt.bind(this)(e,n)}verifyPhoneNumber(e,n){return yt.bind(this)(e,n)}forgotPassword(e,n){return Et.bind(this)(e,n)}changePassword(e){return Rt.bind(this)(e)}updateProfile(e){return At.bind(this)(e)}postRecord(e,n,r){return $t.bind(this)(e,n,r)}getSubscriptions(e,n){return En.bind(this)(e,n)}subscribe(e){return Rn.bind(this)(e)}unsubscribe(e){return An.bind(this)(e)}blockSubscriber(e){return In.bind(this)(e)}unblockSubscriber(e){return Tn.bind(this)(e)}subscribeNewsletter(e){return Sn.bind(this)(e)}bulkPostRecords(e){return Vt.bind(this)(e)}};R([A()],w.prototype,"getFeed"),R([A()],w.prototype,"closeRTC"),R([A()],w.prototype,"connectRTC"),R([A()],w.prototype,"spellcast"),R([A()],w.prototype,"getspell"),R([A()],w.prototype,"dopamine"),R([A()],w.prototype,"getUniqueId"),R([A()],w.prototype,"resendInvitation"),R([A()],w.prototype,"cancelInvitation"),R([A()],w.prototype,"getInvitations"),R([A()],w.prototype,"openIdLogin"),R([A()],w.prototype,"loginWithToken"),R([A()],w.prototype,"clientSecretRequest"),R([A()],w.prototype,"clientSecretRequestHistory"),R([A()],w.prototype,"cancelClientSecretRequest"),R([A()],w.prototype,"consumeTicket"),R([A()],w.prototype,"getConsumedTickets"),R([A()],w.prototype,"getTickets"),R([A()],w.prototype,"getRealtimeUsers"),R([A()],w.prototype,"sendInquiry"),R([A()],w.prototype,"blockAccount"),R([A()],w.prototype,"unblockAccount"),R([A()],w.prototype,"deleteAccount"),R([A()],w.prototype,"inviteUser"),R([A()],w.prototype,"createAccount"),R([A()],w.prototype,"grantAccess"),R([A()],w.prototype,"updateUserAttributes"),R([A()],w.prototype,"getRealtimeGroups"),R([A()],w.prototype,"postRealtime"),R([A()],w.prototype,"joinRealtime"),R([A()],w.prototype,"getProfile"),R([A()],w.prototype,"getFile"),R([A()],w.prototype,"secureRequest"),R([A()],w.prototype,"getFormResponse"),R([A()],w.prototype,"getRecords"),R([A()],w.prototype,"getTables"),R([A()],w.prototype,"getIndexes"),R([A()],w.prototype,"getTags"),R([A()],w.prototype,"deleteRecords"),R([A()],w.prototype,"resendSignupConfirmation"),R([A()],w.prototype,"recoverAccount"),R([A()],w.prototype,"getUsers"),R([A()],w.prototype,"disableAccount"),R([A()],w.prototype,"lastVerifiedEmail"),R([A()],w.prototype,"unsubscribeNewsletter"),R([A()],w.prototype,"subscribeNotification"),R([A()],w.prototype,"unsubscribeNotification"),R([A()],w.prototype,"vapidPublicKey"),R([A()],w.prototype,"pushNotification"),R([A()],w.prototype,"getNewsletters"),R([A()],w.prototype,"getNewsletterSubscription"),R([A()],w.prototype,"requestUsernameChange"),R([A()],w.prototype,"grantPrivateRecordAccess"),R([A()],w.prototype,"removePrivateRecordAccess"),R([A()],w.prototype,"listPrivateRecordAccess"),R([A()],w.prototype,"requestPrivateRecordAccessKey"),R([A()],w.prototype,"deleteFiles"),R([A()],w.prototype,"uploadFiles"),R([A()],w.prototype,"mock"),R([A({preventMultipleCalls:true})],w.prototype,"login"),R([A()],w.prototype,"logout"),R([A({preventMultipleCalls:true})],w.prototype,"signup"),R([A({preventMultipleCalls:true})],w.prototype,"resetPassword"),R([A({preventMultipleCalls:true})],w.prototype,"verifyEmail"),R([A({preventMultipleCalls:true})],w.prototype,"verifyPhoneNumber"),R([A({preventMultipleCalls:true})],w.prototype,"forgotPassword"),R([A({preventMultipleCalls:true})],w.prototype,"changePassword"),R([A({preventMultipleCalls:true})],w.prototype,"updateProfile"),R([A()],w.prototype,"postRecord"),R([A()],w.prototype,"getSubscriptions"),R([A()],w.prototype,"subscribe"),R([A()],w.prototype,"unsubscribe"),R([A()],w.prototype,"blockSubscriber"),R([A()],w.prototype,"unblockSubscriber"),R([A()],w.prototype,"subscribeNewsletter");var Xr={};
233
- exports.Skapi=w;exports.SkapiError=a;exports.Types=Xr;//# sourceMappingURL=skapi.cjs.map
232
+ Full Documentation: https://docs.skapi.com/skapi.md`;console.log(n,"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(e,n){if(this.__network_logs){if(n!==null&&typeof n=="object")try{V()?n=JSON.parse(JSON.stringify(n)):n=JSON.stringify(n,null,2);}catch{n=String(n);}else typeof n=="string"&&n.length>100&&(n=n.substring(0,100)+"...");console.log(`%c${e}:`,"color: blue;",n);}}getFeed(e,n){return An.bind(this)(e,n)}closeRTC(e){return H.bind(this)(e)}connectRTC(e,n){return rn.bind(this)(e,n)}connectRealtime(e){return Ce.bind(this)(e)}spellcast(e){return Wn.bind(this)(e)}getspell(e){return zn.bind(this)(e)}dopamine(e){return Jn.bind(this)(e)}getUniqueId(e,n){return zt.bind(this)(e,n)}resendInvitation(e){return $n.bind(this)(e)}cancelInvitation(e){return Vn.bind(this)(e)}getInvitations(e,n){return qn.bind(this)(e,n)}openIdLogin(e){return ft.bind(this)(e)}loginWithToken(e){return ht.bind(this)(e)}clientSecretRequest(e){return _n.bind(this)(e)}clientSecretRequestHistory(e,n){return bn.bind(this)(e,n)}cancelClientSecretRequest(e){return yn.bind(this)(e)}stopClientSecretPolling(e){return pn.bind(this)(e||{})}isPollStopped(e){return fn(e)}clientSecretRequestQueueCount(e){return mn.bind(this)(e)}consumeTicket(e){return at.bind(this)(e)}getConsumedTickets(e,n){return lt.bind(this)(e,n)}getTickets(e,n){return ct.bind(this)(e,n)}closeRealtime(){return cn.bind(this)()}getRealtimeUsers(e,n){return un.bind(this)(e,n)}sendInquiry(e){return wn.bind(this)(e)}blockAccount(e){return Nn.bind(this)(e)}unblockAccount(e){return Cn.bind(this)(e)}deleteAccount(e){return Ln.bind(this)(e)}inviteUser(e,n){return On.bind(this)(e,n)}createAccount(e){return Mn.bind(this)(e)}grantAccess(e){return Fn.bind(this)(e)}updateUserAttributes(e){return jn.bind(this)(e)}getRealtimeGroups(e,n){return dn.bind(this)(e,n)}postRealtime(e,n,r){return ln.bind(this)(e,n,r)}joinRealtime(e){return Ge.bind(this)(e)}getProfile(e){return gt.bind(this)(e)}getFile(e,n){return me.bind(this)(e,n)}secureRequest(e,n){return En.bind(this)(e,n)}getFormResponse(){return Ct.bind(this)()}getRecords(e,n){return $t.bind(this)(e,n)}getTables(e,n){return Kt.bind(this)(e,n)}getIndexes(e,n){return Ht.bind(this)(e,n)}getTags(e,n){return Wt.bind(this)(e,n)}deleteRecords(e,n){return Jt.bind(this)(e,n)}resendSignupConfirmation(){return pt.bind(this)()}recoverAccount(e=false){return mt.bind(this)(e)}getUsers(e,n){return Pt.bind(this)(e,n)}disableAccount(){return bt.bind(this)()}lastVerifiedEmail(e){return St.bind(this)(e)}unsubscribeNewsletter(e){return Dn.bind(this)(e)}subscribeNotification(e,n){return Bn.bind(this)({endpoint:e,keys:n})}unsubscribeNotification(e,n){return Qn.bind(this)({endpoint:e,keys:n})}vapidPublicKey(){return Kn.bind(this)()}pushNotification(e,n){return Hn.bind(this)(e,n)}getNewsletters(e,n){return Un.bind(this)(e,n)}getNewsletterSubscription(e,n){return vn.bind(this)(e,n)}requestUsernameChange(e){return kt.bind(this)(e)}grantPrivateRecordAccess(e){return Gt.bind(this)(e)}removePrivateRecordAccess(e){return Xt.bind(this)(e)}listPrivateRecordAccess(e,n){return Zt.bind(this)(e,n)}requestPrivateRecordAccessKey(e){return Yt.bind(this)(e)}deleteFiles(e){return Ft.bind(this)(e)}uploadFiles(e,n){return Pe.bind(this)(e,n)}mock(e,n){return Rn.bind(this)(e,n)}login(e){return qe.bind(this)(e)}logout(e){return ge.bind(this)(e)}signup(e,n){return _t.bind(this)(e,n)}resetPassword(e){return yt.bind(this)(e)}verifyEmail(e,n){return Rt.bind(this)(e,n)}verifyPhoneNumber(e,n){return Et.bind(this)(e,n)}forgotPassword(e,n){return At.bind(this)(e,n)}changePassword(e){return It.bind(this)(e)}updateProfile(e){return Tt.bind(this)(e)}postRecord(e,n,r){return Qt.bind(this)(e,n,r)}getSubscriptions(e,n){return In.bind(this)(e,n)}subscribe(e){return Tn.bind(this)(e)}unsubscribe(e){return Pn.bind(this)(e)}blockSubscriber(e){return Sn.bind(this)(e)}unblockSubscriber(e){return kn.bind(this)(e)}subscribeNewsletter(e){return xn.bind(this)(e)}bulkPostRecords(e){return Bt.bind(this)(e)}};A([I()],E.prototype,"getFeed"),A([I()],E.prototype,"closeRTC"),A([I()],E.prototype,"connectRTC"),A([I()],E.prototype,"spellcast"),A([I()],E.prototype,"getspell"),A([I()],E.prototype,"dopamine"),A([I()],E.prototype,"getUniqueId"),A([I()],E.prototype,"resendInvitation"),A([I()],E.prototype,"cancelInvitation"),A([I()],E.prototype,"getInvitations"),A([I()],E.prototype,"openIdLogin"),A([I()],E.prototype,"loginWithToken"),A([I()],E.prototype,"clientSecretRequest"),A([I()],E.prototype,"clientSecretRequestHistory"),A([I()],E.prototype,"cancelClientSecretRequest"),A([I()],E.prototype,"consumeTicket"),A([I()],E.prototype,"getConsumedTickets"),A([I()],E.prototype,"getTickets"),A([I()],E.prototype,"getRealtimeUsers"),A([I()],E.prototype,"sendInquiry"),A([I()],E.prototype,"blockAccount"),A([I()],E.prototype,"unblockAccount"),A([I()],E.prototype,"deleteAccount"),A([I()],E.prototype,"inviteUser"),A([I()],E.prototype,"createAccount"),A([I()],E.prototype,"grantAccess"),A([I()],E.prototype,"updateUserAttributes"),A([I()],E.prototype,"getRealtimeGroups"),A([I()],E.prototype,"postRealtime"),A([I()],E.prototype,"joinRealtime"),A([I()],E.prototype,"getProfile"),A([I()],E.prototype,"getFile"),A([I()],E.prototype,"secureRequest"),A([I()],E.prototype,"getFormResponse"),A([I()],E.prototype,"getRecords"),A([I()],E.prototype,"getTables"),A([I()],E.prototype,"getIndexes"),A([I()],E.prototype,"getTags"),A([I()],E.prototype,"deleteRecords"),A([I()],E.prototype,"resendSignupConfirmation"),A([I()],E.prototype,"recoverAccount"),A([I()],E.prototype,"getUsers"),A([I()],E.prototype,"disableAccount"),A([I()],E.prototype,"lastVerifiedEmail"),A([I()],E.prototype,"unsubscribeNewsletter"),A([I()],E.prototype,"subscribeNotification"),A([I()],E.prototype,"unsubscribeNotification"),A([I()],E.prototype,"vapidPublicKey"),A([I()],E.prototype,"pushNotification"),A([I()],E.prototype,"getNewsletters"),A([I()],E.prototype,"getNewsletterSubscription"),A([I()],E.prototype,"requestUsernameChange"),A([I()],E.prototype,"grantPrivateRecordAccess"),A([I()],E.prototype,"removePrivateRecordAccess"),A([I()],E.prototype,"listPrivateRecordAccess"),A([I()],E.prototype,"requestPrivateRecordAccessKey"),A([I()],E.prototype,"deleteFiles"),A([I()],E.prototype,"uploadFiles"),A([I()],E.prototype,"mock"),A([I({preventMultipleCalls:true})],E.prototype,"login"),A([I()],E.prototype,"logout"),A([I({preventMultipleCalls:true})],E.prototype,"signup"),A([I({preventMultipleCalls:true})],E.prototype,"resetPassword"),A([I({preventMultipleCalls:true})],E.prototype,"verifyEmail"),A([I({preventMultipleCalls:true})],E.prototype,"verifyPhoneNumber"),A([I({preventMultipleCalls:true})],E.prototype,"forgotPassword"),A([I({preventMultipleCalls:true})],E.prototype,"changePassword"),A([I({preventMultipleCalls:true})],E.prototype,"updateProfile"),A([I()],E.prototype,"postRecord"),A([I()],E.prototype,"getSubscriptions"),A([I()],E.prototype,"subscribe"),A([I()],E.prototype,"unsubscribe"),A([I()],E.prototype,"blockSubscriber"),A([I()],E.prototype,"unblockSubscriber"),A([I()],E.prototype,"subscribeNewsletter");var ti={};
233
+ exports.Skapi=E;exports.SkapiError=a;exports.Types=ti;//# sourceMappingURL=skapi.cjs.map
234
234
  //# sourceMappingURL=skapi.cjs.map