skapi-js 2.0.0-rc.6 → 2.0.0-rc.8

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'),Ir=require('cocochex'),mn=require('qpass');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var Ir__default=/*#__PURE__*/_interopDefault(Ir);var mn__default=/*#__PURE__*/_interopDefault(mn);/**
1
+ 'use strict';var amazonCognitoIdentityJs=require('amazon-cognito-identity-js'),Qs=require('cocochex'),ji=require('qpass');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var Qs__default=/*#__PURE__*/_interopDefault(Qs);var ji__default=/*#__PURE__*/_interopDefault(ji);/**
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 sr=Object.defineProperty;var or=Object.getOwnPropertyDescriptor;var oe=(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 E=(t,e,n,r)=>{for(var i=or(e,n),s=t.length-1,o;s>=0;s--)(o=t[s])&&(i=(o(e,n,i))||i);return i&&sr(e,n,i),i};var Y=typeof globalThis<"u"?globalThis:void 0,Ee=Y?.window;function ar(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(Ee)Ee.global=Ee,Ee.global._runningInNodeJS=false;else if(Y&&(Y.global=Y,typeof Y.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=ar(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});});}}Y.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);});}}Y.XMLHttpRequest=e,Y.window={_runningInNodeJS:true,alert:n=>console.error("[Alert]",n),sessionStorage:{getItem:n=>null,setItem:(n,r)=>{},removeItem:n=>{}},localStorage:{getItem:n=>{let r=oe("fs"),i=oe("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=oe("fs"),s=oe("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=oe("fs"),i=oe("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/${Y?.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 ee="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Me=BigInt(ee.length),cr=2*1024*1024,lr=["aud","cognito:username","event_id","exp","iat","iss","jti","origin_jti","secret_key","token_use"],tt={auth_time:"log",sub:"user_id"},ur=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l"],ot=["us31","us72","ap51","ap22","ap41","eu71","ap21","us32","us71","af51","ap31","ap43","ap23","ap42","ca01","eu01","eu72","eu51","eu73","eu11","me51","sa31"],nt=typeof TextEncoder<"u"?new TextEncoder:null;function dr(){if(typeof globalThis<"u")return globalThis.Buffer}function gr(t){if(nt)return nt.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 fr(t){if(t instanceof Uint8Array)return t;if(typeof t=="string")return gr(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=dr();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,d;for(let g=0;g<n.length;g+=16)l=r,u=i,c=s,d=o,r=b.ff(r,i,s,o,n[g],7,-680876936),o=b.ff(o,r,i,s,n[g+1],12,-389564586),s=b.ff(s,o,r,i,n[g+2],17,606105819),i=b.ff(i,s,o,r,n[g+3],22,-1044525330),r=b.ff(r,i,s,o,n[g+4],7,-176418897),o=b.ff(o,r,i,s,n[g+5],12,1200080426),s=b.ff(s,o,r,i,n[g+6],17,-1473231341),i=b.ff(i,s,o,r,n[g+7],22,-45705983),r=b.ff(r,i,s,o,n[g+8],7,1770035416),o=b.ff(o,r,i,s,n[g+9],12,-1958414417),s=b.ff(s,o,r,i,n[g+10],17,-42063),i=b.ff(i,s,o,r,n[g+11],22,-1990404162),r=b.ff(r,i,s,o,n[g+12],7,1804603682),o=b.ff(o,r,i,s,n[g+13],12,-40341101),s=b.ff(s,o,r,i,n[g+14],17,-1502002290),i=b.ff(i,s,o,r,n[g+15],22,1236535329),r=b.gg(r,i,s,o,n[g+1],5,-165796510),o=b.gg(o,r,i,s,n[g+6],9,-1069501632),s=b.gg(s,o,r,i,n[g+11],14,643717713),i=b.gg(i,s,o,r,n[g],20,-373897302),r=b.gg(r,i,s,o,n[g+5],5,-701558691),o=b.gg(o,r,i,s,n[g+10],9,38016083),s=b.gg(s,o,r,i,n[g+15],14,-660478335),i=b.gg(i,s,o,r,n[g+4],20,-405537848),r=b.gg(r,i,s,o,n[g+9],5,568446438),o=b.gg(o,r,i,s,n[g+14],9,-1019803690),s=b.gg(s,o,r,i,n[g+3],14,-187363961),i=b.gg(i,s,o,r,n[g+8],20,1163531501),r=b.gg(r,i,s,o,n[g+13],5,-1444681467),o=b.gg(o,r,i,s,n[g+2],9,-51403784),s=b.gg(s,o,r,i,n[g+7],14,1735328473),i=b.gg(i,s,o,r,n[g+12],20,-1926607734),r=b.hh(r,i,s,o,n[g+5],4,-378558),o=b.hh(o,r,i,s,n[g+8],11,-2022574463),s=b.hh(s,o,r,i,n[g+11],16,1839030562),i=b.hh(i,s,o,r,n[g+14],23,-35309556),r=b.hh(r,i,s,o,n[g+1],4,-1530992060),o=b.hh(o,r,i,s,n[g+4],11,1272893353),s=b.hh(s,o,r,i,n[g+7],16,-155497632),i=b.hh(i,s,o,r,n[g+10],23,-1094730640),r=b.hh(r,i,s,o,n[g+13],4,681279174),o=b.hh(o,r,i,s,n[g],11,-358537222),s=b.hh(s,o,r,i,n[g+3],16,-722521979),i=b.hh(i,s,o,r,n[g+6],23,76029189),r=b.hh(r,i,s,o,n[g+9],4,-640364487),o=b.hh(o,r,i,s,n[g+12],11,-421815835),s=b.hh(s,o,r,i,n[g+15],16,530742520),i=b.hh(i,s,o,r,n[g+2],23,-995338651),r=b.ii(r,i,s,o,n[g],6,-198630844),o=b.ii(o,r,i,s,n[g+7],10,1126891415),s=b.ii(s,o,r,i,n[g+14],15,-1416354905),i=b.ii(i,s,o,r,n[g+5],21,-57434055),r=b.ii(r,i,s,o,n[g+12],6,1700485571),o=b.ii(o,r,i,s,n[g+3],10,-1894986606),s=b.ii(s,o,r,i,n[g+10],15,-1051523),i=b.ii(i,s,o,r,n[g+1],21,-2054922799),r=b.ii(r,i,s,o,n[g+8],6,1873313359),o=b.ii(o,r,i,s,n[g+15],10,-30611744),s=b.ii(s,o,r,i,n[g+6],15,-1560198380),i=b.ii(i,s,o,r,n[g+13],21,1309151649),r=b.ii(r,i,s,o,n[g+4],6,-145523070),o=b.ii(o,r,i,s,n[g+11],10,-1120210379),s=b.ii(s,o,r,i,n[g+2],15,718787259),i=b.ii(i,s,o,r,n[g+9],21,-343485551),r=b.ad(r,l),i=b.ad(i,u),s=b.ad(s,c),o=b.ad(o,d);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 F=b;function at(t){if(t===0)return ee[0];let e="";for(;t>0;)e=ee[t%62]+e,t=Math.floor(t/62);return e}function B(t){return t.split("").reverse().reduce((e,n,r)=>e+ee.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 qe(){return typeof window>"u"||!!window?._runningInNodeJS}function j(){return !qe()&&typeof document<"u"&&typeof document.createElement=="function"}function Re(t){let e;try{e=JSON.stringify(t);}catch{throw new a("Invalid data type.",{code:"INVALID_REQUEST"})}if(new Blob([e]).size>cr)throw new a("Data should not exceed 2MB",{code:"INVALID_REQUEST"})}function rt(t){return t===""||t==="on"||t==="true"}function it(t){return t==="false"}function st(t,e,n){e.name&&n(t,e.name,e.value);}var Ae=j(),hr=typeof SubmitEvent<"u",pr=typeof HTMLFormElement<"u";function U(t,e,n){let r={},i=[];function s(u,c,d){if(e?.ignoreEmpty&&d==="")return;if(e?.nullIfEmpty&&d===""&&(d=null),typeof n=="function"){let _=n(c,d);_!==void 0&&(d=_);}let g=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 g[0]=="number")throw new a("Form key cannot start with an array index.",{code:"INVALID_REQUEST"});for(let _=0;_<g.length;_++){let p=g[_];_<g.length-1?(h[p]===void 0&&(typeof g[_+1]=="number"?h[p]=[]:h[p]={}),h=h[p]):h[p]===void 0?h[p]=d:Array.isArray(h[p])?h[p].push(d):h[p]=[h[p],d];}}function o(u,c,d){if(d instanceof File)u.push({name:c,file:d});else if(d instanceof FileList&&d&&d.length>0)for(let g=0;g<=d.length-1;g++){let h=d.item(g);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===""||rt(u.value)?s(r,u.name,true):it(u.value)?s(r,u.name,false):u.value&&s(r,u.name,u.value):u.type==="checkbox"&&(rt(u.value)?s(r,u.name,false):it(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(Ae&&(t instanceof HTMLInputElement||t instanceof HTMLSelectElement||t instanceof HTMLTextAreaElement))return l(t),Re(r),{data:r,files:i};if(Ae&&t instanceof FormData){for(let u of t.entries()){let c=u[0],d=u[1];if(d instanceof File||d instanceof FileList)o(i,c,d);else if(d instanceof Blob){let g=d;if(g.type==="application/json")try{let h=JSON.parse(g.text());s(r,c,h);}catch{s(r,c,g);}}else s(r,c,d);}return Re(r),{data:r,files:i}}if(Ae&&hr&&t instanceof SubmitEvent&&(t=t.target),Ae&&pr&&t instanceof HTMLFormElement){let u=t.querySelectorAll("input"),c=t.querySelectorAll("select"),d=t.querySelectorAll("textarea");for(let g=0;g<c.length;g++)st(r,c[g],s);for(let g=0;g<d.length;g++)st(r,d[g],s);for(let g=0;g<u.length;g++)l(u[g]);return Re(r),{data:r,files:i}}return Re(t),{data:t,files:i}}function fe(t){let e={};for(let n in t){let r=t[n];if(!lr.includes(n))if(tt[n])e[tt[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 Fe(t){if(t=Ar(t),t.split("-").length===7){let e=t.split("-"),n,r;try{n=ot[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 Ve(t,e){let n=ot.indexOf(t.slice(0,4)),r=ur[n],s=`${t.slice(4,-4)}-${r}${t.slice(-4)}-${e}`;return Rr(s)}function mr(t){let e=0n;for(let n of t){let r=ee.indexOf(n);if(r<0)throw new Error(`INVALID_PARAMETER: Invalid base62 character: ${n}`);e=e*Me+BigInt(r);}return e}function _r(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%Me);n=ee[i]+n,r/=Me;}return n.length<e&&(n="0".repeat(e-n.length)+n),n}function br(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 yr(t){let e=0n;for(let n of t)e=(e<<8n)+BigInt(n);return e}function wr(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 Er(t){let e=Array.from(fr(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 Rr(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>=ee.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=ee[i.length]+l+u,d=wr(s),g=_r(yr(d));return `${c}-${g}`}function Ar(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=ee.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),d=c.slice(s),g=c.slice(0,s),h=d+u;if(!/^[0-9A-Za-z]+$/.test(h)||!/^[0-9A-Za-z]+$/.test(g))throw new Error("INVALID_PARAMETER: Corrupt compressed token: "+e);let _=mr(i),p=br(_);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 P=Er(y);return `${h}-${g}-${P}`}function Tr(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 Sr(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 kr(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 xr(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 vr(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 Dr(t,e,n=[],r){let i=U(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 Ir__default.default(o,e,n)}catch(l){throw new a(l.message,{code:"INVALID_PARAMETER"})}}var f={UserId:Tr,PhoneNumber:Pr,Birthdate:Sr,Password:kr,Email:xr,Url:vr,Params:Dr};var L=null;function $e(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 lt(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 $e(n)}async function ut(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($e),n}async function dt(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($e),n}async function gt(t){return R.bind(this)("register-ticket",Object.assign({exec:"reg"},t),{auth:true})}async function ft(t){return R.bind(this)("register-ticket",Object.assign({exec:"unreg"},t),{auth:true})}var Mr=3600;async function ce(){if(await this.__connection,this.session){let t=Math.floor(Date.now()/1e3),n=this.session.getIdToken().getExpiration();if(n<t+Mr){this.log("request:requesting new token",null);try{await $.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),te.bind(this)(),new a("User login is required.",{code:"INVALID_REQUEST"})}function ct(t,e){return new Promise((n,r)=>{e.refreshSession(t.getRefreshToken(),(i,s)=>{this.log("getSession:refreshSessionCallback",{refreshErr:i,refreshedSession:s}),i?(te.bind(this)(),r(i)):s.isValid()?n(s):(te.bind(this)(),r(new a("Invalid session.",{code:"INVALID_REQUEST"})));});})}function $(){if(!this.userPool)throw new a("User pool is missing",{code:"INVALID_REQUEST"});let t=()=>{let s=L.getSignInUserSession().getIdToken().payload||null,o=fe(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),L=this.userPool.getCurrentUser(),!L){this.log("getSession:cognitoUser",L),te.bind(this)(),l(null);return}let d=g=>{let h=g.getIdToken().payload;if(this.log("getSession:respond:sessionAttribute",h),h["custom:service"]!==this.service)throw this.log("getSession:respond","invalid service, signing out"),te.bind(this)(),new a("Invalid session.",{code:"INVALID_REQUEST"});return this.session=g,t(),c||this._runOnUserUpdateListeners(this.user),this.session};L.getSession((g,h)=>{if(this.log("getSession:getSessionCallback",{err:g,session:h}),!h){te.bind(this)(),l(new a("Current session does not exist.",{code:"INVALID_REQUEST"}));return}if(g){ct.bind(this)(h,L).then(m=>o(d(m))).catch(l);return}let _=Math.floor(Date.now()/1e3),p=h.getIdToken(),y=p.getExpiration(),P=y<_;if(this.log("getSession:currentTime",_),this.log("getSession:idTokenExp",y),this.log("getSession:isExpired",P),this.log("getSession:existingBearerToken",this.bearerToken),this.bearerToken=p.getJwtToken(),P||u||!h.isValid())ct.bind(this)(h,L).then(m=>o(d(m))).catch(l);else try{o(d(h));}catch(m){l(m);}});}),n=(s,o)=>{let l=o||s.includes(this.service+"-")?s:this.service+"-"+F.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,d)=>{this.__request_signup_confirmation=null,this.__disabledAccount=null;let g=n(s,l),h=g.cognitoUsername,_=new amazonCognitoIdentityJs.AuthenticationDetails({Username:h,Password:o});g.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"?g.cognitoUser.completeNewPasswordChallenge(o,{},{onSuccess:P=>{L=g.cognitoUser,e().then(m=>c(this.user));},onFailure:P=>{d(new a(P.message||"Failed to authenticate user.",{code:P.code}));}}):d(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:P,code:m}=Te(p),I=typeof p?.message=="string"?p.message:"";if(m==="NotAuthorizedException"?I.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"]),P.code==="SIGNUP_CONFIRMATION_NEEDED"&&(this.__request_signup_confirmation=h),y.length){let x=y[1],T=y[0];d(new a(T,{code:x,cause:p}));}else d(P);}});}),createCognitoUser:n,signup:(s,o,l)=>new Promise((u,c)=>{this.userPool.signUp(s,o,l,null,(d,g)=>{if(d){let{parsed:h,code:_}=Te(d),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:d})):c(h);return}u(g);});})}}function Te(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 ht(t){await this.__authConnection;let e=t?.refreshToken||false;if(!e)return this.user;try{return await $.bind(this)().getSession(Object.assign({skipUserUpdateEventTrigger:!e,refreshToken:e},t)),this.user}catch{return null}}async function pt(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 $.bind(this)().authenticateUser(i,s,true,true),openid:n.openid}}function qr(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 Fr(t){let e=t.split(".");if(e.length!==3)throw new Error("Invalid JWT format");let r=e[1].replace(/-/g,"+").replace(/_/g,"/"),i=qr(r);return JSON.parse(i)}async function mt(t){await this.__authConnection,this.log("loginWithToken:params",t),t=f.Params(t,{idToken:"string",accessToken:"string",refreshToken:"string"},["idToken"]);let e=Fr(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=fe(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),L=new amazonCognitoIdentityJs.CognitoUser(r),L.setSignInUserSession(this.session),this.log("loginWithToken:cognitoUserRestored",{cognitoUserType:typeof L,cognitoUserKeys:Object.keys(L||{}),cognitoUser:L});}}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 V(){return await this.__connection,this.__user?.service===this.service?this.__user?.owner===this.host:(await he.bind(this)(),false)}async function te(t=false){let e=null;L&&(t?e=new Promise((r,i)=>{L.globalSignOut({onSuccess:s=>{this.log("globalSignOut:success",s),r(s);},onFailure:s=>{this.log("globalSignOut:error",s),i(s);}});}):L.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 he(t){await this.__connection;let{data:e}=U(t);return await te.bind(this)(e?.global),"SUCCESS: The user has been logged out."}async function _t(){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 bt(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 je(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 $.bind(this)().authenticateUser(e.username||e.email,e.password)}async function yt(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 he.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 d=c;if(typeof c=="string")d=f.Url(c);else if(typeof c=="boolean")d=c;else throw new a('"option.signup_confirmation" should be type: <string | boolean>.',{code:"INVALID_PARAMETER"});if(d&&!r.email)throw new a('"email" is required for signup confirmation.',{code:"INVALID_PARAMETER"});return d},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=$.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 d=["email_public","address_public","gender_public","birthdate_public","phone_number_public","misc","service","owner"];r[c]!==""&&(c==="username"||c==="password"||c==="access_group"||(d.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 $.bind(this)().signup(s.cognitoUsername,r.password,u),r.signup_confirmation?(L=s.cognitoUser,this.__request_signup_confirmation=s.cognitoUsername,"SUCCESS: The account has been created. User's signup confirmation is required."):i?je.bind(this)({email:r.username||r.email,password:r.password}):"SUCCESS: The account has been created."}async function wt(){await this.__connection;let t=await R.bind(this)("remove-account",{disable:this.__user.user_id},{auth:true});return await he.bind(this)(),t}async function Et(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)=>{$.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 Rt(t,e,n){await this.__connection;let r;if(!L)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?$.bind(this)().getSession({refreshToken:true}).then(()=>{this.__user&&(this.__user[t+"_verified"]=true),o(`SUCCESS: "${t}" is verified.`);}).catch(d=>{l(d);}):o("SUCCESS: Verification code has been sent.");},onFailure:c=>{l(new a(c.message||"Failed to request verification code.",{code:c?.code}));}};r?L?.verifyAttribute(t,r,u):(u.inputVerificationCode=null,L?.getAttributeVerificationCode(t,u,i));})}function At(t,e){return Rt.bind(this)("phone_number",t,e)}function It(t,e){return Rt.bind(this)("email",t,e)}async function Tt(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)=>{$.bind(this)().createCognitoUser(n.email).cognitoUser.forgotPassword({onSuccess:u=>{s("SUCCESS: Verification code has been sent.");},onFailure:u=>{let{parsed:c,code:d}=Te(u),g={UserNotFoundException:"NOT_EXISTS",InvalidParameterException:"INVALID_PARAMETER",NotAuthorizedException:"INVALID_REQUEST",LimitExceededException:"REQUEST_EXCEED",TooManyRequestsException:"REQUEST_EXCEED",CodeDeliveryFailureException:"CODE_DELIVERY_FAILURE"}[d]||c.code||d||"ERROR";o(new a(c.message,{code:g,cause:u}));}},r);})}async function Pt(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)=>{L.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}=Te(i);r(o);}return}n("SUCCESS: Password has been changed.");});})}async function St(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+"-"+F.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)=>{L?.updateAttributes(i,(l,u)=>{l&&o([l?.code||l?.name,l?.message||"Failed to update user settings."]),s(u);});}),await $.bind(this)().getSession({refreshToken:true}),this.user}return this.user}async function kt(t,e){t=U(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 xt(t){await this.__connection;let e=await R.bind(this)("last-verified-email",t,{auth:true});return e.includes("SUCCESS")?(await $.bind(this)().getSession({refreshToken:true}),this.user):e}async function vt(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 le=null,Nt=typeof SubmitEvent<"u",$r=typeof HTMLFormElement<"u",me=j(),Be=0;function Ut(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 Ke(t,e){return e>0?t/e*100:0}var Dt=t=>{let{auth:e,type:n,endpoints:r,stable:i}=t,s=r[0],o=r[1];if(Be++,n==="admin"){let l=Object.entries(s).filter(([u,c])=>u.includes(e?"_private":"_public")&&u!=="get_users_private"&&u!=="service_public"&&typeof c=="string").map(([,u])=>u);if(!l.length)throw new a("No available admin gateways.",{code:"INVALID_REQUEST"});return l[Be%l.length]}if(n==="record"){let l=Object.entries(o).filter(([u,c])=>u.includes(e?"record_private":"record_public")&&typeof c=="string").map(([,u])=>u);if(!l.length)throw new a("No available record gateways.",{code:"INVALID_REQUEST"});return i?l[0]:l[Be%l.length]}throw new a("Invalid gateway type.",{code:"INVALID_REQUEST"})};async function jr(t,e,n){let r=await Promise.all([this.admin_endpoint,this.record_endpoint]),i=r[0],s=r[1],o=t.split("?"),l=o.length>1?"?"+o[1]:"";switch(t=o[0],t){case "get-users":return i.get_users_private+t+l;case "service":return i.service_public+t+l;case "get-newsletters":case "get-public-newsletters":case "subscribe-newsletter":case "subscribe-public-newsletter":case "signupkey":case "admin-newsletter-request":case "admin-signup":case "confirm-signup":case "openid-logger":case "block-account":case "admin-edit-profile":case "remove-account":case "post-secure":case "recover-account":case "mock":case "grant-access":case "last-verified-email":case "ticket":case "register-ticket":case "get-newsletter-subscription":case "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 Dt.bind(this)({auth:e,type:"admin",endpoints:r})+t+l;case "post-record":return (e?s.post_private:s.post_public)+t+l;case "get-records":return (e?s.get_private:s.get_public)+t+l;case "del-files":case "del-records":return s.del_private+t+l;case "store-subscription":case "get-vapid-public-key":case "push-notification":case "delete-subscription":case "subscription":case "get-subscription":case "get-table":case "get-tag":case "get-uniqueid":case "get-index":case "get-signed-url":case "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 Dt.bind(this)({auth:e,type:"record",endpoints:r,stable:n})+t+l;default:return f.Url(t)+l}}var pe={};function Ct(){le&&(le.terminate(),le=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,d=null,g=await jr.bind(this)(t,!!i,!!n.stableGateway);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)&&(d=await ce.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 P=r?.ignoreService?{}:{service:u,owner:c};Object.assign(P,_),e=U(e).data,e?e&&typeof e=="object"&&(e=Object.assign(P,e)):e=P;let m=`${s}:${i?"auth":"public"}:${t}`,I=(()=>{if(e&&typeof e=="object"&&Object.keys(e).length&&!(me&&e instanceof FormData)){let k=function(D){return typeof D=="object"&&D!==null?Object.keys(D).sort().reduce((N,O)=>(typeof D[O]=="object"&&D[O]!==null?N[O]=k(D[O]):N[O]=D[O],N),{}):D};return F.hash(m+"/"+JSON.stringify(k(e)))}return F.hash(m+"/"+u)})(),{requestKey:x,requestKeyWithStartKey:T}=Br.bind(this)({params:e,url:t,fetchMore:p,hashedParams:I});if(!x||x&&typeof x=="object")return x;if(this.log("requestKey",T),typeof T=="string"&&pe[T]instanceof Promise)return this.log("request:returning pending",T),pe[T];let v={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&&(v["Content-Type"]=k);}else v["Content-Type"]="application/json";if(d&&(v.Authorization=d),n?.tokenHeaders){let k=(O,ir)=>typeof O=="string"?O:O===true?ir:null,D=k(n.tokenHeaders.accessToken,this.session?.accessToken?.jwtToken||null),N=k(n.tokenHeaders.idToken,this.bearerToken||this.session?.idToken?.jwtToken||d||null);D&&(v["X-Access-Token"]=D),N&&(v["X-Id-Token"]=N);}let W={public_identifier:this.__public_identifier,service:u,owner:c};v["Content-Meta"]=JSON.stringify(W),n.revalidate&&(v["Cache-Control"]="no-cache",v.Pragma="no-cache");let M={headers:v};if(n?.responseType&&(M.responseType=n.responseType),s==="GET"){if(e){let k=[];if(me&&e instanceof FormData?k=Array.from(e.entries()).map(([D,N])=>{let O=typeof N=="string"?N:N.name;return encodeURIComponent(D)+"="+encodeURIComponent(O)}):k=Object.keys(e).map(D=>{let N=e[D];return typeof N!="string"&&(N=JSON.stringify(N)),encodeURIComponent(D)+"="+encodeURIComponent(N)}),k.length){let D=g.includes("?")?g.endsWith("?")||g.endsWith("&")?"":"&":"?";g+=D+k.join("&");}}M.body=null;}else if(me&&e instanceof FormData)M.body=e;else if(v["Content-Type"]==="application/x-www-form-urlencoded"&&e&&typeof e=="object"){let k=new URLSearchParams;for(let D of Object.keys(e)){let N=e[D];k.append(D,typeof N=="string"?N:JSON.stringify(N));}M.body=k.toString();}else typeof e=="string"?M.body=e:M.body=e?JSON.stringify(e):null;if(M.method=s,le===null){let k={batchSize:this.requestBatchSize,breakWhenError:false,onProgress:D=>{this.onBatchProcess.forEach(N=>N(D));}};le=new mn__default.default(k);}return this.log("request-opt",M),new Promise((k,D)=>{le.add([async()=>{let N=Lt.bind(this)(g,M,y);pe[T]=N;try{let O=Kr.bind(this)({hashedParam:x,requestKeyWithStartKey:T,url:t,fetched:await N});return delete pe[T],this.log("request:end",O),k(O),O}catch(O){throw delete pe[T],this.log("request:err",O),D(O),O}}]);})}function Br(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+F.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+=F.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 Lt(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=Ut(l);u!==null?setTimeout(()=>{Lt(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 d=c.split(":"),g=d.splice(0,1)[0].trim(),h=d.join(":").trim();i(new a(h||c,{code:u.includes(g)?g:"ERROR"}));}else if(typeof c=="object"&&c?.message){let d=c?.code||(l?l.toString():null)||"ERROR",g=c.message,h=c?.cause;typeof g=="string"&&(g=g.trim()),i(new a(g,{cause:h,code:d}));}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:Ke(l.loaded,l.total),loaded:l.loaded,total:l.total,abort:()=>s.abort()});},s.upload&&(s.upload.onprogress=l=>{n({status:"upload",progress:Ke(l.loaded,l.total),loaded:l.loaded,total:l.total,abort:()=>s.abort()});})),s.send(e.body);})}function Kr(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 Se(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(Nt&&t instanceof SubmitEvent&&(t=t.target),$r&&t instanceof HTMLFormElement&&(t=new FormData(t)),!me||!(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((P,m)=>{l=new XMLHttpRequest,l.open("POST",_),l.onload=()=>{let I=l.responseText;try{I=JSON.parse(I);}catch{}if(l.status>=200&&l.status<300)P(I);else if(l.status===429){let x=l.getResponseHeader("Retry-After"),T=Ut(x);T!==null?setTimeout(()=>{u(_,p,y).then(P,m);},T):m("Too many requests");}else m(I);},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 d=[],g=[],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:P=null,url:m,cdn:I}=await R.bind(this)("get-signed-url",y,{auth:!!this.__user});h.push(I);let x=new FormData;for(let T in P)x.append(T,P[T]);x.append("file",p);try{await u(m,x,typeof i=="function"?T=>i({status:"upload",progress:Ke(T.loaded,T.total),currentFile:p,completed:d,failed:g,loaded:T.loaded,total:T.total,abort:()=>l.abort()}):null),d.push(p);}catch{g.push(p);}}return {completed:d,failed:g,bin_endpoints:h}}var Pe={};function A(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,d="",g={},h=false;if(Nt&&l instanceof SubmitEvent){l.preventDefault();let m=window.location.href;c=l.target;let I=new URL(c.action);d=I.href;let x=d?d.match(/(?<=\{).*?(?=\})/g):"";if(x)for(let T of x){if(!T)continue;let v=c.querySelector(`[name="${T}"]`);if(v)if(v.type==="file")for(let C=0;C<=v.files.length-1;C++)v.files[C]&&(g[T]||(g[T]=[]),g[T].push(new Promise((W,M)=>{let k=new FileReader;k.onload=function(){W(k.result);},k.readAsDataURL(v.files[C]),k.onerror=M;})));else d=d.replace(`{${T}}`,v.value);}c.getAttribute("action")===null?u=false:h=I.href===m;}let _=async m=>{if(d)for(let I in g)g[I].length&&(d=d.replace(`{${I}}`,(await Promise.all(g[I])).join(",")));return c&&u&&(window.sessionStorage.setItem(`${this.service}:${F.hash(d)}`,JSON.stringify(m)),h?window.location.replace(d):window.location.href=d),m},p,y=m=>{throw m instanceof a?m.name=r+"()":m=m instanceof Error?m:new a(m,{name:r+"()"}),m},P=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 Pe?.[m]||(Pe[m]=P().finally(()=>{delete Pe[m];})),Pe[m]}return P()};}}async function Ot(){await this.__connection;let t=`${this.service}:${F.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 Qr=256,Hr=256,Wr=256,Mt=256,Jr="\u{10FFFF}",zr=/[\u0000-\u001F\u007F]|\u{10FFFF}/u,Gr={"/":"%2F","!":"%21","*":"%2A","#":"%23"},Xr={"%2F":"/","%21":"!","%2A":"*","%23":"#"};function Zr(t){return t.replace(/%/g,"%25").replace(/[\/!*#]/g,n=>Gr[n]||n)}function K(t){return typeof t!="string"?t:t.replace(/%(2F|21|2A|23)/gi,n=>{let r=n.toUpperCase();return Xr[r]||n}).replace(/%25/gi,"%")}function J(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(zr.test(t)||t.includes(Jr))throw new a(`"${e}" cannot include control characters or unsupported sentinel characters.`,{code:"INVALID_PARAMETER"});if(s&&(t=Zr(t),i&&t.length>i))throw new a(`"${e}" should be <= ${i} characters. "/", "!", "*", "#" and "%" count as 3 characters each.`,{code:"INVALID_PARAMETER"});if(o&&t.startsWith("$"))throw new a(`"${e}" cannot start with "$".`,{code:"INVALID_PARAMETER"});return t}function ue(t,e="table.name",n={}){return J(t,e,{allowEmpty:n.allowEmpty===true,maxLength:Qr,blockKeyDelimiters:true})}function xe(t,e="tag",n={}){return J(t,e,{allowEmpty:n.allowEmpty===true,maxLength:Hr,blockKeyDelimiters:true})}function _e(t,e="index.name",n={}){return J(t,e,{allowEmpty:n.allowEmpty===true,maxLength:Wr,blockKeyDelimiters:true,disallowLeadingDollar:true})}function qt(t,e="index.value"){return J(t,e,{allowEmpty:true,maxLength:Mt})}function Qe(t){return typeof t=="string"&&t.slice(-1)==="."}function He(t,e){return J(t,e,{allowEmpty:true,maxLength:Mt,blockKeyDelimiters:true})}function Ft(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=J(t.record_id,"record_id",{allowEmpty:false,onlyAlphanumeric:true}):t?.unique_id&&(e.unique_id=t.unique_id),e}function We(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 ke=4503599627370496;function ve(t){if(typeof t=="number"){if(t>ke||t<-ke)throw new a(`Number value should be within range -${ke} ~ +${ke}`,{code:"INVALID_PARAMETER"});return t}if(typeof t=="boolean")return t;if(typeof t=="string")return qt(t,"index.value");throw new a('"index.value" should be type: <number | boolean | string>.',{code:"INVALID_PARAMETER"})}function Vt(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"?Qe(e.index.name)?He(t,"index.range"):qt(t,"index.range"):t}var De={},Yr=10080*60,ei=3600,$t=2;function ti(t,e){if(!e)return String($t);let n=Math.max(60,t-300)*1e3;return $t+"."+Math.floor(Date.now()/n)}function ni(t){if(!this.user?.user_id)return false;let e=t[6]==="**"?"**":parseInt(t[6]),n=this.user?.access_group??-1;return !(this.user.user_id!==t[3]&&(e==="**"||n<e))}async function ri(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 de(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 d=c=="**"?"private":parseInt(c);return d=d==0?"public":d==1?"authorized":d==99?"admin":d,d}let l={ip:c=>{let d=c.split("#"),g=d[0];d.length>1&&(r.unique_id=d.slice(1).join("#")),g.slice(-1)==="R"?(r.readonly=true,g=g.slice(0,-1)):r.readonly=false,/^\d{1,3}-\d{1,3}-\d{1,3}-\d{1,3}$/.test(g)&&(g=g.split("-").join("."),i=true),r.ip=g;},rec:c=>{if(!c)return;r.record_id=c;let d=c.substring(0,c.length-9),g=B(d);r.uploaded=g;},usr:c=>{r.user_id=c;},tbl:c=>{if(c&&!r.table.name){let d=c.split("/");r.table.name=K(d[0]),r.table.access_group=o(d[2]),d?.[3]&&(r.table.subscription.is_subscription_record=true);}},usr_tbl:c=>{let d=c.split("/");r.user_id||(r.user_id=d[0]),r.table.name||(r.table.name=K(d[1]),r.table.access_group=o(d[3]),d?.[4]&&(r.table.subscription.is_subscription_record=true));},idx:c=>{if(!c)return;let d=c.split("!"),g=K(d.splice(0,1)[0]),h=ii("!"+d.join("!"));r.index={name:g,value:h};},ref:c=>{c&&(r.reference=c.split("/")[0]);},tags:c=>{r.tags=Array.isArray(c)?c.map(d=>K(d)):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 d={},g=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 P=y[y.length-1],m=y[10];if(m==="__data__"&&P==="__json__.json")return {isDataFile:!0,rawUrl:_};let I=y[9],x=y[8],T=o(y[6]),v=_,C=T!=="public"&&ni.call(this,y)?{expires:ei,browserCache:Yr}:null;if(T!=="public")try{v=await se.bind(this)(_,{dataType:"endpoint",_ref:g});}catch(M){console.error("Error getting signed url for private file:",M),v=_;}let W={access_group:T,filename:P,url:v,path:p,size:B(I),uploaded:B(x),getFile:(M,k)=>{let D={dataType:M||"download",progress:k,_ref:g},N=()=>se.bind(this)(v,Object.assign({},D,{_update:W}));return C?se.bind(this)(_,Object.assign({},D,C)).catch(()=>N()):N()}};return {pathKey:m,obj:W}}catch{return null}}));for(let _ of h)if(_&&!_.isDataFile){if(d[_.pathKey]){d[_.pathKey].push(_.obj);continue}d[_.pathKey]=[_.obj];}}r.bin=d;},prv_acs:c=>{for(let d in c)["notify_subscribers","upload_to_feed","feed_referencing_records","notify_referencing_records"].includes(d)?r.table.subscription[d]=c[d]:d==="referencing_index_restrictions"&&Array.isArray(c[d])?r.source[d]=c[d].map(h=>h&&typeof h=="object"&&typeof h.name=="string"?Object.assign({},h,{name:K(h.name)}):h):r.source[d]=c[d];},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.__json__=="string"&&Object.keys(c).length===1)try{r.data=JSON.parse(c.__json__);return}catch{}if(c&&typeof c=="object"&&!Array.isArray(c)&&typeof c.__data__=="string"&&Object.keys(c).length===1&&c.__data__.endsWith("/__data__/__json__.json")){let d=c.__data__,g=s.find(h=>h.endsWith(d))||null;if(g){if(n){r.data=c;return}try{let h=await se.bind(this)(g,{dataType:"blob",_ref:r.reference||null}),_=await ri(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 d=c.split("/").slice(3);d.length>=12&&d[10]==="__data__"&&d[d.length-1]==="__json__.json"&&s.push(c);}catch{}let u=[];for(let c in l)if(t.hasOwnProperty(c)){let d=l[c](t[c]);d instanceof Promise&&u.push(d);}return i&&(r.user_id="anonymous:"+r.user_id),await Promise.all(u),r}function ii(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 jt(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(de.bind(this)(n[i]));return Promise.all(r)}async function se(t,e){if(typeof t!="string")throw new a('"url" should be type: string.',{code:"INVALID_PARAMETER"});let n=t,r=t.split("?"),i=r.shift()||"",s=r.length?"?"+r.join("?"):"",o=f.Url(i);t=o+s;let l=false,u=o.split("/"),d=u[2].split("."),g=null;d.length===3&&d[1]==="skapi"&&(g=d[0],l=true);let h=u.slice(3),_=false;if(!l&&(h[0]==="auth"||h[0]==="publ"))try{f.UserId(h[2]),f.UserId(h[3]),_=h[0]=="auth",l=!0;}catch{throw new a("Invalid file url.",{code:"INVALID_PARAMETER"})}let p=g?null:h[1];if(e=f.Params(e,{expires:["number",()=>0],browserCache:["number",()=>0],refresh:["boolean",()=>false],dataType:["base64","blob","endpoint","text","info",()=>"download"],progress:["function","undefined",null],_ref:[null,"string"],_update:I=>I}),e?.dataType==="info")return {url:t,filename:h[h.length-1],fileKey:h[h.length-2],access_group:h[6]==="**"?"private":h[6]==="01"?"authorized":h[6]==="00"?"public":parseInt(h[6]),uploader:h[3],record_id:h[4]==="records"?h[5]:"N/A",filesize:B(h[9]),uploaded:B(h[8])};let y=t.split("/").slice(-1)[0],P=e.expires;if(P){if(!l)throw new a("Expires option can only be used on skapi cdn endpoints.",{code:"INVALID_PARAMETER"});if(P<0)throw new a('"config.expires" should be > 0. (seconds)',{code:"INVALID_PARAMETER"});let I={request:g?"get-host":"get",id:g||h[5],key:n.split("?")[0],expires:P};p&&(I.service=p);let x=e.browserCache,T={auth:true};if(x){if(x<0)throw new a('"config.browserCache" should be > 0. (seconds)',{code:"INVALID_PARAMETER"});T.method="get",T.stableGateway=true,I.browser_cache=x;let v=this.session?.idToken?.payload?.sub||this.user?.user_id;v&&(I.uid=v),I.nocache=ti(P,e.refresh);}t=(await R.bind(this)("get-signed-url",I,T)).url;}else if(_){let I=Math.floor(Date.now()/1e3);if(!this.bearerToken&&(!this.session?.idToken?.payload?.exp||this.session.idToken.payload.exp<I)){this.log("getFile:requesting new token",null);try{await $.bind(this)().getSession({refreshToken:!0}),this.log("getFile:received new tokens",{exp:this.session?.idToken?.payload?.exp,currTime:I,expiresIn:this.session?.idToken?.payload?.exp-I,token:this.session?.accessToken?.jwtToken,refreshToken:this.session?.refreshToken?.token});}catch(C){throw this.log("getFile:new token error",C),new a("User login is required.",{code:"INVALID_REQUEST"})}}let x=this.bearerToken||this.session?.idToken?.jwtToken;if(!x||!this.user?.user_id)throw new a("User login is required.",{code:"INVALID_REQUEST"});t+=`${t.includes("?")?"&":"?"}t=${encodeURIComponent(x)}`;let T=h[6]==="**"?"**":parseInt(h[6]),v=this.user?.access_group??-1;if(this.user.user_id!==h[3]&&(T==="**"||v<T)){let C=h[5];if(this.__private_access_key[C]&&typeof this.__private_access_key[C]=="string")t+=`&p=${encodeURIComponent(this.__private_access_key[C])}`;else if(this.owner!==this.host)try{let W=await this.requestPrivateRecordAccessKey({record_id:C,reference_id:e?._ref});t+=`&p=${encodeURIComponent(W)}`;}catch{}}}if(e?.dataType==="endpoint")return e._update&&(e._update.url=t),t;if(e?.dataType==="download"){let I=document.createElement("a");return I.href=t,document.body.appendChild(I),I.setAttribute("download",y),I.target="_blank",I.click(),document.body.removeChild(I),null}return new Promise(async(I,x)=>{try{let T=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 v=new FileReader;v.onloadend=()=>I(v.result),v.readAsDataURL(T);}else I(T);}catch(T){if(e?.browserCache&&!e?.refresh)try{I(await se.bind(this)(n,Object.assign({},e,{refresh:!0})));return}catch(v){x(v);return}x(T);}})}function Ne(t,e){return `${t||this.service}/${e||this.owner}`}function Je(t,e){let n=this.__my_unique_ids[t];return n?n[e]:void 0}function Bt(t,e,n){this.__my_unique_ids[t]||(this.__my_unique_ids[t]={}),this.__my_unique_ids[t][e]=n;}function si(t,e){this.__my_unique_ids[t]&&delete this.__my_unique_ids[t][e];}async function Kt(t,e=false){t=U(t,{ignoreEmpty:true}).data||{};let n=Ne.bind(this)(t?.service,t?.owner),r="",i=Ft(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=Je.bind(this)(n,r);s&&(e?si.bind(this)(n,r):t.record_id=s);}}else {let s=await V.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:d=>ue(d,"table.name"),access_group:We.bind(this),subscription:d=>f.UserId(d,'User ID in "subscription"')},reference:"string",index:{name:["$updated","$uploaded","$referenced_count","$user_id",d=>_e(d,"index.name")],value:d=>{let g={$updated:"number",$uploaded:"number",$referenced_count:"number",$user_id:f.UserId};if(g.hasOwnProperty(c.index.name)){let h=g[c.index.name];if(typeof h=="function")return h(d);if(h!==typeof d)throw new a(`"index.value" should be type: ${h}.`,{code:"INVALID_PARAMETER"});return d}return typeof d=="string"&&!d?"":typeof d=="string"&&Qe(c.index.name)?He(d,"index.value"):ve(d)},condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq"],range:d=>Vt(d,c)},tag:d=>{if(d==null)return d;if(typeof d=="string")return xe(d,"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 Qt(t,e){await this.__connection;let n=await Kt.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(de.bind(this)(i.list[o]));return i.list=await Promise.all(s),i}function Ht(t){let e="",n=[],r=Ne.bind(this)(t?.service,t?.owner),i=f.Params(t||{},{record_id:o=>{let l=typeof o=="string"?Je.bind(this)(r,o):void 0;return l||J(o,"record_id",{allowEmpty:false})},unique_id:["string",null],readonly:"boolean",table:{name:o=>ue(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:We.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=>_e(c,'"name" in "index_restrictions"'),value:c=>ve(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=Je.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),J(l,"reference.record_id",{allowEmpty:false,onlyAlphanumeric:true}))})}},index:[null,{name:o=>_e(o,"index.name"),value:o=>ve(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=>xe(l,"tag"))},remove_bin:o=>{if(!o)return null;let l=[];if(Array.isArray(o))for(let u of o)if(typeof u=="string")l.push(u.split("?")[0]);else if(u.url&&u.size&&u.filename){let d=u.url.split("/").slice(0,3).join("/")+"/"+u.path;l.push(d);}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 Wt(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=Ht.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),d=await Promise.all(c.map(h=>de.bind(this)(h,"called from postRecord"))),g=Ne.bind(this)(n,r);for(let h=0;h<c.length;h++){let _=c[h],p=d[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&&Bt.bind(this)(g,p.unique_id,p.record_id);}return d}async function Jt(t,e,n){if(await this.__connection,!e)throw new a('"config" argument is required.',{code:"INVALID_PARAMETER"});let r=Ht.bind(this)(e),i=r.config,s=r.progress,o=r.is_reference_post,l={auth:!!this.__user,method:"post"},u=[],c=U(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 d=null;d=Object.assign({data:c.data},i);let g={};typeof s=="function"&&(g.progress=s),Object.keys(g).length&&Object.assign(l,{fetchOptions:g});let h=await R.bind(this)("post-record",d,l);if(j()&&u.length){let y=new FormData;for(let I of u)y.append(I.name,I.file,I.file.name);let P={record_id:h.rec,progress:s};i.hasOwnProperty("service")&&(P.service=i.service);let{bin_endpoints:m}=await Se.bind(this)(y,P);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 de.bind(this)(h,"called from postRecord",true);if(_&&(p.data=c.data),p.unique_id){let y=Ne.bind(this)(i?.service,i?.owner);Bt.bind(this)(y,p.unique_id,p.record_id),j()&&(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 zt(t,e){let n=await R.bind(this)("get-table",f.Params(t||{},{table:i=>ue(i,"table",{allowEmpty:true}),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=K(i.table));}return n}async function Gt(t,e){if(!t?.table)throw new a('"table" is required.',{code:"INVALID_PARAMETER"});let n=f.Params(t||{},{table:s=>ue(s,"table",{allowEmpty:true}),index:s=>_e(s,"index.name"),order:{by:["average_number","total_number","number_count","average_bool","total_bool","bool_count","string_count","index_name","number_of_records"],value:s=>{if(t?.order?.by==="index_name"&&typeof s=="string")return J(s,"order.value",{allowEmpty:true,maxLength:256,blockKeyDelimiters:true});if(typeof s!="string"&&typeof s!="number"&&typeof s!="boolean")throw new a('"order.value" should be type: <string | number | boolean>.',{code:"INVALID_PARAMETER"});return s},condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq","!=","ne"]}},["table"]);if(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:K(o[1]),index:K(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 Xt(t,e){let n=await R.bind(this)("get-tag",f.Params(t||{},{table:r=>ue(r,"table",{allowEmpty:true}),tag:r=>xe(r,"tag",{allowEmpty:true}),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:K(i[1]),tag:K(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 Yt(t,e){await this.__connection;let n=await Kt.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 en(t){return sn.bind(this)({record_id:t.record_id,user_id:t.user_id,execute:"add"})}function tn(t){return sn.bind(this)({record_id:t.record_id,user_id:t.user_id||null,execute:"remove"})}async function nn(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 rn(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(De[e])return De[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 De[e];});return De[e]=r,r}function sn(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 S={},q={},Q={},G={},z={},Ue={},Ce={};function on(t,e,n){t[e]||(t[e]=[]),t[e].push(n);}async function Le(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 Ge(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 S[s].setRemoteDescription(new RTCSessionDescription(i));let l=await S[s].createAnswer();await S[s].setLocalDescription(l),o.send(JSON.stringify({action:"rtc",uid:s,content:{sdpanswer:l},token:this.session.accessToken.jwtToken}));}S?.[e]?t?(await Le(Ce,e,i=>r.bind(this)(i,e,n)),await r.bind(this)(t,e,n)):await Le(Ce,e,i=>r.bind(this)(i,e,n)):t&&on(Ce,e,t);}async function Xe(t,e){if(this.log("receiveIceCandidate",t),S?.[e]&&S[e]?.remoteDescription&&S[e]?.remoteDescription?.type){if(!t)return Le(Ue,e,n=>S[e].addIceCandidate(n));await Le(Ue,e,n=>S[e].addIceCandidate(n)),await S[e].addIceCandidate(t);}else on(Ue,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 Ce[s],delete Ue[s],q[s]&&Object.values(q[s]).forEach(o=>{o.readyState!=="closed"&&o.close();}),delete q[s],S?.[s]){S[s].connectionState!=="closed"&&(S[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:S[s],timestamp:new Date().toISOString(),state:S[s].connectionState,iceState:S[s].iceConnectionState,signalingState:S[s].signalingState};z[s]&&z[s](o),this.log("closeRTC",o);}delete z[s],delete G[s],delete Q[s],delete S[s];};if(r)for(let s in S)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 an(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 cn(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}]};S?.[n]||(S[n]=new RTCPeerConnection(s)),t?.media&&(this.__mediaStream=await an(t.media),this.__mediaStream.getTracks().forEach(o=>{S[n].addTrack(o,this.__mediaStream);})),z[n]=e,q[n]||(q[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(q[n]).includes(u))throw new a(`Data channel with the protocol "${u}" already exists.`,{code:"INVALID_REQUEST"});let c=S[n].createDataChannel(u,l);q[n][u]=c;}for(let o in q[n]){let l=q[n][o];dn.bind(this)(n,l);}return un.bind(this)(n,["onnegotiationneeded"]),await ze.bind(this)(n),{hangup:()=>Q[n]&&Q[n](false),connection:new Promise(o=>{Q[n]=(l=>{if(this.log("receiver picked up the call",n),!l)return H.bind(this)({cid:n}),null;S[n].onnegotiationneeded=()=>{this.log("onnegotiationneeded",`sending offer to "${n}".`),ze.bind(this)(n),z[n]&&z[n]({type:"negotiationneeded",target:S[n],timestamp:new Date().toISOString(),signalingState:S[n].signalingState,connectionState:S[n].iceConnectionState,gatheringState:S[n].iceGatheringState});},o({target:S[n],channels:q[n],hangup:()=>H.bind(this)({cid:n}),media:this.__mediaStream});}).bind(this);})}}function ln(t){return async(e,n)=>{e=e||{},e=U(e).data;let r=t.sender_cid,i=await this.__socket;if(!G[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 S?.[r]||(S[r]=new RTCPeerConnection({iceServers:[{urls:s}]})),e?.media&&(this.__mediaStream=await an(e.media),this.__mediaStream.getTracks().forEach(o=>{S[r].addTrack(o,this.__mediaStream);})),delete G[r],z[r]=n,q[r]||(q[r]={}),S[r].ondatachannel=o=>{this.log("ondatachannel",`received data channel "${o.channel.label}".`);let l=o.channel;q[r][l.label]=l,dn.bind(this)(r,l);},un.bind(this)(r,["onnegotiationneeded"]),await Ge.bind(this)(null,r),await Xe.bind(this)(null,r),i.send(JSON.stringify({action:"rtc",uid:r,content:{pickup:this.user.user_id},token:this.session.accessToken.jwtToken})),{target:S[r],channels:q[r],hangup:()=>H.bind(this)({cid:r}),media:this.__mediaStream}}}async function ze(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 S[t].createOffer();await S[t].setLocalDescription(n);let r=S[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 oi(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=z[e]||(()=>{}),i=t.candidate;this.log("ice gathering state set to",S[e].iceGatheringState),r({type:"icecandidate",target:S[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:S[e].iceGatheringState,connectionState:S[e].iceConnectionState}),n.send(JSON.stringify({action:"rtc",uid:e,content:{candidate:i},token:this.session.accessToken.jwtToken}));}function un(t,e){let n=new Set(e),r=z[t]||(o=>{}),i=S[t],s={ontrack:o=>{r({type:"track",target:i,timeStamp:o.timeStamp,streams:o.streams,track:o.track});},onicecandidate:o=>{oi.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:()=>{ze.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 dn(t,e,n){let r=new Set(n),i=z[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),q[t]&&(delete q[t][e.label],Object.keys(q[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 re,ne=null,be=true,ge=0;async function ai(){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 Ze=null;async function gn(){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebSocket is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});be=true;let t=this.__socket?await this.__socket:this.__socket;H.bind(this)({close_all:true}),re&&Ye.bind(this)({group:null}),ge=0,ne&&(ne.terminate(),ne=null);try{t&&t.close();}catch{}return window.removeEventListener("visibilitychange",Ze),this.__socket=null,null}async function Oe(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(be&&(Ze=()=>{!document.hidden&&!be&&Oe.bind(this)(t,0,"reconnect");},this.__socket instanceof Promise))return this.__socket;ne&&(ne.terminate(),ne=null),this.__socket=new Promise(async r=>{await ce.bind(this)(),setTimeout(async()=>{let i=await ai.bind(this)();i.onopen=()=>{be=false,ge=0,n!=="reconnect"&&window.addEventListener("visibilitychange",Ze),this.log("realtime onopen","Connected to WebSocket server."),t({type:"success",message:"Connected to WebSocket server."}),re&&i.send(JSON.stringify({action:"joinRoom",rid:re,token:this.session.accessToken.jwtToken}));let s=`
206
+ var Us=Object.defineProperty;var Ns=Object.getOwnPropertyDescriptor;var Se=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var I=(e,t,r,n)=>{for(var i=Ns(t,r),s=e.length-1,o;s>=0;s--)(o=e[s])&&(i=(o(t,r,i))||i);return i&&Us(t,r,i),i};function Tr(e){let r=(typeof globalThis<"u"?globalThis:void 0)?.process;if(r&&typeof r.getBuiltinModule=="function")try{return r.getBuiltinModule(e)}catch{}try{if(typeof Se=="function")return Se(e)}catch{}return null}var kt,vt,Ut=()=>kt!==void 0?kt:kt=Tr("fs"),Nt=()=>vt!==void 0?vt:vt=Tr("path"),pe=typeof globalThis<"u"?globalThis:void 0,st=pe?.window;function Ds(e){if(Buffer)return Buffer.from(e).toString("base64");let t="",r=new Uint8Array(e),n=32768;for(let i=0;i<r.length;i+=n){let s=r.subarray(i,i+n);t+=String.fromCharCode.apply(null,Array.from(s));}if(typeof btoa=="function")return btoa(t);throw new Error("No base64 encoder available in this environment.")}if(st)st.global=st,st.global._runningInNodeJS=false;else if(pe&&(pe.global=pe,typeof pe.window>"u")){class e{constructor(){this.result=null;this.error=null;this.onload=null;this.onloadend=null;this.onerror=null;}readAsDataURL(n){n.arrayBuffer().then(i=>{let s=Ds(i),o=n.type||"application/octet-stream";this.result=`data:${o};base64,${s}`,this.onload&&this.onload({target:this}),this.onloadend&&this.onloadend({target:this});}).catch(i=>{this.error=i,this.onerror&&this.onerror({target:this});});}readAsArrayBuffer(n){n.arrayBuffer().then(i=>{this.result=i,this.onload&&this.onload({target:this}),this.onloadend&&this.onloadend({target:this});}).catch(i=>{this.error=i,this.onerror&&this.onerror({target:this});});}readAsText(n,i="utf-8"){n.text().then(s=>{this.result=s,this.onload&&this.onload({target:this}),this.onloadend&&this.onloadend({target:this});}).catch(s=>{this.error=s,this.onerror&&this.onerror({target:this});});}}pe.FileReader=e;class t{constructor(){this.status=0;this.statusText="";this.readyState=0;this.responseText="";this.response=null;this.responseType="";this.responseURL="";this.timeout=0;this.withCredentials=false;this.onload=null;this.onerror=null;this.onabort=null;this.ontimeout=null;this.onprogress=null;this.onreadystatechange=null;this.upload={onprogress:null};this._method="GET";this._url="";this._headers={};this._aborted=false;}open(n,i){this._method=n,this._url=i,this.readyState=1;}setRequestHeader(n,i){this._headers[n]=i;}getResponseHeader(n){return null}abort(){this._aborted=true,this.onabort&&this.onabort({});}send(n){if(this._aborted)return;let i={method:this._method,headers:this._headers};n&&this._method!=="GET"&&this._method!=="HEAD"&&(i.body=n),fetch(this._url,i).then(async s=>{if(!this._aborted){if(this.status=s.status,this.statusText=s.statusText,this.responseURL=s.url,this.readyState=4,this.responseType==="blob")this.response=await s.blob();else if(this.responseType==="json")try{this.response=await s.json();}catch{this.response=null;}else this.responseType==="arraybuffer"?this.response=await s.arrayBuffer():(this.responseText=await s.text(),this.response=this.responseText);this.onload&&this.onload({});}}).catch(s=>{this._aborted||this.onerror&&this.onerror(s);});}}pe.XMLHttpRequest=t,pe.window={_runningInNodeJS:true,alert:r=>console.error("[Alert]",r),sessionStorage:{getItem:r=>null,setItem:(r,n)=>{},removeItem:r=>{}},localStorage:{getItem:r=>{let n=Ut(),i=Nt();if(!n||!i)return null;try{let s=i.resolve(process.cwd(),"states","localStorage",`${r}.skapi`);return n.existsSync(s)?n.readFileSync(s,"utf8"):null}catch{return null}},setItem:(r,n)=>{let i=Ut(),s=Nt();if(!(!i||!s))try{let o=s.resolve(process.cwd(),"states","localStorage");i.existsSync(o)||i.mkdirSync(o,{recursive:!0});let c=s.resolve(o,`${r}.skapi`);i.writeFileSync(c,n,"utf8");}catch{}},removeItem:r=>{let n=Ut(),i=Nt();if(!(!n||!i))try{let s=i.resolve(process.cwd(),"states","localStorage",`${r}.skapi`);n.existsSync(s)&&n.unlinkSync(s);}catch{}}},location:{href:"",origin:"",hostname:"",protocol:"",replace:r=>{}},navigator:{userAgent:`nodejs/${pe?.process?.versions?.node||"unknown"}`,mediaDevices:{getUserMedia:async r=>{throw new Error("getUserMedia is not supported in Node.js environment.")}}},addEventListener:()=>{},removeEventListener:()=>{}};}var a=class extends Error{constructor(t,r){if(Array.isArray(t)&&t.length<=2){let n=t[1];if(t.length>2)for(let i=2;i<t.length&&typeof t[i]=="string";i++)n+=t[i];super((n||"Something went wrong.").trim()),this.name=r?.name||"SKAPI",this.code=r?.code||t[0]||"ERROR",r?.cause&&(this.cause=r.cause);}else super((t?.message||(typeof t=="string"?t:"Something went wrong.")).trim()),typeof t=="string"?(this.name=r?.name||"SKAPI",this.code=r?.code||"ERROR",r?.cause&&(this.cause=r.cause)):t instanceof Error?(this.cause=t,this.name=t.name,t.hasOwnProperty("code")&&(this.code=t.code)):typeof t=="object"&&t?.code&&t?.message&&(this.name=r?.name||"SKAPI",this.code=r?.code||"ERROR",this.cause=t?.cause);}};var he="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Dt=BigInt(he.length),xs=2*1024*1024,Cs=["aud","cognito:username","event_id","exp","iat","iss","jti","origin_jti","secret_key","token_use"],Sr={auth_time:"log",sub:"user_id"},Os=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l"],Dr=["us31","us72","ap51","ap22","ap41","eu71","ap21","us32","us71","af51","ap31","ap43","ap23","ap42","ca01","eu01","eu72","eu51","eu73","eu11","me51","sa31"],kr=typeof TextEncoder<"u"?new TextEncoder:null;function Ls(){if(typeof globalThis<"u")return globalThis.Buffer}function K(e){if(kr)return kr.encode(e);let t=unescape(encodeURIComponent(e)),r=new Uint8Array(t.length);for(let n=0;n<t.length;n++)r[n]=t.charCodeAt(n);return r}function xt(e){if(e instanceof Uint8Array)return e;if(typeof e=="string")return K(e);if(typeof ArrayBuffer<"u"&&e instanceof ArrayBuffer)return new Uint8Array(e);if(typeof ArrayBuffer<"u"&&ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);if(Array.isArray(e))return Uint8Array.from(e);let t=Ls();if(t)return new Uint8Array(t.from(e));throw new Error("No byte conversion available in this environment.")}var A=class A{static hash(t){typeof t!="string"&&(console.warn("coercing non-string value to empty string"),t="");let r=A.sb(t),n=1732584193,i=-271733879,s=-1732584194,o=271733878,c,l,u,g;for(let f=0;f<r.length;f+=16)c=n,l=i,u=s,g=o,n=A.ff(n,i,s,o,r[f],7,-680876936),o=A.ff(o,n,i,s,r[f+1],12,-389564586),s=A.ff(s,o,n,i,r[f+2],17,606105819),i=A.ff(i,s,o,n,r[f+3],22,-1044525330),n=A.ff(n,i,s,o,r[f+4],7,-176418897),o=A.ff(o,n,i,s,r[f+5],12,1200080426),s=A.ff(s,o,n,i,r[f+6],17,-1473231341),i=A.ff(i,s,o,n,r[f+7],22,-45705983),n=A.ff(n,i,s,o,r[f+8],7,1770035416),o=A.ff(o,n,i,s,r[f+9],12,-1958414417),s=A.ff(s,o,n,i,r[f+10],17,-42063),i=A.ff(i,s,o,n,r[f+11],22,-1990404162),n=A.ff(n,i,s,o,r[f+12],7,1804603682),o=A.ff(o,n,i,s,r[f+13],12,-40341101),s=A.ff(s,o,n,i,r[f+14],17,-1502002290),i=A.ff(i,s,o,n,r[f+15],22,1236535329),n=A.gg(n,i,s,o,r[f+1],5,-165796510),o=A.gg(o,n,i,s,r[f+6],9,-1069501632),s=A.gg(s,o,n,i,r[f+11],14,643717713),i=A.gg(i,s,o,n,r[f],20,-373897302),n=A.gg(n,i,s,o,r[f+5],5,-701558691),o=A.gg(o,n,i,s,r[f+10],9,38016083),s=A.gg(s,o,n,i,r[f+15],14,-660478335),i=A.gg(i,s,o,n,r[f+4],20,-405537848),n=A.gg(n,i,s,o,r[f+9],5,568446438),o=A.gg(o,n,i,s,r[f+14],9,-1019803690),s=A.gg(s,o,n,i,r[f+3],14,-187363961),i=A.gg(i,s,o,n,r[f+8],20,1163531501),n=A.gg(n,i,s,o,r[f+13],5,-1444681467),o=A.gg(o,n,i,s,r[f+2],9,-51403784),s=A.gg(s,o,n,i,r[f+7],14,1735328473),i=A.gg(i,s,o,n,r[f+12],20,-1926607734),n=A.hh(n,i,s,o,r[f+5],4,-378558),o=A.hh(o,n,i,s,r[f+8],11,-2022574463),s=A.hh(s,o,n,i,r[f+11],16,1839030562),i=A.hh(i,s,o,n,r[f+14],23,-35309556),n=A.hh(n,i,s,o,r[f+1],4,-1530992060),o=A.hh(o,n,i,s,r[f+4],11,1272893353),s=A.hh(s,o,n,i,r[f+7],16,-155497632),i=A.hh(i,s,o,n,r[f+10],23,-1094730640),n=A.hh(n,i,s,o,r[f+13],4,681279174),o=A.hh(o,n,i,s,r[f],11,-358537222),s=A.hh(s,o,n,i,r[f+3],16,-722521979),i=A.hh(i,s,o,n,r[f+6],23,76029189),n=A.hh(n,i,s,o,r[f+9],4,-640364487),o=A.hh(o,n,i,s,r[f+12],11,-421815835),s=A.hh(s,o,n,i,r[f+15],16,530742520),i=A.hh(i,s,o,n,r[f+2],23,-995338651),n=A.ii(n,i,s,o,r[f],6,-198630844),o=A.ii(o,n,i,s,r[f+7],10,1126891415),s=A.ii(s,o,n,i,r[f+14],15,-1416354905),i=A.ii(i,s,o,n,r[f+5],21,-57434055),n=A.ii(n,i,s,o,r[f+12],6,1700485571),o=A.ii(o,n,i,s,r[f+3],10,-1894986606),s=A.ii(s,o,n,i,r[f+10],15,-1051523),i=A.ii(i,s,o,n,r[f+1],21,-2054922799),n=A.ii(n,i,s,o,r[f+8],6,1873313359),o=A.ii(o,n,i,s,r[f+15],10,-30611744),s=A.ii(s,o,n,i,r[f+6],15,-1560198380),i=A.ii(i,s,o,n,r[f+13],21,1309151649),n=A.ii(n,i,s,o,r[f+4],6,-145523070),o=A.ii(o,n,i,s,r[f+11],10,-1120210379),s=A.ii(s,o,n,i,r[f+2],15,718787259),i=A.ii(i,s,o,n,r[f+9],21,-343485551),n=A.ad(n,c),i=A.ad(i,l),s=A.ad(s,u),o=A.ad(o,g);return A.rh(n)+A.rh(i)+A.rh(s)+A.rh(o)}static rh(t){let r="";for(let n=0;n<=3;n++)r+=A.alphabet.charAt(t>>n*8+4&15)+A.alphabet.charAt(t>>n*8&15);return r}static ad(t,r){let n=(t&65535)+(r&65535);return (t>>16)+(r>>16)+(n>>16)<<16|n&65535}static rl(t,r){return t<<r|t>>>32-r}static cm(t,r,n,i,s,o){return A.ad(A.rl(A.ad(A.ad(r,t),A.ad(i,o)),s),n)}static ff(t,r,n,i,s,o,c){return A.cm(r&n|~r&i,t,r,s,o,c)}static gg(t,r,n,i,s,o,c){return A.cm(r&i|n&~i,t,r,s,o,c)}static hh(t,r,n,i,s,o,c){return A.cm(r^n^i,t,r,s,o,c)}static ii(t,r,n,i,s,o,c){return A.cm(n^(r|~i),t,r,s,o,c)}static sb(t){let r,n=(t.length+8>>6)+1,i=new Array(n*16);for(r=0;r<n*16;r++)i[r]=0;for(r=0;r<t.length;r++)i[r>>2]|=t.charCodeAt(r)<<r%4*8;return i[r>>2]|=128<<r%4*8,i[n*16-2]=t.length*8,i}};A.alphabet="0123456789abcdef";var W=A;function xr(e){if(e===0)return he[0];let t="";for(;e>0;)t=he[e%62]+t,e=Math.floor(e/62);return t}function te(e){return e.split("").reverse().reduce((t,r,n)=>t+he.indexOf(r)*62**n,0)}function Ee(e=6){let t="",r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",n=r.length,i=0;for(;i<e;)t+=r.charAt(Math.floor(Math.random()*n)),i+=1;return t}function Ct(){return typeof window>"u"||!!window?._runningInNodeJS}function J(){return !Ct()&&typeof document<"u"&&typeof document.createElement=="function"}function ot(e){let t;try{t=JSON.stringify(e);}catch{throw new a("Invalid data type.",{code:"INVALID_REQUEST"})}if(new Blob([t]).size>xs)throw new a("Data should not exceed 2MB",{code:"INVALID_REQUEST"})}function vr(e){return e===""||e==="on"||e==="true"}function Ur(e){return e==="false"}function Nr(e,t,r){t.name&&r(e,t.name,t.value);}var at=J(),Fs=typeof SubmitEvent<"u",Ms=typeof HTMLFormElement<"u";function q(e,t,r){let n={},i=[];function s(l,u,g){if(t?.ignoreEmpty&&g==="")return;if(t?.nullIfEmpty&&g===""&&(g=null),typeof r=="function"){let p=r(u,g);p!==void 0&&(g=p);}let f=u.split("[").map(p=>{let m=p.replace("]",""),h=Number(m);return !isNaN(h)&&!m.includes(".")?m=h:(m[0]==='"'&&m[m.length-1]==='"'||m[0]==="'"&&m[m.length-1]==="'")&&(m=m.replace(/"/g,"").replace(/'/g,"")),m}),d=l;if(typeof f[0]=="number")throw new a("Form key cannot start with an array index.",{code:"INVALID_REQUEST"});for(let p=0;p<f.length;p++){let m=f[p];p<f.length-1?(d[m]===void 0&&(typeof f[p+1]=="number"?d[m]=[]:d[m]={}),d=d[m]):d[m]===void 0?d[m]=g:Array.isArray(d[m])?d[m].push(g):d[m]=[d[m],g];}}function o(l,u,g){if(g instanceof File)l.push({name:u,file:g});else if(g instanceof FileList&&g&&g.length>0)for(let f=0;f<=g.length-1;f++){let d=g.item(f);d&&l.push({name:u,file:d});}}let c=l=>{l.name&&(l.type==="number"?l.value&&s(n,l.name,Number(l.value)):l.type==="checkbox"||l.type==="radio"?l.checked?l.type==="checkbox"&&l.value===""||vr(l.value)?s(n,l.name,true):Ur(l.value)?s(n,l.name,false):l.value&&s(n,l.name,l.value):l.type==="checkbox"&&(vr(l.value)?s(n,l.name,false):Ur(l.value)&&s(n,l.name,true)):l.type==="file"?l.files&&l.files.length>0&&o(i,l.name,l.files):s(n,l.name,l.value));};if(at&&(e instanceof HTMLInputElement||e instanceof HTMLSelectElement||e instanceof HTMLTextAreaElement))return c(e),ot(n),{data:n,files:i};if(at&&e instanceof FormData){for(let l of e.entries()){let u=l[0],g=l[1];if(g instanceof File||g instanceof FileList)o(i,u,g);else if(g instanceof Blob){let f=g;if(f.type==="application/json")try{let d=JSON.parse(f.text());s(n,u,d);}catch{s(n,u,f);}}else s(n,u,g);}return ot(n),{data:n,files:i}}if(at&&Fs&&e instanceof SubmitEvent&&(e=e.target),at&&Ms&&e instanceof HTMLFormElement){let l=e.querySelectorAll("input"),u=e.querySelectorAll("select"),g=e.querySelectorAll("textarea");for(let f=0;f<u.length;f++)Nr(n,u[f],s);for(let f=0;f<g.length;f++)Nr(n,g[f],s);for(let f=0;f<l.length;f++)c(l[f]);return ot(n),{data:n,files:i}}return ot(e),{data:e,files:i}}function $e(e){let t={};for(let r in e){let n=e[r];if(!Cs.includes(r))if(Sr[r])t[Sr[r]]=n;else if(r.includes("custom:"))t[r.replace("custom:","")]=n;else if(r==="address"){let i=n;if(i&&typeof i=="object"&&Object.keys(i).length){if(i?.formatted)try{t[r]=JSON.parse(i.formatted);}catch{t[r]=i.formatted;}}else t[r]=i;}else t[r]=n;}for(let r of ["address_public","birthdate_public","email_public","gender_public","phone_number_public","access_group"])r.includes("_public")?t.hasOwnProperty(r.split("_")[0])?t[r]=t.hasOwnProperty(r)?!!Number(t[r]):false:delete t[r]:t[r]=t.hasOwnProperty(r)?Number(t[r]):0;for(let r of ["email","phone_number"])t.hasOwnProperty(r)?t[r+"_verified"]=t[r+"_verified"]===true:delete t[r+"_verified"];return t}function Ot(e){if(e=Ws(e),e.split("-").length===7){let t=e.split("-"),r,n;try{r=Dr[te(t[1][0])],n=t.slice(2).join("-");}catch{throw new Error("INVALID_PARAMETER: Service ID is invalid: "+e)}if(!r)throw new Error("INVALID_PARAMETER: Service ID is invalid: "+e);return {service:r+t[0]+t[1].slice(1),owner:n}}return {service:e,owner:""}}function Lt(e,t){let r=Dr.indexOf(e.slice(0,4)),n=Os[r],s=`${e.slice(4,-4)}-${n}${e.slice(-4)}-${t}`;return Hs(s)}function $s(e){let t=0n;for(let r of e){let n=he.indexOf(r);if(n<0)throw new Error(`INVALID_PARAMETER: Invalid base62 character: ${r}`);t=t*Dt+BigInt(n);}return t}function Vs(e,t=1){if(e<0n)throw new Error("INVALID_PARAMETER: Negative values are not supported.");if(e===0n)return "0".repeat(Math.max(1,t));let r="",n=e;for(;n>0n;){let i=Number(n%Dt);r=he[i]+r,n/=Dt;}return r.length<t&&(r="0".repeat(t-r.length)+r),r}function qs(e){if(e===0n)return Uint8Array.from([0]);let t=[],r=e;for(;r>0n;)t.push(Number(r&0xffn)),r>>=8n;return t.reverse(),Uint8Array.from(t)}function js(e){let t=0n;for(let r of e)t=(t<<8n)+BigInt(r);return t}function Bs(e){let t=String(e).replace(/-/g,"");if(!/^[0-9a-fA-F]{32}$/.test(t))throw new Error("INVALID_PARAMETER: Invalid UUID format.");let r=new Uint8Array(16);for(let n=0;n<16;n++)r[n]=parseInt(t.slice(n*2,n*2+2),16);return r}function Ks(e){let t=Array.from(xt(e),r=>r.toString(16).padStart(2,"0")).join("");return [t.slice(0,8),t.slice(8,12),t.slice(12,16),t.slice(16,20),t.slice(20)].join("-")}function Hs(e){let t=String(e);if(t.split("-").length===2)return t;let r=t.match(/^([0-9A-Za-z]+)-([0-9A-Za-z]+)-([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/);if(!r)throw new Error("INVALID_PARAMETER: Input must match <base62>-<base62>-<uuid>.");let[,n,i,s]=r;if(n.length<2)throw new Error("INVALID_PARAMETER: The first part must contain at least 2 characters.");if(i.length>=he.length)throw new Error("INVALID_PARAMETER: The middle section is too long to encode.");let o=n.slice(0,2),c=n.slice(2),l=i+o,u=he[i.length]+c+l,g=Bs(s),f=Vs(js(g));return `${u}-${f}`}function Ws(e){let t=String(e);if(t.split("-").length!==2)return t;let r=t.split("-");if(r.length!==2||!r[0]||!r[1])throw new Error("INVALID_PARAMETER: Corrupt compressed token: "+t);let[n,i]=r,s=he.indexOf(n[0]);if(s<0)throw new Error("INVALID_PARAMETER: Corrupt compressed token: "+t);let o=n.slice(1),c=s+2;if(o.length<c)throw new Error("INVALID_PARAMETER: Corrupt compressed token: "+t);let l=o.slice(0,o.length-c),u=o.slice(o.length-c),g=u.slice(s),f=u.slice(0,s),d=g+l;if(!/^[0-9A-Za-z]+$/.test(d)||!/^[0-9A-Za-z]+$/.test(f))throw new Error("INVALID_PARAMETER: Corrupt compressed token: "+t);let p=$s(i),m=qs(p);if(m.length>16)throw new Error("INVALID_PARAMETER: Corrupt compressed token: "+t);let h=new Uint8Array(16);h.set(m,16-m.length);let _=Ks(h);return `${d}-${f}-${_}`}function Ve(e){if(typeof TextDecoder<"u")return new TextDecoder().decode(e);let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return decodeURIComponent(escape(t))}function Ft(...e){let t=0;for(let i of e)t+=i.length;let r=new Uint8Array(t),n=0;for(let i of e)r.set(i,n),n+=i.length;return r}function Gs(e,t="User ID"){let r=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;if(e){if(typeof e!="string")throw new a(`${t} should be type: string.`,{code:"INVALID_PARAMETER"});if(!e.match(r))throw new a(`${t} is invalid.`,{code:"INVALID_PARAMETER"})}else throw new a(`${t} is empty.`,{code:"INVALID_PARAMETER"});return e}function zs(e){if(e&&(typeof e!="string"||e.charAt(0)!=="+"||isNaN(Number(e.substring(1)))))throw new a('"phone_number" is invalid. The format should be "+00123456789". Type: string.',{code:"INVALID_PARAMETER"});return e||""}function Js(e){if(e){if(typeof e!="string")throw new a('"birthdate" is invalid. The format should be "yyyy-mm-dd". Type: string.',{code:"INVALID_PARAMETER"});{let t=new RegExp(/([12]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01]))/);if(e.length!==10||e.split("-").length!==3||!t.test(e))throw new a('"birthdate" is invalid. The format should be "yyyy-mm-dd". Type: string.',{code:"INVALID_PARAMETER"})}}return e||""}function Ys(e){if(e){if(typeof e!="string")throw new a('"password" should be type: string.',{code:"INVALID_PARAMETER"});if(e.length<6)throw new a('"password" should be at least 6 characters.',{code:"INVALID_PARAMETER"});if(e.length>60)throw new a('"password" can be up to 60 characters max.',{code:"INVALID_PARAMETER"})}else throw new a('"password" is required.',{code:"INVALID_PARAMETER"});return e}function Xs(e,t="email"){if(e){if(typeof e!="string")throw new a(`"${t}"should be type: string.`,{code:"INVALID_PARAMETER"});if(e.length<5)throw new a(`"${t}" should be at least 5 characters.`,{code:"INVALID_PARAMETER"});if(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.test(e)&&(e=e.trim(),e.split("@")[1].split(".").length>=2))return e.toLowerCase()}else throw new a(`"${t}" is required.`,{code:"INVALID_PARAMETER"});throw new a(`"${e}" is an invalid email.`,{code:"INVALID_PARAMETER"})}function Zs(e){let t=typeof window<"u",r=(()=>{let i=t&&window.location.origin||null;return i&&i.slice(-1)==="/"&&(i=i.slice(0,-1)),i})(),n=i=>{if(typeof i=="string"){if(i==="*")return "*";{let s=i.trim();if(s[0]==="/"&&r){if(r.slice(0,5)==="file:")throw new a(`"${i}" is an invalid url. Relative URL does not work on local file system. Use full URL string.`,{code:"INVALID_PARAMETER"});s=r+s;}else if(s[0]==="."&&r){if(r.slice(0,5)==="file:")throw new a(`"${i}" is an invalid url. Relative URL does not work on local file system. Use full URL string.`,{code:"INVALID_PARAMETER"});let c=t?window.location.href.split("?")[0]:"";c.slice(-1)!=="/"&&(c+="/"),s=c+s.slice(1);}let o;try{o=new URL(s);}catch{throw new a(`"${i}" is an invalid url.`,{code:"INVALID_PARAMETER"})}if(o.protocol)return o.href}}throw new a(`"${i}" is an invalid url.`,{code:"INVALID_PARAMETER"})};return Array.isArray(e)?e.map(i=>n(i)):n(e)}function eo(e,t,r=[],n){let i=q(e,n),s=i.data;t.service="string",t.owner="string";let o={};for(let c in t)if(s&&typeof s=="object"&&!Array.isArray(s)&&s.hasOwnProperty(c))if(typeof s[c]=="function")o[c]=s[c];else try{o[c]=JSON.parse(JSON.stringify(s[c]));}catch{o[c]=s[c];}n?.precall&&n.precall({data:o,files:i?.files||[]});try{return Qs__default.default(o,t,r)}catch(c){throw new a(c.message,{code:"INVALID_PARAMETER"})}}var y={UserId:Gs,PhoneNumber:zs,Birthdate:Js,Password:Ys,Email:Xs,Url:Zs,Params:eo};var Y="skapi.enc.v1",Lr=6e5,qe=12,ct=null,ke=null;function Fr(){return new a("Encryption requires Web Crypto, which needs a secure context (https, or localhost) in the browser, or Node 18 or newer. A page served over plain http has crypto.getRandomValues but crypto.subtle is undefined.",{code:"NOT_SUPPORTED"})}function Mr(){if(ke)return ke;let e=typeof globalThis<"u"?globalThis:void 0;if(e?.crypto?.subtle&&typeof e.crypto.getRandomValues=="function")return ke=e.crypto,ke;try{let t=typeof globalThis<"u"?globalThis:void 0,r=null;if(t?.process&&typeof t.process.getBuiltinModule=="function"&&(r=t.process.getBuiltinModule("crypto")),!r&&typeof Se=="function"&&(r=Se("crypto")),r?.webcrypto?.subtle)return ke=r.webcrypto,ke}catch{}throw Fr()}function re(){if(ct)return ct;let e=Mr();if(!e.subtle)throw Fr();return ct=e.subtle,ct}function $t(){try{return re(),!0}catch{return false}}function X(e){let t=Mr(),r=new Uint8Array(e),n=65536;for(let i=0;i<e;i+=n)t.getRandomValues(r.subarray(i,Math.min(i+n,e)));return r}function C(e){let t=xt(e),r;if(typeof Buffer<"u"&&typeof Buffer.from=="function")r=Buffer.from(t).toString("base64");else if(typeof btoa=="function"){let n="";for(let s=0;s<t.length;s+=32768)n+=String.fromCharCode.apply(null,Array.from(t.subarray(s,s+32768)));r=btoa(n);}else throw new a("No base64 encoder available in this environment.",{code:"NOT_SUPPORTED"});return r.replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function $(e){if(typeof e!="string")throw new a("Expected a base64url string.",{code:"INVALID_PARAMETER"});let t=e.replace(/-/g,"+").replace(/_/g,"/"),r=t.length%4;if(r===2)t+="==";else if(r===3)t+="=";else if(r===1)throw new a("Malformed base64url string.",{code:"INVALID_PARAMETER"});if(typeof Buffer<"u"&&typeof Buffer.from=="function"){let n=Buffer.from(t,"base64");return new Uint8Array(n.buffer,n.byteOffset,n.byteLength)}if(typeof atob=="function"){let n=atob(t),i=new Uint8Array(n.length);for(let s=0;s<n.length;s++)i[s]=n.charCodeAt(s);return i}throw new a("No base64 decoder available in this environment.",{code:"NOT_SUPPORTED"})}async function lt(e){let t=await re().digest("SHA-256",e);return new Uint8Array(t)}async function Ke(e,t,r,n){let i=re(),s=await i.importKey("raw",e,"HKDF",false,["deriveBits"]),o=await i.deriveBits({name:"HKDF",hash:"SHA-256",salt:t,info:r},s,n*8);return new Uint8Array(o)}async function Ue(e,t,r,n){let i=re(),s=K(e.normalize("NFC")),o=await i.importKey("raw",s,"PBKDF2",false,["deriveBits"]),c=new Uint8Array(await i.deriveBits({name:"PBKDF2",salt:t,iterations:r,hash:"SHA-256"},o,256)),l=await Ke(c,t,n,32);x(c),x(s);let u=await ie(l);return x(l),u}async function ie(e){return re().importKey("raw",e,{name:"AES-GCM"},false,["encrypt","decrypt"])}async function $r(){let e=X(32),t=await ie(e);return {bytes:e,key:t}}async function ne(e,t,r){let n=X(qe),i=await re().encrypt({name:"AES-GCM",iv:n,additionalData:r,tagLength:128},e,t);return {iv:n,ct:new Uint8Array(i)}}async function se(e,t,r,n){let i=await re().decrypt({name:"AES-GCM",iv:t,additionalData:n,tagLength:128},e,r);return new Uint8Array(i)}var ut={name:"ECDH",namedCurve:"P-256"};async function Vr(){let e=re(),t=await e.generateKey(ut,true,["deriveBits"]),r=new Uint8Array(await e.exportKey("raw",t.publicKey)),n=new Uint8Array(await e.exportKey("pkcs8",t.privateKey)),i=await Vt(n);return {pubRaw:r,pkcs8:n,priv:i}}async function Vt(e){return re().importKey("pkcs8",e,ut,false,["deriveBits"])}async function qr(e){if(e.length!==65||e[0]!==4)throw new a("Malformed public key: expected a 65 byte uncompressed P-256 point.",{code:"INVALID_PARAMETER"});return re().importKey("raw",e,ut,false,[])}async function qt(e){return C(await lt(e))}async function jr(e,t,r,n){let i=re(),s=await qr(e),o=await i.generateKey(ut,true,["deriveBits"]),c=new Uint8Array(await i.deriveBits({name:"ECDH",public:s},o.privateKey,256)),l=await Ke(c,new Uint8Array(32),r,32);x(c);let u=await ie(l);x(l);let{iv:g,ct:f}=await ne(u,t,n);return {epk:new Uint8Array(await i.exportKey("raw",o.publicKey)),iv:g,ct:f}}async function Br(e,t,r,n,i,s){let o=re(),c=await qr(t),l=new Uint8Array(await o.deriveBits({name:"ECDH",public:c},e,256)),u=await Ke(l,new Uint8Array(32),i,32);x(l);let g=await ie(u);return x(u),se(g,r,n,s)}function x(e){e&&e.length&&e.fill(0);}function to(e,t){if(e.length!==t.length)return false;let r=0;for(let n=0;n<e.length;n++)r|=e[n]^t[n];return r===0}function jt(e){return K(JSON.stringify(e))}function He(e,t,r){return Ft(e,new Uint8Array([0]),K(t),new Uint8Array([0]),K(r))}var Ae="0123456789ABCDEFGHJKMNPQRSTVWXYZ",je=16,Cr=26,Or=28;function Kr(e){let t=2166136261;for(let r=0;r<e.length;r++)t^=e[r],t=t*16777619>>>0;return t&1023}function Hr(e){if(e.length!==je)throw new a(`A recovery code needs exactly ${je} bytes.`,{code:"INVALID_PARAMETER"});let t="",r=0,n=0;for(let s=0;s<e.length;s++)for(r=r<<8|e[s],n+=8;n>=5;)n-=5,t+=Ae[r>>n&31];n>0&&(t+=Ae[r<<5-n&31]);let i=Kr(e);return t+=Ae[i>>5&31]+Ae[i&31],(t.match(/.{1,4}/g)||[]).join("-")}function Wr(e){if(typeof e!="string")throw new a("Recovery code should be a string.",{code:"INVALID_PARAMETER"});let t=e.toUpperCase().replace(/[\s\-_]/g,"").replace(/O/g,"0").replace(/[IL]/g,"1");if(t.length!==Or)throw new a(`That does not look like a recovery code: expected ${Or} characters, got ${t.length}.`,{code:"ENCRYPTION_BAD_RECOVERY_CODE"});let r=t.slice(0,Cr),n=t.slice(Cr),i=0,s=0,o=[];for(let u=0;u<r.length;u++){let g=Ae.indexOf(r[u]);if(g<0)throw new a(`That does not look like a recovery code: "${r[u]}" is not a valid character.`,{code:"ENCRYPTION_BAD_RECOVERY_CODE"});i=i<<5|g,s+=5,s>=8&&(s-=8,o.push(i>>s&255));}let c=new Uint8Array(o.slice(0,je)),l=Kr(c);if(n!==Ae[l>>5&31]+Ae[l&31])throw new a("That recovery code has a typo in it: the check characters do not match.",{code:"ENCRYPTION_BAD_RECOVERY_CODE"});return c}async function Bt(e,t,r){let n=await Ke(e,t,r,32),i=await ie(n);return x(n),i}var Mt=[83,75,69,78,67,70],Qr=2,Be=56,Gr=16,ro=4*1024*1024;function Kt(e){if(!e||e.length<Be)return false;for(let t=0;t<Mt.length;t++)if(e[t]!==Mt[t])return false;return true}function Re(e,t,r){e[t]=r>>>24&255,e[t+1]=r>>>16&255,e[t+2]=r>>>8&255,e[t+3]=r&255;}function ve(e,t){return (e[t]<<24>>>0)+(e[t+1]<<16)+(e[t+2]<<8)+e[t+3]}function no(e,t,r){let n=Math.floor(r/4294967296);Re(e,t,n),Re(e,t+4,r>>>0);}function io(e,t){return ve(e,t)*4294967296+ve(e,t+4)}async function zr(e,t,r,n,i,s){let o=K(`${Y}|binfile|${r}|${n}|${i}|${s}`),c=await Ke(e,t,o,32),l=await ie(c);return x(c),l}async function Jr(e){return (await lt(Ft(K(`${Y}|dekid`),e))).subarray(0,8)}function Yr(e,t,r){return jt([`${Y}|binchunk`,C(e),t,r])}function so(e,t,r,n,i,s){let o=new Uint8Array(Be+s.length);return o.set(Mt,0),o[6]=Qr,o[7]=s.length?1:0,Re(o,8,e),Re(o,12,t),o.set(r,16),no(o,32,n),o.set(i,40),Re(o,48,s.length),Re(o,52,0),s.length&&o.set(s,Be),o}async function Xr(e,t,r,n,i=ro){let s=X(Gr),o=await zr(e,s,r.service,r.owner,r.recordOwner,r.recordId),c=await Jr(e),l=n?K(JSON.stringify(n)):new Uint8Array(0);if(l.length>4096)throw new a("Encrypted file metadata is too large.",{code:"INVALID_PARAMETER"});let u=t.length===0?1:Math.ceil(t.length/i),g=so(i,u,s,t.length,c,l),f=await lt(g),d=[],p=g.length;for(let _=0;_<u;_++){let w=t.subarray(_*i,Math.min((_+1)*i,t.length)),b=await ne(o,w,Yr(f,_,u));d.push(b),p+=4+b.iv.length+b.ct.length;}let m=new Uint8Array(p);m.set(g,0);let h=g.length;for(let _ of d)Re(m,h,_.iv.length+_.ct.length),h+=4,m.set(_.iv,h),h+=_.iv.length,m.set(_.ct,h),h+=_.ct.length;return m}function oo(e){if(!Kt(e))throw new a("This file is not an encrypted skapi file.",{code:"INVALID_PARAMETER"});let t=ve(e,48),r=Be+t;if(e.length<r)throw new a("Encrypted file header is truncated.",{code:"INVALID_REQUEST"});let n=null;return t&&(n=JSON.parse(Ve(e.subarray(Be,r)))),{version:e[6],chunkBytes:ve(e,8),count:ve(e,12),fileId:e.subarray(16,16+Gr),plainLen:io(e,32),dekId:e.subarray(40,48),meta:n,headerLen:r}}async function Zr(e,t,r){let n=oo(t);if(n.version!==Qr)throw new a(`This file was encrypted by a different version of the SDK (container v${n.version}).`,{code:"NOT_SUPPORTED"});if(!n.count||!n.chunkBytes)throw new a("Encrypted file header is malformed.",{code:"INVALID_PARAMETER"});let i=await Jr(e);if(!to(i,n.dekId))throw new a("This file was encrypted under a previous data key for this record, so it can no longer be opened. It was most likely left behind by an interrupted access change.",{code:"ENCRYPTION_FILE_STALE_KEY"});let s=await zr(e,n.fileId,r.service,r.owner,r.recordOwner,r.recordId),o=await lt(t.subarray(0,n.headerLen)),c=[],l=n.headerLen,u=0;for(let d=0;d<n.count;d++){if(l+4>t.length)throw new a("Encrypted file is truncated.",{code:"INVALID_REQUEST"});let p=ve(t,l);if(l+=4,p<qe+16||l+p>t.length)throw new a("Encrypted file is truncated.",{code:"INVALID_REQUEST"});let m=await se(s,t.subarray(l,l+qe),t.subarray(l+qe,l+p),Yr(o,d,n.count));l+=p,c.push(m),u+=m.length;}let g=new Uint8Array(u),f=0;for(let d of c)g.set(d,f),f+=d.length;return {bytes:g,meta:n.meta}}var ao="skapi__keyring",We="__skapi_enc__",tn=1,co="skapi-enc",be="keys",Wt=new WeakMap;function rn(e){if(!e)return null;if(e===true&&(e={}),typeof e!="object")throw new a('"options.encryption" should be a boolean or an object.',{code:"INVALID_PARAMETER"});let t=typeof e.iterations=="number"?e.iterations:Lr;if(t<1e5)throw new a('"encryption.iterations" must be at least 100000.',{code:"INVALID_PARAMETER"});let r=e.trustPolicy==="strict"?"strict":"tofu";return {enabled:true,iterations:t,trustPolicy:r,persistDevice:e.persistDevice!==false,minPasswordLength:typeof e.minPasswordLength=="number"?e.minPasswordLength:0,withheld:e.withheld==="sentinel"?"sentinel":"null",recovery:e.recovery==="none"?"none":"code",table:typeof e.table=="string"&&e.table?e.table:ao}}function N(){return Wt.get(this)||null}function nn(e){if(!e){Wt.delete(this);return}Wt.set(this,{cfg:e,status:"locked",reason:"NO_SESSION_KEY",user_id:"",scope:"",mk:null,ikPriv:null,pubRaw:null,fpr:"",keyringRecordId:"",pins:{},dek:new Map,roll:new Set,passthrough:new Map,rawRead:false,ready:null,unlocking:false,pendingRecoveryCode:"",peerPub:new Map,peerInflight:new Map});}function Qt(){let e=N.call(this);if(e){e.user_id&&ir.call(this,e).catch(()=>{}),e.ready=null,e.unlocking=false,e.pendingRecoveryCode="";for(let[,t]of e.dek)x(t.bytes);e.dek.clear(),e.roll.clear(),e.passthrough.clear(),e.peerPub.clear(),e.peerInflight.clear(),e.pins={},e.mk=null,e.ikPriv=null,e.pubRaw=null,e.fpr="",e.keyringRecordId="",e.user_id="",e.status="locked",e.reason="NO_SESSION_KEY";}}function sn(){let e=N.call(this);return e?{status:e.status,reason:e.status==="unlocked"?void 0:e.reason,user_id:e.user_id||void 0,fingerprint:e.fpr||void 0}:{status:"disabled"}}function on(e,t){return typeof t=="string"&&t===e.cfg.table}function Ne(){return `${this.service}/${this.owner}`}function Gt(e,t,r,n){let[i,s]=e.split("/");return jt([Y,i,s,t,r,n])}function an(e,t,r,n,i){let[s,o]=e.split("/");return K(`${Y}|dekwrap|${s}|${o}|${t}|${r}|${n}|${i}`)}function zt(e){return e.anch==="uid"?e.uid:e.anch==="rid"?e.rid:""}function ft(e){return !!e&&typeof e=="object"&&!Array.isArray(e)&&typeof e[We]=="number"&&typeof e.ct=="string"&&typeof e.iv=="string"&&typeof e.own=="string"&&typeof e.anch=="string"&&!!e.k&&typeof e.k=="object"&&!Array.isArray(e.k)}var cn="__skapi_no_access__";function Z(e,t,r){if(e.withheld!=="sentinel")return null;let n={[cn]:true,reason:t};return r&&(n.recipients=r),Object.freeze(n)}function Jt(e){return !!e&&typeof e=="object"&&e[cn]===true}var lo=256*1024,ze="__skenc_ct__",ln="payload.bin",uo=`/${ze}/${ln}`;function Yt(e,t){return e===ze&&t===ln}async function fo(e,t,r){let n=t?.table,i=typeof n=="string"?n:n?.name;if(n&&(typeof n=="string"||n.access_group!==void 0))return {group:typeof n=="string"?0:en(n.access_group),table:i,record:null};if(!r)return {group:n?.access_group!==void 0?en(n.access_group):0,table:i,record:null};let s=e.dek.get(r);if(s)return {group:s.access_group,table:i,record:null};let o=await me.call(this,r);if(!o)throw new a(`Record "${r}" not found.`,{code:"NOT_EXISTS"});return {group:o.table.access_group,table:o.table.name,record:o}}function go(e){return this.getFile(e,{dataType:"blob"})}async function me(e){let t=/^[a-zA-Z0-9]+$/.test(e)?{record_id:e}:{unique_id:e};return (await this.getRecords(t,{limit:1}))?.list?.[0]||null}function en(e){return e==="private"||e==="**"?"private":e==="public"?0:e==="authorized"?1:e==="admin"?99:typeof e=="number"?e:0}function Ht(e,t,r){let n=this.user?.user_id;if(!(!e||!e.user_id||!n||e.user_id===n))throw new a(`Record "${t}" belongs to another user (${e.user_id}), so ${r} would either seal it under the wrong key or strand its contents. Encryption only operates on records you own, no matter what access level you hold.`,{code:"ENCRYPTION_NOT_RECORD_OWNER"})}async function Xt(e,t,r){let n=N.call(this);if(!n)return {send:e,plain:e,encrypted:false,omit:false};let i=t?.record_id||"",s=i,o=t?.unique_id||"";if(i&&n.passthrough.has(i)){let j=n.passthrough.get(i);return n.passthrough.delete(i),{send:j,plain:e,encrypted:true,omit:false}}let{group:c,table:l,record:u}=await fo.call(this,n,t,s);if(c!=="private"){let j=true;if(!r&&i){let G=u||await me.call(this,i);if(G&&G.encrypted){if(Ht.call(this,G,i,"making it non-private"),G.encrypted.status==="failed")throw new a(`Cannot make record "${i}" non-private: its current contents could not be decrypted (${G.encrypted.reason}), so they cannot be written back in the clear. Unlock encryption, or supply the record's data with the access group change.`,{code:"ENCRYPTION_LOCKED"});let Me=!!G.bin&&Object.keys(G.bin).some(it=>(G.bin[it]||[]).some(Pr=>Pr&&Pr.encrypted));if(!Me&&s){let it=n.dek.get(s);it&&(x(it.bytes),n.dek.delete(s));}return {send:G.data,plain:G.data,encrypted:false,omit:false,files:Me?"decrypt":void 0}}}let ee=u;i&&!ee&&(ee=await me.call(this,i).catch(()=>null)),ee&&ee.encrypted&&Ht.call(this,ee,i,"making it non-private");let Ir=!!ee&&!!ee.bin&&Object.keys(ee.bin).some(G=>(ee.bin[G]||[]).some(Me=>Me&&Me.encrypted));if(Ir&&(j=false),j&&s){let G=n.dek.get(s);G&&(x(G.bytes),n.dek.delete(s));}return {send:e,plain:e,encrypted:false,omit:!r,files:Ir?"decrypt":void 0}}if(on(n,l))return {send:e,plain:e,encrypted:false,omit:false};if(n.ready&&!n.unlocking)try{await n.ready;}catch{}if(!r)return {send:e,plain:e,encrypted:false,omit:true};if(Jt.call(this,e))throw new a("This record's data could not be decrypted by this session, so it cannot be written back. Writing it would replace the record with the placeholder.",{code:"ENCRYPTION_CANNOT_REWRITE_WITHHELD"});if(n.status!=="unlocked"||!n.mk)throw new a("Encryption is enabled but locked, so this private record cannot be written. Call unlockEncryption({ password }) first, or the user must log in with their password.",{code:"ENCRYPTION_LOCKED"});if(e&&typeof e=="object"&&!Array.isArray(e)&&Object.prototype.hasOwnProperty.call(e,We))throw new a(`"${We}" is a reserved key in record data.`,{code:"INVALID_PARAMETER"});if(t?.service&&t.service!==this.service||t?.owner&&t.owner!==this.owner)throw new a("Encrypted records cannot be written to another project. The encryption key is derived per project, so a record written under one service and read under another could never be decrypted. Construct a separate Skapi instance for that project.",{code:"INVALID_REQUEST"});let g=this.user?.user_id;if(!g)throw new a("User login is required to write an encrypted record.",{code:"INVALID_REQUEST"});let f=Ne.call(this),d=false;if(i&&n.roll.has(i)){d=true,n.roll.delete(i);let j=n.dek.get(i);n.dek.delete(i),j&&x(j.bytes);}let p=u;i&&!p&&!n.dek.has(i)&&(p=await me.call(this,i).catch(()=>null)),p&&Ht.call(this,p,i,"making it private");let m=!!p&&!p.encrypted&&!!p.bin&&Object.keys(p.bin).some(j=>(p.bin[j]||[]).some(ee=>ee&&!ee.encrypted)),h=null;if(i&&!d&&(h=n.dek.get(i)||null,!h)){let j=p||u||await me.call(this,i);if(j&&(s=j.record_id||i,h=n.dek.get(s)||null,!o&&j.unique_id&&(o=j.unique_id),!h&&j.encrypted?.status==="failed"))throw new a(`Cannot update encrypted record "${i}": its current contents could not be decrypted (${j.encrypted.reason}), so its existing key wraps cannot be preserved. Updating anyway would revoke everyone it is shared with.`,{code:"ENCRYPTION_LOCKED"})}s===i&&h&&h.rid&&(s=h.rid),!o&&h&&h.anch==="uid"&&h.uid&&(o=h.uid);let _,w,b;if(h){if(h.own&&h.own!==g)throw new a(`Record "${i}" belongs to another user (${h.own}). Encryption only operates on records you own.`,{code:"ENCRYPTION_NOT_RECORD_OWNER"});_=h.bytes,w=h.key,b=Object.assign({},h.recipients);}else {let j=await $r();_=j.bytes,w=j.key,b={};}let E=o?"uid":s?"rid":"new",k=E==="uid"?o:E==="rid"?s:"",S=Gt(f,g,E,k),O=He(S,g,"mk"),L=await ne(n.mk,_,O);b[g]={t:"mk",iv:C(L.iv),ct:C(L.ct)},h&&(h.anch!==E||zt(h)!==k)&&(b=await po.call(this,n,_,b,f,g,E,k,S));let V=K(JSON.stringify(e===void 0?null:e)),v=await ne(w,V,S);x(V);let D={[We]:tn,enc:"A256GCM",kw:"ECDH-ES+A256GCM",anch:E,uid:o,rid:s,own:g,iv:C(v.iv),ct:C(v.ct),k:b},F,M,Te=D.ct;s&&Te.length>lo&&(F=$(Te),D.ct="",D.ct_ref=uo,h&&h.ctRef&&(M=h.ctRef));let Fe=JSON.stringify(D).length;if(Fe>2*1024*1024)throw new a(`Encrypted record data is too large: once encrypted and base64 encoded it becomes ${Fe} bytes, over the ${2*1024*1024} byte limit. Encryption costs about 33% plus roughly 230 bytes per additional recipient.`,{code:"ENCRYPTED_DATA_TOO_LARGE"});return s&&n.dek.set(s,{bytes:_,key:w,recipients:b,anch:E,uid:o,rid:s,own:g,access_group:"private"}),{send:D,plain:e,encrypted:true,omit:false,spill:F,retireCt:M,dek:{bytes:_,key:w,recipients:b,anch:E,uid:o,rid:s,own:g,access_group:"private"},files:m?"encrypt":void 0}}function un(e,t){let r=N.call(this);!r||!t||!e||r.dek.has(e)||r.dek.set(e,Object.assign({},t,{rid:e}));}async function po(e,t,r,n,i,s,o,c){let l=Object.keys(r).filter(f=>f!==i);if(!l.length)return r;let u=await sr.call(this,l),g={[i]:r[i]};for(let f of l){let d=u[f];d&&(g[f]=await dn.call(this,t,d,n,o,i,f,c));}return g}async function dn(e,t,r,n,i,s,o){let c=an(r,n,i,s,t.fpr),l=He(o,s,t.fpr),u=await jr(t.pubRaw,e,c,l);return {t:"ecdh",epk:C(u.epk),iv:C(u.iv),ct:C(u.ct),fpr:t.fpr}}async function fn(e,t){if(!ft(e))return {value:e};if(t.access_group!=="private")return {value:e};let r=N.call(this);if(!r)return {value:null,flag:{status:"failed",reason:"ENCRYPTION_DISABLED"}};if(r.rawRead)return {value:e};if(on(r,t.table_name))return {value:e};if(e[We]!==tn)return {value:Z(r.cfg,"UNSUPPORTED_VERSION"),flag:{status:"failed",reason:"UNSUPPORTED_VERSION"}};if(r.ready&&!r.unlocking)try{await r.ready;}catch{}if(e.own!==t.user_id)return {value:Z(r.cfg,"BINDING_MISMATCH"),flag:{status:"failed",reason:"BINDING_MISMATCH"}};if(e.uid&&t.unique_id&&e.uid!==t.unique_id)return {value:Z(r.cfg,"BINDING_MISMATCH"),flag:{status:"failed",reason:"BINDING_MISMATCH"}};if(e.rid&&t.record_id&&e.rid!==t.record_id)return {value:Z(r.cfg,"BINDING_MISMATCH"),flag:{status:"failed",reason:"BINDING_MISMATCH"}};let n=this.user?.user_id,i=n?e.k[n]:null;if(!i)return {value:Z(r.cfg,"NOT_A_RECIPIENT",Object.keys(e.k)),flag:{status:"failed",reason:"NOT_A_RECIPIENT",recipients:Object.keys(e.k)}};if(r.status!=="unlocked"||!r.mk)return {value:Z(r.cfg,"NO_SESSION_KEY"),flag:{status:"failed",reason:"NO_SESSION_KEY"}};let s=Ne.call(this),o=zt(e),c=Gt(s,e.own,e.anch,o),l;try{if(i.t==="mk")l=await se(r.mk,$(i.iv),$(i.ct),He(c,n,"mk"));else if(i.t==="ecdh"){if(!r.ikPriv)return {value:Z(r.cfg,"NO_SESSION_KEY"),flag:{status:"failed",reason:"NO_SESSION_KEY"}};l=await Br(r.ikPriv,$(i.epk),$(i.iv),$(i.ct),an(s,o,e.own,n,i.fpr),He(c,n,i.fpr));}else return {value:Z(r.cfg,"UNSUPPORTED_VERSION"),flag:{status:"failed",reason:"UNSUPPORTED_VERSION"}}}catch{return {value:Z(r.cfg,"BAD_KEY"),flag:{status:"failed",reason:"BAD_KEY"}}}let u;try{if(e.ct_ref){if(!t.ctUrl)return x(l),{value:Z(r.cfg,"DATA_UNAVAILABLE"),flag:{status:"failed",reason:"DATA_UNAVAILABLE"}};let p=await go.call(this,t.ctUrl);u=new Uint8Array(await p.arrayBuffer());}else u=$(e.ct);}catch{return x(l),{value:Z(r.cfg,"DATA_UNAVAILABLE"),flag:{status:"failed",reason:"DATA_UNAVAILABLE"}}}let g,f;try{f=await ie(l),g=await se(f,$(e.iv),u,c);}catch{return x(l),{value:Z(r.cfg,"CORRUPT"),flag:{status:"failed",reason:"CORRUPT"}}}let d;try{d=JSON.parse(Ve(g));}catch{return x(g),x(l),{value:Z(r.cfg,"CORRUPT"),flag:{status:"failed",reason:"CORRUPT"}}}if(x(g),t.record_id){let p=r.dek.get(t.record_id);p?(p.bytes=l,p.key=f,p.recipients=e.k,p.anch=e.anch,p.uid=e.uid,p.own=e.own,p.access_group="private",p.ctRef=e.ct_ref||""):r.dek.set(t.record_id,{bytes:l,key:f,recipients:e.k,anch:e.anch,uid:e.uid,rid:t.record_id,own:e.own,access_group:"private",ctRef:e.ct_ref||""});}else x(l);return {value:d,flag:{status:"encrypted",recipients:Object.keys(e.k)}}}function Qe(e,t){let[r,n]=e.split("/");return K(`${Y}|kek|${r}|${n}|${t}`)}function Ge(e,t,r,n){let[i,s]=e.split("/");return K(`${Y}|mk|${i}|${s}|${t}|PBKDF2-SHA256|${r}|${n}`)}function gn(e,t){let[r,n]=e.split("/");return K(`${Y}|recovery|${r}|${n}|${t}`)}function pn(e,t,r){let[n,i]=e.split("/");return K(`${Y}|rk|${n}|${i}|${t}|HKDF-SHA256|${r}`)}function hn(e,t){let[r,n]=e.split("/");return K(`${Y}|self|${r}|${n}|${t}`)}function yn(e,t){let[r,n]=e.split("/");return K(`${Y}|ik|${r}|${n}|${t}`)}async function gt(e){let r=((await this.getRecords({table:{name:e.cfg.table,access_group:"private"},index:{name:"$user_id",value:this.user.user_id,condition:"="}},{limit:2}))?.list||[]).filter(n=>n.user_id===this.user.user_id);return r.length?(r.sort((n,i)=>n.uploaded-i.uploaded),r[0]):null}async function Zt(e,t,r){let n=X(je),i=Hr(n),s=X(16),o=C(s),c=await Bt(n,s,gn(e,t)),l=await ne(c,r,pn(e,t,o));return x(n),{code:i,wrap:{id:C(X(6)),p:"recovery",kdf:{a:"HKDF-SHA256",s:o},iv:C(l.iv),ct:C(l.ct),created:Date.now()}}}async function ho(e,t,r,n){let i=Wr(n),s=(r||[]).filter(o=>o.p==="recovery");s.sort((o,c)=>(c.created||0)-(o.created||0));for(let o of s)try{let c=await Bt(i,$(o.kdf.s),gn(e,t)),l=await se(c,$(o.iv),$(o.ct),pn(e,t,o.kdf.s));return x(i),l}catch{}return x(i),null}async function yo(e,t,r,n,i){let s=X(16),o=C(s),c=await Ue(n,s,e.cfg.iterations,Qe(t,r)),l=await ne(c,i,Ge(t,r,e.cfg.iterations,o));return {id:C(X(6)),p:"password",kdf:{a:"PBKDF2-SHA256",it:e.cfg.iterations,s:o},iv:C(l.iv),ct:C(l.ct),created:Date.now()}}async function mo(e,t){let r=this.user.user_id,n=e.scope,i=X(16),s=C(i),o=await Ue(t,i,e.cfg.iterations,Qe(n,r)),c=X(32),l=await ne(o,c,Ge(n,r,e.cfg.iterations,s)),u=await ie(c),g=await Vr(),f=await ne(u,g.pkcs8,yn(n,r));x(g.pkcs8);let d=null;e.cfg.recovery==="code"&&(d=await Zt(n,r,c));let p=await ne(u,c,hn(n,r));x(c);let m=await qt(g.pubRaw),h=Date.now(),_=[{id:C(X(6)),p:"password",kdf:{a:"PBKDF2-SHA256",it:e.cfg.iterations,s},iv:C(l.iv),ct:C(l.ct),created:h}];d&&_.push(d.wrap);let w={v:1,alg:"ECDH-P-256",user_id:r,wraps:_,ik:{iv:C(f.iv),ct:C(f.ct)},self:{iv:C(p.iv),ct:C(p.ct)},pub:C(g.pubRaw),fpr:m,pins:null,created:h,updated:h};await this.postRecord({v:1,alg:"ECDH-P-256",user_id:r,pub:C(g.pubRaw),fpr:m,created:h},{table:{name:e.cfg.table,access_group:"authorized"},index:{name:"pubkey",value:r}});let b=await this.postRecord(w,{table:{name:e.cfg.table,access_group:"private"}}),E=await gt.call(this,e);if(E&&E.record_id!==b.record_id){await mn.call(this,e,E,t);return}e.mk=u,e.ikPriv=g.priv,e.pubRaw=g.pubRaw,e.fpr=m,e.keyringRecordId=b.record_id,d&&(e.pendingRecoveryCode=d.code),e.user_id=r,e.pins={},e.status="unlocked",e.reason="";}async function mn(e,t,r){let n=this.user.user_id,i=e.scope,s=t.data;if(t.user_id!==n||s&&s.user_id&&s.user_id!==n)throw new a("The encryption keyring does not belong to this user.",{code:"ENCRYPTION_KEYRING_CORRUPT"});let c=(Array.isArray(s?.wraps)?s.wraps:[]).filter(g=>g.p==="password");if(!c.length)throw new a("The keyring has no password wrap.",{code:"ENCRYPTION_KEYRING_CORRUPT"});c.sort((g,f)=>(f.created||0)-(g.created||0));let l=null;for(let g of c)try{let f=$(g.kdf.s),d=await Ue(r,f,g.kdf.it,Qe(i,n));l=await se(d,$(g.iv),$(g.ct),Ge(i,n,g.kdf.it,g.kdf.s));break}catch{}if(!l)throw new a("Incorrect password: the encryption keyring could not be opened.",{code:"ENCRYPTION_BAD_PASSWORD"});let u=await ie(l);x(l),await er.call(this,e,t,u);}async function er(e,t,r){let n=this.user.user_id,i=t.data,s=await se(r,$(i.ik.iv),$(i.ik.ct),yn(e.scope,n)),o=await Vt(s);x(s);let c={};if(i.pins&&typeof i.pins=="object"&&i.pins.ct)try{let l=await se(r,$(i.pins.iv),$(i.pins.ct),K(`${Y}|pins|${e.scope}|${n}`));c=JSON.parse(Ve(l)),x(l);}catch{c={};}e.mk=r,e.ikPriv=o,e.pubRaw=$(i.pub),e.fpr=i.fpr,e.keyringRecordId=t.record_id,e.user_id=n,e.pins=c,e.status="unlocked",e.reason="";}async function pt(e){let t=N.call(this);if(!t||!this.user?.user_id)return;if(!$t()){t.status="locked",t.reason="NO_WEB_CRYPTO";return}if(this.user?.is_openid){t.status="locked",t.reason="OPENID_UNSUPPORTED";return}if(t.cfg.minPasswordLength&&e.length<t.cfg.minPasswordLength){t.status="locked",t.reason="WEAK_PASSWORD";return}t.scope=Ne.call(this);let r=await gt.call(this,t);r?await mn.call(this,t,r,e):await mo.call(this,t,e),t.cfg.persistDevice&&await An.call(this,t).catch(()=>{});}async function bn(e){await this.__connection;let t=N.call(this);if(!t)throw new a("Encryption is not enabled for this instance.",{code:"INVALID_REQUEST"});if(!this.user?.user_id)throw new a("User login is required.",{code:"INVALID_REQUEST"});if(!e?.password||typeof e.password!="string")throw new a('"password" is required.',{code:"INVALID_PARAMETER"});if(await pt.call(this,e.password),t.status!=="unlocked")throw new a(`Encryption could not be unlocked: ${t.reason}`,{code:"ENCRYPTION_LOCKED"});return {status:t.status}}async function _n(e){let t=N.call(this);return t?(e?.forgetDevice&&await ir.call(this,t).catch(()=>{}),Qt.call(this),this.__cached_requests={},{status:t.status}):{status:"disabled"}}async function wn(e,t){let r=N.call(this);if(!r)return;if(r.status!=="unlocked"||!r.mk)throw new a("Encryption must be unlocked before changing the password, or the encryption keyring would be left wrapped under a password that no longer exists. Call unlockEncryption({ password }) first.",{code:"ENCRYPTION_LOCKED"});let i=(await this.getRecords({record_id:r.keyringRecordId},{limit:1}))?.list?.[0];if(!i)throw new a("The encryption keyring could not be read, so the password change was stopped before it could strand it.",{code:"ENCRYPTION_KEYRING_CORRUPT"});let s=this.user.user_id,o=i.data,c=(o.wraps||[]).filter(h=>h.p==="password");c.sort((h,_)=>(_.created||0)-(h.created||0));let l=null;for(let h of c)try{let _=await Ue(e,$(h.kdf.s),h.kdf.it,Qe(r.scope,s));l=await se(_,$(h.iv),$(h.ct),Ge(r.scope,s,h.kdf.it,h.kdf.s));break}catch{}if(!l)throw new a("Incorrect current password: the encryption keyring was not re-wrapped.",{code:"ENCRYPTION_BAD_PASSWORD"});let u=X(16),g=C(u),f=await Ue(t,u,r.cfg.iterations,Qe(r.scope,s)),d=await ne(f,l,Ge(r.scope,s,r.cfg.iterations,g));x(l);let p=Date.now(),m=(o.wraps||[]).concat([{id:C(X(6)),p:"password",kdf:{a:"PBKDF2-SHA256",it:r.cfg.iterations,s:g},iv:C(d.iv),ct:C(d.ct),created:p}]);await this.postRecord(Object.assign({},o,{wraps:m,updated:p}),{record_id:r.keyringRecordId});}async function En(){let e=N.call(this);if(!e||e.status!=="unlocked"||!e.keyringRecordId)return;let r=(await this.getRecords({record_id:e.keyringRecordId},{limit:1}))?.list?.[0];if(!r)return;let n=r.data,i=(n.wraps||[]).filter(o=>o.p==="password").sort((o,c)=>(c.created||0)-(o.created||0)),s=(n.wraps||[]).filter(o=>o.p!=="password");i.length<=1||await this.postRecord(Object.assign({},n,{wraps:[i[0]].concat(s),updated:Date.now()}),{record_id:e.keyringRecordId});}function tr(){return typeof indexedDB<"u"&&!!indexedDB}function rr(){return new Promise((e,t)=>{let r=indexedDB.open(co,1);r.onupgradeneeded=()=>{let n=r.result;n.objectStoreNames.contains(be)||n.createObjectStore(be);},r.onsuccess=()=>e(r.result),r.onerror=()=>t(r.error);})}function nr(e){return `${e.scope}#${this.user?.user_id}`}async function An(e){if(!tr()||!e.mk)return;let t=await rr();await new Promise((r,n)=>{let i=t.transaction(be,"readwrite");i.objectStore(be).put({mk:e.mk,keyringRecordId:e.keyringRecordId,saved:Date.now()},nr.call(this,e)),i.oncomplete=()=>r(),i.onerror=()=>n(i.error);}),t.close();}async function bo(e){if(!tr())return null;let t=await rr(),r=await new Promise((n,i)=>{let o=t.transaction(be,"readonly").objectStore(be).get(nr.call(this,e));o.onsuccess=()=>n(o.result||null),o.onerror=()=>i(o.error);});return t.close(),r&&r.mk?r:null}async function ir(e){if(!tr())return;let t=await rr();await new Promise((r,n)=>{let i=t.transaction(be,"readwrite");i.objectStore(be).delete(nr.call(this,e)),i.oncomplete=()=>r(),i.onerror=()=>n(i.error);}),t.close();}function Rn(){let e=N.call(this);!e||e.ready||(e.unlocking=true,e.ready=_o.bind(this)().catch(()=>false).then(()=>{e.unlocking=false;}));}async function _o(){let e=N.call(this);if(!e||!this.user?.user_id||!e.cfg.persistDevice||!$t())return false;e.scope=Ne.call(this);try{let t=await bo.call(this,e);if(!t)return !1;let r=await gt.call(this,e);return r?(await er.call(this,e,r,t.mk),!0):(await ir.call(this,e).catch(()=>{}),!1)}catch{return e.status="locked",e.reason="NO_SESSION_KEY",false}}async function sr(e){let t=N.call(this);if(!t)throw new a("Encryption is not enabled for this instance.",{code:"INVALID_REQUEST"});let r={},n=[],i=false;for(let s of e){let o=t.peerPub.get(s);o?r[s]=o:n.push(s);}return await Promise.all(n.map(async s=>{let o=t.peerInflight.get(s);o||(o=(async()=>{let u=((await this.getRecords({table:{name:t.cfg.table,access_group:"authorized"},index:{name:"$user_id",value:s,condition:"="}},{limit:10}))?.list||[]).filter(p=>p.user_id===s&&p.data?.pub);if(!u.length)return null;u.sort((p,m)=>m.uploaded-p.uploaded);let g=$(u[0].data.pub),f=await qt(g),d=t.pins[s];if(d&&d!==f)throw new a(`The public key for user "${s}" has changed since it was first seen. This is expected if they reset their account, and is what a key substitution attack also looks like. Verify the new fingerprint out of band, then call pinPeerKey({ user_id, fingerprint }).`,{code:"ENCRYPTION_PEER_KEY_CHANGED"});if(!d){if(t.cfg.trustPolicy==="strict")throw new a(`No pinned key for user "${s}" and trustPolicy is "strict". Pin it first with pinPeerKey().`,{code:"ENCRYPTION_PEER_NOT_PINNED"});t.pins[s]=f,i=true;}return {pubRaw:g,fpr:f}})().finally(()=>t.peerInflight.delete(s)),t.peerInflight.set(s,o));let c=await o;c&&t.peerPub.set(s,c),r[s]=c;})),i&&await Sn.call(this,t).catch(()=>{}),r}async function In(e,t){let r=Ne.call(this),n=e.dek.get(t);if(n)return {entry:n,scope:r};let i=await me.call(this,t);if(!i)throw new a(`Record "${t}" not found.`,{code:"NOT_EXISTS"});if(i.encrypted?.status==="failed"&&i.encrypted.reason==="DATA_UNAVAILABLE")throw new a(`Cannot change sharing on record "${t}": its data could not be read, so whether it is encrypted is unknown. Retry once the record reads normally.`,{code:"ENCRYPTION_DATA_UNAVAILABLE"});if(!i.encrypted)return null;if(i.user_id!==this.user?.user_id)throw new a("Only the record owner can share or revoke an encrypted record, because adding or removing a key wrap means writing the record.",{code:"ENCRYPTION_GRANT_REQUIRES_OWNER"});let s=e.dek.get(i.record_id)||e.dek.get(t);if(!s)throw new a(`Cannot change sharing on record "${t}": its data could not be decrypted`+(i.encrypted.reason?` (${i.encrypted.reason})`:"")+".",{code:"ENCRYPTION_LOCKED"});return {entry:s,scope:r}}async function or(e,t){let r=N.call(this);if(!r)return;let n=await In.call(this,r,e);if(!n)return;let{entry:i,scope:s}=n,o=this.user.user_id;if(i.own!==o)throw new a("Only the record owner can share an encrypted record, because adding a key wrap means writing the record.",{code:"ENCRYPTION_GRANT_REQUIRES_OWNER"});let c=await sr.call(this,t),l=t.filter(d=>!c[d]);if(l.length)throw new a(`These users have no encryption key yet, so they cannot be given access: ${l.join(", ")}. A user's key is created the first time they log in with encryption enabled.`,{code:"ENCRYPTION_RECIPIENT_HAS_NO_KEY"});let u=zt(i),g=Gt(s,i.own,i.anch,u),f=Object.assign({},i.recipients);for(let d of t)d!==o&&(f[d]=await dn.call(this,i.bytes,c[d],s,u,i.own,d,g));await Eo.call(this,r,e,i,f);}async function Pn(e,t){let r=N.call(this);if(!r)return;let n=await In.call(this,r,e);if(!n)return;let{entry:i}=n,s=this.user.user_id;if(i.own!==s)throw new a("Only the record owner can revoke access to an encrypted record.",{code:"ENCRYPTION_GRANT_REQUIRES_OWNER"});let o=Object.keys(i.recipients).filter(u=>u===s?true:t?!t.includes(u):false).filter(u=>u!==s),c=await me.call(this,e);if(!c)throw new a(`Record "${e}" not found.`,{code:"NOT_EXISTS"});wo(c,e);let l={};if(o.length){l=await sr.call(this,o);let u=o.filter(g=>!l[g]);if(u.length)throw new a(`Cannot revoke on record "${e}": these users keep access but their encryption keys could not be read, so re-sharing after the key roll would fail and lock them out: ${u.join(", ")}.`,{code:"ENCRYPTION_RECIPIENT_HAS_NO_KEY"})}r.roll.add(c.record_id||e),await this.postRecord(c.data,{record_id:c.record_id||e,table:{name:c.table.name,access_group:"private"}}),o.length&&await or.call(this,c.record_id||e,o);}function wo(e,t){if(e?.encrypted?.status==="failed")throw new a(`Cannot change sharing on record "${t}": its current data could not be read (${e.encrypted.reason}), so re-writing the record would destroy it.`,{code:"ENCRYPTION_DATA_UNAVAILABLE"})}async function Eo(e,t,r,n){let i=await Ao.call(this,t);if(!i)throw new a(`Cannot change sharing on record "${t}": its stored envelope could not be read.`,{code:"ENCRYPTION_DATA_UNAVAILABLE"});r.recipients=n,e.dek.set(t,r);let s=Object.assign({},i,{k:n});e.passthrough.set(t,s),await this.postRecord(void 0,{record_id:t});}async function Ao(e){let t=N.call(this);if(!t)return null;t.rawRead=true;let r;try{r=(await this.getRecords({record_id:e},{limit:1}))?.list?.[0];}finally{t.rawRead=false;}return r&&ft(r.data)?r.data:null}async function Tn(e){let t=N.call(this);if(!t||t.status!=="unlocked")throw new a("Encryption is locked.",{code:"ENCRYPTION_LOCKED"});t.pins[e.user_id]=e.fingerprint,t.peerPub.delete(e.user_id),await Sn.call(this,t);}async function Sn(e){if(!e.mk||!e.keyringRecordId)return;let r=(await this.getRecords({record_id:e.keyringRecordId},{limit:1}))?.list?.[0];if(!r)return;let n=await ne(e.mk,K(JSON.stringify(e.pins)),K(`${Y}|pins|${e.scope}|${e.user_id}`));await this.postRecord(Object.assign({},r.data,{pins:{iv:C(n.iv),ct:C(n.ct)},updated:Date.now()}),{record_id:e.keyringRecordId});}function kn(){let e=N.call(this);if(!e||!e.pendingRecoveryCode)return null;let t=e.pendingRecoveryCode;return e.pendingRecoveryCode="",t}async function vn(e){await this.__connection;let t=N.call(this);if(!t)throw new a("Encryption is not enabled for this instance.",{code:"INVALID_REQUEST"});if(!this.user?.user_id)throw new a("User login is required. Reset the password and log in first, then use the recovery code.",{code:"INVALID_REQUEST"});if(!e?.code||typeof e.code!="string")throw new a('"code" is required.',{code:"INVALID_PARAMETER"});t.scope=Ne.call(this);let r=this.user.user_id,n=await gt.call(this,t);if(!n)throw new a("This account has no encryption keyring, so there is nothing to recover.",{code:"NOT_EXISTS"});let i=await ho(t.scope,r,n.data?.wraps||[],e.code);if(!i)throw new a("That recovery code did not open the keyring. Check it against the copy you saved when encryption was set up.",{code:"ENCRYPTION_BAD_RECOVERY_CODE"});let s=await ie(i);await er.call(this,t,n,s);let o=false,c=null,l=(n.data?.wraps||[]).slice();if(e.password&&(l=l.filter(u=>u.p!=="password"),l.push(await yo(t,t.scope,r,e.password,i)),o=true),t.cfg.recovery==="code"){let u=await Zt(t.scope,r,i);l=l.filter(g=>g.p!=="recovery"),l.push(u.wrap),c=u.code;}return x(i),await this.postRecord(Object.assign({},n.data,{wraps:l,updated:Date.now()}),{record_id:n.record_id}),t.cfg.persistDevice&&await An.call(this,t).catch(()=>{}),{status:t.status,repaired:o,recoveryCode:c}}async function Un(){await this.__connection;let e=N.call(this);if(!e)throw new a("Encryption is not enabled for this instance.",{code:"INVALID_REQUEST"});if(e.status!=="unlocked"||!e.mk)throw new a("Encryption must be unlocked to issue a recovery code. Only someone who can already decrypt can create one.",{code:"ENCRYPTION_LOCKED"});if(e.cfg.recovery!=="code")throw new a('Recovery codes are disabled for this instance ("recovery" is "none").',{code:"INVALID_REQUEST"});let r=(await this.getRecords({record_id:e.keyringRecordId},{limit:1}))?.list?.[0];if(!r)throw new a("The encryption keyring could not be read.",{code:"ENCRYPTION_KEYRING_CORRUPT"});let n=r.data?.self;if(!n||!n.ct)throw new a("This keyring predates recovery-code rotation and cannot issue a new code. Use unlockWithRecoveryCode() with the existing code, which issues a replacement.",{code:"ENCRYPTION_KEYRING_CORRUPT"});let i=await se(e.mk,$(n.iv),$(n.ct),hn(e.scope,e.user_id)),s=await Zt(e.scope,e.user_id,i);x(i);let o=(r.data.wraps||[]).filter(c=>c.p!=="recovery").concat([s.wrap]);return await this.postRecord(Object.assign({},r.data,{wraps:o,updated:Date.now()}),{record_id:e.keyringRecordId}),{recoveryCode:s.code}}var dt="__skenc__",Nn="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";function Ro(e){if(e===0)return "0";let t="";for(;e>0;)t=Nn[e%62]+t,e=Math.floor(e/62);return t}function Io(e){let t=0;for(let r of e){let n=Nn.indexOf(r);if(n<0)return NaN;t=t*62+n;}return t}function ht(e){if(typeof e!="string")return null;let t=e.lastIndexOf(dt);if(t<0)return null;let r=Io(e.slice(t+dt.length));return Number.isFinite(r)?{key:e.slice(0,t),plainSize:r}:null}function ar(e){try{let t=String(e).split("?")[0].split("/").slice(3);if(t.length<12||t[4]!=="records"||t[7]!=="bin")return null;let r=ht(t[10]);return r?{recordId:t[5],recordOwner:t[3],filename:t[t.length-1],plainSize:r.plainSize}:null}catch{return null}}function Dn(e,t){return {service:this.service,owner:this.owner,recordOwner:t,recordId:e}}async function xn(e,t,r){let n=N.call(this);if(!n||!e)return {key:t,file:r,encrypted:false};let i=n.dek.get(e);if(!i)return {key:t,file:r,encrypted:false};if(ht(t))throw new a(`"${dt}" is reserved in an upload form key.`,{code:"INVALID_PARAMETER"});if(t===ze)return {key:t,file:r,encrypted:false};let s=new Uint8Array(await r.arrayBuffer()),o={n:r.name,t:r.type||"",lm:r.lastModified||0},c=await Xr(i.bytes,s,Dn.call(this,e,i.own),o);return x(s),{key:`${t}${dt}${Ro(r.size)}`,file:new File([c],r.name,{type:"application/octet-stream"}),encrypted:true}}async function Cn(e,t){let r=N.call(this),n=ar(e);if(!r||!n)return t;let i=r.dek.get(n.recordId);if(!i)throw new a(`Cannot open this file: the data key for record "${n.recordId}" is not available. Read the record first, and make sure encryption is unlocked.`,{code:"ENCRYPTION_LOCKED"});let s=new Uint8Array(await t.arrayBuffer());if(!Kt(s))throw new a("This file is marked as encrypted but its contents are not an encrypted container.",{code:"ENCRYPTION_FILE_CORRUPT"});let o=await Zr(i.bytes,s,Dn.call(this,n.recordId,n.recordOwner)),c=o.meta&&o.meta.t||"application/octet-stream";return new Blob([o.bytes],{type:c})}function Po(e){let t=[];for(let r in e?.bin||{})for(let n of e.bin[r]||[])n&&n.encrypted&&t.push({formKey:r,url:n.url,filename:n.filename});return t}function To(e){let t=[];for(let r in e?.bin||{})for(let n of e.bin[r]||[])n&&!n.encrypted&&t.push({formKey:r,url:n.url,filename:n.filename});return t}async function cr(e,t,r){let n=N.call(this);if(!n)return [];let i=await me.call(this,e);if(!i)return [];let s=t==="decrypt"?Po(i):To(i);if(!s.length)return [];let o=[],c=new FormData,l=false;for(let u of s){let g=i.bin[u.formKey].find(d=>d.url===u.url);if(!g||typeof g.getFile!="function")continue;let f=await g.getFile("blob");f&&(c.append(u.formKey,new File([f],u.filename,{type:f.type||"application/octet-stream"})),o.push(u.url),l=true);}if(!l)return [];if(t==="decrypt"){let u=n.dek.get(e);u&&(x(u.bytes),n.dek.delete(e));}return await this.uploadFiles(c,{record_id:e,progress:r}),o}var B=null;function lr(e){let t={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"},r={};for(let n in e)if(n==="tkid"){let i=e[n].split("#");if(i.length===1){r.ticket_id=i[0];continue}r.ticket_id=i[1],r.consume_id=i[2],r.user_id=i[3];let s=i[2].slice(-4);if(r.is_test=s===":CHK",!e.stmp){let o=i[2].slice(0,-4);/^[0-9]+$/.test(o)?r.timestamp=parseInt(o,10):r.timestamp=te(i[2].slice(0,-4));}}else t[n]?r[t[n]]=e[n]:r[n]=e[n];return r}async function Ln(e){if(!e.ticket_id)throw new a("Ticket ID is required.",{code:"INVALID_PARAMETER"});if(!e.method)throw new a('Method is required. Should be either "GET" or "POST"',{code:"INVALID_PARAMETER"});let t=e.ticket_id;await this.__connection;let r=await T.bind(this)(`https://${this.service.slice(0,4)}.${this.customApiDomain}/auth/consume/${this.service}/${this.owner}/${t}`,e?.data||{},{method:e.method,auth:!!e?.auth});return lr(r)}async function Fn(e,t){await this.__connection;let r=await T.bind(this)("ticket",Object.assign({exec:"list"},e||{}),{auth:true,fetchOptions:t});return r.list=r.list.map(lr),r}async function Mn(e,t){await this.__connection;let r=await T.bind(this)("ticket",Object.assign({exec:"consumed"},e||{}),{auth:true,fetchOptions:t});return r.list=r.list.map(lr),r}async function $n(e){return T.bind(this)("register-ticket",Object.assign({exec:"reg"},e),{auth:true})}async function Vn(e){return T.bind(this)("register-ticket",Object.assign({exec:"unreg"},e),{auth:true})}var Do=3600;async function xe(){if(await this.__connection,this.session){let e=Math.floor(Date.now()/1e3),r=this.session.getIdToken().getExpiration();if(r<e+Do){this.log("request:requesting new token",null);try{await z.bind(this)().getSession({refreshToken:!0}),this.log("request:received new tokens",{exp:this.session?.idToken?.payload?.exp,currentTime:e,expiresIn:r-e,token:this.session?.accessToken?.jwtToken,refreshToken:this.session?.refreshToken?.token});}catch(n){throw this.log("request:new token error",n),new a("User login is required.",{code:"INVALID_REQUEST"})}}else this.log("request:tokens",{exp:this.session.idToken.payload.exp,currentTime:e,expiresIn:r-e,token:this.session.accessToken.jwtToken,refreshToken:this.session.refreshToken.token});return this.session?.idToken?.jwtToken}else throw this.log("request:no session",null),ye.bind(this)(),new a("User login is required.",{code:"INVALID_REQUEST"})}function On(e,t){return new Promise((r,n)=>{t.refreshSession(e.getRefreshToken(),(i,s)=>{this.log("getSession:refreshSessionCallback",{refreshErr:i,refreshedSession:s}),i?(ye.bind(this)(),n(i)):s.isValid()?r(s):(ye.bind(this)(),n(new a("Invalid session.",{code:"INVALID_REQUEST"})));});})}function z(){if(!this.userPool)throw new a("User pool is missing",{code:"INVALID_REQUEST"});let e=()=>{let s=B.getSignInUserSession().getIdToken().payload||null,o=$e(s);return this.log("normalized user attribute",o),this.__user=o,o},t=async s=>new Promise((o,c)=>{this.log("getSession:option",s);let{refreshToken:l=false,skipUserUpdateEventTrigger:u=false}=s||{};if(l&&u&&(u=false),B=this.userPool.getCurrentUser(),!B){this.log("getSession:cognitoUser",B),ye.bind(this)(),c(null);return}let g=f=>{let d=f.getIdToken().payload;if(this.log("getSession:respond:sessionAttribute",d),d["custom:service"]!==this.service)throw this.log("getSession:respond","invalid service, signing out"),ye.bind(this)(),new a("Invalid session.",{code:"INVALID_REQUEST"});return this.session=f,e(),u||this._runOnUserUpdateListeners(this.user),this.session};B.getSession((f,d)=>{if(this.log("getSession:getSessionCallback",{err:f,session:d}),!d){ye.bind(this)(),c(new a("Current session does not exist.",{code:"INVALID_REQUEST"}));return}if(f){On.bind(this)(d,B).then(w=>o(g(w))).catch(c);return}let p=Math.floor(Date.now()/1e3),m=d.getIdToken(),h=m.getExpiration(),_=h<p;if(this.log("getSession:currentTime",p),this.log("getSession:idTokenExp",h),this.log("getSession:isExpired",_),this.log("getSession:existingBearerToken",this.bearerToken),this.bearerToken=m.getJwtToken(),_||l||!d.isValid())On.bind(this)(d,B).then(w=>o(g(w))).catch(c);else try{o(g(d));}catch(w){c(w);}});}),r=(s,o)=>{let c=o||s.includes(this.service+"-")?s:this.service+"-"+W.hash(s);return {cognitoUser:new amazonCognitoIdentityJs.CognitoUser({Username:c,Pool:this.userPool}),cognitoUsername:c}};return {getSession:t,authenticateUser:(s,o,c=false,l=false)=>new Promise((u,g)=>{this.__request_signup_confirmation=null,this.__disabledAccount=null;let f=r(s,c),d=f.cognitoUsername,p=new amazonCognitoIdentityJs.AuthenticationDetails({Username:d,Password:o});f.cognitoUser.authenticateUser(p,{newPasswordRequired:(m,h)=>{this.__disabledAccount=null,this.__request_signup_confirmation=d,m["custom:signup_ticket"]==="PASS"||m["custom:signup_ticket"]==="MEMBER"||m["custom:signup_ticket"]==="OIDPASS"?f.cognitoUser.completeNewPasswordChallenge(o,{},{onSuccess:_=>{B=f.cognitoUser,t().then(async w=>{if(N.call(this))try{await pt.bind(this)(o);}catch(b){this.log("encryption:ensureKeyring:failed",b);}u(this.user);});},onFailure:_=>{g(new a(_.message||"Failed to authenticate user.",{code:_.code}));}}):g(new a("User's signup confirmation is required.",{code:"SIGNUP_CONFIRMATION_NEEDED"}));},onSuccess:m=>t({skipUserUpdateEventTrigger:true}).then(async h=>{if(this.__disabledAccount=null,N.call(this))try{await pt.bind(this)(o);}catch(_){this.log("encryption:ensureKeyring:failed",_);}this._runOnLoginListeners(this.user),this._runOnUserUpdateListeners(this.user),u(this.user);}),onFailure:m=>{let h=[],{parsed:_,code:w}=mt(m),b=typeof m?.message=="string"?m.message:"";if(w==="NotAuthorizedException"?b.includes("User is disabled.")?(this.__disabledAccount=d,h=["This account is disabled.","USER_IS_DISABLED"]):l?h=["The account already exists.","ACCOUNT_EXISTS"]:h=["Incorrect username or password.","INCORRECT_USERNAME_OR_PASSWORD"]:w==="UserNotFoundException"?h=["Incorrect username or password.","INCORRECT_USERNAME_OR_PASSWORD"]:w==="UserNotConfirmedException"?(this.__request_signup_confirmation=d,h=["User's signup confirmation is required.","SIGNUP_CONFIRMATION_NEEDED"]):(w==="TooManyRequestsException"||w==="LimitExceededException")&&(h=["Too many attempts. Please try again later.","REQUEST_EXCEED"]),_.code==="SIGNUP_CONFIRMATION_NEEDED"&&(this.__request_signup_confirmation=d),h.length){let E=h[1],k=h[0];g(new a(k,{code:E,cause:m}));}else g(_);}});}),createCognitoUser:r,signup:(s,o,c)=>new Promise((l,u)=>{this.userPool.signUp(s,o,c,null,(g,f)=>{if(g){let{parsed:d,code:p}=mt(g),m=[];p==="UsernameExistsException"?m=["The account already exists.","EXISTS"]:p==="InvalidPasswordException"?m=["Invalid password. Password must be at least 6 characters.","INVALID_PARAMETER"]:p==="InvalidParameterException"?m=[d.message||"Invalid parameter.","INVALID_PARAMETER"]:p==="TooManyRequestsException"||p==="LimitExceededException"?m=["Too many attempts. Please try again later.","REQUEST_EXCEED"]:p==="CodeDeliveryFailureException"?m=["Failed to deliver verification code.","CODE_DELIVERY_FAILURE"]:p==="UserLambdaValidationException"&&(m=[d.message||"Signup validation failed.","INVALID_REQUEST"]),m.length?u(new a(m[0],{code:m[1],cause:g})):u(d);return}l(f);});})}}function mt(e){let t=typeof e?.code=="string"&&e.code.trim()?e.code.trim():"ERROR",n=((typeof e?.message=="string"?e.message:typeof e=="string"?e:"An error occurred.")||"An error occurred.").trim();n||(n="An error occurred.");let i=n.match(/#([A-Za-z0-9_]+)\s*:\s*([\s\S]+)/),s=i?.[1]?.trim()||t,o=i?.[2]?.trim()||n;return {parsed:new a(o,{code:s,cause:e}),code:t}}async function qn(e){await this.__authConnection;let t=e?.refreshToken||false;if(!t)return this.user;try{return await z.bind(this)().getSession(Object.assign({skipUserUpdateEventTrigger:!t,refreshToken:t},e)),this.user}catch{return null}}async function jn(e){await this.__connection,e=y.Params(e,{token:"string",id:"string",merge:o=>{if(o===void 0)return false;if(typeof o=="string")return [o];if(Array.isArray(o)){for(let c of o)if(typeof c!="string")throw new a('"merge" array items should be type: <string>.',{code:"INVALID_PARAMETER"})}if(typeof o!="boolean"&&!Array.isArray(o))throw new a('"merge" should be type: <boolean | string[]>.',{code:"INVALID_PARAMETER"});return o},template:o=>{if(typeof o!="object"||o===null)throw new a('"template" should be type: <object>.',{code:"INVALID_PARAMETER"});if(o.welcome!==void 0&&(typeof o.welcome!="string"||!o.welcome))throw new a('"template.welcome" should be a non-empty <string> (template message_id).',{code:"INVALID_PARAMETER"});return o}});let t={token:e.token,id:e.id,merge:e.merge};e.template?.welcome&&(t.template_welcome=e.template.welcome);let r=await T.bind(this)("openid-logger",t),n=r.logger.split("#"),i=this.service+"-"+n[0],s=n[1];return {userProfile:await z.bind(this)().authenticateUser(i,s,true,true),openid:r.openid}}function xo(e){let t=typeof globalThis<"u"?globalThis:void 0;if(t?.Buffer)return t.Buffer.from(e,"base64").toString("utf8");if(typeof atob=="function"){let r=atob(e),n=new Uint8Array(r.length);for(let i=0;i<r.length;i++)n[i]=r.charCodeAt(i);return typeof TextDecoder<"u"?new TextDecoder().decode(n):r}throw new Error("No base64 decoder available in this environment")}function Co(e){let t=e.split(".");if(t.length!==3)throw new Error("Invalid JWT format");let n=t[1].replace(/-/g,"+").replace(/_/g,"/"),i=xo(n);return JSON.parse(i)}async function Bn(e){await this.__authConnection,this.log("loginWithToken:params",e),e=y.Params(e,{idToken:"string",accessToken:"string",refreshToken:"string"},["idToken"]);let t=Co(e.idToken);if(this.log("loginWithToken:idTokenPayload",t),t["custom:service"]!==this.service)throw new a("Token does not belong to this service.",{code:"INVALID_REQUEST"});let r=Math.floor(Date.now()/1e3);if(t.exp&&t.exp<r)throw new a("Token has expired.",{code:"INVALID_REQUEST"});if(this.__user=$e(t),this.session=null,e.accessToken&&e.refreshToken)try{if(this.session=new amazonCognitoIdentityJs.CognitoUserSession({IdToken:new amazonCognitoIdentityJs.CognitoIdToken({IdToken:e.idToken}),AccessToken:new amazonCognitoIdentityJs.CognitoAccessToken({AccessToken:e.accessToken}),RefreshToken:new amazonCognitoIdentityJs.CognitoRefreshToken({RefreshToken:e.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",t["cognito:username"]);let n={Username:t["cognito:username"],Pool:this.userPool};this.log("loginWithToken:cognitoUserParams",n),B=new amazonCognitoIdentityJs.CognitoUser(n),B.setSignInUserSession(this.session),this.log("loginWithToken:cognitoUserRestored",{cognitoUserType:typeof B,cognitoUserKeys:Object.keys(B||{}),cognitoUser:B});}}catch(n){this.log("loginWithToken:err",n);try{this.log("loginWithToken:err:stringified",JSON.stringify(n));}catch{this.log("loginWithToken:err:stringifyFail",String(n));}try{let i=Object.keys(n||{}),s=Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(n||{}):[],o=Object.getOwnPropertyDescriptors?Object.getOwnPropertyDescriptors(n||{}):{};this.log("loginWithToken:createSessionError:allKeys",{keys:i,symbols:s,descriptors:o});}catch(i){this.log("loginWithToken:createSessionError:allKeysFail",String(i));}}return this._runOnLoginListeners(this.user),this._runOnUserUpdateListeners(this.user),this.user}async function Q(){return await this.__connection,this.__user?.service===this.service?this.__user?.owner===this.host:(await Je.bind(this)(),false)}async function ye(e=false){let t=null;B&&(e?t=new Promise((n,i)=>{B.globalSignOut({onSuccess:s=>{this.log("globalSignOut:success",s),n(s);},onFailure:s=>{this.log("globalSignOut:error",s),i(s);}});}):B.signOut()),Qt.bind(this)();let r={session:null,__startKeyHistory:{},__cached_requests:{},__user:null};t&&(t=await t);for(let n in r)this[n]=r[n];return this._runOnUserUpdateListeners(null),this._runOnLoginListeners(null),t}async function Je(e){await this.__connection;let{data:t}=q(e);return await ye.bind(this)(t?.global),"SUCCESS: The user has been logged out."}async function Kn(){if(!this.__request_signup_confirmation)throw new a("Least one login attempt is required.",{code:"INVALID_REQUEST"});return await T.bind(this)("confirm-signup",{username:this.__request_signup_confirmation})}async function Hn(e=false){if(typeof e=="string")e=y.Url(e);else if(typeof e!="boolean")throw new a("Argument should be type: <boolean | string>.",{code:"INVALID_REQUEST"});if(!this.__disabledAccount)throw new a("Least one signin attempt of disabled account is required.",{code:"INVALID_REQUEST"});return await T.bind(this)("recover-account",{username:this.__disabledAccount,redirect:e}),"SUCCESS: Recovery e-mail has been sent."}async function ur(e){let t=y.Params(e,{username:"string",email:"string",password:"string"},["password"]);if(await this.__authConnection,t.email)try{y.Email(t.email);}catch{t.username=t.email,delete t.email;}if(!t.username&&!t.email)throw new a('Least one of "username" or "email" is required.',{code:"INVALID_PARAMETER"});return await z.bind(this)().authenticateUser(t.username||t.email,t.password)}async function Wn(e,t){await this.__authConnection;let r={username:"string",password:u=>y.Password(u),email:u=>y.Email(u),name:"string",address:u=>{if(!u)return "";if(typeof u=="string")return u;if(typeof u=="object")return JSON.stringify(u)},gender:"string",birthdate:u=>u?y.Birthdate(u):"",phone_number:u=>u?y.PhoneNumber(u):"",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:u=>u?y.Url(u):"",profile:u=>u?y.Url(u):"",family_name:"string",given_name:"string",middle_name:"string",nickname:"string",website:u=>u?y.Url(u):""},n=y.Params(e||{},r,["email","password"]);await Je.bind(this)(),t=y.Params(t||{},{email_subscription:u=>{if(typeof u!="boolean")throw new a('"option.email_subscription" should be type: <boolean>.',{code:"INVALID_PARAMETER"});if(!t?.signup_confirmation)throw new a('"option.signup_confirmation" is required for email subscription.',{code:"INVALID_PARAMETER"});return u},signup_confirmation:u=>{let g=u;if(typeof u=="string")g=y.Url(u);else if(typeof u=="boolean")g=u;else throw new a('"option.signup_confirmation" should be type: <string | boolean>.',{code:"INVALID_PARAMETER"});if(g&&!n.email)throw new a('"email" is required for signup confirmation.',{code:"INVALID_PARAMETER"});return g},login:u=>{if(typeof u=="boolean"){if(t.signup_confirmation&&u)throw new a('"login" is not allowed when "option.signup_confirmation" is true.',{code:"INVALID_PARAMETER"});return u}throw new a('"option.login" should be type: boolean.',{code:"INVALID_PARAMETER"})},template:u=>{if(typeof u!="object"||u===null)throw new a('"option.template" should be type: <object>.',{code:"INVALID_PARAMETER"});if(u.signup_confirmation!==void 0){if(typeof u.signup_confirmation!="string"||!u.signup_confirmation)throw new a('"option.template.signup_confirmation" should be a non-empty <string> (template message_id).',{code:"INVALID_PARAMETER"});if(!t?.signup_confirmation)throw new a('"option.signup_confirmation" is required when "option.template.signup_confirmation" is set.',{code:"INVALID_PARAMETER"})}if(u.welcome!==void 0&&(typeof u.welcome!="string"||!u.welcome))throw new a('"option.template.welcome" should be a non-empty <string> (template message_id).',{code:"INVALID_PARAMETER"});return u}});let i=t?.login||false;if(n.signup_confirmation=t?.signup_confirmation||false,n.email_subscription=t?.email_subscription||false,n.email_public&&!n.signup_confirmation)throw new a('"option.signup_confirmation" should be true if "email_public" is set to true.',{code:"INVALID_PARAMETER"});n.service=this.service,n.owner=this.owner;let s=z.bind(this)().createCognitoUser(n.username||n.email);for(let u of ["email_public","address_public","gender_public","birthdate_public","phone_number_public"])n[u]=n[u]?"1":"0";n.access_group&&(n.access_group=n.access_group.toString());let o=(await T.bind(this)("signupkey",{username:s.cognitoUsername,signup_confirmation:typeof n.signup_confirmation=="boolean"?JSON.stringify(n.signup_confirmation):n.signup_confirmation,email_subscription:n.email_subscription,template_confirmation:t?.template?.signup_confirmation||"",template_welcome:t?.template?.welcome||""})).split(":"),c=o.slice(1).join(":"),l=[new amazonCognitoIdentityJs.CognitoUserAttribute({Name:"custom:signup",Value:o[0]}),new amazonCognitoIdentityJs.CognitoUserAttribute({Name:"locale",Value:c.split("#")[1]}),new amazonCognitoIdentityJs.CognitoUserAttribute({Name:"custom:signup_ticket",Value:c})];for(let u in r){let g=["email_public","address_public","gender_public","birthdate_public","phone_number_public","misc","service","owner"];n[u]!==""&&(u==="username"||u==="password"||u==="access_group"||(g.includes(u)?l.push(new amazonCognitoIdentityJs.CognitoUserAttribute({Name:"custom:"+u,Value:n[u]})):l.push(new amazonCognitoIdentityJs.CognitoUserAttribute({Name:u,Value:n[u]}))));}return await z.bind(this)().signup(s.cognitoUsername,n.password,l),n.signup_confirmation?(B=s.cognitoUser,this.__request_signup_confirmation=s.cognitoUsername,"SUCCESS: The account has been created. User's signup confirmation is required."):i?ur.bind(this)({email:n.username||n.email,password:n.password}):"SUCCESS: The account has been created."}async function Qn(){await this.__connection;let e=await T.bind(this)("remove-account",{disable:this.__user.user_id},{auth:true});return await Je.bind(this)(),e}async function Gn(e){await this.__connection;let t=y.Params(e,{email:i=>y.Email(i),code:["number","string"],new_password:i=>y.Password(i)},["email","code","new_password"]),r=t.code,n=t.new_password;return typeof r=="number"&&(r=r.toString()),new Promise(async(i,s)=>{z.bind(this)().createCognitoUser(t.email).cognitoUser.confirmPassword(r,n,{onSuccess:c=>{i("SUCCESS: New password has been set.");},onFailure:c=>{s(new a(c?.message||"Failed to reset password.",{code:c?.code||"ERROR",cause:c}));}});})}async function zn(e,t,r){await this.__connection;let n;if(!B)throw new a("The user has to be logged in.",{code:"INVALID_REQUEST"});if(e==="email"||e==="phone_number"){if(!this.__user.hasOwnProperty(e))throw new a(`No ${e==="email"?"e-mail":"phone number"} to verify`,{code:"INVALID_REQUEST"});if(this.__user?.[`${e}_verified`])return `SUCCESS: "${e}" is verified.`;n=(t?y.Params(t,{code:"string"}):{}).code||"";}else return;let i,s=r?.template?.verification;if(s!==void 0){if(typeof s!="string"||!s)throw new a('"template.verification" should be a non-empty <string> (template message_id).',{code:"INVALID_PARAMETER"});i={template_verification:s};}return new Promise((o,c)=>{let l={onSuccess:u=>{n?z.bind(this)().getSession({refreshToken:true}).then(()=>{this.__user&&(this.__user[e+"_verified"]=true),o(`SUCCESS: "${e}" is verified.`);}).catch(g=>{c(g);}):o("SUCCESS: Verification code has been sent.");},onFailure:u=>{c(new a(u.message||"Failed to request verification code.",{code:u?.code}));}};n?B?.verifyAttribute(e,n,l):(l.inputVerificationCode=null,B?.getAttributeVerificationCode(e,l,i));})}function Jn(e,t){return zn.bind(this)("phone_number",e,t)}function Yn(e,t){return zn.bind(this)("email",e,t)}async function Xn(e,t){await this.__connection;let r=y.Params(e,{email:s=>y.Email(s)},["email"]),n,i=t?.template?.verification;if(i!==void 0){if(typeof i!="string"||!i)throw new a('"template.verification" should be a non-empty <string> (template message_id).',{code:"INVALID_PARAMETER"});n={template_verification:i};}return new Promise(async(s,o)=>{z.bind(this)().createCognitoUser(r.email).cognitoUser.forgotPassword({onSuccess:l=>{s("SUCCESS: Verification code has been sent.");},onFailure:l=>{let{parsed:u,code:g}=mt(l),f={UserNotFoundException:"NOT_EXISTS",InvalidParameterException:"INVALID_PARAMETER",NotAuthorizedException:"INVALID_REQUEST",LimitExceededException:"REQUEST_EXCEED",TooManyRequestsException:"REQUEST_EXCEED",CodeDeliveryFailureException:"CODE_DELIVERY_FAILURE"}[g]||u.code||g||"ERROR";o(new a(u.message,{code:f,cause:l}));}},n);})}async function Zn(e){if(await this.__connection,!this.session)throw new a("User login is required.",{code:"INVALID_REQUEST"});let t=y.Params(e,{current_password:"string",new_password:"string"});if(!t?.current_password)throw new a('"current_password" is required to change password.',{code:"INVALID_PARAMETER"});if(!t?.new_password)throw new a('"new_password" is required to change password.',{code:"INVALID_PARAMETER"});return y.Password(t.current_password),y.Password(t.new_password),N.call(this)&&await wn.bind(this)(t.current_password,t.new_password),new Promise((r,n)=>{B.changePassword(t.current_password,t.new_password,(i,s)=>{if(i){if(i?.code==="InvalidParameterException")n(new a("Invalid password parameter.",{code:"INVALID_PARAMETER"}));else if(i?.code==="NotAuthorizedException")n(new a("Incorrect password.",{code:"INVALID_REQUEST"}));else if(i?.code==="TooManyRequestsException"||i?.code==="LimitExceededException")n(new a("Too many attempts. Please try again later.",{code:"REQUEST_EXCEED"}));else {let{parsed:o}=mt(i);n(o);}return}N.call(this)&&En.bind(this)().catch(o=>this.log("encryption:prune:failed",o)),r("SUCCESS: Password has been changed.");});})}async function ei(e){if(await this.__connection,!this.session)throw new a("User login is required.",{code:"INVALID_REQUEST"});let t=y.Params(e||{},{user_id:i=>y.UserId(i),email:i=>y.Email(i),address:i=>{if(!i)return "";if(typeof i=="string")return i;if(typeof i=="object")return JSON.stringify(i)},name:"string",gender:"string",birthdate:i=>i?y.Birthdate(i):"",phone_number:i=>i?y.PhoneNumber(i):"",email_public:"boolean",phone_number_public:"boolean",address_public:"boolean",gender_public:"boolean",birthdate_public:"boolean",misc:"string",picture:i=>i?y.Url(i):"",profile:i=>i?y.Url(i):"",family_name:"string",given_name:"string",middle_name:"string",nickname:"string",website:i=>i?y.Url(i):""});if(t&&typeof t=="object"&&!Object.keys(t).length)return this.user;t.email&&(t.preferred_username=this.service+"-"+W.hash(t.email));let r=[["email_public","email_verified","User's e-mail should be verified to set"],["phone_number_public","phone_number_verified","User's phone number should be verified to set"]];if(this.__user){for(let i of r)if(t[i[0]]&&!this.__user[i[1]])throw new a(`${i[2]} "${i[0]}" to true.`,{code:"INVALID_REQUEST"})}let n=[];for(let i in t){if(t[i]===this.user[i]){n.push(i);continue}if(["email_public","phone_number_public","address_public","gender_public","birthdate_public","misc"].includes(i)){let o=t[i];typeof o=="boolean"&&(o=o?"1":"0"),t["custom:"+i]=o,n.push(i);}}for(let i of n)delete t[i];if(t.user_id)if(t.user_id===this.user.user_id)delete t.user_id;else return T.bind(this)("admin-edit-profile",{attributes:t},{auth:true});if(t&&typeof t=="object"&&Object.keys(t).length){let i=[];for(let s in t)i.push(new amazonCognitoIdentityJs.CognitoUserAttribute({Name:s,Value:t[s]}));return await new Promise((s,o)=>{B?.updateAttributes(i,(c,l)=>{c&&o([c?.code||c?.name,c?.message||"Failed to update user settings."]),s(l);});}),await z.bind(this)().getSession({refreshToken:true}),this.user}return this.user}async function ti(e,t){e=q(e).data,e||(e={searchFor:"timestamp",condition:">",value:0},t||(t={}),t.ascending=false),await this.__connection;let r={user_id:i=>Array.isArray(i)?i.map(s=>y.UserId(s)):y.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=>y.Birthdate(i),subscribers:"number",timestamp:"number",access_group:"number",approved:"string"},n=["searchFor","value"];if(e=y.Params(e,{searchFor:["user_id","name","email","phone_number","address","gender","birthdate","locale","subscribers","timestamp","access_group","approved"],condition:[">",">=","=","<","<=","gt","gte","eq","lt","lte",()=>"="],value:i=>{let s=r[e.searchFor];if(typeof s=="function")return s(i);if(typeof i!==s)throw new a(`Value does not match the type of "${e.searchFor}" index.`,{code:"INVALID_PARAMETER"});return i},range:i=>{let s=r[e.searchFor];if(typeof s=="function")return s(i);if(typeof i!==s)throw new a(`Range does not match the type of "${e.searchFor}" index.`,{code:"INVALID_PARAMETER"});return i}},n),e?.condition&&e?.condition!=="="&&e.hasOwnProperty("range"))throw new a("Conditions does not apply on range search.",{code:"INVALID_PARAMETER"});if(e.searchFor==="user_id"&&(e.condition!=="="||e.range))throw new a(`Conditions are not allowed on "${e.searchFor}"`,{code:"INVALID_PARAMETER"});if(typeof e?.value=="string"&&!e?.value)throw new a("Value should not be an empty string.",{code:"INVALID_PARAMETER"});if(typeof e?.searchFor=="string"&&!e?.searchFor)throw new a('"searchFor" should not be an empty string.',{code:"INVALID_PARAMETER"});return T.bind(this)("get-users",e,{auth:true,fetchOptions:t})}async function ri(e){await this.__connection;let t=await T.bind(this)("last-verified-email",e,{auth:true});return t.includes("SUCCESS")?(await z.bind(this)().getSession({refreshToken:true}),this.user):t}async function ni(e){return await this.__connection,e=y.Params(e,{username:y.Email,redirect:y.Url},["username"]),await T.bind(this)("request-username-change",e,{auth:true})}var Ce=null,si=typeof SubmitEvent<"u",Lo=typeof HTMLFormElement<"u",Xe=J(),dr=0;function oi(e){if(!e)return null;let t=Number(e);if(Number.isFinite(t))return Math.max(0,t*1e3);let r=Date.parse(e);return Number.isNaN(r)?null:Math.max(0,r-Date.now())}function fr(e,t){return t>0?e/t*100:0}var ii=e=>{let{auth:t,type:r,endpoints:n,stable:i}=e,s=n[0],o=n[1];if(dr++,r==="admin"){let c=Object.entries(s).filter(([l,u])=>l.includes(t?"_private":"_public")&&l!=="get_users_private"&&l!=="service_public"&&typeof u=="string").map(([,l])=>l);if(!c.length)throw new a("No available admin gateways.",{code:"INVALID_REQUEST"});return c[dr%c.length]}if(r==="record"){let c=Object.entries(o).filter(([l,u])=>l.includes(t?"record_private":"record_public")&&typeof u=="string").map(([,l])=>l);if(!c.length)throw new a("No available record gateways.",{code:"INVALID_REQUEST"});return i?c[0]:c[dr%c.length]}throw new a("Invalid gateway type.",{code:"INVALID_REQUEST"})};async function Fo(e,t,r){let n=await Promise.all([this.admin_endpoint,this.record_endpoint]),i=n[0],s=n[1],o=e.split("?"),c=o.length>1?"?"+o[1]:"";switch(e=o[0],e){case "get-users":return i.get_users_private+e+c;case "service":return i.service_public+e+c;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 ii.bind(this)({auth:t,type:"admin",endpoints:n})+e+c;case "post-record":return (t?s.post_private:s.post_public)+e+c;case "get-records":return (t?s.get_private:s.get_public)+e+c;case "del-files":case "del-records":return s.del_private+e+c;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 ii.bind(this)({auth:t,type:"record",endpoints:n,stable:r})+e+c;default:return y.Url(e)+c}}var Ye={};function ai(){Ce&&(Ce.terminate(),Ce=null);}async function T(e,t=null,r,n){this.log("request",{url:e,data:t,options:r,_etc:n||{}}),r=r||{};let{auth:i=false,method:s="post",bypassAwaitConnection:o=false}=r;s=s.toUpperCase();let c=null,l=t?.service||this.service,u=t?.owner||this.owner,g=null,f=await Fo.bind(this)(e,!!i,!!r.stableGateway);if(!o&&(c=await this.__connection,!c))throw new a("Invalid connection. The service could have been disabled, or has a restricted CORS.",{code:"INVALID_REQUEST"});let d=r?.tokenHeaders?.idToken===true;(i||d)&&(g=await xe.bind(this)());let p={},{fetchMore:m=false,progress:h}=r?.fetchOptions||{};if(r?.fetchOptions&&Object.keys(r.fetchOptions).length){for(let v of ["limit","startKey","ascending"])if(r.fetchOptions.hasOwnProperty(v)){if(v==="startKey"&&r.fetchOptions[v]===null)continue;p[v]=r.fetchOptions[v];}p=y.Params(p,{limit:v=>{if(typeof v!="number")throw new a("Fetch limit should be a number.",{code:"INVALID_REQUEST"});if(v>1e3)throw new a("Fetch limit should be below 1000.",{code:"INVALID_REQUEST"});return v},startKey:v=>v,ascending:"boolean"});}let _=n?.ignoreService?{}:{service:l,owner:u};Object.assign(_,p),t=q(t).data,t?t&&typeof t=="object"&&(t=Object.assign(_,t)):t=_;let w=`${s}:${i?"auth":"public"}:${e}`,b=(()=>{if(t&&typeof t=="object"&&Object.keys(t).length&&!(Xe&&t instanceof FormData)){let v=function(D){return typeof D=="object"&&D!==null?Object.keys(D).sort().reduce((F,M)=>(typeof D[M]=="object"&&D[M]!==null?F[M]=v(D[M]):F[M]=D[M],F),{}):D};return W.hash(w+"/"+JSON.stringify(v(t)))}return W.hash(w+"/"+l)})(),{requestKey:E,requestKeyWithStartKey:k}=Mo.bind(this)({params:t,url:e,fetchMore:m,hashedParams:b});if(!E||E&&typeof E=="object")return E;if(this.log("requestKey",k),typeof k=="string"&&Ye[k]instanceof Promise)return this.log("request:returning pending",k),Ye[k];let S={Accept:"*/*"};if(Object.prototype.hasOwnProperty.call(r,"contentType")&&r.contentType!==void 0){let v=r.contentType===null?"application/x-www-form-urlencoded":r.contentType;v&&(S["Content-Type"]=v);}else S["Content-Type"]="application/json";if(g&&(S.Authorization=g),r?.tokenHeaders){let v=(M,Te)=>typeof M=="string"?M:M===true?Te:null,D=v(r.tokenHeaders.accessToken,this.session?.accessToken?.jwtToken||null),F=v(r.tokenHeaders.idToken,this.bearerToken||this.session?.idToken?.jwtToken||g||null);D&&(S["X-Access-Token"]=D),F&&(S["X-Id-Token"]=F);}let L={public_identifier:this.__public_identifier,service:l,owner:u};S["Content-Meta"]=JSON.stringify(L),r.revalidate&&(S["Cache-Control"]="no-cache",S.Pragma="no-cache");let V={headers:S};if(r?.responseType&&(V.responseType=r.responseType),s==="GET"){if(t){let v=[];if(Xe&&t instanceof FormData?v=Array.from(t.entries()).map(([D,F])=>{let M=typeof F=="string"?F:F.name;return encodeURIComponent(D)+"="+encodeURIComponent(M)}):v=Object.keys(t).map(D=>{let F=t[D];return typeof F!="string"&&(F=JSON.stringify(F)),encodeURIComponent(D)+"="+encodeURIComponent(F)}),v.length){let D=f.includes("?")?f.endsWith("?")||f.endsWith("&")?"":"&":"?";f+=D+v.join("&");}}V.body=null;}else if(Xe&&t instanceof FormData)V.body=t;else if(S["Content-Type"]==="application/x-www-form-urlencoded"&&t&&typeof t=="object"){let v=new URLSearchParams;for(let D of Object.keys(t)){let F=t[D];v.append(D,typeof F=="string"?F:JSON.stringify(F));}V.body=v.toString();}else typeof t=="string"?V.body=t:V.body=t?JSON.stringify(t):null;if(V.method=s,Ce===null){let v={batchSize:this.requestBatchSize,breakWhenError:false,onProgress:D=>{this.onBatchProcess.forEach(F=>F(D));}};Ce=new ji__default.default(v);}return this.log("request-opt",V),new Promise((v,D)=>{Ce.add([async()=>{let F=ci.bind(this)(f,V,h);Ye[k]=F;try{let M=Vo.bind(this)({hashedParam:E,requestKeyWithStartKey:k,url:e,fetched:await F});return delete Ye[k],this.log("request:end",M),v(M),M}catch(M){throw delete Ye[k],this.log("request:err",M),D(M),M}}]);})}function Mo(e){let{params:t={},url:r,fetchMore:n=false,hashedParams:i}=e||{};if(t.startKey){if(!(typeof t.startKey=="object"&&Object.keys(t.startKey).length)&&t.startKey!=="start"&&t.startKey!=="end")throw new a(`"${t.startKey}" is invalid startKey key.`,{code:"INVALID_PARAMETER"});t.startKey==="start"&&(n=false,delete t.startKey);}if(!n){if(this.__cached_requests?.[r]?.[i]&&delete this.__cached_requests[r][i],this.__startKeyHistory?.[r]?.[i]){if(Array.isArray(this.__startKeyHistory[r][i])&&this.__startKeyHistory[r][i].length)for(let l of this.__startKeyHistory[r][i]){let u=i+W.hash(l);this.__cached_requests?.[r]&&this.__cached_requests?.[r]?.[u]&&delete this.__cached_requests[r][u];}delete this.__startKeyHistory[r][i];}return {requestKeyWithStartKey:i,requestKey:i}}if(!Array.isArray(this.__startKeyHistory?.[r]?.[i]))return {requestKeyWithStartKey:i,requestKey:i};let s=this.__startKeyHistory[r][i],o=s[s.length-1],c=i;if(o){if(o==="end")return {requestKey:{list:[],startKey:"end",endOfList:true,startKeyHistory:s},requestKeyWithStartKey:c};c+=W.hash(o),t.startKey=JSON.parse(o);}return this.__cached_requests?.[r]?.[c]?{requestKey:this.__cached_requests[r][c],requestKeyWithStartKey:c}:{requestKeyWithStartKey:c,requestKey:i}}function $o(e){let t=r=>r&&typeof r=="object"&&r.encrypted?Object.assign({},r,{data:null}):r;return Array.isArray(e)?e.map(t):e&&typeof e=="object"?Array.isArray(e.list)?Object.assign({},e,{list:e.list.map(t)}):t(e):e}function ci(e,t,r){return new Promise((n,i)=>{let s=new XMLHttpRequest;s.open(t.method||"GET",e);for(var o in t.headers||{})s.setRequestHeader(o,t.headers[o]);t.responseType&&(s.responseType=t.responseType),s.onload=()=>{if(s.status<400)if(t.responseType=="json"||t.responseType=="blob")n(s.response);else {let c=s.responseText;try{c=JSON.parse(c);}catch{}n(c);}else if(s.status===429){let c=s.getResponseHeader("Retry-After"),l=oi(c);l!==null?setTimeout(()=>{ci(e,t,r).then(n,i);},l):i("Too many requests");}else {let c=s.status,l=["INVALID_CORS","INVALID_REQUEST","SERVICE_DISABLED","INVALID_PARAMETER","ERROR","EXISTS","NOT_EXISTS"],u=t.responseType=="blob"?s.response:s.responseText;try{u=JSON.parse(u);}catch{}if(typeof u=="string"){let g=u.split(":"),f=g.splice(0,1)[0].trim(),d=g.join(":").trim();i(new a(d||u,{code:l.includes(f)?f:"ERROR"}));}else if(typeof u=="object"&&u?.message){let g=u?.code||(c?c.toString():null)||"ERROR",f=u.message,d=u?.cause;typeof f=="string"&&(f=f.trim()),i(new a(f,{cause:d,code:g}));}else i(u);}},s.onerror=()=>i("Network error"),s.onabort=()=>i("Aborted"),s.ontimeout=()=>i("Timeout"),typeof r=="function"&&(s.onprogress=c=>{r({status:"download",progress:fr(c.loaded,c.total),loaded:c.loaded,total:c.total,abort:()=>s.abort()});},s.upload&&(s.upload.onprogress=c=>{r({status:"upload",progress:fr(c.loaded,c.total),loaded:c.loaded,total:c.total,abort:()=>s.abort()});})),s.send(t.body);})}function Vo(e){let{hashedParam:t,requestKeyWithStartKey:r,url:n,fetched:i}=e;if(!i?.startKey)return i;this.__startKeyHistory.hasOwnProperty(n)||(this.__startKeyHistory[n]={}),this.__startKeyHistory[n].hasOwnProperty(t)||(this.__startKeyHistory[n][t]=[]);let s=i.startKey==="end"?"end":JSON.stringify(i.startKey);return this.__startKeyHistory[n][t].includes(s)||this.__startKeyHistory[n][t].push(s),this.__cached_requests?.[n]||(this.__cached_requests[n]={}),this.__cached_requests[n][r]=i,Object.assign({startKeyHistory:this.__startKeyHistory[n][t]},i)}async function Ze(e,t){await this.__connection;let{record_id:r,service:n=this.service,progress:i}=t;if(!r)throw new a('"record_id" is required.',{code:"INVALID_PARAMETER"});if(si&&e instanceof SubmitEvent&&(e=e.target),Lo&&e instanceof HTMLFormElement&&(e=new FormData(e)),!Xe||!(e instanceof FormData))throw new a('"fileList" should be a FormData or HTMLFormElement.',{code:"INVALID_PARAMETER"});let o={reserved_key:Ee(),service:n,request:"post"};t?.record_id&&(o.id=t.record_id);let c,l=(p,m,h)=>new Promise((_,w)=>{c=new XMLHttpRequest,c.open("POST",p),c.onload=()=>{let b=c.responseText;try{b=JSON.parse(b);}catch{}if(c.status>=200&&c.status<300)_(b);else if(c.status===429){let E=c.getResponseHeader("Retry-After"),k=oi(E);k!==null?setTimeout(()=>{l(p,m,h).then(_,w);},k):w("Too many requests");}else w(b);},c.onerror=()=>w("Network error"),c.onabort=()=>w("Aborted"),c.ontimeout=()=>w("Timeout"),c.upload&&typeof h=="function"&&(c.upload.onprogress=h),c.send(m);});function u(p){let m="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";if(p===0)return m[0];let h="";for(;p>0;)h=m[p%62]+h,p=Math.floor(p/62);return h}let g=[],f=[],d=[];for(let[p,m]of e.entries()){if(!(m instanceof File))continue;let h=await xn.bind(this)(r,p,m),_=h.file,w=h.key,b=Object.assign({key:w+"/"+_.name,sizeKey:u(_.size),contentType:_.type||null},o),{fields:E=null,url:k,cdn:S}=await T.bind(this)("get-signed-url",b,{auth:!!this.__user});d.push(S);let O=new FormData;for(let L in E)O.append(L,E[L]);O.append("file",_);try{await l(k,O,typeof i=="function"?L=>i({status:"upload",progress:fr(L.loaded,L.total),currentFile:m,completed:g,failed:f,loaded:L.loaded,total:L.total,abort:()=>c.abort()}):null),g.push(m);}catch{f.push(m);}}return {completed:g,failed:f,bin_endpoints:d}}var bt={};function P(e){let{preventMultipleCalls:t=false}=e||{};return function(r,n,i){let s=i.value;i.value=function(...o){let c=o[0],l=true,u=null,g="",f={},d=false;if(si&&c instanceof SubmitEvent){c.preventDefault();let w=window.location.href;u=c.target;let b=new URL(u.action);g=b.href;let E=g?g.match(/(?<=\{).*?(?=\})/g):"";if(E)for(let k of E){if(!k)continue;let S=u.querySelector(`[name="${k}"]`);if(S)if(S.type==="file")for(let O=0;O<=S.files.length-1;O++)S.files[O]&&(f[k]||(f[k]=[]),f[k].push(new Promise((L,V)=>{let v=new FileReader;v.onload=function(){L(v.result);},v.readAsDataURL(S.files[O]),v.onerror=V;})));else g=g.replace(`{${k}}`,S.value);}u.getAttribute("action")===null?l=false:d=b.href===w;}let p=async w=>{if(g)for(let b in f)f[b].length&&(g=g.replace(`{${b}}`,(await Promise.all(f[b])).join(",")));if(u&&l){let b=N.call(this)?$o(w):w;window.sessionStorage.setItem(`${this.service}:${W.hash(g)}`,JSON.stringify(b)),d?window.location.replace(g):window.location.href=g;}return w},m,h=w=>{throw w instanceof a?w.name=n+"()":w=w instanceof Error?w:new a(w,{name:n+"()"}),w},_=async()=>{try{if(m=s.bind(this)(...o),m instanceof Promise){let w=await m;return p(w)}return p(m)}catch(w){throw h(w)}};if(t){let w=`${n}:${this?.__public_identifier||""}:${this?.service||""}:${this?.owner||""}`;return bt?.[w]||(bt[w]=_().finally(()=>{delete bt[w];})),bt[w]}return _()};}}async function li(){await this.__connection;let e=`${this.service}:${W.hash(window.location.href.split("?")[0])}`,t=window.sessionStorage.getItem(e);if(window.sessionStorage.removeItem(e),t!==null){try{t=JSON.parse(t);}catch{}return t}return null}var qo=256,jo=256,Bo=256,ui=256,Ko="\u{10FFFF}",Ho=/[\u0000-\u001F\u007F]|\u{10FFFF}/u,Wo={"/":"%2F","!":"%21","*":"%2A","#":"%23"},Qo={"%2F":"/","%21":"!","%2A":"*","%23":"#"};function Go(e){return e.replace(/%/g,"%25").replace(/[\/!*#]/g,r=>Wo[r]||r)}function oe(e){return typeof e!="string"?e:e.replace(/%(2F|21|2A|23)/gi,r=>{let n=r.toUpperCase();return Qo[n]||r}).replace(/%25/gi,"%")}function le(e,t,r={}){let{allowEmpty:n=false,maxLength:i,blockKeyDelimiters:s=false,disallowLeadingDollar:o=false,onlyAlphanumeric:c=false}=r;if(typeof e!="string")throw new a(`"${t}" should be type: <string>.`,{code:"INVALID_PARAMETER"});if(c&&/[^a-zA-Z0-9]/.test(e))throw new a(`"${t}" should only contain alphanumeric characters.`,{code:"INVALID_PARAMETER"});if(!n&&e.length===0)throw new a(`"${t}" is required.`,{code:"INVALID_PARAMETER"});if(i&&e.length>i)throw new a(`"${t}" should be <= ${i} characters.`,{code:"INVALID_PARAMETER"});if(Ho.test(e)||e.includes(Ko))throw new a(`"${t}" cannot include control characters or unsupported sentinel characters.`,{code:"INVALID_PARAMETER"});if(s&&(e=Go(e),i&&e.length>i))throw new a(`"${t}" should be <= ${i} characters. "/", "!", "*", "#" and "%" count as 3 characters each.`,{code:"INVALID_PARAMETER"});if(o&&e.startsWith("$"))throw new a(`"${t}" cannot start with "$".`,{code:"INVALID_PARAMETER"});return e}function Oe(e,t="table.name",r={}){return le(e,t,{allowEmpty:r.allowEmpty===true,maxLength:qo,blockKeyDelimiters:true})}function wt(e,t="tag",r={}){return le(e,t,{allowEmpty:r.allowEmpty===true,maxLength:jo,blockKeyDelimiters:true})}function et(e,t="index.name",r={}){return le(e,t,{allowEmpty:r.allowEmpty===true,maxLength:Bo,blockKeyDelimiters:true,disallowLeadingDollar:true})}function di(e,t="index.value"){return le(e,t,{allowEmpty:true,maxLength:ui})}function gr(e){return typeof e=="string"&&e.slice(-1)==="."}function pr(e,t){return le(e,t,{allowEmpty:true,maxLength:ui,blockKeyDelimiters:true})}function fi(e){if(!e.record_id&&!e.unique_id)return null;let t={};return e?.service&&(t.service=e.service),e?.owner&&(t.owner=e.owner),e?.record_id?t.record_id=le(e.record_id,"record_id",{allowEmpty:false,onlyAlphanumeric:true}):e?.unique_id&&(t.unique_id=e.unique_id),t}function hr(e){if(e===void 0)return 0;if(typeof e=="number"){if(e>99||e<0)throw new a('"table.access_group" value should be within a range of 0 ~ 99.',{code:"INVALID_REQUEST"})}else if(typeof e=="string"){if(e={private:"private",public:0,authorized:1,admin:99}[e],e===void 0)throw new a('"table.access_group" is invalid.',{code:"INVALID_PARAMETER"})}else throw new a('"table.access_group" should be type: <number | string>.',{code:"INVALID_PARAMETER"});if(!this.__user&&e)throw new a("Unsigned users have no access to records with access group.",{code:"INVALID_REQUEST"});return e}var _t=4503599627370496;function Et(e){if(typeof e=="number"){if(e>_t||e<-_t)throw new a(`Number value should be within range -${_t} ~ +${_t}`,{code:"INVALID_PARAMETER"});return e}if(typeof e=="boolean")return e;if(typeof e=="string")return di(e,"index.value");throw new a('"index.value" should be type: <number | boolean | string>.',{code:"INVALID_PARAMETER"})}function gi(e,t){if(!t.index||!("value"in t.index))throw new a('"index.value" is required.',{code:"INVALID_PARAMETER"});if(t.index.name==="$record_id")throw new a(`Cannot do "index.range" on ${t.index.name}`,{code:"INVALID_PARAMETER"});if(typeof t.index.value!=typeof e)throw new a('"index.range" type should match the type of "index.value".',{code:"INVALID_PARAMETER"});return typeof e=="string"?gr(t.index.name)?pr(e,"index.range"):di(e,"index.range"):e}var At={},zo=10080*60,Jo=3600,pi=2;function Yo(e,t){if(!t)return String(pi);let r=Math.max(60,e-300)*1e3;return "g"+pi+"w"+Math.floor(Date.now()/r)}function Xo(e){if(!this.user?.user_id)return false;let t=e[6]==="**"?"**":parseInt(e[6]),r=this.user?.access_group??-1;return !(this.user.user_id!==e[3]&&(t==="**"||r<t))}function Zo(e){if(typeof e=="string"){if(e.startsWith("!J%"))try{return JSON.parse(e.substring(3))}catch{return e}return e==="!D%{}"?{}:e==="!L%[]"?[]:e}if(e&&typeof e=="object"&&!Array.isArray(e)&&typeof e.__json__=="string"&&Object.keys(e).length===1)try{return JSON.parse(e.__json__)}catch{}return e}async function hi(e){return typeof e=="string"?e:e&&typeof e.text=="function"?await e.text():await new Promise((t,r)=>{try{let n=new FileReader;n.onload=()=>t(n.result),n.onerror=()=>r(n.error||new Error("Failed to read blob")),n.readAsText(e);}catch(n){r(n);}})}async function Pe(e,t,r=false,n=false,i=false){let s={user_id:"",record_id:"",updated:0,uploaded:0,readonly:false,table:{name:"",access_group:0,subscription:{is_subscription_record:false,upload_to_feed:false,notify_subscribers:false,feed_referencing_records:false,notify_referencing_records:false}},referenced_count:0,source:{referencing_limit:null,prevent_multiple_referencing:false,can_remove_referencing_records:false,only_granted_can_reference:false},ip:"",bin:{}},o=false,c=[],l=null;function u(d){let p=d=="**"?"private":parseInt(d);return p=p==0?"public":p==1?"authorized":p==99?"admin":p,p}let g={ip:d=>{let p=d.split("#"),m=p[0];p.length>1&&(s.unique_id=p.slice(1).join("#")),m.slice(-1)==="R"?(s.readonly=true,m=m.slice(0,-1)):s.readonly=false,/^\d{1,3}-\d{1,3}-\d{1,3}-\d{1,3}$/.test(m)&&(m=m.split("-").join("."),o=true),s.ip=m;},rec:d=>{if(!d)return;s.record_id=d;let p=d.substring(0,d.length-9),m=te(p);s.uploaded=m;},usr:d=>{s.user_id=d;},tbl:d=>{if(d&&!s.table.name){let p=d.split("/");s.table.name=oe(p[0]),s.table.access_group=u(p[2]),p?.[3]&&(s.table.subscription.is_subscription_record=true);}},usr_tbl:d=>{let p=d.split("/");s.user_id||(s.user_id=p[0]),s.table.name||(s.table.name=oe(p[1]),s.table.access_group=u(p[3]),p?.[4]&&(s.table.subscription.is_subscription_record=true));},idx:d=>{if(!d)return;let p=d.split("!"),m=oe(p.splice(0,1)[0]),h=ea("!"+p.join("!"));s.index={name:m,value:h};},ref:d=>{d&&(s.reference=d.split("/")[0]);},tags:d=>{s.tags=Array.isArray(d)?d.map(p=>oe(p)):d;},upd:d=>{s.updated=d;},acpt_mrf:d=>{s.source.prevent_multiple_referencing=!d;},ref_limt:d=>{s.source.referencing_limit=d;},rfd:d=>{s.referenced_count=d;},bin:async d=>{let p={},m=s?.reference||null;if(Array.isArray(d)){let h=await Promise.all(d.map(async _=>{try{let w=_.split("/").slice(3).join("/"),b=w.split("/");if(b.length<12)return null;let E=b[b.length-1],k=b[10];if(k==="__data__"&&E==="__json__.json")return {isDataFile:!0,rawUrl:_};if(Yt(k,E))return {isDataFile:!0,rawUrl:_};let S=ht(k),O=b[9],L=b[8],V=u(b[6]),v=_,D=V!=="public"&&Xo.call(this,b)?{expires:Jo,browserCache:zo}:null;if(V!=="public"&&!i)try{v=await Ie.bind(this)(_,{dataType:"endpoint",_ref:m});}catch(M){console.error("Error getting signed url for private file:",M),v=_;}let F={access_group:V,filename:E,url:v,path:w,size:S?S.plainSize:te(O),uploaded:te(L),getFile:(M,Te)=>{let Fe={dataType:M||"download",progress:Te,_ref:m},j=()=>Ie.bind(this)(v,Object.assign({},Fe,{_update:F}));return D?Ie.bind(this)(_,Object.assign({},Fe,D)).catch(()=>j()):j()}};return S&&(F.encrypted=!0,F.stored_size=te(O)),{pathKey:S?S.key:k,obj:F}}catch{return null}}));for(let _ of h)if(_&&!_.isDataFile){if(p[_.pathKey]){p[_.pathKey].push(_.obj);continue}p[_.pathKey]=[_.obj];}}s.bin=p;},prv_acs:d=>{for(let p in d)["notify_subscribers","upload_to_feed","feed_referencing_records","notify_referencing_records"].includes(p)?s.table.subscription[p]=d[p]:p==="referencing_index_restrictions"&&Array.isArray(d[p])?s.source[p]=d[p].map(h=>h&&typeof h=="object"&&typeof h.name=="string"?Object.assign({},h,{name:oe(h.name)}):h):s.source[p]=d[p];},data:async d=>{let p={access_group:s.table.access_group,table_name:s.table.name,user_id:s.user_id,record_id:s.record_id,unique_id:s.unique_id,ctUrl:l},m=()=>{N.call(this)&&(s.encrypted={status:"failed",reason:"DATA_UNAVAILABLE"});},h=async w=>{if(n||!N.call(this)&&!ft(w))return w;let b=await fn.bind(this)(w,p);return b.flag&&(s.encrypted=b.flag),b.value},_=Zo(d);if(_!==d){s.data=await h(_);return}if(d&&typeof d=="object"&&!Array.isArray(d)&&typeof d.__data__=="string"&&Object.keys(d).length===1&&d.__data__.endsWith("/__data__/__json__.json")){let w=d.__data__,b=c.find(E=>E.endsWith(w))||null;if(!b&&!r&&m(),b){if(r){s.data=d;return}try{let E=await Ie.bind(this)(b,{dataType:"blob",_ref:s.reference||null}),k=await hi(E);s.data=await h(JSON.parse(k));}catch(E){console.error("Failed to fetch offloaded record data:",E),s.data=null,m();}return}}s.data=await h(d);}};if(e.record_id)return e;if(Array.isArray(e.bin))for(let d of e.bin)try{if(typeof d!="string")continue;let p=d.split("/").slice(3);p.length>=12&&p[10]==="__data__"&&p[p.length-1]==="__json__.json"&&c.push(d),p.length>=12&&Yt(p[10],p[p.length-1])&&(l=d);}catch{}let f=[];for(let d in g)if(e.hasOwnProperty(d)){let p=g[d](e[d]);p instanceof Promise&&f.push(p);}return o&&(s.user_id="anonymous:"+s.user_id),await Promise.all(f),s}function ea(e){let t=e.substring(3);switch(e.substring(0,3)){case "!S%":return t;case "!N%":let n=t.split("."),i=Number(n[0])-4503599627370496;return n.length===1?i:parseFloat(i.toString()+"."+n[1]);case "!B%":return t==="1";case "!L%":case "!D%":try{return JSON.parse(t)}catch{throw new a("Value parse error.",{code:"PARSE_ERROR"})}default:return e}}async function yi(e){let{endpoints:t}=e;if(typeof t=="string"&&(t=[t]),!Array.isArray(t))throw new a('"endpoints" should be type: array | string.',{code:"INVALID_PARAMETER"});let r=await T.bind(this)("del-files",{endpoints:t,storage:"records"},{auth:true,method:"post"}),n=[];for(let i in r)n.push(Pe.bind(this)(r[i]));return Promise.all(n)}async function Ie(e,t){if(typeof e!="string")throw new a('"url" should be type: string.',{code:"INVALID_PARAMETER"});let r=e,n=e.split("?"),i=n.shift()||"",s=n.length?"?"+n.join("?"):"",o=y.Url(i);e=o+s;let c=false,l=o.split("/"),g=l[2].split("."),f=null;g.length===3&&g[1]==="skapi"&&(f=g[0],c=true);let d=l.slice(3),p=false;if(!c&&(d[0]==="auth"||d[0]==="publ"))try{y.UserId(d[2]),y.UserId(d[3]),p=d[0]=="auth",c=!0;}catch{throw new a("Invalid file url.",{code:"INVALID_PARAMETER"})}let m=f?null:d[1];if(t=y.Params(t,{expires:["number",()=>0],browserCache:["number",()=>0],refresh:["boolean",()=>false],dataType:["base64","blob","endpoint","text","info",()=>"download"],progress:["function","undefined",null],_ref:[null,"string"],_update:E=>E}),t?.dataType==="info")return {url:e,filename:d[d.length-1],fileKey:d[d.length-2],access_group:d[6]==="**"?"private":d[6]==="01"?"authorized":d[6]==="00"?"public":parseInt(d[6]),uploader:d[3],record_id:d[4]==="records"?d[5]:"N/A",filesize:te(d[9]),uploaded:te(d[8])};let h=e.split("/").slice(-1)[0],_=t.expires;if(_){if(!c)throw new a("Expires option can only be used on skapi cdn endpoints.",{code:"INVALID_PARAMETER"});if(_<0)throw new a('"config.expires" should be > 0. (seconds)',{code:"INVALID_PARAMETER"});let E={request:f?"get-host":"get",id:f||d[5],key:r.split("?")[0],expires:_};m&&(E.service=m);let k=t.browserCache,S={auth:true};if(k){if(k<0)throw new a('"config.browserCache" should be > 0. (seconds)',{code:"INVALID_PARAMETER"});S.method="get",S.stableGateway=true,E.browser_cache=k;let O=this.session?.idToken?.payload?.sub||this.user?.user_id;O&&(E.uid=O),E.nocache=Yo(_,t.refresh);}e=(await T.bind(this)("get-signed-url",E,S)).url;}else if(p){let E=Math.floor(Date.now()/1e3);if(!this.bearerToken&&(!this.session?.idToken?.payload?.exp||this.session.idToken.payload.exp<E)){this.log("getFile:requesting new token",null);try{await z.bind(this)().getSession({refreshToken:!0}),this.log("getFile:received new tokens",{exp:this.session?.idToken?.payload?.exp,currTime:E,expiresIn:this.session?.idToken?.payload?.exp-E,token:this.session?.accessToken?.jwtToken,refreshToken:this.session?.refreshToken?.token});}catch(L){throw this.log("getFile:new token error",L),new a("User login is required.",{code:"INVALID_REQUEST"})}}let k=this.bearerToken||this.session?.idToken?.jwtToken;if(!k||!this.user?.user_id)throw new a("User login is required.",{code:"INVALID_REQUEST"});e+=`${e.includes("?")?"&":"?"}t=${encodeURIComponent(k)}`;let S=d[6]==="**"?"**":parseInt(d[6]),O=this.user?.access_group??-1;if(this.user.user_id!==d[3]&&(S==="**"||O<S)){let L=d[5];if(this.__private_access_key[L]&&typeof this.__private_access_key[L]=="string")e+=`&p=${encodeURIComponent(this.__private_access_key[L])}`;else if(this.owner!==this.host)try{let V=await this.requestPrivateRecordAccessKey({record_id:L,reference_id:t?._ref});e+=`&p=${encodeURIComponent(V)}`;}catch{}}}if((N.call(this)?ar(e):null)&&t?.dataType!=="endpoint"&&t?.dataType!=="info"){let E=await T.bind(this)(e,null,{method:"get",contentType:null,responseType:"blob",fetchOptions:{progress:t?.progress}},{ignoreService:true}),k=await Cn.bind(this)(e,E);if(t?.dataType==="blob")return k;if(t?.dataType==="text")return await hi(k);if(t?.dataType==="base64")return await new Promise((L,V)=>{let v=new FileReader;v.onloadend=()=>L(v.result),v.onerror=()=>V(v.error),v.readAsDataURL(k);});let S=URL.createObjectURL(k),O=document.createElement("a");return O.href=S,document.body.appendChild(O),O.setAttribute("download",h),O.click(),document.body.removeChild(O),setTimeout(()=>URL.revokeObjectURL(S),6e4),null}if(t?.dataType==="endpoint")return t._update&&(t._update.url=e),e;if(t?.dataType==="download"){let E=document.createElement("a");return E.href=e,document.body.appendChild(E),E.setAttribute("download",h),E.target="_blank",E.click(),document.body.removeChild(E),null}return new Promise(async(E,k)=>{try{let S=await T.bind(this)(e,null,{method:"get",contentType:null,responseType:t?.dataType==="text"?"text":"blob",fetchOptions:{progress:t?.progress}},{ignoreService:!0});if(t?.dataType==="base64"){let O=new FileReader;O.onloadend=()=>E(O.result),O.readAsDataURL(S);}else E(S);}catch(S){if(t?.browserCache&&!t?.refresh)try{E(await Ie.bind(this)(r,Object.assign({},t,{refresh:!0})));return}catch(O){k(O);return}k(S);}})}function Rt(e,t){return `${e||this.service}/${t||this.owner}`}function yr(e,t){let r=this.__my_unique_ids[e];return r?r[t]:void 0}function mi(e,t,r){this.__my_unique_ids[e]||(this.__my_unique_ids[e]={}),this.__my_unique_ids[e][t]=r;}function ta(e,t){this.__my_unique_ids[e]&&delete this.__my_unique_ids[e][t];}async function bi(e,t=false){e=q(e,{ignoreEmpty:true}).data||{};let r=Rt.bind(this)(e?.service,e?.owner),n="",i=fi(e);if(i){if(e=i,n=e.record_id||e.unique_id,typeof n=="string"){typeof this.__private_access_key?.[n]=="string"&&(e.private_key=this.__private_access_key?.[n]||void 0);let s=yr.bind(this)(r,n);s&&(t?ta.bind(this)(r,n):e.record_id=s);}}else {let s=await Q.bind(this)(),o=e?.reference,c=false;typeof o=="object"&&Object.keys(o).length&&(o?.record_id||o?.unique_id?(n=o.record_id||o.unique_id,n&&typeof this.__private_access_key?.[n]=="string"&&(e.private_key=this.__private_access_key?.[n]||void 0),e.reference=n):o?.user_id&&(c=o.user_id===this.user?.user_id,e.reference=o.user_id)),typeof e?.table=="string"&&(e.table={name:e.table,access_group:0}),e.index&&e.index.hasOwnProperty("range")&&e.index.hasOwnProperty("condition")&&delete e.index.range;let l=u=>({table:{name:g=>Oe(g,"table.name"),access_group:hr.bind(this),subscription:g=>y.UserId(g,'User ID in "subscription"')},reference:"string",index:{name:["$updated","$uploaded","$referenced_count","$user_id",g=>et(g,"index.name")],value:g=>{let f={$updated:"number",$uploaded:"number",$referenced_count:"number",$user_id:y.UserId};if(f.hasOwnProperty(u.index.name)){let d=f[u.index.name];if(typeof d=="function")return d(g);if(d!==typeof g)throw new a(`"index.value" should be type: ${d}.`,{code:"INVALID_PARAMETER"});return g}return typeof g=="string"&&!g?"":typeof g=="string"&&gr(u.index.name)?pr(g,"index.value"):Et(g)},condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq"],range:g=>gi(g,u)},tag:g=>{if(g==null)return g;if(typeof g=="string")return wt(g,"tag");throw new a('"tag" should be type: string.',{code:"INVALID_PARAMETER"})},private_key:"string"});e=y.Params(e||{},l(e),c||s?[]:["table"],{ignoreEmpty:true});}return {query:e,is_reference_fetch:n}}async function _i(e,t){await this.__connection;let r=await bi.bind(this)(e),n=r.is_reference_fetch,i=await T.bind(this)("get-records",r.query,{fetchOptions:t,auth:!!this.__user,method:this.__user?"post":"get"});n&&i?.reference_private_key&&typeof i.reference_private_key=="string"&&(this.__private_access_key[n]=i.reference_private_key);let s=[];for(let o in i.list)s.push(Pe.bind(this)(i.list[o]));return i.list=await Promise.all(s),i}function wi(e){let t="",r=[],n=Rt.bind(this)(e?.service,e?.owner),i=y.Params(e||{},{record_id:o=>{let c=typeof o=="string"?yr.bind(this)(n,o):void 0;return c||le(o,"record_id",{allowEmpty:false})},unique_id:["string",null],readonly:"boolean",table:{name:o=>Oe(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:hr.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 c={name:u=>et(u,'"name" in "index_restrictions"'),value:u=>Et(u),condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq","!=","ne",()=>null],range:u=>{if(u!==null&&typeof o.value!=typeof u)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 u}};Array.isArray(o)||(o=[o]);let l=o.map(u=>y.Params(u,c,["name"]));if(l.length)for(let u of l)u.condition&&u.hasOwnProperty("range")&&delete u.range;return l}},reference:o=>{if(o===null)return {record_id:null};if(o){if(typeof o=="string"){t=o;let c=yr.bind(this)(n,o);return c||o}if(typeof o!="object")throw new a('"reference" should be type: <string | object>.',{code:"INVALID_PARAMETER"});return y.Params(o,{unique_id:"string",record_id:c=>c==null?c:(t=c,typeof this.__private_access_key?.[c]=="string"&&(e.reference_private_key=this.__private_access_key[c]||void 0),le(c,"reference.record_id",{allowEmpty:false,onlyAlphanumeric:true}))})}},index:[null,{name:o=>et(o,"index.name"),value:o=>Et(o)}],tags:o=>{if(o==null)return o;if(typeof o=="string"&&(o=o.split(",").map(c=>c.trim())),!Array.isArray(o))throw new a('"tag" should be type: <string | string[]>.',{code:"INVALID_PARAMETER"});return o.map(c=>wt(c,"tag"))},remove_bin:o=>{if(!o)return null;let c=[];if(Array.isArray(o))for(let l of o)if(typeof l=="string")c.push(l.split("?")[0]);else if(l.url&&l.size&&l.filename){let g=l.url.split("/").slice(0,3).join("/")+"/"+l.path;c.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 c},progress:"function",data:o=>o},[],{precall:o=>{let c=o?.data||{};if(!c?.record_id&&!c.table)throw new a('"table.name" is required.',{code:"INVALID_PARAMETER"});typeof c.table=="string"&&(c.table={name:c.table,access_group:0}),o.files&&(r=o.files);}}),s=e.progress||null;if(delete i.progress,!this.__user){let o=!!(i.table?.subscription?.is_subscription_record||i.table?.subscription?.upload_to_feed||i.table?.subscription?.notify_subscribers||i.table?.subscription?.feed_referencing_records||i.table?.subscription?.notify_referencing_records);if(i.record_id)throw new a("Public users cannot update existing records.",{code:"INVALID_REQUEST"});if(i.table.access_group!=="public"&&i.table.access_group!==0)throw new a("Public users can only post records to public tables.",{code:"INVALID_REQUEST"});if(o)throw new a("Public users cannot post subscription records.",{code:"INVALID_REQUEST"});if(i.remove_bin)throw new a("Public users cannot remove files from records.",{code:"INVALID_REQUEST"});if(i.unique_id)throw new a("Public users cannot set unique_id for records.",{code:"INVALID_REQUEST"})}return {config:i,progress:s,is_reference_post:t,files:r}}async function Ei(e){if(await this.__connection,!Array.isArray(e)||!e.length)throw new a('"params" should be a non-empty array.',{code:"INVALID_PARAMETER"});let t=[],r,n,i=null,s={},c={_is_bulk_:await Promise.all(e.map(async(p,m)=>{if(!p||typeof p!="object"||Array.isArray(p))throw new a(`"params[${m}]" should be type: <object>.`,{code:"INVALID_PARAMETER"});let h=wi.bind(this)(p),_=h.config;if(N.call(this)){let w=Object.prototype.hasOwnProperty.call(_,"data"),b=await Xt.bind(this)(_.data,p,w);b.encrypted&&(_.data=b.send,s[m]=b.plain);}if(h.is_reference_post&&t.push(h.is_reference_post),typeof _.progress=="function"&&i===null&&(i=_.progress),_.service!==void 0){if(r===void 0)r=_.service;else if(r!==_.service)throw new a('All bulk params should share the same "service" value.',{code:"INVALID_PARAMETER"})}if(_.owner!==void 0){if(n===void 0)n=_.owner;else if(n!==_.owner)throw new a('All bulk params should share the same "owner" value.',{code:"INVALID_PARAMETER"})}return delete _.progress,delete _.service,delete _.owner,_})),service:"",owner:""};r!==void 0&&(c.service=r),n!==void 0&&(c.owner=n);let l={auth:!!this.__user,method:"post"},u={};Object.keys(u).length&&Object.assign(l,{fetchOptions:u});let g=await T.bind(this)("post-record",c,l),f=await Promise.all(g.map((p,m)=>Pe.bind(this)(p,"called from postRecord",false,s.hasOwnProperty(m))));for(let p=0;p<f.length;p++)s.hasOwnProperty(p)&&f[p]&&!f[p].error&&(f[p].data=s[p],f[p].encrypted={status:"encrypted"});let d=Rt.bind(this)(r,n);for(let p=0;p<g.length;p++){let m=g[p],h=f[p];if(m&&typeof m=="object"&&m.error&&h&&!h.record_id&&(h.error=m.error),typeof m?.reference_private_key=="string")for(let _ of t)this.__private_access_key[_]=m.reference_private_key;h?.unique_id&&mi.bind(this)(d,h.unique_id,h.record_id);}return f}async function mr(e,t,r){if(await this.__connection,!t)throw new a('"config" argument is required.',{code:"INVALID_PARAMETER"});let n=wi.bind(this)(t),i=n.config,s=n.progress,o=n.is_reference_post,c={auth:!!this.__user,method:"post"},l=[],u=q(e);r&&Array.isArray(r)&&r.length&&(l=l.concat(r)),u.files&&Array.isArray(u.files)&&u.files.length&&(l=l.concat(u.files));let g=t?.data!==void 0?t.data:u.data,f=g!==void 0,d=await Xt.bind(this)(g,t,f),p=null;p=Object.assign({},i),delete p.data,d.omit||(p.data=d.send);let m={};if(typeof s=="function"&&(m.progress=s),Object.keys(m).length&&Object.assign(c,{fetchOptions:m}),d.files==="decrypt"&&t?.record_id){let b=await cr.bind(this)(t.record_id,"decrypt",s);if(b.length){let E=p.remove_bin;p.remove_bin=Array.isArray(E)?E.concat(b):b;}}if(d.spill&&t?.record_id){let b=new FormData;if(b.append(ze,new File([d.spill],"payload.bin",{type:"application/octet-stream"})),await Ze.bind(this)(b,{record_id:t.record_id}),d.retireCt){let E=p.remove_bin,k=[d.retireCt];p.remove_bin=Array.isArray(E)?E.concat(k):k;}}let h=await T.bind(this)("post-record",p,c);if(d.encrypted&&h?.rec&&un.bind(this)(h.rec,d.dek),d.files==="encrypt"&&h?.rec)try{let b=await cr.bind(this)(h.rec,"encrypt",s);b.length&&await mr.bind(this)(void 0,{record_id:h.rec,remove_bin:b});}catch(b){console.error("Failed to encrypt existing attachments after making the record private:",b);}if(J()&&l.length){let b=new FormData;for(let S of l)b.append(S.name,S.file,S.file.name);let E={record_id:h.rec,progress:s};i.hasOwnProperty("service")&&(E.service=i.service);let{bin_endpoints:k}=await Ze.bind(this)(b,E);h.bin?h.bin.push(...k):h.bin=k;}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"),w=await Pe.bind(this)(h,"called from postRecord",true,d.encrypted);if(_&&(w.data=u.data),d.encrypted&&(w.data=d.plain,w.encrypted={status:"encrypted",recipients:Object.keys(d.send.k||{})}),w.unique_id){let b=Rt.bind(this)(i?.service,i?.owner);mi.bind(this)(b,w.unique_id,w.record_id),J()&&(this.__uniqueIdsPersistTimer!==null&&clearTimeout(this.__uniqueIdsPersistTimer),this.__uniqueIdsPersistTimer=setTimeout(()=>{this.__uniqueIdsPersistTimer=null;try{window.sessionStorage.setItem(`${b}:uniqueids`,JSON.stringify(this.__my_unique_ids[b]||{}));}catch{}},500));}return w}async function Ai(e,t){let r=await T.bind(this)("get-table",y.Params(e||{},{table:i=>Oe(i,"table",{allowEmpty:true}),condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq","!=","ne"]}),Object.assign({auth:!!this.__user},{fetchOptions:t})),n={cnt_rec:"number_of_records",tbl:"table",srvc:"service",grp_:"number_of_records_in_access_group_"};if(Array.isArray(r?.list))for(let i of r.list){for(let s in n){if(s==="grp_"){for(let o in i)if(o.startsWith("grp_")){let c=o.substring(4);c==="pv"?c="private":c==="00"?c="public":c==="01"?c="authorized":c==="99"&&(c="admin"),i[`number_of_records_in_access_group_${c}`]=i[o],delete i[o];}}i.hasOwnProperty(s)&&(i[n[s]]=i[s],delete i[s]);}typeof i.table=="string"&&(i.table=oe(i.table));}return r}async function Ri(e,t){if(!e?.table)throw new a('"table" is required.',{code:"INVALID_PARAMETER"});let r=y.Params(e||{},{table:s=>Oe(s,"table",{allowEmpty:true}),index:s=>et(s,"index.name"),order:{by:["average_number","total_number","number_count","average_bool","total_bool","bool_count","string_count","index_name","number_of_records"],value:s=>{if(e?.order?.by==="index_name"&&typeof s=="string")return le(s,"order.value",{allowEmpty:true,maxLength:256,blockKeyDelimiters:true});if(typeof s!="string"&&typeof s!="number"&&typeof s!="boolean")throw new a('"order.value" should be type: <string | number | boolean>.',{code:"INVALID_PARAMETER"});return s},condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq","!=","ne"]}},["table"]);if(r.hasOwnProperty("order")){if(!r.order?.by)throw new a('"order.by" is required.',{code:"INVALID_PARAMETER"});if(r.order.hasOwnProperty("condition")&&!r.order.hasOwnProperty("value"))throw new a('"value" is required for "condition".',{code:"INVALID_PARAMETER"});if(r.hasOwnProperty("index")&&r.index.substring(r.index.length-1)!==".")throw new a('"index" should be a parent index name of the compound index when using "order.by"',{code:"INVALID_PARAMETER"})}let n=await T.bind(this)("get-index",r,Object.assign({auth:!!this.__user},{fetchOptions:t})),i={cnt_bool:"boolean_count",cnt_numb:"number_count",totl_numb:"total_number",totl_bool:"total_bool",avrg_numb:"average_number",avrg_bool:"average_bool",cnt_str:"string_count"};return Array.isArray(n?.list)&&(n.list=n.list.map(s=>{let o=s.idx.split("/"),c={table:oe(o[1]),index:oe(o[2]),number_of_records:s.cnt_rec};for(let l in i)Object.prototype.hasOwnProperty.call(s,l)&&(c[i[l]]=s[l]);return c})),n}async function Ii(e,t){let r=await T.bind(this)("get-tag",y.Params(e||{},{table:n=>Oe(n,"table",{allowEmpty:true}),tag:n=>wt(n,"tag",{allowEmpty:true}),condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq","!=","ne"]}),Object.assign({auth:!!this.__user},{fetchOptions:t}));return Array.isArray(r?.list)&&(r.list=r.list.map(n=>{let i=n.tag.split("/");return {table:oe(i[1]),tag:oe(i[0]),number_of_records:n.cnt_rec}})),r}async function Pi(e,t){let r=await T.bind(this)("get-uniqueid",y.Params(e||{},{unique_id:"string",condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq","!=","ne"]}),Object.assign({auth:!!this.__user},{fetchOptions:t}));if(Array.isArray(r?.list))for(let n in r.list){let i=r.list[n];r.list[n]={unique_id:i.unq,record_id:i.rec};}return r}async function Ti(e,t){await this.__connection;let r=await bi.bind(this)(e,true),n=r.is_reference_fetch,i=await T.bind(this)("del-records",r.query,{auth:true,fetchOptions:t});return n&&typeof i?.reference_private_key=="string"&&(this.__private_access_key[n]=i.reference_private_key),Array.isArray(i?.list)&&(i.list=await Promise.all(i.list.map(async s=>{if(!s||typeof s!="object")return s;try{return await Pe.bind(this)(s,"called from deleteRecords",!0,!1,!0)}catch{return s}}))),i?.message||i}async function Si(e){if(N.call(this)){let t=typeof e.user_id=="string"?[e.user_id]:e.user_id;Array.isArray(t)&&t.length&&await or.bind(this)(e.record_id,t);}return Ni.bind(this)({record_id:e.record_id,user_id:e.user_id,execute:"add"})}async function ki(e){let t=await Ni.bind(this)({record_id:e.record_id,user_id:e.user_id||null,execute:"remove"});if(N.call(this)){let r=typeof e.user_id=="string"?[e.user_id]:e.user_id;await Pn.bind(this)(e.record_id,Array.isArray(r)&&r.length?r:null);}return t}async function vi(e,t){let r={record_id:e.record_id||void 0,user_id:e.user_id||void 0,execute:"list"};if(!r.record_id&&!r.user_id)throw new a("Either record_id or user_id must be provided.",{code:"INVALID_PARAMETER"});if(r.user_id)if(typeof r.user_id=="string")y.UserId(r.user_id),r.user_id=[r.user_id];else if(Array.isArray(r.user_id))for(let s of r.user_id)y.UserId(s);else throw new a("user_id should be type: <string | string[]>",{code:"INVALID_PARAMETER"});let n=s=>(s.rec_usr?(s.record_id=s.rec_usr.split("/")[0],s.user_id=s.rec_usr.split("/")[1]):s.usr_rec&&(s.user_id=s.usr_rec.split("/")[0],s.record_id=s.usr_rec.split("/")[1]),s),i=await T.bind(this)("grant-private-access",r,{auth:true,fetchOptions:t});return i.list=i.list.map(n),i}function Ui(e){let t=e.record_id,r=e.reference_id||void 0;if(!t)throw new a("Record ID is required.",{code:"INVALID_PARAMETER"});if(typeof t!="string")throw new a("Record ID should be type: <string | string[]>",{code:"INVALID_PARAMETER"});if(r&&typeof r!="string")throw new a("Reference ID should be type: <string>",{code:"INVALID_PARAMETER"});if(typeof this.__private_access_key[t]=="string")return Promise.resolve(this.__private_access_key[t]);if(At[t])return At[t];let n=T.bind(this)("request-private-access-key",{record_id:t,reference_id:r},{auth:true}).then(i=>{let s=typeof i=="string"?i:i?.private_key;if(typeof s!="string")throw new a("Invalid private access key response.",{code:"ERROR"});return this.__private_access_key[t]=s,s}).finally(()=>{delete At[t];});return At[t]=n,n}function Ni(e){e.execute;let r=y.Params(e,{record_id:"string",user_id:n=>{if(!n)throw new a("User ID is required.",{code:"INVALID_PARAMETER"});let i=n;if(typeof i=="string"&&(i=[i]),i.length>100)throw new a("Cannot process more than 100 users at once.",{code:"INVALID_REQUEST"});for(let s of i)y.UserId(s,'User ID in "user_id"');return i},execute:["add","remove"]},["execute","record_id","user_id"]);return r.user_id||(r.user_id=null),T.bind(this)("grant-private-access",r,{auth:true})}var U={},H={},ae={},de={},ue={},It={},Pt={};function Di(e,t,r){e[t]||(e[t]=[]),e[t].push(r);}async function Tt(e,t,r){let n=[];if(e[t]){for(let i of e[t])if(i){let s=r(i);s instanceof Promise&&(s=await s),n.push(s);}delete e[t];}return n}async function _r(e,t){if(!this?.session?.accessToken?.jwtToken)throw new a("Access token is required.",{code:"INVALID_PARAMETER"});let r=await this.__socket;async function n(i,s,o){this.log("answerSdpOffer from",s),await U[s].setRemoteDescription(new RTCSessionDescription(i));let c=await U[s].createAnswer();await U[s].setLocalDescription(c),o.send(JSON.stringify({action:"rtc",uid:s,content:{sdpanswer:c},token:this.session.accessToken.jwtToken}));}U?.[t]?e?(await Tt(Pt,t,i=>n.bind(this)(i,t,r)),await n.bind(this)(e,t,r)):await Tt(Pt,t,i=>n.bind(this)(i,t,r)):e&&Di(Pt,t,e);}async function wr(e,t){if(this.log("receiveIceCandidate",e),U?.[t]&&U[t]?.remoteDescription&&U[t]?.remoteDescription?.type){if(!e)return Tt(It,t,r=>U[t].addIceCandidate(r));await Tt(It,t,r=>U[t].addIceCandidate(r)),await U[t].addIceCandidate(e);}else Di(It,t,e);}async function ce(e){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebRTC is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});y.Params(e,{cid:s=>{if(typeof s!="string")throw new a('"cid" should be type: <string>.',{code:"INVALID_PARAMETER"});if(s&&s.slice(0,4)!=="cid:")throw new a('"cid" should be a valid connection id.',{code:"INVALID_PARAMETER"});return s},close:"boolean"});let t=await this.__socket,{cid:r,close_all:n=false}=e||{};if(!n&&!r)throw new a('"cid" is required.',{code:"INVALID_PARAMETER"});let i=s=>{if(!s)throw new a('"cid" is required.',{code:"INVALID_PARAMETER"});if(delete Pt[s],delete It[s],H[s]&&Object.values(H[s]).forEach(o=>{o.readyState!=="closed"&&o.close();}),delete H[s],U?.[s]){U[s].connectionState!=="closed"&&(U[s].close(),t.send(JSON.stringify({action:"rtc",uid:s,content:{hungup:this.user.user_id},token:this.session.accessToken.jwtToken})));let o={type:"connectionstatechange",target:U[s],timestamp:new Date().toISOString(),state:U[s].connectionState,iceState:U[s].iceConnectionState,signalingState:U[s].signalingState};ue[s]&&ue[s](o),this.log("closeRTC",o);}delete ue[s],delete de[s],delete ae[s],delete U[s];};if(n)for(let s in U)i(s);else i(r);this.log("Cleaning up media stream..."),this.__mediaStream&&(this.__mediaStream.getTracks().forEach(s=>{s.stop();}),this.__mediaStream=null);}async function xi(e){if(e instanceof MediaStream)return e;if(!e.video&&!e.audio){let t=new MediaStream,r=document.createElement("canvas");r.width=1,r.height=1;let i=r.captureStream().getVideoTracks()[0];return t.addTrack(i),t}return window.navigator.mediaDevices.getUserMedia(e)}async function Ci(e,t){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebRTC is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});if(typeof t!="function")throw new a("Callback is required.",{code:"INVALID_PARAMETER"});if(!this?.session?.accessToken?.jwtToken)throw new a("Access token is required.",{code:"INVALID_PARAMETER"});e=y.Params(e,{cid:o=>{if(typeof o!="string")throw new a('"cid" should be type: <string>.',{code:"INVALID_PARAMETER"});if(o&&o.slice(0,4)!=="cid:")throw new a('"cid" should be a valid connection id.',{code:"INVALID_PARAMETER"});return o},ice:["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:r,ice:n}=e;if(!(e?.media instanceof MediaStream)&&(e?.media?.video||e?.media?.audio)&&window.location.hostname!=="localhost"&&window.location.protocol!=="https:")throw new a("Media stream is only supported on either localhost or https.",{code:"INVALID_REQUEST"});let i=this.__socket?await this.__socket:this.__socket;if(!i)throw new a("No realtime connection. Execute connectRealtime() before this method.",{code:"INVALID_REQUEST"});if(i.readyState!==1)throw new a("Realtime connection is not ready.",{code:"INVALID_REQUEST"});let s={iceServers:[{urls:n}]};U?.[r]||(U[r]=new RTCPeerConnection(s)),e?.media&&(this.__mediaStream=await xi(e.media),this.__mediaStream.getTracks().forEach(o=>{U[r].addTrack(o,this.__mediaStream);})),ue[r]=t,H[r]||(H[r]={});for(let o=0;o<e.channels.length;o++){let c=e.channels[o];if(typeof c=="string")switch(c){case "text-chat":c={ordered:true,maxRetransmits:10,protocol:"text-chat"};break;case "file-transfer":c={ordered:false,maxPacketLifeTime:3e3,protocol:"file-transfer"};break;case "video-chat":c={ordered:true,maxRetransmits:10,protocol:"video-chat"};break;case "voice-chat":c={ordered:true,maxRetransmits:10,protocol:"voice-chat"};break;case "gaming":c={ordered:false,maxPacketLifeTime:100,protocol:"gaming"};break;default:c={ordered:true,maxRetransmits:10,protocol:"default"};break}let l=c.protocol||"default";if(Object.keys(H[r]).includes(l))throw new a(`Data channel with the protocol "${l}" already exists.`,{code:"INVALID_REQUEST"});let u=U[r].createDataChannel(l,c);H[r][l]=u;}for(let o in H[r]){let c=H[r][o];Fi.bind(this)(r,c);}return Li.bind(this)(r,["onnegotiationneeded"]),await br.bind(this)(r),{hangup:()=>ae[r]&&ae[r](false),connection:new Promise(o=>{ae[r]=(c=>{if(this.log("receiver picked up the call",r),!c)return ce.bind(this)({cid:r}),null;U[r].onnegotiationneeded=()=>{this.log("onnegotiationneeded",`sending offer to "${r}".`),br.bind(this)(r),ue[r]&&ue[r]({type:"negotiationneeded",target:U[r],timestamp:new Date().toISOString(),signalingState:U[r].signalingState,connectionState:U[r].iceConnectionState,gatheringState:U[r].iceGatheringState});},o({target:U[r],channels:H[r],hangup:()=>ce.bind(this)({cid:r}),media:this.__mediaStream});}).bind(this);})}}function Oi(e){return async(t,r)=>{t=t||{},t=q(t).data;let n=e.sender_cid,i=await this.__socket;if(!de[n])return null;if(typeof r!="function")throw new a("Callback is required.",{code:"INVALID_PARAMETER"});if(!(t?.media instanceof MediaStream)&&(t?.media?.video||t?.media?.audio)&&window.location.hostname!=="localhost"&&window.location.protocol!=="https:")throw new a("Media stream is only supported on either localhost or https.",{code:"INVALID_REQUEST"});let{ice:s="stun:stun.skapi.com:3468"}=t;return U?.[n]||(U[n]=new RTCPeerConnection({iceServers:[{urls:s}]})),t?.media&&(this.__mediaStream=await xi(t.media),this.__mediaStream.getTracks().forEach(o=>{U[n].addTrack(o,this.__mediaStream);})),delete de[n],ue[n]=r,H[n]||(H[n]={}),U[n].ondatachannel=o=>{this.log("ondatachannel",`received data channel "${o.channel.label}".`);let c=o.channel;H[n][c.label]=c,Fi.bind(this)(n,c);},Li.bind(this)(n,["onnegotiationneeded"]),await _r.bind(this)(null,n),await wr.bind(this)(null,n),i.send(JSON.stringify({action:"rtc",uid:n,content:{pickup:this.user.user_id},token:this.session.accessToken.jwtToken})),{target:U[n],channels:H[n],hangup:()=>ce.bind(this)({cid:n}),media:this.__mediaStream}}}async function br(e){if(!this?.session?.accessToken?.jwtToken)throw new a("Access token is required.",{code:"INVALID_PARAMETER"});this.log("sendOffer",e);let t=await this.__socket,r=await U[e].createOffer();await U[e].setLocalDescription(r);let n=U[e].localDescription;this.log("rtcSdpOffer to",n),t.send(JSON.stringify({action:"rtc",uid:e,content:{sdpoffer:n},token:this.session.accessToken.jwtToken}));}async function ra(e,t){if(!this?.session?.accessToken?.jwtToken)throw new a("Access token is required.",{code:"INVALID_PARAMETER"});this.log("sendIceCandidate to",t);let r=await this.__socket;if(!e.candidate){this.log("candidate-end","all ice candidates have been sent");return}let n=ue[t]||(()=>{}),i=e.candidate;this.log("ice gathering state set to",U[t].iceGatheringState),n({type:"icecandidate",target:U[t],timestamp:new Date().toISOString(),candidate:e.candidate.candidate,sdpMid:e.candidate.sdpMid,sdpMLineIndex:e.candidate.sdpMLineIndex,usernameFragment:e.candidate.usernameFragment,protocol:e.candidate.protocol,gatheringState:U[t].iceGatheringState,connectionState:U[t].iceConnectionState}),r.send(JSON.stringify({action:"rtc",uid:t,content:{candidate:i},token:this.session.accessToken.jwtToken}));}function Li(e,t){let r=new Set(t),n=ue[e]||(o=>{}),i=U[e],s={ontrack:o=>{n({type:"track",target:i,timeStamp:o.timeStamp,streams:o.streams,track:o.track});},onicecandidate:o=>{ra.bind(this)(o,e),o.candidate?n({type:"icecandidate",target:i,timestamp:new Date().toISOString(),candidate:o.candidate.candidate,sdpMid:o.candidate.sdpMid,sdpMLineIndex:o.candidate.sdpMLineIndex,usernameFragment:o.candidate.usernameFragment,protocol:o.candidate.protocol,gatheringState:i.iceGatheringState,connectionState:i.iceConnectionState}):n({type:"icecandidateend",target:i,timestamp:new Date().toISOString()});},onicecandidateerror:o=>{n({type:"icecandidateerror",target:i,timestamp:new Date().toISOString(),errorCode:o.errorCode,errorText:o.errorText,url:o.url,hostCandidate:o.hostCandidate,gatheringState:i.iceGatheringState,connectionState:i.iceConnectionState});},oniceconnectionstatechange:()=>{n({type:"iceconnectionstatechange",target:i,timestamp:new Date().toISOString(),state:i.iceConnectionState,gatheringState:i.iceGatheringState,signalingState:i.signalingState});},onicegatheringstatechange:()=>{n({type:"icegatheringstatechange",target:i,timestamp:new Date().toISOString(),state:i.iceGatheringState,connectionState:i.iceConnectionState,signalingState:i.signalingState});},onsignalingstatechange:()=>{n({type:"signalingstatechange",target:i,timestamp:new Date().toISOString(),state:i.signalingState,connectionState:i.iceConnectionState,gatheringState:i.iceGatheringState});},onnegotiationneeded:()=>{br.bind(this)(e),n({type:"negotiationneeded",target:i,timestamp:new Date().toISOString(),signalingState:i.signalingState,connectionState:i.iceConnectionState,gatheringState:i.iceGatheringState});},onconnectionstatechange:()=>{n({type:"connectionstatechange",target:i,timestamp:new Date().toISOString(),state:i.connectionState,iceState:i.iceConnectionState,signalingState:i.signalingState});let o=i.connectionState;(o==="disconnected"||o==="failed"||o==="closed")&&ce.bind(this)({cid:e});}};for(let[o,c]of Object.entries(s))r.has(o)||(i[o]=c);}function Fi(e,t,r){let n=new Set(r),i=ue[e]||(o=>{}),s={onmessage:o=>{let c={type:o.type,target:t,timeStamp:o.timeStamp,data:o.data,lastEventId:o.lastEventId,origin:o.origin,readyState:t.readyState,bufferedAmount:t.bufferedAmount};this.log(`${t.label}: message`,o.data),i(c);},onerror:o=>{let c={type:o.type,target:t,timeStamp:o.timeStamp,error:o.error.message,errorCode:o.error.errorDetail,readyState:t.readyState,label:t.label};this.log(`${t.label}: error`,o.error.message),i(c);},onclose:o=>{let c={type:o.type,target:t,timeStamp:o.timeStamp,readyState:t.readyState,label:t.label,id:t.id};this.log(`${t.label}: closed`,null),i(c),H[e]&&(delete H[e][t.label],Object.keys(H[e]).length===0&&ce.bind(this)({cid:e}));},onbufferedamountlow:o=>{let c={target:t,bufferedAmount:t.bufferedAmount,bufferedAmountLowThreshold:t.bufferedAmountLowThreshold,type:o.type,timeStamp:o.timeStamp};this.log(`${t.label}: bufferedamountlow`,t.bufferedAmount),i(c);},onopen:o=>{this.log("dataChannel",`data channel: "${t.label}" is open and ready to send messages.`);let c={type:o.type,target:t,timeStamp:o.timeStamp,readyState:t.readyState,label:t.label,id:t.id,ordered:t.ordered,maxRetransmits:t.maxRetransmits,protocol:t.protocol};i(c);}};for(let[o,c]of Object.entries(s))n.has(o)||(t[o]=c);}var we,_e=null,tt=true,Le=0;async function na(){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebSocket is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});if(await this.getProfile(),!this.session)throw new a("No access.",{code:"INVALID_REQUEST"});let e=await this.record_endpoint;return new WebSocket(e.websocket_private+"?token="+this.session.accessToken.jwtToken)}var Er=null;async function Mi(){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebSocket is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});tt=true;let e=this.__socket?await this.__socket:this.__socket;ce.bind(this)({close_all:true}),we&&Ar.bind(this)({group:null}),Le=0,_e&&(_e.terminate(),_e=null);try{e&&e.close();}catch{}return window.removeEventListener("visibilitychange",Er),this.__socket=null,null}async function St(e,t=50,r){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebSocket is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});if(typeof e!="function")throw new a("Callback must be a function.",{code:"INVALID_REQUEST"});if(r==="reconnect"){if(this.__socket instanceof Promise){let n=await this.__socket;if(n.readyState!==WebSocket.CLOSED&&n.readyState!==WebSocket.CLOSING)return this.__socket}}else if(tt&&(Er=()=>{!document.hidden&&!tt&&St.bind(this)(e,0,"reconnect");},this.__socket instanceof Promise))return this.__socket;_e&&(_e.terminate(),_e=null),this.__socket=new Promise(async n=>{await xe.bind(this)(),setTimeout(async()=>{let i=await na.bind(this)();i.onopen=()=>{tt=false,Le=0,r!=="reconnect"&&window.addEventListener("visibilitychange",Er),this.log("realtime onopen","Connected to WebSocket server."),e({type:"success",message:"Connected to WebSocket server."}),we&&i.send(JSON.stringify({action:"joinRoom",rid:we,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 sr=Object.defineProperty;var or=Object.getOwnPropertyDescriptor;var oe=(t=>t
212
212
  }
213
213
 
214
214
  runInterval(); // Start interval
215
- `,o=new Blob([s],{type:"application/javascript"});ne=new Worker(URL.createObjectURL(o)),ne.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){Q[u.sender_cid]&&(Q[u.sender_cid](false),delete Q[u.sender_cid]),G[u.sender_cid]&&delete G[u.sender_cid],S?.[u.sender_cid]&&H.bind(this)({cid:u.sender_cid}),u.type="rtc:closed",t(u);return}if(c.candidate&&Xe.bind(this)(c.candidate,u.sender_cid),c.sdpoffer&&(Ge.bind(this)(c.sdpoffer,u.sender_cid),G[u.sender_cid]||(G[u.sender_cid]=u.sender_cid,delete u.message,u.connectRTC=ln.bind(this)(u),u.type="rtc:incoming",u.hangup=(()=>{S[u.sender_cid]?H.bind(this)({cid:u.sender_cid}):G[u.sender_cid]&&(delete G[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&&Q[u.sender_cid]&&(Q[u.sender_cid](true),delete Q[u.sender_cid]),c.sdpanswer&&S[u.sender_cid])if(S[u.sender_cid].signalingState==="have-local-offer")await S[u.sender_cid].setRemoteDescription(new RTCSessionDescription(c.sdpanswer));else throw new a("Invalid signaling state.",{code:"INVALID_REQUEST"})}}else t(u);},i.onclose=()=>{be?(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."}),ge++,ge<3?(this.log("realtime onclose","Reconnecting to WebSocket server..."+ge),t({type:"reconnect",message:"Reconnecting to WebSocket server..."+ge}),Oe.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 fn(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 ce.bind(this)(),t=U(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}),re!==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 Ye(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 ce.bind(this)(),t=U(t,{nullIfEmpty:true}).data;let{group:n=null}=t;if(!n&&!re)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})),re=n,{type:"success",message:n?`Joined realtime message group: "${n}".`:"Left realtime message group."}}async function hn(t,e){t=f.Params(t,{user_id:r=>f.UserId(r,'User ID in "user_id"'),group:["string",()=>{if(!re)throw new a('No group has been joined. Otherwise "group" is required.',{code:"INVALID_REQUEST"});return re}]});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 pn(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 _n=typeof FormData<"u",bn=typeof HTMLFormElement<"u",yn=typeof SubmitEvent<"u",X={},ye={},Z={};function et(t){return Object.freeze({id:t,status:"stopped"})}function wn(t){return !!t&&typeof t=="object"&&t.status==="stopped"}function En({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&&!X?.[s]&&(X[s]=new mn__default.default({breakWhenError:false,batchSize:1}));let u={stop:null,aborted:false,queue:s};Z[t]=u;let c=()=>{Z[t]===u&&delete Z[t];},d=()=>new Promise((h,_)=>{let p=false;if(u.aborted){c(),h(et(t));return}let y=setInterval(async()=>{try{let P=await R.bind(this)("csr-poll",{id:t,service:n,owner:r},{auth:e});if(P.status==="running"||P.status==="pending"||p)return;p=!0,o&&o(P),clearInterval(y),c(),h(P);}catch(P){if(p)return;p=true,l&&l(P),clearInterval(y),c(),_(P);}},i);u.stop=()=>{p||(p=true,clearInterval(y),c(),h(et(t)));};}),g=()=>{let h=Z[t];h&&(h.stop?h.stop():(h.aborted=true,delete Z[t]));};if(s){let h=new Promise((_,p)=>{let y=false,P=X[s].add([async()=>{try{let m=await d();return y||(y=!0,_(m)),m}catch(m){throw y||(y=true,p(m)),m}}])[0];ye[t]=P,u.stop=()=>{if(!y){u.aborted=true;try{X[s]&&X[s].remove(ye[t]);}catch{}delete ye[t],c(),y=true,_(et(t));}};});return Object.assign(h,{stop:g})}else return Object.assign(d(),{stop:g})}function Rn(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 Z)Z[r]?.queue===t.queue&&n.push(r);else for(let r in Z)n.push(r);for(let r of n){let i=Z[r];i&&(i.stop?i.stop():(i.aborted=true,delete Z[r]),e+=1);}return e}function An(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 In(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()}`,d=t.service||this.service,g=t.owner||this.owner,h=`${c}#${d}:${u.id}`;Object.assign(u,{poll:_=>En.call(this,{id:h,auth:o,service:d,owner:g,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 X?.[u]||(X[u]=new mn__default.default({breakWhenError:false,batchSize:1})),new Promise((c,d)=>{X[u].add([async()=>{try{let g=await l();if(i>0){let h=g.poll({latency:i});return c(h),h}return c(g),g}catch(g){throw d(g),g}}]);})}else return l()}async function Tn(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"],compact:"boolean",queue_exact:"boolean",queue_exclude:"string"},["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};t?.compact&&(o.compact=true),t?.queue_exact&&(o.queue_exact=true),t?.queue_exclude&&(o.queue_exclude=t.queue_exclude),Object.keys(o).forEach(u=>{o[u]||delete o[u];}),o.queue&&(o.id_prefix=o.id,delete o.id);let l=await 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,request_text:u?.reqtxt,response_text:u?.rslvtxt,response_complete_marker:u?.rslvmk!=null?!!u.rslvmk:void 0,compact:u?.cmpct?true:void 0};for(let d in c)c[d]===void 0&&delete c[d];return (c.status==="running"||c.status==="pending")&&(c.poll=d=>En.call(this,{id:s+c.id,auth:i,service:n,owner:r,latency:d?.latency||1e3,queue:u?.qid,onResponse:d?.onResponse,onError:d?.onError})),c}),l}async function Pn(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&&X?.[l]&&(X[l].remove(ye[o]),delete ye[o]),R.bind(this)("csr-cancel",{id:o,service:e,owner:n},{auth:r})}async function Sn(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 kn(t,e){if(await this.__connection,_n&&t instanceof FormData||bn&&t instanceof HTMLFormElement||yn&&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=U(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 xn(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 vn(t,e){if(await this.__connection,!e?.url||typeof e.url!="string")throw new a('"url" is required in the second argument.',{code:"INVALID_PARAMETER"});f.Url(e.url);let r=(await this.admin_endpoint)?.forward_request;if(!r)throw new a("forwardRequest is not available on this service region yet.",{code:"NOT_EXISTS"});let i=null,s=null,o=yn&&t instanceof SubmitEvent?t.target:bn&&t instanceof HTMLFormElement?t:null;o?i=new FormData(o):_n&&t instanceof FormData?i=t:t!=null&&(i=JSON.stringify(t),s="application/json");let l={public_identifier:this.__public_identifier,service:this.service,owner:this.owner,forward:{url:e.url,method:e.method||"POST",headers:e.headers||{},apiKeyHeader:e.apiKeyHeader,apiKeyScheme:e.apiKeyScheme}},u=JSON.stringify(l).replace(/[\u007f-\uffff]/g,_=>"\\u"+_.charCodeAt(0).toString(16).padStart(4,"0"));if(u.length>4096)throw new a("Destination url and headers are too large for Content-Meta.",{code:"INVALID_PARAMETER"});let c=this.bearerToken||this.session?.idToken?.jwtToken||null;if(!c)throw new a("User login is required.",{code:"INVALID_REQUEST"});let d={"Content-Meta":u,Authorization:c};s&&(d["Content-Type"]=s);let g=await fetch(r,{method:"POST",headers:d,body:i,signal:e.signal});if(e.responseType==="response")return g;if(!g.ok){let _=await g.text();try{_=JSON.parse(_);}catch{}throw new a(_?.message||(typeof _=="string"?_:JSON.stringify(_)),{code:_?.code||"ERROR"})}if(e.onStream&&g.body){let _=g.body.getReader(),p=new TextDecoder,y="";for(;;){let{done:P,value:m}=await _.read();if(P)break;let I=p.decode(m,{stream:true});y+=I;try{e.onStream(I);}catch(x){console.error(x);}}return y}let h=await g.text();if(e.responseType==="text")return h;try{return JSON.parse(h)}catch{return h}}async function Dn(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 de.bind(this)(n.list[r]);return n}function we(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 Nn(t,e){if(t=U(t,{ignoreEmpty:true}).data,t=f.Params(t,{subscriber:r=>f.UserId(r,'User ID in "subscriber"'),subscription:we.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 Un(t){await this.__connection,t=f.Params(t,{user_id:we.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 Cn(t){await this.__connection;let{user_id:e}=f.Params(t,{user_id:we.bind(this)},["user_id"]);return await R.bind(this)("subscription",{unsubscribe:e},{auth:true})}async function Ln(t){await this.__connection;let{user_id:e}=f.Params(t,{user_id:we.bind(this)},["user_id"]);return await R.bind(this)("subscription",{block:e},{auth:true})}async function On(t){await this.__connection;let{user_id:e}=f.Params(t,{user_id:we.bind(this)},["user_id"]);return await R.bind(this)("subscription",{unblock:e},{auth:true})}async function Mn(t,e){await this.__connection;let n=await V.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 qn(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 Fn(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 Vn(t,e){let n=await V.bind(this)(),r={message_id:"string",timestamp:"number",read:"number",complaint:"number",subject:"string",bounced:"number"};t||(e=Object.assign({ascending:false},e||{})),t=U(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 d in o)c[d]=u[o[d]]||l[d];return c.bounced=String(c.bounced),c}),s}async function $n(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 V.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 jn(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 V.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 Bn(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 V.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 Kn(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 V.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 Qn(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 V.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 Hn(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 V.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 Wn(t,e){if(t=f.Params(t,{email:"string"}),!await V.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=>fe(i.user)),r}async function Jn(t){if(t=f.Params(t,{email:n=>f.Email(n)},["email"]),!await V.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 zn(t){if(t=f.Params(t,{email:n=>f.Email(n)},["email"]),!await V.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 Gn(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 V.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)+"-"+F.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 Xn(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 Zn(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 Yn(){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 er(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}=U(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 tr(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 nr(t){return await this.__connection,t=f.Params(t||{},{search:["spell","name",()=>"spell"],value:"string"}),await R.bind(this)("getspell",t)}async function rr(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(j())n&&r&&window.alert(`${r} said: ${n}`),window.location.href=e.video;else return n&&r?`${r} said: ${n}
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,i){this.__version="2.0.0-rc.6";this.project_id="";this.session=null;this.connection=null;this.__my_unique_ids={};this.__uniqueIdsPersistTimer=null;this.userPool=null;this.__socket=null;this.__mediaStream=null;this.host="skapi";this.hostDomain="skapi.com";this.target_cdn="d3e9syvbtso631";this.customApiDomain="skapi.dev";this.requestBatchSize=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:F,generateRandom:ie,toBase62:at,fromBase62:B,decodeProjectId:Fe,formatServiceId:Ve,extractFormData:U,terminatePendingRequests:Ct,request:(e,n,r)=>R.bind(this)(e,n,r,{ignoreService:true})};this.__network_logs=false;this.__endpoint_version="v2";this.__public_identifier="";this.bearerToken="";this.registerTicket=gt.bind(this);this.unregisterTicket=ft.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.trim().toLowerCase().replace(/^<|>$/g,"").replace(/[\s_\-.]+/g,"");if(s==="serviceid"||s==="projectid")throw this._alert(`Replace "${e}" with your actual Project ID.`),new a("Project ID is required.",{code:"INVALID_PARAMETER"});let o=e.split("-").length;if(o===2||o===7)try{let m=Fe(e);r&&typeof r=="object"&&(i=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(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;try{this.project_id=Ve(e,n);}catch{this.project_id="";}let c=true,d=false;if(r&&(typeof r.refetchServiceInfo=="boolean"&&(d=r.refetchServiceInfo),typeof r.autoLogin=="boolean"&&(c=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`,h=e.substring(0,4);this.admin_endpoint=fetch(`${g}/${h}/admin-${this.__endpoint_version}.json`).then(m=>m.blob()).then(m=>new Promise((I,x)=>{let T=new FileReader;T.onloadend=()=>I(T.result),T.onerror=x,T.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}/${h}/record-${this.__endpoint_version}.json`).then(m=>m.blob()).then(m=>new Promise((I,x)=>{let T=new FileReader;T.onloadend=()=>I(T.result),T.onerror=x,T.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 _=j();if(_&&!window.sessionStorage)throw this._alert("This browser is not supported."),new Error("This browser is not supported.");let p=_?JSON.parse(window.sessionStorage.getItem(`${e}#${n}`)||"null"):null;if(this.log("constructor:restore",p),p?.connection){for(let m in p)this[m]=p[m];p.__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};qe()&&(I.Storage=window.localStorage),this.userPool=new amazonCognitoIdentityJs.CognitoUserPool(I);try{this.user||await $.bind(this)().getSession({skipUserUpdateEventTrigger:!0}),this.user&&(!p?.connection&&!c?te.bind(this)():(this._runOnLoginListeners(this.user),this._runOnUserUpdateListeners(this.user)));}catch{}})();let y=`${this.service}/${this.owner}`,P=_?window.sessionStorage.getItem(`${y}:uniqueids`):null;if(P)try{let m=JSON.parse(P);this.__my_unique_ids=m&&typeof m=="object"&&!Array.isArray(m)?{[y]:m}:{};}catch{this.__my_unique_ids={};}this.__connection=(async()=>{let m=null;await this.record_endpoint,p?.connection||(m=this._updateConnection({refresh:d}));let I=()=>{if(this.__class_properties_has_been_cached)return;let x=()=>{let T={},v=["__startKeyHistory","__disabledAccount","__cached_requests","__request_signup_confirmation","__public_identifier","connection"];if(this.connection){for(let C of v)T[C]=this[C];if(_){let C=`${e}#${n}`;try{window.sessionStorage.setItem(C,JSON.stringify(T));}catch{try{let M=Object.assign({},T,{__cached_requests:{},__startKeyHistory:{}});window.sessionStorage.setItem(C,JSON.stringify(M));}catch{try{window.sessionStorage.removeItem(C);}catch{}}}}this.__class_properties_has_been_cached=true;}};return m instanceof Promise?m.then(()=>x()):x()};return _&&(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){j()&&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||(j()&&typeof window.navigator?.userAgent=="string"?window.navigator.userAgent:`skapi-node/${globalThis?.process?.versions?.node||"unknown"}`);return {project_id:this.project_id,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,j()){let n=`Built with:
215
+ `,o=new Blob([s],{type:"application/javascript"});_e=new Worker(URL.createObjectURL(o)),_e.onmessage=c=>{i.readyState===1&&i.send(JSON.stringify({action:"keepAlive"}));},n(i);},i.onmessage=async s=>{let o="";try{o=JSON.parse(decodeURI(s.data)),this.log("socket onmessage",o);}catch{return}let c;switch(true){case !!o?.["#message"]:c="message";break;case !!o?.["#private"]:c="private";break;case !!o?.["#notice"]:c="notice";break;case !!o?.["#rtc"]:c="rtc";break;case !!o?.["#error"]:c="error";break}if(!c)return;let l={type:c,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(c==="notice")e(l);else if(c==="rtc"){if(l.sender!==this.user.user_id){let u=l.message;if(u.hungup){ae[l.sender_cid]&&(ae[l.sender_cid](false),delete ae[l.sender_cid]),de[l.sender_cid]&&delete de[l.sender_cid],U?.[l.sender_cid]&&ce.bind(this)({cid:l.sender_cid}),l.type="rtc:closed",e(l);return}if(u.candidate&&wr.bind(this)(u.candidate,l.sender_cid),u.sdpoffer&&(_r.bind(this)(u.sdpoffer,l.sender_cid),de[l.sender_cid]||(de[l.sender_cid]=l.sender_cid,delete l.message,l.connectRTC=Oi.bind(this)(l),l.type="rtc:incoming",l.hangup=(()=>{U[l.sender_cid]?ce.bind(this)({cid:l.sender_cid}):de[l.sender_cid]&&(delete de[l.sender_cid],i.send(JSON.stringify({action:"rtc",uid:l.sender_cid,content:{hungup:this.user.user_id},token:this.session.accessToken.jwtToken})));}).bind(this),e(l))),u.pickup&&ae[l.sender_cid]&&(ae[l.sender_cid](true),delete ae[l.sender_cid]),u.sdpanswer&&U[l.sender_cid])if(U[l.sender_cid].signalingState==="have-local-offer")await U[l.sender_cid].setRemoteDescription(new RTCSessionDescription(u.sdpanswer));else throw new a("Invalid signaling state.",{code:"INVALID_REQUEST"})}}else e(l);},i.onclose=()=>{tt?(this.log("realtime onclose","WebSocket connection closed."),e({type:"close",message:"WebSocket connection closed."})):(this.log("realtime onclose","WebSocket unexpected close."),e({type:"error",message:"Skapi: WebSocket unexpected close."}),Le++,Le<3?(this.log("realtime onclose","Reconnecting to WebSocket server..."+Le),e({type:"reconnect",message:"Reconnecting to WebSocket server..."+Le}),St.bind(this)(e,3e3,"reconnect")):(this.log("realtime onclose","Max reconnection attempts reached."),e({type:"error",message:"Skapi: Max reconnection attempts reached."})));},i.onerror=()=>{this.log("realtime onerror","WebSocket connection error."),e({type:"error",message:"Skapi: WebSocket connection error."});};},t);});}async function $i(e,t,r){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebSocket is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});let n=this.__socket?await this.__socket:this.__socket;if(!n)throw new a("No realtime connection. Execute connectRealtime() before this method.",{code:"INVALID_REQUEST"});if(!t)throw new a("No recipient.",{code:"INVALID_REQUEST"});await xe.bind(this)(),e=q(e).data;let i="";if(r&&(r=y.Params(r,{config:{always:"boolean"},title:"string",body:"string"},["title","body"]),i=JSON.stringify({title:r.title,body:r.body}),new Blob([i]).size>3072))throw new a("Notification size exceeds 3kb.",{code:"INVALID_PARAMETER"});if(n.readyState===1){try{y.UserId(t),n.send(JSON.stringify({action:"sendMessage",uid:t,content:e,notification:i,notificationConfig:r?.config||{},token:`IdT:${this.service}:${this.owner}:`+(this.bearerToken||this.session?.idToken?.jwtToken||"null")}));}catch(s){if(this.log("postRealtime:err",{err:s}),we!==t)throw new a(`User has not joined to the recipient group. Run joinRealtime({ group: "${t}" })`,{code:"INVALID_REQUEST"});n.send(JSON.stringify({action:"broadcast",rid:t,content:e,notification:i,notificationConfig:r?.config||{},token:`IdT:${this.service}:${this.owner}:`+(this.bearerToken||this.session?.idToken?.jwtToken||"null")}));}return {type:"success",message:"Message sent."}}throw new a("Realtime connection is not open. Try reconnecting with connectRealtime().",{code:"INVALID_REQUEST"})}async function Ar(e){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebSocket is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});let t=this.__socket?await this.__socket:this.__socket;if(!t)throw new a("No realtime connection. Execute connectRealtime() before this method.",{code:"INVALID_REQUEST"});await xe.bind(this)(),e=q(e,{nullIfEmpty:true}).data;let{group:r=null}=e;if(!r&&!we)return {type:"success",message:"Left realtime message group."};if(r!==null&&typeof r!="string")throw new a('"group" must be a string | null.',{code:"INVALID_PARAMETER"});return t.send(JSON.stringify({action:"joinRoom",rid:r,token:this.session.accessToken.jwtToken})),we=r,{type:"success",message:r?`Joined realtime message group: "${r}".`:"Left realtime message group."}}async function Vi(e,t){e=y.Params(e,{user_id:n=>y.UserId(n,'User ID in "user_id"'),group:["string",()=>{if(!we)throw new a('No group has been joined. Otherwise "group" is required.',{code:"INVALID_REQUEST"});return we}]});let r=await T.bind(this)("get-ws-group",e,{fetchOptions:t,auth:true,method:"post"});return r.list=r.list.map(n=>({user_id:n.uid.split("#")[1],cid:"cid:"+n.cid})),r}async function qi(e,t){if(await this.__connection,e||(e={searchFor:"group",value:" ",condition:">"}),e=y.Params(e,{searchFor:["group","number_of_users",()=>"group"],value:["string","number",()=>e?.searchFor&&e?.searchFor==="number_of_users"?0:" "],condition:[">",">=","=","<","<=","!=","gt","gte","eq","lt","lte","ne"],range:["string","number"]}),e.condition||(e.value===" "||!e.value?e.condition=">":e.condition="="),e.range&&e.condition&&delete e.condition,e.searchFor==="number_of_users"&&typeof e.value!="number")throw new a('"value" must be a number.',{code:"INVALID_PARAMETER"});if(e.searchFor==="group"&&typeof e.value!="string")throw new a('"value" must be a string.',{code:"INVALID_PARAMETER"});if(e.hasOwnProperty("range")&&typeof e.range!=typeof e.value)throw new a(`"range" must be a ${typeof e.value}.`,{code:"INVALID_PARAMETER"});let r=await T.bind(this)("get-ws-group",e,{fetchOptions:t,auth:true,method:"post"});return r.list=r.list.map(n=>({group:n.rid.split("#")[1],number_of_users:n.cnt})),r}var Bi=typeof FormData<"u",Ki=typeof HTMLFormElement<"u",Hi=typeof SubmitEvent<"u",fe={},rt={},ge={};function Rr(e){return Object.freeze({id:e,status:"stopped"})}function Wi(e){return !!e&&typeof e=="object"&&e.status==="stopped"}function Qi({id:e,auth:t,service:r,owner:n,latency:i=1e3,queue:s,onResponse:o,onError:c}){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&&!fe?.[s]&&(fe[s]=new ji__default.default({breakWhenError:false,batchSize:1}));let l={stop:null,aborted:false,queue:s};ge[e]=l;let u=()=>{ge[e]===l&&delete ge[e];},g=()=>new Promise((d,p)=>{let m=false;if(l.aborted){u(),d(Rr(e));return}let h=setInterval(async()=>{try{let _=await T.bind(this)("csr-poll",{id:e,service:r,owner:n},{auth:t});if(_.status==="running"||_.status==="pending"||m)return;m=!0,o&&o(_),clearInterval(h),u(),d(_);}catch(_){if(m)return;m=true,c&&c(_),clearInterval(h),u(),p(_);}},i);l.stop=()=>{m||(m=true,clearInterval(h),u(),d(Rr(e)));};}),f=()=>{let d=ge[e];d&&(d.stop?d.stop():(d.aborted=true,delete ge[e]));};if(s){let d=new Promise((p,m)=>{let h=false,_=fe[s].add([async()=>{try{let w=await g();return h||(h=!0,p(w)),w}catch(w){throw h||(h=true,m(w)),w}}])[0];rt[e]=_,l.stop=()=>{if(!h){l.aborted=true;try{fe[s]&&fe[s].remove(rt[e]);}catch{}delete rt[e],u(),h=true,p(Rr(e));}};});return Object.assign(d,{stop:f})}else return Object.assign(g(),{stop:f})}function Gi(e){let t=0,r=[];if(e?.id){if(e.url&&e.method){let n=e.service||this.service;r.push(`[${e.method.toUpperCase()}]${e.url.toLowerCase()}#${n}:${e.id}`);}r.push(e.id);}else if(e?.queue)for(let n in ge)ge[n]?.queue===e.queue&&r.push(n);else for(let n in ge)r.push(n);for(let n of r){let i=ge[n];i&&(i.stop?i.stop():(i.aborted=true,delete ge[n]),t+=1);}return t}function zi(e,t){if(!e.queue)throw new a('"queue" is required.',{code:"INVALID_PARAMETER"});let r={service:e.service||this.service,owner:e.owner||this.owner,queue:e.queue+":"};return T.bind(this)("csr-poll",r,{auth:true})}async function Ji(e){let t=false;if(typeof e.poll=="number"&&e.poll<0)throw new a('"poll" should be a non-negative number.',{code:"INVALID_PARAMETER"});let r=e?.onResponse,n=e?.onError,i=typeof e.poll=="number"?e.poll:e.poll?1e3:0;delete e.poll,i&&!e.queue&&(e.queue=(this.__user?.user_id||"anonymous")+"-"+Ee());let s=l=>{for(let u in l)if(typeof l[u]=="string"&&l[u].includes("$CLIENT_SECRET")){t=true;break}};if(e=y.Params(e,{url:l=>{if(!l||typeof l!="string")throw new a('"url" should be type: <string>.',{code:"INVALID_PARAMETER"});return y.Url(l),l.includes("$CLIENT_SECRET")&&(t=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 u=l.toLowerCase();if(u!=="get"&&u!=="post"&&u!=="delete"&&u!=="put")throw new a('"method" should be either "GET" or "POST" or "DELETE" or "PUT".',{code:"INVALID_PARAMETER"});return u},headers:l=>{if(l&&typeof l!="object")throw new a('"headers" should be type: <object>.',{code:"INVALID_PARAMETER"});return s(l),l},data:l=>{if(l&&typeof l!="object")throw new a('"data" should be type: <object>.',{code:"INVALID_PARAMETER"});return s(l),l},params:l=>{if(l&&typeof l!="object")throw new a('"params" should be type: <object>.',{code:"INVALID_PARAMETER"});return s(l),l},expires:"number",queue:"string"},["clientSecretName","method","url"]),!t)throw new a(`At least one parameter value should include "$CLIENT_SECRET" in ${e.method.toLowerCase()==="post"?'"data"':'"params"'} or "headers".`,{code:"INVALID_PARAMETER"});await this.__connection;let o=!!this.__user,c=()=>T.bind(this)("csr",e,{auth:o,tokenHeaders:{accessToken:!!o}}).then(l=>{if(l.status==="running"||l.status==="pending"){let u=`[${e.method.toUpperCase()}]${e.url.toLowerCase()}`,g=e.service||this.service,f=e.owner||this.owner,d=`${u}#${g}:${l.id}`;Object.assign(l,{poll:p=>Qi.call(this,{id:d,auth:o,service:g,owner:f,latency:p?.latency||1e3,queue:e?.queue,onResponse:r,onError:n})});}return r?r(l):l}).catch(l=>{if(n)return n(l);throw l});if(e?.queue){let l="base:"+e.queue;return fe?.[l]||(fe[l]=new ji__default.default({breakWhenError:false,batchSize:1})),new Promise((u,g)=>{fe[l].add([async()=>{try{let f=await c();if(i>0){let d=f.poll({latency:i});return u(d),d}return u(f),f}catch(f){throw g(f),f}}]);})}else return c()}async function Yi(e,t){await this.__connection;let r=e.service||this.service,n=e.owner||this.owner;e=y.Params(e,{url:"string",method:["GET","POST","DELETE","PUT"],queue:"string",status:["pending","running","resolved","failed"],compact:"boolean",queue_exact:"boolean",queue_exclude:"string"},["url","method"]);let i=!!this.__user,s=`[${e.method.toUpperCase()}]${e.url.toLowerCase()}#${r}:`,o={id:s,queue:e?.queue,status:e?.status,service:r,owner:n};e?.compact&&(o.compact=true),e?.queue_exact&&(o.queue_exact=true),e?.queue_exclude&&(o.queue_exclude=e.queue_exclude),Object.keys(o).forEach(l=>{o[l]||delete o[l];}),o.queue&&(o.id_prefix=o.id,delete o.id);let c=await T.bind(this)("csr-poll",o,{auth:i,fetchOptions:t});return c.list=c.list.map(l=>{let u={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,request_text:l?.reqtxt,response_text:l?.rslvtxt,response_complete_marker:l?.rslvmk!=null?!!l.rslvmk:void 0,compact:l?.cmpct?true:void 0};for(let g in u)u[g]===void 0&&delete u[g];return (u.status==="running"||u.status==="pending")&&(u.poll=g=>Qi.call(this,{id:s+u.id,auth:i,service:r,owner:n,latency:g?.latency||1e3,queue:l?.qid,onResponse:g?.onResponse,onError:g?.onError})),u}),c}async function Xi(e){await this.__connection,e=y.Params(e,{url:"string",method:["GET","POST","DELETE","PUT"],id:"string",queue:"string"},["url","method","id"]);let t=e?.service||this.service,r=e?.owner||this.owner,n=!!this.__user,i=`[${e.method.toUpperCase()}]${e.url.toLowerCase()}#${t}`,s=e.id,o=`${i}:${s}`,c=e?.queue;return c&&fe?.[c]&&(fe[c].remove(rt[o]),delete rt[o]),T.bind(this)("csr-cancel",{id:o,service:t,owner:r},{auth:n})}async function Zi(e){await this.__connection;let t={name:"string",email:r=>(y.Email(r),r),subject:"string",message:"string"};return e=y.Params(e,t,["name","email","subject","message"]),await T.bind(this)("send-inquiry",e),"SUCCESS: Inquiry has been sent."}async function es(e,t){if(await this.__connection,Bi&&e instanceof FormData||Ki&&e instanceof HTMLFormElement||Hi&&e instanceof SubmitEvent){if(!t)throw new a("Url string as a second argument is required when form is passed.",{code:"INVALID_PARAMETER"});let n=q(e);e={url:t,data:n.data,sync:true};}let r={url:n=>y.Url(n),data:n=>n,sync:["boolean",()=>true]};if(Array.isArray(e))for(let n of e)n=y.Params(n,r);else e=y.Params(e,r);return T.bind(this)("post-secure",e,{auth:true})}async function ts(e,t){await this.__connection;let{auth:r=false,method:n="POST",bypassAwaitConnection:i=false,responseType:s,contentType:o,tokenHeaders:c,progress:l}=t||{};if(t=Object.assign({auth:r,method:n,bypassAwaitConnection:i,responseType:s,contentType:o,tokenHeaders:c},{fetchOptions:{progress:l}}),typeof e!="object"&&(o==="application/json"||o===void 0))throw new a('"data" should be type: <object>.',{code:"INVALID_PARAMETER"});return T.bind(this)("mock",e,t)}async function rs(e,t){if(await this.__connection,!t?.url||typeof t.url!="string")throw new a('"url" is required in the second argument.',{code:"INVALID_PARAMETER"});y.Url(t.url);let n=(await this.admin_endpoint)?.forward_request;if(!n)throw new a("forwardRequest is not available on this service region yet.",{code:"NOT_EXISTS"});let i=null,s=null,o=Hi&&e instanceof SubmitEvent?e.target:Ki&&e instanceof HTMLFormElement?e:null;o?i=new FormData(o):Bi&&e instanceof FormData?i=e:e!=null&&(i=JSON.stringify(e),s="application/json");let c={public_identifier:this.__public_identifier,service:this.service,owner:this.owner,forward:{url:t.url,method:t.method||"POST",headers:t.headers||{},apiKeyHeader:t.apiKeyHeader,apiKeyScheme:t.apiKeyScheme}},l=JSON.stringify(c).replace(/[\u007f-\uffff]/g,p=>"\\u"+p.charCodeAt(0).toString(16).padStart(4,"0"));if(l.length>4096)throw new a("Destination url and headers are too large for Content-Meta.",{code:"INVALID_PARAMETER"});let u=this.bearerToken||this.session?.idToken?.jwtToken||null;if(!u)throw new a("User login is required.",{code:"INVALID_REQUEST"});let g={"Content-Meta":l,Authorization:u};s&&(g["Content-Type"]=s);let f=await fetch(n,{method:"POST",headers:g,body:i,signal:t.signal});if(t.responseType==="response")return f;if(!f.ok){let p=await f.text();try{p=JSON.parse(p);}catch{}throw new a(p?.message||(typeof p=="string"?p:JSON.stringify(p)),{code:p?.code||"ERROR"})}if(t.onStream&&f.body){let p=f.body.getReader(),m=new TextDecoder,h="";for(;;){let{done:_,value:w}=await p.read();if(_)break;let b=m.decode(w,{stream:true});h+=b;try{t.onStream(b);}catch(E){console.error(E);}}return h}let d=await f.text();if(t.responseType==="text")return d;try{return JSON.parse(d)}catch{return d}}async function ns(e,t){await this.__connection,e=y.Params(e||{},{access_group:n=>{if(n==="authorized"&&(n=1),n==="public"&&(n=0),typeof n!="number")throw new a('"access_group" should be type number.',{code:"INVALID_PARAMETER"});if(n<0)throw new a('"access_group" should be zero or a positive number.',{code:"INVALID_PARAMETER"});if(n>this.__user.access_group)throw new a("User has no access.",{code:"INVALID_REQUEST"});return n}});let r=await T.bind(this)("get-feed",e,{auth:true,fetchOptions:t});for(let n in r.list)r.list[n]=await Pe.bind(this)(r.list[n]);return r}function nt(e){if(e===this.__user.user_id)throw new a(`"user_id" cannot be the user's own ID.`,{code:"INVALID_PARAMETER"});return y.UserId(e,'"user_id"')}async function is(e,t){if(e=q(e,{ignoreEmpty:true}).data,e=y.Params(e,{subscriber:n=>y.UserId(n,'User ID in "subscriber"'),subscription:nt.bind(this),blocked:"boolean"}),!e.subscriber&&!e.subscription)throw new a('At least either "subscriber" or "subscription" should have a value.',{code:"INVALID_PARAMETER"});let r=await T.bind(this)("get-subscription",e,Object.assign({auth:true},{fetchOptions:t}));return r.list=r.list.map((n=>{let i={};if(n.sub){let s=n.sub.split("#");i.subscriber=s[2],i.subscription=s[0];}else i.subscriber=n.subscriber,i.subscription=n.subscription;return i.timestamp=n?.timestamp||n.stmp,i.blocked=n?.blocked||n.grp.substring(0,1)==="N",Object.assign(i,n.opt),i})),r}async function ss(e){await this.__connection,e=y.Params(e,{user_id:nt.bind(this),get_feed:["boolean",()=>false],get_notified:["boolean",()=>false],get_email:n=>{if(n&&!this.__user.email||!this.__user.email_verified)throw new a("User has no verified email address.",{code:"INVALID_REQUEST"});return !!n}},["user_id"]);let t=await T.bind(this)("subscription",{subscribe:e.user_id,option:{get_feed:e.get_feed,get_notified:e.get_notified,get_email:e.get_email||false}},{auth:true}),r={};if(t.sub){let n=t.sub.split("#");r.subscriber=n[2],r.subscription=n[0];}else r.subscriber=t.subscriber,r.subscription=t.subscription;return r.timestamp=t?.timestamp||t.stmp,r.blocked=t?.blocked||t.grp.substring(0,1)==="N",Object.assign(r,t.opt),r}async function os(e){await this.__connection;let{user_id:t}=y.Params(e,{user_id:nt.bind(this)},["user_id"]);return await T.bind(this)("subscription",{unsubscribe:t},{auth:true})}async function as(e){await this.__connection;let{user_id:t}=y.Params(e,{user_id:nt.bind(this)},["user_id"]);return await T.bind(this)("subscription",{block:t},{auth:true})}async function cs(e){await this.__connection;let{user_id:t}=y.Params(e,{user_id:nt.bind(this)},["user_id"]);return await T.bind(this)("subscription",{unblock:t},{auth:true})}async function ls(e,t){await this.__connection;let r=await Q.bind(this)();e=y.Params(e,{user_id:o=>{if(o!==this.__user.user_id&&!r)throw new a("No access.",{code:"INVALID_REQUEST"});return o},group:o=>{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 n=await T.bind(this)("get-newsletter-subscription",e,{auth:true,fetchOptions:t||null}),i=n?.list||n,s=[];Array.isArray(i)||(i=[]);for(let o of i){let c=o.subt.split("#"),l=true;c[0].charAt(0)==="@"&&(l=false,c[0]=c[0].substring(1));let u=parseInt(c[0]);s.push({timestamp:o.stmp,group:u,subscribed_email:c[1],active:l});}return n?.list?(n.list=s,n):s}async function us(e){await this.__connection;let t=y.Params(e||{},{email:r=>Array.isArray(r)&&r.length>0?r.length===1?y.Email(r[0]):r.map(n=>y.Email(n)):y.Email(r),group:["number","public","authorized","admin",r=>{if(typeof r!="string"||r.length>20||!/^[a-zA-Z0-9]+$/.test(r))throw new a('"group" should be an alphanumeric string without spaces and less than 20 characters.',{code:"INVALID_PARAMETER"});return r}],redirect:r=>y.Url(r)},this.__user?["group"]:["email","group"]);return T.bind(this)(`subscribe-${this.__user?"":"public-"}newsletter`,t,{auth:!!this.__user})}async function ds(e){await this.__connection,e=y.Params(e,{group:["number","public","authorized","admin"]},["group"]);let t=Object.assign({action:"unsubscribe"},e);return T.bind(this)("subscribe-newsletter",t,{auth:true})}async function fs(e,t){let r=await Q.bind(this)(),n={message_id:"string",timestamp:"number",read:"number",complaint:"number",subject:"string",bounced:"number"};e||(t=Object.assign({ascending:false},t||{})),e=q(e).data,e=e||{searchFor:"timestamp",value:Date.now(),condition:"<",group:"public"},e=y.Params(e,{searchFor:["message_id","timestamp","subject","complaint","read","bounced"],value:l=>{if(typeof l!==n[e.searchFor])throw new a(`"value" type does not match the type of "${e.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(!e.hasOwnProperty("value")||typeof l!=typeof e.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(!r&&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 i=e.group===0?"get-public-newsletters":"get-newsletters",s=await T.bind(this)(i,e,Object.assign({method:"get",auth:i==="get-public-newsletters"?!!this.__user:true},{fetchOptions:t})),o={message_id:"mid",timestamp:"stmp",complaint:"cmpl",read:"read",subject:"subj",bounced:"bnce",url:"url",delivered:"delv"},c={message_id:"",timestamp:0,complaint:0,read:0,subject:"",bounced:"",url:"",delivered:0};return s.list=s.list.map(l=>{let u={};for(let g in o)u[g]=l[o[g]]||c[g];return u.bounced=String(u.bounced),u}),s}async function gs(e){let t=y.Params(e,{user_id:n=>y.UserId(n,'"user_id"')},["user_id"]);if(t?.service&&t?.owner?t={service:t?.service,owner:t?.owner,block:t.user_id}:t={block:t.user_id},!await Q.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}return await T.bind(this)("block-account",t,{auth:true})}async function ps(e){let t=y.Params(e,{user_id:n=>y.UserId(n,'"user_id"')},["user_id"]);if(t?.service&&t?.owner?t={service:t?.service,owner:t?.owner,unblock:t.user_id}:t={unblock:t.user_id},!await Q.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}return await T.bind(this)("block-account",t,{auth:true})}async function hs(e){let t=y.Params(e,{user_id:n=>y.UserId(n,'"user_id"')},["user_id"]);if(t?.service&&t?.owner?t={service:t?.service,owner:t?.owner,delete:t.user_id}:t={delete:t.user_id},!await Q.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}return await T.bind(this)("remove-account",t,{auth:true})}async function ys(e,t){let r={email:s=>y.Email(s),password:s=>y.Password(s),name:"string",username:"string",gender:"string",address:s=>{if(!s)return "";if(typeof s=="string")return s;if(typeof s=="object")return JSON.stringify(s)},birthdate:s=>y.Birthdate(s),phone_number:s=>y.PhoneNumber(s),picture:s=>{if(s)return y.Url(s)},profile:s=>{if(s)return y.Url(s)},website:s=>{if(s)return y.Url(s)},nickname:"string",misc:"string",email_public:["boolean",()=>false],gender_public:["boolean",()=>false],address_public:["boolean",()=>false],birthdate_public:["boolean",()=>false],phone_number_public:["boolean",()=>false],openid_id:"string",access_group:s=>{try{typeof s=="string"&&(s=s==="admin"?99:parseInt(s));}catch{throw new a('"access_group" is invalid. Should be type <number>.',{code:"INVALID_PARAMETER"})}if(typeof s!="number"||s<1||s>100)throw new a('"access_group" is invalid. Should be type <number> of range 1~99',{code:"INVALID_PARAMETER"});return s}},n=y.Params(e,r,["email"]);if(t=y.Params(t,{confirmation_url:s=>{let o=s;if(typeof s=="string")o=y.Url(s);else throw new a('"options.confirmation_url" should be type: <string>.',{code:"INVALID_PARAMETER"});if(o&&!n.email)throw new a('"email" is required for signup confirmation.',{code:"INVALID_PARAMETER"});return o},email_subscription:s=>{if(typeof s!="boolean")throw new a('"options.email_subscription" should be type: <boolean>.',{code:"INVALID_PARAMETER"});if(!t?.confirmation_url)throw new a('"options.confirmation_url" is required for email subscription.',{code:"INVALID_PARAMETER"});return s},template:s=>{if(typeof s!="object"||!s.url||!s.subject)throw new a('"options.template" should be type: <object> with "url" and "subject".',{code:"INVALID_PARAMETER"});return {url:y.Url(s.url),subject:s.subject}}}),n.signup_confirmation=t?.confirmation_url||true,n.email_subscription=t?.email_subscription||false,n.template=t?.template||{},!await Q.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}return await T.bind(this)("admin-signup",n,{auth:true})}async function ms(e){let t={email:s=>y.Email(s),password:s=>y.Password(s),openid_id:"string",name:"string",username:"string",gender:"string",address:s=>{if(!s)return "";if(typeof s=="string")return s;if(typeof s=="object")return JSON.stringify(s)},birthdate:s=>y.Birthdate(s),phone_number:s=>y.PhoneNumber(s),picture:s=>s?y.Url(s):"",profile:s=>s?y.Url(s):"",website:s=>s?y.Url(s):"",nickname:"string",misc:"string",email_public:["boolean",()=>false],gender_public:["boolean",()=>false],address_public:["boolean",()=>false],birthdate_public:["boolean",()=>false],phone_number_public:["boolean",()=>false],access_group:s=>{try{typeof s=="string"&&(s=parseInt(s));}catch{throw new a('"access_group" is invalid. Should be type <number>.',{code:"INVALID_PARAMETER"})}if(typeof s!="number"||s<1||s>100)throw new a('"access_group" is invalid. Should be type <number> of range 1~99',{code:"INVALID_PARAMETER"});return s}},r=["email","password"],n=y.Params(e,t,r);if(!await Q.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}return await T.bind(this)("admin-signup",n,{auth:true})}async function bs(e){if(e=y.Params(e,{user_id:r=>y.UserId(r,'"user_id"'),access_group:r=>{try{typeof r=="string"&&(r=parseInt(r));}catch{throw new a('"access_group" is invalid. Should be type <number>.',{code:"INVALID_PARAMETER"})}if(typeof r=="number"&&r>0&&r<100)return r;throw new a('"access_group" is invalid. Should be type <number> of range 1~99',{code:"INVALID_PARAMETER"})}},["user_id","access_group"]),!await Q.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}return await T.bind(this)("grant-access",e,{auth:true})}async function _s(e,t){if(e=y.Params(e,{email:"string"}),!await Q.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}let n=await T.bind(this)("invitation-list",Object.assign({mode:"search"},e),{fetchOptions:t,auth:true});return n.list=n.list.map(i=>$e(i.user)),n}async function ws(e){if(e=y.Params(e,{email:r=>y.Email(r)},["email"]),!await Q.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}return await T.bind(this)("invitation-list",Object.assign({mode:"cancel"},e),{auth:true})}async function Es(e){if(e=y.Params(e,{email:r=>y.Email(r)},["email"]),!await Q.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}return await T.bind(this)("invitation-list",Object.assign({mode:"resend"},e),{auth:true})}async function As(e){let t=y.Params(e,{user_id:o=>y.UserId(o,'"user_id"'),email:o=>y.Email(o),address:o=>{if(!o)return "";if(typeof o=="string")return o;if(typeof o=="object")return JSON.stringify(o)},name:"string",gender:"string",birthdate:o=>o?y.Birthdate(o):"",phone_number:o=>o?y.PhoneNumber(o):"",email_public:"boolean",phone_number_public:"boolean",address_public:"boolean",gender_public:"boolean",birthdate_public:"boolean",misc:"string",picture:o=>o?y.Url(o):"",profile:o=>o?y.Url(o):"",nickname:"string",website:o=>o?y.Url(o):""},["user_id"]),r=t.service,n=t.owner;if(delete t.service,delete t.owner,Object.keys(t).filter(o=>o!=="user_id"&&t[o]!==void 0).length===0)throw new a("At least one attribute to update is required.",{code:"INVALID_PARAMETER"});if(!await Q.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}t.email&&(t.preferred_username=(r||this.service)+"-"+W.hash(t.email));let s={attributes:t};return r&&n&&(s.service=r,s.owner=n),await T.bind(this)("admin-edit-profile",s,{auth:true})}async function Rs(e){if(typeof window>"u"||window._runningInNodeJS)throw new a("Push Notifications are not supported in Node.js environment.",{code:"NOT_SUPPORTED"});if(await this.__connection,!e.endpoint)throw new a("Missing parameter: endpoint",{code:"INVALID_PARAMETER"});if(!e.keys||!e.keys.p256dh||!e.keys.auth)throw new a("Missing parameter: keys.p256dh or keys.auth",{code:"INVALID_PARAMETER"});return await T.bind(this)("store-subscription",{endpoint:e.endpoint,keys:e.keys},{auth:true}),"SUCCESS: Subscribed to receive notifications."}async function Is(e){if(typeof window>"u"||window._runningInNodeJS)throw new a("Push Notifications are not supported in Node.js environment.",{code:"NOT_SUPPORTED"});if(await this.__connection,!e.endpoint)throw new a("Missing parameter: endpoint",{code:"INVALID_PARAMETER"});if(!e.keys||!e.keys.p256dh||!e.keys.auth)throw new a("Missing parameter: keys.p256dh or keys.auth",{code:"INVALID_PARAMETER"});return await T.bind(this)("delete-subscription",{endpoint:e.endpoint,keys:e.keys},{auth:true}),"SUCCESS: Unsubscribed from notifications."}async function Ps(){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 T.bind(this)("get-vapid-public-key",null,{auth:true})}}async function Ts(e,t){if(typeof window>"u"||window._runningInNodeJS)throw new a("Push Notifications are not supported in Node.js environment.",{code:"NOT_SUPPORTED"});await this.__connection;let{title:r,body:n}=q(e||{},{nullIfEmpty:true}).data;if(!r)throw new a("Missing parameter: message title",{code:"INVALID_PARAMETER"});if(!n)throw new a("Missing parameter: message body",{code:"INVALID_PARAMETER"});let i={title:r,body:n};return t?(typeof t=="string"&&(t=[t]),i.user_ids=t):i.user_ids="all_users",await T.bind(this)("push-notification",i,{auth:true}),"SUCCESS: Notification sent."}async function Ss(e){await this.__connection,e=y.Params(e,{spell:"string",name:"string",magic:r=>r},["spell","name"]);await T.bind(this)("castspell",e);return `The spell "${e.spell}" has been cast.`}async function ks(e){return await this.__connection,e=y.Params(e||{},{search:["spell","name",()=>"spell"],value:"string"}),await T.bind(this)("getspell",e)}async function vs(e){await this.__connection,e=y.Params(e,{message:"string",name:"string"},["message","name"]);let t=await T.bind(this)("dopamine",e,{auth:true}),r=t?.previous_message?.message,n=t?.previous_message?.name;if(J())r&&n&&window.alert(`${n} said: ${r}`),window.location.href=t.video;else return r&&n?`${n} said: ${r}
216
+ Watch the video here: ${t.video}`:`Your message has been uploaded for future generations to receive.
217
+ Watch the video here: ${t.video}`}var R=class{constructor(t,r,n,i){this.__version="2.0.0-rc.8";this.project_id="";this.session=null;this.connection=null;this.__my_unique_ids={};this.__uniqueIdsPersistTimer=null;this.userPool=null;this.__socket=null;this.__mediaStream=null;this.host="skapi";this.hostDomain="skapi.com";this.target_cdn="d3e9syvbtso631";this.customApiDomain="skapi.dev";this.requestBatchSize=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(t){try{return y.UserId(t),!0}catch{return false}},url(t){try{return y.Url(t),!0}catch{return false}},phoneNumber(t){try{return y.PhoneNumber(t),!0}catch{return false}},birthdate(t){try{return y.Birthdate(t),!0}catch{return false}},email(t){try{return y.Email(t),!0}catch{return false}},params(t,r,n){return y.Params(t,r,n)}};this.util={MD5:W,generateRandom:Ee,toBase62:xr,fromBase62:te,decodeProjectId:Ot,formatServiceId:Lt,extractFormData:q,terminatePendingRequests:ai,request:(t,r,n)=>T.bind(this)(t,r,n,{ignoreService:true})};this.__network_logs=false;this.__endpoint_version="v2";this.__public_identifier="";this.bearerToken="";this.registerTicket=$n.bind(this);this.unregisterTicket=Vn.bind(this);if(!t||typeof t!="string")throw this._alert("Service ID is required."),new a("Service ID is required.",{code:"INVALID_PARAMETER"});let s=t.trim().toLowerCase().replace(/^<|>$/g,"").replace(/[\s_\-.]+/g,"");if(s==="serviceid"||s==="projectid")throw this._alert(`Replace "${t}" with your actual Project ID.`),new a("Project ID is required.",{code:"INVALID_PARAMETER"});let o=t.split("-").length;if(o===2||o===7)try{let b=Ot(t);n&&typeof n=="object"&&(i=n),r&&typeof r=="object"&&(n=r),r=b.owner,t=b.service;}catch{throw this._alert("Service ID is invalid."),new a("Service ID is invalid.",{code:"INVALID_PARAMETER"})}if(!r||typeof r!="string")throw this._alert("Owner ID is invalid."),new a("Owner ID is invalid.",{code:"INVALID_PARAMETER"});if(r!==this.host)try{y.UserId(r,'"owner"');}catch{throw this._alert("Owner ID is invalid."),new a("Owner ID is invalid.",{code:"INVALID_PARAMETER"})}this.service=t,this.owner=r;try{this.project_id=Lt(t,r);}catch{this.project_id="";}let u=true,g=false,f=null;if(n&&(typeof n.refetchServiceInfo=="boolean"&&(g=n.refetchServiceInfo),typeof n.autoLogin=="boolean"&&(u=n.autoLogin),n.encryption&&(f=rn(n.encryption)),typeof n.requestBatchSize=="number")){if(n.requestBatchSize<1)throw new a('"requestBatchSize" must be greater than 0.',{code:"INVALID_PARAMETER"});this.requestBatchSize=n.requestBatchSize;}n?.eventListener&&typeof n.eventListener=="object"&&(n.eventListener?.onLogin&&typeof n.eventListener.onLogin=="function"&&(this.onLogin=n.eventListener.onLogin),n.eventListener?.onUserUpdate&&typeof n.eventListener.onUserUpdate=="function"&&(this.onUserUpdate=n.eventListener.onUserUpdate),n.eventListener?.onBatchProcess&&typeof n.eventListener.onBatchProcess=="function"&&(this.onBatchProcess=n.eventListener.onBatchProcess)),this.target_cdn=i?.target_cdn||this.target_cdn,this.hostDomain=i?.hostDomain||this.hostDomain,this.customApiDomain=i?.customApiDomain||this.customApiDomain,this.__network_logs=!!i?.network_logs;let d=`https://${this.target_cdn}.cloudfront.net`,p=t.substring(0,4);this.admin_endpoint=fetch(`${d}/${p}/admin-${this.__endpoint_version}.json`).then(b=>b.blob()).then(b=>new Promise((E,k)=>{let S=new FileReader;S.onloadend=()=>E(S.result),S.onerror=k,S.readAsDataURL(b);})).then(b=>{try{return typeof b=="string"?JSON.parse(atob(b.split(",")[1])):null}catch{throw new a("Service does not exist. Create your service from skapi.com",{code:"NOT_EXISTS"})}}),this.record_endpoint=fetch(`${d}/${p}/record-${this.__endpoint_version}.json`).then(b=>b.blob()).then(b=>new Promise((E,k)=>{let S=new FileReader;S.onloadend=()=>E(S.result),S.onerror=k,S.readAsDataURL(b);})).then(b=>{try{return typeof b=="string"?JSON.parse(atob(b.split(",")[1])):null}catch{throw new a("Service does not exist. Create your service from skapi.com",{code:"NOT_EXISTS"})}});let m=J();if(m&&!window.sessionStorage)throw this._alert("This browser is not supported."),new Error("This browser is not supported.");let h=m?JSON.parse(window.sessionStorage.getItem(`${t}#${r}`)||"null"):null;if(this.log("constructor:restore",h),h?.connection){for(let b in h)this[b]=h[b];h.__public_identifier||(this.__public_identifier=`${this.service}:${this.owner}:${Ee(16)}`);}nn.bind(this)(f),this.__authConnection=(async()=>{let b=await this.admin_endpoint,E={UserPoolId:b.userpool_id,ClientId:b.userpool_client};Ct()&&(E.Storage=window.localStorage),this.userPool=new amazonCognitoIdentityJs.CognitoUserPool(E);try{this.user||await z.bind(this)().getSession({skipUserUpdateEventTrigger:!0}),this.user&&(!h?.connection&&!u?ye.bind(this)():(f&&Rn.bind(this)(),this._runOnLoginListeners(this.user),this._runOnUserUpdateListeners(this.user)));}catch{}})();let _=`${this.service}/${this.owner}`,w=m?window.sessionStorage.getItem(`${_}:uniqueids`):null;if(w)try{let b=JSON.parse(w);this.__my_unique_ids=b&&typeof b=="object"&&!Array.isArray(b)?{[_]:b}:{};}catch{this.__my_unique_ids={};}this.__connection=(async()=>{let b=null;await this.record_endpoint,h?.connection||(b=this._updateConnection({refresh:g}));let E=()=>{if(this.__class_properties_has_been_cached)return;let k=()=>{let S={},O=["__startKeyHistory","__disabledAccount","__cached_requests","__request_signup_confirmation","__public_identifier","connection"];if(this.connection){for(let L of O)S[L]=this[L];if(f&&(S.__cached_requests={},S.__startKeyHistory={}),m){let L=`${t}#${r}`;try{window.sessionStorage.setItem(L,JSON.stringify(S));}catch{try{let v=Object.assign({},S,{__cached_requests:{},__startKeyHistory:{}});window.sessionStorage.setItem(L,JSON.stringify(v));}catch{try{window.sessionStorage.removeItem(L);}catch{}}}}this.__class_properties_has_been_cached=true;}};return b instanceof Promise?b.then(()=>k()):k()};return m&&(window.addEventListener("beforeunload",()=>{this.closeRealtime(),E();}),window.addEventListener("visibilitychange",()=>{E();})),await b,await this.__authConnection,this.connection})(),this.__connection.then(b=>{((b?.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(t){}get onLogin(){return this._onLoginListeners}set onLogin(t){typeof t=="function"&&this._onLoginListeners.push(t);}get onUserUpdate(){return this._userProfileListeners}set onUserUpdate(t){typeof t=="function"&&this._userProfileListeners.push(t);}_runOnUserUpdateListeners(t){for(let r of this._userProfileListeners)typeof r=="function"&&r(t);}_runOnLoginListeners(t){for(let r of this._onLoginListeners)typeof r=="function"&&r(t);}get onBatchProcess(){return this._onBatchProcessListeners}set onBatchProcess(t){typeof t=="function"&&this._onBatchProcessListeners.push(t);}_alert(t){J()&&typeof window.alert=="function"&&window.alert(t);}async getConnectionInfo(t){t?.refresh&&(this.__connection instanceof Promise&&await this.__connection,this.__connection=this._updateConnection({refresh:true}));let n=await this.__connection,i=n?.user_agent||(J()&&typeof window.navigator?.userAgent=="string"?window.navigator.userAgent:`skapi-node/${globalThis?.process?.versions?.node||"unknown"}`);return {project_id:this.project_id,user_ip:n.ip,user_agent:i,user_location:n.locale,service_name:n.service_name,version:this.__version,service_description:n?.service_description||"",ai_agent:n?.ai_agent||"",conf:n?.opt}}async _updateConnection(t){let r=t?.refresh||false;try{this.connection=await T.bind(this)("service",{service:this.service,owner:this.owner,refresh:r},{bypassAwaitConnection:!0,method:"get"});}catch(n){throw this.log("connection fail",n),this._alert("Service is not available: "+(n.message||n.toString())),this.connection=null,n}return this.connection}async version(){if(await this.__connection,J()){let r=`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{j()?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 Dn.bind(this)(e,n)}closeRTC(e){return H.bind(this)(e)}connectRTC(e,n){return cn.bind(this)(e,n)}connectRealtime(e){return Oe.bind(this)(e)}spellcast(e){return tr.bind(this)(e)}getspell(e){return nr.bind(this)(e)}dopamine(e){return rr.bind(this)(e)}getUniqueId(e,n){return Zt.bind(this)(e,n)}resendInvitation(e){return zn.bind(this)(e)}cancelInvitation(e){return Jn.bind(this)(e)}getInvitations(e,n){return Wn.bind(this)(e,n)}openIdLogin(e){return pt.bind(this)(e)}loginWithToken(e){return mt.bind(this)(e)}clientSecretRequest(e){return In.bind(this)(e)}clientSecretRequestHistory(e,n){return Tn.bind(this)(e,n)}cancelClientSecretRequest(e){return Pn.bind(this)(e)}stopClientSecretPolling(e){return Rn.bind(this)(e||{})}isPollStopped(e){return wn(e)}clientSecretRequestQueueCount(e){return An.bind(this)(e)}consumeTicket(e){return lt.bind(this)(e)}getConsumedTickets(e,n){return dt.bind(this)(e,n)}getTickets(e,n){return ut.bind(this)(e,n)}closeRealtime(){return gn.bind(this)()}getRealtimeUsers(e,n){return hn.bind(this)(e,n)}sendInquiry(e){return Sn.bind(this)(e)}blockAccount(e){return $n.bind(this)(e)}unblockAccount(e){return jn.bind(this)(e)}deleteAccount(e){return Bn.bind(this)(e)}inviteUser(e,n){return Kn.bind(this)(e,n)}createAccount(e){return Qn.bind(this)(e)}grantAccess(e){return Hn.bind(this)(e)}updateUserAttributes(e){return Gn.bind(this)(e)}getRealtimeGroups(e,n){return pn.bind(this)(e,n)}postRealtime(e,n,r){return fn.bind(this)(e,n,r)}joinRealtime(e){return Ye.bind(this)(e)}getProfile(e){return ht.bind(this)(e)}getFile(e,n){return se.bind(this)(e,n)}secureRequest(e,n){return kn.bind(this)(e,n)}forwardRequest(e,n){return vn.bind(this)(e,n)}getFormResponse(){return Ot.bind(this)()}getRecords(e,n){return Qt.bind(this)(e,n)}getTables(e,n){return zt.bind(this)(e,n)}getIndexes(e,n){return Gt.bind(this)(e,n)}getTags(e,n){return Xt.bind(this)(e,n)}deleteRecords(e,n){return Yt.bind(this)(e,n)}resendSignupConfirmation(){return _t.bind(this)()}recoverAccount(e=false){return bt.bind(this)(e)}getUsers(e,n){return kt.bind(this)(e,n)}disableAccount(){return wt.bind(this)()}lastVerifiedEmail(e){return xt.bind(this)(e)}unsubscribeNewsletter(e){return Fn.bind(this)(e)}subscribeNotification(e,n){return Xn.bind(this)({endpoint:e,keys:n})}unsubscribeNotification(e,n){return Zn.bind(this)({endpoint:e,keys:n})}vapidPublicKey(){return Yn.bind(this)()}pushNotification(e,n){return er.bind(this)(e,n)}getNewsletters(e,n){return Vn.bind(this)(e,n)}getNewsletterSubscription(e,n){return Mn.bind(this)(e,n)}requestUsernameChange(e){return vt.bind(this)(e)}grantPrivateRecordAccess(e){return en.bind(this)(e)}removePrivateRecordAccess(e){return tn.bind(this)(e)}listPrivateRecordAccess(e,n){return nn.bind(this)(e,n)}requestPrivateRecordAccessKey(e){return rn.bind(this)(e)}deleteFiles(e){return jt.bind(this)(e)}uploadFiles(e,n){return Se.bind(this)(e,n)}mock(e,n){return xn.bind(this)(e,n)}login(e){return je.bind(this)(e)}logout(e){return he.bind(this)(e)}signup(e,n){return yt.bind(this)(e,n)}resetPassword(e){return Et.bind(this)(e)}verifyEmail(e,n){return It.bind(this)(e,n)}verifyPhoneNumber(e,n){return At.bind(this)(e,n)}forgotPassword(e,n){return Tt.bind(this)(e,n)}changePassword(e){return Pt.bind(this)(e)}updateProfile(e){return St.bind(this)(e)}postRecord(e,n,r){return Jt.bind(this)(e,n,r)}getSubscriptions(e,n){return Nn.bind(this)(e,n)}subscribe(e){return Un.bind(this)(e)}unsubscribe(e){return Cn.bind(this)(e)}blockSubscriber(e){return Ln.bind(this)(e)}unblockSubscriber(e){return On.bind(this)(e)}subscribeNewsletter(e){return qn.bind(this)(e)}bulkPostRecords(e){return Wt.bind(this)(e)}};E([A()],w.prototype,"getFeed"),E([A()],w.prototype,"closeRTC"),E([A()],w.prototype,"connectRTC"),E([A()],w.prototype,"spellcast"),E([A()],w.prototype,"getspell"),E([A()],w.prototype,"dopamine"),E([A()],w.prototype,"getUniqueId"),E([A()],w.prototype,"resendInvitation"),E([A()],w.prototype,"cancelInvitation"),E([A()],w.prototype,"getInvitations"),E([A()],w.prototype,"openIdLogin"),E([A()],w.prototype,"loginWithToken"),E([A()],w.prototype,"clientSecretRequest"),E([A()],w.prototype,"clientSecretRequestHistory"),E([A()],w.prototype,"cancelClientSecretRequest"),E([A()],w.prototype,"consumeTicket"),E([A()],w.prototype,"getConsumedTickets"),E([A()],w.prototype,"getTickets"),E([A()],w.prototype,"getRealtimeUsers"),E([A()],w.prototype,"sendInquiry"),E([A()],w.prototype,"blockAccount"),E([A()],w.prototype,"unblockAccount"),E([A()],w.prototype,"deleteAccount"),E([A()],w.prototype,"inviteUser"),E([A()],w.prototype,"createAccount"),E([A()],w.prototype,"grantAccess"),E([A()],w.prototype,"updateUserAttributes"),E([A()],w.prototype,"getRealtimeGroups"),E([A()],w.prototype,"postRealtime"),E([A()],w.prototype,"joinRealtime"),E([A()],w.prototype,"getProfile"),E([A()],w.prototype,"getFile"),E([A()],w.prototype,"secureRequest"),E([A()],w.prototype,"forwardRequest"),E([A()],w.prototype,"getFormResponse"),E([A()],w.prototype,"getRecords"),E([A()],w.prototype,"getTables"),E([A()],w.prototype,"getIndexes"),E([A()],w.prototype,"getTags"),E([A()],w.prototype,"deleteRecords"),E([A()],w.prototype,"resendSignupConfirmation"),E([A()],w.prototype,"recoverAccount"),E([A()],w.prototype,"getUsers"),E([A()],w.prototype,"disableAccount"),E([A()],w.prototype,"lastVerifiedEmail"),E([A()],w.prototype,"unsubscribeNewsletter"),E([A()],w.prototype,"subscribeNotification"),E([A()],w.prototype,"unsubscribeNotification"),E([A()],w.prototype,"vapidPublicKey"),E([A()],w.prototype,"pushNotification"),E([A()],w.prototype,"getNewsletters"),E([A()],w.prototype,"getNewsletterSubscription"),E([A()],w.prototype,"requestUsernameChange"),E([A()],w.prototype,"grantPrivateRecordAccess"),E([A()],w.prototype,"removePrivateRecordAccess"),E([A()],w.prototype,"listPrivateRecordAccess"),E([A()],w.prototype,"requestPrivateRecordAccessKey"),E([A()],w.prototype,"deleteFiles"),E([A()],w.prototype,"uploadFiles"),E([A()],w.prototype,"mock"),E([A({preventMultipleCalls:true})],w.prototype,"login"),E([A()],w.prototype,"logout"),E([A({preventMultipleCalls:true})],w.prototype,"signup"),E([A({preventMultipleCalls:true})],w.prototype,"resetPassword"),E([A({preventMultipleCalls:true})],w.prototype,"verifyEmail"),E([A({preventMultipleCalls:true})],w.prototype,"verifyPhoneNumber"),E([A({preventMultipleCalls:true})],w.prototype,"forgotPassword"),E([A({preventMultipleCalls:true})],w.prototype,"changePassword"),E([A({preventMultipleCalls:true})],w.prototype,"updateProfile"),E([A()],w.prototype,"postRecord"),E([A()],w.prototype,"getSubscriptions"),E([A()],w.prototype,"subscribe"),E([A()],w.prototype,"unsubscribe"),E([A()],w.prototype,"blockSubscriber"),E([A()],w.prototype,"unblockSubscriber"),E([A()],w.prototype,"subscribeNewsletter");var li={};
233
- exports.Skapi=w;exports.SkapiError=a;exports.Types=li;//# sourceMappingURL=skapi.cjs.map
232
+ Full Documentation: https://docs.skapi.com/skapi.md`;console.log(r,"font-family: monospace; color:blue;"),this.connection.group===1&&console.log("%cSKAPI: THE SERVICE IS IN TRIAL MODE.","font-family: monospace; color:red;");}return this.__version}log(t,r){if(this.__network_logs){if(r!==null&&typeof r=="object")try{J()?r=JSON.parse(JSON.stringify(r)):r=JSON.stringify(r,null,2);}catch{r=String(r);}else typeof r=="string"&&r.length>100&&(r=r.substring(0,100)+"...");console.log(`%c${t}:`,"color: blue;",r);}}getFeed(t,r){return ns.bind(this)(t,r)}closeRTC(t){return ce.bind(this)(t)}connectRTC(t,r){return Ci.bind(this)(t,r)}connectRealtime(t){return St.bind(this)(t)}spellcast(t){return Ss.bind(this)(t)}getspell(t){return ks.bind(this)(t)}dopamine(t){return vs.bind(this)(t)}getUniqueId(t,r){return Pi.bind(this)(t,r)}resendInvitation(t){return Es.bind(this)(t)}cancelInvitation(t){return ws.bind(this)(t)}getInvitations(t,r){return _s.bind(this)(t,r)}openIdLogin(t){return jn.bind(this)(t)}loginWithToken(t){return Bn.bind(this)(t)}clientSecretRequest(t){return Ji.bind(this)(t)}clientSecretRequestHistory(t,r){return Yi.bind(this)(t,r)}cancelClientSecretRequest(t){return Xi.bind(this)(t)}stopClientSecretPolling(t){return Gi.bind(this)(t||{})}isPollStopped(t){return Wi(t)}clientSecretRequestQueueCount(t){return zi.bind(this)(t)}consumeTicket(t){return Ln.bind(this)(t)}getConsumedTickets(t,r){return Mn.bind(this)(t,r)}getTickets(t,r){return Fn.bind(this)(t,r)}closeRealtime(){return Mi.bind(this)()}getRealtimeUsers(t,r){return Vi.bind(this)(t,r)}sendInquiry(t){return Zi.bind(this)(t)}blockAccount(t){return gs.bind(this)(t)}unblockAccount(t){return ps.bind(this)(t)}deleteAccount(t){return hs.bind(this)(t)}inviteUser(t,r){return ys.bind(this)(t,r)}createAccount(t){return ms.bind(this)(t)}grantAccess(t){return bs.bind(this)(t)}updateUserAttributes(t){return As.bind(this)(t)}getRealtimeGroups(t,r){return qi.bind(this)(t,r)}postRealtime(t,r,n){return $i.bind(this)(t,r,n)}joinRealtime(t){return Ar.bind(this)(t)}getProfile(t){return qn.bind(this)(t)}getFile(t,r){return Ie.bind(this)(t,r)}secureRequest(t,r){return es.bind(this)(t,r)}forwardRequest(t,r){return rs.bind(this)(t,r)}getFormResponse(){return li.bind(this)()}getRecords(t,r){return _i.bind(this)(t,r)}getTables(t,r){return Ai.bind(this)(t,r)}getIndexes(t,r){return Ri.bind(this)(t,r)}getTags(t,r){return Ii.bind(this)(t,r)}deleteRecords(t,r){return Ti.bind(this)(t,r)}resendSignupConfirmation(){return Kn.bind(this)()}recoverAccount(t=false){return Hn.bind(this)(t)}getUsers(t,r){return ti.bind(this)(t,r)}disableAccount(){return Qn.bind(this)()}lastVerifiedEmail(t){return ri.bind(this)(t)}unsubscribeNewsletter(t){return ds.bind(this)(t)}subscribeNotification(t,r){return Rs.bind(this)({endpoint:t,keys:r})}unsubscribeNotification(t,r){return Is.bind(this)({endpoint:t,keys:r})}vapidPublicKey(){return Ps.bind(this)()}pushNotification(t,r){return Ts.bind(this)(t,r)}getNewsletters(t,r){return fs.bind(this)(t,r)}getNewsletterSubscription(t,r){return ls.bind(this)(t,r)}requestUsernameChange(t){return ni.bind(this)(t)}getEncryptionStatus(){return sn.bind(this)()}isWithheld(t){return Jt.call(this,t)}unlockEncryption(t){return bn.bind(this)(t)}lockEncryption(t){return _n.bind(this)(t)}takeRecoveryCode(){return kn.bind(this)()}unlockWithRecoveryCode(t){return vn.bind(this)(t)}regenerateRecoveryCode(){return Un.bind(this)()}pinPeerKey(t){return Tn.bind(this)(t)}grantPrivateRecordAccess(t){return Si.bind(this)(t)}removePrivateRecordAccess(t){return ki.bind(this)(t)}listPrivateRecordAccess(t,r){return vi.bind(this)(t,r)}requestPrivateRecordAccessKey(t){return Ui.bind(this)(t)}deleteFiles(t){return yi.bind(this)(t)}uploadFiles(t,r){return Ze.bind(this)(t,r)}mock(t,r){return ts.bind(this)(t,r)}login(t){return ur.bind(this)(t)}logout(t){return Je.bind(this)(t)}signup(t,r){return Wn.bind(this)(t,r)}resetPassword(t){return Gn.bind(this)(t)}verifyEmail(t,r){return Yn.bind(this)(t,r)}verifyPhoneNumber(t,r){return Jn.bind(this)(t,r)}forgotPassword(t,r){return Xn.bind(this)(t,r)}changePassword(t){return Zn.bind(this)(t)}updateProfile(t){return ei.bind(this)(t)}postRecord(t,r,n){return mr.bind(this)(t,r,n)}getSubscriptions(t,r){return is.bind(this)(t,r)}subscribe(t){return ss.bind(this)(t)}unsubscribe(t){return os.bind(this)(t)}blockSubscriber(t){return as.bind(this)(t)}unblockSubscriber(t){return cs.bind(this)(t)}subscribeNewsletter(t){return us.bind(this)(t)}bulkPostRecords(t){return Ei.bind(this)(t)}};I([P()],R.prototype,"getFeed"),I([P()],R.prototype,"closeRTC"),I([P()],R.prototype,"connectRTC"),I([P()],R.prototype,"spellcast"),I([P()],R.prototype,"getspell"),I([P()],R.prototype,"dopamine"),I([P()],R.prototype,"getUniqueId"),I([P()],R.prototype,"resendInvitation"),I([P()],R.prototype,"cancelInvitation"),I([P()],R.prototype,"getInvitations"),I([P()],R.prototype,"openIdLogin"),I([P()],R.prototype,"loginWithToken"),I([P()],R.prototype,"clientSecretRequest"),I([P()],R.prototype,"clientSecretRequestHistory"),I([P()],R.prototype,"cancelClientSecretRequest"),I([P()],R.prototype,"consumeTicket"),I([P()],R.prototype,"getConsumedTickets"),I([P()],R.prototype,"getTickets"),I([P()],R.prototype,"getRealtimeUsers"),I([P()],R.prototype,"sendInquiry"),I([P()],R.prototype,"blockAccount"),I([P()],R.prototype,"unblockAccount"),I([P()],R.prototype,"deleteAccount"),I([P()],R.prototype,"inviteUser"),I([P()],R.prototype,"createAccount"),I([P()],R.prototype,"grantAccess"),I([P()],R.prototype,"updateUserAttributes"),I([P()],R.prototype,"getRealtimeGroups"),I([P()],R.prototype,"postRealtime"),I([P()],R.prototype,"joinRealtime"),I([P()],R.prototype,"getProfile"),I([P()],R.prototype,"getFile"),I([P()],R.prototype,"secureRequest"),I([P()],R.prototype,"forwardRequest"),I([P()],R.prototype,"getFormResponse"),I([P()],R.prototype,"getRecords"),I([P()],R.prototype,"getTables"),I([P()],R.prototype,"getIndexes"),I([P()],R.prototype,"getTags"),I([P()],R.prototype,"deleteRecords"),I([P()],R.prototype,"resendSignupConfirmation"),I([P()],R.prototype,"recoverAccount"),I([P()],R.prototype,"getUsers"),I([P()],R.prototype,"disableAccount"),I([P()],R.prototype,"lastVerifiedEmail"),I([P()],R.prototype,"unsubscribeNewsletter"),I([P()],R.prototype,"subscribeNotification"),I([P()],R.prototype,"unsubscribeNotification"),I([P()],R.prototype,"vapidPublicKey"),I([P()],R.prototype,"pushNotification"),I([P()],R.prototype,"getNewsletters"),I([P()],R.prototype,"getNewsletterSubscription"),I([P()],R.prototype,"requestUsernameChange"),I([P()],R.prototype,"unlockEncryption"),I([P()],R.prototype,"unlockWithRecoveryCode"),I([P()],R.prototype,"grantPrivateRecordAccess"),I([P()],R.prototype,"removePrivateRecordAccess"),I([P()],R.prototype,"listPrivateRecordAccess"),I([P()],R.prototype,"requestPrivateRecordAccessKey"),I([P()],R.prototype,"deleteFiles"),I([P()],R.prototype,"uploadFiles"),I([P()],R.prototype,"mock"),I([P({preventMultipleCalls:true})],R.prototype,"login"),I([P()],R.prototype,"logout"),I([P({preventMultipleCalls:true})],R.prototype,"signup"),I([P({preventMultipleCalls:true})],R.prototype,"resetPassword"),I([P({preventMultipleCalls:true})],R.prototype,"verifyEmail"),I([P({preventMultipleCalls:true})],R.prototype,"verifyPhoneNumber"),I([P({preventMultipleCalls:true})],R.prototype,"forgotPassword"),I([P({preventMultipleCalls:true})],R.prototype,"changePassword"),I([P({preventMultipleCalls:true})],R.prototype,"updateProfile"),I([P()],R.prototype,"postRecord"),I([P()],R.prototype,"getSubscriptions"),I([P()],R.prototype,"subscribe"),I([P()],R.prototype,"unsubscribe"),I([P()],R.prototype,"blockSubscriber"),I([P()],R.prototype,"unblockSubscriber"),I([P()],R.prototype,"subscribeNewsletter");var sa={};
233
+ exports.Skapi=R;exports.SkapiError=a;exports.Types=sa;//# sourceMappingURL=skapi.cjs.map
234
234
  //# sourceMappingURL=skapi.cjs.map