harperdb 4.3.0-beta.11 → 4.3.0-beta.12

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.
@@ -4,7 +4,7 @@
4
4
  `).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:Uk.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(Hk,"findPs")});var dt=g((Hae,PO)=>{"use strict";var xk="__dbis__",qk="__txns__",Gk="__environment_name__",Fk="__dbi_defintion__",kk={EQUALS:"equals",STARTS_WITH:"startsWith",_STARTS_WITH:"starts_with",ENDS_WITH:"endsWith",_ENDS_WITH:"ends_with",CONTAINS:"contains",SEARCH_ALL:"searchAll",SEARCH_ALL_TO_MAP:"searchAllToMap",BATCH_SEARCH_BY_HASH:"batchSearchByHash",BATCH_SEARCH_BY_HASH_TO_MAP:"batchSearchByHashToMap",GREATER_THAN:"greaterThan",_GREATER_THAN:"greater_than",GREATER_THAN_EQUAL:"greaterThanEqual",_GREATER_THAN_EQUAL:"greater_than_equal",LESS_THAN:"lessThan",_LESS_THAN:"less_than",LESS_THAN_EQUAL:"lessThanEqual",_LESS_THAN_EQUAL:"less_than_equal",BETWEEN:"between"},Vk=["__createdtime__","__updatedtime__"],$k="\uFFFF",UO={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Yk=Object.values(UO);PO.exports={AUDIT_STORE_NAME:qk,INTERNAL_DBIS_NAME:xk,DBI_DEFINITION_NAME:Fk,SEARCH_TYPES:kk,TIMESTAMP_NAMES:Vk,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Gk,TRANSACTIONS_DBI_NAMES_ENUM:UO,TRANSACTIONS_DBIS:Yk,OVERFLOW_MARKER:$k}});var yr=g((xae,VO)=>{"use strict";var vO=M(),BO=dt(),HO={CONTINUE:100,OK:200,CREATED:201,BAD_REQUEST:400,UNAUTHORIZED:401,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_ALLOWED:405,REQUEST_TIMEOUT:408,CONFLICT:409,TOO_MANY_REQUESTS:429,INTERNAL_SERVER_ERROR:500,NOT_IMPLEMENTED:501,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504,HTTP_VERSION_NOT_SUPPORTED:505,INSUFFICIENT_STORAGE:507,NETWORK_AUTHENTICATION_REQUIRED:511},xO=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),qO={500:xO("There was an error processing your request."),400:"Invalid request"},Kk=qO[HO.INTERNAL_SERVER_ERROR],Wk={OP_NOT_SUPPORTED_FOR_FS:e=>`${e} is not available for this instance because it uses the File System data store.`,MISSING_VALUE:e=>`${e} is missing.`,INVALID_VALUE:e=>`${e} is invalid.`,NOT_FOUND:e=>`${e} not found.`},Qk={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},zk={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:e=>`There was an error downloading '${e}'.`,INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,INVALID_FILE_EXT_ERR:e=>`Error selecting correct parser - valid file type not found in json - ${e}`,MAX_FILE_SIZE_ERR:(e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:e=>`There was an error downloading '${e}' from AWS.`,WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},Jk={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${BO.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${BO.INTERNAL_DBIS_NAME}`,START_VALUE_REQUIRED:"start_value is required",END_VALUE_REQUIRED:"end_value is required",CANNOT_COMPARE_STRING_TO_NUMERIC_KEYS:"cannot compare a string to numeric keys",END_VALUE_MUST_BE_GREATER_THAN_START_VALUE:"end_value must be greater than or equal to start_value",UNKNOWN_SEARCH_TYPE:"unknown search type",CANNOT_DROP_TABLE_HASH_ATTRIBUTE:"cannot drop a table's hash attribute"},Xk={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${vO.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${vO.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes, check log for more info`,INVALID_FORWARD_SLASH_IN_HASH_ERR:"transaction aborted due to record(s) with a hash value that contains a forward slash, check log for more info",RECORD_MISSING_HASH_ERR:"transaction aborted due to record(s) with no hash value, check log for more info"},GO={GENERIC_AUTH_FAIL:"Login failed",USER_INACTIVE:"Cannot complete request: User is inactive",INVALID_TOKEN:"invalid token",NO_ENCRYPTION_KEYS:"unable to generate JWT as there are no encryption keys. please contact your administrator",INVALID_CREDENTIALS:"invalid credentials",PASSWORD_REQUIRED:"password is required",USERNAME_REQUIRED:"username is required",REFRESH_TOKEN_REQUIRED:"refresh_token is required",INVALID_AUTH_OBJECT:"invalid auth_object",INVALID_BODY:"invalid body",TOKEN_EXPIRED:"token expired",REFRESH_TOKEN_SAVE_FAILED:"unable to store refresh_token"},jk={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:e=>`Operation '${e}' is restricted to 'super_user' roles`,OP_NOT_FOUND:e=>`Operation '${e}' not found`,SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:(e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,USER_HAS_NO_PERMS:e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},Zk={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view database metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},eV={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`database '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`database '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in '${e}'`,SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},tV={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},rV={ALTER_USER_DUP_ROLES:e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,ALTER_USER_ROLE_NOT_FOUND:e=>`Update failed. Requested '${e}' role not found.`,DUP_ROLES_FOUND:e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,ROLE_NAME_NOT_FOUND:e=>`${e} role not found`,USER_ALREADY_EXISTS:e=>`User ${e} already exists`,USER_NOT_EXIST:e=>`User ${e} does not exist`},FO={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`},kO={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:e=>`ITC server received invalid event type: ${e}`},sV={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set fastifyRoutes enabled to true in hdb/harperdb-config.yaml file."},nV={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},iV={...GO,...zk,...Wk,...jk,...Zk,...eV,...tV,...rV,...Xk,...FO,...kO,...sV,...nV,...Qk};VO.exports={CHECK_LOGS_WRAPPER:xO,HDB_ERROR_MSGS:iV,DEFAULT_ERROR_MSGS:qO,DEFAULT_ERROR_RESP:Kk,HTTP_STATUS_CODES:HO,LMDB_ERRORS_ENUM:Jk,AUTHENTICATION_ERROR_MSGS:GO,VALIDATION_ERROR_MSGS:FO,ITC_ERRORS:kO}});var se=g((Gae,KO)=>{"use strict";var Go=yr(),oV=$(),aV=M(),Xl=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,$O),this.statusCode=s||Go.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Go.DEFAULT_ERROR_MSGS[s]?Go.DEFAULT_ERROR_MSGS[s]:Go.DEFAULT_ERROR_MSGS[Go.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&oV[n](i)}},Lh=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},Mh=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function $O(e,t,r,s=aV.LOG_LEVELS.ERROR,n=null,i=!1){if(YO(e))return e;let o=new Xl(e,t,r,s,n);return i&&delete o.stack,o}a($O,"handleHDBError");function YO(e){return e.__proto__.constructor.name===Xl.name}a(YO,"isHDBError");KO.exports={isHDBError:YO,handleHDBError:$O,ClientError:Lh,ServerError:Mh,hdb_errors:Go}});var Je=g((kae,ZO)=>{"use strict";var hc=M(),cV=Q(),sr=ee(),mc=require("path"),uV=require("minimist"),WO=require("fs-extra"),QO=require("lodash");sr.initSync();var{CONFIG_PARAMS:Jn,DATABASES_PARAM_CONFIG:_c,SYSTEM_SCHEMA_NAME:jl}=hc,dc,fc,Ec;function zO(){if(dc!==void 0)return dc;if(sr.getHdbBasePath()!==void 0)return dc=sr.get(Jn.STORAGE_PATH)||mc.join(sr.getHdbBasePath(),hc.DATABASES_DIR_NAME),dc}a(zO,"getBaseSchemaPath");function JO(){if(fc!==void 0)return fc;if(sr.getHdbBasePath()!==void 0)return fc=jO(jl),fc}a(JO,"getSystemSchemaPath");function XO(){if(Ec!==void 0)return Ec;if(sr.getHdbBasePath()!==void 0)return Ec=sr.get(hc.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||mc.join(sr.getHdbBasePath(),hc.TRANSACTIONS_DIR_NAME),Ec}a(XO,"getTransactionAuditStoreBasePath");function lV(e,t){let r=sr.get(Jn.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||mc.join(XO(),e.toString())}a(lV,"getTransactionAuditStorePath");function jO(e,t){e=e.toString(),t=t&&t.toString();let r=sr.get(hc.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||mc.join(zO(),e)}a(jO,"getSchemaPath");function _V(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,uV(process.argv));let s=r[Jn.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!cV.isObject(s))throw o;i=s}for(let o of i){let c=o[jl];if(!c)continue;let u=sr.get(Jn.DATABASES);u=u??{};let _=c?.tables?.[t]?.[_c.PATH];if(_)return QO.set(u,[jl,_c.TABLES,t,_c.PATH],_),sr.setProperty(Jn.DATABASES,u),_;let l=c?.[_c.PATH];if(l)return QO.set(u,[jl,_c.PATH],l),sr.setProperty(Jn.DATABASES,u),l}}let n=r[Jn.STORAGE_PATH.toUpperCase()];if(n){if(!WO.pathExistsSync(n))throw new Error(n+" does not exist");let i=mc.join(n,e);return WO.mkdirsSync(i),sr.setProperty(Jn.STORAGE_PATH,n),i}return JO()}a(_V,"initSystemSchemaPaths");function dV(){dc=void 0,fc=void 0,Ec=void 0}a(dV,"resetPaths");ZO.exports={getBaseSchemaPath:zO,getSystemSchemaPath:JO,getTransactionAuditStorePath:lV,getTransactionAuditStoreBasePath:XO,getSchemaPath:jO,initSystemSchemaPaths:_V,resetPaths:dV}});var wr=g((Kae,nb)=>{"use strict";var fV=yr().LMDB_ERRORS_ENUM,$ae=require("lmdb"),EV=dt(),Yae=require("buffer").Buffer,{OVERFLOW_MARKER:eb,MAX_SEARCH_KEY_LENGTH:Zl}=EV,tb=["number","string","symbol","boolean","bigint"];function hV(e){if(e=e?.primaryStore||e,!e)throw new Error(fV.ENV_REQUIRED)}a(hV,"validateEnv");function mV(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(mV,"stringifyData");function pV(e){return e instanceof Date?e.valueOf():e}a(pV,"convertKeyValueToWrite");function SV(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(tb.includes(typeof e))return e.length>Zl?[e.slice(0,Zl)+eb]:[e];let r;if(Array.isArray(e)){r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s];if(tb.includes(typeof i))i.length>Zl?r.push(i.slice(0,Zl)+eb):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}a(SV,"getIndexedValues");var e_=0,rb=0;function sb(){rb=Date.now()-performance.now()}a(sb,"adjustStartTime");sb();var TV=6e4;setInterval(sb,TV).unref();function gV(){let e=performance.now()+rb;return e>e_?(e_=e,e):(e_+=488e-6,e_)}a(gV,"getNextMonotonicTime");nb.exports={validateEnv:hV,stringifyData:mV,convertKeyValueToWrite:pV,getNextMonotonicTime:gV,getIndexedValues:SV}});var ib,As,Uh,pc=Re(()=>{ib=require("events"),As=class extends ib.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new Uh;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){return this.queue?.shift()}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},Uh=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});var vi={};Ye(vi,{server:()=>tt});var ob,tt,nr=Re(()=>{ob=require("../index"),tt={};(0,ob._assignPackageExport)("server",tt)});var Bh={};Ye(Bh,{loadGQLSchema:()=>OV,start:()=>vh,startOnMainThread:()=>AV});function vh({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),n)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let H=function(P){if(P.kind==="NonNullType"){let J=H(P.type);return J.nullable=!1,J}if(P.kind==="ListType")return{type:"array",elements:H(P.type)};let B={type:P.name?.value};return Object.defineProperty(B,"location",{value:P.loc.startToken}),B};a(H,"getProperty");let T=S.name.value,b=[],R={table:null,database:null,properties:b};f.set(T,R);for(let P of S.directives){if(P.name.value==="table"){for(let k of P.arguments)R[k.name.value]=k.value.value;R.schema&&(R.database=R.schema),R.table||(R.table=T),R.audit&&(R.audit=R.audit!=="false"),R.attributes=R.properties,E.push(R)}if(P.name.value==="sealed"&&(R.sealed=!0),P.name.value==="export"){R.export=!0;for(let k of P.arguments)k.name.value==="name"&&(R.export={name:k.value.value})}}let L=!1;for(let P of S.fields){let k=H(P.type);k.name=P.name.value,b.push(k);for(let B of P.directives)if(B.name.value==="primaryKey")L?console.warn("Can not define two attributes as a primary key"):(k.isPrimaryKey=!0,L=!0);else if(B.name.value==="indexed")k.indexed=!0;else if(B.name.value==="relationship"){let J={};for(let z of B.arguments)J[z.name.value]=z.value.value;k.relationship=J}else if(B.name.value==="createdTime")k.assignCreatedTime=!0;else if(B.name.value==="updatedTime")k.assignUpdatedTime=!0;else if(B.name.value==="expiresAt")k.expiresAt=!0;else if(B.name.value==="allow"){let J=k.authorizedRoles=[];for(let z of B.arguments)z.name.value==="role"&&J.push(z.value.value)}}R.type=T,T==="Query"&&(h=R)}function p(S){let T=f.get(S.type);T?(Object.defineProperty(S,"properties",{value:T.properties}),Object.defineProperty(S,"definition",{value:T})):S.type==="array"?p(S.elements):RV.includes(S.type)||(0,ab.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${n}`)}a(p,"connectPropertyType");for(let S of f.values())for(let T of S.properties)p(T);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,Ph.dirname)(s),S.tableClass):i.set((0,Ph.dirname)(s)+"/"+(S.export.name||S.type),S.tableClass))}}var Ph,ab,RV,AV,OV,cb=Re(()=>{Ph=require("path");Ae();ab=x(Ke()),RV=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(vh,"start");AV=vh,OV=vh({ensureTable:ct}).handleFile});async function t_(e){return bV?(Sc||(Sc=NV(wV)),(await(await Sc).import(e)).namespace):import(e)}async function NV(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Sc=new Compartment({console,Math,Date,fetch:yV,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,lb.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:qt,tables:Ir,databases:rt})}};let s=await(0,ub.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),Sc}function yV(e,t){let r=typeof e=="string"||e.url;if(new URL(r).protocol!="https")throw new Error("Only https is allowed in fetch");return fetch(e,t)}function wV(){return{Resource:qt,tables:Ir}}var ub,lb,bV,Sc,Hh=Re(()=>{Os();Ae();ub=require("fs/promises"),lb=require("path"),bV=!1;a(t_,"secureImport");a(NV,"getCompartment");a(yV,"secureOnlyFetch");a(wV,"getGlobalVars")});var qh={};Ye(qh,{handleFile:()=>IV});async function IV(e,t,r,s){let n=new Map,i=(0,_b.pathToFileURL)(r).toString(),o=await t_(i);u(o.default)&&s.set((0,xh.dirname)(t),o.default),c(o,(0,xh.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?s.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),n}var _b,xh,db=Re(()=>{_b=require("url");Hh();xh=require("path");a(IV,"handleFile")});var Fh={};Ye(Fh,{start:()=>CV});function CV({resources:e}){e.set("login",Gh),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Gh,fb=Re(()=>{Os();a(CV,"start");Gh=class extends qt{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var gb={};Ye(gb,{parse:()=>Vh,streamAsJSON:()=>Tc,stringify:()=>Bi});function Tc(e){return new kh({value:e})}function Eb(e){return console.error(e),JSON.stringify(e.toString())}function hb(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Bi(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===Sb)return Tb(e);if(t.resolution)return t.resolution.then(()=>Bi(e));throw t}}function Tb(e){let t=typeof e;if(t==="object"){if(e===null)return"null";e.toJSON&&(e=e.toJSON());let r;if(Array.isArray(e)){r="[";for(let s=0;s<e.length;s++)s>0&&(r+=","),r+=Tb(e[s]);return r+"]"}else{r="{";let s=!0;for(let n in e)s?s=!1:r+=",",r+=JSON.stringify(n)+":"+Bi(e[n]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function Vh(e){return MV.test(e)?DV.parse(e):JSON.parse(e)}var mb,pb,DV,LV,Sb,kh,MV,$h=Re(()=>{mb=require("stream"),pb=x(require("json-bigint-fixes")),DV=(0,pb.default)({useNativeBigInt:!0}),LV=1e4,Sb={};BigInt.prototype.toJSON=function(){throw Sb};a(Tc,"streamAsJSON");kh=class extends mb.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),Eb)}catch(n){yield Eb(n)}else yield Bi(t)}else yield Bi(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);hb(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>LV?this.flush():!0)}flush(){let t=super.push(this.buffer.join(""));return this.buffer=[],this.bufferSize=0,t}readIterator(t){try{let r;if(t.childIterator)return hb(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let s of this.activeIterators)t?s.throw(t):s.return();r()}};a(Eb,"handleError");a(hb,"when");a(Bi,"stringify");a(Tb,"jsStringify");MV=/-?\d{16,}/;a(Vh,"parse")});var Ub=g((cce,Mb)=>{"use strict";var Yh=require("recursive-iterator"),UV=require("alasql"),Kh=require("clone"),Rb=Q(),{handleHDBError:Ab,hdb_errors:PV}=se(),{HDB_ERROR_MSGS:Ob,HTTP_STATUS_CODES:bb}=PV,{getDatabases:vV}=(Ae(),ne(Ge)),BV=["DISTINCT_ARRAY"],Nb=Symbol("validateTables"),Wh=Symbol("validateTable"),ace=Symbol("getAllColumns"),yb=Symbol("validateAllColumns"),r_=Symbol("findColumn"),wb=Symbol("validateOrderBy"),gc=Symbol("validateSegment"),Qh=Symbol("validateColumn"),Ib=Symbol("setColumnsForTable"),Cb=Symbol("checkColumnsForAsterisk"),Db=Symbol("validateGroupBy"),Lb=Symbol("hasColumns"),zh=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Nb](),this[Cb](),this[yb]()}[Nb](){if(this[Lb]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Wh](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Wh](t.table)})}}[Lb](){let t=!1,r=new Yh(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Wh](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=vV();if(!r[t.databaseid])throw Ab(new Error,Ob.SCHEMA_NOT_FOUND(t.databaseid),bb.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Ab(new Error,Ob.TABLE_NOT_FOUND(t.databaseid,t.tableid),bb.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=Kh(n);i.table=Kh(t),this.attributes.push(i)})}[r_](t){return this.attributes.filter(r=>t.tableid?(r.table.as===t.tableid||r.table.tableid===t.tableid)&&r.attribute===t.columnid:r.attribute===t.columnid)}[Cb](){let t=new Yh(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Ib](r.tableid)}[Ib](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new UV.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[yb](){this[gc](this.statement.columns,!1),this[gc](this.statement.joins,!1),this[gc](this.statement.where,!1),this[Db](this.statement.group,!1),this[gc](this.statement.order,!0)}[gc](t,r){if(!t)return;let s=new Yh(t),n=[];for(let{node:i,path:o}of s)!Rb.isEmpty(i)&&!Rb.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[wb](i):n.push(this[Qh](i)));return n}[Db](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&BV.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Kh(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[r_](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[r_](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[wb](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[Qh](t)}[Qh](t){let r=this[r_](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};Mb.exports=zh});var vb=g((lce,Pb)=>{"use strict";var Jh=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};Pb.exports=Jh});var Hb=g((dce,Bb)=>{"use strict";var Xh=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};Bb.exports=Xh});var Fb={};Ye(Fb,{HAS_EXPIRATION:()=>nm,LAST_TIMESTAMP_PLACEHOLDER:()=>Oc,LOCAL_TIMESTAMP:()=>HV,METADATA:()=>Rc,NO_TIMESTAMP:()=>Zh,PENDING_LOCAL_TIME:()=>im,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>sm,RecordEncoder:()=>rm,TIMESTAMP_ASSIGN_LAST:()=>qV,TIMESTAMP_ASSIGN_NEW:()=>qb,TIMESTAMP_ASSIGN_PREVIOUS:()=>Gb,TIMESTAMP_PLACEHOLDER:()=>s_,TIMESTAMP_RECORD_PREVIOUS:()=>em,getUpdateRecord:()=>om,handleLocalTimeForGets:()=>a_});function FV(){return Ac[0]=Ac[0]^64,xV.getFloat64(0)}function a_(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),u=c?.value,_=u?.[Rc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[Rc]>=0?c.value:c};let s=e.getRange;e.getRange=function(i){let o=s.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let u=c.value,_=u[Rc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})};let n=e.useReadTransaction();if(n.done(),!n.done.isTracked){let i=n.constructor,o=n.use,c=n.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Hi.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Hi.length;u++){let _=Hi[u].deref();(!_||_.isDone||_.isCommitted)&&Hi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function om(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?Fo=i?.localTime?em|Gb:Zh:Fo=u?i?.localTime?em|16384:qb|16384:Zh,l>0&&(c|=nm),i_=c,tm=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Fo>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(s,n,h);if(u){let T=_?.user?.username;if(E&&(n_=e.encoder.encode(E)),f&&i?.localTime){let b=i?.localTime,R=r.get(b);if(R){let L=Dt(R).previousLocalTime;return r.put(b,o_(o,t,s,L,T,d,n_),{ifVersion:p}),S}}r.put(Oc,o_(o,t,s,i?.localTime?1:0,T,d,n_),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var xb,jh,s_,Oc,sm,HV,Rc,Ac,xV,Zh,qb,qV,Gb,em,nm,im,GV,n_,Fo,i_,tm,rm,Hi,bc=Re(()=>{xb=require("msgpackr");xi();jh=x($()),s_=new Uint8Array([1,1,1,1,4,64,0,0]),Oc=new Uint8Array([1,1,1,1,1,0,0,0]),sm=new Uint8Array([1,1,1,1,3,64,0,0]),HV=Symbol("local-timestamp"),Rc=Symbol("metadata"),Ac=new Uint8Array(8),xV=new DataView(Ac.buffer,0,8),Zh=0,qb=0,qV=1,Gb=3,em=4,nm=16,im=1,Fo=0,i_=-1,tm=0,rm=class extends xb.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,n){if(Fo||i_>=0){let i=0,o=Fo;o&&(i+=8,Fo=0);let c=i_,u=tm;c>=0&&(i+=2,i_=-1,u&&(i+=8,tm=0));let _=GV=r.call(this,s,n|2048|i);n_=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(s_[4]=o,s_[5]=o>>8,_.set(s_,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,s,n)}}decode(t,r){let s=r?.start||0,n=r>-1?r:r?.end||t.length,i=t[s],o=0;try{if(i<32&&n>2){let c=s,u;if(i===2){if(t.copy)t.copy(Ac,0,c),c+=8;else for(let d=0;d<8;d++)Ac[d]=t[c++];u=FV(),i=t[c]}let _;i<32&&(o=i,c+=2,o&nm&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,n),n-c);return{localTime:u,value:l,[Rc]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(FV,"getTimestamp");a(a_,"handleLocalTimeForGets");Hi=[];setInterval(()=>{for(let e=0;e<Hi.length;e++){let t=Hi[e].deref();!t||t.isDone||t.isCommitted?Hi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(jh.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):jh.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();a(om,"getUpdateRecord")});var c_=g((mce,kb)=>{"use strict";var cm=ee(),um=M(),{RecordEncoder:kV}=(bc(),ne(Fb));cm.initSync();var VV=cm.get(um.CONFIG_PARAMS.STORAGE_COMPRESSION),$V=cm.get(um.CONFIG_PARAMS.STORAGE_CACHING)!==!1,YV=um.UPDATES_PROPERTY,am=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=VV&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=$V&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:kV},this.alwaysLazyProperty=s=>s===YV)}};kb.exports=am});var l_=g((Sce,Kb)=>{"use strict";var Xn=ee(),qi=M();Xn.initSync();var KV=Xn.get(qi.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Xn.get(qi.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Xn.get(qi.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Vb=Xn.get(qi.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),WV=Xn.get(qi.CONFIG_PARAMS.STORAGE_NOREADAHEAD),$b=Xn.get(qi.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD),Yb=Xn.get(qi.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN),u_=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=KV,this.noFSAccess=!0,Vb!==void 0&&(this.overlappingSync=Vb),$b&&(this.maxFreeSpaceToLoad=$b),Yb&&(this.maxFreeSpaceToRetain=Yb),this.noReadAhead=WV}};Kb.exports=u_;u_.MAX_DBS=1e4});var We=g((gce,rN)=>{"use strict";var _m=require("lmdb"),bs=require("fs-extra"),Cr=require("path"),__=wr(),zb=$(),ir=yr().LMDB_ERRORS_ENUM,d_=Hb(),dm=c_(),Jb=l_(),jn=dt(),Wb=M(),{table:QV,resetDatabases:zV}=(Ae(),ne(Ge)),Qb=ee(),Ns=jn.INTERNAL_DBIS_NAME,Xb=jn.DBI_DEFINITION_NAME,JV="data.mdb",XV="lock.mdb",Nc=".mdb",jV="-lock",lm=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=rs(t,r),this.key_type=this.dbi[jn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[jn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new _m.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function f_(e,t){if(e===void 0)throw new Error(ir.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(ir.ENV_NAME_REQUIRED)}a(f_,"pathEnvNameValidation");async function fm(e,t,r=!0){try{await bs.access(e)}catch(s){throw s.code==="ENOENT"?new Error(ir.INVALID_BASE_PATH):s}try{let s=Cr.join(e,t+Nc);return await bs.access(s,bs.constants.R_OK|bs.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await bs.access(Cr.join(e,t,JV),bs.constants.R_OK|bs.constants.F_OK),Cr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(ir.INVALID_ENVIRONMENT)}else throw new Error(ir.INVALID_ENVIRONMENT);throw s}}a(fm,"validateEnvironmentPath");function E_(e,t){if(__.validateEnv(e),t===void 0)throw new Error(ir.DBI_NAME_REQUIRED)}a(E_,"validateEnvDBIName");async function ZV(e,t,r=!1,s=!1){f_(e,t);let n=Cr.basename(e);t=t.toString();let i=Qb.get(Wb.CONFIG_PARAMS.DATABASES);i||Qb.setProperty(Wb.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await fm(e,t,s),jb(e,t,r)}catch(o){if(o.message===ir.INVALID_ENVIRONMENT){let c=Cr.join(e,t);await bs.mkdirp(s?c:e);let u=new Jb(s?c:c+Nc,!1),_=_m.open(u);_.dbis=Object.create(null);let l=new dm(!1);_.openDB(Ns,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Em(e,t,r);return _[jn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(ZV,"createEnvironment");async function e$(e,t,r,s=!0){f_(e,t),t=t.toString();let n=Cr.join(e,t);return QV({table:t,database:Cr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(e$,"copyEnvironment");async function jb(e,t,r=!1){f_(e,t),t=t.toString();let s=Em(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await fm(e,t),i=Cr.join(e,t+Nc),o=n!=i,c=new Jb(n,o),u=_m.open(c);u.dbis=Object.create(null);let _=eN(u);for(let l=0;l<_.length;l++)rs(u,_[l]);return u[jn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(jb,"openEnvironment");async function t$(e,t,r=!1){f_(e,t),t=t.toString();let s=Cr.join(e,t+Nc),n=await fm(e,t);if(global.lmdb_map!==void 0){let i=Em(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Zb(o),delete global.lmdb_map[i]}}await bs.remove(n),await bs.remove(n===s?n+jV:Cr.join(Cr.dirname(n),XV))}a(t$,"deleteEnvironment");async function Zb(e){__.validateEnv(e);let t=e[jn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Zb,"closeEnvironment");function Em(e,t,r=!1){let n=`${Cr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Em,"getCachedEnvironmentName");function r$(e){__.validateEnv(e);let t=Object.create(null),r=rs(e,Ns);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Ns)try{t[s]=Object.assign(new d_,n)}catch{zb.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(r$,"listDBIDefinitions");function eN(e){__.validateEnv(e);let t=[],r=rs(e,Ns);for(let{key:s}of r.getRange({start:!1}))s!==Ns&&t.push(s);return t}a(eN,"listDBIs");function s$(e,t){let s=rs(e,Ns).getEntry(t),n=new d_;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{zb.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(s$,"getDBIDefinition");function tN(e,t,r,s=!r){if(E_(e,t),t=t.toString(),t===Ns)throw new Error(ir.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return rs(e,t)}catch(n){if(n.message===ir.DBI_DOES_NOT_EXIST){let i=new dm(r,s===!0),o=e.openDB(t,i),c=new d_(r===!0,s);return o[Xb]=c,rs(e,Ns).putSync(t,c),e.dbis[t]=o,o}throw n}}a(tN,"createDBI");function rs(e,t){if(E_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Ns?r=s$(e,t):r=new d_,r===void 0)throw new Error(ir.DBI_DOES_NOT_EXIST);let s;try{let n=new dm(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(ir.DBI_DOES_NOT_EXIST):n}return s[Xb]=r,e.dbis[t]=s,s}a(rs,"openDBI");function n$(e,t){E_(e,t),t=t.toString();let r=rs(e,t),s=r.getStats();return r[jn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(n$,"statDBI");async function i$(e,t){try{let r=Cr.join(e,t+Nc);return(await bs.stat(r)).size}catch{throw new Error(ir.INVALID_ENVIRONMENT)}}a(i$,"environmentDataSize");function o$(e,t){if(E_(e,t),t=t.toString(),t===Ns)throw new Error(ir.CANNOT_DROP_INTERNAL_DBIS_NAME);rs(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],rs(e,Ns).removeSync(t)}a(o$,"dropDBI");function a$(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{rs(e,i)}catch(o){if(o.message===ir.DBI_DOES_NOT_EXIST)tN(e,i,i!==t,i===t),s=!0;else throw o}}s&&zV()}a(a$,"initializeDBIs");rN.exports={openDBI:rs,openEnvironment:jb,createEnvironment:ZV,listDBIs:eN,listDBIDefinitions:r$,createDBI:tN,dropDBI:o$,statDBI:n$,deleteEnvironment:t$,initializeDBIs:a$,TransactionCursor:lm,environmentDataSize:i$,copyEnvironment:e$,closeEnvironment:Zb}});var nN=g((Ace,sN)=>{"use strict";var hm=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};sN.exports=hm});var oN=g((bce,iN)=>{"use strict";var mm=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};iN.exports=mm});var cN=g((yce,aN)=>{"use strict";var pm=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};aN.exports=pm});var ko=g((Lce,_N)=>{"use strict";var c$=We(),u$=nN(),l$=oN(),_$=cN(),Ks=wr(),yc=yr().LMDB_ERRORS_ENUM,d$=dt(),pn=M(),f$=Q(),E$=require("uuid"),Ice=require("lmdb"),{handleHDBError:h$,hdb_errors:m$}=se(),{OVERFLOW_MARKER:Cce,MAX_SEARCH_KEY_LENGTH:Dce}=d$,uN=ee();uN.initSync();var h_=uN.get(pn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Sm=pn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Gi=pn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function p$(e,t,r,s,n=Ks.getNextMonotonicTime()){Am(e,t,r,s),Tm(e,t,r);let i=new u$,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];lN(_,!0,n);let l=S$(e,t,r,_),d=_[t];o.push(l),c.push(d)}return gm(o,c,s,i,n)}a(p$,"insertRecords");function S$(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][pn.FUNC_VAL],s[o]=c)}let u=Ks.getIndexedValues(c),_=e.dbis[o];if(u){h_&&_.prefetch(u.map(l=>({key:l,value:n})),m_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}h_&&e.dbis[t].prefetch([n],m_),e.dbis[t].put(n,s,s[Gi])})}a(S$,"insertRecord");function T$(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(T$,"removeSkippedRecords");function lN(e,t,r){let s=r>0;(s||!Number.isInteger(e[Gi]))&&(e[Gi]=r||(r=Ks.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Sm]))&&(e[Sm]=r||Ks.getNextMonotonicTime()):delete e[Sm]}a(lN,"setTimestamps");function Tm(e,t,r){r.indexOf(pn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(pn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(pn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(pn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),c$.initializeDBIs(e,t,r)}a(Tm,"initializeTransaction");async function g$(e,t,r,s,n=Ks.getNextMonotonicTime()){Am(e,t,r,s),Tm(e,t,r);let i=new l$,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=Rm(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return gm(c,u,s,i,n,o)}a(g$,"updateRecords");async function R$(e,t,r,s,n=Ks.getNextMonotonicTime()){try{Am(e,t,r,s)}catch(u){throw h$(u,u.message,m$.HTTP_STATUS_CODES.BAD_REQUEST)}Tm(e,t,r);let i=new _$,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;f$.isEmpty(_[t])?(l=E$.v4(),_[t]=l):l=_[t];let d=Rm(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return gm(o,c,s,i,n)}a(R$,"upsertRecords");async function gm(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Ks.getNextMonotonicTime(),T$(r,i),s}a(gm,"finalizeWrite");function Rm(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(lN(r,!l,o),Number.isInteger(r[Gi])&&_[Gi]>r[Gi])return!1;l&&n.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let T=_[h];if(typeof p=="function"){let R=p([[_]]);Array.isArray(R)&&(p=R[0][pn.FUNC_VAL],r[h]=p)}if(p===T)continue;let b=Ks.getIndexedValues(T);if(b){h_&&S.prefetch(b.map(R=>({key:R,value:s})),m_);for(let R=0,L=b.length;R<L;R++)S.remove(b[R],s)}if(b=Ks.getIndexedValues(p),b){h_&&S.prefetch(b.map(R=>({key:R,value:s})),m_);for(let R=0,L=b.length;R<L;R++)S.put(b[R],s)}}let E=Object.assign({},_,r);c.put(s,E,E[Gi])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:Rm(e,t,r,s,n,i,o))}a(Rm,"updateUpsertRecord");function A$(e,t,r){if(Ks.validateEnv(e),t===void 0)throw new Error(yc.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(yc.WRITE_ATTRIBUTES_REQUIRED):new Error(yc.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(A$,"validateBasic");function Am(e,t,r,s){if(A$(e,t,r),!Array.isArray(s))throw s===void 0?new Error(yc.RECORDS_REQUIRED):new Error(yc.RECORDS_MUST_BE_ARRAY)}a(Am,"validateWrite");function m_(){}a(m_,"noop");_N.exports={insertRecords:p$,updateRecords:g$,upsertRecords:R$}});var Fi=g((Uce,O$)=>{O$.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var Qs=g((Pce,EN)=>{"use strict";var fN=Q(),dN=M(),Vo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ws=require("joi"),Zn={schema_format:{pattern:Vo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},b$=Ws.alternatives(Ws.string().min(1).max(Zn.schema_length.maximum).pattern(Vo).messages({"string.pattern.base":"{:#label} "+Zn.schema_format.message}),Ws.number(),Ws.array()).required(),N$=Ws.alternatives(Ws.string().min(1).max(Zn.schema_length.maximum).pattern(Vo).messages({"string.pattern.base":"{:#label} "+Zn.schema_format.message}),Ws.number()),y$=Ws.alternatives(Ws.string().min(1).max(Zn.schema_length.maximum).pattern(Vo).messages({"string.pattern.base":"{:#label} "+Zn.schema_format.message}),Ws.number()).required();function w$(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Zn.schema_length.maximum?`'${e}' maximum of 250 characters`:Vo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(w$,"checkValidTable");function I$(e,t){return fN.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(I$,"validateSchemaExists");function C$(e,t){let r=t.state.ancestors[0].schema;return fN.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(C$,"validateTableExists");function D$(e,t){return e.toLowerCase()===dN.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${dN.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(D$,"validateSchemaName");EN.exports={common_validators:Zn,schema_regex:Vo,hdb_schema_table:b$,validateSchemaExists:I$,validateTableExists:C$,validateSchemaName:D$,checkValidTable:w$,hdb_database:N$,hdb_table:y$}});var Xe=g((Bce,hN)=>{"use strict";var or=require("validate.js");or.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||or.validators.type.checks[t](e)?null:` must be a '${t}' value`};or.validators.type.checks={Object:function(e){return or.isObject(e)&&!or.isArray(e)},Array:or.isArray,Integer:or.isInteger,Number:or.isNumber,String:or.isString,Date:or.isDate,Boolean:function(e){return typeof e=="boolean"}};or.validators.hasValidFileExt=function(e,t){return or.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};hN.exports={validateObject:L$,validateObjectAsync:M$,validateBySchema:U$};function L$(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=or(e,t,{format:"flat"});return r?new Error(r):null}a(L$,"validateObject");async function M$(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await or.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(M$,"validateObjectAsync");function U$(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(U$,"validateBySchema")});var p_=g((xce,mN)=>{var{common_validators:zs}=Qs(),Ic=Xe(),wc="is required",ft={database:{presence:!1,format:zs.schema_format,length:zs.schema_length},schema:{presence:!1,format:zs.schema_format,length:zs.schema_length},table:{presence:!0,format:zs.schema_format,length:zs.schema_length},attribute:{presence:!0,format:zs.schema_format,length:zs.schema_length},hash_attribute:{presence:!0,format:zs.schema_format,length:zs.schema_length}};function Cc(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(Cc,"makeAttributesStrings");function P$(e){return e=Cc(e),ft.table.presence=!1,ft.attribute.presence=!1,ft.hash_attribute.presence=!1,Ic.validateObject(e,ft)}a(P$,"schema_object");function v$(e){return e=Cc(e),ft.table.presence={message:wc},ft.attribute.presence=!1,ft.hash_attribute.presence=!1,Ic.validateObject(e,ft)}a(v$,"table_object");function B$(e){return e=Cc(e),ft.table.presence={message:wc},ft.attribute.presence=!1,Ic.validateObject(e,ft)}a(B$,"create_table_object");function H$(e){return e=Cc(e),ft.table.presence={message:wc},ft.attribute.presence={message:wc},ft.hash_attribute.presence=!1,Ic.validateObject(e,ft)}a(H$,"attribute_object");function x$(e){return e=Cc(e),ft.table.presence={message:wc},ft.attribute.presence=!1,ft.hash_attribute.presence=!1,Ic.validateObject(e,ft)}a(x$,"describe_table");function q$(e){if(e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(q$,"validateTableResidence");mN.exports={schema_object:P$,create_table_object:B$,table_object:v$,attribute_object:H$,describe_table:x$,validateTableResidence:q$}});var SN=g((Gce,pN)=>{"use strict";var G$=require("uuid"),Om=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||G$.v4(),this.schema_table=`${this.schema}.${this.table}`}};pN.exports=Om});var S_=g((kce,TN)=>{"use strict";var F$=SN(),bm=class extends F${static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};TN.exports=bm});var RN=g(($ce,gN)=>{"use strict";gN.exports=V$;var k$="inserted";function V$(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===k$?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(V$,"returnObject")});var T_=g((Kce,yN)=>{"use strict";var $$=M(),Nm=We(),Y$=ko(),{getSystemSchemaPath:K$,getSchemaPath:W$}=Je(),Q$=Fi(),z$=p_(),J$=S_(),X$=RN(),{handleHDBError:AN,hdb_errors:bN}=se(),ON=Q(),{HTTP_STATUS_CODES:j$}=bN,ym=Q$.hdb_attribute,NN=[];for(let e=0;e<ym.attributes.length;e++)NN.push(ym.attributes[e].attribute);var Z$="inserted";yN.exports=e1;async function e1(e){let t=z$.attribute_object(e);if(t)throw AN(new Error,t.message,bN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&ON.checkGlobalSchemaTable(e.schema,e.table);if(r)throw AN(new Error,r,j$.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=ON.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new J$(e.schema,e.table,e.attribute,e.id);try{let i=await Nm.openEnvironment(W$(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);Nm.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Nm.openEnvironment(K$(),$$.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Y$.insertRecords(o,ym.hash_attribute,NN,[n]);return X$(Z$,c,{records:[n]},u)}catch(i){throw i}}a(e1,"lmdbCreateAttribute")});var Im=g((Qce,IN)=>{var{hdb_table:t1,hdb_database:wN}=Qs(),r1=Xe(),wm=require("joi"),s1={undefined:"undefined",null:"null"},n1=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||s1[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),i1=wm.object({database:wN,schema:wN,table:t1,records:wm.array().items(wm.object().custom(n1)).required()});IN.exports=function(e){return r1.validateBySchema(e,i1)}});var Dc=g((Xce,DN)=>{"use strict";var Sn=Q(),CN=$(),Jce=Im(),{getDatabases:o1}=(Ae(),ne(Ge)),{ClientError:ki}=se();DN.exports=a1;function a1(e){if(Sn.isEmpty(e))throw new ki("invalid update parameters defined.");if(Sn.isEmptyOrZeroLength(e.schema))throw new ki("invalid schema specified.");if(Sn.isEmptyOrZeroLength(e.table))throw new ki("invalid table specified.");if(!Array.isArray(e.records))throw new ki("records must be an array");let t=o1()[e.schema]?.[e.table];if(Sn.isEmpty(t))throw new ki(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&Sn.isEmptyOrZeroLength(o[r]))throw CN.error("a valid hash attribute must be provided with update record:",o),new ki("a valid hash attribute must be provided with update record, check log for more info");if(!Sn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw CN.error(`a valid hash value must be provided with ${e.operation} record:`,o),new ki(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Sn.isEmpty(o[r])&&o[r]!==""&&s.has(Sn.autoCast(o[r]))&&(o.skip=!0),s.add(Sn.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(a1,"insertUpdateValidate")});var Lc=g((Zce,LN)=>{"use strict";var c1=M().OPERATIONS_ENUM,Cm=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=c1.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};LN.exports=Cm});var Mc=g((rue,UN)=>{"use strict";var tue=Lc(),g_=M(),Dm=Q(),MN=$(),u1=require("uuid"),{handleHDBError:R_,hdb_errors:l1}=se(),{HDB_ERROR_MSGS:A_,HTTP_STATUS_CODES:O_}=l1;UN.exports=_1;function _1(e,t,r){for(let n=0;n<t.length;n++)d1(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];f1(i,r,e.operation)}}a(_1,"processRows");function d1(e){if(Buffer.byteLength(String(e))>g_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw R_(new Error,A_.ATTR_NAME_LENGTH_ERR(e),O_.BAD_REQUEST,void 0,void 0,!0);if(Dm.isEmptyOrZeroLength(e)||Dm.isEmpty(e.trim()))throw R_(new Error,A_.ATTR_NAME_NULLISH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}a(d1,"validateAttribute");function f1(e,t,r){if(!e.hasOwnProperty(t)||Dm.isEmptyOrZeroLength(e[t])){if(r===g_.OPERATIONS_ENUM.INSERT||r===g_.OPERATIONS_ENUM.UPSERT){e[t]=u1.v4();return}throw MN.error("Update transaction aborted due to record with no hash value:",e),R_(new Error,A_.RECORD_MISSING_HASH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>g_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw MN.error(e),R_(new Error,A_.HASH_VAL_LENGTH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}a(f1,"validateHash")});var vN=g((nue,PN)=>{"use strict";var Lm=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};PN.exports=Lm});var xN=g((oue,HN)=>{"use strict";var Mm=We(),E1=$(),BN=yr().LMDB_ERRORS_ENUM;HN.exports=h1;async function h1(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await Mm.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==BN.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Mm.closeEnvironment(global.lmdb_map[s]),await Mm.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==BN.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){E1.error(t)}}a(h1,"cleanLMDBMap")});var Tn=g((cue,kN)=>{"use strict";var Uc=require("crypto"),m1=ee(),{CONFIG_PARAMS:p1}=M(),GN="aes-256-cbc",S1=32,T1=16,Um=64,FN=32,g1=Um+FN,qN=new Map;kN.exports={encrypt:R1,decrypt:A1,createNatsTableStreamName:O1};function R1(e){let t=Uc.randomBytes(S1),r=Uc.randomBytes(T1),s=Uc.createCipheriv(GN,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(R1,"encrypt");function A1(e){let t=e.substr(0,Um),r=e.substr(Um,FN),s=e.substr(g1,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Uc.createDecipheriv(GN,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(A1,"decrypt");function O1(e,t){let r=m1.get(p1.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=qN.get(r);return s||(s=Uc.createHash("md5").update(r).digest("hex"),qN.set(r,s)),s}a(O1,"createNatsTableStreamName")});var ei=g((_ue,$N)=>{"use strict";var lue=Dr(),b_=$(),VN=p_(),b1=Tn(),N_=Q(),{handleHDBError:y_,hdb_errors:N1}=se(),{HDB_ERROR_MSGS:w_,HTTP_STATUS_CODES:Pm}=N1,y1=ee();y1.initSync();var{getDatabases:vm}=(Ae(),ne(Ge));$N.exports={describeAll:w1,describeTable:I_,describeSchema:I1};async function w1(e){try{let t=N_.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=vm(),i={},o={},c=[],u=e?.exact_count;for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let d=n[l];for(let f in d)try{let E;if(t||s)E=await I_({schema:l,table:f,exact_count:u});else if(r&&r[l].describe&&r[l].tables[f].describe){let h=r[l].tables[f].attribute_permissions;E=await I_({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){b_.error(E)}}let _={};for(let l in c)t||s?(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||s?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return b_.error("Got an error in describeAll"),b_.error(t),y_(new Error,w_.DESCRIBE_ALL_ERR)}}a(w1,"describeAll");async function I_(e,t){N_.transformReq(e);let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i=VN.describe_table(e);if(i)throw i;let c=vm()[r];if(!c)throw y_(new Error,w_.SCHEMA_NOT_FOUND(e.schema),Pm.NOT_FOUND);let u=c[s];if(!u)throw y_(new Error,w_.TABLE_NOT_FOUND(e.schema,e.table),Pm.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let l=[];if(n){let f={};n.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l};d.clustering_stream_name=b1.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){b_.warn(`unable to stat table dbi due to ${f}`)}return d}a(I_,"descTable");async function I1(e){N_.transformReq(e);let t=VN.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),i=vm()[s];if(!i)throw y_(new Error,w_.SCHEMA_NOT_FOUND(e.schema),Pm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),N_.isEmpty(u)||u.describe){let _=await I_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(I1,"describeSchema")});var gn=g((hue,zN)=>{var C1=Fi(),{callbackify:KN,promisify:D1}=require("util"),{getDatabases:WN}=(Ae(),ne(Ge));zN.exports={setSchemaDataToGlobal:YN,getTableSchema:L1,getSystemSchema:M1,setSchemaDataToGlobalAsync:D1(YN)};var QN=ei(),fue=KN(QN.describeAll),Eue=KN(QN.describeTable);function YN(e){global.hdb_schema=WN(),e&&e()}a(YN,"setSchemaDataToGlobal");function L1(e,t,r){let s=WN()[e];if(!s)return r(`schema ${e} does not exist`);let n=s[t];return n?r(null,{schema:e,name:t,hash_attribute:n.primaryKey}):r(`table ${e}.${t} does not exist`)}a(L1,"getTableSchema");function M1(){return C1}a(M1,"getSystemSchema")});var Lr=g((pue,ZN)=>{"use strict";var D_=Im(),Gt=Q(),U1=require("util"),L_=ys(),P1=gn(),JN=$(),{handleHDBError:Vi,hdb_errors:v1}=se(),{HTTP_STATUS_CODES:$i}=v1,B1=U1.promisify(P1.getTableSchema),H1="updated",XN="inserted",jN="upserted";ZN.exports={insert:q1,update:G1,upsert:F1,validation:x1,flush:k1};async function x1(e){if(Gt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Gt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Gt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await B1(e.schema,e.table),r=D_(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Gt.isEmptyOrZeroLength(c[s]))throw JN.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Gt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw JN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Gt.isEmpty(c[s])&&c[s]!==""&&n.has(Gt.autoCast(c[s]))&&(c.skip=!0),n.add(Gt.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(x1,"validation");async function q1(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=D_(e);if(t)throw Vi(new Error,t.message,$i.BAD_REQUEST);Gt.transformReq(e);let r=Gt.checkSchemaTableExist(e.schema,e.table);if(r)throw Vi(new Error,r,$i.BAD_REQUEST);let s=await L_.createRecords(e);return C_(XN,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(q1,"insertData");async function G1(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=D_(e);if(t)throw Vi(new Error,t.message,$i.BAD_REQUEST);Gt.transformReq(e);let r=Gt.checkSchemaTableExist(e.schema,e.table);if(r)throw Vi(new Error,r,$i.BAD_REQUEST);let s=await L_.updateRecords(e);return Gt.isEmpty(s.existing_rows)?C_(H1,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):C_(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(G1,"updateData");async function F1(e){if(e.operation!=="upsert")throw Vi(new Error,"invalid operation, must be upsert",$i.INTERNAL_SERVER_ERROR);let t=D_(e);if(t)throw Vi(new Error,t.message,$i.BAD_REQUEST);Gt.transformReq(e);let r=Gt.checkSchemaTableExist(e.schema,e.table);if(r)throw Vi(new Error,r,$i.BAD_REQUEST);let s=await L_.upsertRecords(e);return C_(jN,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(F1,"upsertData");function C_(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===XN?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===jN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(C_,"returnObject");function k1(e){return Gt.transformReq(e),L_.flush(e.schema,e.table)}a(k1,"flush")});var Hm=g((Tue,ry)=>{var V1=Xe(),Bm=require("joi"),{hdb_table:$1,hdb_database:ey}=Qs(),ty={schema:ey,database:ey,table:$1},Y1={date:Bm.date().iso().required()},K1={timestamp:Bm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};ry.exports=function(e,t){let r=t==="timestamp"?{...ty,...K1}:{...ty,...Y1},s=Bm.object(r);return V1.validateBySchema(e,s)}});var iy=g((gue,ny)=>{var W1=Xe(),xm=require("joi"),{hdb_table:Q1,hdb_database:sy}=Qs(),z1=xm.object({schema:sy,database:sy,table:Q1,hash_values:xm.array().required(),ids:xm.array()});ny.exports=function(e){return W1.validateBySchema(e,z1)}});var ay=g((Rue,oy)=>{"use strict";var qm=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}},Gm=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}},Fm=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};oy.exports={InsertObject:qm,NoSQLSeachObject:Gm,DeleteResponseObject:Fm}});var si=g((Oue,dy)=>{"use strict";var uy=Hm(),J1=iy(),Yi=Q(),cy=require("moment"),ly=$(),{promisify:X1,callbackify:j1}=require("util"),Ki=M(),Z1=gn(),km=X1(Z1.getTableSchema),Vm=ys(),{DeleteResponseObject:eY}=ay(),{handleHDBError:ti,hdb_errors:tY}=se(),{HDB_ERROR_MSGS:M_,HTTP_STATUS_CODES:ri}=tY,rY="records successfully deleted",sY=j1(_y);dy.exports={delete:sY,deleteRecord:_y,deleteFilesBefore:nY,deleteAuditLogsBefore:iY};async function nY(e){let t=uy(e,"date");if(t)throw ti(t,t.message,ri.BAD_REQUEST,void 0,void 0,!0);if(Yi.transformReq(e),!cy(e.date,cy.ISO_8601).isValid())throw ti(new Error,M_.INVALID_DATE,ri.BAD_REQUEST,Ki.LOG_LEVELS.ERROR,M_.INVALID_DATE,!0);let s=Yi.checkSchemaTableExist(e.schema,e.table);if(s)throw ti(new Error,s,ri.NOT_FOUND,Ki.LOG_LEVELS.ERROR,s,!0);let n=await Vm.deleteRecordsBefore(e);if(await km(e.schema,e.table),ly.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(nY,"deleteFilesBefore");async function iY(e){let t=uy(e,"timestamp");if(t)throw ti(t,t.message,ri.BAD_REQUEST,void 0,void 0,!0);if(Yi.transformReq(e),isNaN(e.timestamp))throw ti(new Error,M_.INVALID_VALUE("Timestamp"),ri.BAD_REQUEST,Ki.LOG_LEVELS.ERROR,M_.INVALID_VALUE("Timestamp"),!0);let r=Yi.checkSchemaTableExist(e.schema,e.table);if(r)throw ti(new Error,r,ri.NOT_FOUND,Ki.LOG_LEVELS.ERROR,r,!0);let s=await Vm.deleteAuditLogsBefore(e);return await km(e.schema,e.table),ly.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(iY,"deleteAuditLogsBefore");async function _y(e){e.ids&&(e.hash_values=e.ids);let t=J1(e);if(t)throw ti(t,t.message,ri.BAD_REQUEST,void 0,void 0,!0);Yi.transformReq(e);let r=Yi.checkSchemaTableExist(e.schema,e.table);if(r)throw ti(new Error,r,ri.NOT_FOUND,Ki.LOG_LEVELS.ERROR,r,!0);try{await km(e.schema,e.table);let s=await Vm.deleteRecords(e);return Yi.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${rY}`),s}catch(s){if(s.message===Ki.SEARCH_NOT_FOUND_MESSAGE){let n=new eY;return n.message=Ki.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(_y,"deleteRecord")});var U_=g((Nue,hy)=>{var oY=require("crypto"),fy=9;function aY(e){let t=uY(fy),r=Ey(e+t);return t+r}a(aY,"createHash");function cY(e,t){let r=e?.substr(0,fy),s=r+Ey(t+r);return e===s}a(cY,"validateHash");function uY(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(uY,"generateSalt");function Ey(e){return oY.createHash("md5").update(e).digest("hex")}a(Ey,"md5");hy.exports={hash:aY,validate:cY}});var py=g((wue,my)=>{var $m=Xe(),Kt={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function lY(e){return Kt.password.presence=!0,Kt.username.presence=!0,Kt.role.presence=!0,Kt.active.presence=!0,$m.validateObject(e,Kt)}a(lY,"addUserValidation");function _Y(e){return Kt.password.presence=!1,Kt.username.presence=!0,Kt.role.presence=!1,Kt.active.presence=!1,$m.validateObject(e,Kt)}a(_Y,"alterUserValidation");function dY(e){return Kt.password.presence=!1,Kt.username.presence=!0,Kt.role.presence=!1,Kt.active.presence=!1,$m.validateObject(e,Kt)}a(dY,"dropUserValidation");my.exports={addUserValidation:lY,alterUserValidation:_Y,dropUserValidation:dY}});var Fe=g((Due,Ty)=>{"use strict";var{platform:Cue}=require("os"),fY="nats-server.zip",Ym="nats-server",EY=process.platform==="win32"?`${Ym}.exe`:Ym,hY=/^[^\s.,*>]+$/,Sy="__request__",mY=a(e=>`${e}.${Sy}`,"REQUEST_SUBJECT"),pY={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},SY={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},TY={HUB:"hub.pid",LEAF:"leaf.pid"},gY={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},RY={SUCCESS:"success",ERROR:"error"},AY={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},OY={TXN:"txn",MSGID:"msgid"},$o={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},bY={[$o.ERR]:1,[$o.WRN]:2,[$o.INF]:3,[$o.DBG]:4,[$o.TRC]:5},NY={debug:"-D",trace:"-DVV"};Ty.exports={NATS_SERVER_ZIP:fY,NATS_SERVER_NAME:Ym,NATS_BINARY_NAME:EY,PID_FILES:TY,NATS_CONFIG_FILES:SY,SERVER_SUFFIX:gY,NATS_TERM_CONSTRAINTS_RX:hY,REQUEST_SUFFIX:Sy,UPDATE_REMOTE_RESPONSE_STATUSES:RY,CLUSTER_STATUS_STATUSES:AY,REQUEST_SUBJECT:mY,SUBJECT_PREFIXES:OY,MSG_HEADERS:pY,LOG_LEVELS:$o,LOG_LEVEL_FLAGS:NY,LOG_LEVEL_HIERARCHY:bY}});var Ry=g((Mue,gy)=>{"use strict";var yY={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
5
5
  `),cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
6
6
  `)},wY="certificate.pem",IY="privateKey.pem",CY="ca.pem";gy.exports={CERTIFICATE_VALUES:yY,CERTIFICATE_PEM_NAME:wY,PRIVATEKEY_PEM_NAME:IY,CA_PEM_NAME:CY}});var Wm=g((Pue,yy)=>{"use strict";var Ny=require("fs-extra"),ie=require("joi"),DY=require("os"),{boolean:Ne,string:ar,number:At,array:Km}=ie.types(),{totalmem:Ay}=require("os"),Wi=require("path"),LY=$(),P_=Q(),Uue=Ry(),Oy=M(),MY=Xe(),by="log",UY="components",PY="Invalid logging.rotation.maxSize unit. Available units are G, M or K",vY="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",BY="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",HY="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",xY="rootPath config parameter is undefined",qY="clustering.enabled config parameter is undefined",Qi=At.min(0).required(),v_=Km.items({host:ar.required(),port:Qi}).empty(null),Js;yy.exports={configValidator:GY,routesValidator:KY,route_constraints:v_};function GY(e){if(Js=e.rootPath,P_.isEmpty(Js))throw xY;let t=Ne.required(),r=At.min(0).max(1e3).empty(null).default(YY),s=ar.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Pc),n=ar.optional().empty(null),i=ar.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ie.string().empty(null).default(Pc),c=ie.custom(kY).empty(null).default(Pc),u=e.clustering?.enabled;if(P_.isEmpty(u))throw qY;let _;return u===!0?_=ie.object({enabled:t,hubServer:ie.object({cluster:ie.object({name:ie.required().empty(null),network:ie.object({port:Qi,routes:v_}).required()}).required(),leafNodes:ie.object({network:ie.object({port:Qi}).required()}).required(),network:ie.object({port:Qi}).required()}).required(),leafServer:ie.object({network:ie.object({port:Qi,routes:v_}).required(),streams:ie.object({maxAge:At.min(120).allow(null).optional(),maxBytes:At.min(1).allow(null).optional(),maxMsgs:At.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ie.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Ne.optional(),databaseLevel:Ne.optional(),tls:ie.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ne.required(),verify:Ne.optional()}),user:ar.optional().empty(null)}).required():_=ie.object({enabled:t,tls:ie.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ne.required()})}).required(),ie.object({authentication:ie.object({authorizeLocal:Ne,cacheTTL:At.required(),enableSessions:Ne}),analytics:ie.object({aggregatePeriod:At}),componentsRoot:s.optional(),clustering:_,localStudio:ie.object({enabled:t}).required(),logging:ie.object({auditAuthEvents:ie.object({logFailed:Ne,logSuccessful:Ne}),file:Ne.required(),level:ie.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ie.object({enabled:Ne.optional(),compress:Ne.optional(),interval:ar.custom($Y).optional().empty(null),maxSize:ar.custom(VY).optional().empty(null),path:ar.optional().empty(null).default(Pc)}).required(),root:s,stdStreams:Ne.required(),auditLog:Ne.required()}).required(),operationsApi:ie.object({network:ie.object({cors:Ne.optional(),corsAccessList:Km.optional(),headersTimeout:At.min(1).optional(),keepAliveTimeout:At.min(1).optional(),port:At.optional().empty(null),domainSocket:ie.optional().empty("hdb/operations-server").default(Pc),securePort:At.optional().empty(null),timeout:At.min(1).optional()}).optional(),tls:ie.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:ar.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ie.object({network:ie.object({port:Qi,securePort:Qi,mtls:ie.alternatives([Ne.optional(),ie.object({user:ar.optional(),certificateAuthority:n,required:Ne.optional()})])}).required(),webSocket:Ne.optional(),requireAuthentication:Ne.optional()}),http:ie.object({compressionThreshold:At.optional(),cors:Ne.optional(),corsAccessList:Km.optional(),headersTimeout:At.min(1).optional(),port:At.min(0).optional().empty(null),securePort:At.min(0).optional().empty(null),mtls:ie.alternatives([Ne.optional(),ie.object({user:ar.optional(),certificateAuthority:n,required:Ne.optional()})])}).required(),threads:ie.alternatives(r.optional(),ie.object({count:r.optional(),debug:ie.alternatives(Ne.optional(),ie.object({startingPort:At.min(1).optional(),host:ar.optional(),waitForDebugger:Ne.optional()})),maxHeapMemory:At.min(0).optional()})),storage:ie.object({writeAsync:Ne.required(),overlappingSync:Ne.optional(),caching:Ne.optional(),compression:Ne.optional(),noReadAhead:Ne.optional(),path:c,prefetchWrites:Ne.optional()}).required(),ignoreScripts:Ne.optional(),tls:ie.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional(),ciphers:ar.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(GY,"configValidator");function FY(e){return Ny.existsSync(e)?null:`Specified path ${e} does not exist.`}a(FY,"doesPathExist");function kY(e,t){ie.assert(e,ar.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=FY(e);if(r)return t.message(r)}a(kY,"validatePath");function VY(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(PY);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(BY):e}a(VY,"validateRotationMaxSize");function $Y(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(vY);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(HY):e}a($Y,"validateRotationInterval");function YY(e,t){let r=t.state.path.join("."),s=DY.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Ay();return i=Math.round(Math.min(i,Ay())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),LY.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(YY,"setDefaultThreads");function Pc(e,t){let r=t.state.path.join(".");if(!P_.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(P_.isEmpty(Js))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Wi.join(Js,UY);case"logging.root":return Wi.join(Js,by);case"clustering.leafServer.streams.path":return Wi.join(Js,"clustering","leaf");case"storage.path":let s=Wi.join(Js,Oy.LEGACY_DATABASES_DIR_NAME);return Ny.existsSync(s)?s:Wi.join(Js,Oy.DATABASES_DIR_NAME);case"logging.rotation.path":return Wi.join(Js,by);case"operationsApi.network.domainSocket":return r==null?null:Wi.join(Js,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Pc,"setDefaultRoot");function KY(e){let t=ie.object({routes:v_});return MY.validateBySchema({routes:e},t)}a(KY,"routesValidator")});var Pr=g((Hue,vy)=>{"use strict";var Ur=M(),Lt=Q(),Ot=$(),{configValidator:WY,routesValidator:wy}=Wm(),cr=require("fs-extra"),QY=require("yaml"),ws=require("path"),zY=require("is-number"),Cy=require("properties-reader"),JY=require("lodash"),{handleHDBError:XY}=se(),{HTTP_STATUS_CODES:jY,HDB_ERROR_MSGS:B_}=yr(),Bue=require("minimist"),{server:ZY}=(nr(),ne(vi)),{DATABASES_PARAM_CONFIG:vc,CONFIG_PARAMS:Mr,CONFIG_PARAM_MAP:Is}=Ur,eK="Unable to get config value because config is uninitialized",tK="Config successfully initialized",rK="Error backing up config file",sK="Empty parameter sent to getConfigValue",Dy=ws.join(Ur.PACKAGE_ROOT,"config","yaml",Ur.HDB_DEFAULT_CONFIG_FILE),nK="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Iy={logging_rotation_retain:"logging.rotation.retain",logging_rotation_rotate:"logging.rotation.rotate",logging_rotation_rotateinterval:"logging.rotation.rotateInterval",logging_rotation_rotatemodule:"logging.rotation.rotateModule",logging_rotation_timezone:"logging.rotation.timezone",logging_rotation_workerinterval:"logging.rotation.workerInterval"},H_,bt,x_;vy.exports={createConfigFile:iK,getDefaultConfig:oK,getConfigValue:My,initConfig:zm,flattenConfig:Yo,updateConfigValue:Uy,updateConfigObject:cK,getConfiguration:_K,setConfiguration:dK,readConfigFile:Xm,getClusteringRoutes:fK,initOldConfig:Py,getConfigFromFile:EK,getConfigFilePath:zi,addConfig:hK,deleteConfigFromFile:mK,getConfigObj:pK};function iK(e){let t=ni(Dy);H_=Yo(t.toJSON());let r;for(let o in e){let c=Is[o.toLowerCase()];if(c===Mr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=Qm(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){Ot.error(l)}}}r&&Ly(t,r),Jm(t);let s=t.toJSON();bt=Yo(s);let n=t.getIn(["rootPath"]),i=ws.join(n,Ur.HDB_CONFIG_FILE);cr.createFileSync(i),cr.writeFileSync(i,String(t)),Ot.trace(`Config file written to ${i}`)}a(iK,"createConfigFile");function Ly(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!Lt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(vc.TABLES))for(let i in s[n][vc.TABLES])for(let o in s[n][vc.TABLES][i]){let c=s[n][vc.TABLES][i][o],u=[Mr.DATABASES,n,vc.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[Mr.DATABASES,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){Ot.error("Error parsing schemas CLI/env config arguments",s)}}a(Ly,"setSchemasConfig");function oK(e){if(H_===void 0){let r=ni(Dy);H_=Yo(r.toJSON())}let t=Is[e.toLowerCase()];if(t!==void 0)return H_[t.toLowerCase()]}a(oK,"getDefaultConfig");function My(e){if(e==null){Ot.error(sK);return}if(bt===void 0){Ot.trace(eK);return}let t=Is[e.toLowerCase()];if(t!==void 0)return bt[t.toLowerCase()]}a(My,"getConfigValue");function zi(e=Lt.getPropsFilePath()){let t=Lt.getEnvCliRootPath();return t?ws.join(t,Ur.HDB_CONFIG_FILE):Cy(e).get(Ur.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(zi,"getConfigFilePath");function zm(e=!1){if(bt===void 0||e){let t;if(!Lt.noBootFile()){t=Lt.getPropsFilePath();try{cr.accessSync(t,cr.constants.F_OK|cr.constants.R_OK)}catch(i){throw Ot.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=zi(t),s;if(r.includes("config/settings.js"))try{Py(r);return}catch(i){if(i.code!==Ur.NODE_ERROR_CODES.ENOENT)throw i}try{s=ni(r)}catch(i){if(i.code===Ur.NODE_ERROR_CODES.ENOENT){Ot.trace(`HarperDB config file not found at ${r}.
7
- This can occur during early stages of install where the config file has not yet been created`);return}else throw Ot.error(i),new Error(`Error reading HarperDB config file at ${r}`)}aK(s,r),Jm(s);let n=s.toJSON();if(ZY.config=n,bt=Yo(n),bt.logging_rotation_rotate)for(let i in Iy)bt[i]&&Ot.error(`Config ${Iy[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Ot.trace(tK)}}a(zm,"initConfig");function aK(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ws.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ws.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ws.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(Ot.trace("Updating config file with missing config params"),cr.writeFileSync(t,String(e)))}a(aK,"checkForUpdatedConfig");function Jm(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t?.http?.threads&&(t.threads=t?.http?.threads);let r=WY(t);if(r.error)throw B_.CONFIG_VALIDATION(r.error.message);typeof r.value.threads=="object"?e.setIn(["threads","count"],r.value.threads.count):e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],r.value?.operationsApi?.network?.domainSocket)}a(Jm,"validateConfig");function cK(e,t){bt===void 0&&(bt={});let r=Is[e.toLowerCase()];if(r===void 0){Ot.trace(`Unable to update config object because config param '${e}' does not exist`);return}bt[r.toLowerCase()]=t}a(cK,"updateConfigObject");function Uy(e,t,r=void 0,s=!1,n=!1,i=!1){bt===void 0&&zm();let o=My(Is.hdb_root),c=ws.join(o,Ur.HDB_CONFIG_FILE),u=ni(c),_;if(r===void 0&&e.toLowerCase()===Mr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=Is[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=Qm(f,t);u.setIn([...E],h)}else for(let f in r){let E=Is[f.toLowerCase()];if(E===Mr.HTTP_SECUREPORT&&r[f]===bt[Mr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===Mr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===bt[Mr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===Mr.DATABASES){_=r[f];continue}if(E?.startsWith("threads_")){let h=u.getIn(["threads"]);h>=0&&(u.deleteIn(["threads"]),u.setIn(["threads","count"],h))}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=Ur.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=Qm(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof u.getIn(h.slice(0,-1))=="boolean"&&u.deleteIn(h.slice(0,-1)),u.setIn([...h],S)}catch(T){Ot.error(T)}}}_&&Ly(u,_),Jm(u);let l=u.getIn(["rootPath"]),d=ws.join(l,Ur.HDB_CONFIG_FILE);s===!0&&uK(c,l),cr.writeFileSync(d,String(u)),n&&(bt=Yo(u.toJSON())),Ot.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Uy,"updateConfigValue");function uK(e,t){try{let r=ws.join(t,"backup",`${Ur.HDB_CONFIG_FILE}.bak`);cr.copySync(e,r),Ot.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Ot.error(rK),Ot.error(r)}}a(uK,"backupConfigFile");var lK=["databases"];function Yo(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),x_=e,r(e);function r(s){let n={};for(let i in s)if(s.hasOwnProperty(i)){if(typeof s[i]=="object"&&s[i]!==null&&!Array.isArray(s[i])&&!lK.includes(i)){let o=r(s[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!Mr[u.toUpperCase()]&&Is[u]&&(n[Is[u].toLowerCase()]=o[c]),n[u]=o[c]}}s[i]!==void 0&&(n[i.toLowerCase()]=s[i])}return n}a(r,"squashObj")}a(Yo,"flattenConfig");function Qm(e,t){if(e===Mr.CLUSTERING_NODENAME||e===Mr.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(zY(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Lt.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return Lt.autoCast(t)}a(Qm,"castConfigValue");function _K(){let e=Lt.getPropsFilePath(),t=zi(e);return ni(t).toJSON()}a(_K,"getConfiguration");async function dK(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Uy(void 0,void 0,n,!0),nK}catch(i){throw typeof i=="string"||i instanceof String?XY(i,i,jY.BAD_REQUEST,void 0,void 0,!0):i}}a(dK,"setConfiguration");function Xm(){let e=Lt.getPropsFilePath();try{cr.accessSync(e,cr.constants.F_OK|cr.constants.R_OK)}catch(s){if(!Lt.noBootFile())throw Ot.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=zi(e);return ni(t).toJSON()}a(Xm,"readConfigFile");function ni(e){return QY.parseDocument(cr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ni,"parseYamlDoc");function fK(){let e=Xm(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Lt.isEmptyOrZeroLength(t)?[]:t;let r=wy(t);if(r)throw B_.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=Lt.isEmptyOrZeroLength(s)?[]:s;let n=wy(s);if(n)throw B_.CONFIG_VALIDATION(n.message);if(!Lt.isEmptyOrZeroLength(s)&&!Lt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!Lt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw B_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(fK,"getClusteringRoutes");function Py(e){let t=Cy(e);bt={};for(let r in Is){let s=t.get(r.toUpperCase());if(Lt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Is[r].toLowerCase();n===Mr.LOGGING_ROOT?bt[n]=ws.dirname(s):bt[n]=s}return bt}a(Py,"initOldConfig");function EK(e){let t=Xm();return JY.get(t,e.replaceAll("_","."))}a(EK,"getConfigFromFile");async function hK(e,t){let r=ni(zi());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await cr.writeFile(zi(),String(r))}a(hK,"addConfig");function mK(e){let t=zi(Lt.getPropsFilePath()),r=ni(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=ws.join(s,Ur.HDB_CONFIG_FILE);cr.writeFileSync(n,String(r))}a(mK,"deleteConfigFromFile");function pK(){return x_||(zm(),x_)}a(pK,"getConfigObj")});var Hy=g((que,By)=>{"use strict";var q_=M(),G_=class{static{a(this,"BaseLicense")}constructor(t=0,r=q_.RAM_ALLOCATION_ENUM.DEFAULT,s=q_.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},jm=class extends G_{static{a(this,"ExtendedLicense")}constructor(t=0,r=q_.RAM_ALLOCATION_ENUM.DEFAULT,s=q_.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};By.exports={BaseLicense:G_,ExtendedLicense:jm}});var Ji=g((Fue,Vy)=>{"use strict";var Wo=require("fs-extra"),qy=U_(),Gy=require("crypto"),SK=require("moment"),TK=require("uuid").v4,Wt=$(),ep=require("path"),gK=Q(),ii=M(),{totalmem:xy}=require("os"),RK=Hy().ExtendedLicense,Ko="invalid license key format",AK="061183",OK="mofi25",bK="aes-256-cbc",NK=16,yK=32,Fy=ee();Fy.initSync();var Zm;Vy.exports={validateLicense:ky,generateFingerPrint:IK,licenseSearch:sp,getLicense:LK,checkMemoryLimit:MK};function tp(){return ep.join(Fy.getHdbBasePath(),ii.LICENSE_KEY_DIR_NAME,ii.LICENSE_FILE_NAME)}a(tp,"getLicenseDirPath");function wK(){let e=tp();return ep.join(e,ii.LICENSE_FILE_NAME)}a(wK,"getLicenseFilePath");function rp(){let e=tp();return ep.join(e,ii.REG_KEY_FILE_NAME)}a(rp,"getFingerPrintFilePath");async function IK(){let e=rp();try{return await Wo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await CK();throw Wt.error(`Error writing fingerprint file to ${e}`),Wt.error(t),new Error("There was an error generating the fingerprint")}}a(IK,"generateFingerPrint");async function CK(){let e=TK(),t=qy.hash(e),r=rp();try{await Wo.mkdirp(tp()),await Wo.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Wt.error(`Error writing fingerprint file to ${r}`),Wt.error(s),new Error("There was an error generating the fingerprint")}return t}a(CK,"writeFingerprint");function ky(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:ii.RAM_ALLOCATION_ENUM.DEFAULT,version:ii.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Wt.error("empty license key passed to validate."),r;let s=rp(),n=!1;try{n=Wo.statSync(s)}catch(i){Wt.error(i)}if(n){let i;try{i=Wo.readFileSync(s,"utf8")}catch{Wt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(OK),c=o[1];c=Buffer.concat([Buffer.from(c)],NK);let u=Buffer.concat([Buffer.from(i)],yK),_=Gy.createDecipheriv(bK,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=DK(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Ko),Wt.error(Ko),new Error(Ko)}let d;if(isNaN(l))try{d=JSON.parse(l),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(Ko),Wt.error(Ko),new Error(Ko)}else r.exp_date=l;r.exp_date<SK().valueOf()&&(r.valid_date=!1),qy.validate(o[1],`${AK}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Wt.error("Invalid licence"),r}a(ky,"validateLicense");function DK(e,t){try{let r=Gy.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Wt.warn("Check old license failed")}}a(DK,"checkOldLicense");function sp(){let e=new RK,t=[];try{t=Wo.readFileSync(wK(),"utf-8").split(ii.NEW_LINE)}catch(r){r.code==="ENOENT"?Wt.info("no license file found"):Wt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(gK.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=ky(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){Wt.error("There was an error parsing the license string."),Wt.error(n),e.ram_allocation=ii.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Zm=e,e}a(sp,"licenseSearch");async function LK(){return Zm||await sp(),Zm}a(LK,"getLicense");function MK(){let e=sp().ram_allocation,t=process.constrainedMemory?.()||xy();if(t=Math.round(Math.min(t,xy())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(MK,"checkMemoryLimit")});var ss=g((Kue,iw)=>{"use strict";var Wy="username is required",Qy="nothing to update, must supply active, role or password to update",zy="password cannot be an empty string",Jy="If role is specified, it cannot be empty.",Xy="active must be true or false";iw.exports={addUser:FK,alterUser:kK,dropUser:$K,getSuperUser:QK,userInfo:YK,listUsers:k_,listUsersExternal:KK,setUsersToGlobal:zo,findAndValidateUser:sw,getClusterUser:zK,USERNAME_REQUIRED:Wy,ALTERUSER_NOTHING_TO_UPDATE:Qy,EMPTY_PASSWORD:zy,EMPTY_ROLE:Jy,ACTIVE_BOOLEAN:Xy};var jy=Lr(),UK=si(),op=U_(),Zy=py(),ew=Dr(),ap=Rn(),vr=Q(),tw=require("validate.js"),Se=$(),{promisify:PK}=require("util"),cp=Tn(),$y=M(),Yy=Fe(),vK=Pr(),Vue=ee(),$ue=Ji(),BK=Fi(),{table:Yue}=(Ae(),ne(Ge)),{handleHDBError:Xs,hdb_errors:HK}=se(),{HTTP_STATUS_CODES:js,AUTHENTICATION_ERROR_MSGS:np,HDB_ERROR_MSGS:Qo}=HK,{UserEventMsg:up}=Cs(),ip=require("lodash"),{server:lp}=(nr(),ne(vi)),xK=$();lp.getUser=(e,t)=>sw(e,t,t!=null);var rw={username:!0,active:!0,role:!0,password:!0},Ky=new Map,F_=ew.searchByValue,qK=ew.searchByHash,GK=PK(UK.delete);async function FK(e){let t=tw.cleanAttributes(e,rw),r=Zy.addUserValidation(t);if(r)throw Xs(new Error,r.message,js.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await F_(s),n=n&&Array.from(n)}catch(u){throw Se.error("There was an error searching for a role in add user"),Se.error(u),u}if(!n||n.length<1)throw Xs(new Error,Qo.ROLE_NAME_NOT_FOUND(t.role),js.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Xs(new Error,Qo.DUP_ROLES_FOUND(t.role),js.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=cp.encrypt(t.password)),t.password=op.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await jy.insert(i)}catch(u){throw Se.error("There was an error searching for a user."),Se.error(u),u}Se.debug(o);try{await zo()}catch(u){throw Se.error("Got an error setting users to global"),Se.error(u),u}if(o.skipped_hashes.length===1)throw Xs(new Error,Qo.USER_ALREADY_EXISTS(t.username),js.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],ap.signalUserChange(new up(process.pid)),`${c.username} successfully added`}a(FK,"addUser");async function kK(e){let t=tw.cleanAttributes(e,rw);if(vr.isEmptyOrZeroLength(t.username))throw new Error(Wy);if(vr.isEmptyOrZeroLength(t.password)&&vr.isEmptyOrZeroLength(t.role)&&vr.isEmptyOrZeroLength(t.active))throw new Error(Qy);if(!vr.isEmpty(t.password)&&vr.isEmptyOrZeroLength(t.password.trim()))throw new Error(zy);if(!vr.isEmpty(t.active)&&!vr.isBoolean(t.active))throw new Error(Xy);let r=VK(t.username);if(!vr.isEmpty(t.password)&&!vr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=cp.encrypt(t.password)),t.password=op.hash(t.password)),t.role==="")throw new Error(Jy);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await F_(i)||[])}catch(c){throw Se.error("Got an error searching for a role."),Se.error(c),c}if(!o||o.length===0){let c=Qo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Se.error(c),Xs(new Error,c,js.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Qo.ALTER_USER_DUP_ROLES(t.role);throw Se.error(c),Xs(new Error,c,js.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await jy.update(s)}catch(i){throw Se.error("Error during update."),Se.error(i),i}try{await zo()}catch(i){throw Se.error("Got an error setting users to global"),Se.error(i),i}return ap.signalUserChange(new up(process.pid)),n}a(kK,"alterUser");function VK(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(VK,"isClusterUser");async function $K(e){try{let t=Zy.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(vr.isEmpty(global.hdb_users.get(e.username)))throw Xs(new Error,Qo.USER_NOT_EXIST(e.username),js.NOT_FOUND,void 0,void 0,!0);let s;try{s=await GK(r)}catch(n){throw Se.error("Got an error deleting a user."),Se.error(n),n}Se.debug(s);try{await zo()}catch(n){throw Se.error("Got an error setting users to global."),Se.error(n),n}return ap.signalUserChange(new up(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a($K,"dropUser");async function YK(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=ip.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await qK(r)}catch(n){throw Se.error("Got an error searching for a role."),Se.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Se.error(r),r}return t}a(YK,"userInfo");async function KK(){let e;try{e=await k_()}catch(t){throw Se.error("Got an error listing users."),Se.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(KK,"listUsersExternal");async function k_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await F_(e)}catch(o){throw Se.error("Got an error searching for roles."),Se.error(o),o}let r={};for(let o of t)r[o.id]=ip.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await F_(s)}catch(o){throw Se.error("Got an error searching for users."),Se.error(o),o}let i=new Map;for(let o of n)o=ip.cloneDeep(o),o.role=r[o.role],WK(o.role),i.set(o.username,o);return i}catch(e){throw Se.error("got an error listing users"),Se.error(e),vr.errorizeMessage(e)}return null}a(k_,"listUsers");function WK(e){try{if(!e){Se.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(BK)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Se.error("Got an error trying to set system permissions."),Se.error(t)}}a(WK,"appendSystemTablesToRole");async function zo(){try{let e=await k_();global.hdb_users=e}catch(e){throw Se.error(e),e}}a(zo,"setUsersToGlobal");async function sw(e,t,r=!0){global.hdb_users||await zo();let s=global.hdb_users.get(e);if(!s){if(!r)return{username:e};throw Xs(new Error,np.GENERIC_AUTH_FAIL,js.UNAUTHORIZED,void 0,void 0,!0)}if(s&&!s.active)throw Xs(new Error,np.USER_INACTIVE,js.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(Ky.get(t)===s.password)return n;if(op.validate(s.password,t))Ky.set(t,s.password);else throw Xs(new Error,np.GENERIC_AUTH_FAIL,js.UNAUTHORIZED,void 0,void 0,!0)}return n}a(sw,"findAndValidateUser");async function QK(){global.hdb_users||await zo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(QK,"getSuperUser");async function zK(){let e=await k_(),t=vK.getConfigFromFile($y.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!vr.isEmpty(r)&&r?.role?.role===$y.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=cp.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Yy.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Yy.SERVER_SUFFIX.ADMIN,r}a(zK,"getClusterUser");var nw=[];lp.invalidateUser=function(e){for(let t of nw)try{t(e)}catch(r){xK.error("Error invalidating user",r)}};lp.onInvalidatedUser=function(e){nw.push(e)}});var Hc=g((Jue,uw)=>{"use strict";var Xi=$(),Br=M(),JK=xN(),Que=gn(),zue=ei(),XK=ss(),{validateEvent:ow}=Cs(),Bc=ys(),jK=require("process"),{resetDatabases:ZK}=(Ae(),ne(Ge)),eW={[Br.ITC_EVENT_TYPES.SCHEMA]:tW,[Br.ITC_EVENT_TYPES.USER]:cw};async function tW(e){let t=ow(e);if(t){Xi.error(t);return}Xi.trace("ITC schemaHandler received schema event:",e),await JK(e.message),await rW(e.message)}a(tW,"schemaHandler");async function rW(e){try{Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=ZK();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Xi.error(t)}}a(rW,"syncSchemaMetadata");var aw=[];async function cw(e){try{try{Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Xi.warn(r)}let t=ow(e);if(t){Xi.error(t);return}Xi.trace(`ITC userHandler ${Br.HDB_ITC_CLIENT_PREFIX}${jK.pid} received user event:`,e),await XK.setUsersToGlobal();for(let r of aw)r()}catch(t){Xi.error(t)}}a(cw,"userHandler");cw.addListener=function(e){aw.push(e)};uw.exports=eW});var Cs=g((rle,_w)=>{"use strict";var jue=$(),_p=Q(),sW=M(),{ITC_ERRORS:xc}=yr(),{parentPort:Zue,threadId:nW,isMainThread:iW,workerData:ele}=require("worker_threads"),{onMessageFromWorkers:oW,broadcast:tle,broadcastWithAcknowledgement:aW}=Ke();_w.exports={sendItcEvent:cW,validateEvent:lw,SchemaEventMsg:uW,UserEventMsg:lW};var V_;oW(async(e,t)=>{V_=V_||Hc(),lw(e),V_[e.type]&&await V_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function cW(e){return!iW&&e.message&&(e.message.originator=nW),aW(e)}a(cW,"sendItcEvent");function lw(e){if(typeof e!="object")return xc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||_p.isEmpty(e.type))return xc.MISSING_TYPE;if(!e.hasOwnProperty("message")||_p.isEmpty(e.message))return xc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||_p.isEmpty(e.message.originator))return xc.MISSING_ORIGIN;if(sW.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return xc.INVALID_EVENT(e.type)}a(lw,"validateEvent");function uW(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(uW,"SchemaEventMsg");function lW(e){this.originator=e}a(lW,"UserEventMsg")});var Rn=g((ile,hw)=>{"use strict";var dw=M(),nle=Q(),$_=$(),fw=vN(),Jo,{sendItcEvent:Ew}=Cs();function _W(e){try{$_.trace("signalSchemaChange called with message:",e),Jo=Jo||Hc();let t=new fw(dw.ITC_EVENT_TYPES.SCHEMA,e);return Jo.schema(t),Ew(t)}catch(t){$_.error(t)}}a(_W,"signalSchemaChange");function dW(e){try{$_.trace("signalUserChange called with message:",e),Jo=Jo||Hc();let t=new fw(dw.ITC_EVENT_TYPES.USER,e);return Jo.user(t),Ew(t)}catch(t){$_.error(t)}}a(dW,"signalUserChange");hw.exports={signalSchemaChange:_W,signalUserChange:dW}});var Y_=g((ale,pw)=>{"use strict";var mw=Q(),fW=M(),EW=$(),hW=T_(),mW=S_(),pW=Rn(),{SchemaEventMsg:SW}=Cs(),TW="already exists in";pw.exports=gW;async function gW(e,t,r){if(mw.isEmptyOrZeroLength(r))return r;let s=[];mw.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await RW(e,t.schema,t.name,i)})),n}a(gW,"lmdbCheckForNewAttributes");async function RW(e,t,r,s){let n=new mW(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await AW(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(TW))EW.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(RW,"createNewAttribute");async function AW(e){let t;return t=await hW(e),pW.signalSchemaChange(new SW(process.pid,fW.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(AW,"createAttribute")});var Xo=g((ule,Sw)=>{"use strict";var dp=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};Sw.exports=dp});var gw=g((_le,Tw)=>{"use strict";var OW=Xo(),bW=M().OPERATIONS_ENUM,fp=class extends OW{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(bW.INSERT,r,s,n,i),this.records=t}};Tw.exports=fp});var Aw=g((fle,Rw)=>{"use strict";var NW=Xo(),yW=M().OPERATIONS_ENUM,Ep=class extends NW{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(yW.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};Rw.exports=Ep});var bw=g((hle,Ow)=>{"use strict";var wW=Xo(),IW=M().OPERATIONS_ENUM,hp=class extends wW{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(IW.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};Ow.exports=hp});var yw=g((ple,Nw)=>{"use strict";var CW=Xo(),DW=M().OPERATIONS_ENUM,mp=class extends CW{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(DW.DELETE,s,n,t,i),this.original_records=r}};Nw.exports=mp});var qc=g((gle,Dw)=>{"use strict";var Tle=require("path"),ww=We(),LW=gw(),MW=Aw(),UW=bw(),PW=yw(),jo=dt(),Iw=Q(),{CONFIG_PARAMS:vW}=M(),Cw=ee();Cw.initSync();var K_=M().OPERATIONS_ENUM,{getTransactionAuditStorePath:BW}=Je();Dw.exports=HW;async function HW(e,t){if(Cw.get(vW.LOGGING_AUDITLOG)===!1)return;let r=BW(e.schema,e.table),s=await ww.openEnvironment(r,e.table,!0),n=xW(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){ww.initializeDBIs(s,jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,jo.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Iw.isEmpty(n.user_name)||s.dbis[jo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[jo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(HW,"writeTransaction");function xW(e,t){let r=Iw.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===K_.INSERT)return new LW(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===K_.UPDATE)return new MW(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===K_.UPSERT)return new UW(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===K_.DELETE)return new PW(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(xW,"createTransactionObject")});var pp=g((Ole,Lw)=>{"use strict";var qW=Dc(),Ale=Lc(),Gc=M(),GW=Mc(),FW=ko().insertRecords,kW=We(),VW=$(),$W=Y_(),{getSchemaPath:YW}=Je(),KW=qc();Lw.exports=WW;async function WW(e){try{let{schema_table:t,attributes:r}=qW(e);GW(e,r,t.hash_attribute),e.schema!==Gc.SYSTEM_SCHEMA_NAME&&(r.includes(Gc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Gc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Gc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Gc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await $W(e.hdb_auth_header,t,r),n=YW(e.schema,e.table),i=await kW.openEnvironment(n,e.table),o=await FW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await KW(e,o)}catch(c){VW.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(WW,"lmdbCreateRecords")});var Pw=g((Nle,Uw)=>{"use strict";var Mw=M(),QW=pp(),zW=Lc(),JW=require("fs-extra"),{getSchemaPath:XW}=Je();Uw.exports=jW;async function jW(e){let t=[{name:e.schema,createddate:Date.now()}],r=new zW(Mw.SYSTEM_SCHEMA_NAME,Mw.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await QW(r),await JW.mkdirp(XW(e.schema))}a(jW,"lmdbCreateSchema")});var Bw=g((wle,vw)=>{"use strict";var Sp=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};vw.exports=Sp});var Gw=g((Mle,qw)=>{"use strict";var Hw=We(),Tp=wr(),gp=yr().LMDB_ERRORS_ENUM,ZW=dt(),xw=$(),Cle=Q(),eQ=require("lmdb"),tQ=Bw(),rQ=M(),{OVERFLOW_MARKER:Dle,MAX_SEARCH_KEY_LENGTH:Lle}=ZW,sQ=rQ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function nQ(e,t,r,s){if(Tp.validateEnv(e),t===void 0)throw new Error(gp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(gp.IDS_REQUIRED):new Error(gp.IDS_MUST_BE_ITERABLE);try{let n=Hw.listDBIs(e);Hw.initializeDBIs(e,t,n);let i=new tQ,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||s&&h[sQ]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,eQ.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let T=n[S];if(!h.hasOwnProperty(T)||T===t)continue;let b=e.dbis[T],R=h[T];if(R!=null)try{let L=Tp.getIndexedValues(R);if(L)for(let H=0,P=L.length;H<P;H++)b.remove(L[H],o)}catch{xw.warn(`cannot delete from attribute: ${T}, ${R}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){xw.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=Tp.getNextMonotonicTime(),i}catch(n){throw n}}a(nQ,"deleteRecords");qw.exports={deleteRecords:nQ}});var Fc=g((Ple,kw)=>{"use strict";var Zo=Q(),iQ=Gw(),oQ=We(),{getSchemaPath:aQ}=Je(),cQ=qc(),uQ=$();kw.exports=lQ;async function lQ(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Zo.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Zo.isEmptyOrZeroLength(e.hash_values)&&!Zo.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Zo.isEmpty(u)||e.hash_values.push(u)}}if(Zo.isEmptyOrZeroLength(e.hash_values))return Fw([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Zo.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=aQ(e.schema,e.table),i=await oQ.openEnvironment(n,e.table),o=await iQ.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await cQ(e,o)}catch(c){uQ.error(`unable to write transaction due to ${c.message}`)}return Fw(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(lQ,"lmdbDeleteRecords");function Fw(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(Fw,"createDeleteResponse")});var Ap=g((Hle,Vw)=>{"use strict";var _Q=M(),Ble=wr();function Rp(e,t){let r=Object.create(null);if(t.length===1&&_Q.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Rp,"parseRow");function dQ(e,t,r,s){let n=Rp(r,e);s.push(n)}a(dQ,"searchAll");function fQ(e,t,r,s){let n=Rp(r,e);s[t]=n}a(fQ,"searchAllToMap");function EQ(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(EQ,"iterateDBI");function ji(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(ji,"pushResults");function hQ(e,t,r,s,n,i){t.toString().endsWith(e)&&ji(t,r,s,n,i)}a(hQ,"endsWith");function mQ(e,t,r,s,n,i){t.toString().includes(e)&&ji(t,r,s,n,i)}a(mQ,"contains");function pQ(e,t,r,s,n,i){t>e&&ji(t,r,s,n,i)}a(pQ,"greaterThanCompare");function SQ(e,t,r,s,n,i){t>=e&&ji(t,r,s,n,i)}a(SQ,"greaterThanEqualCompare");function TQ(e,t,r,s,n,i){t<e&&ji(t,r,s,n,i)}a(TQ,"lessThanCompare");function gQ(e,t,r,s,n,i){t<=e&&ji(t,r,s,n,i)}a(gQ,"lessThanEqualCompare");Vw.exports={parseRow:Rp,searchAll:dQ,searchAllToMap:fQ,iterateDBI:EQ,endsWith:hQ,contains:mQ,greaterThanCompare:pQ,greaterThanEqualCompare:SQ,lessThanCompare:TQ,lessThanEqualCompare:gQ,pushResults:ji}});var ea=g((kle,Jw)=>{"use strict";var oi=We(),qle=$(),Hr=wr(),W_=dt(),ut=yr().LMDB_ERRORS_ENUM,Gle=Q(),RQ=M(),Q_=Ap(),{parseRow:AQ}=Q_,Fle=require("lmdb"),{OVERFLOW_MARKER:$w,MAX_SEARCH_KEY_LENGTH:OQ}=W_;function Yw(e,t,r,s=!1,n=void 0,i=void 0){return Zi(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(Yw,"iterateFullIndex");function kc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return Zi(e,t,r,(l,d,f,E)=>{let b={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(b.values=!1,d.getRange(b).map(R=>({value:R}))):d.getRange(b)})}a(kc,"iterateRangeBetween");function Zi(e,t,r,s){let n=e.database||e,i=oi.openDBI(n,r);i[W_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&oi.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(Zi,"setupTransaction");function Kw(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith($w)){if(!n)if(r)n=oi.openDBI(e,r);else{let u=oi.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=oi.openDBI(e,u[_]),!n[W_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(Kw,"getOverflowCheck");function bQ(e,t,r,s=!1,n=void 0,i=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);return Zi(e,t,t,(o,c,u)=>(z_(r),r=Vc(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>AQ(_.value,r))))}a(bQ,"searchAll");function NQ(e,t,r,s=!1,n=void 0,i=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);z_(r),r=Vc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of Yw(e,t,t,s,n,i))o.set(c,Q_.parseRow(u,r));return o}a(NQ,"searchAllToMap");function yQ(e,t,r=!1,s=void 0,n=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=Yw(e,void 0,t,r,s,n),c=o.transaction,u=Kw(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(yQ,"iterateDBI");function wQ(e,t){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);return oi.statDBI(e,t).entryCount}a(wQ,"countAll");function IQ(e,t,r,s,n=!1,i=void 0,o=void 0){return ai(e,r,s),Zi(e,t,r,(c,u,_,l)=>(s=Hr.convertKeyValueToWrite(s),l===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(IQ,"equals");function CQ(e,t,r){return ai(e,t,r),oi.openDBI(e,t).getValuesCount(r)}a(CQ,"count");function DQ(e,t,r,s,n=!1,i=void 0,o=void 0){return ai(e,r,s),Zi(e,null,r,(c,u)=>{s=Hr.convertKeyValueToWrite(s);let _=!0;typeof s=="number"&&(_=!1);let l;if(n===!0){let d;for(let f of u.getKeys({transaction:c,start:s}))if(!f.startsWith(s)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(s))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(DQ,"startsWith");function LQ(e,t,r,s,n=!1,i=void 0,o=void 0){return Ww(e,t,r,s,n,i,o,!0)}a(LQ,"endsWith");function Ww(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return ai(e,r,s),Zi(e,null,r,(u,_,l,d)=>{let f=Kw(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(E=>{let h=E.toString();return h.endsWith($w)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(s):S.includes(s))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?_[W_.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(Ww,"contains");function MQ(e,t,r,s,n=!1,i=void 0,o=void 0){ai(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),kc(e,t,r,s,u,n,i,o,!0,!1)}a(MQ,"greaterThan");function UQ(e,t,r,s,n=!1,i=void 0,o=void 0){ai(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),kc(e,t,r,s,u,n,i,o,!1,!1)}a(UQ,"greaterThanEqual");function PQ(e,t,r,s,n=!1,i=void 0,o=void 0){ai(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),kc(e,t,r,u,s,n,i,o,!1,!0)}a(PQ,"lessThan");function vQ(e,t,r,s,n=!1,i=void 0,o=void 0){ai(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),kc(e,t,r,u,s,n,i,o,!1,!1)}a(vQ,"lessThanEqual");function BQ(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Hr.validateEnv(e),r===void 0)throw new Error(ut.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ut.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ut.END_VALUE_REQUIRED);if(s=Hr.convertKeyValueToWrite(s),n=Hr.convertKeyValueToWrite(n),s>n)throw new Error(ut.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return kc(e,t,r,s,n,i,o,c)}a(BQ,"between");function HQ(e,t,r,s){Hr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(z_(r),r=Vc(n,r),s===void 0)throw new Error(ut.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=Q_.parseRow(c,r)),o}a(HQ,"searchByHash");function xQ(e,t,r){Hr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ut.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(xQ,"checkHashExists");function qQ(e,t,r,s,n=[]){return zw(e,t,r,s,n),Qw(e,t,r,s,n).map(i=>i[1])}a(qQ,"batchSearchByHash");function GQ(e,t,r,s,n=[]){zw(e,t,r,s,n);let i=new Map;for(let[o,c]of Qw(e,t,r,s,n))i.set(o,c);return i}a(GQ,"batchSearchByHashToMap");function Qw(e,t,r,s,n=[]){return Zi(e,t,t,(i,o,c)=>{r=Vc(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,Q_.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(Qw,"batchHashSearch");function zw(e,t,r,s,n){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(z_(r),s==null)throw new Error(ut.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ut.IDS_MUST_BE_ITERABLE)}a(zw,"initializeBatchSearchByHash");function z_(e){if(!Array.isArray(e))throw e===void 0?new Error(ut.FETCH_ATTRIBUTES_REQUIRED):new Error(ut.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(z_,"validateFetchAttributes");function ai(e,t,r){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ut.SEARCH_VALUE_REQUIRED);if(r?.length>OQ)throw new Error(ut.SEARCH_VALUE_TOO_LARGE)}a(ai,"validateComparisonFunctions");function Vc(e,t){return t.length===1&&RQ.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=oi.listDBIs(e)),t}a(Vc,"setGetWholeRowAttributes");Jw.exports={searchAll:bQ,searchAllToMap:NQ,count:CQ,countAll:wQ,equals:IQ,startsWith:DQ,endsWith:LQ,contains:Ww,searchByHash:HQ,setGetWholeRowAttributes:Vc,batchSearchByHash:qQ,batchSearchByHashToMap:GQ,checkHashExists:xQ,iterateDBI:yQ,greaterThan:MQ,greaterThanEqual:UQ,lessThan:PQ,lessThanEqual:vQ,between:BQ}});var ta=g(($le,tI)=>{var Xw=require("lodash"),jw=Xe(),fe=require("joi"),FQ=Q(),{hdb_schema_table:$c,checkValidTable:Zw,hdb_table:eI,hdb_database:J_}=Qs(),{handleHDBError:kQ,hdb_errors:VQ}=se(),{getDatabases:$Q}=(Ae(),ne(Ge)),{HTTP_STATUS_CODES:YQ}=VQ,KQ=fe.object({database:J_,schema:J_,table:eI,search_attribute:$c,search_value:fe.any().required(),get_attributes:fe.array().min(1).items(fe.alternatives($c,fe.object())).optional(),desc:fe.bool(),limit:fe.number().integer().min(1),offset:fe.number().integer().min(0)}),WQ=fe.object({database:J_,schema:J_,table:eI,operator:fe.string().valid("and","or").default("and").lowercase(),offset:fe.number().integer().min(0),limit:fe.number().integer().min(1),get_attributes:fe.array().min(1).items(fe.alternatives($c,fe.object())).optional(),sort:fe.object({attribute:fe.alternatives($c,fe.array().min(1)),descending:fe.bool().optional()}).optional(),conditions:fe.array().min(1).items(fe.alternatives(fe.object({operator:fe.string().valid("and","or").default("and").lowercase(),conditions:fe.array()}),fe.object({search_attribute:fe.alternatives($c,fe.array().min(1)),search_type:fe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:fe.when("search_type",{switch:[{is:"equals",then:fe.any()},{is:"between",then:fe.array().items(fe.alternatives([fe.string(),fe.number()])).length(2)}],otherwise:fe.alternatives(fe.string(),fe.number())}).required()}))).required()});tI.exports=function(e,t){let r=null;switch(t){case"value":r=jw.validateBySchema(e,KQ);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(Zw("database",e.schema)),i(Zw("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=jw.validateBySchema(e,WQ);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=FQ.checkGlobalSchemaTable(e.schema,e.table);if(n)return kQ(new Error,n,YQ.NOT_FOUND);let o=$Q()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let u=a(l=>{for(let d=0,f=l.conditions.length;d<f;d++){let E=l.conditions[d];E.conditions?u(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=Xw.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!l.name&&!Xw.some(o,d=>d===l||d.attribute===l||d.attribute===l.attribute));if(_&&_.length>0){let l=_.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var Op=g((Kle,rI)=>{"use strict";var QQ=We(),zQ=ta(),{getSchemaPath:JQ}=Je();rI.exports=XQ;function XQ(e){let t=zQ(e,"hashes");if(t)throw t;let r=JQ(e.schema,e.table);return QQ.openEnvironment(r,e.table)}a(XQ,"initialize")});var bp=g((Qle,sI)=>{"use strict";var jQ=ea(),ZQ=Op();sI.exports=ez;async function ez(e){let t=await ZQ(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return jQ.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(ez,"lmdbGetDataByHash")});var ra=g((Jle,nI)=>{"use strict";var Np=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};nI.exports=Np});var oI=g((Zle,iI)=>{"use strict";var jle=ra(),tz=ea(),rz=Op();iI.exports=sz;async function sz(e){let t=await rz(e),r=global.hdb_schema[e.schema][e.table];return tz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(sz,"lmdbSearchByHash")});var Zs=g((t_e,aI)=>{"use strict";var yp=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};aI.exports=yp});var X_=g((s_e,fI)=>{"use strict";var Qt=ea(),nz=We(),iz=Q(),Ee=dt(),eo=M(),oz=Fi(),cI=yr().LMDB_ERRORS_ENUM,{getSchemaPath:az}=Je(),An=eo.SEARCH_WILDCARDS;async function cz(e,t,r){let s;e.schema===eo.SYSTEM_SCHEMA_NAME?s=oz[e.table]:s=global.hdb_schema[e.schema][e.table];let n=dI(e,s.hash_attribute,r,t);return lI(e,n,s.hash_attribute,r)}a(cz,"prepSearch");async function lI(e,t,r,s){let n=az(e.schema,e.table),i=await nz.openEnvironment(n,e.table),o=_I(i,e,t,r),c=o.transaction||i;if([Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Ee.SEARCH_TYPES.SEARCH_ALL,Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(uz(e,r)===!1){let l=e.search_attribute;if(l===r)return s?uI(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?uI(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Qt.batchSearchByHashToMap(c,r,e.get_attributes,_):Qt.batchSearchByHash(c,r,e.get_attributes,_)}a(lI,"executeSearch");function _I(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case Ee.SEARCH_TYPES.EQUALS:n=Qt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.CONTAINS:n=Qt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.ENDS_WITH:case Ee.SEARCH_TYPES._ENDS_WITH:n=Qt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.STARTS_WITH:case Ee.SEARCH_TYPES._STARTS_WITH:n=Qt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Qt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Qt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.SEARCH_ALL:return Qt.searchAll(e,s,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Qt.searchAllToMap(e,s,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.BETWEEN:n=Qt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN:case Ee.SEARCH_TYPES._GREATER_THAN:n=Qt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN_EQUAL:case Ee.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Qt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN:case Ee.SEARCH_TYPES._LESS_THAN:n=Qt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN_EQUAL:case Ee.SEARCH_TYPES._LESS_THAN_EQUAL:n=Qt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(_I,"searchByType");function uI(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(uI,"createMapFromIterable");function uz(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(uz,"checkToFetchMore");function dI(e,t,r,s){if(iz.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),An.indexOf(n)>-1)return r===!0?Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ee.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(An[0])<0&&n.indexOf(An[1])<0)return c===!0?r===!0?Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Ee.SEARCH_TYPES.EQUALS;if(An.indexOf(i)>=0&&An.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Ee.SEARCH_TYPES.CONTAINS;if(An.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Ee.SEARCH_TYPES.ENDS_WITH;if(An.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Ee.SEARCH_TYPES.STARTS_WITH;if(n.includes(An[0])||n.includes(An[1]))return Ee.SEARCH_TYPES.EQUALS;throw new Error(cI.UNKNOWN_SEARCH_TYPE)}else switch(s){case eo.VALUE_SEARCH_COMPARATORS.BETWEEN:return Ee.SEARCH_TYPES.BETWEEN;case eo.VALUE_SEARCH_COMPARATORS.GREATER:return Ee.SEARCH_TYPES.GREATER_THAN;case eo.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Ee.SEARCH_TYPES.GREATER_THAN_EQUAL;case eo.VALUE_SEARCH_COMPARATORS.LESS:return Ee.SEARCH_TYPES.LESS_THAN;case eo.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Ee.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(cI.UNKNOWN_SEARCH_TYPE)}}a(dI,"createSearchTypeFromSearchObject");fI.exports={executeSearch:lI,createSearchTypeFromSearchObject:dI,prepSearch:cz,searchByType:_I}});var hI=g((o_e,EI)=>{"use strict";var i_e=Zs(),lz=ta(),_z=Q(),dz=M(),fz=X_();EI.exports=Ez;function Ez(e,t){if(!_z.isEmpty(t)&&dz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=lz(e,"value");if(s)throw s;return fz.prepSearch(e,t,!0)}a(Ez,"lmdbGetDataByValue")});var Yc=g((u_e,mI)=>{"use strict";var c_e=Zs(),hz=ta(),mz=Q(),pz=M(),Sz=X_();mI.exports=Tz;async function Tz(e,t){if(!mz.isEmpty(t)&&pz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=hz(e,"value");if(s)throw s;return Sz.prepSearch(e,t,!1)}a(Tz,"lmdbSearchByValue")});var SI=g((d_e,pI)=>{"use strict";var __e=dt(),wp=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}},Ip=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Cp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};pI.exports={SearchByConditionsObject:wp,SearchCondition:Ip,SortAttribute:Cp}});var OI=g((m_e,AI)=>{"use strict";var E_e=SI().SearchByConditionsObject,gz=Zs(),Rz=ta(),Dp=ea(),j_=dt(),{Resource:h_e}=(Os(),ne(Lp)),RI=X_(),Az=Ap(),Oz=require("lodash"),{getSchemaPath:bz}=Je(),TI=We(),{handleHDBError:Nz,hdb_errors:yz}=se(),{HTTP_STATUS_CODES:wz}=yz,Iz=1e8;AI.exports=Cz;async function Cz(e){let t=Rz(e,"conditions");if(t)throw Nz(t,t.message,wz.BAD_REQUEST,void 0,void 0,!0);e.operator=e.operator?e.operator.toLowerCase():void 0,e.offset=Number.isInteger(e.offset)?e.offset:0;let r=bz(e.schema,e.table),s=await TI.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)TI.openDBI(s,_.search_attribute);let i=Oz.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===j_.SEARCH_TYPES.EQUALS?_.estimated_count=Dp.count(s,_.search_attribute,_.search_value):l===j_.SEARCH_TYPES.CONTAINS||l===j_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=Iz}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await gI(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=s.dbis[n.hash_attribute],l=i.slice(1).map(RI.filterByType),d=l.length,f=Dp.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(E=>Az.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await gI(o,e,f,n.hash_attribute);c=c.concat(E)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=Dp.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(Cz,"lmdbSearchByConditions");async function gI(e,t,r,s){let n=new gz(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===j_.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,RI.searchByType(e,n,i,s).map(o=>o.value)}a(gI,"executeConditionSearch")});var sa=g((S_e,bI)=>{"use strict";var Dz=M().OPERATIONS_ENUM,Mp=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=Dz.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};bI.exports=Mp});var Up=g((g_e,MI)=>{"use strict";var II=Zs(),CI=sa(),DI=Yc(),LI=Fc(),ur=M(),NI=Q(),yI=We(),{getTransactionAuditStorePath:Lz,getSchemaPath:Mz}=Je(),wI=$();MI.exports=Uz;async function Uz(e){try{if(NI.isEmpty(global.hdb_schema[e.schema])||NI.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Pz(e),await vz(e);let t=Mz(e.schema,e.table);try{await yI.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")wI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Lz(e.schema,e.table);await yI.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")wI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Uz,"lmdbDropTable");async function Pz(e){let t=new II(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await DI(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new CI(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await LI(n)}a(Pz,"deleteAttributesFromSystem");async function vz(e){let t=new II(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await DI(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new CI(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await LI(n)}catch(i){throw i}}a(vz,"dropTableFromSystem")});var PI=g((A_e,UI)=>{"use strict";var Bz=require("fs-extra"),Hz=Zs(),xz=ra(),qz=sa(),Gz=Up(),Fz=Fc(),kz=bp(),Vz=Yc(),On=M(),{getSchemaPath:$z}=Je(),{handleHDBError:Yz,hdb_errors:Kz}=se(),{HDB_ERROR_MSGS:Wz,HTTP_STATUS_CODES:Qz}=Kz;UI.exports=zz;async function zz(e){let t;try{t=await Jz(e.schema);let r=new Hz(On.SYSTEM_SCHEMA_NAME,On.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,On.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[On.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await Vz(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await Gz(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new qz(On.SYSTEM_SCHEMA_NAME,On.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Fz(n);let i=$z(t);await Bz.remove(i)}catch(r){throw r}}a(zz,"lmdbDropSchema");async function Jz(e){let t=new xz(On.SYSTEM_SCHEMA_NAME,On.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[On.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await kz(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw Yz(new Error,Wz.SCHEMA_NOT_FOUND(e),Qz.NOT_FOUND,void 0,void 0,!0);return s}a(Jz,"validateDropSchema")});var Z_=g((b_e,vI)=>{"use strict";var Pp=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};vI.exports=Pp});var HI=g((w_e,BI)=>{"use strict";var Xz=require("fs-extra"),ed=We(),{getTransactionAuditStorePath:jz}=Je(),vp=dt(),y_e=Z_();BI.exports=Zz;async function Zz(e){let t;try{let r=jz(e.schema,e.table);await Xz.mkdirp(r),t=await ed.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{ed.createDBI(t,vp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),ed.createDBI(t,vp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),ed.createDBI(t,vp.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(Zz,"createTransactionsAuditEnvironment")});var FI=g((C_e,GI)=>{"use strict";var Bp=M(),xI=We(),e2=ko(),{getSystemSchemaPath:t2,getSchemaPath:r2}=Je(),s2=Fi(),n2=T_(),Hp=S_(),i2=$(),o2=HI(),qp=s2.hdb_table,qI=[];for(let e=0;e<qp.attributes.length;e++)qI.push(qp.attributes[e].attribute);GI.exports=a2;async function a2(e,t){let r=r2(t.schema,t.table),s=new Hp(t.schema,t.table,Bp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Hp(t.schema,t.table,Bp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Hp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await xI.createEnvironment(r,t.table),e!==void 0){let o=await xI.openEnvironment(t2(),Bp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await e2.insertRecords(o,qp.hash_attribute,qI,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await xp(s),await xp(n),await xp(i)}await o2(t)}catch(o){throw o}}a(a2,"lmdbCreateTable");async function xp(e){try{await n2(e)}catch(t){i2.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(xp,"createAttribute")});var VI=g((L_e,kI)=>{"use strict";var c2=Dc(),u2=Mc(),l2=Y_(),Kc=M(),_2=ko().updateRecords,d2=We(),{getSchemaPath:f2}=Je(),E2=qc(),h2=$();kI.exports=m2;async function m2(e){try{let{schema_table:t,attributes:r}=c2(e);u2(e,r,t.hash_attribute),e.schema!==Kc.SYSTEM_SCHEMA_NAME&&(r.includes(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await l2(e.hdb_auth_header,t,r),n=f2(e.schema,e.table),i=await d2.openEnvironment(n,e.table),o=await _2(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await E2(e,o)}catch(c){h2.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(m2,"lmdbUpdateRecords")});var YI=g((U_e,$I)=>{"use strict";var p2=M().OPERATIONS_ENUM,Gp=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=p2.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};$I.exports=Gp});var WI=g((B_e,KI)=>{"use strict";var v_e=YI(),S2=Dc(),T2=Mc(),g2=Y_(),Wc=M(),R2=ko().upsertRecords,A2=We(),{getSchemaPath:O2}=Je(),b2=qc(),N2=$(),{handleHDBError:y2,hdb_errors:w2}=se();KI.exports=I2;async function I2(e){let t;try{t=S2(e)}catch(u){throw y2(u,u.message,w2.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;T2(e,s,r.hash_attribute),e.schema!==Wc.SYSTEM_SCHEMA_NAME&&(s.includes(Wc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Wc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Wc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Wc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await g2(e.hdb_auth_header,r,s),i=O2(e.schema,e.table),o=await A2.openEnvironment(i,e.table),c=await R2(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await b2(e,c)}catch(u){N2.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(I2,"lmdbUpsertRecords")});var zI=g((x_e,QI)=>{"use strict";var Fp=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};QI.exports=Fp});var XI=g((G_e,JI)=>{"use strict";var kp=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};JI.exports=kp});var eC=g((V_e,ZI)=>{"use strict";var Vp=We(),{getTransactionAuditStorePath:C2}=Je(),k_e=zI(),Qc=dt(),D2=Q(),jI=XI(),L2=require("util").promisify,M2=L2(setTimeout),U2=1e4,P2=100;ZI.exports=v2;async function v2(e){let t=C2(e.schema,e.table),r=await Vp.openEnvironment(t,e.table,!0),s=Vp.listDBIs(r);Vp.initializeDBIs(r,Qc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new jI;do n=await B2(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await M2(P2);while(n.transactions_deleted>0);return i}a(v2,"deleteAuditLogsBefore");async function B2(e,t){let r=new jI;try{let s=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Qc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];D2.isEmpty(c)||(n=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>U2)break}return await n,r}catch(s){throw s}}a(B2,"deleteTransactions")});var rC=g((Y_e,tC)=>{"use strict";var $p=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};tC.exports=$p});var nC=g((Q_e,sC)=>{"use strict";var H2=Zs(),x2=sa(),W_e=rC(),en=M(),q2=Q(),Yp=We(),G2=Fi(),F2=Yc(),k2=Fc(),{getSchemaPath:V2}=Je();sC.exports=$2;async function $2(e,t=!0){let r;e.schema===en.SYSTEM_SCHEMA_NAME?r=G2[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await K2(e),n=V2(e.schema,e.table),i=await Yp.openEnvironment(n,e.table);return t===!0&&await Y2(e,i,r.hash_attribute),Yp.dropDBI(i,e.attribute),s}a($2,"lmdbDropAttribute");async function Y2(e,t,r){let s=Yp.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);n=t.dbis[r].put(o,_,u)}await n}a(Y2,"removeAttributeFromAllObjects");async function K2(e){let t=new H2(en.SYSTEM_SCHEMA_NAME,en.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await F2(t)).filter(o=>o[en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(q2.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new x2(en.SYSTEM_SCHEMA_NAME,en.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return k2(i)}a(K2,"dropAttributeFromSystem")});var lC=g((X_e,uC)=>{"use strict";var Kp=We(),na=dt(),J_e=wr(),Wp=M(),iC=Q(),{getTransactionAuditStorePath:W2}=Je(),Q2=ea(),td=Xo(),z2=$();uC.exports=J2;async function J2(e){let t=W2(e.schema,e.table),r=await Kp.openEnvironment(t,e.table,!0),s=Kp.listDBIs(r);Kp.initializeDBIs(r,na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return oC(r,e.search_values);case Wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,j2(r,e.search_values,n);case Wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return X2(r,e.search_values);default:return oC(r)}}a(J2,"readAuditLog");function oC(e,t=[0,Date.now()]){iC.isEmpty(t[0])&&(t[0]=0),iC.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new td,n))}a(oC,"searchTransactionsByTimestamp");function X2(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[na.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,cC(e,i))}return Object.fromEntries(r)}a(X2,"searchTransactionsByUsername");function j2(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=Q2.equals(e,na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,na.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);s.has(f)?s.get(f).push(_.toString()):s.set(f,[_.toString()])}}let n=Array.from(s.keys()),i=cC(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);aC(u,"records",r,l,o),aC(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(j2,"searchTransactionsByHashValues");function aC(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(s.indexOf(u)>=0)if(n.has(u)){let _=n.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new td(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new td(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(aC,"loopRecords");function cC(e,t){let r=[];try{let s=e.dbis[na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new td,i);r.push(o)}}catch(i){z2.warn(i)}return r}catch(s){throw s}}a(cC,"batchSearchTransactions")});var dC=g((tde,_C)=>{"use strict";var{getSchemaPath:Z_e}=Je(),ede=We(),{database:Z2}=(Ae(),ne(Ge));_C.exports={writeTransaction:eJ};async function eJ(e,t,r){return Z2({database:e,table:t}).transaction(r)}a(eJ,"writeTransaction")});var mC=g((sde,hC)=>{"use strict";var{getSchemaPath:fC}=Je(),EC=We();hC.exports={flush:tJ,resetReadTxn:rJ};async function tJ(e,t){return(await EC.openEnvironment(fC(e,t),t.toString())).flushed}a(tJ,"flush");async function rJ(e,t){try{(await EC.openEnvironment(fC(e,t),t.toString())).resetReadTxn()}catch{}}a(rJ,"resetReadTxn")});var gC=g((ide,TC)=>{"use strict";var{Readable:sJ}=require("stream"),{getDatabases:nJ}=(Ae(),ne(Ge)),{readSync:iJ,openSync:oJ,createReadStream:pC}=require("fs"),{open:aJ}=require("lmdb"),SC=c_(),cJ=l_(),{AUDIT_STORE_OPTIONS:uJ}=(xi(),ne(RC)),{INTERNAL_DBIS_NAME:lJ,AUDIT_STORE_NAME:_J}=dt();TC.exports=fJ;var Qp=32768,dJ=100;async function fJ(e){let t=e.database||e.schema||"data",r=nJ()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let _=r[n[0]];if(!_)throw new Error(`Can not find table ${n[0]}`);let l=_.dbisDB,d=aJ({noSync:!0,maxDbs:cJ.MAX_DBS}),f,E=d.openDB(lJ,new SC(!1)),h=l.useReadTransaction(),p=0,S=a(async function(b,R){R.encoding="binary",R.encoder=void 0;let L=d.openDB(b,R),H=l.openDB(b,R);for(let{key:P,version:k,value:B}of H.getRange({transaction:h,versions:H.useVersions}))f=L.put(P,B,k),p++%dJ===0&&(await new Promise(J=>setTimeout(J,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:b,value:R}of l.getRange({transaction:h,start:!1}))if(n.some(L=>b.startsWith?.(L+"/"))){E.put(b,R);let[,L]=b.split("/"),H=!L,P=new SC(!H,H);await S(b,P)}e.include_audit&&await S(_J,Object.assign({},uJ)),await f;let T=pC(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=oJ(o.path);return o.transaction(()=>{let _=Buffer.alloc(Qp);iJ(c,_,0,Qp),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=pC(null,{fd:c,start:Qp}),f=new sJ.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",s),_}}a(fJ,"getBackup")});var bC=g((ade,OC)=>{"use strict";var EJ=$(),{handleHDBError:hJ}=se(),mJ=vb(),pJ=T_(),SJ=pp(),TJ=Pw(),gJ=Fc(),RJ=bp(),AJ=oI(),OJ=hI(),bJ=Yc(),NJ=OI(),yJ=PI(),wJ=FI(),IJ=VI(),CJ=WI(),DJ=eC(),LJ=Up(),MJ=nC(),UJ=lC(),PJ=dC(),AC=mC(),vJ=gC(),zp=class extends mJ{static{a(this,"LMDBBridge")}async searchByConditions(t){return NJ(t)}async getDataByHash(t){return await RJ(t)}async searchByHash(t){return await AJ(t)}async getDataByValue(t,r){return await OJ(t,r)}async searchByValue(t){return await bJ(t)}async createSchema(t){return await TJ(t)}async dropSchema(t){return await yJ(t)}async createTable(t,r){return await wJ(t,r)}async dropTable(t){return await LJ(t)}async createAttribute(t){return await pJ(t)}async createRecords(t){return await SJ(t)}async updateRecords(t){return await IJ(t)}async upsertRecords(t){try{return await CJ(t)}catch(r){throw hJ(r,null,null,EJ.ERR,r)}}async deleteRecords(t){return await gJ(t)}async dropAttribute(t){return await MJ(t)}async deleteAuditLogsBefore(t){return await DJ(t)}async readAuditLog(t){return await UJ(t)}writeTransaction(t,r,s){return PJ.writeTransaction(t,r,s)}flush(t,r){return AC.flush(t,r)}resetReadTxn(t,r){return AC.resetReadTxn(t,r)}getBackup(t){return vJ(t)}};OC.exports=zp});function GJ(){qJ=setInterval(function(){for(let e of Jp)if(e.stale){let t=e[Oe]?.url;wC.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},xJ).unref()}var Xp,yC,wC,BJ,Jp,HJ,zc,NC,to,rd,xJ,qJ,jp=Re(()=>{Xp=x(wr()),yC=x(se()),wC=x($());Os();BJ=100,Jp=new Set,HJ=25e3,to=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxnsUsed=1,this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0),Jp.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Jp.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(zc&&performance.now()-NC>HJ)throw new yC.ServerError("Outstanding write transactions have too long of queue, please try again later",503)}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,Xp.getNextMonotonicTime)());let s=t.retries||0;if(this.validated<this.writes.length)try{let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{try{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let T=S();E?E.push?E.push(T):E=[E,T]:E=T}}E&&await(E.push?Promise.all(E):E)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(l){throw this.abort(),l}s||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let n,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,s)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){s>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);n=n||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<BJ>>s?u():n=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),n)return zc||(zc=n,NC=performance.now(),zc.then(()=>{zc=null})),n.then(l=>l?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=s+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},rd=class extends to{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Xp.getNextMonotonicTime)())}getReadTxn(){}},xJ=3e4;a(GJ,"startMonitoringTxns");GJ()});function je(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let s=e.transaction=new to;e.timestamp&&(s.timestamp=e.timestamp),s[Oe]=e,e.resourceCache||(e.resourceCache=[]);let n;try{if(n=t(s),n?.then)return n.then(i,o)}catch(c){o(c)}return i(n);function i(c){let u=s.commit({letItLinger:r?.letItLinger});return u.then?u.then(()=>c):c}function o(c){throw s.abort({}),c}}var IC,ro=Re(()=>{IC=require("../index");Os();jp();a(je,"transaction");(0,IC._assignPackageExport)("transaction",je);je.commit=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};je.abort=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var HC={};Ye(HC,{ResourceBridge:()=>tS});function rS({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function DC(e,t){let r=tn(e),s=rS(e,r);if(!r)throw new Ds.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user},o;je(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:n,select:s},i);return l=l&&nd(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function tn(e){let t=e.database||e.schema||kJ,r=Ls()[t];if(!r)throw(0,Ds.handleHDBError)(new Error,FJ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function LC(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*MC(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var UC,sd,Ds,PC,vC,Ms,Zp,eS,BC,FJ,kJ,VJ,$J,CC,tS,xC=Re(()=>{"use strict";UC=x(bC()),sd=x(ta()),Ds=x(se());Ae();PC=x(Dc()),vC=x(Mc()),Ms=x(M()),Zp=x(Rn()),eS=x(Cs()),BC=x(Q());ro();id();({HDB_ERROR_MSGS:FJ}=Ds.hdb_errors),kJ="data",VJ=1e4,$J=10,tS=class extends UC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),CC=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,sd.default)(t,"conditions");if(r)throw(0,Ds.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=tn(t);if(!s)throw new Ds.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:rS(t,s),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Ds.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}ct({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await tn(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=tn(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(_=>setImmediate(_));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){tn(t).dropTable()}createSchema(t){return Jc({database:t.schema,table:null}),Zp.signalSchemaChange(new eS.SchemaEventMsg(process.pid,Ms.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await sS(t.schema),Zp.signalSchemaChange(new eS.SchemaEventMsg(process.pid,Ms.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,CC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,PC.default)(t);(0,vC.default)(t,s,r.primaryKey);let n,i=Ls()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return je(o,async c=>{if(!i.schemaDefined){n=[];for(let l of s)i.attributes.find(f=>f.name==l)||n.push(l);n.length>0&&await i.addAttributes(n.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=nd(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:_}})}async deleteRecords(t){let r=Ls()[t.schema][t.table],s={user:t.hdb_user};return je(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return LC(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=Ls()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ds.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:Ms.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,BC.async_set_timeout)($J),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%VJ===0&&await _();return u.length>0&&await _(),n?LC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,sd.default)(t,"hashes");if(r)throw r;return DC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of DC(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&Ms.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let s=(0,sd.default)(t,"value");if(s)throw s;let n=tn(t);if(!n)throw new Ds.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===Ms.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:rS(t,n)})}async getDataByValue(t,r){let s=new Map,n=tn(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){tn({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return tn(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=tn(t),s={};switch(t.search_type){case Ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case Ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of MC(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return MC(r,t.search_values?.[0],t.search_values?.[1])}}};a(rS,"getSelect");a(DC,"getRecords");a(tn,"getTable");a(LC,"createDeleteResponse");a(MC,"groupRecordsInHistory")});var ys=g((Ade,qC)=>{"use strict";var{ResourceBridge:YJ}=(xC(),ne(HC)),KJ=ee();KJ.initSync();var od;function WJ(){return od||(od=new YJ,od)}a(WJ,"getBridge");qC.exports=WJ()});var VC=g((bde,kC)=>{"use strict";var GC=require("lodash"),Xc=require("mathjs"),QJ=require("jsonata"),FC=Q();kC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?GC.uniqWith(e,GC.isEqual):e,searchJSON:zJ,mad:jc.bind(null,Xc.mad),mean:jc.bind(null,Xc.mean),mode:jc.bind(null,Xc.mode),prod:jc.bind(null,Xc.prod),median:jc.bind(null,Xc.median)};function jc(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(jc,"aggregateFunction");function zJ(e,t){if(typeof e!="string"||e.length===0)throw new Error("search json expression must be a non-empty string");let r="__"+e+"__";if(FC.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),FC.isEmpty(this.__ala__.res[r])){let s=QJ(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(zJ,"searchJSON")});var YC=g((yde,$C)=>{"use strict";var Et=require("moment"),nS="YYYY-MM-DDTHH:mm:ss.SSSZZ";Et.suppressDeprecationWarnings=!0;$C.exports={current_date:()=>Et().utc().format("YYYY-MM-DD"),current_time:()=>Et().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Et(e).utc().format("YYYY");case"month":return Et(e).utc().format("MM");case"day":return Et(e).utc().format("DD");case"hour":return Et(e).utc().format("HH");case"minute":return Et(e).utc().format("mm");case"second":return Et(e).utc().format("ss");case"millisecond":return Et(e).utc().format("SSS");default:break}},date:e=>Et(e).utc().format(nS),date_format:(e,t)=>Et(e).utc().format(t),date_add:(e,t,r)=>Et(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Et(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=Et(e).utc(),n=Et(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>Et().utc().valueOf(),get_server_time:()=>Et().format(nS),offset_utc:(e,t)=>Et(e).utc().utcOffset(t).format(nS)}});var zC=g((wde,QC)=>{"use strict";var JJ=require("@turf/area"),XJ=require("@turf/length"),jJ=require("@turf/circle"),ZJ=require("@turf/difference"),e4=require("@turf/distance"),t4=require("@turf/boolean-contains"),r4=require("@turf/boolean-equal"),s4=require("@turf/boolean-disjoint"),n4=require("@turf/helpers"),KC=M(),me=Q(),bn=$();QC.exports={geoArea:i4,geoLength:o4,geoCircle:a4,geoDifference:c4,geoDistance:WC,geoNear:u4,geoContains:l4,geoEqual:_4,geoCrosses:d4,geoConvert:f4};function i4(e){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return JJ.default(e)}catch(t){return bn.trace(t,e),NaN}}a(i4,"geoArea");function o4(e,t){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return XJ.default(e,{units:t||"kilometers"})}catch(r){return bn.trace(r,e),NaN}}a(o4,"geoLength");function a4(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return jJ.default(e,t,{units:r||"kilometers"})}catch(s){return bn.trace(s,e,t),NaN}}a(a4,"geoCircle");function c4(e,t){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return ZJ(e,t)}catch(r){return bn.trace(r,e,t),NaN}}a(c4,"geoDifference");function WC(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return e4.default(e,t,{units:r||"kilometers"})}catch(s){return bn.trace(s,e,t),NaN}}a(WC,"geoDistance");function u4(e,t,r,s){if(me.isEmpty(e)||me.isEmpty(t))return!1;if(me.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return WC(e,t,s)<=r}catch(n){return bn.trace(n,e,t),!1}}a(u4,"geoNear");function l4(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return t4.default(e,t)}catch(r){return bn.trace(r,e,t),!1}}a(l4,"geoContains");function _4(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return r4.default(e,t)}catch(r){return bn.trace(r,e,t),!1}}a(_4,"geoEqual");function d4(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return!s4.default(e,t)}catch(r){return bn.trace(r,e,t),!1}}a(d4,"geoCrosses");function f4(e,t,r){if(me.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(me.isEmpty(t))throw new Error("geo_type is required");if(me.isEmpty(KC.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(KC.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=me.autoCastJSON(e)),n4[t](e,r)}a(f4,"geoConvert")});var ad=g((Cde,JC)=>{var so=VC(),xr=YC(),rn=zC();JC.exports=e=>{e.aggr.mad=e.aggr.MAD=so.mad,e.aggr.mean=e.aggr.MEAN=so.mean,e.aggr.mode=e.aggr.MODE=so.mode,e.aggr.prod=e.aggr.PROD=so.prod,e.aggr.median=e.aggr.MEDIAN=so.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=so.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=so.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=xr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=xr.current_time,e.fn.extract=e.fn.EXTRACT=xr.extract,e.fn.date=e.fn.DATE=xr.date,e.fn.date_format=e.fn.DATE_FORMAT=xr.date_format,e.fn.date_add=e.fn.DATE_ADD=xr.date_add,e.fn.date_sub=e.fn.DATE_SUB=xr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=xr.date_diff,e.fn.now=e.fn.NOW=xr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=xr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=xr.get_server_time,e.fn.getdate=e.fn.GETDATE=xr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=xr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=rn.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=rn.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=rn.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=rn.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=rn.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=rn.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=rn.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=rn.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=rn.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=rn.geoNear}});var eD=g((Dde,ZC)=>{"use strict";var Zc=require("lodash"),lr=require("alasql");lr.options.cache=!1;var E4=ad(),XC=require("clone"),cd=require("recursive-iterator"),le=$(),Ie=Q(),ia=ys(),h4=M(),{hdb_errors:m4}=se(),{getDatabases:jC}=(Ae(),ne(Ge)),p4="IS NULL",Us="There was a problem performing this search. Please check the logs and try again.";E4(lr);var iS=class{static{a(this,"SQLSearch")}constructor(t,r){if(Ie.isEmpty(t))throw le.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),Ie.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!Ie.isEmptyOrZeroLength(s))return le.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw le.error("Error thrown from checkEmptySQL in SQLSearch class method search."),le.error(s),new Error(Us)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw le.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),le.error(s),new Error(Us)}if(Object.keys(this.data).length===0)return le.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw le.error("Error thrown from processJoins in SQLSearch class method search."),le.error(s),new Error(Us)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw le.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),le.error(s),new Error(Us)}try{return t=await this._finalSQL(),t}catch(s){throw le.error("Error thrown from finalSQL in SQLSearch class method search."),le.error(s),new Error(Us)}}_getColumns(){let t=new cd(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(XC(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Zc.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=jC()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Ie.isEmpty(this.statement.where)){le.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new cd(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Ie.isEmpty(r)&&r.right)if(Ie.isNotEmptyAndHasValue(r.right.value)){let s=Ie.autoCast(r.right.value);[!0,!1].indexOf(s)>=0&&(r.right=new lr.yy.LogicValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=Ie.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new lr.yy.LogicValue({value:i}):s instanceof lr.yy.StringValue&&Ie.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new lr.yy.NumValue({value:i}))});if(t){le.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new cd(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Ie.isEmpty(h4.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Ie.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Ie.isEmptyOrZeroLength(r.left.columnid)||Ie.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(Ie.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!Ie.isEmpty(r.right.value)||!Ie.isEmpty(r.left.value)?s.add(Ie.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)s.add(u[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(Ie.isEmptyOrZeroLength(this.all_table_attributes)&&Ie.isEmptyOrZeroLength(this.statement.from)&&Ie.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Zc.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(Ie.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);Ie.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Ie.isEmptyOrZeroLength(this.all_table_attributes)&&!Ie.isEmptyOrZeroLength(this.columns.columns))return t;if(Ie.isEmptyOrZeroLength(this.all_table_attributes)&&Ie.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await lr.promise(r)}catch(r){throw le.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),le.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(XC(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(Ie.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(p4)>-1&&this.tables.forEach(n=>{let i={columnid:jC()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Zc.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,_=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!Ie.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Ie.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await ia.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(l){throw le.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),le.error(l),new Error(Us)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await ia.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,E))}))}catch(l){throw le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),le.error(l),new Error(Us)}else if(!Ie.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Ie.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await ia.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,p))}}catch(l){throw le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),le.error(l),new Error(Us)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await ia.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]),this._setMergedHashAttribute(i,d))}catch(l){throw le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),le.error(l),new Error(Us)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof lr.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new lr.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new lr.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new lr.yy.FuncValue:new lr.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,p=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${p}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${p}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"";u=u.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,n);f=await lr.promise(h,t),t=null}catch(E){throw le.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),le.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let p=f[E];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),p=Zc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,T=p.length;S<T;S++){let b=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[b]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new cd(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=Zc.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw le.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),le.error(i),new Error(Us)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await ia.getDataByHash(c),_=n.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let p=n.columns[h],S=E[p]===void 0?null:E[p];this.data[s].__merged_data[f].push(S)}}}}catch(r){throw le.error("Error thrown from getDataByHash function in SQLSearch class method getData."),le.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let s;try{let n=this._buildSQL();le.trace(`Final SQL: ${n}`),s=await lr.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),le.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw le.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),le.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return le.error(m4.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),le.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=n[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;s=s.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;s=s.replace(u,_)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await ia.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw le.error("There was an error when processing this SQL operation. Check your logs"),le.error(o),new Error(Us)}}return Object.values(Object.values(this.data)[0].__merged_data)}};ZC.exports=iS});var Dr=g((Mde,tD)=>{"use strict";var S4=Ub();tD.exports={searchByConditions:g4,searchByHash:R4,searchByValue:A4,search:O4};var oS=ys(),{transformReq:aS}=Q(),T4=eD();async function g4(e){return aS(e),oS.searchByConditions(e)}a(g4,"searchByConditions");async function R4(e){aS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of oS.searchByHash(e))r&&t.push(r);return t}a(R4,"searchByHash");async function A4(e){aS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of oS.searchByValue(e))t.push(r);return t}a(A4,"searchByValue");function O4(e,t){try{let r=new S4(e);r.validate(),new T4(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(O4,"search")});var ud=g((Pde,rD)=>{"use strict";var b4=ys();rD.exports={writeTransaction:N4};function N4(e,t,r){return b4.writeTransaction(e,t,r)}a(N4,"writeTransaction")});var oD=g((Hde,iD)=>{"use strict";var y4=Dr(),w4=gn(),sD=$(),I4=Lr(),Bde=ud(),C4=require("clone"),uS=require("alasql"),D4=ad(),nD=require("util"),L4=nD.promisify(w4.getTableSchema),M4=nD.promisify(y4.search),U4=M(),cS=Q();D4(uS);iD.exports={update:v4};var P4="There was a problem performing this update. Please check the logs and try again.";async function v4({statement:e,hdb_user:t}){let r=await L4(e.table.databaseid,e.table.tableid),s=B4(e.columns);cS.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=C4(n),c=cS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=uS.parse(u).statements[0],l=await M4(_),d=H4(s,l);return x4(o,d,t)}a(v4,"update");function B4(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=uS.compile(`SELECT ${r.expression.toString()} AS [${U4.FUNC_VAL}] FROM ?`)}),t}catch(t){throw sD.error(t),new Error(P4)}}a(B4,"createUpdateRecord");function H4(e,t){return cS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(H4,"buildUpdateRecords");async function x4(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await I4.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){sD.error(`Error delete new_attributes from update response: ${i}`)}return n}a(x4,"updateRecords")});var cD=g((Fde,aD)=>{var q4=require("alasql"),G4=Dr(),F4=$(),k4=ys(),_S=require("util"),lS=Q(),V4=M(),$4=gn(),qde=ud(),Gde=Lr(),Y4="record",K4="successfully deleted",W4=_S.callbackify(X4),Q4=_S.promisify(G4.search),z4=_S.promisify($4.getTableSchema);aD.exports={convertDelete:W4};function J4(e){return`${e.deleted_hashes.length} ${Y4}${e.deleted_hashes.length===1?"":"s"} ${K4}`}a(J4,"generateReturnMessage");async function X4({statement:e,hdb_user:t}){let r=await z4(e.table.databaseid,e.table.tableid);lS.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=lS.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=q4.parse(o).statements[0],u={operation:V4.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await Q4(c);let _=await k4.deleteRecords(u);return lS.isEmptyOrZeroLength(_.message)&&(_.message=J4(_)),delete _.txn_time,_}catch(_){throw F4.error(_),_.hdb_code?_.message:_}}a(X4,"convertDelete")});var fD=g((Vde,dD)=>{"use strict";var j4=ei(),{hdb_errors:uD}=se(),{getDatabases:lD}=(Ae(),ne(Ge));dD.exports={checkSchemaExists:_D,checkSchemaTableExists:Z4,schema_describe:j4};async function _D(e){if(!lD()[e])return uD.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(_D,"checkSchemaExists");async function Z4(e,t){let r=await _D(e);if(r)return r;if(!lD()[e][t])return uD.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Z4,"checkSchemaTableExists")});var eu=g((Yde,e3)=>{e3.exports={name:"harperdb",version:"4.3.0-beta.11",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/abort-controller":"3.374.0","@aws-sdk/client-s3":"3.477.0","@aws-sdk/lib-storage":"3.477.0","@endo/static-module-record":"^1.0.0","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.11.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.1",fastify:"~4.25.1","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"3.0.0-beta.8",lodash:"4.17.21",mathjs:"11.11.2",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.19.0",needle:"3.2.0","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.3.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.0.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.20","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.15.1",yaml:"2.3.4"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.2",chai:"4.3.7","chai-integer":"0.1.0",esbuild:"^0.19.1",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.22.11","newman-reporter-teamcity":"0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.3.3","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var iu={};Ye(iu,{addAnalyticsListener:()=>nu,recordAction:()=>qr,recordActionBinary:()=>ns,setAnalyticsEnabled:()=>t3});function t3(e){AD=e}function qr(e,t,r,s,n){if(!AD)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=dd.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:s,type:n},dd.set(i,o)}ld||r3()}function ns(e,t,r,s,n){qr(!!e,t,r,s,n)}function nu(e){ND.push(e)}function r3(){ld=performance.now(),setTimeout(async()=>{let e=performance.now()-ld;ld=0;let t=[],r={time:Date.now(),period:e,threadId:no.threadId,metrics:t};for(let[n,i]of dd){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of yD){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await wD()}let s=process.memoryUsage();t.push({metric:"memory",threadId:no.threadId,byThread:!0,...s});for(let n of ND)n(t);dd=new Map,no.parentPort?no.parentPort.postMessage({type:bD,report:r}):DD({report:r})},OD).unref()}async function s3(e,t=6e4){let r=ES(),s=ID(),n=new Promise(p=>{let S=performance.now();setImmediate(()=>{let T=performance.now();T-S>5e3&&(0,tu.warn)("Unusually high event queue latency on the main thread of "+Math.round(T-S)+"ms"),S=performance.now()}),s.primaryStore.prefetch([1],()=>{let T=performance.now();T-S>5e3&&(0,tu.warn)("Unusually high task queue latency on the main thread of "+Math.round(T-S)+"ms"),p(T-S)})}),i;for(let p of s.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(p.value?.time){i=p.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,u=new Map,_=[],l;for(let{key:p,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(p>o+t)break}else o=p;l=p;let{metrics:T,threadId:b}=S;for(let R of T||[]){let{path:L,method:H,type:P,metric:k,count:B,total:J,distribution:z,threads:X,...Te}=R;B||(B=1);let ce=k+(L?"-"+L:"");H!==void 0&&(ce+="-"+H),P!==void 0&&(ce+="-"+P);let de=c.get(ce);if(de){if(de.threads){let Be=de.threads[b];if(Be)de=Be;else{de.threads[b]=Object.assign({},Te);continue}}de.count||(de.count=1);let Le=de.count;for(let Be in Te){let Ct=Te[Be];typeof Ct=="number"&&(de[Be]=(de[Be]*Le+Ct*B)/(Le+B))}de.count+=B,J>=0&&(de.total+=J,de.ratio=de.total/de.count)}else de=Object.assign({period:t},R),delete de.distribution,c.set(ce,de),de.byThread&&(de.threads=[],de.threads[b]=Object.assign({},Te),_.push(de));if(z){z=z.map(Be=>typeof Be=="number"?{value:Be,count:1}:Be);let Le=u.get(ce);Le?Le.push(...z):u.set(ce,z)}}await wD()}for(let p of _){let{path:S,method:T,type:b,metric:R,count:L,total:H,distribution:P,threads:k,...B}=p;k=k.filter(J=>J);for(let J in B){if(typeof p[J]!="number")continue;let z=0;for(let X of k){let Te=X[J];typeof Te=="number"&&(z+=Te)}p[J]=z}p.count=k.length,delete p.threads,delete p.byThread}for(let[p,S]of u){let T=c.get(p);S.sort((Be,Ct)=>Be.value>Ct.value?1:-1);let b=T.count-1,R=[],L=0,H=0,P;for(let Be of yD){let Ct=b*Be;for(;L<Ct;)P=S[H++],L+=P.count,H===1&&L--;let ql=S[H>1?H-2:0];P||(P=S[0]),R.push(P.value-(P.value-ql.value)*(L-Ct)/P.count)}let[k,B,J,z,X,Te,ce,de,Le]=R;Object.assign(T,{p1:k,p10:B,p25:J,median:z,p75:X,p90:Te,p95:ce,p99:de,p999:Le})}let d;for(let[p,S]of c)S.id=(0,_d.getNextMonotonicTime)(),S.time=l,s.primaryStore.put(S.id,S,{append:!0}).then(T=>{T||s.primaryStore.put(S.id,S)}),d=!0;let f=Date.now(),{idle:E,active:h}=performance.eventLoopUtilization();if(d||h*10>E){let p=(0,_d.getNextMonotonicTime)(),S={id:p,metric:"main-thread-utilization",idle:E-ED,active:h-hD,taskQueueLatency:await n,time:f,...process.memoryUsage()};s.primaryStore.put(p,S,{append:!0}).then(T=>{T||s.primaryStore.put(p,S)})}ED=E,hD=h}async function mD(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function ES(){return pD||(pD=ct({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function ID(){return SD||(SD=ct({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function o3(){CD=!0;let e=(0,su.get)(fS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await s3(OD,e),await mD(ES(),n3),await mD(ID(),i3)},Math.min(e/2,2147483647)).unref()}function DD(e,t){let r=e.report;r.threadId=t?.threadId||no.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(TD+=s.mean*s.count);r.totalBytesProcessed=TD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(gD.get(t))}),gD.set(t,t.performance.eventLoopUtilization())),r.id=(0,_d.getNextMonotonicTime)(),ES().primaryStore.put(r.id,r),CD||o3(),a3&&(LD=u3(r))}async function u3(e){if(await LD,!ci){let r=(0,ru.dirname)((0,tu.getLogFilePath)());try{ci=await(0,dS.open)((0,ru.join)(r,"analytics.log"),"r+")}catch{ci=await(0,dS.open)((0,ru.join)(r,"analytics.log"),"w+")}}let t=(await ci.stat()).size;if(t>c3){let r=Buffer.alloc(t);await ci.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ci.write(r,{position:0}),await ci.truncate(r.length),t=r.length}await ci.write(JSON.stringify(e)+`
7
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw Ot.error(i),new Error(`Error reading HarperDB config file at ${r}`)}aK(s,r),Jm(s);let n=s.toJSON();if(ZY.config=n,bt=Yo(n),bt.logging_rotation_rotate)for(let i in Iy)bt[i]&&Ot.error(`Config ${Iy[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Ot.trace(tK)}}a(zm,"initConfig");function aK(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ws.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ws.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ws.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(Ot.trace("Updating config file with missing config params"),cr.writeFileSync(t,String(e)))}a(aK,"checkForUpdatedConfig");function Jm(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t?.http?.threads&&(t.threads=t?.http?.threads);let r=WY(t);if(r.error)throw B_.CONFIG_VALIDATION(r.error.message);typeof r.value.threads=="object"?e.setIn(["threads","count"],r.value.threads.count):e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],r.value?.operationsApi?.network?.domainSocket)}a(Jm,"validateConfig");function cK(e,t){bt===void 0&&(bt={});let r=Is[e.toLowerCase()];if(r===void 0){Ot.trace(`Unable to update config object because config param '${e}' does not exist`);return}bt[r.toLowerCase()]=t}a(cK,"updateConfigObject");function Uy(e,t,r=void 0,s=!1,n=!1,i=!1){bt===void 0&&zm();let o=My(Is.hdb_root),c=ws.join(o,Ur.HDB_CONFIG_FILE),u=ni(c),_;if(r===void 0&&e.toLowerCase()===Mr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=Is[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=Qm(f,t);u.setIn([...E],h)}else for(let f in r){let E=Is[f.toLowerCase()];if(E===Mr.HTTP_SECUREPORT&&r[f]===bt[Mr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===Mr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===bt[Mr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===Mr.DATABASES){_=r[f];continue}if(E?.startsWith("threads_")){let h=u.getIn(["threads"]);h>=0&&(u.deleteIn(["threads"]),u.setIn(["threads","count"],h))}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=Ur.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=Qm(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof u.getIn(h.slice(0,-1))=="boolean"&&u.deleteIn(h.slice(0,-1)),u.setIn([...h],S)}catch(T){Ot.error(T)}}}_&&Ly(u,_),Jm(u);let l=u.getIn(["rootPath"]),d=ws.join(l,Ur.HDB_CONFIG_FILE);s===!0&&uK(c,l),cr.writeFileSync(d,String(u)),n&&(bt=Yo(u.toJSON())),Ot.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Uy,"updateConfigValue");function uK(e,t){try{let r=ws.join(t,"backup",`${Ur.HDB_CONFIG_FILE}.bak`);cr.copySync(e,r),Ot.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Ot.error(rK),Ot.error(r)}}a(uK,"backupConfigFile");var lK=["databases"];function Yo(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),x_=e,r(e);function r(s){let n={};for(let i in s)if(s.hasOwnProperty(i)){if(typeof s[i]=="object"&&s[i]!==null&&!Array.isArray(s[i])&&!lK.includes(i)){let o=r(s[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!Mr[u.toUpperCase()]&&Is[u]&&(n[Is[u].toLowerCase()]=o[c]),n[u]=o[c]}}s[i]!==void 0&&(n[i.toLowerCase()]=s[i])}return n}a(r,"squashObj")}a(Yo,"flattenConfig");function Qm(e,t){if(e===Mr.CLUSTERING_NODENAME||e===Mr.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(zY(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Lt.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return Lt.autoCast(t)}a(Qm,"castConfigValue");function _K(){let e=Lt.getPropsFilePath(),t=zi(e);return ni(t).toJSON()}a(_K,"getConfiguration");async function dK(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Uy(void 0,void 0,n,!0),nK}catch(i){throw typeof i=="string"||i instanceof String?XY(i,i,jY.BAD_REQUEST,void 0,void 0,!0):i}}a(dK,"setConfiguration");function Xm(){let e=Lt.getPropsFilePath();try{cr.accessSync(e,cr.constants.F_OK|cr.constants.R_OK)}catch(s){if(!Lt.noBootFile())throw Ot.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=zi(e);return ni(t).toJSON()}a(Xm,"readConfigFile");function ni(e){return QY.parseDocument(cr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ni,"parseYamlDoc");function fK(){let e=Xm(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Lt.isEmptyOrZeroLength(t)?[]:t;let r=wy(t);if(r)throw B_.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=Lt.isEmptyOrZeroLength(s)?[]:s;let n=wy(s);if(n)throw B_.CONFIG_VALIDATION(n.message);if(!Lt.isEmptyOrZeroLength(s)&&!Lt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!Lt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw B_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(fK,"getClusteringRoutes");function Py(e){let t=Cy(e);bt={};for(let r in Is){let s=t.get(r.toUpperCase());if(Lt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Is[r].toLowerCase();n===Mr.LOGGING_ROOT?bt[n]=ws.dirname(s):bt[n]=s}return bt}a(Py,"initOldConfig");function EK(e){let t=Xm();return JY.get(t,e.replaceAll("_","."))}a(EK,"getConfigFromFile");async function hK(e,t){let r=ni(zi());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await cr.writeFile(zi(),String(r))}a(hK,"addConfig");function mK(e){let t=zi(Lt.getPropsFilePath()),r=ni(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=ws.join(s,Ur.HDB_CONFIG_FILE);cr.writeFileSync(n,String(r))}a(mK,"deleteConfigFromFile");function pK(){return x_||(zm(),x_)}a(pK,"getConfigObj")});var Hy=g((que,By)=>{"use strict";var q_=M(),G_=class{static{a(this,"BaseLicense")}constructor(t=0,r=q_.RAM_ALLOCATION_ENUM.DEFAULT,s=q_.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},jm=class extends G_{static{a(this,"ExtendedLicense")}constructor(t=0,r=q_.RAM_ALLOCATION_ENUM.DEFAULT,s=q_.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};By.exports={BaseLicense:G_,ExtendedLicense:jm}});var Ji=g((Fue,Vy)=>{"use strict";var Wo=require("fs-extra"),qy=U_(),Gy=require("crypto"),SK=require("moment"),TK=require("uuid").v4,Wt=$(),ep=require("path"),gK=Q(),ii=M(),{totalmem:xy}=require("os"),RK=Hy().ExtendedLicense,Ko="invalid license key format",AK="061183",OK="mofi25",bK="aes-256-cbc",NK=16,yK=32,Fy=ee();Fy.initSync();var Zm;Vy.exports={validateLicense:ky,generateFingerPrint:IK,licenseSearch:sp,getLicense:LK,checkMemoryLimit:MK};function tp(){return ep.join(Fy.getHdbBasePath(),ii.LICENSE_KEY_DIR_NAME,ii.LICENSE_FILE_NAME)}a(tp,"getLicenseDirPath");function wK(){let e=tp();return ep.join(e,ii.LICENSE_FILE_NAME)}a(wK,"getLicenseFilePath");function rp(){let e=tp();return ep.join(e,ii.REG_KEY_FILE_NAME)}a(rp,"getFingerPrintFilePath");async function IK(){let e=rp();try{return await Wo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await CK();throw Wt.error(`Error writing fingerprint file to ${e}`),Wt.error(t),new Error("There was an error generating the fingerprint")}}a(IK,"generateFingerPrint");async function CK(){let e=TK(),t=qy.hash(e),r=rp();try{await Wo.mkdirp(tp()),await Wo.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Wt.error(`Error writing fingerprint file to ${r}`),Wt.error(s),new Error("There was an error generating the fingerprint")}return t}a(CK,"writeFingerprint");function ky(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:ii.RAM_ALLOCATION_ENUM.DEFAULT,version:ii.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Wt.error("empty license key passed to validate."),r;let s=rp(),n=!1;try{n=Wo.statSync(s)}catch(i){Wt.error(i)}if(n){let i;try{i=Wo.readFileSync(s,"utf8")}catch{Wt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(OK),c=o[1];c=Buffer.concat([Buffer.from(c)],NK);let u=Buffer.concat([Buffer.from(i)],yK),_=Gy.createDecipheriv(bK,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=DK(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Ko),Wt.error(Ko),new Error(Ko)}let d;if(isNaN(l))try{d=JSON.parse(l),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(Ko),Wt.error(Ko),new Error(Ko)}else r.exp_date=l;r.exp_date<SK().valueOf()&&(r.valid_date=!1),qy.validate(o[1],`${AK}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Wt.error("Invalid licence"),r}a(ky,"validateLicense");function DK(e,t){try{let r=Gy.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Wt.warn("Check old license failed")}}a(DK,"checkOldLicense");function sp(){let e=new RK,t=[];try{t=Wo.readFileSync(wK(),"utf-8").split(ii.NEW_LINE)}catch(r){r.code==="ENOENT"?Wt.info("no license file found"):Wt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(gK.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=ky(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){Wt.error("There was an error parsing the license string."),Wt.error(n),e.ram_allocation=ii.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Zm=e,e}a(sp,"licenseSearch");async function LK(){return Zm||await sp(),Zm}a(LK,"getLicense");function MK(){let e=sp().ram_allocation,t=process.constrainedMemory?.()||xy();if(t=Math.round(Math.min(t,xy())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(MK,"checkMemoryLimit")});var ss=g((Kue,iw)=>{"use strict";var Wy="username is required",Qy="nothing to update, must supply active, role or password to update",zy="password cannot be an empty string",Jy="If role is specified, it cannot be empty.",Xy="active must be true or false";iw.exports={addUser:FK,alterUser:kK,dropUser:$K,getSuperUser:QK,userInfo:YK,listUsers:k_,listUsersExternal:KK,setUsersToGlobal:zo,findAndValidateUser:sw,getClusterUser:zK,USERNAME_REQUIRED:Wy,ALTERUSER_NOTHING_TO_UPDATE:Qy,EMPTY_PASSWORD:zy,EMPTY_ROLE:Jy,ACTIVE_BOOLEAN:Xy};var jy=Lr(),UK=si(),op=U_(),Zy=py(),ew=Dr(),ap=Rn(),vr=Q(),tw=require("validate.js"),Se=$(),{promisify:PK}=require("util"),cp=Tn(),$y=M(),Yy=Fe(),vK=Pr(),Vue=ee(),$ue=Ji(),BK=Fi(),{table:Yue}=(Ae(),ne(Ge)),{handleHDBError:Xs,hdb_errors:HK}=se(),{HTTP_STATUS_CODES:js,AUTHENTICATION_ERROR_MSGS:np,HDB_ERROR_MSGS:Qo}=HK,{UserEventMsg:up}=Cs(),ip=require("lodash"),{server:lp}=(nr(),ne(vi)),xK=$();lp.getUser=(e,t)=>sw(e,t,t!=null);var rw={username:!0,active:!0,role:!0,password:!0},Ky=new Map,F_=ew.searchByValue,qK=ew.searchByHash,GK=PK(UK.delete);async function FK(e){let t=tw.cleanAttributes(e,rw),r=Zy.addUserValidation(t);if(r)throw Xs(new Error,r.message,js.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await F_(s),n=n&&Array.from(n)}catch(u){throw Se.error("There was an error searching for a role in add user"),Se.error(u),u}if(!n||n.length<1)throw Xs(new Error,Qo.ROLE_NAME_NOT_FOUND(t.role),js.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Xs(new Error,Qo.DUP_ROLES_FOUND(t.role),js.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=cp.encrypt(t.password)),t.password=op.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await jy.insert(i)}catch(u){throw Se.error("There was an error searching for a user."),Se.error(u),u}Se.debug(o);try{await zo()}catch(u){throw Se.error("Got an error setting users to global"),Se.error(u),u}if(o.skipped_hashes.length===1)throw Xs(new Error,Qo.USER_ALREADY_EXISTS(t.username),js.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],ap.signalUserChange(new up(process.pid)),`${c.username} successfully added`}a(FK,"addUser");async function kK(e){let t=tw.cleanAttributes(e,rw);if(vr.isEmptyOrZeroLength(t.username))throw new Error(Wy);if(vr.isEmptyOrZeroLength(t.password)&&vr.isEmptyOrZeroLength(t.role)&&vr.isEmptyOrZeroLength(t.active))throw new Error(Qy);if(!vr.isEmpty(t.password)&&vr.isEmptyOrZeroLength(t.password.trim()))throw new Error(zy);if(!vr.isEmpty(t.active)&&!vr.isBoolean(t.active))throw new Error(Xy);let r=VK(t.username);if(!vr.isEmpty(t.password)&&!vr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=cp.encrypt(t.password)),t.password=op.hash(t.password)),t.role==="")throw new Error(Jy);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await F_(i)||[])}catch(c){throw Se.error("Got an error searching for a role."),Se.error(c),c}if(!o||o.length===0){let c=Qo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Se.error(c),Xs(new Error,c,js.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Qo.ALTER_USER_DUP_ROLES(t.role);throw Se.error(c),Xs(new Error,c,js.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await jy.update(s)}catch(i){throw Se.error("Error during update."),Se.error(i),i}try{await zo()}catch(i){throw Se.error("Got an error setting users to global"),Se.error(i),i}return ap.signalUserChange(new up(process.pid)),n}a(kK,"alterUser");function VK(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(VK,"isClusterUser");async function $K(e){try{let t=Zy.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(vr.isEmpty(global.hdb_users.get(e.username)))throw Xs(new Error,Qo.USER_NOT_EXIST(e.username),js.NOT_FOUND,void 0,void 0,!0);let s;try{s=await GK(r)}catch(n){throw Se.error("Got an error deleting a user."),Se.error(n),n}Se.debug(s);try{await zo()}catch(n){throw Se.error("Got an error setting users to global."),Se.error(n),n}return ap.signalUserChange(new up(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a($K,"dropUser");async function YK(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=ip.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await qK(r)}catch(n){throw Se.error("Got an error searching for a role."),Se.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Se.error(r),r}return t}a(YK,"userInfo");async function KK(){let e;try{e=await k_()}catch(t){throw Se.error("Got an error listing users."),Se.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(KK,"listUsersExternal");async function k_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await F_(e)}catch(o){throw Se.error("Got an error searching for roles."),Se.error(o),o}let r={};for(let o of t)r[o.id]=ip.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await F_(s)}catch(o){throw Se.error("Got an error searching for users."),Se.error(o),o}let i=new Map;for(let o of n)o=ip.cloneDeep(o),o.role=r[o.role],WK(o.role),i.set(o.username,o);return i}catch(e){throw Se.error("got an error listing users"),Se.error(e),vr.errorizeMessage(e)}return null}a(k_,"listUsers");function WK(e){try{if(!e){Se.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(BK)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Se.error("Got an error trying to set system permissions."),Se.error(t)}}a(WK,"appendSystemTablesToRole");async function zo(){try{let e=await k_();global.hdb_users=e}catch(e){throw Se.error(e),e}}a(zo,"setUsersToGlobal");async function sw(e,t,r=!0){global.hdb_users||await zo();let s=global.hdb_users.get(e);if(!s){if(!r)return{username:e};throw Xs(new Error,np.GENERIC_AUTH_FAIL,js.UNAUTHORIZED,void 0,void 0,!0)}if(s&&!s.active)throw Xs(new Error,np.USER_INACTIVE,js.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(Ky.get(t)===s.password)return n;if(op.validate(s.password,t))Ky.set(t,s.password);else throw Xs(new Error,np.GENERIC_AUTH_FAIL,js.UNAUTHORIZED,void 0,void 0,!0)}return n}a(sw,"findAndValidateUser");async function QK(){global.hdb_users||await zo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(QK,"getSuperUser");async function zK(){let e=await k_(),t=vK.getConfigFromFile($y.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!vr.isEmpty(r)&&r?.role?.role===$y.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=cp.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Yy.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Yy.SERVER_SUFFIX.ADMIN,r}a(zK,"getClusterUser");var nw=[];lp.invalidateUser=function(e){for(let t of nw)try{t(e)}catch(r){xK.error("Error invalidating user",r)}};lp.onInvalidatedUser=function(e){nw.push(e)}});var Hc=g((Jue,uw)=>{"use strict";var Xi=$(),Br=M(),JK=xN(),Que=gn(),zue=ei(),XK=ss(),{validateEvent:ow}=Cs(),Bc=ys(),jK=require("process"),{resetDatabases:ZK}=(Ae(),ne(Ge)),eW={[Br.ITC_EVENT_TYPES.SCHEMA]:tW,[Br.ITC_EVENT_TYPES.USER]:cw};async function tW(e){let t=ow(e);if(t){Xi.error(t);return}Xi.trace("ITC schemaHandler received schema event:",e),await JK(e.message),await rW(e.message)}a(tW,"schemaHandler");async function rW(e){try{Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=ZK();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Xi.error(t)}}a(rW,"syncSchemaMetadata");var aw=[];async function cw(e){try{try{Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Xi.warn(r)}let t=ow(e);if(t){Xi.error(t);return}Xi.trace(`ITC userHandler ${Br.HDB_ITC_CLIENT_PREFIX}${jK.pid} received user event:`,e),await XK.setUsersToGlobal();for(let r of aw)r()}catch(t){Xi.error(t)}}a(cw,"userHandler");cw.addListener=function(e){aw.push(e)};uw.exports=eW});var Cs=g((rle,_w)=>{"use strict";var jue=$(),_p=Q(),sW=M(),{ITC_ERRORS:xc}=yr(),{parentPort:Zue,threadId:nW,isMainThread:iW,workerData:ele}=require("worker_threads"),{onMessageFromWorkers:oW,broadcast:tle,broadcastWithAcknowledgement:aW}=Ke();_w.exports={sendItcEvent:cW,validateEvent:lw,SchemaEventMsg:uW,UserEventMsg:lW};var V_;oW(async(e,t)=>{V_=V_||Hc(),lw(e),V_[e.type]&&await V_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function cW(e){return!iW&&e.message&&(e.message.originator=nW),aW(e)}a(cW,"sendItcEvent");function lw(e){if(typeof e!="object")return xc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||_p.isEmpty(e.type))return xc.MISSING_TYPE;if(!e.hasOwnProperty("message")||_p.isEmpty(e.message))return xc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||_p.isEmpty(e.message.originator))return xc.MISSING_ORIGIN;if(sW.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return xc.INVALID_EVENT(e.type)}a(lw,"validateEvent");function uW(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(uW,"SchemaEventMsg");function lW(e){this.originator=e}a(lW,"UserEventMsg")});var Rn=g((ile,hw)=>{"use strict";var dw=M(),nle=Q(),$_=$(),fw=vN(),Jo,{sendItcEvent:Ew}=Cs();function _W(e){try{$_.trace("signalSchemaChange called with message:",e),Jo=Jo||Hc();let t=new fw(dw.ITC_EVENT_TYPES.SCHEMA,e);return Jo.schema(t),Ew(t)}catch(t){$_.error(t)}}a(_W,"signalSchemaChange");function dW(e){try{$_.trace("signalUserChange called with message:",e),Jo=Jo||Hc();let t=new fw(dw.ITC_EVENT_TYPES.USER,e);return Jo.user(t),Ew(t)}catch(t){$_.error(t)}}a(dW,"signalUserChange");hw.exports={signalSchemaChange:_W,signalUserChange:dW}});var Y_=g((ale,pw)=>{"use strict";var mw=Q(),fW=M(),EW=$(),hW=T_(),mW=S_(),pW=Rn(),{SchemaEventMsg:SW}=Cs(),TW="already exists in";pw.exports=gW;async function gW(e,t,r){if(mw.isEmptyOrZeroLength(r))return r;let s=[];mw.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await RW(e,t.schema,t.name,i)})),n}a(gW,"lmdbCheckForNewAttributes");async function RW(e,t,r,s){let n=new mW(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await AW(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(TW))EW.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(RW,"createNewAttribute");async function AW(e){let t;return t=await hW(e),pW.signalSchemaChange(new SW(process.pid,fW.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(AW,"createAttribute")});var Xo=g((ule,Sw)=>{"use strict";var dp=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};Sw.exports=dp});var gw=g((_le,Tw)=>{"use strict";var OW=Xo(),bW=M().OPERATIONS_ENUM,fp=class extends OW{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(bW.INSERT,r,s,n,i),this.records=t}};Tw.exports=fp});var Aw=g((fle,Rw)=>{"use strict";var NW=Xo(),yW=M().OPERATIONS_ENUM,Ep=class extends NW{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(yW.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};Rw.exports=Ep});var bw=g((hle,Ow)=>{"use strict";var wW=Xo(),IW=M().OPERATIONS_ENUM,hp=class extends wW{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(IW.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};Ow.exports=hp});var yw=g((ple,Nw)=>{"use strict";var CW=Xo(),DW=M().OPERATIONS_ENUM,mp=class extends CW{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(DW.DELETE,s,n,t,i),this.original_records=r}};Nw.exports=mp});var qc=g((gle,Dw)=>{"use strict";var Tle=require("path"),ww=We(),LW=gw(),MW=Aw(),UW=bw(),PW=yw(),jo=dt(),Iw=Q(),{CONFIG_PARAMS:vW}=M(),Cw=ee();Cw.initSync();var K_=M().OPERATIONS_ENUM,{getTransactionAuditStorePath:BW}=Je();Dw.exports=HW;async function HW(e,t){if(Cw.get(vW.LOGGING_AUDITLOG)===!1)return;let r=BW(e.schema,e.table),s=await ww.openEnvironment(r,e.table,!0),n=xW(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){ww.initializeDBIs(s,jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,jo.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Iw.isEmpty(n.user_name)||s.dbis[jo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[jo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(HW,"writeTransaction");function xW(e,t){let r=Iw.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===K_.INSERT)return new LW(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===K_.UPDATE)return new MW(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===K_.UPSERT)return new UW(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===K_.DELETE)return new PW(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(xW,"createTransactionObject")});var pp=g((Ole,Lw)=>{"use strict";var qW=Dc(),Ale=Lc(),Gc=M(),GW=Mc(),FW=ko().insertRecords,kW=We(),VW=$(),$W=Y_(),{getSchemaPath:YW}=Je(),KW=qc();Lw.exports=WW;async function WW(e){try{let{schema_table:t,attributes:r}=qW(e);GW(e,r,t.hash_attribute),e.schema!==Gc.SYSTEM_SCHEMA_NAME&&(r.includes(Gc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Gc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Gc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Gc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await $W(e.hdb_auth_header,t,r),n=YW(e.schema,e.table),i=await kW.openEnvironment(n,e.table),o=await FW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await KW(e,o)}catch(c){VW.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(WW,"lmdbCreateRecords")});var Pw=g((Nle,Uw)=>{"use strict";var Mw=M(),QW=pp(),zW=Lc(),JW=require("fs-extra"),{getSchemaPath:XW}=Je();Uw.exports=jW;async function jW(e){let t=[{name:e.schema,createddate:Date.now()}],r=new zW(Mw.SYSTEM_SCHEMA_NAME,Mw.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await QW(r),await JW.mkdirp(XW(e.schema))}a(jW,"lmdbCreateSchema")});var Bw=g((wle,vw)=>{"use strict";var Sp=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};vw.exports=Sp});var Gw=g((Mle,qw)=>{"use strict";var Hw=We(),Tp=wr(),gp=yr().LMDB_ERRORS_ENUM,ZW=dt(),xw=$(),Cle=Q(),eQ=require("lmdb"),tQ=Bw(),rQ=M(),{OVERFLOW_MARKER:Dle,MAX_SEARCH_KEY_LENGTH:Lle}=ZW,sQ=rQ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function nQ(e,t,r,s){if(Tp.validateEnv(e),t===void 0)throw new Error(gp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(gp.IDS_REQUIRED):new Error(gp.IDS_MUST_BE_ITERABLE);try{let n=Hw.listDBIs(e);Hw.initializeDBIs(e,t,n);let i=new tQ,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||s&&h[sQ]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,eQ.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let T=n[S];if(!h.hasOwnProperty(T)||T===t)continue;let b=e.dbis[T],R=h[T];if(R!=null)try{let L=Tp.getIndexedValues(R);if(L)for(let H=0,P=L.length;H<P;H++)b.remove(L[H],o)}catch{xw.warn(`cannot delete from attribute: ${T}, ${R}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){xw.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=Tp.getNextMonotonicTime(),i}catch(n){throw n}}a(nQ,"deleteRecords");qw.exports={deleteRecords:nQ}});var Fc=g((Ple,kw)=>{"use strict";var Zo=Q(),iQ=Gw(),oQ=We(),{getSchemaPath:aQ}=Je(),cQ=qc(),uQ=$();kw.exports=lQ;async function lQ(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Zo.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Zo.isEmptyOrZeroLength(e.hash_values)&&!Zo.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Zo.isEmpty(u)||e.hash_values.push(u)}}if(Zo.isEmptyOrZeroLength(e.hash_values))return Fw([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Zo.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=aQ(e.schema,e.table),i=await oQ.openEnvironment(n,e.table),o=await iQ.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await cQ(e,o)}catch(c){uQ.error(`unable to write transaction due to ${c.message}`)}return Fw(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(lQ,"lmdbDeleteRecords");function Fw(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(Fw,"createDeleteResponse")});var Ap=g((Hle,Vw)=>{"use strict";var _Q=M(),Ble=wr();function Rp(e,t){let r=Object.create(null);if(t.length===1&&_Q.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Rp,"parseRow");function dQ(e,t,r,s){let n=Rp(r,e);s.push(n)}a(dQ,"searchAll");function fQ(e,t,r,s){let n=Rp(r,e);s[t]=n}a(fQ,"searchAllToMap");function EQ(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(EQ,"iterateDBI");function ji(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(ji,"pushResults");function hQ(e,t,r,s,n,i){t.toString().endsWith(e)&&ji(t,r,s,n,i)}a(hQ,"endsWith");function mQ(e,t,r,s,n,i){t.toString().includes(e)&&ji(t,r,s,n,i)}a(mQ,"contains");function pQ(e,t,r,s,n,i){t>e&&ji(t,r,s,n,i)}a(pQ,"greaterThanCompare");function SQ(e,t,r,s,n,i){t>=e&&ji(t,r,s,n,i)}a(SQ,"greaterThanEqualCompare");function TQ(e,t,r,s,n,i){t<e&&ji(t,r,s,n,i)}a(TQ,"lessThanCompare");function gQ(e,t,r,s,n,i){t<=e&&ji(t,r,s,n,i)}a(gQ,"lessThanEqualCompare");Vw.exports={parseRow:Rp,searchAll:dQ,searchAllToMap:fQ,iterateDBI:EQ,endsWith:hQ,contains:mQ,greaterThanCompare:pQ,greaterThanEqualCompare:SQ,lessThanCompare:TQ,lessThanEqualCompare:gQ,pushResults:ji}});var ea=g((kle,Jw)=>{"use strict";var oi=We(),qle=$(),Hr=wr(),W_=dt(),ut=yr().LMDB_ERRORS_ENUM,Gle=Q(),RQ=M(),Q_=Ap(),{parseRow:AQ}=Q_,Fle=require("lmdb"),{OVERFLOW_MARKER:$w,MAX_SEARCH_KEY_LENGTH:OQ}=W_;function Yw(e,t,r,s=!1,n=void 0,i=void 0){return Zi(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(Yw,"iterateFullIndex");function kc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return Zi(e,t,r,(l,d,f,E)=>{let b={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(b.values=!1,d.getRange(b).map(R=>({value:R}))):d.getRange(b)})}a(kc,"iterateRangeBetween");function Zi(e,t,r,s){let n=e.database||e,i=oi.openDBI(n,r);i[W_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&oi.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(Zi,"setupTransaction");function Kw(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith($w)){if(!n)if(r)n=oi.openDBI(e,r);else{let u=oi.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=oi.openDBI(e,u[_]),!n[W_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(Kw,"getOverflowCheck");function bQ(e,t,r,s=!1,n=void 0,i=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);return Zi(e,t,t,(o,c,u)=>(z_(r),r=Vc(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>AQ(_.value,r))))}a(bQ,"searchAll");function NQ(e,t,r,s=!1,n=void 0,i=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);z_(r),r=Vc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of Yw(e,t,t,s,n,i))o.set(c,Q_.parseRow(u,r));return o}a(NQ,"searchAllToMap");function yQ(e,t,r=!1,s=void 0,n=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=Yw(e,void 0,t,r,s,n),c=o.transaction,u=Kw(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(yQ,"iterateDBI");function wQ(e,t){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);return oi.statDBI(e,t).entryCount}a(wQ,"countAll");function IQ(e,t,r,s,n=!1,i=void 0,o=void 0){return ai(e,r,s),Zi(e,t,r,(c,u,_,l)=>(s=Hr.convertKeyValueToWrite(s),l===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(IQ,"equals");function CQ(e,t,r){return ai(e,t,r),oi.openDBI(e,t).getValuesCount(r)}a(CQ,"count");function DQ(e,t,r,s,n=!1,i=void 0,o=void 0){return ai(e,r,s),Zi(e,null,r,(c,u)=>{s=Hr.convertKeyValueToWrite(s);let _=!0;typeof s=="number"&&(_=!1);let l;if(n===!0){let d;for(let f of u.getKeys({transaction:c,start:s}))if(!f.startsWith(s)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(s))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(DQ,"startsWith");function LQ(e,t,r,s,n=!1,i=void 0,o=void 0){return Ww(e,t,r,s,n,i,o,!0)}a(LQ,"endsWith");function Ww(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return ai(e,r,s),Zi(e,null,r,(u,_,l,d)=>{let f=Kw(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(E=>{let h=E.toString();return h.endsWith($w)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(s):S.includes(s))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?_[W_.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(Ww,"contains");function MQ(e,t,r,s,n=!1,i=void 0,o=void 0){ai(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),kc(e,t,r,s,u,n,i,o,!0,!1)}a(MQ,"greaterThan");function UQ(e,t,r,s,n=!1,i=void 0,o=void 0){ai(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),kc(e,t,r,s,u,n,i,o,!1,!1)}a(UQ,"greaterThanEqual");function PQ(e,t,r,s,n=!1,i=void 0,o=void 0){ai(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),kc(e,t,r,u,s,n,i,o,!1,!0)}a(PQ,"lessThan");function vQ(e,t,r,s,n=!1,i=void 0,o=void 0){ai(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),kc(e,t,r,u,s,n,i,o,!1,!1)}a(vQ,"lessThanEqual");function BQ(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Hr.validateEnv(e),r===void 0)throw new Error(ut.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ut.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ut.END_VALUE_REQUIRED);if(s=Hr.convertKeyValueToWrite(s),n=Hr.convertKeyValueToWrite(n),s>n)throw new Error(ut.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return kc(e,t,r,s,n,i,o,c)}a(BQ,"between");function HQ(e,t,r,s){Hr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(z_(r),r=Vc(n,r),s===void 0)throw new Error(ut.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=Q_.parseRow(c,r)),o}a(HQ,"searchByHash");function xQ(e,t,r){Hr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ut.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(xQ,"checkHashExists");function qQ(e,t,r,s,n=[]){return zw(e,t,r,s,n),Qw(e,t,r,s,n).map(i=>i[1])}a(qQ,"batchSearchByHash");function GQ(e,t,r,s,n=[]){zw(e,t,r,s,n);let i=new Map;for(let[o,c]of Qw(e,t,r,s,n))i.set(o,c);return i}a(GQ,"batchSearchByHashToMap");function Qw(e,t,r,s,n=[]){return Zi(e,t,t,(i,o,c)=>{r=Vc(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,Q_.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(Qw,"batchHashSearch");function zw(e,t,r,s,n){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(z_(r),s==null)throw new Error(ut.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ut.IDS_MUST_BE_ITERABLE)}a(zw,"initializeBatchSearchByHash");function z_(e){if(!Array.isArray(e))throw e===void 0?new Error(ut.FETCH_ATTRIBUTES_REQUIRED):new Error(ut.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(z_,"validateFetchAttributes");function ai(e,t,r){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ut.SEARCH_VALUE_REQUIRED);if(r?.length>OQ)throw new Error(ut.SEARCH_VALUE_TOO_LARGE)}a(ai,"validateComparisonFunctions");function Vc(e,t){return t.length===1&&RQ.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=oi.listDBIs(e)),t}a(Vc,"setGetWholeRowAttributes");Jw.exports={searchAll:bQ,searchAllToMap:NQ,count:CQ,countAll:wQ,equals:IQ,startsWith:DQ,endsWith:LQ,contains:Ww,searchByHash:HQ,setGetWholeRowAttributes:Vc,batchSearchByHash:qQ,batchSearchByHashToMap:GQ,checkHashExists:xQ,iterateDBI:yQ,greaterThan:MQ,greaterThanEqual:UQ,lessThan:PQ,lessThanEqual:vQ,between:BQ}});var ta=g(($le,tI)=>{var Xw=require("lodash"),jw=Xe(),fe=require("joi"),FQ=Q(),{hdb_schema_table:$c,checkValidTable:Zw,hdb_table:eI,hdb_database:J_}=Qs(),{handleHDBError:kQ,hdb_errors:VQ}=se(),{getDatabases:$Q}=(Ae(),ne(Ge)),{HTTP_STATUS_CODES:YQ}=VQ,KQ=fe.object({database:J_,schema:J_,table:eI,search_attribute:$c,search_value:fe.any().required(),get_attributes:fe.array().min(1).items(fe.alternatives($c,fe.object())).optional(),desc:fe.bool(),limit:fe.number().integer().min(1),offset:fe.number().integer().min(0)}),WQ=fe.object({database:J_,schema:J_,table:eI,operator:fe.string().valid("and","or").default("and").lowercase(),offset:fe.number().integer().min(0),limit:fe.number().integer().min(1),get_attributes:fe.array().min(1).items(fe.alternatives($c,fe.object())).optional(),sort:fe.object({attribute:fe.alternatives($c,fe.array().min(1)),descending:fe.bool().optional()}).optional(),conditions:fe.array().min(1).items(fe.alternatives(fe.object({operator:fe.string().valid("and","or").default("and").lowercase(),conditions:fe.array()}),fe.object({search_attribute:fe.alternatives($c,fe.array().min(1)),search_type:fe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:fe.when("search_type",{switch:[{is:"equals",then:fe.any()},{is:"between",then:fe.array().items(fe.alternatives([fe.string(),fe.number()])).length(2)}],otherwise:fe.alternatives(fe.string(),fe.number())}).required()}))).required()});tI.exports=function(e,t){let r=null;switch(t){case"value":r=jw.validateBySchema(e,KQ);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(Zw("database",e.schema)),i(Zw("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=jw.validateBySchema(e,WQ);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=FQ.checkGlobalSchemaTable(e.schema,e.table);if(n)return kQ(new Error,n,YQ.NOT_FOUND);let o=$Q()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let u=a(l=>{for(let d=0,f=l.conditions.length;d<f;d++){let E=l.conditions[d];E.conditions?u(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=Xw.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!l.name&&!Xw.some(o,d=>d===l||d.attribute===l||d.attribute===l.attribute));if(_&&_.length>0){let l=_.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var Op=g((Kle,rI)=>{"use strict";var QQ=We(),zQ=ta(),{getSchemaPath:JQ}=Je();rI.exports=XQ;function XQ(e){let t=zQ(e,"hashes");if(t)throw t;let r=JQ(e.schema,e.table);return QQ.openEnvironment(r,e.table)}a(XQ,"initialize")});var bp=g((Qle,sI)=>{"use strict";var jQ=ea(),ZQ=Op();sI.exports=ez;async function ez(e){let t=await ZQ(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return jQ.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(ez,"lmdbGetDataByHash")});var ra=g((Jle,nI)=>{"use strict";var Np=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};nI.exports=Np});var oI=g((Zle,iI)=>{"use strict";var jle=ra(),tz=ea(),rz=Op();iI.exports=sz;async function sz(e){let t=await rz(e),r=global.hdb_schema[e.schema][e.table];return tz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(sz,"lmdbSearchByHash")});var Zs=g((t_e,aI)=>{"use strict";var yp=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};aI.exports=yp});var X_=g((s_e,fI)=>{"use strict";var Qt=ea(),nz=We(),iz=Q(),Ee=dt(),eo=M(),oz=Fi(),cI=yr().LMDB_ERRORS_ENUM,{getSchemaPath:az}=Je(),An=eo.SEARCH_WILDCARDS;async function cz(e,t,r){let s;e.schema===eo.SYSTEM_SCHEMA_NAME?s=oz[e.table]:s=global.hdb_schema[e.schema][e.table];let n=dI(e,s.hash_attribute,r,t);return lI(e,n,s.hash_attribute,r)}a(cz,"prepSearch");async function lI(e,t,r,s){let n=az(e.schema,e.table),i=await nz.openEnvironment(n,e.table),o=_I(i,e,t,r),c=o.transaction||i;if([Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Ee.SEARCH_TYPES.SEARCH_ALL,Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(uz(e,r)===!1){let l=e.search_attribute;if(l===r)return s?uI(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?uI(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Qt.batchSearchByHashToMap(c,r,e.get_attributes,_):Qt.batchSearchByHash(c,r,e.get_attributes,_)}a(lI,"executeSearch");function _I(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case Ee.SEARCH_TYPES.EQUALS:n=Qt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.CONTAINS:n=Qt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.ENDS_WITH:case Ee.SEARCH_TYPES._ENDS_WITH:n=Qt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.STARTS_WITH:case Ee.SEARCH_TYPES._STARTS_WITH:n=Qt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Qt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Qt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.SEARCH_ALL:return Qt.searchAll(e,s,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Qt.searchAllToMap(e,s,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.BETWEEN:n=Qt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN:case Ee.SEARCH_TYPES._GREATER_THAN:n=Qt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN_EQUAL:case Ee.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Qt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN:case Ee.SEARCH_TYPES._LESS_THAN:n=Qt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN_EQUAL:case Ee.SEARCH_TYPES._LESS_THAN_EQUAL:n=Qt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(_I,"searchByType");function uI(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(uI,"createMapFromIterable");function uz(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(uz,"checkToFetchMore");function dI(e,t,r,s){if(iz.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),An.indexOf(n)>-1)return r===!0?Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ee.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(An[0])<0&&n.indexOf(An[1])<0)return c===!0?r===!0?Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Ee.SEARCH_TYPES.EQUALS;if(An.indexOf(i)>=0&&An.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Ee.SEARCH_TYPES.CONTAINS;if(An.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Ee.SEARCH_TYPES.ENDS_WITH;if(An.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Ee.SEARCH_TYPES.STARTS_WITH;if(n.includes(An[0])||n.includes(An[1]))return Ee.SEARCH_TYPES.EQUALS;throw new Error(cI.UNKNOWN_SEARCH_TYPE)}else switch(s){case eo.VALUE_SEARCH_COMPARATORS.BETWEEN:return Ee.SEARCH_TYPES.BETWEEN;case eo.VALUE_SEARCH_COMPARATORS.GREATER:return Ee.SEARCH_TYPES.GREATER_THAN;case eo.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Ee.SEARCH_TYPES.GREATER_THAN_EQUAL;case eo.VALUE_SEARCH_COMPARATORS.LESS:return Ee.SEARCH_TYPES.LESS_THAN;case eo.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Ee.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(cI.UNKNOWN_SEARCH_TYPE)}}a(dI,"createSearchTypeFromSearchObject");fI.exports={executeSearch:lI,createSearchTypeFromSearchObject:dI,prepSearch:cz,searchByType:_I}});var hI=g((o_e,EI)=>{"use strict";var i_e=Zs(),lz=ta(),_z=Q(),dz=M(),fz=X_();EI.exports=Ez;function Ez(e,t){if(!_z.isEmpty(t)&&dz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=lz(e,"value");if(s)throw s;return fz.prepSearch(e,t,!0)}a(Ez,"lmdbGetDataByValue")});var Yc=g((u_e,mI)=>{"use strict";var c_e=Zs(),hz=ta(),mz=Q(),pz=M(),Sz=X_();mI.exports=Tz;async function Tz(e,t){if(!mz.isEmpty(t)&&pz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=hz(e,"value");if(s)throw s;return Sz.prepSearch(e,t,!1)}a(Tz,"lmdbSearchByValue")});var SI=g((d_e,pI)=>{"use strict";var __e=dt(),wp=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}},Ip=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Cp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};pI.exports={SearchByConditionsObject:wp,SearchCondition:Ip,SortAttribute:Cp}});var OI=g((m_e,AI)=>{"use strict";var E_e=SI().SearchByConditionsObject,gz=Zs(),Rz=ta(),Dp=ea(),j_=dt(),{Resource:h_e}=(Os(),ne(Lp)),RI=X_(),Az=Ap(),Oz=require("lodash"),{getSchemaPath:bz}=Je(),TI=We(),{handleHDBError:Nz,hdb_errors:yz}=se(),{HTTP_STATUS_CODES:wz}=yz,Iz=1e8;AI.exports=Cz;async function Cz(e){let t=Rz(e,"conditions");if(t)throw Nz(t,t.message,wz.BAD_REQUEST,void 0,void 0,!0);e.operator=e.operator?e.operator.toLowerCase():void 0,e.offset=Number.isInteger(e.offset)?e.offset:0;let r=bz(e.schema,e.table),s=await TI.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)TI.openDBI(s,_.search_attribute);let i=Oz.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===j_.SEARCH_TYPES.EQUALS?_.estimated_count=Dp.count(s,_.search_attribute,_.search_value):l===j_.SEARCH_TYPES.CONTAINS||l===j_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=Iz}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await gI(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=s.dbis[n.hash_attribute],l=i.slice(1).map(RI.filterByType),d=l.length,f=Dp.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(E=>Az.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await gI(o,e,f,n.hash_attribute);c=c.concat(E)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=Dp.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(Cz,"lmdbSearchByConditions");async function gI(e,t,r,s){let n=new gz(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===j_.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,RI.searchByType(e,n,i,s).map(o=>o.value)}a(gI,"executeConditionSearch")});var sa=g((S_e,bI)=>{"use strict";var Dz=M().OPERATIONS_ENUM,Mp=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=Dz.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};bI.exports=Mp});var Up=g((g_e,MI)=>{"use strict";var II=Zs(),CI=sa(),DI=Yc(),LI=Fc(),ur=M(),NI=Q(),yI=We(),{getTransactionAuditStorePath:Lz,getSchemaPath:Mz}=Je(),wI=$();MI.exports=Uz;async function Uz(e){try{if(NI.isEmpty(global.hdb_schema[e.schema])||NI.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Pz(e),await vz(e);let t=Mz(e.schema,e.table);try{await yI.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")wI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Lz(e.schema,e.table);await yI.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")wI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Uz,"lmdbDropTable");async function Pz(e){let t=new II(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await DI(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new CI(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await LI(n)}a(Pz,"deleteAttributesFromSystem");async function vz(e){let t=new II(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await DI(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new CI(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await LI(n)}catch(i){throw i}}a(vz,"dropTableFromSystem")});var PI=g((A_e,UI)=>{"use strict";var Bz=require("fs-extra"),Hz=Zs(),xz=ra(),qz=sa(),Gz=Up(),Fz=Fc(),kz=bp(),Vz=Yc(),On=M(),{getSchemaPath:$z}=Je(),{handleHDBError:Yz,hdb_errors:Kz}=se(),{HDB_ERROR_MSGS:Wz,HTTP_STATUS_CODES:Qz}=Kz;UI.exports=zz;async function zz(e){let t;try{t=await Jz(e.schema);let r=new Hz(On.SYSTEM_SCHEMA_NAME,On.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,On.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[On.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await Vz(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await Gz(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new qz(On.SYSTEM_SCHEMA_NAME,On.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Fz(n);let i=$z(t);await Bz.remove(i)}catch(r){throw r}}a(zz,"lmdbDropSchema");async function Jz(e){let t=new xz(On.SYSTEM_SCHEMA_NAME,On.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[On.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await kz(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw Yz(new Error,Wz.SCHEMA_NOT_FOUND(e),Qz.NOT_FOUND,void 0,void 0,!0);return s}a(Jz,"validateDropSchema")});var Z_=g((b_e,vI)=>{"use strict";var Pp=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};vI.exports=Pp});var HI=g((w_e,BI)=>{"use strict";var Xz=require("fs-extra"),ed=We(),{getTransactionAuditStorePath:jz}=Je(),vp=dt(),y_e=Z_();BI.exports=Zz;async function Zz(e){let t;try{let r=jz(e.schema,e.table);await Xz.mkdirp(r),t=await ed.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{ed.createDBI(t,vp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),ed.createDBI(t,vp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),ed.createDBI(t,vp.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(Zz,"createTransactionsAuditEnvironment")});var FI=g((C_e,GI)=>{"use strict";var Bp=M(),xI=We(),e2=ko(),{getSystemSchemaPath:t2,getSchemaPath:r2}=Je(),s2=Fi(),n2=T_(),Hp=S_(),i2=$(),o2=HI(),qp=s2.hdb_table,qI=[];for(let e=0;e<qp.attributes.length;e++)qI.push(qp.attributes[e].attribute);GI.exports=a2;async function a2(e,t){let r=r2(t.schema,t.table),s=new Hp(t.schema,t.table,Bp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Hp(t.schema,t.table,Bp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Hp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await xI.createEnvironment(r,t.table),e!==void 0){let o=await xI.openEnvironment(t2(),Bp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await e2.insertRecords(o,qp.hash_attribute,qI,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await xp(s),await xp(n),await xp(i)}await o2(t)}catch(o){throw o}}a(a2,"lmdbCreateTable");async function xp(e){try{await n2(e)}catch(t){i2.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(xp,"createAttribute")});var VI=g((L_e,kI)=>{"use strict";var c2=Dc(),u2=Mc(),l2=Y_(),Kc=M(),_2=ko().updateRecords,d2=We(),{getSchemaPath:f2}=Je(),E2=qc(),h2=$();kI.exports=m2;async function m2(e){try{let{schema_table:t,attributes:r}=c2(e);u2(e,r,t.hash_attribute),e.schema!==Kc.SYSTEM_SCHEMA_NAME&&(r.includes(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await l2(e.hdb_auth_header,t,r),n=f2(e.schema,e.table),i=await d2.openEnvironment(n,e.table),o=await _2(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await E2(e,o)}catch(c){h2.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(m2,"lmdbUpdateRecords")});var YI=g((U_e,$I)=>{"use strict";var p2=M().OPERATIONS_ENUM,Gp=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=p2.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};$I.exports=Gp});var WI=g((B_e,KI)=>{"use strict";var v_e=YI(),S2=Dc(),T2=Mc(),g2=Y_(),Wc=M(),R2=ko().upsertRecords,A2=We(),{getSchemaPath:O2}=Je(),b2=qc(),N2=$(),{handleHDBError:y2,hdb_errors:w2}=se();KI.exports=I2;async function I2(e){let t;try{t=S2(e)}catch(u){throw y2(u,u.message,w2.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;T2(e,s,r.hash_attribute),e.schema!==Wc.SYSTEM_SCHEMA_NAME&&(s.includes(Wc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Wc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Wc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Wc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await g2(e.hdb_auth_header,r,s),i=O2(e.schema,e.table),o=await A2.openEnvironment(i,e.table),c=await R2(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await b2(e,c)}catch(u){N2.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(I2,"lmdbUpsertRecords")});var zI=g((x_e,QI)=>{"use strict";var Fp=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};QI.exports=Fp});var XI=g((G_e,JI)=>{"use strict";var kp=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};JI.exports=kp});var eC=g((V_e,ZI)=>{"use strict";var Vp=We(),{getTransactionAuditStorePath:C2}=Je(),k_e=zI(),Qc=dt(),D2=Q(),jI=XI(),L2=require("util").promisify,M2=L2(setTimeout),U2=1e4,P2=100;ZI.exports=v2;async function v2(e){let t=C2(e.schema,e.table),r=await Vp.openEnvironment(t,e.table,!0),s=Vp.listDBIs(r);Vp.initializeDBIs(r,Qc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new jI;do n=await B2(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await M2(P2);while(n.transactions_deleted>0);return i}a(v2,"deleteAuditLogsBefore");async function B2(e,t){let r=new jI;try{let s=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Qc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];D2.isEmpty(c)||(n=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>U2)break}return await n,r}catch(s){throw s}}a(B2,"deleteTransactions")});var rC=g((Y_e,tC)=>{"use strict";var $p=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};tC.exports=$p});var nC=g((Q_e,sC)=>{"use strict";var H2=Zs(),x2=sa(),W_e=rC(),en=M(),q2=Q(),Yp=We(),G2=Fi(),F2=Yc(),k2=Fc(),{getSchemaPath:V2}=Je();sC.exports=$2;async function $2(e,t=!0){let r;e.schema===en.SYSTEM_SCHEMA_NAME?r=G2[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await K2(e),n=V2(e.schema,e.table),i=await Yp.openEnvironment(n,e.table);return t===!0&&await Y2(e,i,r.hash_attribute),Yp.dropDBI(i,e.attribute),s}a($2,"lmdbDropAttribute");async function Y2(e,t,r){let s=Yp.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);n=t.dbis[r].put(o,_,u)}await n}a(Y2,"removeAttributeFromAllObjects");async function K2(e){let t=new H2(en.SYSTEM_SCHEMA_NAME,en.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await F2(t)).filter(o=>o[en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(q2.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new x2(en.SYSTEM_SCHEMA_NAME,en.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return k2(i)}a(K2,"dropAttributeFromSystem")});var lC=g((X_e,uC)=>{"use strict";var Kp=We(),na=dt(),J_e=wr(),Wp=M(),iC=Q(),{getTransactionAuditStorePath:W2}=Je(),Q2=ea(),td=Xo(),z2=$();uC.exports=J2;async function J2(e){let t=W2(e.schema,e.table),r=await Kp.openEnvironment(t,e.table,!0),s=Kp.listDBIs(r);Kp.initializeDBIs(r,na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return oC(r,e.search_values);case Wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,j2(r,e.search_values,n);case Wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return X2(r,e.search_values);default:return oC(r)}}a(J2,"readAuditLog");function oC(e,t=[0,Date.now()]){iC.isEmpty(t[0])&&(t[0]=0),iC.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new td,n))}a(oC,"searchTransactionsByTimestamp");function X2(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[na.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,cC(e,i))}return Object.fromEntries(r)}a(X2,"searchTransactionsByUsername");function j2(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=Q2.equals(e,na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,na.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);s.has(f)?s.get(f).push(_.toString()):s.set(f,[_.toString()])}}let n=Array.from(s.keys()),i=cC(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);aC(u,"records",r,l,o),aC(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(j2,"searchTransactionsByHashValues");function aC(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(s.indexOf(u)>=0)if(n.has(u)){let _=n.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new td(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new td(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(aC,"loopRecords");function cC(e,t){let r=[];try{let s=e.dbis[na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new td,i);r.push(o)}}catch(i){z2.warn(i)}return r}catch(s){throw s}}a(cC,"batchSearchTransactions")});var dC=g((tde,_C)=>{"use strict";var{getSchemaPath:Z_e}=Je(),ede=We(),{database:Z2}=(Ae(),ne(Ge));_C.exports={writeTransaction:eJ};async function eJ(e,t,r){return Z2({database:e,table:t}).transaction(r)}a(eJ,"writeTransaction")});var mC=g((sde,hC)=>{"use strict";var{getSchemaPath:fC}=Je(),EC=We();hC.exports={flush:tJ,resetReadTxn:rJ};async function tJ(e,t){return(await EC.openEnvironment(fC(e,t),t.toString())).flushed}a(tJ,"flush");async function rJ(e,t){try{(await EC.openEnvironment(fC(e,t),t.toString())).resetReadTxn()}catch{}}a(rJ,"resetReadTxn")});var gC=g((ide,TC)=>{"use strict";var{Readable:sJ}=require("stream"),{getDatabases:nJ}=(Ae(),ne(Ge)),{readSync:iJ,openSync:oJ,createReadStream:pC}=require("fs"),{open:aJ}=require("lmdb"),SC=c_(),cJ=l_(),{AUDIT_STORE_OPTIONS:uJ}=(xi(),ne(RC)),{INTERNAL_DBIS_NAME:lJ,AUDIT_STORE_NAME:_J}=dt();TC.exports=fJ;var Qp=32768,dJ=100;async function fJ(e){let t=e.database||e.schema||"data",r=nJ()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let _=r[n[0]];if(!_)throw new Error(`Can not find table ${n[0]}`);let l=_.dbisDB,d=aJ({noSync:!0,maxDbs:cJ.MAX_DBS}),f,E=d.openDB(lJ,new SC(!1)),h=l.useReadTransaction(),p=0,S=a(async function(b,R){R.encoding="binary",R.encoder=void 0;let L=d.openDB(b,R),H=l.openDB(b,R);for(let{key:P,version:k,value:B}of H.getRange({transaction:h,versions:H.useVersions}))f=L.put(P,B,k),p++%dJ===0&&(await new Promise(J=>setTimeout(J,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:b,value:R}of l.getRange({transaction:h,start:!1}))if(n.some(L=>b.startsWith?.(L+"/"))){E.put(b,R);let[,L]=b.split("/"),H=!L,P=new SC(!H,H);await S(b,P)}e.include_audit&&await S(_J,Object.assign({},uJ)),await f;let T=pC(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=oJ(o.path);return o.transaction(()=>{let _=Buffer.alloc(Qp);iJ(c,_,0,Qp),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=pC(null,{fd:c,start:Qp}),f=new sJ.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",s),_}}a(fJ,"getBackup")});var bC=g((ade,OC)=>{"use strict";var EJ=$(),{handleHDBError:hJ}=se(),mJ=vb(),pJ=T_(),SJ=pp(),TJ=Pw(),gJ=Fc(),RJ=bp(),AJ=oI(),OJ=hI(),bJ=Yc(),NJ=OI(),yJ=PI(),wJ=FI(),IJ=VI(),CJ=WI(),DJ=eC(),LJ=Up(),MJ=nC(),UJ=lC(),PJ=dC(),AC=mC(),vJ=gC(),zp=class extends mJ{static{a(this,"LMDBBridge")}async searchByConditions(t){return NJ(t)}async getDataByHash(t){return await RJ(t)}async searchByHash(t){return await AJ(t)}async getDataByValue(t,r){return await OJ(t,r)}async searchByValue(t){return await bJ(t)}async createSchema(t){return await TJ(t)}async dropSchema(t){return await yJ(t)}async createTable(t,r){return await wJ(t,r)}async dropTable(t){return await LJ(t)}async createAttribute(t){return await pJ(t)}async createRecords(t){return await SJ(t)}async updateRecords(t){return await IJ(t)}async upsertRecords(t){try{return await CJ(t)}catch(r){throw hJ(r,null,null,EJ.ERR,r)}}async deleteRecords(t){return await gJ(t)}async dropAttribute(t){return await MJ(t)}async deleteAuditLogsBefore(t){return await DJ(t)}async readAuditLog(t){return await UJ(t)}writeTransaction(t,r,s){return PJ.writeTransaction(t,r,s)}flush(t,r){return AC.flush(t,r)}resetReadTxn(t,r){return AC.resetReadTxn(t,r)}getBackup(t){return vJ(t)}};OC.exports=zp});function GJ(){qJ=setInterval(function(){for(let e of Jp)if(e.stale){let t=e[Oe]?.url;wC.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},xJ).unref()}var Xp,yC,wC,BJ,Jp,HJ,zc,NC,to,rd,xJ,qJ,jp=Re(()=>{Xp=x(wr()),yC=x(se()),wC=x($());Os();BJ=100,Jp=new Set,HJ=25e3,to=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxnsUsed=1,this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0),Jp.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Jp.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(zc&&performance.now()-NC>HJ)throw new yC.ServerError("Outstanding write transactions have too long of queue, please try again later",503)}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,Xp.getNextMonotonicTime)());let s=t.retries||0;if(this.validated<this.writes.length)try{let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{try{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let T=S();E?E.push?E.push(T):E=[E,T]:E=T}}E&&await(E.push?Promise.all(E):E)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(l){throw this.abort(),l}s||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let n,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,s)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){s>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);n=n||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<BJ>>s?u():n=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),n)return zc||(zc=n,NC=performance.now(),zc.then(()=>{zc=null})),n.then(l=>l?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=s+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},rd=class extends to{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Xp.getNextMonotonicTime)())}getReadTxn(){}},xJ=3e4;a(GJ,"startMonitoringTxns");GJ()});function je(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let s=e.transaction=new to;e.timestamp&&(s.timestamp=e.timestamp),s[Oe]=e,e.resourceCache||(e.resourceCache=[]);let n;try{if(n=t(s),n?.then)return n.then(i,o)}catch(c){o(c)}return i(n);function i(c){let u=s.commit({letItLinger:r?.letItLinger});return u.then?u.then(()=>c):c}function o(c){throw s.abort({}),c}}var IC,ro=Re(()=>{IC=require("../index");Os();jp();a(je,"transaction");(0,IC._assignPackageExport)("transaction",je);je.commit=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};je.abort=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var HC={};Ye(HC,{ResourceBridge:()=>tS});function rS({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function DC(e,t){let r=tn(e),s=rS(e,r);if(!r)throw new Ds.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user},o;je(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:n,select:s},i);return l=l&&nd(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function tn(e){let t=e.database||e.schema||kJ,r=Ls()[t];if(!r)throw(0,Ds.handleHDBError)(new Error,FJ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function LC(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*MC(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var UC,sd,Ds,PC,vC,Ms,Zp,eS,BC,FJ,kJ,VJ,$J,CC,tS,xC=Re(()=>{"use strict";UC=x(bC()),sd=x(ta()),Ds=x(se());Ae();PC=x(Dc()),vC=x(Mc()),Ms=x(M()),Zp=x(Rn()),eS=x(Cs()),BC=x(Q());ro();id();({HDB_ERROR_MSGS:FJ}=Ds.hdb_errors),kJ="data",VJ=1e4,$J=10,tS=class extends UC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),CC=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,sd.default)(t,"conditions");if(r)throw(0,Ds.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=tn(t);if(!s)throw new Ds.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:rS(t,s),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Ds.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}ct({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await tn(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=tn(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(_=>setImmediate(_));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){tn(t).dropTable()}createSchema(t){return Jc({database:t.schema,table:null}),Zp.signalSchemaChange(new eS.SchemaEventMsg(process.pid,Ms.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await sS(t.schema),Zp.signalSchemaChange(new eS.SchemaEventMsg(process.pid,Ms.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,CC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,PC.default)(t);(0,vC.default)(t,s,r.primaryKey);let n,i=Ls()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return je(o,async c=>{if(!i.schemaDefined){n=[];for(let l of s)i.attributes.find(f=>f.name==l)||n.push(l);n.length>0&&await i.addAttributes(n.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=nd(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:_}})}async deleteRecords(t){let r=Ls()[t.schema][t.table],s={user:t.hdb_user};return je(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return LC(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=Ls()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ds.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:Ms.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,BC.async_set_timeout)($J),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%VJ===0&&await _();return u.length>0&&await _(),n?LC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,sd.default)(t,"hashes");if(r)throw r;return DC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of DC(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&Ms.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let s=(0,sd.default)(t,"value");if(s)throw s;let n=tn(t);if(!n)throw new Ds.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===Ms.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:rS(t,n)})}async getDataByValue(t,r){let s=new Map,n=tn(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){tn({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return tn(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=tn(t),s={};switch(t.search_type){case Ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case Ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of MC(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return MC(r,t.search_values?.[0],t.search_values?.[1])}}};a(rS,"getSelect");a(DC,"getRecords");a(tn,"getTable");a(LC,"createDeleteResponse");a(MC,"groupRecordsInHistory")});var ys=g((Ade,qC)=>{"use strict";var{ResourceBridge:YJ}=(xC(),ne(HC)),KJ=ee();KJ.initSync();var od;function WJ(){return od||(od=new YJ,od)}a(WJ,"getBridge");qC.exports=WJ()});var VC=g((bde,kC)=>{"use strict";var GC=require("lodash"),Xc=require("mathjs"),QJ=require("jsonata"),FC=Q();kC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?GC.uniqWith(e,GC.isEqual):e,searchJSON:zJ,mad:jc.bind(null,Xc.mad),mean:jc.bind(null,Xc.mean),mode:jc.bind(null,Xc.mode),prod:jc.bind(null,Xc.prod),median:jc.bind(null,Xc.median)};function jc(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(jc,"aggregateFunction");function zJ(e,t){if(typeof e!="string"||e.length===0)throw new Error("search json expression must be a non-empty string");let r="__"+e+"__";if(FC.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),FC.isEmpty(this.__ala__.res[r])){let s=QJ(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(zJ,"searchJSON")});var YC=g((yde,$C)=>{"use strict";var Et=require("moment"),nS="YYYY-MM-DDTHH:mm:ss.SSSZZ";Et.suppressDeprecationWarnings=!0;$C.exports={current_date:()=>Et().utc().format("YYYY-MM-DD"),current_time:()=>Et().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Et(e).utc().format("YYYY");case"month":return Et(e).utc().format("MM");case"day":return Et(e).utc().format("DD");case"hour":return Et(e).utc().format("HH");case"minute":return Et(e).utc().format("mm");case"second":return Et(e).utc().format("ss");case"millisecond":return Et(e).utc().format("SSS");default:break}},date:e=>Et(e).utc().format(nS),date_format:(e,t)=>Et(e).utc().format(t),date_add:(e,t,r)=>Et(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Et(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=Et(e).utc(),n=Et(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>Et().utc().valueOf(),get_server_time:()=>Et().format(nS),offset_utc:(e,t)=>Et(e).utc().utcOffset(t).format(nS)}});var zC=g((wde,QC)=>{"use strict";var JJ=require("@turf/area"),XJ=require("@turf/length"),jJ=require("@turf/circle"),ZJ=require("@turf/difference"),e4=require("@turf/distance"),t4=require("@turf/boolean-contains"),r4=require("@turf/boolean-equal"),s4=require("@turf/boolean-disjoint"),n4=require("@turf/helpers"),KC=M(),me=Q(),bn=$();QC.exports={geoArea:i4,geoLength:o4,geoCircle:a4,geoDifference:c4,geoDistance:WC,geoNear:u4,geoContains:l4,geoEqual:_4,geoCrosses:d4,geoConvert:f4};function i4(e){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return JJ.default(e)}catch(t){return bn.trace(t,e),NaN}}a(i4,"geoArea");function o4(e,t){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return XJ.default(e,{units:t||"kilometers"})}catch(r){return bn.trace(r,e),NaN}}a(o4,"geoLength");function a4(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return jJ.default(e,t,{units:r||"kilometers"})}catch(s){return bn.trace(s,e,t),NaN}}a(a4,"geoCircle");function c4(e,t){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return ZJ(e,t)}catch(r){return bn.trace(r,e,t),NaN}}a(c4,"geoDifference");function WC(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return e4.default(e,t,{units:r||"kilometers"})}catch(s){return bn.trace(s,e,t),NaN}}a(WC,"geoDistance");function u4(e,t,r,s){if(me.isEmpty(e)||me.isEmpty(t))return!1;if(me.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return WC(e,t,s)<=r}catch(n){return bn.trace(n,e,t),!1}}a(u4,"geoNear");function l4(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return t4.default(e,t)}catch(r){return bn.trace(r,e,t),!1}}a(l4,"geoContains");function _4(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return r4.default(e,t)}catch(r){return bn.trace(r,e,t),!1}}a(_4,"geoEqual");function d4(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return!s4.default(e,t)}catch(r){return bn.trace(r,e,t),!1}}a(d4,"geoCrosses");function f4(e,t,r){if(me.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(me.isEmpty(t))throw new Error("geo_type is required");if(me.isEmpty(KC.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(KC.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=me.autoCastJSON(e)),n4[t](e,r)}a(f4,"geoConvert")});var ad=g((Cde,JC)=>{var so=VC(),xr=YC(),rn=zC();JC.exports=e=>{e.aggr.mad=e.aggr.MAD=so.mad,e.aggr.mean=e.aggr.MEAN=so.mean,e.aggr.mode=e.aggr.MODE=so.mode,e.aggr.prod=e.aggr.PROD=so.prod,e.aggr.median=e.aggr.MEDIAN=so.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=so.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=so.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=xr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=xr.current_time,e.fn.extract=e.fn.EXTRACT=xr.extract,e.fn.date=e.fn.DATE=xr.date,e.fn.date_format=e.fn.DATE_FORMAT=xr.date_format,e.fn.date_add=e.fn.DATE_ADD=xr.date_add,e.fn.date_sub=e.fn.DATE_SUB=xr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=xr.date_diff,e.fn.now=e.fn.NOW=xr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=xr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=xr.get_server_time,e.fn.getdate=e.fn.GETDATE=xr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=xr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=rn.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=rn.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=rn.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=rn.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=rn.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=rn.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=rn.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=rn.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=rn.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=rn.geoNear}});var eD=g((Dde,ZC)=>{"use strict";var Zc=require("lodash"),lr=require("alasql");lr.options.cache=!1;var E4=ad(),XC=require("clone"),cd=require("recursive-iterator"),le=$(),Ie=Q(),ia=ys(),h4=M(),{hdb_errors:m4}=se(),{getDatabases:jC}=(Ae(),ne(Ge)),p4="IS NULL",Us="There was a problem performing this search. Please check the logs and try again.";E4(lr);var iS=class{static{a(this,"SQLSearch")}constructor(t,r){if(Ie.isEmpty(t))throw le.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),Ie.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!Ie.isEmptyOrZeroLength(s))return le.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw le.error("Error thrown from checkEmptySQL in SQLSearch class method search."),le.error(s),new Error(Us)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw le.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),le.error(s),new Error(Us)}if(Object.keys(this.data).length===0)return le.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw le.error("Error thrown from processJoins in SQLSearch class method search."),le.error(s),new Error(Us)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw le.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),le.error(s),new Error(Us)}try{return t=await this._finalSQL(),t}catch(s){throw le.error("Error thrown from finalSQL in SQLSearch class method search."),le.error(s),new Error(Us)}}_getColumns(){let t=new cd(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(XC(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Zc.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=jC()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Ie.isEmpty(this.statement.where)){le.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new cd(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Ie.isEmpty(r)&&r.right)if(Ie.isNotEmptyAndHasValue(r.right.value)){let s=Ie.autoCast(r.right.value);[!0,!1].indexOf(s)>=0&&(r.right=new lr.yy.LogicValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=Ie.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new lr.yy.LogicValue({value:i}):s instanceof lr.yy.StringValue&&Ie.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new lr.yy.NumValue({value:i}))});if(t){le.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new cd(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Ie.isEmpty(h4.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Ie.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Ie.isEmptyOrZeroLength(r.left.columnid)||Ie.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(Ie.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!Ie.isEmpty(r.right.value)||!Ie.isEmpty(r.left.value)?s.add(Ie.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)s.add(u[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(Ie.isEmptyOrZeroLength(this.all_table_attributes)&&Ie.isEmptyOrZeroLength(this.statement.from)&&Ie.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Zc.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(Ie.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);Ie.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Ie.isEmptyOrZeroLength(this.all_table_attributes)&&!Ie.isEmptyOrZeroLength(this.columns.columns))return t;if(Ie.isEmptyOrZeroLength(this.all_table_attributes)&&Ie.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await lr.promise(r)}catch(r){throw le.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),le.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(XC(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(Ie.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(p4)>-1&&this.tables.forEach(n=>{let i={columnid:jC()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Zc.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,_=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!Ie.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Ie.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await ia.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(l){throw le.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),le.error(l),new Error(Us)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await ia.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,E))}))}catch(l){throw le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),le.error(l),new Error(Us)}else if(!Ie.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Ie.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await ia.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,p))}}catch(l){throw le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),le.error(l),new Error(Us)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await ia.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]),this._setMergedHashAttribute(i,d))}catch(l){throw le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),le.error(l),new Error(Us)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof lr.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new lr.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new lr.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new lr.yy.FuncValue:new lr.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,p=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${p}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${p}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"";u=u.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,n);f=await lr.promise(h,t),t=null}catch(E){throw le.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),le.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let p=f[E];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),p=Zc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,T=p.length;S<T;S++){let b=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[b]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new cd(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=Zc.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw le.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),le.error(i),new Error(Us)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await ia.getDataByHash(c),_=n.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let p=n.columns[h],S=E[p]===void 0?null:E[p];this.data[s].__merged_data[f].push(S)}}}}catch(r){throw le.error("Error thrown from getDataByHash function in SQLSearch class method getData."),le.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let s;try{let n=this._buildSQL();le.trace(`Final SQL: ${n}`),s=await lr.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),le.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw le.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),le.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return le.error(m4.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),le.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=n[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;s=s.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;s=s.replace(u,_)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await ia.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw le.error("There was an error when processing this SQL operation. Check your logs"),le.error(o),new Error(Us)}}return Object.values(Object.values(this.data)[0].__merged_data)}};ZC.exports=iS});var Dr=g((Mde,tD)=>{"use strict";var S4=Ub();tD.exports={searchByConditions:g4,searchByHash:R4,searchByValue:A4,search:O4};var oS=ys(),{transformReq:aS}=Q(),T4=eD();async function g4(e){return aS(e),oS.searchByConditions(e)}a(g4,"searchByConditions");async function R4(e){aS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of oS.searchByHash(e))r&&t.push(r);return t}a(R4,"searchByHash");async function A4(e){aS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of oS.searchByValue(e))t.push(r);return t}a(A4,"searchByValue");function O4(e,t){try{let r=new S4(e);r.validate(),new T4(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(O4,"search")});var ud=g((Pde,rD)=>{"use strict";var b4=ys();rD.exports={writeTransaction:N4};function N4(e,t,r){return b4.writeTransaction(e,t,r)}a(N4,"writeTransaction")});var oD=g((Hde,iD)=>{"use strict";var y4=Dr(),w4=gn(),sD=$(),I4=Lr(),Bde=ud(),C4=require("clone"),uS=require("alasql"),D4=ad(),nD=require("util"),L4=nD.promisify(w4.getTableSchema),M4=nD.promisify(y4.search),U4=M(),cS=Q();D4(uS);iD.exports={update:v4};var P4="There was a problem performing this update. Please check the logs and try again.";async function v4({statement:e,hdb_user:t}){let r=await L4(e.table.databaseid,e.table.tableid),s=B4(e.columns);cS.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=C4(n),c=cS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=uS.parse(u).statements[0],l=await M4(_),d=H4(s,l);return x4(o,d,t)}a(v4,"update");function B4(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=uS.compile(`SELECT ${r.expression.toString()} AS [${U4.FUNC_VAL}] FROM ?`)}),t}catch(t){throw sD.error(t),new Error(P4)}}a(B4,"createUpdateRecord");function H4(e,t){return cS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(H4,"buildUpdateRecords");async function x4(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await I4.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){sD.error(`Error delete new_attributes from update response: ${i}`)}return n}a(x4,"updateRecords")});var cD=g((Fde,aD)=>{var q4=require("alasql"),G4=Dr(),F4=$(),k4=ys(),_S=require("util"),lS=Q(),V4=M(),$4=gn(),qde=ud(),Gde=Lr(),Y4="record",K4="successfully deleted",W4=_S.callbackify(X4),Q4=_S.promisify(G4.search),z4=_S.promisify($4.getTableSchema);aD.exports={convertDelete:W4};function J4(e){return`${e.deleted_hashes.length} ${Y4}${e.deleted_hashes.length===1?"":"s"} ${K4}`}a(J4,"generateReturnMessage");async function X4({statement:e,hdb_user:t}){let r=await z4(e.table.databaseid,e.table.tableid);lS.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=lS.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=q4.parse(o).statements[0],u={operation:V4.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await Q4(c);let _=await k4.deleteRecords(u);return lS.isEmptyOrZeroLength(_.message)&&(_.message=J4(_)),delete _.txn_time,_}catch(_){throw F4.error(_),_.hdb_code?_.message:_}}a(X4,"convertDelete")});var fD=g((Vde,dD)=>{"use strict";var j4=ei(),{hdb_errors:uD}=se(),{getDatabases:lD}=(Ae(),ne(Ge));dD.exports={checkSchemaExists:_D,checkSchemaTableExists:Z4,schema_describe:j4};async function _D(e){if(!lD()[e])return uD.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(_D,"checkSchemaExists");async function Z4(e,t){let r=await _D(e);if(r)return r;if(!lD()[e][t])return uD.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Z4,"checkSchemaTableExists")});var eu=g((Yde,e3)=>{e3.exports={name:"harperdb",version:"4.3.0-beta.12",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/abort-controller":"3.374.0","@aws-sdk/client-s3":"3.477.0","@aws-sdk/lib-storage":"3.477.0","@endo/static-module-record":"^1.0.0","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.11.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.1",fastify:"~4.25.1","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"3.0.0-beta.9",lodash:"4.17.21",mathjs:"11.11.2",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.19.0",needle:"3.2.0","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.3.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.0.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.20","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.15.1",yaml:"2.3.4"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.2",chai:"4.3.7","chai-integer":"0.1.0",esbuild:"^0.19.1",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.22.11","newman-reporter-teamcity":"0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.3.3","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var iu={};Ye(iu,{addAnalyticsListener:()=>nu,recordAction:()=>qr,recordActionBinary:()=>ns,setAnalyticsEnabled:()=>t3});function t3(e){AD=e}function qr(e,t,r,s,n){if(!AD)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=dd.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:s,type:n},dd.set(i,o)}ld||r3()}function ns(e,t,r,s,n){qr(!!e,t,r,s,n)}function nu(e){ND.push(e)}function r3(){ld=performance.now(),setTimeout(async()=>{let e=performance.now()-ld;ld=0;let t=[],r={time:Date.now(),period:e,threadId:no.threadId,metrics:t};for(let[n,i]of dd){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of yD){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await wD()}let s=process.memoryUsage();t.push({metric:"memory",threadId:no.threadId,byThread:!0,...s});for(let n of ND)n(t);dd=new Map,no.parentPort?no.parentPort.postMessage({type:bD,report:r}):DD({report:r})},OD).unref()}async function s3(e,t=6e4){let r=ES(),s=ID(),n=new Promise(p=>{let S=performance.now();setImmediate(()=>{let T=performance.now();T-S>5e3&&(0,tu.warn)("Unusually high event queue latency on the main thread of "+Math.round(T-S)+"ms"),S=performance.now()}),s.primaryStore.prefetch([1],()=>{let T=performance.now();T-S>5e3&&(0,tu.warn)("Unusually high task queue latency on the main thread of "+Math.round(T-S)+"ms"),p(T-S)})}),i;for(let p of s.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(p.value?.time){i=p.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,u=new Map,_=[],l;for(let{key:p,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(p>o+t)break}else o=p;l=p;let{metrics:T,threadId:b}=S;for(let R of T||[]){let{path:L,method:H,type:P,metric:k,count:B,total:J,distribution:z,threads:X,...Te}=R;B||(B=1);let ce=k+(L?"-"+L:"");H!==void 0&&(ce+="-"+H),P!==void 0&&(ce+="-"+P);let de=c.get(ce);if(de){if(de.threads){let Be=de.threads[b];if(Be)de=Be;else{de.threads[b]=Object.assign({},Te);continue}}de.count||(de.count=1);let Le=de.count;for(let Be in Te){let Ct=Te[Be];typeof Ct=="number"&&(de[Be]=(de[Be]*Le+Ct*B)/(Le+B))}de.count+=B,J>=0&&(de.total+=J,de.ratio=de.total/de.count)}else de=Object.assign({period:t},R),delete de.distribution,c.set(ce,de),de.byThread&&(de.threads=[],de.threads[b]=Object.assign({},Te),_.push(de));if(z){z=z.map(Be=>typeof Be=="number"?{value:Be,count:1}:Be);let Le=u.get(ce);Le?Le.push(...z):u.set(ce,z)}}await wD()}for(let p of _){let{path:S,method:T,type:b,metric:R,count:L,total:H,distribution:P,threads:k,...B}=p;k=k.filter(J=>J);for(let J in B){if(typeof p[J]!="number")continue;let z=0;for(let X of k){let Te=X[J];typeof Te=="number"&&(z+=Te)}p[J]=z}p.count=k.length,delete p.threads,delete p.byThread}for(let[p,S]of u){let T=c.get(p);S.sort((Be,Ct)=>Be.value>Ct.value?1:-1);let b=T.count-1,R=[],L=0,H=0,P;for(let Be of yD){let Ct=b*Be;for(;L<Ct;)P=S[H++],L+=P.count,H===1&&L--;let ql=S[H>1?H-2:0];P||(P=S[0]),R.push(P.value-(P.value-ql.value)*(L-Ct)/P.count)}let[k,B,J,z,X,Te,ce,de,Le]=R;Object.assign(T,{p1:k,p10:B,p25:J,median:z,p75:X,p90:Te,p95:ce,p99:de,p999:Le})}let d;for(let[p,S]of c)S.id=(0,_d.getNextMonotonicTime)(),S.time=l,s.primaryStore.put(S.id,S,{append:!0}).then(T=>{T||s.primaryStore.put(S.id,S)}),d=!0;let f=Date.now(),{idle:E,active:h}=performance.eventLoopUtilization();if(d||h*10>E){let p=(0,_d.getNextMonotonicTime)(),S={id:p,metric:"main-thread-utilization",idle:E-ED,active:h-hD,taskQueueLatency:await n,time:f,...process.memoryUsage()};s.primaryStore.put(p,S,{append:!0}).then(T=>{T||s.primaryStore.put(p,S)})}ED=E,hD=h}async function mD(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function ES(){return pD||(pD=ct({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function ID(){return SD||(SD=ct({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function o3(){CD=!0;let e=(0,su.get)(fS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await s3(OD,e),await mD(ES(),n3),await mD(ID(),i3)},Math.min(e/2,2147483647)).unref()}function DD(e,t){let r=e.report;r.threadId=t?.threadId||no.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(TD+=s.mean*s.count);r.totalBytesProcessed=TD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(gD.get(t))}),gD.set(t,t.performance.eventLoopUtilization())),r.id=(0,_d.getNextMonotonicTime)(),ES().primaryStore.put(r.id,r),CD||o3(),a3&&(LD=u3(r))}async function u3(e){if(await LD,!ci){let r=(0,ru.dirname)((0,tu.getLogFilePath)());try{ci=await(0,dS.open)((0,ru.join)(r,"analytics.log"),"r+")}catch{ci=await(0,dS.open)((0,ru.join)(r,"analytics.log"),"w+")}}let t=(await ci.stat()).size;if(t>c3){let r=Buffer.alloc(t);await ci.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ci.write(r,{position:0}),await ci.truncate(r.length),t=r.length}await ci.write(JSON.stringify(e)+`
8
8
  `,t)}var no,RD,tu,ru,dS,_d,su,fS,dd,AD,ld,OD,bD,ND,yD,ED,hD,wD,n3,i3,pD,SD,CD,TD,gD,a3,LD,ci,c3,Nn=Re(()=>{no=require("worker_threads"),RD=x(Ke());Ae();tu=x($()),ru=require("path"),dS=require("fs/promises"),_d=x(wr()),su=x(ee()),fS=x(M());nr();(0,su.initSync)();dd=new Map,AD=(0,su.get)(fS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(t3,"setAnalyticsEnabled");a(qr,"recordAction");tt.recordAnalytics=qr;a(ns,"recordActionBinary");ld=0,OD=1e3,bD="analytics-report",ND=[];a(nu,"addAnalyticsListener");yD=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(r3,"sendAnalytics");a(s3,"aggregation");ED=0,hD=0,wD=a(()=>new Promise(setImmediate),"rest");a(mD,"cleanup");n3=36e5,i3=31536e6;a(ES,"getRawAnalyticsTable");a(ID,"getAnalyticsTable");(0,RD.setChildListenerByType)(bD,DD);a(o3,"startScheduledTasks");TD=0,gD=new Map,a3=!1;a(DD,"recordAnalytics");c3=1e6;a(u3,"logAnalytics")});var gS=g((nfe,GD)=>{"use strict";var{decode:l3}=require("msgpackr"),{isMainThread:tfe,parentPort:rfe,threadId:sfe}=require("worker_threads"),ou=st(),oa=Fe(),pS=M(),zt=$(),mS=ee(),_3=M(),{onMessageByType:d3}=Ke(),UD=Tn(),{recordAction:f3,recordActionBinary:E3}=(Nn(),ne(iu)),{publishToStream:h3}=ou,{ConsumerEvents:m3}=require("nats"),p3=Dr(),{promisify:S3}=require("util"),PD=S3(setTimeout),hd=1e4,md,Ed,T3,g3,vD,au=new Map,aa=new Map;GD.exports={initialize:SS,ingestConsumer:TS,setSubscription:R3,setIgnoreOrigin:b3,getDatabaseSubscriptions:O3,updateConsumer:BD};async function SS(){d3(pS.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async s=>{await BD(s)}),vD=!0,zt.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await ou.getNATSReferences();md=e,Ed=e.info.server_name,T3=t,g3=r}a(SS,"initialize");async function BD(e){if(e.status==="start"){let{js:t,jsm:r}=await HD(e.node_domain_name);TS(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=au.get(e.stream_name+e.node_domain_name);t&&(zt.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),au.set(e.stream_name+e.node_domain_name,"close")),aa.get(e.node_domain_name)==="failed"&&aa.set(e.node_domain_name,"close")}}a(BD,"updateConsumer");var pd=new Map;function R3(e,t,r){let s=pd.get(e);s||pd.set(e,s=new Map),s.set(t,r),vD||SS().then(A3)}a(R3,"setSubscription");async function A3(){let e=await p3.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+oa.SERVER_SUFFIX.LEAF,s,n;for(let i of t.subscriptions)if(i.subscribe===!0){if(!s&&({js:s,jsm:n}=await HD(r),!s))break;let{schema:o,table:c}=i,u=UD.createNatsTableStreamName(o,c);TS(u,s,n,r)}}}a(A3,"accessConsumers");async function HD(e){let t,r,s=1;for(;!r;)try{t=await md.jetstream({domain:e}),r=await md.jetstreamManager({domain:e})}catch(n){if(aa.get(e)==="close")break;aa.set(e,"failed"),s%10===1&&zt.warn("Nats ingest attempting to connect to:",e,"Nats error:",n.message);let i=s++*100<hd?s++*100:hd;await PD(i)}return{js:t,jsm:r}}a(HD,"connectToRemoteJS");function O3(){return pd}a(O3,"getDatabaseSubscriptions");var xD;function b3(e){xD=e}a(b3,"setIgnoreOrigin");var qD=100,MD=new Array(qD),fd=0;async function TS(e,t,r,s){let{connection:n}=await ou.getNATSReferences();md=n,Ed=n.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,Ed),zt.notify("Initializing ingest consumer for node:",s,"stream:",e)}catch(_){if(aa.get(s)==="close")break;o%10===1&&zt.warn("Nats ingest error getting consumer:",s,"stream:",e,"Nats error:",_.message),_.code==="404"&&(zt.notify("Nats ingest creating consumer for node:",s,"stream:",e),i=await ou.createConsumer(r,e,Ed,new Date(Date.now()).toISOString()));let l=o++*100<hd?o++*100:hd;await PD(l)}let c=!1,u;for(;!c;){if(au.get(e+s)==="close"||aa.get(s)==="close"){au.delete(e+s),c=!0;continue}u=await i.consume({max_messages:mS.get(pS.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100}),au.set(e+s,u);let _=!1;(async()=>{for await(let l of await u.status())if(l.type===m3.HeartbeatsMissed){let d=l.data;zt.trace(`${d} clustering ingest consumer heartbeats missed, node: ${s} stream: ${u.consumer.stream}`),d===2&&(zt.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${s} stream: ${u.consumer.stream}`),u.stop(),_=!0)}})();try{for await(let l of u)await MD[fd],MD[fd]=N3(l).catch(d=>{zt.error(d)}),++fd>=qD&&(fd=0)}catch(l){l.message==="consumer deleted"?(zt.notify("Nats consumer deleted, closing messages for node:",s,"stream:",u.consumer.stream),await u.close(),c=!0):zt.error("Error consuming clustering ingest, restarting consumer",l)}ou.clearClientCache(),!c&&_&&await SS()}}a(TS,"ingestConsumer");async function N3(e){let t=l3(e.data);f3(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),zt.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,s=!1,n=mS.get(pS.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(oa.MSG_HEADERS.TRANSACTED_NODES)&&r.values(oa.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(oa.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!xD),E3(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(oa.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;zt.trace("processing message:",o,c,_,(l?"records: "+l.map(L=>L?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),zt.trace(`messageProcessor nats msg id: ${e.headers.get(oa.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let p=new Promise(L=>h=L),{timestamp:S,user:T,node_name:b}=f||{},R=pd.get(c)?.get(_);if(!R)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,t.onCommit=h,R.send(t);else if(l.length===1&&!u)R.send({type:hS(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:S,table:_,onCommit:h,user:T,nodeName:b});else{let L=l.map((H,P)=>({type:hS(o),value:H,expiresAt:E,id:d?.[P],table:_}));for(;u;)L.push({type:hS(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;R.send({type:"transaction",writes:L,table:_,timestamp:S,onCommit:h,user:T,nodeName:b})}mS.get(_3.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&h3(e.subject.split(".").slice(0,-1).join("."),UD.createNatsTableStreamName(c,_),e.headers,e.data),await p}catch(o){zt.error(o)}e.ack()}a(N3,"messageProcessor");function hS(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(hS,"convertOperation")});var st=g((_fe,sL)=>{"use strict";var Mt=ee();Mt.initSync();var y3=require("fs-extra"),w3=require("semver"),lu=require("path"),{monotonicFactory:I3}=require("ulidx"),kD=I3(),C3=require("util"),VD=require("child_process"),D3=C3.promisify(VD.exec),L3=VD.spawn,Ft=Fe(),Ce=M(),Sd=Q(),Ps=$(),Td=Tn(),M3=ud(),cu=Pr(),{broadcast:U3,onMessageByType:P3,getWorkerIndex:v3}=Ke(),{isMainThread:$D}=require("worker_threads"),{Encoder:B3,decode:bS}=require("msgpackr"),YD=new B3,{isEmpty:co}=Sd,KD=ss(),ofe=48*36e11;$D&&P3(Ce.ITC_EVENT_TYPES.RESTART,()=>{_r=void 0,ao=void 0});var{connect:H3,StorageType:x3,RetentionPolicy:q3,AckPolicy:NS,DeliverPolicy:yS,DiscardPolicy:G3,NatsConnection:afe,JetStreamManager:cfe,JetStreamClient:ufe,StringCodec:lfe,JSONCodec:F3,createInbox:wS,headers:k3,ErrorCode:FD}=require("nats"),{PACKAGE_ROOT:V3}=M(),$3=eu(),{recordAction:Y3}=(Nn(),ne(iu)),WD=F3(),K3="clustering",W3=$3.engines[Ft.NATS_SERVER_NAME],Q3=lu.join(V3,"dependencies"),OS=lu.join(Q3,`${process.platform}-${process.arch}`,Ft.NATS_BINARY_NAME),RS,AS,uu,io,oo;sL.exports={runCommand:QD,checkNATSServerInstalled:z3,createConnection:IS,getConnection:gd,getJetStreamManager:_u,getJetStream:JD,getNATSReferences:vs,getServerList:X3,createLocalStream:CS,listStreams:XD,deleteLocalStream:j3,getServerConfig:du,listRemoteStreams:Z3,viewStream:eX,viewStreamIterator:tX,publishToStream:rX,request:iX,reloadNATS:DS,reloadNATSHub:oX,reloadNATSLeaf:aX,extractServerName:nX,requestErrorHandler:cX,createLocalTableStream:tL,createTableStreams:_X,purgeTableStream:rL,purgeSchemaTableStreams:dX,getStreamInfo:fX,updateLocalStreams:hX,closeConnection:J3,getJsmServerName:Rd,addNatsMsgHeader:jD,clearClientCache:zD,updateRemoteConsumer:uX,createConsumer:ZD,updateConsumerIterator:lX};async function QD(e,t=void 0){let{stdout:r,stderr:s}=await D3(e,{cwd:t});if(s)throw new Error(s.replace(`
9
9
  `,""));return r.replace(`
10
10
  `,"")}a(QD,"runCommand");async function z3(){try{await y3.access(OS)}catch{return!1}let e=await QD(`${OS} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return w3.eq(t,W3)}a(z3,"checkNATSServerInstalled");async function IS(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await KD.getClusterUser();if(co(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Ps.trace("create nats connection called");let i=await H3({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Ps.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Ps.error("Error with Nats client connection, connection closed",o),zD()}),i}a(IS,"createConnection");function zD(){_r=void 0,io=void 0,oo=void 0,ao=void 0}a(zD,"clearClientCache");async function J3(){_r&&(await _r.drain(),_r=void 0,io=void 0,oo=void 0,ao=void 0)}a(J3,"closeConnection");var _r,ao;async function gd(){return ao||(ao=IS(Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),_r=await ao),_r||ao}a(gd,"getConnection");async function _u(){if(io)return io;co(_r)&&await gd();let{domain:e}=du(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(co(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return io=await _r.jetstreamManager({domain:e,timeout:6e4}),io}a(_u,"getJetStreamManager");async function JD(){if(oo)return oo;co(_r)&&await gd();let{domain:e}=du(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(co(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return oo=_r.jetstream({domain:e,timeout:6e4}),oo}a(JD,"getJetStream");async function vs(){let e=_r||await gd(),t=io||await _u(),r=oo||await JD();return{connection:e,jsm:t,js:r}}a(vs,"getNATSReferences");async function X3(e){let t=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await KD.getClusterUser(),n=await IS(t,r,s),i=wS(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=WD.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await Sd.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(X3,"getServerList");async function CS(e,t){let{jsm:r}=await vs(),s=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:x3.File,retention:q3.Limits,subjects:t,discard:G3.Old,max_msgs:n,max_bytes:i,max_age:s})}a(CS,"createLocalStream");async function XD(){let{jsm:e}=await vs(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(XD,"listStreams");async function j3(e){let{jsm:t}=await vs();await t.streams.delete(e)}a(j3,"deleteLocalStream");async function Z3(e){let{connection:t}=await vs(),r=[],s=wS(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(WD.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(Z3,"listRemoteStreams");async function eX(e,t=void 0,r=void 0){let{jsm:s,js:n}=await vs(),i=kD(),o={durable_name:i,ack_policy:NS.Explicit};t&&(o.deliver_policy=yS.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=bS(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(Ft.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(eX,"viewStream");async function*tX(e,t=void 0,r=void 0){let{jsm:s,js:n}=await vs(),i=kD(),o={durable_name:i,ack_policy:NS.Explicit};t&&(o.deliver_policy=yS.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=bS(_.data);l[0]||(l=[l]);for(let d of l){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(Ft.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(tX,"viewStreamIterator");async function rX(e,t,r,s){Ps.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=jD(s,r);let{js:n}=await vs(),i=await Rd(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:YD.encode(s);try{Ps.trace(`publishToStream publishing to subject: ${o}`),Y3(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return eL(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Ps.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await CS(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(rX,"publishToStream");function jD(e,t){t===void 0&&(t=k3());let r=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Ft.MSG_HEADERS.ORIGIN)&&r&&t.append(Ft.MSG_HEADERS.ORIGIN,r),t}a(jD,"addNatsMsgHeader");function du(e){e=e.toLowerCase();let t=lu.join(Mt.get(Ce.CONFIG_PARAMS.ROOTPATH),K3);if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return co(AS)&&(AS={port:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ft.SERVER_SUFFIX.HUB,config_file:Ft.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:lu.join(t,Ft.PID_FILES.HUB),hdb_nats_path:t}),AS;if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return co(RS)&&(RS={port:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ft.SERVER_SUFFIX.LEAF,config_file:Ft.NATS_CONFIG_FILES.LEAF_SERVER,domain:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ft.SERVER_SUFFIX.LEAF,pid_file_path:lu.join(t,Ft.PID_FILES.LEAF),hdb_nats_path:t}),RS;Ps.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(du,"getServerConfig");async function ZD(e,t,r,s){try{await e.consumers.add(t,{ack_policy:NS.Explicit,durable_name:r,deliver_policy:yS.StartTime,opt_start_time:s})}catch(n){if(n.message!=="consumer already exists")throw n}}a(ZD,"createConsumer");async function sX(e,t,r){await e.consumers.delete(t,r)}a(sX,"removeConsumer");function nX(e){return e.split(".")[1]}a(nX,"extractServerName");async function iX(e,t,r=6e4,s=wS()){if(!Sd.isObject(t))throw new Error("data param must be an object");let n=YD.encode(t),{connection:i}=await vs(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return bS(c.data)}a(iX,"request");function DS(e){return new Promise(async(t,r)=>{let s=L3(OS,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(DS,"reloadNATS");async function oX(){let{pid_file_path:e}=du(Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await DS(e)}a(oX,"reloadNATSHub");async function aX(){let{pid_file_path:e}=du(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await DS(e)}a(aX,"reloadNATSLeaf");function cX(e,t,r){let s;switch(e.code){case FD.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case FD.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(cX,"requestErrorHandler");async function uX(e,t){let r=t+Ft.SERVER_SUFFIX.LEAF,{connection:s}=await vs(),{jsm:n}=await pX(r),{schema:i,table:o}=e,c=Td.createNatsTableStreamName(i,o),u=e.start_time?e.start_time:new Date(Date.now()).toISOString();await eL(async()=>{if(e.subscribe===!0)await ZD(n,c,s.info.server_name,u);else try{await sX(n,c,s.info.server_name)}catch(_){Ps.trace(_)}})}a(uX,"updateRemoteConsumer");async function lX(e,t,r,s){let n=Td.createNatsTableStreamName(e,t),i=r+Ft.SERVER_SUFFIX.LEAF,o={type:Ce.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:s,stream_name:n,node_domain_name:i};if(!$D&&v3()<Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=gS();await c(o)}await U3(o),s==="stop"&&await Sd.async_set_timeout(1e3)}a(lX,"updateConsumerIterator");function eL(e){return M3.writeTransaction(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(eL,"exclusiveLock");async function tL(e,t){let r=Td.createNatsTableStreamName(e,t),s=await Rd(),n=EX(e,t,s);await CS(r,[n])}a(tL,"createLocalTableStream");async function _X(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await tL(s,n)}}a(_X,"createTableStreams");async function rL(e,t){if(Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Td.createNatsTableStreamName(e,t),{jsm:s}=await vs();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Ps.warn(r);else throw r}}a(rL,"purgeTableStream");async function dX(e,t){if(Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await rL(e,t[r])}a(dX,"purgeSchemaTableStreams");async function fX(e){return(await _u()).streams.info(e)}a(fX,"getStreamInfo");function EX(e,t,r){return`${Ft.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(EX,"createSubjectName");async function Rd(){if(uu)return uu;if(uu=(await _u())?.nc?.info?.server_name,uu===void 0)throw new Error("Unable to get jetstream manager server name");return uu}a(Rd,"getJsmServerName");async function hX(){let e=await _u(),t=await Rd(),r=await XD();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=mX(s),c=i.split(".");if(c[c.length-1]===t&&!o||n.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Ps.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l,await e.streams.update(n.name,n)}}a(hX,"updateLocalStreams");function mX(e){let{config:t}=e,r=!1,s=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(mX,"updateStreamLimits");async function pX(e){let t,r;try{t=await _r.jetstream({domain:e}),r=await _r.jetstreamManager({domain:e})}catch(s){throw Ps.error("Unable to connect to:",e),s}return{js:t,jsm:r}}a(pX,"connectToRemoteJS")});var fu=g((Efe,aL)=>{"use strict";var ca=p_(),ua=fD(),SX=$(),TX=require("uuid").v4,ffe=require("clone"),Od=Rn(),la=M(),gX=require("util"),ui=ys(),{handleHDBError:dr,hdb_errors:RX}=se(),{HDB_ERROR_MSGS:Ad,HTTP_STATUS_CODES:fr}=RX,{SchemaEventMsg:bd}=Cs(),nL=st(),{getDatabases:AX}=(Ae(),ne(Ge)),{transformReq:_a}=Q();aL.exports={createSchema:OX,createSchemaStructure:iL,createTable:bX,createTableStructure:oL,createAttribute:CX,dropSchema:NX,dropTable:yX,dropAttribute:wX,getBackup:DX};async function OX(e){let t=await iL(e);return Od.signalSchemaChange(new bd(process.pid,e.operation,e.schema)),t}a(OX,"createSchema");async function iL(e){let t=ca.schema_object(e);if(t)throw dr(t,t.message,fr.BAD_REQUEST,void 0,void 0,!0);if(_a(e),!await ua.checkSchemaExists(e.schema))throw dr(new Error,Ad.SCHEMA_EXISTS_ERR(e.schema),fr.BAD_REQUEST,la.LOG_LEVELS.ERROR,Ad.SCHEMA_EXISTS_ERR(e.schema),!0);return await ui.createSchema(e),`database '${e.schema}' successfully created`}a(iL,"createSchemaStructure");async function bX(e){return _a(e),e.hash_attribute=e.primary_key??e.hash_attribute,await oL(e)}a(bX,"createTable");async function oL(e){let t=ca.create_table_object(e);if(t)throw dr(t,t.message,fr.BAD_REQUEST,void 0,void 0,!0);if(ca.validateTableResidence(e.residence),!await ua.checkSchemaTableExists(e.schema,e.table))throw dr(new Error,Ad.TABLE_EXISTS_ERR(e.schema,e.table),fr.BAD_REQUEST,la.LOG_LEVELS.ERROR,Ad.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:TX(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await ui.createTable(s,e);else throw dr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",fr.BAD_REQUEST);else await ui.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(oL,"createTableStructure");async function NX(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=ca.schema_object(e),s=t??r;if(s)throw dr(s,s.message,fr.BAD_REQUEST,void 0,void 0,!0);_a(e);let n=await ua.checkSchemaExists(e.schema);if(n)throw dr(new Error,n,fr.NOT_FOUND,la.LOG_LEVELS.ERROR,n,!0);let i=await ua.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await ui.dropSchema(e),Od.signalSchemaChange(new bd(process.pid,e.operation,e.schema)),await nL.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(NX,"dropSchema");async function yX(e){let t=ca.table_object(e);if(t)throw dr(t,t.message,fr.BAD_REQUEST,void 0,void 0,!0);_a(e);let r=await ua.checkSchemaTableExists(e.schema,e.table);if(r)throw dr(new Error,r,fr.NOT_FOUND,la.LOG_LEVELS.ERROR,r,!0);return await ui.dropTable(e),await nL.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(yX,"dropTable");async function wX(e){let t=ca.attribute_object(e);if(t)throw dr(t,t.message,fr.BAD_REQUEST,void 0,void 0,!0);_a(e);let r=await ua.checkSchemaTableExists(e.schema,e.table);if(r)throw dr(new Error,r,fr.NOT_FOUND,la.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw dr(new Error,"You cannot drop a hash attribute",fr.BAD_REQUEST,void 0,void 0,!0);if(la.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw dr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,fr.BAD_REQUEST,void 0,void 0,!0);try{return await ui.dropAttribute(e),IX(e),Od.signalSchemaChange(new bd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw SX.error(`Got an error deleting attribute ${gX.inspect(e)}.`),s}}a(wX,"dropAttribute");function IX(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(IX,"dropAttributeFromGlobal");async function CX(e){_a(e);let t=AX()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw dr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,fr.BAD_REQUEST,void 0,void 0,!0);return await ui.createAttribute(e),Od.signalSchemaChange(new bd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(CX,"createAttribute");function DX(e){return ui.getBackup(e)}a(DX,"getBackup")});var uL=g((mfe,cL)=>{"use strict";var{OPERATIONS_ENUM:LX}=M(),LS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=LX.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};cL.exports=LS});var MS=g((Tfe,EL)=>{"use strict";var MX=ys(),Sfe=uL(),Nd=Q(),yd=M(),UX=ee(),{handleHDBError:lL,hdb_errors:PX}=se(),{HDB_ERROR_MSGS:_L,HTTP_STATUS_CODES:dL}=PX,vX=Object.values(yd.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),fL="To use this operation audit log must be enabled in harperdb-config.yaml";EL.exports=BX;async function BX(e){if(Nd.isEmpty(e.schema))throw new Error(_L.SCHEMA_REQUIRED_ERR);if(Nd.isEmpty(e.table))throw new Error(_L.TABLE_REQUIRED_ERR);if(!UX.get(yd.CONFIG_PARAMS.LOGGING_AUDITLOG))throw lL(new Error,fL,dL.BAD_REQUEST,yd.LOG_LEVELS.ERROR,fL,!0);let t=Nd.checkSchemaTableExist(e.schema,e.table);if(t)throw lL(new Error,t,dL.NOT_FOUND,yd.LOG_LEVELS.ERROR,t,!0);if(!Nd.isEmpty(e.search_type)&&vX.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await MX.readAuditLog(e)}a(BX,"readAuditLog")});var mL=g((Rfe,hL)=>{"use strict";var{OPERATIONS_ENUM:HX}=M(),US=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=HX.GET_BACKUP,this.schema=t,this.table=r}};hL.exports=US});var TL=g((Nfe,SL)=>{"use strict";var xX=ys(),Ofe=mL(),PS=Q(),qX=M(),bfe=ee(),{handleHDBError:GX,hdb_errors:FX}=se(),{HDB_ERROR_MSGS:pL,HTTP_STATUS_CODES:kX}=FX;SL.exports=VX;async function VX(e){if(PS.isEmpty(e.schema))throw new Error(pL.SCHEMA_REQUIRED_ERR);if(PS.isEmpty(e.table))throw new Error(pL.TABLE_REQUIRED_ERR);let t=PS.checkSchemaTableExist(e.schema,e.table);if(t)throw GX(new Error,t,kX.NOT_FOUND,qX.LOG_LEVELS.ERROR,t,!0);return await xX.getBackup(read_audit_log_object)}a(VX,"getBackup")});var NL=g((wfe,bL)=>{var li=require("validate.js"),RL=Xe(),da=M(),{handleHDBError:$X,hdb_errors:YX}=se(),{HDB_ERROR_MSGS:lt,HTTP_STATUS_CODES:KX}=YX,vS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),WX={STRUCTURE_USER:"structure_user"},gL=Object.values(da.ROLE_TYPES_ENUM),QX="attribute_permissions",zX="attribute_name",{PERMS_CRUD_ENUM:fa}=da,JX=[QX,...Object.values(fa)],AL=[fa.READ,fa.INSERT,fa.UPDATE],XX=[zX,...AL];function jX(e){let t=vS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,OL(e,t)}a(jX,"addRoleValidation");function ZX(e){let t=vS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,OL(e,t)}a(ZX,"alterRoleValidation");function ej(e){let t=vS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,RL.validateObject(e,t)}a(ej,"dropRoleValidation");var tj=["operation","role","id","permission","hdb_user","hdb_auth_header"];function OL(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)tj.includes(s[o])||n.push(s[o]);n.length>0&&ht(lt.INVALID_ROLE_JSON_KEYS(n),r);let i=RL.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{ht(o,r)}),e.permission){let o=rj(e);o&&ht(o,r),gL.forEach(c=>{e.permission[c]&&!li.isBoolean(e.permission[c])&&ht(lt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(gL.indexOf(o)<0){if(o===WX.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||ht(lt.SCHEMA_NOT_FOUND(d),r)}continue}ht(lt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){ht(lt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){ht(lt.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{JX.includes(l)||ht(lt.INVALID_PERM_KEY(l),r,o,u)}),Object.values(fa).forEach(l=>{li.isDefined(_[l])?li.isBoolean(_[l])||ht(lt.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):ht(lt.TABLE_PERM_MISSING(l),r,o,u)}),li.isDefined(_.attribute_permissions)){if(!li.isArray(_.attribute_permissions)){ht(lt.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{ht(lt.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(p=>{!XX.includes(p)&&p!==fa.DELETE&&ht(lt.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!li.isDefined(E.attribute_name)){ht(lt.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){ht(lt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}AL.forEach(p=>{li.isDefined(E[p])?li.isBoolean(E[p])||ht(lt.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):ht(lt.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;ht(lt.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return sj(r)}a(OL,"customValidate");bL.exports={addRoleValidation:jX,alterRoleValidation:ZX,dropRoleValidation:ej};function rj(e){let{operation:t,permission:r}=e;if(t===da.OPERATIONS_ENUM.ADD_ROLE||t===da.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return lt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?da.ROLE_TYPES_ENUM.SUPER_USER:da.ROLE_TYPES_ENUM.CLUSTER_USER;return lt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(rj,"validateNoSUPerms");function sj(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:lt.ROLE_PERMS_ERROR,...e};return $X(new Error,s,KX.BAD_REQUEST)}else return null}a(sj,"generateRolePermResponse");function ht(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(ht,"addPermError")});var FS=g((Cfe,CL)=>{"use strict";var yL=Lr(),wL=Dr(),nj=si(),HS=NL(),xS=Rn(),ij=require("uuid").v4,oj=require("util"),wd=M(),aj=Q(),qS=wL.searchByValue,cj=wL.searchByHash,uj=oj.promisify(nj.delete),lj=Zs(),_j=ra(),{hdb_errors:dj,handleHDBError:uo}=se(),{HDB_ERROR_MSGS:IL,HTTP_STATUS_CODES:Eu}=dj,{UserEventMsg:GS}=Cs();CL.exports={addRole:fj,alterRole:Ej,dropRole:hj,listRoles:mj};function BS(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(BS,"scrubRoleDetails");async function fj(e){let t=HS.addRoleValidation(e);if(t)throw t;e=BS(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await qS(r)||[])}catch(i){throw uo(i)}if(s&&s.length>0)throw uo(new Error,IL.ROLE_ALREADY_EXISTS(e.role),Eu.CONFLICT,void 0,void 0,!0);e.id||(e.id=ij());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await yL.insert(n),xS.signalUserChange(new GS(process.pid)),e=BS(e),e}a(fj,"addRole");async function Ej(e){let t=HS.alterRoleValidation(e);if(t)throw t;e=BS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await yL.update(r)}catch(n){throw uo(n)}if(s&&s?.message==="updated 0 of 1 records")throw uo(new Error,"Invalid role id",Eu.BAD_REQUEST,void 0,void 0,!0);return await xS.signalUserChange(new GS(process.pid)),e}a(Ej,"alterRole");async function hj(e){let t=HS.dropRoleValidation(e);if(t)throw uo(new Error,t,Eu.BAD_REQUEST,void 0,void 0,!0);let r=new _j(wd.SYSTEM_SCHEMA_NAME,wd.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await cj(r));if(s.length===0)throw uo(new Error,IL.ROLE_NOT_FOUND,Eu.NOT_FOUND,void 0,void 0,!0);let n=new lj(wd.SYSTEM_SCHEMA_NAME,wd.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await qS(n)),o=!1;if(aj.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw uo(new Error,`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`,Eu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await uj(c),xS.signalUserChange(new GS(process.pid)),`${s[0].role} successfully deleted`}a(hj,"dropRole");async function mj(){return qS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(mj,"listRoles")});var UL=g((Lfe,ML)=>{"use strict";var pj=ee(),_i=require("joi"),Sj=Xe(),DL=require("moment"),Tj=require("fs-extra"),kS=require("path"),gj=require("lodash"),hu=M(),{LOG_LEVELS:lo}=M(),Rj="YYYY-MM-DD hh:mm:ss",Aj=kS.resolve(__dirname,"../logs");ML.exports=function(e){return Sj.validateBySchema(e,Oj)};var Oj=_i.object({from:_i.custom(LL),until:_i.custom(LL),level:_i.valid(lo.NOTIFY,lo.FATAL,lo.ERROR,lo.WARN,lo.INFO,lo.DEBUG,lo.TRACE),order:_i.valid("asc","desc"),limit:_i.number().min(1),start:_i.number().min(0),log_name:_i.custom(bj)});function LL(e,t){if(DL(e,DL.ISO_8601).format(Rj)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(LL,"validateDatetime");function bj(e,t){if(gj.invert(hu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=pj.get(hu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?hu.LOG_NAMES.HDB:e,i=n===hu.LOG_NAMES.INSTALL?kS.join(Aj,hu.LOG_NAMES.INSTALL):kS.join(s,n);return Tj.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(bj,"validateReadLogPath")});var $S=g((Ufe,vL)=>{"use strict";var Id=M(),Nj=$(),yj=ee(),wj=UL(),VS=require("path"),PL=require("fs-extra"),{once:Ij}=require("events"),{handleHDBError:Cj,hdb_errors:Dj}=se(),{PACKAGE_ROOT:Lj}=M(),Mj=VS.join(Lj,"logs"),Uj=1e3,Pj=200;vL.exports=vj;async function vj(e){let t=wj(e);if(t)throw Cj(t,t.message,Dj.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=yj.get(Id.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Id.LOG_NAMES.HDB:e.log_name,n=s===Id.LOG_NAMES.INSTALL?VS.join(Mj,Id.LOG_NAMES.INSTALL):VS.join(r,s),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?Uj:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!u&&!l&&(p=Math.max(PL.statSync(n).size-(h+5)*Pj,0));let S=PL.createReadStream(n,{start:p});S.on("error",P=>{Nj.error(P)});let T=0,b=[],R="",L;S.on("data",P=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;P=R+P;let B=0,J;for(;(J=k.exec(P))&&!S.destroyed;){L&&(L.message=P.slice(B,J.index),H(L));let[z,X,Te]=J,ce=Te.split("] ["),de=ce[0],Le=ce[1];ce.splice(0,2),L={timestamp:X,thread:de,level:Le,tags:ce,message:""},B=J.index+z.length}R=P.slice(B)}),S.on("end",P=>{S.destroyed||L&&(L.message=R.trim(),H(L))}),S.resume();function H(P){let k,B,J;switch(!0){case(i&&c&&_):k=new Date(P.timestamp),B=new Date(u),J=new Date(l),P.level===o&&k>=B&&k<=J&&T<E?T++:P.level===o&&k>=B&&k<=J&&(di(P,f,b),T++,T===h&&S.destroy());break;case(i&&c):k=new Date(P.timestamp),B=new Date(u),P.level===o&&k>=B&&T<E?T++:P.level===o&&k>=B&&(di(P,f,b),T++,T===h&&S.destroy());break;case(i&&_):k=new Date(P.timestamp),J=new Date(l),P.level===o&&k<=J&&T<E?T++:P.level===o&&k<=J&&(di(P,f,b),T++,T===h&&S.destroy());break;case(c&&_):k=new Date(P.timestamp),B=new Date(u),J=new Date(l),k>=B&&k<=J&&T<E?T++:k>=B&&k<=J&&(di(P,f,b),T++,T===h&&S.destroy());break;case i:P.level===o&&T<E?T++:P.level===o&&(di(P,f,b),T++,T===h&&S.destroy());break;case c:k=new Date(P.timestamp),B=new Date(u),k>=B&&T<E?T++:k>=B&&T>=E&&(di(P,f,b),T++,T===h&&S.destroy());break;case _:k=new Date(P.timestamp),J=new Date(l),k<=J&&T<E?T++:k<=J&&T>=E&&(di(P,f,b),T++,T===h&&S.destroy());break;default:T<E?T++:(di(P,f,b),T++,T===h&&S.destroy())}}return a(H,"onLogMessage"),await Ij(S,"close"),b}a(vj,"readLog");function di(e,t,r){t==="desc"?Bj(e,r):t==="asc"?Hj(e,r):r.push(e)}a(di,"pushLineToResult");function Bj(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(Bj,"insertDescending");function Hj(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(Hj,"insertAscending")});var Cd=g((xfe,qL)=>{"use strict";var YS=require("joi"),{string:mu,boolean:BL,date:xj}=YS.types(),qj=Xe(),{validateSchemaExists:vfe,validateTableExists:Bfe,validateSchemaName:Hfe}=Qs(),Gj=M(),Fj=Fe(),HL=ee();HL.initSync();var kj=mu.invalid(HL.get(Gj.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Fj.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),xL={operation:mu.valid("add_node","update_node","set_node_replication"),node_name:kj,subscriptions:YS.array().items({table:mu.optional(),schema:mu.optional(),database:mu.optional(),subscribe:BL.required(),publish:BL.required().custom($j),start_time:xj.iso()}).min(1).required()};function Vj(e){return qj.validateBySchema(e,YS.object(xL))}a(Vj,"addUpdateNodeValidator");function $j(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a($j,"checkForFalsy");qL.exports={addUpdateNodeValidator:Vj,validation_schema:xL}});var FL=g((Gfe,GL)=>{var Yj=Xe(),Kj={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};GL.exports=function(e){return Yj.validateObject(e,Kj)}});var Dd=g((Ffe,kL)=>{"use strict";var Wj=M().OPERATIONS_ENUM,KS=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=Wj.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};kL.exports=KS});var $L=g((Vfe,VL)=>{"use strict";var Qj={OPERATION:"operation",REFRESH:"refresh"},WS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},QS=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};VL.exports={JWTTokens:WS,TOKEN_TYPE_ENUM:Qj,JWTRSAKeys:QS}});var Tu=g((Yfe,QL)=>{"use strict";var Su=require("jsonwebtoken"),zS=require("fs-extra"),JS=Q(),is=M(),{handleHDBError:Er,hdb_errors:zj}=se(),{HTTP_STATUS_CODES:hr,AUTHENTICATION_ERROR_MSGS:mr}=zj,pu=$(),YL=U_(),ZS=ss(),Jj=Lr().update,Xj=Dd(),jj=Rn(),{UserEventMsg:Zj}=Cs(),fi=ee();fi.initSync();var XS=require("path"),{JWTTokens:eZ,JWTRSAKeys:tZ,TOKEN_TYPE_ENUM:Ld}=$L(),rZ=fi.get(is.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?fi.get(is.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",sZ=fi.get(is.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?fi.get(is.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Md="RS256",jS;QL.exports={createTokens:nZ,validateOperationToken:oZ,refreshOperationToken:iZ,validateRefreshToken:WL};async function nZ(e){if(JS.isEmpty(e)||typeof e!="object")throw Er(new Error,mr.INVALID_AUTH_OBJECT,hr.BAD_REQUEST,void 0,void 0,!0);if(JS.isEmpty(e.username))throw Er(new Error,mr.USERNAME_REQUIRED,hr.BAD_REQUEST,void 0,void 0,!0);if(JS.isEmpty(e.password))throw Er(new Error,mr.PASSWORD_REQUIRED,hr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await ZS.findAndValidateUser(e.username,e.password),!t)throw Er(new Error,mr.INVALID_CREDENTIALS,hr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw pu.error(f),Er(new Error,mr.INVALID_CREDENTIALS,hr.UNAUTHORIZED,void 0,void 0,!0)}let r=await Ud(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await KL(i,r.private_key,r.passphrase),c=await Su.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:sZ,algorithm:Md,subject:Ld.REFRESH}),u=YL.hash(c),_=new Xj(is.SYSTEM_SCHEMA_NAME,is.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await Jj(_)}catch(f){pu.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw Er(new Error,mr.REFRESH_TOKEN_SAVE_FAILED,hr.INTERNAL_SERVER_ERROR);return jj.signalUserChange(new Zj(process.pid)),new eZ(o,c)}a(nZ,"createTokens");async function KL(e,t,r){return await Su.sign(e,{key:t,passphrase:r},{expiresIn:rZ,algorithm:Md,subject:Ld.OPERATION})}a(KL,"signOperationToken");async function Ud(){if(jS===void 0)try{let e=XS.join(fi.getHdbBasePath(),is.LICENSE_KEY_DIR_NAME,is.JWT_ENUM.JWT_PASSPHRASE_NAME),t=XS.join(fi.getHdbBasePath(),is.LICENSE_KEY_DIR_NAME,is.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=XS.join(fi.getHdbBasePath(),is.LICENSE_KEY_DIR_NAME,is.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await zS.readFile(e)).toString(),n=(await zS.readFile(t)).toString(),i=(await zS.readFile(r)).toString();jS=new tZ(i,n,s)}catch(e){throw pu.error(e),Er(new Error,mr.NO_ENCRYPTION_KEYS,hr.INTERNAL_SERVER_ERROR)}return jS}a(Ud,"getJWTRSAKeys");async function iZ(e){if(!e)throw Er(new Error,mr.INVALID_BODY,hr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Er(new Error,mr.REFRESH_TOKEN_REQUIRED,hr.BAD_REQUEST,void 0,void 0,!0);await WL(e.refresh_token);let t=await Ud(),r=await Su.decode(e.refresh_token);return{operation_token:await KL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(iZ,"refreshOperationToken");async function oZ(e){try{let t=await Ud(),r=await Su.verify(e,t.public_key,{algorithms:Md,subject:Ld.OPERATION});return await ZS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw pu.warn(t),t.name&&t.name==="TokenExpiredError"?Er(new Error,mr.TOKEN_EXPIRED,hr.FORBIDDEN):Er(new Error,mr.INVALID_TOKEN,hr.UNAUTHORIZED)}}a(oZ,"validateOperationToken");async function WL(e){let t;try{let r=await Ud(),s=await Su.verify(e,r.public_key,{algorithms:Md,subject:Ld.REFRESH});t=await ZS.findAndValidateUser(s.username,void 0,!1)}catch(r){throw pu.warn(r),r.name&&r.name==="TokenExpiredError"?Er(new Error,mr.TOKEN_EXPIRED,hr.FORBIDDEN):Er(new Error,mr.INVALID_TOKEN,hr.UNAUTHORIZED)}if(!YL.validate(t.refresh_token,e))throw Er(new Error,mr.INVALID_TOKEN,hr.UNAUTHORIZED);return t}a(WL,"validateRefreshToken")});var eT=g((Qfe,XL)=>{"use strict";var aZ=FL(),Ea=require("passport"),cZ=require("passport-local").Strategy,uZ=require("passport-http").BasicStrategy,lZ=require("util"),_Z=ss(),JL=lZ.callbackify(_Z.findAndValidateUser),Wfe=yr(),dZ=M(),zL=Tu();Ea.use(new cZ(function(e,t,r){JL(e,t,r)}));Ea.use(new uZ(function(e,t,r){JL(e,t,r)}));Ea.serializeUser(function(e,t){t(null,e)});Ea.deserializeUser(function(e,t){t(null,e)});function fZ(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":Ea.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===dZ.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?zL.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):zL.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Ea.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(fZ,"authorize");function EZ(e,t){let r=aZ(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(EZ,"checkPermissions");XL.exports={authorize:fZ,checkPermissions:EZ}});var Ei=g((Jfe,jL)=>{"use strict";var tT=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},rT=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};jL.exports={Node:tT,NodeSubscription:rT}});var eM=g((jfe,ZL)=>{"use strict";var hZ=M().OPERATIONS_ENUM,sT=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=hZ.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};ZL.exports=sT});var gu=g((eEe,tM)=>{"use strict";var nT=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},iT=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};tM.exports={RemotePayloadObject:nT,RemotePayloadSubscription:iT}});var sM=g((rEe,rM)=>{"use strict";var oT=class{static{a(this,"TableSizeObject")}constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};rM.exports=oT});var oM=g((aEe,iM)=>{"use strict";var mZ=sM(),nEe=dt(),nM=We(),pZ=$(),{getSchemaPath:iEe,getTransactionAuditStorePath:oEe}=Je(),{getDatabases:SZ}=(Ae(),ne(Ge));iM.exports=TZ;async function TZ(e){let t=new mZ;try{let r=SZ()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await nM.environmentDataSize(schema_path,e.name),o=await nM.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){pZ.warn(`unable to stat table dbi due to ${r}`)}return t}a(TZ,"lmdbGetTableSize")});var cM=g((uEe,aM)=>{"use strict";var aT=class{static{a(this,"SystemInformationObject")}constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};aM.exports=aT});var ha=g((EEe,fM)=>{"use strict";var gZ=require("fs-extra"),RZ=require("path"),Jt=require("systeminformation"),hi=$(),uM=st(),_Ee=Fe(),vd=M(),AZ=oM(),dM=ei(),{getThreadInfo:lM}=Ke(),pT=ee();pT.initSync();var OZ=cM(),{openEnvironment:dEe}=We(),{getSchemaPath:fEe}=Je(),{database:bZ}=(Ae(),ne(Ge)),Pd;fM.exports={getHDBProcessInfo:_T,getNetworkInfo:fT,getDiskInfo:dT,getMemoryInfo:lT,getCPUInfo:uT,getTimeInfo:cT,getSystemInformation:ET,systemInformation:NZ,getTableSize:hT,getMetrics:mT};function cT(){return Jt.time()}a(cT,"getTimeInfo");async function uT(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Jt.cpu();l.cpu_speed=await Jt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:T,...b}=await Jt.currentLoad();return b.cpus=[],T.forEach(R=>{let{raw_load:L,raw_load_idle:H,raw_load_irq:P,raw_load_nice:k,raw_load_system:B,raw_load_user:J,...z}=R;b.cpus.push(z)}),l.current_load=b,l}catch(e){return hi.error(`error in getCPUInfo: ${e}`),{}}}a(uT,"getCPUInfo");async function lT(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Jt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return hi.error(`error in getMemoryInfo: ${e}`),{}}}a(lT,"getMemoryInfo");async function _T(){let e={core:[],clustering:[]};try{let t=await Jt.processes(),r;try{r=Number.parseInt(await gZ.readFile(RZ.join(pT.get(vd.CONFIG_PARAMS.ROOTPATH),vd.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===vd.NODE_ERROR_CODES.ENOENT)hi.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return hi.error(`error in getHDBProcessInfo: ${t}`),e}}a(_T,"getHDBProcessInfo");async function dT(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Jt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Jt.fsStats();return e.read_write=_,e.size=await Jt.fsSize(),e}catch(t){return hi.error(`error in getDiskInfo: ${t}`),e}}a(dT,"getDiskInfo");async function fT(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Jt.networkInterfaceDefault(),e.latency=await Jt.inetChecksite("google.com"),(await Jt.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=s;e.interfaces.push(f)}),(await Jt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return hi.error(`error in getNetworkInfo: ${t}`),e}}a(fT,"getNetworkInfo");async function ET(){if(Pd!==void 0)return Pd;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Jt.osInfo();e=c;let u=await Jt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,Pd=e,Pd}catch(t){return hi.error(`error in getSystemInformation: ${t}`),e}}a(ET,"getSystemInformation");async function hT(){let e=[],t=await dM.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await AZ(s));return e}a(hT,"getTableSize");async function mT(){let e=await dM.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=bZ({database:r,table:n}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[u,_,l]=c.trim().split(" ");return{pid:u,thread:_,txnid:l}}),s[n]=o}catch(i){hi.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(mT,"getMetrics");async function _M(){if(pT.get(vd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await uM.getNATSReferences(),t=await uM.listStreams(),r=[];for(let s of t){let n=[],i=await e.consumers.list(s.config.name);for await(let c of i)n.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:s.config.name,database:s.config.subjects[0].split(".")[1],table:s.config.subjects[0].split(".")[2],state:s.state,consumers:n};r.push(o)}return r}}a(_M,"getNatsStreamInfo");async function NZ(e){let t=new OZ;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await ET(),t.time=cT(),t.cpu=await uT(),t.memory=await lT(),t.disk=await dT(),t.network=await fT(),t.harperdb_processes=await _T(),t.table_size=await hT(),t.metrics=await mT(),t.threads=await lM(),t.replication=await _M(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await ET();break;case"time":t.time=cT();break;case"cpu":t.cpu=await uT();break;case"memory":t.memory=await lT();break;case"disk":t.disk=await dT();break;case"network":t.network=await fT();break;case"harperdb_processes":t.harperdb_processes=await _T();break;case"table_size":t.table_size=await hT();break;case"database_metrics":case"metrics":t.metrics=await mT();break;case"threads":t.threads=await lM();break;case"replication":t.replication=await _M();break;default:break}return t}a(NZ,"systemInformation")});var Hd=g((mEe,EM)=>{"use strict";EM.exports={version:yZ,printVersion:wZ};var Bd=eu();function yZ(){if(Bd)return Bd.version}a(yZ,"version");function wZ(){Bd&&console.log(`HarperDB Version ${Bd.version}`)}a(wZ,"printVersion")});var os=g((gEe,SM)=>{"use strict";var IZ=Lr(),ST=Q(),CZ=require("util"),_o=M(),hM=ee();hM.initSync();var DZ=eT(),mM=Dr(),{Node:SEe,NodeSubscription:TEe}=Ei(),LZ=ra(),MZ=eM(),{RemotePayloadObject:UZ,RemotePayloadSubscription:PZ}=gu(),{handleHDBError:vZ,hdb_errors:BZ}=se(),{HTTP_STATUS_CODES:HZ,HDB_ERROR_MSGS:xZ}=BZ,qZ=Zs(),GZ=ha(),FZ=Hd(),{getDatabases:kZ}=(Ae(),ne(Ge)),VZ=CZ.promisify(DZ.authorize),$Z=mM.searchByHash,YZ=mM.searchByValue;SM.exports={authHeaderToUser:KZ,isEmpty:WZ,getNodeRecord:QZ,upsertNodeRecord:zZ,buildNodePayloads:JZ,checkClusteringEnabled:XZ,getAllNodeRecords:jZ,getSystemInfo:ZZ,reverseSubscription:pM};async function KZ(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await VZ(t,null),e}a(KZ,"authHeaderToUser");function WZ(e){return e==null}a(WZ,"isEmpty");async function QZ(e){let t=new LZ(_o.SYSTEM_SCHEMA_NAME,_o.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return $Z(t)}a(QZ,"getNodeRecord");async function zZ(e){let t=new MZ(_o.SYSTEM_SCHEMA_NAME,_o.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return IZ.upsert(t)}a(zZ,"upsertNodeRecord");function pM(e){if(ST.isEmpty(e.subscribe)||ST.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(pM,"reverseSubscription");function JZ(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=ST.getTableHashAttribute(u,_),{subscribe:d,publish:f}=pM(c),E=kZ()[u]?.[_],h=new PZ(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new UZ(r,t,n,s)}a(JZ,"buildNodePayloads");function XZ(){if(!hM.get(_o.CONFIG_PARAMS.CLUSTERING_ENABLED))throw vZ(new Error,xZ.CLUSTERING_NOT_ENABLED,HZ.BAD_REQUEST,void 0,void 0,!0)}a(XZ,"checkClusteringEnabled");async function jZ(){let e=new qZ(_o.SYSTEM_SCHEMA_NAME,_o.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await YZ(e))}a(jZ,"getAllNodeRecords");async function ZZ(){let e=await GZ.getSystemInformation();return{hdb_version:FZ.version(),node_version:e.node_version,platform:e.platform}}a(ZZ,"getSystemInfo")});var TT=g((AEe,yM)=>{"use strict";var xd=st(),TM=Q(),gM=Fe(),RM=M(),qd=$(),AM=fu(),e5=Z_(),{RemotePayloadObject:t5}=gu(),{handleHDBError:OM,hdb_errors:r5}=se(),{HTTP_STATUS_CODES:bM}=r5,{NodeSubscription:NM}=Ei();yM.exports=s5;async function s5(e,t){let r;try{r=await xd.request(`${t}.${gM.REQUEST_SUFFIX}`,new t5(RM.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),qd.trace("Response from remote describe all request:",r)}catch(o){qd.error(`addNode received error from describe all request to remote node: ${o}`);let c=xd.requestErrorHandler(o,"add_node",t);throw OM(new Error,c,bM.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===gM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw OM(new Error,o,bM.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{table:c}=o,u=o.database??o.schema??"data";if(u===RM.SYSTEM_SCHEMA_NAME){await xd.createLocalTableStream(u,c);let h=new NM(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=TM.doesSchemaExist(u),l=s[u]!==void 0,d=c?TM.doesTableExist(u,c):!0,f=c?s?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(qd.trace(`addNode creating schema: ${u}`),await AM.createSchema({operation:"create_schema",schema:u})),!d&&f){qd.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(s[u][c].attributes)}`);let h=new e5(u,c,s[u][c].hash_attribute);s[u][c].attributes&&(h.attributes=s[u][c].attributes),await AM.createTable(h)}await xd.createLocalTableStream(u,c);let E=new NM(u,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(s5,"reviewSubscriptions")});var Vd=g((bEe,CM)=>{"use strict";var{handleHDBError:Gd,hdb_errors:n5}=se(),{HTTP_STATUS_CODES:Fd}=n5,{addUpdateNodeValidator:i5}=Cd(),kd=$(),IM=M(),wM=Fe(),o5=Q(),Ru=st(),Au=os(),a5=ee(),c5=TT(),{Node:u5,NodeSubscription:l5}=Ei(),{broadcast:_5}=Ke(),d5="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",f5="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",E5=a5.get(IM.CONFIG_PARAMS.CLUSTERING_NODENAME);CM.exports=h5;async function h5(e,t=!1){kd.trace("addNode called with:",e),Au.checkClusteringEnabled();let r=i5(e);if(r)throw Gd(r,r.message,Fd.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Au.getNodeRecord(s);if(!o5.isEmptyOrZeroLength(d))throw Gd(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,Fd.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await c5(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=d5,o;let c=Au.buildNodePayloads(n,E5,IM.OPERATIONS_ENUM.ADD_NODE,await Au.getSystemInfo()),u=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];n[d].start_time===void 0&&delete n[d].start_time,u.push(new l5(E.schema,E.table,E.publish,E.subscribe))}kd.trace("addNode sending remote payload:",c);let _;try{_=await Ru.request(`${s}.${wM.REQUEST_SUFFIX}`,c)}catch(d){kd.error(`addNode received error from request: ${d}`);for(let E=0,h=n.length;E<h;E++){let p=n[E];p.publish=!1,p.subscribe=!1,await Ru.updateRemoteConsumer(p,s)}let f=Ru.requestErrorHandler(d,"add_node",s);throw Gd(new Error,f,Fd.INTERNAL_SERVER_ERROR,"error",f)}if(_.status===wM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${_.message}`;throw Gd(new Error,d,Fd.INTERNAL_SERVER_ERROR,"error",d)}kd.trace(_);for(let d=0,f=n.length;d<f;d++){let E=n[d];await Ru.updateRemoteConsumer(E,s),E.subscribe===!0&&await Ru.updateConsumerIterator(E.schema,E.table,s,"start")}let l=new u5(s,u,_.system_info);return await Au.upsertNodeRecord(l),_5({type:"nats_update"}),i.length>0?o.message=f5:o.message=`Successfully added '${s}' to manifest`,o}a(h5,"addNode")});var AT=g((wEe,MM)=>{"use strict";var{handleHDBError:gT,hdb_errors:m5}=se(),{HTTP_STATUS_CODES:RT}=m5,{addUpdateNodeValidator:p5}=Cd(),Ou=$(),LM=M(),DM=Fe(),yEe=Q(),bu=st(),Nu=os(),S5=ee(),{cloneDeep:T5}=require("lodash"),g5=TT(),{Node:R5,NodeSubscription:A5}=Ei(),{broadcast:O5}=Ke(),b5="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",N5="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",y5=S5.get(LM.CONFIG_PARAMS.CLUSTERING_NODENAME);MM.exports=w5;async function w5(e){Ou.trace("updateNode called with:",e),Nu.checkClusteringEnabled();let t=p5(e);if(t)throw gT(t,t.message,RT.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s,n=await Nu.getNodeRecord(r);n.length>0&&(s=T5(n));let{added:i,skipped:o}=await g5(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=b5,c;let u=Nu.buildNodePayloads(i,y5,LM.OPERATIONS_ENUM.UPDATE_NODE,await Nu.getSystemInfo());for(let l=0,d=i.length;l<d;l++){let f=i[l];Ou.trace(`updateNode updating work stream for node: ${r} subscription:`,f),i[l].start_time===void 0&&delete i[l].start_time}Ou.trace("updateNode sending remote payload:",u);let _;try{_=await bu.request(`${r}.${DM.REQUEST_SUFFIX}`,u)}catch(l){Ou.error(`updateNode received error from request: ${l}`);let d=bu.requestErrorHandler(l,"update_node",r);throw gT(new Error,d,RT.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===DM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw gT(new Error,l,RT.INTERNAL_SERVER_ERROR,"error",l)}Ou.trace(_);for(let l=0,d=i.length;l<d;l++){let f=i[l];await bu.updateRemoteConsumer(f,r),f.subscribe===!0?await bu.updateConsumerIterator(f.schema,f.table,r,"start"):await bu.updateConsumerIterator(f.schema,f.table,r,"stop")}return s||(s=[new R5(r,[],_.system_info)]),await I5(s[0],i,_.system_info),o.length>0?c.message=N5:c.message=`Successfully updated '${r}'`,c}a(w5,"updateNode");async function I5(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=s.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new A5(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Nu.upsertNodeRecord(s),O5({type:"nats_update"})}a(I5,"updateNodeTable")});var HM=g((CEe,BM)=>{"use strict";var vM=require("joi"),{string:UM}=vM.types(),C5=Xe(),PM=M(),D5=ee(),L5=Fe();BM.exports=M5;function M5(e){let t=UM.invalid(D5.get(PM.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(L5.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=vM.object({operation:UM.valid(PM.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return C5.validateBySchema(e,r)}a(M5,"removeNodeValidator")});var Yd=g((LEe,kM)=>{"use strict";var{handleHDBError:xM,hdb_errors:U5}=se(),{HTTP_STATUS_CODES:qM}=U5,P5=HM(),yu=$(),GM=os(),v5=Q(),$d=M(),FM=Fe(),OT=st(),B5=ee(),{RemotePayloadObject:H5}=gu(),{NodeSubscription:x5}=Ei(),q5=sa(),G5=si(),{broadcast:F5}=Ke(),k5=B5.get($d.CONFIG_PARAMS.CLUSTERING_NODENAME);kM.exports=V5;async function V5(e){yu.trace("removeNode called with:",e),GM.checkClusteringEnabled();let t=P5(e);if(t)throw xM(t,t.message,qM.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await GM.getNodeRecord(r);if(v5.isEmptyOrZeroLength(s))throw xM(new Error,`Node '${r}' was not found.`,qM.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new H5($d.OPERATIONS_ENUM.REMOVE_NODE,k5,[]),i,o=!1;for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];l.subscribe===!0&&await OT.updateConsumerIterator(l.schema,l.table,r,"stop");try{await OT.updateRemoteConsumer(new x5(l.schema,l.table,!1,!1),r)}catch(d){yu.error(d)}}try{i=await OT.request(`${r}.${FM.REQUEST_SUFFIX}`,n),yu.trace("Remove node reply from remote node:",r,i)}catch(u){yu.error("removeNode received error from request:",u),o=!0}let c=new q5($d.SYSTEM_SCHEMA_NAME,$d.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await G5.deleteRecord(c),F5({type:"nats_update"}),i?.status===FM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(yu.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(V5,"removeNode")});var YM=g((UEe,$M)=>{"use strict";var VM=require("joi"),{string:$5,array:Y5}=VM.types(),K5=Xe(),W5=Cd();$M.exports=Q5;function Q5(e){let t=VM.object({operation:$5.valid("configure_cluster").required(),connections:Y5.items(W5.validation_schema).required()});return K5.validateBySchema(e,t)}a(Q5,"configureClusterValidator")});var bT=g((vEe,JM)=>{"use strict";var z5=M(),Kd=$(),J5=Q(),X5=Yd(),j5=Vd(),KM=os(),Z5=YM(),{handleHDBError:WM,hdb_errors:e8}=se(),{HTTP_STATUS_CODES:QM}=e8,t8="Configure cluster complete.",r8="Failed to configure the cluster. Check the logs for more details.",s8="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";JM.exports=n8;async function n8(e){Kd.trace("configure cluster called with:",e),KM.checkClusteringEnabled();let t=Z5(e);if(t)throw WM(t,t.message,QM.BAD_REQUEST,void 0,void 0,!0);let r=await KM.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(zM(X5,{operation:z5.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);Kd.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(zM(j5,E,E.node_name))}let c=await Promise.allSettled(i);Kd.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=n.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(Kd.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(J5.isEmptyOrZeroLength(u))return{message:t8,connections:_};if(l)return{message:s8,failed_nodes:u,connections:_};throw WM(new Error,r8,QM.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(n8,"configureCluster");async function zM(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(zM,"functionWrapper")});var jM=g((HEe,XM)=>{"use strict";var Wd=require("joi"),i8=Xe(),{validateSchemaExists:o8,validateTableExists:a8,validateSchemaName:c8}=Qs(),u8=Wd.object({operation:Wd.string().valid("purge_stream"),schema:Wd.string().custom(o8).custom(c8).required(),table:Wd.string().custom(a8).required()});function l8(e){return i8.validateBySchema(e,u8)}a(l8,"purgeStreamValidator");XM.exports=l8});var NT=g((qEe,ZM)=>{"use strict";var{handleHDBError:_8,hdb_errors:d8}=se(),{HTTP_STATUS_CODES:f8}=d8,E8=jM(),h8=st(),m8=os();ZM.exports=p8;async function p8(e){if(e.purge_ingest!==!0){let n=E8(e);if(n)throw _8(n,n.message,f8.BAD_REQUEST,void 0,void 0,!0)}m8.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:s}=e;return await h8.purgeTableStream(t,r,s),s?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(p8,"purgeStream")});var IT=g((FEe,iU)=>{"use strict";var wT=os(),S8=st(),rU=ee(),Qd=M(),fo=Fe(),T8=Q(),yT=$(),{RemotePayloadObject:g8}=gu(),{ErrorCode:eU}=require("nats"),tU=rU.get(Qd.CONFIG_PARAMS.CLUSTERING_ENABLED),sU=rU.get(Qd.CONFIG_PARAMS.CLUSTERING_NODENAME);iU.exports={clusterStatus:R8,buildNodeStatus:nU};async function R8(){let e={node_name:sU,is_enabled:tU,connections:[]};if(!tU)return e;let t=await wT.getAllNodeRecords();if(T8.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(nU(t[s],e.connections));return await Promise.allSettled(r),e}a(R8,"clusterStatus");async function nU(e,t){let r=e.name,s=new g8(Qd.OPERATIONS_ENUM.CLUSTER_STATUS,sU,void 0,await wT.getSystemInfo()),n,i,o=fo.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await S8.request(fo.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===fo.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=fo.CLUSTER_STATUS_STATUSES.CLOSED,yT.error(`Error getting node status from ${r} `,n))}catch(u){yT.warn(`Error getting node status from ${r}`,u),u.code===eU.NoResponders?o=fo.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===eU.Timeout?o=fo.CLUSTER_STATUS_STATUSES.TIMEOUT:o=fo.CLUSTER_STATUS_STATUSES.CLOSED}let c=new A8(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==Qd.PRE_4_0_0_VERSION&&await wT.upsertNodeRecord(u)}catch(u){yT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(nU,"buildNodeStatus");function A8(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(A8,"NodeStatusObject")});var DT=g((VEe,oU)=>{"use strict";var{handleHDBError:O8,hdb_errors:b8}=se(),{HTTP_STATUS_CODES:N8}=b8,y8=st(),w8=os(),CT=Q(),zd=require("joi"),I8=Xe(),C8=2e3,D8=zd.object({timeout:zd.number().min(1),connected_nodes:zd.boolean(),routes:zd.boolean()});oU.exports=L8;async function L8(e){w8.checkClusteringEnabled();let t=I8.validateBySchema(e,D8);if(t)throw O8(t,t.message,N8.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||CT.autoCastBoolean(s),o=n===void 0||CT.autoCastBoolean(n),c={nodes:[]},u=await y8.getServerList(r??C8),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:CT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(L8,"clusterNetwork")});var lU=g((YEe,uU)=>{"use strict";var LT=require("joi"),aU=Xe(),{route_constraints:cU}=Wm();uU.exports={setRoutesValidator:M8,deleteRoutesValidator:U8};function M8(e){let t=LT.object({server:LT.valid("hub","leaf").required(),routes:cU.required()});return aU.validateBySchema(e,t)}a(M8,"setRoutesValidator");function U8(e){let t=LT.object({routes:cU.required()});return aU.validateBySchema(e,t)}a(U8,"deleteRoutesValidator")});var UT=g((WEe,EU)=>{"use strict";var Eo=Pr(),MT=Q(),Jd=M(),_U=lU(),{handleHDBError:dU,hdb_errors:P8}=se(),{HTTP_STATUS_CODES:fU}=P8,v8="cluster routes successfully set",B8="cluster routes successfully deleted";EU.exports={setRoutes:H8,getRoutes:x8,deleteRoutes:q8};function H8(e){let t=_U.setRoutesValidator(e);if(t)throw dU(t,t.message,fU.BAD_REQUEST,void 0,void 0,!0);let r=Eo.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=MT.autoCast(_.port);let l=s.some(f=>f.host===_.host&&f.port===_.port),d=n.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(s.push(_),o.push(_))}return e.server==="hub"?Eo.updateConfigValue(Jd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Eo.updateConfigValue(Jd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:v8,set:o,skipped:i}}a(H8,"setRoutes");function x8(){let e=Eo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(x8,"getRoutes");function q8(e){let t=_U.deleteRoutesValidator(e);if(t)throw dU(t,t.message,fU.BAD_REQUEST,void 0,void 0,!0);let r=Eo.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],f=!1;for(let E=0,h=s.length;E<h;E++){let p=s[E];if(d.host===p.host&&d.port===p.port){s.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=n.length;h<p;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(s=MT.isEmptyOrZeroLength(s)?null:s,Eo.updateConfigValue(Jd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=MT.isEmptyOrZeroLength(n)?null:n,Eo.updateConfigValue(Jd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:B8,deleted:i,skipped:o}}a(q8,"deleteRoutes")});var mU=g((zEe,hU)=>{"use strict";var wu=require("alasql"),ho=require("recursive-iterator"),Bs=$(),G8=Q(),Iu=M(),PT=class{static{a(this,"sql_statement_bucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,k8(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>Iu.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!Iu.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Iu.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=F8(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!Iu.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new wu.yy.Column({columnid:_});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function F8(e){return e.filter(t=>t[Iu.PERMS_CRUD_ENUM.READ])}a(F8,"filterReadRestrictedAttrs");function k8(e,t,r,s,n){V8(e,t,r,s,n)}a(k8,"interpretAST");function Cu(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(Cu,"addSchemaTableToMap");function V8(e,t,r,s,n){if(!e){Bs.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof wu.yy.Insert?W8(e,t,r):e instanceof wu.yy.Select?$8(e,t,r,s,n):e instanceof wu.yy.Update?Y8(e,t,r):e instanceof wu.yy.Delete?K8(e,t,r):Bs.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(V8,"getRecordAttributesAST");function $8(e,t,r,s,n){if(!e){Bs.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(G8.isEmptyOrZeroLength(i)){Bs.error("No schema specified");return}e.from.forEach(c=>{Cu(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Cu(c.table,t,r,s,n)});let o=new ho(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Bs.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new ho(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Bs.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new ho(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=n.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Bs.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new ho(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Bs.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a($8,"getSelectAttributes");function Y8(e,t,r){if(!e){Bs.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new ho(e.columns),n=e.table.databaseid;Cu(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&vT(e.table.tableid,n,i.columnid,t,r)}a(Y8,"getUpdateAttributes");function K8(e,t,r){if(!e){Bs.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new ho(e.where),n=e.table.databaseid;Cu(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&vT(e.table.tableid,n,i.columnid,t,r)}a(K8,"getDeleteAttributes");function W8(e,t,r){if(!e){Bs.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new ho(e.columns),n=e.into.databaseid;Cu(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&vT(e.into.tableid,n,i.columnid,t,r)}a(W8,"getInsertAttributes");function vT(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(vT,"pushAttribute");hU.exports=PT});var xT=g((XEe,gU)=>{var Xd=Ji(),pU=require("chalk"),Gr=$(),SU=require("prompt"),{promisify:Q8}=require("util"),BT=M(),z8=require("fs-extra"),J8=require("path"),X8=Q(),j8=Hd(),TU=ee();TU.initSync();var Z8=require("moment"),e6=Q8(SU.get),t6=J8.join(TU.getHdbBasePath(),BT.LICENSE_KEY_DIR_NAME,BT.LICENSE_FILE_NAME,BT.LICENSE_FILE_NAME);gU.exports={getFingerprint:s6,setLicense:r6,parseLicense:HT,register:n6,getRegistrationInfo:o6};async function r6(e){if(e&&e.key&&e.company){try{Gr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await HT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Gr.error(r),Gr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(r6,"setLicense");async function s6(){let e={};try{e=await Xd.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Gr.error(r),Gr.error(t),new Error(r)}return e}a(s6,"getFingerprint");async function HT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Gr.info("Validating license input...");let r=Xd.validateLicense(e,t);if(Gr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Gr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Gr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Gr.info("writing license to disk"),await z8.writeFile(t6,JSON.stringify({license_key:e,company:t}))}catch(s){throw Gr.error("Failed to write License"),s}return"Registration successful."}a(HT,"parseLicense");async function n6(){let e=await i6();return HT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(n6,"register");async function i6(){let e=await Xd.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:pU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:pU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{SU.start()}catch(s){Gr.error(s)}let r;try{r=await e6(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(i6,"promptForRegistration");async function o6(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Xd.getLicense()}catch(r){throw Gr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(X8.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=j8.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Z8.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(o6,"getRegistrationInfo")});var AU=g((ZEe,RU)=>{"use strict";var a6=Fe(),qT=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+a6.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};RU.exports=qT});var NU=g((the,bU)=>{"use strict";var OU=Fe(),GT=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+OU.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+OU.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:l,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};bU.exports=GT});var wU=g((she,yU)=>{"use strict";var FT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};yU.exports=FT});var CU=g((ihe,IU)=>{"use strict";var c6=Fe(),kT=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+c6.SERVER_SUFFIX.ADMIN,this.password=r}};IU.exports=kT});var YT=g((ahe,MU)=>{"use strict";var ma=require("path"),ef=require("fs-extra"),u6=AU(),l6=NU(),_6=wU(),d6=CU(),VT=ss(),Sa=Q(),pr=Pr(),Zd=M(),Du=Fe(),{CONFIG_PARAMS:_t}=Zd,Lu=$(),Mu=ee(),DU=Tn(),$T=st(),pa="clustering",f6=1e4,LU=5;MU.exports={generateNatsConfig:h6,removeNatsConfig:m6,getHubConfigPath:E6};function E6(){let e=Mu.get(_t.ROOTPATH);return ma.join(e,pa,Du.NATS_CONFIG_FILES.HUB_SERVER)}a(E6,"getHubConfigPath");async function h6(e=!1,t=void 0){Mu.initSync();let r=Mu.get(_t.ROOTPATH),s=ma.join(r,pa,Du.PID_FILES.HUB),n=ma.join(r,pa,Du.PID_FILES.LEAF),i=pr.getConfigFromFile(_t.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=ma.join(r,pa,Du.NATS_CONFIG_FILES.HUB_SERVER),c=ma.join(r,pa,Du.NATS_CONFIG_FILES.LEAF_SERVER),u=pr.getConfigFromFile(_t.CLUSTERING_TLS_CERTIFICATE),_=pr.getConfigFromFile(_t.CLUSTERING_TLS_PRIVATEKEY),l=pr.getConfigFromFile(_t.CLUSTERING_TLS_CERT_AUTH),d=pr.getConfigFromFile(_t.CLUSTERING_TLS_INSECURE),f=pr.getConfigFromFile(_t.CLUSTERING_TLS_VERIFY),E=pr.getConfigFromFile(_t.CLUSTERING_NODENAME),h=pr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await $T.checkNATSServerInstalled()||tf("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await VT.listUsers(),S=pr.getConfigFromFile(_t.CLUSTERING_USER),T=await VT.getClusterUser();(Sa.isEmpty(T)||T.active!==!0)&&tf(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await jd(_t.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await jd(_t.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await jd(_t.CLUSTERING_HUBSERVER_NETWORK_PORT),await jd(_t.CLUSTERING_LEAFSERVER_NETWORK_PORT));let b=[],R=[];for(let[z,X]of p.entries())X.role.role===Zd.ROLE_TYPES_ENUM.CLUSTER_USER&&X.active&&(b.push(new d6(X.username,DU.decrypt(X.hash))),R.push(new _6(X.username,DU.decrypt(X.hash))));let L=[],{hub_routes:H}=pr.getClusteringRoutes();if(!Sa.isEmptyOrZeroLength(H))for(let z of H)L.push(`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@${z.host}:${z.port}`);let P=new u6(pr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,pr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_CLUSTER_NAME),pr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),L,b,R);l==null&&(delete P.tls.ca_file,delete P.leafnodes.tls.ca_file),t=Sa.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Zd.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await ef.writeJson(o,P),Lu.trace(`Hub server config written to ${o}`));let k=`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,B=`tls://${T.uri_encoded_name}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,J=new l6(pr.getConfigFromFile(_t.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[k],[B],b,R,u,_,l,d);l==null&&delete J.tls.ca_file,(t===void 0||t===Zd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await ef.writeJson(c,J),Lu.trace(`Leaf server config written to ${c}`))}a(h6,"generateNatsConfig");async function jd(e){let t=Mu.get(e);return Sa.isEmpty(t)&&tf(`port undefined for '${e}'`),await Sa.isPortTaken(t)&&tf(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(jd,"isPortAvailable");function tf(e){let t=`Error generating clustering config: ${e}`;Lu.error(t),console.error(t),process.exit(1)}a(tf,"generateNatsConfigError");async function m6(e){let{port:t,config_file:r}=$T.getServerConfig(e),{username:s,decrypt_hash:n}=await VT.getClusterUser(),i=0,o=2e3;for(;i<LU;){try{let _=await $T.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Lu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=LU)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);await Sa.async_set_timeout(o*(i*2))}let c="0".repeat(f6),u=ma.join(Mu.get(_t.ROOTPATH),pa,r);await ef.writeFile(u,c),await ef.remove(u),Lu.notify(e,"started.")}a(m6,"removeNatsConfig")});var xU=g((uhe,HU)=>{"use strict";var Fr=ee(),p6=Ji(),he=M(),Uu=Fe(),yn=require("path"),{PACKAGE_ROOT:sf}=M(),UU=ee(),rf=Q(),Ta="/dev/null",S6=yn.join(sf,"launchServiceScripts"),PU=yn.join(sf,"utility/scripts"),T6=yn.join(PU,he.HDB_RESTART_SCRIPT),vU=yn.resolve(sf,"dependencies",`${process.platform}-${process.arch}`,Uu.NATS_BINARY_NAME);function BU(){let t=p6.licenseSearch().ram_allocation||he.RAM_ALLOCATION_ENUM.DEFAULT,r=he.MEM_SETTING_KEY+t,s={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return rf.noBootFile()&&(s[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=rf.getEnvCliRootPath()),{name:he.PROCESS_DESCRIPTORS.HDB,script:he.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:sf}}a(BU,"generateMainServerConfig");var g6=9930;function R6(){Fr.initSync(!0);let e=Fr.get(he.CONFIG_PARAMS.ROOTPATH),t=yn.join(e,"clustering",Uu.NATS_CONFIG_FILES.HUB_SERVER),r=yn.join(Fr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),s=UU.get(he.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Uu.LOG_LEVEL_FLAGS[Fr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==g6?"-"+s:""),script:vU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Fr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Ta,i.error_file=Ta),i}a(R6,"generateNatsHubServerConfig");var A6=9940;function O6(){Fr.initSync(!0);let e=Fr.get(he.CONFIG_PARAMS.ROOTPATH),t=yn.join(e,"clustering",Uu.NATS_CONFIG_FILES.LEAF_SERVER),r=yn.join(Fr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),s=UU.get(he.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Uu.LOG_LEVEL_FLAGS[Fr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==A6?"-"+s:""),script:vU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Fr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Ta,i.error_file=Ta),i}a(O6,"generateNatsLeafServerConfig");function b6(){Fr.initSync();let e=yn.join(Fr.get(he.CONFIG_PARAMS.LOGGING_ROOT),he.LOG_NAMES.HDB),t={name:he.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:he.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:S6,autorestart:!1};return Fr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Ta,t.error_file=Ta),t}a(b6,"generateClusteringUpgradeV4ServiceConfig");function N6(){let e={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.RESTART_HDB};return rf.noBootFile()&&(e[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=rf.getEnvCliRootPath()),{...{name:he.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:PU},script:T6}}a(N6,"generateRestart");function y6(){return{apps:[BU()]}}a(y6,"generateAllServiceConfigs");HU.exports={generateAllServiceConfigs:y6,generateMainServerConfig:BU,generateRestart:N6,generateNatsHubServerConfig:R6,generateNatsLeafServerConfig:O6,generateClusteringUpgradeV4ServiceConfig:b6}});var jU=g((dhe,XU)=>{"use strict";var ve=M(),w6=Q(),In=YT(),nf=st(),wn=Fe(),mi=xU(),of=ee(),pi=$(),I6=os(),{startWorker:qU,onMessageFromWorkers:C6}=Ke(),D6=ha(),_he=require("util"),L6=require("child_process"),M6=require("fs"),{execFile:U6}=L6,ye;XU.exports={enterPM2Mode:P6,start:Si,stop:KT,reload:FU,restart:kU,list:WT,describe:$U,connect:Cn,kill:q6,startAllServices:G6,startService:QT,getUniqueServicesList:YU,restartAllServices:F6,isServiceRegistered:KU,reloadStopStart:WU,restartHdb:VU,deleteProcess:H6,startClusteringProcesses:zU,startClusteringThreads:JU,isHdbRestartRunning:x6,isClusteringRunning:V6,stopClustering:k6,reloadClustering:$6};var Pu=!1;C6(e=>{e.type==="restart"&&of.initSync(!0)});function P6(){Pu=!0}a(P6,"enterPM2Mode");function Cn(){return ye||(ye=require("pm2")),new Promise((e,t)=>{ye.connect((r,s)=>{pi.setupConsoleLogging(),r&&t(r),e(s)})})}a(Cn,"connect");var Sr,v6=10,GU;function Si(e,t=!1){if(Pu)return B6(e);let r=U6(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Sr.indexOf(r);o>-1&&Sr.splice(o,1),!GU&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<v6&&(M6.existsSync(In.getHubConfigPath())?Si(e):(await In.generateNatsConfig(!0),Si(e),await new Promise(c=>setTimeout(c,3e3)),await In.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await In.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=of.get(ve.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&wn.LOG_LEVEL_HIERARCHY[o]>=wn.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===wn.LOG_LEVELS.ERR||l===wn.LOG_LEVELS.WRN?pi.OUTPUTS.STDERR:pi.OUTPUTS.STDOUT;pi.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=wn.LOG_LEVELS[f]}if(wn.LOG_LEVEL_HIERARCHY[o]>=wn.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===wn.LOG_LEVELS.ERR||l===wn.LOG_LEVELS.WRN?pi.OUTPUTS.STDERR:pi.OUTPUTS.STDOUT;pi.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),Sr=[],!Sr&&!t){let i=a(()=>{GU=!0,Sr&&(Sr.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}Sr.push(r)}a(Si,"start");function B6(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.start(e,(s,n)=>{s&&(ye.disconnect(),r(s)),ye.disconnect(),t(n)})})}a(B6,"startWithPM2");function KT(e){if(!Pu){for(let t of Sr||[])t.name===e&&(Sr.splice(Sr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.stop(e,async(s,n)=>{s&&(ye.disconnect(),r(s)),ye.delete(e,(i,o)=>{i&&(ye.disconnect(),r(s)),ye.disconnect(),t(o)})})})}a(KT,"stop");function FU(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.reload(e,(s,n)=>{s&&(ye.disconnect(),r(s)),ye.disconnect(),t(n)})})}a(FU,"reload");function kU(e){if(!Pu)for(let t of Sr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.restart(e,(s,n)=>{ye.disconnect(),t(n)})})}a(kU,"restart");function H6(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.delete(e,(s,n)=>{s&&(ye.disconnect(),r(s)),ye.disconnect(),t(n)})})}a(H6,"deleteProcess");async function VU(){await Si(mi.generateRestart())}a(VU,"restartHdb");async function x6(){let e=await WT();for(let t in e)if(e[t].name===ve.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(x6,"isHdbRestartRunning");function WT(){return new Promise(async(e,t)=>{try{await Cn()}catch(r){t(r)}ye.list((r,s)=>{r&&(ye.disconnect(),t(r)),ye.disconnect(),e(s)})})}a(WT,"list");function $U(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.describe(e,(s,n)=>{s&&(ye.disconnect(),r(s)),ye.disconnect(),t(n)})})}a($U,"describe");function q6(){if(!Pu){for(let e of Sr||[])e.kill();Sr=[];return}return new Promise(async(e,t)=>{try{await Cn()}catch(r){t(r)}ye.killDaemon((r,s)=>{r&&(ye.disconnect(),t(r)),ye.disconnect(),e(s)})})}a(q6,"kill");async function G6(){try{await zU(),await JU(),await Si(mi.generateAllServiceConfigs())}catch(e){throw ye?.disconnect(),e}}a(G6,"startAllServices");async function QT(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ve.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=mi.generateMainServerConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=mi.generateNatsIngestServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=mi.generateNatsReplyServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=mi.generateNatsHubServerConfig(),await Si(r,t),await In.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=mi.generateNatsLeafServerConfig(),await Si(r,t),await In.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=mi.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Si(r)}catch(r){throw ye?.disconnect(),r}}a(QT,"startService");async function YU(){try{let e=await WT(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw ye?.disconnect(),e}}a(YU,"getUniqueServicesList");async function F6(e=[]){try{let t=!1,r=await YU();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===ve.PROCESS_DESCRIPTORS.HDB?t=!0:await kU(o))}t&&await WU(ve.PROCESS_DESCRIPTORS.HDB)}catch(t){throw ye?.disconnect(),t}}a(F6,"restartAllServices");async function KU(e){if(Sr?.find(r=>r.name===e))return!0;let t=await D6.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(KU,"isServiceRegistered");async function WU(e){let t=of.get(ve.CONFIG_PARAMS.THREADS_COUNT)??of.get(ve.CONFIG_PARAMS.THREADS),r=await $U(e),s=w6.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await KT(e),await QT(e)):e===ve.PROCESS_DESCRIPTORS.HDB?await VU():await FU(e)}a(WU,"reloadStopStart");var QU;async function zU(e=!1){for(let t in ve.CLUSTERING_PROCESSES){let r=ve.CLUSTERING_PROCESSES[t];await QT(r,e)}}a(zU,"startClusteringProcesses");async function JU(){QU=qU(ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await nf.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await nf.updateLocalStreams();let e=await I6.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ve.PRE_4_0_0_VERSION){pi.info("Starting clustering upgrade 4.0.0 process"),qU(ve.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(JU,"startClusteringThreads");async function k6(){for(let e in ve.CLUSTERING_PROCESSES)if(e!==ve.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ve.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await QU.terminate();else{let t=ve.CLUSTERING_PROCESSES[e];await KT(t)}}a(k6,"stopClustering");async function V6(){for(let e in ve.CLUSTERING_PROCESSES){let t=ve.CLUSTERING_PROCESSES[e];if(await KU(t)===!1)return!1}return!0}a(V6,"isClusteringRunning");async function $6(){await In.generateNatsConfig(!0),await nf.reloadNATSHub(),await nf.reloadNATSLeaf(),await In.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await In.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a($6,"reloadClustering")});var _f=g((hhe,iP)=>{"use strict";var Y6=require("minimist"),{isMainThread:JT,parentPort:tP}=require("worker_threads"),nt=M(),{PROCESS_DESCRIPTORS_VALIDATE:vu}=nt,sn=$(),XT=Q(),cf=YT(),af=st(),Ehe=Fe(),rP=Pr(),nn=jU(),ZU=ha(),K6=Oh(),{restartWorkers:uf,onMessageByType:W6}=Ke(),{handleHDBError:Q6,hdb_errors:z6}=se(),{HTTP_STATUS_CODES:J6}=z6,lf=ee();lf.initSync();var Bu=`Restarting HarperDB. This may take up to ${nt.RESTART_TIMEOUT_MS/1e3} seconds.`,X6="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",eP="Clustering is not enabled so cannot be restarted",j6="Invalid service",ga,as;iP.exports={restart:sP,restartService:jT};JT&&W6(nt.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?jT({service:e.workerType}):sP({operation:"restart"})});async function sP(e){as=Object.keys(e).length===0,ga=await nn.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR);let t=Y6(process.argv);if(t.service){await jT(t);return}if(as&&!ga){console.error(X6);return}if(as&&console.log(Bu),ga){nn.enterPM2Mode(),sn.notify(Bu);let r=K6(Object.keys(nt.CONFIG_PARAM_MAP),!0);return XT.isEmptyOrZeroLength(Object.keys(r))||rP.updateConfigValue(void 0,void 0,r,!0,!0),Z6(),Bu}return JT?(sn.notify(Bu),setTimeout(()=>{uf()},50)):tP.postMessage({type:nt.ITC_EVENT_TYPES.RESTART}),Bu}a(sP,"restart");async function jT(e){let{service:t}=e;if(nt.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw Q6(new Error,j6,J6.BAD_REQUEST,void 0,void 0,!0);if(ga=await nn.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR),!JT)return tP.postMessage({type:nt.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case vu.clustering:if(!lf.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=eP;break}as&&console.log("Restarting clustering"),sn.notify("Restarting clustering"),await nP();break;case vu.clustering_config:case vu["clustering config"]:if(!lf.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=eP;break}as&&console.log("Restarting clustering_config"),sn.notify("Restarting clustering_config"),await nn.reloadClustering();break;case"custom_functions":case"custom functions":case vu.harperdb:case vu.http_workers:if(as&&!ga){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}as&&console.log("Restarting http_workers"),sn.notify("Restarting http_workers"),as?await nn.restart(nt.HDB_PROC_DESCRIPTOR):setTimeout(()=>{uf("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(sn.error(r),as&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(jT,"restartService");async function Z6(){await nP(),await nn.restart(nt.HDB_PROC_DESCRIPTOR),await XT.async_set_timeout(2e3),lf.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await zT(),as&&(await af.closeConnection(),process.exit(0))}a(Z6,"restartPM2Mode");async function nP(){if(!rP.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await ZU.getHDBProcessInfo()).clustering.length===0)sn.trace("Clustering not running, restart will start clustering services"),await cf.generateNatsConfig(!0),await nn.startClusteringProcesses(),await nn.startClusteringThreads(),await zT(),as&&await af.closeConnection();else{await cf.generateNatsConfig(!0),ga?(sn.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await nn.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await nn.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await ZU.getHDBProcessInfo()).clustering.forEach(n=>{sn.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await XT.async_set_timeout(3e3),await zT(),await af.updateLocalStreams(),as&&await af.closeConnection(),sn.trace("Restart clustering restarting ingest and reply service threads");let t=uf(nt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=uf(nt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(nP,"restartClustering");async function zT(){await cf.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await cf.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(zT,"removeNatsConfig")});var mP=g((She,hP)=>{"use strict";var phe=require("lodash"),Tr=M(),{handleHDBError:oP,hdb_errors:e9}=se(),{HDB_ERROR_MSGS:t9,HTTP_STATUS_CODES:r9}=e9,ZT=$();hP.exports={getRolePermissions:n9};var mo=Object.create(null),s9=a(e=>({key:e,perms:{}}),"perms_template_obj"),lP=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),_P=a((e=!1,t=!1,r=!1,s=!1)=>({[Tr.PERMS_CRUD_ENUM.READ]:e,[Tr.PERMS_CRUD_ENUM.INSERT]:t,[Tr.PERMS_CRUD_ENUM.UPDATE]:r,[Tr.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),eg=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,..._P(t,r,s,n)}),"table_perms_template"),aP=a((e,t=_P())=>({attribute_name:e,describe:EP(t),[Hu]:t[Hu],[tg]:t[tg],[rg]:t[rg]}),"attr_perms_template"),cP=a((e,t=!1)=>({attribute_name:e,describe:t,[Hu]:t}),"timestamp_attr_perms_template"),{READ:Hu,INSERT:tg,UPDATE:rg}=Tr.PERMS_CRUD_ENUM,dP=Object.values(Tr.PERMS_CRUD_ENUM),fP=[Hu,tg,rg];function n9(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[Tr.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(mo[t]&&mo[t].key===s)return mo[t].perms;let n=i9(e,r);return mo[t]?mo[t].key=s:mo[t]=s9(s),mo[t].perms=n,n}catch(r){if(!e[Tr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Tr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Tr.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw ZT.error(s),ZT.debug(r),oP(new Error,t9.OUTDATED_PERMS_TRANSLATION_ERROR,r9.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
@@ -27,4 +27,4 @@
27
27
  Connection: close\r
28
28
  \r
29
29
  `))}},25).unref()}o.close?.(()=>{if(De.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&AE()==0)try{RH(De.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,gE),o.cantCleanupProperly||Zt.warn("Had to forcefully exit the thread",gE),process.exit(0)},5e3).unref()})}if(DH||process.env.DEV_MODE)try{require("inspector").close()}catch(i){Zt.info("Could not close debugger",i)}}}).ref();let e=[];if(AH&&!one)for(let t in _n){let r=_n[t];if(isNaN(t)&&AE()==0){Xse(t)&&RH(t),e.push(new Promise((n,i)=>{r.listen({path:t},()=>{n(),Zt.info("Domain socket listening on "+t)}).on("error",i)}));continue}let s;try{s=AH(+t,"::")}catch(n){console.error(`Unable to bind to port ${t}`,n);continue}e.push(new Promise((n,i)=>{r.listen({fd:s},()=>{n(),Zt.trace("Listening on port "+t,gE)}).on("error",i)}))}Promise.all(e).then(()=>{El?.postMessage({type:Tt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(LH,"startServers");yH||LH();function KR(e,t,r){let s=e?.read?e:new Kse({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),n=_n[t];if(n.isSecure&&(s.startTime=performance.now()),n)typeof n=="function"?n(s):n.emit("connection",s),r&&s.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=_n[t];c?(typeof c=="function"?c(s):c.emit("connection",s),r&&s.emit("data",r)):o<5?i(o+1):(Zt.error(`Server on port ${t} was not registered`),s.destroy())},1e3)},"retry");i(1)}return s}a(KR,"deliverSocket");var bH=new Map;function une(e){let{port:t,event:r,data:s,requestId:n}=e,i;switch(i=bH.get(n),r){case"connection":i=KR(void 0,t),bH.set(n,i),i.write=(c,u,_)=>(El.postMessage({requestId:n,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(El.postMessage({requestId:n,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),El.postMessage({requestId:n,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(s,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a(une,"proxyRequest");function WR(e,t,r=!0){!+t&&t!==De.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(De.get(Tt.CONFIG_PARAMS.HTTP_PORT),10));let s=_n[t];if(s){let n=s.lastServer||s;if(n===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!n.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);n.off("unhandled",NH),n.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(s.cantCleanupProperly=!0),e.emit("request",i,o)}),s.lastServer=e}else _n[t]=e;e.on("unhandled",NH)}a(WR,"registerServer");function MH(e){let t=[],r=parseInt(e?.securePort);return r&&t.push({port:r,secure:!0}),r=parseInt(e?.port),r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],De.get(Tt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:De.get(Tt.CONFIG_PARAMS.HTTP_PORT),secure:De.get(Tt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),De.get(Tt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:De.get(Tt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&De.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:De.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(MH,"getPorts");function QR(e,t){for(let{port:r,secure:s}of MH(t))UH(r,s,t?.isOperationsServer),typeof e=="function"?$R[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=s,WR(e,r,!1)),OE[r]=YR($R,r),ane=YR(cne,r)}a(QR,"httpServer");function UH(e,t,r){if(!wi[e]){let s=r?"operationsApi_network":"http",n={keepAliveTimeout:De.get(s+"_keepAliveTimeout"),headersTimeout:De.get(s+"_headersTimeout"),requestTimeout:De.get(s+"_timeout")},i=De.get(s+"_mtls"),o=De.get(s+"_mtls_required");if(t){s=r?"operationsApi_":"";let u=De.get(s+"tls_privateKey"),_=De.get(s+"tls_certificate"),l=De.get(s+"tls_certificateAuthority");Object.assign(n,{allowHTTP1:!0,key:$a(u),ciphers:De.get("tls_ciphers"),cert:$a(_),ca:l&&$a(l),rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:ene()})}let c=nne();wi[e]=(t?Jse:Qse)(n,async(u,_)=>{try{let d=performance.now(),f=new IH(u,_);r&&(f.isOperationsServer=!0);let E=await OE[e](f);if(!E){if(f._nodeResponse.statusCode)return;E=PH(f)}if(c?E.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):E.headers?.set?.("Server","HarperDB"),E.status===-1){for(let H of E.headers||[])_.setHeader(H[0],H[1]);return u.baseRequest=f,_.baseResponse=E,wi[e].emit("unhandled",u,_)}let h=E.status||200,p=performance.now(),S=p-d,T=E.body,b;if(!E.handlesHeaders){let H=E.headers||new wH;T?T.length>=0&&(typeof T=="string"?H.set("Content-Length",Buffer.byteLength(T)):H.set("Content-Length",T.length),b=!0):(H.set("Content-Length","0"),b=!0);let P=`hdb;dur=${S.toFixed(2)}`;E.wasCacheMiss&&(P+=", miss"),rne(H,"Server-Timing",P,!0),_.writeHead(h,H&&(H[Symbol.iterator]?Array.from(H):H)),b&&_.end(T)}let R=f.handlerPath,L=f.method;if(fl(S,"duration",R,L,E.wasCacheMiss==null?void 0:E.wasCacheMiss?"cache-miss":"cache-hit"),sne(h<400,"success",R,L),!b)if(T?.pipe){T.pipe(_),T.destroy&&_.on("close",()=>{T.destroy()});let H=0;T.on("data",P=>{H+=P.length}),T.on("end",()=>{fl(performance.now()-p,"transfer",R,L),fl(H,"bytes-sent",R,L)})}else T?.then?T.then(H=>{_.end(H)},l):_.end(T)}catch(d){l(d)}function l(d){let f=d.headers;_.writeHead(d.statusCode||500,f&&(f[Symbol.iterator]?Array.from(f):f)),_.end(d.toString()),d.statusCode?d.statusCode===500?Zt.warn(d):Zt.info(d):Zt.error(d)}a(l,"onError")}),i&&(wi[e].mtlsConfig=i),t&&(wi[e].on("secureConnection",u=>{u._parent.startTime&&fl(performance.now()-u._parent.startTime,"tls-handshake",e),fl(u.isSessionReused(),"tls-reused",e)}),wi[e].isSecure=!0),WR(wi[e],e)}return wi[e]}a(UH,"getHTTPServer");function YR(e,t){let r=PH;for(let s=e.length;s>0;){let{listener:n,port:i}=e[--s];if(i===t||i==="all"){let o=r;r=a(c=>n(c,o),"next_callback")}}return r}a(YR,"makeCallbackChain");function PH(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new wH}}a(PH,"unhandled");function lne(e,t){QR(e,{requestOnly:!0,...t})}a(lne,"onRequest");function _ne(e,t){let r;if(t.securePort){let s=De.get("tls_privateKey"),n=De.get("tls_certificate"),i=t.mtls?.certificateAuthority||De.get("tls_certificateAuthority");r=Zse({ciphers:De.get("tls_ciphers"),key:$a(s),cert:$a(n),ca:i&&$a(i),rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls},e),_n[t.securePort]=r}return t.port&&(r=Wse(e),_n[t.port]=r),r}a(_ne,"onSocket");Object.defineProperty(zse.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.startsWith("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function dne(e,t){let r;for(let{port:s,secure:n}of MH(t)){RE[s]||(RE[s]=new jse({server:r=UH(s,n)}),RE[s].on("connection",async(c,u)=>{try{let _=new IH(u);_.isWebSocket=!0;let l=OE[s](_),d=u.headers["sec-websocket-protocol"]||"",f=VR[s];if(d){let E;for(let h=0;h<f.length;h++){let p=f[h];p.protocol===d&&(E=!0,p.listener(c,_,l))}if(E)return}for(let E=0;E<f.length;E++){let h=f[E];h.protocol||h.listener(c,_,l)}}catch(_){Zt.warn("Error handling WebSocket connection",_)}}),RE[s].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=VR[s];o||(o=VR[s]=[]),o.push({listener:e,protocol:i}),OE[s]=YR($R,s)}return r}a(dne,"onWebSocket");function NH(e,t){t.writeHead(404),t.end(`Not found
30
- `)}a(NH,"defaultNotFound")});async function qH({clientId:e,user:t,clean:r,will:s}){let n;if(e&&!r){let i=await JR.get(e,{returnNonexistent:!0});n=new ZR(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await JR.get(e);i&&i.delete()}n=new yE(e,t)}return s&&(s.id=e,s.user={username:t?.username},hl.put(s)),n}function XR(){return NE++,NE>65500&&(NE=1),NE}function jR(e,t,r=e){let{topic:s,retain:n}=e;e.data=t,e.async=!0,e.authorize=!0;let i=Ti.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return je(r,()=>n?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var BH,Ii,HH,xH,JR,hl,NE,yE,ZR,GH=Re(()=>{Ae();xu();BH=x(wr()),Ii=x($());ro();HH=x(Ke()),xH=x(vH());nr();JR=ct({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),hl=ct({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,HH.getWorkerIndex)()===0&&(async()=>{await xH.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of hl.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await tt.getUser(r.user.username)),je(r,()=>{try{jR(r,t)}catch{(0,Ii.warn)("Failed to publish will",t)}hl.delete(e.id,r)})}})();a(qH,"getSession");NE=1;a(XR,"getNextMessageId");yE=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,rh:i,startTime:o}=t,c=n.indexOf("?"),u,_;if(c>-1?(u=n.slice(c),_=n.slice(0,c)):_=n,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let l=this.subscriptions.find(T=>T.topic===n),d;l?(d=i>0,l.end(),this.subscriptions.splice(this.subscriptions.indexOf(l),1)):d=i===2;let f={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Ii.trace)("Resuming subscription from",n,"from",o);let E=Ti.getMatch(_);if(!E){let T=new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);throw T.statusCode=404,T}if(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let T=f.url.slice(1);if(T.indexOf("#")>-1&&T.indexOf("#")!==T.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(f.isCollection=!0,T.indexOf("+")===T.length-1)f.onlyChildren=!0,f.url="/"+T.slice(0,T.length-1);else{let b=T.split("/"),R;for(let P=0;P<b.length;P++)if(b[P].indexOf("+")>-1)if(b[P]==="+")R=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(s&&R)throw new Error("Filters can not be combined");let L=!0;b[b.length-1]==="#"&&(b.length--,L=!1),R&&(s=a(P=>{let k=P.id;if(!Array.isArray(k)||L&&k.length!==b.length)return!1;for(let B=0;B<b.length;B++)if(b[B]!=="+"&&b[B]!==k[B])return!1;return!0},"filter"));let H=b.indexOf("+");f.url="/"+(H>-1?b.slice(0,H):b).concat("").join("/")}}let h=E.path,p=E.Resource,S=await je(f,async()=>{let T=await p.subscribe(f);if(!T)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!T[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let b of T)try{let R;if(b.type&&b.type!=="put"&&b.type!=="delete"&&b.type!=="message"&&b.type!=="patch"||s&&!s(b))continue;r?(b.topic=n,R=this.needsAcknowledge(b)):(b.acknowledge?.(),R=XR());let L=b.id;Array.isArray(L)&&(L=Ra(L)),L==null&&(L=""),this.listener(h+"/"+L,b.value,R,t)}catch(R){(0,Ii.warn)(R)}})(),T});return S.topic=n,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=XR();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t);if(r)return r.end(),!0}async publish(t,r){return t.user=this.user,jR(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};je(r,async()=>{if(!t){let s=await hl.get(this.sessionId,r);s?.doesExist()&&await jR(s,s.data,r)}await hl.delete(this.sessionId,r)}).catch(s=>{(0,Ii.warn)(`Error publishing MQTT will for ${this.sessionId}`,s)});for(let s of this.subscriptions)s.end();this.subscriptions=[]}};a(jR,"publish");ZR=class extends yE{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=XR(),s={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(s.acknowledge=t.acknowledge),this.awaitingAcks.set(r,s),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Ii.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,BH.getNextMonotonicTime)()),(0,Ii.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),JR.put(this.sessionRecord)),t.qos}}});var rA={};Ye(rA,{bypassAuth:()=>fne,start:()=>Ene});function fne(){$H=!0}function Ene({server:e,port:t,network:r,webSocket:s,securePort:n,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i,sessions:new Set},c,u=r?.mtls;return s&&(c=e.ws((_,l,d)=>{if(_.protocol==="mqtt"){Yr.debug("Received WSS connection for MQTT from",_._socket.remoteAddress);let{onMessage:f,onClose:E}=kH(_,(h,p)=>{if(_.send(h),p&&_._socket.writableNeedDrain)return new Promise(S=>this._socket.once("drain",S))},l,Promise.resolve(d).then(()=>l?.user),o);_.on("message",f),_.on("close",E),_.on("error",h=>{Yr.info("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},s))),(t||n)&&(c=e.socket(async _=>{let l;if(Yr.debug("Received connection for MQTT from",_.remoteAddress),u){if(_.authorized)try{let E=u.user;E!==null?((E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN),l=await e.getUser(E,null,null),(0,ml.get)(Kr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&eA.notify({username:l.username,status:Kr.AUTH_AUDIT_STATUS.SUCCESS,type:Kr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:_.remoteAddress})):Yr.debug("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",_.remoteAddress)}catch(E){Yr.error(E)}else if(u.required)return Yr.info(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!l&&$H&&_.remoteAddress.includes("127.0.0.1")&&(l=await(0,VH.getSuperUser)(),Yr.debug("Auto-authorizing local connection",l?.username));let{onMessage:d,onClose:f}=kH(_,E=>_.write(E),null,l,o);_.on("data",d),_.on("close",f),_.on("error",E=>{Yr.info("Socket error",E)})},{port:t,securePort:n,mtls:u})),c}function kH(e,t,r,s,n){FH||(FH=!0,nu(d=>{wE>0&&d.push({metric:"mqtt-connections",connections:wE,byThread:!0})}));let i;wE++;let o,c={protocolVersion:4},u=(0,IE.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){wE--,i||(i=!0,o?.disconnect(),n.sessions.delete(o),ns(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{s?.then&&(s=await s),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{s=await tt.getUser(d.username,d.password.toString(),r),(0,ml.get)(Kr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&eA.notify({username:s.username,status:Kr.AUTH_AUDIT_STATUS.SUCCESS,type:Kr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,ml.get)(Kr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&eA.error({username:s.username,status:Kr.AUTH_AUDIT_STATUS.FAILURE,type:Kr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return ns(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(n.authorizeClient?.(d,s),d.will){let R=e.deserialize||(e.deserialize=Ro(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?R(d.will.payload):void 0,delete d.will.payload}o=qH({user:s,...d}),o=await o,n.sessions.add(o)}catch(R){return Yr.error(R),ns(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:R.code||5,returnCode:R.code||128})}ns(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((R,L,H,P)=>{try{let k=R.indexOf("/",1),B=k>0?R.slice(0,k):R;f({cmd:"publish",topic:R,payload:E(L),messageId:H||Math.floor(Math.random()*1e8),qos:P.qos},B)}catch(k){Yr.error(k),o?.disconnect(),n.sessions.delete(o)}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let R of d.subscriptions){let L;try{L=(await o.addSubscription(R,R.qos>=1)).qos||0}catch(H){Yr.error(H),L=c.protocolVersion<5?128:H.statusCode===403?135:H.statusCode===404?143:128}h.push(L)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let R=[];for(let L of d.unsubscriptions)R.push(o.removeSubscription(L)?0:17);f({cmd:"unsuback",granted:R,messageId:d.messageId});break}case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let p=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=Ro(r?.headers.get?.("content-type"))),T=d.payload?.length>0?S(d.payload):void 0,b;try{b=await o.publish(d,T)}catch(R){Yr.warn(R),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:b===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),n.sessions.delete(o),ns(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){Yr.error(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,IE.generate)(h,c);t(S),qr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return Ri(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var IE,VH,ml,Kr,tA,eA,Yr,$H,FH,wE,YH=Re(()=>{IE=require("mqtt-packet");GH();VH=x(ss());Oa();Nn();nr();ml=x(ee()),Kr=x(M()),tA=x($()),eA=(0,tA.loggerWithTag)("auth-event"),Yr=(0,tA.loggerWithTag)("mqtt"),$H=(0,ml.get)(Kr.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(fne,"bypassAuth");a(Ene,"start");wE=0;a(kH,"onSocket")});var Of={};Ye(Of,{component_errors:()=>Ka,loadComponent:()=>CE,loadComponentDirectories:()=>ex,setErrorReporter:()=>Sne});function ex(e,t){t&&(nA=t),e&&(iA=e);let r=[];if((0,Gs.existsSync)(sA)){let n=(0,Gs.readdirSync)(sA,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,gt.join)(sA,o);r.push(CE(c,nA,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(CE(s,nA,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{ZH=!0})}function Sne(e){Sl=e}async function CE(e,t,r,s,n,i){if(!WH.has(e)){WH.set(e,!0),n&&(iA=n);try{let o;s&&(Ka=new Map);let c=(0,gt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Gs.existsSync)(c)?o=s?(0,jH.getConfigObj)():(0,QH.parseDocument)((0,Gs.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=oA;let u=[],_=s;for(let l in o){let d=o[l];if(Ka.set(s?l:(0,gt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let b=e,R;for(;!(0,Gs.existsSync)(R=(0,gt.join)(b,"node_modules",l));)if(b=(0,gt.dirname)(b),b.length<(0,XH.getHdbBasePath)().length){R=null;break}if(R)f=await CE(R,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=pne[l];if(!f)continue;u.push(f);let h=a(b=>(b.origin=r,ct(b)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,T=!p?.https&&p?.port;if(Ya.isMainThread&&(f=await f.startOnMainThread?.({server:tt,ensureTable:h,port:T,securePort:S,resources:t,...d})||f,s&&p))for(let b of[T,S])try{if(+b&&!KH.includes(b)){let R=aA.get(cA.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);R&&pl.default.warn("Session affinity is not recommended and may cause memory leaks"),(R||!hE)&&(KH.push(b),oH(b,R))}}catch(R){console.error("Error listening on socket",b,R,l)}if(t.isWorker&&(f=await f.start?.({server:tt,ensureTable:h,port:T,securePort:S,resources:t,...d})||f),iA.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,JH.handleHDBError)("Can not reference parent directories");let b=(0,gt.join)(e,d.files).replace(/\\/g,"/"),R=b.indexOf("/*");if(R>-1&&d.files!==oA[l]?.files&&!(0,Gs.existsSync)(b.slice(0,R)))throw new Error(`The path '${b.slice(0,R)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let L=(0,gt.basename)(e),H=d.path||"/";H=H.startsWith("/")?H:H.startsWith("./")?"/"+L+H.slice(2):H==="."?"/"+L:"/"+L+"/"+H;let P,k,B;if(d.root){let z=d.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",k=(0,gt.join)(e,z)}else(B=b.indexOf("/*"))>-1&&(k=b.slice(0,B+1),P=(0,gt.relative)(e,k));let J=!1;if(Ya.isMainThread&&f.setupDirectory&&(J=await f.setupDirectory?.(H,k,t)),t.isWorker&&f.handleDirectory&&(J=await f.handleDirectory?.(H,k,t)),J)continue;for(let z of await(0,zH.default)(b,{onlyFiles:!1,objectMode:!0})){let{path:X,dirent:Te}=z;_=!0;let ce=(0,gt.relative)(e,X).replace(/\\/g,"/");if(P)if(ce.startsWith(P))ce=ce.slice(P.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${ce}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let de=H+(H.endsWith("/")?"":"/")+ce;try{if(Te.isFile()){let Le=await mne(X);Ya.isMainThread&&await f.setupFile?.(Le,de,X,t),t.isWorker&&await f.handleFile?.(Le,de,X,t)}else Ya.isMainThread&&await f.setupDirectory?.(de,X,t),t.isWorker&&await f.handleDirectory?.(de,X,t)}catch(Le){Le.message=`Could not load ${Te.isFile()?"file":"directory"} '${X}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${Le.message}`,Sl?.(Le),((0,Wa.getWorkerIndex)()===0?console:pl.default).error(Le),t.set(d.path||"/",new Tl(Le)),Ka.set(s?l:(0,gt.basename)(e),Le.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,gt.basename)(e)}' due to: ${h.message}`,Sl?.(h),((0,Wa.getWorkerIndex)()===0?console:pl.default).error(h),t.set(d.path||"/",new Tl(h),null,!0),Ka.set(s?l:(0,gt.basename)(e),h.message)}}if(Ya.isMainThread&&!ZH&&i&&(0,Wa.watchDir)(e,async()=>ex()),o.extensionModule)return await t_((0,gt.join)(e,o.extensionModule));if(!_&&t.isWorker){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;Sl?.(new Error(l)),((0,Wa.getWorkerIndex)()===0?console:pl.default).error(l),Ka.set((0,gt.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,Sl?.(o),t.set("",new Tl(o))}}}var Gs,gt,Ya,QH,aA,cA,zH,Wa,pl,JH,XH,hne,jH,mne,sA,iA,ZH,nA,Ka,pne,oA,KH,WH,Sl,Tl,bf=Re(()=>{Gs=require("fs"),gt=require("path"),Ya=require("worker_threads"),QH=require("yaml"),aA=x(ee()),cA=x(M());cb();db();fb();c0();zB();tH();zH=x(require("fast-glob")),Wa=x(Ke()),pl=x($());Hh();nr();JH=x(se());Os();Ae();aH();XH=x(ee()),hne=x(dH());hf();gH();YH();jH=x(Pr());mE();({readFile:mne}=Gs.promises),sA=aA.get(cA.CONFIG_PARAMS.COMPONENTSROOT),iA=new Map,Ka=new Map;a(ex,"loadComponentDirectories");pne={REST:kf,rest:kf,graphqlSchema:Bh,jsResource:qh,fastifyRoutes:yR,login:Fh,static:wR,operationsApi:hne,customFunctions:{},http:{},clustering:FR,authentication:Gu,mqtt:rA},oA={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(oA,"static",{value:{files:"web/**"}});KH=[],WH=new Map;a(Sne,"setErrorReporter");a(CE,"loadComponent");Tl=class extends qt{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var zR=g((Jpe,rx)=>{var{isMainThread:tx}=require("worker_threads"),{getTables:Tne}=(Ae(),ne(Ge)),{loadComponentDirectories:gne,loadComponent:Rne}=(bf(),ne(Of)),{resetResources:Ane}=(xu(),ne(pP)),One=og(),bne=Pr(),{dirname:Nne}=require("path"),{getConnection:yne}=st(),wne=ee(),Ine=M(),uA=new Map;async function Cne(e=!1){!tx&&wne.get(Ine.CONFIG_PARAMS.CLUSTERING_ENABLED)&&yne();try{tx&&await One()}catch(s){console.error(s)}let t=Ane();Tne(),t.isWorker=e,await Rne(Nne(bne.getConfigFilePath()),t,"hdb",!0,uA),await gne(uA,t);let r=[];for(let[s]of uA)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(Cne,"loadRootComponents");rx.exports.loadRootComponents=Cne});var Ke=g((jpe,Di)=>{"use strict";var{Worker:Dne,MessageChannel:Lne,parentPort:dn,isMainThread:EA,threadId:Mne,workerData:Fn}=require("worker_threads"),{PACKAGE_ROOT:Une}=M(),{join:ox,isAbsolute:Pne,extname:vne}=require("path"),{server:ax}=(nr(),ne(vi)),{watch:Bne,readdir:Hne}=require("fs/promises"),{totalmem:sx}=require("os"),gl=M(),cx=ee(),kn=$(),{randomBytes:xne}=require("crypto"),{_assignPackageExport:qne}=require("../index"),Gne=M(),nx=1024*1024,Ci=[],Es=[],Fne=50,hA=1e4,kne="restart",ux="request_thread_info",lx="resource_report",_x="thread_info",dx="added-port",Vne="ack",lA;qne("threads",Es);Di.exports={startWorker:_A,restartWorkers:pA,shutdownWorkers:Qne,workers:Ci,setMonitorListener:rie,onMessageFromWorkers:zne,onMessageByType:Tx,broadcast:Xne,broadcastWithAcknowledgement:Zne,setChildListenerByType:Wne,getWorkerIndex:fx,getWorkerCount:Ex,getTicketKeys:mx,setMainIsWorker:Yne,setTerminateTimeout:$ne,restartNumber:Fn?.restartNumber||1};Es.onMessageByType=Tx;Es.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Es.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var mA;function $ne(e){hA=e}a($ne,"setTerminateTimeout");function fx(){return Fn?Fn.workerIndex:mA?0:void 0}a(fx,"getWorkerIndex");function Ex(){return Fn?Fn.workerCount:mA?1:void 0}a(Ex,"getWorkerCount");function Yne(e){mA=e}a(Yne,"setMainIsWorker");var hx=1,DE;function mx(){return DE||(DE=EA?xne(48):Fn.ticketKeys,DE)}a(mx,"getTicketKeys");Object.defineProperty(ax,"workerIndex",{get(){return fx()}});Object.defineProperty(ax,"workerCount",{get(){return Ex()}});var px={[ux](e,t){eie(t)},[lx](e,t){tie(t,e)}};function _A(e,t={}){let r=process.constrainedMemory?.()||sx();r=Math.min(r,sx(),2e4*nx);let s=cx.get(gl.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/nx/(10+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>6,16),64),i=[],o=[];for(let u of Es){let _=new Lne;_.existingPort=u,i.push(_),o.push(_.port2)}vne(e)||(e+=".js");let c=new Dne(Pne(e)?e:ox(Une,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:hx=t.threadCount,name:t.name,restartNumber:Di.exports.restartNumber,ticketKeys:mx()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:dx,port:u,threadId:c.threadId},[u]);return ME(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>_A(e,t),c.on("error",u=>{console.error("Worker error:",u),kn.error("Worker error:",u)}),c.on("exit",u=>{Ci.splice(Ci.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Fne?(t.unexpectedRestarts=c.unexpectedRestarts+1,_A(e,t)):kn.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{px[u.type]?.(u,c)}),Ci.push(c),nie(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(_A,"startWorker");var Kne=[gl.THREAD_TYPES.HTTP];async function pA(e=null,t=Math.max(hx>3,1),r=!0){if(EA){if(r){let{loadRootComponents:o}=zR();await o()}Di.exports.restartNumber++,t<1&&(t=t*Ci.length);let s=[],n=[];for(let o of Ci.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;kn.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Di.exports.restartNumber,type:gl.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Kne.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),hA*2).unref();o.on("exit",()=>{clearTimeout(l),s.splice(s.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(s.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===Gne.ITC_EVENT_TYPES.CHILD_STARTED&&(kn.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");kn.trace("Waiting for worker to start",_.threadId),_.on("message",f)});n.push(l),s.length>=t&&await Promise.race(s),n.length>=t&&await Promise.race(n)}}await Promise.all(s),await Promise.all(n);let{restartService:i}=_f();r&&(e==="http"||!e)&&cx.get(gl.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else dn.postMessage({type:kne,workerType:e})}a(pA,"restartWorkers");function Wne(e,t){px[e]=t}a(Wne,"setChildListenerByType");function Qne(e){return pA(e,1/0,!1)}a(Qne,"shutdownWorkers");var Sx=[];function zne(e){Sx.push(e)}a(zne,"onMessageFromWorkers");var dA=new Map;function Tx(e,t){let r=dA.get(e);r||dA.set(e,r=[]),r.push(t)}a(Tx,"onMessageByType");var Jne=10;async function Xne(e){let t=0;for(let r of Es)try{r.postMessage(e),t++>Jne&&(t=0,await new Promise(setImmediate))}catch(s){kn.error("Unable to send message to worker",s)}}a(Xne,"broadcast");var LE=new Map,jne=1;function Zne(e){return new Promise(t=>{let r=0;for(let s of Es)try{let n=jne++,i=a(()=>{LE.delete(n),--r===0&&t(),s!==dn&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,LE.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of LE)o.port===s&&o()})),s.postMessage(e),r++}catch(n){kn.error("Unable to send message to worker",n)}r===0&&t()})}a(Zne,"broadcastWithAcknowledgement");function eie(e){e.postMessage({type:_x,workers:gx()})}a(eie,"sendThreadInfo");function gx(){let e=Date.now();return Ci.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(gx,"getChildWorkerInfo");function tie(e,t){e.resources=t,e.resources.updated=Date.now()}a(tie,"recordResourceReport");var fA;function rie(e){fA=e}a(rie,"setMonitorListener");var sie=1e3,ix=!1;function nie(){ix||(ix=!0,setInterval(()=>{for(let e of Ci){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}fA&&fA()},sie).unref())}a(nie,"startMonitoring");var iie=1e3;if(dn){ME(dn);for(let e=0,t=Fn.addPorts.length;e<t;e++){let r=Fn.addPorts[e];r.threadId=Fn.addThreadIds[e],ME(r)}setInterval(()=>{let e=process.memoryUsage();dn.postMessage({type:lx,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},iie).unref(),lA=a(()=>new Promise((e,t)=>{dn.on("message",r),dn.postMessage({type:ux});function r(s){s.type===_x&&(dn.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else lA=gx;Di.exports.getThreadInfo=lA;function ME(e,t){Es.push(e),e.on("message",r=>{if(r.type===dx)r.port.threadId=r.threadId,ME(r.port);else if(r.type===Vne){let s=LE.get(r.id);s&&s()}else{for(let n of Sx)n(r,e);let s=dA.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){kn.error(i)}}}).on("close",()=>{Es.splice(Es.indexOf(e),1)}).on("exit",()=>{Es.splice(Es.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(ME,"addPort");if(EA){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await Hne(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(ox(s,i.name));try{for await(let{filename:i}of Bne(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await pA(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");Di.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else dn.on("message",async e=>{let{type:t}=e;t===gl.ITC_EVENT_TYPES.SHUTDOWN&&(Di.exports.restartNumber=e.restartNumber,dn.unref(),setTimeout(()=>{kn.warn("Thread did not voluntarily terminate",Mne),process.exit(0)},hA).unref())})});var RC={};Ye(RC,{AUDIT_STORE_OPTIONS:()=>Dx,createAuditEntry:()=>o_,openAuditStore:()=>BE,readAuditEntry:()=>Dt,setAuditRetention:()=>aie,transactionKeyEncoder:()=>Cx});function BE(e){let t=e.auditStore=e.openDB(yx.AUDIT_STORE_NAME,Dx);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let s=null;function n(i=UE){clearTimeout(s),s=setTimeout(async()=>{if(t.rootStore.status==="closed")return;let o=0,c;try{for(let{key:u,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-SA})){if((_[0]&15)===RA){let l=Dt(_),d=l.tableId;r[d]?.(l.recordId)}if(c=t.remove(u),await new Promise(setImmediate),++o>=oie){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,SA/10)),n(i)}},i).unref()}return a(n,"scheduleAuditCleanup"),t.scheduleAuditCleanup=n,(0,vE.getWorkerIndex)()===(0,vE.getWorkerCount)()-1&&n(UE),t}function aie(e,t=UE){SA=e,UE=t}function o_(e,t,r,s,n,i,o){let c=Lx[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let u=1;s&&(s>1?Qa.setFloat64(0,s):hs.set(sm),u=9),f(0),f(t),d(r),Qa.setFloat64(u,e),u+=8,n?d(n):hs[u++]=0,hs[s?8:0]=c;let l=hs.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,za.writeKey)(E,hs,u);let p=u-h-1;p>127?p>16383?(OA.error("Key or username was too large for audit entry",E),u=h+1,hs[h]=0):(hs.copyWithin(h+2,h+1,u),Qa.setUint16(h,p|32768),u++):hs[h]=p}function f(E){E<128?hs[u++]=E:E<16384?(Qa.setUint16(u,E|32768),u+=2):E<1056964608?(Qa.setUint32(u,E|3221225472),u+=4):(hs[u]=255,Qa.setUint32(u+1,E),u+=5)}}function Dt(e){try{let t=e.dataView||(e.dataView=new AA(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let s=t.readInt(),n=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:Lx[s&7],tableId:i,get recordId(){return Nx(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?Nx(e,l,d):void 0},getValue(f,E,h){if(s&TA||s&gA&&!E)return f.decoder.decode(e.subarray(t.position));if(s&gA&&h)return bA(f.getEntry(this.recordId),h,f)}}}catch(t){return OA.error("Reading audit entry error",t,e),{}}}function Nx(e,t,r){let s=e.subarray(t,r);return(0,za.readKey)(s,0,r-t)}var za,PE,yx,wx,vE,Ix,OA,hs,Qa,Cx,Dx,SA,oie,UE,TA,gA,Rx,RA,Ax,Ox,bx,Lx,AA,xi=Re(()=>{za=require("ordered-binary"),PE=x(ee()),yx=x(dt()),wx=x(M()),vE=x(Ke()),Ix=x(Q());bc();OA=x($());HE();(0,PE.initSync)();hs=Buffer.alloc(1024),Qa=new DataView(hs.buffer,hs.byteOffset,1024),Cx={writeKey(e,t,r){return e===Oc?(t.set(Oc,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,za.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,za.readKey)(e,t,r)}},Dx={encoding:"binary",keyEncoder:Cx},SA=(0,Ix.convertToMS)((0,PE.get)(wx.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,oie=1e3,UE=1e4;a(BE,"openAuditStore");a(aie,"setAuditRetention");TA=16,gA=32,Rx=1,RA=2,Ax=3,Ox=4,bx=5,Lx={put:Rx|TA,[Rx]:"put",delete:RA,[RA]:"delete",message:Ax|TA,[Ax]:"message",invalidate:Ox,[Ox]:"invalidate",patch:bx|gA,[bx]:"patch"};a(o_,"createAuditEntry");a(Dt,"readAuditEntry");AA=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t=this.getUint8(this.position++);return t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch{debugger}}};a(Nx,"readKeySafely")});var NA={};Ye(NA,{add:()=>xE,applyReverse:()=>Mx,getRecordAtTime:()=>bA,rebuildUpdateBefore:()=>qE});function xE(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function qE(e,t){let r=null;for(let s in e)if(s in t){let n=t[s];if(n?.__op__){let i=e[s];if(i?.__op__)if(i.__op__===n.__op__)r||(r={}),r[s]=i;else throw new Error("Can not merge updates with different operations");else r||(r={}),r[s]=i,xE(r,s,n)}}else r||(r={}),r[s]=e[s];return r}function Mx(e,t){for(let r in t){let s=t[r];if(s?.__op__){let n=cie[s.__op__]?.reverse;if(n)n(e,r,{value:s.value});else throw new Error(`Unsupported operation ${s.__op__}`)}else e[r]=Ux}}function bA(e,t,r){let s=r.rootStore.auditStore,n=Object.assign({},e.value),i=e.localTime;for(;i>t;){let u=s.get(i),_=Dt(u);switch(_.type){case"put":n=_.getValue(r);break;case"patch":Mx(n,_.getValue(r));break;case"delete":n=null}i=_.previousLocalTime}let o={},c=0;for(let u in n)n[u]===Ux&&(o[u]=!0,c++);for(;c>0&&i>0;){let u=s.get(i),_=Dt(u),l;switch(_.type){case"put":l=_.getValue(r);break;case"patch":l=_.getValue(r);break}for(let d in l)o[d]&&(n[d]=l[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let u in o)n[u]=null;return n}var cie,Ux,HE=Re(()=>{xi();a(xE,"add");xE.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};cie={add:xE};a(qE,"rebuildUpdateBefore");a(Mx,"applyReverse");Ux={};a(bA,"getRecordAtTime")});function Wr(e){return e[It]||(e[It]=Object.create(null))}function $E(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u,_;if(o.resolve)_={get(){return o.resolve(this,this[Oe])},set(l){return o.set(this,l)},configurable:!0};else{switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a string, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a string, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Float":case"Number":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a number, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new ms.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new ms.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"BigInt":u=a(function(l){if(!(typeof l=="bigint"||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=BigInt(l);else throw new ms.ClientError(`${c} must be a number, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new ms.ClientError(`${c} must be a Date, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Wr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be an object, attempt to assign ${l}`);Wr(this)[c]=l},"set")}_={get(){let l=this[It];if(l&&c in l){let f=l[c];if(f?.__op__){let E=this[_e]?.[c];return f.update(E)}return f}let d=this[_e]?.[c];if(d&&typeof d=="object"){let f=vx(d,o);if(f)return l||(l=this[It]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,s[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[It];return u?.[o]!==void 0?u[o]:this[_e]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new ms.ClientError("Can not add a property to a sealed table schema");Wr(this)[o]=c}),i("deleteProperty",function(o){Wr(this)[o]=void 0}),i("toJSON",function(){let o=this[It],c;for(let _ in o){c||(c=Object.assign({},this[_e]));let l=o[_];if(l?.__op__){let d=c[_];l=l.update(d)}c[_]=l}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[_e])),Object.assign(c,this)),c||this[_e]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function vx(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){if(n?.[_e])throw new Error("Can not track an already tracked object, check for circular references");this[_e]=n}},$E(r,t)),new r(e)):new GE(e);case Array:let s=new kE(e.length);s[_e]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=vx(o,t?.elements)),s[n]=o}return s;default:return e}}function nd(e){let t=e[It],r;for(let n in t){r||(r=Object.assign({},e[_e]));let i=t[n];if(i&&typeof i=="object")if(i.__op__){let o=r[n];i=i.update(o)}else i=nd(i);r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[_e])),Object.assign(r,e)),r||e[_e]}function Lo(e,t=e[It]){let r;if(Px.call(e,_e)&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=Lo(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[s]=i}return Object.freeze(r)}for(let s in t){r||(r=Object.assign({},e[_e]));let n=t[s];if(n&&typeof n=="object")if(n.__op__){let i=NA[n?.__op__];if(i)i(r,s,n);else throw new Error("Invalid CRDT operation "+n.__op__);continue}else n=Lo(n);r[s]=n}return r?Object.freeze(r):Px.call(e,_e)?e[_e]:e}function FE(e){let t=e[_e];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Do]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[_e]===n){if(FE(i))return!0}else return!0}}else{let r=e[It];if(r&&!t)return!0;for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[_e]===i){if(FE(n))return!0}else return!0}else return!0}}return!1}var ms,It,GE,Px,Do,kE,VE,id=Re(()=>{Os();ms=x(se());HE();It=Symbol("own-data");a(Wr,"getChanges");a($E,"assignTrackedAccessors");a(vx,"trackObject");GE=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[_e])throw new Error("Can not track an already tracked object, check for circular references");this[_e]=t}};$E(GE,{});a(nd,"collapseData");Px=Object.prototype.hasOwnProperty;a(Lo,"deepFreeze");a(FE,"hasChanges");Do=Symbol.for("has-array-changes"),kE=class extends Array{static{a(this,"TrackedArray")}[Do];constructor(t){super(t)}splice(...t){return this[Do]=!0,super.splice(...t)}push(...t){return this[Do]=!0,super.push(...t)}pop(){return this[Do]=!0,super.pop()}unshift(...t){return this[Do]=!0,super.unshift(...t)}shift(){return this[Do]=!0,super.shift()}};kE.prototype.constructor=Array;VE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var Lp={};Ye(Lp,{CONTEXT:()=>Oe,ID_PROPERTY:()=>Me,IS_COLLECTION:()=>ps,RECORD_PROPERTY:()=>_e,Resource:()=>qt,snake_case:()=>lie,transformForSelect:()=>KE});function lie(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function Bx(e,t){if(Rl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(Rl=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),s=new wA;for(let n=0;n<r.length;n++){let i=r[n];if(!i&&n===r.length-1){Rl=!0;break}s[n]=t.coerceId(decodeURIComponent(i))}return s}function Qr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_,l;if(r?(o?(l=i,o=o[Oe]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(l=n,c=l[this.primaryKey]??null,o=i[Oe]||i):l=i:(l=n,c=l[Me]??l[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[Oe]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[],_=!0;for(let E of n){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null,_=!1)))}else{if(typeof(c=n.url)=="string"){let E=c.indexOf("?");if(E>-1){let p=this.parseQuery(c.slice(E+1));u?u=Object.assign(p,u):u=p,c=c.slice(0,E)}let h=this.parsePath(c,o,u);h?.id!==void 0?(h.query&&(u?u=Object.assign(h.query,u):u=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=n.id??null,c==null&&(_=!0))}else c=n??null,c==null&&(_=!0);o||(o={});let d;if(u?.ensureLoaded!=null||u?.async||_?(d=Object.assign({},t),u?.ensureLoaded!=null&&(d.ensureLoaded=u.ensureLoaded),u?.async&&(d.async=u.async),_&&(d.isCollection=!0)):d=t,o.transaction){let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)}else return je(o,()=>{let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)},d);function f(E){if(o.authorize){o.authorize=!1;let h=t.type==="read"?E.allowRead(o.user,u,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,l,o):E.allowUpdate(o.user,l,o):t.type==="create"?E.allowCreate(o.user,l,o):E.allowDelete(o.user,u,o);if(h?.then)return h.then(p=>{if(!p)throw new YE(o.user);return typeof l?.then=="function"?l.then(S=>e(E,u,o,S)):e(E,u,o,l)});if(!h)throw new YE(o.user)}return typeof l?.then=="function"?l.then(h=>e(E,u,o,h)):e(E,u,o,l)}a(f,"authorizeActionOnResource")}}function zr(e,t){let r=new qx.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let s of["get","put","post","delete","query","move","copy"])typeof e[s]=="function"&&r.allow.push(s);throw r}function yA(e,t,r){let s=e[_e];if(s){let n=e[It];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:n&&i in n?n[i]:(c=t?.[i])?c(e,r):s[i]}}else return t?n=>{let i=t[n];return i?i(e,r):e[n]}:n=>e[n]}function KE(e,t){let r=t?.propertyResolvers,s=t[Oe],n;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):yA(c,r,s)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(c);let _=[],l=i(yA(u,r,s));for(let d of e)_.push(l(d));return _},"transform");let o=e.forceNulls;return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(f=>f&&typeof f=="object"?c(f):f);let _={},l=i(yA(u,r,s)),d;for(let f of e){let E=l(f);E===void 0&&o&&(E=null),E?.then?(d||(d=[]),d.push(E.then(h=>_[f.name||f]=h))):_[f.name||f]=E}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){n||(n={});let u=n[c.name];if(!u){let l=r[c.name]?.definition?.tableClass;u=n[c.name]=KE(c.select||c,l)}let _=o(c.name);return u(_)}else return o(c);else return c}}a(i,"handleProperty")}var Hx,xx,qx,Oe,Me,ps,_e,uie,qt,YE,Rl,wA,Os=Re(()=>{Hx=require("crypto");pc();xx=require("../index"),qx=x(se());id();ro();Gf();Oe=Symbol.for("context"),Me=Symbol.for("primary-key"),ps=Symbol("is-collection"),_e=Symbol("stored-record"),uie={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},qt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Me]=t;let s=r?.[Oe];this[Oe]=s!==void 0?s:r||null}static get=Qr(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null&&!c.selectApplied){let _=KE(u,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Qr(function(t,r,s,n){if(Array.isArray(n)&&t[ps]){let i=[],o=s.authorize;for(let c of n){let u=t.constructor,_=u.getResource(c[u.primaryKey],s,{async:!0});_.then?i.push(_.then(l=>l.put(c,s))):i.push(_.put(c,s))}return Promise.all(i)}return t.put?t.put(n,r):zr(t,"put")},{hasContent:!0,type:"update"});static patch=Qr(function(t,r,s,n){return t.patch?t.patch(n,r):zr(t,"patch")},{hasContent:!0,type:"update"});static delete=Qr(function(t,r,s,n){return t.delete?t.delete(r):zr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,Hx.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),je(s,()=>{let i=new this(n,s),o=i.update?i.update(r):zr(i,"update");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Qr(function(t,r,s,n){return t.invalidate?t.invalidate(r):zr(t,"delete")},{hasContent:!1,type:"update"});static post=Qr(function(t,r,s,n){return t[Me]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Qr(function(t,r,s,n){return t.connect?t.connect(n,r):zr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Qr(function(t,r,s,n){return t.subscribe?t.subscribe(r):zr(t,"subscribe")},{type:"read"});static publish=Qr(function(t,r,s,n){return t[Me]!=null&&t.update?.(),t.publish?t.publish(n,r):zr(t,"publish")},{hasContent:!0,type:"create"});static search=Qr(function(t,r,s,n){let i=t.search?t.search(r):zr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=KE(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=Qr(function(t,r,s,n){return t.search?t.search(n,r):zr(t,"search")},{hasContent:!0,type:"read"});static copy=Qr(function(t,r,s,n){return t.copy?t.copy(n,r):zr(t,"copy")},{type:"create"});static move=Qr(function(t,r,s,n){return t.move?t.move(n,r):zr(t,"move")},{type:"delete"});post(t){if(this[ps])return this.constructor.create(this[Me],t,this[Oe]);zr(this,"post")}static isCollection(t){return t?.[ps]}static coerceId(t){return t}static parseQuery(t){return qf(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let o=t.slice(n+1);t=t.slice(0,n);let c=r?.headers&&uie[o];if(c)r.headers.set("accept",c);else if(s)s.property=o;else return{query:{property:o},id:Bx(t,this),isCollection:Rl}}let i=Bx(t,this);return Rl?{id:i,isCollection:!0}:i}static getResource(t,r,s){let n,i=r[Oe],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=s?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let _=u.asMap.get(t);if(n=_?.find(l=>l.constructor===c),n)return n;_||u.asMap.set(t,_=[]),_.push(n=new c(t,i))}else{if(n=u.find(_=>_[Me]===t&&_.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[Me],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else n=new c(t,i);return o&&(n[ps]=!0),n}subscribe(t){return new As}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new As}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[Me]}getContext(){return this[Oe]}};qt.prototype[Oe]=null;(0,xx._assignPackageExport)("Resource",qt);a(lie,"snake_case");YE=class extends Error{static{a(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};a(Bx,"pathToId");wA=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Qr,"transactional");a(zr,"missingMethod");a(yA,"selectFromObject");a(KE,"transformForSelect")});function Fx(e,t,r,s){let n=e.primaryStore.env.path,i=e.primaryStore.tableId;Ja||((0,WE.onMessageByType)(Gx,l=>{kx(l.path)}),Ja=Object.create(null));let o=Ja[n]||(Ja[n]=[]);o.auditStore=e.auditStore,o.lastTxnTime==null&&(o.lastTxnTime=Date.now());let c=o[i];c||(c=o[i]=new Map,c.envs=o,c.tableId=i,c.store=e.primaryStore),t=Ra(t);let u=new CA(r);u.startTime=s;let _=c.get(t);return _?_.push(u):(c.set(t,_=[u]),_.tables=c,_.key=t),u.subscriptions=_,u}function kx(e,t){if(!Ja)return;let r=Ja[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(n){throw n.message+=" in "+e,n}let s;for(let{key:n,value:i}of r.auditStore.getRange({start:r.lastTxnTime,exclusiveStart:!0})){r.lastTxnTime=n;let o=Dt(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=Ra(o.recordId),d=0;do{let f=c.get(l);if(f){for(let h of f)if(!(d>0&&!(h.includeDescendants&&!(h.onlyChildren&&d>1)))){if(h.startTime>=n){(0,IA.info)("omitting",u,h.startTime,n);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(s?s.push(h):s=[h]),h.txnInProgress=o.version),h.listener(u,o,n,p)}catch(p){console.error(p),(0,IA.info)(p)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E):l=null,d++}while(!0)}if(s)for(let n of s)n.txnInProgress=null,n.listener(null,{type:"end_txn"},r.lastTxnTime,!0)}function Vx(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",()=>{(0,WE.broadcast)({type:Gx,path:n}),kx(n,!0)})}}var IA,WE,Gx,Ja,gSe,CA,$x=Re(()=>{IA=x($()),WE=x(Ke());pc();xu();xi();Gx="transaction",gSe=Buffer.alloc(4096);a(Fx,"addSubscription");CA=class extends As{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(kx,"notifyFromTransactionData");a(Vx,"listenToCommits")});var uR={};Ye(uR,{coerceType:()=>QE,makeTable:()=>XE,setServerUtilities:()=>Tie,updateResource:()=>zE});function XE(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l,sealed:d}=e,{expirationMS:f,evictionMS:E,audit:h,trackDeletes:p}=e,{attributes:S}=e;S||(S=[]),Vx(i,u);let T=om(i,s,u),b=0,R,L,H={},P=Promise.resolve(),k,B,J;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(k=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(B=K),K.expiresAt&&(J=K),K.isPrimaryKey&&(H=K);let z,X=[],Te=[],ce=1,de=2,Le={},Be={},Ct=864e5,ql,Gl,Yn,JA=!1,fh,Qq=i.getRange({start:!1,end:!1}).constructor,zq=10,Jq=6;h&&ZA();class ze extends qt{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=k;static updatedTimeProperty=B;static propertyResolvers;static sources=[];static get expirationMS(){return f}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,O){O&&(this.sourceOptions=O,(O.expiration||O.eviction||O.scanInterval)&&this.setTTLExpiration(O)),O?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),L=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let w=a(D=>{let y=this.sources.slice(0,-1);if(y=y.filter(U=>U[D]&&(!U[D].reliesOnPrototype||U.prototype[D])),y.length>0)if(y.length===1){let U=y[0];return(G,C,v)=>{if(G?.source!==U)return U[D](C,v,G)}}else return(U,G,C)=>{let v=[];for(let F of y){if(U?.source===F)break;v.push(F[D](G,C,U))}return Promise.all(v)}},"getApplyToIntermediateSource"),N=this.sources[this.sources.length-1],A=a(D=>{if(N[D]&&(!N[D].reliesOnPrototype||N.prototype[D]))return(y,U,G)=>{if(!y?.source)return N[D](U,G,y)}},"getApplyToCanonicalSource");return Le={put:A("put"),patch:A("patch"),delete:A("delete"),publish:A("publish")},Be={put:w("put"),patch:w("patch"),delete:w("delete"),publish:w("publish"),invalidate:w("invalidate")},(async()=>{let D=!1,y=a(async(U,G)=>{let C=U.value,v=U.table?rt[c][U.table]:ze;if(c===ks.SYSTEM_SCHEMA_NAME&&(U.table===ks.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||U.table===ks.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),U.id===void 0&&(U.id=C[v.primaryKey],U.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(U));U.source=m;let F=await v.getResource(U.id,G,Xa);switch(U.type){case"put":return F._writeUpdate(C,!0,Xa);case"patch":return F._writeUpdate(C,!1,Xa);case"delete":return F._writeDelete(Xa);case"publish":return F._writePublish(C,Xa);case"invalidate":return F.invalidate(Xa);default:Ze.error("Unknown operation",U.type,U.id)}},"writeUpdate");try{let U=m.subscribe;U&&p==null&&(p=!0);let G=m.subscribeOnThisThread?m.subscribeOnThisThread((0,Uo.getWorkerIndex)()):(0,Uo.getWorkerIndex)()===0,C=U&&G&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(C){let v;for await(let F of C)try{if(!(F.type==="transaction"?F.writes[0]:F)){Ze.error("Bad subscription event",F);continue}if(F.source=m,v)if(F.beginTxn)v.resolve();else{y(F,v);continue}if(F.type==="end_txn")continue;let be=je(F,()=>{if(F.type==="transaction"){let te=[];for(let Pe of F.writes)try{te.push(y(Pe,F))}catch(ae){throw ae.message+=" writing "+JSON.stringify(Pe)+" of event "+JSON.stringify(F),ae}return Promise.all(te)}else if(F.type==="define_schema"){let te=this.attributes.slice(0),Pe;for(let ae of F.attributes)te.find(qe=>qe.name===ae.name)||(te.push(ae),Pe=!0);Pe&&(ct({table:n,database:c,attributes:te,origin:"cluster"}),Il.signalSchemaChange(new Cl.SchemaEventMsg(process.pid,ks.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return F.beginTxn?(v=F,y(F,F),new Promise(te=>{v.resolve=te})):y(F,F)});D&&(await be,Il.signalUserChange(new Cl.UserEventMsg(process.pid))),F.onCommit&&(be?.then?be.then(F.onCommit):F.onCommit())}catch(oe){Ze.error("error in subscription handler",oe)}}}catch(U){Ze.error(U)}})(),this}static getResource(m,O,w){let N=super.getResource(m,O,w);if(m!=null){rc(m);try{if(N.hasOwnProperty(_e))return N;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let A=!w?.async||i.cache?.get(m),D=gs(O),y=D.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Eh(m,O,{transaction:y},A,U=>{if(U?zE(N,U):N[_e]=null,O.onlyIfCached&&O.noCacheStore){if(!N.doesExist())throw new Ss.ServerError("Entry is not cached",504)}else if(w?.ensureLoaded){let G=hh(m,U,O,N);if(G)return D?.disregardReadTxn(),N[DA]=!0,MA(G,C=>(zE(N,C),N))}return N})}catch(A){throw A.message.includes("Unable to serialize object")&&(A.message+=": "+JSON.stringify(m)),A}}return N}ensureLoaded(){let m=hh(this[Me],this[Jr],this[Oe]);if(m)return this[DA]=!0,MA(m,O=>{this[Jr]=O,this[_e]=O.value,this[yl]=O.version})}static setTTLExpiration(m){if(typeof m=="number")f=m*1e3,E||(E=0);else if(m&&typeof m=="object")f=m.expiration*1e3,E=(m.eviction||0)*1e3,Ct=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(f<0)throw new Error("Expiration can not be negative");Ct=Ct||(f+E)/4,ph()}static enableAuditing(m=!0){h=m,m&&ZA(),ze.audit=m}static coerceId(m){return m===""?null:QE(m,H)}static async dropTable(){if(delete rt[c][n],c===o){for(let m of S)l.remove(ze.tableName+"/"+m.name),r[m.name]?.drop();l.remove(ze.tableName+"/"),i.drop(),await l.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Il.signalSchemaChange(new Cl.SchemaEventMsg(process.pid,ks.OPERATIONS_ENUM.DROP_TABLE,c,n))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[ps])return this.search(m);if(this[Me]===null){if(m?.conditions)return this.search(m);let O=ze.getRecordCount();return{recordCount:O.recordCount,estimatedRecordRange:O.estimatedRange,records:"./",name:n,database:c,attributes:S}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[Oe]?.returnNonexistent)return this}allowRead(m,O){let w=kl(m);if(w?.read){if(w.isSuperUser)return!0;let N=w.attribute_permissions,A=O?.select;if(N?.length>0||JA&&A){if(O||(O={}),A){let D=N?.length>0&&LA(N,"read");O.select=A.map(y=>{let U=y.name||y;if(!D||D[U]){let G=Yn[U]?.definition?.tableClass;if(G){if(y.name||(y={name:y}),!G.prototype.allowRead.call(null,m,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else O.select=N.filter(D=>D.read&&!Yn[D.attribute_name]).map(D=>D.attribute_name);return O}else return!0}}allowUpdate(m,O){let w=kl(m);if(w?.update){let N=w.attribute_permissions;if(N?.length>0){let A=LA(N,"update");for(let D in O)if(!A[D])return!1;for(let D of N){let y=D.attribute_name;!D.update&&!(y in O)&&(O[y]=this.getProperty(y))}}return!0}}allowCreate(m,O){if(this[ps]){let w=kl(m);if(w?.insert){let N=w.attribute_permissions;if(N?.length>0){let A=LA(N,"insert");for(let D in O)if(!A[D])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return kl(m)?.delete}update(m,O){if(!gs(this[Oe]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let N;return typeof m=="object"&&m&&(O?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[_e]={},this[It]=m):(N=this[It],N&&(m=Object.assign(N,m)),this[It]=N=m)),this._writeUpdate(this[It],O),this}addTo(m,O){if(typeof O=="number")this[Al]===Kx?this.set(m,(+this.getProperty(m)||0)+O):(this[Al]||this.update(),this.set(m,new VE(O)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,O){if(typeof O=="number")return this.addTo(m,-O);throw new Error("Can not subtract a non-numeric value")}invalidate(m){let O=this[Oe],w=this[Me];rc(w),gs(this[Oe]).addWrite({key:w,store:i,invalidated:!0,entry:this[Jr],nodeName:this[Oe]?.nodeName,before:Le.invalidate?.bind(this,O,w),beforeIntermediate:Be.invalidate?.bind(this,O,w),commit:(A,D)=>{if(D?.version>A)return;let y=null;for(let U in r)y||(y={}),y[U]=this.getProperty(U);T(w,y,this[Jr],A,Ol,h,this[Oe],0,"invalidate")}})}static evict(m,O,w){let N=this.Source,A;if(!((L||h)&&(!O||(A=i.getEntry(m),!A||!O)||A.version!==w))){if(L){if(i.hasLock(m,A.version))return;let D;for(let y in r)D||(D={}),D[y]=O[y];if(D)return T(m,D,A,w,bl,null,null,0,null,!0)}return i.ifVersion(m,w,()=>{Fl(m,O,null)}),h?T(m,null,A,w,bl,null,null,0,null,!0):i.remove(m,w)}}lock(){throw new Error("Not yet implemented")}static operation(m,O){return m.table||=n,m.schema||=c,jx.operation(m,O)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,O,w){let N=this[Oe],A=gs(N),D=this[Me];rc(D);let y=this[Jr];this[Al]=O?Kx:mie;let U={key:D,store:i,entry:y,nodeName:N?.nodeName,validate:G=>{m||(m=this[It]),O||m&&FE(m)?N?.source||(A.checkOverloaded(),this.validate(m,!O),B&&(m[B.name]=B.type==="Date"?new Date(G):B.type==="String"?new Date(G).toISOString():G),O&&(t&&m[t]!==D&&(m[t]=D),k&&(y?.value?m[k.name]=y?.value[k.name]:m[k.name]=k.type==="Date"?new Date(G):k.type==="String"?new Date(G).toISOString():G),m=Lo(m))):A.removeWrite(U)},before:O?Le.put?()=>Le.put(N,D,m):null:Le.patch?()=>Le.patch(N,D,m):Le.put?()=>Le.put(N,D,Lo(this)):null,beforeIntermediate:O?Be.put?()=>Be.put(N,D,m):null:Be.patch?()=>Be.patch(N,D,m):Be.put?()=>Be.put(N,D,Lo(this)):null,commit:(G,C,v)=>{if(v){if(N&&C?.version>(N.lastModified||0)&&(N.lastModified=C.version),this[Jr]=C,C?.value?.[_e])throw new Error("Can not assign a record to a record, check for circular references");O||(this[_e]=C?.value??null)}this[It]=m,this[yl]=G;let F=C?.value,oe=m;if(this[Al]=0,C?.version>=G)if(h){let ae=C.localTime,qe=C.version;for(;oe&&(ae>G||qe>=G&&ae>0);){let re=u.get(ae),j=Dt(re);if(qe=j.version,qe>G){if(j.type==="patch"){let ge=j.getValue(i);oe=qE(oe,ge)}else if(j.type==="put"||j.type==="delete")return}else if(qe===G)return;ae=j.previousLocalTime}}else{if(O)return;oe=qE(oe,F)}let be;if(O?be=oe:(this[_e]=F,be=O?oe:Lo(this,oe)),this[_e]=be,be?.[_e])throw new Error("Can not assign a record to a record, check for circular references");let te;O||(te=m),Fl(D,F,be);let Pe=O?"put":"patch";T(D,be,C,G,0,h,N,N.expiresAt||(f?f+Date.now():0),Pe,!1,te)}};A.addWrite(U)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[ps]){for await(let O of this.search(m))(await ze.getResource(O[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[_e]?this._writeDelete(m):!1}_writeDelete(m){let O=gs(this[Oe]),w=this[Me];rc(w);let N=this[Oe];return O.addWrite({key:w,store:i,resource:this,nodeName:N?.nodeName,before:Le.delete?.bind(this,N,w),beforeIntermediate:Be.delete?.bind(this,N,w),commit:(A,D,y)=>{let U=D?.value;y&&(N&&D?.version>(N.lastModified||0)&&(N.lastModified=D.version),zE(this,D)),!(D?.version>A)&&(Fl(this[Me],U),Ze.trace("Write delete entry",w,A),h||p?(T(w,null,this[Jr],A,0,h,this[Oe],0,"delete"),h||ph()):i.remove(this[Me]))}}),!0}search(m){let O=this[Oe],w=gs(O);if(!m)throw new Error("No query provided");let N=m.conditions;N?N.length===void 0&&(N=N[Symbol.iterator]?Array.from(N):[N]):N=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Me]&&(N=[{attribute:null,comparator:"prefix",value:this[Me]}].concat(N));let A,D={};function y(j,ge){let He;switch(ge){case"and":case void 0:if(j.length<1)throw new Error('An "and" operator requires at least one condition');He=!0;break;case"or":if(j.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+ge)}let Vs=He&&{},Kn;for(let $e of j){if($e.conditions){$e.conditions=y($e.conditions,$e.operator);continue}let Ht=$e[0]??$e.attribute,es=Ht==null?H:Bn(S,Ht);if(es){if(He){let $s=Hs(Ht),xt=Vs[$s];xt?(xt.push($e),Kn=!0):Vs[$s]=[$e]}(es.type||vg[$e.comparator])&&($e[1]===void 0?$e.value=G($e.value,es):$e[1]=G($e[1],es))}else if(Ht!=null)throw(0,Ss.handleHDBError)(new Error,`${Ht} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return j;if(Kn)for(let $e in Vs){let Ht=Vs[$e],es=Ht.length;if(es>1)for(let $s=0;$s<es;$s++){let xt=Ht[$s];if(xt.comparator==="ge"||xt.comparator==="greater_than_equal")for(let Wn=0;Wn<es;Wn++){let Ho=Ht[Wn];(Ho.comparator==="le"||Ho.comparator==="less_than_equal")&&(xt.comparator="between",xt.value=[xt.value,Ho.value],j.splice(j.indexOf(Ho),1))}if(xt.comparator==="equals"||!xt.comparator){for(let Wn=0;Wn<es;Wn++)if(Wn!==$s){let Ho=Ht[Wn];j.splice(j.indexOf(Ho),1)}break}}}return j}a(y,"prepareConditions");function U(j,ge){if(m.enforceExecutionOrder)return j;for(let He of j)He.conditions&&(He.conditions=U(He.conditions,He.operator));return j.length>1&&ge!=="or"?(0,Xx.sortBy)(j,xf(ze)):j}a(U,"orderConditions");function G(j,ge){return Array.isArray(j)?j.map(He=>QE(He,ge)):QE(j,ge)}a(G,"coerceTypedValues");let C=m.operator;(N.length>0||C)&&(N=y(N,C));let v=typeof m.sort=="object"&&m.sort,F;if(v&&C!=="or"){let j=v.attribute;if(A=N.find(ge=>Hs(ge.attribute)===Hs(j)),!A){if(!Bn(S,j))throw(0,Ss.handleHDBError)(new Error,`${Array.isArray(j)?j.join("."):j} is not a defined attribute`,404);A={attribute:j,comparator:"sort"},N.push(A)}A.descending=!!v.descending}N=U(N,C),v&&(N[0]===A?v.next&&(F={dbOrderedAttribute:v.attribute,attribute:v.next.attribute,descending:v.next.descending,next:v.next.next}):(A&&N.splice(N.indexOf(A),1),F=v));let oe=m.select;if(N.length===0&&(N=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:N,operator:C,postOrdering:F,selectApplied:!!oe};let be=w.useReadTxn(),te=Bg(N,C,ze,be,m,O,(j,ge)=>XA(j,oe,O,be,ge),D),Pe=m.ensureLoaded!==!1;F||(te=re(te));let ae=ze.transformEntryForSelect(oe,O,be,D,Pe,!0),qe=ze.transformToOrderedSelect(te,oe,F,be,O,ae);function re(j){return m.offset||m.limit!==void 0?j.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):j}return a(re,"applyOffset"),F&&(qe=re(qe)),qe.onDone=()=>{qe.onDone=null,w.doneReadTxn()},qe.selectApplied=!0,qe.getColumns=()=>{if(oe){let j=[];for(let ge of oe)ge==="*"?j.push(...S.map(He=>He.name)):j.push(ge.name||ge);return j}return S.map(j=>j.name)},qe}static transformToOrderedSelect(m,O,w,N,A,D){let y=new Qq;if(w){m=XA(m,O,N,A,null);let U;y.iterate=function(){let C,v=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),F,oe=w.dbOrderedAttribute,be,te,Pe=!0;function ae(re){let j=re.next&&ae(re.next),ge=re.descending;return(He,Vs)=>{let Kn=mh(He,re.attribute,N),$e=mh(Vs,re.attribute,N),Ht=ge?(0,Po.compareKeys)($e,Kn):(0,Po.compareKeys)(Kn,$e);return Ht===0?j?.(He,Vs)||0:Ht}}a(ae,"createComparator");let qe=ae(w);return{async next(){let re;if(C)if(re=C.next(),re.done){if(F)return y.onDone&&y.onDone(),re}else return{value:await D.call(this,re.value)};U=[],be&&U.push(be);do if(re=await v.next(),re.done){if(F=!0,U.length)break;return y.onDone&&y.onDone(),re}else{let j=re.value;if(j?.then&&(j=await j),oe){let ge=mh(j,oe,N);if(Pe)Pe=!1,te=ge;else if(ge!==te){te=ge,be=j;break}}U.push(j)}while(!0);return w.isGrouped,U.sort(qe),C=U[Symbol.iterator](),re=C.next(),re.done?(y.onDone&&y.onDone(),re):{value:await D.call(this,re.value)}},return(){y.onDone&&y.onDone(),v.return()},throw(){y.onDone&&y.onDone(),v.throw()}}};let G=a(C=>{if(typeof O=="object"&&Array.isArray(C.attribute))for(let v=0;v<O.length;v++){let F=O[v],oe;if(F.name===C.attribute[0]){for(oe=F.sort||(F.sort={});oe.next;)oe=oe.next;oe.attribute=C.attribute.slice(1),oe.descending=C.descending}else F===C.attribute[0]&&(O[v]=oe={name:F,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&G(C.next)},"applySortingOnSelect");G(w)}else y.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),y=y.map(D);return y}static transformEntryForSelect(m,O,w,N,A,D){if(m&&(m===t||m?.length===1&&m[0]===t)){let C=a(v=>v?.key??v,"transform");return m===t?C:m.asArray?v=>[C(v)]:v=>({[t]:C(v)})}let y;A&&L&&!m?.every(C=>{let v;return typeof C=="object"?v=C.name:v=C,r[v]||v===t})&&(y=!0);let U,G=a(function(C){let v;if(C!=null){if(fh=C,v=C.value||C.deref?.(),!v&&(C.key===void 0||C.deref)){if(C=Eh(C.key??C,O,{transaction:w,lazy:m?.length<4},this.isSync,F=>F),C?.then)return C.then(G.bind(this));v=C?.value}if(y&&(C.metadataFlags&(Ol|bl)||C.expiresAt&&C.expiresAt<Date.now())){let F=hh(C.key??C,C,O);if(F?.then)return F.then(G)}}if(v==null)return D?Mo.SKIP:v;if(m&&!(m[0]==="*"&&m.length===1)){let F,oe=a((te,Pe)=>{let ae;typeof te=="object"?ae=te.name:ae=te;let qe=Yn?.[ae],re;if(qe){let j=N?.[ae];if(j)if(j.hasMappings){let He=qe.from?v[qe.from]:Hs(C.key);re=j.get(He),re||(re=[])}else re=j.fromRecord?.(v);else re=qe(v,O,C);let ge=a(He=>{if(He&&typeof He=="object"){let Vs=qe.definition?.tableClass||ze;U||(U={});let Kn=U[ae]||(U[ae]=Vs.transformEntryForSelect(ae===te?null:te.select||(Array.isArray(te)?te:null),O,w,j,A));if(Array.isArray(He)){let $e=[],Ht=Vs.transformToOrderedSelect(He,te.select,typeof te.sort=="object"&&te.sort,O,w,Kn)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),es=a(xt=>{for(;!xt.done;){if(xt?.then)return xt.then(es);$e.push(xt.value),xt=Ht.next()}Pe($e,ae)},"nextValue"),$s=es(Ht.next());$s&&(F||(F=[]),F.push($s));return}else if(He=Kn.call(this,He),He?.then){F||(F=[]),F.push(He.then($e=>Pe($e,ae)));return}}Pe(He,ae)},"handleResolvedValue");re?.then?(F||(F=[]),F.push(re.then(ge))):ge(re);return}else re=v[ae],re&&typeof re=="object"&&ae!==te&&(re=ze.transformEntryForSelect(te.select||te,O,w,null)({value:re}));Pe(re,ae)},"selectAttribute"),be;if(typeof m=="string")oe(m,te=>{be=te});else if(Array.isArray(m))if(m.asArray)be=[],m.forEach((te,Pe)=>{te==="*"?m[Pe]=v:oe(te,ae=>be[Pe]=ae)});else{be={};let te=m.forceNulls;for(let Pe of m)if(Pe==="*")for(let ae in v)be[ae]=v[ae];else oe(Pe,(ae,qe)=>{ae===void 0&&te&&(ae=null),be[qe]=ae})}else throw new Ss.ClientError("Invalid select"+m);return F?Promise.all(F).then(()=>be):be}return v},"transform");return G}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");h||ct({table:n,database:c,schemaDefined:_,attributes:S,audit:!0}),m||(m={});let O=!m.rawEvents,w=Fx(ze,this[Me]??null,function(y,U,G,C){try{let v=U.getValue?.(i,O);if(!v&&U.type==="patch"&&O){let F=i.getEntry(y);F?.version===U.version?v=F.value:v=U.getValue?.(i,!0,G),U.type="put"}this.send({id:y,timestamp:G,value:v,version:U.version,type:U.type,beginTxn:C})}catch(v){Ze.error(v)}},m.startTime||0,this[ps]);this[ps]&&(w.includeDescendants=!0,m.onlyChildren&&(w.onlyChildren=!0)),m.crossThreads===!1&&(w.crossThreads=!1),m.supportsTransactions&&(w.supportsTransactions=!0);let N=this[Me],A=m.previousCount;A>1e3&&(A=1e3);let D=m.startTime;if(this[ps]){if(D){if(A)throw new Ss.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:U}of u.getRange({start:D,exclusiveStart:!0})){let G=Dt(U);if(G.tableId!==s)continue;let C=G.recordId;if(N==null||zx(N,C)){let v=G.getValue(i,O,y);w.send({id:C,timestamp:y,value:v,version:G.version,type:G.type})}w.startTime=y}}else if(A){let y=[];for(let{key:U,value:G}of u.getRange({start:"z",end:!1,reverse:!0}))try{let C=Dt(G);if(C.tableId!==s)continue;let v=C.recordId;if(N==null||zx(N,v)){let F=C.getValue(i,O,U);if(y.push({id:v,timestamp:U,value:F,version:C.version,type:C.type}),--A<=0)break}}catch(C){Ze.error("Error getting history entry",U,C)}for(let U=y.length;U>0;)w.send(y[--U]);y[0]&&(w.startTime=y[0].timestamp)}else if(!m.omitCurrent)for(let{key:y,value:U,version:G,localTime:C}of i.getRange({start:N??!1,end:N==null?void 0:[N,Po.MAXIMUM_KEY],versions:!0}))U&&w.send({id:y,timestamp:C,value:U,version:G,type:"put"})}else{A&&!D&&(D=0);let y=this[Jr]?.localTime;if(y===im&&(i.cache?.delete(N),this[Jr]=i.getEntry(N),Ze.trace("re-retrieved record",y,this[Jr]?.localTime),y=this[Jr]?.localTime),Ze.trace("Subscription from",D,"from",N,y),D<y){let U=[],G=y;do{let C=u.get(G);if(C){m.omitCurrent=!0;let v=Dt(C),F=v.getValue(i,O,G);O&&(v.type="put"),U.push({id:N,value:F,timestamp:G,...v}),G=v.previousLocalTime}else break;A&&A--}while(G>D&&A!==0);for(let C=U.length;C>0;)w.send(U[--C]);w.startTime=y}!m.omitCurrent&&this.doesExist()&&w.send({id:N,timestamp:y,value:this,version:this[yl],type:"put"})}return m.listener&&w.on("data",m.listener),w}doesExist(){return!!(this[_e]||this[Al])}publish(m,O){this._writePublish(m,O)}_writePublish(m,O){let w=gs(this[Oe]),N=this[Me]||null;rc(N);let A=this[Oe];w.addWrite({key:N,store:i,entry:this[Jr],nodeName:A?.nodeName,validate:()=>{A?.source||(w.checkOverloaded(),this.validate(m))},before:Le.publish?.bind(this,A,N,m),beforeIntermediate:Be.publish?.bind(this,A,N,m),commit:(D,y,U)=>{y===void 0&&p&&!h&&ph(),T(N,y?.value??null,y,y?.version||D,0,!0,A,y?.expiresAt,"message",!1,m)}})}validate(m,O){let w,N=a((A,D,y)=>{if(D.type&&A!=null)if(O&&A.__op__&&(A=A.value),D.properties){typeof A!="object"&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be an object${D.type?" ("+D.type+")":""}`);let U=D.properties;for(let G=0,C=U.length;G<C;G++){let v=U[G],F=N(A[v.name],v,y+"."+v.name);F&&(A[v.name]=F)}if(D.sealed&&A!=null&&typeof A=="object")for(let G in A)U.find(C=>C.name===G)||(w||(w=[])).push(`Property ${G} is not allowed within object in property ${y}`)}else switch(D.type){case"Int":(typeof A!="number"||A>>0!==A)&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof A!="number"||!(Math.floor(A)===A&&Math.abs(A)<=9007199254740992))&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof A!="number"&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a number`);break;case"ID":typeof A=="string"||A?.length>0&&A.every?.(U=>typeof U=="string")||(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a string, or an array of strings`);break;case"String":typeof A!="string"&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a string`);break;case"Boolean":typeof A!="boolean"&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a boolean`);break;case"Date":if(!(A instanceof Date)){if(typeof A=="string"||typeof A=="number")return new Date(A);(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a Date`)}break;case"BigInt":if(typeof A!="bigint"){if(typeof A=="string"||typeof A=="number")return BigInt(A);(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a bigint`)}break;case"Bytes":A instanceof Uint8Array||(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(A)){if(D.elements)for(let U=0,G=A.length;U<G;U++){let C=A[U],v=N(C,D.elements,y+"[*]");v&&(A[U]=v)}}else(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a Buffer or Uint8Array`);break}D.nullable===!1&&A==null&&(w||(w=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let A=0,D=S.length;A<D;A++){let y=S[A];if(!y.relationship&&(!O||y.name in m)){let U=N(m[y.name],y,y.name);U&&(m[y.name]=U)}}if(d)for(let A in m)S.find(D=>D.name===A)||(w||(w=[])).push(`Property ${A} is not allowed`);if(w)throw new Ss.ClientError(w.join(". "))}getUpdatedTime(){return this[yl]}wasLoadedFromSource(){return L?!!this[DA]:void 0}static async addAttributes(m){let O=S.slice(0);for(let w of m){if(!w.name)throw new Ss.ClientError("Attribute name is required");if(w.name.match(/[`/]/))throw new Ss.ClientError("Attribute names cannot include backticks or forward slashes");O.push(w)}return ct({table:n,database:c,schemaDefined:_,attributes:O}),ze.indexingOperation}static async removeAttributes(m){let O=S.filter(w=>!m.includes(w.name));return ct({table:n,database:c,schemaDefined:_,attributes:O}),ze.indexingOperation}static getRecordCount(m){let O=i.getStats().entryCount,w=5e3,N=1e3,A;O>w&&!m?.exactCount&&(A=N);let D=0;for(let{value:y}of i.getRange({start:!0,lazy:!0,limit:A}))y!=null&&D++;if(A){let y=D;D=0;for(let{value:Pe}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:A}))Pe!=null&&D++;let U=A*2,G=(D+y)/U,C=Math.pow((D-y+1)/A/2,2)+G*(1-G)/U,v=Math.max(Math.sqrt(C)*O,1),F=Math.round(G*O),oe=Math.max(F-1.96*v,0),be=Math.min(F+1.96*v,O),te=Math.pow(10,Math.round(Math.log10(v)));return te>F&&(te=te/10),D=Math.round(F/te)*te,{recordCount:D,estimatedRange:[Math.round(oe),Math.round(be)]}}return{recordCount:D}}static updatedAttributes(){Yn=this.propertyResolvers={$id:(m,O,w)=>({value:w.key}),$updatedtime:(m,O,w)=>w.version,$record:(m,O,w)=>w?{value:m}:m};for(let m of this.attributes){m.resolve=null;let O=m.relationship;if(O)if(m.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),JA=!0,O.to)m.elements?.definition?(Yn[m.name]=m.resolve=(w,N,A)=>{let D=w[O.from?O.from:t],y=m.elements.definition.tableClass;return A?Ma({attribute:O.to,value:D},gs(N).getReadTxn(),!1,y,!1).asArray:y.search([{attribute:O.to,value:D}],N).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,O.from&&(m.resolve.from=O.from)):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${n}" must have an array type referencing a table as the elements`);else if(O.from){let w=m.definition||m.elements?.definition;w?(Yn[m.name]=m.resolve=(N,A,D)=>{let y=N[O.from];if(y!==void 0){if(m.elements){let U,G=y.map(C=>{let v=D?w.tableClass.primaryStore.getEntry(C,{transaction:gs(A).getReadTxn()}):w.tableClass.get(C,A);return v?.then&&(U=!0),v});return O.filterMissing?U?Promise.all(G).then(C=>C.filter(Jx)):G.filter(Jx):U?Promise.all(G):G}return D?w.tableClass.primaryStore.getEntry(y,{transaction:gs(A).getReadTxn()}):w.tableClass.get(y,A)}},m.set=(N,A)=>{if(Array.isArray(A)){let D=A.map(y=>y[Me]||y[w.tableClass.primaryKey]);N[O.from]=D}else{let D=A[Me]||A[w.tableClass.primaryKey];N[O.from]=D}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=O.from):console.error(`The relationship property "${m.name}" in table "${n}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${n}" must use either "from" or "to" arguments`)}$E(this,this)}static async deleteHistory(m=0){let O;for(let{key:w,value:N}of u.getRange({start:0,end:m}))await Nl(),Dt(N).tableId===s&&(O=u.remove(w));await O}static async*getHistory(m=0,O=1/0){for(let{key:w,value:N}of u.getRange({start:m,end:O})){await Nl();let A=Dt(N);A.tableId===s&&(yield{id:A.recordId,localTime:w,version:A.version,type:A.type,value:A.getValue(i,!0,w),user:A.user})}}static async getHistoryOfRecord(m){let O=[];if(m==null)throw new Error("An id is required");let w=i.getEntry(m);if(!w)return O;let N=w.localTime;if(!N)throw new Error("The entry does not have a local audit time");let A=0;do{await Nl();let D=u.get(N);if(D){let y=Dt(D);O.push({id:y.recordId,localTime:N,version:y.version,type:y.type,value:y.getValue(i,!0,N),user:y.user}),N=y.previousLocalTime}else break}while(A<1e3&&N);return O.reverse()}static cleanup(){z?.remove()}}ze.updatedAttributes();let Xq=ze.prototype;return Xq[hie]=!0,f&&ze.setTTLExpiration(f/1e3),J&&jq(),ze;function Fl(K,m,O){let w;for(let N in r){let A=r[N],D=A.isIndexing,y=O?.[N],U=m?.[N];if(y===U&&!D)continue;w=!0;let G=A.indexNulls,C=(0,wl.getIndexedValues)(U,G);if(C){Yx&&A.prefetch(C.map(v=>({key:v,value:K})),Qx);for(let v=0,F=C.length;v<F;v++)A.remove(C[v],K)}if(C=(0,wl.getIndexedValues)(y,G),C){Yx&&A.prefetch(C.map(v=>({key:v,value:K})),Qx);for(let v=0,F=C.length;v<F;v++)A.put(C[v],K)}}return w}a(Fl,"updateIndices");function rc(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>Wx)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)return!0;break;case"bigint":if(K<2n**64n&&K>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof K)}if((0,Po.writeKey)(K,pie,0)>Wx)throw new Error("Primary key size is too large: "+K.length);return!0}a(rc,"checkValidId");function Eh(K,m,O,w,N){let A=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),O.transaction?.isDone)return N(null,K);let D=i.getEntry(K,O);return D&&m&&(D?.version>(m.lastModified||0)&&(m.lastModified=D.version),D?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=D.localTime)),N(D,K)},"whenPrefetched");return w?A():ce>0?(ce--,A()):new Promise((D,y)=>{ce===0?(ce--,i.prefetch([K],()=>{U(),G()})):(X.push(K),Te.push(G),X.length>Jq&&(ce--,U()));function U(){if(X.length>0){let C=Te;i.prefetch(X,()=>{ce===-1?U():ce++;for(let v of C)v()}),X=[],Te=[],de>2&&de--}else ce=de,de<zq&&de++}a(U,"prefetch");function G(){try{D(A())}catch(C){y(C)}}a(G,"load")})}a(Eh,"loadLocalRecord");function kl(K){if(!K?.role)return;let m=K.role.permission;if(m.super_user)return Sie;let O=m[c],w,N=O?.tables;if(N)return N[n];if(c==="data"&&(w=m[n])&&!w.tables)return w}a(kl,"getTablePermissions");function hh(K,m,O,w){if(L){let N;if(O.noCache?N=!0:(m?(!m.value||m.metadataFlags&(Ol|bl)||m.expiresAt&&m.expiresAt<Date.now())&&(N=!0):N=!0,ns(!N,"cache-hit",n)),N){let A=jA(K,m,O).then(D=>(D?.value?.[_e]&&Ze.error("Can not assign a record with a record property"),O&&(D?.version>(O.lastModified||0)&&(O.lastModified=D.version),O.lastRefreshed=Date.now()),D));if(O?.onlyIfCached||m?.value&&w?.allowStaleWhileRevalidate?.(m,K)){if(A.catch(D=>Ze.warn(D)),O?.onlyIfCached&&!w.doesExist())throw new Ss.ServerError("Entry is not cached",504);return}else return A}}}a(hh,"ensureLoadedFromSource");function gs(K){let m=K?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let O=m.next;if(!O)return m=m.next=new to,m.lmdbDb=i,m;m=O}while(!0)}else return new rd}a(gs,"txnForContext");function mh(K,m,O){if(!K)return;fh=K;let w=K.value||K.deref?.()||(fh=i.getEntry(K.key))?.value;if(typeof m=="object"){let A=Yn,D=w;for(let y=0,U=m.length;y<U;y++){let G=m[y],C=A?.[G];D=C&&D?C(D,O,!0)?.value:D?.[G],A=C?.definition?.tableClass?.propertyResolvers}return D}let N=Yn[m];return N?N(w,O):w[m]}a(mh,"getAttributeValue");function XA(K,m,O,w,N){let A=N?.length,D={transaction:w,lazy:A>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},y;function U(G,C){let v=G?.value;if(!v)return Mo.SKIP;for(let F=0;F<A;F++)if(!y?.includes(F)&&!N[F](v,G))return Mo.SKIP;return C!==void 0&&(G.key=C),G}if(a(U,"processEntry"),A>0||!K.hasEntries){let G=K.map(C=>{if(y=null,typeof C=="object"&&C.key!==void 0)return A>0?U(C):C;if(C==null)return Mo.SKIP;for(let v=0;v<A;v++){let oe=N[v].idFilter;if(oe){if(!oe(C))return Mo.SKIP;y||(y=[]),y.push(v)}}return Eh(C,O,D,!1,U)});return Array.isArray(K)&&(G=G.filter(C=>C!==Mo.SKIP)),G.hasEntries=!0,G}return K}a(XA,"transformToEntries");async function jA(K,m,O){let w=m?.metadataFlags,N=m?.version,A,D;if(!i.attemptLock(K,N,()=>{clearTimeout(D);let C=i.getEntry(K);!C||!C.value||C.metadataFlags&(Ol|bl)?A(jA(K,i.getEntry(K),O)):A(C)}))return new Promise(C=>{A=C,D=setTimeout(()=>{i.unlock(K,N)},Eie)});let y=m?.value,U={requestContext:O,replacingRecord:y,replacingVersion:N,source:null,resourceCache:O?.resourceCache},G=O?.responseHeaders;return new Promise((C,v)=>{let F;MA(je(U,async oe=>{let be=performance.now(),te,Pe,ae;try{for(let ge of ze.sources)if(ge.get&&(!ge.get.reliesOnPrototype||ge.prototype.get)&&(U.source=ge,te=await ge.get(K,U),te))break;ae=w&Ol;let re=U.lastModified||ae&&N;Pe=ae||re>N||!y,re||(re=(0,wl.getNextMonotonicTime)());let j=performance.now()-be;if(qr(j,"cache-resolution",n),G&&sg(G,"Server-Timing",`cache-resolve;dur=${j.toFixed(2)}`,!0),oe.timestamp=re,f&&!U.expiresAt&&(U.expiresAt=Date.now()+f),te){if(typeof te!="object")throw new Error("Only objects can be cached and stored in tables");typeof te.toJSON=="function"&&(te=te.toJSON()),t&&te[t]!==K&&(te[t]=K)}F=!0,C({version:re,value:te})}catch(re){re.message+=` while resolving record ${K} for ${n}`,y&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!O?.mustRevalidate||O?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(C({version:N,value:y}),Ze.trace(re.message,"(returned stale record)")):v(re),U.transaction.abort();return}if(O?.noCacheStore){U.transaction.abort();return}gs(U).addWrite({key:K,store:i,entry:m,nodeName:"source",commit:(re,j)=>{if(j?.version!==N)return;let ge=Fl(K,y,te);te?(Be.put?.(U,K,te),T(K,te,j,re,0,h&&Pe||null,U,U.expiresAt,"put",!!ae)):(Be.delete?.(U,K),h||p?T(K,null,j,re,0,h&&Pe||null,U,0,"delete",!!ae):i.remove(K,N))}})}),()=>{i.unlock(K,N)},oe=>{i.unlock(K,N),F&&Ze.error("Error committing cache update",oe)})})}a(jA,"getFromSource");function ph(){if(Ct!==ql&&(ql=Ct,(0,Uo.getWorkerIndex)()===(0,Uo.getWorkerCount)()-1)){if(Gl&&clearTimeout(Gl),!Ct)return;let K=new Date;K.setMonth(0),K.setDate(1),K.setHours(0),K.setMinutes(0),K.setSeconds(0);let m=Math.ceil((Date.now()-K.getTime())/Ct)*Ct+K.getTime(),O=a(w=>{Ze.trace(`Scheduled next cleanup scan at ${new Date(w)}ms`),Gl=setTimeout(()=>P=P.then(async()=>{if(O(Math.max(w+Ct,Date.now())),i.rootStore.status!=="open"){clearTimeout(Gl);return}let N=50,A=new Array(N),D=0;Ze.trace(`Starting cleanup scan for ${n}`);try{let y=0;for(let{key:U,value:G,version:C,expiresAt:v}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let F;G===null&&!h&&C+fie<Date.now()?F=i.remove(U,C):v&&v+E<Date.now()&&(F=ze.evict(U,G,C),y++),F&&(await A[D],A[D]=F.catch(oe=>{Ze.error("Cleanup error",oe)}),++D>=N&&(D=0)),await Nl()}Ze.trace(`Finished cleanup scan for ${n}, evicted ${y} entries`)}catch(y){Ze.trace(`Error in cleanup scan for ${n}:`,y)}}),Math.min(w-Date.now(),2147483647)).unref()},"startNextTimer");O(m)}}a(ph,"scheduleCleanup");function ZA(){z=u?.addDeleteRemovalCallback(s,K=>{let m=i.getEntry(K);m?.value===null&&i.remove(K,m.version)})}a(ZA,"addDeleteRemoval");function jq(){(0,Uo.getWorkerIndex)()===0&&setInterval(async()=>{try{let K=J.name,m=r[K];if(!m)throw new Error(`expiresAt attribute ${J} must be indexed`);for(let{key:O,value:w}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let N=i.getEntry(w);N?.value?N.value[K]<Date.now()&&ze.evict(w,N.value,N.version):i.ifVersion(w,N?.version,()=>m.remove(O,w)),await Nl()}}catch(K){Ze.error("Error in evicting old records",K)}},die).unref()}a(jq,"runRecordExpirationEviction")}function LA(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function Qx(){}function Tie(e){jx=e}function QE(e,t){let r=t?.type;return e===null?e:e===""&&r&&r!=="String"&&r!=="Any"?null:r==="Int"||r==="Long"?e==="null"?null:parseInt(e):r==="Float"?e==="null"?null:parseFloat(e):r==="BigInt"?e==="null"?null:BigInt(e):r==="Boolean"?e==="true"?!0:e==="false"?!1:e:r==="Date"?(typeof e!="number"&&!gie.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,JE.autoCast)(e):e}function zx(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}function MA(e,t,r){return e?.then?e.then(t,r):t(e)}function zE(e,t){e[Jr]=t,e[_e]=t?.value??null,e[yl]=t?.version}function Jx(e){return e!=null}function Fs(e){try{return JSON.stringify(e)}catch{return e}}var ks,Mo,wl,Xx,Dl,Ss,Il,Cl,Ze,Po,Uo,JE,_ie,jx,die,fie,Yx,Eie,yl,hie,Jr,Al,Kx,mie,DA,Xa,Ol,bl,pie,Wx,Sie,xSe,gie,Nl,eE=Re(()=>{ks=x(M()),Mo=require("lmdb"),wl=x(wr()),Xx=require("lodash");Os();jp();Dl=x(ee());$x();Ss=x(se()),Il=x(Rn()),Cl=x(Cs());Ae();Gf();Ze=x($());id();ro();Po=require("ordered-binary"),Uo=x(Ke());xi();JE=x(Q());bc();Nn();HE();qu();_ie=new Uint8Array(9);_ie[8]=192;die=6e4,fie=864e5;Dl.initSync();Yx=Dl.get(ks.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Eie=1e4,yl=Symbol.for("version"),hie=Symbol.for("incremental-update"),Jr=Symbol("entry"),Al=Symbol("is-saving"),Kx=1,mie=2,DA=Symbol("loaded-from-source"),Xa={isNotification:!0,ensureLoaded:!1},Ol=1,bl=8,pie=Buffer.allocUnsafeSlow(8192),Wx=1978,Sie={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},xSe=(0,JE.convertToMS)(Dl.get(ks.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(XE,"makeTable");a(LA,"attributesAsObject");a(Qx,"noop");a(Tie,"setServerUtilities");gie=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(QE,"coerceType");a(zx,"isDescendantId");Nl=a(()=>new Promise(setImmediate),"rest");a(MA,"when");a(zE,"updateResource");a(Jx,"exists");a(Fs,"stringify")});var Ge={};Ye(Ge,{database:()=>Jc,databases:()=>rt,dropDatabase:()=>sS,dropTableMeta:()=>yie,getDatabases:()=>Ls,getTables:()=>Rie,onUpdatedTable:()=>kR,readMetaDb:()=>Ll,resetDatabases:()=>Aie,table:()=>ct,tables:()=>Ir});function Rie(){return rh||Ls(),Ir||{}}function Ls(){if(rh)return rt;rh=!0,ec=new Map;let e=(0,er.getHdbBasePath)()&&(0,et.join)((0,er.getHdbBasePath)(),jr.DATABASES_DIR_NAME),t=(0,er.get)(jr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,er.get)(jr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Xr.existsSync)(e)?e:(0,et.join)((0,er.getHdbBasePath)(),jr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Xr.existsSync)(e))for(let r of(0,Xr.readdirSync)(e,{withFileTypes:!0})){let s=(0,et.basename)(r.name,".mdb");r.isFile()&&(0,et.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&Ll((0,et.join)(e,r.name),null,s)}if((0,Xr.existsSync)((0,Za.getBaseSchemaPath)())){for(let r of(0,Xr.readdirSync)((0,Za.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,et.join)((0,Za.getBaseSchemaPath)(),r.name),n=(0,et.join)((0,Za.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Xr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,et.extname)(i.name).toLowerCase()===".mdb"){let o=(0,et.join)(n,i.name);Ll((0,et.join)(s,i.name),(0,et.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,Xr.existsSync)(n))for(let o of(0,Xr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,et.extname)(o.name).toLowerCase()===".mdb"&&Ll((0,et.join)(n,o.name),(0,et.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,et.join)(c.path,(0,et.basename)(o+".mdb"));(0,Xr.existsSync)(u)&&Ll(u,o,r,null,!0)}}for(let r in rt){let s=ec.get(r);if(s){let n=rt[r];r.includes("delete")&&Ts.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Ts.trace(`delete table class ${i}`),delete n[i])}else if(delete rt[r],r==="data"){for(let n in Ir)delete Ir[n];delete Ir[sh]}}return ec=null,rt}}function Aie(){rh=!1;for(let[,e]of Li)e.needsDeletion=!0;Ls();for(let[e,t]of Li)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Li.delete(e));return rt}function Ll(e,t,r=vA,s,n){let i=new UA.default(e,!1);try{let o=Li.get(e);o?o.needsDeletion=!1:(o=(0,ZE.open)(i),Li.set(e,o));let c=new vo.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(jE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,Xr.existsSync)(s)&&(i.path=s,_=(0,ZE.open)(i),_.isLegacy=!0):_=BE(o));let l=rq(r),d=l[sh],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[p,S]=E.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let T=f.get(p);T||f.set(p,T={attributes:[]}),(S==null||h.is_hash_attribute)&&(T.primary=h),S!=null&&T.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:p,primary:S}=h;if(!S){for(let X of p)if(X.is_hash_attribute||X.isPrimaryKey){S=X;break}if(!S){Ts.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let T=l[E],b={},R=[],L,H,P=typeof S.audit=="boolean"?S.audit:(0,er.get)(jr.CONFIG_PARAMS.LOGGING_AUDITLOG),k=S.trackDeletes,B=S.expiration,J=S.eviction,z=S.sealed;if(T)b=T.indices,R=T.attributes,T.schemaVersion++;else{L=S.tableId,L?L>=(u.get(ja)||0)&&u.putSync(ja,L+1):(S.tableId=L=u.get(ja),L||(L=1),u.putSync(ja,L+1),u.putSync(S.key,S));let X=new vo.default(!S.is_hash_attribute,S.is_hash_attribute);H=a_(o.openDB(S.key,X)),H.rootStore=o,H.tableId=L}for(let X of p){X.attribute=X.name;try{if(!X.is_hash_attribute&&(X.indexed||X.attribute&&!X.name)){if(!b[X.name]){let ce=new vo.default(!X.is_hash_attribute,X.is_hash_attribute);b[X.name]=o.openDB(X.key,ce),b[X.name].indexNulls=X.indexNulls}let Te=R.find(ce=>ce.name===X.name);Te?R.splice(R.indexOf(Te),1,X):R.push(X)}}catch(Te){Ts.error("Error trying to update attribute",X,R,b,Te)}}if(!T){T=sq(l,E,XE({primaryStore:H,auditStore:_,audit:P,sealed:z,expirationMS:B&&B*1e3,evictionMS:J&&J*1e3,trackDeletes:k,tableName:E,tableId:L,primaryKey:S.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:b,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),T.schemaVersion=1;for(let X of BA)X(T)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function rq(e){let t=rt[e];if(t||(e==="data"?t=rt[e]=Ir:e==="system"?Object.defineProperty(rt,"system",{value:t=Object.create(null),configurable:!0}):t=rt[e]=Object.create(null)),ec&&!ec.has(e)){let r=new Set;t[sh]=r,ec.set(e,r)}return t}function sq(e,t,r){return e[t]=r,r}function Jc({database:e,table:t}){e||(e=vA),Ls();let r=rq(e),s=(0,et.join)((0,er.getHdbBasePath)(),jr.DATABASES_DIR_NAME),n=(0,er.get)(jr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(n.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&n[e]?.tables?.[t]?.path;s=i||n[e]?.path||process.env.STORAGE_PATH||(0,er.get)(jr.CONFIG_PARAMS.STORAGE_PATH)||((0,Xr.existsSync)(s)?s:(0,et.join)((0,er.getHdbBasePath)(),jr.LEGACY_DATABASES_DIR_NAME));let o=(0,et.join)(s,(i?t:e)+".mdb"),c=Li.get(o);if(!c){let u=new UA.default(o,!1);c=(0,ZE.open)(u),Li.set(o,c)}return c}async function sS(e){if(!rt[e])throw new Error("Schema does not exist");let t=rt[e];for(let r in t){let n=t[r].primaryStore.rootStore;Li.delete(n.path),n.status==="open"&&(await n.close(),await Zx.remove(n.path))}if(e==="data"){for(let r in Ir)delete Ir[r];delete Ir[sh]}delete rt[e]}function ct({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,sealed:c,trackDeletes:u,schemaDefined:_,origin:l}){t||(t=vA);let d=Jc({database:t,table:e}),f=rt[t],E=f?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,p,S,T;_==null&&(_=!0);let b=new vo.default(!1);for(let B of i)B.attribute?(B.name=B.attribute,B.indexed=!0):B.attribute=B.name,B.expiresAt&&(B.indexed=!0);let R,L;if(E){if(h=E.primaryKey,E.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);E.attributes.splice(0,E.attributes.length,...i)}else{let B=d.auditStore;B||(B=BE(d)),p=i.find(Te=>Te.isPrimaryKey)||{},h=p.name,p.is_hash_attribute=!0,p.schemaDefined=_,u&&(p.trackDeletes=!0),o=p.audit=typeof o=="boolean"?o:(0,er.get)(jr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(p.expiration=r),s&&(p.eviction=s),typeof c=="boolean"&&(p.sealed=c),l&&(p.origins?p.origins.includes(l)||p.origins.push(l):p.origins=[l]),Ts.trace(`${e} table loading, opening primary store`);let J=new vo.default(!1,!0),z=e+"/",X=a_(d.openDB(z,J));X.rootStore=d,T=d.dbisDb=d.openDB(jE.INTERNAL_DBIS_NAME,b),X.tableId=T.get(ja),X.tableId||(X.tableId=1),T.putSync(ja,X.tableId+1),p.tableId=X.tableId,E=sq(f,e,XE({primaryStore:X,auditStore:B,audit:o,sealed:c,trackDeletes:u,expirationMS:r&&r*1e3,evictionMS:s&&s*1e3,primaryKey:h,tableName:e,tableId:X.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:T})),E.schemaVersion=1,R=!0,k(),T.put(z,p)}S=E.indices,T=T||(d.dbisDb=d.openDB(jE.INTERNAL_DBIS_NAME,b)),E.dbisDB=T;let H=[];for(let{key:B,value:J}of T.getRange({start:!0})){let[z,X]=B.toString().split("/");if(X===""&&(X=J.name),X){if(z!==e)continue}else X=z;if(!i.find(ce=>ce.name===X)?.indexed&&J.indexed&&!J.isPrimaryKey){k(),R=!0,T.remove(B);let ce=E.indices[z];ce&&H.push(ce)}}let P=[];try{for(let B of i||[]){if(B.relationship)continue;let J=e+"/"+(B.name||"");Object.defineProperty(B,"key",{value:J,configurable:!0});let z=T.get(J);if(B.isPrimaryKey){if(z=z||T.get(J=e+"/")||{},o!==E.audit||c!==c||(+r||void 0)!==(+z.expiration||void 0)||(+s||void 0)!==(+z.eviction||void 0)){let Te=Object.assign({},z);typeof o=="boolean"&&(o&&E.enableAuditing(o),Te.audit=o),r&&(Te.expiration=+r),s&&(Te.eviction=+s),c!==void 0&&(Te.sealed=c),R=!0,k(),T.put(J,Te)}continue}z?.attribute&&!z.name&&(z.indexed=!0);let X=!z||z.type!==B.type||z.indexed!==B.indexed||z.nullable!==B.nullable||JSON.stringify(z.attributes)!==JSON.stringify(B.attributes)||JSON.stringify(z.elements)!==JSON.stringify(B.elements);if(B.indexed){let Te=new vo.default(!0,!1),ce=d.openDB(J,Te);(X||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Ml.workerData?.restartNumber)&&(R=!0,k(),z=T.get(J),(X||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Ml.workerData?.restartNumber)&&(R=!0,B.indexNulls===void 0&&(B.indexNulls=!0),E.primaryStore.getStats().entryCount>0&&(B.lastIndexedKey=z?.lastIndexedKey||!1,B.indexingPID=process.pid,ce.isIndexing=!0,Object.defineProperty(B,"dbi",{value:ce}),P.push(B))),T.put(J,B)),z?.indexNulls&&B.indexNulls===void 0&&(B.indexNulls=!0),ce.indexNulls=B.indexNulls,S[B.name]=ce}else X&&(R=!0,k(),T.put(J,B))}}finally{L&&L()}if(R&&(E.schemaVersion++,E.updatedAttributes()),Ts.trace(`${e} table loading, running index`),P.length>0||H.length>0?E.indexingOperation=Nie(E,P,H):R&&eh.signalSchemaChange(new th.SchemaEventMsg(process.pid,"schema-change",E.databaseName,E.tableName)),E.origin=l,R)for(let B of BA)B(E,l!=="cluster");return(r||s||n)&&E.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),Ts.trace(`${e} table loaded`),E;function k(){L||d.transactionSync(()=>({then(B){L=B}}))}a(k,"startTxn")}async function Nie(e,t,r){try{let s=e.schemaVersion;await eh.signalSchemaChange(new th.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,n=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,eq.getIndexedValues)(l[h]);if(p)for(let S=0,T=p.length;S<T;S++)E.dbi.put(p[S],_)}}),n.then(()=>u--,f=>{u--,Ts.error(f)}),Ml.workerData&&Ml.workerData.restartNumber!==tq.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>Oie?await n:u>bie&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,n=e.dbisDB.put(_.key,_)}await n,await eh.signalSchemaChange(new th.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Ts.error("Error in indexing",s)}}function yie({table:e,database:t}){let r=Jc({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function kR(e){BA.push(e)}var er,jE,ZE,et,Xr,Za,vo,UA,jr,Zx,PA,eq,eh,th,Ml,Ts,tq,vA,sh,Ir,rt,ja,BA,rh,Li,ec,Oie,bie,Ae=Re(()=>{er=x(ee()),jE=x(dt()),ZE=require("lmdb"),et=require("path"),Xr=require("fs"),Za=x(Je());eE();vo=x(c_()),UA=x(l_()),jr=x(M()),Zx=x(require("fs-extra")),PA=require("../index"),eq=x(wr()),eh=x(Rn()),th=x(Cs()),Ml=require("worker_threads"),Ts=x($()),tq=x(Ke());xi();bc();vA="data",sh=Symbol("defined-tables");(0,er.initSync)();Ir=Object.create(null),rt=Object.create(null);(0,PA._assignPackageExport)("databases",rt);(0,PA._assignPackageExport)("tables",Ir);ja=Symbol.for("next-table-id"),BA=[],Li=new Map;a(Rie,"getTables");a(Ls,"getDatabases");a(Aie,"resetDatabases");a(Ll,"readMetaDb");a(rq,"ensureDB");a(sq,"setTable");a(Jc,"database");a(sS,"dropDatabase");a(ct,"table");Oie=1e3,bie=10;a(Nie,"runIndexing");a(yie,"dropTableMeta");a(kR,"onUpdatedTable")});var Q=g((WSe,pq)=>{"use strict";var Mi=require("path"),cq=require("fs-extra"),br=$(),nq=require("fs-extra"),nh=require("os"),wie=require("net"),Iie=require("recursive-iterator"),at=M(),Cie=MO(),iq=require("papaparse"),ih=require("moment"),{inspect:Die}=require("util"),oq=require("is-number"),KSe=require("lodash"),Lie=require("minimist"),Mie=require("https"),Uie=require("http"),{hdb_errors:oh}=se(),Pie=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,uq=require("util").promisify(setTimeout),vie=100,Bie=5,Hie="",xie=4,aq={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};pq.exports={isEmpty:Zr,isEmptyOrZeroLength:fn,arrayHasEmptyValues:Fie,arrayHasEmptyOrZeroLengthValues:kie,buildFolderPath:Vie,isBoolean:lq,errorizeMessage:qie,stripFileExtension:Yie,autoCast:Kie,autoCastJSON:_q,autoCastJSONDeep:xA,removeDir:Wie,compareVersions:Qie,isCompatibleDataVersion:zie,escapeRawValue:Jie,unescapeValue:Xie,stringifyProps:jie,timeoutPromise:eoe,isClusterOperation:roe,getClusterUser:noe,checkGlobalSchemaTable:soe,getHomeDir:fq,getPropsFilePath:Zie,promisifyPapaParse:ioe,removeBOM:Eq,createEventPromise:ooe,checkProcessRunning:aoe,checkSchemaTableExist:coe,checkSchemaExists:hq,checkTableExists:mq,getStartOfTomorrowInSeconds:uoe,getLimitKey:loe,isObject:$ie,isNotEmptyAndHasValue:Gie,autoCasterIsNumberCheck:dq,backtickASTSchemaItems:_oe,isPortTaken:toe,createForkArgs:doe,autoCastBoolean:foe,async_set_timeout:uq,getTableHashAttribute:Eoe,doesSchemaExist:hoe,doesTableExist:moe,stringifyObj:poe,ms_to_time:Soe,changeExtension:Toe,getEnvCliRootPath:qA,noBootFile:goe,httpRequest:Roe,transformReq:Aoe,convertToMS:Ooe,PACKAGE_ROOT:at.PACKAGE_ROOT};function qie(e){return e instanceof Error?e:new Error(e)}a(qie,"errorizeMessage");function Zr(e){return e==null}a(Zr,"isEmpty");function Gie(e){return!Zr(e)&&(e||e===0||e===""||lq(e))}a(Gie,"isNotEmptyAndHasValue");function fn(e){return Zr(e)||e.length===0||e.size===0}a(fn,"isEmptyOrZeroLength");function Fie(e){if(Zr(e))return!0;for(let t=0;t<e.length;t++)if(Zr(e[t]))return!0;return!1}a(Fie,"arrayHasEmptyValues");function kie(e){if(fn(e))return!0;for(let t=0;t<e.length;t++)if(fn(e[t]))return!0;return!1}a(kie,"arrayHasEmptyOrZeroLengthValues");function Vie(...e){try{return e.join(Mi.sep)}catch{console.error(e)}}a(Vie,"buildFolderPath");function lq(e){return Zr(e)?!1:e===!0||e===!1}a(lq,"isBoolean");function $ie(e){return Zr(e)?!1:typeof e=="object"}a($ie,"isObject");function Yie(e){return fn(e)?Hie:e.slice(0,-xie)}a(Yie,"stripFileExtension");function Kie(e){return Zr(e)||e===""||typeof e!="string"?e:aq[e]!==void 0?aq[e]:dq(e)===!0?Number(e):Pie.test(e)?new Date(e):e}a(Kie,"autoCast");function _q(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(_q,"autoCastJSON");function xA(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=xA(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=xA(r);s!==r&&(e[t]=s)}return e}else return _q(e)}a(xA,"autoCastJSONDeep");function dq(e){if(e.startsWith("0.")&&oq(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&oq(e))}a(dq,"autoCasterIsNumberCheck");async function Wie(e){if(fn(e))throw new Error(`Directory path: ${e} does not exist`);try{await nq.emptyDir(e),await nq.remove(e)}catch(t){throw br.error(`Error removing files in ${e} -- ${t}`),t}}a(Wie,"removeDir");function Qie(e,t){if(fn(e)){br.info("Invalid current version sent as parameter.");return}if(fn(t)){br.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(Qie,"compareVersions");function zie(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(zie,"isCompatibleDataVersion");function Jie(e){if(Zr(e))return e;let t=String(e);return t==="."?at.UNICODE_PERIOD:t===".."?at.UNICODE_PERIOD+at.UNICODE_PERIOD:t.replace(at.FORWARD_SLASH_REGEX,at.UNICODE_FORWARD_SLASH)}a(Jie,"escapeRawValue");function Xie(e){if(Zr(e))return e;let t=String(e);return t===at.UNICODE_PERIOD?".":t===at.UNICODE_PERIOD+at.UNICODE_PERIOD?"..":String(e).replace(at.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Xie,"unescapeValue");function jie(e,t){if(Zr(e))return br.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+nh.EOL}!fn(s)&&s[0]===";"?r+=" "+s+n+nh.EOL:fn(s)||(r+=s+"="+n+nh.EOL)}catch{br.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(jie,"stringifyProps");function fq(){let e;try{e=nh.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(fq,"getHomeDir");function Zie(){let e=Mi.join(fq(),at.HDB_HOME_DIR_NAME,at.BOOT_PROPS_FILE_NAME);return cq.existsSync(e)||(e=Mi.join(__dirname,"../","hdb_boot_properties.file")),e}a(Zie,"getPropsFilePath");function eoe(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(eoe,"timeoutPromise");async function toe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=wie.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(toe,"isPortTaken");function roe(e){try{return at.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){br.error(`Error checking operation against cluster ops ${t}`)}return!1}a(roe,"isClusterOperation");function soe(e,t){let r=(Ae(),ne(Ge)).getDatabases();if(!r[e])return oh.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return oh.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(soe,"checkGlobalSchemaTable");function noe(e,t){if(Zr(t)){br.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Zr(e)||fn(e)){br.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){br.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){br.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(noe,"getClusterUser");function ioe(){iq.parsePromise=function(e,t,r){return new Promise(function(s,n){iq.parse(e,{header:!0,transformHeader:Eq,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(ioe,"promisifyPapaParse");function Eq(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Eq,"removeBOM");function ooe(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;br.info(`Got cluster status event response: ${Die(n)}`);try{i.cancel()}catch{br.error("Error trying to cancel timeout.")}s(n)})})}a(ooe,"createEventPromise");async function aoe(e){let t=!0,r=0;do await uq(vie*r++),(await Cie.findPs(e)).length>0&&(t=!1);while(t&&r<Bie);if(t)throw new Error(`process ${e} was not started`)}a(aoe,"checkProcessRunning");function coe(e,t){let r=hq(e);if(r)return r;let s=mq(e,t);if(s)return s}a(coe,"checkSchemaTableExist");function hq(e){let{getDatabases:t}=(Ae(),ne(Ge));if(!t()[e])return oh.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(hq,"checkSchemaExists");function mq(e,t){let{getDatabases:r}=(Ae(),ne(Ge));if(!r()[e][t])return oh.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(mq,"checkTableExists");function uoe(){let e=ih().utc().add(1,at.MOMENT_DAYS_TAG).startOf(at.MOMENT_DAYS_TAG).unix(),t=ih().utc().unix();return e-t}a(uoe,"getStartOfTomorrowInSeconds");function loe(){return ih().utc().format("DD-MM-YYYY")}a(loe,"getLimitKey");function _oe(e){try{let t=new Iie(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){br.error("Got an error back ticking items."),br.error(t)}}a(_oe,"backtickASTSchemaItems");function doe(e){return[e]}a(doe,"createForkArgs");function foe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(foe,"autoCastBoolean");function Eoe(e,t){let{getDatabases:r}=(Ae(),ne(Ge)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(Eoe,"getTableHashAttribute");function hoe(e){let{getDatabases:t}=(Ae(),ne(Ge));return t()[e]!==void 0}a(hoe,"doesSchemaExist");function moe(e,t){let{getDatabases:r}=(Ae(),ne(Ge));return r()[e]?.[t]!==void 0}a(moe,"doesTableExist");function poe(e){try{return JSON.stringify(e)}catch{return e}}a(poe,"stringifyObj");function Soe(e){let t=ih.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(Soe,"ms_to_time");function Toe(e,t){let r=Mi.basename(e,Mi.extname(e));return Mi.join(Mi.dirname(e),r+t)}a(Toe,"changeExtension");function qA(){if(process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Lie(process.argv);if(e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(qA,"getEnvCliRootPath");var HA;function goe(){if(HA)return HA;let e=qA();qA()&&cq.pathExistsSync(Mi.join(e,at.HDB_CONFIG_FILE))&&(HA=!0)}a(goe,"noBootFile");function Roe(e,t){let r;return e.protocol==="http:"?r=Uie:r=Mie,new Promise((s,n)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{s(c)})});i.on("error",o=>{n(o)}),i.write(JSON.stringify(t)),i.end()})}a(Roe,"httpRequest");function Aoe(e){if(!e.schema&&!e.database){e.schema=at.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Aoe,"transformReq");function Ooe(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}a(Ooe,"convertToMS")});var ee=g((zSe,Rq)=>{"use strict";var GA=require("fs-extra"),Bo=require("path"),Sq=require("os"),boe=require("properties-reader"),Pl=$(),Ul=Q(),ue=M(),ah=Pr(),Noe="Error initializing environment manager",ch="BOOT_PROPS_FILE_PATH",Tq=!1,yoe={[ue.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Vn={};Rq.exports={BOOT_PROPS_FILE_PATH:ch,getHdbBasePath:woe,setHdbBasePath:Ioe,get:gq,initSync:Doe,setProperty:Ue,initTestEnvironment:Loe};function woe(){return Vn[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(woe,"getHdbBasePath");function Ioe(e){Vn[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Ioe,"setHdbBasePath");function gq(e){let t=ah.getConfigValue(e);return t===void 0?Vn[e]:t}a(gq,"get");function Ue(e,t){yoe[e]&&(Vn[e]=t),ah.updateConfigObject(e,t)}a(Ue,"setProperty");function Coe(){let e;try{e=Ul.getPropsFilePath(),GA.accessSync(e,GA.constants.F_OK|GA.constants.R_OK),Tq=!0;let t=boe(e);return Vn[ue.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ue.HDB_SETTINGS_NAMES.INSTALL_USER),Vn[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Vn[ch]=e,!0}catch{return Pl.trace(`Environment manager found no properties file at ${e}`),!1}}a(Coe,"doesPropFileExist");function Doe(e=!1){try{(Tq||Coe()||Ul.noBootFile())&&(ah.initConfig(e),Vn[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=ah.getConfigValue(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Pl.error(Noe),Pl.error(t),console.error(t),process.exit(1)}}a(Doe,"initSync");function Loe(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Bo.join(__dirname,"../../","unitTests");Vn[ch]=Bo.join(u,"hdb_boot_properties.file"),Ue(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Bo.join(u,"settings.test")),Ue(ue.HDB_SETTINGS_NAMES.INSTALL_USER,Sq.userInfo()?Sq.userInfo().username:void 0),Ue(ue.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ue(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Bo.join(u,"envDir","log")),Ue(ue.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ue(ue.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ue(ue.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ue(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Bo.join(u,"envDir")),Ue(ue.CONFIG_PARAMS.STORAGE_PATH,Bo.join(u,"envDir")),n&&(Ue(ue.CONFIG_PARAMS.HTTP_SECUREPORT,gq(ue.CONFIG_PARAMS.HTTP_PORT)),Ue(ue.CONFIG_PARAMS.HTTP_PORT,null)),Ue(ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!n),Ue(ue.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ue(ue.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Ul.isEmpty(i)?!1:i),Ue(ue.CONFIG_PARAMS.HTTP_CORS,Ul.isEmpty(i)?!1:i),Ue(ue.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ue(ue.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ue(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ue(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ue(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Bo.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ue(ue.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Ul.isEmpty(c)?!1:c),o&&(Ue("CORS_ACCESSLIST",o),Ue(ue.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),s&&(Ue(ue.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),Ue(ue.CONFIG_PARAMS.HTTP_TIMEOUT,s)),t&&(Ue(ue.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ue(ue.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ue(ue.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ue(ue.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${ch}. Please check your boot props and settings files`;Pl.fatal(r),Pl.error(t)}}a(Loe,"initTestEnvironment")});var yq=g((XSe,Nq)=>{"use strict";var bq=require("joi"),{string:vl,boolean:Aq,array:Moe}=bq.types(),Oq=M(),Uoe=Xe();Nq.exports=Poe;function Poe(e){let t=bq.object({operation:vl.valid(Oq.OPERATIONS_ENUM.ADD_NODE,Oq.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:vl.required(),subscriptions:Moe.items({schema:vl.required(),table:vl.optional(),hash_attribute:vl.optional(),subscribe:Aq.required(),publish:Aq.required()}).min(1).required()});return Uoe.validateBySchema(e,t)}a(Poe,"updateRemoteSourceValidator")});var Bl=g((ZSe,wq)=>{"use strict";var FA=class{static{a(this,"UpdateRemoteResponseObject")}constructor(t,r,s=void 0){this.status=t,this.message=r,this.system_info=s}};wq.exports=FA});var Mq=g((tTe,Lq)=>{"use strict";var voe=yq(),$n=$(),kA=Fe(),Iq=M(),VA=os(),Ui=st(),Cq=fu(),Boe=Z_(),{Node:Hoe,NodeSubscription:Dq}=Ei(),$A=Bl(),YA=Q(),xoe=ee(),{cloneDeep:qoe}=require("lodash"),{broadcast:Goe}=Ke();Lq.exports=Foe;async function Foe(e){try{let t=voe(e);if(t)return $n.error(`Validation error in updateRemoteSource: ${t.message}`),new $A(kA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:s,system_info:n}=e,i=[],o=qoe(await VA.getNodeRecord(s)),c=!YA.isEmptyOrZeroLength(o);o=c?o[0]:o,c&&$n.trace(`Existing record found for ${s}, updating records subscriptions`);for(let _=0,l=r.length;_<l;_++){let d=r[_],f=d.schema,E=d.table;if(!YA.doesSchemaExist(f)){$n.trace(`updateRemoteSource creating schema: ${f}`);try{await Cq.createSchema({operation:"create_schema",schema:f})}catch(h){$n.error(h)}}if(E&&!YA.doesTableExist(f,E)){let h=new Boe(f,E,d.hash_attribute);d.attributes&&(h.attributes=d.attributes),$n.trace(`updateRemoteSource creating table: ${E} in schema: ${f} with attributes: ${JSON.stringify(d.attributes)}`);try{await Cq.createTable(h)}catch(p){$n.error(p)}$n.trace(`Creating local stream for ${f}.${E}`),await Ui.createLocalTableStream(f,E)}if(f===Iq.SYSTEM_SCHEMA_NAME&&await Ui.createLocalTableStream(f,E),c?(await Ui.updateConsumerIterator(f,E,s,"stop"),await Ui.updateRemoteConsumer(d,s),d.subscribe===!0&&await Ui.updateConsumerIterator(f,E,s,"start")):(await Ui.updateRemoteConsumer(d,s),d.subscribe===!0?await Ui.updateConsumerIterator(f,E,s,"start"):await Ui.updateConsumerIterator(f,E,s,"stop")),c){let h=!1;for(let p=0,S=o.subscriptions.length;p<S;p++){let T=o.subscriptions[p];if(T.schema===f&&T.table===E){T.publish=d.publish,T.subscribe=d.subscribe,h=!0;break}}h||o.subscriptions.push(new Dq(f,E,d.publish,d.subscribe))}else i.push(new Dq(f,E,d.publish,d.subscribe))}c||(o=new Hoe(s,i,void 0),$n.trace(`No record found for ${s}, creating a new one`));let u=Object.create({});return Object.assign(u,o),u.system_info=n,await VA.upsertNodeRecord(u),Goe({type:"nats_update"}),new $A(kA.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${xoe.get(Iq.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await VA.getSystemInfo())}catch(t){$n.error(t);let r=t.message?t.message:t;return new $A(kA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(Foe,"updateRemoteSource")});var Bq=g((sTe,vq)=>{"use strict";var Pq=require("joi"),{string:Uq}=Pq.types(),koe=M(),Voe=Xe();vq.exports=$oe;function $oe(e){let t=Pq.object({operation:Uq.valid(koe.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:Uq.required()});return Voe.validateBySchema(e,t)}a($oe,"removeRemoteSourceValidator")});var qq=g((iTe,xq)=>{"use strict";var Yoe=Bq(),uh=$(),lh=Fe(),KA=M(),Koe=os(),Woe=Q(),Hq=st(),Qoe=ee(),_h=Bl(),{NodeSubscription:zoe}=Ei(),Joe=sa(),Xoe=si(),{broadcast:joe}=Ke(),Zoe=Qoe.get(KA.CONFIG_PARAMS.CLUSTERING_NODENAME);xq.exports=eae;async function eae(e){try{let t=Yoe(e);if(t)return uh.error(`Validation error in removeRemoteSource: ${t.message}`),new _h(lh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,s=await Koe.getNodeRecord(r);if(Woe.isEmptyOrZeroLength(s)){let i=`No record found for node '${r}'`;return uh.error(i),new _h(lh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}s=s[0];for(let i=0,o=s.subscriptions.length;i<o;i++){let c=s.subscriptions[i];uh.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let u=new zoe(c.schema,c.table,!1,!1);await Hq.updateConsumerIterator(c.schema,c.table,r,"stop"),await Hq.updateRemoteConsumer(u,r)}let n=new Joe(KA.SYSTEM_SCHEMA_NAME,KA.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Xoe.deleteRecord(n),joe({type:"nats_update"}),new _h(lh.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${Zoe} successfully removed node '${r}'.`)}catch(t){uh.error(t);let r=t.message?t.message:t;return new _h(lh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(eae,"removeRemoteSource")});var Vq=g((aTe,kq)=>{"use strict";var dh=$(),Hl=M(),Gq=Fe(),WA=ee(),tae=Q(),Fq=Bl(),rae=os(),sae=Dd(),nae=Lr();kq.exports=iae;async function iae(e){try{dh.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=tae.ms_to_time(t),s=new oae(WA.get(Hl.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),WA.get(Hl.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT)??WA.get(Hl.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT),r,await rae.getSystemInfo());try{let n={name:e.node_name,system_info:e.system_info},i=new sae(Hl.SYSTEM_SCHEMA_NAME,Hl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[n]);await nae.update(i)}catch(n){dh.error("Get remote config encountered an error updating system info for node:",e.node_name,n)}return dh.trace("getRemoteSourceConfig response:",s),new Fq(Gq.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,s)}catch(t){dh.error(t);let r=t.message?t.message:t;return new Fq(Gq.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(iae,"getRemoteSourceConfig");function oae(e,t,r,s){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=s}a(oae,"ConfigResponseObject")});var Wq=g((uTe,Kq)=>{"use strict";var $q=ee();$q.initSync();var Yq=st(),xl=$(),tc=M(),QA=Fe(),aae=Mq(),cae=qq(),uae=Vq(),lae=Bl(),{encode:_ae,decode:dae}=require("msgpackr"),fae=gn(),Eae=ei(),hae=require("util"),mae=M(),{isMainThread:pae,parentPort:Sae}=require("worker_threads");Ke();var Tae=hae.promisify(fae.setSchemaDataToGlobal),zA=$q.get(tc.CONFIG_PARAMS.CLUSTERING_NODENAME);Kq.exports=gae;async function gae(){try{xl.notify("Starting reply service."),await Tae();let e=await Yq.getConnection(),t=`${zA}.__request__`,r=e.subscribe(t,{queue:zA});await Rae(r)}catch(e){xl.error(e)}}a(gae,"initialize");async function Rae(e){for await(let t of e){let r=dae(t.data),s;switch(r.operation){case tc.OPERATIONS_ENUM.ADD_NODE:case tc.OPERATIONS_ENUM.UPDATE_NODE:s=await aae(r);break;case tc.OPERATIONS_ENUM.REMOVE_NODE:s=await cae(r);break;case tc.OPERATIONS_ENUM.CLUSTER_STATUS:s=await uae(r);break;case tc.OPERATIONS_ENUM.DESCRIBE_ALL:s=await Aae();break;default:let n=`node '${zA}' reply service received unrecognized request operation`;xl.error(n),s=new lae(QA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,n)}xl.trace(s),t.respond(_ae(s))}}a(Rae,"handleRequest");async function Aae(){try{return{status:QA.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await Eae.describeAll()}}catch(e){return xl.error(e),{status:QA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}a(Aae,"getRemoteDescribeAll");pae||Sae.on("message",async e=>{let{type:t}=e;t===mae.ITC_EVENT_TYPES.SHUTDOWN&&Yq.closeConnection()})});var Oae=Wq();(async()=>{try{await Oae()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();
30
+ `)}a(NH,"defaultNotFound")});async function qH({clientId:e,user:t,clean:r,will:s}){let n;if(e&&!r){let i=await JR.get(e,{returnNonexistent:!0});n=new ZR(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await JR.get(e);i&&i.delete()}n=new yE(e,t)}return s&&(s.id=e,s.user={username:t?.username},hl.put(s)),n}function XR(){return NE++,NE>65500&&(NE=1),NE}function jR(e,t,r=e){let{topic:s,retain:n}=e;e.data=t,e.async=!0,e.authorize=!0;let i=Ti.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return je(r,()=>n?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var BH,Ii,HH,xH,JR,hl,NE,yE,ZR,GH=Re(()=>{Ae();xu();BH=x(wr()),Ii=x($());ro();HH=x(Ke()),xH=x(vH());nr();JR=ct({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),hl=ct({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,HH.getWorkerIndex)()===0&&(async()=>{await xH.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of hl.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await tt.getUser(r.user.username)),je(r,()=>{try{jR(r,t)}catch{(0,Ii.warn)("Failed to publish will",t)}hl.delete(e.id,r)})}})();a(qH,"getSession");NE=1;a(XR,"getNextMessageId");yE=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,rh:i,startTime:o}=t,c=n.indexOf("?"),u,_;if(c>-1?(u=n.slice(c),_=n.slice(0,c)):_=n,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let l=this.subscriptions.find(T=>T.topic===n),d;l?(d=i>0,l.end(),this.subscriptions.splice(this.subscriptions.indexOf(l),1)):d=i===2;let f={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Ii.trace)("Resuming subscription from",n,"from",o);let E=Ti.getMatch(_);if(!E){let T=new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);throw T.statusCode=404,T}if(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let T=f.url.slice(1);if(T.indexOf("#")>-1&&T.indexOf("#")!==T.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(f.isCollection=!0,T.indexOf("+")===T.length-1)f.onlyChildren=!0,f.url="/"+T.slice(0,T.length-1);else{let b=T.split("/"),R;for(let P=0;P<b.length;P++)if(b[P].indexOf("+")>-1)if(b[P]==="+")R=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(s&&R)throw new Error("Filters can not be combined");let L=!0;b[b.length-1]==="#"&&(b.length--,L=!1),R&&(s=a(P=>{let k=P.id;if(!Array.isArray(k)||L&&k.length!==b.length)return!1;for(let B=0;B<b.length;B++)if(b[B]!=="+"&&b[B]!==k[B])return!1;return!0},"filter"));let H=b.indexOf("+");f.url="/"+(H>-1?b.slice(0,H):b).concat("").join("/")}}let h=E.path,p=E.Resource,S=await je(f,async()=>{let T=await p.subscribe(f);if(!T)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!T[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let b of T)try{let R;if(b.type&&b.type!=="put"&&b.type!=="delete"&&b.type!=="message"&&b.type!=="patch"||s&&!s(b))continue;r?(b.topic=n,R=this.needsAcknowledge(b)):(b.acknowledge?.(),R=XR());let L=b.id;Array.isArray(L)&&(L=Ra(L)),L==null&&(L=""),this.listener(h+"/"+L,b.value,R,t)}catch(R){(0,Ii.warn)(R)}})(),T});return S.topic=n,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=XR();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t);if(r)return r.end(),!0}async publish(t,r){return t.user=this.user,jR(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};je(r,async()=>{if(!t){let s=await hl.get(this.sessionId,r);s?.doesExist()&&await jR(s,s.data,r)}await hl.delete(this.sessionId,r)}).catch(s=>{(0,Ii.warn)(`Error publishing MQTT will for ${this.sessionId}`,s)});for(let s of this.subscriptions)s.end();this.subscriptions=[]}};a(jR,"publish");ZR=class extends yE{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=XR(),s={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(s.acknowledge=t.acknowledge),this.awaitingAcks.set(r,s),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Ii.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,BH.getNextMonotonicTime)()),(0,Ii.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),JR.put(this.sessionRecord)),t.qos}}});var rA={};Ye(rA,{bypassAuth:()=>fne,start:()=>Ene});function fne(){$H=!0}function Ene({server:e,port:t,network:r,webSocket:s,securePort:n,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i,sessions:new Set},c,u=r?.mtls;return s&&(c=e.ws((_,l,d)=>{if(_.protocol==="mqtt"){Yr.debug("Received WSS connection for MQTT from",_._socket.remoteAddress);let{onMessage:f,onClose:E}=kH(_,(h,p)=>{if(_.send(h),p&&_._socket.writableNeedDrain)return new Promise(S=>this._socket.once("drain",S))},l,Promise.resolve(d).then(()=>l?.user),o);_.on("message",f),_.on("close",E),_.on("error",h=>{Yr.info("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},s))),(t||n)&&(c=e.socket(async _=>{let l;if(Yr.debug("Received connection for MQTT from",_.remoteAddress),u){if(_.authorized)try{let E=u.user;E!==null?((E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN),l=await e.getUser(E,null,null),(0,ml.get)(Kr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&eA.notify({username:l.username,status:Kr.AUTH_AUDIT_STATUS.SUCCESS,type:Kr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:_.remoteAddress})):Yr.debug("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",_.remoteAddress)}catch(E){Yr.error(E)}else if(u.required)return Yr.info(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!l&&$H&&_.remoteAddress.includes("127.0.0.1")&&(l=await(0,VH.getSuperUser)(),Yr.debug("Auto-authorizing local connection",l?.username));let{onMessage:d,onClose:f}=kH(_,E=>_.write(E),null,l,o);_.on("data",d),_.on("close",f),_.on("error",E=>{Yr.info("Socket error",E)})},{port:t,securePort:n,mtls:u})),c}function kH(e,t,r,s,n){FH||(FH=!0,nu(d=>{wE>0&&d.push({metric:"mqtt-connections",connections:wE,byThread:!0})}));let i;wE++;let o,c={protocolVersion:4},u=(0,IE.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){wE--,i||(i=!0,o?.disconnect(),n.sessions.delete(o),ns(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{s?.then&&(s=await s),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{s=await tt.getUser(d.username,d.password.toString(),r),(0,ml.get)(Kr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&eA.notify({username:s.username,status:Kr.AUTH_AUDIT_STATUS.SUCCESS,type:Kr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,ml.get)(Kr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&eA.error({username:s.username,status:Kr.AUTH_AUDIT_STATUS.FAILURE,type:Kr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return ns(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(n.authorizeClient?.(d,s),d.will){let R=e.deserialize||(e.deserialize=Ro(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?R(d.will.payload):void 0,delete d.will.payload}o=qH({user:s,...d}),o=await o,n.sessions.add(o)}catch(R){return Yr.error(R),ns(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:R.code||5,returnCode:R.code||128})}ns(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((R,L,H,P)=>{try{let k=R.indexOf("/",1),B=k>0?R.slice(0,k):R;f({cmd:"publish",topic:R,payload:E(L),messageId:H||Math.floor(Math.random()*1e8),qos:P.qos},B)}catch(k){Yr.error(k),o?.disconnect(),n.sessions.delete(o)}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let R of d.subscriptions){let L;try{L=(await o.addSubscription(R,R.qos>=1)).qos||0}catch(H){Yr.error(H),L=c.protocolVersion<5?128:H.statusCode===403?135:H.statusCode===404?143:128}h.push(L)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let R=[];for(let L of d.unsubscriptions)R.push(o.removeSubscription(L)?0:17);f({cmd:"unsuback",granted:R,messageId:d.messageId});break}case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let p=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=Ro(r?.headers.get?.("content-type"))),T=d.payload?.length>0?S(d.payload):void 0,b;try{b=await o.publish(d,T)}catch(R){Yr.warn(R),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:b===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),n.sessions.delete(o),ns(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){Yr.error(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,IE.generate)(h,c);t(S),qr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return Ri(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var IE,VH,ml,Kr,tA,eA,Yr,$H,FH,wE,YH=Re(()=>{IE=require("mqtt-packet");GH();VH=x(ss());Oa();Nn();nr();ml=x(ee()),Kr=x(M()),tA=x($()),eA=(0,tA.loggerWithTag)("auth-event"),Yr=(0,tA.loggerWithTag)("mqtt"),$H=(0,ml.get)(Kr.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(fne,"bypassAuth");a(Ene,"start");wE=0;a(kH,"onSocket")});var Of={};Ye(Of,{component_errors:()=>Ka,loadComponent:()=>CE,loadComponentDirectories:()=>ex,setErrorReporter:()=>Sne});function ex(e,t){t&&(nA=t),e&&(iA=e);let r=[];if((0,Gs.existsSync)(sA)){let n=(0,Gs.readdirSync)(sA,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,gt.join)(sA,o);r.push(CE(c,nA,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(CE(s,nA,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{ZH=!0})}function Sne(e){Sl=e}async function CE(e,t,r,s,n,i){if(!WH.has(e)){WH.set(e,!0),n&&(iA=n);try{let o;s&&(Ka=new Map);let c=(0,gt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Gs.existsSync)(c)?o=s?(0,jH.getConfigObj)():(0,QH.parseDocument)((0,Gs.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=oA;let u=[],_=s;for(let l in o){let d=o[l];if(Ka.set(s?l:(0,gt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let b=e,R;for(;!(0,Gs.existsSync)(R=(0,gt.join)(b,"node_modules",l));)if(b=(0,gt.dirname)(b),b.length<(0,XH.getHdbBasePath)().length){R=null;break}if(R)f=await CE(R,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=pne[l];if(!f)continue;u.push(f);let h=a(b=>(b.origin=r,ct(b)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,T=!p?.https&&p?.port;if(Ya.isMainThread&&(f=await f.startOnMainThread?.({server:tt,ensureTable:h,port:T,securePort:S,resources:t,...d})||f,s&&p))for(let b of[T,S])try{if(+b&&!KH.includes(b)){let R=aA.get(cA.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);R&&pl.default.warn("Session affinity is not recommended and may cause memory leaks"),(R||!hE)&&(KH.push(b),oH(b,R))}}catch(R){console.error("Error listening on socket",b,R,l)}if(t.isWorker&&(f=await f.start?.({server:tt,ensureTable:h,port:T,securePort:S,resources:t,...d})||f),iA.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,JH.handleHDBError)("Can not reference parent directories");let b=(0,gt.join)(e,d.files).replace(/\\/g,"/"),R=b.indexOf("/*");if(R>-1&&d.files!==oA[l]?.files&&!(0,Gs.existsSync)(b.slice(0,R)))throw new Error(`The path '${b.slice(0,R)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let L=(0,gt.basename)(e),H=d.path||"/";H=H.startsWith("/")?H:H.startsWith("./")?"/"+L+H.slice(2):H==="."?"/"+L:"/"+L+"/"+H;let P,k,B;if(d.root){let z=d.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",k=(0,gt.join)(e,z)}else(B=b.indexOf("/*"))>-1&&(k=b.slice(0,B+1),P=(0,gt.relative)(e,k));let J=!1;if(Ya.isMainThread&&f.setupDirectory&&(J=await f.setupDirectory?.(H,k,t)),t.isWorker&&f.handleDirectory&&(J=await f.handleDirectory?.(H,k,t)),J)continue;for(let z of await(0,zH.default)(b,{onlyFiles:!1,objectMode:!0})){let{path:X,dirent:Te}=z;_=!0;let ce=(0,gt.relative)(e,X).replace(/\\/g,"/");if(P)if(ce.startsWith(P))ce=ce.slice(P.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${ce}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let de=H+(H.endsWith("/")?"":"/")+ce;try{if(Te.isFile()){let Le=await mne(X);Ya.isMainThread&&await f.setupFile?.(Le,de,X,t),t.isWorker&&await f.handleFile?.(Le,de,X,t)}else Ya.isMainThread&&await f.setupDirectory?.(de,X,t),t.isWorker&&await f.handleDirectory?.(de,X,t)}catch(Le){Le.message=`Could not load ${Te.isFile()?"file":"directory"} '${X}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${Le.message}`,Sl?.(Le),((0,Wa.getWorkerIndex)()===0?console:pl.default).error(Le),t.set(d.path||"/",new Tl(Le)),Ka.set(s?l:(0,gt.basename)(e),Le.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,gt.basename)(e)}' due to: ${h.message}`,Sl?.(h),((0,Wa.getWorkerIndex)()===0?console:pl.default).error(h),t.set(d.path||"/",new Tl(h),null,!0),Ka.set(s?l:(0,gt.basename)(e),h.message)}}if(Ya.isMainThread&&!ZH&&i&&(0,Wa.watchDir)(e,async()=>ex()),o.extensionModule)return await t_((0,gt.join)(e,o.extensionModule));if(!_&&t.isWorker){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;Sl?.(new Error(l)),((0,Wa.getWorkerIndex)()===0?console:pl.default).error(l),Ka.set((0,gt.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,Sl?.(o),t.set("",new Tl(o))}}}var Gs,gt,Ya,QH,aA,cA,zH,Wa,pl,JH,XH,hne,jH,mne,sA,iA,ZH,nA,Ka,pne,oA,KH,WH,Sl,Tl,bf=Re(()=>{Gs=require("fs"),gt=require("path"),Ya=require("worker_threads"),QH=require("yaml"),aA=x(ee()),cA=x(M());cb();db();fb();c0();zB();tH();zH=x(require("fast-glob")),Wa=x(Ke()),pl=x($());Hh();nr();JH=x(se());Os();Ae();aH();XH=x(ee()),hne=x(dH());hf();gH();YH();jH=x(Pr());mE();({readFile:mne}=Gs.promises),sA=aA.get(cA.CONFIG_PARAMS.COMPONENTSROOT),iA=new Map,Ka=new Map;a(ex,"loadComponentDirectories");pne={REST:kf,rest:kf,graphqlSchema:Bh,jsResource:qh,fastifyRoutes:yR,login:Fh,static:wR,operationsApi:hne,customFunctions:{},http:{},clustering:FR,authentication:Gu,mqtt:rA},oA={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(oA,"static",{value:{files:"web/**"}});KH=[],WH=new Map;a(Sne,"setErrorReporter");a(CE,"loadComponent");Tl=class extends qt{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var zR=g((Jpe,rx)=>{var{isMainThread:tx}=require("worker_threads"),{getTables:Tne}=(Ae(),ne(Ge)),{loadComponentDirectories:gne,loadComponent:Rne}=(bf(),ne(Of)),{resetResources:Ane}=(xu(),ne(pP)),One=og(),bne=Pr(),{dirname:Nne}=require("path"),{getConnection:yne}=st(),wne=ee(),Ine=M(),uA=new Map;async function Cne(e=!1){!tx&&wne.get(Ine.CONFIG_PARAMS.CLUSTERING_ENABLED)&&yne();try{tx&&await One()}catch(s){console.error(s)}let t=Ane();Tne(),t.isWorker=e,await Rne(Nne(bne.getConfigFilePath()),t,"hdb",!0,uA),await gne(uA,t);let r=[];for(let[s]of uA)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(Cne,"loadRootComponents");rx.exports.loadRootComponents=Cne});var Ke=g((jpe,Di)=>{"use strict";var{Worker:Dne,MessageChannel:Lne,parentPort:dn,isMainThread:EA,threadId:Mne,workerData:Fn}=require("worker_threads"),{PACKAGE_ROOT:Une}=M(),{join:ox,isAbsolute:Pne,extname:vne}=require("path"),{server:ax}=(nr(),ne(vi)),{watch:Bne,readdir:Hne}=require("fs/promises"),{totalmem:sx}=require("os"),gl=M(),cx=ee(),kn=$(),{randomBytes:xne}=require("crypto"),{_assignPackageExport:qne}=require("../index"),Gne=M(),nx=1024*1024,Ci=[],Es=[],Fne=50,hA=1e4,kne="restart",ux="request_thread_info",lx="resource_report",_x="thread_info",dx="added-port",Vne="ack",lA;qne("threads",Es);Di.exports={startWorker:_A,restartWorkers:pA,shutdownWorkers:Qne,workers:Ci,setMonitorListener:rie,onMessageFromWorkers:zne,onMessageByType:Tx,broadcast:Xne,broadcastWithAcknowledgement:Zne,setChildListenerByType:Wne,getWorkerIndex:fx,getWorkerCount:Ex,getTicketKeys:mx,setMainIsWorker:Yne,setTerminateTimeout:$ne,restartNumber:Fn?.restartNumber||1};Es.onMessageByType=Tx;Es.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Es.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var mA;function $ne(e){hA=e}a($ne,"setTerminateTimeout");function fx(){return Fn?Fn.workerIndex:mA?0:void 0}a(fx,"getWorkerIndex");function Ex(){return Fn?Fn.workerCount:mA?1:void 0}a(Ex,"getWorkerCount");function Yne(e){mA=e}a(Yne,"setMainIsWorker");var hx=1,DE;function mx(){return DE||(DE=EA?xne(48):Fn.ticketKeys,DE)}a(mx,"getTicketKeys");Object.defineProperty(ax,"workerIndex",{get(){return fx()}});Object.defineProperty(ax,"workerCount",{get(){return Ex()}});var px={[ux](e,t){eie(t)},[lx](e,t){tie(t,e)}};function _A(e,t={}){let r=process.constrainedMemory?.()||sx();r=Math.min(r,sx(),2e4*nx);let s=cx.get(gl.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/nx/(10+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>6,16),64),i=[],o=[];for(let u of Es){let _=new Lne;_.existingPort=u,i.push(_),o.push(_.port2)}vne(e)||(e+=".js");let c=new Dne(Pne(e)?e:ox(Une,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:hx=t.threadCount,name:t.name,restartNumber:Di.exports.restartNumber,ticketKeys:mx()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:dx,port:u,threadId:c.threadId},[u]);return ME(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>_A(e,t),c.on("error",u=>{console.error("Worker error:",u),kn.error("Worker error:",u)}),c.on("exit",u=>{Ci.splice(Ci.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Fne?(t.unexpectedRestarts=c.unexpectedRestarts+1,_A(e,t)):kn.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{px[u.type]?.(u,c)}),Ci.push(c),nie(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(_A,"startWorker");var Kne=[gl.THREAD_TYPES.HTTP];async function pA(e=null,t=Math.max(hx>3,1),r=!0){if(EA){if(r){let{loadRootComponents:o}=zR();await o()}Di.exports.restartNumber++,t<1&&(t=t*Ci.length);let s=[],n=[];for(let o of Ci.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;kn.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Di.exports.restartNumber,type:gl.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Kne.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),hA*2).unref();o.on("exit",()=>{clearTimeout(l),s.splice(s.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(s.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===Gne.ITC_EVENT_TYPES.CHILD_STARTED&&(kn.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");kn.trace("Waiting for worker to start",_.threadId),_.on("message",f)});n.push(l),s.length>=t&&await Promise.race(s),n.length>=t&&await Promise.race(n)}}await Promise.all(s),await Promise.all(n);let{restartService:i}=_f();r&&(e==="http"||!e)&&cx.get(gl.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else dn.postMessage({type:kne,workerType:e})}a(pA,"restartWorkers");function Wne(e,t){px[e]=t}a(Wne,"setChildListenerByType");function Qne(e){return pA(e,1/0,!1)}a(Qne,"shutdownWorkers");var Sx=[];function zne(e){Sx.push(e)}a(zne,"onMessageFromWorkers");var dA=new Map;function Tx(e,t){let r=dA.get(e);r||dA.set(e,r=[]),r.push(t)}a(Tx,"onMessageByType");var Jne=10;async function Xne(e){let t=0;for(let r of Es)try{r.postMessage(e),t++>Jne&&(t=0,await new Promise(setImmediate))}catch(s){kn.error("Unable to send message to worker",s)}}a(Xne,"broadcast");var LE=new Map,jne=1;function Zne(e){return new Promise(t=>{let r=0;for(let s of Es)try{let n=jne++,i=a(()=>{LE.delete(n),--r===0&&t(),s!==dn&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,LE.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of LE)o.port===s&&o()})),s.postMessage(e),r++}catch(n){kn.error("Unable to send message to worker",n)}r===0&&t()})}a(Zne,"broadcastWithAcknowledgement");function eie(e){e.postMessage({type:_x,workers:gx()})}a(eie,"sendThreadInfo");function gx(){let e=Date.now();return Ci.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(gx,"getChildWorkerInfo");function tie(e,t){e.resources=t,e.resources.updated=Date.now()}a(tie,"recordResourceReport");var fA;function rie(e){fA=e}a(rie,"setMonitorListener");var sie=1e3,ix=!1;function nie(){ix||(ix=!0,setInterval(()=>{for(let e of Ci){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}fA&&fA()},sie).unref())}a(nie,"startMonitoring");var iie=1e3;if(dn){ME(dn);for(let e=0,t=Fn.addPorts.length;e<t;e++){let r=Fn.addPorts[e];r.threadId=Fn.addThreadIds[e],ME(r)}setInterval(()=>{let e=process.memoryUsage();dn.postMessage({type:lx,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},iie).unref(),lA=a(()=>new Promise((e,t)=>{dn.on("message",r),dn.postMessage({type:ux});function r(s){s.type===_x&&(dn.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else lA=gx;Di.exports.getThreadInfo=lA;function ME(e,t){Es.push(e),e.on("message",r=>{if(r.type===dx)r.port.threadId=r.threadId,ME(r.port);else if(r.type===Vne){let s=LE.get(r.id);s&&s()}else{for(let n of Sx)n(r,e);let s=dA.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){kn.error(i)}}}).on("close",()=>{Es.splice(Es.indexOf(e),1)}).on("exit",()=>{Es.splice(Es.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(ME,"addPort");if(EA){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await Hne(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(ox(s,i.name));try{for await(let{filename:i}of Bne(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await pA(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");Di.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else dn.on("message",async e=>{let{type:t}=e;t===gl.ITC_EVENT_TYPES.SHUTDOWN&&(Di.exports.restartNumber=e.restartNumber,dn.unref(),setTimeout(()=>{kn.warn("Thread did not voluntarily terminate",Mne),process.exit(0)},hA).unref())})});var RC={};Ye(RC,{AUDIT_STORE_OPTIONS:()=>Dx,createAuditEntry:()=>o_,openAuditStore:()=>BE,readAuditEntry:()=>Dt,setAuditRetention:()=>aie,transactionKeyEncoder:()=>Cx});function BE(e){let t=e.auditStore=e.openDB(yx.AUDIT_STORE_NAME,Dx);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let s=null;function n(i=UE){clearTimeout(s),s=setTimeout(async()=>{if(t.rootStore.status==="closed")return;let o=0,c;try{for(let{key:u,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-SA})){if((_[0]&15)===RA){let l=Dt(_),d=l.tableId;r[d]?.(l.recordId)}if(c=t.remove(u),await new Promise(setImmediate),++o>=oie){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,SA/10)),n(i)}},i).unref()}return a(n,"scheduleAuditCleanup"),t.scheduleAuditCleanup=n,(0,vE.getWorkerIndex)()===(0,vE.getWorkerCount)()-1&&n(UE),t}function aie(e,t=UE){SA=e,UE=t}function o_(e,t,r,s,n,i,o){let c=Lx[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let u=1;s&&(s>1?Qa.setFloat64(0,s):hs.set(sm),u=9),f(0),f(t),d(r),Qa.setFloat64(u,e),u+=8,n?d(n):hs[u++]=0,hs[s?8:0]=c;let l=hs.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,za.writeKey)(E,hs,u);let p=u-h-1;p>127?p>16383?(OA.error("Key or username was too large for audit entry",E),u=h+1,hs[h]=0):(hs.copyWithin(h+2,h+1,u),Qa.setUint16(h,p|32768),u++):hs[h]=p}function f(E){E<128?hs[u++]=E:E<16384?(Qa.setUint16(u,E|32768),u+=2):E<1056964608?(Qa.setUint32(u,E|3221225472),u+=4):(hs[u]=255,Qa.setUint32(u+1,E),u+=5)}}function Dt(e){try{let t=e.dataView||(e.dataView=new AA(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let s=t.readInt(),n=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:Lx[s&7],tableId:i,get recordId(){return Nx(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?Nx(e,l,d):void 0},getValue(f,E,h){if(s&TA||s&gA&&!E)return f.decoder.decode(e.subarray(t.position));if(s&gA&&h)return bA(f.getEntry(this.recordId),h,f)}}}catch(t){return OA.error("Reading audit entry error",t,e),{}}}function Nx(e,t,r){let s=e.subarray(t,r);return(0,za.readKey)(s,0,r-t)}var za,PE,yx,wx,vE,Ix,OA,hs,Qa,Cx,Dx,SA,oie,UE,TA,gA,Rx,RA,Ax,Ox,bx,Lx,AA,xi=Re(()=>{za=require("ordered-binary"),PE=x(ee()),yx=x(dt()),wx=x(M()),vE=x(Ke()),Ix=x(Q());bc();OA=x($());HE();(0,PE.initSync)();hs=Buffer.alloc(1024),Qa=new DataView(hs.buffer,hs.byteOffset,1024),Cx={writeKey(e,t,r){return e===Oc?(t.set(Oc,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,za.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,za.readKey)(e,t,r)}},Dx={encoding:"binary",keyEncoder:Cx},SA=(0,Ix.convertToMS)((0,PE.get)(wx.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,oie=1e3,UE=1e4;a(BE,"openAuditStore");a(aie,"setAuditRetention");TA=16,gA=32,Rx=1,RA=2,Ax=3,Ox=4,bx=5,Lx={put:Rx|TA,[Rx]:"put",delete:RA,[RA]:"delete",message:Ax|TA,[Ax]:"message",invalidate:Ox,[Ox]:"invalidate",patch:bx|gA,[bx]:"patch"};a(o_,"createAuditEntry");a(Dt,"readAuditEntry");AA=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t=this.getUint8(this.position++);return t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch{debugger}}};a(Nx,"readKeySafely")});var NA={};Ye(NA,{add:()=>xE,applyReverse:()=>Mx,getRecordAtTime:()=>bA,rebuildUpdateBefore:()=>qE});function xE(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function qE(e,t){let r=null;for(let s in e)if(s in t){let n=t[s];if(n?.__op__){let i=e[s];if(i?.__op__)if(i.__op__===n.__op__)r||(r={}),r[s]=i;else throw new Error("Can not merge updates with different operations");else r||(r={}),r[s]=i,xE(r,s,n)}}else r||(r={}),r[s]=e[s];return r}function Mx(e,t){for(let r in t){let s=t[r];if(s?.__op__){let n=cie[s.__op__]?.reverse;if(n)n(e,r,{value:s.value});else throw new Error(`Unsupported operation ${s.__op__}`)}else e[r]=Ux}}function bA(e,t,r){let s=r.rootStore.auditStore,n=Object.assign({},e.value),i=e.localTime;for(;i>t;){let u=s.get(i),_=Dt(u);switch(_.type){case"put":n=_.getValue(r);break;case"patch":Mx(n,_.getValue(r));break;case"delete":n=null}i=_.previousLocalTime}let o={},c=0;for(let u in n)n[u]===Ux&&(o[u]=!0,c++);for(;c>0&&i>0;){let u=s.get(i),_=Dt(u),l;switch(_.type){case"put":l=_.getValue(r);break;case"patch":l=_.getValue(r);break}for(let d in l)o[d]&&(n[d]=l[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let u in o)n[u]=null;return n}var cie,Ux,HE=Re(()=>{xi();a(xE,"add");xE.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};cie={add:xE};a(qE,"rebuildUpdateBefore");a(Mx,"applyReverse");Ux={};a(bA,"getRecordAtTime")});function Wr(e){return e[It]||(e[It]=Object.create(null))}function $E(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u,_;if(o.resolve)_={get(){return o.resolve(this,this[Oe])},set(l){return o.set(this,l)},configurable:!0};else{switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a string, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a string, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Float":case"Number":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a number, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new ms.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new ms.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"BigInt":u=a(function(l){if(!(typeof l=="bigint"||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=BigInt(l);else throw new ms.ClientError(`${c} must be a number, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new ms.ClientError(`${c} must be a Date, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Wr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be an object, attempt to assign ${l}`);Wr(this)[c]=l},"set")}_={get(){let l=this[It];if(l&&c in l){let f=l[c];if(f?.__op__){let E=this[_e]?.[c];return f.update(E)}return f}let d=this[_e]?.[c];if(d&&typeof d=="object"){let f=vx(d,o);if(f)return l||(l=this[It]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,s[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[It];return u?.[o]!==void 0?u[o]:this[_e]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new ms.ClientError("Can not add a property to a sealed table schema");Wr(this)[o]=c}),i("deleteProperty",function(o){Wr(this)[o]=void 0}),i("toJSON",function(){let o=this[It],c;for(let _ in o){c||(c=Object.assign({},this[_e]));let l=o[_];if(l?.__op__){let d=c[_];l=l.update(d)}c[_]=l}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[_e])),Object.assign(c,this)),c||this[_e]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function vx(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){if(n?.[_e])throw new Error("Can not track an already tracked object, check for circular references");this[_e]=n}},$E(r,t)),new r(e)):new GE(e);case Array:let s=new kE(e.length);s[_e]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=vx(o,t?.elements)),s[n]=o}return s;default:return e}}function nd(e){let t=e[It],r;for(let n in t){r||(r=Object.assign({},e[_e]));let i=t[n];if(i&&typeof i=="object")if(i.__op__){let o=r[n];i=i.update(o)}else i=nd(i);r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[_e])),Object.assign(r,e)),r||e[_e]}function Lo(e,t=e[It]){let r;if(Px.call(e,_e)&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=Lo(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[s]=i}return Object.freeze(r)}for(let s in t){r||(r=Object.assign({},e[_e]));let n=t[s];if(n&&typeof n=="object")if(n.__op__){let i=NA[n?.__op__];if(i)i(r,s,n);else throw new Error("Invalid CRDT operation "+n.__op__);continue}else n=Lo(n);r[s]=n}return r?Object.freeze(r):Px.call(e,_e)?e[_e]:e}function FE(e){let t=e[_e];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Do]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[_e]===n){if(FE(i))return!0}else return!0}}else{let r=e[It];if(r&&!t)return!0;for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[_e]===i){if(FE(n))return!0}else return!0}else return!0}}return!1}var ms,It,GE,Px,Do,kE,VE,id=Re(()=>{Os();ms=x(se());HE();It=Symbol("own-data");a(Wr,"getChanges");a($E,"assignTrackedAccessors");a(vx,"trackObject");GE=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[_e])throw new Error("Can not track an already tracked object, check for circular references");this[_e]=t}};$E(GE,{});a(nd,"collapseData");Px=Object.prototype.hasOwnProperty;a(Lo,"deepFreeze");a(FE,"hasChanges");Do=Symbol.for("has-array-changes"),kE=class extends Array{static{a(this,"TrackedArray")}[Do];constructor(t){super(t)}splice(...t){return this[Do]=!0,super.splice(...t)}push(...t){return this[Do]=!0,super.push(...t)}pop(){return this[Do]=!0,super.pop()}unshift(...t){return this[Do]=!0,super.unshift(...t)}shift(){return this[Do]=!0,super.shift()}};kE.prototype.constructor=Array;VE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var Lp={};Ye(Lp,{CONTEXT:()=>Oe,ID_PROPERTY:()=>Me,IS_COLLECTION:()=>ps,RECORD_PROPERTY:()=>_e,Resource:()=>qt,snake_case:()=>lie,transformForSelect:()=>KE});function lie(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function Bx(e,t){if(Rl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(Rl=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),s=new wA;for(let n=0;n<r.length;n++){let i=r[n];if(!i&&n===r.length-1){Rl=!0;break}s[n]=t.coerceId(decodeURIComponent(i))}return s}function Qr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_,l;if(r?(o?(l=i,o=o[Oe]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(l=n,c=l[this.primaryKey]??null,o=i[Oe]||i):l=i:(l=n,c=l[Me]??l[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[Oe]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[],_=!0;for(let E of n){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null,_=!1)))}else{if(typeof(c=n.url)=="string"){let E=c.indexOf("?");if(E>-1){let p=this.parseQuery(c.slice(E+1));u?u=Object.assign(p,u):u=p,c=c.slice(0,E)}let h=this.parsePath(c,o,u);h?.id!==void 0?(h.query&&(u?u=Object.assign(h.query,u):u=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=n.id??null,c==null&&(_=!0))}else c=n??null,c==null&&(_=!0);o||(o={});let d;if(u?.ensureLoaded!=null||u?.async||_?(d=Object.assign({},t),u?.ensureLoaded!=null&&(d.ensureLoaded=u.ensureLoaded),u?.async&&(d.async=u.async),_&&(d.isCollection=!0)):d=t,o.transaction){let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)}else return je(o,()=>{let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)},d);function f(E){if(o.authorize){o.authorize=!1;let h=t.type==="read"?E.allowRead(o.user,u,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,l,o):E.allowUpdate(o.user,l,o):t.type==="create"?E.allowCreate(o.user,l,o):E.allowDelete(o.user,u,o);if(h?.then)return h.then(p=>{if(!p)throw new YE(o.user);return typeof l?.then=="function"?l.then(S=>e(E,u,o,S)):e(E,u,o,l)});if(!h)throw new YE(o.user)}return typeof l?.then=="function"?l.then(h=>e(E,u,o,h)):e(E,u,o,l)}a(f,"authorizeActionOnResource")}}function zr(e,t){let r=new qx.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let s of["get","put","post","delete","query","move","copy"])typeof e[s]=="function"&&r.allow.push(s);throw r}function yA(e,t,r){let s=e[_e];if(s){let n=e[It];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:n&&i in n?n[i]:(c=t?.[i])?c(e,r):s[i]}}else return t?n=>{let i=t[n];return i?i(e,r):e[n]}:n=>e[n]}function KE(e,t){let r=t?.propertyResolvers,s=t[Oe],n;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):yA(c,r,s)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(c);let _=[],l=i(yA(u,r,s));for(let d of e)_.push(l(d));return _},"transform");let o=e.forceNulls;return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(f=>f&&typeof f=="object"?c(f):f);let _={},l=i(yA(u,r,s)),d;for(let f of e){let E=l(f);E===void 0&&o&&(E=null),E?.then?(d||(d=[]),d.push(E.then(h=>_[f.name||f]=h))):_[f.name||f]=E}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){n||(n={});let u=n[c.name];if(!u){let l=r[c.name]?.definition?.tableClass;u=n[c.name]=KE(c.select||c,l)}let _=o(c.name);return u(_)}else return o(c);else return c}}a(i,"handleProperty")}var Hx,xx,qx,Oe,Me,ps,_e,uie,qt,YE,Rl,wA,Os=Re(()=>{Hx=require("crypto");pc();xx=require("../index"),qx=x(se());id();ro();Gf();Oe=Symbol.for("context"),Me=Symbol.for("primary-key"),ps=Symbol("is-collection"),_e=Symbol("stored-record"),uie={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},qt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Me]=t;let s=r?.[Oe];this[Oe]=s!==void 0?s:r||null}static get=Qr(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null&&!c.selectApplied){let _=KE(u,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Qr(function(t,r,s,n){if(Array.isArray(n)&&t[ps]){let i=[],o=s.authorize;for(let c of n){let u=t.constructor,_=u.getResource(c[u.primaryKey],s,{async:!0});_.then?i.push(_.then(l=>l.put(c,s))):i.push(_.put(c,s))}return Promise.all(i)}return t.put?t.put(n,r):zr(t,"put")},{hasContent:!0,type:"update"});static patch=Qr(function(t,r,s,n){return t.patch?t.patch(n,r):zr(t,"patch")},{hasContent:!0,type:"update"});static delete=Qr(function(t,r,s,n){return t.delete?t.delete(r):zr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,Hx.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),je(s,()=>{let i=new this(n,s),o=i.update?i.update(r):zr(i,"update");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Qr(function(t,r,s,n){return t.invalidate?t.invalidate(r):zr(t,"delete")},{hasContent:!1,type:"update"});static post=Qr(function(t,r,s,n){return t[Me]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Qr(function(t,r,s,n){return t.connect?t.connect(n,r):zr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Qr(function(t,r,s,n){return t.subscribe?t.subscribe(r):zr(t,"subscribe")},{type:"read"});static publish=Qr(function(t,r,s,n){return t[Me]!=null&&t.update?.(),t.publish?t.publish(n,r):zr(t,"publish")},{hasContent:!0,type:"create"});static search=Qr(function(t,r,s,n){let i=t.search?t.search(r):zr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=KE(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=Qr(function(t,r,s,n){return t.search?t.search(n,r):zr(t,"search")},{hasContent:!0,type:"read"});static copy=Qr(function(t,r,s,n){return t.copy?t.copy(n,r):zr(t,"copy")},{type:"create"});static move=Qr(function(t,r,s,n){return t.move?t.move(n,r):zr(t,"move")},{type:"delete"});post(t){if(this[ps])return this.constructor.create(this[Me],t,this[Oe]);zr(this,"post")}static isCollection(t){return t?.[ps]}static coerceId(t){return t}static parseQuery(t){return qf(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let o=t.slice(n+1);t=t.slice(0,n);let c=r?.headers&&uie[o];if(c)r.headers.set("accept",c);else if(s)s.property=o;else return{query:{property:o},id:Bx(t,this),isCollection:Rl}}let i=Bx(t,this);return Rl?{id:i,isCollection:!0}:i}static getResource(t,r,s){let n,i=r[Oe],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=s?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let _=u.asMap.get(t);if(n=_?.find(l=>l.constructor===c),n)return n;_||u.asMap.set(t,_=[]),_.push(n=new c(t,i))}else{if(n=u.find(_=>_[Me]===t&&_.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[Me],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else n=new c(t,i);return o&&(n[ps]=!0),n}subscribe(t){return new As}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new As}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[Me]}getContext(){return this[Oe]}};qt.prototype[Oe]=null;(0,xx._assignPackageExport)("Resource",qt);a(lie,"snake_case");YE=class extends Error{static{a(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};a(Bx,"pathToId");wA=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Qr,"transactional");a(zr,"missingMethod");a(yA,"selectFromObject");a(KE,"transformForSelect")});function Fx(e,t,r,s){let n=e.primaryStore.env.path,i=e.primaryStore.tableId;Ja||((0,WE.onMessageByType)(Gx,l=>{kx(l.path)}),Ja=Object.create(null));let o=Ja[n]||(Ja[n]=[]);o.auditStore=e.auditStore,o.lastTxnTime==null&&(o.lastTxnTime=Date.now());let c=o[i];c||(c=o[i]=new Map,c.envs=o,c.tableId=i,c.store=e.primaryStore),t=Ra(t);let u=new CA(r);u.startTime=s;let _=c.get(t);return _?_.push(u):(c.set(t,_=[u]),_.tables=c,_.key=t),u.subscriptions=_,u}function kx(e,t){if(!Ja)return;let r=Ja[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(n){throw n.message+=" in "+e,n}let s;for(let{key:n,value:i}of r.auditStore.getRange({start:r.lastTxnTime,exclusiveStart:!0})){r.lastTxnTime=n;let o=Dt(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=Ra(o.recordId),d=0;do{let f=c.get(l);if(f){for(let h of f)if(!(d>0&&!(h.includeDescendants&&!(h.onlyChildren&&d>1)))){if(h.startTime>=n){(0,IA.info)("omitting",u,h.startTime,n);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(s?s.push(h):s=[h]),h.txnInProgress=o.version),h.listener(u,o,n,p)}catch(p){console.error(p),(0,IA.info)(p)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E):l=null,d++}while(!0)}if(s)for(let n of s)n.txnInProgress=null,n.listener(null,{type:"end_txn"},r.lastTxnTime,!0)}function Vx(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",()=>{(0,WE.broadcast)({type:Gx,path:n}),kx(n,!0)})}}var IA,WE,Gx,Ja,gSe,CA,$x=Re(()=>{IA=x($()),WE=x(Ke());pc();xu();xi();Gx="transaction",gSe=Buffer.alloc(4096);a(Fx,"addSubscription");CA=class extends As{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(kx,"notifyFromTransactionData");a(Vx,"listenToCommits")});var uR={};Ye(uR,{coerceType:()=>QE,makeTable:()=>XE,setServerUtilities:()=>Tie,updateResource:()=>zE});function XE(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l,sealed:d}=e,{expirationMS:f,evictionMS:E,audit:h,trackDeletes:p}=e,{attributes:S}=e;S||(S=[]),Vx(i,u);let T=om(i,s,u),b=0,R,L,H={},P=Promise.resolve(),k,B,J;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(k=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(B=K),K.expiresAt&&(J=K),K.isPrimaryKey&&(H=K);let z,X=[],Te=[],ce=1,de=2,Le={},Be={},Ct=864e5,ql,Gl,Yn,JA=!1,fh,Qq=i.getRange({start:!1,end:!1}).constructor,zq=10,Jq=6;h&&ZA();class ze extends qt{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=k;static updatedTimeProperty=B;static propertyResolvers;static sources=[];static get expirationMS(){return f}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,O){O&&(this.sourceOptions=O,(O.expiration||O.eviction||O.scanInterval)&&this.setTTLExpiration(O)),O?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),L=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let w=a(D=>{let y=this.sources.slice(0,-1);if(y=y.filter(U=>U[D]&&(!U[D].reliesOnPrototype||U.prototype[D])),y.length>0)if(y.length===1){let U=y[0];return(G,C,v)=>{if(G?.source!==U)return U[D](C,v,G)}}else return(U,G,C)=>{let v=[];for(let F of y){if(U?.source===F)break;v.push(F[D](G,C,U))}return Promise.all(v)}},"getApplyToIntermediateSource"),N=this.sources[this.sources.length-1],A=a(D=>{if(N[D]&&(!N[D].reliesOnPrototype||N.prototype[D]))return(y,U,G)=>{if(!y?.source)return N[D](U,G,y)}},"getApplyToCanonicalSource");return Le={put:A("put"),patch:A("patch"),delete:A("delete"),publish:A("publish")},Be={put:w("put"),patch:w("patch"),delete:w("delete"),publish:w("publish"),invalidate:w("invalidate")},(async()=>{let D=!1,y=a(async(U,G)=>{let C=U.value,v=U.table?rt[c][U.table]:ze;if(c===ks.SYSTEM_SCHEMA_NAME&&(U.table===ks.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||U.table===ks.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),U.id===void 0&&(U.id=C[v.primaryKey],U.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(U));U.source=m;let F=await v.getResource(U.id,G,Xa);switch(U.type){case"put":return F._writeUpdate(C,!0,Xa);case"patch":return F._writeUpdate(C,!1,Xa);case"delete":return F._writeDelete(Xa);case"publish":return F._writePublish(C,Xa);case"invalidate":return F.invalidate(Xa);default:Ze.error("Unknown operation",U.type,U.id)}},"writeUpdate");try{let U=m.subscribe;U&&p==null&&(p=!0);let G=m.subscribeOnThisThread?m.subscribeOnThisThread((0,Uo.getWorkerIndex)()):(0,Uo.getWorkerIndex)()===0,C=U&&G&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(C){let v;for await(let F of C)try{if(!(F.type==="transaction"?F.writes[0]:F)){Ze.error("Bad subscription event",F);continue}if(F.source=m,v)if(F.beginTxn)v.resolve();else{y(F,v);continue}if(F.type==="end_txn")continue;let be=je(F,()=>{if(F.type==="transaction"){let te=[];for(let Pe of F.writes)try{te.push(y(Pe,F))}catch(ae){throw ae.message+=" writing "+JSON.stringify(Pe)+" of event "+JSON.stringify(F),ae}return Promise.all(te)}else if(F.type==="define_schema"){let te=this.attributes.slice(0),Pe;for(let ae of F.attributes)te.find(qe=>qe.name===ae.name)||(te.push(ae),Pe=!0);Pe&&(ct({table:n,database:c,attributes:te,origin:"cluster"}),Il.signalSchemaChange(new Cl.SchemaEventMsg(process.pid,ks.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return F.beginTxn?(v=F,y(F,F),new Promise(te=>{v.resolve=te})):y(F,F)});D&&(await be,Il.signalUserChange(new Cl.UserEventMsg(process.pid))),F.onCommit&&(be?.then?be.then(F.onCommit):F.onCommit())}catch(oe){Ze.error("error in subscription handler",oe)}}}catch(U){Ze.error(U)}})(),this}static getResource(m,O,w){let N=super.getResource(m,O,w);if(m!=null){rc(m);try{if(N.hasOwnProperty(_e))return N;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let A=!w?.async||i.cache?.get(m),D=gs(O),y=D.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Eh(m,O,{transaction:y},A,U=>{if(U?zE(N,U):N[_e]=null,O.onlyIfCached&&O.noCacheStore){if(!N.doesExist())throw new Ss.ServerError("Entry is not cached",504)}else if(w?.ensureLoaded){let G=hh(m,U,O,N);if(G)return D?.disregardReadTxn(),N[DA]=!0,MA(G,C=>(zE(N,C),N))}return N})}catch(A){throw A.message.includes("Unable to serialize object")&&(A.message+=": "+JSON.stringify(m)),A}}return N}ensureLoaded(){let m=hh(this[Me],this[Jr],this[Oe]);if(m)return this[DA]=!0,MA(m,O=>{this[Jr]=O,this[_e]=O.value,this[yl]=O.version})}static setTTLExpiration(m){if(typeof m=="number")f=m*1e3,E||(E=0);else if(m&&typeof m=="object")f=m.expiration*1e3,E=(m.eviction||0)*1e3,Ct=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(f<0)throw new Error("Expiration can not be negative");Ct=Ct||(f+E)/4,ph()}static enableAuditing(m=!0){h=m,m&&ZA(),ze.audit=m}static coerceId(m){return m===""?null:QE(m,H)}static async dropTable(){if(delete rt[c][n],c===o){for(let m of S)l.remove(ze.tableName+"/"+m.name),r[m.name]?.drop();l.remove(ze.tableName+"/"),i.drop(),await l.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Il.signalSchemaChange(new Cl.SchemaEventMsg(process.pid,ks.OPERATIONS_ENUM.DROP_TABLE,c,n))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[ps])return this.search(m);if(this[Me]===null){if(m?.conditions)return this.search(m);let O=ze.getRecordCount();return{recordCount:O.recordCount,estimatedRecordRange:O.estimatedRange,records:"./",name:n,database:c,attributes:S}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[Oe]?.returnNonexistent)return this}allowRead(m,O){let w=kl(m);if(w?.read){if(w.isSuperUser)return!0;let N=w.attribute_permissions,A=O?.select;if(N?.length>0||JA&&A){if(O||(O={}),A){let D=N?.length>0&&LA(N,"read");O.select=A.map(y=>{let U=y.name||y;if(!D||D[U]){let G=Yn[U]?.definition?.tableClass;if(G){if(y.name||(y={name:y}),!G.prototype.allowRead.call(null,m,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else O.select=N.filter(D=>D.read&&!Yn[D.attribute_name]).map(D=>D.attribute_name);return O}else return!0}}allowUpdate(m,O){let w=kl(m);if(w?.update){let N=w.attribute_permissions;if(N?.length>0){let A=LA(N,"update");for(let D in O)if(!A[D])return!1;for(let D of N){let y=D.attribute_name;!D.update&&!(y in O)&&(O[y]=this.getProperty(y))}}return!0}}allowCreate(m,O){if(this[ps]){let w=kl(m);if(w?.insert){let N=w.attribute_permissions;if(N?.length>0){let A=LA(N,"insert");for(let D in O)if(!A[D])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return kl(m)?.delete}update(m,O){if(!gs(this[Oe]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let N;return typeof m=="object"&&m&&(O?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[_e]={},this[It]=m):(N=this[It],N&&(m=Object.assign(N,m)),this[It]=N=m)),this._writeUpdate(this[It],O),this}addTo(m,O){if(typeof O=="number")this[Al]===Kx?this.set(m,(+this.getProperty(m)||0)+O):(this[Al]||this.update(),this.set(m,new VE(O)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,O){if(typeof O=="number")return this.addTo(m,-O);throw new Error("Can not subtract a non-numeric value")}invalidate(m){let O=this[Oe],w=this[Me];rc(w),gs(this[Oe]).addWrite({key:w,store:i,invalidated:!0,entry:this[Jr],nodeName:this[Oe]?.nodeName,before:Le.invalidate?.bind(this,O,w),beforeIntermediate:Be.invalidate?.bind(this,O,w),commit:(A,D)=>{if(D?.version>A)return;let y=null;for(let U in r)y||(y={}),y[U]=this.getProperty(U);T(w,y,this[Jr],A,Ol,h,this[Oe],0,"invalidate")}})}static evict(m,O,w){let N=this.Source,A;if(!((L||h)&&(!O||(A=i.getEntry(m),!A||!O)||A.version!==w))){if(L){if(i.hasLock(m,A.version))return;let D;for(let y in r)D||(D={}),D[y]=O[y];if(D)return T(m,D,A,w,bl,null,null,0,null,!0)}return i.ifVersion(m,w,()=>{Fl(m,O,null)}),h?T(m,null,A,w,bl,null,null,0,null,!0):i.remove(m,w)}}lock(){throw new Error("Not yet implemented")}static operation(m,O){return m.table||=n,m.schema||=c,jx.operation(m,O)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,O,w){let N=this[Oe],A=gs(N),D=this[Me];rc(D);let y=this[Jr];this[Al]=O?Kx:mie;let U={key:D,store:i,entry:y,nodeName:N?.nodeName,validate:G=>{m||(m=this[It]),O||m&&FE(m)?N?.source||(A.checkOverloaded(),this.validate(m,!O),B&&(m[B.name]=B.type==="Date"?new Date(G):B.type==="String"?new Date(G).toISOString():G),O&&(t&&m[t]!==D&&(m[t]=D),k&&(y?.value?m[k.name]=y?.value[k.name]:m[k.name]=k.type==="Date"?new Date(G):k.type==="String"?new Date(G).toISOString():G),m=Lo(m))):A.removeWrite(U)},before:O?Le.put?()=>Le.put(N,D,m):null:Le.patch?()=>Le.patch(N,D,m):Le.put?()=>Le.put(N,D,Lo(this)):null,beforeIntermediate:O?Be.put?()=>Be.put(N,D,m):null:Be.patch?()=>Be.patch(N,D,m):Be.put?()=>Be.put(N,D,Lo(this)):null,commit:(G,C,v)=>{if(v){if(N&&C?.version>(N.lastModified||0)&&(N.lastModified=C.version),this[Jr]=C,C?.value?.[_e])throw new Error("Can not assign a record to a record, check for circular references");O||(this[_e]=C?.value??null)}this[It]=m,this[yl]=G;let F=C?.value,oe=m;if(this[Al]=0,C?.version>=G)if(h){let ae=C.localTime,qe=C.version;for(;oe&&(ae>G||qe>=G&&ae>0);){let re=u.get(ae);if(!re)break;let j=Dt(re);if(qe=j.version,qe>G){if(j.type==="patch"){let ge=j.getValue(i);oe=qE(oe,ge)}else if(j.type==="put"||j.type==="delete")return}else if(qe===G)return;ae=j.previousLocalTime}}else{if(O)return;oe=qE(oe,F)}let be;if(O?be=oe:(this[_e]=F,be=O?oe:Lo(this,oe)),this[_e]=be,be?.[_e])throw new Error("Can not assign a record to a record, check for circular references");let te;O||(te=m),Fl(D,F,be);let Pe=O?"put":"patch";T(D,be,C,G,0,h,N,N.expiresAt||(f?f+Date.now():0),Pe,!1,te)}};A.addWrite(U)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[ps]){for await(let O of this.search(m))(await ze.getResource(O[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[_e]?this._writeDelete(m):!1}_writeDelete(m){let O=gs(this[Oe]),w=this[Me];rc(w);let N=this[Oe];return O.addWrite({key:w,store:i,resource:this,nodeName:N?.nodeName,before:Le.delete?.bind(this,N,w),beforeIntermediate:Be.delete?.bind(this,N,w),commit:(A,D,y)=>{let U=D?.value;y&&(N&&D?.version>(N.lastModified||0)&&(N.lastModified=D.version),zE(this,D)),!(D?.version>A)&&(Fl(this[Me],U),Ze.trace("Write delete entry",w,A),h||p?(T(w,null,this[Jr],A,0,h,this[Oe],0,"delete"),h||ph()):i.remove(this[Me]))}}),!0}search(m){let O=this[Oe],w=gs(O);if(!m)throw new Error("No query provided");let N=m.conditions;N?N.length===void 0&&(N=N[Symbol.iterator]?Array.from(N):[N]):N=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Me]&&(N=[{attribute:null,comparator:"prefix",value:this[Me]}].concat(N));let A,D={};function y(j,ge){let He;switch(ge){case"and":case void 0:if(j.length<1)throw new Error('An "and" operator requires at least one condition');He=!0;break;case"or":if(j.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+ge)}let Vs=He&&{},Kn;for(let $e of j){if($e.conditions){$e.conditions=y($e.conditions,$e.operator);continue}let Ht=$e[0]??$e.attribute,es=Ht==null?H:Bn(S,Ht);if(es){if(He){let $s=Hs(Ht),xt=Vs[$s];xt?(xt.push($e),Kn=!0):Vs[$s]=[$e]}(es.type||vg[$e.comparator])&&($e[1]===void 0?$e.value=G($e.value,es):$e[1]=G($e[1],es))}else if(Ht!=null)throw(0,Ss.handleHDBError)(new Error,`${Ht} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return j;if(Kn)for(let $e in Vs){let Ht=Vs[$e],es=Ht.length;if(es>1)for(let $s=0;$s<es;$s++){let xt=Ht[$s];if(xt.comparator==="ge"||xt.comparator==="greater_than_equal")for(let Wn=0;Wn<es;Wn++){let Ho=Ht[Wn];(Ho.comparator==="le"||Ho.comparator==="less_than_equal")&&(xt.comparator="between",xt.value=[xt.value,Ho.value],j.splice(j.indexOf(Ho),1))}if(xt.comparator==="equals"||!xt.comparator){for(let Wn=0;Wn<es;Wn++)if(Wn!==$s){let Ho=Ht[Wn];j.splice(j.indexOf(Ho),1)}break}}}return j}a(y,"prepareConditions");function U(j,ge){if(m.enforceExecutionOrder)return j;for(let He of j)He.conditions&&(He.conditions=U(He.conditions,He.operator));return j.length>1&&ge!=="or"?(0,Xx.sortBy)(j,xf(ze)):j}a(U,"orderConditions");function G(j,ge){return Array.isArray(j)?j.map(He=>QE(He,ge)):QE(j,ge)}a(G,"coerceTypedValues");let C=m.operator;(N.length>0||C)&&(N=y(N,C));let v=typeof m.sort=="object"&&m.sort,F;if(v&&C!=="or"){let j=v.attribute;if(A=N.find(ge=>Hs(ge.attribute)===Hs(j)),!A){if(!Bn(S,j))throw(0,Ss.handleHDBError)(new Error,`${Array.isArray(j)?j.join("."):j} is not a defined attribute`,404);A={attribute:j,comparator:"sort"},N.push(A)}A.descending=!!v.descending}N=U(N,C),v&&(N[0]===A?v.next&&(F={dbOrderedAttribute:v.attribute,attribute:v.next.attribute,descending:v.next.descending,next:v.next.next}):(A&&N.splice(N.indexOf(A),1),F=v));let oe=m.select;if(N.length===0&&(N=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:N,operator:C,postOrdering:F,selectApplied:!!oe};let be=w.useReadTxn(),te=Bg(N,C,ze,be,m,O,(j,ge)=>XA(j,oe,O,be,ge),D),Pe=m.ensureLoaded!==!1;F||(te=re(te));let ae=ze.transformEntryForSelect(oe,O,be,D,Pe,!0),qe=ze.transformToOrderedSelect(te,oe,F,be,O,ae);function re(j){return m.offset||m.limit!==void 0?j.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):j}return a(re,"applyOffset"),F&&(qe=re(qe)),qe.onDone=()=>{qe.onDone=null,w.doneReadTxn()},qe.selectApplied=!0,qe.getColumns=()=>{if(oe){let j=[];for(let ge of oe)ge==="*"?j.push(...S.map(He=>He.name)):j.push(ge.name||ge);return j}return S.map(j=>j.name)},qe}static transformToOrderedSelect(m,O,w,N,A,D){let y=new Qq;if(w){m=XA(m,O,N,A,null);let U;y.iterate=function(){let C,v=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),F,oe=w.dbOrderedAttribute,be,te,Pe=!0;function ae(re){let j=re.next&&ae(re.next),ge=re.descending;return(He,Vs)=>{let Kn=mh(He,re.attribute,N),$e=mh(Vs,re.attribute,N),Ht=ge?(0,Po.compareKeys)($e,Kn):(0,Po.compareKeys)(Kn,$e);return Ht===0?j?.(He,Vs)||0:Ht}}a(ae,"createComparator");let qe=ae(w);return{async next(){let re;if(C)if(re=C.next(),re.done){if(F)return y.onDone&&y.onDone(),re}else return{value:await D.call(this,re.value)};U=[],be&&U.push(be);do if(re=await v.next(),re.done){if(F=!0,U.length)break;return y.onDone&&y.onDone(),re}else{let j=re.value;if(j?.then&&(j=await j),oe){let ge=mh(j,oe,N);if(Pe)Pe=!1,te=ge;else if(ge!==te){te=ge,be=j;break}}U.push(j)}while(!0);return w.isGrouped,U.sort(qe),C=U[Symbol.iterator](),re=C.next(),re.done?(y.onDone&&y.onDone(),re):{value:await D.call(this,re.value)}},return(){y.onDone&&y.onDone(),v.return()},throw(){y.onDone&&y.onDone(),v.throw()}}};let G=a(C=>{if(typeof O=="object"&&Array.isArray(C.attribute))for(let v=0;v<O.length;v++){let F=O[v],oe;if(F.name===C.attribute[0]){for(oe=F.sort||(F.sort={});oe.next;)oe=oe.next;oe.attribute=C.attribute.slice(1),oe.descending=C.descending}else F===C.attribute[0]&&(O[v]=oe={name:F,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&G(C.next)},"applySortingOnSelect");G(w)}else y.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),y=y.map(D);return y}static transformEntryForSelect(m,O,w,N,A,D){if(m&&(m===t||m?.length===1&&m[0]===t)){let C=a(v=>v?.key??v,"transform");return m===t?C:m.asArray?v=>[C(v)]:v=>({[t]:C(v)})}let y;A&&L&&!m?.every(C=>{let v;return typeof C=="object"?v=C.name:v=C,r[v]||v===t})&&(y=!0);let U,G=a(function(C){let v;if(C!=null){if(fh=C,v=C.value||C.deref?.(),!v&&(C.key===void 0||C.deref)){if(C=Eh(C.key??C,O,{transaction:w,lazy:m?.length<4},this.isSync,F=>F),C?.then)return C.then(G.bind(this));v=C?.value}if(y&&(C.metadataFlags&(Ol|bl)||C.expiresAt&&C.expiresAt<Date.now())){let F=hh(C.key??C,C,O);if(F?.then)return F.then(G)}}if(v==null)return D?Mo.SKIP:v;if(m&&!(m[0]==="*"&&m.length===1)){let F,oe=a((te,Pe)=>{let ae;typeof te=="object"?ae=te.name:ae=te;let qe=Yn?.[ae],re;if(qe){let j=N?.[ae];if(j)if(j.hasMappings){let He=qe.from?v[qe.from]:Hs(C.key);re=j.get(He),re||(re=[])}else re=j.fromRecord?.(v);else re=qe(v,O,C);let ge=a(He=>{if(He&&typeof He=="object"){let Vs=qe.definition?.tableClass||ze;U||(U={});let Kn=U[ae]||(U[ae]=Vs.transformEntryForSelect(ae===te?null:te.select||(Array.isArray(te)?te:null),O,w,j,A));if(Array.isArray(He)){let $e=[],Ht=Vs.transformToOrderedSelect(He,te.select,typeof te.sort=="object"&&te.sort,O,w,Kn)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),es=a(xt=>{for(;!xt.done;){if(xt?.then)return xt.then(es);$e.push(xt.value),xt=Ht.next()}Pe($e,ae)},"nextValue"),$s=es(Ht.next());$s&&(F||(F=[]),F.push($s));return}else if(He=Kn.call(this,He),He?.then){F||(F=[]),F.push(He.then($e=>Pe($e,ae)));return}}Pe(He,ae)},"handleResolvedValue");re?.then?(F||(F=[]),F.push(re.then(ge))):ge(re);return}else re=v[ae],re&&typeof re=="object"&&ae!==te&&(re=ze.transformEntryForSelect(te.select||te,O,w,null)({value:re}));Pe(re,ae)},"selectAttribute"),be;if(typeof m=="string")oe(m,te=>{be=te});else if(Array.isArray(m))if(m.asArray)be=[],m.forEach((te,Pe)=>{te==="*"?m[Pe]=v:oe(te,ae=>be[Pe]=ae)});else{be={};let te=m.forceNulls;for(let Pe of m)if(Pe==="*")for(let ae in v)be[ae]=v[ae];else oe(Pe,(ae,qe)=>{ae===void 0&&te&&(ae=null),be[qe]=ae})}else throw new Ss.ClientError("Invalid select"+m);return F?Promise.all(F).then(()=>be):be}return v},"transform");return G}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");h||ct({table:n,database:c,schemaDefined:_,attributes:S,audit:!0}),m||(m={});let O=!m.rawEvents,w=Fx(ze,this[Me]??null,function(y,U,G,C){try{let v=U.getValue?.(i,O);if(!v&&U.type==="patch"&&O){let F=i.getEntry(y);F?.version===U.version?v=F.value:v=U.getValue?.(i,!0,G),U.type="put"}this.send({id:y,timestamp:G,value:v,version:U.version,type:U.type,beginTxn:C})}catch(v){Ze.error(v)}},m.startTime||0,this[ps]);this[ps]&&(w.includeDescendants=!0,m.onlyChildren&&(w.onlyChildren=!0)),m.crossThreads===!1&&(w.crossThreads=!1),m.supportsTransactions&&(w.supportsTransactions=!0);let N=this[Me],A=m.previousCount;A>1e3&&(A=1e3);let D=m.startTime;if(this[ps]){if(D){if(A)throw new Ss.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:U}of u.getRange({start:D,exclusiveStart:!0})){let G=Dt(U);if(G.tableId!==s)continue;let C=G.recordId;if(N==null||zx(N,C)){let v=G.getValue(i,O,y);w.send({id:C,timestamp:y,value:v,version:G.version,type:G.type})}w.startTime=y}}else if(A){let y=[];for(let{key:U,value:G}of u.getRange({start:"z",end:!1,reverse:!0}))try{let C=Dt(G);if(C.tableId!==s)continue;let v=C.recordId;if(N==null||zx(N,v)){let F=C.getValue(i,O,U);if(y.push({id:v,timestamp:U,value:F,version:C.version,type:C.type}),--A<=0)break}}catch(C){Ze.error("Error getting history entry",U,C)}for(let U=y.length;U>0;)w.send(y[--U]);y[0]&&(w.startTime=y[0].timestamp)}else if(!m.omitCurrent)for(let{key:y,value:U,version:G,localTime:C}of i.getRange({start:N??!1,end:N==null?void 0:[N,Po.MAXIMUM_KEY],versions:!0}))U&&w.send({id:y,timestamp:C,value:U,version:G,type:"put"})}else{A&&!D&&(D=0);let y=this[Jr]?.localTime;if(y===im&&(i.cache?.delete(N),this[Jr]=i.getEntry(N),Ze.trace("re-retrieved record",y,this[Jr]?.localTime),y=this[Jr]?.localTime),Ze.trace("Subscription from",D,"from",N,y),D<y){let U=[],G=y;do{let C=u.get(G);if(C){m.omitCurrent=!0;let v=Dt(C),F=v.getValue(i,O,G);O&&(v.type="put"),U.push({id:N,value:F,timestamp:G,...v}),G=v.previousLocalTime}else break;A&&A--}while(G>D&&A!==0);for(let C=U.length;C>0;)w.send(U[--C]);w.startTime=y}!m.omitCurrent&&this.doesExist()&&w.send({id:N,timestamp:y,value:this,version:this[yl],type:"put"})}return m.listener&&w.on("data",m.listener),w}doesExist(){return!!(this[_e]||this[Al])}publish(m,O){this._writePublish(m,O)}_writePublish(m,O){let w=gs(this[Oe]),N=this[Me]||null;rc(N);let A=this[Oe];w.addWrite({key:N,store:i,entry:this[Jr],nodeName:A?.nodeName,validate:()=>{A?.source||(w.checkOverloaded(),this.validate(m))},before:Le.publish?.bind(this,A,N,m),beforeIntermediate:Be.publish?.bind(this,A,N,m),commit:(D,y,U)=>{y===void 0&&p&&!h&&ph(),T(N,y?.value??null,y,y?.version||D,0,!0,A,y?.expiresAt,"message",!1,m)}})}validate(m,O){let w,N=a((A,D,y)=>{if(D.type&&A!=null)if(O&&A.__op__&&(A=A.value),D.properties){typeof A!="object"&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be an object${D.type?" ("+D.type+")":""}`);let U=D.properties;for(let G=0,C=U.length;G<C;G++){let v=U[G],F=N(A[v.name],v,y+"."+v.name);F&&(A[v.name]=F)}if(D.sealed&&A!=null&&typeof A=="object")for(let G in A)U.find(C=>C.name===G)||(w||(w=[])).push(`Property ${G} is not allowed within object in property ${y}`)}else switch(D.type){case"Int":(typeof A!="number"||A>>0!==A)&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof A!="number"||!(Math.floor(A)===A&&Math.abs(A)<=9007199254740992))&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof A!="number"&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a number`);break;case"ID":typeof A=="string"||A?.length>0&&A.every?.(U=>typeof U=="string")||(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a string, or an array of strings`);break;case"String":typeof A!="string"&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a string`);break;case"Boolean":typeof A!="boolean"&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a boolean`);break;case"Date":if(!(A instanceof Date)){if(typeof A=="string"||typeof A=="number")return new Date(A);(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a Date`)}break;case"BigInt":if(typeof A!="bigint"){if(typeof A=="string"||typeof A=="number")return BigInt(A);(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a bigint`)}break;case"Bytes":A instanceof Uint8Array||(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(A)){if(D.elements)for(let U=0,G=A.length;U<G;U++){let C=A[U],v=N(C,D.elements,y+"[*]");v&&(A[U]=v)}}else(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a Buffer or Uint8Array`);break}D.nullable===!1&&A==null&&(w||(w=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let A=0,D=S.length;A<D;A++){let y=S[A];if(!y.relationship&&(!O||y.name in m)){let U=N(m[y.name],y,y.name);U&&(m[y.name]=U)}}if(d)for(let A in m)S.find(D=>D.name===A)||(w||(w=[])).push(`Property ${A} is not allowed`);if(w)throw new Ss.ClientError(w.join(". "))}getUpdatedTime(){return this[yl]}wasLoadedFromSource(){return L?!!this[DA]:void 0}static async addAttributes(m){let O=S.slice(0);for(let w of m){if(!w.name)throw new Ss.ClientError("Attribute name is required");if(w.name.match(/[`/]/))throw new Ss.ClientError("Attribute names cannot include backticks or forward slashes");O.push(w)}return ct({table:n,database:c,schemaDefined:_,attributes:O}),ze.indexingOperation}static async removeAttributes(m){let O=S.filter(w=>!m.includes(w.name));return ct({table:n,database:c,schemaDefined:_,attributes:O}),ze.indexingOperation}static getRecordCount(m){let O=i.getStats().entryCount,w=5e3,N=1e3,A;O>w&&!m?.exactCount&&(A=N);let D=0;for(let{value:y}of i.getRange({start:!0,lazy:!0,limit:A}))y!=null&&D++;if(A){let y=D;D=0;for(let{value:Pe}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:A}))Pe!=null&&D++;let U=A*2,G=(D+y)/U,C=Math.pow((D-y+1)/A/2,2)+G*(1-G)/U,v=Math.max(Math.sqrt(C)*O,1),F=Math.round(G*O),oe=Math.max(F-1.96*v,0),be=Math.min(F+1.96*v,O),te=Math.pow(10,Math.round(Math.log10(v)));return te>F&&(te=te/10),D=Math.round(F/te)*te,{recordCount:D,estimatedRange:[Math.round(oe),Math.round(be)]}}return{recordCount:D}}static updatedAttributes(){Yn=this.propertyResolvers={$id:(m,O,w)=>({value:w.key}),$updatedtime:(m,O,w)=>w.version,$record:(m,O,w)=>w?{value:m}:m};for(let m of this.attributes){m.resolve=null;let O=m.relationship;if(O)if(m.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),JA=!0,O.to)m.elements?.definition?(Yn[m.name]=m.resolve=(w,N,A)=>{let D=w[O.from?O.from:t],y=m.elements.definition.tableClass;return A?Ma({attribute:O.to,value:D},gs(N).getReadTxn(),!1,y,!1).asArray:y.search([{attribute:O.to,value:D}],N).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,O.from&&(m.resolve.from=O.from)):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${n}" must have an array type referencing a table as the elements`);else if(O.from){let w=m.definition||m.elements?.definition;w?(Yn[m.name]=m.resolve=(N,A,D)=>{let y=N[O.from];if(y!==void 0){if(m.elements){let U,G=y.map(C=>{let v=D?w.tableClass.primaryStore.getEntry(C,{transaction:gs(A).getReadTxn()}):w.tableClass.get(C,A);return v?.then&&(U=!0),v});return O.filterMissing?U?Promise.all(G).then(C=>C.filter(Jx)):G.filter(Jx):U?Promise.all(G):G}return D?w.tableClass.primaryStore.getEntry(y,{transaction:gs(A).getReadTxn()}):w.tableClass.get(y,A)}},m.set=(N,A)=>{if(Array.isArray(A)){let D=A.map(y=>y[Me]||y[w.tableClass.primaryKey]);N[O.from]=D}else{let D=A[Me]||A[w.tableClass.primaryKey];N[O.from]=D}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=O.from):console.error(`The relationship property "${m.name}" in table "${n}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${n}" must use either "from" or "to" arguments`)}$E(this,this)}static async deleteHistory(m=0){let O;for(let{key:w,value:N}of u.getRange({start:0,end:m}))await Nl(),Dt(N).tableId===s&&(O=u.remove(w));await O}static async*getHistory(m=0,O=1/0){for(let{key:w,value:N}of u.getRange({start:m,end:O})){await Nl();let A=Dt(N);A.tableId===s&&(yield{id:A.recordId,localTime:w,version:A.version,type:A.type,value:A.getValue(i,!0,w),user:A.user})}}static async getHistoryOfRecord(m){let O=[];if(m==null)throw new Error("An id is required");let w=i.getEntry(m);if(!w)return O;let N=w.localTime;if(!N)throw new Error("The entry does not have a local audit time");let A=0;do{await Nl();let D=u.get(N);if(D){let y=Dt(D);O.push({id:y.recordId,localTime:N,version:y.version,type:y.type,value:y.getValue(i,!0,N),user:y.user}),N=y.previousLocalTime}else break}while(A<1e3&&N);return O.reverse()}static cleanup(){z?.remove()}}ze.updatedAttributes();let Xq=ze.prototype;return Xq[hie]=!0,f&&ze.setTTLExpiration(f/1e3),J&&jq(),ze;function Fl(K,m,O){let w;for(let N in r){let A=r[N],D=A.isIndexing,y=O?.[N],U=m?.[N];if(y===U&&!D)continue;w=!0;let G=A.indexNulls,C=(0,wl.getIndexedValues)(U,G);if(C){Yx&&A.prefetch(C.map(v=>({key:v,value:K})),Qx);for(let v=0,F=C.length;v<F;v++)A.remove(C[v],K)}if(C=(0,wl.getIndexedValues)(y,G),C){Yx&&A.prefetch(C.map(v=>({key:v,value:K})),Qx);for(let v=0,F=C.length;v<F;v++)A.put(C[v],K)}}return w}a(Fl,"updateIndices");function rc(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>Wx)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)return!0;break;case"bigint":if(K<2n**64n&&K>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof K)}if((0,Po.writeKey)(K,pie,0)>Wx)throw new Error("Primary key size is too large: "+K.length);return!0}a(rc,"checkValidId");function Eh(K,m,O,w,N){let A=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),O.transaction?.isDone)return N(null,K);let D=i.getEntry(K,O);return D&&m&&(D?.version>(m.lastModified||0)&&(m.lastModified=D.version),D?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=D.localTime)),N(D,K)},"whenPrefetched");return w?A():ce>0?(ce--,A()):new Promise((D,y)=>{ce===0?(ce--,i.prefetch([K],()=>{U(),G()})):(X.push(K),Te.push(G),X.length>Jq&&(ce--,U()));function U(){if(X.length>0){let C=Te;i.prefetch(X,()=>{ce===-1?U():ce++;for(let v of C)v()}),X=[],Te=[],de>2&&de--}else ce=de,de<zq&&de++}a(U,"prefetch");function G(){try{D(A())}catch(C){y(C)}}a(G,"load")})}a(Eh,"loadLocalRecord");function kl(K){if(!K?.role)return;let m=K.role.permission;if(m.super_user)return Sie;let O=m[c],w,N=O?.tables;if(N)return N[n];if(c==="data"&&(w=m[n])&&!w.tables)return w}a(kl,"getTablePermissions");function hh(K,m,O,w){if(L){let N;if(O.noCache?N=!0:(m?(!m.value||m.metadataFlags&(Ol|bl)||m.expiresAt&&m.expiresAt<Date.now())&&(N=!0):N=!0,ns(!N,"cache-hit",n)),N){let A=jA(K,m,O).then(D=>(D?.value?.[_e]&&Ze.error("Can not assign a record with a record property"),O&&(D?.version>(O.lastModified||0)&&(O.lastModified=D.version),O.lastRefreshed=Date.now()),D));if(O?.onlyIfCached||m?.value&&w?.allowStaleWhileRevalidate?.(m,K)){if(A.catch(D=>Ze.warn(D)),O?.onlyIfCached&&!w.doesExist())throw new Ss.ServerError("Entry is not cached",504);return}else return A}}}a(hh,"ensureLoadedFromSource");function gs(K){let m=K?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let O=m.next;if(!O)return m=m.next=new to,m.lmdbDb=i,m;m=O}while(!0)}else return new rd}a(gs,"txnForContext");function mh(K,m,O){if(!K)return;fh=K;let w=K.value||K.deref?.()||(fh=i.getEntry(K.key))?.value;if(typeof m=="object"){let A=Yn,D=w;for(let y=0,U=m.length;y<U;y++){let G=m[y],C=A?.[G];D=C&&D?C(D,O,!0)?.value:D?.[G],A=C?.definition?.tableClass?.propertyResolvers}return D}let N=Yn[m];return N?N(w,O):w[m]}a(mh,"getAttributeValue");function XA(K,m,O,w,N){let A=N?.length,D={transaction:w,lazy:A>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},y;function U(G,C){let v=G?.value;if(!v)return Mo.SKIP;for(let F=0;F<A;F++)if(!y?.includes(F)&&!N[F](v,G))return Mo.SKIP;return C!==void 0&&(G.key=C),G}if(a(U,"processEntry"),A>0||!K.hasEntries){let G=K.map(C=>{if(y=null,typeof C=="object"&&C.key!==void 0)return A>0?U(C):C;if(C==null)return Mo.SKIP;for(let v=0;v<A;v++){let oe=N[v].idFilter;if(oe){if(!oe(C))return Mo.SKIP;y||(y=[]),y.push(v)}}return Eh(C,O,D,!1,U)});return Array.isArray(K)&&(G=G.filter(C=>C!==Mo.SKIP)),G.hasEntries=!0,G}return K}a(XA,"transformToEntries");async function jA(K,m,O){let w=m?.metadataFlags,N=m?.version,A,D;if(!i.attemptLock(K,N,()=>{clearTimeout(D);let C=i.getEntry(K);!C||!C.value||C.metadataFlags&(Ol|bl)?A(jA(K,i.getEntry(K),O)):A(C)}))return new Promise(C=>{A=C,D=setTimeout(()=>{i.unlock(K,N)},Eie)});let y=m?.value,U={requestContext:O,replacingRecord:y,replacingVersion:N,source:null,resourceCache:O?.resourceCache},G=O?.responseHeaders;return new Promise((C,v)=>{let F;MA(je(U,async oe=>{let be=performance.now(),te,Pe,ae;try{for(let ge of ze.sources)if(ge.get&&(!ge.get.reliesOnPrototype||ge.prototype.get)&&(U.source=ge,te=await ge.get(K,U),te))break;ae=w&Ol;let re=U.lastModified||ae&&N;Pe=ae||re>N||!y,re||(re=(0,wl.getNextMonotonicTime)());let j=performance.now()-be;if(qr(j,"cache-resolution",n),G&&sg(G,"Server-Timing",`cache-resolve;dur=${j.toFixed(2)}`,!0),oe.timestamp=re,f&&!U.expiresAt&&(U.expiresAt=Date.now()+f),te){if(typeof te!="object")throw new Error("Only objects can be cached and stored in tables");typeof te.toJSON=="function"&&(te=te.toJSON()),t&&te[t]!==K&&(te[t]=K)}F=!0,C({version:re,value:te})}catch(re){re.message+=` while resolving record ${K} for ${n}`,y&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!O?.mustRevalidate||O?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(C({version:N,value:y}),Ze.trace(re.message,"(returned stale record)")):v(re),U.transaction.abort();return}if(O?.noCacheStore){U.transaction.abort();return}gs(U).addWrite({key:K,store:i,entry:m,nodeName:"source",commit:(re,j)=>{if(j?.version!==N)return;let ge=Fl(K,y,te);te?(Be.put?.(U,K,te),T(K,te,j,re,0,h&&Pe||null,U,U.expiresAt,"put",!!ae)):(Be.delete?.(U,K),h||p?T(K,null,j,re,0,h&&Pe||null,U,0,"delete",!!ae):i.remove(K,N))}})}),()=>{i.unlock(K,N)},oe=>{i.unlock(K,N),F&&Ze.error("Error committing cache update",oe)})})}a(jA,"getFromSource");function ph(){if(Ct!==ql&&(ql=Ct,(0,Uo.getWorkerIndex)()===(0,Uo.getWorkerCount)()-1)){if(Gl&&clearTimeout(Gl),!Ct)return;let K=new Date;K.setMonth(0),K.setDate(1),K.setHours(0),K.setMinutes(0),K.setSeconds(0);let m=Math.ceil((Date.now()-K.getTime())/Ct)*Ct+K.getTime(),O=a(w=>{Ze.trace(`Scheduled next cleanup scan at ${new Date(w)}ms`),Gl=setTimeout(()=>P=P.then(async()=>{if(O(Math.max(w+Ct,Date.now())),i.rootStore.status!=="open"){clearTimeout(Gl);return}let N=50,A=new Array(N),D=0;Ze.trace(`Starting cleanup scan for ${n}`);try{let y=0;for(let{key:U,value:G,version:C,expiresAt:v}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let F;G===null&&!h&&C+fie<Date.now()?F=i.remove(U,C):v&&v+E<Date.now()&&(F=ze.evict(U,G,C),y++),F&&(await A[D],A[D]=F.catch(oe=>{Ze.error("Cleanup error",oe)}),++D>=N&&(D=0)),await Nl()}Ze.trace(`Finished cleanup scan for ${n}, evicted ${y} entries`)}catch(y){Ze.trace(`Error in cleanup scan for ${n}:`,y)}}),Math.min(w-Date.now(),2147483647)).unref()},"startNextTimer");O(m)}}a(ph,"scheduleCleanup");function ZA(){z=u?.addDeleteRemovalCallback(s,K=>{let m=i.getEntry(K);m?.value===null&&i.remove(K,m.version)})}a(ZA,"addDeleteRemoval");function jq(){(0,Uo.getWorkerIndex)()===0&&setInterval(async()=>{try{let K=J.name,m=r[K];if(!m)throw new Error(`expiresAt attribute ${J} must be indexed`);for(let{key:O,value:w}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let N=i.getEntry(w);N?.value?N.value[K]<Date.now()&&ze.evict(w,N.value,N.version):i.ifVersion(w,N?.version,()=>m.remove(O,w)),await Nl()}}catch(K){Ze.error("Error in evicting old records",K)}},die).unref()}a(jq,"runRecordExpirationEviction")}function LA(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function Qx(){}function Tie(e){jx=e}function QE(e,t){let r=t?.type;return e===null?e:e===""&&r&&r!=="String"&&r!=="Any"?null:r==="Int"||r==="Long"?e==="null"?null:parseInt(e):r==="Float"?e==="null"?null:parseFloat(e):r==="BigInt"?e==="null"?null:BigInt(e):r==="Boolean"?e==="true"?!0:e==="false"?!1:e:r==="Date"?(typeof e!="number"&&!gie.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,JE.autoCast)(e):e}function zx(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}function MA(e,t,r){return e?.then?e.then(t,r):t(e)}function zE(e,t){e[Jr]=t,e[_e]=t?.value??null,e[yl]=t?.version}function Jx(e){return e!=null}function Fs(e){try{return JSON.stringify(e)}catch{return e}}var ks,Mo,wl,Xx,Dl,Ss,Il,Cl,Ze,Po,Uo,JE,_ie,jx,die,fie,Yx,Eie,yl,hie,Jr,Al,Kx,mie,DA,Xa,Ol,bl,pie,Wx,Sie,xSe,gie,Nl,eE=Re(()=>{ks=x(M()),Mo=require("lmdb"),wl=x(wr()),Xx=require("lodash");Os();jp();Dl=x(ee());$x();Ss=x(se()),Il=x(Rn()),Cl=x(Cs());Ae();Gf();Ze=x($());id();ro();Po=require("ordered-binary"),Uo=x(Ke());xi();JE=x(Q());bc();Nn();HE();qu();_ie=new Uint8Array(9);_ie[8]=192;die=6e4,fie=864e5;Dl.initSync();Yx=Dl.get(ks.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Eie=1e4,yl=Symbol.for("version"),hie=Symbol.for("incremental-update"),Jr=Symbol("entry"),Al=Symbol("is-saving"),Kx=1,mie=2,DA=Symbol("loaded-from-source"),Xa={isNotification:!0,ensureLoaded:!1},Ol=1,bl=8,pie=Buffer.allocUnsafeSlow(8192),Wx=1978,Sie={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},xSe=(0,JE.convertToMS)(Dl.get(ks.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(XE,"makeTable");a(LA,"attributesAsObject");a(Qx,"noop");a(Tie,"setServerUtilities");gie=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(QE,"coerceType");a(zx,"isDescendantId");Nl=a(()=>new Promise(setImmediate),"rest");a(MA,"when");a(zE,"updateResource");a(Jx,"exists");a(Fs,"stringify")});var Ge={};Ye(Ge,{database:()=>Jc,databases:()=>rt,dropDatabase:()=>sS,dropTableMeta:()=>yie,getDatabases:()=>Ls,getTables:()=>Rie,onUpdatedTable:()=>kR,readMetaDb:()=>Ll,resetDatabases:()=>Aie,table:()=>ct,tables:()=>Ir});function Rie(){return rh||Ls(),Ir||{}}function Ls(){if(rh)return rt;rh=!0,ec=new Map;let e=(0,er.getHdbBasePath)()&&(0,et.join)((0,er.getHdbBasePath)(),jr.DATABASES_DIR_NAME),t=(0,er.get)(jr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,er.get)(jr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Xr.existsSync)(e)?e:(0,et.join)((0,er.getHdbBasePath)(),jr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Xr.existsSync)(e))for(let r of(0,Xr.readdirSync)(e,{withFileTypes:!0})){let s=(0,et.basename)(r.name,".mdb");r.isFile()&&(0,et.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&Ll((0,et.join)(e,r.name),null,s)}if((0,Xr.existsSync)((0,Za.getBaseSchemaPath)())){for(let r of(0,Xr.readdirSync)((0,Za.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,et.join)((0,Za.getBaseSchemaPath)(),r.name),n=(0,et.join)((0,Za.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Xr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,et.extname)(i.name).toLowerCase()===".mdb"){let o=(0,et.join)(n,i.name);Ll((0,et.join)(s,i.name),(0,et.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,Xr.existsSync)(n))for(let o of(0,Xr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,et.extname)(o.name).toLowerCase()===".mdb"&&Ll((0,et.join)(n,o.name),(0,et.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,et.join)(c.path,(0,et.basename)(o+".mdb"));(0,Xr.existsSync)(u)&&Ll(u,o,r,null,!0)}}for(let r in rt){let s=ec.get(r);if(s){let n=rt[r];r.includes("delete")&&Ts.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Ts.trace(`delete table class ${i}`),delete n[i])}else if(delete rt[r],r==="data"){for(let n in Ir)delete Ir[n];delete Ir[sh]}}return ec=null,rt}}function Aie(){rh=!1;for(let[,e]of Li)e.needsDeletion=!0;Ls();for(let[e,t]of Li)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Li.delete(e));return rt}function Ll(e,t,r=vA,s,n){let i=new UA.default(e,!1);try{let o=Li.get(e);o?o.needsDeletion=!1:(o=(0,ZE.open)(i),Li.set(e,o));let c=new vo.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(jE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,Xr.existsSync)(s)&&(i.path=s,_=(0,ZE.open)(i),_.isLegacy=!0):_=BE(o));let l=rq(r),d=l[sh],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[p,S]=E.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let T=f.get(p);T||f.set(p,T={attributes:[]}),(S==null||h.is_hash_attribute)&&(T.primary=h),S!=null&&T.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:p,primary:S}=h;if(!S){for(let X of p)if(X.is_hash_attribute||X.isPrimaryKey){S=X;break}if(!S){Ts.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let T=l[E],b={},R=[],L,H,P=typeof S.audit=="boolean"?S.audit:(0,er.get)(jr.CONFIG_PARAMS.LOGGING_AUDITLOG),k=S.trackDeletes,B=S.expiration,J=S.eviction,z=S.sealed;if(T)b=T.indices,R=T.attributes,T.schemaVersion++;else{L=S.tableId,L?L>=(u.get(ja)||0)&&u.putSync(ja,L+1):(S.tableId=L=u.get(ja),L||(L=1),u.putSync(ja,L+1),u.putSync(S.key,S));let X=new vo.default(!S.is_hash_attribute,S.is_hash_attribute);H=a_(o.openDB(S.key,X)),H.rootStore=o,H.tableId=L}for(let X of p){X.attribute=X.name;try{if(!X.is_hash_attribute&&(X.indexed||X.attribute&&!X.name)){if(!b[X.name]){let ce=new vo.default(!X.is_hash_attribute,X.is_hash_attribute);b[X.name]=o.openDB(X.key,ce),b[X.name].indexNulls=X.indexNulls}let Te=R.find(ce=>ce.name===X.name);Te?R.splice(R.indexOf(Te),1,X):R.push(X)}}catch(Te){Ts.error("Error trying to update attribute",X,R,b,Te)}}if(!T){T=sq(l,E,XE({primaryStore:H,auditStore:_,audit:P,sealed:z,expirationMS:B&&B*1e3,evictionMS:J&&J*1e3,trackDeletes:k,tableName:E,tableId:L,primaryKey:S.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:b,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),T.schemaVersion=1;for(let X of BA)X(T)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function rq(e){let t=rt[e];if(t||(e==="data"?t=rt[e]=Ir:e==="system"?Object.defineProperty(rt,"system",{value:t=Object.create(null),configurable:!0}):t=rt[e]=Object.create(null)),ec&&!ec.has(e)){let r=new Set;t[sh]=r,ec.set(e,r)}return t}function sq(e,t,r){return e[t]=r,r}function Jc({database:e,table:t}){e||(e=vA),Ls();let r=rq(e),s=(0,et.join)((0,er.getHdbBasePath)(),jr.DATABASES_DIR_NAME),n=(0,er.get)(jr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(n.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&n[e]?.tables?.[t]?.path;s=i||n[e]?.path||process.env.STORAGE_PATH||(0,er.get)(jr.CONFIG_PARAMS.STORAGE_PATH)||((0,Xr.existsSync)(s)?s:(0,et.join)((0,er.getHdbBasePath)(),jr.LEGACY_DATABASES_DIR_NAME));let o=(0,et.join)(s,(i?t:e)+".mdb"),c=Li.get(o);if(!c){let u=new UA.default(o,!1);c=(0,ZE.open)(u),Li.set(o,c)}return c}async function sS(e){if(!rt[e])throw new Error("Schema does not exist");let t=rt[e];for(let r in t){let n=t[r].primaryStore.rootStore;Li.delete(n.path),n.status==="open"&&(await n.close(),await Zx.remove(n.path))}if(e==="data"){for(let r in Ir)delete Ir[r];delete Ir[sh]}delete rt[e]}function ct({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,sealed:c,trackDeletes:u,schemaDefined:_,origin:l}){t||(t=vA);let d=Jc({database:t,table:e}),f=rt[t],E=f?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,p,S,T;_==null&&(_=!0);let b=new vo.default(!1);for(let B of i)B.attribute?(B.name=B.attribute,B.indexed=!0):B.attribute=B.name,B.expiresAt&&(B.indexed=!0);let R,L;if(E){if(h=E.primaryKey,E.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);E.attributes.splice(0,E.attributes.length,...i)}else{let B=d.auditStore;B||(B=BE(d)),p=i.find(Te=>Te.isPrimaryKey)||{},h=p.name,p.is_hash_attribute=!0,p.schemaDefined=_,u&&(p.trackDeletes=!0),o=p.audit=typeof o=="boolean"?o:(0,er.get)(jr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(p.expiration=r),s&&(p.eviction=s),typeof c=="boolean"&&(p.sealed=c),l&&(p.origins?p.origins.includes(l)||p.origins.push(l):p.origins=[l]),Ts.trace(`${e} table loading, opening primary store`);let J=new vo.default(!1,!0),z=e+"/",X=a_(d.openDB(z,J));X.rootStore=d,T=d.dbisDb=d.openDB(jE.INTERNAL_DBIS_NAME,b),X.tableId=T.get(ja),X.tableId||(X.tableId=1),T.putSync(ja,X.tableId+1),p.tableId=X.tableId,E=sq(f,e,XE({primaryStore:X,auditStore:B,audit:o,sealed:c,trackDeletes:u,expirationMS:r&&r*1e3,evictionMS:s&&s*1e3,primaryKey:h,tableName:e,tableId:X.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:T})),E.schemaVersion=1,R=!0,k(),T.put(z,p)}S=E.indices,T=T||(d.dbisDb=d.openDB(jE.INTERNAL_DBIS_NAME,b)),E.dbisDB=T;let H=[];for(let{key:B,value:J}of T.getRange({start:!0})){let[z,X]=B.toString().split("/");if(X===""&&(X=J.name),X){if(z!==e)continue}else X=z;if(!i.find(ce=>ce.name===X)?.indexed&&J.indexed&&!J.isPrimaryKey){k(),R=!0,T.remove(B);let ce=E.indices[z];ce&&H.push(ce)}}let P=[];try{for(let B of i||[]){if(B.relationship)continue;let J=e+"/"+(B.name||"");Object.defineProperty(B,"key",{value:J,configurable:!0});let z=T.get(J);if(B.isPrimaryKey){if(z=z||T.get(J=e+"/")||{},o!==E.audit||c!==c||(+r||void 0)!==(+z.expiration||void 0)||(+s||void 0)!==(+z.eviction||void 0)){let Te=Object.assign({},z);typeof o=="boolean"&&(o&&E.enableAuditing(o),Te.audit=o),r&&(Te.expiration=+r),s&&(Te.eviction=+s),c!==void 0&&(Te.sealed=c),R=!0,k(),T.put(J,Te)}continue}z?.attribute&&!z.name&&(z.indexed=!0);let X=!z||z.type!==B.type||z.indexed!==B.indexed||z.nullable!==B.nullable||JSON.stringify(z.attributes)!==JSON.stringify(B.attributes)||JSON.stringify(z.elements)!==JSON.stringify(B.elements);if(B.indexed){let Te=new vo.default(!0,!1),ce=d.openDB(J,Te);(X||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Ml.workerData?.restartNumber)&&(R=!0,k(),z=T.get(J),(X||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Ml.workerData?.restartNumber)&&(R=!0,B.indexNulls===void 0&&(B.indexNulls=!0),E.primaryStore.getStats().entryCount>0&&(B.lastIndexedKey=z?.lastIndexedKey||!1,B.indexingPID=process.pid,ce.isIndexing=!0,Object.defineProperty(B,"dbi",{value:ce}),P.push(B))),T.put(J,B)),z?.indexNulls&&B.indexNulls===void 0&&(B.indexNulls=!0),ce.indexNulls=B.indexNulls,S[B.name]=ce}else X&&(R=!0,k(),T.put(J,B))}}finally{L&&L()}if(R&&(E.schemaVersion++,E.updatedAttributes()),Ts.trace(`${e} table loading, running index`),P.length>0||H.length>0?E.indexingOperation=Nie(E,P,H):R&&eh.signalSchemaChange(new th.SchemaEventMsg(process.pid,"schema-change",E.databaseName,E.tableName)),E.origin=l,R)for(let B of BA)B(E,l!=="cluster");return(r||s||n)&&E.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),Ts.trace(`${e} table loaded`),E;function k(){L||d.transactionSync(()=>({then(B){L=B}}))}a(k,"startTxn")}async function Nie(e,t,r){try{let s=e.schemaVersion;await eh.signalSchemaChange(new th.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,n=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,eq.getIndexedValues)(l[h]);if(p)for(let S=0,T=p.length;S<T;S++)E.dbi.put(p[S],_)}}),n.then(()=>u--,f=>{u--,Ts.error(f)}),Ml.workerData&&Ml.workerData.restartNumber!==tq.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>Oie?await n:u>bie&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,n=e.dbisDB.put(_.key,_)}await n,await eh.signalSchemaChange(new th.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Ts.error("Error in indexing",s)}}function yie({table:e,database:t}){let r=Jc({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function kR(e){BA.push(e)}var er,jE,ZE,et,Xr,Za,vo,UA,jr,Zx,PA,eq,eh,th,Ml,Ts,tq,vA,sh,Ir,rt,ja,BA,rh,Li,ec,Oie,bie,Ae=Re(()=>{er=x(ee()),jE=x(dt()),ZE=require("lmdb"),et=require("path"),Xr=require("fs"),Za=x(Je());eE();vo=x(c_()),UA=x(l_()),jr=x(M()),Zx=x(require("fs-extra")),PA=require("../index"),eq=x(wr()),eh=x(Rn()),th=x(Cs()),Ml=require("worker_threads"),Ts=x($()),tq=x(Ke());xi();bc();vA="data",sh=Symbol("defined-tables");(0,er.initSync)();Ir=Object.create(null),rt=Object.create(null);(0,PA._assignPackageExport)("databases",rt);(0,PA._assignPackageExport)("tables",Ir);ja=Symbol.for("next-table-id"),BA=[],Li=new Map;a(Rie,"getTables");a(Ls,"getDatabases");a(Aie,"resetDatabases");a(Ll,"readMetaDb");a(rq,"ensureDB");a(sq,"setTable");a(Jc,"database");a(sS,"dropDatabase");a(ct,"table");Oie=1e3,bie=10;a(Nie,"runIndexing");a(yie,"dropTableMeta");a(kR,"onUpdatedTable")});var Q=g((WSe,pq)=>{"use strict";var Mi=require("path"),cq=require("fs-extra"),br=$(),nq=require("fs-extra"),nh=require("os"),wie=require("net"),Iie=require("recursive-iterator"),at=M(),Cie=MO(),iq=require("papaparse"),ih=require("moment"),{inspect:Die}=require("util"),oq=require("is-number"),KSe=require("lodash"),Lie=require("minimist"),Mie=require("https"),Uie=require("http"),{hdb_errors:oh}=se(),Pie=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,uq=require("util").promisify(setTimeout),vie=100,Bie=5,Hie="",xie=4,aq={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};pq.exports={isEmpty:Zr,isEmptyOrZeroLength:fn,arrayHasEmptyValues:Fie,arrayHasEmptyOrZeroLengthValues:kie,buildFolderPath:Vie,isBoolean:lq,errorizeMessage:qie,stripFileExtension:Yie,autoCast:Kie,autoCastJSON:_q,autoCastJSONDeep:xA,removeDir:Wie,compareVersions:Qie,isCompatibleDataVersion:zie,escapeRawValue:Jie,unescapeValue:Xie,stringifyProps:jie,timeoutPromise:eoe,isClusterOperation:roe,getClusterUser:noe,checkGlobalSchemaTable:soe,getHomeDir:fq,getPropsFilePath:Zie,promisifyPapaParse:ioe,removeBOM:Eq,createEventPromise:ooe,checkProcessRunning:aoe,checkSchemaTableExist:coe,checkSchemaExists:hq,checkTableExists:mq,getStartOfTomorrowInSeconds:uoe,getLimitKey:loe,isObject:$ie,isNotEmptyAndHasValue:Gie,autoCasterIsNumberCheck:dq,backtickASTSchemaItems:_oe,isPortTaken:toe,createForkArgs:doe,autoCastBoolean:foe,async_set_timeout:uq,getTableHashAttribute:Eoe,doesSchemaExist:hoe,doesTableExist:moe,stringifyObj:poe,ms_to_time:Soe,changeExtension:Toe,getEnvCliRootPath:qA,noBootFile:goe,httpRequest:Roe,transformReq:Aoe,convertToMS:Ooe,PACKAGE_ROOT:at.PACKAGE_ROOT};function qie(e){return e instanceof Error?e:new Error(e)}a(qie,"errorizeMessage");function Zr(e){return e==null}a(Zr,"isEmpty");function Gie(e){return!Zr(e)&&(e||e===0||e===""||lq(e))}a(Gie,"isNotEmptyAndHasValue");function fn(e){return Zr(e)||e.length===0||e.size===0}a(fn,"isEmptyOrZeroLength");function Fie(e){if(Zr(e))return!0;for(let t=0;t<e.length;t++)if(Zr(e[t]))return!0;return!1}a(Fie,"arrayHasEmptyValues");function kie(e){if(fn(e))return!0;for(let t=0;t<e.length;t++)if(fn(e[t]))return!0;return!1}a(kie,"arrayHasEmptyOrZeroLengthValues");function Vie(...e){try{return e.join(Mi.sep)}catch{console.error(e)}}a(Vie,"buildFolderPath");function lq(e){return Zr(e)?!1:e===!0||e===!1}a(lq,"isBoolean");function $ie(e){return Zr(e)?!1:typeof e=="object"}a($ie,"isObject");function Yie(e){return fn(e)?Hie:e.slice(0,-xie)}a(Yie,"stripFileExtension");function Kie(e){return Zr(e)||e===""||typeof e!="string"?e:aq[e]!==void 0?aq[e]:dq(e)===!0?Number(e):Pie.test(e)?new Date(e):e}a(Kie,"autoCast");function _q(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(_q,"autoCastJSON");function xA(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=xA(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=xA(r);s!==r&&(e[t]=s)}return e}else return _q(e)}a(xA,"autoCastJSONDeep");function dq(e){if(e.startsWith("0.")&&oq(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&oq(e))}a(dq,"autoCasterIsNumberCheck");async function Wie(e){if(fn(e))throw new Error(`Directory path: ${e} does not exist`);try{await nq.emptyDir(e),await nq.remove(e)}catch(t){throw br.error(`Error removing files in ${e} -- ${t}`),t}}a(Wie,"removeDir");function Qie(e,t){if(fn(e)){br.info("Invalid current version sent as parameter.");return}if(fn(t)){br.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(Qie,"compareVersions");function zie(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(zie,"isCompatibleDataVersion");function Jie(e){if(Zr(e))return e;let t=String(e);return t==="."?at.UNICODE_PERIOD:t===".."?at.UNICODE_PERIOD+at.UNICODE_PERIOD:t.replace(at.FORWARD_SLASH_REGEX,at.UNICODE_FORWARD_SLASH)}a(Jie,"escapeRawValue");function Xie(e){if(Zr(e))return e;let t=String(e);return t===at.UNICODE_PERIOD?".":t===at.UNICODE_PERIOD+at.UNICODE_PERIOD?"..":String(e).replace(at.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Xie,"unescapeValue");function jie(e,t){if(Zr(e))return br.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+nh.EOL}!fn(s)&&s[0]===";"?r+=" "+s+n+nh.EOL:fn(s)||(r+=s+"="+n+nh.EOL)}catch{br.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(jie,"stringifyProps");function fq(){let e;try{e=nh.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(fq,"getHomeDir");function Zie(){let e=Mi.join(fq(),at.HDB_HOME_DIR_NAME,at.BOOT_PROPS_FILE_NAME);return cq.existsSync(e)||(e=Mi.join(__dirname,"../","hdb_boot_properties.file")),e}a(Zie,"getPropsFilePath");function eoe(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(eoe,"timeoutPromise");async function toe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=wie.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(toe,"isPortTaken");function roe(e){try{return at.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){br.error(`Error checking operation against cluster ops ${t}`)}return!1}a(roe,"isClusterOperation");function soe(e,t){let r=(Ae(),ne(Ge)).getDatabases();if(!r[e])return oh.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return oh.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(soe,"checkGlobalSchemaTable");function noe(e,t){if(Zr(t)){br.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Zr(e)||fn(e)){br.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){br.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){br.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(noe,"getClusterUser");function ioe(){iq.parsePromise=function(e,t,r){return new Promise(function(s,n){iq.parse(e,{header:!0,transformHeader:Eq,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(ioe,"promisifyPapaParse");function Eq(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Eq,"removeBOM");function ooe(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;br.info(`Got cluster status event response: ${Die(n)}`);try{i.cancel()}catch{br.error("Error trying to cancel timeout.")}s(n)})})}a(ooe,"createEventPromise");async function aoe(e){let t=!0,r=0;do await uq(vie*r++),(await Cie.findPs(e)).length>0&&(t=!1);while(t&&r<Bie);if(t)throw new Error(`process ${e} was not started`)}a(aoe,"checkProcessRunning");function coe(e,t){let r=hq(e);if(r)return r;let s=mq(e,t);if(s)return s}a(coe,"checkSchemaTableExist");function hq(e){let{getDatabases:t}=(Ae(),ne(Ge));if(!t()[e])return oh.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(hq,"checkSchemaExists");function mq(e,t){let{getDatabases:r}=(Ae(),ne(Ge));if(!r()[e][t])return oh.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(mq,"checkTableExists");function uoe(){let e=ih().utc().add(1,at.MOMENT_DAYS_TAG).startOf(at.MOMENT_DAYS_TAG).unix(),t=ih().utc().unix();return e-t}a(uoe,"getStartOfTomorrowInSeconds");function loe(){return ih().utc().format("DD-MM-YYYY")}a(loe,"getLimitKey");function _oe(e){try{let t=new Iie(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){br.error("Got an error back ticking items."),br.error(t)}}a(_oe,"backtickASTSchemaItems");function doe(e){return[e]}a(doe,"createForkArgs");function foe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(foe,"autoCastBoolean");function Eoe(e,t){let{getDatabases:r}=(Ae(),ne(Ge)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(Eoe,"getTableHashAttribute");function hoe(e){let{getDatabases:t}=(Ae(),ne(Ge));return t()[e]!==void 0}a(hoe,"doesSchemaExist");function moe(e,t){let{getDatabases:r}=(Ae(),ne(Ge));return r()[e]?.[t]!==void 0}a(moe,"doesTableExist");function poe(e){try{return JSON.stringify(e)}catch{return e}}a(poe,"stringifyObj");function Soe(e){let t=ih.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(Soe,"ms_to_time");function Toe(e,t){let r=Mi.basename(e,Mi.extname(e));return Mi.join(Mi.dirname(e),r+t)}a(Toe,"changeExtension");function qA(){if(process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Lie(process.argv);if(e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(qA,"getEnvCliRootPath");var HA;function goe(){if(HA)return HA;let e=qA();qA()&&cq.pathExistsSync(Mi.join(e,at.HDB_CONFIG_FILE))&&(HA=!0)}a(goe,"noBootFile");function Roe(e,t){let r;return e.protocol==="http:"?r=Uie:r=Mie,new Promise((s,n)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{s(c)})});i.on("error",o=>{n(o)}),i.write(JSON.stringify(t)),i.end()})}a(Roe,"httpRequest");function Aoe(e){if(!e.schema&&!e.database){e.schema=at.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Aoe,"transformReq");function Ooe(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}a(Ooe,"convertToMS")});var ee=g((zSe,Rq)=>{"use strict";var GA=require("fs-extra"),Bo=require("path"),Sq=require("os"),boe=require("properties-reader"),Pl=$(),Ul=Q(),ue=M(),ah=Pr(),Noe="Error initializing environment manager",ch="BOOT_PROPS_FILE_PATH",Tq=!1,yoe={[ue.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Vn={};Rq.exports={BOOT_PROPS_FILE_PATH:ch,getHdbBasePath:woe,setHdbBasePath:Ioe,get:gq,initSync:Doe,setProperty:Ue,initTestEnvironment:Loe};function woe(){return Vn[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(woe,"getHdbBasePath");function Ioe(e){Vn[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Ioe,"setHdbBasePath");function gq(e){let t=ah.getConfigValue(e);return t===void 0?Vn[e]:t}a(gq,"get");function Ue(e,t){yoe[e]&&(Vn[e]=t),ah.updateConfigObject(e,t)}a(Ue,"setProperty");function Coe(){let e;try{e=Ul.getPropsFilePath(),GA.accessSync(e,GA.constants.F_OK|GA.constants.R_OK),Tq=!0;let t=boe(e);return Vn[ue.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ue.HDB_SETTINGS_NAMES.INSTALL_USER),Vn[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Vn[ch]=e,!0}catch{return Pl.trace(`Environment manager found no properties file at ${e}`),!1}}a(Coe,"doesPropFileExist");function Doe(e=!1){try{(Tq||Coe()||Ul.noBootFile())&&(ah.initConfig(e),Vn[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=ah.getConfigValue(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Pl.error(Noe),Pl.error(t),console.error(t),process.exit(1)}}a(Doe,"initSync");function Loe(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Bo.join(__dirname,"../../","unitTests");Vn[ch]=Bo.join(u,"hdb_boot_properties.file"),Ue(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Bo.join(u,"settings.test")),Ue(ue.HDB_SETTINGS_NAMES.INSTALL_USER,Sq.userInfo()?Sq.userInfo().username:void 0),Ue(ue.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ue(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Bo.join(u,"envDir","log")),Ue(ue.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ue(ue.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ue(ue.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ue(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Bo.join(u,"envDir")),Ue(ue.CONFIG_PARAMS.STORAGE_PATH,Bo.join(u,"envDir")),n&&(Ue(ue.CONFIG_PARAMS.HTTP_SECUREPORT,gq(ue.CONFIG_PARAMS.HTTP_PORT)),Ue(ue.CONFIG_PARAMS.HTTP_PORT,null)),Ue(ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!n),Ue(ue.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ue(ue.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Ul.isEmpty(i)?!1:i),Ue(ue.CONFIG_PARAMS.HTTP_CORS,Ul.isEmpty(i)?!1:i),Ue(ue.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ue(ue.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ue(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ue(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ue(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Bo.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ue(ue.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Ul.isEmpty(c)?!1:c),o&&(Ue("CORS_ACCESSLIST",o),Ue(ue.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),s&&(Ue(ue.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),Ue(ue.CONFIG_PARAMS.HTTP_TIMEOUT,s)),t&&(Ue(ue.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ue(ue.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ue(ue.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ue(ue.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${ch}. Please check your boot props and settings files`;Pl.fatal(r),Pl.error(t)}}a(Loe,"initTestEnvironment")});var yq=g((XSe,Nq)=>{"use strict";var bq=require("joi"),{string:vl,boolean:Aq,array:Moe}=bq.types(),Oq=M(),Uoe=Xe();Nq.exports=Poe;function Poe(e){let t=bq.object({operation:vl.valid(Oq.OPERATIONS_ENUM.ADD_NODE,Oq.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:vl.required(),subscriptions:Moe.items({schema:vl.required(),table:vl.optional(),hash_attribute:vl.optional(),subscribe:Aq.required(),publish:Aq.required()}).min(1).required()});return Uoe.validateBySchema(e,t)}a(Poe,"updateRemoteSourceValidator")});var Bl=g((ZSe,wq)=>{"use strict";var FA=class{static{a(this,"UpdateRemoteResponseObject")}constructor(t,r,s=void 0){this.status=t,this.message=r,this.system_info=s}};wq.exports=FA});var Mq=g((tTe,Lq)=>{"use strict";var voe=yq(),$n=$(),kA=Fe(),Iq=M(),VA=os(),Ui=st(),Cq=fu(),Boe=Z_(),{Node:Hoe,NodeSubscription:Dq}=Ei(),$A=Bl(),YA=Q(),xoe=ee(),{cloneDeep:qoe}=require("lodash"),{broadcast:Goe}=Ke();Lq.exports=Foe;async function Foe(e){try{let t=voe(e);if(t)return $n.error(`Validation error in updateRemoteSource: ${t.message}`),new $A(kA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:s,system_info:n}=e,i=[],o=qoe(await VA.getNodeRecord(s)),c=!YA.isEmptyOrZeroLength(o);o=c?o[0]:o,c&&$n.trace(`Existing record found for ${s}, updating records subscriptions`);for(let _=0,l=r.length;_<l;_++){let d=r[_],f=d.schema,E=d.table;if(!YA.doesSchemaExist(f)){$n.trace(`updateRemoteSource creating schema: ${f}`);try{await Cq.createSchema({operation:"create_schema",schema:f})}catch(h){$n.error(h)}}if(E&&!YA.doesTableExist(f,E)){let h=new Boe(f,E,d.hash_attribute);d.attributes&&(h.attributes=d.attributes),$n.trace(`updateRemoteSource creating table: ${E} in schema: ${f} with attributes: ${JSON.stringify(d.attributes)}`);try{await Cq.createTable(h)}catch(p){$n.error(p)}$n.trace(`Creating local stream for ${f}.${E}`),await Ui.createLocalTableStream(f,E)}if(f===Iq.SYSTEM_SCHEMA_NAME&&await Ui.createLocalTableStream(f,E),c?(await Ui.updateConsumerIterator(f,E,s,"stop"),await Ui.updateRemoteConsumer(d,s),d.subscribe===!0&&await Ui.updateConsumerIterator(f,E,s,"start")):(await Ui.updateRemoteConsumer(d,s),d.subscribe===!0?await Ui.updateConsumerIterator(f,E,s,"start"):await Ui.updateConsumerIterator(f,E,s,"stop")),c){let h=!1;for(let p=0,S=o.subscriptions.length;p<S;p++){let T=o.subscriptions[p];if(T.schema===f&&T.table===E){T.publish=d.publish,T.subscribe=d.subscribe,h=!0;break}}h||o.subscriptions.push(new Dq(f,E,d.publish,d.subscribe))}else i.push(new Dq(f,E,d.publish,d.subscribe))}c||(o=new Hoe(s,i,void 0),$n.trace(`No record found for ${s}, creating a new one`));let u=Object.create({});return Object.assign(u,o),u.system_info=n,await VA.upsertNodeRecord(u),Goe({type:"nats_update"}),new $A(kA.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${xoe.get(Iq.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await VA.getSystemInfo())}catch(t){$n.error(t);let r=t.message?t.message:t;return new $A(kA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(Foe,"updateRemoteSource")});var Bq=g((sTe,vq)=>{"use strict";var Pq=require("joi"),{string:Uq}=Pq.types(),koe=M(),Voe=Xe();vq.exports=$oe;function $oe(e){let t=Pq.object({operation:Uq.valid(koe.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:Uq.required()});return Voe.validateBySchema(e,t)}a($oe,"removeRemoteSourceValidator")});var qq=g((iTe,xq)=>{"use strict";var Yoe=Bq(),uh=$(),lh=Fe(),KA=M(),Koe=os(),Woe=Q(),Hq=st(),Qoe=ee(),_h=Bl(),{NodeSubscription:zoe}=Ei(),Joe=sa(),Xoe=si(),{broadcast:joe}=Ke(),Zoe=Qoe.get(KA.CONFIG_PARAMS.CLUSTERING_NODENAME);xq.exports=eae;async function eae(e){try{let t=Yoe(e);if(t)return uh.error(`Validation error in removeRemoteSource: ${t.message}`),new _h(lh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,s=await Koe.getNodeRecord(r);if(Woe.isEmptyOrZeroLength(s)){let i=`No record found for node '${r}'`;return uh.error(i),new _h(lh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}s=s[0];for(let i=0,o=s.subscriptions.length;i<o;i++){let c=s.subscriptions[i];uh.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let u=new zoe(c.schema,c.table,!1,!1);await Hq.updateConsumerIterator(c.schema,c.table,r,"stop"),await Hq.updateRemoteConsumer(u,r)}let n=new Joe(KA.SYSTEM_SCHEMA_NAME,KA.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Xoe.deleteRecord(n),joe({type:"nats_update"}),new _h(lh.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${Zoe} successfully removed node '${r}'.`)}catch(t){uh.error(t);let r=t.message?t.message:t;return new _h(lh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(eae,"removeRemoteSource")});var Vq=g((aTe,kq)=>{"use strict";var dh=$(),Hl=M(),Gq=Fe(),WA=ee(),tae=Q(),Fq=Bl(),rae=os(),sae=Dd(),nae=Lr();kq.exports=iae;async function iae(e){try{dh.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=tae.ms_to_time(t),s=new oae(WA.get(Hl.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),WA.get(Hl.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT)??WA.get(Hl.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT),r,await rae.getSystemInfo());try{let n={name:e.node_name,system_info:e.system_info},i=new sae(Hl.SYSTEM_SCHEMA_NAME,Hl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[n]);await nae.update(i)}catch(n){dh.error("Get remote config encountered an error updating system info for node:",e.node_name,n)}return dh.trace("getRemoteSourceConfig response:",s),new Fq(Gq.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,s)}catch(t){dh.error(t);let r=t.message?t.message:t;return new Fq(Gq.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(iae,"getRemoteSourceConfig");function oae(e,t,r,s){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=s}a(oae,"ConfigResponseObject")});var Wq=g((uTe,Kq)=>{"use strict";var $q=ee();$q.initSync();var Yq=st(),xl=$(),tc=M(),QA=Fe(),aae=Mq(),cae=qq(),uae=Vq(),lae=Bl(),{encode:_ae,decode:dae}=require("msgpackr"),fae=gn(),Eae=ei(),hae=require("util"),mae=M(),{isMainThread:pae,parentPort:Sae}=require("worker_threads");Ke();var Tae=hae.promisify(fae.setSchemaDataToGlobal),zA=$q.get(tc.CONFIG_PARAMS.CLUSTERING_NODENAME);Kq.exports=gae;async function gae(){try{xl.notify("Starting reply service."),await Tae();let e=await Yq.getConnection(),t=`${zA}.__request__`,r=e.subscribe(t,{queue:zA});await Rae(r)}catch(e){xl.error(e)}}a(gae,"initialize");async function Rae(e){for await(let t of e){let r=dae(t.data),s;switch(r.operation){case tc.OPERATIONS_ENUM.ADD_NODE:case tc.OPERATIONS_ENUM.UPDATE_NODE:s=await aae(r);break;case tc.OPERATIONS_ENUM.REMOVE_NODE:s=await cae(r);break;case tc.OPERATIONS_ENUM.CLUSTER_STATUS:s=await uae(r);break;case tc.OPERATIONS_ENUM.DESCRIBE_ALL:s=await Aae();break;default:let n=`node '${zA}' reply service received unrecognized request operation`;xl.error(n),s=new lae(QA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,n)}xl.trace(s),t.respond(_ae(s))}}a(Rae,"handleRequest");async function Aae(){try{return{status:QA.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await Eae.describeAll()}}catch(e){return xl.error(e),{status:QA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}a(Aae,"getRemoteDescribeAll");pae||Sae.on("message",async e=>{let{type:t}=e;t===mae.ITC_EVENT_TYPES.SHUTDOWN&&Yq.closeConnection()})});var Oae=Wq();(async()=>{try{await Oae()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();