iom-sdk 0.2.4 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -3,5 +3,5 @@
3
3
  * hash-wasm (https://www.npmjs.com/package/hash-wasm)
4
4
  * (c) Dani Biro
5
5
  * @license MIT
6
- */function L(e,t,i,r){return new(i||(i=Promise))((function(t,o){function n(e){try{a(r.next(e))}catch(e){o(e)}}function s(e){try{a(r.throw(e))}catch(e){o(e)}}function a(e){var r;e.done?t(e.value):(r=e.value,r instanceof i?r:new i((function(e){e(r)}))).then(n,s)}a((r=r.apply(e,[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class K{constructor(){this.mutex=Promise.resolve()}lock(){let e=()=>{};return this.mutex=this.mutex.then((()=>new Promise(e))),new Promise((t=>{e=t}))}dispatch(e){return L(this,0,void 0,(function*(){const t=yield this.lock();try{return yield Promise.resolve(e())}finally{t()}}))}}var _;const Z="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,V=null!==(_=Z.Buffer)&&void 0!==_?_:null,Y=Z.TextEncoder?new Z.TextEncoder:null;function W(e,t){return(15&e)+(e>>6|e>>3&8)<<4|(15&t)+(t>>6|t>>3&8)}const $="a".charCodeAt(0)-10,ee="0".charCodeAt(0);function te(e,t,i){let r=0;for(let o=0;o<i;o++){let i=t[o]>>>4;e[r++]=i>9?i+$:i+ee,i=15&t[o],e[r++]=i>9?i+$:i+ee}return String.fromCharCode.apply(null,e)}const ie=null!==V?e=>{if("string"==typeof e){const t=V.from(e,"utf8");return new Uint8Array(t.buffer,t.byteOffset,t.length)}if(V.isBuffer(e))return new Uint8Array(e.buffer,e.byteOffset,e.length);if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw new Error("Invalid data type!")}:e=>{if("string"==typeof e)return Y.encode(e);if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw new Error("Invalid data type!")},re="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",oe=new Uint8Array(256);for(let e=0;e<64;e++)oe[re.charCodeAt(e)]=e;function ne(e){const t=function(e){let t=Math.floor(.75*e.length);const i=e.length;return"="===e[i-1]&&(t-=1,"="===e[i-2]&&(t-=1)),t}(e),i=e.length,r=new Uint8Array(t);let o=0;for(let t=0;t<i;t+=4){const i=oe[e.charCodeAt(t)],n=oe[e.charCodeAt(t+1)],s=oe[e.charCodeAt(t+2)],a=oe[e.charCodeAt(t+3)];r[o]=i<<2|n>>4,o+=1,r[o]=(15&n)<<4|s>>2,o+=1,r[o]=(3&s)<<6|63&a,o+=1}return r}const se=16384,ae=new K,Ae=new Map;function de(e,t){return L(this,0,void 0,(function*(){let i=null,r=null,o=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const n=()=>new DataView(i.exports.memory.buffer).getUint32(i.exports.STATE_SIZE,!0),s=ae.dispatch((()=>L(this,0,void 0,(function*(){if(!Ae.has(e.name)){const t=ne(e.data),i=WebAssembly.compile(t);Ae.set(e.name,i)}const t=yield Ae.get(e.name);i=yield WebAssembly.instantiate(t,{})})))),a=(e=null)=>{o=!0,i.exports.Hash_Init(e)},A=e=>{if(!o)throw new Error("update() called before init()");(e=>{let t=0;for(;t<e.length;){const o=e.subarray(t,t+se);t+=o.length,r.set(o),i.exports.Hash_Update(o.length)}})(ie(e))},d=new Uint8Array(2*t),c=(e,n=null)=>{if(!o)throw new Error("digest() called before init()");return o=!1,i.exports.Hash_Final(n),"binary"===e?r.slice(0,t):te(d,r,t)},l=e=>"string"==typeof e?e.length<4096:e.byteLength<se;let g=l;switch(e.name){case"argon2":case"scrypt":g=()=>!0;break;case"blake2b":case"blake2s":g=(e,t)=>t<=512&&l(e);break;case"blake3":g=(e,t)=>0===t&&l(e);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":g=()=>!1}return yield(()=>L(this,0,void 0,(function*(){i||(yield s);const e=i.exports.Hash_GetBuffer(),t=i.exports.memory.buffer;r=new Uint8Array(t,e,se)})))(),{getMemory:()=>r,writeMemory:(e,t=0)=>{r.set(e,t)},getExports:()=>i.exports,setMemorySize:e=>{i.exports.Hash_SetMemorySize(e);const t=i.exports.Hash_GetBuffer(),o=i.exports.memory.buffer;r=new Uint8Array(o,t,e)},init:a,update:A,digest:c,save:()=>{if(!o)throw new Error("save() can only be called after init() and before digest()");const t=i.exports.Hash_GetState(),r=n(),s=i.exports.memory.buffer,a=new Uint8Array(s,t,r),A=new Uint8Array(4+r);return function(e,t){const i=t.length>>1;for(let r=0;r<i;r++){const i=r<<1;e[r]=W(t.charCodeAt(i),t.charCodeAt(i+1))}}(A,e.hash),A.set(a,4),A},load:t=>{if(!(t instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const r=i.exports.Hash_GetState(),s=n(),a=4+s,A=i.exports.memory.buffer;if(t.length!==a)throw new Error(`Bad state length (expected ${a} bytes, got ${t.length})`);if(!function(e,t){if(e.length!==2*t.length)return!1;for(let i=0;i<t.length;i++){const r=i<<1;if(t[i]!==W(e.charCodeAt(r),e.charCodeAt(r+1)))return!1}return!0}(e.hash,t.subarray(0,4)))throw new Error("This state was written by an incompatible hash implementation");const d=t.subarray(4);new Uint8Array(A,r,s).set(d),o=!0},calculate:(e,o=null,n=null)=>{if(!g(e,o))return a(o),A(e),c("hex",n);const s=ie(e);return r.set(s),i.exports.Hash_Calculate(s.length,o,n),te(d,r,t)},hashLength:t}}))}new K,new K,new K,new K,new K,new K,new K,new K,new K,new K,new K;var ce={name:"sha256",data:"AGFzbQEAAAABEQRgAAF/YAF/AGAAAGACf38AAwgHAAEBAQIAAwUEAQECAgYOAn8BQfCJBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAQtIYXNoX1VwZGF0ZQACCkhhc2hfRmluYWwABA1IYXNoX0dldFN0YXRlAAUOSGFzaF9DYWxjdWxhdGUABgpTVEFURV9TSVpFAwEKnEoHBQBBgAkLnQEAQQBCADcDwIkBQQBBHEEgIABB4AFGIgAbNgLoiQFBAEKnn+anxvST/b5/Qquzj/yRo7Pw2wAgABs3A+CJAUEAQrGWgP6fooWs6ABC/6S5iMWR2oKbfyAAGzcD2IkBQQBCl7rDg5Onlod3QvLmu+Ojp/2npX8gABs3A9CJAUEAQti9loj8oLW+NkLnzKfQ1tDrs7t/IAAbNwPIiQEL7wICAX4Gf0EAQQApA8CJASIBIACtfDcDwIkBAkACQAJAIAGnQT9xIgINAEGACSEDDAELAkBBwAAgAmsiBCAAIAQgAEkbIgNFDQAgA0EDcSEFIAJBgIkBaiEGQQAhAgJAIANBBEkNACADQfwAcSEHQQAhAgNAIAYgAmoiAyACQYAJai0AADoAACADQQFqIAJBgQlqLQAAOgAAIANBAmogAkGCCWotAAA6AAAgA0EDaiACQYMJai0AADoAACAHIAJBBGoiAkcNAAsLIAVFDQADQCAGIAJqIAJBgAlqLQAAOgAAIAJBAWohAiAFQX9qIgUNAAsLIAAgBEkNAUGAiQEQAyAAIARrIQAgBEGACWohAwsCQCAAQcAASQ0AA0AgAxADIANBwABqIQMgAEFAaiIAQT9LDQALCyAARQ0AQQAhAkEAIQUDQCACQYCJAWogAyACai0AADoAACACQQFqIQIgACAFQQFqIgVB/wFxSw0ACwsLoz4BRX9BACAAKAI8IgFBGHQgAUGA/gNxQQh0ciABQQh2QYD+A3EgAUEYdnJyIgFBGXcgAUEOd3MgAUEDdnMgACgCOCICQRh0IAJBgP4DcUEIdHIgAkEIdkGA/gNxIAJBGHZyciICaiAAKAIgIgNBGHQgA0GA/gNxQQh0ciADQQh2QYD+A3EgA0EYdnJyIgRBGXcgBEEOd3MgBEEDdnMgACgCHCIDQRh0IANBgP4DcUEIdHIgA0EIdkGA/gNxIANBGHZyciIFaiAAKAIEIgNBGHQgA0GA/gNxQQh0ciADQQh2QYD+A3EgA0EYdnJyIgZBGXcgBkEOd3MgBkEDdnMgACgCACIDQRh0IANBgP4DcUEIdHIgA0EIdkGA/gNxIANBGHZyciIHaiAAKAIkIgNBGHQgA0GA/gNxQQh0ciADQQh2QYD+A3EgA0EYdnJyIghqIAJBD3cgAkENd3MgAkEKdnNqIgNqIAAoAhgiCUEYdCAJQYD+A3FBCHRyIAlBCHZBgP4DcSAJQRh2cnIiCkEZdyAKQQ53cyAKQQN2cyAAKAIUIglBGHQgCUGA/gNxQQh0ciAJQQh2QYD+A3EgCUEYdnJyIgtqIAJqIAAoAhAiCUEYdCAJQYD+A3FBCHRyIAlBCHZBgP4DcSAJQRh2cnIiDEEZdyAMQQ53cyAMQQN2cyAAKAIMIglBGHQgCUGA/gNxQQh0ciAJQQh2QYD+A3EgCUEYdnJyIg1qIAAoAjAiCUEYdCAJQYD+A3FBCHRyIAlBCHZBgP4DcSAJQRh2cnIiDmogACgCCCIJQRh0IAlBgP4DcUEIdHIgCUEIdkGA/gNxIAlBGHZyciIPQRl3IA9BDndzIA9BA3ZzIAZqIAAoAigiCUEYdCAJQYD+A3FBCHRyIAlBCHZBgP4DcSAJQRh2cnIiEGogAUEPdyABQQ13cyABQQp2c2oiCUEPdyAJQQ13cyAJQQp2c2oiEUEPdyARQQ13cyARQQp2c2oiEkEPdyASQQ13cyASQQp2c2oiE2ogACgCNCIUQRh0IBRBgP4DcUEIdHIgFEEIdkGA/gNxIBRBGHZyciIVQRl3IBVBDndzIBVBA3ZzIA5qIBJqIAAoAiwiAEEYdCAAQYD+A3FBCHRyIABBCHZBgP4DcSAAQRh2cnIiFkEZdyAWQQ53cyAWQQN2cyAQaiARaiAIQRl3IAhBDndzIAhBA3ZzIARqIAlqIAVBGXcgBUEOd3MgBUEDdnMgCmogAWogC0EZdyALQQ53cyALQQN2cyAMaiAVaiANQRl3IA1BDndzIA1BA3ZzIA9qIBZqIANBD3cgA0ENd3MgA0EKdnNqIhRBD3cgFEENd3MgFEEKdnNqIhdBD3cgF0ENd3MgF0EKdnNqIhhBD3cgGEENd3MgGEEKdnNqIhlBD3cgGUENd3MgGUEKdnNqIhpBD3cgGkENd3MgGkEKdnNqIhtBD3cgG0ENd3MgG0EKdnNqIhxBGXcgHEEOd3MgHEEDdnMgAkEZdyACQQ53cyACQQN2cyAVaiAYaiAOQRl3IA5BDndzIA5BA3ZzIBZqIBdqIBBBGXcgEEEOd3MgEEEDdnMgCGogFGogE0EPdyATQQ13cyATQQp2c2oiHUEPdyAdQQ13cyAdQQp2c2oiHkEPdyAeQQ13cyAeQQp2c2oiH2ogE0EZdyATQQ53cyATQQN2cyAYaiADQRl3IANBDndzIANBA3ZzIAFqIBlqIB9BD3cgH0ENd3MgH0EKdnNqIiBqIBJBGXcgEkEOd3MgEkEDdnMgF2ogH2ogEUEZdyARQQ53cyARQQN2cyAUaiAeaiAJQRl3IAlBDndzIAlBA3ZzIANqIB1qIBxBD3cgHEENd3MgHEEKdnNqIiFBD3cgIUENd3MgIUEKdnNqIiJBD3cgIkENd3MgIkEKdnNqIiNBD3cgI0ENd3MgI0EKdnNqIiRqIBtBGXcgG0EOd3MgG0EDdnMgHmogI2ogGkEZdyAaQQ53cyAaQQN2cyAdaiAiaiAZQRl3IBlBDndzIBlBA3ZzIBNqICFqIBhBGXcgGEEOd3MgGEEDdnMgEmogHGogF0EZdyAXQQ53cyAXQQN2cyARaiAbaiAUQRl3IBRBDndzIBRBA3ZzIAlqIBpqICBBD3cgIEENd3MgIEEKdnNqIiVBD3cgJUENd3MgJUEKdnNqIiZBD3cgJkENd3MgJkEKdnNqIidBD3cgJ0ENd3MgJ0EKdnNqIihBD3cgKEENd3MgKEEKdnNqIilBD3cgKUENd3MgKUEKdnNqIipBD3cgKkENd3MgKkEKdnNqIitBGXcgK0EOd3MgK0EDdnMgH0EZdyAfQQ53cyAfQQN2cyAbaiAnaiAeQRl3IB5BDndzIB5BA3ZzIBpqICZqIB1BGXcgHUEOd3MgHUEDdnMgGWogJWogJEEPdyAkQQ13cyAkQQp2c2oiLEEPdyAsQQ13cyAsQQp2c2oiLUEPdyAtQQ13cyAtQQp2c2oiLmogJEEZdyAkQQ53cyAkQQN2cyAnaiAgQRl3ICBBDndzICBBA3ZzIBxqIChqIC5BD3cgLkENd3MgLkEKdnNqIi9qICNBGXcgI0EOd3MgI0EDdnMgJmogLmogIkEZdyAiQQ53cyAiQQN2cyAlaiAtaiAhQRl3ICFBDndzICFBA3ZzICBqICxqICtBD3cgK0ENd3MgK0EKdnNqIjBBD3cgMEENd3MgMEEKdnNqIjFBD3cgMUENd3MgMUEKdnNqIjJBD3cgMkENd3MgMkEKdnNqIjNqICpBGXcgKkEOd3MgKkEDdnMgLWogMmogKUEZdyApQQ53cyApQQN2cyAsaiAxaiAoQRl3IChBDndzIChBA3ZzICRqIDBqICdBGXcgJ0EOd3MgJ0EDdnMgI2ogK2ogJkEZdyAmQQ53cyAmQQN2cyAiaiAqaiAlQRl3ICVBDndzICVBA3ZzICFqIClqIC9BD3cgL0ENd3MgL0EKdnNqIjRBD3cgNEENd3MgNEEKdnNqIjVBD3cgNUENd3MgNUEKdnNqIjZBD3cgNkENd3MgNkEKdnNqIjdBD3cgN0ENd3MgN0EKdnNqIjhBD3cgOEENd3MgOEEKdnNqIjlBD3cgOUENd3MgOUEKdnNqIjogOCA0IC4gLCAhIBsgGSADIA4gBEEAKALYiQEiO0EadyA7QRV3cyA7QQd3c0EAKALkiQEiPGpBACgC4IkBIj1BACgC3IkBIj5zIDtxID1zaiAHakGY36iUBGoiB0EAKALUiQEiP2oiACAMaiA7IA1qID4gD2ogPSAGaiAAID4gO3NxID5zaiAAQRp3IABBFXdzIABBB3dzakGRid2JB2oiQEEAKALQiQEiQWoiDCAAIDtzcSA7c2ogDEEadyAMQRV3cyAMQQd3c2pBz/eDrntqIkJBACgCzIkBIkNqIg0gDCAAc3EgAHNqIA1BGncgDUEVd3MgDUEHd3NqQaW3181+aiJEQQAoAsiJASIAaiIPIA0gDHNxIAxzaiAPQRp3IA9BFXdzIA9BB3dzakHbhNvKA2oiRSBBIEMgAHNxIEMgAHFzIABBHncgAEETd3MgAEEKd3NqIAdqIgZqIgdqIAUgD2ogCiANaiALIAxqIAcgDyANc3EgDXNqIAdBGncgB0EVd3MgB0EHd3NqQfGjxM8FaiIKIAYgAHMgQ3EgBiAAcXMgBkEedyAGQRN3cyAGQQp3c2ogQGoiDGoiBCAHIA9zcSAPc2ogBEEadyAEQRV3cyAEQQd3c2pBpIX+kXlqIgsgDCAGcyAAcSAMIAZxcyAMQR53IAxBE3dzIAxBCndzaiBCaiINaiIPIAQgB3NxIAdzaiAPQRp3IA9BFXdzIA9BB3dzakHVvfHYemoiQCANIAxzIAZxIA0gDHFzIA1BHncgDUETd3MgDUEKd3NqIERqIgZqIgcgDyAEc3EgBHNqIAdBGncgB0EVd3MgB0EHd3NqQZjVnsB9aiJCIAYgDXMgDHEgBiANcXMgBkEedyAGQRN3cyAGQQp3c2ogRWoiDGoiBWogFiAHaiAQIA9qIAggBGogBSAHIA9zcSAPc2ogBUEadyAFQRV3cyAFQQd3c2pBgbaNlAFqIgggDCAGcyANcSAMIAZxcyAMQR53IAxBE3dzIAxBCndzaiAKaiINaiIPIAUgB3NxIAdzaiAPQRp3IA9BFXdzIA9BB3dzakG+i8ahAmoiDiANIAxzIAZxIA0gDHFzIA1BHncgDUETd3MgDUEKd3NqIAtqIgZqIgcgDyAFc3EgBXNqIAdBGncgB0EVd3MgB0EHd3NqQcP7sagFaiIQIAYgDXMgDHEgBiANcXMgBkEedyAGQRN3cyAGQQp3c2ogQGoiDGoiBCAHIA9zcSAPc2ogBEEadyAEQRV3cyAEQQd3c2pB9Lr5lQdqIhYgDCAGcyANcSAMIAZxcyAMQR53IAxBE3dzIAxBCndzaiBCaiINaiIFaiABIARqIAIgB2ogFSAPaiAFIAQgB3NxIAdzaiAFQRp3IAVBFXdzIAVBB3dzakH+4/qGeGoiByANIAxzIAZxIA0gDHFzIA1BHncgDUETd3MgDUEKd3NqIAhqIgFqIgYgBSAEc3EgBHNqIAZBGncgBkEVd3MgBkEHd3NqQaeN8N55aiIEIAEgDXMgDHEgASANcXMgAUEedyABQRN3cyABQQp3c2ogDmoiAmoiDCAGIAVzcSAFc2ogDEEadyAMQRV3cyAMQQd3c2pB9OLvjHxqIgUgAiABcyANcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAQaiIDaiINIAwgBnNxIAZzaiANQRp3IA1BFXdzIA1BB3dzakHB0+2kfmoiCCADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBZqIgFqIg8gF2ogESANaiAUIAxqIAkgBmogDyANIAxzcSAMc2ogD0EadyAPQRV3cyAPQQd3c2pBho/5/X5qIgYgASADcyACcSABIANxcyABQR53IAFBE3dzIAFBCndzaiAHaiICaiIJIA8gDXNxIA1zaiAJQRp3IAlBFXdzIAlBB3dzakHGu4b+AGoiDCACIAFzIANxIAIgAXFzIAJBHncgAkETd3MgAkEKd3NqIARqIgNqIhEgCSAPc3EgD3NqIBFBGncgEUEVd3MgEUEHd3NqQczDsqACaiINIAMgAnMgAXEgAyACcXMgA0EedyADQRN3cyADQQp3c2ogBWoiAWoiFCARIAlzcSAJc2ogFEEadyAUQRV3cyAUQQd3c2pB79ik7wJqIg8gASADcyACcSABIANxcyABQR53IAFBE3dzIAFBCndzaiAIaiICaiIXaiATIBRqIBggEWogEiAJaiAXIBQgEXNxIBFzaiAXQRp3IBdBFXdzIBdBB3dzakGqidLTBGoiGCACIAFzIANxIAIgAXFzIAJBHncgAkETd3MgAkEKd3NqIAZqIgNqIgkgFyAUc3EgFHNqIAlBGncgCUEVd3MgCUEHd3NqQdzTwuUFaiIUIAMgAnMgAXEgAyACcXMgA0EedyADQRN3cyADQQp3c2ogDGoiAWoiESAJIBdzcSAXc2ogEUEadyARQRV3cyARQQd3c2pB2pHmtwdqIhcgASADcyACcSABIANxcyABQR53IAFBE3dzIAFBCndzaiANaiICaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakHSovnBeWoiGSACIAFzIANxIAIgAXFzIAJBHncgAkETd3MgAkEKd3NqIA9qIgNqIhNqIB4gEmogGiARaiAdIAlqIBMgEiARc3EgEXNqIBNBGncgE0EVd3MgE0EHd3NqQe2Mx8F6aiIaIAMgAnMgAXEgAyACcXMgA0EedyADQRN3cyADQQp3c2ogGGoiAWoiCSATIBJzcSASc2ogCUEadyAJQRV3cyAJQQd3c2pByM+MgHtqIhggASADcyACcSABIANxcyABQR53IAFBE3dzIAFBCndzaiAUaiICaiIRIAkgE3NxIBNzaiARQRp3IBFBFXdzIBFBB3dzakHH/+X6e2oiFCACIAFzIANxIAIgAXFzIAJBHncgAkETd3MgAkEKd3NqIBdqIgNqIhIgESAJc3EgCXNqIBJBGncgEkEVd3MgEkEHd3NqQfOXgLd8aiIXIAMgAnMgAXEgAyACcXMgA0EedyADQRN3cyADQQp3c2ogGWoiAWoiE2ogICASaiAcIBFqIB8gCWogEyASIBFzcSARc2ogE0EadyATQRV3cyATQQd3c2pBx6KerX1qIhkgASADcyACcSABIANxcyABQR53IAFBE3dzIAFBCndzaiAaaiICaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakHRxqk2aiIaIAIgAXMgA3EgAiABcXMgAkEedyACQRN3cyACQQp3c2ogGGoiA2oiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pB59KkoQFqIhggAyACcyABcSADIAJxcyADQR53IANBE3dzIANBCndzaiAUaiIBaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGFldy9AmoiFCABIANzIAJxIAEgA3FzIAFBHncgAUETd3MgAUEKd3NqIBdqIgJqIhMgI2ogJiASaiAiIBFqICUgCWogEyASIBFzcSARc2ogE0EadyATQRV3cyATQQd3c2pBuMLs8AJqIhcgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAZaiIDaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakH827HpBGoiGSADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBpqIgFqIhEgCSATc3EgE3NqIBFBGncgEUEVd3MgEUEHd3NqQZOa4JkFaiIaIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGGoiAmoiEiARIAlzcSAJc2ogEkEadyASQRV3cyASQQd3c2pB1OapqAZqIhggAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAUaiIDaiITaiAoIBJqICQgEWogJyAJaiATIBIgEXNxIBFzaiATQRp3IBNBFXdzIBNBB3dzakG7laizB2oiFCADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBdqIgFqIgkgEyASc3EgEnNqIAlBGncgCUEVd3MgCUEHd3NqQa6Si454aiIXIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGWoiAmoiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pBhdnIk3lqIhkgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAaaiIDaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGh0f+VemoiGiADIAJz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",hash:"8c18dd94"};new K,new K,new K,new K,new K,new K,new K,new K,new K,new K,new K;const le=1048576;function ge(e,t){return u(this,void 0,void 0,(function*(){return function(e){if(e.length%2!=0)throw new Error(`hexToBase64: odd-length hex string (len=${e.length})`);const t=new Uint8Array(e.length/2);for(let i=0;i<e.length;i+=2)t[i/2]=parseInt(e.substring(i,i+2),16);let i="";for(let e=0;e<t.length;e++)i+=String.fromCharCode(t[e]);return"undefined"!=typeof btoa?btoa(i):Buffer.from(t).toString("base64")}(yield ue(e,"hex",null==t?void 0:t.signal))}))}function ue(e,t,i){return u(this,void 0,void 0,(function*(){if(null==i?void 0:i.aborted)throw new DOMException("Aborted","AbortError");const t=yield de(ce,32).then((e=>{e.init(256);const t={init:()=>(e.init(256),t),update:i=>(e.update(i),t),digest:t=>e.digest(t),save:()=>e.save(),load:i=>(e.load(i),t),blockSize:64,digestSize:32};return t}));t.init();const r=e.size;for(let o=0;o<r;o+=le){if(null==i?void 0:i.aborted)throw new DOMException("Aborted","AbortError");const n=Math.min(o+le,r),s=e.slice(o,n),a=new Uint8Array(yield s.arrayBuffer());t.update(a)}return t.digest("hex")}))}class Ie{hashFullFile(e,t){return function(e,t){return u(this,void 0,void 0,(function*(){return ue(e,0,null==t?void 0:t.signal)}))}(e,{signal:t})}hashPart(e,t){return ge(e,{signal:t})}dispose(){}}function he(){return new Ie}class Ee{constructor(e,t,i,r=he){this.axios=i,this.hasherFactory=r}initUpload(e,t){return u(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/FileStorage/init",e,{signal:null==t?void 0:t.signal})).data}))}refreshUploadUrls(e,t,i){return u(this,void 0,void 0,(function*(){const r=(null==t?void 0:t.length)?{partNumbers:t}:{},o=yield this.axios.post((e=>`/api/FileStorage/${encodeURIComponent(e)}/refresh`)(e),r,{signal:null==i?void 0:i.signal});return o.data}))}completeUpload(e,t,i){return u(this,void 0,void 0,(function*(){const r={parts:t},o=yield this.axios.post((e=>`/api/FileStorage/${encodeURIComponent(e)}/complete`)(e),r,{signal:null==i?void 0:i.signal});return o.data}))}abortUpload(e){return u(this,void 0,void 0,(function*(){try{const t=new AbortController,i=setTimeout((()=>t.abort()),2e3);try{yield this.axios.delete((e=>`/api/FileStorage/${encodeURIComponent(e)}`)(e),{signal:t.signal})}finally{clearTimeout(i)}}catch(e){}}))}getMetadata(e,t){return u(this,void 0,void 0,(function*(){const i=yield this.axios.get((e=>`/api/FileStorage/${encodeURIComponent(e)}`)(e),{signal:null==t?void 0:t.signal});return i.data}))}softDelete(e,t){return u(this,void 0,void 0,(function*(){yield this.axios.delete((e=>`/api/FileStorage/${encodeURIComponent(e)}/delete`)(e),{signal:null==t?void 0:t.signal})}))}getPreviewUrl(e,t){return u(this,void 0,void 0,(function*(){const i=yield this.axios.get((e=>`/api/FileStorage/${encodeURIComponent(e)}/preview-url`)(e),{signal:null==t?void 0:t.signal});return i.data}))}getDownloadUrl(e,t){return u(this,void 0,void 0,(function*(){const i=yield this.axios.get((e=>`/api/FileStorage/${encodeURIComponent(e)}/download`)(e),{signal:null==t?void 0:t.signal});return i.data}))}uploadFile(e){return u(this,void 0,void 0,(function*(){const{file:t,fileName:i,contentType:r,onProgress:o,signal:n,concurrency:s}=e;Qe(n);const A=Math.min(8,Math.max(1,null!=s?s:6)),d=null!=i?i:t instanceof File?t.name:"file",c=null!=r?r:t instanceof File?t.type:"application/octet-stream",l=this.hasherFactory(),g=function(e,t){if(!t)return{set:(e,t)=>{},flush:()=>{}};const i=new Map;let r=0,o=0,n=!1;const s=()=>{n=!1,o=Date.now();let s=0;for(const e of i.values())s+=e;const a=Math.max(r,Math.min(e,s));r=a,t(a,e)};return{set(e,t){i.set(e,t);const r=Date.now();r-o>=100?s():n||(n=!0,setTimeout(s,100-(r-o)))},flush(){s()}}}(t.size,o);let u;try{const e=yield l.hashFullFile(t,n),i=yield this.initUpload({fileName:d,mimeType:c,size:t.size,sha256:e},{signal:n});if(u=i.uploadId,0===i.urls.length)throw new a("InvalidRequest","init returned no presigned URLs");if(1===i.urls.length&&null===i.partSize){const e=i.checksumValidation?yield l.hashPart(t,n):void 0,r=yield Be({url:i.urls[0],body:t,contentType:c,checksumSHA256:e,signal:n,onProgress:e=>g.set(1,e)});g.flush();const o=e?{partNumber:1,etag:r,checksumSHA256:e}:{partNumber:1,etag:r};return this.completeUpload(i.uploadId,[o],{signal:n})}if(null===i.partSize)throw new a("InvalidRequest","multipart init returned null partSize");const r=yield this.runMultipart({init:i,file:t,contentType:c,concurrency:A,hasher:l,onPartLoaded:(e,t)=>g.set(e,t),signal:n});return g.flush(),this.completeUpload(i.uploadId,r,{signal:n})}catch(e){const t=function(e){if(e instanceof a)return e;if(e instanceof DOMException&&"AbortError"===e.name)return new a("Aborted",e.message,{cause:e});return e}(e);throw u&&this.abortUpload(u),t}finally{l.dispose()}}))}runMultipart(e){return u(this,void 0,void 0,(function*(){const{init:t,file:i,contentType:r,concurrency:o,hasher:n,onPartLoaded:s,signal:A}=e,d=!0===t.checksumValidation,c=t.urls.length,l=new Map;for(let e=1;e<=c;e++)l.set(e,t.urls[e-1]);let g=Date.parse(t.expiresAt);const I=e=>u(this,void 0,void 0,(function*(){if(!l.get(e)){const i=yield this.refreshUploadUrls(t.uploadId,[e],{signal:A});return l.set(e,i.urls[0]),g=Date.parse(i.expiresAt),i.urls[0]}if(Number.isFinite(g)&&g-Date.now()<6e4){const e=[];for(let t=1;t<=c;t++)h.has(t)||e.push(t);if(e.length>0){const i=yield this.refreshUploadUrls(t.uploadId,e,{signal:A});for(let t=0;t<e.length;t++)l.set(e[t],i.urls[t]);g=Date.parse(i.expiresAt)}}return l.get(e)})),h=new Map,E=new Set,B=[];for(let e=1;e<=c;e++)B.push(e);const p=e=>u(this,void 0,void 0,(function*(){const o=(e-1)*t.partSize,c=Math.min(o+t.partSize,i.size),g=i.slice(o,c),u=d?yield n.hashPart(g,A):void 0;let E=0;for(;;){Qe(A);const t=yield I(e);try{const i=yield Be({url:t,body:g,contentType:r,checksumSHA256:u,signal:A,onProgress:t=>s(e,t)});s(e,g.size);const o=u?{partNumber:e,etag:i,checksumSHA256:u}:{partNumber:e,etag:i};return void h.set(e,o)}catch(t){if(t instanceof a&&"Expired"===t.kind){l.delete(e);continue}if(t instanceof a&&("Aborted"===t.kind||"Forbidden"===t.kind))throw t;if(E>=3)throw t;E+=1;const i=ye(E,t);yield fe(i,A)}}}));return new Promise(((e,t)=>{let i=!1;const r=r=>{if(!i)if(i=!0,r)t(r);else{const i=[];for(let e=1;e<=c;e++){const r=h.get(e);if(!r)return void t(new Error(`Missing completed part ${e}`));i.push(r)}e(i)}},n=()=>{if(!i)for(;E.size<o&&B.length>0;){const e=B.shift();E.add(e),p(e).then((()=>{E.delete(e),0===B.length&&0===E.size?r():n()}),(t=>{E.delete(e),r(t)}))}};n()}))}))}}function Be(e){return Qe(e.signal),"undefined"!=typeof XMLHttpRequest?function(e){const{url:t,body:i,contentType:r,checksumSHA256:o,signal:n,onProgress:s}=e;return new Promise(((e,A)=>{if(null==n?void 0:n.aborted)return void A(new a("Aborted","Upload aborted"));null==s||s(0);const d=new XMLHttpRequest;d.open("PUT",t,!0),d.setRequestHeader("Content-Type",r),o&&d.setRequestHeader("x-amz-checksum-sha256",o);const c=()=>d.abort();null==n||n.addEventListener("abort",c,{once:!0});const l=()=>null==n?void 0:n.removeEventListener("abort",c);d.upload.onprogress=e=>{e.lengthComputable&&(null==s||s(e.loaded))},d.onload=()=>{var t;if(l(),d.status>=200&&d.status<300){const r=null!==(t=d.getResponseHeader("ETag"))&&void 0!==t?t:d.getResponseHeader("etag");return r?(null==s||s(i.size),void e(r.replace(/^"|"$/g,""))):void A(new a("CorsOrNetwork","S3 PUT succeeded but ETag was not readable — bucket must set Access-Control-Expose-Headers: ETag"))}A(pe(d.status,d.responseText,d.getResponseHeader("retry-after")))},d.onerror=()=>{l(),A((null==n?void 0:n.aborted)?new a("Aborted","Upload aborted"):new a("CorsOrNetwork","Network or CORS failure during S3 PUT — verify bucket CORS allows PUT + exposes ETag"))},d.onabort=()=>{l(),A(new a("Aborted","Upload aborted"))},d.send(i)}))}(e):function(e){return u(this,void 0,void 0,(function*(){var t;const{url:i,body:r,contentType:o,checksumSHA256:n,signal:s,onProgress:A}=e;null==A||A(0);const d={"Content-Type":o};let c;n&&(d["x-amz-checksum-sha256"]=n);try{c=yield fetch(i,{method:"PUT",body:r,headers:d,signal:s})}catch(e){if(null==s?void 0:s.aborted)throw new a("Aborted","Upload aborted",{cause:e});throw new a("CorsOrNetwork","Network or CORS failure during S3 PUT — verify bucket CORS allows PUT + exposes ETag",{cause:e})}if(!c.ok)throw yield function(e){return u(this,void 0,void 0,(function*(){let t="";try{t=yield e.text()}catch(e){}return pe(e.status,t,e.headers.get("retry-after"))}))}(c);const l=null!==(t=c.headers.get("ETag"))&&void 0!==t?t:c.headers.get("etag");if(!l)throw new a("CorsOrNetwork","S3 PUT succeeded but ETag was not readable — bucket must set Access-Control-Expose-Headers: ETag");return null==A||A(r.size),l.replace(/^"|"$/g,"")}))}(e)}function pe(e,t,i){const r=t.match(/<Code>([^<]+)<\/Code>/),o=null==r?void 0:r[1];if(403===e)return"AccessDenied"===o||"ExpiredToken"===o||/expired/i.test(t)?new a("Expired",`S3 403: ${null!=o?o:"expired"}`):new a("Forbidden",`S3 403: ${null!=o?o:"forbidden"}`);if(400===e)return"BadDigest"===o?new a("BadDigest","S3 reported BadDigest"):new a("InvalidRequest",`S3 400: ${null!=o?o:"invalid"}`);if(404===e)return new a("NotFound","S3 404");if(429===e||e>=500&&e<600){const t=function(e){if(!e)return;const t=Number(e);if(Number.isFinite(t))return t;const i=Date.parse(e);return Number.isFinite(i)?Math.max(0,Math.ceil((i-Date.now())/1e3)):void 0}(i);return new a(429===e?"Throttled":"CorsOrNetwork",`S3 ${e}: ${null!=o?o:"transient"}`,{retryAfter:t})}return new a("InvalidRequest",`S3 ${e}: ${null!=o?o:"unknown"}`)}function ye(e,t){if(t instanceof a&&void 0!==t.retryAfter)return Math.min(1e3*t.retryAfter,3e4);const i=Math.min(500*Math.pow(2,e-1),8e3),r=i*(.5*Math.random()-.25);return Math.max(50,Math.round(i+r))}function fe(e,t){return new Promise(((i,r)=>{const o=setTimeout((()=>{i()}),e),n=()=>{clearTimeout(o),r(new a("Aborted","Aborted while backing off"))};if(t){if(t.aborted)return clearTimeout(o),void r(new a("Aborted","Aborted while backing off"));t.addEventListener("abort",n,{once:!0})}}))}function Qe(e){if(null==e?void 0:e.aborted)throw new a("Aborted","Upload aborted")}class ve{constructor(e){this.token=null,this.refreshToken=null,this.authUser=null,this.listeners=new Set,this.refreshPromise=null,this.isRefreshing=!1,this.STORAGE_KEY="iom-auth-state",this.cleanupCrossTabSync=null,g(e),this.config=e;const t=c(e);this.storage=U(e.tokenStorage,this.STORAGE_KEY),this.loadState(),this.initCrossTabSync(),this.auth=new y(t.certAuth,e.errorHandling||{},e.certificate),this.registry=new f(t.registry,e.errorHandling||{},this.createServiceAxiosInstance(t.registry.baseUrl)),this.node=new b(t.node,e.errorHandling||{},this.createServiceAxiosInstance(t.node.baseUrl),this.registry),this.up=new X(t.auth,e.errorHandling||{}),this.user=new j(t.user,e.errorHandling||{},this.createServiceAxiosInstance(t.user.baseUrl)),this.fileStorage=new Ee(t.fileStorage,e.errorHandling||{},this.createServiceAxiosInstance(t.fileStorage.baseUrl)),this.axiosInstance=this.node.getAxios(),this.ready=this.refreshIfNeededOnStartup()}isAuthenticated(){return!!this.refreshToken}getUser(){return this.authUser}getToken(){return this.token}isAccessTokenExpired(){if(!this.token)return!0;try{const e=1e3*JSON.parse(atob(this.token.split(".")[1])).exp;return Date.now()>=e-6e4}catch(e){return B("Parse access token",e),!0}}getValidToken(){return u(this,void 0,void 0,(function*(){if(!this.token&&!this.refreshToken)return null;if(!this.isAccessTokenExpired())return this.token;if(this.refreshPromise)try{return yield this.refreshPromise}catch(e){return B("In-flight refresh failed",e),null}if(this.refreshToken)try{return yield this.attemptTokenRefresh()}catch(e){return B("Token refresh failed",e),null}return this.logout(),null}))}refreshIfNeededOnStartup(){return u(this,void 0,void 0,(function*(){if(this.refreshToken&&this.isAccessTokenExpired())if(this.refreshPromise)yield this.refreshPromise;else try{yield this.attemptTokenRefresh()}catch(e){B("Startup refresh failed",null),this.logout()}}))}attemptTokenRefresh(){return u(this,void 0,void 0,(function*(){if(this.refreshPromise)return this.refreshPromise;if(!this.refreshToken)throw this.logout(),new Error("No refresh token");return this.isRefreshing=!0,this.notifyListeners(),this.refreshPromise=(()=>u(this,void 0,void 0,(function*(){var e;try{const e=yield this.auth.refreshToken(this.refreshToken);if(!e.accessToken||!e.refreshToken)throw B("Invalid refresh token response",e),new Error("Invalid refresh token response");return this.token=e.accessToken,this.refreshToken=e.refreshToken,this.saveState(),e.accessToken}catch(t){if(403===(null===(e=t.response)||void 0===e?void 0:e.status))throw B("Refresh token expired",null),this.logout(),new Error("Refresh token expired");throw B("Refresh failed",t),t}finally{this.isRefreshing=!1,this.refreshPromise=null,this.notifyListeners()}})))(),this.refreshPromise}))}createServiceAxiosInstance(e){const i=t.create({baseURL:e,timeout:3e4});return i.interceptors.request.use((e=>u(this,void 0,void 0,(function*(){const t=yield this.getValidToken();return t&&(e.headers.Authorization=`Bearer ${t}`),e})))),i.interceptors.response.use((e=>e),(e=>u(this,void 0,void 0,(function*(){var t,r,o,n,s,a,A,d,c,l,g,u;const I=e.config;if(B("Axios response error",{url:null==I?void 0:I.url,status:null===(t=e.response)||void 0===t?void 0:t.status}),401===(null===(r=e.response)||void 0===r?void 0:r.status)&&!I._retry&&!(null===(o=I.url)||void 0===o?void 0:o.includes("/refreshToken"))){I._retry=!0;try{const e=yield this.attemptTokenRefresh();return I.headers.Authorization=`Bearer ${e}`,i(I)}catch(e){B("Axios 401 refresh failed",e),this.logout()}}const h=I._retryCount||0,p=null!==(a=null===(s=null===(n=this.config.errorHandling)||void 0===n?void 0:n.autoRetryNetwork)||void 0===s?void 0:s.maxRetries)&&void 0!==a?a:0;if(p>0&&h<p&&!I._retry&&(!e.response||e.response.status>=500)){I._retryCount=h+1;const e=null!==(c=null===(d=null===(A=this.config.errorHandling)||void 0===A?void 0:A.autoRetryNetwork)||void 0===d?void 0:d.delay)&&void 0!==c?c:1e3,t="exponential"===(null!==(u=null===(g=null===(l=this.config.errorHandling)||void 0===l?void 0:l.autoRetryNetwork)||void 0===g?void 0:g.backoff)&&void 0!==u?u:"exponential")?e*Math.pow(2,h):e*(h+1);return E(`Retrying request (${h+1}/${p}) after ${t}ms`),yield new Promise((e=>setTimeout(e,t))),i(I)}return Promise.reject(e)})))),"undefined"==typeof window&&this.config.certificate&&(i.defaults.httpsAgent=new s.Agent({cert:this.config.certificate.cert,key:this.config.certificate.key,rejectUnauthorized:!0})),i}login(){return u(this,void 0,void 0,(function*(){try{const e=yield this.auth.login();return this.token=e.token,this.refreshToken=e.refreshToken,this.authUser=e.user||null,this.saveState(),E("Login successful"),{success:!0,user:this.authUser||void 0}}catch(e){return B("Login failed",e),{success:!1}}}))}loginWithEmailPassword(e){return u(this,void 0,void 0,(function*(){try{const t=yield this.up.login(e);return this.token=t.token,this.refreshToken=t.refreshToken,this.authUser=t.user||null,this.saveState(),E("Email/password login successful"),{success:!0,user:this.authUser||void 0}}catch(e){return B("Email/password login failed",e),{success:!1}}}))}register(e){return u(this,void 0,void 0,(function*(){try{const t=yield this.up.register(e);return E("Registration successful"),{success:!0,message:t}}catch(e){return B("Registration failed",e),{success:!1}}}))}logout(){E("Logout triggered"),this.token=null,this.refreshToken=null,this.authUser=null,this.refreshPromise=null,this.isRefreshing=!1,this.saveState()}loadState(){const e=this.storage.get();e&&(this.token=e.token,this.refreshToken=e.refreshToken,this.authUser=e.user)}saveState(){const e={token:this.token,refreshToken:this.refreshToken,user:this.authUser};this.storage.set(e),this.notifyListeners()}initCrossTabSync(){"sessionStorage"!==this.config.tokenStorage&&"memory"!==this.config.tokenStorage&&(this.cleanupCrossTabSync=function(e,t){if("undefined"==typeof window)return()=>{};const i=i=>{if(i.key===e){if(!i.newValue)return E("Cross-tab: auth state cleared in another tab"),void t(null);try{const e=JSON.parse(i.newValue);E("Cross-tab: auth state updated in another tab"),t(e)}catch(e){B("Cross-tab: failed to parse storage event",e)}}};return window.addEventListener("storage",i),()=>window.removeEventListener("storage",i)}(this.STORAGE_KEY,(e=>{e?(this.token=e.token,this.refreshToken=e.refreshToken,this.authUser=e.user,this.notifyListeners()):(this.token=null,this.refreshToken=null,this.authUser=null,this.refreshPromise=null,this.isRefreshing=!1,this.notifyListeners())})))}destroy(){var e;null===(e=this.cleanupCrossTabSync)||void 0===e||e.call(this),this.cleanupCrossTabSync=null}notifyListeners(){const e={isAuthenticated:this.isAuthenticated(),user:this.authUser,isRefreshing:this.isRefreshing};this.listeners.forEach((t=>t(e)))}onAuthStateChange(e){return this.listeners.add(e),e({isAuthenticated:this.isAuthenticated(),user:this.authUser,isRefreshing:this.isRefreshing}),()=>this.listeners.delete(e)}getAxios(){return this.axiosInstance}}function Ce(e){return new ve(e)}const Ue=Ce;exports.AuthServiceClient=y,exports.Client=ve,exports.DEFAULT_CERT_PORT=553,exports.DEFAULT_SERVICE_PATHS=A,exports.FileStorageError=a,exports.LocalStorageTokenStorage=Q,exports.MemoryTokenStorage=C,exports.NodeServiceClient=b,exports.RegistryServiceClient=f,exports.SessionStorageTokenStorage=v,exports.UpAuthServiceClient=X,exports.UserServiceClient=j,exports.buildCertAuthBaseUrl=d,exports.configureLogger=e=>{var t,i,r;e&&(I={enabled:null!==(t=e.enabled)&&void 0!==t?t:I.enabled,logLevel:"info"===e.logLevel?"info":"error",logToConsole:null!==(i=e.logToConsole)&&void 0!==i?i:I.logToConsole,logCallback:null!==(r=e.logCallback)&&void 0!==r?r:I.logCallback})},exports.createClient=Ue,exports.createDefaultErrorHandling=function(){return{debug:!1,autoRetryAuth:!0,autoRetryNetwork:{maxRetries:3,delay:1e3,backoff:"exponential"}}},exports.createDefaultServiceConfig=function(e){return{baseUrl:e,timeout:3e4,retries:3,headers:{}}},exports.createTokenStorage=U,exports.initClient=Ce,exports.resolveServiceConfigs=c,exports.validateSDKConfig=g,exports.validateServiceConfig=l;
6
+ */function L(e,t,i,r){return new(i||(i=Promise))((function(t,o){function n(e){try{a(r.next(e))}catch(e){o(e)}}function s(e){try{a(r.throw(e))}catch(e){o(e)}}function a(e){var r;e.done?t(e.value):(r=e.value,r instanceof i?r:new i((function(e){e(r)}))).then(n,s)}a((r=r.apply(e,[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class K{constructor(){this.mutex=Promise.resolve()}lock(){let e=()=>{};return this.mutex=this.mutex.then((()=>new Promise(e))),new Promise((t=>{e=t}))}dispatch(e){return L(this,0,void 0,(function*(){const t=yield this.lock();try{return yield Promise.resolve(e())}finally{t()}}))}}var _;const Z="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,V=null!==(_=Z.Buffer)&&void 0!==_?_:null,Y=Z.TextEncoder?new Z.TextEncoder:null;function W(e,t){return(15&e)+(e>>6|e>>3&8)<<4|(15&t)+(t>>6|t>>3&8)}const $="a".charCodeAt(0)-10,ee="0".charCodeAt(0);function te(e,t,i){let r=0;for(let o=0;o<i;o++){let i=t[o]>>>4;e[r++]=i>9?i+$:i+ee,i=15&t[o],e[r++]=i>9?i+$:i+ee}return String.fromCharCode.apply(null,e)}const ie=null!==V?e=>{if("string"==typeof e){const t=V.from(e,"utf8");return new Uint8Array(t.buffer,t.byteOffset,t.length)}if(V.isBuffer(e))return new Uint8Array(e.buffer,e.byteOffset,e.length);if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw new Error("Invalid data type!")}:e=>{if("string"==typeof e)return Y.encode(e);if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw new Error("Invalid data type!")},re="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",oe=new Uint8Array(256);for(let e=0;e<64;e++)oe[re.charCodeAt(e)]=e;function ne(e){const t=function(e){let t=Math.floor(.75*e.length);const i=e.length;return"="===e[i-1]&&(t-=1,"="===e[i-2]&&(t-=1)),t}(e),i=e.length,r=new Uint8Array(t);let o=0;for(let t=0;t<i;t+=4){const i=oe[e.charCodeAt(t)],n=oe[e.charCodeAt(t+1)],s=oe[e.charCodeAt(t+2)],a=oe[e.charCodeAt(t+3)];r[o]=i<<2|n>>4,o+=1,r[o]=(15&n)<<4|s>>2,o+=1,r[o]=(3&s)<<6|63&a,o+=1}return r}const se=16384,ae=new K,Ae=new Map;function de(e,t){return L(this,0,void 0,(function*(){let i=null,r=null,o=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const n=()=>new DataView(i.exports.memory.buffer).getUint32(i.exports.STATE_SIZE,!0),s=ae.dispatch((()=>L(this,0,void 0,(function*(){if(!Ae.has(e.name)){const t=ne(e.data),i=WebAssembly.compile(t);Ae.set(e.name,i)}const t=yield Ae.get(e.name);i=yield WebAssembly.instantiate(t,{})})))),a=(e=null)=>{o=!0,i.exports.Hash_Init(e)},A=e=>{if(!o)throw new Error("update() called before init()");(e=>{let t=0;for(;t<e.length;){const o=e.subarray(t,t+se);t+=o.length,r.set(o),i.exports.Hash_Update(o.length)}})(ie(e))},d=new Uint8Array(2*t),c=(e,n=null)=>{if(!o)throw new Error("digest() called before init()");return o=!1,i.exports.Hash_Final(n),"binary"===e?r.slice(0,t):te(d,r,t)},l=e=>"string"==typeof e?e.length<4096:e.byteLength<se;let g=l;switch(e.name){case"argon2":case"scrypt":g=()=>!0;break;case"blake2b":case"blake2s":g=(e,t)=>t<=512&&l(e);break;case"blake3":g=(e,t)=>0===t&&l(e);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":g=()=>!1}return yield(()=>L(this,0,void 0,(function*(){i||(yield s);const e=i.exports.Hash_GetBuffer(),t=i.exports.memory.buffer;r=new Uint8Array(t,e,se)})))(),{getMemory:()=>r,writeMemory:(e,t=0)=>{r.set(e,t)},getExports:()=>i.exports,setMemorySize:e=>{i.exports.Hash_SetMemorySize(e);const t=i.exports.Hash_GetBuffer(),o=i.exports.memory.buffer;r=new Uint8Array(o,t,e)},init:a,update:A,digest:c,save:()=>{if(!o)throw new Error("save() can only be called after init() and before digest()");const t=i.exports.Hash_GetState(),r=n(),s=i.exports.memory.buffer,a=new Uint8Array(s,t,r),A=new Uint8Array(4+r);return function(e,t){const i=t.length>>1;for(let r=0;r<i;r++){const i=r<<1;e[r]=W(t.charCodeAt(i),t.charCodeAt(i+1))}}(A,e.hash),A.set(a,4),A},load:t=>{if(!(t instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const r=i.exports.Hash_GetState(),s=n(),a=4+s,A=i.exports.memory.buffer;if(t.length!==a)throw new Error(`Bad state length (expected ${a} bytes, got ${t.length})`);if(!function(e,t){if(e.length!==2*t.length)return!1;for(let i=0;i<t.length;i++){const r=i<<1;if(t[i]!==W(e.charCodeAt(r),e.charCodeAt(r+1)))return!1}return!0}(e.hash,t.subarray(0,4)))throw new Error("This state was written by an incompatible hash implementation");const d=t.subarray(4);new Uint8Array(A,r,s).set(d),o=!0},calculate:(e,o=null,n=null)=>{if(!g(e,o))return a(o),A(e),c("hex",n);const s=ie(e);return r.set(s),i.exports.Hash_Calculate(s.length,o,n),te(d,r,t)},hashLength:t}}))}new K,new K,new K,new K,new K,new K,new K,new K,new K,new K,new K;var ce={name:"sha256",data:"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c2pBx6KerX1qIhkgASADcyACcSABIANxcyABQR53IAFBE3dzIAFBCndzaiAaaiICaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakHRxqk2aiIaIAIgAXMgA3EgAiABcXMgAkEedyACQRN3cyACQQp3c2ogGGoiA2oiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pB59KkoQFqIhggAyACcyABcSADIAJxcyADQR53IANBE3dzIANBCndzaiAUaiIBaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGFldy9AmoiFCABIANzIAJxIAEgA3FzIAFBHncgAUETd3MgAUEKd3NqIBdqIgJqIhMgI2ogJiASaiAiIBFqICUgCWogEyASIBFzcSARc2ogE0EadyATQRV3cyATQQd3c2pBuMLs8AJqIhcgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAZaiIDaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakH827HpBGoiGSADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBpqIgFqIhEgCSATc3EgE3NqIBFBGncgEUEVd3MgEUEHd3NqQZOa4JkFaiIaIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGGoiAmoiEiARIAlzcSAJc2ogEkEadyASQRV3cyASQQd3c2pB1OapqAZqIhggAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAUaiIDaiITaiAoIBJqICQgEWogJyAJaiATIBIgEXNxIBFzaiATQRp3IBNBFXdzIBNBB3dzakG7laizB2oiFCADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBdqIgFqIgkgEyASc3EgEnNqIAlBGncgCUEVd3MgCUEHd3NqQa6Si454aiIXIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGWoiAmoiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pBhdnIk3lqIhkgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAaaiIDaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGh0f+VemoiGiADIAJz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",hash:"8c18dd94"};new K,new K,new K,new K,new K,new K,new K,new K,new K,new K,new K;const le=1048576;function ge(e,t){return u(this,void 0,void 0,(function*(){return function(e){if(e.length%2!=0)throw new Error(`hexToBase64: odd-length hex string (len=${e.length})`);const t=new Uint8Array(e.length/2);for(let i=0;i<e.length;i+=2)t[i/2]=parseInt(e.substring(i,i+2),16);let i="";for(let e=0;e<t.length;e++)i+=String.fromCharCode(t[e]);return"undefined"!=typeof btoa?btoa(i):Buffer.from(t).toString("base64")}(yield ue(e,"hex",null==t?void 0:t.signal))}))}function ue(e,t,i){return u(this,void 0,void 0,(function*(){if(null==i?void 0:i.aborted)throw new DOMException("Aborted","AbortError");const t=yield de(ce,32).then((e=>{e.init(256);const t={init:()=>(e.init(256),t),update:i=>(e.update(i),t),digest:t=>e.digest(t),save:()=>e.save(),load:i=>(e.load(i),t),blockSize:64,digestSize:32};return t}));t.init();const r=e.size;for(let o=0;o<r;o+=le){if(null==i?void 0:i.aborted)throw new DOMException("Aborted","AbortError");const n=Math.min(o+le,r),s=e.slice(o,n),a=new Uint8Array(yield s.arrayBuffer());t.update(a)}return t.digest("hex")}))}class Ie{hashFullFile(e,t){return function(e,t){return u(this,void 0,void 0,(function*(){return ue(e,0,null==t?void 0:t.signal)}))}(e,{signal:t})}hashPart(e,t){return ge(e,{signal:t})}dispose(){}}function he(){return new Ie}class Ee{constructor(e,t,i,r=he){this.axios=i,this.hasherFactory=r}initUpload(e,t){return u(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/FileStorage/init",e,{signal:null==t?void 0:t.signal})).data}))}refreshUploadUrls(e,t,i){return u(this,void 0,void 0,(function*(){const r=(null==t?void 0:t.length)?{partNumbers:t}:{},o=yield this.axios.post((e=>`/api/FileStorage/${encodeURIComponent(e)}/refresh`)(e),r,{signal:null==i?void 0:i.signal});return o.data}))}completeUpload(e,t,i){return u(this,void 0,void 0,(function*(){const r={parts:t},o=yield this.axios.post((e=>`/api/FileStorage/${encodeURIComponent(e)}/complete`)(e),r,{signal:null==i?void 0:i.signal});return o.data}))}abortUpload(e){return u(this,void 0,void 0,(function*(){try{const t=new AbortController,i=setTimeout((()=>t.abort()),2e3);try{yield this.axios.delete((e=>`/api/FileStorage/${encodeURIComponent(e)}`)(e),{signal:t.signal})}finally{clearTimeout(i)}}catch(e){}}))}getMetadata(e,t){return u(this,void 0,void 0,(function*(){const i=yield this.axios.get((e=>`/api/FileStorage/${encodeURIComponent(e)}`)(e),{signal:null==t?void 0:t.signal});return i.data}))}softDelete(e,t){return u(this,void 0,void 0,(function*(){yield this.axios.delete((e=>`/api/FileStorage/${encodeURIComponent(e)}/delete`)(e),{signal:null==t?void 0:t.signal})}))}getPreviewUrl(e,t){return u(this,void 0,void 0,(function*(){const i=yield this.axios.get((e=>`/api/FileStorage/${encodeURIComponent(e)}/preview-url`)(e),{signal:null==t?void 0:t.signal});return i.data}))}getDownloadUrl(e,t){return u(this,void 0,void 0,(function*(){const i=yield this.axios.get((e=>`/api/FileStorage/${encodeURIComponent(e)}/download`)(e),{signal:null==t?void 0:t.signal});return i.data}))}uploadFile(e){return u(this,void 0,void 0,(function*(){const{file:t,fileName:i,contentType:r,onProgress:o,signal:n,concurrency:s}=e;Qe(n);const A=Math.min(8,Math.max(1,null!=s?s:6)),d=null!=i?i:t instanceof File?t.name:"file",c=r&&r.trim()||(t instanceof File?t.type.trim():"")||"application/octet-stream",l=this.hasherFactory(),g=function(e,t){if(!t)return{set:(e,t)=>{},flush:()=>{}};const i=new Map;let r=0,o=0,n=!1;const s=()=>{n=!1,o=Date.now();let s=0;for(const e of i.values())s+=e;const a=Math.max(r,Math.min(e,s));r=a,t(a,e)};return{set(e,t){i.set(e,t);const r=Date.now();r-o>=100?s():n||(n=!0,setTimeout(s,100-(r-o)))},flush(){s()}}}(t.size,o);let u;try{const e=yield l.hashFullFile(t,n),i=yield this.initUpload({fileName:d,mimeType:c,size:t.size,sha256:e},{signal:n});if(u=i.uploadId,0===i.urls.length)throw new a("InvalidRequest","init returned no presigned URLs");if(1===i.urls.length&&null===i.partSize){const e=i.checksumValidation?yield l.hashPart(t,n):void 0,r=yield Be({url:i.urls[0],body:t,contentType:c,checksumSHA256:e,signal:n,onProgress:e=>g.set(1,e)});g.flush();const o=e?{partNumber:1,etag:r,checksumSHA256:e}:{partNumber:1,etag:r};return this.completeUpload(i.uploadId,[o],{signal:n})}if(null===i.partSize)throw new a("InvalidRequest","multipart init returned null partSize");const r=yield this.runMultipart({init:i,file:t,contentType:c,concurrency:A,hasher:l,onPartLoaded:(e,t)=>g.set(e,t),signal:n});return g.flush(),this.completeUpload(i.uploadId,r,{signal:n})}catch(e){const t=function(e){if(e instanceof a)return e;if(e instanceof DOMException&&"AbortError"===e.name)return new a("Aborted",e.message,{cause:e});return e}(e);throw u&&this.abortUpload(u),t}finally{l.dispose()}}))}runMultipart(e){return u(this,void 0,void 0,(function*(){const{init:t,file:i,contentType:r,concurrency:o,hasher:n,onPartLoaded:s,signal:A}=e,d=!0===t.checksumValidation,c=t.urls.length,l=new Map;for(let e=1;e<=c;e++)l.set(e,t.urls[e-1]);let g=Date.parse(t.expiresAt);const I=e=>u(this,void 0,void 0,(function*(){if(!l.get(e)){const i=yield this.refreshUploadUrls(t.uploadId,[e],{signal:A});return l.set(e,i.urls[0]),g=Date.parse(i.expiresAt),i.urls[0]}if(Number.isFinite(g)&&g-Date.now()<6e4){const e=[];for(let t=1;t<=c;t++)h.has(t)||e.push(t);if(e.length>0){const i=yield this.refreshUploadUrls(t.uploadId,e,{signal:A});for(let t=0;t<e.length;t++)l.set(e[t],i.urls[t]);g=Date.parse(i.expiresAt)}}return l.get(e)})),h=new Map,E=new Set,B=[];for(let e=1;e<=c;e++)B.push(e);const p=e=>u(this,void 0,void 0,(function*(){const o=(e-1)*t.partSize,c=Math.min(o+t.partSize,i.size),g=i.slice(o,c),u=d?yield n.hashPart(g,A):void 0;let E=0;for(;;){Qe(A);const t=yield I(e);try{const i=yield Be({url:t,body:g,contentType:r,checksumSHA256:u,signal:A,onProgress:t=>s(e,t)});s(e,g.size);const o=u?{partNumber:e,etag:i,checksumSHA256:u}:{partNumber:e,etag:i};return void h.set(e,o)}catch(t){if(t instanceof a&&"Expired"===t.kind){l.delete(e);continue}if(t instanceof a&&("Aborted"===t.kind||"Forbidden"===t.kind))throw t;if(E>=3)throw t;E+=1;const i=ye(E,t);yield fe(i,A)}}}));return new Promise(((e,t)=>{let i=!1;const r=r=>{if(!i)if(i=!0,r)t(r);else{const i=[];for(let e=1;e<=c;e++){const r=h.get(e);if(!r)return void t(new Error(`Missing completed part ${e}`));i.push(r)}e(i)}},n=()=>{if(!i)for(;E.size<o&&B.length>0;){const e=B.shift();E.add(e),p(e).then((()=>{E.delete(e),0===B.length&&0===E.size?r():n()}),(t=>{E.delete(e),r(t)}))}};n()}))}))}}function Be(e){return Qe(e.signal),"undefined"!=typeof XMLHttpRequest?function(e){const{url:t,body:i,contentType:r,checksumSHA256:o,signal:n,onProgress:s}=e;return new Promise(((e,A)=>{if(null==n?void 0:n.aborted)return void A(new a("Aborted","Upload aborted"));null==s||s(0);const d=new XMLHttpRequest;d.open("PUT",t,!0),d.setRequestHeader("Content-Type",r),o&&d.setRequestHeader("x-amz-checksum-sha256",o);const c=()=>d.abort();null==n||n.addEventListener("abort",c,{once:!0});const l=()=>null==n?void 0:n.removeEventListener("abort",c);d.upload.onprogress=e=>{e.lengthComputable&&(null==s||s(e.loaded))},d.onload=()=>{var t;if(l(),d.status>=200&&d.status<300){const r=null!==(t=d.getResponseHeader("ETag"))&&void 0!==t?t:d.getResponseHeader("etag");return r?(null==s||s(i.size),void e(r.replace(/^"|"$/g,""))):void A(new a("CorsOrNetwork","S3 PUT succeeded but ETag was not readable — bucket must set Access-Control-Expose-Headers: ETag"))}A(pe(d.status,d.responseText,d.getResponseHeader("retry-after")))},d.onerror=()=>{l(),A((null==n?void 0:n.aborted)?new a("Aborted","Upload aborted"):new a("CorsOrNetwork","Network or CORS failure during S3 PUT — verify bucket CORS allows PUT + exposes ETag"))},d.onabort=()=>{l(),A(new a("Aborted","Upload aborted"))},d.send(i)}))}(e):function(e){return u(this,void 0,void 0,(function*(){var t;const{url:i,body:r,contentType:o,checksumSHA256:n,signal:s,onProgress:A}=e;null==A||A(0);const d={"Content-Type":o};let c;n&&(d["x-amz-checksum-sha256"]=n);try{c=yield fetch(i,{method:"PUT",body:r,headers:d,signal:s})}catch(e){if(null==s?void 0:s.aborted)throw new a("Aborted","Upload aborted",{cause:e});throw new a("CorsOrNetwork","Network or CORS failure during S3 PUT — verify bucket CORS allows PUT + exposes ETag",{cause:e})}if(!c.ok)throw yield function(e){return u(this,void 0,void 0,(function*(){let t="";try{t=yield e.text()}catch(e){}return pe(e.status,t,e.headers.get("retry-after"))}))}(c);const l=null!==(t=c.headers.get("ETag"))&&void 0!==t?t:c.headers.get("etag");if(!l)throw new a("CorsOrNetwork","S3 PUT succeeded but ETag was not readable — bucket must set Access-Control-Expose-Headers: ETag");return null==A||A(r.size),l.replace(/^"|"$/g,"")}))}(e)}function pe(e,t,i){const r=t.match(/<Code>([^<]+)<\/Code>/),o=null==r?void 0:r[1];if(403===e)return"AccessDenied"===o||"ExpiredToken"===o||/expired/i.test(t)?new a("Expired",`S3 403: ${null!=o?o:"expired"}`):new a("Forbidden",`S3 403: ${null!=o?o:"forbidden"}`);if(400===e)return"BadDigest"===o?new a("BadDigest","S3 reported BadDigest"):new a("InvalidRequest",`S3 400: ${null!=o?o:"invalid"}`);if(404===e)return new a("NotFound","S3 404");if(429===e||e>=500&&e<600){const t=function(e){if(!e)return;const t=Number(e);if(Number.isFinite(t))return t;const i=Date.parse(e);return Number.isFinite(i)?Math.max(0,Math.ceil((i-Date.now())/1e3)):void 0}(i);return new a(429===e?"Throttled":"CorsOrNetwork",`S3 ${e}: ${null!=o?o:"transient"}`,{retryAfter:t})}return new a("InvalidRequest",`S3 ${e}: ${null!=o?o:"unknown"}`)}function ye(e,t){if(t instanceof a&&void 0!==t.retryAfter)return Math.min(1e3*t.retryAfter,3e4);const i=Math.min(500*Math.pow(2,e-1),8e3),r=i*(.5*Math.random()-.25);return Math.max(50,Math.round(i+r))}function fe(e,t){return new Promise(((i,r)=>{const o=setTimeout((()=>{i()}),e),n=()=>{clearTimeout(o),r(new a("Aborted","Aborted while backing off"))};if(t){if(t.aborted)return clearTimeout(o),void r(new a("Aborted","Aborted while backing off"));t.addEventListener("abort",n,{once:!0})}}))}function Qe(e){if(null==e?void 0:e.aborted)throw new a("Aborted","Upload aborted")}class ve{constructor(e){this.token=null,this.refreshToken=null,this.authUser=null,this.listeners=new Set,this.refreshPromise=null,this.isRefreshing=!1,this.STORAGE_KEY="iom-auth-state",this.cleanupCrossTabSync=null,g(e),this.config=e;const t=c(e);this.storage=U(e.tokenStorage,this.STORAGE_KEY),this.loadState(),this.initCrossTabSync(),this.auth=new y(t.certAuth,e.errorHandling||{},e.certificate),this.registry=new f(t.registry,e.errorHandling||{},this.createServiceAxiosInstance(t.registry.baseUrl)),this.node=new b(t.node,e.errorHandling||{},this.createServiceAxiosInstance(t.node.baseUrl),this.registry),this.up=new X(t.auth,e.errorHandling||{}),this.user=new j(t.user,e.errorHandling||{},this.createServiceAxiosInstance(t.user.baseUrl)),this.fileStorage=new Ee(t.fileStorage,e.errorHandling||{},this.createServiceAxiosInstance(t.fileStorage.baseUrl)),this.axiosInstance=this.node.getAxios(),this.ready=this.refreshIfNeededOnStartup()}isAuthenticated(){return!!this.refreshToken}getUser(){return this.authUser}getToken(){return this.token}isAccessTokenExpired(){if(!this.token)return!0;try{const e=1e3*JSON.parse(atob(this.token.split(".")[1])).exp;return Date.now()>=e-6e4}catch(e){return B("Parse access token",e),!0}}getValidToken(){return u(this,void 0,void 0,(function*(){if(!this.token&&!this.refreshToken)return null;if(!this.isAccessTokenExpired())return this.token;if(this.refreshPromise)try{return yield this.refreshPromise}catch(e){return B("In-flight refresh failed",e),null}if(this.refreshToken)try{return yield this.attemptTokenRefresh()}catch(e){return B("Token refresh failed",e),null}return this.logout(),null}))}refreshIfNeededOnStartup(){return u(this,void 0,void 0,(function*(){if(this.refreshToken&&this.isAccessTokenExpired())if(this.refreshPromise)yield this.refreshPromise;else try{yield this.attemptTokenRefresh()}catch(e){B("Startup refresh failed",null),this.logout()}}))}attemptTokenRefresh(){return u(this,void 0,void 0,(function*(){if(this.refreshPromise)return this.refreshPromise;if(!this.refreshToken)throw this.logout(),new Error("No refresh token");return this.isRefreshing=!0,this.notifyListeners(),this.refreshPromise=(()=>u(this,void 0,void 0,(function*(){var e;try{const e=yield this.auth.refreshToken(this.refreshToken);if(!e.accessToken||!e.refreshToken)throw B("Invalid refresh token response",e),new Error("Invalid refresh token response");return this.token=e.accessToken,this.refreshToken=e.refreshToken,this.saveState(),e.accessToken}catch(t){if(403===(null===(e=t.response)||void 0===e?void 0:e.status))throw B("Refresh token expired",null),this.logout(),new Error("Refresh token expired");throw B("Refresh failed",t),t}finally{this.isRefreshing=!1,this.refreshPromise=null,this.notifyListeners()}})))(),this.refreshPromise}))}createServiceAxiosInstance(e){const i=t.create({baseURL:e,timeout:3e4});return i.interceptors.request.use((e=>u(this,void 0,void 0,(function*(){const t=yield this.getValidToken();return t&&(e.headers.Authorization=`Bearer ${t}`),e})))),i.interceptors.response.use((e=>e),(e=>u(this,void 0,void 0,(function*(){var t,r,o,n,s,a,A,d,c,l,g,u;const I=e.config;if(B("Axios response error",{url:null==I?void 0:I.url,status:null===(t=e.response)||void 0===t?void 0:t.status}),401===(null===(r=e.response)||void 0===r?void 0:r.status)&&!I._retry&&!(null===(o=I.url)||void 0===o?void 0:o.includes("/refreshToken"))){I._retry=!0;try{const e=yield this.attemptTokenRefresh();return I.headers.Authorization=`Bearer ${e}`,i(I)}catch(e){B("Axios 401 refresh failed",e),this.logout()}}const h=I._retryCount||0,p=null!==(a=null===(s=null===(n=this.config.errorHandling)||void 0===n?void 0:n.autoRetryNetwork)||void 0===s?void 0:s.maxRetries)&&void 0!==a?a:0;if(p>0&&h<p&&!I._retry&&(!e.response||e.response.status>=500)){I._retryCount=h+1;const e=null!==(c=null===(d=null===(A=this.config.errorHandling)||void 0===A?void 0:A.autoRetryNetwork)||void 0===d?void 0:d.delay)&&void 0!==c?c:1e3,t="exponential"===(null!==(u=null===(g=null===(l=this.config.errorHandling)||void 0===l?void 0:l.autoRetryNetwork)||void 0===g?void 0:g.backoff)&&void 0!==u?u:"exponential")?e*Math.pow(2,h):e*(h+1);return E(`Retrying request (${h+1}/${p}) after ${t}ms`),yield new Promise((e=>setTimeout(e,t))),i(I)}return Promise.reject(e)})))),"undefined"==typeof window&&this.config.certificate&&(i.defaults.httpsAgent=new s.Agent({cert:this.config.certificate.cert,key:this.config.certificate.key,rejectUnauthorized:!0})),i}login(){return u(this,void 0,void 0,(function*(){try{const e=yield this.auth.login();return this.token=e.token,this.refreshToken=e.refreshToken,this.authUser=e.user||null,this.saveState(),E("Login successful"),{success:!0,user:this.authUser||void 0}}catch(e){return B("Login failed",e),{success:!1}}}))}loginWithEmailPassword(e){return u(this,void 0,void 0,(function*(){try{const t=yield this.up.login(e);return this.token=t.token,this.refreshToken=t.refreshToken,this.authUser=t.user||null,this.saveState(),E("Email/password login successful"),{success:!0,user:this.authUser||void 0}}catch(e){return B("Email/password login failed",e),{success:!1}}}))}register(e){return u(this,void 0,void 0,(function*(){try{const t=yield this.up.register(e);return E("Registration successful"),{success:!0,message:t}}catch(e){return B("Registration failed",e),{success:!1}}}))}logout(){E("Logout triggered"),this.token=null,this.refreshToken=null,this.authUser=null,this.refreshPromise=null,this.isRefreshing=!1,this.saveState()}loadState(){const e=this.storage.get();e&&(this.token=e.token,this.refreshToken=e.refreshToken,this.authUser=e.user)}saveState(){const e={token:this.token,refreshToken:this.refreshToken,user:this.authUser};this.storage.set(e),this.notifyListeners()}initCrossTabSync(){"sessionStorage"!==this.config.tokenStorage&&"memory"!==this.config.tokenStorage&&(this.cleanupCrossTabSync=function(e,t){if("undefined"==typeof window)return()=>{};const i=i=>{if(i.key===e){if(!i.newValue)return E("Cross-tab: auth state cleared in another tab"),void t(null);try{const e=JSON.parse(i.newValue);E("Cross-tab: auth state updated in another tab"),t(e)}catch(e){B("Cross-tab: failed to parse storage event",e)}}};return window.addEventListener("storage",i),()=>window.removeEventListener("storage",i)}(this.STORAGE_KEY,(e=>{e?(this.token=e.token,this.refreshToken=e.refreshToken,this.authUser=e.user,this.notifyListeners()):(this.token=null,this.refreshToken=null,this.authUser=null,this.refreshPromise=null,this.isRefreshing=!1,this.notifyListeners())})))}destroy(){var e;null===(e=this.cleanupCrossTabSync)||void 0===e||e.call(this),this.cleanupCrossTabSync=null}notifyListeners(){const e={isAuthenticated:this.isAuthenticated(),user:this.authUser,isRefreshing:this.isRefreshing};this.listeners.forEach((t=>t(e)))}onAuthStateChange(e){return this.listeners.add(e),e({isAuthenticated:this.isAuthenticated(),user:this.authUser,isRefreshing:this.isRefreshing}),()=>this.listeners.delete(e)}getAxios(){return this.axiosInstance}}function Ce(e){return new ve(e)}const Ue=Ce;exports.AuthServiceClient=y,exports.Client=ve,exports.DEFAULT_CERT_PORT=553,exports.DEFAULT_SERVICE_PATHS=A,exports.FileStorageError=a,exports.LocalStorageTokenStorage=Q,exports.MemoryTokenStorage=C,exports.NodeServiceClient=b,exports.RegistryServiceClient=f,exports.SessionStorageTokenStorage=v,exports.UpAuthServiceClient=X,exports.UserServiceClient=j,exports.buildCertAuthBaseUrl=d,exports.configureLogger=e=>{var t,i,r;e&&(I={enabled:null!==(t=e.enabled)&&void 0!==t?t:I.enabled,logLevel:"info"===e.logLevel?"info":"error",logToConsole:null!==(i=e.logToConsole)&&void 0!==i?i:I.logToConsole,logCallback:null!==(r=e.logCallback)&&void 0!==r?r:I.logCallback})},exports.createClient=Ue,exports.createDefaultErrorHandling=function(){return{debug:!1,autoRetryAuth:!0,autoRetryNetwork:{maxRetries:3,delay:1e3,backoff:"exponential"}}},exports.createDefaultServiceConfig=function(e){return{baseUrl:e,timeout:3e4,retries:3,headers:{}}},exports.createTokenStorage=U,exports.initClient=Ce,exports.resolveServiceConfigs=c,exports.validateSDKConfig=g,exports.validateServiceConfig=l;
7
7
  //# sourceMappingURL=index.js.map