skapi-js 2.0.0-rc.0 → 2.0.0-rc.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -11
- package/dist/skapi.browser.mjs +6 -6
- package/dist/skapi.browser.mjs.map +1 -1
- package/dist/skapi.cjs +7 -7
- package/dist/skapi.cjs.map +1 -1
- package/dist/skapi.d.mts +282 -1
- package/dist/skapi.d.ts +282 -1
- package/dist/skapi.js +6 -6
- package/dist/skapi.js.map +1 -1
- package/dist/skapi.mjs +7 -7
- package/dist/skapi.mjs.map +1 -1
- package/package.json +5 -3
package/dist/skapi.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'use strict';var amazonCognitoIdentityJs=require('amazon-cognito-identity-js'),
|
|
1
|
+
'use strict';var amazonCognitoIdentityJs=require('amazon-cognito-identity-js'),Xs=require('cocochex'),Hi=require('qpass');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var Xs__default=/*#__PURE__*/_interopDefault(Xs);var Hi__default=/*#__PURE__*/_interopDefault(Hi);/**
|
|
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 er=Object.defineProperty;var tr=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 R=(t,e,n,r)=>{for(var i=tr(e,n),s=t.length-1,o;s>=0;s--)(o=t[s])&&(i=(o(e,n,i))||i);return i&&er(e,n,i),i};var Y=typeof globalThis<"u"?globalThis:void 0,Ee=Y?.window;function nr(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=nr(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),rr=2*1024*1024,ir=["aud","cognito:username","event_id","exp","iat","iss","jti","origin_jti","secret_key","token_use"],tt={auth_time:"log",sub:"user_id"},sr=["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 or(){if(typeof globalThis<"u")return globalThis.Buffer}function ar(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 cr(t){if(t instanceof Uint8Array)return t;if(typeof t=="string")return ar(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=or();if(e)return new Uint8Array(e.from(t));throw new Error("No byte conversion available in this environment.")}var _=class _{static hash(e){typeof e!="string"&&(console.warn("coercing non-string value to empty string"),e="");let n=_.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=_.ff(r,i,s,o,n[g],7,-680876936),o=_.ff(o,r,i,s,n[g+1],12,-389564586),s=_.ff(s,o,r,i,n[g+2],17,606105819),i=_.ff(i,s,o,r,n[g+3],22,-1044525330),r=_.ff(r,i,s,o,n[g+4],7,-176418897),o=_.ff(o,r,i,s,n[g+5],12,1200080426),s=_.ff(s,o,r,i,n[g+6],17,-1473231341),i=_.ff(i,s,o,r,n[g+7],22,-45705983),r=_.ff(r,i,s,o,n[g+8],7,1770035416),o=_.ff(o,r,i,s,n[g+9],12,-1958414417),s=_.ff(s,o,r,i,n[g+10],17,-42063),i=_.ff(i,s,o,r,n[g+11],22,-1990404162),r=_.ff(r,i,s,o,n[g+12],7,1804603682),o=_.ff(o,r,i,s,n[g+13],12,-40341101),s=_.ff(s,o,r,i,n[g+14],17,-1502002290),i=_.ff(i,s,o,r,n[g+15],22,1236535329),r=_.gg(r,i,s,o,n[g+1],5,-165796510),o=_.gg(o,r,i,s,n[g+6],9,-1069501632),s=_.gg(s,o,r,i,n[g+11],14,643717713),i=_.gg(i,s,o,r,n[g],20,-373897302),r=_.gg(r,i,s,o,n[g+5],5,-701558691),o=_.gg(o,r,i,s,n[g+10],9,38016083),s=_.gg(s,o,r,i,n[g+15],14,-660478335),i=_.gg(i,s,o,r,n[g+4],20,-405537848),r=_.gg(r,i,s,o,n[g+9],5,568446438),o=_.gg(o,r,i,s,n[g+14],9,-1019803690),s=_.gg(s,o,r,i,n[g+3],14,-187363961),i=_.gg(i,s,o,r,n[g+8],20,1163531501),r=_.gg(r,i,s,o,n[g+13],5,-1444681467),o=_.gg(o,r,i,s,n[g+2],9,-51403784),s=_.gg(s,o,r,i,n[g+7],14,1735328473),i=_.gg(i,s,o,r,n[g+12],20,-1926607734),r=_.hh(r,i,s,o,n[g+5],4,-378558),o=_.hh(o,r,i,s,n[g+8],11,-2022574463),s=_.hh(s,o,r,i,n[g+11],16,1839030562),i=_.hh(i,s,o,r,n[g+14],23,-35309556),r=_.hh(r,i,s,o,n[g+1],4,-1530992060),o=_.hh(o,r,i,s,n[g+4],11,1272893353),s=_.hh(s,o,r,i,n[g+7],16,-155497632),i=_.hh(i,s,o,r,n[g+10],23,-1094730640),r=_.hh(r,i,s,o,n[g+13],4,681279174),o=_.hh(o,r,i,s,n[g],11,-358537222),s=_.hh(s,o,r,i,n[g+3],16,-722521979),i=_.hh(i,s,o,r,n[g+6],23,76029189),r=_.hh(r,i,s,o,n[g+9],4,-640364487),o=_.hh(o,r,i,s,n[g+12],11,-421815835),s=_.hh(s,o,r,i,n[g+15],16,530742520),i=_.hh(i,s,o,r,n[g+2],23,-995338651),r=_.ii(r,i,s,o,n[g],6,-198630844),o=_.ii(o,r,i,s,n[g+7],10,1126891415),s=_.ii(s,o,r,i,n[g+14],15,-1416354905),i=_.ii(i,s,o,r,n[g+5],21,-57434055),r=_.ii(r,i,s,o,n[g+12],6,1700485571),o=_.ii(o,r,i,s,n[g+3],10,-1894986606),s=_.ii(s,o,r,i,n[g+10],15,-1051523),i=_.ii(i,s,o,r,n[g+1],21,-2054922799),r=_.ii(r,i,s,o,n[g+8],6,1873313359),o=_.ii(o,r,i,s,n[g+15],10,-30611744),s=_.ii(s,o,r,i,n[g+6],15,-1560198380),i=_.ii(i,s,o,r,n[g+13],21,1309151649),r=_.ii(r,i,s,o,n[g+4],6,-145523070),o=_.ii(o,r,i,s,n[g+11],10,-1120210379),s=_.ii(s,o,r,i,n[g+2],15,718787259),i=_.ii(i,s,o,r,n[g+9],21,-343485551),r=_.ad(r,l),i=_.ad(i,u),s=_.ad(s,c),o=_.ad(o,d);return _.rh(r)+_.rh(i)+_.rh(s)+_.rh(o)}static rh(e){let n="";for(let r=0;r<=3;r++)n+=_.alphabet.charAt(e>>r*8+4&15)+_.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 _.ad(_.rl(_.ad(_.ad(n,e),_.ad(i,o)),s),r)}static ff(e,n,r,i,s,o,l){return _.cm(n&r|~n&i,e,n,s,o,l)}static gg(e,n,r,i,s,o,l){return _.cm(n&i|r&~i,e,n,s,o,l)}static hh(e,n,r,i,s,o,l){return _.cm(n^r^i,e,n,s,o,l)}static ii(e,n,r,i,s,o,l){return _.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}};_.alphabet="0123456789abcdef";var M=_;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 Fe(){return typeof window>"u"||!!window?._runningInNodeJS}function j(){return !Fe()&&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>rr)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(),lr=typeof SubmitEvent<"u",ur=typeof HTMLFormElement<"u";function N(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 m=n(c,d);m!==void 0&&(d=m);}let g=c.split("[").map(m=>{let p=m.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 m=0;m<g.length;m++){let p=g[m];m<g.length-1?(h[p]===void 0&&(typeof g[m+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&&lr&&t instanceof SubmitEvent&&(t=t.target),Ae&&ur&&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(!ir.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 Ve(t){if(t=br(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 qe(t,e){let n=ot.indexOf(t.slice(0,4)),r=sr[n],s=`${t.slice(4,-4)}-${r}${t.slice(-4)}-${e}`;return _r(s)}function dr(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 gr(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 fr(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 hr(t){let e=0n;for(let n of t)e=(e<<8n)+BigInt(n);return e}function pr(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 mr(t){let e=Array.from(cr(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 _r(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=pr(s),g=gr(hr(d));return `${c}-${g}`}function br(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 m=dr(i),p=fr(m);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 b=mr(y);return `${h}-${g}-${b}`}function wr(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 Er(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 Rr(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 Ar(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 Ir(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 Tr(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 Pr(t,e,n=[],r){let i=N(t,r),s=i.data;e.service="string",e.owner="string";let o={};for(let l in e)if(s&&typeof s=="object"&&!Array.isArray(s)&&s.hasOwnProperty(l))if(typeof s[l]=="function")o[l]=s[l];else try{o[l]=JSON.parse(JSON.stringify(s[l]));}catch{o[l]=s[l];}r?.precall&&r.precall({data:o,files:i?.files||[]});try{return yr__default.default(o,e,n)}catch(l){throw new a(l.message,{code:"INVALID_PARAMETER"})}}var f={UserId:wr,PhoneNumber:Er,Birthdate:Rr,Password:Ar,Email:Ir,Url:Tr,Params:Pr};var C=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 E.bind(this)(`https://${this.service.slice(0,4)}.${this.customApiDomain}/auth/consume/${this.service}/${this.owner}/${e}`,t?.data||{},{method:t.method,auth:!!t?.auth});return $e(n)}async function ut(t,e){await this.__connection;let n=await E.bind(this)("ticket",Object.assign({exec:"list"},t||{}),{auth:true,fetchOptions:e});return n.list=n.list.map($e),n}async function dt(t,e){await this.__connection;let n=await E.bind(this)("ticket",Object.assign({exec:"consumed"},t||{}),{auth:true,fetchOptions:e});return n.list=n.list.map($e),n}async function gt(t){return E.bind(this)("register-ticket",Object.assign({exec:"reg"},t),{auth:true})}async function ft(t){return E.bind(this)("register-ticket",Object.assign({exec:"unreg"},t),{auth:true})}var Ur=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+Ur){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=C.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),C=this.userPool.getCurrentUser(),!C){this.log("getSession:cognitoUser",C),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};C.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,C).then(I=>o(d(I))).catch(l);return}let m=Math.floor(Date.now()/1e3),p=h.getIdToken(),y=p.getExpiration(),b=y<m;if(this.log("getSession:currentTime",m),this.log("getSession:idTokenExp",y),this.log("getSession:isExpired",b),this.log("getSession:existingBearerToken",this.bearerToken),this.bearerToken=p.getJwtToken(),b||u||!h.isValid())ct.bind(this)(h,C).then(I=>o(d(I))).catch(l);else try{o(d(h));}catch(I){l(I);}});}),n=(s,o)=>{let l=o||s.includes(this.service+"-")?s:this.service+"-"+M.hash(s);return {cognitoUser:new amazonCognitoIdentityJs.CognitoUser({Username:l,Pool:this.userPool}),cognitoUsername:l}};return {getSession:e,authenticateUser:(s,o,l=false,u=false)=>new Promise((c,d)=>{this.__request_signup_confirmation=null,this.__disabledAccount=null;let g=n(s,l),h=g.cognitoUsername,m=new amazonCognitoIdentityJs.AuthenticationDetails({Username:h,Password:o});g.cognitoUser.authenticateUser(m,{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:b=>{C=g.cognitoUser,e().then(I=>c(this.user));},onFailure:b=>{d(new a(b.message||"Failed to authenticate user.",{code:b.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:b,code:I}=Te(p),T=typeof p?.message=="string"?p.message:"";if(I==="NotAuthorizedException"?T.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"]:I==="UserNotFoundException"?y=["Incorrect username or password.","INCORRECT_USERNAME_OR_PASSWORD"]:I==="UserNotConfirmedException"?(this.__request_signup_confirmation=h,y=["User's signup confirmation is required.","SIGNUP_CONFIRMATION_NEEDED"]):(I==="TooManyRequestsException"||I==="LimitExceededException")&&(y=["Too many attempts. Please try again later.","REQUEST_EXCEED"]),b.code==="SIGNUP_CONFIRMATION_NEEDED"&&(this.__request_signup_confirmation=h),y.length){let k=y[1],P=y[0];d(new a(P,{code:k,cause:p}));}else d(b);}});}),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:m}=Te(d),p=[];m==="UsernameExistsException"?p=["The account already exists.","EXISTS"]:m==="InvalidPasswordException"?p=["Invalid password. Password must be at least 6 characters.","INVALID_PARAMETER"]:m==="InvalidParameterException"?p=[h.message||"Invalid parameter.","INVALID_PARAMETER"]:m==="TooManyRequestsException"||m==="LimitExceededException"?p=["Too many attempts. Please try again later.","REQUEST_EXCEED"]:m==="CodeDeliveryFailureException"?p=["Failed to deliver verification code.","CODE_DELIVERY_FAILURE"]:m==="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 E.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 Nr(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 Cr(t){let e=t.split(".");if(e.length!==3)throw new Error("Invalid JWT format");let r=e[1].replace(/-/g,"+").replace(/_/g,"/"),i=Nr(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=Cr(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),C=new amazonCognitoIdentityJs.CognitoUser(r),C.setSignInUserSession(this.session),this.log("loginWithToken:cognitoUserRestored",{cognitoUserType:typeof C,cognitoUserKeys:Object.keys(C||{}),cognitoUser:C});}}catch(r){this.log("loginWithToken:err",r);try{this.log("loginWithToken:err:stringified",JSON.stringify(r));}catch{this.log("loginWithToken:err:stringifyFail",String(r));}try{let i=Object.keys(r||{}),s=Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(r||{}):[],o=Object.getOwnPropertyDescriptors?Object.getOwnPropertyDescriptors(r||{}):{};this.log("loginWithToken:createSessionError:allKeys",{keys:i,symbols:s,descriptors:o});}catch(i){this.log("loginWithToken:createSessionError:allKeysFail",String(i));}}return this._runOnLoginListeners(this.user),this._runOnUserUpdateListeners(this.user),this.user}async function F(){return await this.__connection,this.__user?.service===this.service?this.__user?.owner===this.host:(await he.bind(this)(),false)}async function te(t=false){let e=null;C&&(t?e=new Promise((r,i)=>{C.globalSignOut({onSuccess:s=>{this.log("globalSignOut:success",s),r(s);},onFailure:s=>{this.log("globalSignOut:error",s),i(s);}});}):C.signOut());let n={session:null,__startKeyHistory:{},__cached_requests:{},__user:null};e&&(e=await e);for(let r in n)this[r]=n[r];return this._runOnUserUpdateListeners(null),this._runOnLoginListeners(null),e}async function he(t){await this.__connection;let{data:e}=N(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 E.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 E.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 E.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?(C=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 E.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(!C)throw new a("The user has to be logged in.",{code:"INVALID_REQUEST"});if(t==="email"||t==="phone_number"){if(!this.__user.hasOwnProperty(t))throw new a(`No ${t==="email"?"e-mail":"phone number"} to verify`,{code:"INVALID_REQUEST"});if(this.__user?.[`${t}_verified`])return `SUCCESS: "${t}" is verified.`;r=(e?f.Params(e,{code:"string"}):{}).code||"";}else return;let i,s=n?.template?.verification;if(s!==void 0){if(typeof s!="string"||!s)throw new a('"template.verification" should be a non-empty <string> (template message_id).',{code:"INVALID_PARAMETER"});i={template_verification:s};}return new Promise((o,l)=>{let u={onSuccess:c=>{r?$.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?C?.verifyAttribute(t,r,u):(u.inputVerificationCode=null,C?.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)=>{C.changePassword(e.current_password,e.new_password,(i,s)=>{if(i){if(i?.code==="InvalidParameterException")r(new a("Invalid password parameter.",{code:"INVALID_PARAMETER"}));else if(i?.code==="NotAuthorizedException")r(new a("Incorrect password.",{code:"INVALID_REQUEST"}));else if(i?.code==="TooManyRequestsException"||i?.code==="LimitExceededException")r(new a("Too many attempts. Please try again later.",{code:"REQUEST_EXCEED"}));else {let{parsed:o}=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+"-"+M.hash(e.email));let n=[["email_public","email_verified","User's e-mail should be verified to set"],["phone_number_public","phone_number_verified","User's phone number should be verified to set"]];if(this.__user){for(let i of n)if(e[i[0]]&&!this.__user[i[1]])throw new a(`${i[2]} "${i[0]}" to true.`,{code:"INVALID_REQUEST"})}let r=[];for(let i in e){if(e[i]===this.user[i]){r.push(i);continue}if(["email_public","phone_number_public","address_public","gender_public","birthdate_public","misc"].includes(i)){let o=e[i];typeof o=="boolean"&&(o=o?"1":"0"),e["custom:"+i]=o,r.push(i);}}for(let i of r)delete e[i];if(e.user_id)if(e.user_id===this.user.user_id)delete e.user_id;else return E.bind(this)("admin-edit-profile",{attributes:e},{auth:true});if(e&&typeof e=="object"&&Object.keys(e).length){let i=[];for(let s in e)i.push(new amazonCognitoIdentityJs.CognitoUserAttribute({Name:s,Value:e[s]}));return await new Promise((s,o)=>{C?.updateAttributes(i,(l,u)=>{l&&o([l?.code||l?.name,l?.message||"Failed to update user settings."]),s(u);});}),await $.bind(this)().getSession({refreshToken:true}),this.user}return this.user}async function kt(t,e){t=N(t).data,t||(t={searchFor:"timestamp",condition:">",value:0},e||(e={}),e.ascending=false),await this.__connection;let n={user_id:i=>Array.isArray(i)?i.map(s=>f.UserId(s)):f.UserId(i),email:"string",phone_number:"string",locale:i=>{if(typeof i!="string"||typeof i=="string"&&i.length>5)throw new a('Value of "locale" should be a country code.',{code:"INVALID_PARAMETER"});return i},name:"string",address:"string",gender:"string",birthdate:i=>f.Birthdate(i),subscribers:"number",timestamp:"number",access_group:"number",approved:"string"},r=["searchFor","value"];if(t=f.Params(t,{searchFor:["user_id","name","email","phone_number","address","gender","birthdate","locale","subscribers","timestamp","access_group","approved"],condition:[">",">=","=","<","<=","gt","gte","eq","lt","lte",()=>"="],value:i=>{let s=n[t.searchFor];if(typeof s=="function")return s(i);if(typeof i!==s)throw new a(`Value does not match the type of "${t.searchFor}" index.`,{code:"INVALID_PARAMETER"});return i},range:i=>{let s=n[t.searchFor];if(typeof s=="function")return s(i);if(typeof i!==s)throw new a(`Range does not match the type of "${t.searchFor}" index.`,{code:"INVALID_PARAMETER"});return i}},r),t?.condition&&t?.condition!=="="&&t.hasOwnProperty("range"))throw new a("Conditions does not apply on range search.",{code:"INVALID_PARAMETER"});if(t.searchFor==="user_id"&&(t.condition!=="="||t.range))throw new a(`Conditions are not allowed on "${t.searchFor}"`,{code:"INVALID_PARAMETER"});if(typeof t?.value=="string"&&!t?.value)throw new a("Value should not be an empty string.",{code:"INVALID_PARAMETER"});if(typeof t?.searchFor=="string"&&!t?.searchFor)throw new a('"searchFor" should not be an empty string.',{code:"INVALID_PARAMETER"});return E.bind(this)("get-users",t,{auth:true,fetchOptions:e})}async function vt(t){await this.__connection;let e=await E.bind(this)("last-verified-email",t,{auth:true});return e.includes("SUCCESS")?(await $.bind(this)().getSession({refreshToken:true}),this.user):e}async function xt(t){return await this.__connection,t=f.Params(t,{username:f.Email,redirect:f.Url},["username"]),await E.bind(this)("request-username-change",t,{auth:true})}var le=null,Ut=typeof SubmitEvent<"u",Or=typeof HTMLFormElement<"u",me=j(),Be=0;function Nt(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 Mr(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 E(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 Mr.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 m={},{fetchMore:p=false,progress:y}=n?.fetchOptions||{};if(n?.fetchOptions&&Object.keys(n.fetchOptions).length){for(let v of ["limit","startKey","ascending"])if(n.fetchOptions.hasOwnProperty(v)){if(v==="startKey"&&n.fetchOptions[v]===null)continue;m[v]=n.fetchOptions[v];}m=f.Params(m,{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 b=r?.ignoreService?{}:{service:u,owner:c};Object.assign(b,m),e=N(e).data,e?e&&typeof e=="object"&&(e=Object.assign(b,e)):e=b;let I=`${s}:${i?"auth":"public"}:${t}`,T=(()=>{if(e&&typeof e=="object"&&Object.keys(e).length&&!(me&&e instanceof FormData)){let v=function(D){return typeof D=="object"&&D!==null?Object.keys(D).sort().reduce((U,L)=>(typeof D[L]=="object"&&D[L]!==null?U[L]=v(D[L]):U[L]=D[L],U),{}):D};return M.hash(I+"/"+JSON.stringify(v(e)))}return M.hash(I+"/"+u)})(),{requestKey:k,requestKeyWithStartKey:P}=Fr.bind(this)({params:e,url:t,fetchMore:p,hashedParams:T});if(!k||k&&typeof k=="object")return k;if(this.log("requestKey",P),typeof P=="string"&&pe[P]instanceof Promise)return this.log("request:returning pending",P),pe[P];let x={Accept:"*/*"};if(Object.prototype.hasOwnProperty.call(n,"contentType")&&n.contentType!==void 0){let v=n.contentType===null?"application/x-www-form-urlencoded":n.contentType;v&&(x["Content-Type"]=v);}else x["Content-Type"]="application/json";if(d&&(x.Authorization=d),n?.tokenHeaders){let v=(L,Yn)=>typeof L=="string"?L:L===true?Yn:null,D=v(n.tokenHeaders.accessToken,this.session?.accessToken?.jwtToken||null),U=v(n.tokenHeaders.idToken,this.bearerToken||this.session?.idToken?.jwtToken||d||null);D&&(x["X-Access-Token"]=D),U&&(x["X-Id-Token"]=U);}let Z={public_identifier:this.__public_identifier,service:u,owner:c};x["Content-Meta"]=JSON.stringify(Z),n.revalidate&&(x["Cache-Control"]="no-cache",x.Pragma="no-cache");let q={headers:x};if(n?.responseType&&(q.responseType=n.responseType),s==="GET"){if(e){let v=[];if(me&&e instanceof FormData?v=Array.from(e.entries()).map(([D,U])=>{let L=typeof U=="string"?U:U.name;return encodeURIComponent(D)+"="+encodeURIComponent(L)}):v=Object.keys(e).map(D=>{let U=e[D];return typeof U!="string"&&(U=JSON.stringify(U)),encodeURIComponent(D)+"="+encodeURIComponent(U)}),v.length){let D=g.includes("?")?g.endsWith("?")||g.endsWith("&")?"":"&":"?";g+=D+v.join("&");}}q.body=null;}else if(me&&e instanceof FormData)q.body=e;else if(x["Content-Type"]==="application/x-www-form-urlencoded"&&e&&typeof e=="object"){let v=new URLSearchParams;for(let D of Object.keys(e)){let U=e[D];v.append(D,typeof U=="string"?U:JSON.stringify(U));}q.body=v.toString();}else typeof e=="string"?q.body=e:q.body=e?JSON.stringify(e):null;if(q.method=s,le===null){let v={batchSize:this.requestBatchSize,breakWhenError:false,onProgress:D=>{this.onBatchProcess.forEach(U=>U(D));}};le=new pn__default.default(v);}return this.log("request-opt",q),new Promise((v,D)=>{le.add([async()=>{let U=Lt.bind(this)(g,q,y);pe[P]=U;try{let L=Vr.bind(this)({hashedParam:k,requestKeyWithStartKey:P,url:t,fetched:await U});return delete pe[P],this.log("request:end",L),v(L),L}catch(L){throw delete pe[P],this.log("request:err",L),D(L),L}}]);})}function Fr(t){let{params:e={},url:n,fetchMore:r=false,hashedParams:i}=t||{};if(e.startKey){if(!(typeof e.startKey=="object"&&Object.keys(e.startKey).length)&&e.startKey!=="start"&&e.startKey!=="end")throw new a(`"${e.startKey}" is invalid startKey key.`,{code:"INVALID_PARAMETER"});e.startKey==="start"&&(r=false,delete e.startKey);}if(!r){if(this.__cached_requests?.[n]?.[i]&&delete this.__cached_requests[n][i],this.__startKeyHistory?.[n]?.[i]){if(Array.isArray(this.__startKeyHistory[n][i])&&this.__startKeyHistory[n][i].length)for(let u of this.__startKeyHistory[n][i]){let c=i+M.hash(u);this.__cached_requests?.[n]&&this.__cached_requests?.[n]?.[c]&&delete this.__cached_requests[n][c];}delete this.__startKeyHistory[n][i];}return {requestKeyWithStartKey:i,requestKey:i}}if(!Array.isArray(this.__startKeyHistory?.[n]?.[i]))return {requestKeyWithStartKey:i,requestKey:i};let s=this.__startKeyHistory[n][i],o=s[s.length-1],l=i;if(o){if(o==="end")return {requestKey:{list:[],startKey:"end",endOfList:true,startKeyHistory:s},requestKeyWithStartKey:l};l+=M.hash(o),e.startKey=JSON.parse(o);}return this.__cached_requests?.[n]?.[l]?{requestKey:this.__cached_requests[n][l],requestKeyWithStartKey:l}:{requestKeyWithStartKey:l,requestKey:i}}function 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=Nt(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 Vr(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(Ut&&t instanceof SubmitEvent&&(t=t.target),Or&&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=(m,p,y)=>new Promise((b,I)=>{l=new XMLHttpRequest,l.open("POST",m),l.onload=()=>{let T=l.responseText;try{T=JSON.parse(T);}catch{}if(l.status>=200&&l.status<300)b(T);else if(l.status===429){let k=l.getResponseHeader("Retry-After"),P=Nt(k);P!==null?setTimeout(()=>{u(m,p,y).then(b,I);},P):I("Too many requests");}else I(T);},l.onerror=()=>I("Network error"),l.onabort=()=>I("Aborted"),l.ontimeout=()=>I("Timeout"),l.upload&&typeof y=="function"&&(l.upload.onprogress=y),l.send(p);});function c(m){let p="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";if(m===0)return p[0];let y="";for(;m>0;)y=p[m%62]+y,m=Math.floor(m/62);return y}let d=[],g=[],h=[];for(let[m,p]of t.entries()){if(!(p instanceof File))continue;let y=Object.assign({key:m+"/"+p.name,sizeKey:c(p.size),contentType:p.type||null},o),{fields:b=null,url:I,cdn:T}=await E.bind(this)("get-signed-url",y,{auth:!!this.__user});h.push(T);let k=new FormData;for(let P in b)k.append(P,b[P]);k.append("file",p);try{await u(I,k,typeof i=="function"?P=>i({status:"upload",progress:Ke(P.loaded,P.total),currentFile:p,completed:d,failed:g,loaded:P.loaded,total:P.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(Ut&&l instanceof SubmitEvent){l.preventDefault();let I=window.location.href;c=l.target;let T=new URL(c.action);d=T.href;let k=d?d.match(/(?<=\{).*?(?=\})/g):"";if(k)for(let P of k){if(!P)continue;let x=c.querySelector(`[name="${P}"]`);if(x)if(x.type==="file")for(let V=0;V<=x.files.length-1;V++)x.files[V]&&(g[P]||(g[P]=[]),g[P].push(new Promise((Z,q)=>{let v=new FileReader;v.onload=function(){Z(v.result);},v.readAsDataURL(x.files[V]),v.onerror=q;})));else d=d.replace(`{${P}}`,x.value);}c.getAttribute("action")===null?u=false:h=T.href===I;}let m=async I=>{if(d)for(let T in g)g[T].length&&(d=d.replace(`{${T}}`,(await Promise.all(g[T])).join(",")));return c&&u&&(window.sessionStorage.setItem(`${this.service}:${M.hash(d)}`,JSON.stringify(I)),h?window.location.replace(d):window.location.href=d),I},p,y=I=>{throw I instanceof a?I.name=r+"()":I=I instanceof Error?I:new a(I,{name:r+"()"}),I},b=async()=>{try{if(p=s.bind(this)(...o),p instanceof Promise){let I=await p;return m(I)}return m(p)}catch(I){throw y(I)}};if(e){let I=`${r}:${this?.__public_identifier||""}:${this?.service||""}:${this?.owner||""}`;return Pe?.[I]||(Pe[I]=b().finally(()=>{delete Pe[I];})),Pe[I]}return b()};}}async function Ot(){await this.__connection;let t=`${this.service}:${M.hash(window.location.href.split("?")[0])}`,e=window.sessionStorage.getItem(t);if(window.sessionStorage.removeItem(t),e!==null){try{e=JSON.parse(e);}catch{}return e}return null}var qr=256,$r=256,jr=256,Mt=256,Br="\u{10FFFF}",Kr=/[\u0000-\u001F\u007F]|\u{10FFFF}/u,Qr={"/":"%2F","!":"%21","*":"%2A","#":"%23"},Hr={"%2F":"/","%21":"!","%2A":"*","%23":"#"};function Wr(t){return t.replace(/%/g,"%25").replace(/[\/!*#]/g,n=>Qr[n]||n)}function K(t){return typeof t!="string"?t:t.replace(/%(2F|21|2A|23)/gi,n=>{let r=n.toUpperCase();return Hr[r]||n}).replace(/%25/gi,"%")}function W(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(Kr.test(t)||t.includes(Br))throw new a(`"${e}" cannot include control characters or unsupported sentinel characters.`,{code:"INVALID_PARAMETER"});if(s&&(t=Wr(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 W(t,e,{allowEmpty:n.allowEmpty===true,maxLength:qr,blockKeyDelimiters:true})}function ve(t,e="tag",n={}){return W(t,e,{allowEmpty:n.allowEmpty===true,maxLength:$r,blockKeyDelimiters:true})}function _e(t,e="index.name",n={}){return W(t,e,{allowEmpty:n.allowEmpty===true,maxLength:jr,blockKeyDelimiters:true,disallowLeadingDollar:true})}function Ft(t,e="index.value"){return W(t,e,{allowEmpty:true,maxLength:Mt})}function Qe(t){return typeof t=="string"&&t.slice(-1)==="."}function He(t,e){return W(t,e,{allowEmpty:true,maxLength:Mt,blockKeyDelimiters:true})}function Vt(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=W(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 xe(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 Ft(t,"index.value");throw new a('"index.value" should be type: <number | boolean | string>.',{code:"INVALID_PARAMETER"})}function qt(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"):Ft(t,"index.range"):t}var De={},zr=10080*60,Jr=1200;function Gr(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 Xr(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=Zr("!"+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 m=>{try{let p=m.split("/").slice(3).join("/"),y=p.split("/");if(y.length<12)return null;let b=y[y.length-1],I=y[10];if(I==="__data__"&&b==="__json__.json")return {isDataFile:!0,rawUrl:m};let T=y[9],k=y[8],P=o(y[6]),x=m,V=P!=="public"&&Gr.call(this,y)?{expires:Jr,browserCache:zr}:null;if(P!=="public")try{x=await se.bind(this)(m,{dataType:"endpoint",_ref:g});}catch(q){console.error("Error getting signed url for private file:",q),x=m;}let Z={access_group:P,filename:b,url:x,path:p,size:B(T),uploaded:B(k),getFile:(q,v)=>{let D={dataType:q||"download",progress:v,_ref:g},U=()=>se.bind(this)(x,Object.assign({},D,{_update:Z}));return V?se.bind(this)(m,Object.assign({},D,V)).catch(()=>U()):U()}};return {pathKey:I,obj:Z}}catch{return null}}));for(let m of h)if(m&&!m.isDataFile){if(d[m.pathKey]){d[m.pathKey].push(m.obj);continue}d[m.pathKey]=[m.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.__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}),m=await Xr(h);r.data=JSON.parse(m);}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 Zr(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 $t(t){let{endpoints:e}=t;if(typeof e=="string"&&(e=[e]),!Array.isArray(e))throw new a('"endpoints" should be type: array | string.',{code:"INVALID_PARAMETER"});let n=await E.bind(this)("del-files",{endpoints:e,storage:"records"},{auth:true,method:"post"}),r=[];for(let 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),m=false;if(!l&&(h[0]==="auth"||h[0]==="publ"))try{f.UserId(h[2]),f.UserId(h[3]),m=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:T=>T}),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],b=e.expires;if(b){if(!l)throw new a("Expires option can only be used on skapi cdn endpoints.",{code:"INVALID_PARAMETER"});if(b<0)throw new a('"config.expires" should be > 0. (seconds)',{code:"INVALID_PARAMETER"});let T={request:g?"get-host":"get",id:g||h[5],key:n.split("?")[0],expires:b};p&&(T.service=p);let k=e.browserCache,P={auth:true};if(k){if(k<0)throw new a('"config.browserCache" should be > 0. (seconds)',{code:"INVALID_PARAMETER"});P.method="get",P.stableGateway=true,T.browser_cache=k;let x=this.session?.idToken?.payload?.sub||this.user?.user_id;x&&(T.uid=x),e.refresh&&(P.revalidate=true);}t=(await E.bind(this)("get-signed-url",T,P)).url;}else if(m){let T=Math.floor(Date.now()/1e3);if(!this.bearerToken&&(!this.session?.idToken?.payload?.exp||this.session.idToken.payload.exp<T)){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:T,expiresIn:this.session?.idToken?.payload?.exp-T,token:this.session?.accessToken?.jwtToken,refreshToken:this.session?.refreshToken?.token});}catch(V){throw this.log("getFile:new token error",V),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"});t+=`${t.includes("?")?"&":"?"}t=${encodeURIComponent(k)}`;let P=h[6]==="**"?"**":parseInt(h[6]),x=this.user?.access_group??-1;if(this.user.user_id!==h[3]&&(P==="**"||x<P)){let V=h[5];if(this.__private_access_key[V]&&typeof this.__private_access_key[V]=="string")t+=`&p=${encodeURIComponent(this.__private_access_key[V])}`;else if(this.owner!==this.host)try{let Z=await this.requestPrivateRecordAccessKey({record_id:V,reference_id:e?._ref});t+=`&p=${encodeURIComponent(Z)}`;}catch{}}}if(e?.dataType==="endpoint")return e._update&&(e._update.url=t),t;if(e?.dataType==="download"){let T=document.createElement("a");return T.href=t,document.body.appendChild(T),T.setAttribute("download",y),T.target="_blank",T.click(),document.body.removeChild(T),null}return new Promise(async(T,k)=>{try{let P=await E.bind(this)(t,null,{method:"get",contentType:null,responseType:e?.dataType==="text"?"text":"blob",fetchOptions:{progress:e?.progress}},{ignoreService:!0});if(e?.dataType==="base64"){let x=new FileReader;x.onloadend=()=>T(x.result),x.readAsDataURL(P);}else T(P);}catch(P){if(e?.browserCache&&!e?.refresh)try{T(await se.bind(this)(n,Object.assign({},e,{refresh:!0})));return}catch(x){k(x);return}k(P);}})}function Ue(t,e){return `${t||this.service}/${e||this.owner}`}function ze(t,e){let n=this.__my_unique_ids[t];return n?n[e]:void 0}function jt(t,e,n){this.__my_unique_ids[t]||(this.__my_unique_ids[t]={}),this.__my_unique_ids[t][e]=n;}function Yr(t,e){this.__my_unique_ids[t]&&delete this.__my_unique_ids[t][e];}async function Bt(t,e=false){t=N(t,{ignoreEmpty:true}).data||{};let n=Ue.bind(this)(t?.service,t?.owner),r="",i=Vt(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=ze.bind(this)(n,r);s&&(e?Yr.bind(this)(n,r):t.record_id=s);}}else {let s=await F.bind(this)(),o=t?.reference,l=false;typeof o=="object"&&Object.keys(o).length&&(o?.record_id||o?.unique_id?(r=o.record_id||o.unique_id,r&&typeof this.__private_access_key?.[r]=="string"&&(t.private_key=this.__private_access_key?.[r]||void 0),t.reference=r):o?.user_id&&(l=o.user_id===this.user?.user_id,t.reference=o.user_id)),typeof t?.table=="string"&&(t.table={name:t.table,access_group:0}),t.index&&t.index.hasOwnProperty("range")&&t.index.hasOwnProperty("condition")&&delete t.index.range;let u=c=>({table:{name: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"):xe(d)},condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq"],range:d=>qt(d,c)},tag:d=>{if(d==null)return d;if(typeof d=="string")return ve(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 Kt(t,e){await this.__connection;let n=await Bt.bind(this)(t),r=n.is_reference_fetch,i=await E.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 Qt(t){let e="",n=[],r=Ue.bind(this)(t?.service,t?.owner),i=f.Params(t||{},{record_id:o=>{let l=typeof o=="string"?ze.bind(this)(r,o):void 0;return l||W(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=>xe(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=ze.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),W(l,"reference.record_id",{allowEmpty:false,onlyAlphanumeric:true}))})}},index:[null,{name:o=>_e(o,"index.name"),value:o=>xe(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=>ve(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 Ht(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,m)=>{if(!h||typeof h!="object"||Array.isArray(h))throw new a(`"params[${m}]" should be type: <object>.`,{code:"INVALID_PARAMETER"});let p=Qt.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 E.bind(this)("post-record",o,l),d=await Promise.all(c.map(h=>de.bind(this)(h,"called from postRecord"))),g=Ue.bind(this)(n,r);for(let h=0;h<c.length;h++){let m=c[h],p=d[h];if(m&&typeof m=="object"&&m.error&&p&&!p.record_id&&(p.error=m.error),typeof m?.reference_private_key=="string")for(let y of e)this.__private_access_key[y]=m.reference_private_key;p?.unique_id&&jt.bind(this)(g,p.unique_id,p.record_id);}return d}async function Wt(t,e,n){if(await this.__connection,!e)throw new a('"config" argument is required.',{code:"INVALID_PARAMETER"});let r=Qt.bind(this)(e),i=r.config,s=r.progress,o=r.is_reference_post,l={auth:!!this.__user,method:"post"},u=[],c=N(t);n&&Array.isArray(n)&&n.length&&(u=u.concat(n)),c.files&&Array.isArray(c.files)&&c.files.length&&(u=u.concat(c.files));let 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 E.bind(this)("post-record",d,l);if(j()&&u.length){let y=new FormData;for(let T of u)y.append(T.name,T.file,T.file.name);let b={record_id:h.rec,progress:s};i.hasOwnProperty("service")&&(b.service=i.service);let{bin_endpoints:I}=await Se.bind(this)(y,b);h.bin?h.bin.push(...I):h.bin=I;}o&&typeof h?.reference_private_key=="string"&&(this.__private_access_key[o]=h.reference_private_key);let m=!!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(m&&(p.data=c.data),p.unique_id){let y=Ue.bind(this)(i?.service,i?.owner);jt.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 E.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 Jt(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 W(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 E.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 Gt(t,e){let n=await E.bind(this)("get-tag",f.Params(t||{},{table:r=>ue(r,"table",{allowEmpty:true}),tag:r=>ve(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 Xt(t,e){let n=await E.bind(this)("get-uniqueid",f.Params(t||{},{unique_id:"string",condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq","!=","ne"]}),Object.assign({auth:!!this.__user},{fetchOptions:e}));if(Array.isArray(n?.list))for(let r in n.list){let i=n.list[r];n.list[r]={unique_id:i.unq,record_id:i.rec};}return n}async function Zt(t,e){await this.__connection;let n=await Bt.bind(this)(t,true),r=n.is_reference_fetch,i=await E.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 Yt(t){return rn.bind(this)({record_id:t.record_id,user_id:t.user_id,execute:"add"})}function en(t){return rn.bind(this)({record_id:t.record_id,user_id:t.user_id||null,execute:"remove"})}async function tn(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 E.bind(this)("grant-private-access",n,{auth:true,fetchOptions:e});return i.list=i.list.map(r),i}function nn(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=E.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 rn(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),E.bind(this)("grant-private-access",n,{auth:true})}var S={},O={},Q={},J={},z={},Ne={},Ce={};function sn(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&&sn(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(Ne,e,n=>S[e].addIceCandidate(n));await Le(Ne,e,n=>S[e].addIceCandidate(n)),await S[e].addIceCandidate(t);}else sn(Ne,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 Ne[s],O[s]&&Object.values(O[s]).forEach(o=>{o.readyState!=="closed"&&o.close();}),delete O[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 J[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 on(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 an(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 on(t.media),this.__mediaStream.getTracks().forEach(o=>{S[n].addTrack(o,this.__mediaStream);})),z[n]=e,O[n]||(O[n]={});for(let o=0;o<t.channels.length;o++){let l=t.channels[o];if(typeof l=="string")switch(l){case "text-chat":l={ordered:true,maxRetransmits:10,protocol:"text-chat"};break;case "file-transfer":l={ordered:false,maxPacketLifeTime:3e3,protocol:"file-transfer"};break;case "video-chat":l={ordered:true,maxRetransmits:10,protocol:"video-chat"};break;case "voice-chat":l={ordered:true,maxRetransmits:10,protocol:"voice-chat"};break;case "gaming":l={ordered:false,maxPacketLifeTime:100,protocol:"gaming"};break;default:l={ordered:true,maxRetransmits:10,protocol:"default"};break}let u=l.protocol||"default";if(Object.keys(O[n]).includes(u))throw new a(`Data channel with the protocol "${u}" already exists.`,{code:"INVALID_REQUEST"});let c=S[n].createDataChannel(u,l);O[n][u]=c;}for(let o in O[n]){let l=O[n][o];un.bind(this)(n,l);}return ln.bind(this)(n,["onnegotiationneeded"]),await Je.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}".`),Je.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:O[n],hangup:()=>H.bind(this)({cid:n}),media:this.__mediaStream});}).bind(this);})}}function cn(t){return async(e,n)=>{e=e||{},e=N(e).data;let r=t.sender_cid,i=await this.__socket;if(!J[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 on(e.media),this.__mediaStream.getTracks().forEach(o=>{S[r].addTrack(o,this.__mediaStream);})),delete J[r],z[r]=n,O[r]||(O[r]={}),S[r].ondatachannel=o=>{this.log("ondatachannel",`received data channel "${o.channel.label}".`);let l=o.channel;O[r][l.label]=l,un.bind(this)(r,l);},ln.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:O[r],hangup:()=>H.bind(this)({cid:r}),media:this.__mediaStream}}}async function Je(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 ei(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 ln(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=>{ei.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:()=>{Je.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 un(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),O[t]&&(delete O[t][e.label],Object.keys(O[t]).length===0&&H.bind(this)({cid:t}));},onbufferedamountlow:o=>{let l={target:e,bufferedAmount:e.bufferedAmount,bufferedAmountLowThreshold:e.bufferedAmountLowThreshold,type:o.type,timeStamp:o.timeStamp};this.log(`${e.label}: bufferedamountlow`,e.bufferedAmount),i(l);},onopen:o=>{this.log("dataChannel",`data channel: "${e.label}" is open and ready to send messages.`);let l={type:o.type,target:e,timeStamp:o.timeStamp,readyState:e.readyState,label:e.label,id:e.id,ordered:e.ordered,maxRetransmits:e.maxRetransmits,protocol:e.protocol};i(l);}};for(let[o,l]of Object.entries(s))r.has(o)||(e[o]=l);}var re,ne=null,be=true,ge=0;async function ti(){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 dn(){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 ti.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 Os=Object.defineProperty;var Ls=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=Ls(t,r),s=e.length-1,o;s>=0;s--)(o=e[s])&&(i=(o(t,r,i))||i);return i&&Os(t,r,i),i};function Sr(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 vt,Ut,Nt=()=>vt!==void 0?vt:vt=Sr("fs"),Dt=()=>Ut!==void 0?Ut:Ut=Sr("path"),pe=typeof globalThis<"u"?globalThis:void 0,ot=pe?.window;function Fs(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(ot)ot.global=ot,ot.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=Fs(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=Nt(),i=Dt();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=Nt(),s=Dt();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=Nt(),i=Dt();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",xt=BigInt(he.length),Ms=2*1024*1024,$s=["aud","cognito:username","event_id","exp","iat","iss","jti","origin_jti","secret_key","token_use"],kr={auth_time:"log",sub:"user_id"},Vs=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l"],xr=["us31","us72","ap51","ap22","ap41","eu71","ap21","us32","us71","af51","ap31","ap43","ap23","ap42","ca01","eu01","eu72","eu51","eu73","eu11","me51","sa31"],vr=typeof TextEncoder<"u"?new TextEncoder:null;function qs(){if(typeof globalThis<"u")return globalThis.Buffer}function K(e){if(vr)return vr.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 Ct(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=qs();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,p;for(let d=0;d<r.length;d+=16)c=n,l=i,u=s,p=o,n=A.ff(n,i,s,o,r[d],7,-680876936),o=A.ff(o,n,i,s,r[d+1],12,-389564586),s=A.ff(s,o,n,i,r[d+2],17,606105819),i=A.ff(i,s,o,n,r[d+3],22,-1044525330),n=A.ff(n,i,s,o,r[d+4],7,-176418897),o=A.ff(o,n,i,s,r[d+5],12,1200080426),s=A.ff(s,o,n,i,r[d+6],17,-1473231341),i=A.ff(i,s,o,n,r[d+7],22,-45705983),n=A.ff(n,i,s,o,r[d+8],7,1770035416),o=A.ff(o,n,i,s,r[d+9],12,-1958414417),s=A.ff(s,o,n,i,r[d+10],17,-42063),i=A.ff(i,s,o,n,r[d+11],22,-1990404162),n=A.ff(n,i,s,o,r[d+12],7,1804603682),o=A.ff(o,n,i,s,r[d+13],12,-40341101),s=A.ff(s,o,n,i,r[d+14],17,-1502002290),i=A.ff(i,s,o,n,r[d+15],22,1236535329),n=A.gg(n,i,s,o,r[d+1],5,-165796510),o=A.gg(o,n,i,s,r[d+6],9,-1069501632),s=A.gg(s,o,n,i,r[d+11],14,643717713),i=A.gg(i,s,o,n,r[d],20,-373897302),n=A.gg(n,i,s,o,r[d+5],5,-701558691),o=A.gg(o,n,i,s,r[d+10],9,38016083),s=A.gg(s,o,n,i,r[d+15],14,-660478335),i=A.gg(i,s,o,n,r[d+4],20,-405537848),n=A.gg(n,i,s,o,r[d+9],5,568446438),o=A.gg(o,n,i,s,r[d+14],9,-1019803690),s=A.gg(s,o,n,i,r[d+3],14,-187363961),i=A.gg(i,s,o,n,r[d+8],20,1163531501),n=A.gg(n,i,s,o,r[d+13],5,-1444681467),o=A.gg(o,n,i,s,r[d+2],9,-51403784),s=A.gg(s,o,n,i,r[d+7],14,1735328473),i=A.gg(i,s,o,n,r[d+12],20,-1926607734),n=A.hh(n,i,s,o,r[d+5],4,-378558),o=A.hh(o,n,i,s,r[d+8],11,-2022574463),s=A.hh(s,o,n,i,r[d+11],16,1839030562),i=A.hh(i,s,o,n,r[d+14],23,-35309556),n=A.hh(n,i,s,o,r[d+1],4,-1530992060),o=A.hh(o,n,i,s,r[d+4],11,1272893353),s=A.hh(s,o,n,i,r[d+7],16,-155497632),i=A.hh(i,s,o,n,r[d+10],23,-1094730640),n=A.hh(n,i,s,o,r[d+13],4,681279174),o=A.hh(o,n,i,s,r[d],11,-358537222),s=A.hh(s,o,n,i,r[d+3],16,-722521979),i=A.hh(i,s,o,n,r[d+6],23,76029189),n=A.hh(n,i,s,o,r[d+9],4,-640364487),o=A.hh(o,n,i,s,r[d+12],11,-421815835),s=A.hh(s,o,n,i,r[d+15],16,530742520),i=A.hh(i,s,o,n,r[d+2],23,-995338651),n=A.ii(n,i,s,o,r[d],6,-198630844),o=A.ii(o,n,i,s,r[d+7],10,1126891415),s=A.ii(s,o,n,i,r[d+14],15,-1416354905),i=A.ii(i,s,o,n,r[d+5],21,-57434055),n=A.ii(n,i,s,o,r[d+12],6,1700485571),o=A.ii(o,n,i,s,r[d+3],10,-1894986606),s=A.ii(s,o,n,i,r[d+10],15,-1051523),i=A.ii(i,s,o,n,r[d+1],21,-2054922799),n=A.ii(n,i,s,o,r[d+8],6,1873313359),o=A.ii(o,n,i,s,r[d+15],10,-30611744),s=A.ii(s,o,n,i,r[d+6],15,-1560198380),i=A.ii(i,s,o,n,r[d+13],21,1309151649),n=A.ii(n,i,s,o,r[d+4],6,-145523070),o=A.ii(o,n,i,s,r[d+11],10,-1120210379),s=A.ii(s,o,n,i,r[d+2],15,718787259),i=A.ii(i,s,o,n,r[d+9],21,-343485551),n=A.ad(n,c),i=A.ad(i,l),s=A.ad(s,u),o=A.ad(o,p);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 Cr(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 Ot(){return typeof window>"u"||!!window?._runningInNodeJS}function J(){return !Ot()&&typeof document<"u"&&typeof document.createElement=="function"}function at(e){let t;try{t=JSON.stringify(e);}catch{throw new a("Invalid data type.",{code:"INVALID_REQUEST"})}if(new Blob([t]).size>Ms)throw new a("Data should not exceed 2MB",{code:"INVALID_REQUEST"})}function Ur(e){return e===""||e==="on"||e==="true"}function Nr(e){return e==="false"}function Dr(e,t,r){t.name&&r(e,t.name,t.value);}var ct=J(),js=typeof SubmitEvent<"u",Bs=typeof HTMLFormElement<"u";function q(e,t,r){let n={},i=[];function s(l,u,p){if(t?.ignoreEmpty&&p==="")return;if(t?.nullIfEmpty&&p===""&&(p=null),typeof r=="function"){let g=r(u,p);g!==void 0&&(p=g);}let d=u.split("[").map(g=>{let m=g.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}),f=l;if(typeof d[0]=="number")throw new a("Form key cannot start with an array index.",{code:"INVALID_REQUEST"});for(let g=0;g<d.length;g++){let m=d[g];g<d.length-1?(f[m]===void 0&&(typeof d[g+1]=="number"?f[m]=[]:f[m]={}),f=f[m]):f[m]===void 0?f[m]=p:Array.isArray(f[m])?f[m].push(p):f[m]=[f[m],p];}}function o(l,u,p){if(p instanceof File)l.push({name:u,file:p});else if(p instanceof FileList&&p&&p.length>0)for(let d=0;d<=p.length-1;d++){let f=p.item(d);f&&l.push({name:u,file:f});}}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===""||Ur(l.value)?s(n,l.name,true):Nr(l.value)?s(n,l.name,false):l.value&&s(n,l.name,l.value):l.type==="checkbox"&&(Ur(l.value)?s(n,l.name,false):Nr(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(ct&&(e instanceof HTMLInputElement||e instanceof HTMLSelectElement||e instanceof HTMLTextAreaElement))return c(e),at(n),{data:n,files:i};if(ct&&e instanceof FormData){for(let l of e.entries()){let u=l[0],p=l[1];if(p instanceof File||p instanceof FileList)o(i,u,p);else if(p instanceof Blob){let d=p;if(d.type==="application/json")try{let f=JSON.parse(d.text());s(n,u,f);}catch{s(n,u,d);}}else s(n,u,p);}return at(n),{data:n,files:i}}if(ct&&js&&e instanceof SubmitEvent&&(e=e.target),ct&&Bs&&e instanceof HTMLFormElement){let l=e.querySelectorAll("input"),u=e.querySelectorAll("select"),p=e.querySelectorAll("textarea");for(let d=0;d<u.length;d++)Dr(n,u[d],s);for(let d=0;d<p.length;d++)Dr(n,p[d],s);for(let d=0;d<l.length;d++)c(l[d]);return at(n),{data:n,files:i}}return at(e),{data:e,files:i}}function $e(e){let t={};for(let r in e){let n=e[r];if(!$s.includes(r))if(kr[r])t[kr[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 Lt(e){if(e=Ys(e),e.split("-").length===7){let t=e.split("-"),r,n;try{r=xr[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 Ft(e,t){let r=xr.indexOf(e.slice(0,4)),n=Vs[r],s=`${e.slice(4,-4)}-${n}${e.slice(-4)}-${t}`;return Js(s)}function Ks(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*xt+BigInt(n);}return t}function Hs(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%xt);r=he[i]+r,n/=xt;}return r.length<t&&(r="0".repeat(t-r.length)+r),r}function Ws(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 Qs(e){let t=0n;for(let r of e)t=(t<<8n)+BigInt(r);return t}function Gs(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 zs(e){let t=Array.from(Ct(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 Js(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,p=Gs(s),d=Hs(Qs(p));return `${u}-${d}`}function Ys(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),p=u.slice(s),d=u.slice(0,s),f=p+l;if(!/^[0-9A-Za-z]+$/.test(f)||!/^[0-9A-Za-z]+$/.test(d))throw new Error("INVALID_PARAMETER: Corrupt compressed token: "+t);let g=Ks(i),m=Ws(g);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 _=zs(h);return `${f}-${d}-${_}`}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 Mt(...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 Zs(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 eo(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 to(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 ro(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 no(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 io(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 so(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 Xs__default.default(o,t,r)}catch(c){throw new a(c.message,{code:"INVALID_PARAMETER"})}}var y={UserId:Zs,PhoneNumber:eo,Birthdate:to,Password:ro,Email:no,Url:io,Params:so};var Y="skapi.enc.v1",Fr=6e5,qe=12,lt=null,ke=null;function Mr(){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 $r(){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 Mr()}function re(){if(lt)return lt;let e=$r();if(!e.subtle)throw Mr();return lt=e.subtle,lt}function Vt(){try{return re(),!0}catch{return false}}function X(e){let t=$r(),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=Ct(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 ut(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 Vr(){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 dt={name:"ECDH",namedCurve:"P-256"};async function qr(){let e=re(),t=await e.generateKey(dt,true,["deriveBits"]),r=new Uint8Array(await e.exportKey("raw",t.publicKey)),n=new Uint8Array(await e.exportKey("pkcs8",t.privateKey)),i=await qt(n);return {pubRaw:r,pkcs8:n,priv:i}}async function qt(e){return re().importKey("pkcs8",e,dt,false,["deriveBits"])}async function jr(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,dt,false,[])}async function jt(e){return C(await ut(e))}async function Br(e,t,r,n){let i=re(),s=await jr(e),o=await i.generateKey(dt,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:p,ct:d}=await ne(u,t,n);return {epk:new Uint8Array(await i.exportKey("raw",o.publicKey)),iv:p,ct:d}}async function Kr(e,t,r,n,i,s){let o=re(),c=await jr(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 p=await ie(u);return x(u),se(p,r,n,s)}function x(e){e&&e.length&&e.fill(0);}function oo(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 Bt(e){return K(JSON.stringify(e))}function He(e,t,r){return Mt(e,new Uint8Array([0]),K(t),new Uint8Array([0]),K(r))}var Ae="0123456789ABCDEFGHJKMNPQRSTVWXYZ",je=16,Or=26,Lr=28;function Hr(e){let t=2166136261;for(let r=0;r<e.length;r++)t^=e[r],t=t*16777619>>>0;return t&1023}function Wr(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=Hr(e);return t+=Ae[i>>5&31]+Ae[i&31],(t.match(/.{1,4}/g)||[]).join("-")}function Qr(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!==Lr)throw new a(`That does not look like a recovery code: expected ${Lr} characters, got ${t.length}.`,{code:"ENCRYPTION_BAD_RECOVERY_CODE"});let r=t.slice(0,Or),n=t.slice(Or),i=0,s=0,o=[];for(let u=0;u<r.length;u++){let p=Ae.indexOf(r[u]);if(p<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|p,s+=5,s>=8&&(s-=8,o.push(i>>s&255));}let c=new Uint8Array(o.slice(0,je)),l=Hr(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 Kt(e,t,r){let n=await Ke(e,t,r,32),i=await ie(n);return x(n),i}var $t=[83,75,69,78,67,70],Gr=2,Be=56,zr=16,ao=4*1024*1024;function Ht(e){if(!e||e.length<Be)return false;for(let t=0;t<$t.length;t++)if(e[t]!==$t[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 co(e,t,r){let n=Math.floor(r/4294967296);Re(e,t,n),Re(e,t+4,r>>>0);}function lo(e,t){return ve(e,t)*4294967296+ve(e,t+4)}async function Jr(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 Yr(e){return (await ut(Mt(K(`${Y}|dekid`),e))).subarray(0,8)}function Xr(e,t,r){return Bt([`${Y}|binchunk`,C(e),t,r])}function uo(e,t,r,n,i,s){let o=new Uint8Array(Be+s.length);return o.set($t,0),o[6]=Gr,o[7]=s.length?1:0,Re(o,8,e),Re(o,12,t),o.set(r,16),co(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 Zr(e,t,r,n,i=ao){let s=X(zr),o=await Jr(e,s,r.service,r.owner,r.recordOwner,r.recordId),c=await Yr(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),p=uo(i,u,s,t.length,c,l),d=await ut(p),f=[],g=p.length;for(let _=0;_<u;_++){let w=t.subarray(_*i,Math.min((_+1)*i,t.length)),b=await ne(o,w,Xr(d,_,u));f.push(b),g+=4+b.iv.length+b.ct.length;}let m=new Uint8Array(g);m.set(p,0);let h=p.length;for(let _ of f)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 fo(e){if(!Ht(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+zr),plainLen:lo(e,32),dekId:e.subarray(40,48),meta:n,headerLen:r}}async function en(e,t,r){let n=fo(t);if(n.version!==Gr)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 Yr(e);if(!oo(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 Jr(e,n.fileId,r.service,r.owner,r.recordOwner,r.recordId),o=await ut(t.subarray(0,n.headerLen)),c=[],l=n.headerLen,u=0;for(let f=0;f<n.count;f++){if(l+4>t.length)throw new a("Encrypted file is truncated.",{code:"INVALID_REQUEST"});let g=ve(t,l);if(l+=4,g<qe+16||l+g>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+g),Xr(o,f,n.count));l+=g,c.push(m),u+=m.length;}let p=new Uint8Array(u),d=0;for(let f of c)p.set(f,d),d+=f.length;return {bytes:p,meta:n.meta}}var go="skapi__keyring",We="__skapi_enc__",rn=1,po="skapi-enc",be="keys",Qt=new WeakMap;function nn(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:Fr;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:go}}function N(){return Qt.get(this)||null}function sn(e){if(!e){Qt.delete(this);return}Qt.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 Gt(){let e=N.call(this);if(e){e.user_id&&sr.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 on(){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 an(e,t){return typeof t=="string"&&t===e.cfg.table}function Ne(){return `${this.service}/${this.owner}`}function zt(e,t,r,n){let[i,s]=e.split("/");return Bt([Y,i,s,t,r,n])}function cn(e,t,r,n,i){let[s,o]=e.split("/");return K(`${Y}|dekwrap|${s}|${o}|${t}|${r}|${n}|${i}`)}function Jt(e){return e.anch==="uid"?e.uid:e.anch==="rid"?e.rid:""}function gt(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 ln="__skapi_no_access__";function Z(e,t,r){if(e.withheld!=="sentinel")return null;let n={[ln]:true,reason:t};return r&&(n.recipients=r),Object.freeze(n)}function Yt(e){return !!e&&typeof e=="object"&&e[ln]===true}var ho=256*1024,ze="__skenc_ct__",un="payload.bin",yo=`/${ze}/${un}`;function Xt(e,t){return e===ze&&t===un}async function mo(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:tn(n.access_group),table:i,record:null};if(!r)return {group:n?.access_group!==void 0?tn(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 bo(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 tn(e){return e==="private"||e==="**"?"private":e==="public"?0:e==="authorized"?1:e==="admin"?99:typeof e=="number"?e:0}function Wt(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 Zt(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 mo.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(Wt.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(st=>(G.bin[st]||[]).some(Tr=>Tr&&Tr.encrypted));if(!Me&&s){let st=n.dek.get(s);st&&(x(st.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&&Wt.call(this,ee,i,"making it non-private");let Pr=!!ee&&!!ee.bin&&Object.keys(ee.bin).some(G=>(ee.bin[G]||[]).some(Me=>Me&&Me.encrypted));if(Pr&&(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:Pr?"decrypt":void 0}}if(an(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(Yt.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 p=this.user?.user_id;if(!p)throw new a("User login is required to write an encrypted record.",{code:"INVALID_REQUEST"});let d=Ne.call(this),f=false;if(i&&n.roll.has(i)){f=true,n.roll.delete(i);let j=n.dek.get(i);n.dek.delete(i),j&&x(j.bytes);}let g=u;i&&!g&&!n.dek.has(i)&&(g=await me.call(this,i).catch(()=>null)),g&&Wt.call(this,g,i,"making it private");let m=!!g&&!g.encrypted&&!!g.bin&&Object.keys(g.bin).some(j=>(g.bin[j]||[]).some(ee=>ee&&!ee.encrypted)),h=null;if(i&&!f&&(h=n.dek.get(i)||null,!h)){let j=g||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!==p)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 Vr();_=j.bytes,w=j.key,b={};}let E=o?"uid":s?"rid":"new",k=E==="uid"?o:E==="rid"?s:"",S=zt(d,p,E,k),O=He(S,p,"mk"),L=await ne(n.mk,_,O);b[p]={t:"mk",iv:C(L.iv),ct:C(L.ct)},h&&(h.anch!==E||Jt(h)!==k)&&(b=await _o.call(this,n,_,b,d,p,E,k,S));let V=K(JSON.stringify(e===void 0?null:e)),v=await ne(w,V,S);x(V);let D={[We]:rn,enc:"A256GCM",kw:"ECDH-ES+A256GCM",anch:E,uid:o,rid:s,own:p,iv:C(v.iv),ct:C(v.ct),k:b},F,M,Te=D.ct;s&&Te.length>ho&&(F=$(Te),D.ct="",D.ct_ref=yo,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:p,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:p,access_group:"private"},files:m?"encrypt":void 0}}function dn(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 _o(e,t,r,n,i,s,o,c){let l=Object.keys(r).filter(d=>d!==i);if(!l.length)return r;let u=await or.call(this,l),p={[i]:r[i]};for(let d of l){let f=u[d];f&&(p[d]=await fn.call(this,t,f,n,o,i,d,c));}return p}async function fn(e,t,r,n,i,s,o){let c=cn(r,n,i,s,t.fpr),l=He(o,s,t.fpr),u=await Br(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 gn(e,t){if(!gt(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(an(r,t.table_name))return {value:e};if(e[We]!==rn)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=Jt(e),c=zt(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 Kr(r.ikPriv,$(i.epk),$(i.iv),$(i.ct),cn(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 g=await bo.call(this,t.ctUrl);u=new Uint8Array(await g.arrayBuffer());}else u=$(e.ct);}catch{return x(l),{value:Z(r.cfg,"DATA_UNAVAILABLE"),flag:{status:"failed",reason:"DATA_UNAVAILABLE"}}}let p,d;try{d=await ie(l),p=await se(d,$(e.iv),u,c);}catch{return x(l),{value:Z(r.cfg,"CORRUPT"),flag:{status:"failed",reason:"CORRUPT"}}}let f;try{f=JSON.parse(Ve(p));}catch{return x(p),x(l),{value:Z(r.cfg,"CORRUPT"),flag:{status:"failed",reason:"CORRUPT"}}}if(x(p),t.record_id){let g=r.dek.get(t.record_id);g?(g.bytes=l,g.key=d,g.recipients=e.k,g.anch=e.anch,g.uid=e.uid,g.own=e.own,g.access_group="private",g.ctRef=e.ct_ref||""):r.dek.set(t.record_id,{bytes:l,key:d,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:f,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 pn(e,t){let[r,n]=e.split("/");return K(`${Y}|recovery|${r}|${n}|${t}`)}function hn(e,t,r){let[n,i]=e.split("/");return K(`${Y}|rk|${n}|${i}|${t}|HKDF-SHA256|${r}`)}function yn(e,t){let[r,n]=e.split("/");return K(`${Y}|self|${r}|${n}|${t}`)}function mn(e,t){let[r,n]=e.split("/");return K(`${Y}|ik|${r}|${n}|${t}`)}async function pt(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 er(e,t,r){let n=X(je),i=Wr(n),s=X(16),o=C(s),c=await Kt(n,s,pn(e,t)),l=await ne(c,r,hn(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 wo(e,t,r,n){let i=Qr(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 Kt(i,$(o.kdf.s),pn(e,t)),l=await se(c,$(o.iv),$(o.ct),hn(e,t,o.kdf.s));return x(i),l}catch{}return x(i),null}async function Eo(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 Ao(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),p=await qr(),d=await ne(u,p.pkcs8,mn(n,r));x(p.pkcs8);let f=null;e.cfg.recovery==="code"&&(f=await er(n,r,c));let g=await ne(u,c,yn(n,r));x(c);let m=await jt(p.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}];f&&_.push(f.wrap);let w={v:1,alg:"ECDH-P-256",user_id:r,wraps:_,ik:{iv:C(d.iv),ct:C(d.ct)},self:{iv:C(g.iv),ct:C(g.ct)},pub:C(p.pubRaw),fpr:m,pins:null,created:h,updated:h};await this.postRecord({v:1,alg:"ECDH-P-256",user_id:r,pub:C(p.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 pt.call(this,e);if(E&&E.record_id!==b.record_id){await bn.call(this,e,E,t);return}e.mk=u,e.ikPriv=p.priv,e.pubRaw=p.pubRaw,e.fpr=m,e.keyringRecordId=b.record_id,f&&(e.pendingRecoveryCode=f.code),e.user_id=r,e.pins={},e.status="unlocked",e.reason="";}async function bn(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(p=>p.p==="password");if(!c.length)throw new a("The keyring has no password wrap.",{code:"ENCRYPTION_KEYRING_CORRUPT"});c.sort((p,d)=>(d.created||0)-(p.created||0));let l=null;for(let p of c)try{let d=$(p.kdf.s),f=await Ue(r,d,p.kdf.it,Qe(i,n));l=await se(f,$(p.iv),$(p.ct),Ge(i,n,p.kdf.it,p.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 tr.call(this,e,t,u);}async function tr(e,t,r){let n=this.user.user_id,i=t.data,s=await se(r,$(i.ik.iv),$(i.ik.ct),mn(e.scope,n)),o=await qt(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 ht(e){let t=N.call(this);if(!t||!this.user?.user_id)return;if(!Vt()){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 pt.call(this,t);r?await bn.call(this,t,r,e):await Ao.call(this,t,e),t.cfg.persistDevice&&await Rn.call(this,t).catch(()=>{});}async function _n(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 ht.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 wn(e){let t=N.call(this);return t?(e?.forgetDevice&&await sr.call(this,t).catch(()=>{}),Gt.call(this),this.__cached_requests={},{status:t.status}):{status:"disabled"}}async function En(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),p=C(u),d=await Ue(t,u,r.cfg.iterations,Qe(r.scope,s)),f=await ne(d,l,Ge(r.scope,s,r.cfg.iterations,p));x(l);let g=Date.now(),m=(o.wraps||[]).concat([{id:C(X(6)),p:"password",kdf:{a:"PBKDF2-SHA256",it:r.cfg.iterations,s:p},iv:C(f.iv),ct:C(f.ct),created:g}]);await this.postRecord(Object.assign({},o,{wraps:m,updated:g}),{record_id:r.keyringRecordId});}async function An(){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 rr(){return typeof indexedDB<"u"&&!!indexedDB}function nr(){return new Promise((e,t)=>{let r=indexedDB.open(po,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 ir(e){return `${e.scope}#${this.user?.user_id}`}async function Rn(e){if(!rr()||!e.mk)return;let t=await nr();await new Promise((r,n)=>{let i=t.transaction(be,"readwrite");i.objectStore(be).put({mk:e.mk,keyringRecordId:e.keyringRecordId,saved:Date.now()},ir.call(this,e)),i.oncomplete=()=>r(),i.onerror=()=>n(i.error);}),t.close();}async function Ro(e){if(!rr())return null;let t=await nr(),r=await new Promise((n,i)=>{let o=t.transaction(be,"readonly").objectStore(be).get(ir.call(this,e));o.onsuccess=()=>n(o.result||null),o.onerror=()=>i(o.error);});return t.close(),r&&r.mk?r:null}async function sr(e){if(!rr())return;let t=await nr();await new Promise((r,n)=>{let i=t.transaction(be,"readwrite");i.objectStore(be).delete(ir.call(this,e)),i.oncomplete=()=>r(),i.onerror=()=>n(i.error);}),t.close();}function In(){let e=N.call(this);!e||e.ready||(e.unlocking=true,e.ready=Io.bind(this)().catch(()=>false).then(()=>{e.unlocking=false;}));}async function Io(){let e=N.call(this);if(!e||!this.user?.user_id||!e.cfg.persistDevice||!Vt())return false;e.scope=Ne.call(this);try{let t=await Ro.call(this,e);if(!t)return !1;let r=await pt.call(this,e);return r?(await tr.call(this,e,r,t.mk),!0):(await sr.call(this,e).catch(()=>{}),!1)}catch{return e.status="locked",e.reason="NO_SESSION_KEY",false}}async function or(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(g=>g.user_id===s&&g.data?.pub);if(!u.length)return null;u.sort((g,m)=>m.uploaded-g.uploaded);let p=$(u[0].data.pub),d=await jt(p),f=t.pins[s];if(f&&f!==d)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(!f){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]=d,i=true;}return {pubRaw:p,fpr:d}})().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 kn.call(this,t).catch(()=>{}),r}async function Pn(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 ar(e,t){let r=N.call(this);if(!r)return;let n=await Pn.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 or.call(this,t),l=t.filter(f=>!c[f]);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=Jt(i),p=zt(s,i.own,i.anch,u),d=Object.assign({},i.recipients);for(let f of t)f!==o&&(d[f]=await fn.call(this,i.bytes,c[f],s,u,i.own,f,p));await To.call(this,r,e,i,d);}async function Tn(e,t){let r=N.call(this);if(!r)return;let n=await Pn.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"});Po(c,e);let l={};if(o.length){l=await or.call(this,o);let u=o.filter(p=>!l[p]);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 ar.call(this,c.record_id||e,o);}function Po(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 To(e,t,r,n){let i=await So.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 So(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&>(r.data)?r.data:null}async function Sn(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 kn.call(this,t);}async function kn(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 vn(){let e=N.call(this);if(!e||!e.pendingRecoveryCode)return null;let t=e.pendingRecoveryCode;return e.pendingRecoveryCode="",t}async function Un(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 pt.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 wo(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 tr.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 Eo(t,t.scope,r,e.password,i)),o=true),t.cfg.recovery==="code"){let u=await er(t.scope,r,i);l=l.filter(p=>p.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 Rn.call(this,t).catch(()=>{}),{status:t.status,repaired:o,recoveryCode:c}}async function Nn(){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),yn(e.scope,e.user_id)),s=await er(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 ft="__skenc__",Dn="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";function ko(e){if(e===0)return "0";let t="";for(;e>0;)t=Dn[e%62]+t,e=Math.floor(e/62);return t}function vo(e){let t=0;for(let r of e){let n=Dn.indexOf(r);if(n<0)return NaN;t=t*62+n;}return t}function yt(e){if(typeof e!="string")return null;let t=e.lastIndexOf(ft);if(t<0)return null;let r=vo(e.slice(t+ft.length));return Number.isFinite(r)?{key:e.slice(0,t),plainSize:r}:null}function cr(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=yt(t[10]);return r?{recordId:t[5],recordOwner:t[3],filename:t[t.length-1],plainSize:r.plainSize}:null}catch{return null}}function xn(e,t){return {service:this.service,owner:this.owner,recordOwner:t,recordId:e}}async function Cn(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(yt(t))throw new a(`"${ft}" 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 Zr(i.bytes,s,xn.call(this,e,i.own),o);return x(s),{key:`${t}${ft}${ko(r.size)}`,file:new File([c],r.name,{type:"application/octet-stream"}),encrypted:true}}async function On(e,t){let r=N.call(this),n=cr(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(!Ht(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 en(i.bytes,s,xn.call(this,n.recordId,n.recordOwner)),c=o.meta&&o.meta.t||"application/octet-stream";return new Blob([o.bytes],{type:c})}function Uo(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 No(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 lr(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"?Uo(i):No(i);if(!s.length)return [];let o=[],c=new FormData,l=false;for(let u of s){let p=i.bin[u.formKey].find(f=>f.url===u.url);if(!p||typeof p.getFile!="function")continue;let d=await p.getFile("blob");d&&(c.append(u.formKey,new File([d],u.filename,{type:d.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 ur(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 Fn(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 ur(r)}async function Mn(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(ur),r}async function $n(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(ur),r}async function Vn(e){return T.bind(this)("register-ticket",Object.assign({exec:"reg"},e),{auth:true})}async function qn(e){return T.bind(this)("register-ticket",Object.assign({exec:"unreg"},e),{auth:true})}var Fo=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+Fo){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 Ln(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 p=d=>{let f=d.getIdToken().payload;if(this.log("getSession:respond:sessionAttribute",f),f["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=d,e(),u||this._runOnUserUpdateListeners(this.user),this.session};B.getSession((d,f)=>{if(this.log("getSession:getSessionCallback",{err:d,session:f}),!f){ye.bind(this)(),c(new a("Current session does not exist.",{code:"INVALID_REQUEST"}));return}if(d){Ln.bind(this)(f,B).then(w=>o(p(w))).catch(c);return}let g=Math.floor(Date.now()/1e3),m=f.getIdToken(),h=m.getExpiration(),_=h<g;if(this.log("getSession:currentTime",g),this.log("getSession:idTokenExp",h),this.log("getSession:isExpired",_),this.log("getSession:existingBearerToken",this.bearerToken),this.bearerToken=m.getJwtToken(),_||l||!f.isValid())Ln.bind(this)(f,B).then(w=>o(p(w))).catch(c);else try{o(p(f));}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,p)=>{this.__request_signup_confirmation=null,this.__disabledAccount=null;let d=r(s,c),f=d.cognitoUsername,g=new amazonCognitoIdentityJs.AuthenticationDetails({Username:f,Password:o});d.cognitoUser.authenticateUser(g,{newPasswordRequired:(m,h)=>{this.__disabledAccount=null,this.__request_signup_confirmation=f,m["custom:signup_ticket"]==="PASS"||m["custom:signup_ticket"]==="MEMBER"||m["custom:signup_ticket"]==="OIDPASS"?d.cognitoUser.completeNewPasswordChallenge(o,{},{onSuccess:_=>{B=d.cognitoUser,t().then(async w=>{if(N.call(this))try{await ht.bind(this)(o);}catch(b){this.log("encryption:ensureKeyring:failed",b);}u(this.user);});},onFailure:_=>{p(new a(_.message||"Failed to authenticate user.",{code:_.code}));}}):p(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 ht.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}=bt(m),b=typeof m?.message=="string"?m.message:"";if(w==="NotAuthorizedException"?b.includes("User is disabled.")?(this.__disabledAccount=f,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=f,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=f),h.length){let E=h[1],k=h[0];p(new a(k,{code:E,cause:m}));}else p(_);}});}),createCognitoUser:r,signup:(s,o,c)=>new Promise((l,u)=>{this.userPool.signUp(s,o,c,null,(p,d)=>{if(p){let{parsed:f,code:g}=bt(p),m=[];g==="UsernameExistsException"?m=["The account already exists.","EXISTS"]:g==="InvalidPasswordException"?m=["Invalid password. Password must be at least 6 characters.","INVALID_PARAMETER"]:g==="InvalidParameterException"?m=[f.message||"Invalid parameter.","INVALID_PARAMETER"]:g==="TooManyRequestsException"||g==="LimitExceededException"?m=["Too many attempts. Please try again later.","REQUEST_EXCEED"]:g==="CodeDeliveryFailureException"?m=["Failed to deliver verification code.","CODE_DELIVERY_FAILURE"]:g==="UserLambdaValidationException"&&(m=[f.message||"Signup validation failed.","INVALID_REQUEST"]),m.length?u(new a(m[0],{code:m[1],cause:p})):u(f);return}l(d);});})}}function bt(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 jn(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 Bn(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 Mo(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 $o(e){let t=e.split(".");if(t.length!==3)throw new Error("Invalid JWT format");let n=t[1].replace(/-/g,"+").replace(/_/g,"/"),i=Mo(n);return JSON.parse(i)}async function Kn(e){await this.__authConnection,this.log("loginWithToken:params",e),e=y.Params(e,{idToken:"string",accessToken:"string",refreshToken:"string"},["idToken"]);let t=$o(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()),Gt.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 Hn(){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 Wn(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 dr(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 Qn(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 p=u;if(typeof u=="string")p=y.Url(u);else if(typeof u=="boolean")p=u;else throw new a('"option.signup_confirmation" should be type: <string | boolean>.',{code:"INVALID_PARAMETER"});if(p&&!n.email)throw new a('"email" is required for signup confirmation.',{code:"INVALID_PARAMETER"});return p},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 p=["email_public","address_public","gender_public","birthdate_public","phone_number_public","misc","service","owner"];n[u]!==""&&(u==="username"||u==="password"||u==="access_group"||(p.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?dr.bind(this)({email:n.username||n.email,password:n.password}):"SUCCESS: The account has been created."}async function Gn(){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 zn(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 Jn(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(p=>{c(p);}):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 Yn(e,t){return Jn.bind(this)("phone_number",e,t)}function Xn(e,t){return Jn.bind(this)("email",e,t)}async function Zn(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:p}=bt(l),d={UserNotFoundException:"NOT_EXISTS",InvalidParameterException:"INVALID_PARAMETER",NotAuthorizedException:"INVALID_REQUEST",LimitExceededException:"REQUEST_EXCEED",TooManyRequestsException:"REQUEST_EXCEED",CodeDeliveryFailureException:"CODE_DELIVERY_FAILURE"}[p]||u.code||p||"ERROR";o(new a(u.message,{code:d,cause:l}));}},n);})}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,{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 En.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}=bt(i);n(o);}return}N.call(this)&&An.bind(this)().catch(o=>this.log("encryption:prune:failed",o)),r("SUCCESS: Password has been changed.");});})}async function ti(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 ri(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 ni(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 ii(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,oi=typeof SubmitEvent<"u",qo=typeof HTMLFormElement<"u",Xe=J(),fr=0;function ai(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 gr(e,t){return t>0?e/t*100:0}var si=e=>{let{auth:t,type:r,endpoints:n,stable:i}=e,s=n[0],o=n[1];if(fr++,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[fr%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[fr%c.length]}throw new a("Invalid gateway type.",{code:"INVALID_REQUEST"})};async function jo(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 si.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 si.bind(this)({auth:t,type:"record",endpoints:n,stable:r})+e+c;default:return y.Url(e)+c}}var Ye={};function ci(){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,p=null,d=await jo.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 f=r?.tokenHeaders?.idToken===true;(i||f)&&(p=await xe.bind(this)());let g={},{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;g[v]=r.fetchOptions[v];}g=y.Params(g,{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(_,g),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}=Bo.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(p&&(S.Authorization=p),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||p||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=d.includes("?")?d.endsWith("?")||d.endsWith("&")?"":"&":"?";d+=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 Hi__default.default(v);}return this.log("request-opt",V),new Promise((v,D)=>{Ce.add([async()=>{let F=li.bind(this)(d,V,h);Ye[k]=F;try{let M=Ho.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 Bo(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 Ko(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 li(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=ai(c);l!==null?setTimeout(()=>{li(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 p=u.split(":"),d=p.splice(0,1)[0].trim(),f=p.join(":").trim();i(new a(f||u,{code:l.includes(d)?d:"ERROR"}));}else if(typeof u=="object"&&u?.message){let p=u?.code||(c?c.toString():null)||"ERROR",d=u.message,f=u?.cause;typeof d=="string"&&(d=d.trim()),i(new a(d,{cause:f,code:p}));}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:gr(c.loaded,c.total),loaded:c.loaded,total:c.total,abort:()=>s.abort()});},s.upload&&(s.upload.onprogress=c=>{r({status:"upload",progress:gr(c.loaded,c.total),loaded:c.loaded,total:c.total,abort:()=>s.abort()});})),s.send(t.body);})}function Ho(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(oi&&e instanceof SubmitEvent&&(e=e.target),qo&&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=(g,m,h)=>new Promise((_,w)=>{c=new XMLHttpRequest,c.open("POST",g),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=ai(E);k!==null?setTimeout(()=>{l(g,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(g){let m="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";if(g===0)return m[0];let h="";for(;g>0;)h=m[g%62]+h,g=Math.floor(g/62);return h}let p=[],d=[],f=[];for(let[g,m]of e.entries()){if(!(m instanceof File))continue;let h=await Cn.bind(this)(r,g,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});f.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:gr(L.loaded,L.total),currentFile:m,completed:p,failed:d,loaded:L.loaded,total:L.total,abort:()=>c.abort()}):null),p.push(m);}catch{d.push(m);}}return {completed:p,failed:d,bin_endpoints:f}}var _t={};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,p="",d={},f=false;if(oi&&c instanceof SubmitEvent){c.preventDefault();let w=window.location.href;u=c.target;let b=new URL(u.action);p=b.href;let E=p?p.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]&&(d[k]||(d[k]=[]),d[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 p=p.replace(`{${k}}`,S.value);}u.getAttribute("action")===null?l=false:f=b.href===w;}let g=async w=>{if(p)for(let b in d)d[b].length&&(p=p.replace(`{${b}}`,(await Promise.all(d[b])).join(",")));if(u&&l){let b=N.call(this)?Ko(w):w;window.sessionStorage.setItem(`${this.service}:${W.hash(p)}`,JSON.stringify(b)),f?window.location.replace(p):window.location.href=p;}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 g(w)}return g(m)}catch(w){throw h(w)}};if(t){let w=`${n}:${this?.__public_identifier||""}:${this?.service||""}:${this?.owner||""}`;return _t?.[w]||(_t[w]=_().finally(()=>{delete _t[w];})),_t[w]}return _()};}}async function ui(){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 Wo=256,Qo=256,Go=256,di=256,zo="\u{10FFFF}",Jo=/[\u0000-\u001F\u007F]|\u{10FFFF}/u,Yo={"/":"%2F","!":"%21","*":"%2A","#":"%23"},Xo={"%2F":"/","%21":"!","%2A":"*","%23":"#"};function Zo(e){return e.replace(/%/g,"%25").replace(/[\/!*#]/g,r=>Yo[r]||r)}function oe(e){return typeof e!="string"?e:e.replace(/%(2F|21|2A|23)/gi,r=>{let n=r.toUpperCase();return Xo[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(Jo.test(e)||e.includes(zo))throw new a(`"${t}" cannot include control characters or unsupported sentinel characters.`,{code:"INVALID_PARAMETER"});if(s&&(e=Zo(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:Wo,blockKeyDelimiters:true})}function Et(e,t="tag",r={}){return le(e,t,{allowEmpty:r.allowEmpty===true,maxLength:Qo,blockKeyDelimiters:true})}function et(e,t="index.name",r={}){return le(e,t,{allowEmpty:r.allowEmpty===true,maxLength:Go,blockKeyDelimiters:true,disallowLeadingDollar:true})}function fi(e,t="index.value"){return le(e,t,{allowEmpty:true,maxLength:di})}function pr(e){return typeof e=="string"&&e.slice(-1)==="."}function hr(e,t){return le(e,t,{allowEmpty:true,maxLength:di,blockKeyDelimiters:true})}function gi(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 yr(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 wt=4503599627370496;function At(e){if(typeof e=="number"){if(e>wt||e<-wt)throw new a(`Number value should be within range -${wt} ~ +${wt}`,{code:"INVALID_PARAMETER"});return e}if(typeof e=="boolean")return e;if(typeof e=="string")return fi(e,"index.value");throw new a('"index.value" should be type: <number | boolean | string>.',{code:"INVALID_PARAMETER"})}function pi(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"?pr(t.index.name)?hr(e,"index.range"):fi(e,"index.range"):e}var Rt={},ea=10080*60,ta=3600,hi=2;function ra(e,t){if(!t)return String(hi);let r=Math.max(60,e-300)*1e3;return "g"+hi+"w"+Math.floor(Date.now()/r)}function na(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 ia(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 yi(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(f){let g=f=="**"?"private":parseInt(f);return g=g==0?"public":g==1?"authorized":g==99?"admin":g,g}let p={ip:f=>{let g=f.split("#"),m=g[0];g.length>1&&(s.unique_id=g.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:f=>{if(!f)return;s.record_id=f;let g=f.substring(0,f.length-9),m=te(g);s.uploaded=m;},usr:f=>{s.user_id=f;},tbl:f=>{if(f&&!s.table.name){let g=f.split("/");s.table.name=oe(g[0]),s.table.access_group=u(g[2]),g?.[3]&&(s.table.subscription.is_subscription_record=true);}},usr_tbl:f=>{let g=f.split("/");s.user_id||(s.user_id=g[0]),s.table.name||(s.table.name=oe(g[1]),s.table.access_group=u(g[3]),g?.[4]&&(s.table.subscription.is_subscription_record=true));},idx:f=>{if(!f)return;let g=f.split("!"),m=oe(g.splice(0,1)[0]),h=sa("!"+g.join("!"));s.index={name:m,value:h};},ref:f=>{f&&(s.reference=f.split("/")[0]);},tags:f=>{s.tags=Array.isArray(f)?f.map(g=>oe(g)):f;},upd:f=>{s.updated=f;},acpt_mrf:f=>{s.source.prevent_multiple_referencing=!f;},ref_limt:f=>{s.source.referencing_limit=f;},rfd:f=>{s.referenced_count=f;},bin:async f=>{let g={},m=s?.reference||null;if(Array.isArray(f)){let h=await Promise.all(f.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(Xt(k,E))return {isDataFile:!0,rawUrl:_};let S=yt(k),O=b[9],L=b[8],V=u(b[6]),v=_,D=V!=="public"&&na.call(this,b)?{expires:ta,browserCache:ea}: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(g[_.pathKey]){g[_.pathKey].push(_.obj);continue}g[_.pathKey]=[_.obj];}}s.bin=g;},prv_acs:f=>{for(let g in f)["notify_subscribers","upload_to_feed","feed_referencing_records","notify_referencing_records"].includes(g)?s.table.subscription[g]=f[g]:g==="referencing_index_restrictions"&&Array.isArray(f[g])?s.source[g]=f[g].map(h=>h&&typeof h=="object"&&typeof h.name=="string"?Object.assign({},h,{name:oe(h.name)}):h):s.source[g]=f[g];},data:async f=>{let g={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)&&!gt(w))return w;let b=await gn.bind(this)(w,g);return b.flag&&(s.encrypted=b.flag),b.value},_=ia(f);if(_!==f){s.data=await h(_);return}if(f&&typeof f=="object"&&!Array.isArray(f)&&typeof f.__data__=="string"&&Object.keys(f).length===1&&f.__data__.endsWith("/__data__/__json__.json")){let w=f.__data__,b=c.find(E=>E.endsWith(w))||null;if(!b&&!r&&m(),b){if(r){s.data=f;return}try{let E=await Ie.bind(this)(b,{dataType:"blob",_ref:s.reference||null}),k=await yi(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(f);}};if(e.record_id)return e;if(Array.isArray(e.bin))for(let f of e.bin)try{if(typeof f!="string")continue;let g=f.split("/").slice(3);g.length>=12&&g[10]==="__data__"&&g[g.length-1]==="__json__.json"&&c.push(f),g.length>=12&&Xt(g[10],g[g.length-1])&&(l=f);}catch{}let d=[];for(let f in p)if(e.hasOwnProperty(f)){let g=p[f](e[f]);g instanceof Promise&&d.push(g);}return o&&(s.user_id="anonymous:"+s.user_id),await Promise.all(d),s}function sa(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 mi(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("/"),p=l[2].split("."),d=null;p.length===3&&p[1]==="skapi"&&(d=p[0],c=true);let f=l.slice(3),g=false;if(!c&&(f[0]==="auth"||f[0]==="publ"))try{y.UserId(f[2]),y.UserId(f[3]),g=f[0]=="auth",c=!0;}catch{throw new a("Invalid file url.",{code:"INVALID_PARAMETER"})}let m=d?null:f[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:f[f.length-1],fileKey:f[f.length-2],access_group:f[6]==="**"?"private":f[6]==="01"?"authorized":f[6]==="00"?"public":parseInt(f[6]),uploader:f[3],record_id:f[4]==="records"?f[5]:"N/A",filesize:te(f[9]),uploaded:te(f[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:d?"get-host":"get",id:d||f[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=ra(_,t.refresh);}e=(await T.bind(this)("get-signed-url",E,S)).url;}else if(g){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=f[6]==="**"?"**":parseInt(f[6]),O=this.user?.access_group??-1;if(this.user.user_id!==f[3]&&(S==="**"||O<S)){let L=f[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)?cr(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 On.bind(this)(e,E);if(t?.dataType==="blob")return k;if(t?.dataType==="text")return await yi(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 It(e,t){return `${e||this.service}/${t||this.owner}`}function mr(e,t){let r=this.__my_unique_ids[e];return r?r[t]:void 0}function bi(e,t,r){this.__my_unique_ids[e]||(this.__my_unique_ids[e]={}),this.__my_unique_ids[e][t]=r;}function oa(e,t){this.__my_unique_ids[e]&&delete this.__my_unique_ids[e][t];}function _i(e,t){if(!e||typeof e!="object"||e.access_group!==void 0&&e.access_group!==null)return e;let r=typeof this._defaultAccessGroup=="function"?this._defaultAccessGroup():null;if(r==="ask")throw new a(`"table.access_group" is required: this project's "default_access_group" is set to "ask", so every table query and record must name its access group explicitly.`,{code:"INVALID_PARAMETER"});return r!=null?(e.access_group=r,e):(t?.fallbackPublic&&(e.access_group=0),e)}function wi(e,t){return !t||t.table===void 0?e:Object.assign({},e,{table:t.table})}async function tt(e){if(await this.__connection,!this.__user&&this.connection?.opt?.require_login===true)throw new a(`This project requires users to sign in before reading its database, so "${e}" is not available to a signed-out visitor.`,{code:"REQUIRE_LOGIN"})}async function Ei(e,t=false){e=q(e,{ignoreEmpty:true}).data||{};let r=It.bind(this)(e?.service,e?.owner),n="",i=gi(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=mr.bind(this)(r,n);s&&(t?oa.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));let l=typeof e?.table=="string";l&&(e.table={name:e.table}),_i.bind(this)(e.table,{fallbackPublic:l}),e.index&&e.index.hasOwnProperty("range")&&e.index.hasOwnProperty("condition")&&delete e.index.range;let u=p=>({table:{name:d=>Oe(d,"table.name"),access_group:yr.bind(this),subscription:d=>y.UserId(d,'User ID in "subscription"')},reference:"string",index:{name:["$updated","$uploaded","$referenced_count","$user_id",d=>et(d,"index.name")],value:d=>{let f={$updated:"number",$uploaded:"number",$referenced_count:"number",$user_id:y.UserId};if(f.hasOwnProperty(p.index.name)){let g=f[p.index.name];if(typeof g=="function")return g(d);if(g!==typeof d)throw new a(`"index.value" should be type: ${g}.`,{code:"INVALID_PARAMETER"});return d}return typeof d=="string"&&!d?"":typeof d=="string"&&pr(p.index.name)?hr(d,"index.value"):At(d)},condition:["gt","gte","lt","lte",">",">=","<","<=","=","eq"],range:d=>pi(d,p)},tag:d=>{if(d==null)return d;if(typeof d=="string")return Et(d,"tag");throw new a('"tag" should be type: string.',{code:"INVALID_PARAMETER"})},private_key:"string"});e=y.Params(e||{},u(e),c||s?[]:["table"],{ignoreEmpty:true});}return {query:e,is_reference_fetch:n}}async function Ai(e,t){await this.__connection,await tt.call(this,"getRecords");let r=await Ei.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 Ri(e){let t="",r=[],n=It.bind(this)(e?.service,e?.owner),i=y.Params(e||{},{record_id:o=>{let c=typeof o=="string"?mr.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:yr.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=>At(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=mr.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=>At(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=>Et(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 p=l.url.split("/").slice(0,3).join("/")+"/"+l.path;c.push(p);}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"});let l=typeof c.table=="string";l&&(c.table={name:c.table}),c?.record_id?l&&c.table.access_group===void 0&&(c.table.access_group=0):_i.bind(this)(c.table,{fallbackPublic:l}),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 Ii(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(g,m)=>{if(!g||typeof g!="object"||Array.isArray(g))throw new a(`"params[${m}]" should be type: <object>.`,{code:"INVALID_PARAMETER"});let h=Ri.bind(this)(g),_=h.config;if(N.call(this)){let w=Object.prototype.hasOwnProperty.call(_,"data"),b=await Zt.bind(this)(_.data,wi(g,_),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 p=await T.bind(this)("post-record",c,l),d=await Promise.all(p.map((g,m)=>Pe.bind(this)(g,"called from postRecord",false,s.hasOwnProperty(m))));for(let g=0;g<d.length;g++)s.hasOwnProperty(g)&&d[g]&&!d[g].error&&(d[g].data=s[g],d[g].encrypted={status:"encrypted"});let f=It.bind(this)(r,n);for(let g=0;g<p.length;g++){let m=p[g],h=d[g];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&&bi.bind(this)(f,h.unique_id,h.record_id);}return d}async function br(e,t,r){if(await this.__connection,!t)throw new a('"config" argument is required.',{code:"INVALID_PARAMETER"});let n=Ri.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 p=t?.data!==void 0?t.data:u.data,d=p!==void 0,f=await Zt.bind(this)(p,wi(t,i),d),g=null;g=Object.assign({},i),delete g.data,f.omit||(g.data=f.send);let m={};if(typeof s=="function"&&(m.progress=s),Object.keys(m).length&&Object.assign(c,{fetchOptions:m}),f.files==="decrypt"&&t?.record_id){let b=await lr.bind(this)(t.record_id,"decrypt",s);if(b.length){let E=g.remove_bin;g.remove_bin=Array.isArray(E)?E.concat(b):b;}}if(f.spill&&t?.record_id){let b=new FormData;if(b.append(ze,new File([f.spill],"payload.bin",{type:"application/octet-stream"})),await Ze.bind(this)(b,{record_id:t.record_id}),f.retireCt){let E=g.remove_bin,k=[f.retireCt];g.remove_bin=Array.isArray(E)?E.concat(k):k;}}let h=await T.bind(this)("post-record",g,c);if(f.encrypted&&h?.rec&&dn.bind(this)(h.rec,f.dek),f.files==="encrypt"&&h?.rec)try{let b=await lr.bind(this)(h.rec,"encrypt",s);b.length&&await br.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,f.encrypted);if(_&&(w.data=u.data),f.encrypted&&(w.data=f.plain,w.encrypted={status:"encrypted",recipients:Object.keys(f.send.k||{})}),w.unique_id){let b=It.bind(this)(i?.service,i?.owner);bi.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 Pi(e,t){await tt.call(this,"getTables");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 Ti(e,t){if(await tt.call(this,"getIndexes"),!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 Si(e,t){await tt.call(this,"getTags");let r=await T.bind(this)("get-tag",y.Params(e||{},{table:n=>Oe(n,"table",{allowEmpty:true}),tag:n=>Et(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 ki(e,t){await tt.call(this,"getUniqueId");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 vi(e,t){await this.__connection;let r=await Ei.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 Ui(e){if(N.call(this)){let t=typeof e.user_id=="string"?[e.user_id]:e.user_id;Array.isArray(t)&&t.length&&await ar.bind(this)(e.record_id,t);}return Ci.bind(this)({record_id:e.record_id,user_id:e.user_id,execute:"add"})}async function Ni(e){let t=await Ci.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 Tn.bind(this)(e.record_id,Array.isArray(r)&&r.length?r:null);}return t}async function Di(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 xi(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(Rt[t])return Rt[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 Rt[t];});return Rt[t]=n,n}function Ci(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={},Pt={},Tt={};function Oi(e,t,r){e[t]||(e[t]=[]),e[t].push(r);}async function St(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 wr(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 St(Tt,t,i=>n.bind(this)(i,t,r)),await n.bind(this)(e,t,r)):await St(Tt,t,i=>n.bind(this)(i,t,r)):e&&Oi(Tt,t,e);}async function Er(e,t){if(this.log("receiveIceCandidate",e),U?.[t]&&U[t]?.remoteDescription&&U[t]?.remoteDescription?.type){if(!e)return St(Pt,t,r=>U[t].addIceCandidate(r));await St(Pt,t,r=>U[t].addIceCandidate(r)),await U[t].addIceCandidate(e);}else Oi(Pt,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 Tt[s],delete Pt[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 Li(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 Fi(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 Li(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];Vi.bind(this)(r,c);}return $i.bind(this)(r,["onnegotiationneeded"]),await _r.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}".`),_r.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 Mi(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 Li(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,Vi.bind(this)(n,c);},$i.bind(this)(n,["onnegotiationneeded"]),await wr.bind(this)(null,n),await Er.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 _r(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 aa(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 $i(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=>{aa.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:()=>{_r.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 Vi(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,rt=true,Le=0;async function ca(){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 Ar=null;async function qi(){if(typeof window>"u"||window._runningInNodeJS)throw new a("WebSocket is not supported in Node.js environment.",{code:"NOT_SUPPORTED"});rt=true;let e=this.__socket?await this.__socket:this.__socket;ce.bind(this)({close_all:true}),we&&Rr.bind(this)({group:null}),Le=0,_e&&(_e.terminate(),_e=null);try{e&&e.close();}catch{}return window.removeEventListener("visibilitychange",Ar),this.__socket=null,null}async function kt(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(rt&&(Ar=()=>{!document.hidden&&!rt&&kt.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 ca.bind(this)();i.onopen=()=>{rt=false,Le=0,r!=="reconnect"&&window.addEventListener("visibilitychange",Ar),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 er=Object.defineProperty;var tr=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]),J[u.sender_cid]&&delete J[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),J[u.sender_cid]||(J[u.sender_cid]=u.sender_cid,delete u.message,u.connectRTC=cn.bind(this)(u),u.type="rtc:incoming",u.hangup=(()=>{S[u.sender_cid]?H.bind(this)({cid:u.sender_cid}):J[u.sender_cid]&&(delete J[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 gn(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=N(t).data;let i="";if(n&&(n=f.Params(n,{config:{always:"boolean"},title:"string",body:"string"},["title","body"]),i=JSON.stringify({title:n.title,body:n.body}),new Blob([i]).size>3072))throw new a("Notification size exceeds 3kb.",{code:"INVALID_PARAMETER"});if(r.readyState===1){try{f.UserId(e),r.send(JSON.stringify({action:"sendMessage",uid:e,content:t,notification:i,notificationConfig:n?.config||{},token:`IdT:${this.service}:${this.owner}:`+(this.bearerToken||this.session?.idToken?.jwtToken||"null")}));}catch(s){if(this.log("postRealtime:err",{err:s}),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=N(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 fn(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 E.bind(this)("get-ws-group",t,{fetchOptions:e,auth:true,method:"post"});return n.list=n.list.map(r=>({user_id:r.uid.split("#")[1],cid:"cid:"+r.cid})),n}async function hn(t,e){if(await this.__connection,t||(t={searchFor:"group",value:" ",condition:">"}),t=f.Params(t,{searchFor:["group","number_of_users",()=>"group"],value:["string","number",()=>t?.searchFor&&t?.searchFor==="number_of_users"?0:" "],condition:[">",">=","=","<","<=","!=","gt","gte","eq","lt","lte","ne"],range:["string","number"]}),t.condition||(t.value===" "||!t.value?t.condition=">":t.condition="="),t.range&&t.condition&&delete t.condition,t.searchFor==="number_of_users"&&typeof t.value!="number")throw new a('"value" must be a number.',{code:"INVALID_PARAMETER"});if(t.searchFor==="group"&&typeof t.value!="string")throw new a('"value" must be a string.',{code:"INVALID_PARAMETER"});if(t.hasOwnProperty("range")&&typeof t.range!=typeof t.value)throw new a(`"range" must be a ${typeof t.value}.`,{code:"INVALID_PARAMETER"});let n=await E.bind(this)("get-ws-group",t,{fetchOptions:e,auth:true,method:"post"});return n.list=n.list.map(r=>({group:r.rid.split("#")[1],number_of_users:r.cnt})),n}var ni=typeof FormData<"u",ri=typeof HTMLFormElement<"u",ii=typeof SubmitEvent<"u",G={},ye={},X={};function et(t){return Object.freeze({id:t,status:"stopped"})}function mn(t){return !!t&&typeof t=="object"&&t.status==="stopped"}function _n({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&&!G?.[s]&&(G[s]=new pn__default.default({breakWhenError:false,batchSize:1}));let u={stop:null,aborted:false,queue:s};X[t]=u;let c=()=>{X[t]===u&&delete X[t];},d=()=>new Promise((h,m)=>{let p=false;if(u.aborted){c(),h(et(t));return}let y=setInterval(async()=>{try{let b=await E.bind(this)("csr-poll",{id:t,service:n,owner:r},{auth:e});if(b.status==="running"||b.status==="pending"||p)return;p=!0,o&&o(b),clearInterval(y),c(),h(b);}catch(b){if(p)return;p=true,l&&l(b),clearInterval(y),c(),m(b);}},i);u.stop=()=>{p||(p=true,clearInterval(y),c(),h(et(t)));};}),g=()=>{let h=X[t];h&&(h.stop?h.stop():(h.aborted=true,delete X[t]));};if(s){let h=new Promise((m,p)=>{let y=false,b=G[s].add([async()=>{try{let I=await d();return y||(y=!0,m(I)),I}catch(I){throw y||(y=true,p(I)),I}}])[0];ye[t]=b,u.stop=()=>{if(!y){u.aborted=true;try{G[s]&&G[s].remove(ye[t]);}catch{}delete ye[t],c(),y=true,m(et(t));}};});return Object.assign(h,{stop:g})}else return Object.assign(d(),{stop:g})}function bn(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 X)X[r]?.queue===t.queue&&n.push(r);else for(let r in X)n.push(r);for(let r of n){let i=X[r];i&&(i.stop?i.stop():(i.aborted=true,delete X[r]),e+=1);}return e}function yn(t,e){if(!t.queue)throw new a('"queue" is required.',{code:"INVALID_PARAMETER"});let n={service:t.service||this.service,owner:t.owner||this.owner,queue:t.queue+":"};return E.bind(this)("csr-poll",n,{auth:true})}async function wn(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=()=>E.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:m=>_n.call(this,{id:h,auth:o,service:d,owner:g,latency:m?.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 G?.[u]||(G[u]=new pn__default.default({breakWhenError:false,batchSize:1})),new Promise((c,d)=>{G[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 En(t,e){await this.__connection;let n=t.service||this.service,r=t.owner||this.owner;t=f.Params(t,{url:"string",method:["GET","POST","DELETE","PUT"],queue:"string",status:["pending","running","resolved","failed"]},["url","method"]);let i=!!this.__user,s=`[${t.method.toUpperCase()}]${t.url.toLowerCase()}#${n}:`,o={id:s,queue:t?.queue,status:t?.status,service:n,owner:r};Object.keys(o).forEach(u=>{o[u]||delete o[u];}),o.queue&&delete o.id;let l=await E.bind(this)("csr-poll",o,{auth:i,fetchOptions:e});return l.list=l.list.map(u=>{let c={id:u.id,status_code:u.rslv?.status_code||null,response_body:u.rslv?.body||u.rslv?.truncated||null,error:u?.err,created:u?.stmp,updated:u?.utmp,request_body:u?.reqbdy,expires:u?.expt,status:u.stts,queue_name:u?.qid};for(let d in c)c[d]===void 0&&delete c[d];return (c.status==="running"||c.status==="pending")&&(c.poll=d=>_n.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 Rn(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&&G?.[l]&&(G[l].remove(ye[o]),delete ye[o]),E.bind(this)("csr-cancel",{id:o,service:e,owner:n},{auth:r})}async function An(t){await this.__connection;let e={name:"string",email:n=>(f.Email(n),n),subject:"string",message:"string"};return t=f.Params(t,e,["name","email","subject","message"]),await E.bind(this)("send-inquiry",t),"SUCCESS: Inquiry has been sent."}async function In(t,e){if(await this.__connection,ni&&t instanceof FormData||ri&&t instanceof HTMLFormElement||ii&&t instanceof SubmitEvent){if(!e)throw new a("Url string as a second argument is required when form is passed.",{code:"INVALID_PARAMETER"});let r=N(t);t={url:e,data:r.data,sync:true};}let n={url:r=>f.Url(r),data:r=>r,sync:["boolean",()=>true]};if(Array.isArray(t))for(let r of t)r=f.Params(r,n);else t=f.Params(t,n);return E.bind(this)("post-secure",t,{auth:true})}async function Tn(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 E.bind(this)("mock",t,e)}async function Pn(t,e){await this.__connection,t=f.Params(t||{},{access_group:r=>{if(r==="authorized"&&(r=1),r==="public"&&(r=0),typeof r!="number")throw new a('"access_group" should be type number.',{code:"INVALID_PARAMETER"});if(r<0)throw new a('"access_group" should be zero or a positive number.',{code:"INVALID_PARAMETER"});if(r>this.__user.access_group)throw new a("User has no access.",{code:"INVALID_REQUEST"});return r}});let n=await E.bind(this)("get-feed",t,{auth:true,fetchOptions:e});for(let r in n.list)n.list[r]=await 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 Sn(t,e){if(t=N(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 E.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 kn(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 E.bind(this)("subscription",{subscribe:t.user_id,option:{get_feed:t.get_feed,get_notified:t.get_notified,get_email:t.get_email||false}},{auth:true}),n={};if(e.sub){let r=e.sub.split("#");n.subscriber=r[2],n.subscription=r[0];}else n.subscriber=e.subscriber,n.subscription=e.subscription;return n.timestamp=e?.timestamp||e.stmp,n.blocked=e?.blocked||e.grp.substring(0,1)==="N",Object.assign(n,e.opt),n}async function vn(t){await this.__connection;let{user_id:e}=f.Params(t,{user_id:we.bind(this)},["user_id"]);return await E.bind(this)("subscription",{unsubscribe:e},{auth:true})}async function xn(t){await this.__connection;let{user_id:e}=f.Params(t,{user_id:we.bind(this)},["user_id"]);return await E.bind(this)("subscription",{block:e},{auth:true})}async function Dn(t){await this.__connection;let{user_id:e}=f.Params(t,{user_id:we.bind(this)},["user_id"]);return await E.bind(this)("subscription",{unblock:e},{auth:true})}async function Un(t,e){await this.__connection;let n=await F.bind(this)();t=f.Params(t,{user_id:o=>{if(o!==this.__user.user_id&&!n)throw new a("No access.",{code:"INVALID_REQUEST"});return o},group:o=>{if(o==="public"&&(o=0),o==="authorized"&&(o=1),typeof o!="number")throw new a('"group" should be type number | "public" | "authorized".',{code:"INVALID_PARAMETER"});return o}});let r=await E.bind(this)("get-newsletter-subscription",t,{auth:true,fetchOptions:e||null}),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 Nn(t){await this.__connection;let e=f.Params(t||{},{email:n=>Array.isArray(n)&&n.length>0?n.length===1?f.Email(n[0]):n.map(r=>f.Email(r)):f.Email(n),group:["number","public","authorized","admin",n=>{if(typeof n!="string"||n.length>20||!/^[a-zA-Z0-9]+$/.test(n))throw new a('"group" should be an alphanumeric string without spaces and less than 20 characters.',{code:"INVALID_PARAMETER"});return n}],redirect:n=>f.Url(n)},this.__user?["group"]:["email","group"]);return E.bind(this)(`subscribe-${this.__user?"":"public-"}newsletter`,e,{auth:!!this.__user})}async function Cn(t){await this.__connection,t=f.Params(t,{group:["number","public","authorized","admin"]},["group"]);let e=Object.assign({action:"unsubscribe"},t);return E.bind(this)("subscribe-newsletter",e,{auth:true})}async function Ln(t,e){let n=await F.bind(this)(),r={message_id:"string",timestamp:"number",read:"number",complaint:"number",subject:"string",bounced:"number"};t||(e=Object.assign({ascending:false},e||{})),t=N(t).data,t=t||{searchFor:"timestamp",value:Date.now(),condition:"<",group:"public"},t=f.Params(t,{searchFor:["message_id","timestamp","subject","complaint","read","bounced"],value:u=>{if(typeof u!==r[t.searchFor])throw new a(`"value" type does not match the type of "${t.searchFor}" index.`,{code:"INVALID_PARAMETER"});if(typeof u=="string"&&!u)throw new a('"value" should not be empty string.',{code:"INVALID_PARAMETER"});return u},range:u=>{if(!t.hasOwnProperty("value")||typeof u!=typeof t.value)throw new a('"range" should match type of "value".',{code:"INVALID_PARAMETER"});return u},condition:[">",">=","=","<","<=","gt","gte","eq","lt","lte",()=>"="],group:u=>{if(u==="public")return 0;if(!this.session)throw new a("User should be logged in.",{code:"INVALID_REQUEST"});if(u==="authorized")return 1;if(typeof u=="number"){if(!n&&u>parseInt(this.user?.access_group||this.session?.idToken?.payload?.access_group))throw new a("User has no access.",{code:"INVALID_REQUEST"});return u}throw new a('"group" should be type: number | "public" | "authorized".',{code:"INVALID_PARAMETER"})}},["searchFor","value","group"]);let i=t.group===0?"get-public-newsletters":"get-newsletters",s=await E.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 On(t){let e=f.Params(t,{user_id:r=>f.UserId(r,'"user_id"')},["user_id"]);if(e?.service&&e?.owner?e={service:e?.service,owner:e?.owner,block:e.user_id}:e={block:e.user_id},!await F.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}return await E.bind(this)("block-account",e,{auth:true})}async function Mn(t){let e=f.Params(t,{user_id:r=>f.UserId(r,'"user_id"')},["user_id"]);if(e?.service&&e?.owner?e={service:e?.service,owner:e?.owner,unblock:e.user_id}:e={unblock:e.user_id},!await F.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}return await E.bind(this)("block-account",e,{auth:true})}async function Fn(t){let e=f.Params(t,{user_id:r=>f.UserId(r,'"user_id"')},["user_id"]);if(e?.service&&e?.owner?e={service:e?.service,owner:e?.owner,delete:e.user_id}:e={delete:e.user_id},!await F.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}return await E.bind(this)("remove-account",e,{auth:true})}async function Vn(t,e){let n={email:s=>f.Email(s),password:s=>f.Password(s),name:"string",username:"string",gender:"string",address:s=>{if(!s)return "";if(typeof s=="string")return s;if(typeof s=="object")return JSON.stringify(s)},birthdate:s=>f.Birthdate(s),phone_number:s=>f.PhoneNumber(s),picture:s=>{if(s)return f.Url(s)},profile:s=>{if(s)return f.Url(s)},website:s=>{if(s)return f.Url(s)},nickname:"string",misc:"string",email_public:["boolean",()=>false],gender_public:["boolean",()=>false],address_public:["boolean",()=>false],birthdate_public:["boolean",()=>false],phone_number_public:["boolean",()=>false],openid_id:"string",access_group:s=>{try{typeof s=="string"&&(s=s==="admin"?99:parseInt(s));}catch{throw new a('"access_group" is invalid. Should be type <number>.',{code:"INVALID_PARAMETER"})}if(typeof s!="number"||s<1||s>100)throw new a('"access_group" is invalid. Should be type <number> of range 1~99',{code:"INVALID_PARAMETER"});return s}},r=f.Params(t,n,["email"]);if(e=f.Params(e,{confirmation_url:s=>{let o=s;if(typeof s=="string")o=f.Url(s);else throw new a('"options.confirmation_url" should be type: <string>.',{code:"INVALID_PARAMETER"});if(o&&!r.email)throw new a('"email" is required for signup confirmation.',{code:"INVALID_PARAMETER"});return o},email_subscription:s=>{if(typeof s!="boolean")throw new a('"options.email_subscription" should be type: <boolean>.',{code:"INVALID_PARAMETER"});if(!e?.confirmation_url)throw new a('"options.confirmation_url" is required for email subscription.',{code:"INVALID_PARAMETER"});return s},template:s=>{if(typeof s!="object"||!s.url||!s.subject)throw new a('"options.template" should be type: <object> with "url" and "subject".',{code:"INVALID_PARAMETER"});return {url:f.Url(s.url),subject:s.subject}}}),r.signup_confirmation=e?.confirmation_url||true,r.email_subscription=e?.email_subscription||false,r.template=e?.template||{},!await F.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}return await E.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 F.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}return await E.bind(this)("admin-signup",r,{auth:true})}async function $n(t){if(t=f.Params(t,{user_id:n=>f.UserId(n,'"user_id"'),access_group:n=>{try{typeof n=="string"&&(n=parseInt(n));}catch{throw new a('"access_group" is invalid. Should be type <number>.',{code:"INVALID_PARAMETER"})}if(typeof n=="number"&&n>0&&n<100)return n;throw new a('"access_group" is invalid. Should be type <number> of range 1~99',{code:"INVALID_PARAMETER"})}},["user_id","access_group"]),!await F.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}return await E.bind(this)("grant-access",t,{auth:true})}async function jn(t,e){if(t=f.Params(t,{email:"string"}),!await F.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}let r=await E.bind(this)("invitation-list",Object.assign({mode:"search"},t),{fetchOptions:e,auth:true});return r.list=r.list.map(i=>fe(i.user)),r}async function Bn(t){if(t=f.Params(t,{email:n=>f.Email(n)},["email"]),!await F.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}return await E.bind(this)("invitation-list",Object.assign({mode:"cancel"},t),{auth:true})}async function Kn(t){if(t=f.Params(t,{email:n=>f.Email(n)},["email"]),!await F.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}return await E.bind(this)("invitation-list",Object.assign({mode:"resend"},t),{auth:true})}async function Qn(t){let e=f.Params(t,{user_id:o=>f.UserId(o,'"user_id"'),email:o=>f.Email(o),address:o=>{if(!o)return "";if(typeof o=="string")return o;if(typeof o=="object")return JSON.stringify(o)},name:"string",gender:"string",birthdate:o=>o?f.Birthdate(o):"",phone_number:o=>o?f.PhoneNumber(o):"",email_public:"boolean",phone_number_public:"boolean",address_public:"boolean",gender_public:"boolean",birthdate_public:"boolean",misc:"string",picture:o=>o?f.Url(o):"",profile:o=>o?f.Url(o):"",nickname:"string",website:o=>o?f.Url(o):""},["user_id"]),n=e.service,r=e.owner;if(delete e.service,delete e.owner,Object.keys(e).filter(o=>o!=="user_id"&&e[o]!==void 0).length===0)throw new a("At least one attribute to update is required.",{code:"INVALID_PARAMETER"});if(!await F.bind(this)()){if(!this.__user)throw new a("User needs to login.",{code:"INVALID_REQUEST"});if(this.__user.access_group<90)throw new a("Invalid access.",{code:"INVALID_REQUEST"})}e.email&&(e.preferred_username=(n||this.service)+"-"+M.hash(e.email));let s={attributes:e};return n&&r&&(s.service=n,s.owner=r),await E.bind(this)("admin-edit-profile",s,{auth:true})}async function Hn(t){if(typeof window>"u"||window._runningInNodeJS)throw new a("Push Notifications are not supported in Node.js environment.",{code:"NOT_SUPPORTED"});if(await this.__connection,!t.endpoint)throw new a("Missing parameter: endpoint",{code:"INVALID_PARAMETER"});if(!t.keys||!t.keys.p256dh||!t.keys.auth)throw new a("Missing parameter: keys.p256dh or keys.auth",{code:"INVALID_PARAMETER"});return await E.bind(this)("store-subscription",{endpoint:t.endpoint,keys:t.keys},{auth:true}),"SUCCESS: Subscribed to receive notifications."}async function Wn(t){if(typeof window>"u"||window._runningInNodeJS)throw new a("Push Notifications are not supported in Node.js environment.",{code:"NOT_SUPPORTED"});if(await this.__connection,!t.endpoint)throw new a("Missing parameter: endpoint",{code:"INVALID_PARAMETER"});if(!t.keys||!t.keys.p256dh||!t.keys.auth)throw new a("Missing parameter: keys.p256dh or keys.auth",{code:"INVALID_PARAMETER"});return await E.bind(this)("delete-subscription",{endpoint:t.endpoint,keys:t.keys},{auth:true}),"SUCCESS: Unsubscribed from notifications."}async function zn(){if(typeof window>"u"||window._runningInNodeJS)throw new a("Push Notifications are not supported in Node.js environment.",{code:"NOT_SUPPORTED"});return await this.__connection,{VAPIDPublicKey:await E.bind(this)("get-vapid-public-key",null,{auth:true})}}async function Jn(t,e){if(typeof window>"u"||window._runningInNodeJS)throw new a("Push Notifications are not supported in Node.js environment.",{code:"NOT_SUPPORTED"});await this.__connection;let{title:n,body:r}=N(t||{},{nullIfEmpty:true}).data;if(!n)throw new a("Missing parameter: message title",{code:"INVALID_PARAMETER"});if(!r)throw new a("Missing parameter: message body",{code:"INVALID_PARAMETER"});let i={title:n,body:r};return e?(typeof e=="string"&&(e=[e]),i.user_ids=e):i.user_ids="all_users",await E.bind(this)("push-notification",i,{auth:true}),"SUCCESS: Notification sent."}async function Gn(t){await this.__connection,t=f.Params(t,{spell:"string",name:"string",magic:n=>n},["spell","name"]);await E.bind(this)("castspell",t);return `The spell "${t.spell}" has been cast.`}async function Xn(t){return await this.__connection,t=f.Params(t||{},{search:["spell","name",()=>"spell"],value:"string"}),await E.bind(this)("getspell",t)}async function Zn(t){await this.__connection,t=f.Params(t,{message:"string",name:"string"},["message","name"]);let e=await E.bind(this)("dopamine",t,{auth:true}),n=e?.previous_message?.message,r=e?.previous_message?.name;if(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: ${
|
|
217
|
-
Watch the video here: ${
|
|
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&&Er.bind(this)(u.candidate,l.sender_cid),u.sdpoffer&&(wr.bind(this)(u.sdpoffer,l.sender_cid),de[l.sender_cid]||(de[l.sender_cid]=l.sender_cid,delete l.message,l.connectRTC=Mi.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=()=>{rt?(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}),kt.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 ji(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 Rr(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 Bi(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 Ki(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 Wi=typeof FormData<"u",Qi=typeof HTMLFormElement<"u",Gi=typeof SubmitEvent<"u",fe={},nt={},ge={};function Ir(e){return Object.freeze({id:e,status:"stopped"})}function zi(e){return !!e&&typeof e=="object"&&e.status==="stopped"}function Ji({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 Hi__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];},p=()=>new Promise((f,g)=>{let m=false;if(l.aborted){u(),f(Ir(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(),f(_);}catch(_){if(m)return;m=true,c&&c(_),clearInterval(h),u(),g(_);}},i);l.stop=()=>{m||(m=true,clearInterval(h),u(),f(Ir(e)));};}),d=()=>{let f=ge[e];f&&(f.stop?f.stop():(f.aborted=true,delete ge[e]));};if(s){let f=new Promise((g,m)=>{let h=false,_=fe[s].add([async()=>{try{let w=await p();return h||(h=!0,g(w)),w}catch(w){throw h||(h=true,m(w)),w}}])[0];nt[e]=_,l.stop=()=>{if(!h){l.aborted=true;try{fe[s]&&fe[s].remove(nt[e]);}catch{}delete nt[e],u(),h=true,g(Ir(e));}};});return Object.assign(f,{stop:d})}else return Object.assign(p(),{stop:d})}function Yi(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 Xi(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 Zi(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()}`,p=e.service||this.service,d=e.owner||this.owner,f=`${u}#${p}:${l.id}`;Object.assign(l,{poll:g=>Ji.call(this,{id:f,auth:o,service:p,owner:d,latency:g?.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 Hi__default.default({breakWhenError:false,batchSize:1})),new Promise((u,p)=>{fe[l].add([async()=>{try{let d=await c();if(i>0){let f=d.poll({latency:i});return u(f),f}return u(d),d}catch(d){throw p(d),d}}]);})}else return c()}async function es(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 p in u)u[p]===void 0&&delete u[p];return (u.status==="running"||u.status==="pending")&&(u.poll=p=>Ji.call(this,{id:s+u.id,auth:i,service:r,owner:n,latency:p?.latency||1e3,queue:l?.qid,onResponse:p?.onResponse,onError:p?.onError})),u}),c}async function ts(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(nt[o]),delete nt[o]),T.bind(this)("csr-cancel",{id:o,service:t,owner:r},{auth:n})}async function rs(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 ns(e,t){if(await this.__connection,Wi&&e instanceof FormData||Qi&&e instanceof HTMLFormElement||Gi&&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 is(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 ss(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=Gi&&e instanceof SubmitEvent?e.target:Qi&&e instanceof HTMLFormElement?e:null;o?i=new FormData(o):Wi&&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,g=>"\\u"+g.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 p={"Content-Meta":l,Authorization:u};s&&(p["Content-Type"]=s);let d=await fetch(n,{method:"POST",headers:p,body:i,signal:t.signal});if(t.responseType==="response")return d;if(!d.ok){let g=await d.text();try{g=JSON.parse(g);}catch{}throw new a(g?.message||(typeof g=="string"?g:JSON.stringify(g)),{code:g?.code||"ERROR"})}if(t.onStream&&d.body){let g=d.body.getReader(),m=new TextDecoder,h="";for(;;){let{done:_,value:w}=await g.read();if(_)break;let b=m.decode(w,{stream:true});h+=b;try{t.onStream(b);}catch(E){console.error(E);}}return h}let f=await d.text();if(t.responseType==="text")return f;try{return JSON.parse(f)}catch{return f}}async function os(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 it(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 as(e,t){if(e=q(e,{ignoreEmpty:true}).data,e=y.Params(e,{subscriber:n=>y.UserId(n,'User ID in "subscriber"'),subscription:it.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 cs(e){await this.__connection,e=y.Params(e,{user_id:it.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 ls(e){await this.__connection;let{user_id:t}=y.Params(e,{user_id:it.bind(this)},["user_id"]);return await T.bind(this)("subscription",{unsubscribe:t},{auth:true})}async function us(e){await this.__connection;let{user_id:t}=y.Params(e,{user_id:it.bind(this)},["user_id"]);return await T.bind(this)("subscription",{block:t},{auth:true})}async function ds(e){await this.__connection;let{user_id:t}=y.Params(e,{user_id:it.bind(this)},["user_id"]);return await T.bind(this)("subscription",{unblock:t},{auth:true})}async function fs(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 gs(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 ps(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 hs(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 p in o)u[p]=l[o[p]]||c[p];return u.bounced=String(u.bounced),u}),s}async function ys(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 ms(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 bs(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 _s(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 ws(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 Es(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 As(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 Rs(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 Is(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 Ps(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 Ts(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 Ss(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 ks(){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 vs(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 Us(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 Ns(e){return await this.__connection,e=y.Params(e||{},{search:["spell","name",()=>"spell"],value:"string"}),await T.bind(this)("getspell",e)}async function Ds(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 xs=["public","private","authorized","admin"];function Cs(e,t){if(typeof e=="number"){if(!Number.isInteger(e)||e<0||e>99)throw new a(`"${t}" value should be an integer within a range of 0 ~ 99.`,{code:"INVALID_PARAMETER"});return e}if(typeof e=="string"){if(e==="ask"||xs.indexOf(e)!==-1)return e;throw new a(`"${t}" should be one of ${xs.concat(["ask"]).map(r=>`'${r}'`).join(", ")}, or a number 0 ~ 99.`,{code:"INVALID_PARAMETER"})}throw new a(`"${t}" should be type: <number | string>.`,{code:"INVALID_PARAMETER"})}var R=class{constructor(t,r,n,i){this.__version="2.0.0-rc.10";this.project_id="";this.session=null;this.connection=null;this.__my_unique_ids={};this.__uniqueIdsPersistTimer=null;this.userPool=null;this.__socket=null;this.__mediaStream=null;this.host="skapi";this.hostDomain="skapi.com";this.target_cdn="d3e9syvbtso631";this.__default_access_group=null;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:Cr,fromBase62:te,decodeProjectId:Lt,formatServiceId:Ft,extractFormData:q,terminatePendingRequests:ci,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=Vn.bind(this);this.unregisterTicket=qn.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=Lt(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=Ft(t,r);}catch{this.project_id="";}let u=true,p=false,d=null;if(n&&(typeof n.refetchServiceInfo=="boolean"&&(p=n.refetchServiceInfo),typeof n.autoLogin=="boolean"&&(u=n.autoLogin),n.encryption&&(d=nn(n.encryption)),n.default_access_group!==void 0&&n.default_access_group!==null&&(this.__default_access_group=Cs(n.default_access_group,"default_access_group")),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 f=`https://${this.target_cdn}.cloudfront.net`,g=t.substring(0,4);this.admin_endpoint=fetch(`${f}/${g}/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(`${f}/${g}/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)}`);}sn.bind(this)(d),this.__authConnection=(async()=>{let b=await this.admin_endpoint,E={UserPoolId:b.userpool_id,ClientId:b.userpool_client};Ot()&&(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)():(d&&In.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:p}));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(d&&(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();}).catch(()=>{});}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);}_defaultAccessGroup(){if(this.__default_access_group!==null)return this.__default_access_group;let t=this.connection?.opt?.default_access_group;if(t==null)return null;try{return Cs(t,"default_access_group")}catch{return null}}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(
|
|
233
|
-
exports.Skapi=
|
|
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 os.bind(this)(t,r)}closeRTC(t){return ce.bind(this)(t)}connectRTC(t,r){return Fi.bind(this)(t,r)}connectRealtime(t){return kt.bind(this)(t)}spellcast(t){return Us.bind(this)(t)}getspell(t){return Ns.bind(this)(t)}dopamine(t){return Ds.bind(this)(t)}getUniqueId(t,r){return ki.bind(this)(t,r)}resendInvitation(t){return Is.bind(this)(t)}cancelInvitation(t){return Rs.bind(this)(t)}getInvitations(t,r){return As.bind(this)(t,r)}openIdLogin(t){return Bn.bind(this)(t)}loginWithToken(t){return Kn.bind(this)(t)}clientSecretRequest(t){return Zi.bind(this)(t)}clientSecretRequestHistory(t,r){return es.bind(this)(t,r)}cancelClientSecretRequest(t){return ts.bind(this)(t)}stopClientSecretPolling(t){return Yi.bind(this)(t||{})}isPollStopped(t){return zi(t)}clientSecretRequestQueueCount(t){return Xi.bind(this)(t)}consumeTicket(t){return Fn.bind(this)(t)}getConsumedTickets(t,r){return $n.bind(this)(t,r)}getTickets(t,r){return Mn.bind(this)(t,r)}closeRealtime(){return qi.bind(this)()}getRealtimeUsers(t,r){return Bi.bind(this)(t,r)}sendInquiry(t){return rs.bind(this)(t)}blockAccount(t){return ys.bind(this)(t)}unblockAccount(t){return ms.bind(this)(t)}deleteAccount(t){return bs.bind(this)(t)}inviteUser(t,r){return _s.bind(this)(t,r)}createAccount(t){return ws.bind(this)(t)}grantAccess(t){return Es.bind(this)(t)}updateUserAttributes(t){return Ps.bind(this)(t)}getRealtimeGroups(t,r){return Ki.bind(this)(t,r)}postRealtime(t,r,n){return ji.bind(this)(t,r,n)}joinRealtime(t){return Rr.bind(this)(t)}getProfile(t){return jn.bind(this)(t)}getFile(t,r){return Ie.bind(this)(t,r)}secureRequest(t,r){return ns.bind(this)(t,r)}forwardRequest(t,r){return ss.bind(this)(t,r)}getFormResponse(){return ui.bind(this)()}getRecords(t,r){return Ai.bind(this)(t,r)}getTables(t,r){return Pi.bind(this)(t,r)}getIndexes(t,r){return Ti.bind(this)(t,r)}getTags(t,r){return Si.bind(this)(t,r)}deleteRecords(t,r){return vi.bind(this)(t,r)}resendSignupConfirmation(){return Hn.bind(this)()}recoverAccount(t=false){return Wn.bind(this)(t)}getUsers(t,r){return ri.bind(this)(t,r)}disableAccount(){return Gn.bind(this)()}lastVerifiedEmail(t){return ni.bind(this)(t)}unsubscribeNewsletter(t){return ps.bind(this)(t)}subscribeNotification(t,r){return Ts.bind(this)({endpoint:t,keys:r})}unsubscribeNotification(t,r){return Ss.bind(this)({endpoint:t,keys:r})}vapidPublicKey(){return ks.bind(this)()}pushNotification(t,r){return vs.bind(this)(t,r)}getNewsletters(t,r){return hs.bind(this)(t,r)}getNewsletterSubscription(t,r){return fs.bind(this)(t,r)}requestUsernameChange(t){return ii.bind(this)(t)}getEncryptionStatus(){return on.bind(this)()}isWithheld(t){return Yt.call(this,t)}unlockEncryption(t){return _n.bind(this)(t)}lockEncryption(t){return wn.bind(this)(t)}takeRecoveryCode(){return vn.bind(this)()}unlockWithRecoveryCode(t){return Un.bind(this)(t)}regenerateRecoveryCode(){return Nn.bind(this)()}pinPeerKey(t){return Sn.bind(this)(t)}grantPrivateRecordAccess(t){return Ui.bind(this)(t)}removePrivateRecordAccess(t){return Ni.bind(this)(t)}listPrivateRecordAccess(t,r){return Di.bind(this)(t,r)}requestPrivateRecordAccessKey(t){return xi.bind(this)(t)}deleteFiles(t){return mi.bind(this)(t)}uploadFiles(t,r){return Ze.bind(this)(t,r)}mock(t,r){return is.bind(this)(t,r)}login(t){return dr.bind(this)(t)}logout(t){return Je.bind(this)(t)}signup(t,r){return Qn.bind(this)(t,r)}resetPassword(t){return zn.bind(this)(t)}verifyEmail(t,r){return Xn.bind(this)(t,r)}verifyPhoneNumber(t,r){return Yn.bind(this)(t,r)}forgotPassword(t,r){return Zn.bind(this)(t,r)}changePassword(t){return ei.bind(this)(t)}updateProfile(t){return ti.bind(this)(t)}postRecord(t,r,n){return br.bind(this)(t,r,n)}getSubscriptions(t,r){return as.bind(this)(t,r)}subscribe(t){return cs.bind(this)(t)}unsubscribe(t){return ls.bind(this)(t)}blockSubscriber(t){return us.bind(this)(t)}unblockSubscriber(t){return ds.bind(this)(t)}subscribeNewsletter(t){return gs.bind(this)(t)}bulkPostRecords(t){return Ii.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 ua={};
|
|
233
|
+
exports.Skapi=R;exports.SkapiError=a;exports.Types=ua;//# sourceMappingURL=skapi.cjs.map
|
|
234
234
|
//# sourceMappingURL=skapi.cjs.map
|