harperdb 4.4.26 → 4.4.27

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.
@@ -8,7 +8,7 @@ Caused by:`));else if(typeof u=="object")try{n+=JSON.stringify(u)}catch{n+="Obje
8
8
  `).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.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,n])=>({pid:Number.parseInt(r,10),name:A2.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}a(N2,"findPs")});var Ht=O((tAe,GC)=>{"use strict";var I2="__dbis__",w2="__txns__",C2="__environment_name__",P2="__dbi_defintion__",D2={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"},L2=["__createdtime__","__updatedtime__"],M2="\uFFFF",FC={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},U2=Object.values(FC);GC.exports={AUDIT_STORE_NAME:w2,INTERNAL_DBIS_NAME:I2,DBI_DEFINITION_NAME:P2,SEARCH_TYPES:D2,TIMESTAMP_NAMES:L2,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:C2,TRANSACTIONS_DBI_NAMES_ENUM:FC,TRANSACTIONS_DBIS:U2,OVERFLOW_MARKER:M2}});var Pn=O((rAe,QC)=>{"use strict";var qC=L(),$C=Ht(),VC={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},KC=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),YC={500:KC("There was an error processing your request."),400:"Invalid request"},v2=YC[VC.INTERNAL_SERVER_ERROR],B2={OP_NOT_SUPPORTED_FOR_FS:a(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:a(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:a(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:a(e=>`${e} not found.`,"NOT_FOUND")},H2={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},x2={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:a(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),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:a(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:a(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:a((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:a(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},k2={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 ${$C.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${$C.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"},F2={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${qC.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,"ATTR_NAME_LENGTH_ERR"),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 ${qC.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"},WC={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"},G2={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:a(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:a(e=>`Operation '${e}' not found`,"OP_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:a((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:a(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},q2={ATTR_PERM_MISSING:a((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:a((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_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:a(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:a(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:a(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:a(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:a(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),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:a(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:a(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:a((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:a(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:a(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:a(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:a(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:a(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},$2={ATTR_NOT_FOUND:a((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:a((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:a(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:a(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:a(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:a((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:a((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},V2={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},K2={ALTER_USER_DUP_ROLES:a(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:a(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:a(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:a(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:a(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:a(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},jC={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:a(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},zC={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:a(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},Y2={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.",BAD_SSH_KEY_NAME:"SSH key name can only contain alphanumeric, dash and underscore characters"},W2={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},j2={...WC,...x2,...B2,...G2,...q2,...$2,...V2,...K2,...F2,...jC,...zC,...Y2,...W2,...H2};QC.exports={CHECK_LOGS_WRAPPER:KC,HDB_ERROR_MSGS:j2,DEFAULT_ERROR_MSGS:YC,DEFAULT_ERROR_RESP:v2,HTTP_STATUS_CODES:VC,LMDB_ERRORS_ENUM:k2,AUTHENTICATION_ERROR_MSGS:WC,VALIDATION_ERROR_MSGS:jC,ITC_ERRORS:zC}});var _e=O((sAe,ZC)=>{"use strict";var Dl=Pn(),z2=K(),Q2=L(),fh=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,JC),this.statusCode=n||Dl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Dl.DEFAULT_ERROR_MSGS[n]?Dl.DEFAULT_ERROR_MSGS[n]:Dl.DEFAULT_ERROR_MSGS[Dl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,s&&(this.logLevel=s),typeof this.message!="string"&&(this.stack=t.stack),i&&z2[s](i)}},Og=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}},Ng=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function JC(e,t,r,n=Q2.LOG_LEVELS.ERROR,s=null,i=!1){if(XC(e))return e;let o=new fh(e,t,r,n,s);return i&&delete o.stack,o}a(JC,"handleHDBError");function XC(e){return e.__proto__.constructor.name===fh.name}a(XC,"isHDBError");ZC.exports={isHDBError:XC,handleHDBError:JC,ClientError:Og,ServerError:Ng,hdb_errors:Dl}});var Rt=O((oAe,oP)=>{"use strict";var jd=L(),J2=te(),sn=ne(),zd=require("path"),X2=require("minimist"),eP=require("fs-extra"),tP=require("lodash");sn.initSync();var{CONFIG_PARAMS:Vo,DATABASES_PARAM_CONFIG:Vd,SYSTEM_SCHEMA_NAME:Eh}=jd,Kd,Yd,Wd;function rP(){if(Kd!==void 0)return Kd;if(sn.getHdbBasePath()!==void 0)return Kd=sn.get(Vo.STORAGE_PATH)||zd.join(sn.getHdbBasePath(),jd.DATABASES_DIR_NAME),Kd}a(rP,"getBaseSchemaPath");function nP(){if(Yd!==void 0)return Yd;if(sn.getHdbBasePath()!==void 0)return Yd=iP(Eh),Yd}a(nP,"getSystemSchemaPath");function sP(){if(Wd!==void 0)return Wd;if(sn.getHdbBasePath()!==void 0)return Wd=sn.get(jd.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||zd.join(sn.getHdbBasePath(),jd.TRANSACTIONS_DIR_NAME),Wd}a(sP,"getTransactionAuditStoreBasePath");function Z2(e,t){let r=sn.get(Vo.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||zd.join(sP(),e.toString())}a(Z2,"getTransactionAuditStorePath");function iP(e,t){e=e.toString(),t=t&&t.toString();let r=sn.get(jd.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||zd.join(rP(),e)}a(iP,"getSchemaPath");function e4(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,X2(process.argv));let n=r[Vo.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!J2.isObject(n))throw o;i=n}for(let o of i){let c=o[Eh];if(!c)continue;let l=sn.get(Vo.DATABASES);l=l??{};let u=c?.tables?.[t]?.[Vd.PATH];if(u)return tP.set(l,[Eh,Vd.TABLES,t,Vd.PATH],u),sn.setProperty(Vo.DATABASES,l),u;let d=c?.[Vd.PATH];if(d)return tP.set(l,[Eh,Vd.PATH],d),sn.setProperty(Vo.DATABASES,l),d}}let s=r[Vo.STORAGE_PATH.toUpperCase()];if(s){if(!eP.pathExistsSync(s))throw new Error(s+" does not exist");let i=zd.join(s,e);return eP.mkdirsSync(i),sn.setProperty(Vo.STORAGE_PATH,s),i}return nP()}a(e4,"initSystemSchemaPaths");function t4(){Kd=void 0,Yd=void 0,Wd=void 0}a(t4,"resetPaths");oP.exports={getBaseSchemaPath:rP,getSystemSchemaPath:nP,getTransactionAuditStorePath:Z2,getTransactionAuditStoreBasePath:sP,getSchemaPath:iP,initSystemSchemaPaths:e4,resetPaths:t4}});var on=O((uAe,dP)=>{"use strict";var r4=Pn().LMDB_ERRORS_ENUM,cAe=require("lmdb"),n4=Ht(),lAe=require("buffer").Buffer,{OVERFLOW_MARKER:aP,MAX_SEARCH_KEY_LENGTH:hh}=n4,cP=["number","string","symbol","boolean","bigint"];function s4(e){if(e=e?.primaryStore||e,!e)throw new Error(r4.ENV_REQUIRED)}a(s4,"validateEnv");function i4(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(i4,"stringifyData");function o4(e){return e instanceof Date?e.valueOf():e}a(o4,"convertKeyValueToWrite");function a4(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(cP.includes(typeof e))return e.length>hh?[e.slice(0,hh)+aP]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(cP.includes(typeof i))i.length>hh?r.push(i.slice(0,hh)+aP):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(a4,"getIndexedValues");var ph=0,lP=0;function uP(){lP=Date.now()-performance.now()}a(uP,"adjustStartTime");uP();var c4=6e4;setInterval(uP,c4).unref();function l4(){let e=performance.now()+lP;return e>ph?(ph=e,e):(ph+=488e-6,ph)}a(l4,"getNextMonotonicTime");dP.exports={validateEnv:s4,stringifyData:i4,convertKeyValueToWrite:o4,getNextMonotonicTime:l4,getIndexedValues:a4}});var Qd=O((_Ae,_P)=>{"use strict";var u4=L().OPERATIONS_ENUM,Ig=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=u4.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};_P.exports=Ig});var Jd=O((hAe,pP)=>{"use strict";var EAe=Qd(),mh=L(),wg=te(),fP=K(),d4=require("uuid"),{handleHDBError:Sh,hdb_errors:_4}=_e(),{HDB_ERROR_MSGS:Th,HTTP_STATUS_CODES:gh}=_4;pP.exports=EP;function EP(e,t,r){for(let s=0;s<t.length;s++)hP(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];f4(i,r,e.operation)}}a(EP,"processRows");EP.validateAttribute=hP;function hP(e){if(Buffer.byteLength(String(e))>mh.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Sh(new Error,Th.ATTR_NAME_LENGTH_ERR(e),gh.BAD_REQUEST,void 0,void 0,!0);if(wg.isEmptyOrZeroLength(e)||wg.isEmpty(e.trim()))throw Sh(new Error,Th.ATTR_NAME_NULLISH_ERR,gh.BAD_REQUEST,void 0,void 0,!0)}a(hP,"validateAttribute");function f4(e,t,r){if(!e.hasOwnProperty(t)||wg.isEmptyOrZeroLength(e[t])){if(r===mh.OPERATIONS_ENUM.INSERT||r===mh.OPERATIONS_ENUM.UPSERT){e[t]=d4.v4();return}throw fP.error("Update transaction aborted due to record with no hash value:",e),Sh(new Error,Th.RECORD_MISSING_HASH_ERR,gh.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>mh.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw fP.error(e),Sh(new Error,Th.HASH_VAL_LENGTH_ERR,gh.BAD_REQUEST,void 0,void 0,!0)}a(f4,"validateHash")});var mP,Dn,Cg,Ll=Ie(()=>{mP=require("events"),Dn=class extends mP.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new Cg;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(){let t=this.queue?.shift();return t||this.emit("drained"),t}waitForDrain(){return new Promise(t=>{!this.queue||this.queue.length===0?t(!0):(this.once("drained",()=>t(!0)),this.currentDrainResolver=t,this.drainCloseListener||(this.drainCloseListener=!0,this.on("close",()=>{this.currentDrainResolver?.(!1)})))})}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)}},Cg=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 Ja={};je(Ja,{server:()=>it});var SP,it,qr=Ie(()=>{SP=M(Ei()),it={};(0,SP._assignPackageExport)("server",it)});var Lg={};je(Lg,{loadGQLSchema:()=>p4,start:()=>Dg,startOnMainThread:()=>h4});function Dg({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),_=o(new c(r.toString(),s)),E=new Map,f=[],h;for(let g of _.definitions)switch(g.kind){case l.OBJECT_TYPE_DEFINITION:let H=function(W){if(W.kind==="NonNullType"){let Q=H(W.type);return Q.nullable=!1,Q}if(W.kind==="ListType")return{type:"array",elements:H(W.type)};let se={type:W.name?.value};return Object.defineProperty(se,"location",{value:W.loc.startToken}),se};a(H,"getProperty");let S=g.name.value,y=[],I={table:null,database:null,properties:y};E.set(S,I);for(let W of g.directives){if(W.name.value==="table"){for(let se of W.arguments)I[se.name.value]=se.value.value;I.schema&&(I.database=I.schema),I.table||(I.table=S),I.audit&&(I.audit=I.audit!=="false"),I.attributes=I.properties,f.push(I)}if(W.name.value==="sealed"&&(I.sealed=!0),W.name.value==="splitSegments"&&(I.splitSegments=!0),W.name.value==="replicate"&&(I.replicate=!0),W.name.value==="export"){I.export=!0;for(let se of W.arguments)typeof I.export!="object"&&(I.export={}),I.export[se.name.value]=se.value.value}}let U=!1,X={};for(let W of g.fields){let V=H(W.type);V.name=W.name.value,y.push(V),X[V.name]=void 0;for(let se of W.directives){let Q=se.name.value;if(Q==="primaryKey")U?console.warn("Can not define two attributes as a primary key at",se.loc):(V.isPrimaryKey=!0,U=!0);else if(Q==="indexed")V.indexed=!0;else if(Q==="computed"){for(let de of se.arguments||[])if(de.name.value==="from"){let j=de.value.value;V.computed={from:m(j,de,X)},V.version==null&&(V.version=j)}else de.name.value==="version"&&(V.version=de.value.value);V.computed=V.computed||!0}else if(Q==="relationship"){let de={};for(let j of se.arguments)de[j.name.value]=j.value.value;V.relationship=de}else if(Q==="createdTime")V.assignCreatedTime=!0;else if(Q==="updatedTime")V.assignUpdatedTime=!0;else if(Q==="expiresAt")V.expiresAt=!0;else if(Q==="allow"){let de=V.authorizedRoles=[];for(let j of se.arguments)j.name.value==="role"&&de.push(j.value.value)}else server.knownGraphQLDirectives.includes(Q)&&console.warn(`@${Q} is an unknown directive, at`,se.loc)}}I.type=S,S==="Query"&&(h=I)}function T(g){let S=E.get(g.type);S?(Object.defineProperty(g,"properties",{value:S.properties}),Object.defineProperty(g,"definition",{value:S})):g.type==="array"?T(g.elements):E4.includes(g.type)||(0,gP.getWorkerIndex)()===0&&console.error(`The type ${g.type} is unknown at line ${g.location.line}, column ${g.location.column}, in ${s}`)}a(T,"connectPropertyType");for(let g of E.values())for(let S of g.properties)T(S);for(let g of f)g.tableClass=e(g),g.export&&(g.export.name===""?i.set((0,Pg.dirname)(n),g.tableClass):i.set((0,Pg.dirname)(n)+"/"+(g.export.name||g.type),g.tableClass,g.export));function m(g,S,y){return new TP.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${g}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(y)}a(m,"createComputedFrom")}}var Pg,TP,gP,E4,h4,p4,RP=Ie(()=>{Pg=require("path"),TP=require("node:vm");Pe();gP=M(ot()),E4=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);a(Dg,"start");h4=Dg,p4=Dg({ensureTable:pt}).handleFile});var wP={};je(wP,{parse:()=>Ug,streamAsJSON:()=>Xd,stringify:()=>Xa});function Xd(e){return new Mg({value:e})}function AP(e){return console.error(e),JSON.stringify(e.toString())}function yP(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Xa(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===NP)return IP(e);if(t.resolution)return t.resolution.then(()=>Xa(e));throw t}}function IP(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 n=0;n<e.length;n++)n>0&&(r+=","),r+=IP(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Xa(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function Ug(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),T4.test(e)?m4.parse(e):JSON.parse(e)):null}var bP,OP,m4,S4,NP,Mg,T4,vg=Ie(()=>{bP=require("stream"),OP=M(require("json-bigint-fixes")),m4=(0,OP.default)({useNativeBigInt:!0}),S4=1e4,NP={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw NP};a(Xd,"streamAsJSON");Mg=class extends bP.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],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;){try{o=i.next(),o.then&&(yield o.then(c=>(o=c,""),c=>(o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")}}if(o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),AP)}catch(s){yield AP(s)}else yield Xa(t)}else yield Xa(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);yP(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>S4?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 yP(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))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 n of this.activeIterators)t?n.throw(t):n.return();r()}};a(AP,"handleError");a(yP,"when");a(Xa,"stringify");a(IP,"jsStringify");T4=/[[,:]\s*-?\d{16,}/;a(Ug,"parse")});var GP=O((yAe,FP)=>{"use strict";var Bg=require("recursive-iterator"),g4=require("alasql"),Hg=require("clone"),CP=te(),{handleHDBError:PP,hdb_errors:R4}=_e(),{HDB_ERROR_MSGS:DP,HTTP_STATUS_CODES:LP}=R4,{getDatabases:A4}=(Pe(),oe(ut)),y4=["DISTINCT_ARRAY"],MP=Symbol("validateTables"),xg=Symbol("validateTable"),AAe=Symbol("getAllColumns"),UP=Symbol("validateAllColumns"),Rh=Symbol("findColumn"),vP=Symbol("validateOrderBy"),Zd=Symbol("validateSegment"),kg=Symbol("validateColumn"),BP=Symbol("setColumnsForTable"),HP=Symbol("checkColumnsForAsterisk"),xP=Symbol("validateGroupBy"),kP=Symbol("hasColumns"),Fg=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[MP](),this[HP](),this[UP]()}[MP](){if(this[kP]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[xg](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[xg](t.table)})}}[kP](){let t=!1,r=new Bg(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[xg](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=A4();if(!r[t.databaseid])throw PP(new Error,DP.SCHEMA_NOT_FOUND(t.databaseid),LP.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw PP(new Error,DP.TABLE_NOT_FOUND(t.databaseid,t.tableid),LP.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Hg(s);i.table=Hg(t),this.attributes.push(i)})}[Rh](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)}[HP](){let t=new Bg(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[BP](r.tableid)}[BP](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new g4.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[UP](){this[Zd](this.statement.columns,!1),this[Zd](this.statement.joins,!1),this[Zd](this.statement.where,!1),this[xP](this.statement.group,!1),this[Zd](this.statement.order,!0)}[Zd](t,r){if(!t)return;let n=new Bg(t),s=[];for(let{node:i,path:o}of n)!CP.isEmpty(i)&&!CP.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[vP](i):s.push(this[kg](i)));return s}[xP](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&y4.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Hg(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Rh](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[Rh](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.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`}[vP](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[kg](t)}[kg](t){let r=this[Rh](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};FP.exports=Fg});var $P=O((OAe,qP)=>{"use strict";var Gg=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")}};qP.exports=Gg});var KP=O((IAe,VP)=>{"use strict";var qg=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};VP.exports=qg});var zP={};je(zP,{HAS_EXPIRATION:()=>bh,HAS_RESIDENCY_ID:()=>Qg,HAS_STRUCTURE_UPDATE:()=>Oh,LAST_TIMESTAMP_PLACEHOLDER:()=>n_,LOCAL_TIMESTAMP:()=>b4,METADATA:()=>e_,NO_TIMESTAMP:()=>Vg,PENDING_LOCAL_TIME:()=>Jg,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>zg,RecordEncoder:()=>jg,TIMESTAMP_ASSIGN_LAST:()=>N4,TIMESTAMP_ASSIGN_NEW:()=>WP,TIMESTAMP_ASSIGN_PREVIOUS:()=>jP,TIMESTAMP_PLACEHOLDER:()=>Ah,TIMESTAMP_RECORD_PREVIOUS:()=>Kg,getUpdateRecord:()=>Xg,handleLocalTimeForGets:()=>Nh});function w4(){return r_[0]=r_[0]^64,O4.getFloat64(0)}function Nh(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),l=c?.value,u=l?.[e_];return u>=0&&(c.metadataFlags=u,c.localTime=l.localTime,c.value=l.value,c.residencyId=l.residencyId,l.expiresAt>=0&&(c.expiresAt=l.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[e_]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let l=c.value,u=l[e_];return u>=0&&(c.metadataFlags=u,c.localTime=l.localTime,c.value=l.value,c.residencyId=l.residencyId,l.expiresAt>=0&&(c.expiresAt=l.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Za.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<Za.length;l++){let u=Za[l].deref();(!u||u.isDone||u.isCommitted)&&Za.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function Xg(e,t,r){return function(n,s,i,o,c=-1,l,u,d="put",_,E){_||l==null?Ml=i?.localTime?Kg|jP:Vg:Ml=l?i?.localTime?Kg|16384:WP|16384:Vg;let f=u?.expiresAt;if(f>=0&&(c|=bh),t_=c,Yg=f,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Ml>0},T,m=0;try{let g=i?.residencyId,S=u?.residencyId;S&&(Wg=S,t_|=Qg,m|=ec),g!==S&&(m|=tc,g||(g=0)),c&bh&&(m|=i_),u?.originatingOperation&&(m|=s_),_&&(h.ifVersion=T=i?.version??null);let y=e.put(n,s,h);if(l){let I=u?.user?.username;if(E&&(yh=e.encoder.encode(E)),e.encoder.hasStructureUpdate&&(m|=Oh,e.encoder.hasStructureUpdate=!1),_&&i?.localTime){let U=i?.localTime,H=r.get(U);if(H){let X=xt(H).previousLocalTime;return r.put(U,Ul(o,t,n,X,u?.nodeId??server.replication.getThisNodeId(r)??0,I,d,yh,m,S,g,f),{ifVersion:T}),y}}r.put(n_,Ul(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,I,d,yh,m,S,g,f,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:T})}return y}catch(g){throw g.message+=" id: "+n+" options: "+h,g}}}var YP,$g,Ah,n_,zg,b4,e_,r_,O4,Vg,WP,N4,jP,Kg,bh,Qg,Jg,Oh,I4,yh,Ml,t_,Yg,Wg,jg,Za,vl=Ie(()=>{YP=require("msgpackr");Qi();$g=M(K()),Ah=new Uint8Array([1,1,1,1,4,64,0,0]),n_=new Uint8Array([1,1,1,1,1,0,0,0]),zg=new Uint8Array([1,1,1,1,3,64,0,0]),b4=Symbol("local-timestamp"),e_=Symbol("metadata"),r_=new Uint8Array(8),O4=new DataView(r_.buffer,0,8),Vg=0,WP=0,N4=1,jP=3,Kg=4,bh=16,Qg=32,Jg=1,Oh=256,Ml=0,t_=-1,Yg=-1,Wg=0,jg=class extends YP.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(Ml||t_>=0){let o=0,c=Ml;c&&(o+=8,Ml=0);let l=t_,u=Yg,d=Wg;l>=0&&(o+=2,t_=-1,u>=0&&(o+=8,Yg=-1),d&&(o+=4,Wg=0));let _=I4=r.call(this,s,i|2048|o);yh=_.subarray((_.start||0)+o,_.end);let E=_.start||0;return c&&(Ah[4]=c,Ah[5]=c>>8,_.set(Ah,E),E+=8),l>=0&&(_[E++]=l&31,_[E++]=l>>5,u>=0&&((_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(E,u),E+=8),d&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setUint32(E,d)),_}else return r.call(this,s,i)};let n=this.saveStructures;this.saveStructures=function(s,i){let o=n.call(this,s,i);return this.hasStructureUpdate=!0,o}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(r_,0,c),c+=8;else for(let E=0;E<8;E++)r_[E]=t[c++];l=w4(),i=t[c]}let u,d;i<32&&(o=i|t[c+1]<<5,c+=2,o&bh&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&Qg&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let _=r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c);return{localTime:l,value:_,[e_]:o,expiresAt:u,residencyId:d}}return r?.valueAsBuffer?t:super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(w4,"getTimestamp");a(Nh,"handleLocalTimeForGets");Za=[];setInterval(()=>{for(let e=0;e<Za.length;e++){let t=Za[e].deref();!t||t.isDone||t.isCommitted?Za.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?($g.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):$g.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(Xg,"getUpdateRecord")});var o_=O((LAe,JP)=>{"use strict";var QP=ne(),C4=L(),{RecordEncoder:P4}=(vl(),oe(zP)),DAe=require("fs");QP.initSync();var D4=QP.get(C4.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Zg=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=D4&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:P4})}};JP.exports=Zg});var a_=O((UAe,XP)=>{"use strict";var Ln=ne(),cs=L();Ln.initSync();var Ih=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=Ln.get(cs.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Ln.get(cs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Ln.get(cs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Ln.get(cs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Ln.get(cs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Ln.get(cs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Ln.get(cs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Ln.get(cs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Ln.get(cs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Ln.get(cs.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Ln.get(cs.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Ln.get(cs.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};XP.exports=Ih;Ih.MAX_DBS=1e4});var mt=O((BAe,cD)=>{"use strict";var tR=require("lmdb"),Fs=require("fs-extra"),Mn=require("path"),wh=on(),tD=K(),an=Pn().LMDB_ERRORS_ENUM,Ch=KP(),rR=o_(),rD=a_(),Ko=Ht(),ZP=L(),{table:L4,resetDatabases:M4}=(Pe(),oe(ut)),eD=ne(),Gs=Ko.INTERNAL_DBIS_NAME,nD=Ko.DBI_DEFINITION_NAME,U4="data.mdb",v4="lock.mdb",c_=".mdb",B4="-lock",eR=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=ls(t,r),this.key_type=this.dbi[Ko.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ko.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new tR.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Ph(e,t){if(e===void 0)throw new Error(an.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(an.ENV_NAME_REQUIRED)}a(Ph,"pathEnvNameValidation");async function nR(e,t,r=!0){try{await Fs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(an.INVALID_BASE_PATH):n}try{let n=Mn.join(e,t+c_);return await Fs.access(n,Fs.constants.R_OK|Fs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Fs.access(Mn.join(e,t,U4),Fs.constants.R_OK|Fs.constants.F_OK),Mn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(an.INVALID_ENVIRONMENT)}else throw new Error(an.INVALID_ENVIRONMENT);throw n}}a(nR,"validateEnvironmentPath");function Dh(e,t){if(wh.validateEnv(e),t===void 0)throw new Error(an.DBI_NAME_REQUIRED)}a(Dh,"validateEnvDBIName");async function H4(e,t,r=!1,n=!1){Ph(e,t);let s=Mn.basename(e);t=t.toString();let i=eD.get(ZP.CONFIG_PARAMS.DATABASES);i||eD.setProperty(ZP.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await nR(e,t,n),sD(e,t,r)}catch(o){if(o.message===an.INVALID_ENVIRONMENT){let c=Mn.join(e,t);await Fs.mkdirp(n?c:e);let l=new rD(n?c:c+c_,!1),u=tR.open(l);u.dbis=Object.create(null);let d=new rR(!1);u.openDB(Gs,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let _=sR(e,t,r);return u[Ko.ENVIRONMENT_NAME_KEY]=_,global.lmdb_map[_]=u,u}throw o}}a(H4,"createEnvironment");async function x4(e,t,r,n=!0){Ph(e,t),t=t.toString();let s=Mn.join(e,t);return L4({table:t,database:Mn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(x4,"copyEnvironment");async function sD(e,t,r=!1){Ph(e,t),t=t.toString();let n=sR(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await nR(e,t),i=Mn.join(e,t+c_),o=s!=i,c=new rD(s,o),l=tR.open(c);l.dbis=Object.create(null);let u=oD(l);for(let d=0;d<u.length;d++)ls(l,u[d]);return l[Ko.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(sD,"openEnvironment");async function k4(e,t,r=!1){Ph(e,t),t=t.toString();let n=Mn.join(e,t+c_),s=await nR(e,t);if(global.lmdb_map!==void 0){let i=sR(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await iD(o),delete global.lmdb_map[i]}}await Fs.remove(s),await Fs.remove(s===n?s+B4:Mn.join(Mn.dirname(s),v4))}a(k4,"deleteEnvironment");async function iD(e){wh.validateEnv(e);let t=e[Ko.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(iD,"closeEnvironment");function sR(e,t,r=!1){let s=`${Mn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(sR,"getCachedEnvironmentName");function F4(e){wh.validateEnv(e);let t=Object.create(null),r=ls(e,Gs);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Gs)try{t[n]=Object.assign(new Ch,s)}catch{tD.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(F4,"listDBIDefinitions");function oD(e){wh.validateEnv(e);let t=[],r=ls(e,Gs);for(let{key:n}of r.getRange({start:!1}))n!==Gs&&t.push(n);return t}a(oD,"listDBIs");function G4(e,t){let n=ls(e,Gs).getEntry(t),s=new Ch;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{tD.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(G4,"getDBIDefinition");function aD(e,t,r,n=!r){if(Dh(e,t),t=t.toString(),t===Gs)throw new Error(an.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return ls(e,t)}catch(s){if(s.message===an.DBI_DOES_NOT_EXIST){let i=new rR(r,n===!0),o=e.openDB(t,i),c=new Ch(r===!0,n);return o[nD]=c,ls(e,Gs).putSync(t,c),e.dbis[t]=o,o}throw s}}a(aD,"createDBI");function ls(e,t){if(Dh(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Gs?r=G4(e,t):r=new Ch,r===void 0)throw new Error(an.DBI_DOES_NOT_EXIST);let n;try{let s=new rR(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(an.DBI_DOES_NOT_EXIST):s}return n[nD]=r,e.dbis[t]=n,n}a(ls,"openDBI");function q4(e,t){Dh(e,t),t=t.toString();let r=ls(e,t),n=r.getStats();return r[Ko.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(q4,"statDBI");async function $4(e,t){try{let r=Mn.join(e,t+c_);return(await Fs.stat(r)).size}catch{throw new Error(an.INVALID_ENVIRONMENT)}}a($4,"environmentDataSize");function V4(e,t){if(Dh(e,t),t=t.toString(),t===Gs)throw new Error(an.CANNOT_DROP_INTERNAL_DBIS_NAME);ls(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],ls(e,Gs).removeSync(t)}a(V4,"dropDBI");function K4(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{ls(e,i)}catch(o){if(o.message===an.DBI_DOES_NOT_EXIST)aD(e,i,i!==t,i===t),n=!0;else throw o}}n&&M4()}a(K4,"initializeDBIs");cD.exports={openDBI:ls,openEnvironment:sD,createEnvironment:H4,listDBIs:oD,listDBIDefinitions:F4,createDBI:aD,dropDBI:V4,statDBI:q4,deleteEnvironment:k4,initializeDBIs:K4,TransactionCursor:eR,environmentDataSize:$4,copyEnvironment:x4,closeEnvironment:iD}});var uD=O((xAe,lD)=>{"use strict";var iR=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};lD.exports=iR});var _D=O((FAe,dD)=>{"use strict";var oR=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};dD.exports=oR});var ED=O((qAe,fD)=>{"use strict";var aR=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};fD.exports=aR});var nc=O((WAe,mD)=>{"use strict";var Y4=mt(),W4=uD(),j4=_D(),z4=ED(),mi=on(),l_=Pn().LMDB_ERRORS_ENUM,Q4=Ht(),Ji=L(),J4=te(),X4=require("uuid"),VAe=require("lmdb"),{handleHDBError:Z4,hdb_errors:eJ}=_e(),{OVERFLOW_MARKER:KAe,MAX_SEARCH_KEY_LENGTH:YAe}=Q4,hD=ne();hD.initSync();var Lh=hD.get(Ji.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),cR=Ji.TIME_STAMP_NAMES_ENUM.CREATED_TIME,rc=Ji.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function tJ(e,t,r,n,s=mi.getNextMonotonicTime()){_R(e,t,r,n),lR(e,t,r);let i=new W4,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];pD(u,!0,s);let d=rJ(e,t,r,u),_=u[t];o.push(d),c.push(_)}return uR(o,c,n,i,s)}a(tJ,"insertRecords");function rJ(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let d=c([[{}]]);Array.isArray(d)&&(c=d[0][Ji.FUNC_VAL],n[o]=c)}let l=mi.getIndexedValues(c),u=e.dbis[o];if(l){Lh&&u.prefetch(l.map(d=>({key:d,value:s})),Mh);for(let d=0,_=l.length;d<_;d++)u.put(l[d],s)}}Lh&&e.dbis[t].prefetch([s],Mh),e.dbis[t].put(s,n,n[rc])})}a(rJ,"insertRecord");function nJ(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(nJ,"removeSkippedRecords");function pD(e,t,r){let n=r>0;(n||!Number.isInteger(e[rc]))&&(e[rc]=r||(r=mi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[cR]))&&(e[cR]=r||mi.getNextMonotonicTime()):delete e[cR]}a(pD,"setTimestamps");function lR(e,t,r){r.indexOf(Ji.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Ji.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Ji.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Ji.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Y4.initializeDBIs(e,t,r)}a(lR,"initializeTransaction");async function sJ(e,t,r,n,s=mi.getNextMonotonicTime()){_R(e,t,r,n),lR(e,t,r);let i=new j4,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],_=d[t],E;try{E=dR(e,t,d,_,i,!0,s)}catch{i.skipped_hashes.push(_),o.push(u);continue}c.push(E),l.push(_)}return uR(c,l,n,i,s,o)}a(sJ,"updateRecords");async function iJ(e,t,r,n,s=mi.getNextMonotonicTime()){try{_R(e,t,r,n)}catch(l){throw Z4(l,l.message,eJ.HTTP_STATUS_CODES.BAD_REQUEST)}lR(e,t,r);let i=new z4,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;J4.isEmpty(u[t])?(d=X4.v4(),u[t]=d):d=u[t];let _=dR(e,t,u,d,i,!1,s);o.push(_),c.push(d)}return uR(o,c,n,i,s)}a(iJ,"upsertRecords");async function uR(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||mi.getNextMonotonicTime(),nJ(r,i),n}a(uR,"finalizeWrite");function dR(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if(pD(r,!d,o),Number.isInteger(r[rc])&&u[rc]>r[rc])return!1;d&&s.original_records.push(u);let _,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let T=r[h],m=e.dbis[h];if(m===void 0)continue;let g=u[h];if(typeof T=="function"){let y=T([[u]]);Array.isArray(y)&&(T=y[0][Ji.FUNC_VAL],r[h]=T)}if(T===g)continue;let S=mi.getIndexedValues(g);if(S){Lh&&m.prefetch(S.map(y=>({key:y,value:n})),Mh);for(let y=0,I=S.length;y<I;y++)m.remove(S[y],n)}if(S=mi.getIndexedValues(T),S){Lh&&m.prefetch(S.map(y=>({key:y,value:n})),Mh);for(let y=0,I=S.length;y<I;y++)m.put(S[y],n)}}let f={...u,...r};c.put(n,f,f[rc])},"do_put");return l?_=c.ifVersion(n,l.version,E):_=c.ifNoExists(n,E),_.then(f=>f?!0:dR(e,t,r,n,s,i,o))}a(dR,"updateUpsertRecord");function oJ(e,t,r){if(mi.validateEnv(e),t===void 0)throw new Error(l_.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(l_.WRITE_ATTRIBUTES_REQUIRED):new Error(l_.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(oJ,"validateBasic");function _R(e,t,r,n){if(oJ(e,t,r),!Array.isArray(n))throw n===void 0?new Error(l_.RECORDS_REQUIRED):new Error(l_.RECORDS_MUST_BE_ARRAY)}a(_R,"validateWrite");function Mh(){}a(Mh,"noop");mD.exports={insertRecords:tJ,updateRecords:sJ,upsertRecords:iJ}});var Xi=O((zAe,aJ)=>{aJ.exports={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:"url"},{attribute:"routes"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},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 Ti=O((QAe,gD)=>{"use strict";var TD=te(),SD=L(),Bl=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Si=require("joi"),Yo={schema_format:{pattern:Bl,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},cJ=Si.alternatives(Si.string().min(1).max(Yo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Yo.schema_format.message}),Si.number(),Si.array()).required(),lJ=Si.alternatives(Si.string().min(1).max(Yo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Yo.schema_format.message}),Si.number()),uJ=Si.alternatives(Si.string().min(1).max(Yo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Yo.schema_format.message}),Si.number()).required();function dJ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Yo.schema_length.maximum?`'${e}' maximum of 250 characters`:Bl.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(dJ,"checkValidTable");function _J(e,t){return TD.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(_J,"validateSchemaExists");function fJ(e,t){let r=t.state.ancestors[0].schema;return TD.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(fJ,"validateTableExists");function EJ(e,t){return e.toLowerCase()===SD.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${SD.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(EJ,"validateSchemaName");gD.exports={common_validators:Yo,schema_regex:Bl,hdb_schema_table:cJ,validateSchemaExists:_J,validateTableExists:fJ,validateSchemaName:EJ,checkValidTable:dJ,hdb_database:lJ,hdb_table:uJ}});var _t=O((XAe,RD)=>{"use strict";var cn=require("validate.js");cn.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||cn.validators.type.checks[t](e)?null:` must be a '${t}' value`};cn.validators.type.checks={Object:a(function(e){return cn.isObject(e)&&!cn.isArray(e)},"Object"),Array:cn.isArray,Integer:cn.isInteger,Number:cn.isNumber,String:cn.isString,Date:cn.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};cn.validators.hasValidFileExt=function(e,t){return cn.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};RD.exports={validateObject:hJ,validateObjectAsync:pJ,validateBySchema:mJ};function hJ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=cn(e,t,{format:"flat"});return r?new Error(r):null}a(hJ,"validateObject");async function pJ(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await cn.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(pJ,"validateObjectAsync");function mJ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(mJ,"validateBySchema")});var Uh=O((eye,AD)=>{var{common_validators:gi}=Ti(),d_=_t(),u_="is required",rr={database:{presence:!1,format:gi.schema_format,length:gi.schema_length},schema:{presence:!1,format:gi.schema_format,length:gi.schema_length},table:{presence:!0,format:gi.schema_format,length:gi.schema_length},attribute:{presence:!0,format:gi.schema_format,length:gi.schema_length},hash_attribute:{presence:!0,format:gi.schema_format,length:gi.schema_length}};function __(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(__,"makeAttributesStrings");function SJ(e){return e=__(e),rr.table.presence=!1,rr.attribute.presence=!1,rr.hash_attribute.presence=!1,d_.validateObject(e,rr)}a(SJ,"schema_object");function TJ(e){return e=__(e),rr.table.presence={message:u_},rr.attribute.presence=!1,rr.hash_attribute.presence=!1,d_.validateObject(e,rr)}a(TJ,"table_object");function gJ(e){return e=__(e),rr.table.presence={message:u_},rr.attribute.presence=!1,d_.validateObject(e,rr)}a(gJ,"create_table_object");function RJ(e){return e=__(e),rr.table.presence={message:u_},rr.attribute.presence={message:u_},rr.hash_attribute.presence=!1,d_.validateObject(e,rr)}a(RJ,"attribute_object");function AJ(e){return e=__(e),rr.table.presence={message:u_},rr.attribute.presence=!1,rr.hash_attribute.presence=!1,d_.validateObject(e,rr)}a(AJ,"describe_table");function yJ(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(yJ,"validateTableResidence");AD.exports={schema_object:SJ,create_table_object:gJ,table_object:TJ,attribute_object:RJ,describe_table:AJ,validateTableResidence:yJ}});var bD=O((rye,yD)=>{"use strict";var bJ=require("uuid"),fR=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||bJ.v4(),this.schema_table=`${this.schema}.${this.table}`}};yD.exports=fR});var vh=O((sye,OD)=>{"use strict";var OJ=bD(),ER=class extends OJ{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};OD.exports=ER});var ID=O((oye,ND)=>{"use strict";ND.exports=IJ;var NJ="inserted";function IJ(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===NJ?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(IJ,"returnObject")});var Bh=O((lye,DD)=>{"use strict";var wJ=L(),hR=mt(),CJ=nc(),{getSystemSchemaPath:PJ,getSchemaPath:DJ}=Rt(),cye=Xi(),LJ=Uh(),MJ=vh(),UJ=ID(),{handleHDBError:wD,hdb_errors:PD}=_e(),CD=te(),{HTTP_STATUS_CODES:vJ}=PD,BJ="inserted";DD.exports=HJ;async function HJ(e){let t=LJ.attribute_object(e);if(t)throw wD(new Error,t.message,PD.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&CD.checkGlobalSchemaTable(e.schema,e.table);if(r)throw wD(new Error,r,vJ.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=CD.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new MJ(e.schema,e.table,e.attribute,e.id);try{let i=await hR.openEnvironment(DJ(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}`);hR.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await hR.openEnvironment(PJ(),wJ.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await CJ.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return UJ(BJ,c,{records:[s]},l)}catch(i){throw i}}a(HJ,"lmdbCreateAttribute")});var mR=O((dye,MD)=>{var{hdb_table:xJ,hdb_database:LD}=Ti(),kJ=_t(),pR=require("joi"),FJ={undefined:"undefined",null:"null"},GJ=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||FJ[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),qJ=pR.object({database:LD,schema:LD,table:xJ,records:pR.array().items(pR.object().custom(GJ)).required()});MD.exports=function(e){return kJ.validateBySchema(e,qJ)}});var f_=O((Eye,vD)=>{"use strict";var Zi=te(),UD=K(),fye=mR(),{getDatabases:$J}=(Pe(),oe(ut)),{ClientError:sc}=_e();vD.exports=VJ;function VJ(e){if(Zi.isEmpty(e))throw new sc("invalid update parameters defined.");if(Zi.isEmptyOrZeroLength(e.schema))throw new sc("invalid schema specified.");if(Zi.isEmptyOrZeroLength(e.table))throw new sc("invalid table specified.");if(!Array.isArray(e.records))throw new sc("records must be an array");let t=$J()[e.schema]?.[e.table];if(Zi.isEmpty(t))throw new sc(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&Zi.isEmptyOrZeroLength(o[r]))throw UD.error("a valid hash attribute must be provided with update record:",o),new sc("a valid hash attribute must be provided with update record, check log for more info");if(!Zi.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw UD.error(`a valid hash value must be provided with ${e.operation} record:`,o),new sc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Zi.isEmpty(o[r])&&o[r]!==""&&n.has(Zi.autoCast(o[r]))&&(o.skip=!0),n.add(Zi.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(VJ,"insertUpdateValidate")});var HD=O((pye,BD)=>{"use strict";var SR=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};BD.exports=SR});var FD=O((Sye,kD)=>{"use strict";var TR=mt(),KJ=K(),xD=Pn().LMDB_ERRORS_ENUM;kD.exports=YJ;async function YJ(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 TR.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==xD.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await TR.closeEnvironment(global.lmdb_map[n]),await TR.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==xD.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){KJ.error(t)}}a(YJ,"cleanLMDBMap")});var eo=O((gye,VD)=>{"use strict";var E_=require("crypto"),WJ=ne(),{CONFIG_PARAMS:jJ}=L(),qD="aes-256-cbc",zJ=32,QJ=16,gR=64,$D=32,JJ=gR+$D,GD=new Map;VD.exports={encrypt:XJ,decrypt:ZJ,createNatsTableStreamName:e3};function XJ(e){let t=E_.randomBytes(zJ),r=E_.randomBytes(QJ),n=E_.createCipheriv(qD,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(XJ,"encrypt");function ZJ(e){let t=e.substr(0,gR),r=e.substr(gR,$D),n=e.substr(JJ,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=E_.createDecipheriv(qD,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(ZJ,"decrypt");function e3(e,t){let r=WJ.get(jJ.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=GD.get(r);return n||(n=E_.createHash("md5").update(r).digest("hex"),GD.set(r,n)),n}a(e3,"createNatsTableStreamName")});var Ri=O((yye,WD)=>{"use strict";var Aye=$r(),h_=K(),KD=Uh(),t3=eo(),Hh=te(),{handleHDBError:xh,hdb_errors:r3}=_e(),{HDB_ERROR_MSGS:kh,HTTP_STATUS_CODES:RR}=r3,YD=ne();YD.initSync();var{getDatabases:AR}=(Pe(),oe(ut)),n3=require("fs-extra"),s3=L();WD.exports={describeAll:i3,describeTable:Fh,describeSchema:o3};async function i3(e={}){try{let t=Hh.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=AR(),o={},c={},l=[],u=e?.exact_count;for(let _ in i){o[_]=!0,!t&&!s&&!r&&(c[_]=e.hdb_user?.role?.permission[_]?.describe);let E=i[_];for(let f in E)try{let h;if(t||s||r)h=await Fh({schema:_,table:f,exact_count:u});else if(n&&n[_].describe&&n[_].tables[f].describe){let T=n[_].tables[f].attribute_permissions;h=await Fh({schema:_,table:f,exact_count:u},T)}h&&l.push(h)}catch(h){h_.error(h)}}let d={};for(let _ in l)t||s||r?(d[l[_].schema]==null&&(d[l[_].schema]={}),d[l[_].schema][l[_].name]=l[_],o[l[_].schema]&&delete o[l[_].schema]):c[l[_].schema]&&(d[l[_].schema]==null&&(d[l[_].schema]={}),d[l[_].schema][l[_].name]=l[_],o[l[_].schema]&&delete o[l[_].schema]);for(let _ in o)t||s||r?d[_]={}:c[_]&&(d[_]={});return d}catch(t){return h_.error("Got an error in describeAll"),h_.error(t),xh(new Error,kh.DESCRIBE_ALL_ERR)}}a(i3,"describeAll");async function Fh(e,t){Hh.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(s=e.hdb_user?.role?.permission[r]?.tables[n]?.attribute_permissions);let i=KD.describe_table(e);if(i)throw i;let c=AR()[r];if(!c)throw xh(new Error,kh.SCHEMA_NOT_FOUND(e.schema),RR.NOT_FOUND);let l=c[n];if(!l)throw xh(new Error,kh.TABLE_NOT_FOUND(e.schema,e.table),RR.NOT_FOUND);function u(f){d.push({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(h=>({type:h.type,name:h.name})):void 0})}a(u,"pushAtt");let d=[];if(s){let f={};s.forEach(h=>{h.describe&&(f[h.attribute_name]=!0)}),l.attributes.forEach(h=>{f[h.name]&&u(h)})}else l.attributes?.forEach(f=>u(f));let _;try{_=(await n3.stat(l.primaryStore.env.path)).size}catch(f){h_.warn("unable to get database size",f)}let E={schema:r,name:l.tableName,hash_attribute:l.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:_};l.replicate!==void 0&&(E.replicate=l.replicate),l.expirationMS!==void 0&&(E.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(E.sealed=l.sealed),l.sources?.length>0&&(E.sources=l.sources.map(f=>f.name).filter(f=>f&&f!=="NATSReplicator"&&f!=="Replicator")),YD.get(s3.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(E.clustering_stream_name=t3.createNatsTableStreamName(E.schema,E.name));try{let f=l.getRecordCount({exactCount:e.exact_count==="true"});E.record_count=f.recordCount,E.table_size=l.getSize(),E.db_audit_size=l.getAuditSize(),E.estimated_record_range=f.estimatedRange;let h=l.auditStore;if(h)for(let T of h.getKeys({reverse:!0,limit:1}))E.last_updated_record=T[0];if(!E.last_updated_record&&l.indices.__updatedtime__)for(let T of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))E.last_updated_record=T}catch(f){h_.warn(`unable to stat table dbi due to ${f}`)}return E}a(Fh,"descTable");async function o3(e){Hh.transformReq(e);let t=KD.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 n=e.schema.toString(),i=AR()[n];if(!i)throw xh(new Error,kh.SCHEMA_NOT_FOUND(e.schema),RR.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Hh.isEmpty(l)||l.describe){let u=await Fh({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(o3,"describeSchema")});var us=O((Iye,XD)=>{var a3=Xi(),{callbackify:zD,promisify:c3}=require("util"),{getDatabases:QD}=(Pe(),oe(ut));XD.exports={setSchemaDataToGlobal:jD,getTableSchema:l3,getSystemSchema:u3,setSchemaDataToGlobalAsync:c3(jD)};var JD=Ri(),Oye=zD(JD.describeAll),Nye=zD(JD.describeTable);function jD(e){global.hdb_schema=QD(),e&&e()}a(jD,"setSchemaDataToGlobal");function l3(e,t,r){let n=QD()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(l3,"getTableSchema");function u3(){return a3}a(u3,"getSystemSchema")});var Vr=O((Cye,rL)=>{"use strict";var qh=mR(),Cr=te(),d3=require("util"),$h=Un(),_3=us(),ZD=K(),{handleHDBError:ic,hdb_errors:f3}=_e(),{HTTP_STATUS_CODES:oc}=f3,E3=d3.promisify(_3.getTableSchema),h3="updated",eL="inserted",tL="upserted";rL.exports={insert:m3,update:S3,upsert:T3,validation:p3,flush:g3};async function p3(e){if(Cr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Cr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Cr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await E3(e.schema,e.table),r=qh(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Cr.isEmptyOrZeroLength(c[n]))throw ZD.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(!Cr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw ZD.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Cr.isEmpty(c[n])&&c[n]!==""&&s.has(Cr.autoCast(c[n]))&&(c.skip=!0),s.add(Cr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(p3,"validation");async function m3(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=qh(e);if(t)throw ic(new Error,t.message,oc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw ic(new Error,r,oc.BAD_REQUEST);let n=await $h.createRecords(e);return Gh(eL,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(m3,"insertData");async function S3(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=qh(e);if(t)throw ic(new Error,t.message,oc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw ic(new Error,r,oc.BAD_REQUEST);let n=await $h.updateRecords(e);return Cr.isEmpty(n.existing_rows)?Gh(h3,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Gh(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(S3,"updateData");async function T3(e){if(e.operation!=="upsert")throw ic(new Error,"invalid operation, must be upsert",oc.INTERNAL_SERVER_ERROR);let t=qh(e);if(t)throw ic(new Error,t.message,oc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw ic(new Error,r,oc.BAD_REQUEST);let n=await $h.upsertRecords(e);return Gh(tL,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(T3,"upsertData");function Gh(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===eL?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===tL?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Gh,"returnObject");function g3(e){return Cr.transformReq(e),$h.flush(e.schema,e.table)}a(g3,"flush")});var bR=O((Dye,iL)=>{var R3=_t(),yR=require("joi"),{hdb_table:A3,hdb_database:nL}=Ti(),sL={schema:nL,database:nL,table:A3},y3={date:yR.date().iso().required()},b3={timestamp:yR.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};iL.exports=function(e,t){let r=t==="timestamp"?{...sL,...b3}:{...sL,...y3},n=yR.object(r);return R3.validateBySchema(e,n)}});var cL=O((Lye,aL)=>{var O3=_t(),OR=require("joi"),{hdb_table:N3,hdb_database:oL}=Ti(),I3=OR.object({schema:oL,database:oL,table:N3,hash_values:OR.array().required(),ids:OR.array()});aL.exports=function(e){return O3.validateBySchema(e,I3)}});var CR=O((Mye,lL)=>{"use strict";var NR=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},IR=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},wR=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};lL.exports={InsertObject:NR,NoSQLSeachObject:IR,DeleteResponseObject:wR}});var zo=O((vye,EL)=>{"use strict";var dL=bR(),w3=cL(),ac=te(),uL=require("moment"),_L=K(),{promisify:C3,callbackify:P3}=require("util"),cc=L(),D3=us(),PR=C3(D3.getTableSchema),DR=Un(),{DeleteResponseObject:L3}=CR(),{handleHDBError:Wo,hdb_errors:M3}=_e(),{HDB_ERROR_MSGS:Vh,HTTP_STATUS_CODES:jo}=M3,U3="records successfully deleted",v3=P3(fL);EL.exports={delete:v3,deleteRecord:fL,deleteFilesBefore:B3,deleteAuditLogsBefore:H3};async function B3(e){let t=dL(e,"date");if(t)throw Wo(t,t.message,jo.BAD_REQUEST,void 0,void 0,!0);if(ac.transformReq(e),!uL(e.date,uL.ISO_8601).isValid())throw Wo(new Error,Vh.INVALID_DATE,jo.BAD_REQUEST,cc.LOG_LEVELS.ERROR,Vh.INVALID_DATE,!0);let n=ac.checkSchemaTableExist(e.schema,e.table);if(n)throw Wo(new Error,n,jo.NOT_FOUND,cc.LOG_LEVELS.ERROR,n,!0);let s=await DR.deleteRecordsBefore(e);if(await PR(e.schema,e.table),_L.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(B3,"deleteFilesBefore");async function H3(e){let t=dL(e,"timestamp");if(t)throw Wo(t,t.message,jo.BAD_REQUEST,void 0,void 0,!0);if(ac.transformReq(e),isNaN(e.timestamp))throw Wo(new Error,Vh.INVALID_VALUE("Timestamp"),jo.BAD_REQUEST,cc.LOG_LEVELS.ERROR,Vh.INVALID_VALUE("Timestamp"),!0);let r=ac.checkSchemaTableExist(e.schema,e.table);if(r)throw Wo(new Error,r,jo.NOT_FOUND,cc.LOG_LEVELS.ERROR,r,!0);let n=await DR.deleteAuditLogsBefore(e);return await PR(e.schema,e.table),_L.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(H3,"deleteAuditLogsBefore");async function fL(e){e.ids&&(e.hash_values=e.ids);let t=w3(e);if(t)throw Wo(t,t.message,jo.BAD_REQUEST,void 0,void 0,!0);ac.transformReq(e);let r=ac.checkSchemaTableExist(e.schema,e.table);if(r)throw Wo(new Error,r,jo.NOT_FOUND,cc.LOG_LEVELS.ERROR,r,!0);try{await PR(e.schema,e.table);let n=await DR.deleteRecords(e);return ac.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${U3}`),n}catch(n){if(n.message===cc.SEARCH_NOT_FOUND_MESSAGE){let s=new L3;return s.message=cc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(fL,"deleteRecord")});var Kh=O((Hye,mL)=>{var x3=require("crypto"),hL=9;function k3(e){let t=G3(hL),r=pL(e+t);return t+r}a(k3,"createHash");function F3(e,t){let r=e?.substr(0,hL),n=r+pL(t+r);return e===n}a(F3,"validateHash");function G3(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a(G3,"generateSalt");function pL(e){return x3.createHash("md5").update(e).digest("hex")}a(pL,"md5");mL.exports={hash:k3,validate:F3}});var TL=O((kye,SL)=>{var LR=_t(),Kr={username:{presence:!0,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 q3(e){return Kr.password.presence=!0,Kr.username.presence=!0,Kr.role.presence=!0,Kr.active.presence=!0,LR.validateObject(e,Kr)}a(q3,"addUserValidation");function $3(e){return Kr.password.presence=!1,Kr.username.presence=!0,Kr.role.presence=!1,Kr.active.presence=!1,LR.validateObject(e,Kr)}a($3,"alterUserValidation");function V3(e){return Kr.password.presence=!1,Kr.username.presence=!0,Kr.role.presence=!1,Kr.active.presence=!1,LR.validateObject(e,Kr)}a(V3,"dropUserValidation");SL.exports={addUserValidation:q3,alterUserValidation:$3,dropUserValidation:V3}});var ft=O((qye,RL)=>{"use strict";var{platform:Gye}=require("os"),K3="nats-server.zip",MR="nats-server",Y3=process.platform==="win32"?`${MR}.exe`:MR,W3=/^[^\s.,*>]+$/,gL="__request__",j3=a(e=>`${e}.${gL}`,"REQUEST_SUBJECT"),z3={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Q3={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},J3={HUB:"hub.pid",LEAF:"leaf.pid"},X3={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Z3={SUCCESS:"success",ERROR:"error"},eX={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},tX={TXN:"txn",MSGID:"msgid"},Hl={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},rX={[Hl.ERR]:1,[Hl.WRN]:2,[Hl.INF]:3,[Hl.DBG]:4,[Hl.TRC]:5},nX={debug:"-D",trace:"-DVV"};RL.exports={NATS_SERVER_ZIP:K3,NATS_SERVER_NAME:MR,NATS_BINARY_NAME:Y3,PID_FILES:J3,NATS_CONFIG_FILES:Q3,SERVER_SUFFIX:X3,NATS_TERM_CONSTRAINTS_RX:W3,REQUEST_SUFFIX:gL,UPDATE_REMOTE_RESPONSE_STATUSES:Z3,CLUSTER_STATUS_STATUSES:eX,REQUEST_SUBJECT:j3,SUBJECT_PREFIXES:tX,MSG_HEADERS:z3,LOG_LEVELS:Hl,LOG_LEVEL_FLAGS:nX,LOG_LEVEL_HIERARCHY:rX}});var UR=O(AL=>{"use strict";var sX={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
9
9
  `),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
10
10
  `)},iX="certificate.pem",oX="privateKey.pem",aX="caCertificate.pem",cX="natsCertificate.pem",lX="natsCaCertificate.pem",yt={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},uX={tls_certificate:yt.SERVER,tls_certificateAuthority:yt.CA,customFunctions_tls_certificate:yt.SERVER,customFunctions_tls_certificateAuthority:yt.CA,operationsApi_tls_certificate:yt["OPERATIONS-API"],operationsApi_tls_certificateAuthority:yt["OPERATIONS-CA"]},dX={[yt.SERVER]:2,[yt.DEFAULT]:1},_X={[yt["OPERATIONS-API"]]:3,[yt.SERVER]:2,[yt.DEFAULT]:1},fX={[yt["OPERATIONS-API"]]:3,[yt.SERVER]:2,[yt.DEFAULT]:1},EX={[yt["OPERATIONS-CA"]]:3,[yt.CA]:2,[yt["DEFAULT-CA"]]:1},hX={[yt["OPERATIONS-CA"]]:3,[yt.CA]:2,[yt["DEFAULT-CA"]]:1},pX={[yt.CA]:2,[yt["DEFAULT-CA"]]:1};Object.assign(AL,{CERTIFICATE_PEM_NAME:iX,PRIVATEKEY_PEM_NAME:oX,CA_PEM_NAME:aX,CERT_NAME:yt,CERT_CONFIG_NAME_MAP:uX,CERT_PREFERENCE_APP:dX,CERT_PREFERENCE_OPS:_X,CERT_PREFERENCE_REP:fX,CA_CERT_PREFERENCE_REP:EX,CA_CERT_PREFERENCE_OPS:hX,CA_CERT_PREFERENCE_APP:pX,CERTIFICATE_VALUES:sX,NATS_CERTIFICATE_PEM_NAME:cX,NATS_CA_PEM_NAME:lX})});var BR=O((Yye,wL)=>{"use strict";var NL=require("fs-extra"),me=require("joi"),mX=require("os"),{boolean:He,string:wt,number:nr,array:uc}=me.types(),{totalmem:yL}=require("os"),lc=require("path"),SX=K(),vR=te(),Kye=UR(),bL=L(),TX=_t(),OL="log",gX="components",RX="Invalid logging.rotation.maxSize unit. Available units are G, M or K",AX="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",yX="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",bX="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",OX="rootPath config parameter is undefined",ln=me.alternatives([nr.min(0),wt]).optional().empty(null),Yh=me.alternatives([uc.items(wt,{host:wt.required(),port:ln},{hostname:wt.required(),port:ln}).empty(null),uc.items(wt)]),Ai,IL=!1;wL.exports={configValidator:NX,routesValidator:LX,route_constraints:Yh};function NX(e,t=!1){if(IL=t,Ai=e.rootPath,vR.isEmpty(Ai))throw OX;let r=He.optional(),n=nr.min(0).max(1e3).empty(null).default(DX),s=wt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(p_),i=wt.optional().empty(null),o=wt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=me.string().empty(null).default(p_),l=me.custom(wX).empty(null).default(p_),u=e.clustering?.enabled,d=me.object({certificate:i,certificateAuthority:i,privateKey:i}),_;return u===!0?_=me.object({enabled:r,hubServer:me.object({cluster:me.object({name:me.required().empty(null),network:me.object({port:ln,routes:Yh}).required()}).required(),leafNodes:me.object({network:me.object({port:ln}).required()}).required(),network:me.object({port:ln}).required()}).required(),leafServer:me.object({network:me.object({port:ln,routes:Yh}).required(),streams:me.object({maxAge:nr.min(120).allow(null).optional(),maxBytes:nr.min(1).allow(null).optional(),maxMsgs:nr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:me.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:He.optional(),databaseLevel:He.optional(),tls:me.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:He.required(),verify:He.optional()}),user:wt.optional().empty(null)}).optional():_=me.object({enabled:r,tls:me.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:He.optional()})}).optional(),me.object({authentication:me.alternatives(me.object({authorizeLocal:He,cacheTTL:nr.required(),enableSessions:He}),He).optional(),analytics:me.object({aggregatePeriod:nr}),replication:me.object({hostname:me.alternatives(wt,nr).optional().empty(null),url:wt.optional().empty(null),port:ln,securePort:ln,routes:uc.optional().empty(null),databases:me.alternatives(wt,uc),enableRootCAs:He.optional(),copyTablesToCatchUp:He.optional()}).optional(),componentsRoot:s.optional(),clustering:_,localStudio:me.object({enabled:r}).required(),logging:me.object({auditAuthEvents:me.object({logFailed:He,logSuccessful:He}),file:He.required(),level:me.valid("notify","fatal","error","warn","info","debug","trace"),rotation:me.object({enabled:He.optional(),compress:He.optional(),interval:wt.custom(PX).optional().empty(null),maxSize:wt.custom(CX).optional().empty(null),path:wt.optional().empty(null).default(p_)}).required(),root:s,stdStreams:He.required(),auditLog:He.required()}).required(),operationsApi:me.object({network:me.object({cors:He.optional(),corsAccessList:uc.optional(),headersTimeout:nr.min(1).optional(),keepAliveTimeout:nr.min(1).optional(),port:ln,domainSocket:me.optional().empty("hdb/operations-server").default(p_),securePort:ln,timeout:nr.min(1).optional()}).optional(),tls:me.alternatives([me.array().items(d),d])}).required(),rootPath:wt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:me.object({network:me.object({port:ln,securePort:ln,mtls:me.alternatives([He.optional(),me.object({user:wt.optional(),certificateAuthority:i,required:He.optional()})])}).required(),webSocket:He.optional(),requireAuthentication:He.optional()}),http:me.object({compressionThreshold:nr.optional(),cors:He.optional(),corsAccessList:uc.optional(),headersTimeout:nr.min(1).optional(),port:ln,securePort:ln,maxHeaderSize:nr.optional(),mtls:me.alternatives([He.optional(),me.object({user:wt.optional(),certificateAuthority:i,required:He.optional()})]),threadRange:me.alternatives([uc.optional(),wt.optional()])}).required(),threads:me.alternatives(n.optional(),me.object({count:n.optional(),debug:me.alternatives(He.optional(),me.object({startingPort:nr.min(1).optional(),host:wt.optional(),waitForDebugger:He.optional()})),maxHeapMemory:nr.min(0).optional()})),storage:me.object({writeAsync:He.required(),overlappingSync:He.optional(),caching:He.optional(),compression:me.alternatives([He.optional(),me.object({dictionary:wt.optional(),threshold:nr.optional()})]),compactOnStart:He.optional(),compactOnStartKeepBackup:He.optional(),noReadAhead:He.optional(),path:l,prefetchWrites:He.optional(),maxFreeSpaceToLoad:nr.optional(),maxFreeSpaceToRetain:nr.optional()}).required(),ignoreScripts:He.optional(),tls:me.alternatives([me.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(NX,"configValidator");function IX(e){return IL||NL.existsSync(e)?null:`Specified path ${e} does not exist.`}a(IX,"doesPathExist");function wX(e,t){me.assert(e,wt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=IX(e);if(r)return t.message(r)}a(wX,"validatePath");function CX(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(RX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(yX):e}a(CX,"validateRotationMaxSize");function PX(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(AX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(bX):e}a(PX,"validateRotationInterval");function DX(e,t){let r=t.state.path.join("."),n=mX.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||yL();return i=Math.round(Math.min(i,yL())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),SX.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(DX,"setDefaultThreads");function p_(e,t){let r=t.state.path.join(".");if(!vR.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(vR.isEmpty(Ai))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return lc.join(Ai,gX);case"logging.root":return lc.join(Ai,OL);case"clustering.leafServer.streams.path":return lc.join(Ai,"clustering","leaf");case"storage.path":let n=lc.join(Ai,bL.LEGACY_DATABASES_DIR_NAME);return NL.existsSync(n)?n:lc.join(Ai,bL.DATABASES_DIR_NAME);case"logging.rotation.path":return lc.join(Ai,OL);case"operationsApi.network.domainSocket":return r==null?null:lc.join(Ai,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(p_,"setDefaultRoot");function LX(e){let t=me.object({routes:Yh});return TX.validateBySchema({routes:e},t)}a(LX,"routesValidator")});var Ct=O(xL=>{"use strict";var un=L(),hr=te(),pr=K(),{configValidator:MX,routesValidator:CL}=BR(),Yr=require("fs-extra"),DL=require("yaml"),Bn=require("path"),UX=require("is-number"),LL=require("properties-reader"),vX=require("lodash"),{handleHDBError:BX}=_e(),{HTTP_STATUS_CODES:HX,HDB_ERROR_MSGS:xl}=Pn(),{server:xX}=(qr(),oe(Ja)),{DATABASES_PARAM_CONFIG:m_,CONFIG_PARAMS:vn,CONFIG_PARAM_MAP:qs}=un,kX="Unable to get config value because config is uninitialized",FX="Config successfully initialized",GX="Error backing up config file",qX="Empty parameter sent to getConfigValue",ML=Bn.join(un.PACKAGE_ROOT,"config","yaml",un.HDB_DEFAULT_CONFIG_FILE),$X=Bn.join(un.PACKAGE_ROOT,"config","yaml","defaultNatsConfig.yaml"),VX="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",PL={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"},Wh,zt,jh;Object.assign(xL,{createConfigFile:KX,getDefaultConfig:YX,getConfigValue:vL,initConfig:zh,flattenConfig:kl,updateConfigValue:BL,updateConfigObject:jX,getConfiguration:JX,setConfiguration:XX,readConfigFile:FR,getClusteringRoutes:ZX,initOldConfig:HL,getConfigFromFile:eZ,getConfigFilePath:dc,addConfig:tZ,deleteConfigFromFile:rZ,getConfigObj:nZ,resolvePath:HR,getFlatConfigObj:sZ});function HR(e){if(e?.startsWith("~/"))return Bn.join(hr.getHomeDir(),e.slice(1));let t=ne();return Bn.resolve(t.getHdbBasePath(),e)}a(HR,"resolvePath");function KX(e,t=!1){let r=Qo(ML);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=DL.parseDocument(Yr.readFileSync($X,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}Wh=kl(r.toJSON());let n;for(let c in e){let l=qs[c.toLowerCase()];if(l===vn.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(u=>({[u]:e[c][u]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let u=l.split("_"),d=xR(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{r.setIn([...u],d)}catch(_){pr.error(_)}}}n&&UL(r,n),kR(r,t);let s=r.toJSON();zt=kl(s);let i=r.getIn(["rootPath"]),o=Bn.join(i,un.HDB_CONFIG_FILE);Yr.createFileSync(o),Yr.writeFileSync(o,String(r)),pr.trace(`Config file written to ${o}`)}a(KX,"createConfigFile");function UL(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!hr.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(m_.TABLES))for(let i in n[s][m_.TABLES])for(let o in n[s][m_.TABLES][i]){let c=n[s][m_.TABLES][i][o],l=[vn.DATABASES,s,m_.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[vn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){pr.error("Error parsing schemas CLI/env config arguments",n)}}a(UL,"setSchemasConfig");function YX(e){if(Wh===void 0){let r=Qo(ML);Wh=kl(r.toJSON())}let t=qs[e.toLowerCase()];if(t!==void 0)return Wh[t.toLowerCase()]}a(YX,"getDefaultConfig");function vL(e){if(e==null){pr.info(qX);return}if(zt===void 0){pr.trace(kX);return}let t=qs[e.toLowerCase()];if(t!==void 0)return zt[t.toLowerCase()]}a(vL,"getConfigValue");function dc(e=hr.getPropsFilePath()){let t=hr.getEnvCliRootPath();if(t)return HR(Bn.join(t,un.HDB_CONFIG_FILE));let r=LL(e);return HR(r.get(un.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(dc,"getConfigFilePath");function zh(e=!1){if(zt===void 0||e){let t;if(!hr.noBootFile()){t=hr.getPropsFilePath();try{Yr.accessSync(t,Yr.constants.F_OK|Yr.constants.R_OK)}catch(i){throw pr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=dc(t),n;if(r.includes("config/settings.js"))try{HL(r);return}catch(i){if(i.code!==un.NODE_ERROR_CODES.ENOENT)throw i}try{n=Qo(r)}catch(i){if(i.code===un.NODE_ERROR_CODES.ENOENT){pr.trace(`HarperDB config file not found at ${r}.
11
- This can occur during early stages of install where the config file has not yet been created`);return}else throw pr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}WX(n,r),kR(n);let s=n.toJSON();if(xX.config=s,zt=kl(s),zt.logging_rotation_rotate)for(let i in PL)zt[i]&&pr.error(`Config ${PL[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);pr.trace(FX)}}a(zh,"initConfig");function WX(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Bn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Bn.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(pr.trace("Updating config file with missing config params"),Yr.writeFileSync(t,String(e)))}a(WX,"checkForUpdatedConfig");function kR(e,t=!1){let r=e.toJSON();if(r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads),r.http?.port&&r.http?.port===r.http?.securePort)throw xl.CONFIG_VALIDATION("http.port and http.securePort cannot be the same value");if(r.operationsApi?.network?.port&&r.operationsApi?.network?.port===r.operationsApi?.network?.securePort)throw xl.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=MX(r,t);if(n.error)throw xl.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}a(kR,"validateConfig");function jX(e,t){zt===void 0&&(zt={});let r=qs[e.toLowerCase()];if(r===void 0){pr.trace(`Unable to update config object because config param '${e}' does not exist`);return}zt[r.toLowerCase()]=t}a(jX,"updateConfigObject");function BL(e,t,r=void 0,n=!1,s=!1,i=!1){zt===void 0&&zh();let o=vL(qs.hdb_root),c=Bn.join(o,un.HDB_CONFIG_FILE),l=Qo(c),u;if(r===void 0&&e.toLowerCase()===vn.DATABASES)u=t;else if(r===void 0){let E;if(i)E=e;else if(E=qs[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=xR(E,t);l.setIn([...f],h)}else for(let E in r){let f=qs[E.toLowerCase()];if(f===vn.HTTP_SECUREPORT&&r[E]===zt[vn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),f===vn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===zt[vn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),f===vn.DATABASES){u=r[E];continue}if(f?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),T=un.LEGACY_CONFIG_PARAMS[E.toUpperCase()];T&&T.startsWith("customFunctions")&&l.hasIn(T.split("_"))&&(f=T,h=T.split("_"));let m=xR(f,r[E]);f==="rootPath"&&m?.endsWith("/")&&(m=m.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],m)}catch(g){pr.error(g)}}}u&&UL(l,u),kR(l);let d=l.getIn(["rootPath"]),_=Bn.join(d,un.HDB_CONFIG_FILE);n===!0&&zX(c,d),Yr.writeFileSync(_,String(l)),s&&(zt=kl(l.toJSON())),pr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(BL,"updateConfigValue");function zX(e,t){try{let r=Bn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${un.HDB_CONFIG_FILE}.bak`);Yr.copySync(e,r),pr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){pr.error(GX),pr.error(r)}}a(zX,"backupConfigFile");var QX=["databases"];function kl(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network={...e.http,...e.operationsApi.network}),e?.operationsApi&&(e.operationsApi.tls={...e.tls,...e.operationsApi.tls}),jh=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!QX.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!vn[l.toUpperCase()]&&qs[l]&&(s[qs[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(kl,"flattenConfig");function xR(e,t){if(e===vn.CLUSTERING_NODENAME||e===vn.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(UX(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||hr.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 hr.autoCast(t)}a(xR,"castConfigValue");function JX(){let e=hr.getPropsFilePath(),t=dc(e);return Qo(t).toJSON()}a(JX,"getConfiguration");async function XX(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return BL(void 0,void 0,s,!0),VX}catch(i){throw typeof i=="string"||i instanceof String?BX(i,i,HX.BAD_REQUEST,void 0,void 0,!0):i}}a(XX,"setConfiguration");function FR(){let e=hr.getPropsFilePath();try{Yr.accessSync(e,Yr.constants.F_OK|Yr.constants.R_OK)}catch(n){if(!hr.noBootFile())throw pr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=dc(e);return Qo(t).toJSON()}a(FR,"readConfigFile");function Qo(e){return DL.parseDocument(Yr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Qo,"parseYamlDoc");function ZX(){let e=FR(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=hr.isEmptyOrZeroLength(t)?[]:t;let r=CL(t);if(r)throw xl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=hr.isEmptyOrZeroLength(n)?[]:n;let s=CL(n);if(s)throw xl.CONFIG_VALIDATION(s.message);if(!hr.isEmptyOrZeroLength(n)&&!hr.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!hr.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw xl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(ZX,"getClusteringRoutes");function HL(e){let t=LL(e);zt={};for(let r in qs){let n=t.get(r.toUpperCase());if(hr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=qs[r].toLowerCase();s===vn.LOGGING_ROOT?zt[s]=Bn.dirname(n):zt[s]=n}return zt}a(HL,"initOldConfig");function eZ(e){let t=FR();return vX.get(t,e.replaceAll("_","."))}a(eZ,"getConfigFromFile");async function tZ(e,t){let r=Qo(dc());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Yr.writeFile(dc(),String(r))}a(tZ,"addConfig");function rZ(e){let t=dc(hr.getPropsFilePath()),r=Qo(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Bn.join(n,un.HDB_CONFIG_FILE);Yr.writeFileSync(s,String(r))}a(rZ,"deleteConfigFromFile");function nZ(){return jh||(zh(),jh)}a(nZ,"getConfigObj");function sZ(){return zt||zh(),zt}a(sZ,"getFlatConfigObj")});var FL=O((Qye,kL)=>{"use strict";var Qh=L(),Jh=class{static{a(this,"BaseLicense")}constructor(t=0,r=Qh.RAM_ALLOCATION_ENUM.DEFAULT,n=Qh.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},GR=class extends Jh{static{a(this,"ExtendedLicense")}constructor(t=0,r=Qh.RAM_ALLOCATION_ENUM.DEFAULT,n=Qh.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};kL.exports={BaseLicense:Jh,ExtendedLicense:GR}});var _c=O((Xye,WL)=>{"use strict";var Gl=require("fs-extra"),qL=Kh(),$L=require("crypto"),iZ=require("moment"),oZ=require("uuid").v4,Wr=K(),$R=require("path"),aZ=te(),Jo=L(),{totalmem:GL}=require("os"),cZ=FL().ExtendedLicense,Fl="invalid license key format",lZ="061183",uZ="mofi25",dZ="aes-256-cbc",_Z=16,fZ=32,VL=ne(),{resolvePath:KL}=Ct();VL.initSync();var qR;WL.exports={validateLicense:YL,generateFingerPrint:hZ,licenseSearch:YR,getLicense:SZ,checkMemoryLimit:TZ};function VR(){return $R.join(VL.getHdbBasePath(),Jo.LICENSE_KEY_DIR_NAME,Jo.LICENSE_FILE_NAME)}a(VR,"getLicenseDirPath");function EZ(){let e=VR();return KL($R.join(e,Jo.LICENSE_FILE_NAME))}a(EZ,"getLicenseFilePath");function KR(){let e=VR();return KL($R.join(e,Jo.REG_KEY_FILE_NAME))}a(KR,"getFingerPrintFilePath");async function hZ(){let e=KR();try{return await Gl.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await pZ();throw Wr.error(`Error writing fingerprint file to ${e}`),Wr.error(t),new Error("There was an error generating the fingerprint")}}a(hZ,"generateFingerPrint");async function pZ(){let e=oZ(),t=qL.hash(e),r=KR();try{await Gl.mkdirp(VR()),await Gl.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Wr.error(`Error writing fingerprint file to ${r}`),Wr.error(n),new Error("There was an error generating the fingerprint")}return t}a(pZ,"writeFingerprint");function YL(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Jo.RAM_ALLOCATION_ENUM.DEFAULT,version:Jo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Wr.error("empty license key passed to validate."),r;let n=KR(),s=!1;try{s=Gl.statSync(n)}catch(i){Wr.error(i)}if(s){let i;try{i=Gl.readFileSync(n,"utf8")}catch{Wr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(uZ),c=o[1];c=Buffer.concat([Buffer.from(c)],_Z);let l=Buffer.concat([Buffer.from(i)],fZ),u=$L.createDecipheriv(dZ,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let d=null;try{d=u.update(o[0],"hex","utf8"),d.trim(),d+=u.final("utf8")}catch{let f=mZ(o[0],i);if(f)d=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Fl),Wr.error(Fl),new Error(Fl)}let _;if(isNaN(d))try{_=JSON.parse(d),r.version=_.version,r.exp_date=_.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),_.ram_allocation&&(r.ram_allocation=_.ram_allocation)}catch{throw console.error(Fl),Wr.error(Fl),new Error(Fl)}else r.exp_date=d;r.exp_date<iZ().valueOf()&&(r.valid_date=!1),qL.validate(o[1],`${lZ}${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||Wr.error("Invalid licence"),r}a(YL,"validateLicense");function mZ(e,t){try{let r=$L.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Wr.warn("Check old license failed")}}a(mZ,"checkOldLicense");function YR(){let e=new cZ,t=[];try{t=Gl.readFileSync(EZ(),"utf-8").split(Jo.NEW_LINE)}catch(r){r.code==="ENOENT"?Wr.debug("no license file found"):Wr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(aZ.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=YL(s.license_key,s.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(s){Wr.error("There was an error parsing the license string."),Wr.error(s),e.ram_allocation=Jo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return qR=e,e}a(YR,"licenseSearch");async function SZ(){return qR||await YR(),qR}a(SZ,"getLicense");function TZ(){let e=YR().ram_allocation,t=process.constrainedMemory?.()||GL();if(t=Math.round(Math.min(t,GL())/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(TZ,"checkMemoryLimit")});var xn=O((nbe,lM)=>{"use strict";var JL="username is required",XL="nothing to update, must supply active, role or password to update",ZL="password cannot be an empty string",eM="If role is specified, it cannot be empty.",tM="active must be true or false";lM.exports={addUser:wZ,alterUser:CZ,dropUser:DZ,getSuperUser:vZ,userInfo:LZ,listUsers:Zh,listUsersExternal:MZ,setUsersToGlobal:$l,findAndValidateUser:aM,getClusterUser:BZ,USERNAME_REQUIRED:JL,ALTERUSER_NOTHING_TO_UPDATE:XL,EMPTY_PASSWORD:ZL,EMPTY_ROLE:eM,ACTIVE_BOOLEAN:tM};var rM=Vr(),gZ=zo(),zR=Kh(),nM=TL(),sM=$r(),QR=to(),Hn=te(),iM=require("validate.js"),Ke=K(),{promisify:RZ}=require("util"),JR=eo(),jL=L(),zL=ft(),AZ=Ct(),ebe=ne(),tbe=_c(),yZ=Xi(),{table:rbe}=(Pe(),oe(ut)),{handleHDBError:yi,hdb_errors:bZ}=_e(),{HTTP_STATUS_CODES:bi,AUTHENTICATION_ERROR_MSGS:WR,HDB_ERROR_MSGS:ql}=bZ,{UserEventMsg:XR}=$s(),jR=require("lodash"),{server:ZR}=(qr(),oe(Ja)),OZ=K();ZR.getUser=(e,t)=>aM(e,t,t!=null);var oM={username:!0,active:!0,role:!0,password:!0},QL=new Map,Xh=sM.searchByValue,NZ=sM.searchByHash,IZ=RZ(gZ.delete);async function wZ(e){let t=iM.cleanAttributes(e,oM),r=nM.addUserValidation(t);if(r)throw yi(new Error,r.message,bi.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await Xh(n),s=s&&Array.from(s)}catch(l){throw Ke.error("There was an error searching for a role in add user"),Ke.error(l),l}if(!s||s.length<1)throw yi(new Error,ql.ROLE_NAME_NOT_FOUND(t.role),bi.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw yi(new Error,ql.DUP_ROLES_FOUND(t.role),bi.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=JR.encrypt(t.password)),t.password=zR.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await rM.insert(i)}catch(l){throw Ke.error("There was an error searching for a user."),Ke.error(l),l}Ke.debug(o);try{await $l()}catch(l){throw Ke.error("Got an error setting users to global"),Ke.error(l),l}if(o.skipped_hashes.length===1)throw yi(new Error,ql.USER_ALREADY_EXISTS(t.username),bi.CONFLICT,void 0,void 0,!0);let c={...t};return c.role=s[0],QR.signalUserChange(new XR(process.pid)),`${c.username} successfully added`}a(wZ,"addUser");async function CZ(e){let t=iM.cleanAttributes(e,oM);if(Hn.isEmptyOrZeroLength(t.username))throw new Error(JL);if(Hn.isEmptyOrZeroLength(t.password)&&Hn.isEmptyOrZeroLength(t.role)&&Hn.isEmptyOrZeroLength(t.active))throw new Error(XL);if(!Hn.isEmpty(t.password)&&Hn.isEmptyOrZeroLength(t.password.trim()))throw new Error(ZL);if(!Hn.isEmpty(t.active)&&!Hn.isBoolean(t.active))throw new Error(tM);let r=PZ(t.username);if(!Hn.isEmpty(t.password)&&!Hn.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=JR.encrypt(t.password)),t.password=zR.hash(t.password)),t.role==="")throw new Error(eM);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 Xh(i)||[])}catch(c){throw Ke.error("Got an error searching for a role."),Ke.error(c),c}if(!o||o.length===0){let c=ql.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ke.error(c),yi(new Error,c,bi.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=ql.ALTER_USER_DUP_ROLES(t.role);throw Ke.error(c),yi(new Error,c,bi.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await rM.update(n)}catch(i){throw Ke.error("Error during update."),Ke.error(i),i}try{await $l()}catch(i){throw Ke.error("Got an error setting users to global"),Ke.error(i),i}return QR.signalUserChange(new XR(process.pid)),s}a(CZ,"alterUser");function PZ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(PZ,"isClusterUser");async function DZ(e){try{let t=nM.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Hn.isEmpty(global.hdb_users.get(e.username)))throw yi(new Error,ql.USER_NOT_EXIST(e.username),bi.NOT_FOUND,void 0,void 0,!0);let n;try{n=await IZ(r)}catch(s){throw Ke.error("Got an error deleting a user."),Ke.error(s),s}Ke.debug(n);try{await $l()}catch(s){throw Ke.error("Got an error setting users to global."),Ke.error(s),s}return QR.signalUserChange(new XR(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(DZ,"dropUser");async function LZ(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=jR.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await NZ(r)}catch(s){throw Ke.error("Got an error searching for a role."),Ke.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ke.error(r),r}return t}a(LZ,"userInfo");async function MZ(){let e;try{e=await Zh()}catch(t){throw Ke.error("Got an error listing users."),Ke.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(MZ,"listUsersExternal");async function Zh(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Xh(e)}catch(o){throw Ke.error("Got an error searching for roles."),Ke.error(o),o}let r={};for(let o of t)r[o.id]=jR.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await Xh(n)}catch(o){throw Ke.error("Got an error searching for users."),Ke.error(o),o}let i=new Map;for(let o of s)o=jR.cloneDeep(o),o.role=r[o.role],UZ(o.role),i.set(o.username,o);return i}catch(e){throw Ke.error("got an error listing users"),Ke.error(e),Hn.errorizeMessage(e)}return null}a(Zh,"listUsers");function UZ(e){try{if(!e){Ke.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(yZ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ke.error("Got an error trying to set system permissions."),Ke.error(t)}}a(UZ,"appendSystemTablesToRole");async function $l(){try{let e=await Zh();global.hdb_users=e}catch(e){throw Ke.error(e),e}}a($l,"setUsersToGlobal");async function aM(e,t,r=!0){global.hdb_users||await $l();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw yi(new Error,WR.GENERIC_AUTH_FAIL,bi.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw yi(new Error,WR.USER_INACTIVE,bi.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(QL.get(t)===n.password)return s;if(zR.validate(n.password,t))QL.set(t,n.password);else throw yi(new Error,WR.GENERIC_AUTH_FAIL,bi.UNAUTHORIZED,void 0,void 0,!0)}return s}a(aM,"findAndValidateUser");async function vZ(){global.hdb_users||await $l();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(vZ,"getSuperUser");async function BZ(){let e=await Zh(),t=AZ.getConfigFromFile(jL.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Hn.isEmpty(r)&&r?.role?.role===jL.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=JR.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+zL.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+zL.SERVER_SUFFIX.ADMIN,r}a(BZ,"getClusterUser");var cM=[];ZR.invalidateUser=function(e){for(let t of cM)try{t(e)}catch(r){OZ.error("Error invalidating user",r)}};ZR.onInvalidatedUser=function(e){cM.push(e)}});var T_=O((abe,fM)=>{"use strict";var fc=K(),kn=L(),HZ=FD(),ibe=us(),obe=Ri(),xZ=xn(),{validateEvent:uM}=$s(),S_=Un(),kZ=require("process"),{resetDatabases:FZ}=(Pe(),oe(ut)),GZ={[kn.ITC_EVENT_TYPES.SCHEMA]:qZ,[kn.ITC_EVENT_TYPES.USER]:_M};async function qZ(e){let t=uM(e);if(t){fc.error(t);return}fc.trace("ITC schemaHandler received schema event:",e),await HZ(e.message),await $Z(e.message)}a(qZ,"schemaHandler");async function $Z(e){try{S_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),S_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),S_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=FZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){fc.error(t)}}a($Z,"syncSchemaMetadata");var dM=[];async function _M(e){try{try{S_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),S_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){fc.warn(r)}let t=uM(e);if(t){fc.error(t);return}fc.trace(`ITC userHandler ${kn.HDB_ITC_CLIENT_PREFIX}${kZ.pid} received user event:`,e),await xZ.setUsersToGlobal();for(let r of dM)r()}catch(t){fc.error(t)}}a(_M,"userHandler");_M.addListener=function(e){dM.push(e)};fM.exports=GZ});var $s=O((fbe,hM)=>{"use strict";var lbe=K(),eA=te(),VZ=L(),{ITC_ERRORS:g_}=Pn(),{parentPort:ube,threadId:KZ,isMainThread:YZ,workerData:dbe}=require("worker_threads"),{onMessageFromWorkers:WZ,broadcast:_be,broadcastWithAcknowledgement:jZ}=ot();hM.exports={sendItcEvent:zZ,validateEvent:EM,SchemaEventMsg:QZ,UserEventMsg:JZ};var ep;WZ(async(e,t)=>{ep=ep||T_(),EM(e),ep[e.type]&&await ep[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function zZ(e){return!YZ&&e.message&&(e.message.originator=KZ),jZ(e)}a(zZ,"sendItcEvent");function EM(e){if(typeof e!="object")return g_.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||eA.isEmpty(e.type))return g_.MISSING_TYPE;if(!e.hasOwnProperty("message")||eA.isEmpty(e.message))return g_.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||eA.isEmpty(e.message.originator))return g_.MISSING_ORIGIN;if(VZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return g_.INVALID_EVENT(e.type)}a(EM,"validateEvent");function QZ(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(QZ,"SchemaEventMsg");function JZ(e){this.originator=e}a(JZ,"UserEventMsg")});var to=O((pbe,TM)=>{"use strict";var pM=L(),hbe=te(),tp=K(),mM=HD(),Vl,{sendItcEvent:SM}=$s();function XZ(e){try{tp.info("signalSchemaChange called with message:",e),Vl=Vl||T_();let t=new mM(pM.ITC_EVENT_TYPES.SCHEMA,e);return Vl.schema(t),SM(t)}catch(t){tp.error(t)}}a(XZ,"signalSchemaChange");function ZZ(e){try{tp.trace("signalUserChange called with message:",e),Vl=Vl||T_();let t=new mM(pM.ITC_EVENT_TYPES.USER,e);return Vl.user(t),SM(t)}catch(t){tp.error(t)}}a(ZZ,"signalUserChange");TM.exports={signalSchemaChange:XZ,signalUserChange:ZZ}});var rp=O((Sbe,RM)=>{"use strict";var gM=te(),e5=L(),t5=K(),r5=Bh(),n5=vh(),s5=to(),{SchemaEventMsg:i5}=$s(),o5="already exists in";RM.exports=a5;async function a5(e,t,r){if(gM.isEmptyOrZeroLength(r))return r;let n=[];gM.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await c5(e,t.schema,t.name,i)})),s}a(a5,"lmdbCheckForNewAttributes");async function c5(e,t,r,n){let s=new n5(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await l5(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(o5))t5.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(c5,"createNewAttribute");async function l5(e){let t;return t=await r5(e),s5.signalSchemaChange(new i5(process.pid,e5.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(l5,"createAttribute")});var Kl=O((gbe,AM)=>{"use strict";var tA=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};AM.exports=tA});var bM=O((Abe,yM)=>{"use strict";var u5=Kl(),d5=L().OPERATIONS_ENUM,rA=class extends u5{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(d5.INSERT,r,n,s,i),this.records=t}};yM.exports=rA});var NM=O((bbe,OM)=>{"use strict";var _5=Kl(),f5=L().OPERATIONS_ENUM,nA=class extends _5{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(f5.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};OM.exports=nA});var wM=O((Nbe,IM)=>{"use strict";var E5=Kl(),h5=L().OPERATIONS_ENUM,sA=class extends E5{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(h5.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};IM.exports=sA});var PM=O((wbe,CM)=>{"use strict";var p5=Kl(),m5=L().OPERATIONS_ENUM,iA=class extends p5{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(m5.DELETE,n,s,t,i),this.original_records=r}};CM.exports=iA});var R_=O((Dbe,UM)=>{"use strict";var Pbe=require("path"),DM=mt(),S5=bM(),T5=NM(),g5=wM(),R5=PM(),Yl=Ht(),LM=te(),{CONFIG_PARAMS:A5}=L(),MM=ne();MM.initSync();var np=L().OPERATIONS_ENUM,{getTransactionAuditStorePath:y5}=Rt();UM.exports=b5;async function b5(e,t){if(MM.get(A5.LOGGING_AUDITLOG)===!1)return;let r=y5(e.schema,e.table),n=await DM.openEnvironment(r,e.table,!0),s=O5(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){DM.initializeDBIs(n,Yl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Yl.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Yl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Yl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),LM.isEmpty(s.user_name)||n.dbis[Yl.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Yl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(b5,"writeTransaction");function O5(e,t){let r=LM.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===np.INSERT)return new S5(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===np.UPDATE)return new T5(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===np.UPSERT)return new g5(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===np.DELETE)return new R5(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(O5,"createTransactionObject")});var oA=O((Ube,vM)=>{"use strict";var N5=f_(),Mbe=Qd(),A_=L(),I5=Jd(),w5=nc().insertRecords,C5=mt(),P5=K(),D5=rp(),{getSchemaPath:L5}=Rt(),M5=R_();vM.exports=U5;async function U5(e){try{let{schema_table:t,attributes:r}=N5(e);I5(e,r,t.hash_attribute),e.schema!==A_.SYSTEM_SCHEMA_NAME&&(r.includes(A_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(A_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(A_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(A_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await D5(e.hdb_auth_header,t,r),s=L5(e.schema,e.table),i=await C5.openEnvironment(s,e.table),o=await w5(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await M5(e,o)}catch(c){P5.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:n,txn_time:o.txn_time}}catch(t){throw t}}a(U5,"lmdbCreateRecords")});var xM=O((Bbe,HM)=>{"use strict";var BM=L(),v5=oA(),B5=Qd(),H5=require("fs-extra"),{getSchemaPath:x5}=Rt();HM.exports=k5;async function k5(e){let t=[{name:e.schema,createddate:Date.now()}],r=new B5(BM.SYSTEM_SCHEMA_NAME,BM.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await v5(r),await H5.mkdirp(x5(e.schema))}a(k5,"lmdbCreateSchema")});var FM=O((xbe,kM)=>{"use strict";var aA=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};kM.exports=aA});var VM=O(($be,$M)=>{"use strict";var GM=mt(),cA=on(),lA=Pn().LMDB_ERRORS_ENUM,F5=Ht(),qM=K(),Fbe=te(),G5=require("lmdb"),q5=FM(),$5=L(),{OVERFLOW_MARKER:Gbe,MAX_SEARCH_KEY_LENGTH:qbe}=F5,V5=$5.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function K5(e,t,r,n){if(cA.validateEnv(e),t===void 0)throw new Error(lA.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(lA.IDS_REQUIRED):new Error(lA.IDS_MUST_BE_ITERABLE);try{let s=GM.listDBIs(e);GM.initializeDBIs(e,t,s);let i=new q5,o,c=[],l=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||n&&h[V5]>n){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,G5.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let m=0;m<s.length;m++){let g=s[m];if(!h.hasOwnProperty(g)||g===t)continue;let S=e.dbis[g],y=h[g];if(y!=null)try{let I=cA.getIndexedValues(y);if(I)for(let U=0,H=I.length;U<H;U++)S.remove(I[U],o)}catch{qM.warn(`cannot delete from attribute: ${g}, ${y}:${o}`)}}});c.push(T),l.push(o),i.original_records.push(h)}catch(h){qM.warn(h),i.skipped.push(o)}let u=[],d=await Promise.all(c);for(let E=0,f=d.length;E<f;E++)d[E]===!0?i.deleted.push(l[E]):(i.skipped.push(l[E]),u.push(E));let _=0;for(let E=0;E<u.length;E++){let f=u[E];i.original_records.splice(f-_,1),_++}return i.txn_time=cA.getNextMonotonicTime(),i}catch(s){throw s}}a(K5,"deleteRecords");$M.exports={deleteRecords:K5}});var y_=O((Kbe,YM)=>{"use strict";var Wl=te(),Y5=VM(),W5=mt(),{getSchemaPath:j5}=Rt(),z5=R_(),Q5=K();YM.exports=J5;async function J5(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Wl.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Wl.isEmptyOrZeroLength(e.hash_values)&&!Wl.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Wl.isEmpty(l)||e.hash_values.push(l)}}if(Wl.isEmptyOrZeroLength(e.hash_values))return KM([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Wl.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=j5(e.schema,e.table),i=await W5.openEnvironment(s,e.table),o=await Y5.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await z5(e,o)}catch(c){Q5.error(`unable to write transaction due to ${c.message}`)}return KM(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(J5,"lmdbDeleteRecords");function KM(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(KM,"createDeleteResponse")});var dA=O((jbe,WM)=>{"use strict";var X5=L(),Wbe=on();function uA(e,t){let r=Object.create(null);if(t.length===1&&X5.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(uA,"parseRow");function Z5(e,t,r,n){let s=uA(r,e);n.push(s)}a(Z5,"searchAll");function e6(e,t,r,n){let s=uA(r,e);n[t]=s}a(e6,"searchAllToMap");function t6(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(t6,"iterateDBI");function Ec(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(Ec,"pushResults");function r6(e,t,r,n,s,i){t.toString().endsWith(e)&&Ec(t,r,n,s,i)}a(r6,"endsWith");function n6(e,t,r,n,s,i){t.toString().includes(e)&&Ec(t,r,n,s,i)}a(n6,"contains");function s6(e,t,r,n,s,i){t>e&&Ec(t,r,n,s,i)}a(s6,"greaterThanCompare");function i6(e,t,r,n,s,i){t>=e&&Ec(t,r,n,s,i)}a(i6,"greaterThanEqualCompare");function o6(e,t,r,n,s,i){t<e&&Ec(t,r,n,s,i)}a(o6,"lessThanCompare");function a6(e,t,r,n,s,i){t<=e&&Ec(t,r,n,s,i)}a(a6,"lessThanEqualCompare");WM.exports={parseRow:uA,searchAll:Z5,searchAllToMap:e6,iterateDBI:t6,endsWith:r6,contains:n6,greaterThanCompare:s6,greaterThanEqualCompare:i6,lessThanCompare:o6,lessThanEqualCompare:a6,pushResults:Ec}});var jl=O((Zbe,eU)=>{"use strict";var Xo=mt(),Qbe=K(),Fn=on(),sp=Ht(),Qt=Pn().LMDB_ERRORS_ENUM,Jbe=te(),c6=L(),ip=dA(),{parseRow:l6}=ip,Xbe=require("lmdb"),{OVERFLOW_MARKER:jM,MAX_SEARCH_KEY_LENGTH:u6}=sp;function zM(e,t,r,n=!1,s=void 0,i=void 0){return hc(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(zM,"iterateFullIndex");function b_(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return hc(e,t,r,(d,_,E,f)=>{let S={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return f===r?(S.values=!1,_.getRange(S).map(y=>({value:y}))):_.getRange(S)})}a(b_,"iterateRangeBetween");function hc(e,t,r,n){let s=e.database||e,i=Xo.openDBI(s,r);i[sp.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Xo.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(hc,"setupTransaction");function QM(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(jM)){if(!s)if(r)s=Xo.openDBI(e,r);else{let l=Xo.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Xo.openDBI(e,l[u]),!s[sp.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(QM,"getOverflowCheck");function d6(e,t,r,n=!1,s=void 0,i=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);return hc(e,t,t,(o,c,l)=>(op(r),r=O_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>l6(u.value,r))))}a(d6,"searchAll");function _6(e,t,r,n=!1,s=void 0,i=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);op(r),r=O_(e.database||e,r);let o=new Map;for(let{key:c,value:l}of zM(e,t,t,n,s,i))o.set(c,ip.parseRow(l,r));return o}a(_6,"searchAllToMap");function f6(e,t,r=!1,n=void 0,s=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=zM(e,void 0,t,r,n,s),c=o.transaction,l=QM(c.database,c,void 0,t);for(let{key:u,value:d}of o){let _=l(u,d);i[_]===void 0&&(i[_]=[]),i[_].push(d)}return i}a(f6,"iterateDBI");function E6(e,t){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);return Xo.statDBI(e,t).entryCount}a(E6,"countAll");function h6(e,t,r,n,s=!1,i=void 0,o=void 0){return Zo(e,r,n),hc(e,t,r,(c,l,u,d)=>(n=Fn.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(_=>({key:n,value:_}))))}a(h6,"equals");function p6(e,t,r){return Zo(e,t,r),Xo.openDBI(e,t).getValuesCount(r)}a(p6,"count");function m6(e,t,r,n,s=!1,i=void 0,o=void 0){return Zo(e,r,n),hc(e,null,r,(c,l)=>{n=Fn.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let _;for(let E of l.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){_=E;break}return _!==void 0&&(Number.isInteger(o)?o++:i++),d=l.getRange({transaction:c,start:_,end:void 0,reverse:s,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==_){if(f.toString().startsWith(n))return E;if(u===!0)return d.DONE}}),d.filter(E=>E)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(_=>{if(_.key.toString().startsWith(n))return _;if(u===!0)return d.DONE}),u?d:d.filter(_=>_)})}a(m6,"startsWith");function S6(e,t,r,n,s=!1,i=void 0,o=void 0){return JM(e,t,r,n,s,i,o,!0)}a(S6,"endsWith");function JM(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Zo(e,r,n),hc(e,null,r,(l,u,d,_)=>{let E=QM(d,l,_,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(jM)?u.getValues(f,{transaction:l}).map(T=>{let m=E(f,T);if(c?m.endsWith(n):m.includes(n))return{key:m,value:T}}).filter(T=>T):(c?h.endsWith(n):h.includes(n))?u[sp.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:u.getValues(f,{transaction:l}).map(T=>({key:f,value:T})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(JM,"contains");function T6(e,t,r,n,s=!1,i=void 0,o=void 0){Zo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),b_(e,t,r,n,l,s,i,o,!0,!1)}a(T6,"greaterThan");function g6(e,t,r,n,s=!1,i=void 0,o=void 0){Zo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),b_(e,t,r,n,l,s,i,o,!1,!1)}a(g6,"greaterThanEqual");function R6(e,t,r,n,s=!1,i=void 0,o=void 0){Zo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),b_(e,t,r,l,n,s,i,o,!1,!0)}a(R6,"lessThan");function A6(e,t,r,n,s=!1,i=void 0,o=void 0){Zo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),b_(e,t,r,l,n,s,i,o,!1,!1)}a(A6,"lessThanEqual");function y6(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Fn.validateEnv(e),r===void 0)throw new Error(Qt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Qt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Qt.END_VALUE_REQUIRED);if(n=Fn.convertKeyValueToWrite(n),s=Fn.convertKeyValueToWrite(s),n>s)throw new Error(Qt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return b_(e,t,r,n,s,i,o,c)}a(y6,"between");function b6(e,t,r,n){Fn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);if(op(r),r=O_(s,r),n===void 0)throw new Error(Qt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=ip.parseRow(c,r)),o}a(b6,"searchByHash");function O6(e,t,r){Fn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Qt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(O6,"checkHashExists");function N6(e,t,r,n,s=[]){return ZM(e,t,r,n,s),XM(e,t,r,n,s).map(i=>i[1])}a(N6,"batchSearchByHash");function I6(e,t,r,n,s=[]){ZM(e,t,r,n,s);let i=new Map;for(let[o,c]of XM(e,t,r,n,s))i.set(o,c);return i}a(I6,"batchSearchByHashToMap");function XM(e,t,r,n,s=[]){return hc(e,t,t,(i,o,c)=>{r=O_(c,r);let l=r.length<3;return n.map(u=>{let d=c.dbis[t].get(u,{transaction:i,lazy:l});if(d)return[u,ip.parseRow(d,r)];s.push(u)}).filter(u=>u)})}a(XM,"batchHashSearch");function ZM(e,t,r,n,s){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);if(op(r),n==null)throw new Error(Qt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Qt.IDS_MUST_BE_ITERABLE)}a(ZM,"initializeBatchSearchByHash");function op(e){if(!Array.isArray(e))throw e===void 0?new Error(Qt.FETCH_ATTRIBUTES_REQUIRED):new Error(Qt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(op,"validateFetchAttributes");function Zo(e,t,r){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Qt.SEARCH_VALUE_REQUIRED);if(r?.length>u6)throw new Error(Qt.SEARCH_VALUE_TOO_LARGE)}a(Zo,"validateComparisonFunctions");function O_(e,t){return t.length===1&&c6.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Xo.listDBIs(e)),t}a(O_,"setGetWholeRowAttributes");eU.exports={searchAll:d6,searchAllToMap:_6,count:p6,countAll:E6,equals:h6,startsWith:m6,endsWith:S6,contains:JM,searchByHash:b6,setGetWholeRowAttributes:O_,batchSearchByHash:N6,batchSearchByHashToMap:I6,checkHashExists:O6,iterateDBI:f6,greaterThan:T6,greaterThanEqual:g6,lessThan:R6,lessThanEqual:A6,between:y6}});var zl=O((tOe,iU)=>{var tU=require("lodash"),rU=_t(),xe=require("joi"),w6=te(),{hdb_schema_table:N_,checkValidTable:nU,hdb_table:sU,hdb_database:ap}=Ti(),{handleHDBError:C6,hdb_errors:P6}=_e(),{getDatabases:D6}=(Pe(),oe(ut)),{HTTP_STATUS_CODES:L6}=P6,M6=xe.object({database:ap,schema:ap,table:sU,search_attribute:N_,search_value:xe.any().required(),get_attributes:xe.array().min(1).items(xe.alternatives(N_,xe.object())).optional(),desc:xe.bool(),limit:xe.number().integer().min(1),offset:xe.number().integer().min(0)}),U6=xe.object({database:ap,schema:ap,table:sU,operator:xe.string().valid("and","or").default("and").lowercase(),offset:xe.number().integer().min(0),limit:xe.number().integer().min(1),get_attributes:xe.array().min(1).items(xe.alternatives(N_,xe.object())).optional(),sort:xe.object({attribute:xe.alternatives(N_,xe.array().min(1)),descending:xe.bool().optional()}).optional(),conditions:xe.array().min(1).items(xe.alternatives(xe.object({operator:xe.string().valid("and","or").default("and").lowercase(),conditions:xe.array()}),xe.object({search_attribute:xe.alternatives(N_,xe.array().min(1)),search_type:xe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:xe.when("search_type",{switch:[{is:"equals",then:xe.any()},{is:"between",then:xe.array().items(xe.alternatives([xe.string(),xe.number()])).length(2)}],otherwise:xe.alternatives(xe.string(),xe.number())}).required()}))).required()});iU.exports=function(e,t){let r=null;switch(t){case"value":r=rU.validateBySchema(e,M6);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(nU("database",e.schema)),i(nU("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"),s&&(r=new Error(s.trim()));break;case"conditions":r=rU.validateBySchema(e,U6);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=w6.checkGlobalSchemaTable(e.schema,e.table);if(s)return C6(new Error,s,L6.NOT_FOUND);let o=D6()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(d=>{for(let _=0,E=d.conditions.length;_<E;_++){let f=d.conditions[_];f.conditions?l(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=tU.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!tU.some(o,_=>_===d||_.attribute===d||_.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var _A=O((nOe,oU)=>{"use strict";var v6=mt(),B6=zl(),{getSchemaPath:H6}=Rt();oU.exports=x6;function x6(e){let t=B6(e,"hashes");if(t)throw t;let r=H6(e.schema,e.table);return v6.openEnvironment(r,e.table)}a(x6,"initialize")});var fA=O((iOe,aU)=>{"use strict";var k6=jl(),F6=_A();aU.exports=G6;async function G6(e){let t=await F6(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return k6.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(G6,"lmdbGetDataByHash")});var Ql=O((aOe,cU)=>{"use strict";var EA=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};cU.exports=EA});var uU=O((uOe,lU)=>{"use strict";var lOe=Ql(),q6=jl(),$6=_A();lU.exports=V6;async function V6(e){let t=await $6(e),r=global.hdb_schema[e.schema][e.table];return q6.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(V6,"lmdbSearchByHash")});var Vs=O((_Oe,dU)=>{"use strict";var hA=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};dU.exports=hA});var cp=O((EOe,mU)=>{"use strict";var jr=jl(),K6=mt(),Y6=te(),ke=Ht(),pc=L(),W6=Xi(),_U=Pn().LMDB_ERRORS_ENUM,{getSchemaPath:j6}=Rt(),ro=pc.SEARCH_WILDCARDS;async function z6(e,t,r){let n;e.schema===pc.SYSTEM_SCHEMA_NAME?n=W6[e.table]:n=global.hdb_schema[e.schema][e.table];let s=pU(e,n.hash_attribute,r,t);return EU(e,s,n.hash_attribute,r)}a(z6,"prepSearch");async function EU(e,t,r,n){let s=j6(e.schema,e.table),i=await K6.openEnvironment(s,e.table),o=hU(i,e,t,r),c=o.transaction||i;if([ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ke.SEARCH_TYPES.SEARCH_ALL,ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(Q6(e,r)===!1){let d=e.search_attribute;if(d===r)return n?fU(o,()=>!0):o.map(E=>({[r]:E.key}));let _=a(E=>({[r]:E.value,[d]:E.key}),"toObject");return n?fU(o,_):o.map(_)}let u=e.search_attribute===r?o.map(d=>d.key):o.map(d=>d.value);return n===!0?jr.batchSearchByHashToMap(c,r,e.get_attributes,u):jr.batchSearchByHash(c,r,e.get_attributes,u)}a(EU,"executeSearch");function hU(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case ke.SEARCH_TYPES.EQUALS:s=jr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.CONTAINS:s=jr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.ENDS_WITH:case ke.SEARCH_TYPES._ENDS_WITH:s=jr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.STARTS_WITH:case ke.SEARCH_TYPES._STARTS_WITH:s=jr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return jr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return jr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.SEARCH_ALL:return jr.searchAll(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return jr.searchAllToMap(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.BETWEEN:s=jr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case ke.SEARCH_TYPES.GREATER_THAN:case ke.SEARCH_TYPES._GREATER_THAN:s=jr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.GREATER_THAN_EQUAL:case ke.SEARCH_TYPES._GREATER_THAN_EQUAL:s=jr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.LESS_THAN:case ke.SEARCH_TYPES._LESS_THAN:s=jr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.LESS_THAN_EQUAL:case ke.SEARCH_TYPES._LESS_THAN_EQUAL:s=jr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(hU,"searchByType");function fU(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(fU,"createMapFromIterable");function Q6(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 n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(Q6,"checkToFetchMore");function pU(e,t,r,n){if(Y6.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),ro.indexOf(s)>-1)return r===!0?ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ke.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(ro[0])<0&&s.indexOf(ro[1])<0)return c===!0?r===!0?ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ke.SEARCH_TYPES.EQUALS;if(ro.indexOf(i)>=0&&ro.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ke.SEARCH_TYPES.CONTAINS;if(ro.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ke.SEARCH_TYPES.ENDS_WITH;if(ro.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ke.SEARCH_TYPES.STARTS_WITH;if(s.includes(ro[0])||s.includes(ro[1]))return ke.SEARCH_TYPES.EQUALS;throw new Error(_U.UNKNOWN_SEARCH_TYPE)}else switch(n){case pc.VALUE_SEARCH_COMPARATORS.BETWEEN:return ke.SEARCH_TYPES.BETWEEN;case pc.VALUE_SEARCH_COMPARATORS.GREATER:return ke.SEARCH_TYPES.GREATER_THAN;case pc.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ke.SEARCH_TYPES.GREATER_THAN_EQUAL;case pc.VALUE_SEARCH_COMPARATORS.LESS:return ke.SEARCH_TYPES.LESS_THAN;case pc.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ke.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(_U.UNKNOWN_SEARCH_TYPE)}}a(pU,"createSearchTypeFromSearchObject");mU.exports={executeSearch:EU,createSearchTypeFromSearchObject:pU,prepSearch:z6,searchByType:hU}});var TU=O((mOe,SU)=>{"use strict";var pOe=Vs(),J6=zl(),X6=te(),Z6=L(),e8=cp();SU.exports=t8;function t8(e,t){if(!X6.isEmpty(t)&&Z6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=J6(e,"value");if(n)throw n;return e8.prepSearch(e,t,!0)}a(t8,"lmdbGetDataByValue")});var I_=O((gOe,gU)=>{"use strict";var TOe=Vs(),r8=zl(),n8=te(),s8=L(),i8=cp();gU.exports=o8;async function o8(e,t){if(!n8.isEmpty(t)&&s8.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=r8(e,"value");if(n)throw n;return i8.prepSearch(e,t,!1)}a(o8,"lmdbSearchByValue")});var AU=O((yOe,RU)=>{"use strict";var AOe=Ht(),pA=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},mA=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},SA=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};RU.exports={SearchByConditionsObject:pA,SearchCondition:mA,SortAttribute:SA}});var IU=O((IOe,NU)=>{"use strict";var OOe=AU().SearchByConditionsObject,a8=Vs(),c8=zl(),TA=jl(),lp=Ht(),{Resource:NOe}=(Ks(),oe(gA)),OU=cp(),l8=dA(),u8=require("lodash"),{getSchemaPath:d8}=Rt(),yU=mt(),{handleHDBError:_8,hdb_errors:f8}=_e(),{HTTP_STATUS_CODES:E8}=f8,h8=1e8;NU.exports=p8;async function p8(e){let t=c8(e,"conditions");if(t)throw _8(t,t.message,E8.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=d8(e.schema,e.table),n=await yU.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)yU.openDBI(n,u.search_attribute);let i=u8.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.search_type;d===lp.SEARCH_TYPES.EQUALS?u.estimated_count=TA.count(n,u.search_attribute,u.search_value):d===lp.SEARCH_TYPES.CONTAINS||d===lp.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=h8}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await bU(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(OU.filterByType),_=d.length,E=TA.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(f=>u.get(f,{transaction:o,lazy:!0})),_>0&&(l=l.filter(f=>{for(let h=0;h<_;h++)if(!d[h](f))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(f=>l8.parseRow(f,E))}else{for(let _=1;_<i.length;_++){let E=i[_],f=await bU(o,e,E,s.hash_attribute);c=c.concat(f)}let u=new Set,d=e.offset||0;c=c.filter(_=>u.has(_)?!1:(u.add(_),!0)).slice(d,e.limit&&e.limit+d),l=TA.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(p8,"lmdbSearchByConditions");async function bU(e,t,r,n){let s=new a8(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===lp.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,OU.searchByType(e,s,i,n).map(o=>o.value)}a(bU,"executeConditionSearch")});var Jl=O((COe,wU)=>{"use strict";var m8=L().OPERATIONS_ENUM,RA=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=m8.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};wU.exports=RA});var AA=O((DOe,BU)=>{"use strict";var LU=Vs(),MU=Jl(),UU=I_(),vU=y_(),dn=L(),CU=te(),PU=mt(),{getTransactionAuditStorePath:S8,getSchemaPath:T8}=Rt(),DU=K();BU.exports=g8;async function g8(e){try{if(CU.isEmpty(global.hdb_schema[e.schema])||CU.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await R8(e),await A8(e);let t=T8(e.schema,e.table);try{await PU.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")DU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=S8(e.schema,e.table);await PU.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")DU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(g8,"lmdbDropTable");async function R8(e){let t=new LU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await UU(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new MU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await vU(s)}a(R8,"deleteAttributesFromSystem");async function A8(e){let t=new LU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await UU(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&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new MU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await vU(s)}catch(i){throw i}}a(A8,"dropTableFromSystem")});var xU=O((MOe,HU)=>{"use strict";var y8=require("fs-extra"),b8=Vs(),O8=Ql(),N8=Jl(),I8=AA(),w8=y_(),C8=fA(),P8=I_(),no=L(),{getSchemaPath:D8}=Rt(),{handleHDBError:L8,hdb_errors:M8}=_e(),{HDB_ERROR_MSGS:U8,HTTP_STATUS_CODES:v8}=M8;HU.exports=B8;async function B8(e){let t;try{t=await H8(e.schema);let r=new b8(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await P8(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await I8(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new N8(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await w8(s);let i=D8(t);await y8.remove(i)}catch(r){throw r}}a(B8,"lmdbDropSchema");async function H8(e){let t=new O8(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await C8(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw L8(new Error,U8.SCHEMA_NOT_FOUND(e),v8.NOT_FOUND,void 0,void 0,!0);return n}a(H8,"validateDropSchema")});var Xl=O((vOe,kU)=>{"use strict";var yA=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};kU.exports=yA});var OA=O((xOe,FU)=>{"use strict";var x8=require("fs-extra"),up=mt(),{getTransactionAuditStorePath:k8}=Rt(),bA=Ht(),HOe=Xl();FU.exports=F8;async function F8(e){let t;try{let r=k8(e.schema,e.table);await x8.mkdirp(r),t=await up.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{up.createDBI(t,bA.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),up.createDBI(t,bA.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),up.createDBI(t,bA.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(F8,"createTransactionsAuditEnvironment")});var $U=O((GOe,qU)=>{"use strict";var NA=L(),GU=mt(),G8=nc(),{getSystemSchemaPath:q8,getSchemaPath:$8}=Rt(),FOe=Xi(),V8=Bh(),IA=vh(),K8=K(),Y8=OA();qU.exports=W8;async function W8(e,t){let r=$8(t.schema,t.table),n=new IA(t.schema,t.table,NA.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new IA(t.schema,t.table,NA.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new IA(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await GU.createEnvironment(r,t.table),e!==void 0){let o=await GU.openEnvironment(q8(),NA.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await G8.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_table_attributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await wA(n),await wA(s),await wA(i)}await Y8(t)}catch(o){throw o}}a(W8,"lmdbCreateTable");async function wA(e){try{await V8(e)}catch(t){K8.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(wA,"createAttribute")});var KU=O(($Oe,VU)=>{"use strict";var j8=f_(),z8=Jd(),Q8=rp(),w_=L(),J8=nc().updateRecords,X8=mt(),{getSchemaPath:Z8}=Rt(),e9=R_(),t9=K();VU.exports=r9;async function r9(e){try{let{schema_table:t,attributes:r}=j8(e);z8(e,r,t.hash_attribute),e.schema!==w_.SYSTEM_SCHEMA_NAME&&(r.includes(w_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(w_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(w_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(w_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Q8(e.hdb_auth_header,t,r),s=Z8(e.schema,e.table),i=await X8.openEnvironment(s,e.table),o=await J8(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await e9(e,o)}catch(c){t9.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:n,txn_time:o.txn_time}}catch(t){throw t}}a(r9,"lmdbUpdateRecords")});var WU=O((KOe,YU)=>{"use strict";var n9=L().OPERATIONS_ENUM,CA=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=n9.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};YU.exports=CA});var zU=O((jOe,jU)=>{"use strict";var WOe=WU(),s9=f_(),i9=Jd(),o9=rp(),C_=L(),a9=nc().upsertRecords,c9=mt(),{getSchemaPath:l9}=Rt(),u9=R_(),d9=K(),{handleHDBError:_9,hdb_errors:f9}=_e();jU.exports=E9;async function E9(e){let t;try{t=s9(e)}catch(l){throw _9(l,l.message,f9.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;i9(e,n,r.hash_attribute),e.schema!==C_.SYSTEM_SCHEMA_NAME&&(n.includes(C_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(C_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(C_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(C_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await o9(e.hdb_auth_header,r,n),i=l9(e.schema,e.table),o=await c9.openEnvironment(i,e.table),c=await a9(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await u9(e,c)}catch(l){d9.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(E9,"lmdbUpsertRecords")});var JU=O((QOe,QU)=>{"use strict";var PA=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};QU.exports=PA});var ZU=O((XOe,XU)=>{"use strict";var DA=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};XU.exports=DA});var rv=O((tNe,tv)=>{"use strict";var LA=mt(),{getTransactionAuditStorePath:h9}=Rt(),eNe=JU(),P_=Ht(),p9=te(),ev=ZU(),m9=require("util").promisify,S9=m9(setTimeout),T9=1e4,g9=100;tv.exports=R9;async function R9(e){let t=h9(e.schema,e.table),r=await LA.openEnvironment(t,e.table,!0),n=LA.listDBIs(r);LA.initializeDBIs(r,P_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new ev;do s=await A9(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await S9(g9);while(s.transactions_deleted>0);return i}a(R9,"deleteAuditLogsBefore");async function A9(e,t){let r=new ev;try{let n=e.dbis[P_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[P_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];p9.isEmpty(c)||(s=e.dbis[P_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[P_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>T9)break}return await s,r}catch(n){throw n}}a(A9,"deleteTransactions")});var sv=O((nNe,nv)=>{"use strict";var MA=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};nv.exports=MA});var ov=O((oNe,iv)=>{"use strict";var y9=Vs(),b9=Jl(),iNe=sv(),Oi=L(),O9=te(),UA=mt(),N9=Xi(),I9=I_(),w9=y_(),{getSchemaPath:C9}=Rt();iv.exports=P9;async function P9(e,t=!0){let r;e.schema===Oi.SYSTEM_SCHEMA_NAME?r=N9[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await L9(e),s=C9(e.schema,e.table),i=await UA.openEnvironment(s,e.table);return t===!0&&await D9(e,i,r.hash_attribute),UA.dropDBI(i,e.attribute),n}a(P9,"lmdbDropAttribute");async function D9(e,t,r){let n=UA.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(o,u,l)}await s}a(D9,"removeAttributeFromAllObjects");async function L9(e){let t=new y9(Oi.SYSTEM_SCHEMA_NAME,Oi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await I9(t)).filter(o=>o[Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(O9.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new b9(Oi.SYSTEM_SCHEMA_NAME,Oi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return w9(i)}a(L9,"dropAttributeFromSystem")});var _v=O((lNe,dv)=>{"use strict";var vA=mt(),Zl=Ht(),cNe=on(),BA=L(),av=te(),{getTransactionAuditStorePath:M9}=Rt(),U9=jl(),dp=Kl(),v9=K();dv.exports=B9;async function B9(e){let t=M9(e.schema,e.table),r=await vA.openEnvironment(t,e.table,!0),n=vA.listDBIs(r);vA.initializeDBIs(r,Zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case BA.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return cv(r,e.search_values);case BA.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,x9(r,e.search_values,s);case BA.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return H9(r,e.search_values);default:return cv(r)}}a(B9,"readAuditLog");function cv(e,t=[0,Date.now()]){av.isEmpty(t[0])&&(t[0]=0),av.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new dp,s))}a(cv,"searchTransactionsByTimestamp");function H9(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[Zl.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,uv(e,i))}return Object.fromEntries(r)}a(H9,"searchTransactionsByUsername");function x9(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=U9.equals(e,Zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Zl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:_}of d){let E=Number(_);n.has(E)?n.get(E).push(u.toString()):n.set(E,[u.toString()])}}let s=Array.from(n.keys()),i=uv(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);lv(l,"records",r,d,o),lv(l,"original_records",r,d,o)}return Object.fromEntries(o)}a(x9,"searchTransactionsByHashValues");function lv(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let _=new dp(e.operation,e.user_name,i,void 0);_[t]=[c],u.push(_)}}else{let u=new dp(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(lv,"loopRecords");function uv(e,t){let r=[];try{let n=e.dbis[Zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new dp,i);r.push(o)}}catch(i){v9.warn(i)}return r}catch(n){throw n}}a(uv,"batchSearchTransactions")});var Ev=O((fNe,fv)=>{"use strict";var{getSchemaPath:dNe}=Rt(),_Ne=mt(),{database:k9}=(Pe(),oe(ut));fv.exports={writeTransaction:F9};async function F9(e,t,r){return k9({database:e,table:t}).transaction(r)}a(F9,"writeTransaction")});var Sv=O((hNe,mv)=>{"use strict";var{getSchemaPath:hv}=Rt(),pv=mt();mv.exports={flush:G9,resetReadTxn:q9};async function G9(e,t){return(await pv.openEnvironment(hv(e,t),t.toString())).flushed}a(G9,"flush");async function q9(e,t){try{(await pv.openEnvironment(hv(e,t),t.toString())).resetReadTxn()}catch{}}a(q9,"resetReadTxn")});var Av=O((mNe,Rv)=>{"use strict";var{Readable:$9}=require("stream"),{getDatabases:V9}=(Pe(),oe(ut)),{readSync:K9,openSync:Y9,createReadStream:Tv}=require("fs"),{open:W9}=require("lmdb"),gv=o_(),j9=a_(),{AUDIT_STORE_OPTIONS:z9}=(Qi(),oe(yv)),{INTERNAL_DBIS_NAME:Q9,AUDIT_STORE_NAME:J9}=Ht();Rv.exports=Z9;var HA=32768,X9=100;async function Z9(e){let t=e.database||e.schema||"data",r=V9()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let d=u.dbisDB,_=W9({noSync:!0,maxDbs:j9.MAX_DBS}),E,f=_.openDB(Q9,new gv(!1)),h=d.useReadTransaction(),T=0,m=a(async function(S,y){y.encoding="binary",y.encoder=void 0;let I=_.openDB(S,y),U=d.openDB(S,y);for(let{key:H,version:X,value:W}of U.getRange({start:null,transaction:h,versions:U.useVersions}))E=I.put(H,W,X),T++%X9===0&&(await new Promise(V=>setTimeout(V,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:y}of d.getRange({transaction:h,start:!1}))if(s.some(I=>S.startsWith?.(I+"/"))){f.put(S,y);let[,I]=S.split("/"),U=!I,H=new gv(!U,U);await m(S,H)}e.include_audit&&await m(J9,{...z9}),await E;let g=Tv(_.path);return g.headers=l(),g.on("close",()=>{h.done(),_.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=Y9(o.path);return o.transaction(()=>{let u=Buffer.alloc(HA);K9(c,u,0,HA),o.resetReadTxn();let d=o.useReadTransaction();d.renew();let _=Tv(null,{fd:c,start:HA}),E=new $9.from(async function*(){yield u;for await(let f of _)d.openTimer&&(d.openTimer=0),yield f;d.done()}());return E.headers=l(),E});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}a(Z9,"getBackup")});var Nv=O((TNe,Ov)=>{"use strict";var e7=K(),{handleHDBError:t7}=_e(),r7=$P(),n7=Bh(),s7=oA(),i7=xM(),o7=y_(),a7=fA(),c7=uU(),l7=TU(),u7=I_(),d7=IU(),_7=xU(),f7=$U(),E7=KU(),h7=zU(),p7=rv(),m7=AA(),S7=ov(),T7=_v(),g7=Ev(),bv=Sv(),R7=Av(),xA=class extends r7{static{a(this,"LMDBBridge")}async searchByConditions(t){return d7(t)}async getDataByHash(t){return await a7(t)}async searchByHash(t){return await c7(t)}async getDataByValue(t,r){return await l7(t,r)}async searchByValue(t){return await u7(t)}async createSchema(t){return await i7(t)}async dropSchema(t){return await _7(t)}async createTable(t,r){return await f7(t,r)}async dropTable(t){return await m7(t)}async createAttribute(t){return await n7(t)}async createRecords(t){return await s7(t)}async updateRecords(t){return await E7(t)}async upsertRecords(t){try{return await h7(t)}catch(r){throw t7(r,null,null,e7.ERR,r)}}async deleteRecords(t){return await o7(t)}async dropAttribute(t){return await S7(t)}async deleteAuditLogsBefore(t){return await p7(t)}async readAuditLog(t){return await T7(t)}writeTransaction(t,r,n){return g7.writeTransaction(t,r,n)}flush(t,r){return bv.flush(t,r)}resetReadTxn(t,r){return bv.resetReadTxn(t,r)}getBackup(t){return R7(t)}};Ov.exports=xA});function Uv(e){FA=e}function O7(){b7=setInterval(function(){for(let e of kA)if(e.stale){let t=e[Fe]?.url;Pv.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},y7).unref()}var GA,Cv,Pv,Dv,Lv,Mv,Iv,kA,A7,D_,wv,FA,mc,_p,y7,b7,fp=Ie(()=>{GA=M(on()),Cv=M(_e()),Pv=M(K());Ks();Dv=M(ne()),Lv=M(L()),Mv=M(te()),Iv=100,kA=new Set,A7=(0,Mv.convertToMS)(Dv.get(Lv.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3;a(Uv,"replicationConfirmation");mc=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;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.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),kA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(kA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(D_&&!this.overloadChecked&&performance.now()-wv>A7)throw new Cv.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}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||(0,GA.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let _=this.validated;this.validated=this.writes.length;for(let f=_;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let E;for(let f=_;f<this.validated;f++){let h=this.writes[f];h&&(h.before||h.beforeIntermediate)&&(E=!0)}if(E)return(async()=>{try{for(let f=0;f<2;f++){let h;for(let T=_;T<this.validated;T++){let m=this.writes[T];if(!m)continue;let g=m[f===0?"before":"beforeIntermediate"];if(g){let S=g();h?h.push?h.push(S):h=[h,S]:h=S}}h&&await(h.push?Promise.all(h):h)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(_){throw this.abort(),_}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(_=>_);let c=a(_=>{_.commit(r,_.entry,n)},"doWrite"),l=a(()=>{let _=this.writes[o++];if(_)if(_.key){n>0&&(_.entry=_.store.getEntry(_.key));let E=_.store.ifVersion(_.key,_.entry?.version??null,l);s=s||E}else l();else for(let E of this.writes)c(E)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<Iv>>n?l():s=this.writes[0].store.transaction(()=>{for(let _ of this.writes)_.entry=_.store.getEntry(_.key),c(_);return!0})),s)return D_||(D_=s,wv=performance.now(),D_.then(()=>{D_=null})),s.then(_=>{if(_){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let E=this.writes[0].store.rootStore.databaseName,f=this.writes[this.writes.length-1];FA&&f&&i.push(FA(E,f.store.getEntry(f.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+Iv/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let d={txnTime:r};if(this.next){let _=this.next?.commit(t);if(_?.then)return _?.then(E=>({txnTime:r,next:E}));d.next=_}return d}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},_p=class extends mc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,GA.getNextMonotonicTime)())}getReadTxn(){}},y7=3e4;a(O7,"startMonitoringTxns");O7()});function Pt(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 n=e.transaction=new mc;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n[Fe]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({letItLinger:r?.letItLinger});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var vv,Sc=Ie(()=>{vv=M(Ei());Ks();fp();a(Pt,"transaction");(0,vv._assignPackageExport)("transaction",Pt);Pt.commit=function(e){let t=(e[Fe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Pt.abort=function(e){let t=(e[Fe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var $v={};je($v,{ResourceBridge:()=>VA});function KA({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 Hv(e,t){let r=Ni(e),n=KA(e,r);if(!r)throw new Ys.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},o;Pt(i,()=>new Promise(u=>o=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&hp(d)}catch(_){d={message:_.toString()}}return t?{value:{key:u,value:d}}:{value:d}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function Ni(e){let t=e.database||e.schema||I7,r=dt()[t];if(!r)throw(0,Ys.handleHDBError)(new Error,N7.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function xv(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*kv(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var Fv,Ep,Ys,Gv,Ws,qA,$A,qv,N7,I7,w7,C7,Bv,VA,Vv=Ie(()=>{"use strict";Fv=M(Nv()),Ep=M(zl()),Ys=M(_e());Pe();Gv=M(f_()),Ws=M(L()),qA=M(to()),$A=M($s()),qv=M(te());Sc();pp();({HDB_ERROR_MSGS:N7}=Ys.hdb_errors),I7="data",w7=1e4,C7=10,VA=class extends Fv.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Bv=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,Ep.default)(t,"conditions");if(r)throw(0,Ys.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Ni(t);if(!n)throw new Ys.ClientError(`Table ${t.table} not found`);let s=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"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:KA(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Ys.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}pt({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Ni(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Ni(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(u=>{if(!u){let{value:d,version:_}=r.primaryStore.getEntry(o);return i(o,d,_)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Ni(t).dropTable()}createSchema(t){return eu({database:t.schema,table:null}),qA.signalSchemaChange(new $A.SchemaEventMsg(process.pid,Ws.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await YA(t.schema),qA.signalSchemaChange(new $A.SchemaEventMsg(process.pid,Ws.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,Bv.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,Gv.default)(t),s,i=dt()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(o.replicateTo=t.replicateTo),t.replicatedConfirmation&&(o.replicatedConfirmation=t.replicatedConfirmation),Pt(o,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(E=>E.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let _=d[i.primaryKey],E=_!=null&&await i.get(_,o);if(t.requires_existing&&!E||t.requires_no_existing&&E){u.push(d[i.primaryKey]);continue}E&&(E=hp(E));for(let f in d)if(Object.prototype.hasOwnProperty.call(d,f)){let h=d[f];if(typeof h=="function")try{let T=h([[E]]);Array.isArray(T)&&(h=T[0].func_val,d[f]=h)}catch(T){throw T.message+="Trying to set key "+f+" on object"+JSON.stringify(d),T}}if(E)for(let f in E)Object.prototype.hasOwnProperty.call(d,f)||(d[f]=E[f]);await(_==null?i.create(d,o):i.put(d,o)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=dt()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),Pt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return xv(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=dt()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ys.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:Ws.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),o.push(...d.skipped_hashes),await(0,qv.async_set_timeout)(C7),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%w7===0&&await u();return l.length>0&&await u(),s?xv(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Ep.default)(t,"hashes");if(r)throw r;return Hv(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Hv(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Ws.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 n=(0,Ep.default)(t,"value");if(n)throw n;let s=Ni(t);if(!s)throw new Ys.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===Ws.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:KA(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Ni(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){Ni({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Ni(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Ni(t),n={};switch(t.search_type){case Ws.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.operation??o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case Ws.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of kv(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return kv(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(KA,"getSelect");a(Hv,"getRecords");a(Ni,"getTable");a(xv,"createDeleteResponse");a(kv,"groupRecordsInHistory")});var Un=O((UNe,Kv)=>{"use strict";var{ResourceBridge:P7}=(Vv(),oe($v)),D7=ne();D7.initSync();var mp;function L7(){return mp||(mp=new P7,mp)}a(L7,"getBridge");Kv.exports=L7()});var zv=O((BNe,jv)=>{"use strict";var Yv=require("lodash"),L_=require("mathjs"),M7=require("jsonata"),Wv=te();jv.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?Yv.uniqWith(e,Yv.isEqual):e,"distinct_array"),searchJSON:U7,mad:M_.bind(null,L_.mad),mean:M_.bind(null,L_.mean),mode:M_.bind(null,L_.mode),prod:M_.bind(null,L_.prod),median:M_.bind(null,L_.median)};function M_(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(M_,"aggregateFunction");function U7(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(Wv.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Wv.isEmpty(this.__ala__.res[r])){let n=M7(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(U7,"searchJSON")});var Jv=O((xNe,Qv)=>{"use strict";var sr=require("moment"),WA="YYYY-MM-DDTHH:mm:ss.SSSZZ";sr.suppressDeprecationWarnings=!0;Qv.exports={current_date:a(()=>sr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>sr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return sr(e).utc().format("YYYY");case"month":return sr(e).utc().format("MM");case"day":return sr(e).utc().format("DD");case"hour":return sr(e).utc().format("HH");case"minute":return sr(e).utc().format("mm");case"second":return sr(e).utc().format("ss");case"millisecond":return sr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>sr(e).utc().format(WA),"date"),date_format:a((e,t)=>sr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>sr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>sr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=sr(e).utc(),s=sr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>sr().utc().valueOf(),"now"),get_server_time:a(()=>sr().format(WA),"get_server_time"),offset_utc:a((e,t)=>sr(e).utc().utcOffset(t).format(WA),"offset_utc")}});var t0=O((FNe,e0)=>{"use strict";var v7=require("@turf/area"),B7=require("@turf/length"),H7=require("@turf/circle"),x7=require("@turf/difference"),k7=require("@turf/distance"),F7=require("@turf/boolean-contains"),G7=require("@turf/boolean-equal"),q7=require("@turf/boolean-disjoint"),$7=require("@turf/helpers"),Xv=L(),$e=te(),so=K();e0.exports={geoArea:V7,geoLength:K7,geoCircle:Y7,geoDifference:W7,geoDistance:Zv,geoNear:j7,geoContains:z7,geoEqual:Q7,geoCrosses:J7,geoConvert:X7};function V7(e){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return v7.default(e)}catch(t){return so.trace(t,e),NaN}}a(V7,"geoArea");function K7(e,t){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return B7.default(e,{units:t||"kilometers"})}catch(r){return so.trace(r,e),NaN}}a(K7,"geoLength");function Y7(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return H7.default(e,t,{units:r||"kilometers"})}catch(n){return so.trace(n,e,t),NaN}}a(Y7,"geoCircle");function W7(e,t){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return x7(e,t)}catch(r){return so.trace(r,e,t),NaN}}a(W7,"geoDifference");function Zv(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return k7.default(e,t,{units:r||"kilometers"})}catch(n){return so.trace(n,e,t),NaN}}a(Zv,"geoDistance");function j7(e,t,r,n){if($e.isEmpty(e)||$e.isEmpty(t))return!1;if($e.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return Zv(e,t,n)<=r}catch(s){return so.trace(s,e,t),!1}}a(j7,"geoNear");function z7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return F7.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(z7,"geoContains");function Q7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return G7.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(Q7,"geoEqual");function J7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return!q7.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(J7,"geoCrosses");function X7(e,t,r){if($e.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if($e.isEmpty(t))throw new Error("geo_type is required");if($e.isEmpty(Xv.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Xv.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=$e.autoCastJSON(e)),$7[t](e,r)}a(X7,"geoConvert")});var Sp=O((qNe,r0)=>{var Tc=zv(),Gn=Jv(),Ii=t0();r0.exports=e=>{e.aggr.mad=e.aggr.MAD=Tc.mad,e.aggr.mean=e.aggr.MEAN=Tc.mean,e.aggr.mode=e.aggr.MODE=Tc.mode,e.aggr.prod=e.aggr.PROD=Tc.prod,e.aggr.median=e.aggr.MEDIAN=Tc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Tc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Tc.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Gn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Gn.current_time,e.fn.extract=e.fn.EXTRACT=Gn.extract,e.fn.date=e.fn.DATE=Gn.date,e.fn.date_format=e.fn.DATE_FORMAT=Gn.date_format,e.fn.date_add=e.fn.DATE_ADD=Gn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Gn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Gn.date_diff,e.fn.now=e.fn.NOW=Gn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Gn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Gn.get_server_time,e.fn.getdate=e.fn.GETDATE=Gn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Gn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Ii.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ii.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ii.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ii.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ii.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ii.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ii.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ii.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ii.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ii.geoNear}});var o0=O(($Ne,i0)=>{"use strict";var U_=require("lodash"),_n=require("alasql");_n.options.cache=!1;var Z7=Sp(),n0=require("clone"),Tp=require("recursive-iterator"),Ue=K(),et=te(),tu=Un(),eee=L(),{hdb_errors:tee}=_e(),{getDatabases:s0}=(Pe(),oe(ut)),ree="IS NULL",js="There was a problem performing this search. Please check the logs and try again.";Z7(_n);var jA=class{static{a(this,"SQLSearch")}constructor(t,r){if(et.isEmpty(t))throw Ue.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(),et.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!et.isEmptyOrZeroLength(n))return Ue.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ue.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ue.error(n),new Error(js)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ue.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ue.error(n),new Error(js)}if(Object.keys(this.data).length===0)return Ue.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ue.error("Error thrown from processJoins in SQLSearch class method search."),Ue.error(n),new Error(js)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ue.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ue.error(n),new Error(js)}try{return t=await this._finalSQL(),t}catch(n){throw Ue.error("Error thrown from finalSQL in SQLSearch class method search."),Ue.error(n),new Error(js)}}_getColumns(){let t=new Tp(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(n0(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=U_.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=s0()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(et.isEmpty(this.statement.where)){Ue.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Tp(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!et.isEmpty(r)&&r.right)if(et.isNotEmptyAndHasValue(r.right.value)){let n=et.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new _n.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=et.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new _n.yy.LogicValue({value:i}):n instanceof _n.yy.StringValue&&et.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new _n.yy.NumValue({value:i}))});if(t){Ue.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Tp(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!et.isEmpty(eee.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(et.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(et.isEmptyOrZeroLength(r.left.columnid)||et.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(et.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"=":!et.isEmpty(r.right.value)||!et.isEmpty(r.left.value)?n.add(et.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[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,...n])}}}_setAliasesForColumns(){if(et.isEmptyOrZeroLength(this.all_table_attributes)&&et.isEmptyOrZeroLength(this.statement.from)&&et.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&U_.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(et.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);et.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(et.isEmptyOrZeroLength(this.all_table_attributes)&&!et.isEmptyOrZeroLength(this.columns.columns))return t;if(et.isEmptyOrZeroLength(this.all_table_attributes)&&et.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await _n.promise(r)}catch(r){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ue.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(n0(n))})}_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,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(et.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(ree)>-1&&this.tables.forEach(s=>{let i={columnid:s0()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=U_.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!et.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!et.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await tu.getDataByHash(c);for(let _ of c.hash_values)d.get(_)&&!this.data[i].__merged_data[_]&&(this.data[i].__merged_data[_]=[...n[i]],this._setMergedHashAttribute(i,_))}catch(d){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(d),new Error(js)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let _={...c};_.search_value=d;let E=await tu.getDataByValue(_);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]):(this.data[i].__merged_data[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,f))}))}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(d),new Error(js)}else if(!et.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!et.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let _=0,E=d.length;_<E;_++){let f=d[_];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await tu.getDataByValue(c,f.operation);if(l)for(let[T]of h)this.data[i].__merged_data[T]||(this.data[i].__merged_data[T]=[...n[i]],this._setMergedHashAttribute(i,T));else for(let[T,m]of h)this.data[i].__merged_data[T]?this._updateMergedAttribute(i,T,s.attribute,m[s.attribute]):(this.data[i].__merged_data[T]=[...n[i]],this._updateMergedAttribute(i,T,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,T))}}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ue.error(d),new Error(js)}else try{c.search_attribute=s.attribute,c.search_value="*";let d=await tu.getDataByValue(c);if(l)for(let[_]of d)this.data[i].__merged_data[_]||(this.data[i].__merged_data[_]=[...n[i]],this._setMergedHashAttribute(i,_));else for(let[_,E]of d)this.data[i].__merged_data[_]?this._updateMergedAttribute(i,_,s.attribute,E[s.attribute]):(this.data[i].__merged_data[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,E[s.attribute]),this._setMergedHashAttribute(i,_))}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ue.error(d),new Error(js)}}}_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 _n.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(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.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 n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new _n.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new _n.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 s=t.is_func?new _n.yy.FuncValue:new _n.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,T=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${T}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${T}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let d="",_="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",_=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${_}`,h=this._convertColumnsToIndexes(f,s);E=await _n.promise(h,t),t=null}catch(f){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ue.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let T=E[f];o.forEach(m=>{T[m.key]!==null&&T[m.key]!==void 0&&m.keys.add(T[m.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),T=U_.difference(h,[...f.keys].map(m=>m.toString()));for(let m=0,g=T.length;m<g;m++){let S=T[m];delete this.data[`${f.schema}_${f.table}`].__merged_data[S]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Tp(this.columns);for(let{node:i}of s)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)&&n.push(o)}}n=U_.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw Ue.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ue.error(i),new Error(js)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let d in i)o.push(i[d][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await tu.getDataByHash(c),u=s.columns.length;for(let d=0,_=o.length;d<_;d++){let E=o[d],f=l.get(E);for(let h=0;h<u;h++){let T=s.columns[h],m=f[T]===void 0?null:f[T];this.data[n].__merged_data[E].push(m)}}}}catch(r){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ue.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(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.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 n;try{let s=this._buildSQL();Ue.trace(`Final SQL: ${s}`),n=await _n.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ue.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ue.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return Ue.error(tee.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ue.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(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${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 l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await tu.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]={...r[s]}),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw Ue.error("There was an error when processing this SQL operation. Check your logs"),Ue.error(o),new Error(js)}}return Object.values(Object.values(this.data)[0].__merged_data)}};i0.exports=jA});var $r=O((KNe,a0)=>{"use strict";var nee=GP();a0.exports={searchByConditions:iee,searchByHash:oee,searchByValue:aee,search:cee};var zA=Un(),{transformReq:QA}=te(),see=o0();async function iee(e){return QA(e),zA.searchByConditions(e)}a(iee,"searchByConditions");async function oee(e){QA(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of zA.searchByHash(e))r&&t.push(r);return t}a(oee,"searchByHash");async function aee(e){QA(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of zA.searchByValue(e))t.push(r);return t}a(aee,"searchByValue");function cee(e,t){try{let r=new nee(e);r.validate(),new see(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(cee,"search")});var gp=O((WNe,c0)=>{"use strict";var lee=Un();c0.exports={writeTransaction:uee};function uee(e,t,r){return lee.writeTransaction(e,t,r)}a(uee,"writeTransaction")});var _0=O((QNe,d0)=>{"use strict";var dee=$r(),_ee=us(),l0=K(),fee=Vr(),zNe=gp(),Eee=require("clone"),XA=require("alasql"),hee=Sp(),u0=require("util"),pee=u0.promisify(_ee.getTableSchema),mee=u0.promisify(dee.search),See=L(),JA=te();hee(XA);d0.exports={update:gee};var Tee="There was a problem performing this update. Please check the logs and try again.";async function gee({statement:e,hdb_user:t}){let r=await pee(e.table.databaseid,e.table.tableid),n=Ree(e.columns);JA.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=Eee(s),c=JA.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=XA.parse(l).statements[0],d=await mee(u),_=Aee(n,d);return yee(o,_,t)}a(gee,"update");function Ree(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=XA.compile(`SELECT ${r.expression.toString()} AS [${See.FUNC_VAL}] FROM ?`)}),t}catch(t){throw l0.error(t),new Error(Tee)}}a(Ree,"createUpdateRecord");function Aee(e,t){return JA.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Aee,"buildUpdateRecords");async function yee(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await fee.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){l0.error(`Error delete new_attributes from update response: ${i}`)}return s}a(yee,"updateRecords")});var E0=O((eIe,f0)=>{var bee=require("alasql"),Oee=$r(),Nee=K(),Iee=Un(),ey=require("util"),ZA=te(),wee=L(),Cee=us(),XNe=gp(),ZNe=Vr(),Pee="record",Dee="successfully deleted",Lee=ey.callbackify(Bee),Mee=ey.promisify(Oee.search),Uee=ey.promisify(Cee.getTableSchema);f0.exports={convertDelete:Lee};function vee(e){return`${e.deleted_hashes.length} ${Pee}${e.deleted_hashes.length===1?"":"s"} ${Dee}`}a(vee,"generateReturnMessage");async function Bee({statement:e,hdb_user:t}){let r=await Uee(e.table.databaseid,e.table.tableid);ZA.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=ZA.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=bee.parse(o).statements[0],l={operation:wee.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Mee(c);let u=await Iee.deleteRecords(l);return ZA.isEmptyOrZeroLength(u.message)&&(u.message=vee(u)),delete u.txn_time,u}catch(u){throw Nee.error(u),u.hdb_code?u.message:u}}a(Bee,"convertDelete")});var T0=O((rIe,S0)=>{"use strict";var Hee=Ri(),{hdb_errors:h0}=_e(),{getDatabases:p0}=(Pe(),oe(ut));S0.exports={checkSchemaExists:m0,checkSchemaTableExists:xee,schema_describe:Hee};async function m0(e){if(!p0()[e])return h0.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(m0,"checkSchemaExists");async function xee(e,t){let r=await m0(e);if(r)return r;if(!p0()[e][t])return h0.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(xee,"checkSchemaTableExists")});var ru=O((sIe,kee)=>{kee.exports={name:"harperdb",version:"4.4.26",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","enterprise","Fastify","NATS","HarperDB","Harper","clustering","replication","REST","WebSockets","decentralized","server-sent events","document store"],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","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:replication && 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 --no-clean --reporter=lcovonly npm run test:security && 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:replication && 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 && npm run test:security && 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","test:security":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/security/**/*.js' --config '../unitTests/.mocharc.json'","test:replication":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/replication/**/*.js' --config '../unitTests/.mocharc.json'","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",format:"prettier .","format:fix":"npm run format -- --write",lint:"eslint .","lint:fix":"npm run lint -- --fix"},dependencies:{"@aws-sdk/client-s3":"3.717.0","@aws-sdk/lib-storage":"3.717.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.10.0","@fastify/compress":"~6.5.0","@fastify/cors":"~9.0.1","@fastify/static":"~7.0.4","@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.6.0",chalk:"4.1.2",chokidar:"^4.0.3","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.29.0","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.10.0","gunzip-maybe":"1.4.2","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.2.6",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",moment:"2.30.1","mqtt-packet":"~9.0.0",msgpackr:"1.11.2",nats:"2.19.0",needle:"3.3.1","node-forge":"^1.3.1","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.3",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^1.1.0","serve-static":"2.1.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.24.5","tar-fs":"3.0.6",ulidx:"0.5.0",uuid:"10.0.0","validate.js":"0.13.1",ws:"8.18.0",yaml:"2.7.0"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"20.14.8","@typescript-eslint/eslint-plugin":"^7.18.0","@typescript-eslint/parser":"^7.18.0",axios:"1.7.5",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.24.2",eslint:"^8.57.1","eslint-config-prettier":"^9.1.0","eslint-plugin-sonarjs":"^3.0.1",eventsource:"^2.0.2","graphql-http":"^1.22.3","hook-std":"3.0.0","intercept-stdout":"0.1.2",mkcert:"1.5.1",mocha:"^11.0.1","mocha-teamcity-reporter":"^4.2.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"6.1.3","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"3.3.3",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.7.2",undici:"^6.19.8","why-is-node-still-running":"^1.0.0"},overrides:{alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","segfault-handler":"^1.3.0","utf-8-validate":"^5.0.10"}}});var k_={};je(k_,{addAnalyticsListener:()=>x_,recordAction:()=>mr,recordActionBinary:()=>qn,setAnalyticsEnabled:()=>Fee});function Fee(e){w0=e}function mr(e,t,r,n,s){if(!w0)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=yp.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let u=c;o.values=c=new Float32Array(l*2),c.set(u),c.index=l+1}c[l]=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:n,type:s},yp.set(i,o)}Rp||Gee()}function qn(e,t,r,n,s){mr(!!e,t,r,n,s)}function x_(e){D0.push(e)}function Gee(){Rp=performance.now(),setTimeout(async()=>{let e=performance.now()-Rp;Rp=0;let t=[],r={time:Date.now(),period:e,threadId:gc.threadId,metrics:t};for(let[s,i]of yp){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],d;for(let _ of L0){let E=Math.floor(c*_),f=o[E-1];if(E>l){let h=E-l;if(f===d){let T=u[u.length-1];typeof T=="number"?u[u.length-1]={value:T,count:1+h}:T.count+=h}else u.push(h>1?{value:f,count:h}:f),d=f;l=E}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,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 M0()}let n=process.memoryUsage();t.push({metric:"memory",threadId:gc.threadId,byThread:!0,...n});for(let s of D0)s(t);yp=new Map,gc.parentPort?gc.parentPort.postMessage({type:P0,report:r}):B0({report:r})},C0).unref()}async function qee(e,t=6e4){let r=ny(),n=U0(),s=new Promise(T=>{let m=performance.now();setImmediate(()=>{let g=performance.now();g-m>5e3&&(0,v_.warn)("Unusually high event queue latency on the main thread of "+Math.round(g-m)+"ms"),m=performance.now()}),n.primaryStore.prefetch([1],()=>{let g=performance.now();g-m>5e3&&(0,v_.warn)("Unusually high task queue latency on the main thread of "+Math.round(g-m)+"ms"),T(g-m)})}),i;for(let T of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(T.value?.time){i=T.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],d;for(let{key:T,value:m}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!m)continue;if(o){if(T>o+t)break}else o=T;d=T;let{metrics:g,threadId:S}=m;for(let y of g||[]){let{path:I,method:U,type:H,metric:X,count:W,total:V,distribution:se,threads:Q,...de}=y;W||(W=1);let j=X+(I?"-"+I:"");U!==void 0&&(j+="-"+U),H!==void 0&&(j+="-"+H);let ae=c.get(j);if(ae){if(ae.threads){let Ne=ae.threads[S];if(Ne)ae=Ne;else{ae.threads[S]={...de};continue}}ae.count||(ae.count=1);let Oe=ae.count;for(let Ne in de){let Me=de[Ne];typeof Me=="number"&&(ae[Ne]=(ae[Ne]*Oe+Me*W)/(Oe+W))}ae.count+=W,V>=0&&(ae.total+=V,ae.ratio=ae.total/ae.count)}else ae={period:t,...y},delete ae.distribution,c.set(j,ae),ae.byThread&&(ae.threads=[],ae.threads[S]={...de},u.push(ae));if(se){se=se.map(Ne=>typeof Ne=="number"?{value:Ne,count:1}:Ne);let Oe=l.get(j);Oe?Oe.push(...se):l.set(j,se)}}await M0()}for(let T of u){let{path:m,method:g,type:S,metric:y,count:I,total:U,distribution:H,threads:X,...W}=T;X=X.filter(V=>V);for(let V in W){if(typeof T[V]!="number")continue;let se=0;for(let Q of X){let de=Q[V];typeof de=="number"&&(se+=de)}T[V]=se}T.count=X.length,delete T.threads,delete T.byThread}for(let[T,m]of l){let g=c.get(T);m.sort((Ne,Me)=>Ne.value>Me.value?1:-1);let S=g.count-1,y=[],I=0,U=0,H;for(let Ne of L0){let Me=S*Ne;for(;I<Me;)H=m[U++],I+=H.count,U===1&&I--;let Gr=m[U>1?U-2:0];H||(H=m[0]),y.push(H.value-(H.value-Gr.value)*(I-Me)/H.count)}let[X,W,V,se,Q,de,j,ae,Oe]=y;Object.assign(g,{p1:X,p10:W,p25:V,median:se,p75:Q,p90:de,p95:j,p99:ae,p999:Oe})}let _;for(let[T,m]of c)m.id=(0,Ap.getNextMonotonicTime)(),m.time=d,n.primaryStore.put(m.id,m,{append:!0}).then(g=>{g||n.primaryStore.put(m.id,m)}),_=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(_||h*10>f){let T=(0,Ap.getNextMonotonicTime)(),m={id:T,metric:"main-thread-utilization",idle:f-g0,active:h-R0,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(T,m,{append:!0}).then(g=>{g||n.primaryStore.put(T,m)})}g0=f,R0=h}async function A0(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function ny(){return y0||(y0=pt({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function U0(){return b0||(b0=pt({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Kee(){v0=!0;let e=(0,H_.get)(ry.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await qee(C0,e),await A0(ny(),$ee),await A0(U0(),Vee)},Math.min(e/2,2147483647)).unref()}function B0(e,t){let r=e.report;r.threadId=t?.threadId||gc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(O0+=n.mean*n.count);r.totalBytesProcessed=O0,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(N0.get(t))}),N0.set(t,t.performance.eventLoopUtilization())),r.id=(0,Ap.getNextMonotonicTime)(),ny().primaryStore.put(r.id,r),v0||Kee(),Yee&&(H0=jee(r))}async function jee(e){if(await H0,!ea){let r=(0,B_.dirname)((0,v_.getLogFilePath)());try{ea=await(0,ty.open)((0,B_.join)(r,"analytics.log"),"r+")}catch{ea=await(0,ty.open)((0,B_.join)(r,"analytics.log"),"w+")}}let t=(await ea.stat()).size;if(t>Wee){let r=Buffer.alloc(t);await ea.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ea.write(r,{position:0}),await ea.truncate(r.length),t=r.length}await ea.write(JSON.stringify(e)+`
11
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw pr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}WX(n,r),kR(n);let s=n.toJSON();if(xX.config=s,zt=kl(s),zt.logging_rotation_rotate)for(let i in PL)zt[i]&&pr.error(`Config ${PL[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);pr.trace(FX)}}a(zh,"initConfig");function WX(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Bn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Bn.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(pr.trace("Updating config file with missing config params"),Yr.writeFileSync(t,String(e)))}a(WX,"checkForUpdatedConfig");function kR(e,t=!1){let r=e.toJSON();if(r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads),r.http?.port&&r.http?.port===r.http?.securePort)throw xl.CONFIG_VALIDATION("http.port and http.securePort cannot be the same value");if(r.operationsApi?.network?.port&&r.operationsApi?.network?.port===r.operationsApi?.network?.securePort)throw xl.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=MX(r,t);if(n.error)throw xl.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}a(kR,"validateConfig");function jX(e,t){zt===void 0&&(zt={});let r=qs[e.toLowerCase()];if(r===void 0){pr.trace(`Unable to update config object because config param '${e}' does not exist`);return}zt[r.toLowerCase()]=t}a(jX,"updateConfigObject");function BL(e,t,r=void 0,n=!1,s=!1,i=!1){zt===void 0&&zh();let o=vL(qs.hdb_root),c=Bn.join(o,un.HDB_CONFIG_FILE),l=Qo(c),u;if(r===void 0&&e.toLowerCase()===vn.DATABASES)u=t;else if(r===void 0){let E;if(i)E=e;else if(E=qs[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=xR(E,t);l.setIn([...f],h)}else for(let E in r){let f=qs[E.toLowerCase()];if(f===vn.HTTP_SECUREPORT&&r[E]===zt[vn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),f===vn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===zt[vn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),f===vn.DATABASES){u=r[E];continue}if(f?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),T=un.LEGACY_CONFIG_PARAMS[E.toUpperCase()];T&&T.startsWith("customFunctions")&&l.hasIn(T.split("_"))&&(f=T,h=T.split("_"));let m=xR(f,r[E]);f==="rootPath"&&m?.endsWith("/")&&(m=m.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],m)}catch(g){pr.error(g)}}}u&&UL(l,u),kR(l);let d=l.getIn(["rootPath"]),_=Bn.join(d,un.HDB_CONFIG_FILE);n===!0&&zX(c,d),Yr.writeFileSync(_,String(l)),s&&(zt=kl(l.toJSON())),pr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(BL,"updateConfigValue");function zX(e,t){try{let r=Bn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${un.HDB_CONFIG_FILE}.bak`);Yr.copySync(e,r),pr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){pr.error(GX),pr.error(r)}}a(zX,"backupConfigFile");var QX=["databases"];function kl(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network={...e.http,...e.operationsApi.network}),e?.operationsApi&&(e.operationsApi.tls={...e.tls,...e.operationsApi.tls}),jh=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!QX.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!vn[l.toUpperCase()]&&qs[l]&&(s[qs[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(kl,"flattenConfig");function xR(e,t){if(e===vn.CLUSTERING_NODENAME||e===vn.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(UX(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||hr.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 hr.autoCast(t)}a(xR,"castConfigValue");function JX(){let e=hr.getPropsFilePath(),t=dc(e);return Qo(t).toJSON()}a(JX,"getConfiguration");async function XX(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return BL(void 0,void 0,s,!0),VX}catch(i){throw typeof i=="string"||i instanceof String?BX(i,i,HX.BAD_REQUEST,void 0,void 0,!0):i}}a(XX,"setConfiguration");function FR(){let e=hr.getPropsFilePath();try{Yr.accessSync(e,Yr.constants.F_OK|Yr.constants.R_OK)}catch(n){if(!hr.noBootFile())throw pr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=dc(e);return Qo(t).toJSON()}a(FR,"readConfigFile");function Qo(e){return DL.parseDocument(Yr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Qo,"parseYamlDoc");function ZX(){let e=FR(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=hr.isEmptyOrZeroLength(t)?[]:t;let r=CL(t);if(r)throw xl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=hr.isEmptyOrZeroLength(n)?[]:n;let s=CL(n);if(s)throw xl.CONFIG_VALIDATION(s.message);if(!hr.isEmptyOrZeroLength(n)&&!hr.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!hr.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw xl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(ZX,"getClusteringRoutes");function HL(e){let t=LL(e);zt={};for(let r in qs){let n=t.get(r.toUpperCase());if(hr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=qs[r].toLowerCase();s===vn.LOGGING_ROOT?zt[s]=Bn.dirname(n):zt[s]=n}return zt}a(HL,"initOldConfig");function eZ(e){let t=FR();return vX.get(t,e.replaceAll("_","."))}a(eZ,"getConfigFromFile");async function tZ(e,t){let r=Qo(dc());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Yr.writeFile(dc(),String(r))}a(tZ,"addConfig");function rZ(e){let t=dc(hr.getPropsFilePath()),r=Qo(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Bn.join(n,un.HDB_CONFIG_FILE);Yr.writeFileSync(s,String(r))}a(rZ,"deleteConfigFromFile");function nZ(){return jh||(zh(),jh)}a(nZ,"getConfigObj");function sZ(){return zt||zh(),zt}a(sZ,"getFlatConfigObj")});var FL=O((Qye,kL)=>{"use strict";var Qh=L(),Jh=class{static{a(this,"BaseLicense")}constructor(t=0,r=Qh.RAM_ALLOCATION_ENUM.DEFAULT,n=Qh.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},GR=class extends Jh{static{a(this,"ExtendedLicense")}constructor(t=0,r=Qh.RAM_ALLOCATION_ENUM.DEFAULT,n=Qh.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};kL.exports={BaseLicense:Jh,ExtendedLicense:GR}});var _c=O((Xye,WL)=>{"use strict";var Gl=require("fs-extra"),qL=Kh(),$L=require("crypto"),iZ=require("moment"),oZ=require("uuid").v4,Wr=K(),$R=require("path"),aZ=te(),Jo=L(),{totalmem:GL}=require("os"),cZ=FL().ExtendedLicense,Fl="invalid license key format",lZ="061183",uZ="mofi25",dZ="aes-256-cbc",_Z=16,fZ=32,VL=ne(),{resolvePath:KL}=Ct();VL.initSync();var qR;WL.exports={validateLicense:YL,generateFingerPrint:hZ,licenseSearch:YR,getLicense:SZ,checkMemoryLimit:TZ};function VR(){return $R.join(VL.getHdbBasePath(),Jo.LICENSE_KEY_DIR_NAME,Jo.LICENSE_FILE_NAME)}a(VR,"getLicenseDirPath");function EZ(){let e=VR();return KL($R.join(e,Jo.LICENSE_FILE_NAME))}a(EZ,"getLicenseFilePath");function KR(){let e=VR();return KL($R.join(e,Jo.REG_KEY_FILE_NAME))}a(KR,"getFingerPrintFilePath");async function hZ(){let e=KR();try{return await Gl.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await pZ();throw Wr.error(`Error writing fingerprint file to ${e}`),Wr.error(t),new Error("There was an error generating the fingerprint")}}a(hZ,"generateFingerPrint");async function pZ(){let e=oZ(),t=qL.hash(e),r=KR();try{await Gl.mkdirp(VR()),await Gl.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Wr.error(`Error writing fingerprint file to ${r}`),Wr.error(n),new Error("There was an error generating the fingerprint")}return t}a(pZ,"writeFingerprint");function YL(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Jo.RAM_ALLOCATION_ENUM.DEFAULT,version:Jo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Wr.error("empty license key passed to validate."),r;let n=KR(),s=!1;try{s=Gl.statSync(n)}catch(i){Wr.error(i)}if(s){let i;try{i=Gl.readFileSync(n,"utf8")}catch{Wr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(uZ),c=o[1];c=Buffer.concat([Buffer.from(c)],_Z);let l=Buffer.concat([Buffer.from(i)],fZ),u=$L.createDecipheriv(dZ,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let d=null;try{d=u.update(o[0],"hex","utf8"),d.trim(),d+=u.final("utf8")}catch{let f=mZ(o[0],i);if(f)d=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Fl),Wr.error(Fl),new Error(Fl)}let _;if(isNaN(d))try{_=JSON.parse(d),r.version=_.version,r.exp_date=_.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),_.ram_allocation&&(r.ram_allocation=_.ram_allocation)}catch{throw console.error(Fl),Wr.error(Fl),new Error(Fl)}else r.exp_date=d;r.exp_date<iZ().valueOf()&&(r.valid_date=!1),qL.validate(o[1],`${lZ}${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||Wr.error("Invalid licence"),r}a(YL,"validateLicense");function mZ(e,t){try{let r=$L.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Wr.warn("Check old license failed")}}a(mZ,"checkOldLicense");function YR(){let e=new cZ,t=[];try{t=Gl.readFileSync(EZ(),"utf-8").split(Jo.NEW_LINE)}catch(r){r.code==="ENOENT"?Wr.debug("no license file found"):Wr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(aZ.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=YL(s.license_key,s.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(s){Wr.error("There was an error parsing the license string."),Wr.error(s),e.ram_allocation=Jo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return qR=e,e}a(YR,"licenseSearch");async function SZ(){return qR||await YR(),qR}a(SZ,"getLicense");function TZ(){let e=YR().ram_allocation,t=process.constrainedMemory?.()||GL();if(t=Math.round(Math.min(t,GL())/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(TZ,"checkMemoryLimit")});var xn=O((nbe,lM)=>{"use strict";var JL="username is required",XL="nothing to update, must supply active, role or password to update",ZL="password cannot be an empty string",eM="If role is specified, it cannot be empty.",tM="active must be true or false";lM.exports={addUser:wZ,alterUser:CZ,dropUser:DZ,getSuperUser:vZ,userInfo:LZ,listUsers:Zh,listUsersExternal:MZ,setUsersToGlobal:$l,findAndValidateUser:aM,getClusterUser:BZ,USERNAME_REQUIRED:JL,ALTERUSER_NOTHING_TO_UPDATE:XL,EMPTY_PASSWORD:ZL,EMPTY_ROLE:eM,ACTIVE_BOOLEAN:tM};var rM=Vr(),gZ=zo(),zR=Kh(),nM=TL(),sM=$r(),QR=to(),Hn=te(),iM=require("validate.js"),Ke=K(),{promisify:RZ}=require("util"),JR=eo(),jL=L(),zL=ft(),AZ=Ct(),ebe=ne(),tbe=_c(),yZ=Xi(),{table:rbe}=(Pe(),oe(ut)),{handleHDBError:yi,hdb_errors:bZ}=_e(),{HTTP_STATUS_CODES:bi,AUTHENTICATION_ERROR_MSGS:WR,HDB_ERROR_MSGS:ql}=bZ,{UserEventMsg:XR}=$s(),jR=require("lodash"),{server:ZR}=(qr(),oe(Ja)),OZ=K();ZR.getUser=(e,t)=>aM(e,t,t!=null);var oM={username:!0,active:!0,role:!0,password:!0},QL=new Map,Xh=sM.searchByValue,NZ=sM.searchByHash,IZ=RZ(gZ.delete);async function wZ(e){let t=iM.cleanAttributes(e,oM),r=nM.addUserValidation(t);if(r)throw yi(new Error,r.message,bi.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await Xh(n),s=s&&Array.from(s)}catch(l){throw Ke.error("There was an error searching for a role in add user"),Ke.error(l),l}if(!s||s.length<1)throw yi(new Error,ql.ROLE_NAME_NOT_FOUND(t.role),bi.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw yi(new Error,ql.DUP_ROLES_FOUND(t.role),bi.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=JR.encrypt(t.password)),t.password=zR.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await rM.insert(i)}catch(l){throw Ke.error("There was an error searching for a user."),Ke.error(l),l}Ke.debug(o);try{await $l()}catch(l){throw Ke.error("Got an error setting users to global"),Ke.error(l),l}if(o.skipped_hashes.length===1)throw yi(new Error,ql.USER_ALREADY_EXISTS(t.username),bi.CONFLICT,void 0,void 0,!0);let c={...t};return c.role=s[0],QR.signalUserChange(new XR(process.pid)),`${c.username} successfully added`}a(wZ,"addUser");async function CZ(e){let t=iM.cleanAttributes(e,oM);if(Hn.isEmptyOrZeroLength(t.username))throw new Error(JL);if(Hn.isEmptyOrZeroLength(t.password)&&Hn.isEmptyOrZeroLength(t.role)&&Hn.isEmptyOrZeroLength(t.active))throw new Error(XL);if(!Hn.isEmpty(t.password)&&Hn.isEmptyOrZeroLength(t.password.trim()))throw new Error(ZL);if(!Hn.isEmpty(t.active)&&!Hn.isBoolean(t.active))throw new Error(tM);let r=PZ(t.username);if(!Hn.isEmpty(t.password)&&!Hn.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=JR.encrypt(t.password)),t.password=zR.hash(t.password)),t.role==="")throw new Error(eM);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 Xh(i)||[])}catch(c){throw Ke.error("Got an error searching for a role."),Ke.error(c),c}if(!o||o.length===0){let c=ql.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ke.error(c),yi(new Error,c,bi.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=ql.ALTER_USER_DUP_ROLES(t.role);throw Ke.error(c),yi(new Error,c,bi.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await rM.update(n)}catch(i){throw Ke.error("Error during update."),Ke.error(i),i}try{await $l()}catch(i){throw Ke.error("Got an error setting users to global"),Ke.error(i),i}return QR.signalUserChange(new XR(process.pid)),s}a(CZ,"alterUser");function PZ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(PZ,"isClusterUser");async function DZ(e){try{let t=nM.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Hn.isEmpty(global.hdb_users.get(e.username)))throw yi(new Error,ql.USER_NOT_EXIST(e.username),bi.NOT_FOUND,void 0,void 0,!0);let n;try{n=await IZ(r)}catch(s){throw Ke.error("Got an error deleting a user."),Ke.error(s),s}Ke.debug(n);try{await $l()}catch(s){throw Ke.error("Got an error setting users to global."),Ke.error(s),s}return QR.signalUserChange(new XR(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(DZ,"dropUser");async function LZ(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=jR.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await NZ(r)}catch(s){throw Ke.error("Got an error searching for a role."),Ke.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ke.error(r),r}return t}a(LZ,"userInfo");async function MZ(){let e;try{e=await Zh()}catch(t){throw Ke.error("Got an error listing users."),Ke.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(MZ,"listUsersExternal");async function Zh(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Xh(e)}catch(o){throw Ke.error("Got an error searching for roles."),Ke.error(o),o}let r={};for(let o of t)r[o.id]=jR.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await Xh(n)}catch(o){throw Ke.error("Got an error searching for users."),Ke.error(o),o}let i=new Map;for(let o of s)o=jR.cloneDeep(o),o.role=r[o.role],UZ(o.role),i.set(o.username,o);return i}catch(e){throw Ke.error("got an error listing users"),Ke.error(e),Hn.errorizeMessage(e)}return null}a(Zh,"listUsers");function UZ(e){try{if(!e){Ke.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(yZ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ke.error("Got an error trying to set system permissions."),Ke.error(t)}}a(UZ,"appendSystemTablesToRole");async function $l(){try{let e=await Zh();global.hdb_users=e}catch(e){throw Ke.error(e),e}}a($l,"setUsersToGlobal");async function aM(e,t,r=!0){global.hdb_users||await $l();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw yi(new Error,WR.GENERIC_AUTH_FAIL,bi.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw yi(new Error,WR.USER_INACTIVE,bi.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(QL.get(t)===n.password)return s;if(zR.validate(n.password,t))QL.set(t,n.password);else throw yi(new Error,WR.GENERIC_AUTH_FAIL,bi.UNAUTHORIZED,void 0,void 0,!0)}return s}a(aM,"findAndValidateUser");async function vZ(){global.hdb_users||await $l();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(vZ,"getSuperUser");async function BZ(){let e=await Zh(),t=AZ.getConfigFromFile(jL.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Hn.isEmpty(r)&&r?.role?.role===jL.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=JR.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+zL.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+zL.SERVER_SUFFIX.ADMIN,r}a(BZ,"getClusterUser");var cM=[];ZR.invalidateUser=function(e){for(let t of cM)try{t(e)}catch(r){OZ.error("Error invalidating user",r)}};ZR.onInvalidatedUser=function(e){cM.push(e)}});var T_=O((abe,fM)=>{"use strict";var fc=K(),kn=L(),HZ=FD(),ibe=us(),obe=Ri(),xZ=xn(),{validateEvent:uM}=$s(),S_=Un(),kZ=require("process"),{resetDatabases:FZ}=(Pe(),oe(ut)),GZ={[kn.ITC_EVENT_TYPES.SCHEMA]:qZ,[kn.ITC_EVENT_TYPES.USER]:_M};async function qZ(e){let t=uM(e);if(t){fc.error(t);return}fc.trace("ITC schemaHandler received schema event:",e),await HZ(e.message),await $Z(e.message)}a(qZ,"schemaHandler");async function $Z(e){try{S_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),S_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),S_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=FZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){fc.error(t)}}a($Z,"syncSchemaMetadata");var dM=[];async function _M(e){try{try{S_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),S_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){fc.warn(r)}let t=uM(e);if(t){fc.error(t);return}fc.trace(`ITC userHandler ${kn.HDB_ITC_CLIENT_PREFIX}${kZ.pid} received user event:`,e),await xZ.setUsersToGlobal();for(let r of dM)r()}catch(t){fc.error(t)}}a(_M,"userHandler");_M.addListener=function(e){dM.push(e)};fM.exports=GZ});var $s=O((fbe,hM)=>{"use strict";var lbe=K(),eA=te(),VZ=L(),{ITC_ERRORS:g_}=Pn(),{parentPort:ube,threadId:KZ,isMainThread:YZ,workerData:dbe}=require("worker_threads"),{onMessageFromWorkers:WZ,broadcast:_be,broadcastWithAcknowledgement:jZ}=ot();hM.exports={sendItcEvent:zZ,validateEvent:EM,SchemaEventMsg:QZ,UserEventMsg:JZ};var ep;WZ(async(e,t)=>{ep=ep||T_(),EM(e),ep[e.type]&&await ep[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function zZ(e){return!YZ&&e.message&&(e.message.originator=KZ),jZ(e)}a(zZ,"sendItcEvent");function EM(e){if(typeof e!="object")return g_.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||eA.isEmpty(e.type))return g_.MISSING_TYPE;if(!e.hasOwnProperty("message")||eA.isEmpty(e.message))return g_.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||eA.isEmpty(e.message.originator))return g_.MISSING_ORIGIN;if(VZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return g_.INVALID_EVENT(e.type)}a(EM,"validateEvent");function QZ(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(QZ,"SchemaEventMsg");function JZ(e){this.originator=e}a(JZ,"UserEventMsg")});var to=O((pbe,TM)=>{"use strict";var pM=L(),hbe=te(),tp=K(),mM=HD(),Vl,{sendItcEvent:SM}=$s();function XZ(e){try{tp.info("signalSchemaChange called with message:",e),Vl=Vl||T_();let t=new mM(pM.ITC_EVENT_TYPES.SCHEMA,e);return Vl.schema(t),SM(t)}catch(t){tp.error(t)}}a(XZ,"signalSchemaChange");function ZZ(e){try{tp.trace("signalUserChange called with message:",e),Vl=Vl||T_();let t=new mM(pM.ITC_EVENT_TYPES.USER,e);return Vl.user(t),SM(t)}catch(t){tp.error(t)}}a(ZZ,"signalUserChange");TM.exports={signalSchemaChange:XZ,signalUserChange:ZZ}});var rp=O((Sbe,RM)=>{"use strict";var gM=te(),e5=L(),t5=K(),r5=Bh(),n5=vh(),s5=to(),{SchemaEventMsg:i5}=$s(),o5="already exists in";RM.exports=a5;async function a5(e,t,r){if(gM.isEmptyOrZeroLength(r))return r;let n=[];gM.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await c5(e,t.schema,t.name,i)})),s}a(a5,"lmdbCheckForNewAttributes");async function c5(e,t,r,n){let s=new n5(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await l5(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(o5))t5.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(c5,"createNewAttribute");async function l5(e){let t;return t=await r5(e),s5.signalSchemaChange(new i5(process.pid,e5.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(l5,"createAttribute")});var Kl=O((gbe,AM)=>{"use strict";var tA=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};AM.exports=tA});var bM=O((Abe,yM)=>{"use strict";var u5=Kl(),d5=L().OPERATIONS_ENUM,rA=class extends u5{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(d5.INSERT,r,n,s,i),this.records=t}};yM.exports=rA});var NM=O((bbe,OM)=>{"use strict";var _5=Kl(),f5=L().OPERATIONS_ENUM,nA=class extends _5{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(f5.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};OM.exports=nA});var wM=O((Nbe,IM)=>{"use strict";var E5=Kl(),h5=L().OPERATIONS_ENUM,sA=class extends E5{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(h5.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};IM.exports=sA});var PM=O((wbe,CM)=>{"use strict";var p5=Kl(),m5=L().OPERATIONS_ENUM,iA=class extends p5{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(m5.DELETE,n,s,t,i),this.original_records=r}};CM.exports=iA});var R_=O((Dbe,UM)=>{"use strict";var Pbe=require("path"),DM=mt(),S5=bM(),T5=NM(),g5=wM(),R5=PM(),Yl=Ht(),LM=te(),{CONFIG_PARAMS:A5}=L(),MM=ne();MM.initSync();var np=L().OPERATIONS_ENUM,{getTransactionAuditStorePath:y5}=Rt();UM.exports=b5;async function b5(e,t){if(MM.get(A5.LOGGING_AUDITLOG)===!1)return;let r=y5(e.schema,e.table),n=await DM.openEnvironment(r,e.table,!0),s=O5(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){DM.initializeDBIs(n,Yl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Yl.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Yl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Yl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),LM.isEmpty(s.user_name)||n.dbis[Yl.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Yl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(b5,"writeTransaction");function O5(e,t){let r=LM.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===np.INSERT)return new S5(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===np.UPDATE)return new T5(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===np.UPSERT)return new g5(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===np.DELETE)return new R5(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(O5,"createTransactionObject")});var oA=O((Ube,vM)=>{"use strict";var N5=f_(),Mbe=Qd(),A_=L(),I5=Jd(),w5=nc().insertRecords,C5=mt(),P5=K(),D5=rp(),{getSchemaPath:L5}=Rt(),M5=R_();vM.exports=U5;async function U5(e){try{let{schema_table:t,attributes:r}=N5(e);I5(e,r,t.hash_attribute),e.schema!==A_.SYSTEM_SCHEMA_NAME&&(r.includes(A_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(A_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(A_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(A_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await D5(e.hdb_auth_header,t,r),s=L5(e.schema,e.table),i=await C5.openEnvironment(s,e.table),o=await w5(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await M5(e,o)}catch(c){P5.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:n,txn_time:o.txn_time}}catch(t){throw t}}a(U5,"lmdbCreateRecords")});var xM=O((Bbe,HM)=>{"use strict";var BM=L(),v5=oA(),B5=Qd(),H5=require("fs-extra"),{getSchemaPath:x5}=Rt();HM.exports=k5;async function k5(e){let t=[{name:e.schema,createddate:Date.now()}],r=new B5(BM.SYSTEM_SCHEMA_NAME,BM.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await v5(r),await H5.mkdirp(x5(e.schema))}a(k5,"lmdbCreateSchema")});var FM=O((xbe,kM)=>{"use strict";var aA=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};kM.exports=aA});var VM=O(($be,$M)=>{"use strict";var GM=mt(),cA=on(),lA=Pn().LMDB_ERRORS_ENUM,F5=Ht(),qM=K(),Fbe=te(),G5=require("lmdb"),q5=FM(),$5=L(),{OVERFLOW_MARKER:Gbe,MAX_SEARCH_KEY_LENGTH:qbe}=F5,V5=$5.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function K5(e,t,r,n){if(cA.validateEnv(e),t===void 0)throw new Error(lA.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(lA.IDS_REQUIRED):new Error(lA.IDS_MUST_BE_ITERABLE);try{let s=GM.listDBIs(e);GM.initializeDBIs(e,t,s);let i=new q5,o,c=[],l=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||n&&h[V5]>n){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,G5.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let m=0;m<s.length;m++){let g=s[m];if(!h.hasOwnProperty(g)||g===t)continue;let S=e.dbis[g],y=h[g];if(y!=null)try{let I=cA.getIndexedValues(y);if(I)for(let U=0,H=I.length;U<H;U++)S.remove(I[U],o)}catch{qM.warn(`cannot delete from attribute: ${g}, ${y}:${o}`)}}});c.push(T),l.push(o),i.original_records.push(h)}catch(h){qM.warn(h),i.skipped.push(o)}let u=[],d=await Promise.all(c);for(let E=0,f=d.length;E<f;E++)d[E]===!0?i.deleted.push(l[E]):(i.skipped.push(l[E]),u.push(E));let _=0;for(let E=0;E<u.length;E++){let f=u[E];i.original_records.splice(f-_,1),_++}return i.txn_time=cA.getNextMonotonicTime(),i}catch(s){throw s}}a(K5,"deleteRecords");$M.exports={deleteRecords:K5}});var y_=O((Kbe,YM)=>{"use strict";var Wl=te(),Y5=VM(),W5=mt(),{getSchemaPath:j5}=Rt(),z5=R_(),Q5=K();YM.exports=J5;async function J5(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Wl.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Wl.isEmptyOrZeroLength(e.hash_values)&&!Wl.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Wl.isEmpty(l)||e.hash_values.push(l)}}if(Wl.isEmptyOrZeroLength(e.hash_values))return KM([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Wl.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=j5(e.schema,e.table),i=await W5.openEnvironment(s,e.table),o=await Y5.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await z5(e,o)}catch(c){Q5.error(`unable to write transaction due to ${c.message}`)}return KM(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(J5,"lmdbDeleteRecords");function KM(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(KM,"createDeleteResponse")});var dA=O((jbe,WM)=>{"use strict";var X5=L(),Wbe=on();function uA(e,t){let r=Object.create(null);if(t.length===1&&X5.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(uA,"parseRow");function Z5(e,t,r,n){let s=uA(r,e);n.push(s)}a(Z5,"searchAll");function e6(e,t,r,n){let s=uA(r,e);n[t]=s}a(e6,"searchAllToMap");function t6(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(t6,"iterateDBI");function Ec(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(Ec,"pushResults");function r6(e,t,r,n,s,i){t.toString().endsWith(e)&&Ec(t,r,n,s,i)}a(r6,"endsWith");function n6(e,t,r,n,s,i){t.toString().includes(e)&&Ec(t,r,n,s,i)}a(n6,"contains");function s6(e,t,r,n,s,i){t>e&&Ec(t,r,n,s,i)}a(s6,"greaterThanCompare");function i6(e,t,r,n,s,i){t>=e&&Ec(t,r,n,s,i)}a(i6,"greaterThanEqualCompare");function o6(e,t,r,n,s,i){t<e&&Ec(t,r,n,s,i)}a(o6,"lessThanCompare");function a6(e,t,r,n,s,i){t<=e&&Ec(t,r,n,s,i)}a(a6,"lessThanEqualCompare");WM.exports={parseRow:uA,searchAll:Z5,searchAllToMap:e6,iterateDBI:t6,endsWith:r6,contains:n6,greaterThanCompare:s6,greaterThanEqualCompare:i6,lessThanCompare:o6,lessThanEqualCompare:a6,pushResults:Ec}});var jl=O((Zbe,eU)=>{"use strict";var Xo=mt(),Qbe=K(),Fn=on(),sp=Ht(),Qt=Pn().LMDB_ERRORS_ENUM,Jbe=te(),c6=L(),ip=dA(),{parseRow:l6}=ip,Xbe=require("lmdb"),{OVERFLOW_MARKER:jM,MAX_SEARCH_KEY_LENGTH:u6}=sp;function zM(e,t,r,n=!1,s=void 0,i=void 0){return hc(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(zM,"iterateFullIndex");function b_(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return hc(e,t,r,(d,_,E,f)=>{let S={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return f===r?(S.values=!1,_.getRange(S).map(y=>({value:y}))):_.getRange(S)})}a(b_,"iterateRangeBetween");function hc(e,t,r,n){let s=e.database||e,i=Xo.openDBI(s,r);i[sp.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Xo.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(hc,"setupTransaction");function QM(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(jM)){if(!s)if(r)s=Xo.openDBI(e,r);else{let l=Xo.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Xo.openDBI(e,l[u]),!s[sp.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(QM,"getOverflowCheck");function d6(e,t,r,n=!1,s=void 0,i=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);return hc(e,t,t,(o,c,l)=>(op(r),r=O_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>l6(u.value,r))))}a(d6,"searchAll");function _6(e,t,r,n=!1,s=void 0,i=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);op(r),r=O_(e.database||e,r);let o=new Map;for(let{key:c,value:l}of zM(e,t,t,n,s,i))o.set(c,ip.parseRow(l,r));return o}a(_6,"searchAllToMap");function f6(e,t,r=!1,n=void 0,s=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=zM(e,void 0,t,r,n,s),c=o.transaction,l=QM(c.database,c,void 0,t);for(let{key:u,value:d}of o){let _=l(u,d);i[_]===void 0&&(i[_]=[]),i[_].push(d)}return i}a(f6,"iterateDBI");function E6(e,t){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);return Xo.statDBI(e,t).entryCount}a(E6,"countAll");function h6(e,t,r,n,s=!1,i=void 0,o=void 0){return Zo(e,r,n),hc(e,t,r,(c,l,u,d)=>(n=Fn.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(_=>({key:n,value:_}))))}a(h6,"equals");function p6(e,t,r){return Zo(e,t,r),Xo.openDBI(e,t).getValuesCount(r)}a(p6,"count");function m6(e,t,r,n,s=!1,i=void 0,o=void 0){return Zo(e,r,n),hc(e,null,r,(c,l)=>{n=Fn.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let _;for(let E of l.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){_=E;break}return _!==void 0&&(Number.isInteger(o)?o++:i++),d=l.getRange({transaction:c,start:_,end:void 0,reverse:s,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==_){if(f.toString().startsWith(n))return E;if(u===!0)return d.DONE}}),d.filter(E=>E)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(_=>{if(_.key.toString().startsWith(n))return _;if(u===!0)return d.DONE}),u?d:d.filter(_=>_)})}a(m6,"startsWith");function S6(e,t,r,n,s=!1,i=void 0,o=void 0){return JM(e,t,r,n,s,i,o,!0)}a(S6,"endsWith");function JM(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Zo(e,r,n),hc(e,null,r,(l,u,d,_)=>{let E=QM(d,l,_,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(jM)?u.getValues(f,{transaction:l}).map(T=>{let m=E(f,T);if(c?m.endsWith(n):m.includes(n))return{key:m,value:T}}).filter(T=>T):(c?h.endsWith(n):h.includes(n))?u[sp.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:u.getValues(f,{transaction:l}).map(T=>({key:f,value:T})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(JM,"contains");function T6(e,t,r,n,s=!1,i=void 0,o=void 0){Zo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),b_(e,t,r,n,l,s,i,o,!0,!1)}a(T6,"greaterThan");function g6(e,t,r,n,s=!1,i=void 0,o=void 0){Zo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),b_(e,t,r,n,l,s,i,o,!1,!1)}a(g6,"greaterThanEqual");function R6(e,t,r,n,s=!1,i=void 0,o=void 0){Zo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),b_(e,t,r,l,n,s,i,o,!1,!0)}a(R6,"lessThan");function A6(e,t,r,n,s=!1,i=void 0,o=void 0){Zo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),b_(e,t,r,l,n,s,i,o,!1,!1)}a(A6,"lessThanEqual");function y6(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Fn.validateEnv(e),r===void 0)throw new Error(Qt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Qt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Qt.END_VALUE_REQUIRED);if(n=Fn.convertKeyValueToWrite(n),s=Fn.convertKeyValueToWrite(s),n>s)throw new Error(Qt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return b_(e,t,r,n,s,i,o,c)}a(y6,"between");function b6(e,t,r,n){Fn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);if(op(r),r=O_(s,r),n===void 0)throw new Error(Qt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=ip.parseRow(c,r)),o}a(b6,"searchByHash");function O6(e,t,r){Fn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Qt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(O6,"checkHashExists");function N6(e,t,r,n,s=[]){return ZM(e,t,r,n,s),XM(e,t,r,n,s).map(i=>i[1])}a(N6,"batchSearchByHash");function I6(e,t,r,n,s=[]){ZM(e,t,r,n,s);let i=new Map;for(let[o,c]of XM(e,t,r,n,s))i.set(o,c);return i}a(I6,"batchSearchByHashToMap");function XM(e,t,r,n,s=[]){return hc(e,t,t,(i,o,c)=>{r=O_(c,r);let l=r.length<3;return n.map(u=>{let d=c.dbis[t].get(u,{transaction:i,lazy:l});if(d)return[u,ip.parseRow(d,r)];s.push(u)}).filter(u=>u)})}a(XM,"batchHashSearch");function ZM(e,t,r,n,s){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);if(op(r),n==null)throw new Error(Qt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Qt.IDS_MUST_BE_ITERABLE)}a(ZM,"initializeBatchSearchByHash");function op(e){if(!Array.isArray(e))throw e===void 0?new Error(Qt.FETCH_ATTRIBUTES_REQUIRED):new Error(Qt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(op,"validateFetchAttributes");function Zo(e,t,r){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Qt.SEARCH_VALUE_REQUIRED);if(r?.length>u6)throw new Error(Qt.SEARCH_VALUE_TOO_LARGE)}a(Zo,"validateComparisonFunctions");function O_(e,t){return t.length===1&&c6.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Xo.listDBIs(e)),t}a(O_,"setGetWholeRowAttributes");eU.exports={searchAll:d6,searchAllToMap:_6,count:p6,countAll:E6,equals:h6,startsWith:m6,endsWith:S6,contains:JM,searchByHash:b6,setGetWholeRowAttributes:O_,batchSearchByHash:N6,batchSearchByHashToMap:I6,checkHashExists:O6,iterateDBI:f6,greaterThan:T6,greaterThanEqual:g6,lessThan:R6,lessThanEqual:A6,between:y6}});var zl=O((tOe,iU)=>{var tU=require("lodash"),rU=_t(),xe=require("joi"),w6=te(),{hdb_schema_table:N_,checkValidTable:nU,hdb_table:sU,hdb_database:ap}=Ti(),{handleHDBError:C6,hdb_errors:P6}=_e(),{getDatabases:D6}=(Pe(),oe(ut)),{HTTP_STATUS_CODES:L6}=P6,M6=xe.object({database:ap,schema:ap,table:sU,search_attribute:N_,search_value:xe.any().required(),get_attributes:xe.array().min(1).items(xe.alternatives(N_,xe.object())).optional(),desc:xe.bool(),limit:xe.number().integer().min(1),offset:xe.number().integer().min(0)}),U6=xe.object({database:ap,schema:ap,table:sU,operator:xe.string().valid("and","or").default("and").lowercase(),offset:xe.number().integer().min(0),limit:xe.number().integer().min(1),get_attributes:xe.array().min(1).items(xe.alternatives(N_,xe.object())).optional(),sort:xe.object({attribute:xe.alternatives(N_,xe.array().min(1)),descending:xe.bool().optional()}).optional(),conditions:xe.array().min(1).items(xe.alternatives(xe.object({operator:xe.string().valid("and","or").default("and").lowercase(),conditions:xe.array()}),xe.object({search_attribute:xe.alternatives(N_,xe.array().min(1)),search_type:xe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:xe.when("search_type",{switch:[{is:"equals",then:xe.any()},{is:"between",then:xe.array().items(xe.alternatives([xe.string(),xe.number()])).length(2)}],otherwise:xe.alternatives(xe.string(),xe.number())}).required()}))).required()});iU.exports=function(e,t){let r=null;switch(t){case"value":r=rU.validateBySchema(e,M6);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(nU("database",e.schema)),i(nU("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"),s&&(r=new Error(s.trim()));break;case"conditions":r=rU.validateBySchema(e,U6);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=w6.checkGlobalSchemaTable(e.schema,e.table);if(s)return C6(new Error,s,L6.NOT_FOUND);let o=D6()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(d=>{for(let _=0,E=d.conditions.length;_<E;_++){let f=d.conditions[_];f.conditions?l(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=tU.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!tU.some(o,_=>_===d||_.attribute===d||_.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var _A=O((nOe,oU)=>{"use strict";var v6=mt(),B6=zl(),{getSchemaPath:H6}=Rt();oU.exports=x6;function x6(e){let t=B6(e,"hashes");if(t)throw t;let r=H6(e.schema,e.table);return v6.openEnvironment(r,e.table)}a(x6,"initialize")});var fA=O((iOe,aU)=>{"use strict";var k6=jl(),F6=_A();aU.exports=G6;async function G6(e){let t=await F6(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return k6.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(G6,"lmdbGetDataByHash")});var Ql=O((aOe,cU)=>{"use strict";var EA=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};cU.exports=EA});var uU=O((uOe,lU)=>{"use strict";var lOe=Ql(),q6=jl(),$6=_A();lU.exports=V6;async function V6(e){let t=await $6(e),r=global.hdb_schema[e.schema][e.table];return q6.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(V6,"lmdbSearchByHash")});var Vs=O((_Oe,dU)=>{"use strict";var hA=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};dU.exports=hA});var cp=O((EOe,mU)=>{"use strict";var jr=jl(),K6=mt(),Y6=te(),ke=Ht(),pc=L(),W6=Xi(),_U=Pn().LMDB_ERRORS_ENUM,{getSchemaPath:j6}=Rt(),ro=pc.SEARCH_WILDCARDS;async function z6(e,t,r){let n;e.schema===pc.SYSTEM_SCHEMA_NAME?n=W6[e.table]:n=global.hdb_schema[e.schema][e.table];let s=pU(e,n.hash_attribute,r,t);return EU(e,s,n.hash_attribute,r)}a(z6,"prepSearch");async function EU(e,t,r,n){let s=j6(e.schema,e.table),i=await K6.openEnvironment(s,e.table),o=hU(i,e,t,r),c=o.transaction||i;if([ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ke.SEARCH_TYPES.SEARCH_ALL,ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(Q6(e,r)===!1){let d=e.search_attribute;if(d===r)return n?fU(o,()=>!0):o.map(E=>({[r]:E.key}));let _=a(E=>({[r]:E.value,[d]:E.key}),"toObject");return n?fU(o,_):o.map(_)}let u=e.search_attribute===r?o.map(d=>d.key):o.map(d=>d.value);return n===!0?jr.batchSearchByHashToMap(c,r,e.get_attributes,u):jr.batchSearchByHash(c,r,e.get_attributes,u)}a(EU,"executeSearch");function hU(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case ke.SEARCH_TYPES.EQUALS:s=jr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.CONTAINS:s=jr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.ENDS_WITH:case ke.SEARCH_TYPES._ENDS_WITH:s=jr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.STARTS_WITH:case ke.SEARCH_TYPES._STARTS_WITH:s=jr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return jr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return jr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.SEARCH_ALL:return jr.searchAll(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return jr.searchAllToMap(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.BETWEEN:s=jr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case ke.SEARCH_TYPES.GREATER_THAN:case ke.SEARCH_TYPES._GREATER_THAN:s=jr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.GREATER_THAN_EQUAL:case ke.SEARCH_TYPES._GREATER_THAN_EQUAL:s=jr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.LESS_THAN:case ke.SEARCH_TYPES._LESS_THAN:s=jr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.LESS_THAN_EQUAL:case ke.SEARCH_TYPES._LESS_THAN_EQUAL:s=jr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(hU,"searchByType");function fU(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(fU,"createMapFromIterable");function Q6(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 n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(Q6,"checkToFetchMore");function pU(e,t,r,n){if(Y6.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),ro.indexOf(s)>-1)return r===!0?ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ke.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(ro[0])<0&&s.indexOf(ro[1])<0)return c===!0?r===!0?ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ke.SEARCH_TYPES.EQUALS;if(ro.indexOf(i)>=0&&ro.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ke.SEARCH_TYPES.CONTAINS;if(ro.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ke.SEARCH_TYPES.ENDS_WITH;if(ro.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ke.SEARCH_TYPES.STARTS_WITH;if(s.includes(ro[0])||s.includes(ro[1]))return ke.SEARCH_TYPES.EQUALS;throw new Error(_U.UNKNOWN_SEARCH_TYPE)}else switch(n){case pc.VALUE_SEARCH_COMPARATORS.BETWEEN:return ke.SEARCH_TYPES.BETWEEN;case pc.VALUE_SEARCH_COMPARATORS.GREATER:return ke.SEARCH_TYPES.GREATER_THAN;case pc.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ke.SEARCH_TYPES.GREATER_THAN_EQUAL;case pc.VALUE_SEARCH_COMPARATORS.LESS:return ke.SEARCH_TYPES.LESS_THAN;case pc.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ke.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(_U.UNKNOWN_SEARCH_TYPE)}}a(pU,"createSearchTypeFromSearchObject");mU.exports={executeSearch:EU,createSearchTypeFromSearchObject:pU,prepSearch:z6,searchByType:hU}});var TU=O((mOe,SU)=>{"use strict";var pOe=Vs(),J6=zl(),X6=te(),Z6=L(),e8=cp();SU.exports=t8;function t8(e,t){if(!X6.isEmpty(t)&&Z6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=J6(e,"value");if(n)throw n;return e8.prepSearch(e,t,!0)}a(t8,"lmdbGetDataByValue")});var I_=O((gOe,gU)=>{"use strict";var TOe=Vs(),r8=zl(),n8=te(),s8=L(),i8=cp();gU.exports=o8;async function o8(e,t){if(!n8.isEmpty(t)&&s8.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=r8(e,"value");if(n)throw n;return i8.prepSearch(e,t,!1)}a(o8,"lmdbSearchByValue")});var AU=O((yOe,RU)=>{"use strict";var AOe=Ht(),pA=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},mA=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},SA=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};RU.exports={SearchByConditionsObject:pA,SearchCondition:mA,SortAttribute:SA}});var IU=O((IOe,NU)=>{"use strict";var OOe=AU().SearchByConditionsObject,a8=Vs(),c8=zl(),TA=jl(),lp=Ht(),{Resource:NOe}=(Ks(),oe(gA)),OU=cp(),l8=dA(),u8=require("lodash"),{getSchemaPath:d8}=Rt(),yU=mt(),{handleHDBError:_8,hdb_errors:f8}=_e(),{HTTP_STATUS_CODES:E8}=f8,h8=1e8;NU.exports=p8;async function p8(e){let t=c8(e,"conditions");if(t)throw _8(t,t.message,E8.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=d8(e.schema,e.table),n=await yU.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)yU.openDBI(n,u.search_attribute);let i=u8.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.search_type;d===lp.SEARCH_TYPES.EQUALS?u.estimated_count=TA.count(n,u.search_attribute,u.search_value):d===lp.SEARCH_TYPES.CONTAINS||d===lp.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=h8}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await bU(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(OU.filterByType),_=d.length,E=TA.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(f=>u.get(f,{transaction:o,lazy:!0})),_>0&&(l=l.filter(f=>{for(let h=0;h<_;h++)if(!d[h](f))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(f=>l8.parseRow(f,E))}else{for(let _=1;_<i.length;_++){let E=i[_],f=await bU(o,e,E,s.hash_attribute);c=c.concat(f)}let u=new Set,d=e.offset||0;c=c.filter(_=>u.has(_)?!1:(u.add(_),!0)).slice(d,e.limit&&e.limit+d),l=TA.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(p8,"lmdbSearchByConditions");async function bU(e,t,r,n){let s=new a8(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===lp.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,OU.searchByType(e,s,i,n).map(o=>o.value)}a(bU,"executeConditionSearch")});var Jl=O((COe,wU)=>{"use strict";var m8=L().OPERATIONS_ENUM,RA=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=m8.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};wU.exports=RA});var AA=O((DOe,BU)=>{"use strict";var LU=Vs(),MU=Jl(),UU=I_(),vU=y_(),dn=L(),CU=te(),PU=mt(),{getTransactionAuditStorePath:S8,getSchemaPath:T8}=Rt(),DU=K();BU.exports=g8;async function g8(e){try{if(CU.isEmpty(global.hdb_schema[e.schema])||CU.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await R8(e),await A8(e);let t=T8(e.schema,e.table);try{await PU.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")DU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=S8(e.schema,e.table);await PU.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")DU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(g8,"lmdbDropTable");async function R8(e){let t=new LU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await UU(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new MU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await vU(s)}a(R8,"deleteAttributesFromSystem");async function A8(e){let t=new LU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await UU(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&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new MU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await vU(s)}catch(i){throw i}}a(A8,"dropTableFromSystem")});var xU=O((MOe,HU)=>{"use strict";var y8=require("fs-extra"),b8=Vs(),O8=Ql(),N8=Jl(),I8=AA(),w8=y_(),C8=fA(),P8=I_(),no=L(),{getSchemaPath:D8}=Rt(),{handleHDBError:L8,hdb_errors:M8}=_e(),{HDB_ERROR_MSGS:U8,HTTP_STATUS_CODES:v8}=M8;HU.exports=B8;async function B8(e){let t;try{t=await H8(e.schema);let r=new b8(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await P8(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await I8(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new N8(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await w8(s);let i=D8(t);await y8.remove(i)}catch(r){throw r}}a(B8,"lmdbDropSchema");async function H8(e){let t=new O8(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await C8(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw L8(new Error,U8.SCHEMA_NOT_FOUND(e),v8.NOT_FOUND,void 0,void 0,!0);return n}a(H8,"validateDropSchema")});var Xl=O((vOe,kU)=>{"use strict";var yA=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};kU.exports=yA});var OA=O((xOe,FU)=>{"use strict";var x8=require("fs-extra"),up=mt(),{getTransactionAuditStorePath:k8}=Rt(),bA=Ht(),HOe=Xl();FU.exports=F8;async function F8(e){let t;try{let r=k8(e.schema,e.table);await x8.mkdirp(r),t=await up.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{up.createDBI(t,bA.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),up.createDBI(t,bA.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),up.createDBI(t,bA.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(F8,"createTransactionsAuditEnvironment")});var $U=O((GOe,qU)=>{"use strict";var NA=L(),GU=mt(),G8=nc(),{getSystemSchemaPath:q8,getSchemaPath:$8}=Rt(),FOe=Xi(),V8=Bh(),IA=vh(),K8=K(),Y8=OA();qU.exports=W8;async function W8(e,t){let r=$8(t.schema,t.table),n=new IA(t.schema,t.table,NA.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new IA(t.schema,t.table,NA.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new IA(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await GU.createEnvironment(r,t.table),e!==void 0){let o=await GU.openEnvironment(q8(),NA.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await G8.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_table_attributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await wA(n),await wA(s),await wA(i)}await Y8(t)}catch(o){throw o}}a(W8,"lmdbCreateTable");async function wA(e){try{await V8(e)}catch(t){K8.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(wA,"createAttribute")});var KU=O(($Oe,VU)=>{"use strict";var j8=f_(),z8=Jd(),Q8=rp(),w_=L(),J8=nc().updateRecords,X8=mt(),{getSchemaPath:Z8}=Rt(),e9=R_(),t9=K();VU.exports=r9;async function r9(e){try{let{schema_table:t,attributes:r}=j8(e);z8(e,r,t.hash_attribute),e.schema!==w_.SYSTEM_SCHEMA_NAME&&(r.includes(w_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(w_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(w_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(w_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Q8(e.hdb_auth_header,t,r),s=Z8(e.schema,e.table),i=await X8.openEnvironment(s,e.table),o=await J8(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await e9(e,o)}catch(c){t9.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:n,txn_time:o.txn_time}}catch(t){throw t}}a(r9,"lmdbUpdateRecords")});var WU=O((KOe,YU)=>{"use strict";var n9=L().OPERATIONS_ENUM,CA=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=n9.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};YU.exports=CA});var zU=O((jOe,jU)=>{"use strict";var WOe=WU(),s9=f_(),i9=Jd(),o9=rp(),C_=L(),a9=nc().upsertRecords,c9=mt(),{getSchemaPath:l9}=Rt(),u9=R_(),d9=K(),{handleHDBError:_9,hdb_errors:f9}=_e();jU.exports=E9;async function E9(e){let t;try{t=s9(e)}catch(l){throw _9(l,l.message,f9.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;i9(e,n,r.hash_attribute),e.schema!==C_.SYSTEM_SCHEMA_NAME&&(n.includes(C_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(C_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(C_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(C_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await o9(e.hdb_auth_header,r,n),i=l9(e.schema,e.table),o=await c9.openEnvironment(i,e.table),c=await a9(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await u9(e,c)}catch(l){d9.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(E9,"lmdbUpsertRecords")});var JU=O((QOe,QU)=>{"use strict";var PA=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};QU.exports=PA});var ZU=O((XOe,XU)=>{"use strict";var DA=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};XU.exports=DA});var rv=O((tNe,tv)=>{"use strict";var LA=mt(),{getTransactionAuditStorePath:h9}=Rt(),eNe=JU(),P_=Ht(),p9=te(),ev=ZU(),m9=require("util").promisify,S9=m9(setTimeout),T9=1e4,g9=100;tv.exports=R9;async function R9(e){let t=h9(e.schema,e.table),r=await LA.openEnvironment(t,e.table,!0),n=LA.listDBIs(r);LA.initializeDBIs(r,P_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new ev;do s=await A9(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await S9(g9);while(s.transactions_deleted>0);return i}a(R9,"deleteAuditLogsBefore");async function A9(e,t){let r=new ev;try{let n=e.dbis[P_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[P_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];p9.isEmpty(c)||(s=e.dbis[P_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[P_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>T9)break}return await s,r}catch(n){throw n}}a(A9,"deleteTransactions")});var sv=O((nNe,nv)=>{"use strict";var MA=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};nv.exports=MA});var ov=O((oNe,iv)=>{"use strict";var y9=Vs(),b9=Jl(),iNe=sv(),Oi=L(),O9=te(),UA=mt(),N9=Xi(),I9=I_(),w9=y_(),{getSchemaPath:C9}=Rt();iv.exports=P9;async function P9(e,t=!0){let r;e.schema===Oi.SYSTEM_SCHEMA_NAME?r=N9[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await L9(e),s=C9(e.schema,e.table),i=await UA.openEnvironment(s,e.table);return t===!0&&await D9(e,i,r.hash_attribute),UA.dropDBI(i,e.attribute),n}a(P9,"lmdbDropAttribute");async function D9(e,t,r){let n=UA.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(o,u,l)}await s}a(D9,"removeAttributeFromAllObjects");async function L9(e){let t=new y9(Oi.SYSTEM_SCHEMA_NAME,Oi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await I9(t)).filter(o=>o[Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(O9.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new b9(Oi.SYSTEM_SCHEMA_NAME,Oi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return w9(i)}a(L9,"dropAttributeFromSystem")});var _v=O((lNe,dv)=>{"use strict";var vA=mt(),Zl=Ht(),cNe=on(),BA=L(),av=te(),{getTransactionAuditStorePath:M9}=Rt(),U9=jl(),dp=Kl(),v9=K();dv.exports=B9;async function B9(e){let t=M9(e.schema,e.table),r=await vA.openEnvironment(t,e.table,!0),n=vA.listDBIs(r);vA.initializeDBIs(r,Zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case BA.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return cv(r,e.search_values);case BA.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,x9(r,e.search_values,s);case BA.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return H9(r,e.search_values);default:return cv(r)}}a(B9,"readAuditLog");function cv(e,t=[0,Date.now()]){av.isEmpty(t[0])&&(t[0]=0),av.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new dp,s))}a(cv,"searchTransactionsByTimestamp");function H9(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[Zl.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,uv(e,i))}return Object.fromEntries(r)}a(H9,"searchTransactionsByUsername");function x9(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=U9.equals(e,Zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Zl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:_}of d){let E=Number(_);n.has(E)?n.get(E).push(u.toString()):n.set(E,[u.toString()])}}let s=Array.from(n.keys()),i=uv(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);lv(l,"records",r,d,o),lv(l,"original_records",r,d,o)}return Object.fromEntries(o)}a(x9,"searchTransactionsByHashValues");function lv(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let _=new dp(e.operation,e.user_name,i,void 0);_[t]=[c],u.push(_)}}else{let u=new dp(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(lv,"loopRecords");function uv(e,t){let r=[];try{let n=e.dbis[Zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new dp,i);r.push(o)}}catch(i){v9.warn(i)}return r}catch(n){throw n}}a(uv,"batchSearchTransactions")});var Ev=O((fNe,fv)=>{"use strict";var{getSchemaPath:dNe}=Rt(),_Ne=mt(),{database:k9}=(Pe(),oe(ut));fv.exports={writeTransaction:F9};async function F9(e,t,r){return k9({database:e,table:t}).transaction(r)}a(F9,"writeTransaction")});var Sv=O((hNe,mv)=>{"use strict";var{getSchemaPath:hv}=Rt(),pv=mt();mv.exports={flush:G9,resetReadTxn:q9};async function G9(e,t){return(await pv.openEnvironment(hv(e,t),t.toString())).flushed}a(G9,"flush");async function q9(e,t){try{(await pv.openEnvironment(hv(e,t),t.toString())).resetReadTxn()}catch{}}a(q9,"resetReadTxn")});var Av=O((mNe,Rv)=>{"use strict";var{Readable:$9}=require("stream"),{getDatabases:V9}=(Pe(),oe(ut)),{readSync:K9,openSync:Y9,createReadStream:Tv}=require("fs"),{open:W9}=require("lmdb"),gv=o_(),j9=a_(),{AUDIT_STORE_OPTIONS:z9}=(Qi(),oe(yv)),{INTERNAL_DBIS_NAME:Q9,AUDIT_STORE_NAME:J9}=Ht();Rv.exports=Z9;var HA=32768,X9=100;async function Z9(e){let t=e.database||e.schema||"data",r=V9()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let d=u.dbisDB,_=W9({noSync:!0,maxDbs:j9.MAX_DBS}),E,f=_.openDB(Q9,new gv(!1)),h=d.useReadTransaction(),T=0,m=a(async function(S,y){y.encoding="binary",y.encoder=void 0;let I=_.openDB(S,y),U=d.openDB(S,y);for(let{key:H,version:X,value:W}of U.getRange({start:null,transaction:h,versions:U.useVersions}))E=I.put(H,W,X),T++%X9===0&&(await new Promise(V=>setTimeout(V,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:y}of d.getRange({transaction:h,start:!1}))if(s.some(I=>S.startsWith?.(I+"/"))){f.put(S,y);let[,I]=S.split("/"),U=!I,H=new gv(!U,U);await m(S,H)}e.include_audit&&await m(J9,{...z9}),await E;let g=Tv(_.path);return g.headers=l(),g.on("close",()=>{h.done(),_.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=Y9(o.path);return o.transaction(()=>{let u=Buffer.alloc(HA);K9(c,u,0,HA),o.resetReadTxn();let d=o.useReadTransaction();d.renew();let _=Tv(null,{fd:c,start:HA}),E=new $9.from(async function*(){yield u;for await(let f of _)d.openTimer&&(d.openTimer=0),yield f;d.done()}());return E.headers=l(),E});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}a(Z9,"getBackup")});var Nv=O((TNe,Ov)=>{"use strict";var e7=K(),{handleHDBError:t7}=_e(),r7=$P(),n7=Bh(),s7=oA(),i7=xM(),o7=y_(),a7=fA(),c7=uU(),l7=TU(),u7=I_(),d7=IU(),_7=xU(),f7=$U(),E7=KU(),h7=zU(),p7=rv(),m7=AA(),S7=ov(),T7=_v(),g7=Ev(),bv=Sv(),R7=Av(),xA=class extends r7{static{a(this,"LMDBBridge")}async searchByConditions(t){return d7(t)}async getDataByHash(t){return await a7(t)}async searchByHash(t){return await c7(t)}async getDataByValue(t,r){return await l7(t,r)}async searchByValue(t){return await u7(t)}async createSchema(t){return await i7(t)}async dropSchema(t){return await _7(t)}async createTable(t,r){return await f7(t,r)}async dropTable(t){return await m7(t)}async createAttribute(t){return await n7(t)}async createRecords(t){return await s7(t)}async updateRecords(t){return await E7(t)}async upsertRecords(t){try{return await h7(t)}catch(r){throw t7(r,null,null,e7.ERR,r)}}async deleteRecords(t){return await o7(t)}async dropAttribute(t){return await S7(t)}async deleteAuditLogsBefore(t){return await p7(t)}async readAuditLog(t){return await T7(t)}writeTransaction(t,r,n){return g7.writeTransaction(t,r,n)}flush(t,r){return bv.flush(t,r)}resetReadTxn(t,r){return bv.resetReadTxn(t,r)}getBackup(t){return R7(t)}};Ov.exports=xA});function Uv(e){FA=e}function O7(){b7=setInterval(function(){for(let e of kA)if(e.stale){let t=e[Fe]?.url;Pv.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},y7).unref()}var GA,Cv,Pv,Dv,Lv,Mv,Iv,kA,A7,D_,wv,FA,mc,_p,y7,b7,fp=Ie(()=>{GA=M(on()),Cv=M(_e()),Pv=M(K());Ks();Dv=M(ne()),Lv=M(L()),Mv=M(te()),Iv=100,kA=new Set,A7=(0,Mv.convertToMS)(Dv.get(Lv.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3;a(Uv,"replicationConfirmation");mc=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;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.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),kA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(kA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(D_&&!this.overloadChecked&&performance.now()-wv>A7)throw new Cv.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}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||(0,GA.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let _=this.validated;this.validated=this.writes.length;for(let f=_;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let E;for(let f=_;f<this.validated;f++){let h=this.writes[f];h&&(h.before||h.beforeIntermediate)&&(E=!0)}if(E)return(async()=>{try{for(let f=0;f<2;f++){let h;for(let T=_;T<this.validated;T++){let m=this.writes[T];if(!m)continue;let g=m[f===0?"before":"beforeIntermediate"];if(g){let S=g();h?h.push?h.push(S):h=[h,S]:h=S}}h&&await(h.push?Promise.all(h):h)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(_){throw this.abort(),_}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(_=>_);let c=a(_=>{_.commit(r,_.entry,n)},"doWrite"),l=a(()=>{let _=this.writes[o++];if(_)if(_.key){n>0&&(_.entry=_.store.getEntry(_.key));let E=_.store.ifVersion(_.key,_.entry?.version??null,l);s=s||E}else l();else for(let E of this.writes)c(E)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<Iv>>n?l():s=this.writes[0].store.transaction(()=>{for(let _ of this.writes)_.entry=_.store.getEntry(_.key),c(_);return!0})),s)return D_||(D_=s,wv=performance.now(),D_.then(()=>{D_=null})),s.then(_=>{if(_){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let E=this.writes[0].store.rootStore.databaseName,f=this.writes[this.writes.length-1];FA&&f&&i.push(FA(E,f.store.getEntry(f.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+Iv/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let d={txnTime:r};if(this.next){let _=this.next?.commit(t);if(_?.then)return _?.then(E=>({txnTime:r,next:E}));d.next=_}return d}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},_p=class extends mc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,GA.getNextMonotonicTime)())}getReadTxn(){}},y7=3e4;a(O7,"startMonitoringTxns");O7()});function Pt(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 n=e.transaction=new mc;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n[Fe]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({letItLinger:r?.letItLinger});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var vv,Sc=Ie(()=>{vv=M(Ei());Ks();fp();a(Pt,"transaction");(0,vv._assignPackageExport)("transaction",Pt);Pt.commit=function(e){let t=(e[Fe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Pt.abort=function(e){let t=(e[Fe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var $v={};je($v,{ResourceBridge:()=>VA});function KA({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 Hv(e,t){let r=Ni(e),n=KA(e,r);if(!r)throw new Ys.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},o;Pt(i,()=>new Promise(u=>o=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&hp(d)}catch(_){d={message:_.toString()}}return t?{value:{key:u,value:d}}:{value:d}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function Ni(e){let t=e.database||e.schema||I7,r=dt()[t];if(!r)throw(0,Ys.handleHDBError)(new Error,N7.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function xv(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*kv(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var Fv,Ep,Ys,Gv,Ws,qA,$A,qv,N7,I7,w7,C7,Bv,VA,Vv=Ie(()=>{"use strict";Fv=M(Nv()),Ep=M(zl()),Ys=M(_e());Pe();Gv=M(f_()),Ws=M(L()),qA=M(to()),$A=M($s()),qv=M(te());Sc();pp();({HDB_ERROR_MSGS:N7}=Ys.hdb_errors),I7="data",w7=1e4,C7=10,VA=class extends Fv.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Bv=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,Ep.default)(t,"conditions");if(r)throw(0,Ys.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Ni(t);if(!n)throw new Ys.ClientError(`Table ${t.table} not found`);let s=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"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:KA(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Ys.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}pt({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Ni(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Ni(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(u=>{if(!u){let{value:d,version:_}=r.primaryStore.getEntry(o);return i(o,d,_)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Ni(t).dropTable()}createSchema(t){return eu({database:t.schema,table:null}),qA.signalSchemaChange(new $A.SchemaEventMsg(process.pid,Ws.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await YA(t.schema),qA.signalSchemaChange(new $A.SchemaEventMsg(process.pid,Ws.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,Bv.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,Gv.default)(t),s,i=dt()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(o.replicateTo=t.replicateTo),t.replicatedConfirmation&&(o.replicatedConfirmation=t.replicatedConfirmation),Pt(o,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(E=>E.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let _=d[i.primaryKey],E=_!=null&&await i.get(_,o);if(t.requires_existing&&!E||t.requires_no_existing&&E){u.push(d[i.primaryKey]);continue}E&&(E=hp(E));for(let f in d)if(Object.prototype.hasOwnProperty.call(d,f)){let h=d[f];if(typeof h=="function")try{let T=h([[E]]);Array.isArray(T)&&(h=T[0].func_val,d[f]=h)}catch(T){throw T.message+="Trying to set key "+f+" on object"+JSON.stringify(d),T}}if(E)for(let f in E)Object.prototype.hasOwnProperty.call(d,f)||(d[f]=E[f]);await(_==null?i.create(d,o):i.put(d,o)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=dt()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),Pt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return xv(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=dt()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ys.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:Ws.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),o.push(...d.skipped_hashes),await(0,qv.async_set_timeout)(C7),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%w7===0&&await u();return l.length>0&&await u(),s?xv(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Ep.default)(t,"hashes");if(r)throw r;return Hv(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Hv(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Ws.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 n=(0,Ep.default)(t,"value");if(n)throw n;let s=Ni(t);if(!s)throw new Ys.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===Ws.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:KA(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Ni(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){Ni({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Ni(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Ni(t),n={};switch(t.search_type){case Ws.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.operation??o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case Ws.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of kv(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return kv(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(KA,"getSelect");a(Hv,"getRecords");a(Ni,"getTable");a(xv,"createDeleteResponse");a(kv,"groupRecordsInHistory")});var Un=O((UNe,Kv)=>{"use strict";var{ResourceBridge:P7}=(Vv(),oe($v)),D7=ne();D7.initSync();var mp;function L7(){return mp||(mp=new P7,mp)}a(L7,"getBridge");Kv.exports=L7()});var zv=O((BNe,jv)=>{"use strict";var Yv=require("lodash"),L_=require("mathjs"),M7=require("jsonata"),Wv=te();jv.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?Yv.uniqWith(e,Yv.isEqual):e,"distinct_array"),searchJSON:U7,mad:M_.bind(null,L_.mad),mean:M_.bind(null,L_.mean),mode:M_.bind(null,L_.mode),prod:M_.bind(null,L_.prod),median:M_.bind(null,L_.median)};function M_(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(M_,"aggregateFunction");function U7(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(Wv.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Wv.isEmpty(this.__ala__.res[r])){let n=M7(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(U7,"searchJSON")});var Jv=O((xNe,Qv)=>{"use strict";var sr=require("moment"),WA="YYYY-MM-DDTHH:mm:ss.SSSZZ";sr.suppressDeprecationWarnings=!0;Qv.exports={current_date:a(()=>sr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>sr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return sr(e).utc().format("YYYY");case"month":return sr(e).utc().format("MM");case"day":return sr(e).utc().format("DD");case"hour":return sr(e).utc().format("HH");case"minute":return sr(e).utc().format("mm");case"second":return sr(e).utc().format("ss");case"millisecond":return sr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>sr(e).utc().format(WA),"date"),date_format:a((e,t)=>sr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>sr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>sr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=sr(e).utc(),s=sr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>sr().utc().valueOf(),"now"),get_server_time:a(()=>sr().format(WA),"get_server_time"),offset_utc:a((e,t)=>sr(e).utc().utcOffset(t).format(WA),"offset_utc")}});var t0=O((FNe,e0)=>{"use strict";var v7=require("@turf/area"),B7=require("@turf/length"),H7=require("@turf/circle"),x7=require("@turf/difference"),k7=require("@turf/distance"),F7=require("@turf/boolean-contains"),G7=require("@turf/boolean-equal"),q7=require("@turf/boolean-disjoint"),$7=require("@turf/helpers"),Xv=L(),$e=te(),so=K();e0.exports={geoArea:V7,geoLength:K7,geoCircle:Y7,geoDifference:W7,geoDistance:Zv,geoNear:j7,geoContains:z7,geoEqual:Q7,geoCrosses:J7,geoConvert:X7};function V7(e){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return v7.default(e)}catch(t){return so.trace(t,e),NaN}}a(V7,"geoArea");function K7(e,t){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return B7.default(e,{units:t||"kilometers"})}catch(r){return so.trace(r,e),NaN}}a(K7,"geoLength");function Y7(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return H7.default(e,t,{units:r||"kilometers"})}catch(n){return so.trace(n,e,t),NaN}}a(Y7,"geoCircle");function W7(e,t){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return x7(e,t)}catch(r){return so.trace(r,e,t),NaN}}a(W7,"geoDifference");function Zv(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return k7.default(e,t,{units:r||"kilometers"})}catch(n){return so.trace(n,e,t),NaN}}a(Zv,"geoDistance");function j7(e,t,r,n){if($e.isEmpty(e)||$e.isEmpty(t))return!1;if($e.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return Zv(e,t,n)<=r}catch(s){return so.trace(s,e,t),!1}}a(j7,"geoNear");function z7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return F7.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(z7,"geoContains");function Q7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return G7.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(Q7,"geoEqual");function J7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return!q7.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(J7,"geoCrosses");function X7(e,t,r){if($e.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if($e.isEmpty(t))throw new Error("geo_type is required");if($e.isEmpty(Xv.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Xv.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=$e.autoCastJSON(e)),$7[t](e,r)}a(X7,"geoConvert")});var Sp=O((qNe,r0)=>{var Tc=zv(),Gn=Jv(),Ii=t0();r0.exports=e=>{e.aggr.mad=e.aggr.MAD=Tc.mad,e.aggr.mean=e.aggr.MEAN=Tc.mean,e.aggr.mode=e.aggr.MODE=Tc.mode,e.aggr.prod=e.aggr.PROD=Tc.prod,e.aggr.median=e.aggr.MEDIAN=Tc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Tc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Tc.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Gn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Gn.current_time,e.fn.extract=e.fn.EXTRACT=Gn.extract,e.fn.date=e.fn.DATE=Gn.date,e.fn.date_format=e.fn.DATE_FORMAT=Gn.date_format,e.fn.date_add=e.fn.DATE_ADD=Gn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Gn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Gn.date_diff,e.fn.now=e.fn.NOW=Gn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Gn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Gn.get_server_time,e.fn.getdate=e.fn.GETDATE=Gn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Gn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Ii.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ii.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ii.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ii.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ii.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ii.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ii.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ii.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ii.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ii.geoNear}});var o0=O(($Ne,i0)=>{"use strict";var U_=require("lodash"),_n=require("alasql");_n.options.cache=!1;var Z7=Sp(),n0=require("clone"),Tp=require("recursive-iterator"),Ue=K(),et=te(),tu=Un(),eee=L(),{hdb_errors:tee}=_e(),{getDatabases:s0}=(Pe(),oe(ut)),ree="IS NULL",js="There was a problem performing this search. Please check the logs and try again.";Z7(_n);var jA=class{static{a(this,"SQLSearch")}constructor(t,r){if(et.isEmpty(t))throw Ue.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(),et.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!et.isEmptyOrZeroLength(n))return Ue.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ue.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ue.error(n),new Error(js)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ue.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ue.error(n),new Error(js)}if(Object.keys(this.data).length===0)return Ue.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ue.error("Error thrown from processJoins in SQLSearch class method search."),Ue.error(n),new Error(js)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ue.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ue.error(n),new Error(js)}try{return t=await this._finalSQL(),t}catch(n){throw Ue.error("Error thrown from finalSQL in SQLSearch class method search."),Ue.error(n),new Error(js)}}_getColumns(){let t=new Tp(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(n0(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=U_.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=s0()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(et.isEmpty(this.statement.where)){Ue.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Tp(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!et.isEmpty(r)&&r.right)if(et.isNotEmptyAndHasValue(r.right.value)){let n=et.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new _n.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=et.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new _n.yy.LogicValue({value:i}):n instanceof _n.yy.StringValue&&et.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new _n.yy.NumValue({value:i}))});if(t){Ue.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Tp(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!et.isEmpty(eee.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(et.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(et.isEmptyOrZeroLength(r.left.columnid)||et.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(et.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"=":!et.isEmpty(r.right.value)||!et.isEmpty(r.left.value)?n.add(et.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[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,...n])}}}_setAliasesForColumns(){if(et.isEmptyOrZeroLength(this.all_table_attributes)&&et.isEmptyOrZeroLength(this.statement.from)&&et.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&U_.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(et.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);et.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(et.isEmptyOrZeroLength(this.all_table_attributes)&&!et.isEmptyOrZeroLength(this.columns.columns))return t;if(et.isEmptyOrZeroLength(this.all_table_attributes)&&et.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await _n.promise(r)}catch(r){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ue.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(n0(n))})}_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,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(et.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(ree)>-1&&this.tables.forEach(s=>{let i={columnid:s0()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=U_.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!et.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!et.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await tu.getDataByHash(c);for(let _ of c.hash_values)d.get(_)&&!this.data[i].__merged_data[_]&&(this.data[i].__merged_data[_]=[...n[i]],this._setMergedHashAttribute(i,_))}catch(d){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(d),new Error(js)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let _={...c};_.search_value=d;let E=await tu.getDataByValue(_);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]):(this.data[i].__merged_data[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,f))}))}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(d),new Error(js)}else if(!et.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!et.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let _=0,E=d.length;_<E;_++){let f=d[_];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await tu.getDataByValue(c,f.operation);if(l)for(let[T]of h)this.data[i].__merged_data[T]||(this.data[i].__merged_data[T]=[...n[i]],this._setMergedHashAttribute(i,T));else for(let[T,m]of h)this.data[i].__merged_data[T]?this._updateMergedAttribute(i,T,s.attribute,m[s.attribute]):(this.data[i].__merged_data[T]=[...n[i]],this._updateMergedAttribute(i,T,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,T))}}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ue.error(d),new Error(js)}else try{c.search_attribute=s.attribute,c.search_value="*";let d=await tu.getDataByValue(c);if(l)for(let[_]of d)this.data[i].__merged_data[_]||(this.data[i].__merged_data[_]=[...n[i]],this._setMergedHashAttribute(i,_));else for(let[_,E]of d)this.data[i].__merged_data[_]?this._updateMergedAttribute(i,_,s.attribute,E[s.attribute]):(this.data[i].__merged_data[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,E[s.attribute]),this._setMergedHashAttribute(i,_))}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ue.error(d),new Error(js)}}}_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 _n.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(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.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 n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new _n.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new _n.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 s=t.is_func?new _n.yy.FuncValue:new _n.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,T=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${T}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${T}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let d="",_="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",_=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${_}`,h=this._convertColumnsToIndexes(f,s);E=await _n.promise(h,t),t=null}catch(f){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ue.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let T=E[f];o.forEach(m=>{T[m.key]!==null&&T[m.key]!==void 0&&m.keys.add(T[m.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),T=U_.difference(h,[...f.keys].map(m=>m.toString()));for(let m=0,g=T.length;m<g;m++){let S=T[m];delete this.data[`${f.schema}_${f.table}`].__merged_data[S]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Tp(this.columns);for(let{node:i}of s)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)&&n.push(o)}}n=U_.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw Ue.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ue.error(i),new Error(js)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let d in i)o.push(i[d][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await tu.getDataByHash(c),u=s.columns.length;for(let d=0,_=o.length;d<_;d++){let E=o[d],f=l.get(E);for(let h=0;h<u;h++){let T=s.columns[h],m=f[T]===void 0?null:f[T];this.data[n].__merged_data[E].push(m)}}}}catch(r){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ue.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(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.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 n;try{let s=this._buildSQL();Ue.trace(`Final SQL: ${s}`),n=await _n.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ue.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ue.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return Ue.error(tee.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ue.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(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${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 l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await tu.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]={...r[s]}),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw Ue.error("There was an error when processing this SQL operation. Check your logs"),Ue.error(o),new Error(js)}}return Object.values(Object.values(this.data)[0].__merged_data)}};i0.exports=jA});var $r=O((KNe,a0)=>{"use strict";var nee=GP();a0.exports={searchByConditions:iee,searchByHash:oee,searchByValue:aee,search:cee};var zA=Un(),{transformReq:QA}=te(),see=o0();async function iee(e){return QA(e),zA.searchByConditions(e)}a(iee,"searchByConditions");async function oee(e){QA(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of zA.searchByHash(e))r&&t.push(r);return t}a(oee,"searchByHash");async function aee(e){QA(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of zA.searchByValue(e))t.push(r);return t}a(aee,"searchByValue");function cee(e,t){try{let r=new nee(e);r.validate(),new see(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(cee,"search")});var gp=O((WNe,c0)=>{"use strict";var lee=Un();c0.exports={writeTransaction:uee};function uee(e,t,r){return lee.writeTransaction(e,t,r)}a(uee,"writeTransaction")});var _0=O((QNe,d0)=>{"use strict";var dee=$r(),_ee=us(),l0=K(),fee=Vr(),zNe=gp(),Eee=require("clone"),XA=require("alasql"),hee=Sp(),u0=require("util"),pee=u0.promisify(_ee.getTableSchema),mee=u0.promisify(dee.search),See=L(),JA=te();hee(XA);d0.exports={update:gee};var Tee="There was a problem performing this update. Please check the logs and try again.";async function gee({statement:e,hdb_user:t}){let r=await pee(e.table.databaseid,e.table.tableid),n=Ree(e.columns);JA.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=Eee(s),c=JA.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=XA.parse(l).statements[0],d=await mee(u),_=Aee(n,d);return yee(o,_,t)}a(gee,"update");function Ree(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=XA.compile(`SELECT ${r.expression.toString()} AS [${See.FUNC_VAL}] FROM ?`)}),t}catch(t){throw l0.error(t),new Error(Tee)}}a(Ree,"createUpdateRecord");function Aee(e,t){return JA.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Aee,"buildUpdateRecords");async function yee(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await fee.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){l0.error(`Error delete new_attributes from update response: ${i}`)}return s}a(yee,"updateRecords")});var E0=O((eIe,f0)=>{var bee=require("alasql"),Oee=$r(),Nee=K(),Iee=Un(),ey=require("util"),ZA=te(),wee=L(),Cee=us(),XNe=gp(),ZNe=Vr(),Pee="record",Dee="successfully deleted",Lee=ey.callbackify(Bee),Mee=ey.promisify(Oee.search),Uee=ey.promisify(Cee.getTableSchema);f0.exports={convertDelete:Lee};function vee(e){return`${e.deleted_hashes.length} ${Pee}${e.deleted_hashes.length===1?"":"s"} ${Dee}`}a(vee,"generateReturnMessage");async function Bee({statement:e,hdb_user:t}){let r=await Uee(e.table.databaseid,e.table.tableid);ZA.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=ZA.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=bee.parse(o).statements[0],l={operation:wee.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Mee(c);let u=await Iee.deleteRecords(l);return ZA.isEmptyOrZeroLength(u.message)&&(u.message=vee(u)),delete u.txn_time,u}catch(u){throw Nee.error(u),u.hdb_code?u.message:u}}a(Bee,"convertDelete")});var T0=O((rIe,S0)=>{"use strict";var Hee=Ri(),{hdb_errors:h0}=_e(),{getDatabases:p0}=(Pe(),oe(ut));S0.exports={checkSchemaExists:m0,checkSchemaTableExists:xee,schema_describe:Hee};async function m0(e){if(!p0()[e])return h0.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(m0,"checkSchemaExists");async function xee(e,t){let r=await m0(e);if(r)return r;if(!p0()[e][t])return h0.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(xee,"checkSchemaTableExists")});var ru=O((sIe,kee)=>{kee.exports={name:"harperdb",version:"4.4.27",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","enterprise","Fastify","NATS","HarperDB","Harper","clustering","replication","REST","WebSockets","decentralized","server-sent events","document store"],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","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:replication && 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 --no-clean --reporter=lcovonly npm run test:security && 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:replication && 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 && npm run test:security && 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","test:security":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/security/**/*.js' --config '../unitTests/.mocharc.json'","test:replication":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/replication/**/*.js' --config '../unitTests/.mocharc.json'","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",format:"prettier .","format:fix":"npm run format -- --write",lint:"eslint .","lint:fix":"npm run lint -- --fix"},dependencies:{"@aws-sdk/client-s3":"3.717.0","@aws-sdk/lib-storage":"3.717.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.10.0","@fastify/compress":"~6.5.0","@fastify/cors":"~9.0.1","@fastify/static":"~7.0.4","@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.6.0",chalk:"4.1.2",chokidar:"^4.0.3","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.29.0","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.10.0","gunzip-maybe":"1.4.2","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.2.6",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",moment:"2.30.1","mqtt-packet":"~9.0.0",msgpackr:"1.11.2",nats:"2.19.0",needle:"3.3.1","node-forge":"^1.3.1","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.3",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^1.1.0","serve-static":"2.1.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.24.5","tar-fs":"3.0.6",ulidx:"0.5.0",uuid:"10.0.0","validate.js":"0.13.1",ws:"8.18.0",yaml:"2.7.0"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"20.14.8","@typescript-eslint/eslint-plugin":"^7.18.0","@typescript-eslint/parser":"^7.18.0",axios:"1.7.5",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.24.2",eslint:"^8.57.1","eslint-config-prettier":"^9.1.0","eslint-plugin-sonarjs":"^3.0.1",eventsource:"^2.0.2","graphql-http":"^1.22.3","hook-std":"3.0.0","intercept-stdout":"0.1.2",mkcert:"1.5.1",mocha:"^11.0.1","mocha-teamcity-reporter":"^4.2.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"6.1.3","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"3.3.3",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.7.2",undici:"^6.19.8","why-is-node-still-running":"^1.0.0"},overrides:{alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","segfault-handler":"^1.3.0","utf-8-validate":"^5.0.10"}}});var k_={};je(k_,{addAnalyticsListener:()=>x_,recordAction:()=>mr,recordActionBinary:()=>qn,setAnalyticsEnabled:()=>Fee});function Fee(e){w0=e}function mr(e,t,r,n,s){if(!w0)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=yp.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let u=c;o.values=c=new Float32Array(l*2),c.set(u),c.index=l+1}c[l]=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:n,type:s},yp.set(i,o)}Rp||Gee()}function qn(e,t,r,n,s){mr(!!e,t,r,n,s)}function x_(e){D0.push(e)}function Gee(){Rp=performance.now(),setTimeout(async()=>{let e=performance.now()-Rp;Rp=0;let t=[],r={time:Date.now(),period:e,threadId:gc.threadId,metrics:t};for(let[s,i]of yp){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],d;for(let _ of L0){let E=Math.floor(c*_),f=o[E-1];if(E>l){let h=E-l;if(f===d){let T=u[u.length-1];typeof T=="number"?u[u.length-1]={value:T,count:1+h}:T.count+=h}else u.push(h>1?{value:f,count:h}:f),d=f;l=E}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,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 M0()}let n=process.memoryUsage();t.push({metric:"memory",threadId:gc.threadId,byThread:!0,...n});for(let s of D0)s(t);yp=new Map,gc.parentPort?gc.parentPort.postMessage({type:P0,report:r}):B0({report:r})},C0).unref()}async function qee(e,t=6e4){let r=ny(),n=U0(),s=new Promise(T=>{let m=performance.now();setImmediate(()=>{let g=performance.now();g-m>5e3&&(0,v_.warn)("Unusually high event queue latency on the main thread of "+Math.round(g-m)+"ms"),m=performance.now()}),n.primaryStore.prefetch([1],()=>{let g=performance.now();g-m>5e3&&(0,v_.warn)("Unusually high task queue latency on the main thread of "+Math.round(g-m)+"ms"),T(g-m)})}),i;for(let T of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(T.value?.time){i=T.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],d;for(let{key:T,value:m}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!m)continue;if(o){if(T>o+t)break}else o=T;d=T;let{metrics:g,threadId:S}=m;for(let y of g||[]){let{path:I,method:U,type:H,metric:X,count:W,total:V,distribution:se,threads:Q,...de}=y;W||(W=1);let j=X+(I?"-"+I:"");U!==void 0&&(j+="-"+U),H!==void 0&&(j+="-"+H);let ae=c.get(j);if(ae){if(ae.threads){let Ne=ae.threads[S];if(Ne)ae=Ne;else{ae.threads[S]={...de};continue}}ae.count||(ae.count=1);let Oe=ae.count;for(let Ne in de){let Me=de[Ne];typeof Me=="number"&&(ae[Ne]=(ae[Ne]*Oe+Me*W)/(Oe+W))}ae.count+=W,V>=0&&(ae.total+=V,ae.ratio=ae.total/ae.count)}else ae={period:t,...y},delete ae.distribution,c.set(j,ae),ae.byThread&&(ae.threads=[],ae.threads[S]={...de},u.push(ae));if(se){se=se.map(Ne=>typeof Ne=="number"?{value:Ne,count:1}:Ne);let Oe=l.get(j);Oe?Oe.push(...se):l.set(j,se)}}await M0()}for(let T of u){let{path:m,method:g,type:S,metric:y,count:I,total:U,distribution:H,threads:X,...W}=T;X=X.filter(V=>V);for(let V in W){if(typeof T[V]!="number")continue;let se=0;for(let Q of X){let de=Q[V];typeof de=="number"&&(se+=de)}T[V]=se}T.count=X.length,delete T.threads,delete T.byThread}for(let[T,m]of l){let g=c.get(T);m.sort((Ne,Me)=>Ne.value>Me.value?1:-1);let S=g.count-1,y=[],I=0,U=0,H;for(let Ne of L0){let Me=S*Ne;for(;I<Me;)H=m[U++],I+=H.count,U===1&&I--;let Gr=m[U>1?U-2:0];H||(H=m[0]),y.push(H.value-(H.value-Gr.value)*(I-Me)/H.count)}let[X,W,V,se,Q,de,j,ae,Oe]=y;Object.assign(g,{p1:X,p10:W,p25:V,median:se,p75:Q,p90:de,p95:j,p99:ae,p999:Oe})}let _;for(let[T,m]of c)m.id=(0,Ap.getNextMonotonicTime)(),m.time=d,n.primaryStore.put(m.id,m,{append:!0}).then(g=>{g||n.primaryStore.put(m.id,m)}),_=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(_||h*10>f){let T=(0,Ap.getNextMonotonicTime)(),m={id:T,metric:"main-thread-utilization",idle:f-g0,active:h-R0,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(T,m,{append:!0}).then(g=>{g||n.primaryStore.put(T,m)})}g0=f,R0=h}async function A0(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function ny(){return y0||(y0=pt({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function U0(){return b0||(b0=pt({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Kee(){v0=!0;let e=(0,H_.get)(ry.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await qee(C0,e),await A0(ny(),$ee),await A0(U0(),Vee)},Math.min(e/2,2147483647)).unref()}function B0(e,t){let r=e.report;r.threadId=t?.threadId||gc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(O0+=n.mean*n.count);r.totalBytesProcessed=O0,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(N0.get(t))}),N0.set(t,t.performance.eventLoopUtilization())),r.id=(0,Ap.getNextMonotonicTime)(),ny().primaryStore.put(r.id,r),v0||Kee(),Yee&&(H0=jee(r))}async function jee(e){if(await H0,!ea){let r=(0,B_.dirname)((0,v_.getLogFilePath)());try{ea=await(0,ty.open)((0,B_.join)(r,"analytics.log"),"r+")}catch{ea=await(0,ty.open)((0,B_.join)(r,"analytics.log"),"w+")}}let t=(await ea.stat()).size;if(t>Wee){let r=Buffer.alloc(t);await ea.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ea.write(r,{position:0}),await ea.truncate(r.length),t=r.length}await ea.write(JSON.stringify(e)+`
12
12
  `,t)}var gc,I0,v_,B_,ty,Ap,H_,ry,yp,w0,Rp,C0,P0,D0,L0,g0,R0,M0,$ee,Vee,y0,b0,v0,O0,N0,Yee,H0,ea,Wee,wi=Ie(()=>{gc=require("worker_threads"),I0=M(ot());Pe();v_=M(K()),B_=require("path"),ty=require("fs/promises"),Ap=M(on()),H_=M(ne()),ry=M(L());qr();(0,H_.initSync)();yp=new Map,w0=(0,H_.get)(ry.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(Fee,"setAnalyticsEnabled");a(mr,"recordAction");it.recordAnalytics=mr;a(qn,"recordActionBinary");Rp=0,C0=1e3,P0="analytics-report",D0=[];a(x_,"addAnalyticsListener");L0=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(Gee,"sendAnalytics");a(qee,"aggregation");g0=0,R0=0,M0=a(()=>new Promise(setImmediate),"rest");a(A0,"cleanup");$ee=36e5,Vee=31536e6;a(ny,"getRawAnalyticsTable");a(U0,"getAnalyticsTable");(0,I0.setChildListenerByType)(P0,B0);a(Kee,"startScheduledTasks");O0=0,N0=new Map,Yee=!1;a(B0,"recordAnalytics");Wee=1e6;a(jee,"logAnalytics")});var cy=O((mIe,z0)=>{"use strict";var{decode:zee}=require("msgpackr"),{isMainThread:EIe,parentPort:hIe,threadId:pIe}=require("worker_threads"),Np=kt(),nu=ft(),oy=L(),zr=K(),iy=ne(),Qee=L(),{onMessageByType:Jee}=ot(),G0=eo(),{recordAction:x0,recordActionBinary:Xee}=(wi(),oe(k_)),{publishToStream:Zee}=Np,{ConsumerEvents:k0}=require("nats"),ete=$r(),{promisify:tte}=require("util"),q0=tte(setTimeout),Ip=1e4,wp,Op,rte,nte,$0,F_=new Map,su=new Map;z0.exports={initialize:V0,ingestConsumer:ay,setSubscription:ste,setIgnoreOrigin:ate,getDatabaseSubscriptions:ote,updateConsumer:K0};async function V0(){Jee(oy.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await K0(n)}),$0=!0,zr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await Np.getNATSReferences();wp=e,Op=e.info.server_name,rte=t,nte=r}a(V0,"initialize");async function K0(e){if(e.status==="start"){let{js:t,jsm:r}=await Y0(e.node_domain_name);ay(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=F_.get(e.stream_name+e.node_domain_name);t&&(zr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),F_.set(e.stream_name+e.node_domain_name,"close")),su.get(e.node_domain_name)==="failed"&&su.set(e.node_domain_name,"close")}}a(K0,"updateConsumer");var Cp=new Map;function ste(e,t,r){let n=Cp.get(e);n||Cp.set(e,n=new Map),n.set(t,r),$0||V0().then(ite)}a(ste,"setSubscription");async function ite(){let e=await ete.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+nu.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await Y0(r),!n))break;let{schema:o,table:c}=i,l=G0.createNatsTableStreamName(o,c);ay(l,n,s,r)}}}a(ite,"accessConsumers");async function Y0(e){let t,r,n=1;for(;!r;)try{t=await wp.jetstream({domain:e}),r=await wp.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(su.get(e)==="close")break;su.set(e,"failed"),n%10===1&&zr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<Ip?n++*100:Ip;await q0(i)}return{js:t,jsm:r}}a(Y0,"connectToRemoteJS");function ote(){return Cp}a(ote,"getDatabaseSubscriptions");var W0;function ate(e){W0=e}a(ate,"setIgnoreOrigin");var j0=100,F0=new Array(j0),bp=0;async function ay(e,t,r,n){let{connection:s}=await Np.getNATSReferences();wp=s,Op=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,Op),zr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(su.get(n)==="close")break;o%10===1&&zr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(zr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await Np.createConsumer(r,e,Op,new Date(Date.now()).toISOString()));let d=o++*100<Ip?o++*100:Ip;await q0(d)}let c=!1,l;for(;!c;){if(F_.get(e+n)==="close"||su.get(n)==="close"){F_.delete(e+n),c=!0;continue}l=await i.consume({max_messages:iy.get(oy.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),F_.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===k0.ConsumerDeleted&&(await l.close(),c=!0),d.type===k0.HeartbeatsMissed){let _=d.data;zr.trace(`${_} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),_===100&&(zr.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let d of l)await F0[bp],F0[bp]=cte(d).catch(_=>{zr.error(_)}),++bp>=j0&&(bp=0)}catch(d){d.message==="consumer deleted"?(zr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):zr.error("Error consuming clustering ingest, restarting consumer",d)}}}a(ay,"ingestConsumer");async function cte(e){let t=zee(e.data);x0(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),zr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=iy.get(oy.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(nu.MSG_HEADERS.TRANSACTED_NODES)&&r.values(nu.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(nu.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!W0),Xee(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(nu.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:d,hash_values:_,__origin:E,expiresAt:f}=t;zr.trace("processing message:",o,c,u,(d?"records: "+d.map(U=>U?.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),zr.trace(`messageProcessor nats msg id: ${e.headers.get(nu.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=_);let T=new Promise(U=>h=U),{timestamp:m,user:g,node_name:S}=E||{},y=Cp.get(c)?.get(u);if(!y)throw new Error(`Missing table for replication message: ${u}`);if(o==="define_schema")t.type=o,t.onCommit=h,y.send(t);else if(d.length===1&&!l)y.send({type:sy(o),value:d[0],id:_?.[0],expiresAt:f,timestamp:m,table:u,onCommit:h,user:g,nodeName:S});else{let U=d.map((H,X)=>({type:sy(o),value:H,expiresAt:f,id:_?.[X],table:u}));for(;l;)U.push({type:sy(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;y.send({type:"transaction",writes:U,table:u,timestamp:m,onCommit:h,user:g,nodeName:S})}iy.get(Qee.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Zee(e.subject.split(".").slice(0,-1).join("."),G0.createNatsTableStreamName(c,u),e.headers,e.data),await T;let I=Date.now()-m;m&&x0(I,"replication-latency",e.subject,o,"ingest")}catch(o){zr.error(o)}e.ack()}a(cte,"messageProcessor");function sy(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(sy,"convertOperation")});var kt=O((bIe,_B)=>{"use strict";var Or=ne();Or.initSync();var lte=require("fs-extra"),ute=require("semver"),$_=require("path"),{monotonicFactory:dte}=require("ulidx"),J0=dte(),_te=require("util"),X0=require("child_process"),fte=_te.promisify(X0.exec),Ete=X0.spawn,Pr=ft(),Qe=L(),Pp=te(),zs=K(),Dp=eo(),hte=gp(),G_=Ct(),{broadcast:pte,onMessageByType:mte,getWorkerIndex:Ste}=ot(),{isMainThread:Z0}=require("worker_threads"),{Encoder:Tte,decode:_y}=require("msgpackr"),eB=new Tte,{isEmpty:bc}=Pp,tB=xn(),TIe=48*36e11;Z0&&mte(Qe.ITC_EVENT_TYPES.RESTART,()=>{Qr=void 0,yc=void 0});var{connect:gte,StorageType:Rte,RetentionPolicy:Ate,AckPolicy:fy,DeliverPolicy:Ey,DiscardPolicy:yte,NatsConnection:gIe,JetStreamManager:RIe,JetStreamClient:AIe,StringCodec:yIe,JSONCodec:bte,createInbox:hy,headers:Ote,ErrorCode:Q0}=require("nats"),{PACKAGE_ROOT:Nte}=L(),Ite=ru(),{recordAction:wte}=(wi(),oe(k_)),rB=bte(),Cte="clustering",Pte=Ite.engines[Pr.NATS_SERVER_NAME],Dte=$_.join(Nte,"dependencies"),dy=$_.join(Dte,`${process.platform}-${process.arch}`,Pr.NATS_BINARY_NAME),ly,uy,q_,Rc,Ac;_B.exports={runCommand:nB,checkNATSServerInstalled:Lte,createConnection:py,getConnection:V_,getJetStreamManager:K_,getJetStream:iB,getNATSReferences:Ci,getServerList:Ute,createLocalStream:my,listStreams:oB,deleteLocalStream:vte,getServerConfig:iu,listRemoteStreams:Bte,viewStream:Hte,viewStreamIterator:xte,publishToStream:kte,request:qte,reloadNATS:Sy,reloadNATSHub:$te,reloadNATSLeaf:Vte,extractServerName:Gte,requestErrorHandler:Kte,createLocalTableStream:uB,createTableStreams:jte,purgeTableStream:dB,purgeSchemaTableStreams:zte,getStreamInfo:Qte,updateLocalStreams:Xte,closeConnection:Mte,getJsmServerName:Lp,addNatsMsgHeader:aB,clearClientCache:sB,updateRemoteConsumer:Yte,createConsumer:cB,updateConsumerIterator:Wte};async function nB(e,t=void 0){let{stdout:r,stderr:n}=await fte(e,{cwd:t});if(n)throw new Error(n.replace(`
13
13
  `,""));return r.replace(`
14
14
  `,"")}a(nB,"runCommand");async function Lte(){try{await lte.access(dy)}catch{return!1}let e=await nB(`${dy} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return ute.eq(t,Pte)}a(Lte,"checkNATSServerInstalled");async function py(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await tB.getClusterUser();if(bc(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}zs.trace("create nats connection called");let i=await gte({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Or.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Or.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Or.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),zs.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&zs.error("Error with Nats client connection, connection closed",o),i===Qr&&sB()}),i}a(py,"createConnection");function sB(){Qr=void 0,Rc=void 0,Ac=void 0,yc=void 0}a(sB,"clearClientCache");async function Mte(){Qr&&(await Qr.drain(),Qr=void 0,Rc=void 0,Ac=void 0,yc=void 0)}a(Mte,"closeConnection");var Qr,yc;async function V_(){return yc||(yc=py(Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Qr=await yc),Qr||yc}a(V_,"getConnection");async function K_(){if(Rc)return Rc;bc(Qr)&&await V_();let{domain:e}=iu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(bc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Rc=await Qr.jetstreamManager({domain:e,timeout:6e4}),Rc}a(K_,"getJetStreamManager");async function iB(){if(Ac)return Ac;bc(Qr)&&await V_();let{domain:e}=iu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(bc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ac=Qr.jetstream({domain:e,timeout:6e4}),Ac}a(iB,"getJetStream");async function Ci(){let e=Qr||await V_(),t=Rc||await K_(),r=Ac||await iB();return{connection:e,jsm:t,js:r}}a(Ci,"getNATSReferences");async function Ute(e){let t=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await tB.getClusterUser(),s=await py(t,r,n),i=hy(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of o){let _=rB.decode(d.data);_.response_time=Date.now()-l,c.push(_)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await Pp.async_set_timeout(e),await o.drain(),await s.close(),await u,c}a(Ute,"getServerList");async function my(e,t){let{jsm:r}=await Ci(),n=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Rte.File,retention:Ate.Limits,subjects:t,discard:yte.Old,max_msgs:s,max_bytes:i,max_age:n})}a(my,"createLocalStream");async function oB(){let{jsm:e}=await Ci(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(oB,"listStreams");async function vte(e){let{jsm:t}=await Ci();await t.streams.delete(e)}a(vte,"deleteLocalStream");async function Bte(e){let{connection:t}=await Ci(),r=[],n=hy(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(rB.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(Bte,"listRemoteStreams");async function Hte(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Ci(),i=J0(),o={durable_name:i,ack_policy:fy.Explicit};t&&(o.deliver_policy=Ey.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let _=_y(d.data),E={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:_};if(d.headers&&(E.origin=d.headers.get(Pr.MSG_HEADERS.ORIGIN)),u.push(E),d.ack(),d.info.pending===0)break}return await c.delete(),u}a(Hte,"viewStream");async function*xte(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Ci(),i=J0(),o={durable_name:i,ack_policy:fy.Explicit};t&&(o.deliver_policy=Ey.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let d=_y(u.data);d[0]||(d=[d]);for(let _ of d){let E={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:_};u.headers&&(E.origin=u.headers.get(Pr.MSG_HEADERS.ORIGIN)),yield E}if(u.ack(),u.info.pending===0)break}await c.delete()}a(xte,"viewStreamIterator");async function kte(e,t,r,n){zs.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=aB(n,r);let{js:s}=await Ci(),i=await Lp(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:eB.encode(n);try{zs.trace(`publishToStream publishing to subject: ${o}`),wte(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return lB(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){zs.trace(`publishToStream creating stream: ${t}`);let d=o.split(".");d[2]="*",await my(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(kte,"publishToStream");function aB(e,t){t===void 0&&(t=Ote());let r=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Pr.MSG_HEADERS.ORIGIN)&&r&&t.append(Pr.MSG_HEADERS.ORIGIN,r),t}a(aB,"addNatsMsgHeader");function iu(e){e=e.toLowerCase();let t=$_.join(Or.get(Qe.CONFIG_PARAMS.ROOTPATH),Cte);if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return bc(uy)&&(uy={port:G_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:G_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Pr.SERVER_SUFFIX.HUB,config_file:Pr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:$_.join(t,Pr.PID_FILES.HUB),hdb_nats_path:t}),uy;if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return bc(ly)&&(ly={port:G_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:G_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Pr.SERVER_SUFFIX.LEAF,config_file:Pr.NATS_CONFIG_FILES.LEAF_SERVER,domain:G_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Pr.SERVER_SUFFIX.LEAF,pid_file_path:$_.join(t,Pr.PID_FILES.LEAF),hdb_nats_path:t}),ly;zs.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(iu,"getServerConfig");async function cB(e,t,r,n){try{await e.consumers.add(t,{ack_policy:fy.Explicit,durable_name:r,deliver_policy:Ey.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(cB,"createConsumer");async function Fte(e,t,r){await e.consumers.delete(t,r)}a(Fte,"removeConsumer");function Gte(e){return e.split(".")[1]}a(Gte,"extractServerName");async function qte(e,t,r=6e4,n=hy()){if(!Pp.isObject(t))throw new Error("data param must be an object");let s=eB.encode(t),{connection:i}=await Ci(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return _y(c.data)}a(qte,"request");function Sy(e){return new Promise(async(t,r)=>{let n=Ete(dy,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(Sy,"reloadNATS");async function $te(){let{pid_file_path:e}=iu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Sy(e)}a($te,"reloadNATSHub");async function Vte(){let{pid_file_path:e}=iu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Sy(e)}a(Vte,"reloadNATSLeaf");function Kte(e,t,r){let n;switch(e.code){case Q0.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case Q0.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(Kte,"requestErrorHandler");async function Yte(e,t){let r=t+Pr.SERVER_SUFFIX.LEAF,{connection:n}=await Ci(),{jsm:s}=await ere(r),{schema:i,table:o}=e,c=Dp.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await lB(async()=>{if(e.subscribe===!0)await cB(s,c,n.info.server_name,l);else try{await Fte(s,c,n.info.server_name)}catch(u){zs.trace(u)}})}a(Yte,"updateRemoteConsumer");async function Wte(e,t,r,n){let s=Dp.createNatsTableStreamName(e,t),i=r+Pr.SERVER_SUFFIX.LEAF,o={type:Qe.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!Z0&&Ste()<Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=cy();await c(o)}await pte(o),n==="stop"&&await Pp.async_set_timeout(1e3)}a(Wte,"updateConsumerIterator");function lB(e){return hte.writeTransaction(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(lB,"exclusiveLock");async function uB(e,t){let r=Dp.createNatsTableStreamName(e,t),n=await Lp(),s=Jte(e,t,n);await my(r,[s])}a(uB,"createLocalTableStream");async function jte(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await uB(n,s)}}a(jte,"createTableStreams");async function dB(e,t,r=void 0){if(Or.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=Dp.createNatsTableStreamName(e,t),{domain:s}=iu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await V_()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")zs.warn(n);else throw n}}a(dB,"purgeTableStream");async function zte(e,t){if(Or.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await dB(e,t[r])}a(zte,"purgeSchemaTableStreams");async function Qte(e){return(await K_()).streams.info(e)}a(Qte,"getStreamInfo");function Jte(e,t,r){return`${Pr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Jte,"createSubjectName");async function Lp(){if(q_)return q_;if(q_=(await K_())?.nc?.info?.server_name,q_===void 0)throw new Error("Unable to get jetstream manager server name");return q_}a(Lp,"getJsmServerName");async function Xte(){let e=await K_(),t=await Lp(),r=await oB();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=Zte(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");zs.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}a(Xte,"updateLocalStreams");function Zte(e){let{config:t}=e,r=!1,n=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(Zte,"updateStreamLimits");async function ere(e){let t,r;try{t=await Qr.jetstream({domain:e}),r=await Qr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw zs.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(ere,"connectToRemoteJS")});var Oc=O(Up=>{var Mp=K();for(let e of["trace","debug","info","warn","error","fatal","notify"])Mp.logsAtLevel(e)&&(Up[e]=Mp[e]);Up.loggerWithTag=e=>Mp.loggerWithTag(e,!0);Up.setLogLevel=Mp.setLogLevel});function Ty(e){let t=e.get(vp),r=t?(0,ou.unpack)(t):null;r||(r={remoteNameToId:{}});let n=at(),s=!1;r.nodeName=at();let i=r.remoteNameToId;if(i[n]!==0){let o=0,c;for(let l in i){let u=i[l];u===0?c=l:u>o&&(o=u)}if(c){o++,i[c]=o;let l=[Symbol.for("seq"),o];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:W_(e)??1,nodes:[]})})}i[n]=0,e.putSync(vp,(0,ou.pack)(r))}return r}function Y_(e){return Ty(e).remoteNameToId}function EB(e,t,r){let n=Ty(r),s=n.remoteNameToId,i=new Map,o=!1;for(let c in t){let l=t[c],u=s[c];if(u==null){let d=0;for(let _ in s){let E=s[_];E>d&&(d=E)}u=d+1,s[c]=u,o=!0}i.set(l,u)}return o&&r.putSync(vp,(0,ou.pack)(n)),i}function Bp(e,t){let r=Ty(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let o in n){let c=n[o];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(vp,(0,ou.pack)(r))}return fB.info?.("The remote node name map",e,n,s),s}var fB,ou,vp,gy=Ie(()=>{fB=M(Oc());ds();ou=require("msgpackr"),vp=Symbol.for("remote-ids");a(Ty,"getIdMappingRecord");a(Y_,"exportIdMapping");a(EB,"remoteToLocalNodeId");a(Bp,"getIdOfRemoteNode")});var ta,Ry=Ie(()=>{ta=class{constructor(t){this.error=t}static{a(this,"ErrorResource")}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}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 mB={};je(mB,{Resources:()=>Hp,keyArrayToString:()=>au,resetResources:()=>tre,resources:()=>Pi});function tre(){return Pi=new Hp}function au(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var hB,pB,Hp,Pi,cu=Ie(()=>{Sc();Ry();hB=M(K()),pB=M(_e()),Hp=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s){let c=new pB.ServerError(`Conflicting paths for ${t}`);hB.default.error(c),i.Resource=new ta(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),l=this.get(c);if(!l&&c.indexOf(".")>-1){let u=c.split(".");l=this.get(u[0])}if(l&&(!r||l.exportTypes?.[r]!==!1)){if(l.relativeURL=t.slice(n),!l.hasSubPaths)return l;s=l}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),!s&&o.indexOf(".")>-1&&(s=this.get(o.split(".")[0])),s&&(!r||s.exportTypes?.[r]!==!1)?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(!r||s.exportTypes?.[r]!==!1)&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return Pt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(tre,"resetResources");a(au,"keyArrayToString")});function by(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=TB,rre(e.primaryStore,e.auditStore)):(c=SB,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{gB(SB[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[o];u||(u=l[o]=new Map,u.envs=l,u.tableId=o,u.store=e.primaryStore),t=au(t);let d=new yy(r);d.startTime=n;let _=u.get(t);return _?_.push(d):(u.set(t,_=[d]),_.tables=u,_.key=t),d.subscriptions=_,d}function gB(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),RB(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=xt(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=au(c),u=0;do{let d=o.get(l);if(d){for(let E of d)if(!(u>0&&!(E.includeDescendants&&!(E.onlyChildren&&u>1)))){if(E.startTime>=n){(0,Ay.info)("omitting",c,E.startTime,n);continue}try{let f;E.supportsTransactions&&E.txnInProgress!==i.version&&(f=!0,E.txnInProgress||(r?r.push(E):r=[E]),E.txnInProgress=i.version),E.listener(c,i,n,f)}catch(f){console.error(f),(0,Ay.info)(f)}}}if(l==null)break;let _=l.lastIndexOf?.("/",l.length-2);_!==l.length-1&&u++,_>-1?l=l.slice(0,_+1):l=null}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function rre(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let l=TB[s];if(!l)return;let u=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{gB(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function RB(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function AB(e){return e.nextTransaction||(by({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),RB(e)),e.nextTransaction}var Ay,SB,TB,yy,Oy=Ie(()=>{Ay=M(K());Ll();cu();Qi();SB=Object.create(null),TB=Object.create(null);a(by,"addSubscription");yy=class extends Dn{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;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(gB,"notifyFromTransactionData");a(rre,"listenToCommits");a(RB,"nextTransaction");a(AB,"whenNextTransaction")});var wB={};je(wB,{commits_awaiting_replication:()=>du,getHDBNodeTable:()=>Sr,iterateRoutes:()=>z_,shouldReplicateToNode:()=>j_,subscribeToNodeUpdates:()=>_u});function Sr(){return yB||(yB=pt({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function _u(e){Sr().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;IB.debug?.("adding node",n,"on node",at()," on process",process.pid),server.nodes=server.nodes.filter(s=>s.name!==n),r.type==="put"&&n!==at()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r)),(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function j_(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&Sr().primaryStore.get(at())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function nre(){_u(e=>{ra({},(t,r)=>{let n=e.name,s=bB.get(n);if(s||bB.set(n,s=new Map),s.has(r))return;let i;for(let o in t)if(i=t[o].auditStore,i)break;if(i){let o=new Float64Array(i.getUserSharedBuffer(["replicated",r,n],new ArrayBuffer(8),{callback:a(()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:d}of du.get(r)||[])u>l&&u<=c&&d();o.lastTime=c},"callback")}));o.lastTime=0,s.set(r,o)}})})}function*z_(e){for(let t of e.routes||[]){let r=t.url,n;if(typeof t=="string"?t.includes("://")?r=t:n=t:n=t.hostname??t.host,n&&!r){let s=lu.default.get(uu.CONFIG_PARAMS.REPLICATION_SECUREPORT)??(!lu.default.get(uu.CONFIG_PARAMS.REPLICATION_PORT)&&lu.default.get(uu.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||lu.default.get(uu.CONFIG_PARAMS.REPLICATION_PORT)||lu.default.get(uu.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){OB.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,start_time:t.startTime}}}var OB,NB,lu,uu,IB,yB,bB,du,fu=Ie(()=>{Pe();ds();fp();OB=require("worker_threads"),NB=M(_e()),lu=M(ne()),uu=M(L()),IB=M(Oc());server.nodes=[];a(Sr,"getHDBNodeTable");a(_u,"subscribeToNodeUpdates");a(j_,"shouldReplicateToNode");bB=new Map;Uv((e,t,r)=>{if(r>server.nodes.length)throw new NB.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);du||(du=new Map,nre());let n=du.get(e);return n||(n=[],du.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(nre,"startSubscriptionToReplications");a(z_,"iterateRoutes")});var MB={};je(MB,{connectedToNode:()=>Nc,disconnectedFromNode:()=>pu,ensureNode:()=>oo,requestClusterStatus:()=>LB,startOnMainThread:()=>Iy});async function Iy(e){let t=0,r=dt();for(let i of Object.getOwnPropertyNames(r)){let o=r[i];for(let c in o){let l=o[c];if(l.auditStore){xp.set(i,W_(l.auditStore));break}}}Di.whenThreadsStarted.then(async()=>{let i=[];for await(let o of r.system.hdb_nodes.search([]))i.push(o);for(let o of z_(e))try{let c=!o.subscriptions;if(c){let u=at();Sr().primaryStore.get(u)===void 0&&await oo(u,{name:u,url:e.url??na(),replicates:!0})}let l=o.trusted!==!1;if(c&&o.replicates==null&&(o.replicates=!0),i.find(u=>u.url===o.url))continue;s(o)}catch(c){console.error(c)}_u(s)});let n;function s(i,o=i?.name){let c=at()&&o===at()||na()&&i?.url===na();if(c){let _=!!i?.replicates;if(n!==void 0&&n!==_)for(let E of Sr().search([]))E.replicates&&E.name!==o&&s(E,E.name);n=_}if(Et.trace("Setting up node replication for",i),!i){for(let[_,E]of io){let f;for(let[h,{worker:T,nodes:m}]of E){let g=m[0];if(g&&g.name==o){f=!0;for(let[S,{worker:y}]of E)E.delete(S),Et.warn("Node was deleted, unsubscribing from node",o,S,_),y?.postMessage({type:"unsubscribe-from-node",node:o,database:S,url:_});break}}if(f){io.get(_).iterator.remove(),io.delete(_);return}}return}if(c)return;if(!i.url){Et.info(`Node ${i.name} is missing url`);return}let l=io.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(Et.info(`Added node ${i.name} at ${i.url} for process ${at()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[_,E]of Eu)if(i.url===E.url){Eu.delete(_);break}Eu.set(i.name,i)}let u=dt();if(l||(l=new Map,io.set(i.url,l)),l.iterator=ra(e,(_,E,f)=>{f?d(E,!0):d(E,!1)}),i.subscriptions)for(let _ of i.subscriptions){let E=_.database||_.schema;u[E]||(Et.warn(`Database ${E} not found for node ${i.name}, making a subscription anyway`),d(E,!1))}function d(_,E){Et.trace("Setting up replication for database",_,"on node",i.name);let f=l.get(_),h,T=[{replicateByDefault:E,...i}];xp.has(_)&&(T.push({replicateByDefault:E,name:at(),start_time:xp.get(_),end_time:Date.now(),replicates:!0}),xp.delete(_));let m=j_(i,_),g=Di.workers.filter(S=>S.name==="http");if(f?(h=f.worker,f.nodes=T):m&&(t=t%g.length,h=g[t++],l.set(_,{worker:h,nodes:T,url:i.url}),h?.on("exit",()=>{l.get(_)?.worker===h&&(l.delete(_),d(_,E))})),m)setTimeout(()=>{let S={type:"subscribe-to-node",database:_,nodes:T};h?h.postMessage(S):hu(S)},sre);else{Et.info("Node no longer should be used, unsubscribing from node",i.replicates,!!u[_],Sr().primaryStore.get(at())?.replicates),Sr().primaryStore.get(at())?.replicates||(n=!1);let S={type:"unsubscribe-from-node",database:_,url:i.url,name:i.name};h?h.postMessage(S):Fp(S)}}a(d,"onDatabase")}a(s,"onNodeUpdate"),pu=a(function(i){try{Et.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let o=Array.from(Eu.keys()),c=o.sort(),l=c.indexOf(i.name||Qs(i.url));if(l===-1){Et.warn("Disconnected node not found in node map",i.name,o);return}let u=io.get(i.url),d=u?.get(i.database);if(!d){Et.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished)return;let _=d.nodes[0];if(!(_.replicates===!0||_.replicates?.sends||_.subscriptions?.length))return;let E=(l+1)%c.length;for(;l!==E;){let f=c[E],h=Eu.get(f);u=io.get(h.url);let T=u?.get(i.database);if(!T){E=(E+1)%c.length;continue}let{worker:m,nodes:g}=T,S=!1;for(let y of d.nodes){if(g.some(I=>I.name===y.name)){Et.info(`Disconnected node is already failing over to ${f} for ${i.database}`);continue}g.push(y),S=!0}if(!S){Et.info(`Disconnected node ${i.name} has no nodes to fail over to ${f}`);return}d.redirectingTo=T,Et.info(`Failing over ${i.database} from ${i.name} to ${f}`),m?m.postMessage({type:"subscribe-to-node",database:i.database,nodes:g}):hu({database:i.database,nodes:g});return}Et.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(o){Et.error("Error failing over node",o)}},"disconnectedFromNode"),Nc=a(function(i){let o=io.get(i.url),c=o?.get(i.database);if(!c){Et.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,o);return}if(c.connected=!0,c.latency=i.latency,c.catchingUpFrom=i.lastSendTime,c.redirectingTo){let{worker:l,nodes:u}=c.redirectingTo,d=u.find(_=>_.name===i.name);c.redirectingTo=null,d&&(u.splice(u.indexOf(d),1),l?l.postMessage({type:"subscribe-to-node",database:i.database,nodes:u}):hu({database:i.database,nodes:u}))}},"connectedToNode"),(0,Di.onMessageByType)("disconnected-from-node",pu),(0,Di.onMessageByType)("connected-to-node",Nc),(0,Di.onMessageByType)("request-cluster-status",LB)}function LB(e,t){let r=[];for(let[n,s]of Eu)try{let i=io.get(s.url);Et.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:d,nodes:_,latency:E,catchingUpFrom:f}]of i)o.push({database:l,connected:d,latency:E,catching_up_from:f?new Date(f).toISOString():"up-to-date",thread_id:u?.threadId,nodes:_.map(h=>h.name)});let c=(0,Ny.cloneDeep)(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){Et.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function oo(e,t){let r=Sr();e=e??Qs(t.url),t.name=e;try{if(t.ca){let s=new DB.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subject_alt_name:s.subjectAltName,serial_number:s.serialNumber,valid_from:s.validFrom,valid_to:s.validTo}}}catch(s){Et.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(Et.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.put(t);else{t.replicates&&!CB.default.get(PB.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=(0,Ny.cloneDeep)(n[s]);for(let c of t[s]){let l=!1;for(let u of o)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...o,...i];break}Et.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Di,kp,Et,Ny,CB,PB,DB,sre,io,pu,Nc,Eu,xp,Q_=Ie(()=>{Pe();Di=M(ot());ds();kp=require("worker_threads");fu();Et=M(K()),Ny=require("lodash"),CB=M(ne()),PB=M(L()),DB=require("crypto"),sre=200,io=new Map,Eu=new Map,xp=new Map;a(Iy,"startOnMainThread");a(LB,"requestClusterStatus");kp.parentPort&&(pu=a(e=>{kp.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Nc=a(e=>{kp.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Di.onMessageByType)("subscribe-to-node",e=>{hu(e)}),(0,Di.onMessageByType)("unsubscribe-from-node",e=>{Fp(e)}));a(oo,"ensureNode")});var J_=O((XIe,UB)=>{"use strict";var ire=L().OPERATIONS_ENUM,wy=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=ire.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};UB.exports=wy});var BB=O((ewe,vB)=>{"use strict";var ore={OPERATION:"operation",REFRESH:"refresh"},Cy=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Py=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};vB.exports={JWTTokens:Cy,TOKEN_TYPE_ENUM:ore,JWTRSAKeys:Py}});var mu=O((rwe,FB)=>{"use strict";var Z_=require("jsonwebtoken"),Dy=require("fs-extra"),Ly=te(),_s=L(),{handleHDBError:fn,hdb_errors:are}=_e(),{HTTP_STATUS_CODES:En,AUTHENTICATION_ERROR_MSGS:hn}=are,X_=K(),HB=Kh(),vy=xn(),cre=Vr().update,lre=J_(),ure=to(),{UserEventMsg:dre}=$s(),sa=ne();sa.initSync();var My=require("path"),{JWTTokens:_re,JWTRSAKeys:fre,TOKEN_TYPE_ENUM:Gp}=BB(),Ere=sa.get(_s.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?sa.get(_s.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",hre=sa.get(_s.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?sa.get(_s.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",qp="RS256",Uy;FB.exports={createTokens:pre,validateOperationToken:Sre,refreshOperationToken:mre,validateRefreshToken:kB,getJWTRSAKeys:ef};async function pre(e){if(Ly.isEmpty(e)||typeof e!="object")throw fn(new Error,hn.INVALID_AUTH_OBJECT,En.BAD_REQUEST,void 0,void 0,!0);if(Ly.isEmpty(e.username))throw fn(new Error,hn.USERNAME_REQUIRED,En.BAD_REQUEST,void 0,void 0,!0);if(Ly.isEmpty(e.password))throw fn(new Error,hn.PASSWORD_REQUIRED,En.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await vy.findAndValidateUser(e.username,e.password),!t)throw fn(new Error,hn.INVALID_CREDENTIALS,En.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw X_.error(E),fn(new Error,hn.INVALID_CREDENTIALS,En.UNAUTHORIZED,void 0,void 0,!0)}let r=await ef(),n=!1,s=!1;t.role&&t.role.permission&&(n=t.role.permission.super_user===!0,s=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s},o=await xB(i,r.private_key,r.passphrase),c=await Z_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:hre,algorithm:qp,subject:Gp.REFRESH}),l=HB.hash(c),u=new lre(_s.SYSTEM_SCHEMA_NAME,_s.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),d,_;try{d=await cre(u)}catch(E){X_.error(E),_=E}if(_!==void 0||d.skipped_hashes.length>0)throw fn(new Error,hn.REFRESH_TOKEN_SAVE_FAILED,En.INTERNAL_SERVER_ERROR);return ure.signalUserChange(new dre(process.pid)),new _re(o,c)}a(pre,"createTokens");async function xB(e,t,r){return await Z_.sign(e,{key:t,passphrase:r},{expiresIn:Ere,algorithm:qp,subject:Gp.OPERATION})}a(xB,"signOperationToken");async function ef(){if(Uy===void 0)try{let e=My.join(sa.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,_s.JWT_ENUM.JWT_PASSPHRASE_NAME),t=My.join(sa.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,_s.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=My.join(sa.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,_s.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await Dy.readFile(e)).toString(),s=(await Dy.readFile(t)).toString(),i=(await Dy.readFile(r)).toString();Uy=new fre(i,s,n)}catch(e){throw X_.error(e),fn(new Error,hn.NO_ENCRYPTION_KEYS,En.INTERNAL_SERVER_ERROR)}return Uy}a(ef,"getJWTRSAKeys");async function mre(e){if(!e)throw fn(new Error,hn.INVALID_BODY,En.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw fn(new Error,hn.REFRESH_TOKEN_REQUIRED,En.BAD_REQUEST,void 0,void 0,!0);await kB(e.refresh_token);let t=await ef(),r=await Z_.decode(e.refresh_token);return{operation_token:await xB({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(mre,"refreshOperationToken");async function Sre(e){try{let t=await ef(),r=await Z_.verify(e,t.public_key,{algorithms:qp,subject:Gp.OPERATION});return await vy.findAndValidateUser(r.username,void 0,!1)}catch(t){throw X_.warn(t),t.name&&t.name==="TokenExpiredError"?fn(new Error,hn.TOKEN_EXPIRED,En.FORBIDDEN):fn(new Error,hn.INVALID_TOKEN,En.UNAUTHORIZED)}}a(Sre,"validateOperationToken");async function kB(e){let t;try{let r=await ef(),n=await Z_.verify(e,r.public_key,{algorithms:qp,subject:Gp.REFRESH});t=await vy.findAndValidateUser(n.username,void 0,!1)}catch(r){throw X_.warn(r),r.name&&r.name==="TokenExpiredError"?fn(new Error,hn.TOKEN_EXPIRED,En.FORBIDDEN):fn(new Error,hn.INVALID_TOKEN,En.UNAUTHORIZED)}if(!HB.validate(t.refresh_token,e))throw fn(new Error,hn.INVALID_TOKEN,En.UNAUTHORIZED);return t}a(kB,"validateRefreshToken")});var Zs=O(dH=>{"use strict";var ir=require("path"),{watch:Tre}=require("chokidar"),pn=require("fs-extra"),Su=require("node-forge"),WB=require("net"),{generateKeyPair:Hy,X509Certificate:ao,createPrivateKey:jB}=require("crypto"),gre=require("util");Hy=gre.promisify(Hy);var bt=Su.pki,Js=require("joi"),{v4:zB}=require("uuid"),{validateBySchema:Gy}=_t(),St=K(),Es=ne(),hs=L(),{CONFIG_PARAMS:Tu}=hs,Xs=UR(),{ClientError:oa}=_e(),wc=require("node:tls"),{relative:QB,join:Rre}=require("node:path"),{CERT_PREFERENCE_APP:swe,CERTIFICATE_VALUES:GB}=Xs,Are=Qa(),xy=Ct(),qB=parseInt(process.version.slice(1))<20,{table:yre,getDatabases:bre,databases:By}=(Pe(),oe(ut)),{getJWTRSAKeys:$B}=mu();Object.assign(dH,{generateKeys:Vy,updateConfigCert:sH,createCsr:Dre,signCertificate:Lre,setCertTable:gu,loadCertificates:tH,reviewSelfSignedCert:Yy,createTLSSelector:aH,listCertificates:lH,addCertificate:xre,removeCertificate:Fre,createNatsCerts:vre,generateCertsKeys:Ure,getReplicationCert:rf,getReplicationCertAuth:Pre,renewSelfSigned:Bre,hostnamesFromCert:uH,getKey:Gre});var{urlToNodeName:JB,getThisNodeUrl:Ore,getThisNodeName:Vp,clearThisNodeName:Nre}=(ds(),oe(la)),{readFileSync:Ire,statSync:XB}=require("node:fs"),iwe=ne(),{getTicketKeys:wre,onMessageFromWorkers:Cre}=ot(),ia=K(),{isMainThread:ZB}=require("worker_threads"),{TLSSocket:eH,createSecureContext:owe}=require("node:tls"),qy=3650,tf=["127.0.0.1","localhost","::1"],$y=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];Cre(async e=>{e.type===hs.ITC_EVENT_TYPES.RESTART&&(Es.initSync(!0),await Yy())});var Dr;function ca(){return Dr||(Dr=bre().system.hdb_certificate,Dr||(Dr=yre({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),Dr}a(ca,"getCertTable");async function rf(){let e=aH("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(Vp());if(!r)return;let n=new ao(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(rf,"getReplicationCert");async function Pre(){ca();let e=(await rf()).options.cert,r=new ao(e).issuer.match(/CN=(.*)/)?.[1];return Dr.get(r)}a(Pre,"getReplicationCertAuth");var VB,aa=new Map;function tH(){if(VB)return;VB=!0;let e=[{configKey:Tu.TLS},{configKey:Tu.OPERATIONSAPI_TLS}];ca();let t=ir.dirname(xy.getConfigFilePath()),r;for(let{configKey:n}of e){let s=xy.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&QB(Rre(t,"keys"),o);c&&KB(o,l=>{aa.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&ZB){let d;KB(u,_=>{if(GB.cert===_)return;let E=i.hostname??i.hostnames??i.host??i.hosts;E&&!Array.isArray(E)&&(E=[E]);let f=iH(u),h=new ao(f),T;try{T=Wy(h)}catch(y){St.error("error extracting common name from certificate",y);return}if(T==null){St.error("error extracting common name from certificate");return}if(h.checkIssued(new ao(GB.cert)))return;let m=Dr.primaryStore.get(T),g=XB(u).mtimeMs,S=!m||m.is_self_signed?1:m.file_timestamp??m.__updatedtime__;if(m&&g<=S){g<S&&St.info(`Certificate ${T} at ${u} is older (${new Date(g)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=Dr.put({name:T,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:f,private_key_name:c,is_authority:l,hostnames:E,file_timestamp:g,details:{issuer:h.issuer.replace(/\n/g," "),subject:h.subject.replace(/\n/g," "),subject_alt_name:h.subjectAltName,serial_number:h.serialNumber,valid_from:h.validFrom,valid_to:h.validTo}})},l?"certificate authority":"certificate")}}}}}return r}a(tH,"loadCertificates");function KB(e,t,r){let n,s=a((i,o)=>{try{let c=o.mtimeMs;c&&c!==n&&(n&&ZB&&St.warn(`Reloading ${r}:`,i),n=c,t(iH(i)))}catch(c){St.error(`Error loading ${r}:`,i,c)}},"loadFile");pn.existsSync(e)?s(e,XB(e)):St.error(`${r} file not found:`,e),Tre(e,{persistent:!1}).on("change",s)}a(KB,"loadAndWatch");function ky(){let e=Ore();if(e==null){let t=tf[0];return St.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return JB(e)}a(ky,"getHost");function $p(){let e=Vp();if(e==null){let t=tf[0];return St.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a($p,"getCommonName");async function Dre(){let e=await rf(),t=bt.certificateFromPem(e.options.cert),r=bt.privateKeyFromPem(e.options.key);St.info("Creating CSR with cert named:",e.name);let n=bt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:$p()},...$y];St.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:rH()}];return St.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Su.pki.certificationRequestToPem(n)}a(Dre,"createCsr");function rH(){let e=tf.includes($p())?tf:[...tf,$p()];return e.includes(ky())||e.push(ky()),[{name:"basicConstraints",cA:!1,critical:!0},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0,critical:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"nsCertType",client:!0,server:!0},{name:"subjectAltName",altNames:e.map(t=>WB.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(rH,"certExtensions");async function Lre(e){let t={},r=ir.join(Es.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;ca();for await(let d of Dr.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(aa.has(d.private_key_name)){n=aa.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await pn.exists(ir.join(r,d.private_key_name))){n=pn.readFile(ir.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await Fy();s=d.ca,n=d.private_key}n=bt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=bt.certificateFromPem(s.certificate);St.info("Signing CSR with cert named",s.name);let o=bt.certificationRequestFromPem(e.csr);try{o.verify()}catch(d){return St.error(d),new Error("Error verifying CSR: "+d.message)}let c=Su.pki.createCertificate();c.serialNumber=Math.random().toString().slice(2,10),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+qy),St.info("sign cert setting validity:",c.validity),St.info("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),St.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;St.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,Su.md.sha256.create()),t.certificate=bt.certificateToPem(c)}else St.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(Lre,"signCertificate");async function Mre(e,t){await gu({name:Vp(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await gu({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:bt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(Mre,"createCertificateTable");async function gu(e){let t=new ao(e.certificate);e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},ca(),await Dr.patch(e)}a(gu,"setCertTable");async function Vy(){let e=await Hy("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{public_key:bt.publicKeyFromPem(e.publicKey),private_key:bt.privateKeyFromPem(e.privateKey)}}a(Vy,"generateKeys");async function Ky(e,t,r){let n=bt.createCertificate();if(!t){let o=await rf();t=bt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+qy);let i=[{name:"commonName",value:$p()},...$y];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(rH()),n.sign(e,Su.md.sha256.create()),bt.certificateToPem(n)}a(Ky,"generateCertificates");async function Fy(){let e=await lH(),t;for(let r of e){if(!r.is_authority)continue;let n=await cH(r.private_key_name);if(r.private_key_name&&n&&new ao(r.certificate).checkPrivateKey(jB(n))){St.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;St.trace("No CA found with matching private key")}a(Fy,"getCertAuthority");async function nH(e,t,r=!0){let n=bt.createCertificate();n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+qy);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${Es.get(Tu.REPLICATION_HOSTNAME)??JB(Es.get(Tu.REPLICATION_URL))??zB().split("-")[0]}`},...$y];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,Su.md.sha256.create());let o=ir.join(Es.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),c=ir.join(o,Xs.PRIVATEKEY_PEM_NAME);return r&&await pn.writeFile(c,bt.privateKeyToPem(e)),n}a(nH,"generateCertAuthority");async function Ure(){let{private_key:e,public_key:t}=await Vy(),r=await nH(e,t),n=await Ky(e,t,r);await Mre(n,r),sH()}a(Ure,"generateCertsKeys");async function vre(){let e=await Ky(bt.privateKeyFromPem(Xs.CERTIFICATE_VALUES.key),void 0,bt.certificateFromPem(Xs.CERTIFICATE_VALUES.cert)),t=ir.join(Es.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),r=ir.join(t,Xs.NATS_CERTIFICATE_PEM_NAME);await pn.exists(r)||await pn.writeFile(r,e);let n=ir.join(t,Xs.NATS_CA_PEM_NAME);await pn.exists(n)||await pn.writeFile(n,Xs.CERTIFICATE_VALUES.cert)}a(vre,"createNatsCerts");async function Bre(){ca();for await(let e of Dr.search([{attribute:"is_self_signed",value:!0}]))await Dr.delete(e.name);await Yy()}a(Bre,"renewSelfSigned");async function Yy(){Nre(),await tH(),ca();let e=await Fy();if(!e){St.notify("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=Es.get(Tu.TLS_PRIVATEKEY),n=ir.join(Es.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),s,i=QB(n,r);try{s=bt.privateKeyFromPem(await pn.readFile(r))}catch(c){St.warn("Unable to parse the TLS key",r,"A new key will be generated and used to create Certificate Authority",c),{private_key:s}=await Vy(),await pn.exists(ir.join(n,Xs.PRIVATEKEY_PEM_NAME))&&(i=`privateKey${zB().split("-")[0]}.pem`),await pn.writeFile(ir.join(n,i),bt.privateKeyToPem(s))}let o=await nH(s,bt.setRsaPublicKey(s.n,s.e),!1);await gu({name:o.subject.getField("CN").value,uses:["https"],certificate:bt.certificateToPem(o),private_key_name:i,is_authority:!0,is_self_signed:!0})}if(!await rf()){let r=Vp();St.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await Fy();let n=bt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await Ky(bt.privateKeyFromPem(e.private_key),s,n);await gu({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(Yy,"reviewSelfSignedCert");function sH(){let e=Are(Object.keys(hs.CONFIG_PARAM_MAP),!0),t=ir.join(Es.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),r=ir.join(t,Xs.PRIVATEKEY_PEM_NAME),n=ir.join(t,Xs.NATS_CERTIFICATE_PEM_NAME),s=ir.join(t,Xs.NATS_CA_PEM_NAME),i=hs.CONFIG_PARAMS,o={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(o[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(o[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,o[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,o[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),xy.updateConfigValue(void 0,void 0,o,!1,!0)}a(sH,"updateConfigCert");function iH(e){return e.startsWith("-----BEGIN")?e:Ire(e,"utf8")}a(iH,"readPEM");var YB=wc.createSecureContext;wc.createSecureContext=function(e){if(!e.cert||!e.key)return YB(e);let t={...e};delete t.key,delete t.cert;let r=YB(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var oH=wc.Server;wc.Server=function(e,t){return e.ALPNCallback&&(e.ALPNProtocols=null),oH.call(this,e,t)};wc.Server.prototype=oH.prototype;var Hre=eH.prototype._init;eH.prototype._init=function(e,t){Hre.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,o)=>{this.sni_context=o?.context||o,this.certCbDone()})}};var Ic=new Map;function aH(e,t){let r=new Map,n,s=!1;return i.initialize=o=>i.ready?i.ready:(o&&(o.secureContexts=r,o.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),Ic.clear();let d=0;for await(let _ of By.system.hdb_certificate.search([])){let E=_.certificate,f=new ao(E);_.is_authority&&(f.asString=E,Ic.set(f.subject,E))}for await(let _ of By.system.hdb_certificate.search([]))try{if(_.is_authority)continue;let E=e==="operations-api",f=_.is_self_signed?1:2;E&&_.uses?.includes?.("operations")&&(f+=1);let h=await cH(_.private_key_name),T=_.certificate,m=new ao(T);if(Ic.has(m.issuer)&&(T+=`