iom-sdk 0.1.18 → 0.2.3

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/client.d.ts CHANGED
@@ -5,6 +5,7 @@ import { RegistryServiceClient } from './services/registry/registry-client';
5
5
  import { NodeServiceClient } from './services/node/node-client';
6
6
  import { UpAuthServiceClient } from './services/up/up-client';
7
7
  import { UserServiceClient } from './services/user/user-client';
8
+ import { FileStorageServiceClient } from './services/fileStorage/file-storage-client';
8
9
  import { AuthResponse, EmailPasswordLoginRequest, EmailPasswordRegisterRequest } from './types';
9
10
  export type AuthChangeListener = (state: {
10
11
  isAuthenticated: boolean;
@@ -26,6 +27,7 @@ export declare class Client {
26
27
  node: NodeServiceClient;
27
28
  up: UpAuthServiceClient;
28
29
  user: UserServiceClient;
30
+ fileStorage: FileStorageServiceClient;
29
31
  private readonly STORAGE_KEY;
30
32
  private storage;
31
33
  private cleanupCrossTabSync;
@@ -63,6 +63,7 @@ export declare const DEFAULT_SERVICE_PATHS: {
63
63
  readonly registry: "/registrar";
64
64
  readonly node: "/node-network";
65
65
  readonly user: "/user";
66
+ readonly fileStorage: "/file-storage";
66
67
  };
67
68
  /** Default port for mTLS certificate authentication */
68
69
  export declare const DEFAULT_CERT_PORT = 553;
@@ -75,6 +76,7 @@ export interface ServiceOverrides {
75
76
  registry?: Partial<ServiceConfig>;
76
77
  node?: Partial<ServiceConfig>;
77
78
  user?: Partial<ServiceConfig>;
79
+ fileStorage?: Partial<ServiceConfig>;
78
80
  }
79
81
  /**
80
82
  * Main SDK configuration interface
@@ -108,6 +110,7 @@ export declare function resolveServiceConfigs(config: SDKConfig): {
108
110
  registry: ServiceConfig;
109
111
  node: ServiceConfig;
110
112
  user: ServiceConfig;
113
+ fileStorage: ServiceConfig;
111
114
  certAuth: ServiceConfig;
112
115
  };
113
116
  /**
package/dist/index.esm.js CHANGED
@@ -1,2 +1,7 @@
1
- import*as e from"https";import t from"axios";import{z as r}from"zod";var i,s;!function(e){e.IS_PARENT_OF="IS_PARENT_OF",e.IS_CHILD_OF="IS_CHILD_OF",e.IS_INPUT_OF="IS_INPUT_OF",e.IS_OUTPUT_OF="IS_OUTPUT_OF",e.IS_SOURCE_TEMPLATE_OF="IS_SOURCE_TEMPLATE_OF",e.IS_TEMPLATE_INSTANCE_OF="IS_TEMPLATE_INSTANCE_OF",e.IS_PROPERTY_OF="IS_PROPERTY_OF",e.HAS_PROPERTY="HAS_PROPERTY",e.IS_VALUE_OF="IS_VALUE_OF",e.HAS_VALUE="HAS_VALUE",e.IS_FILE_OF="IS_FILE_OF",e.HAS_FILE="HAS_FILE",e.HAS_ADDRESS="HAS_ADDRESS",e.IS_ADDRESS_OF="IS_ADDRESS_OF",e.HAS_MATH_FORMULA_CALC="HAS_MATH_FORMULA_CALC",e.IS_MATH_FORMULA_CALC_OF="IS_MATH_FORMULA_CALC_OF"}(i||(i={})),function(e){e.READ="READ",e.GROUP_WRITE="GROUP_WRITE",e.GROUP_WRITE_RECORDS="GROUP_WRITE_RECORDS"}(s||(s={}));const o={auth:"/auth",registry:"/registrar",node:"/node-network",user:"/user"},n=553;function a(e,t=553){const r=new URL(e);return r.port=String(t),r.origin+r.pathname.replace(/\/$/,"")}function u(e){var t,r,i,s,n,u,l,d,c,h,f,p,v,g,y,U,b;const m=(null===(r=null===(t=e.services)||void 0===t?void 0:t.auth)||void 0===r?void 0:r.baseUrl)||`${e.baseUrl.replace(/\/$/,"")}${o.auth}`,S=(null===(s=null===(i=e.services)||void 0===i?void 0:i.registry)||void 0===s?void 0:s.baseUrl)||`${e.baseUrl.replace(/\/$/,"")}${o.registry}`,k=(null===(u=null===(n=e.services)||void 0===n?void 0:n.node)||void 0===u?void 0:u.baseUrl)||`${e.baseUrl.replace(/\/$/,"")}${o.node}`,T=(null===(d=null===(l=e.services)||void 0===l?void 0:l.user)||void 0===d?void 0:d.baseUrl)||`${e.baseUrl.replace(/\/$/,"")}${o.user}`,w=Object.assign(Object.assign({baseUrl:m},null===(c=e.services)||void 0===c?void 0:c.auth),(null===(h=e.services)||void 0===h?void 0:h.auth)?{baseUrl:m}:{}),R=Object.assign(Object.assign({baseUrl:S},null===(f=e.services)||void 0===f?void 0:f.registry),(null===(p=e.services)||void 0===p?void 0:p.registry)?{baseUrl:S}:{}),O=Object.assign(Object.assign({baseUrl:k},null===(v=e.services)||void 0===v?void 0:v.node),(null===(g=e.services)||void 0===g?void 0:g.node)?{baseUrl:k}:{}),I=Object.assign(Object.assign({baseUrl:T},null===(y=e.services)||void 0===y?void 0:y.user),(null===(U=e.services)||void 0===U?void 0:U.user)?{baseUrl:T}:{}),x=a(m,null!==(b=e.certPort)&&void 0!==b?b:553);return{auth:w,registry:R,node:O,user:I,certAuth:Object.assign(Object.assign({},w),{baseUrl:x,refreshBaseUrl:w.baseUrl})}}function l(e,t){if(!e.baseUrl)throw new Error(`${t} service baseUrl is required`);try{new URL(e.baseUrl)}catch(e){throw new Error(`${t} service baseUrl must be a valid URL`)}if(void 0!==e.timeout&&(e.timeout<0||e.timeout>3e5))throw new Error(`${t} service timeout must be between 0 and 300000ms`);if(void 0!==e.retries&&(e.retries<0||e.retries>10))throw new Error(`${t} service retries must be between 0 and 10`)}function d(e){var t,r,i,s,o;if(!e.baseUrl)throw new Error("baseUrl is required");try{new URL(e.baseUrl)}catch(e){throw new Error("baseUrl must be a valid URL")}if(e.certificate&&(!e.certificate.cert||!e.certificate.key))throw new Error("Certificate must include both cert and key when provided");const n=e.services;if((null===(t=null==n?void 0:n.auth)||void 0===t?void 0:t.baseUrl)&&l({baseUrl:n.auth.baseUrl},"auth"),(null===(r=null==n?void 0:n.registry)||void 0===r?void 0:r.baseUrl)&&l({baseUrl:n.registry.baseUrl},"registry"),(null===(i=null==n?void 0:n.node)||void 0===i?void 0:i.baseUrl)&&l({baseUrl:n.node.baseUrl},"node"),(null===(s=null==n?void 0:n.user)||void 0===s?void 0:s.baseUrl)&&l({baseUrl:n.user.baseUrl},"user"),e.tokenStorage&&!["localStorage","sessionStorage","memory"].includes(e.tokenStorage))throw new Error("tokenStorage must be one of: localStorage, sessionStorage, memory");if(null===(o=e.errorHandling)||void 0===o?void 0:o.autoRetryNetwork){const{maxRetries:t,delay:r,backoff:i}=e.errorHandling.autoRetryNetwork;if(t<0||t>10)throw new Error("autoRetryNetwork.maxRetries must be between 0 and 10");if(void 0!==r&&(r<0||r>6e4))throw new Error("autoRetryNetwork.delay must be between 0 and 60000ms");if(i&&!["linear","exponential"].includes(i))throw new Error("autoRetryNetwork.backoff must be either linear or exponential")}}function c(e){return{baseUrl:e,timeout:3e4,retries:3,headers:{}}}function h(){return{debug:!1,autoRetryAuth:!0,autoRetryNetwork:{maxRetries:3,delay:1e3,backoff:"exponential"}}}function f(e,t,r,i){return new(r||(r=Promise))((function(s,o){function n(e){try{u(i.next(e))}catch(e){o(e)}}function a(e){try{u(i.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?s(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(n,a)}u((i=i.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;let p={enabled:!1,logLevel:"error",logToConsole:!0,logCallback:null};const v=e=>{var t,r,i;e&&(p={enabled:null!==(t=e.enabled)&&void 0!==t?t:p.enabled,logLevel:"info"===e.logLevel?"info":"error",logToConsole:null!==(r=e.logToConsole)&&void 0!==r?r:p.logToConsole,logCallback:null!==(i=e.logCallback)&&void 0!==i?i:p.logCallback})},g=(e,t,r)=>{if(!p.enabled)return;if("error"===p.logLevel&&"error"!==e)return;const i=`[IoM Client] ${t}`;p.logToConsole&&("error"===e?console.error(i,r||""):console.log(i,r||"")),p.logCallback&&p.logCallback(i,r)},y=(e,t)=>{p.enabled&&g("info",e,t)},U=(e,t)=>{p.enabled&&g("error",`Error in ${e}`,t)};function b(e){let t=3600;try{const r=e.split(".");if(3===r.length){const e=r[1].replace(/-/g,"+").replace(/_/g,"/"),i=e+"=".repeat((4-e.length%4)%4),s="undefined"!=typeof atob?atob(i):Buffer.from(i,"base64").toString("utf-8"),o=JSON.parse(s);o.exp&&o.iat&&(t=o.exp-o.iat)}}catch(e){U("Failed to decode JWT payload for expiry calculation",e)}return t}class m{constructor(r,i,s){const o={baseURL:r.baseUrl,timeout:r.timeout||3e4};s&&(o.httpsAgent=new e.Agent({cert:s.cert,key:s.key,rejectUnauthorized:!0})),this.axiosInstance=t.create(o);const n={baseURL:r.refreshBaseUrl||r.baseUrl,timeout:r.timeout||3e4};this.refreshAxiosInstance=t.create(n)}login(){return f(this,void 0,void 0,(function*(){const e=yield this.axiosInstance.get("/api/UserAuthX509Certificate/login"),{accessToken:t,refreshToken:r,user:i}=e.data,s=t.trim();return{token:s,expiresIn:b(s),tokenType:"Bearer",refreshToken:r,user:i}}))}refreshToken(e){return f(this,void 0,void 0,(function*(){const t={refreshToken:e};return(yield this.refreshAxiosInstance.post("/api/UserAuthJwt/refreshToken",t)).data}))}}class S{constructor(e,t,r){this.axios=r}getOwnedUUIDs(){return f(this,void 0,void 0,(function*(){return(yield this.axios.get("/api/UUID/own")).data}))}createUUID(){return f(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUID")).data}))}getUUIDRecord(e){return f(this,void 0,void 0,(function*(){return(yield this.axios.get(`/api/UUID/${e}`)).data}))}updateUUIDRecordMeta(e,t){return f(this,void 0,void 0,(function*(){return(yield this.axios.put("/api/UUID/UUIDRecordMeta",t)).data}))}authorizeUUIDRecord(e){return f(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUID/authorize",{userUUID:e.userUUID,resourceId:e.resourceId})).data}))}}class k{constructor(e){this.key=e}get(){if("undefined"==typeof window)return null;try{const e=localStorage.getItem(this.key);return e?JSON.parse(e):null}catch(e){return localStorage.removeItem(this.key),null}}set(e){"undefined"!=typeof window&&(e.refreshToken?localStorage.setItem(this.key,JSON.stringify(e)):localStorage.removeItem(this.key))}clear(){"undefined"!=typeof window&&localStorage.removeItem(this.key)}}class T{constructor(e){this.key=e}get(){if("undefined"==typeof window)return null;try{const e=sessionStorage.getItem(this.key);return e?JSON.parse(e):null}catch(e){return sessionStorage.removeItem(this.key),null}}set(e){"undefined"!=typeof window&&(e.refreshToken?sessionStorage.setItem(this.key,JSON.stringify(e)):sessionStorage.removeItem(this.key))}clear(){"undefined"!=typeof window&&sessionStorage.removeItem(this.key)}}class w{constructor(){this.state=null}get(){return this.state}set(e){this.state=e.refreshToken?e:null}clear(){this.state=null}}function R(e,t){switch(e){case"sessionStorage":return new T(t);case"memory":return new w;default:return new k(t)}}class O extends Error{constructor(e){super("Validation Error"),this.name="ValidationError",this.errors=function(e){const t={};for(const r of e.errors){const e=r.path.join(".")||"general";t[e]||(t[e]=[]),t[e].push(r.message)}return t}(e)}}function I(e,t){try{return e.parse(t)}catch(e){if(e instanceof r.ZodError){const t=new O(e);throw U("validation",{errors:t.errors}),t}throw e}}class x{constructor(e,t,r,i){this.errorHandling=t,this.axios=r,this.registryClient=i}getAxios(){return this.axios}request(e){return f(this,void 0,void 0,(function*(){const t=yield this.axios.request(e);return{data:t.data,status:t.status,statusText:t.statusText,headers:t.headers}}))}getObjects(e,t){return f(this,void 0,void 0,(function*(){return(yield this.axios.get("/api/UUObject",{params:e,signal:null==t?void 0:t.signal})).data}))}createOrUpdateObject(e){return f(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUObject",e)).data}))}softDeleteObject(e){return f(this,void 0,void 0,(function*(){return(yield this.axios.delete(`/api/UUObject/${e}`)).data}))}getProperties(e,t){return f(this,void 0,void 0,(function*(){return(yield this.axios.get("/api/UUProperty",{params:e,signal:null==t?void 0:t.signal})).data}))}createOrUpdateProperty(e){return f(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUProperty",e)).data}))}createProperty(e){return f(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUProperty",e)).data}))}softDeleteProperty(e){return f(this,void 0,void 0,(function*(){return(yield this.axios.delete(`/api/UUProperty/${e}`)).data}))}getPropertyValues(e,t){return f(this,void 0,void 0,(function*(){return(yield this.axios.get("/api/UUPropertyValue",{params:e,signal:null==t?void 0:t.signal})).data}))}createOrUpdatePropertyValue(e){return f(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUPropertyValue",e)).data}))}createPropertyValue(e){return f(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUPropertyValue",e)).data}))}softDeletePropertyValue(e){return f(this,void 0,void 0,(function*(){return(yield this.axios.delete(`/api/UUPropertyValue/${e}`)).data}))}searchStatements(e,t){return f(this,void 0,void 0,(function*(){const s=(e=>{if(!e)return;const t={};if(e.uuStatementFind){const s={subject:e.uuStatementFind.subject?I(r.string().uuid(),e.uuStatementFind.subject):void 0,predicate:e.uuStatementFind.predicate?I(r.nativeEnum(i),e.uuStatementFind.predicate):void 0,object:e.uuStatementFind.object?I(r.string().uuid(),e.uuStatementFind.object):void 0,softDeleted:I(r.boolean().optional(),e.uuStatementFind.softDeleted)};t.uuStatementFind=Object.fromEntries(Object.entries(s).filter((([e,t])=>void 0!==t)))}return e.accessFind&&(t.accessFind={readDefaultGroup:I(r.boolean().optional(),e.accessFind.readDefaultGroup),readOwnGroups:I(r.boolean().optional(),e.accessFind.readOwnGroups),readPublicGroups:I(r.boolean().optional(),e.accessFind.readPublicGroups),readUserSharedGroups:I(r.boolean().optional(),e.accessFind.readUserSharedGroups),groupUUIDList:e.accessFind.groupUUIDList?I(r.array(r.string()),e.accessFind.groupUUIDList):void 0}),Object.keys(t).length>0?t:void 0})(e);return(yield this.axios.post("/api/UUStatements/find",null!=s?s:{},{signal:null==t?void 0:t.signal})).data}))}createStatements(e){return f(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUStatements",e)).data}))}createStatement(e){return f(this,void 0,void 0,(function*(){return(yield this.createStatements([e]))[0]}))}softDeleteStatement(e,t,r){return f(this,void 0,void 0,(function*(){return(yield this.axios.delete("/api/UUStatements",{data:{subject:e,predicate:t,object:r}})).data}))}getFiles(e,t){return f(this,void 0,void 0,(function*(){return(yield this.axios.get("/api/UUFile",{params:e,signal:null==t?void 0:t.signal})).data}))}createOrUpdateFile(e){return f(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUFile",e)).data}))}getFile(e,t){return f(this,void 0,void 0,(function*(){return(yield this.axios.get(`/api/UUFile/${e}`,{signal:null==t?void 0:t.signal})).data}))}findFiles(e,t){return f(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUFile/find",null!=e?e:{},{signal:null==t?void 0:t.signal})).data}))}getFileContent(e,t){return f(this,void 0,void 0,(function*(){var r,i;return null!==(i=null===(r=(yield this.findFiles({nodeFind:{uuid:e,softDeleted:!1},includeFileContentBase64:!0},t))[0])||void 0===r?void 0:r.fileContentBase64)&&void 0!==i?i:null}))}softDeleteFile(e){return f(this,void 0,void 0,(function*(){return(yield this.axios.delete(`/api/UUFile/${e}`)).data}))}getAddresses(e,t){return f(this,void 0,void 0,(function*(){return(yield this.axios.get("/api/UUAddress",{params:e,signal:null==t?void 0:t.signal})).data}))}createOrUpdateAddress(e){return f(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUAddress",e)).data}))}createAddress(e){return f(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUAddress",e)).data}))}softDeleteAddress(e){return f(this,void 0,void 0,(function*(){return(yield this.axios.delete(`/api/UUAddress/${e}`)).data}))}searchAggregates(e,t){return f(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/Aggregate/find",e,{signal:null==t?void 0:t.signal})).data}))}createAggregates(e){return f(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/Aggregate",e)).data}))}importAggregates(e){return f(this,void 0,void 0,(function*(){const t=yield this.axios.post("/api/Aggregate/Import",e);return{data:void 0,status:t.status,statusText:t.statusText,headers:t.headers}}))}uploadFileByReference(e){return f(this,void 0,void 0,(function*(){if(!this.registryClient)throw new Error("Registry client not available for UUID operations");try{const t=(yield this.registryClient.createUUID()).uuid,r={uuid:t,fileReference:e.fileReference,fileName:e.fileName,label:e.label,contentType:e.contentType,size:e.size},s=yield this.createOrUpdateFile(r);return yield this.createStatement({subject:e.uuidToAttach,predicate:i.HAS_FILE,object:t}),{data:s,status:200,statusText:"OK"}}catch(e){return{data:null,status:e.status||500,statusText:e.message||"Error uploading file by reference"}}}))}uploadFileDirect(e){return f(this,void 0,void 0,(function*(){if(!this.registryClient)throw new Error("Registry client not available for UUID operations");try{const t=(yield this.registryClient.createUUID()).uuid,r=yield function(e){return f(this,void 0,void 0,(function*(){if("undefined"!=typeof FileReader)return new Promise(((t,r)=>{const i=new FileReader;i.onload=()=>{const e=i.result;if("string"!=typeof e)return void r(new Error("FileReader returned non-string result"));const s=e.indexOf(",");t(s>=0?e.slice(s+1):e)},i.onerror=()=>{var e;return r(null!==(e=i.error)&&void 0!==e?e:new Error("FileReader error"))},i.readAsDataURL(e)}));const t=yield e.arrayBuffer();return Buffer.from(t).toString("base64")}))}(e.file),s="undefined"!=typeof File&&e.file instanceof File?e.file.name:void 0,o=e.file.type||void 0,n=yield this.createOrUpdateFile({uuid:t,fileName:s,contentType:o,label:e.label,fileContentBase64:r});return yield this.createStatement({subject:e.uuidToAttach,predicate:i.HAS_FILE,object:t}),{data:n,status:200,statusText:"OK"}}catch(e){return{data:null,status:e.status||500,statusText:e.message||"Error uploading file binary"}}}))}addPropertyToObject(e,t){return f(this,void 0,void 0,(function*(){if(!this.registryClient)throw new Error("Registry client not available");const s=r.string().uuid().parse(e);let o;if(t.uuid)o=t;else{const{uuid:e}=yield this.registryClient.createUUID();o=Object.assign(Object.assign({},t),{uuid:e})}const n=yield this.createProperty(o);return yield this.createStatement({subject:s,predicate:i.HAS_PROPERTY,object:n.uuid}),yield this.createStatement({subject:n.uuid,predicate:i.IS_PROPERTY_OF,object:s}),{data:n,status:200,statusText:"OK"}}))}getPropertiesForObject(e,t){return f(this,void 0,void 0,(function*(){const r=yield this.searchStatements({uuStatementFind:{subject:e,predicate:i.HAS_PROPERTY,softDeleted:null==t?void 0:t.softDeleted}});if(!r.length)return{data:[],status:200,statusText:"OK"};const s=[];for(const e of r)try{const r=yield this.getProperties(Object.assign({uuid:e.object},t));r[0]&&s.push(r[0])}catch(e){}return{data:s,status:200,statusText:"OK"}}))}setValueForProperty(e,t){return f(this,void 0,void 0,(function*(){if(!this.registryClient)throw new Error("Registry client not available");const s=r.string().uuid().parse(e);let o;if(t.uuid)o=t;else{const{uuid:e}=yield this.registryClient.createUUID();o=Object.assign(Object.assign({},t),{uuid:e})}const n=yield this.createPropertyValue(o);return yield this.createStatement({subject:s,predicate:i.HAS_VALUE,object:n.uuid}),yield this.createStatement({subject:n.uuid,predicate:i.IS_VALUE_OF,object:s}),{data:n,status:200,statusText:"OK"}}))}getValuesForProperty(e,t){return f(this,void 0,void 0,(function*(){try{const s=r.string().uuid().parse(e),o=yield this.searchStatements({uuStatementFind:{subject:s,predicate:i.HAS_VALUE,softDeleted:null==t?void 0:t.softDeleted}});if(!o||0===o.length)return{data:[],status:200,statusText:"OK"};const n=[];for(const e of o)try{const r=(yield this.getPropertyValues(Object.assign({uuid:e.object},t))).find((t=>t.uuid===e.object));r&&n.push(r)}catch(e){}return{data:n,status:200,statusText:"OK"}}catch(e){return{data:[],status:e.status||500,statusText:e.message||"Error getting values for property"}}}))}listGroups(e,t){return f(this,void 0,void 0,(function*(){var r,i;return(yield this.axios.get("/api/access/groups",{params:{page:null!==(r=null==e?void 0:e.page)&&void 0!==r?r:0,size:null!==(i=null==e?void 0:e.size)&&void 0!==i?i:20},signal:null==t?void 0:t.signal})).data}))}createGroup(e){return f(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/access/groups",e)).data}))}getGroup(e,t){return f(this,void 0,void 0,(function*(){return(yield this.axios.get(`/api/access/groups/${e}`,{signal:null==t?void 0:t.signal})).data}))}listGroupRecords(e,t){return f(this,void 0,void 0,(function*(){return(yield this.axios.get(`/api/access/groups/${e}/records`,{signal:null==t?void 0:t.signal})).data}))}addGroupRecords(e,t){return f(this,void 0,void 0,(function*(){yield this.axios.post(`/api/access/groups/${e}/records`,t)}))}createOrUpdateMathFormula(e){return f(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUMathFormula",e)).data}))}searchMathFormulas(e,t){return f(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUMathFormula/find",null!=e?e:{},{signal:null==t?void 0:t.signal})).data}))}softDeleteMathFormula(e){return f(this,void 0,void 0,(function*(){return(yield this.axios.delete(`/api/UUMathFormula/${e}`)).data}))}createOrUpdateMathFormulaCalc(e){return f(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUMathFormulaCalc",e)).data}))}searchMathFormulaCalcs(e,t){return f(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUMathFormulaCalc/find",null!=e?e:{},{signal:null==t?void 0:t.signal})).data}))}softDeleteMathFormulaCalc(e){return f(this,void 0,void 0,(function*(){return(yield this.axios.delete(`/api/UUMathFormulaCalc/${e}`)).data}))}updateErrorHandling(e){this.errorHandling=e}}const A=r.string().uuid({message:"Invalid UUID format. Must be a valid UUID string."}),E=r.string().refine((e=>void 0===e||e.trim().length>0),{message:"Value cannot be empty or contain only whitespace"}),_=r.object({uuid:A,name:E.optional(),abbreviation:r.string().optional(),version:r.string().optional(),description:r.string().optional(),isTemplate:r.boolean().optional()}),F=r.object({value:r.string().optional()}),P=r.object({key:r.string().optional(),values:r.array(F).optional()});r.object({subject:A,predicate:r.nativeEnum(i,{errorMap:(e,t)=>({message:`Invalid predicate value. Must be one of: ${Object.values(i).join(", ")}`})}),object:A,properties:r.array(P).optional()});const j=r.object({uuid:A,key:r.string().min(1,"Property key is required"),version:r.string().optional(),label:r.string().optional(),description:r.string().optional(),type:r.string().optional(),inputType:r.string().optional(),formula:r.string().optional(),inputOrderPosition:r.number().optional(),processingOrderPosition:r.number().optional(),viewOrderPosition:r.number().optional()}),D=r.object({uuid:A,value:r.string().optional(),valueTypeCast:r.string().optional(),sourceType:r.string().optional()}),C=r.object({uuid:A,fileName:r.string().optional(),fileReference:r.string().min(1,"File reference is required"),label:r.string().optional()}),L=r.object({uuid:A,fullAddress:r.string().optional(),street:r.string().optional(),houseNumber:r.string().optional(),city:r.string().optional(),postalCode:r.string().optional(),country:r.string().optional(),state:r.string().optional(),district:r.string().optional()});r.object({subject:A.optional(),predicate:r.nativeEnum(i).optional(),object:A.optional()}).refine((e=>e.subject||e.predicate||e.object),{message:"At least one search parameter (subject, predicate, or object) must be provided"}),r.object({object:_,properties:r.array(r.object({property:j,value:D.optional()})),children:r.array(_).optional(),files:r.array(C).optional()});const $=r.object({file:r.object({fileName:r.string().min(1,"Filename is required"),fileReference:r.string().min(1,"File reference is required"),label:r.string().optional()})}),H=r.object({value:D.omit({uuid:!0}),files:r.array($).optional()}),N=r.object({property:j.omit({uuid:!0}).extend({key:r.string().min(1,"Property key is required")}),values:r.array(H).optional(),files:r.array($).optional()});r.object({object:_.omit({uuid:!0}),parents:r.array(A).optional(),files:r.array($).optional(),properties:r.array(N).optional(),address:L.omit({uuid:!0}).optional()});const M=r.string().email("Invalid email format").min(1,"Email is required"),V=r.string().min(8,"Password must be at least 8 characters").regex(/[a-z]/,"Password must contain at least one lowercase letter").regex(/[A-Z]/,"Password must contain at least one uppercase letter").regex(/[0-9]/,"Password must contain at least one number").regex(/[^a-zA-Z0-9]/,"Password must contain at least one special character");function G(e,t){M.parse(e),V.parse(t)}r.object({ownerUserUUID:r.string().optional(),groupUUID:r.string().optional(),name:r.string().min(1,"Group name is required"),usersShare:r.array(r.object({userUUID:A.optional(),permissions:r.array(r.enum(["READ","GROUP_WRITE","GROUP_WRITE_RECORDS"])).min(1,"At least one permission is required")})).optional(),publicShare:r.object({permissions:r.array(r.enum(["READ","GROUP_WRITE","GROUP_WRITE_RECORDS"])).min(1,"At least one permission is required")}).optional(),default:r.boolean().optional()}),r.object({recordUUIDs:r.array(A).min(1,"At least one record UUID is required")});class q{constructor(e,r){this.axiosInstance=t.create({baseURL:e.baseUrl,timeout:e.timeout||3e4})}register(e){return f(this,void 0,void 0,(function*(){G(e.email,e.password);return(yield this.axiosInstance.post("/api/UserAuthUP/register",{username:e.email,password:e.password})).data}))}login(e){return f(this,void 0,void 0,(function*(){G(e.email,e.password);const t=yield this.axiosInstance.post("/api/UserAuthUP/login",{username:e.email,password:e.password}),{accessToken:r,refreshToken:i,user:s}=t.data,o=r.trim();return{token:o,expiresIn:b(o),tokenType:"Bearer",refreshToken:i,user:s}}))}}class B{constructor(e,t,r){this.axiosInstance=r}getCurrentUser(e){return f(this,void 0,void 0,(function*(){return(yield this.axiosInstance.get("/api/User",{signal:null==e?void 0:e.signal})).data}))}findByIdentifier(e,t){return f(this,void 0,void 0,(function*(){var r;return null!==(r=(yield this.axiosInstance.get("/api/User/find",{params:{identifier:e},signal:null==t?void 0:t.signal})).data)&&void 0!==r?r:[]}))}}class z{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,d(e),this.config=e;const t=u(e);this.storage=R(e.tokenStorage,this.STORAGE_KEY),this.loadState(),this.initCrossTabSync(),this.auth=new m(t.certAuth,e.errorHandling||{},e.certificate),this.registry=new S(t.registry,e.errorHandling||{},this.createServiceAxiosInstance(t.registry.baseUrl)),this.node=new x(t.node,e.errorHandling||{},this.createServiceAxiosInstance(t.node.baseUrl),this.registry),this.up=new q(t.auth,e.errorHandling||{}),this.user=new B(t.user,e.errorHandling||{},this.createServiceAxiosInstance(t.user.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 U("Parse access token",e),!0}}getValidToken(){return f(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 U("In-flight refresh failed",e),null}if(this.refreshToken)try{return yield this.attemptTokenRefresh()}catch(e){return U("Token refresh failed",e),null}return this.logout(),null}))}refreshIfNeededOnStartup(){return f(this,void 0,void 0,(function*(){if(this.refreshToken&&this.isAccessTokenExpired())if(this.refreshPromise)yield this.refreshPromise;else try{yield this.attemptTokenRefresh()}catch(e){U("Startup refresh failed",null),this.logout()}}))}attemptTokenRefresh(){return f(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=(()=>f(this,void 0,void 0,(function*(){var e;try{const e=yield this.auth.refreshToken(this.refreshToken);if(!e.accessToken||!e.refreshToken)throw U("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 U("Refresh token expired",null),this.logout(),new Error("Refresh token expired");throw U("Refresh failed",t),t}finally{this.isRefreshing=!1,this.refreshPromise=null,this.notifyListeners()}})))(),this.refreshPromise}))}createServiceAxiosInstance(r){const i=t.create({baseURL:r,timeout:3e4});return i.interceptors.request.use((e=>f(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=>f(this,void 0,void 0,(function*(){var t,r,s,o,n,a,u,l,d,c,h,f;const p=e.config;if(U("Axios response error",{url:null==p?void 0:p.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)&&!p._retry&&!(null===(s=p.url)||void 0===s?void 0:s.includes("/refreshToken"))){p._retry=!0;try{const e=yield this.attemptTokenRefresh();return p.headers.Authorization=`Bearer ${e}`,i(p)}catch(e){U("Axios 401 refresh failed",e),this.logout()}}const v=p._retryCount||0,g=null!==(a=null===(n=null===(o=this.config.errorHandling)||void 0===o?void 0:o.autoRetryNetwork)||void 0===n?void 0:n.maxRetries)&&void 0!==a?a:0;if(g>0&&v<g&&!p._retry&&(!e.response||e.response.status>=500)){p._retryCount=v+1;const e=null!==(d=null===(l=null===(u=this.config.errorHandling)||void 0===u?void 0:u.autoRetryNetwork)||void 0===l?void 0:l.delay)&&void 0!==d?d:1e3,t="exponential"===(null!==(f=null===(h=null===(c=this.config.errorHandling)||void 0===c?void 0:c.autoRetryNetwork)||void 0===h?void 0:h.backoff)&&void 0!==f?f:"exponential")?e*Math.pow(2,v):e*(v+1);return y(`Retrying request (${v+1}/${g}) after ${t}ms`),yield new Promise((e=>setTimeout(e,t))),i(p)}return Promise.reject(e)})))),"undefined"==typeof window&&this.config.certificate&&(i.defaults.httpsAgent=new e.Agent({cert:this.config.certificate.cert,key:this.config.certificate.key,rejectUnauthorized:!0})),i}login(){return f(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(),y("Login successful"),{success:!0,user:this.authUser||void 0}}catch(e){return U("Login failed",e),{success:!1}}}))}loginWithEmailPassword(e){return f(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(),y("Email/password login successful"),{success:!0,user:this.authUser||void 0}}catch(e){return U("Email/password login failed",e),{success:!1}}}))}register(e){return f(this,void 0,void 0,(function*(){try{const t=yield this.up.register(e);return y("Registration successful"),{success:!0,message:t}}catch(e){return U("Registration failed",e),{success:!1}}}))}logout(){y("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 r=r=>{if(r.key===e){if(!r.newValue)return y("Cross-tab: auth state cleared in another tab"),void t(null);try{const e=JSON.parse(r.newValue);y("Cross-tab: auth state updated in another tab"),t(e)}catch(e){U("Cross-tab: failed to parse storage event",e)}}};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}(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 K(e){return new z(e)}const W=K;export{m as AuthServiceClient,z as Client,n as DEFAULT_CERT_PORT,o as DEFAULT_SERVICE_PATHS,s as GroupPermission,k as LocalStorageTokenStorage,w as MemoryTokenStorage,x as NodeServiceClient,i as Predicate,S as RegistryServiceClient,T as SessionStorageTokenStorage,q as UpAuthServiceClient,B as UserServiceClient,a as buildCertAuthBaseUrl,v as configureLogger,W as createClient,h as createDefaultErrorHandling,c as createDefaultServiceConfig,R as createTokenStorage,K as initClient,u as resolveServiceConfigs,d as validateSDKConfig,l as validateServiceConfig};
1
+ import*as e from"https";import t from"axios";import{z as i}from"zod";var r,n;!function(e){e.IS_PARENT_OF="IS_PARENT_OF",e.IS_CHILD_OF="IS_CHILD_OF",e.IS_INPUT_OF="IS_INPUT_OF",e.IS_OUTPUT_OF="IS_OUTPUT_OF",e.IS_SOURCE_TEMPLATE_OF="IS_SOURCE_TEMPLATE_OF",e.IS_TEMPLATE_INSTANCE_OF="IS_TEMPLATE_INSTANCE_OF",e.IS_PROPERTY_OF="IS_PROPERTY_OF",e.HAS_PROPERTY="HAS_PROPERTY",e.IS_VALUE_OF="IS_VALUE_OF",e.HAS_VALUE="HAS_VALUE",e.IS_FILE_OF="IS_FILE_OF",e.HAS_FILE="HAS_FILE",e.HAS_ADDRESS="HAS_ADDRESS",e.IS_ADDRESS_OF="IS_ADDRESS_OF",e.HAS_MATH_FORMULA_CALC="HAS_MATH_FORMULA_CALC",e.IS_MATH_FORMULA_CALC_OF="IS_MATH_FORMULA_CALC_OF"}(r||(r={})),function(e){e.READ="READ",e.GROUP_WRITE="GROUP_WRITE",e.GROUP_WRITE_RECORDS="GROUP_WRITE_RECORDS"}(n||(n={}));class o extends Error{constructor(e,t,i){super(t),this.name="FileStorageError",this.kind=e,this.retryAfter=null==i?void 0:i.retryAfter,this.cause=null==i?void 0:i.cause}}const s={auth:"/auth",registry:"/registrar",node:"/node-network",user:"/user",fileStorage:"/file-storage"},a=553;function A(e,t=553){const i=new URL(e);return i.port=String(t),i.origin+i.pathname.replace(/\/$/,"")}function d(e){var t,i,r,n,o,a,d,c,l,g,u,I,h,E,B,y,p,f,Q,v,C;const U=(null===(i=null===(t=e.services)||void 0===t?void 0:t.auth)||void 0===i?void 0:i.baseUrl)||`${e.baseUrl.replace(/\/$/,"")}${s.auth}`,N=(null===(n=null===(r=e.services)||void 0===r?void 0:r.registry)||void 0===n?void 0:n.baseUrl)||`${e.baseUrl.replace(/\/$/,"")}${s.registry}`,S=(null===(a=null===(o=e.services)||void 0===o?void 0:o.node)||void 0===a?void 0:a.baseUrl)||`${e.baseUrl.replace(/\/$/,"")}${s.node}`,m=(null===(c=null===(d=e.services)||void 0===d?void 0:d.user)||void 0===c?void 0:c.baseUrl)||`${e.baseUrl.replace(/\/$/,"")}${s.user}`,D=(null===(g=null===(l=e.services)||void 0===l?void 0:l.fileStorage)||void 0===g?void 0:g.baseUrl)||`${e.baseUrl.replace(/\/$/,"")}${s.fileStorage}`,b=Object.assign(Object.assign({baseUrl:U},null===(u=e.services)||void 0===u?void 0:u.auth),(null===(I=e.services)||void 0===I?void 0:I.auth)?{baseUrl:U}:{}),R=Object.assign(Object.assign({baseUrl:N},null===(h=e.services)||void 0===h?void 0:h.registry),(null===(E=e.services)||void 0===E?void 0:E.registry)?{baseUrl:N}:{}),F=Object.assign(Object.assign({baseUrl:S},null===(B=e.services)||void 0===B?void 0:B.node),(null===(y=e.services)||void 0===y?void 0:y.node)?{baseUrl:S}:{}),k=Object.assign(Object.assign({baseUrl:m},null===(p=e.services)||void 0===p?void 0:p.user),(null===(f=e.services)||void 0===f?void 0:f.user)?{baseUrl:m}:{}),x=Object.assign(Object.assign({baseUrl:D},null===(Q=e.services)||void 0===Q?void 0:Q.fileStorage),(null===(v=e.services)||void 0===v?void 0:v.fileStorage)?{baseUrl:D}:{}),w=A(U,null!==(C=e.certPort)&&void 0!==C?C:553);return{auth:b,registry:R,node:F,user:k,fileStorage:x,certAuth:Object.assign(Object.assign({},b),{baseUrl:w,refreshBaseUrl:b.baseUrl})}}function c(e,t){if(!e.baseUrl)throw new Error(`${t} service baseUrl is required`);try{new URL(e.baseUrl)}catch(e){throw new Error(`${t} service baseUrl must be a valid URL`)}if(void 0!==e.timeout&&(e.timeout<0||e.timeout>3e5))throw new Error(`${t} service timeout must be between 0 and 300000ms`);if(void 0!==e.retries&&(e.retries<0||e.retries>10))throw new Error(`${t} service retries must be between 0 and 10`)}function l(e){var t,i,r,n,o,s;if(!e.baseUrl)throw new Error("baseUrl is required");try{new URL(e.baseUrl)}catch(e){throw new Error("baseUrl must be a valid URL")}if(e.certificate&&(!e.certificate.cert||!e.certificate.key))throw new Error("Certificate must include both cert and key when provided");const a=e.services;if((null===(t=null==a?void 0:a.auth)||void 0===t?void 0:t.baseUrl)&&c({baseUrl:a.auth.baseUrl},"auth"),(null===(i=null==a?void 0:a.registry)||void 0===i?void 0:i.baseUrl)&&c({baseUrl:a.registry.baseUrl},"registry"),(null===(r=null==a?void 0:a.node)||void 0===r?void 0:r.baseUrl)&&c({baseUrl:a.node.baseUrl},"node"),(null===(n=null==a?void 0:a.user)||void 0===n?void 0:n.baseUrl)&&c({baseUrl:a.user.baseUrl},"user"),(null===(o=null==a?void 0:a.fileStorage)||void 0===o?void 0:o.baseUrl)&&c({baseUrl:a.fileStorage.baseUrl},"fileStorage"),e.tokenStorage&&!["localStorage","sessionStorage","memory"].includes(e.tokenStorage))throw new Error("tokenStorage must be one of: localStorage, sessionStorage, memory");if(null===(s=e.errorHandling)||void 0===s?void 0:s.autoRetryNetwork){const{maxRetries:t,delay:i,backoff:r}=e.errorHandling.autoRetryNetwork;if(t<0||t>10)throw new Error("autoRetryNetwork.maxRetries must be between 0 and 10");if(void 0!==i&&(i<0||i>6e4))throw new Error("autoRetryNetwork.delay must be between 0 and 60000ms");if(r&&!["linear","exponential"].includes(r))throw new Error("autoRetryNetwork.backoff must be either linear or exponential")}}function g(e){return{baseUrl:e,timeout:3e4,retries:3,headers:{}}}function u(){return{debug:!1,autoRetryAuth:!0,autoRetryNetwork:{maxRetries:3,delay:1e3,backoff:"exponential"}}}function I(e,t,i,r){return new(i||(i=Promise))((function(n,o){function s(e){try{A(r.next(e))}catch(e){o(e)}}function a(e){try{A(r.throw(e))}catch(e){o(e)}}function A(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(s,a)}A((r=r.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;let h={enabled:!1,logLevel:"error",logToConsole:!0,logCallback:null};const E=e=>{var t,i,r;e&&(h={enabled:null!==(t=e.enabled)&&void 0!==t?t:h.enabled,logLevel:"info"===e.logLevel?"info":"error",logToConsole:null!==(i=e.logToConsole)&&void 0!==i?i:h.logToConsole,logCallback:null!==(r=e.logCallback)&&void 0!==r?r:h.logCallback})},B=(e,t,i)=>{if(!h.enabled)return;if("error"===h.logLevel&&"error"!==e)return;const r=`[IoM Client] ${t}`;h.logToConsole&&("error"===e?console.error(r,i||""):console.log(r,i||"")),h.logCallback&&h.logCallback(r,i)},y=(e,t)=>{h.enabled&&B("info",e,t)},p=(e,t)=>{h.enabled&&B("error",`Error in ${e}`,t)};function f(e){let t=3600;try{const i=e.split(".");if(3===i.length){const e=i[1].replace(/-/g,"+").replace(/_/g,"/"),r=e+"=".repeat((4-e.length%4)%4),n="undefined"!=typeof atob?atob(r):Buffer.from(r,"base64").toString("utf-8"),o=JSON.parse(n);o.exp&&o.iat&&(t=o.exp-o.iat)}}catch(e){p("Failed to decode JWT payload for expiry calculation",e)}return t}class Q{constructor(i,r,n){const o={baseURL:i.baseUrl,timeout:i.timeout||3e4};n&&(o.httpsAgent=new e.Agent({cert:n.cert,key:n.key,rejectUnauthorized:!0})),this.axiosInstance=t.create(o);const s={baseURL:i.refreshBaseUrl||i.baseUrl,timeout:i.timeout||3e4};this.refreshAxiosInstance=t.create(s)}login(){return I(this,void 0,void 0,(function*(){const e=yield this.axiosInstance.get("/api/UserAuthX509Certificate/login"),{accessToken:t,refreshToken:i,user:r}=e.data,n=t.trim();return{token:n,expiresIn:f(n),tokenType:"Bearer",refreshToken:i,user:r}}))}refreshToken(e){return I(this,void 0,void 0,(function*(){const t={refreshToken:e};return(yield this.refreshAxiosInstance.post("/api/UserAuthJwt/refreshToken",t)).data}))}}class v{constructor(e,t,i){this.axios=i}createUUID(){return I(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUID")).data}))}getUUIDRecord(e){return I(this,void 0,void 0,(function*(){return(yield this.axios.get(`/api/UUID/${e}`)).data}))}updateUUIDRecordMeta(e,t){return I(this,void 0,void 0,(function*(){return(yield this.axios.put(`/api/UUID/${e}/UUIDRecordMeta`,t)).data}))}}class C{constructor(e){this.key=e}get(){if("undefined"==typeof window)return null;try{const e=localStorage.getItem(this.key);return e?JSON.parse(e):null}catch(e){return localStorage.removeItem(this.key),null}}set(e){"undefined"!=typeof window&&(e.refreshToken?localStorage.setItem(this.key,JSON.stringify(e)):localStorage.removeItem(this.key))}clear(){"undefined"!=typeof window&&localStorage.removeItem(this.key)}}class U{constructor(e){this.key=e}get(){if("undefined"==typeof window)return null;try{const e=sessionStorage.getItem(this.key);return e?JSON.parse(e):null}catch(e){return sessionStorage.removeItem(this.key),null}}set(e){"undefined"!=typeof window&&(e.refreshToken?sessionStorage.setItem(this.key,JSON.stringify(e)):sessionStorage.removeItem(this.key))}clear(){"undefined"!=typeof window&&sessionStorage.removeItem(this.key)}}class N{constructor(){this.state=null}get(){return this.state}set(e){this.state=e.refreshToken?e:null}clear(){this.state=null}}function S(e,t){switch(e){case"sessionStorage":return new U(t);case"memory":return new N;default:return new C(t)}}class m extends Error{constructor(e){super("Validation Error"),this.name="ValidationError",this.errors=function(e){const t={};for(const i of e.errors){const e=i.path.join(".")||"general";t[e]||(t[e]=[]),t[e].push(i.message)}return t}(e)}}function D(e,t){try{return e.parse(t)}catch(e){if(e instanceof i.ZodError){const t=new m(e);throw p("validation",{errors:t.errors}),t}throw e}}function b(e){if(!e)return{};const{uuid:t,softDeleted:i}=e;return void 0===t&&void 0===i?{}:{nodeFind:Object.assign(Object.assign({},void 0!==t&&{uuid:t}),void 0!==i&&{softDeleted:i})}}class R{constructor(e,t,i,r){this.errorHandling=t,this.axios=i,this.registryClient=r}getAxios(){return this.axios}request(e){return I(this,void 0,void 0,(function*(){const t=yield this.axios.request(e);return{data:t.data,status:t.status,statusText:t.statusText,headers:t.headers}}))}getObjects(e,t){return I(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUObject/find",b(e),{signal:null==t?void 0:t.signal})).data}))}createOrUpdateObject(e){return I(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUObject",e)).data}))}softDeleteObject(e){return I(this,void 0,void 0,(function*(){return(yield this.axios.delete(`/api/UUObject/${e}`)).data}))}getProperties(e,t){return I(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUProperty/find",b(e),{signal:null==t?void 0:t.signal})).data}))}createOrUpdateProperty(e){return I(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUProperty",e)).data}))}createProperty(e){return I(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUProperty",e)).data}))}softDeleteProperty(e){return I(this,void 0,void 0,(function*(){return(yield this.axios.delete(`/api/UUProperty/${e}`)).data}))}createOrUpdatePropertyValue(e){return I(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUPropertyValue",e)).data}))}createPropertyValue(e){return I(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUPropertyValue",e)).data}))}softDeletePropertyValue(e){return I(this,void 0,void 0,(function*(){return(yield this.axios.delete(`/api/UUPropertyValue/${e}`)).data}))}searchStatements(e,t){return I(this,void 0,void 0,(function*(){const n=(e=>{if(!e)return;const t={};if(e.uuStatementFind){const n={subject:e.uuStatementFind.subject?D(i.string().uuid(),e.uuStatementFind.subject):void 0,predicate:e.uuStatementFind.predicate?D(i.nativeEnum(r),e.uuStatementFind.predicate):void 0,object:e.uuStatementFind.object?D(i.string().uuid(),e.uuStatementFind.object):void 0,softDeleted:D(i.boolean().optional(),e.uuStatementFind.softDeleted)};t.uuStatementFind=Object.fromEntries(Object.entries(n).filter((([e,t])=>void 0!==t)))}return e.accessFind&&(t.accessFind={readDefaultGroup:D(i.boolean().optional(),e.accessFind.readDefaultGroup),readOwnGroups:D(i.boolean().optional(),e.accessFind.readOwnGroups),readPublicGroups:D(i.boolean().optional(),e.accessFind.readPublicGroups),readUserSharedGroups:D(i.boolean().optional(),e.accessFind.readUserSharedGroups),groupUUIDList:e.accessFind.groupUUIDList?D(i.array(i.string()),e.accessFind.groupUUIDList):void 0}),Object.keys(t).length>0?t:void 0})(e);return(yield this.axios.post("/api/UUStatements/find",null!=n?n:{},{signal:null==t?void 0:t.signal})).data}))}createStatements(e){return I(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUStatements",e)).data}))}createStatement(e){return I(this,void 0,void 0,(function*(){return(yield this.createStatements([e]))[0]}))}softDeleteStatement(e,t,i){return I(this,void 0,void 0,(function*(){return(yield this.axios.delete("/api/UUStatements",{data:{subject:e,predicate:t,object:i}})).data}))}createOrUpdateFile(e){return I(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUFile",e)).data}))}findFiles(e,t){return I(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUFile/find",null!=e?e:{},{signal:null==t?void 0:t.signal})).data}))}softDeleteFile(e){return I(this,void 0,void 0,(function*(){return(yield this.axios.delete(`/api/UUFile/${e}`)).data}))}createOrUpdateAddress(e){return I(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUAddress",e)).data}))}createAddress(e){return I(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUAddress",e)).data}))}softDeleteAddress(e){return I(this,void 0,void 0,(function*(){return(yield this.axios.delete(`/api/UUAddress/${e}`)).data}))}searchAggregates(e,t){return I(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/Aggregate/find",e,{signal:null==t?void 0:t.signal})).data}))}createAggregates(e){return I(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/Aggregate",e)).data}))}importAggregates(e){return I(this,void 0,void 0,(function*(){const t=yield this.axios.post("/api/Aggregate/Import",e);return{data:void 0,status:t.status,statusText:t.statusText,headers:t.headers}}))}uploadFileByReference(e){return I(this,void 0,void 0,(function*(){if(!this.registryClient)throw new Error("Registry client not available for UUID operations");try{const t=(yield this.registryClient.createUUID()).uuid,i={uuid:t,fileReference:e.fileReference,fileName:e.fileName,label:e.label,contentType:e.contentType,size:e.size},n=yield this.createOrUpdateFile(i);return yield this.createStatement({subject:e.uuidToAttach,predicate:r.HAS_FILE,object:t}),{data:n,status:200,statusText:"OK"}}catch(e){return{data:null,status:e.status||500,statusText:e.message||"Error uploading file by reference"}}}))}addPropertyToObject(e,t){return I(this,void 0,void 0,(function*(){if(!this.registryClient)throw new Error("Registry client not available");const n=i.string().uuid().parse(e);let o;if(t.uuid)o=t;else{const{uuid:e}=yield this.registryClient.createUUID();o=Object.assign(Object.assign({},t),{uuid:e})}const s=yield this.createProperty(o);return yield this.createStatement({subject:n,predicate:r.HAS_PROPERTY,object:s.uuid}),yield this.createStatement({subject:s.uuid,predicate:r.IS_PROPERTY_OF,object:n}),{data:s,status:200,statusText:"OK"}}))}getPropertiesForObject(e,t){return I(this,void 0,void 0,(function*(){const i=yield this.searchStatements({uuStatementFind:{subject:e,predicate:r.HAS_PROPERTY,softDeleted:null==t?void 0:t.softDeleted}});if(!i.length)return{data:[],status:200,statusText:"OK"};const n=[];for(const e of i)try{const i=yield this.getProperties(Object.assign({uuid:e.object},t));i[0]&&n.push(i[0])}catch(e){}return{data:n,status:200,statusText:"OK"}}))}setValueForProperty(e,t){return I(this,void 0,void 0,(function*(){if(!this.registryClient)throw new Error("Registry client not available");const n=i.string().uuid().parse(e);let o;if(t.uuid)o=t;else{const{uuid:e}=yield this.registryClient.createUUID();o=Object.assign(Object.assign({},t),{uuid:e})}const s=yield this.createPropertyValue(o);return yield this.createStatement({subject:n,predicate:r.HAS_VALUE,object:s.uuid}),yield this.createStatement({subject:s.uuid,predicate:r.IS_VALUE_OF,object:n}),{data:s,status:200,statusText:"OK"}}))}getValuesForProperty(e,t){return I(this,void 0,void 0,(function*(){try{const n=i.string().uuid().parse(e),o=yield this.searchStatements({uuStatementFind:{subject:n,predicate:r.HAS_VALUE,softDeleted:null==t?void 0:t.softDeleted}});if(!o||0===o.length)return{data:[],status:200,statusText:"OK"};const s=[];for(const e of o)try{const i=(yield this.axios.post("/api/UUPropertyValue/find",b(Object.assign({uuid:e.object},t)))).data.find((t=>t.uuid===e.object));i&&s.push(i)}catch(e){}return{data:s,status:200,statusText:"OK"}}catch(e){return{data:[],status:e.status||500,statusText:e.message||"Error getting values for property"}}}))}listGroups(e,t){return I(this,void 0,void 0,(function*(){var i,r;return(yield this.axios.get("/api/access/groups",{params:{page:null!==(i=null==e?void 0:e.page)&&void 0!==i?i:0,size:null!==(r=null==e?void 0:e.size)&&void 0!==r?r:20},signal:null==t?void 0:t.signal})).data}))}createGroup(e){return I(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/access/groups",e)).data}))}getGroup(e,t){return I(this,void 0,void 0,(function*(){return(yield this.axios.get(`/api/access/groups/${e}`,{signal:null==t?void 0:t.signal})).data}))}listGroupRecords(e,t,i){return I(this,void 0,void 0,(function*(){var r,n;return(yield this.axios.get(`/api/access/groups/${e}/records`,{params:{page:null!==(r=null==t?void 0:t.page)&&void 0!==r?r:0,size:null!==(n=null==t?void 0:t.size)&&void 0!==n?n:20},signal:null==i?void 0:i.signal})).data}))}listOwnGroups(e,t){return I(this,void 0,void 0,(function*(){var i,r;return(yield this.axios.get("/api/access/groups/own",{params:{page:null!==(i=null==e?void 0:e.page)&&void 0!==i?i:0,size:null!==(r=null==e?void 0:e.size)&&void 0!==r?r:20},signal:null==t?void 0:t.signal})).data}))}listSharedGroups(e,t){return I(this,void 0,void 0,(function*(){var i,r;return(yield this.axios.get("/api/access/groups/shared",{params:{page:null!==(i=null==e?void 0:e.page)&&void 0!==i?i:0,size:null!==(r=null==e?void 0:e.size)&&void 0!==r?r:20},signal:null==t?void 0:t.signal})).data}))}addGroupRecords(e,t){return I(this,void 0,void 0,(function*(){yield this.axios.post(`/api/access/groups/${e}/records`,t)}))}createOrUpdateMathFormula(e){return I(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUMathFormula",e)).data}))}searchMathFormulas(e,t,i){return I(this,void 0,void 0,(function*(){var r,n;return(yield this.axios.post("/api/UUMathFormula/find",{nodeFind:null!=e?e:{},page:null!==(r=null==t?void 0:t.page)&&void 0!==r?r:0,size:null!==(n=null==t?void 0:t.size)&&void 0!==n?n:20},{signal:null==i?void 0:i.signal})).data}))}softDeleteMathFormula(e){return I(this,void 0,void 0,(function*(){return(yield this.axios.delete(`/api/UUMathFormula/${e}`)).data}))}createOrUpdateMathFormulaCalc(e){return I(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUMathFormulaCalc",e)).data}))}searchMathFormulaCalcs(e,t){return I(this,void 0,void 0,(function*(){return(yield this.axios.post("/api/UUMathFormulaCalc/find",null!=e?e:{},{signal:null==t?void 0:t.signal})).data}))}softDeleteMathFormulaCalc(e){return I(this,void 0,void 0,(function*(){return(yield this.axios.delete(`/api/UUMathFormulaCalc/${e}`)).data}))}updateErrorHandling(e){this.errorHandling=e}}const F=i.string().uuid({message:"Invalid UUID format. Must be a valid UUID string."}),k=i.string().refine((e=>void 0===e||e.trim().length>0),{message:"Value cannot be empty or contain only whitespace"}),x=i.object({uuid:F,name:k.optional(),abbreviation:i.string().optional(),version:i.string().optional(),description:i.string().optional(),isTemplate:i.boolean().optional()}),w=i.object({value:i.string().optional()}),z=i.object({key:i.string().optional(),values:i.array(w).optional()});i.object({subject:F,predicate:i.nativeEnum(r,{errorMap:(e,t)=>({message:`Invalid predicate value. Must be one of: ${Object.values(r).join(", ")}`})}),object:F,properties:i.array(z).optional()});const M=i.object({uuid:F,key:i.string().min(1,"Property key is required"),version:i.string().optional(),label:i.string().optional(),description:i.string().optional(),type:i.string().optional(),inputType:i.string().optional(),formula:i.string().optional(),inputOrderPosition:i.number().optional(),processingOrderPosition:i.number().optional(),viewOrderPosition:i.number().optional()}),q=i.object({uuid:F,value:i.string().optional(),valueTypeCast:i.string().optional(),sourceType:i.string().optional()}),T=i.object({uuid:F,fileName:i.string().optional(),fileReference:i.string().min(1,"File reference is required"),label:i.string().optional()}),G=i.object({uuid:F,fullAddress:i.string().optional(),street:i.string().optional(),houseNumber:i.string().optional(),city:i.string().optional(),postalCode:i.string().optional(),country:i.string().optional(),state:i.string().optional(),district:i.string().optional()});i.object({subject:F.optional(),predicate:i.nativeEnum(r).optional(),object:F.optional()}).refine((e=>e.subject||e.predicate||e.object),{message:"At least one search parameter (subject, predicate, or object) must be provided"}),i.object({object:x,properties:i.array(i.object({property:M,value:q.optional()})),children:i.array(x).optional(),files:i.array(T).optional()});const H=i.object({file:i.object({fileName:i.string().min(1,"Filename is required"),fileReference:i.string().min(1,"File reference is required"),label:i.string().optional()})}),J=i.object({value:q.omit({uuid:!0}),files:i.array(H).optional()}),O=i.object({property:M.omit({uuid:!0}).extend({key:i.string().min(1,"Property key is required")}),values:i.array(J).optional(),files:i.array(H).optional()});i.object({object:x.omit({uuid:!0}),parents:i.array(F).optional(),files:i.array(H).optional(),properties:i.array(O).optional(),address:G.omit({uuid:!0}).optional()});const P=i.string().email("Invalid email format").min(1,"Email is required"),X=i.string().min(8,"Password must be at least 8 characters").regex(/[a-z]/,"Password must contain at least one lowercase letter").regex(/[A-Z]/,"Password must contain at least one uppercase letter").regex(/[0-9]/,"Password must contain at least one number").regex(/[^a-zA-Z0-9]/,"Password must contain at least one special character");function j(e,t){P.parse(e),X.parse(t)}i.object({ownerUserUUID:i.string().optional(),groupUUID:i.string().optional(),name:i.string().min(1,"Group name is required"),usersShare:i.array(i.object({userUUID:F.optional(),permissions:i.array(i.enum(["READ","GROUP_WRITE","GROUP_WRITE_RECORDS"])).min(1,"At least one permission is required")})).optional(),publicShare:i.object({permissions:i.array(i.enum(["READ","GROUP_WRITE","GROUP_WRITE_RECORDS"])).min(1,"At least one permission is required")}).optional(),default:i.boolean().optional()}),i.object({recordUUIDs:i.array(F).min(1,"At least one record UUID is required")});class L{constructor(e,i){this.axiosInstance=t.create({baseURL:e.baseUrl,timeout:e.timeout||3e4})}register(e){return I(this,void 0,void 0,(function*(){j(e.email,e.password);return(yield this.axiosInstance.post("/api/UserAuthUP/register",{username:e.email,password:e.password})).data}))}login(e){return I(this,void 0,void 0,(function*(){j(e.email,e.password);const t=yield this.axiosInstance.post("/api/UserAuthUP/login",{username:e.email,password:e.password}),{accessToken:i,refreshToken:r,user:n}=t.data,o=i.trim();return{token:o,expiresIn:f(o),tokenType:"Bearer",refreshToken:r,user:n}}))}}class K{constructor(e,t,i){this.axiosInstance=i}getCurrentUser(e){return I(this,void 0,void 0,(function*(){return(yield this.axiosInstance.get("/api/User",{signal:null==e?void 0:e.signal})).data}))}findByIdentifier(e,t){return I(this,void 0,void 0,(function*(){var i;return null!==(i=(yield this.axiosInstance.get("/api/User/find",{params:{identifier:e},signal:null==t?void 0:t.signal})).data)&&void 0!==i?i:[]}))}}
2
+ /*!
3
+ * hash-wasm (https://www.npmjs.com/package/hash-wasm)
4
+ * (c) Dani Biro
5
+ * @license MIT
6
+ */function _(e,t,i,r){return new(i||(i=Promise))((function(t,n){function o(e){try{a(r.next(e))}catch(e){n(e)}}function s(e){try{a(r.throw(e))}catch(e){n(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(o,s)}a((r=r.apply(e,[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class Z{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 _(this,0,void 0,(function*(){const t=yield this.lock();try{return yield Promise.resolve(e())}finally{t()}}))}}var V;const Y="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,W=null!==(V=Y.Buffer)&&void 0!==V?V:null,$=Y.TextEncoder?new Y.TextEncoder:null;function ee(e,t){return(15&e)+(e>>6|e>>3&8)<<4|(15&t)+(t>>6|t>>3&8)}const te="a".charCodeAt(0)-10,ie="0".charCodeAt(0);function re(e,t,i){let r=0;for(let n=0;n<i;n++){let i=t[n]>>>4;e[r++]=i>9?i+te:i+ie,i=15&t[n],e[r++]=i>9?i+te:i+ie}return String.fromCharCode.apply(null,e)}const ne=null!==W?e=>{if("string"==typeof e){const t=W.from(e,"utf8");return new Uint8Array(t.buffer,t.byteOffset,t.length)}if(W.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 $.encode(e);if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw new Error("Invalid data type!")},oe="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",se=new Uint8Array(256);for(let e=0;e<64;e++)se[oe.charCodeAt(e)]=e;function ae(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 n=0;for(let t=0;t<i;t+=4){const i=se[e.charCodeAt(t)],o=se[e.charCodeAt(t+1)],s=se[e.charCodeAt(t+2)],a=se[e.charCodeAt(t+3)];r[n]=i<<2|o>>4,n+=1,r[n]=(15&o)<<4|s>>2,n+=1,r[n]=(3&s)<<6|63&a,n+=1}return r}const Ae=16384,de=new Z,ce=new Map;function le(e,t){return _(this,0,void 0,(function*(){let i=null,r=null,n=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const o=()=>new DataView(i.exports.memory.buffer).getUint32(i.exports.STATE_SIZE,!0),s=de.dispatch((()=>_(this,0,void 0,(function*(){if(!ce.has(e.name)){const t=ae(e.data),i=WebAssembly.compile(t);ce.set(e.name,i)}const t=yield ce.get(e.name);i=yield WebAssembly.instantiate(t,{})})))),a=(e=null)=>{n=!0,i.exports.Hash_Init(e)},A=e=>{if(!n)throw new Error("update() called before init()");(e=>{let t=0;for(;t<e.length;){const n=e.subarray(t,t+Ae);t+=n.length,r.set(n),i.exports.Hash_Update(n.length)}})(ne(e))},d=new Uint8Array(2*t),c=(e,o=null)=>{if(!n)throw new Error("digest() called before init()");return n=!1,i.exports.Hash_Final(o),"binary"===e?r.slice(0,t):re(d,r,t)},l=e=>"string"==typeof e?e.length<4096:e.byteLength<Ae;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(()=>_(this,0,void 0,(function*(){i||(yield s);const e=i.exports.Hash_GetBuffer(),t=i.exports.memory.buffer;r=new Uint8Array(t,e,Ae)})))(),{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(),n=i.exports.memory.buffer;r=new Uint8Array(n,t,e)},init:a,update:A,digest:c,save:()=>{if(!n)throw new Error("save() can only be called after init() and before digest()");const t=i.exports.Hash_GetState(),r=o(),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]=ee(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=o(),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]!==ee(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),n=!0},calculate:(e,n=null,o=null)=>{if(!g(e,n))return a(n),A(e),c("hex",o);const s=ne(e);return r.set(s),i.exports.Hash_Calculate(s.length,n,o),re(d,r,t)},hashLength:t}}))}new Z,new Z,new Z,new Z,new Z,new Z,new Z,new Z,new Z,new Z,new Z;var ge={name:"sha256",data:"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c2pBx6KerX1qIhkgASADcyACcSABIANxcyABQR53IAFBE3dzIAFBCndzaiAaaiICaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakHRxqk2aiIaIAIgAXMgA3EgAiABcXMgAkEedyACQRN3cyACQQp3c2ogGGoiA2oiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pB59KkoQFqIhggAyACcyABcSADIAJxcyADQR53IANBE3dzIANBCndzaiAUaiIBaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGFldy9AmoiFCABIANzIAJxIAEgA3FzIAFBHncgAUETd3MgAUEKd3NqIBdqIgJqIhMgI2ogJiASaiAiIBFqICUgCWogEyASIBFzcSARc2ogE0EadyATQRV3cyATQQd3c2pBuMLs8AJqIhcgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAZaiIDaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakH827HpBGoiGSADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBpqIgFqIhEgCSATc3EgE3NqIBFBGncgEUEVd3MgEUEHd3NqQZOa4JkFaiIaIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGGoiAmoiEiARIAlzcSAJc2ogEkEadyASQRV3cyASQQd3c2pB1OapqAZqIhggAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAUaiIDaiITaiAoIBJqICQgEWogJyAJaiATIBIgEXNxIBFzaiATQRp3IBNBFXdzIBNBB3dzakG7laizB2oiFCADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBdqIgFqIgkgEyASc3EgEnNqIAlBGncgCUEVd3MgCUEHd3NqQa6Si454aiIXIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGWoiAmoiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pBhdnIk3lqIhkgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAaaiIDaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGh0f+VemoiGiADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBhqIgFqIhNqICogEmogLSARaiApIAlqIBMgEiARc3EgEXNqIBNBGncgE0EVd3MgE0EHd3NqQcvM6cB6aiIYIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogFGoiAmoiCSATIBJzcSASc2ogCUEadyAJQRV3cyAJQQd3c2pB8JauknxqIhQgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAXaiIDaiIRIAkgE3NxIBNzaiARQRp3IBFBFXdzIBFBB3dzakGjo7G7fGoiFyADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBlqIgFqIhIgESAJc3EgCXNqIBJBGncgEkEVd3MgEkEHd3NqQZnQy4x9aiIZIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGmoiAmoiE2ogMCASaiAvIBFqICsgCWogEyASIBFzcSARc2ogE0EadyATQRV3cyATQQd3c2pBpIzktH1qIhogAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAYaiIDaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakGF67igf2oiGCADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBRqIgFqIhEgCSATc3EgE3NqIBFBGncgEUEVd3MgEUEHd3NqQfDAqoMBaiIUIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogF2oiAmoiEiARIAlzcSAJc2ogEkEadyASQRV3cyASQQd3c2pBloKTzQFqIhcgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAZaiIDaiITIDZqIDIgEmogNSARaiAxIAlqIBMgEiARc3EgEXNqIBNBGncgE0EVd3MgE0EHd3NqQYjY3fEBaiIZIAMgAnMgAXEgAyACcXMgA0EedyADQRN3cyADQQp3c2ogGmoiAWoiCSATIBJzcSASc2ogCUEadyAJQRV3cyAJQQd3c2pBzO6hugJqIhogASADcyACcSABIANxcyABQR53IAFBE3dzIAFBCndzaiAYaiICaiIRIAkgE3NxIBNzaiARQRp3IBFBFXdzIBFBB3dzakG1+cKlA2oiGCACIAFzIANxIAIgAXFzIAJBHncgAkETd3MgAkEKd3NqIBRqIgNqIhIgESAJc3EgCXNqIBJBGncgEkEVd3MgEkEHd3NqQbOZ8MgDaiIUIAMgAnMgAXEgAyACcXMgA0EedyADQRN3cyADQQp3c2ogF2oiAWoiE2ogLEEZdyAsQQ53cyAsQQN2cyAoaiA0aiAzQQ93IDNBDXdzIDNBCnZzaiIXIBJqIDcgEWogMyAJaiATIBIgEXNxIBFzaiATQRp3IBNBFXdzIBNBB3dzakHK1OL2BGoiGyABIANzIAJxIAEgA3FzIAFBHncgAUETd3MgAUEKd3NqIBlqIgJqIgkgEyASc3EgEnNqIAlBGncgCUEVd3MgCUEHd3NqQc+U89wFaiIZIAIgAXMgA3EgAiABcXMgAkEedyACQRN3cyACQQp3c2ogGmoiA2oiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pB89+5wQZqIhogAyACcyABcSADIAJxcyADQR53IANBE3dzIANBCndzaiAYaiIBaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakHuhb6kB2oiHCABIANzIAJxIAEgA3FzIAFBHncgAUETd3MgAUEKd3NqIBRqIgJqIhNqIC5BGXcgLkEOd3MgLkEDdnMgKmogNmogLUEZdyAtQQ53cyAtQQN2cyApaiA1aiAXQQ93IBdBDXdzIBdBCnZzaiIUQQ93IBRBDXdzIBRBCnZzaiIYIBJqIDkgEWogFCAJaiATIBIgEXNxIBFzaiATQRp3IBNBFXdzIBNBB3dzakHvxpXFB2oiCSACIAFzIANxIAIgAXFzIAJBHncgAkETd3MgAkEKd3NqIBtqIgNqIhEgEyASc3EgEnNqIBFBGncgEUEVd3MgEUEHd3NqQZTwoaZ4aiIbIAMgAnMgAXEgAyACcXMgA0EedyADQRN3cyADQQp3c2ogGWoiAWoiEiARIBNzcSATc2ogEkEadyASQRV3cyASQQd3c2pBiISc5nhqIhkgASADcyACcSABIANxcyABQR53IAFBE3dzIAFBCndzaiAaaiICaiITIBIgEXNxIBFzaiATQRp3IBNBFXdzIBNBB3dzakH6//uFeWoiGiACIAFzIANxIAIgAXFzIAJBHncgAkETd3MgAkEKd3NqIBxqIgNqIhQgPGo2AuSJAUEAID8gAyACcyABcSADIAJxcyADQR53IANBE3dzIANBCndzaiAJaiIBIANzIAJxIAEgA3FzIAFBHncgAUETd3MgAUEKd3NqIBtqIgIgAXMgA3EgAiABcXMgAkEedyACQRN3cyACQQp3c2ogGWoiAyACcyABcSADIAJxcyADQR53IANBE3dzIANBCndzaiAaaiIJajYC1IkBQQAgPSAvQRl3IC9BDndzIC9BA3ZzICtqIDdqIBhBD3cgGEENd3MgGEEKdnNqIhggEWogFCATIBJzcSASc2ogFEEadyAUQRV3cyAUQQd3c2pB69nBonpqIhkgAWoiEWo2AuCJAUEAIEEgCSADcyACcSAJIANxcyAJQR53IAlBE3dzIAlBCndzaiAZaiIBajYC0IkBQQAgPiAwQRl3IDBBDndzIDBBA3ZzIC9qIBdqIDpBD3cgOkENd3MgOkEKdnNqIBJqIBEgFCATc3EgE3NqIBFBGncgEUEVd3MgEUEHd3NqQffH5vd7aiIXIAJqIhJqNgLciQFBACBDIAEgCXMgA3EgASAJcXMgAUEedyABQRN3cyABQQp3c2ogF2oiAmo2AsyJAUEAIDsgNEEZdyA0QQ53cyA0QQN2cyAwaiA4aiAYQQ93IBhBDXdzIBhBCnZzaiATaiASIBEgFHNxIBRzaiASQRp3IBJBFXdzIBJBB3dzakHy8cWzfGoiESADamo2AtiJAUEAIAAgAiABcyAJcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiARamo2AsiJAQuyBgIEfwF+QQAoAsCJASIAQQJ2QQ9xIgFBAnRBgIkBaiICIAIoAgBBfyAAQQN0IgB0QX9zcUGAASAAdHM2AgACQAJAAkAgAUEOSQ0AAkAgAUEORw0AQQBBADYCvIkBC0GAiQEQA0EAIQIMAQsgAUENRg0BIAFBAWohAgsgAiEDAkBBBiACa0EHcSIARQ0AIAIgAGohAyACQQJ0QYCJAWohAQNAIAFBADYCACABQQRqIQEgAEF/aiIADQALCyACQXlqQQdJDQAgA0ECdCEBA0AgAUGYiQFqQgA3AgAgAUGQiQFqQgA3AgAgAUGIiQFqQgA3AgAgAUGAiQFqQgA3AgAgAUEgaiIBQThHDQALC0EAIQFBAEEAKQPAiQEiBKciAEEbdCAAQQt0QYCA/AdxciAAQQV2QYD+A3EgAEEDdEEYdnJyNgK8iQFBACAEQh2IpyIAQRh0IABBgP4DcUEIdHIgAEEIdkGA/gNxIABBGHZycjYCuIkBQYCJARADQQBBACgC5IkBIgBBGHQgAEGA/gNxQQh0ciAAQQh2QYD+A3EgAEEYdnJyNgLkiQFBAEEAKALgiQEiAEEYdCAAQYD+A3FBCHRyIABBCHZBgP4DcSAAQRh2cnI2AuCJAUEAQQAoAtyJASIAQRh0IABBgP4DcUEIdHIgAEEIdkGA/gNxIABBGHZycjYC3IkBQQBBACgC2IkBIgBBGHQgAEGA/gNxQQh0ciAAQQh2QYD+A3EgAEEYdnJyNgLYiQFBAEEAKALUiQEiAEEYdCAAQYD+A3FBCHRyIABBCHZBgP4DcSAAQRh2cnI2AtSJAUEAQQAoAtCJASIAQRh0IABBgP4DcUEIdHIgAEEIdkGA/gNxIABBGHZycjYC0IkBQQBBACgCzIkBIgBBGHQgAEGA/gNxQQh0ciAAQQh2QYD+A3EgAEEYdnJyNgLMiQFBAEEAKALIiQEiAEEYdCAAQYD+A3FBCHRyIABBCHZBgP4DcSAAQRh2cnI2AsiJAQJAQQAoAuiJASICRQ0AQQAhAANAIAFBgAlqIAFByIkBai0AADoAACABQQFqIQEgAiAAQQFqIgBB/wFxSw0ACwsLBgBBgIkBC6MBAEEAQgA3A8CJAUEAQRxBICABQeABRiIBGzYC6IkBQQBCp5/mp8b0k/2+f0Krs4/8kaOz8NsAIAEbNwPgiQFBAEKxloD+n6KFrOgAQv+kuYjFkdqCm38gARs3A9iJAUEAQpe6w4OTp5aHd0Ly5rvjo6f9p6V/IAEbNwPQiQFBAELYvZaI/KC1vjZC58yn0NbQ67O7fyABGzcDyIkBIAAQAhAECwsLAQBBgAgLBHAAAAA=",hash:"8c18dd94"};new Z,new Z,new Z,new Z,new Z,new Z,new Z,new Z,new Z,new Z,new Z;const ue=1048576;function Ie(e,t){return I(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 he(e,"hex",null==t?void 0:t.signal))}))}function he(e,t,i){return I(this,void 0,void 0,(function*(){if(null==i?void 0:i.aborted)throw new DOMException("Aborted","AbortError");const t=yield le(ge,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 n=0;n<r;n+=ue){if(null==i?void 0:i.aborted)throw new DOMException("Aborted","AbortError");const o=Math.min(n+ue,r),s=e.slice(n,o),a=new Uint8Array(yield s.arrayBuffer());t.update(a)}return t.digest("hex")}))}class Ee{hashFullFile(e,t){return function(e,t){return I(this,void 0,void 0,(function*(){return he(e,0,null==t?void 0:t.signal)}))}(e,{signal:t})}hashPart(e,t){return Ie(e,{signal:t})}dispose(){}}function Be(){return new Ee}const ye=e=>`/api/FileStorage/${encodeURIComponent(e)}/download`;class pe{constructor(e,t,i,r=Be){this.axios=i,this.hasherFactory=r}initUpload(e,t){return I(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 I(this,void 0,void 0,(function*(){const r=(null==t?void 0:t.length)?{partNumbers:t}:{},n=yield this.axios.post((e=>`/api/FileStorage/${encodeURIComponent(e)}/refresh`)(e),r,{signal:null==i?void 0:i.signal});return n.data}))}completeUpload(e,t,i){return I(this,void 0,void 0,(function*(){const r={parts:t},n=yield this.axios.post((e=>`/api/FileStorage/${encodeURIComponent(e)}/complete`)(e),r,{signal:null==i?void 0:i.signal});return n.data}))}abortUpload(e){return I(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 I(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 I(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 I(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){var t;return{url:`${(null!==(t=this.axios.defaults.baseURL)&&void 0!==t?t:"").replace(/\/$/,"")}${ye(e)}`}}uploadFile(e){return I(this,void 0,void 0,(function*(){const{file:t,fileName:i,contentType:r,onProgress:n,signal:s,concurrency:a}=e;Ce(s);const A=Math.min(8,Math.max(1,null!=a?a: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,n=0,o=!1;const s=()=>{o=!1,n=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-n>=100?s():o||(o=!0,setTimeout(s,100-(r-n)))},flush(){s()}}}(t.size,n);let u;try{const e=yield l.hashFullFile(t,s),i=yield this.initUpload({fileName:d,mimeType:c,size:t.size,sha256:e},{signal:s});if(u=i.uploadId,0===i.urls.length)throw new o("InvalidRequest","init returned no presigned URLs");if(1===i.urls.length&&null===i.partSize){const e=i.checksumValidation?yield l.hashPart(t,s):void 0,r=yield fe({url:i.urls[0],body:t,contentType:c,checksumSHA256:e,signal:s,onProgress:e=>g.set(1,e)});g.flush();const n=e?{partNumber:1,etag:r,checksumSHA256:e}:{partNumber:1,etag:r};return this.completeUpload(i.uploadId,[n],{signal:s})}if(null===i.partSize)throw new o("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:s});return g.flush(),this.completeUpload(i.uploadId,r,{signal:s})}catch(e){const t=function(e){if(e instanceof o)return e;if(e instanceof DOMException&&"AbortError"===e.name)return new o("Aborted",e.message,{cause:e});return e}(e);throw u&&this.abortUpload(u),t}finally{l.dispose()}}))}runMultipart(e){return I(this,void 0,void 0,(function*(){const{init:t,file:i,contentType:r,concurrency:n,hasher:s,onPartLoaded:a,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 u=e=>I(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 y=e=>I(this,void 0,void 0,(function*(){const n=(e-1)*t.partSize,c=Math.min(n+t.partSize,i.size),g=i.slice(n,c),I=d?yield s.hashPart(g,A):void 0;let E=0;for(;;){Ce(A);const t=yield u(e);try{const i=yield fe({url:t,body:g,contentType:r,checksumSHA256:I,signal:A,onProgress:t=>a(e,t)});a(e,g.size);const n=I?{partNumber:e,etag:i,checksumSHA256:I}:{partNumber:e,etag:i};return void h.set(e,n)}catch(t){if(t instanceof o&&"Expired"===t.kind){l.delete(e);continue}if(t instanceof o&&("Aborted"===t.kind||"Forbidden"===t.kind))throw t;if(E>=3)throw t;E+=1;const i=Qe(E,t);yield ve(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)}},o=()=>{if(!i)for(;E.size<n&&B.length>0;){const e=B.shift();E.add(e),y(e).then((()=>{E.delete(e),0===B.length&&0===E.size?r():o()}),(t=>{E.delete(e),r(t)}))}};o()}))}))}}function fe(e){return I(this,void 0,void 0,(function*(){var t;const{url:i,body:r,contentType:n,checksumSHA256:s,signal:a,onProgress:A}=e;Ce(a),null==A||A(0);const d={"Content-Type":n};let c;s&&(d["x-amz-checksum-sha256"]=s);try{c=yield fetch(i,{method:"PUT",body:r,headers:d,signal:a})}catch(e){if(null==a?void 0:a.aborted)throw new o("Aborted","Upload aborted",{cause:e});throw new o("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 I(this,void 0,void 0,(function*(){let t="";try{t=yield e.text()}catch(e){}const i=t.match(/<Code>([^<]+)<\/Code>/),r=null==i?void 0:i[1];if(403===e.status)return"AccessDenied"===r||"ExpiredToken"===r||/expired/i.test(t)?new o("Expired",`S3 403: ${null!=r?r:"expired"}`):new o("Forbidden",`S3 403: ${null!=r?r:"forbidden"}`);if(400===e.status)return"BadDigest"===r?new o("BadDigest","S3 reported BadDigest"):new o("InvalidRequest",`S3 400: ${null!=r?r:"invalid"}`);if(404===e.status)return new o("NotFound","S3 404");if(429===e.status||e.status>=500&&e.status<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}(e.headers.get("retry-after"));return new o(429===e.status?"Throttled":"CorsOrNetwork",`S3 ${e.status}: ${null!=r?r:"transient"}`,{retryAfter:t})}return new o("InvalidRequest",`S3 ${e.status}: ${null!=r?r:"unknown"}`)}))}(c);const l=null!==(t=c.headers.get("ETag"))&&void 0!==t?t:c.headers.get("etag");if(!l)throw new o("CorsOrNetwork","S3 PUT succeeded but ETag was not readable — bucket must set Access-Control-Expose-Headers: ETag");return l.replace(/^"|"$/g,"")}))}function Qe(e,t){if(t instanceof o&&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 ve(e,t){return new Promise(((i,r)=>{const n=setTimeout((()=>{i()}),e),s=()=>{clearTimeout(n),r(new o("Aborted","Aborted while backing off"))};if(t){if(t.aborted)return clearTimeout(n),void r(new o("Aborted","Aborted while backing off"));t.addEventListener("abort",s,{once:!0})}}))}function Ce(e){if(null==e?void 0:e.aborted)throw new o("Aborted","Upload aborted")}class Ue{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,l(e),this.config=e;const t=d(e);this.storage=S(e.tokenStorage,this.STORAGE_KEY),this.loadState(),this.initCrossTabSync(),this.auth=new Q(t.certAuth,e.errorHandling||{},e.certificate),this.registry=new v(t.registry,e.errorHandling||{},this.createServiceAxiosInstance(t.registry.baseUrl)),this.node=new R(t.node,e.errorHandling||{},this.createServiceAxiosInstance(t.node.baseUrl),this.registry),this.up=new L(t.auth,e.errorHandling||{}),this.user=new K(t.user,e.errorHandling||{},this.createServiceAxiosInstance(t.user.baseUrl)),this.fileStorage=new pe(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 p("Parse access token",e),!0}}getValidToken(){return I(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 p("In-flight refresh failed",e),null}if(this.refreshToken)try{return yield this.attemptTokenRefresh()}catch(e){return p("Token refresh failed",e),null}return this.logout(),null}))}refreshIfNeededOnStartup(){return I(this,void 0,void 0,(function*(){if(this.refreshToken&&this.isAccessTokenExpired())if(this.refreshPromise)yield this.refreshPromise;else try{yield this.attemptTokenRefresh()}catch(e){p("Startup refresh failed",null),this.logout()}}))}attemptTokenRefresh(){return I(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=(()=>I(this,void 0,void 0,(function*(){var e;try{const e=yield this.auth.refreshToken(this.refreshToken);if(!e.accessToken||!e.refreshToken)throw p("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 p("Refresh token expired",null),this.logout(),new Error("Refresh token expired");throw p("Refresh failed",t),t}finally{this.isRefreshing=!1,this.refreshPromise=null,this.notifyListeners()}})))(),this.refreshPromise}))}createServiceAxiosInstance(i){const r=t.create({baseURL:i,timeout:3e4});return r.interceptors.request.use((e=>I(this,void 0,void 0,(function*(){const t=yield this.getValidToken();return t&&(e.headers.Authorization=`Bearer ${t}`),e})))),r.interceptors.response.use((e=>e),(e=>I(this,void 0,void 0,(function*(){var t,i,n,o,s,a,A,d,c,l,g,u;const I=e.config;if(p("Axios response error",{url:null==I?void 0:I.url,status:null===(t=e.response)||void 0===t?void 0:t.status}),401===(null===(i=e.response)||void 0===i?void 0:i.status)&&!I._retry&&!(null===(n=I.url)||void 0===n?void 0:n.includes("/refreshToken"))){I._retry=!0;try{const e=yield this.attemptTokenRefresh();return I.headers.Authorization=`Bearer ${e}`,r(I)}catch(e){p("Axios 401 refresh failed",e),this.logout()}}const h=I._retryCount||0,E=null!==(a=null===(s=null===(o=this.config.errorHandling)||void 0===o?void 0:o.autoRetryNetwork)||void 0===s?void 0:s.maxRetries)&&void 0!==a?a:0;if(E>0&&h<E&&!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 y(`Retrying request (${h+1}/${E}) after ${t}ms`),yield new Promise((e=>setTimeout(e,t))),r(I)}return Promise.reject(e)})))),"undefined"==typeof window&&this.config.certificate&&(r.defaults.httpsAgent=new e.Agent({cert:this.config.certificate.cert,key:this.config.certificate.key,rejectUnauthorized:!0})),r}login(){return I(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(),y("Login successful"),{success:!0,user:this.authUser||void 0}}catch(e){return p("Login failed",e),{success:!1}}}))}loginWithEmailPassword(e){return I(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(),y("Email/password login successful"),{success:!0,user:this.authUser||void 0}}catch(e){return p("Email/password login failed",e),{success:!1}}}))}register(e){return I(this,void 0,void 0,(function*(){try{const t=yield this.up.register(e);return y("Registration successful"),{success:!0,message:t}}catch(e){return p("Registration failed",e),{success:!1}}}))}logout(){y("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 y("Cross-tab: auth state cleared in another tab"),void t(null);try{const e=JSON.parse(i.newValue);y("Cross-tab: auth state updated in another tab"),t(e)}catch(e){p("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 Ne(e){return new Ue(e)}const Se=Ne;export{Q as AuthServiceClient,Ue as Client,a as DEFAULT_CERT_PORT,s as DEFAULT_SERVICE_PATHS,o as FileStorageError,n as GroupPermission,C as LocalStorageTokenStorage,N as MemoryTokenStorage,R as NodeServiceClient,r as Predicate,v as RegistryServiceClient,U as SessionStorageTokenStorage,L as UpAuthServiceClient,K as UserServiceClient,A as buildCertAuthBaseUrl,E as configureLogger,Se as createClient,u as createDefaultErrorHandling,g as createDefaultServiceConfig,S as createTokenStorage,Ne as initClient,d as resolveServiceConfigs,l as validateSDKConfig,c as validateServiceConfig};
2
7
  //# sourceMappingURL=index.esm.js.map