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.
- package/README.md +1 -1
- package/bin/harperdb.js +1 -1
- package/bin/lite.js +1 -1
- package/launchServiceScripts/launchInstallNATSServer.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +1 -1
- package/launchServiceScripts/launchNatsReplyService.js +1 -1
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +1 -1
- package/npm-shrinkwrap.json +8 -8
- package/package.json +1 -1
- package/server/jobs/jobProcess.js +1 -1
- package/server/threads/threadServer.js +1 -1
- package/studio/build-local/asset-manifest.json +2 -2
- package/studio/build-local/index.html +1 -1
- package/studio/build-local/static/js/{main.457cac00.js → main.11792bb9.js} +2 -2
- package/utility/scripts/restartHdb.js +1 -1
- /package/studio/build-local/static/js/{main.457cac00.js.LICENSE.txt → main.11792bb9.js.LICENSE.txt} +0 -0
|
@@ -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:DQ.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(vQ,"findPs")});var Ht=N((mge,AC)=>{"use strict";var BQ="__dbis__",HQ="__txns__",xQ="__environment_name__",kQ="__dbi_defintion__",FQ={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"},GQ=["__createdtime__","__updatedtime__"],qQ="\uFFFF",gC={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},$Q=Object.values(gC);AC.exports={AUDIT_STORE_NAME:HQ,INTERNAL_DBIS_NAME:BQ,DBI_DEFINITION_NAME:kQ,SEARCH_TYPES:FQ,TIMESTAMP_NAMES:GQ,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:xQ,TRANSACTIONS_DBI_NAMES_ENUM:gC,TRANSACTIONS_DBIS:$Q,OVERFLOW_MARKER:qQ}});var Pn=N((Sge,PC)=>{"use strict";var RC=M(),yC=Ht(),bC={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},OC=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),NC={500:OC("There was an error processing your request."),400:"Invalid request"},VQ=NC[bC.INTERNAL_SERVER_ERROR],KQ={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")},YQ={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},WQ={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"},jQ={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 ${yC.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${yC.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"},zQ={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${RC.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 ${RC.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"},IC={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"},QQ={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."},JQ={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")},XQ={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"},ZQ={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},e2={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")},wC={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")},CC={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")},t2={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"},r2={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},n2={...IC,...WQ,...KQ,...QQ,...JQ,...XQ,...ZQ,...e2,...zQ,...wC,...CC,...t2,...r2,...YQ};PC.exports={CHECK_LOGS_WRAPPER:OC,HDB_ERROR_MSGS:n2,DEFAULT_ERROR_MSGS:NC,DEFAULT_ERROR_RESP:VQ,HTTP_STATUS_CODES:bC,LMDB_ERRORS_ENUM:jQ,AUTHENTICATION_ERROR_MSGS:IC,VALIDATION_ERROR_MSGS:wC,ITC_ERRORS:CC}});var _e=N((gge,MC)=>{"use strict";var wl=Pn(),s2=j(),i2=M(),sh=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,DC),this.statusCode=n||wl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(wl.DEFAULT_ERROR_MSGS[n]?wl.DEFAULT_ERROR_MSGS[n]:wl.DEFAULT_ERROR_MSGS[wl.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&&s2[s](i)}},Eg=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}},hg=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function DC(e,t,r,n=i2.LOG_LEVELS.ERROR,s=null,i=!1){if(LC(e))return e;let o=new sh(e,t,r,n,s);return i&&delete o.stack,o}a(DC,"handleHDBError");function LC(e){return e.__proto__.constructor.name===sh.name}a(LC,"isHDBError");MC.exports={isHDBError:LC,handleHDBError:DC,ClientError:Eg,ServerError:hg,hdb_errors:wl}});var Tt=N((Rge,FC)=>{"use strict";var $d=M(),o2=re(),nn=se(),Vd=require("path"),a2=require("minimist"),UC=require("fs-extra"),vC=require("lodash");nn.initSync();var{CONFIG_PARAMS:$o,DATABASES_PARAM_CONFIG:kd,SYSTEM_SCHEMA_NAME:ih}=$d,Fd,Gd,qd;function BC(){if(Fd!==void 0)return Fd;if(nn.getHdbBasePath()!==void 0)return Fd=nn.get($o.STORAGE_PATH)||Vd.join(nn.getHdbBasePath(),$d.DATABASES_DIR_NAME),Fd}a(BC,"getBaseSchemaPath");function HC(){if(Gd!==void 0)return Gd;if(nn.getHdbBasePath()!==void 0)return Gd=kC(ih),Gd}a(HC,"getSystemSchemaPath");function xC(){if(qd!==void 0)return qd;if(nn.getHdbBasePath()!==void 0)return qd=nn.get($d.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Vd.join(nn.getHdbBasePath(),$d.TRANSACTIONS_DIR_NAME),qd}a(xC,"getTransactionAuditStoreBasePath");function c2(e,t){let r=nn.get($o.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Vd.join(xC(),e.toString())}a(c2,"getTransactionAuditStorePath");function kC(e,t){e=e.toString(),t=t&&t.toString();let r=nn.get($d.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Vd.join(BC(),e)}a(kC,"getSchemaPath");function l2(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,a2(process.argv));let n=r[$o.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!o2.isObject(n))throw o;i=n}for(let o of i){let c=o[ih];if(!c)continue;let l=nn.get($o.DATABASES);l=l??{};let u=c?.tables?.[t]?.[kd.PATH];if(u)return vC.set(l,[ih,kd.TABLES,t,kd.PATH],u),nn.setProperty($o.DATABASES,l),u;let d=c?.[kd.PATH];if(d)return vC.set(l,[ih,kd.PATH],d),nn.setProperty($o.DATABASES,l),d}}let s=r[$o.STORAGE_PATH.toUpperCase()];if(s){if(!UC.pathExistsSync(s))throw new Error(s+" does not exist");let i=Vd.join(s,e);return UC.mkdirsSync(i),nn.setProperty($o.STORAGE_PATH,s),i}return HC()}a(l2,"initSystemSchemaPaths");function u2(){Fd=void 0,Gd=void 0,qd=void 0}a(u2,"resetPaths");FC.exports={getBaseSchemaPath:BC,getSystemSchemaPath:HC,getTransactionAuditStorePath:c2,getTransactionAuditStoreBasePath:xC,getSchemaPath:kC,initSystemSchemaPaths:l2,resetPaths:u2}});var sn=N((Nge,KC)=>{"use strict";var d2=Pn().LMDB_ERRORS_ENUM,bge=require("lmdb"),_2=Ht(),Oge=require("buffer").Buffer,{OVERFLOW_MARKER:GC,MAX_SEARCH_KEY_LENGTH:oh}=_2,qC=["number","string","symbol","boolean","bigint"];function f2(e){if(e=e?.primaryStore||e,!e)throw new Error(d2.ENV_REQUIRED)}a(f2,"validateEnv");function E2(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(E2,"stringifyData");function h2(e){return e instanceof Date?e.valueOf():e}a(h2,"convertKeyValueToWrite");function p2(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(qC.includes(typeof e))return e.length>oh?[e.slice(0,oh)+GC]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(qC.includes(typeof i))i.length>oh?r.push(i.slice(0,oh)+GC):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(p2,"getIndexedValues");var ah=0,$C=0;function VC(){$C=Date.now()-performance.now()}a(VC,"adjustStartTime");VC();var m2=6e4;setInterval(VC,m2).unref();function S2(){let e=performance.now()+$C;return e>ah?(ah=e,e):(ah+=488e-6,ah)}a(S2,"getNextMonotonicTime");KC.exports={validateEnv:f2,stringifyData:E2,convertKeyValueToWrite:h2,getNextMonotonicTime:S2,getIndexedValues:p2}});var Kd=N((wge,YC)=>{"use strict";var T2=M().OPERATIONS_ENUM,pg=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=T2.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};YC.exports=pg});var Yd=N((Dge,QC)=>{"use strict";var Pge=Kd(),ch=M(),mg=re(),WC=j(),g2=require("uuid"),{handleHDBError:lh,hdb_errors:A2}=_e(),{HDB_ERROR_MSGS:uh,HTTP_STATUS_CODES:dh}=A2;QC.exports=jC;function jC(e,t,r){for(let s=0;s<t.length;s++)zC(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];R2(i,r,e.operation)}}a(jC,"processRows");jC.validateAttribute=zC;function zC(e){if(Buffer.byteLength(String(e))>ch.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw lh(new Error,uh.ATTR_NAME_LENGTH_ERR(e),dh.BAD_REQUEST,void 0,void 0,!0);if(mg.isEmptyOrZeroLength(e)||mg.isEmpty(e.trim()))throw lh(new Error,uh.ATTR_NAME_NULLISH_ERR,dh.BAD_REQUEST,void 0,void 0,!0)}a(zC,"validateAttribute");function R2(e,t,r){if(!e.hasOwnProperty(t)||mg.isEmptyOrZeroLength(e[t])){if(r===ch.OPERATIONS_ENUM.INSERT||r===ch.OPERATIONS_ENUM.UPSERT){e[t]=g2.v4();return}throw WC.error("Update transaction aborted due to record with no hash value:",e),lh(new Error,uh.RECORD_MISSING_HASH_ERR,dh.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>ch.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw WC.error(e),lh(new Error,uh.HASH_VAL_LENGTH_ERR,dh.BAD_REQUEST,void 0,void 0,!0)}a(R2,"validateHash")});var JC,Dn,Sg,Cl=Ie(()=>{JC=require("events"),Dn=class extends JC.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new Sg;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)}},Sg=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 XC,it,qr=Ie(()=>{XC=L(fi()),it={};(0,XC._assignPackageExport)("server",it)});var Ag={};je(Ag,{loadGQLSchema:()=>O2,start:()=>gg,startOnMainThread:()=>b2});function gg({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(Y){if(Y.kind==="NonNullType"){let Q=H(Y.type);return Q.nullable=!1,Q}if(Y.kind==="ListType")return{type:"array",elements:H(Y.type)};let ne={type:Y.name?.value};return Object.defineProperty(ne,"location",{value:Y.loc.startToken}),ne};a(H,"getProperty");let S=g.name.value,y=[],I={table:null,database:null,properties:y};E.set(S,I);for(let Y of g.directives){if(Y.name.value==="table"){for(let ne of Y.arguments)I[ne.name.value]=ne.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(Y.name.value==="sealed"&&(I.sealed=!0),Y.name.value==="splitSegments"&&(I.splitSegments=!0),Y.name.value==="replicate"&&(I.replicate=!0),Y.name.value==="export"){I.export=!0;for(let ne of Y.arguments)typeof I.export!="object"&&(I.export={}),I.export[ne.name.value]=ne.value.value}}let U=!1,X={};for(let Y of g.fields){let V=H(Y.type);V.name=Y.name.value,y.push(V),X[V.name]=void 0;for(let ne of Y.directives){let Q=ne.name.value;if(Q==="primaryKey")U?console.warn("Can not define two attributes as a primary key at",ne.loc):(V.isPrimaryKey=!0,U=!0);else if(Q==="indexed")V.indexed=!0;else if(Q==="computed"){for(let de of ne.arguments||[])if(de.name.value==="from"){let W=de.value.value;V.computed={from:m(W,de,X)},V.version==null&&(V.version=W)}else de.name.value==="version"&&(V.version=de.value.value);V.computed=V.computed||!0}else if(Q==="relationship"){let de={};for(let W of ne.arguments)de[W.name.value]=W.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 W of ne.arguments)W.name.value==="role"&&de.push(W.value.value)}else server.knownGraphQLDirectives.includes(Q)&&console.warn(`@${Q} is an unknown directive, at`,ne.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):y2.includes(g.type)||(0,eP.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,Tg.dirname)(n),g.tableClass):i.set((0,Tg.dirname)(n)+"/"+(g.export.name||g.type),g.tableClass,g.export));function m(g,S,y){return new ZC.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 Tg,ZC,eP,y2,b2,O2,tP=Ie(()=>{Tg=require("path"),ZC=require("node:vm");Pe();eP=L(dt()),y2=["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(gg,"start");b2=gg,O2=gg({ensureTable:Et}).handleFile});var cP={};je(cP,{parse:()=>yg,streamAsJSON:()=>Wd,stringify:()=>za});function Wd(e){return new Rg({value:e})}function rP(e){return console.error(e),JSON.stringify(e.toString())}function nP(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function za(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===oP)return aP(e);if(t.resolution)return t.resolution.then(()=>za(e));throw t}}function aP(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+=aP(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+za(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function yg(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),w2.test(e)?N2.parse(e):JSON.parse(e)):null}var sP,iP,N2,I2,oP,Rg,w2,bg=Ie(()=>{sP=require("stream"),iP=L(require("json-bigint-fixes")),N2=(0,iP.default)({useNativeBigInt:!0}),I2=1e4,oP={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw oP};a(Wd,"streamAsJSON");Rg=class extends sP.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),rP)}catch(s){yield rP(s)}else yield za(t)}else yield za(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);nP(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>I2?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 nP(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(rP,"handleError");a(nP,"when");a(za,"stringify");a(aP,"jsStringify");w2=/[[,:]\s*-?\d{16,}/;a(yg,"parse")});var AP=N((kge,gP)=>{"use strict";var Og=require("recursive-iterator"),C2=require("alasql"),Ng=require("clone"),lP=re(),{handleHDBError:uP,hdb_errors:P2}=_e(),{HDB_ERROR_MSGS:dP,HTTP_STATUS_CODES:_P}=P2,{getDatabases:D2}=(Pe(),oe(lt)),L2=["DISTINCT_ARRAY"],fP=Symbol("validateTables"),Ig=Symbol("validateTable"),xge=Symbol("getAllColumns"),EP=Symbol("validateAllColumns"),_h=Symbol("findColumn"),hP=Symbol("validateOrderBy"),jd=Symbol("validateSegment"),wg=Symbol("validateColumn"),pP=Symbol("setColumnsForTable"),mP=Symbol("checkColumnsForAsterisk"),SP=Symbol("validateGroupBy"),TP=Symbol("hasColumns"),Cg=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[fP](),this[mP](),this[EP]()}[fP](){if(this[TP]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Ig](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Ig](t.table)})}}[TP](){let t=!1,r=new Og(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Ig](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=D2();if(!r[t.databaseid])throw uP(new Error,dP.SCHEMA_NOT_FOUND(t.databaseid),_P.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw uP(new Error,dP.TABLE_NOT_FOUND(t.databaseid,t.tableid),_P.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Ng(s);i.table=Ng(t),this.attributes.push(i)})}[_h](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)}[mP](){let t=new Og(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[pP](r.tableid)}[pP](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new C2.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[EP](){this[jd](this.statement.columns,!1),this[jd](this.statement.joins,!1),this[jd](this.statement.where,!1),this[SP](this.statement.group,!1),this[jd](this.statement.order,!0)}[jd](t,r){if(!t)return;let n=new Og(t),s=[];for(let{node:i,path:o}of n)!lP.isEmpty(i)&&!lP.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[hP](i):s.push(this[wg](i)));return s}[SP](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&L2.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Ng(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[_h](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[_h](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`}[hP](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[wg](t)}[wg](t){let r=this[_h](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]}};gP.exports=Cg});var yP=N((Gge,RP)=>{"use strict";var Pg=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")}};RP.exports=Pg});var OP=N(($ge,bP)=>{"use strict";var Dg=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};bP.exports=Dg});var CP={};je(CP,{HAS_EXPIRATION:()=>hh,HAS_RESIDENCY_ID:()=>kg,HAS_STRUCTURE_UPDATE:()=>ph,LAST_TIMESTAMP_PLACEHOLDER:()=>Xd,LOCAL_TIMESTAMP:()=>M2,METADATA:()=>zd,NO_TIMESTAMP:()=>Mg,PENDING_LOCAL_TIME:()=>Fg,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>xg,RecordEncoder:()=>Hg,TIMESTAMP_ASSIGN_LAST:()=>v2,TIMESTAMP_ASSIGN_NEW:()=>IP,TIMESTAMP_ASSIGN_PREVIOUS:()=>wP,TIMESTAMP_PLACEHOLDER:()=>fh,TIMESTAMP_RECORD_PREVIOUS:()=>Ug,getUpdateRecord:()=>Gg,handleLocalTimeForGets:()=>mh});function H2(){return Jd[0]=Jd[0]^64,U2.getFloat64(0)}function mh(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?.[zd];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?.[zd]>=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[zd];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,Qa.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<Qa.length;l++){let u=Qa[l].deref();(!u||u.isDone||u.isCommitted)&&Qa.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function Gg(e,t,r){return function(n,s,i,o,c=-1,l,u,d="put",_,E){_||l==null?Pl=i?.localTime?Ug|wP:Mg:Pl=l?i?.localTime?Ug|16384:IP|16384:Mg;let f=u?.expiresAt;if(f>=0&&(c|=hh),Qd=c,vg=f,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Pl>0},T,m=0;try{let g=i?.residencyId,S=u?.residencyId;S&&(Bg=S,Qd|=kg,m|=Ja),g!==S&&(m|=Xa,g||(g=0)),c&hh&&(m|=e_),u?.originatingOperation&&(m|=Zd),_&&(h.ifVersion=T=i?.version??null);let y=e.put(n,s,h);if(l){let I=u?.user?.username;if(E&&(Eh=e.encoder.encode(E)),e.encoder.hasStructureUpdate&&(m|=ph,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,Dl(o,t,n,X,u?.nodeId??server.replication.getThisNodeId(r)??0,I,d,Eh,m,S,g,f),{ifVersion:T}),y}}r.put(Xd,Dl(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,I,d,Eh,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 NP,Lg,fh,Xd,xg,M2,zd,Jd,U2,Mg,IP,v2,wP,Ug,hh,kg,Fg,ph,B2,Eh,Pl,Qd,vg,Bg,Hg,Qa,Ll=Ie(()=>{NP=require("msgpackr");ji();Lg=L(j()),fh=new Uint8Array([1,1,1,1,4,64,0,0]),Xd=new Uint8Array([1,1,1,1,1,0,0,0]),xg=new Uint8Array([1,1,1,1,3,64,0,0]),M2=Symbol("local-timestamp"),zd=Symbol("metadata"),Jd=new Uint8Array(8),U2=new DataView(Jd.buffer,0,8),Mg=0,IP=0,v2=1,wP=3,Ug=4,hh=16,kg=32,Fg=1,ph=256,Pl=0,Qd=-1,vg=-1,Bg=0,Hg=class extends NP.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(Pl||Qd>=0){let o=0,c=Pl;c&&(o+=8,Pl=0);let l=Qd,u=vg,d=Bg;l>=0&&(o+=2,Qd=-1,u>=0&&(o+=8,vg=-1),d&&(o+=4,Bg=0));let _=B2=r.call(this,s,i|2048|o);Eh=_.subarray((_.start||0)+o,_.end);let E=_.start||0;return c&&(fh[4]=c,fh[5]=c>>8,_.set(fh,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(Jd,0,c),c+=8;else for(let E=0;E<8;E++)Jd[E]=t[c++];l=H2(),i=t[c]}let u,d;i<32&&(o=i|t[c+1]<<5,c+=2,o&hh&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&kg&&(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:_,[zd]: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(H2,"getTimestamp");a(mh,"handleLocalTimeForGets");Qa=[];setInterval(()=>{for(let e=0;e<Qa.length;e++){let t=Qa[e].deref();!t||t.isDone||t.isCommitted?Qa.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Lg.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Lg.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(Gg,"getUpdateRecord")});var t_=N((jge,DP)=>{"use strict";var PP=se(),x2=M(),{RecordEncoder:k2}=(Ll(),oe(CP)),Wge=require("fs");PP.initSync();var F2=PP.get(x2.CONFIG_PARAMS.STORAGE_CACHING)!==!1,qg=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=F2&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:k2})}};DP.exports=qg});var r_=N((Qge,LP)=>{"use strict";var Ln=se(),cs=M();Ln.initSync();var Sh=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)}};LP.exports=Sh;Sh.MAX_DBS=1e4});var ht=N((Xge,qP)=>{"use strict";var Vg=require("lmdb"),xs=require("fs-extra"),Mn=require("path"),Th=sn(),vP=j(),on=Pn().LMDB_ERRORS_ENUM,gh=OP(),Kg=t_(),BP=r_(),Vo=Ht(),MP=M(),{table:G2,resetDatabases:q2}=(Pe(),oe(lt)),UP=se(),ks=Vo.INTERNAL_DBIS_NAME,HP=Vo.DBI_DEFINITION_NAME,$2="data.mdb",V2="lock.mdb",n_=".mdb",K2="-lock",$g=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=ls(t,r),this.key_type=this.dbi[Vo.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Vo.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new Vg.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Ah(e,t){if(e===void 0)throw new Error(on.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(on.ENV_NAME_REQUIRED)}a(Ah,"pathEnvNameValidation");async function Yg(e,t,r=!0){try{await xs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(on.INVALID_BASE_PATH):n}try{let n=Mn.join(e,t+n_);return await xs.access(n,xs.constants.R_OK|xs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await xs.access(Mn.join(e,t,$2),xs.constants.R_OK|xs.constants.F_OK),Mn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(on.INVALID_ENVIRONMENT)}else throw new Error(on.INVALID_ENVIRONMENT);throw n}}a(Yg,"validateEnvironmentPath");function Rh(e,t){if(Th.validateEnv(e),t===void 0)throw new Error(on.DBI_NAME_REQUIRED)}a(Rh,"validateEnvDBIName");async function Y2(e,t,r=!1,n=!1){Ah(e,t);let s=Mn.basename(e);t=t.toString();let i=UP.get(MP.CONFIG_PARAMS.DATABASES);i||UP.setProperty(MP.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await Yg(e,t,n),xP(e,t,r)}catch(o){if(o.message===on.INVALID_ENVIRONMENT){let c=Mn.join(e,t);await xs.mkdirp(n?c:e);let l=new BP(n?c:c+n_,!1),u=Vg.open(l);u.dbis=Object.create(null);let d=new Kg(!1);u.openDB(ks,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let _=Wg(e,t,r);return u[Vo.ENVIRONMENT_NAME_KEY]=_,global.lmdb_map[_]=u,u}throw o}}a(Y2,"createEnvironment");async function W2(e,t,r,n=!0){Ah(e,t),t=t.toString();let s=Mn.join(e,t);return G2({table:t,database:Mn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(W2,"copyEnvironment");async function xP(e,t,r=!1){Ah(e,t),t=t.toString();let n=Wg(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 Yg(e,t),i=Mn.join(e,t+n_),o=s!=i,c=new BP(s,o),l=Vg.open(c);l.dbis=Object.create(null);let u=FP(l);for(let d=0;d<u.length;d++)ls(l,u[d]);return l[Vo.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(xP,"openEnvironment");async function j2(e,t,r=!1){Ah(e,t),t=t.toString();let n=Mn.join(e,t+n_),s=await Yg(e,t);if(global.lmdb_map!==void 0){let i=Wg(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await kP(o),delete global.lmdb_map[i]}}await xs.remove(s),await xs.remove(s===n?s+K2:Mn.join(Mn.dirname(s),V2))}a(j2,"deleteEnvironment");async function kP(e){Th.validateEnv(e);let t=e[Vo.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(kP,"closeEnvironment");function Wg(e,t,r=!1){let s=`${Mn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(Wg,"getCachedEnvironmentName");function z2(e){Th.validateEnv(e);let t=Object.create(null),r=ls(e,ks);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==ks)try{t[n]=Object.assign(new gh,s)}catch{vP.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(z2,"listDBIDefinitions");function FP(e){Th.validateEnv(e);let t=[],r=ls(e,ks);for(let{key:n}of r.getRange({start:!1}))n!==ks&&t.push(n);return t}a(FP,"listDBIs");function Q2(e,t){let n=ls(e,ks).getEntry(t),s=new gh;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{vP.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(Q2,"getDBIDefinition");function GP(e,t,r,n=!r){if(Rh(e,t),t=t.toString(),t===ks)throw new Error(on.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return ls(e,t)}catch(s){if(s.message===on.DBI_DOES_NOT_EXIST){let i=new Kg(r,n===!0),o=e.openDB(t,i),c=new gh(r===!0,n);return o[HP]=c,ls(e,ks).putSync(t,c),e.dbis[t]=o,o}throw s}}a(GP,"createDBI");function ls(e,t){if(Rh(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ks?r=Q2(e,t):r=new gh,r===void 0)throw new Error(on.DBI_DOES_NOT_EXIST);let n;try{let s=new Kg(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(on.DBI_DOES_NOT_EXIST):s}return n[HP]=r,e.dbis[t]=n,n}a(ls,"openDBI");function J2(e,t){Rh(e,t),t=t.toString();let r=ls(e,t),n=r.getStats();return r[Vo.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(J2,"statDBI");async function X2(e,t){try{let r=Mn.join(e,t+n_);return(await xs.stat(r)).size}catch{throw new Error(on.INVALID_ENVIRONMENT)}}a(X2,"environmentDataSize");function Z2(e,t){if(Rh(e,t),t=t.toString(),t===ks)throw new Error(on.CANNOT_DROP_INTERNAL_DBIS_NAME);ls(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],ls(e,ks).removeSync(t)}a(Z2,"dropDBI");function e4(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===on.DBI_DOES_NOT_EXIST)GP(e,i,i!==t,i===t),n=!0;else throw o}}n&&q2()}a(e4,"initializeDBIs");qP.exports={openDBI:ls,openEnvironment:xP,createEnvironment:Y2,listDBIs:FP,listDBIDefinitions:z2,createDBI:GP,dropDBI:Z2,statDBI:J2,deleteEnvironment:j2,initializeDBIs:e4,TransactionCursor:$g,environmentDataSize:X2,copyEnvironment:W2,closeEnvironment:kP}});var VP=N((eAe,$P)=>{"use strict";var jg=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};$P.exports=jg});var YP=N((rAe,KP)=>{"use strict";var zg=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}};KP.exports=zg});var jP=N((sAe,WP)=>{"use strict";var Qg=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};WP.exports=Qg});var ec=N((lAe,JP)=>{"use strict";var t4=ht(),r4=VP(),n4=YP(),s4=jP(),pi=sn(),s_=Pn().LMDB_ERRORS_ENUM,i4=Ht(),zi=M(),o4=re(),a4=require("uuid"),oAe=require("lmdb"),{handleHDBError:c4,hdb_errors:l4}=_e(),{OVERFLOW_MARKER:aAe,MAX_SEARCH_KEY_LENGTH:cAe}=i4,zP=se();zP.initSync();var yh=zP.get(zi.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Jg=zi.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Za=zi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function u4(e,t,r,n,s=pi.getNextMonotonicTime()){tA(e,t,r,n),Xg(e,t,r);let i=new r4,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];QP(u,!0,s);let d=d4(e,t,r,u),_=u[t];o.push(d),c.push(_)}return Zg(o,c,n,i,s)}a(u4,"insertRecords");function d4(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][zi.FUNC_VAL],n[o]=c)}let l=pi.getIndexedValues(c),u=e.dbis[o];if(l){yh&&u.prefetch(l.map(d=>({key:d,value:s})),bh);for(let d=0,_=l.length;d<_;d++)u.put(l[d],s)}}yh&&e.dbis[t].prefetch([s],bh),e.dbis[t].put(s,n,n[Za])})}a(d4,"insertRecord");function _4(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(_4,"removeSkippedRecords");function QP(e,t,r){let n=r>0;(n||!Number.isInteger(e[Za]))&&(e[Za]=r||(r=pi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[Jg]))&&(e[Jg]=r||pi.getNextMonotonicTime()):delete e[Jg]}a(QP,"setTimestamps");function Xg(e,t,r){r.indexOf(zi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(zi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(zi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(zi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),t4.initializeDBIs(e,t,r)}a(Xg,"initializeTransaction");async function f4(e,t,r,n,s=pi.getNextMonotonicTime()){tA(e,t,r,n),Xg(e,t,r);let i=new n4,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],_=d[t],E;try{E=eA(e,t,d,_,i,!0,s)}catch{i.skipped_hashes.push(_),o.push(u);continue}c.push(E),l.push(_)}return Zg(c,l,n,i,s,o)}a(f4,"updateRecords");async function E4(e,t,r,n,s=pi.getNextMonotonicTime()){try{tA(e,t,r,n)}catch(l){throw c4(l,l.message,l4.HTTP_STATUS_CODES.BAD_REQUEST)}Xg(e,t,r);let i=new s4,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;o4.isEmpty(u[t])?(d=a4.v4(),u[t]=d):d=u[t];let _=eA(e,t,u,d,i,!1,s);o.push(_),c.push(d)}return Zg(o,c,n,i,s)}a(E4,"upsertRecords");async function Zg(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||pi.getNextMonotonicTime(),_4(r,i),n}a(Zg,"finalizeWrite");function eA(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(QP(r,!d,o),Number.isInteger(r[Za])&&u[Za]>r[Za])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][zi.FUNC_VAL],r[h]=T)}if(T===g)continue;let S=pi.getIndexedValues(g);if(S){yh&&m.prefetch(S.map(y=>({key:y,value:n})),bh);for(let y=0,I=S.length;y<I;y++)m.remove(S[y],n)}if(S=pi.getIndexedValues(T),S){yh&&m.prefetch(S.map(y=>({key:y,value:n})),bh);for(let y=0,I=S.length;y<I;y++)m.put(S[y],n)}}let f={...u,...r};c.put(n,f,f[Za])},"do_put");return l?_=c.ifVersion(n,l.version,E):_=c.ifNoExists(n,E),_.then(f=>f?!0:eA(e,t,r,n,s,i,o))}a(eA,"updateUpsertRecord");function h4(e,t,r){if(pi.validateEnv(e),t===void 0)throw new Error(s_.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(s_.WRITE_ATTRIBUTES_REQUIRED):new Error(s_.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(h4,"validateBasic");function tA(e,t,r,n){if(h4(e,t,r),!Array.isArray(n))throw n===void 0?new Error(s_.RECORDS_REQUIRED):new Error(s_.RECORDS_MUST_BE_ARRAY)}a(tA,"validateWrite");function bh(){}a(bh,"noop");JP.exports={insertRecords:u4,updateRecords:f4,upsertRecords:E4}});var Qi=N((dAe,p4)=>{p4.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 Si=N((_Ae,eD)=>{"use strict";var ZP=re(),XP=M(),Ml=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,mi=require("joi"),Ko={schema_format:{pattern:Ml,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},m4=mi.alternatives(mi.string().min(1).max(Ko.schema_length.maximum).pattern(Ml).messages({"string.pattern.base":"{:#label} "+Ko.schema_format.message}),mi.number(),mi.array()).required(),S4=mi.alternatives(mi.string().min(1).max(Ko.schema_length.maximum).pattern(Ml).messages({"string.pattern.base":"{:#label} "+Ko.schema_format.message}),mi.number()),T4=mi.alternatives(mi.string().min(1).max(Ko.schema_length.maximum).pattern(Ml).messages({"string.pattern.base":"{:#label} "+Ko.schema_format.message}),mi.number()).required();function g4(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Ko.schema_length.maximum?`'${e}' maximum of 250 characters`:Ml.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(g4,"checkValidTable");function A4(e,t){return ZP.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(A4,"validateSchemaExists");function R4(e,t){let r=t.state.ancestors[0].schema;return ZP.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(R4,"validateTableExists");function y4(e,t){return e.toLowerCase()===XP.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${XP.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(y4,"validateSchemaName");eD.exports={common_validators:Ko,schema_regex:Ml,hdb_schema_table:m4,validateSchemaExists:A4,validateTableExists:R4,validateSchemaName:y4,checkValidTable:g4,hdb_database:S4,hdb_table:T4}});var gt=N((EAe,tD)=>{"use strict";var an=require("validate.js");an.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||an.validators.type.checks[t](e)?null:` must be a '${t}' value`};an.validators.type.checks={Object:a(function(e){return an.isObject(e)&&!an.isArray(e)},"Object"),Array:an.isArray,Integer:an.isInteger,Number:an.isNumber,String:an.isString,Date:an.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};an.validators.hasValidFileExt=function(e,t){return an.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};tD.exports={validateObject:b4,validateObjectAsync:O4,validateBySchema:N4};function b4(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=an(e,t,{format:"flat"});return r?new Error(r):null}a(b4,"validateObject");async function O4(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await an.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(O4,"validateObjectAsync");function N4(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(N4,"validateBySchema")});var Oh=N((pAe,rD)=>{var{common_validators:Ti}=Si(),o_=gt(),i_="is required",tr={database:{presence:!1,format:Ti.schema_format,length:Ti.schema_length},schema:{presence:!1,format:Ti.schema_format,length:Ti.schema_length},table:{presence:!0,format:Ti.schema_format,length:Ti.schema_length},attribute:{presence:!0,format:Ti.schema_format,length:Ti.schema_length},hash_attribute:{presence:!0,format:Ti.schema_format,length:Ti.schema_length}};function a_(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(a_,"makeAttributesStrings");function I4(e){return e=a_(e),tr.table.presence=!1,tr.attribute.presence=!1,tr.hash_attribute.presence=!1,o_.validateObject(e,tr)}a(I4,"schema_object");function w4(e){return e=a_(e),tr.table.presence={message:i_},tr.attribute.presence=!1,tr.hash_attribute.presence=!1,o_.validateObject(e,tr)}a(w4,"table_object");function C4(e){return e=a_(e),tr.table.presence={message:i_},tr.attribute.presence=!1,o_.validateObject(e,tr)}a(C4,"create_table_object");function P4(e){return e=a_(e),tr.table.presence={message:i_},tr.attribute.presence={message:i_},tr.hash_attribute.presence=!1,o_.validateObject(e,tr)}a(P4,"attribute_object");function D4(e){return e=a_(e),tr.table.presence={message:i_},tr.attribute.presence=!1,tr.hash_attribute.presence=!1,o_.validateObject(e,tr)}a(D4,"describe_table");function L4(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(L4,"validateTableResidence");rD.exports={schema_object:I4,create_table_object:C4,table_object:w4,attribute_object:P4,describe_table:D4,validateTableResidence:L4}});var sD=N((SAe,nD)=>{"use strict";var M4=require("uuid"),rA=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||M4.v4(),this.schema_table=`${this.schema}.${this.table}`}};nD.exports=rA});var Nh=N((gAe,iD)=>{"use strict";var U4=sD(),nA=class extends U4{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}};iD.exports=nA});var aD=N((RAe,oD)=>{"use strict";oD.exports=B4;var v4="inserted";function B4(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===v4?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(B4,"returnObject")});var Ih=N((OAe,dD)=>{"use strict";var H4=M(),sA=ht(),x4=ec(),{getSystemSchemaPath:k4,getSchemaPath:F4}=Tt(),bAe=Qi(),G4=Oh(),q4=Nh(),$4=aD(),{handleHDBError:cD,hdb_errors:uD}=_e(),lD=re(),{HTTP_STATUS_CODES:V4}=uD,K4="inserted";dD.exports=Y4;async function Y4(e){let t=G4.attribute_object(e);if(t)throw cD(new Error,t.message,uD.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&lD.checkGlobalSchemaTable(e.schema,e.table);if(r)throw cD(new Error,r,V4.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=lD.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 q4(e.schema,e.table,e.attribute,e.id);try{let i=await sA.openEnvironment(F4(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}`);sA.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await sA.openEnvironment(k4(),H4.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await x4.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return $4(K4,c,{records:[s]},l)}catch(i){throw i}}a(Y4,"lmdbCreateAttribute")});var oA=N((IAe,fD)=>{var{hdb_table:W4,hdb_database:_D}=Si(),j4=gt(),iA=require("joi"),z4={undefined:"undefined",null:"null"},Q4=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||z4[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"),J4=iA.object({database:_D,schema:_D,table:W4,records:iA.array().items(iA.object().custom(Q4)).required()});fD.exports=function(e){return j4.validateBySchema(e,J4)}});var c_=N((PAe,hD)=>{"use strict";var Ji=re(),ED=j(),CAe=oA(),{getDatabases:X4}=(Pe(),oe(lt)),{ClientError:tc}=_e();hD.exports=Z4;function Z4(e){if(Ji.isEmpty(e))throw new tc("invalid update parameters defined.");if(Ji.isEmptyOrZeroLength(e.schema))throw new tc("invalid schema specified.");if(Ji.isEmptyOrZeroLength(e.table))throw new tc("invalid table specified.");if(!Array.isArray(e.records))throw new tc("records must be an array");let t=X4()[e.schema]?.[e.table];if(Ji.isEmpty(t))throw new tc(`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&&Ji.isEmptyOrZeroLength(o[r]))throw ED.error("a valid hash attribute must be provided with update record:",o),new tc("a valid hash attribute must be provided with update record, check log for more info");if(!Ji.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw ED.error(`a valid hash value must be provided with ${e.operation} record:`,o),new tc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Ji.isEmpty(o[r])&&o[r]!==""&&n.has(Ji.autoCast(o[r]))&&(o.skip=!0),n.add(Ji.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(Z4,"insertUpdateValidate")});var mD=N((LAe,pD)=>{"use strict";var aA=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};pD.exports=aA});var gD=N((UAe,TD)=>{"use strict";var cA=ht(),eJ=j(),SD=Pn().LMDB_ERRORS_ENUM;TD.exports=tJ;async function tJ(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 cA.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==SD.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await cA.closeEnvironment(global.lmdb_map[n]),await cA.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==SD.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){eJ.error(t)}}a(tJ,"cleanLMDBMap")});var Xi=N((BAe,bD)=>{"use strict";var l_=require("crypto"),rJ=se(),{CONFIG_PARAMS:nJ}=M(),RD="aes-256-cbc",sJ=32,iJ=16,lA=64,yD=32,oJ=lA+yD,AD=new Map;bD.exports={encrypt:aJ,decrypt:cJ,createNatsTableStreamName:lJ};function aJ(e){let t=l_.randomBytes(sJ),r=l_.randomBytes(iJ),n=l_.createCipheriv(RD,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(aJ,"encrypt");function cJ(e){let t=e.substr(0,lA),r=e.substr(lA,yD),n=e.substr(oJ,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=l_.createDecipheriv(RD,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(cJ,"decrypt");function lJ(e,t){let r=rJ.get(nJ.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=AD.get(r);return n||(n=l_.createHash("md5").update(r).digest("hex"),AD.set(r,n)),n}a(lJ,"createNatsTableStreamName")});var Zi=N((kAe,ID)=>{"use strict";var xAe=$r(),u_=j(),OD=Oh(),uJ=Xi(),wh=re(),{handleHDBError:Ch,hdb_errors:dJ}=_e(),{HDB_ERROR_MSGS:Ph,HTTP_STATUS_CODES:uA}=dJ,ND=se();ND.initSync();var{getDatabases:dA}=(Pe(),oe(lt)),_J=require("fs-extra"),fJ=M();ID.exports={describeAll:EJ,describeTable:Dh,describeSchema:hJ};async function EJ(e={}){try{let t=wh.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=dA(),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 Dh({schema:_,table:f,exact_count:u});else if(n&&n[_].describe&&n[_].tables[f].describe){let T=n[_].tables[f].attribute_permissions;h=await Dh({schema:_,table:f,exact_count:u},T)}h&&l.push(h)}catch(h){u_.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 u_.error("Got an error in describeAll"),u_.error(t),Ch(new Error,Ph.DESCRIBE_ALL_ERR)}}a(EJ,"describeAll");async function Dh(e,t){wh.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=OD.describe_table(e);if(i)throw i;let c=dA()[r];if(!c)throw Ch(new Error,Ph.SCHEMA_NOT_FOUND(e.schema),uA.NOT_FOUND);let l=c[n];if(!l)throw Ch(new Error,Ph.TABLE_NOT_FOUND(e.schema,e.table),uA.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 _J.stat(l.primaryStore.env.path)).size}catch(f){u_.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")),ND.get(fJ.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(E.clustering_stream_name=uJ.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){u_.warn(`unable to stat table dbi due to ${f}`)}return E}a(Dh,"descTable");async function hJ(e){wh.transformReq(e);let t=OD.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=dA()[n];if(!i)throw Ch(new Error,Ph.SCHEMA_NOT_FOUND(e.schema),uA.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),wh.isEmpty(l)||l.describe){let u=await Dh({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(hJ,"describeSchema")});var Fs=N(($Ae,LD)=>{var pJ=Qi(),{callbackify:CD,promisify:mJ}=require("util"),{getDatabases:PD}=(Pe(),oe(lt));LD.exports={setSchemaDataToGlobal:wD,getTableSchema:SJ,getSystemSchema:TJ,setSchemaDataToGlobalAsync:mJ(wD)};var DD=Zi(),GAe=CD(DD.describeAll),qAe=CD(DD.describeTable);function wD(e){global.hdb_schema=PD(),e&&e()}a(wD,"setSchemaDataToGlobal");function SJ(e,t,r){let n=PD()[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(SJ,"getTableSchema");function TJ(){return pJ}a(TJ,"getSystemSchema")});var cn=N((KAe,BD)=>{"use strict";var Mh=oA(),Cr=re(),gJ=require("util"),Uh=Un(),AJ=Fs(),MD=j(),{handleHDBError:rc,hdb_errors:RJ}=_e(),{HTTP_STATUS_CODES:nc}=RJ,yJ=gJ.promisify(AJ.getTableSchema),bJ="updated",UD="inserted",vD="upserted";BD.exports={insert:NJ,update:IJ,upsert:wJ,validation:OJ,flush:CJ};async function OJ(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 yJ(e.schema,e.table),r=Mh(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 MD.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 MD.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(OJ,"validation");async function NJ(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Mh(e);if(t)throw rc(new Error,t.message,nc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw rc(new Error,r,nc.BAD_REQUEST);let n=await Uh.createRecords(e);return Lh(UD,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(NJ,"insertData");async function IJ(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Mh(e);if(t)throw rc(new Error,t.message,nc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw rc(new Error,r,nc.BAD_REQUEST);let n=await Uh.updateRecords(e);return Cr.isEmpty(n.existing_rows)?Lh(bJ,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Lh(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(IJ,"updateData");async function wJ(e){if(e.operation!=="upsert")throw rc(new Error,"invalid operation, must be upsert",nc.INTERNAL_SERVER_ERROR);let t=Mh(e);if(t)throw rc(new Error,t.message,nc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw rc(new Error,r,nc.BAD_REQUEST);let n=await Uh.upsertRecords(e);return Lh(vD,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(wJ,"upsertData");function Lh(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===UD?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===vD?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Lh,"returnObject");function CJ(e){return Cr.transformReq(e),Uh.flush(e.schema,e.table)}a(CJ,"flush")});var fA=N((WAe,kD)=>{var PJ=gt(),_A=require("joi"),{hdb_table:DJ,hdb_database:HD}=Si(),xD={schema:HD,database:HD,table:DJ},LJ={date:_A.date().iso().required()},MJ={timestamp:_A.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};kD.exports=function(e,t){let r=t==="timestamp"?{...xD,...MJ}:{...xD,...LJ},n=_A.object(r);return PJ.validateBySchema(e,n)}});var qD=N((jAe,GD)=>{var UJ=gt(),EA=require("joi"),{hdb_table:vJ,hdb_database:FD}=Si(),BJ=EA.object({schema:FD,database:FD,table:vJ,hash_values:EA.array().required(),ids:EA.array()});GD.exports=function(e){return UJ.validateBySchema(e,BJ)}});var SA=N((zAe,$D)=>{"use strict";var hA=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}},pA=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}},mA=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};$D.exports={InsertObject:hA,NoSQLSeachObject:pA,DeleteResponseObject:mA}});var oc=N((JAe,jD)=>{"use strict";var KD=fA(),HJ=qD(),sc=re(),VD=require("moment"),YD=j(),{promisify:xJ,callbackify:kJ}=require("util"),ic=M(),FJ=Fs(),TA=xJ(FJ.getTableSchema),gA=Un(),{DeleteResponseObject:GJ}=SA(),{handleHDBError:Yo,hdb_errors:qJ}=_e(),{HDB_ERROR_MSGS:vh,HTTP_STATUS_CODES:Wo}=qJ,$J="records successfully deleted",VJ=kJ(WD);jD.exports={delete:VJ,deleteRecord:WD,deleteFilesBefore:KJ,deleteAuditLogsBefore:YJ};async function KJ(e){let t=KD(e,"date");if(t)throw Yo(t,t.message,Wo.BAD_REQUEST,void 0,void 0,!0);if(sc.transformReq(e),!VD(e.date,VD.ISO_8601).isValid())throw Yo(new Error,vh.INVALID_DATE,Wo.BAD_REQUEST,ic.LOG_LEVELS.ERROR,vh.INVALID_DATE,!0);let n=sc.checkSchemaTableExist(e.schema,e.table);if(n)throw Yo(new Error,n,Wo.NOT_FOUND,ic.LOG_LEVELS.ERROR,n,!0);let s=await gA.deleteRecordsBefore(e);if(await TA(e.schema,e.table),YD.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(KJ,"deleteFilesBefore");async function YJ(e){let t=KD(e,"timestamp");if(t)throw Yo(t,t.message,Wo.BAD_REQUEST,void 0,void 0,!0);if(sc.transformReq(e),isNaN(e.timestamp))throw Yo(new Error,vh.INVALID_VALUE("Timestamp"),Wo.BAD_REQUEST,ic.LOG_LEVELS.ERROR,vh.INVALID_VALUE("Timestamp"),!0);let r=sc.checkSchemaTableExist(e.schema,e.table);if(r)throw Yo(new Error,r,Wo.NOT_FOUND,ic.LOG_LEVELS.ERROR,r,!0);let n=await gA.deleteAuditLogsBefore(e);return await TA(e.schema,e.table),YD.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(YJ,"deleteAuditLogsBefore");async function WD(e){e.ids&&(e.hash_values=e.ids);let t=HJ(e);if(t)throw Yo(t,t.message,Wo.BAD_REQUEST,void 0,void 0,!0);sc.transformReq(e);let r=sc.checkSchemaTableExist(e.schema,e.table);if(r)throw Yo(new Error,r,Wo.NOT_FOUND,ic.LOG_LEVELS.ERROR,r,!0);try{await TA(e.schema,e.table);let n=await gA.deleteRecords(e);return sc.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${$J}`),n}catch(n){if(n.message===ic.SEARCH_NOT_FOUND_MESSAGE){let s=new GJ;return s.message=ic.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(WD,"deleteRecord")});var Bh=N((ZAe,JD)=>{var WJ=require("crypto"),zD=9;function jJ(e){let t=QJ(zD),r=QD(e+t);return t+r}a(jJ,"createHash");function zJ(e,t){let r=e?.substr(0,zD),n=r+QD(t+r);return e===n}a(zJ,"validateHash");function QJ(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(QJ,"generateSalt");function QD(e){return WJ.createHash("md5").update(e).digest("hex")}a(QD,"md5");JD.exports={hash:jJ,validate:zJ}});var ZD=N((tRe,XD)=>{var AA=gt(),Vr={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 JJ(e){return Vr.password.presence=!0,Vr.username.presence=!0,Vr.role.presence=!0,Vr.active.presence=!0,AA.validateObject(e,Vr)}a(JJ,"addUserValidation");function XJ(e){return Vr.password.presence=!1,Vr.username.presence=!0,Vr.role.presence=!1,Vr.active.presence=!1,AA.validateObject(e,Vr)}a(XJ,"alterUserValidation");function ZJ(e){return Vr.password.presence=!1,Vr.username.presence=!0,Vr.role.presence=!1,Vr.active.presence=!1,AA.validateObject(e,Vr)}a(ZJ,"dropUserValidation");XD.exports={addUserValidation:JJ,alterUserValidation:XJ,dropUserValidation:ZJ}});var It=N((sRe,tL)=>{"use strict";var{platform:nRe}=require("os"),e3="nats-server.zip",RA="nats-server",t3=process.platform==="win32"?`${RA}.exe`:RA,r3=/^[^\s.,*>]+$/,eL="__request__",n3=a(e=>`${e}.${eL}`,"REQUEST_SUBJECT"),s3={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},i3={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},o3={HUB:"hub.pid",LEAF:"leaf.pid"},a3={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},c3={SUCCESS:"success",ERROR:"error"},l3={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},u3={TXN:"txn",MSGID:"msgid"},Ul={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},d3={[Ul.ERR]:1,[Ul.WRN]:2,[Ul.INF]:3,[Ul.DBG]:4,[Ul.TRC]:5},_3={debug:"-D",trace:"-DVV"};tL.exports={NATS_SERVER_ZIP:e3,NATS_SERVER_NAME:RA,NATS_BINARY_NAME:t3,PID_FILES:o3,NATS_CONFIG_FILES:i3,SERVER_SUFFIX:a3,NATS_TERM_CONSTRAINTS_RX:r3,REQUEST_SUFFIX:eL,UPDATE_REMOTE_RESPONSE_STATUSES:c3,CLUSTER_STATUS_STATUSES:l3,REQUEST_SUBJECT:n3,SUBJECT_PREFIXES:u3,MSG_HEADERS:s3,LOG_LEVELS:Ul,LOG_LEVEL_FLAGS:_3,LOG_LEVEL_HIERARCHY:d3}});var yA=N(rL=>{"use strict";var f3={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
|
`)},E3="certificate.pem",h3="privateKey.pem",p3="caCertificate.pem",m3="natsCertificate.pem",S3="natsCaCertificate.pem",Rt={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},T3={tls_certificate:Rt.SERVER,tls_certificateAuthority:Rt.CA,customFunctions_tls_certificate:Rt.SERVER,customFunctions_tls_certificateAuthority:Rt.CA,operationsApi_tls_certificate:Rt["OPERATIONS-API"],operationsApi_tls_certificateAuthority:Rt["OPERATIONS-CA"]},g3={[Rt.SERVER]:2,[Rt.DEFAULT]:1},A3={[Rt["OPERATIONS-API"]]:3,[Rt.SERVER]:2,[Rt.DEFAULT]:1},R3={[Rt["OPERATIONS-API"]]:3,[Rt.SERVER]:2,[Rt.DEFAULT]:1},y3={[Rt["OPERATIONS-CA"]]:3,[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1},b3={[Rt["OPERATIONS-CA"]]:3,[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1},O3={[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1};Object.assign(rL,{CERTIFICATE_PEM_NAME:E3,PRIVATEKEY_PEM_NAME:h3,CA_PEM_NAME:p3,CERT_NAME:Rt,CERT_CONFIG_NAME_MAP:T3,CERT_PREFERENCE_APP:g3,CERT_PREFERENCE_OPS:A3,CERT_PREFERENCE_REP:R3,CA_CERT_PREFERENCE_REP:y3,CA_CERT_PREFERENCE_OPS:b3,CA_CERT_PREFERENCE_APP:O3,CERTIFICATE_VALUES:f3,NATS_CERTIFICATE_PEM_NAME:m3,NATS_CA_PEM_NAME:S3})});var OA=N((cRe,cL)=>{"use strict";var oL=require("fs-extra"),me=require("joi"),N3=require("os"),{boolean:He,string:wt,number:rr,array:cc}=me.types(),{totalmem:nL}=require("os"),ac=require("path"),I3=j(),bA=re(),aRe=yA(),sL=M(),w3=gt(),iL="log",C3="components",P3="Invalid logging.rotation.maxSize unit. Available units are G, M or K",D3="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",L3="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",M3="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",U3="rootPath config parameter is undefined",ln=me.alternatives([rr.min(0),wt]).optional().empty(null),Hh=me.alternatives([cc.items(wt,{host:wt.required(),port:ln},{hostname:wt.required(),port:ln}).empty(null),cc.items(wt)]),gi,aL=!1;cL.exports={configValidator:v3,routesValidator:G3,route_constraints:Hh};function v3(e,t=!1){if(aL=t,gi=e.rootPath,bA.isEmpty(gi))throw U3;let r=He.optional(),n=rr.min(0).max(1e3).empty(null).default(F3),s=wt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(d_),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(d_),l=me.custom(H3).empty(null).default(d_),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:Hh}).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:Hh}).required(),streams:me.object({maxAge:rr.min(120).allow(null).optional(),maxBytes:rr.min(1).allow(null).optional(),maxMsgs:rr.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:rr.required(),enableSessions:He}),He).optional(),analytics:me.object({aggregatePeriod:rr}),replication:me.object({hostname:me.alternatives(wt,rr).optional().empty(null),url:wt.optional().empty(null),port:ln,securePort:ln,routes:cc.optional().empty(null),databases:me.alternatives(wt,cc),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(k3).optional().empty(null),maxSize:wt.custom(x3).optional().empty(null),path:wt.optional().empty(null).default(d_)}).required(),root:s,stdStreams:He.required(),auditLog:He.required()}).required(),operationsApi:me.object({network:me.object({cors:He.optional(),corsAccessList:cc.optional(),headersTimeout:rr.min(1).optional(),keepAliveTimeout:rr.min(1).optional(),port:ln,domainSocket:me.optional().empty("hdb/operations-server").default(d_),securePort:ln,timeout:rr.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:rr.optional(),cors:He.optional(),corsAccessList:cc.optional(),headersTimeout:rr.min(1).optional(),port:ln,securePort:ln,maxHeaderSize:rr.optional(),mtls:me.alternatives([He.optional(),me.object({user:wt.optional(),certificateAuthority:i,required:He.optional()})]),threadRange:me.alternatives([cc.optional(),wt.optional()])}).required(),threads:me.alternatives(n.optional(),me.object({count:n.optional(),debug:me.alternatives(He.optional(),me.object({startingPort:rr.min(1).optional(),host:wt.optional(),waitForDebugger:He.optional()})),maxHeapMemory:rr.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:rr.optional()})]),compactOnStart:He.optional(),compactOnStartKeepBackup:He.optional(),noReadAhead:He.optional(),path:l,prefetchWrites:He.optional(),maxFreeSpaceToLoad:rr.optional(),maxFreeSpaceToRetain:rr.optional()}).required(),ignoreScripts:He.optional(),tls:me.alternatives([me.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(v3,"configValidator");function B3(e){return aL||oL.existsSync(e)?null:`Specified path ${e} does not exist.`}a(B3,"doesPathExist");function H3(e,t){me.assert(e,wt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=B3(e);if(r)return t.message(r)}a(H3,"validatePath");function x3(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(P3);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(L3):e}a(x3,"validateRotationMaxSize");function k3(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(D3);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(M3):e}a(k3,"validateRotationInterval");function F3(e,t){let r=t.state.path.join("."),n=N3.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||nL();return i=Math.round(Math.min(i,nL())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),I3.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(F3,"setDefaultThreads");function d_(e,t){let r=t.state.path.join(".");if(!bA.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(bA.isEmpty(gi))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return ac.join(gi,C3);case"logging.root":return ac.join(gi,iL);case"clustering.leafServer.streams.path":return ac.join(gi,"clustering","leaf");case"storage.path":let n=ac.join(gi,sL.LEGACY_DATABASES_DIR_NAME);return oL.existsSync(n)?n:ac.join(gi,sL.DATABASES_DIR_NAME);case"logging.rotation.path":return ac.join(gi,iL);case"operationsApi.network.domainSocket":return r==null?null:ac.join(gi,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(d_,"setDefaultRoot");function G3(e){let t=me.object({routes:Hh});return w3.validateBySchema({routes:e},t)}a(G3,"routesValidator")});var Ct=N(SL=>{"use strict";var un=M(),Er=re(),hr=j(),{configValidator:q3,routesValidator:lL}=OA(),Kr=require("fs-extra"),dL=require("yaml"),Bn=require("path"),$3=require("is-number"),_L=require("properties-reader"),V3=require("lodash"),{handleHDBError:K3}=_e(),{HTTP_STATUS_CODES:Y3,HDB_ERROR_MSGS:vl}=Pn(),{server:W3}=(qr(),oe(ja)),{DATABASES_PARAM_CONFIG:__,CONFIG_PARAMS:vn,CONFIG_PARAM_MAP:Gs}=un,j3="Unable to get config value because config is uninitialized",z3="Config successfully initialized",Q3="Error backing up config file",J3="Empty parameter sent to getConfigValue",fL=Bn.join(un.PACKAGE_ROOT,"config","yaml",un.HDB_DEFAULT_CONFIG_FILE),X3=Bn.join(un.PACKAGE_ROOT,"config","yaml","defaultNatsConfig.yaml"),Z3="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",uL={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"},xh,jt,kh;Object.assign(SL,{createConfigFile:eX,getDefaultConfig:tX,getConfigValue:hL,initConfig:Fh,flattenConfig:Bl,updateConfigValue:pL,updateConfigObject:nX,getConfiguration:oX,setConfiguration:aX,readConfigFile:CA,getClusteringRoutes:cX,initOldConfig:mL,getConfigFromFile:lX,getConfigFilePath:lc,addConfig:uX,deleteConfigFromFile:dX,getConfigObj:_X,resolvePath:NA,getFlatConfigObj:fX});function NA(e){if(e?.startsWith("~/"))return Bn.join(Er.getHomeDir(),e.slice(1));let t=se();return Bn.resolve(t.getHdbBasePath(),e)}a(NA,"resolvePath");function eX(e,t=!1){let r=jo(fL);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=dL.parseDocument(Kr.readFileSync(X3,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}xh=Bl(r.toJSON());let n;for(let c in e){let l=Gs[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=IA(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{r.setIn([...u],d)}catch(_){hr.error(_)}}}n&&EL(r,n),wA(r,t);let s=r.toJSON();jt=Bl(s);let i=r.getIn(["rootPath"]),o=Bn.join(i,un.HDB_CONFIG_FILE);Kr.createFileSync(o),Kr.writeFileSync(o,String(r)),hr.trace(`Config file written to ${o}`)}a(eX,"createConfigFile");function EL(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Er.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(__.TABLES))for(let i in n[s][__.TABLES])for(let o in n[s][__.TABLES][i]){let c=n[s][__.TABLES][i][o],l=[vn.DATABASES,s,__.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){hr.error("Error parsing schemas CLI/env config arguments",n)}}a(EL,"setSchemasConfig");function tX(e){if(xh===void 0){let r=jo(fL);xh=Bl(r.toJSON())}let t=Gs[e.toLowerCase()];if(t!==void 0)return xh[t.toLowerCase()]}a(tX,"getDefaultConfig");function hL(e){if(e==null){hr.info(J3);return}if(jt===void 0){hr.trace(j3);return}let t=Gs[e.toLowerCase()];if(t!==void 0)return jt[t.toLowerCase()]}a(hL,"getConfigValue");function lc(e=Er.getPropsFilePath()){let t=Er.getEnvCliRootPath();if(t)return NA(Bn.join(t,un.HDB_CONFIG_FILE));let r=_L(e);return NA(r.get(un.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(lc,"getConfigFilePath");function Fh(e=!1){if(jt===void 0||e){let t;if(!Er.noBootFile()){t=Er.getPropsFilePath();try{Kr.accessSync(t,Kr.constants.F_OK|Kr.constants.R_OK)}catch(i){throw hr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=lc(t),n;if(r.includes("config/settings.js"))try{mL(r);return}catch(i){if(i.code!==un.NODE_ERROR_CODES.ENOENT)throw i}try{n=jo(r)}catch(i){if(i.code===un.NODE_ERROR_CODES.ENOENT){hr.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 hr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}rX(n,r),wA(n);let s=n.toJSON();if(W3.config=s,jt=Bl(s),jt.logging_rotation_rotate)for(let i in uL)jt[i]&&hr.error(`Config ${uL[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);hr.trace(z3)}}a(Fh,"initConfig");function rX(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&&(hr.trace("Updating config file with missing config params"),Kr.writeFileSync(t,String(e)))}a(rX,"checkForUpdatedConfig");function wA(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 vl.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 vl.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=q3(r,t);if(n.error)throw vl.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(wA,"validateConfig");function nX(e,t){jt===void 0&&(jt={});let r=Gs[e.toLowerCase()];if(r===void 0){hr.trace(`Unable to update config object because config param '${e}' does not exist`);return}jt[r.toLowerCase()]=t}a(nX,"updateConfigObject");function pL(e,t,r=void 0,n=!1,s=!1,i=!1){jt===void 0&&Fh();let o=hL(Gs.hdb_root),c=Bn.join(o,un.HDB_CONFIG_FILE),l=jo(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=Gs[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=IA(E,t);l.setIn([...f],h)}else for(let E in r){let f=Gs[E.toLowerCase()];if(f===vn.HTTP_SECUREPORT&&r[E]===jt[vn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),f===vn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===jt[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=IA(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){hr.error(g)}}}u&&EL(l,u),wA(l);let d=l.getIn(["rootPath"]),_=Bn.join(d,un.HDB_CONFIG_FILE);n===!0&&sX(c,d),Kr.writeFileSync(_,String(l)),s&&(jt=Bl(l.toJSON())),hr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(pL,"updateConfigValue");function sX(e,t){try{let r=Bn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${un.HDB_CONFIG_FILE}.bak`);Kr.copySync(e,r),hr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){hr.error(Q3),hr.error(r)}}a(sX,"backupConfigFile");var iX=["databases"];function Bl(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}),kh=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])&&!iX.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()]&&Gs[l]&&(s[Gs[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Bl,"flattenConfig");function IA(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($3(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Er.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 Er.autoCast(t)}a(IA,"castConfigValue");function oX(){let e=Er.getPropsFilePath(),t=lc(e);return jo(t).toJSON()}a(oX,"getConfiguration");async function aX(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return pL(void 0,void 0,s,!0),Z3}catch(i){throw typeof i=="string"||i instanceof String?K3(i,i,Y3.BAD_REQUEST,void 0,void 0,!0):i}}a(aX,"setConfiguration");function CA(){let e=Er.getPropsFilePath();try{Kr.accessSync(e,Kr.constants.F_OK|Kr.constants.R_OK)}catch(n){if(!Er.noBootFile())throw hr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=lc(e);return jo(t).toJSON()}a(CA,"readConfigFile");function jo(e){return dL.parseDocument(Kr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(jo,"parseYamlDoc");function cX(){let e=CA(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Er.isEmptyOrZeroLength(t)?[]:t;let r=lL(t);if(r)throw vl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Er.isEmptyOrZeroLength(n)?[]:n;let s=lL(n);if(s)throw vl.CONFIG_VALIDATION(s.message);if(!Er.isEmptyOrZeroLength(n)&&!Er.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Er.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw vl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(cX,"getClusteringRoutes");function mL(e){let t=_L(e);jt={};for(let r in Gs){let n=t.get(r.toUpperCase());if(Er.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Gs[r].toLowerCase();s===vn.LOGGING_ROOT?jt[s]=Bn.dirname(n):jt[s]=n}return jt}a(mL,"initOldConfig");function lX(e){let t=CA();return V3.get(t,e.replaceAll("_","."))}a(lX,"getConfigFromFile");async function uX(e,t){let r=jo(lc());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Kr.writeFile(lc(),String(r))}a(uX,"addConfig");function dX(e){let t=lc(Er.getPropsFilePath()),r=jo(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Bn.join(n,un.HDB_CONFIG_FILE);Kr.writeFileSync(s,String(r))}a(dX,"deleteConfigFromFile");function _X(){return kh||(Fh(),kh)}a(_X,"getConfigObj");function fX(){return jt||Fh(),jt}a(fX,"getFlatConfigObj")});var gL=N((_Re,TL)=>{"use strict";var Gh=M(),qh=class{static{a(this,"BaseLicense")}constructor(t=0,r=Gh.RAM_ALLOCATION_ENUM.DEFAULT,n=Gh.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},PA=class extends qh{static{a(this,"ExtendedLicense")}constructor(t=0,r=Gh.RAM_ALLOCATION_ENUM.DEFAULT,n=Gh.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};TL.exports={BaseLicense:qh,ExtendedLicense:PA}});var uc=N((ERe,IL)=>{"use strict";var xl=require("fs-extra"),RL=Bh(),yL=require("crypto"),EX=require("moment"),hX=require("uuid").v4,Yr=j(),LA=require("path"),pX=re(),zo=M(),{totalmem:AL}=require("os"),mX=gL().ExtendedLicense,Hl="invalid license key format",SX="061183",TX="mofi25",gX="aes-256-cbc",AX=16,RX=32,bL=se(),{resolvePath:OL}=Ct();bL.initSync();var DA;IL.exports={validateLicense:NL,generateFingerPrint:bX,licenseSearch:vA,getLicense:IX,checkMemoryLimit:wX};function MA(){return LA.join(bL.getHdbBasePath(),zo.LICENSE_KEY_DIR_NAME,zo.LICENSE_FILE_NAME)}a(MA,"getLicenseDirPath");function yX(){let e=MA();return OL(LA.join(e,zo.LICENSE_FILE_NAME))}a(yX,"getLicenseFilePath");function UA(){let e=MA();return OL(LA.join(e,zo.REG_KEY_FILE_NAME))}a(UA,"getFingerPrintFilePath");async function bX(){let e=UA();try{return await xl.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await OX();throw Yr.error(`Error writing fingerprint file to ${e}`),Yr.error(t),new Error("There was an error generating the fingerprint")}}a(bX,"generateFingerPrint");async function OX(){let e=hX(),t=RL.hash(e),r=UA();try{await xl.mkdirp(MA()),await xl.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Yr.error(`Error writing fingerprint file to ${r}`),Yr.error(n),new Error("There was an error generating the fingerprint")}return t}a(OX,"writeFingerprint");function NL(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:zo.RAM_ALLOCATION_ENUM.DEFAULT,version:zo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Yr.error("empty license key passed to validate."),r;let n=UA(),s=!1;try{s=xl.statSync(n)}catch(i){Yr.error(i)}if(s){let i;try{i=xl.readFileSync(n,"utf8")}catch{Yr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(TX),c=o[1];c=Buffer.concat([Buffer.from(c)],AX);let l=Buffer.concat([Buffer.from(i)],RX),u=yL.createDecipheriv(gX,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=NX(o[0],i);if(f)d=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Hl),Yr.error(Hl),new Error(Hl)}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(Hl),Yr.error(Hl),new Error(Hl)}else r.exp_date=d;r.exp_date<EX().valueOf()&&(r.valid_date=!1),RL.validate(o[1],`${SX}${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||Yr.error("Invalid licence"),r}a(NL,"validateLicense");function NX(e,t){try{let r=yL.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Yr.warn("Check old license failed")}}a(NX,"checkOldLicense");function vA(){let e=new mX,t=[];try{t=xl.readFileSync(yX(),"utf-8").split(zo.NEW_LINE)}catch(r){r.code==="ENOENT"?Yr.debug("no license file found"):Yr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(pX.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=NL(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){Yr.error("There was an error parsing the license string."),Yr.error(s),e.ram_allocation=zo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return DA=e,e}a(vA,"licenseSearch");async function IX(){return DA||await vA(),DA}a(IX,"getLicense");function wX(){let e=vA().ram_allocation,t=process.constrainedMemory?.()||AL();if(t=Math.round(Math.min(t,AL())/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(wX,"checkMemoryLimit")});var xn=N((TRe,$L)=>{"use strict";var DL="username is required",LL="nothing to update, must supply active, role or password to update",ML="password cannot be an empty string",UL="If role is specified, it cannot be empty.",vL="active must be true or false";$L.exports={addUser:HX,alterUser:xX,dropUser:FX,getSuperUser:VX,userInfo:GX,listUsers:Vh,listUsersExternal:qX,setUsersToGlobal:Fl,findAndValidateUser:GL,getClusterUser:KX,USERNAME_REQUIRED:DL,ALTERUSER_NOTHING_TO_UPDATE:LL,EMPTY_PASSWORD:ML,EMPTY_ROLE:UL,ACTIVE_BOOLEAN:vL};var BL=cn(),CX=oc(),xA=Bh(),HL=ZD(),xL=$r(),kA=eo(),Hn=re(),kL=require("validate.js"),Ke=j(),{promisify:PX}=require("util"),FA=Xi(),wL=M(),CL=It(),DX=Ct(),pRe=se(),mRe=uc(),LX=Qi(),{table:SRe}=(Pe(),oe(lt)),{handleHDBError:Ai,hdb_errors:MX}=_e(),{HTTP_STATUS_CODES:Ri,AUTHENTICATION_ERROR_MSGS:BA,HDB_ERROR_MSGS:kl}=MX,{UserEventMsg:GA}=qs(),HA=require("lodash"),{server:qA}=(qr(),oe(ja)),UX=j();qA.getUser=(e,t)=>GL(e,t,t!=null);var FL={username:!0,active:!0,role:!0,password:!0},PL=new Map,$h=xL.searchByValue,vX=xL.searchByHash,BX=PX(CX.delete);async function HX(e){let t=kL.cleanAttributes(e,FL),r=HL.addUserValidation(t);if(r)throw Ai(new Error,r.message,Ri.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 $h(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 Ai(new Error,kl.ROLE_NAME_NOT_FOUND(t.role),Ri.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Ai(new Error,kl.DUP_ROLES_FOUND(t.role),Ri.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=FA.encrypt(t.password)),t.password=xA.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await BL.insert(i)}catch(l){throw Ke.error("There was an error searching for a user."),Ke.error(l),l}Ke.debug(o);try{await Fl()}catch(l){throw Ke.error("Got an error setting users to global"),Ke.error(l),l}if(o.skipped_hashes.length===1)throw Ai(new Error,kl.USER_ALREADY_EXISTS(t.username),Ri.CONFLICT,void 0,void 0,!0);let c={...t};return c.role=s[0],kA.signalUserChange(new GA(process.pid)),`${c.username} successfully added`}a(HX,"addUser");async function xX(e){let t=kL.cleanAttributes(e,FL);if(Hn.isEmptyOrZeroLength(t.username))throw new Error(DL);if(Hn.isEmptyOrZeroLength(t.password)&&Hn.isEmptyOrZeroLength(t.role)&&Hn.isEmptyOrZeroLength(t.active))throw new Error(LL);if(!Hn.isEmpty(t.password)&&Hn.isEmptyOrZeroLength(t.password.trim()))throw new Error(ML);if(!Hn.isEmpty(t.active)&&!Hn.isBoolean(t.active))throw new Error(vL);let r=kX(t.username);if(!Hn.isEmpty(t.password)&&!Hn.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=FA.encrypt(t.password)),t.password=xA.hash(t.password)),t.role==="")throw new Error(UL);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 $h(i)||[])}catch(c){throw Ke.error("Got an error searching for a role."),Ke.error(c),c}if(!o||o.length===0){let c=kl.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ke.error(c),Ai(new Error,c,Ri.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=kl.ALTER_USER_DUP_ROLES(t.role);throw Ke.error(c),Ai(new Error,c,Ri.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 BL.update(n)}catch(i){throw Ke.error("Error during update."),Ke.error(i),i}try{await Fl()}catch(i){throw Ke.error("Got an error setting users to global"),Ke.error(i),i}return kA.signalUserChange(new GA(process.pid)),s}a(xX,"alterUser");function kX(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(kX,"isClusterUser");async function FX(e){try{let t=HL.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 Ai(new Error,kl.USER_NOT_EXIST(e.username),Ri.NOT_FOUND,void 0,void 0,!0);let n;try{n=await BX(r)}catch(s){throw Ke.error("Got an error deleting a user."),Ke.error(s),s}Ke.debug(n);try{await Fl()}catch(s){throw Ke.error("Got an error setting users to global."),Ke.error(s),s}return kA.signalUserChange(new GA(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(FX,"dropUser");async function GX(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=HA.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await vX(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(GX,"userInfo");async function qX(){let e;try{e=await Vh()}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(qX,"listUsersExternal");async function Vh(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await $h(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]=HA.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 $h(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=HA.cloneDeep(o),o.role=r[o.role],$X(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(Vh,"listUsers");function $X(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(LX)){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($X,"appendSystemTablesToRole");async function Fl(){try{let e=await Vh();global.hdb_users=e}catch(e){throw Ke.error(e),e}}a(Fl,"setUsersToGlobal");async function GL(e,t,r=!0){global.hdb_users||await Fl();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Ai(new Error,BA.GENERIC_AUTH_FAIL,Ri.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Ai(new Error,BA.USER_INACTIVE,Ri.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(PL.get(t)===n.password)return s;if(xA.validate(n.password,t))PL.set(t,n.password);else throw Ai(new Error,BA.GENERIC_AUTH_FAIL,Ri.UNAUTHORIZED,void 0,void 0,!0)}return s}a(GL,"findAndValidateUser");async function VX(){global.hdb_users||await Fl();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(VX,"getSuperUser");async function KX(){let e=await Vh(),t=DX.getConfigFromFile(wL.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Hn.isEmpty(r)&&r?.role?.role===wL.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=FA.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+CL.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+CL.SERVER_SUFFIX.ADMIN,r}a(KX,"getClusterUser");var qL=[];qA.invalidateUser=function(e){for(let t of qL)try{t(e)}catch(r){UX.error("Error invalidating user",r)}};qA.onInvalidatedUser=function(e){qL.push(e)}});var E_=N((yRe,WL)=>{"use strict";var dc=j(),kn=M(),YX=gD(),ARe=Fs(),RRe=Zi(),WX=xn(),{validateEvent:VL}=qs(),f_=Un(),jX=require("process"),{resetDatabases:zX}=(Pe(),oe(lt)),QX={[kn.ITC_EVENT_TYPES.SCHEMA]:JX,[kn.ITC_EVENT_TYPES.USER]:YL};async function JX(e){let t=VL(e);if(t){dc.error(t);return}dc.trace("ITC schemaHandler received schema event:",e),await YX(e.message),await XX(e.message)}a(JX,"schemaHandler");async function XX(e){try{f_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),f_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),f_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=zX();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){dc.error(t)}}a(XX,"syncSchemaMetadata");var KL=[];async function YL(e){try{try{f_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),f_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){dc.warn(r)}let t=VL(e);if(t){dc.error(t);return}dc.trace(`ITC userHandler ${kn.HDB_ITC_CLIENT_PREFIX}${jX.pid} received user event:`,e),await WX.setUsersToGlobal();for(let r of KL)r()}catch(t){dc.error(t)}}a(YL,"userHandler");YL.addListener=function(e){KL.push(e)};WL.exports=QX});var qs=N((CRe,zL)=>{"use strict";var ORe=j(),$A=re(),ZX=M(),{ITC_ERRORS:h_}=Pn(),{parentPort:NRe,threadId:eZ,isMainThread:tZ,workerData:IRe}=require("worker_threads"),{onMessageFromWorkers:rZ,broadcast:wRe,broadcastWithAcknowledgement:nZ}=dt();zL.exports={sendItcEvent:sZ,validateEvent:jL,SchemaEventMsg:iZ,UserEventMsg:oZ};var Kh;rZ(async(e,t)=>{Kh=Kh||E_(),jL(e),Kh[e.type]&&await Kh[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function sZ(e){return!tZ&&e.message&&(e.message.originator=eZ),nZ(e)}a(sZ,"sendItcEvent");function jL(e){if(typeof e!="object")return h_.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||$A.isEmpty(e.type))return h_.MISSING_TYPE;if(!e.hasOwnProperty("message")||$A.isEmpty(e.message))return h_.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||$A.isEmpty(e.message.originator))return h_.MISSING_ORIGIN;if(ZX.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return h_.INVALID_EVENT(e.type)}a(jL,"validateEvent");function iZ(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(iZ,"SchemaEventMsg");function oZ(e){this.originator=e}a(oZ,"UserEventMsg")});var eo=N((LRe,ZL)=>{"use strict";var QL=M(),DRe=re(),Yh=j(),JL=mD(),Gl,{sendItcEvent:XL}=qs();function aZ(e){try{Yh.info("signalSchemaChange called with message:",e),Gl=Gl||E_();let t=new JL(QL.ITC_EVENT_TYPES.SCHEMA,e);return Gl.schema(t),XL(t)}catch(t){Yh.error(t)}}a(aZ,"signalSchemaChange");function cZ(e){try{Yh.trace("signalUserChange called with message:",e),Gl=Gl||E_();let t=new JL(QL.ITC_EVENT_TYPES.USER,e);return Gl.user(t),XL(t)}catch(t){Yh.error(t)}}a(cZ,"signalUserChange");ZL.exports={signalSchemaChange:aZ,signalUserChange:cZ}});var Wh=N((URe,tM)=>{"use strict";var eM=re(),lZ=M(),uZ=j(),dZ=Ih(),_Z=Nh(),fZ=eo(),{SchemaEventMsg:EZ}=qs(),hZ="already exists in";tM.exports=pZ;async function pZ(e,t,r){if(eM.isEmptyOrZeroLength(r))return r;let n=[];eM.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 mZ(e,t.schema,t.name,i)})),s}a(pZ,"lmdbCheckForNewAttributes");async function mZ(e,t,r,n){let s=new _Z(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await SZ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(hZ))uZ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(mZ,"createNewAttribute");async function SZ(e){let t;return t=await dZ(e),fZ.signalSchemaChange(new EZ(process.pid,lZ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(SZ,"createAttribute")});var ql=N((BRe,rM)=>{"use strict";var VA=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}};rM.exports=VA});var sM=N((xRe,nM)=>{"use strict";var TZ=ql(),gZ=M().OPERATIONS_ENUM,KA=class extends TZ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(gZ.INSERT,r,n,s,i),this.records=t}};nM.exports=KA});var oM=N((FRe,iM)=>{"use strict";var AZ=ql(),RZ=M().OPERATIONS_ENUM,YA=class extends AZ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(RZ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};iM.exports=YA});var cM=N((qRe,aM)=>{"use strict";var yZ=ql(),bZ=M().OPERATIONS_ENUM,WA=class extends yZ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(bZ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};aM.exports=WA});var uM=N((VRe,lM)=>{"use strict";var OZ=ql(),NZ=M().OPERATIONS_ENUM,jA=class extends OZ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(NZ.DELETE,n,s,t,i),this.original_records=r}};lM.exports=jA});var p_=N((WRe,EM)=>{"use strict";var YRe=require("path"),dM=ht(),IZ=sM(),wZ=oM(),CZ=cM(),PZ=uM(),$l=Ht(),_M=re(),{CONFIG_PARAMS:DZ}=M(),fM=se();fM.initSync();var jh=M().OPERATIONS_ENUM,{getTransactionAuditStorePath:LZ}=Tt();EM.exports=MZ;async function MZ(e,t){if(fM.get(DZ.LOGGING_AUDITLOG)===!1)return;let r=LZ(e.schema,e.table),n=await dM.openEnvironment(r,e.table,!0),s=UZ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){dM.initializeDBIs(n,$l.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,$l.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[$l.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[$l.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),_M.isEmpty(s.user_name)||n.dbis[$l.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[$l.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(MZ,"writeTransaction");function UZ(e,t){let r=_M.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===jh.INSERT)return new IZ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===jh.UPDATE)return new wZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===jh.UPSERT)return new CZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===jh.DELETE)return new PZ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(UZ,"createTransactionObject")});var zA=N((QRe,hM)=>{"use strict";var vZ=c_(),zRe=Kd(),m_=M(),BZ=Yd(),HZ=ec().insertRecords,xZ=ht(),kZ=j(),FZ=Wh(),{getSchemaPath:GZ}=Tt(),qZ=p_();hM.exports=$Z;async function $Z(e){try{let{schema_table:t,attributes:r}=vZ(e);BZ(e,r,t.hash_attribute),e.schema!==m_.SYSTEM_SCHEMA_NAME&&(r.includes(m_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(m_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(m_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(m_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await FZ(e.hdb_auth_header,t,r),s=GZ(e.schema,e.table),i=await xZ.openEnvironment(s,e.table),o=await HZ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await qZ(e,o)}catch(c){kZ.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($Z,"lmdbCreateRecords")});var SM=N((XRe,mM)=>{"use strict";var pM=M(),VZ=zA(),KZ=Kd(),YZ=require("fs-extra"),{getSchemaPath:WZ}=Tt();mM.exports=jZ;async function jZ(e){let t=[{name:e.schema,createddate:Date.now()}],r=new KZ(pM.SYSTEM_SCHEMA_NAME,pM.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await VZ(r),await YZ.mkdirp(WZ(e.schema))}a(jZ,"lmdbCreateSchema")});var gM=N((eye,TM)=>{"use strict";var QA=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}};TM.exports=QA});var bM=N((iye,yM)=>{"use strict";var AM=ht(),JA=sn(),XA=Pn().LMDB_ERRORS_ENUM,zZ=Ht(),RM=j(),rye=re(),QZ=require("lmdb"),JZ=gM(),XZ=M(),{OVERFLOW_MARKER:nye,MAX_SEARCH_KEY_LENGTH:sye}=zZ,ZZ=XZ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function e5(e,t,r,n){if(JA.validateEnv(e),t===void 0)throw new Error(XA.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(XA.IDS_REQUIRED):new Error(XA.IDS_MUST_BE_ITERABLE);try{let s=AM.listDBIs(e);AM.initializeDBIs(e,t,s);let i=new JZ,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[ZZ]>n){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,QZ.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=JA.getIndexedValues(y);if(I)for(let U=0,H=I.length;U<H;U++)S.remove(I[U],o)}catch{RM.warn(`cannot delete from attribute: ${g}, ${y}:${o}`)}}});c.push(T),l.push(o),i.original_records.push(h)}catch(h){RM.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=JA.getNextMonotonicTime(),i}catch(s){throw s}}a(e5,"deleteRecords");yM.exports={deleteRecords:e5}});var S_=N((aye,NM)=>{"use strict";var Vl=re(),t5=bM(),r5=ht(),{getSchemaPath:n5}=Tt(),s5=p_(),i5=j();NM.exports=o5;async function o5(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Vl.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Vl.isEmptyOrZeroLength(e.hash_values)&&!Vl.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Vl.isEmpty(l)||e.hash_values.push(l)}}if(Vl.isEmptyOrZeroLength(e.hash_values))return OM([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Vl.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=n5(e.schema,e.table),i=await r5.openEnvironment(s,e.table),o=await t5.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await s5(e,o)}catch(c){i5.error(`unable to write transaction due to ${c.message}`)}return OM(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(o5,"lmdbDeleteRecords");function OM(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(OM,"createDeleteResponse")});var eR=N((uye,IM)=>{"use strict";var a5=M(),lye=sn();function ZA(e,t){let r=Object.create(null);if(t.length===1&&a5.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(ZA,"parseRow");function c5(e,t,r,n){let s=ZA(r,e);n.push(s)}a(c5,"searchAll");function l5(e,t,r,n){let s=ZA(r,e);n[t]=s}a(l5,"searchAllToMap");function u5(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(u5,"iterateDBI");function _c(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(_c,"pushResults");function d5(e,t,r,n,s,i){t.toString().endsWith(e)&&_c(t,r,n,s,i)}a(d5,"endsWith");function _5(e,t,r,n,s,i){t.toString().includes(e)&&_c(t,r,n,s,i)}a(_5,"contains");function f5(e,t,r,n,s,i){t>e&&_c(t,r,n,s,i)}a(f5,"greaterThanCompare");function E5(e,t,r,n,s,i){t>=e&&_c(t,r,n,s,i)}a(E5,"greaterThanEqualCompare");function h5(e,t,r,n,s,i){t<e&&_c(t,r,n,s,i)}a(h5,"lessThanCompare");function p5(e,t,r,n,s,i){t<=e&&_c(t,r,n,s,i)}a(p5,"lessThanEqualCompare");IM.exports={parseRow:ZA,searchAll:c5,searchAllToMap:l5,iterateDBI:u5,endsWith:d5,contains:_5,greaterThanCompare:f5,greaterThanEqualCompare:E5,lessThanCompare:h5,lessThanEqualCompare:p5,pushResults:_c}});var Kl=N((hye,UM)=>{"use strict";var Qo=ht(),_ye=j(),Fn=sn(),zh=Ht(),zt=Pn().LMDB_ERRORS_ENUM,fye=re(),m5=M(),Qh=eR(),{parseRow:S5}=Qh,Eye=require("lmdb"),{OVERFLOW_MARKER:wM,MAX_SEARCH_KEY_LENGTH:T5}=zh;function CM(e,t,r,n=!1,s=void 0,i=void 0){return fc(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(CM,"iterateFullIndex");function T_(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return fc(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(T_,"iterateRangeBetween");function fc(e,t,r,n){let s=e.database||e,i=Qo.openDBI(s,r);i[zh.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Qo.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(fc,"setupTransaction");function PM(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(wM)){if(!s)if(r)s=Qo.openDBI(e,r);else{let l=Qo.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Qo.openDBI(e,l[u]),!s[zh.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(PM,"getOverflowCheck");function g5(e,t,r,n=!1,s=void 0,i=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return fc(e,t,t,(o,c,l)=>(Jh(r),r=g_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>S5(u.value,r))))}a(g5,"searchAll");function A5(e,t,r,n=!1,s=void 0,i=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);Jh(r),r=g_(e.database||e,r);let o=new Map;for(let{key:c,value:l}of CM(e,t,t,n,s,i))o.set(c,Qh.parseRow(l,r));return o}a(A5,"searchAllToMap");function R5(e,t,r=!1,n=void 0,s=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=CM(e,void 0,t,r,n,s),c=o.transaction,l=PM(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(R5,"iterateDBI");function y5(e,t){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return Qo.statDBI(e,t).entryCount}a(y5,"countAll");function b5(e,t,r,n,s=!1,i=void 0,o=void 0){return Jo(e,r,n),fc(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(b5,"equals");function O5(e,t,r){return Jo(e,t,r),Qo.openDBI(e,t).getValuesCount(r)}a(O5,"count");function N5(e,t,r,n,s=!1,i=void 0,o=void 0){return Jo(e,r,n),fc(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(N5,"startsWith");function I5(e,t,r,n,s=!1,i=void 0,o=void 0){return DM(e,t,r,n,s,i,o,!0)}a(I5,"endsWith");function DM(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Jo(e,r,n),fc(e,null,r,(l,u,d,_)=>{let E=PM(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(wM)?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[zh.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(DM,"contains");function w5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),T_(e,t,r,n,l,s,i,o,!0,!1)}a(w5,"greaterThan");function C5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),T_(e,t,r,n,l,s,i,o,!1,!1)}a(C5,"greaterThanEqual");function P5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),T_(e,t,r,l,n,s,i,o,!1,!0)}a(P5,"lessThan");function D5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),T_(e,t,r,l,n,s,i,o,!1,!1)}a(D5,"lessThanEqual");function L5(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Fn.validateEnv(e),r===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(zt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(zt.END_VALUE_REQUIRED);if(n=Fn.convertKeyValueToWrite(n),s=Fn.convertKeyValueToWrite(s),n>s)throw new Error(zt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return T_(e,t,r,n,s,i,o,c)}a(L5,"between");function M5(e,t,r,n){Fn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(Jh(r),r=g_(s,r),n===void 0)throw new Error(zt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Qh.parseRow(c,r)),o}a(M5,"searchByHash");function U5(e,t,r){Fn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(zt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(U5,"checkHashExists");function v5(e,t,r,n,s=[]){return MM(e,t,r,n,s),LM(e,t,r,n,s).map(i=>i[1])}a(v5,"batchSearchByHash");function B5(e,t,r,n,s=[]){MM(e,t,r,n,s);let i=new Map;for(let[o,c]of LM(e,t,r,n,s))i.set(o,c);return i}a(B5,"batchSearchByHashToMap");function LM(e,t,r,n,s=[]){return fc(e,t,t,(i,o,c)=>{r=g_(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,Qh.parseRow(d,r)];s.push(u)}).filter(u=>u)})}a(LM,"batchHashSearch");function MM(e,t,r,n,s){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(Jh(r),n==null)throw new Error(zt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(zt.IDS_MUST_BE_ITERABLE)}a(MM,"initializeBatchSearchByHash");function Jh(e){if(!Array.isArray(e))throw e===void 0?new Error(zt.FETCH_ATTRIBUTES_REQUIRED):new Error(zt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Jh,"validateFetchAttributes");function Jo(e,t,r){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(zt.SEARCH_VALUE_REQUIRED);if(r?.length>T5)throw new Error(zt.SEARCH_VALUE_TOO_LARGE)}a(Jo,"validateComparisonFunctions");function g_(e,t){return t.length===1&&m5.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Qo.listDBIs(e)),t}a(g_,"setGetWholeRowAttributes");UM.exports={searchAll:g5,searchAllToMap:A5,count:O5,countAll:y5,equals:b5,startsWith:N5,endsWith:I5,contains:DM,searchByHash:M5,setGetWholeRowAttributes:g_,batchSearchByHash:v5,batchSearchByHashToMap:B5,checkHashExists:U5,iterateDBI:R5,greaterThan:w5,greaterThanEqual:C5,lessThan:P5,lessThanEqual:D5,between:L5}});var Yl=N((mye,kM)=>{var vM=require("lodash"),BM=gt(),xe=require("joi"),H5=re(),{hdb_schema_table:A_,checkValidTable:HM,hdb_table:xM,hdb_database:Xh}=Si(),{handleHDBError:x5,hdb_errors:k5}=_e(),{getDatabases:F5}=(Pe(),oe(lt)),{HTTP_STATUS_CODES:G5}=k5,q5=xe.object({database:Xh,schema:Xh,table:xM,search_attribute:A_,search_value:xe.any().required(),get_attributes:xe.array().min(1).items(xe.alternatives(A_,xe.object())).optional(),desc:xe.bool(),limit:xe.number().integer().min(1),offset:xe.number().integer().min(0)}),$5=xe.object({database:Xh,schema:Xh,table:xM,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(A_,xe.object())).optional(),sort:xe.object({attribute:xe.alternatives(A_,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(A_,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()});kM.exports=function(e,t){let r=null;switch(t){case"value":r=BM.validateBySchema(e,q5);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(HM("database",e.schema)),i(HM("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=BM.validateBySchema(e,$5);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=H5.checkGlobalSchemaTable(e.schema,e.table);if(s)return x5(new Error,s,G5.NOT_FOUND);let o=F5()[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=vM.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!vM.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 tR=N((Tye,FM)=>{"use strict";var V5=ht(),K5=Yl(),{getSchemaPath:Y5}=Tt();FM.exports=W5;function W5(e){let t=K5(e,"hashes");if(t)throw t;let r=Y5(e.schema,e.table);return V5.openEnvironment(r,e.table)}a(W5,"initialize")});var rR=N((Aye,GM)=>{"use strict";var j5=Kl(),z5=tR();GM.exports=Q5;async function Q5(e){let t=await z5(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return j5.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Q5,"lmdbGetDataByHash")});var Wl=N((yye,qM)=>{"use strict";var nR=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};qM.exports=nR});var VM=N((Nye,$M)=>{"use strict";var Oye=Wl(),J5=Kl(),X5=tR();$M.exports=Z5;async function Z5(e){let t=await X5(e),r=global.hdb_schema[e.schema][e.table];return J5.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Z5,"lmdbSearchByHash")});var $s=N((wye,KM)=>{"use strict";var sR=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}};KM.exports=sR});var Zh=N((Pye,JM)=>{"use strict";var Wr=Kl(),e6=ht(),t6=re(),ke=Ht(),Ec=M(),r6=Qi(),YM=Pn().LMDB_ERRORS_ENUM,{getSchemaPath:n6}=Tt(),to=Ec.SEARCH_WILDCARDS;async function s6(e,t,r){let n;e.schema===Ec.SYSTEM_SCHEMA_NAME?n=r6[e.table]:n=global.hdb_schema[e.schema][e.table];let s=QM(e,n.hash_attribute,r,t);return jM(e,s,n.hash_attribute,r)}a(s6,"prepSearch");async function jM(e,t,r,n){let s=n6(e.schema,e.table),i=await e6.openEnvironment(s,e.table),o=zM(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(i6(e,r)===!1){let d=e.search_attribute;if(d===r)return n?WM(o,()=>!0):o.map(E=>({[r]:E.key}));let _=a(E=>({[r]:E.value,[d]:E.key}),"toObject");return n?WM(o,_):o.map(_)}let u=e.search_attribute===r?o.map(d=>d.key):o.map(d=>d.value);return n===!0?Wr.batchSearchByHashToMap(c,r,e.get_attributes,u):Wr.batchSearchByHash(c,r,e.get_attributes,u)}a(jM,"executeSearch");function zM(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=Wr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.CONTAINS:s=Wr.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=Wr.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=Wr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Wr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Wr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.SEARCH_ALL:return Wr.searchAll(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Wr.searchAllToMap(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.BETWEEN:s=Wr.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=Wr.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=Wr.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=Wr.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=Wr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(zM,"searchByType");function WM(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(WM,"createMapFromIterable");function i6(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(i6,"checkToFetchMore");function QM(e,t,r,n){if(t6.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),to.indexOf(s)>-1)return r===!0?ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ke.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(to[0])<0&&s.indexOf(to[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(to.indexOf(i)>=0&&to.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ke.SEARCH_TYPES.CONTAINS;if(to.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ke.SEARCH_TYPES.ENDS_WITH;if(to.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ke.SEARCH_TYPES.STARTS_WITH;if(s.includes(to[0])||s.includes(to[1]))return ke.SEARCH_TYPES.EQUALS;throw new Error(YM.UNKNOWN_SEARCH_TYPE)}else switch(n){case Ec.VALUE_SEARCH_COMPARATORS.BETWEEN:return ke.SEARCH_TYPES.BETWEEN;case Ec.VALUE_SEARCH_COMPARATORS.GREATER:return ke.SEARCH_TYPES.GREATER_THAN;case Ec.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ke.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ec.VALUE_SEARCH_COMPARATORS.LESS:return ke.SEARCH_TYPES.LESS_THAN;case Ec.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ke.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(YM.UNKNOWN_SEARCH_TYPE)}}a(QM,"createSearchTypeFromSearchObject");JM.exports={executeSearch:jM,createSearchTypeFromSearchObject:QM,prepSearch:s6,searchByType:zM}});var ZM=N((Mye,XM)=>{"use strict";var Lye=$s(),o6=Yl(),a6=re(),c6=M(),l6=Zh();XM.exports=u6;function u6(e,t){if(!a6.isEmpty(t)&&c6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=o6(e,"value");if(n)throw n;return l6.prepSearch(e,t,!0)}a(u6,"lmdbGetDataByValue")});var R_=N((Bye,eU)=>{"use strict";var vye=$s(),d6=Yl(),_6=re(),f6=M(),E6=Zh();eU.exports=h6;async function h6(e,t){if(!_6.isEmpty(t)&&f6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=d6(e,"value");if(n)throw n;return E6.prepSearch(e,t,!1)}a(h6,"lmdbSearchByValue")});var rU=N((kye,tU)=>{"use strict";var xye=Ht(),iR=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}},oR=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},aR=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};tU.exports={SearchByConditionsObject:iR,SearchCondition:oR,SortAttribute:aR}});var aU=N(($ye,oU)=>{"use strict";var Gye=rU().SearchByConditionsObject,p6=$s(),m6=Yl(),cR=Kl(),ep=Ht(),{Resource:qye}=(Vs(),oe(lR)),iU=Zh(),S6=eR(),T6=require("lodash"),{getSchemaPath:g6}=Tt(),nU=ht(),{handleHDBError:A6,hdb_errors:R6}=_e(),{HTTP_STATUS_CODES:y6}=R6,b6=1e8;oU.exports=O6;async function O6(e){let t=m6(e,"conditions");if(t)throw A6(t,t.message,y6.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=g6(e.schema,e.table),n=await nU.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)nU.openDBI(n,u.search_attribute);let i=T6.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.search_type;d===ep.SEARCH_TYPES.EQUALS?u.estimated_count=cR.count(n,u.search_attribute,u.search_value):d===ep.SEARCH_TYPES.CONTAINS||d===ep.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=b6}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await sU(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(iU.filterByType),_=d.length,E=cR.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=>S6.parseRow(f,E))}else{for(let _=1;_<i.length;_++){let E=i[_],f=await sU(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=cR.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(O6,"lmdbSearchByConditions");async function sU(e,t,r,n){let s=new p6(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===ep.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,iU.searchByType(e,s,i,n).map(o=>o.value)}a(sU,"executeConditionSearch")});var y_=N((Kye,cU)=>{"use strict";var N6=M().OPERATIONS_ENUM,uR=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=N6.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};cU.exports=uR});var dR=N((Wye,pU)=>{"use strict";var _U=$s(),fU=y_(),EU=R_(),hU=S_(),dn=M(),lU=re(),uU=ht(),{getTransactionAuditStorePath:I6,getSchemaPath:w6}=Tt(),dU=j();pU.exports=C6;async function C6(e){try{if(lU.isEmpty(global.hdb_schema[e.schema])||lU.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await P6(e),await D6(e);let t=w6(e.schema,e.table);try{await uU.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=I6(e.schema,e.table);await uU.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(C6,"lmdbDropTable");async function P6(e){let t=new _U(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 EU(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 fU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await hU(s)}a(P6,"deleteAttributesFromSystem");async function D6(e){let t=new _U(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 EU(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 fU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await hU(s)}catch(i){throw i}}a(D6,"dropTableFromSystem")});var SU=N((zye,mU)=>{"use strict";var L6=require("fs-extra"),M6=$s(),U6=Wl(),v6=y_(),B6=dR(),H6=S_(),x6=rR(),k6=R_(),ro=M(),{getSchemaPath:F6}=Tt(),{handleHDBError:G6,hdb_errors:q6}=_e(),{HDB_ERROR_MSGS:$6,HTTP_STATUS_CODES:V6}=q6;mU.exports=K6;async function K6(e){let t;try{t=await Y6(e.schema);let r=new M6(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await k6(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await B6(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new v6(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await H6(s);let i=F6(t);await L6.remove(i)}catch(r){throw r}}a(K6,"lmdbDropSchema");async function Y6(e){let t=new U6(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await x6(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw G6(new Error,$6.SCHEMA_NOT_FOUND(e),V6.NOT_FOUND,void 0,void 0,!0);return n}a(Y6,"validateDropSchema")});var b_=N((Jye,TU)=>{"use strict";var _R=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};TU.exports=_R});var ER=N((ebe,gU)=>{"use strict";var W6=require("fs-extra"),tp=ht(),{getTransactionAuditStorePath:j6}=Tt(),fR=Ht(),Zye=b_();gU.exports=z6;async function z6(e){let t;try{let r=j6(e.schema,e.table);await W6.mkdirp(r),t=await tp.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{tp.createDBI(t,fR.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),tp.createDBI(t,fR.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),tp.createDBI(t,fR.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(z6,"createTransactionsAuditEnvironment")});var yU=N((nbe,RU)=>{"use strict";var hR=M(),AU=ht(),Q6=ec(),{getSystemSchemaPath:J6,getSchemaPath:X6}=Tt(),rbe=Qi(),Z6=Ih(),pR=Nh(),e8=j(),t8=ER();RU.exports=r8;async function r8(e,t){let r=X6(t.schema,t.table),n=new pR(t.schema,t.table,hR.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new pR(t.schema,t.table,hR.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new pR(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await AU.createEnvironment(r,t.table),e!==void 0){let o=await AU.openEnvironment(J6(),hR.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Q6.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 mR(n),await mR(s),await mR(i)}await t8(t)}catch(o){throw o}}a(r8,"lmdbCreateTable");async function mR(e){try{await Z6(e)}catch(t){e8.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(mR,"createAttribute")});var OU=N((ibe,bU)=>{"use strict";var n8=c_(),s8=Yd(),i8=Wh(),O_=M(),o8=ec().updateRecords,a8=ht(),{getSchemaPath:c8}=Tt(),l8=p_(),u8=j();bU.exports=d8;async function d8(e){try{let{schema_table:t,attributes:r}=n8(e);s8(e,r,t.hash_attribute),e.schema!==O_.SYSTEM_SCHEMA_NAME&&(r.includes(O_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(O_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(O_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(O_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await i8(e.hdb_auth_header,t,r),s=c8(e.schema,e.table),i=await a8.openEnvironment(s,e.table),o=await o8(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await l8(e,o)}catch(c){u8.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(d8,"lmdbUpdateRecords")});var IU=N((abe,NU)=>{"use strict";var _8=M().OPERATIONS_ENUM,SR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=_8.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};NU.exports=SR});var CU=N((ube,wU)=>{"use strict";var lbe=IU(),f8=c_(),E8=Yd(),h8=Wh(),N_=M(),p8=ec().upsertRecords,m8=ht(),{getSchemaPath:S8}=Tt(),T8=p_(),g8=j(),{handleHDBError:A8,hdb_errors:R8}=_e();wU.exports=y8;async function y8(e){let t;try{t=f8(e)}catch(l){throw A8(l,l.message,R8.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;E8(e,n,r.hash_attribute),e.schema!==N_.SYSTEM_SCHEMA_NAME&&(n.includes(N_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(N_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(N_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(N_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await h8(e.hdb_auth_header,r,n),i=S8(e.schema,e.table),o=await m8.openEnvironment(i,e.table),c=await p8(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await T8(e,c)}catch(l){g8.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(y8,"lmdbUpsertRecords")});var DU=N((_be,PU)=>{"use strict";var TR=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};PU.exports=TR});var MU=N((Ebe,LU)=>{"use strict";var gR=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}};LU.exports=gR});var BU=N((mbe,vU)=>{"use strict";var AR=ht(),{getTransactionAuditStorePath:b8}=Tt(),pbe=DU(),I_=Ht(),O8=re(),UU=MU(),N8=require("util").promisify,I8=N8(setTimeout),w8=1e4,C8=100;vU.exports=P8;async function P8(e){let t=b8(e.schema,e.table),r=await AR.openEnvironment(t,e.table,!0),n=AR.listDBIs(r);AR.initializeDBIs(r,I_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new UU;do s=await D8(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 I8(C8);while(s.transactions_deleted>0);return i}a(P8,"deleteAuditLogsBefore");async function D8(e,t){let r=new UU;try{let n=e.dbis[I_.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[I_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];O8.isEmpty(c)||(s=e.dbis[I_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[I_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>w8)break}return await s,r}catch(n){throw n}}a(D8,"deleteTransactions")});var xU=N((Tbe,HU)=>{"use strict";var RR=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};HU.exports=RR});var FU=N((Rbe,kU)=>{"use strict";var L8=$s(),M8=y_(),Abe=xU(),yi=M(),U8=re(),yR=ht(),v8=Qi(),B8=R_(),H8=S_(),{getSchemaPath:x8}=Tt();kU.exports=k8;async function k8(e,t=!0){let r;e.schema===yi.SYSTEM_SCHEMA_NAME?r=v8[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await G8(e),s=x8(e.schema,e.table),i=await yR.openEnvironment(s,e.table);return t===!0&&await F8(e,i,r.hash_attribute),yR.dropDBI(i,e.attribute),n}a(k8,"lmdbDropAttribute");async function F8(e,t,r){let n=yR.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(F8,"removeAttributeFromAllObjects");async function G8(e){let t=new L8(yi.SYSTEM_SCHEMA_NAME,yi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,yi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[yi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,yi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await B8(t)).filter(o=>o[yi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(U8.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[yi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new M8(yi.SYSTEM_SCHEMA_NAME,yi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return H8(i)}a(G8,"dropAttributeFromSystem")});var YU=N((Obe,KU)=>{"use strict";var bR=ht(),jl=Ht(),bbe=sn(),OR=M(),GU=re(),{getTransactionAuditStorePath:q8}=Tt(),$8=Kl(),rp=ql(),V8=j();KU.exports=K8;async function K8(e){let t=q8(e.schema,e.table),r=await bR.openEnvironment(t,e.table,!0),n=bR.listDBIs(r);bR.initializeDBIs(r,jl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case OR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return qU(r,e.search_values);case OR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,W8(r,e.search_values,s);case OR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Y8(r,e.search_values);default:return qU(r)}}a(K8,"readAuditLog");function qU(e,t=[0,Date.now()]){GU.isEmpty(t[0])&&(t[0]=0),GU.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[jl.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 rp,s))}a(qU,"searchTransactionsByTimestamp");function Y8(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[jl.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,VU(e,i))}return Object.fromEntries(r)}a(Y8,"searchTransactionsByUsername");function W8(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=$8.equals(e,jl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,jl.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=VU(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);$U(l,"records",r,d,o),$U(l,"original_records",r,d,o)}return Object.fromEntries(o)}a(W8,"searchTransactionsByHashValues");function $U(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 rp(e.operation,e.user_name,i,void 0);_[t]=[c],u.push(_)}}else{let u=new rp(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a($U,"loopRecords");function VU(e,t){let r=[];try{let n=e.dbis[jl.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 rp,i);r.push(o)}}catch(i){V8.warn(i)}return r}catch(n){throw n}}a(VU,"batchSearchTransactions")});var jU=N((Cbe,WU)=>{"use strict";var{getSchemaPath:Ibe}=Tt(),wbe=ht(),{database:j8}=(Pe(),oe(lt));WU.exports={writeTransaction:z8};async function z8(e,t,r){return j8({database:e,table:t}).transaction(r)}a(z8,"writeTransaction")});var XU=N((Dbe,JU)=>{"use strict";var{getSchemaPath:zU}=Tt(),QU=ht();JU.exports={flush:Q8,resetReadTxn:J8};async function Q8(e,t){return(await QU.openEnvironment(zU(e,t),t.toString())).flushed}a(Q8,"flush");async function J8(e,t){try{(await QU.openEnvironment(zU(e,t),t.toString())).resetReadTxn()}catch{}}a(J8,"resetReadTxn")});var rv=N((Mbe,tv)=>{"use strict";var{Readable:X8}=require("stream"),{getDatabases:Z8}=(Pe(),oe(lt)),{readSync:e9,openSync:t9,createReadStream:ZU}=require("fs"),{open:r9}=require("lmdb"),ev=t_(),n9=r_(),{AUDIT_STORE_OPTIONS:s9}=(ji(),oe(nv)),{INTERNAL_DBIS_NAME:i9,AUDIT_STORE_NAME:o9}=Ht();tv.exports=c9;var NR=32768,a9=100;async function c9(e){let t=e.database||e.schema||"data",r=Z8()[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,_=r9({noSync:!0,maxDbs:n9.MAX_DBS}),E,f=_.openDB(i9,new ev(!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:Y}of U.getRange({start:null,transaction:h,versions:U.useVersions}))E=I.put(H,Y,X),T++%a9===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 ev(!U,U);await m(S,H)}e.include_audit&&await m(o9,{...s9}),await E;let g=ZU(_.path);return g.headers=l(),g.on("close",()=>{h.done(),_.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=t9(o.path);return o.transaction(()=>{let u=Buffer.alloc(NR);e9(c,u,0,NR),o.resetReadTxn();let d=o.useReadTransaction();d.renew();let _=ZU(null,{fd:c,start:NR}),E=new X8.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(c9,"getBackup")});var ov=N((vbe,iv)=>{"use strict";var l9=j(),{handleHDBError:u9}=_e(),d9=yP(),_9=Ih(),f9=zA(),E9=SM(),h9=S_(),p9=rR(),m9=VM(),S9=ZM(),T9=R_(),g9=aU(),A9=SU(),R9=yU(),y9=OU(),b9=CU(),O9=BU(),N9=dR(),I9=FU(),w9=YU(),C9=jU(),sv=XU(),P9=rv(),IR=class extends d9{static{a(this,"LMDBBridge")}async searchByConditions(t){return g9(t)}async getDataByHash(t){return await p9(t)}async searchByHash(t){return await m9(t)}async getDataByValue(t,r){return await S9(t,r)}async searchByValue(t){return await T9(t)}async createSchema(t){return await E9(t)}async dropSchema(t){return await A9(t)}async createTable(t,r){return await R9(t,r)}async dropTable(t){return await N9(t)}async createAttribute(t){return await _9(t)}async createRecords(t){return await f9(t)}async updateRecords(t){return await y9(t)}async upsertRecords(t){try{return await b9(t)}catch(r){throw u9(r,null,null,l9.ERR,r)}}async deleteRecords(t){return await h9(t)}async dropAttribute(t){return await I9(t)}async deleteAuditLogsBefore(t){return await O9(t)}async readAuditLog(t){return await w9(t)}writeTransaction(t,r,n){return C9.writeTransaction(t,r,n)}flush(t,r){return sv.flush(t,r)}resetReadTxn(t,r){return sv.resetReadTxn(t,r)}getBackup(t){return P9(t)}};iv.exports=IR});function Ev(e){CR=e}function U9(){M9=setInterval(function(){for(let e of wR)if(e.stale){let t=e[Fe]?.url;uv.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},L9).unref()}var PR,lv,uv,dv,_v,fv,av,wR,D9,w_,cv,CR,hc,np,L9,M9,sp=Ie(()=>{PR=L(sn()),lv=L(_e()),uv=L(j());Vs();dv=L(se()),_v=L(M()),fv=L(re()),av=100,wR=new Set,D9=(0,fv.convertToMS)(dv.get(_v.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3;a(Ev,"replicationConfirmation");hc=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),wR.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(wR.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(w_&&!this.overloadChecked&&performance.now()-cv>D9)throw new lv.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,PR.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)<av>>n?l():s=this.writes[0].store.transaction(()=>{for(let _ of this.writes)_.entry=_.store.getEntry(_.key),c(_);return!0})),s)return w_||(w_=s,cv=performance.now(),w_.then(()=>{w_=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];CR&&f&&i.push(CR(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)+av/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=[]}},np=class extends hc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,PR.getNextMonotonicTime)())}getReadTxn(){}},L9=3e4;a(U9,"startMonitoringTxns");U9()});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 hc;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 hv,pc=Ie(()=>{hv=L(fi());Vs();sp();a(Pt,"transaction");(0,hv._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 yv={};je(yv,{ResourceBridge:()=>MR});function UR({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 mv(e,t){let r=bi(e),n=UR(e,r);if(!r)throw new Ks.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&&op(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 bi(e){let t=e.database||e.schema||B9,r=ut()[t];if(!r)throw(0,Ks.handleHDBError)(new Error,v9.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Sv(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*Tv(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 gv,ip,Ks,Av,Ys,DR,LR,Rv,v9,B9,H9,x9,pv,MR,bv=Ie(()=>{"use strict";gv=L(ov()),ip=L(Yl()),Ks=L(_e());Pe();Av=L(c_()),Ys=L(M()),DR=L(eo()),LR=L(qs()),Rv=L(re());pc();ap();({HDB_ERROR_MSGS:v9}=Ks.hdb_errors),B9="data",H9=1e4,x9=10,MR=class extends gv.default{static{a(this,"ResourceBridge")}constructor(t){super(t),pv=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,ip.default)(t,"conditions");if(r)throw(0,Ks.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=bi(t);if(!n)throw new Ks.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:UR(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 Ks.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}]}Et({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await bi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=bi(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){bi(t).dropTable()}createSchema(t){return zl({database:t.schema,table:null}),DR.signalSchemaChange(new LR.SchemaEventMsg(process.pid,Ys.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await vR(t.schema),DR.signalSchemaChange(new LR.SchemaEventMsg(process.pid,Ys.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,pv.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,Av.default)(t),s,i=ut()[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=op(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=ut()[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 Sv(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=ut()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ks.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:Ys.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,Rv.async_set_timeout)(x9),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%H9===0&&await u();return l.length>0&&await u(),s?Sv(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,ip.default)(t,"hashes");if(r)throw r;return mv(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of mv(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Ys.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,ip.default)(t,"value");if(n)throw n;let s=bi(t);if(!s)throw new Ks.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===Ys.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:UR(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=bi(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){bi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return bi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=bi(t),n={};switch(t.search_type){case Ys.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 Ys.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of Tv(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return Tv(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(UR,"getSelect");a(mv,"getRecords");a(bi,"getTable");a(Sv,"createDeleteResponse");a(Tv,"groupRecordsInHistory")});var Un=N((Qbe,Ov)=>{"use strict";var{ResourceBridge:k9}=(bv(),oe(yv)),F9=se();F9.initSync();var cp;function G9(){return cp||(cp=new k9,cp)}a(G9,"getBridge");Ov.exports=G9()});var Cv=N((Xbe,wv)=>{"use strict";var Nv=require("lodash"),C_=require("mathjs"),q9=require("jsonata"),Iv=re();wv.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?Nv.uniqWith(e,Nv.isEqual):e,"distinct_array"),searchJSON:$9,mad:P_.bind(null,C_.mad),mean:P_.bind(null,C_.mean),mode:P_.bind(null,C_.mode),prod:P_.bind(null,C_.prod),median:P_.bind(null,C_.median)};function P_(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(P_,"aggregateFunction");function $9(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(Iv.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Iv.isEmpty(this.__ala__.res[r])){let n=q9(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a($9,"searchJSON")});var Dv=N((eOe,Pv)=>{"use strict";var nr=require("moment"),BR="YYYY-MM-DDTHH:mm:ss.SSSZZ";nr.suppressDeprecationWarnings=!0;Pv.exports={current_date:a(()=>nr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>nr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return nr(e).utc().format("YYYY");case"month":return nr(e).utc().format("MM");case"day":return nr(e).utc().format("DD");case"hour":return nr(e).utc().format("HH");case"minute":return nr(e).utc().format("mm");case"second":return nr(e).utc().format("ss");case"millisecond":return nr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>nr(e).utc().format(BR),"date"),date_format:a((e,t)=>nr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>nr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>nr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=nr(e).utc(),s=nr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>nr().utc().valueOf(),"now"),get_server_time:a(()=>nr().format(BR),"get_server_time"),offset_utc:a((e,t)=>nr(e).utc().utcOffset(t).format(BR),"offset_utc")}});var vv=N((rOe,Uv)=>{"use strict";var V9=require("@turf/area"),K9=require("@turf/length"),Y9=require("@turf/circle"),W9=require("@turf/difference"),j9=require("@turf/distance"),z9=require("@turf/boolean-contains"),Q9=require("@turf/boolean-equal"),J9=require("@turf/boolean-disjoint"),X9=require("@turf/helpers"),Lv=M(),$e=re(),no=j();Uv.exports={geoArea:Z9,geoLength:e7,geoCircle:t7,geoDifference:r7,geoDistance:Mv,geoNear:n7,geoContains:s7,geoEqual:i7,geoCrosses:o7,geoConvert:a7};function Z9(e){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return V9.default(e)}catch(t){return no.trace(t,e),NaN}}a(Z9,"geoArea");function e7(e,t){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return K9.default(e,{units:t||"kilometers"})}catch(r){return no.trace(r,e),NaN}}a(e7,"geoLength");function t7(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return Y9.default(e,t,{units:r||"kilometers"})}catch(n){return no.trace(n,e,t),NaN}}a(t7,"geoCircle");function r7(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 W9(e,t)}catch(r){return no.trace(r,e,t),NaN}}a(r7,"geoDifference");function Mv(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 j9.default(e,t,{units:r||"kilometers"})}catch(n){return no.trace(n,e,t),NaN}}a(Mv,"geoDistance");function n7(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 Mv(e,t,n)<=r}catch(s){return no.trace(s,e,t),!1}}a(n7,"geoNear");function s7(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 z9.default(e,t)}catch(r){return no.trace(r,e,t),!1}}a(s7,"geoContains");function i7(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 Q9.default(e,t)}catch(r){return no.trace(r,e,t),!1}}a(i7,"geoEqual");function o7(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!J9.default(e,t)}catch(r){return no.trace(r,e,t),!1}}a(o7,"geoCrosses");function a7(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(Lv.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Lv.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=$e.autoCastJSON(e)),X9[t](e,r)}a(a7,"geoConvert")});var lp=N((sOe,Bv)=>{var mc=Cv(),Gn=Dv(),Oi=vv();Bv.exports=e=>{e.aggr.mad=e.aggr.MAD=mc.mad,e.aggr.mean=e.aggr.MEAN=mc.mean,e.aggr.mode=e.aggr.MODE=mc.mode,e.aggr.prod=e.aggr.PROD=mc.prod,e.aggr.median=e.aggr.MEDIAN=mc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=mc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=mc.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=Oi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Oi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Oi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Oi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Oi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Oi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Oi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Oi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Oi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Oi.geoNear}});var Fv=N((iOe,kv)=>{"use strict";var D_=require("lodash"),_n=require("alasql");_n.options.cache=!1;var c7=lp(),Hv=require("clone"),up=require("recursive-iterator"),Ue=j(),et=re(),Ql=Un(),l7=M(),{hdb_errors:u7}=_e(),{getDatabases:xv}=(Pe(),oe(lt)),d7="IS NULL",Ws="There was a problem performing this search. Please check the logs and try again.";c7(_n);var HR=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(Ws)}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(Ws)}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(Ws)}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(Ws)}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(Ws)}}_getColumns(){let t=new up(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(Hv(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=D_.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=xv()[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 up(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 up(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(l7.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&&D_.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(Hv(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(d7)>-1&&this.tables.forEach(s=>{let i={columnid:xv()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=D_.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 Ql.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(Ws)}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 Ql.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(Ws)}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 Ql.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(Ws)}else try{c.search_attribute=s.attribute,c.search_value="*";let d=await Ql.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(Ws)}}}_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=D_.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 up(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=D_.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(Ws)}}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 Ql.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(u7.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 Ql.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(Ws)}}return Object.values(Object.values(this.data)[0].__merged_data)}};kv.exports=HR});var $r=N((aOe,Gv)=>{"use strict";var _7=AP();Gv.exports={searchByConditions:E7,searchByHash:h7,searchByValue:p7,search:m7};var xR=Un(),{transformReq:kR}=re(),f7=Fv();async function E7(e){return kR(e),xR.searchByConditions(e)}a(E7,"searchByConditions");async function h7(e){kR(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of xR.searchByHash(e))r&&t.push(r);return t}a(h7,"searchByHash");async function p7(e){kR(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of xR.searchByValue(e))t.push(r);return t}a(p7,"searchByValue");function m7(e,t){try{let r=new _7(e);r.validate(),new f7(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(m7,"search")});var dp=N((lOe,qv)=>{"use strict";var S7=Un();qv.exports={writeTransaction:T7};function T7(e,t,r){return S7.writeTransaction(e,t,r)}a(T7,"writeTransaction")});var Yv=N((_Oe,Kv)=>{"use strict";var g7=$r(),A7=Fs(),$v=j(),R7=cn(),dOe=dp(),y7=require("clone"),GR=require("alasql"),b7=lp(),Vv=require("util"),O7=Vv.promisify(A7.getTableSchema),N7=Vv.promisify(g7.search),I7=M(),FR=re();b7(GR);Kv.exports={update:C7};var w7="There was a problem performing this update. Please check the logs and try again.";async function C7({statement:e,hdb_user:t}){let r=await O7(e.table.databaseid,e.table.tableid),n=P7(e.columns);FR.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=y7(s),c=FR.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=GR.parse(l).statements[0],d=await N7(u),_=D7(n,d);return L7(o,_,t)}a(C7,"update");function P7(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=GR.compile(`SELECT ${r.expression.toString()} AS [${I7.FUNC_VAL}] FROM ?`)}),t}catch(t){throw $v.error(t),new Error(w7)}}a(P7,"createUpdateRecord");function D7(e,t){return FR.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(D7,"buildUpdateRecords");async function L7(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await R7.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){$v.error(`Error delete new_attributes from update response: ${i}`)}return s}a(L7,"updateRecords")});var jv=N((pOe,Wv)=>{var M7=require("alasql"),U7=$r(),v7=j(),B7=Un(),$R=require("util"),qR=re(),H7=M(),x7=Fs(),EOe=dp(),hOe=cn(),k7="record",F7="successfully deleted",G7=$R.callbackify(K7),q7=$R.promisify(U7.search),$7=$R.promisify(x7.getTableSchema);Wv.exports={convertDelete:G7};function V7(e){return`${e.deleted_hashes.length} ${k7}${e.deleted_hashes.length===1?"":"s"} ${F7}`}a(V7,"generateReturnMessage");async function K7({statement:e,hdb_user:t}){let r=await $7(e.table.databaseid,e.table.tableid);qR.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=qR.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=M7.parse(o).statements[0],l={operation:H7.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await q7(c);let u=await B7.deleteRecords(l);return qR.isEmptyOrZeroLength(u.message)&&(u.message=V7(u)),delete u.txn_time,u}catch(u){throw v7.error(u),u.hdb_code?u.message:u}}a(K7,"convertDelete")});var Zv=N((SOe,Xv)=>{"use strict";var Y7=Zi(),{hdb_errors:zv}=_e(),{getDatabases:Qv}=(Pe(),oe(lt));Xv.exports={checkSchemaExists:Jv,checkSchemaTableExists:W7,schema_describe:Y7};async function Jv(e){if(!Qv()[e])return zv.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Jv,"checkSchemaExists");async function W7(e,t){let r=await Jv(e);if(r)return r;if(!Qv()[e][t])return zv.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(W7,"checkSchemaTableExists")});var Jl=N((gOe,j7)=>{j7.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 B_={};je(B_,{addAnalyticsListener:()=>v_,recordAction:()=>pr,recordActionBinary:()=>qn,setAnalyticsEnabled:()=>z7});function z7(e){c0=e}function pr(e,t,r,n,s){if(!c0)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=Ep.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},Ep.set(i,o)}_p||Q7()}function qn(e,t,r,n,s){pr(!!e,t,r,n,s)}function v_(e){d0.push(e)}function Q7(){_p=performance.now(),setTimeout(async()=>{let e=performance.now()-_p;_p=0;let t=[],r={time:Date.now(),period:e,threadId:Sc.threadId,metrics:t};for(let[s,i]of Ep){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 _0){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 f0()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Sc.threadId,byThread:!0,...n});for(let s of d0)s(t);Ep=new Map,Sc.parentPort?Sc.parentPort.postMessage({type:u0,report:r}):p0({report:r})},l0).unref()}async function J7(e,t=6e4){let r=YR(),n=E0(),s=new Promise(T=>{let m=performance.now();setImmediate(()=>{let g=performance.now();g-m>5e3&&(0,L_.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,L_.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:Y,total:V,distribution:ne,threads:Q,...de}=y;Y||(Y=1);let W=X+(I?"-"+I:"");U!==void 0&&(W+="-"+U),H!==void 0&&(W+="-"+H);let ae=c.get(W);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*Y)/(Oe+Y))}ae.count+=Y,V>=0&&(ae.total+=V,ae.ratio=ae.total/ae.count)}else ae={period:t,...y},delete ae.distribution,c.set(W,ae),ae.byThread&&(ae.threads=[],ae.threads[S]={...de},u.push(ae));if(ne){ne=ne.map(Ne=>typeof Ne=="number"?{value:Ne,count:1}:Ne);let Oe=l.get(W);Oe?Oe.push(...ne):l.set(W,ne)}}await f0()}for(let T of u){let{path:m,method:g,type:S,metric:y,count:I,total:U,distribution:H,threads:X,...Y}=T;X=X.filter(V=>V);for(let V in Y){if(typeof T[V]!="number")continue;let ne=0;for(let Q of X){let de=Q[V];typeof de=="number"&&(ne+=de)}T[V]=ne}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 _0){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,Y,V,ne,Q,de,W,ae,Oe]=y;Object.assign(g,{p1:X,p10:Y,p25:V,median:ne,p75:Q,p90:de,p95:W,p99:ae,p999:Oe})}let _;for(let[T,m]of c)m.id=(0,fp.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,fp.getNextMonotonicTime)(),m={id:T,metric:"main-thread-utilization",idle:f-e0,active:h-t0,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(T,m,{append:!0}).then(g=>{g||n.primaryStore.put(T,m)})}e0=f,t0=h}async function r0(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function YR(){return n0||(n0=Et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function E0(){return s0||(s0=Et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function eee(){h0=!0;let e=(0,U_.get)(KR.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await J7(l0,e),await r0(YR(),X7),await r0(E0(),Z7)},Math.min(e/2,2147483647)).unref()}function p0(e,t){let r=e.report;r.threadId=t?.threadId||Sc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(i0+=n.mean*n.count);r.totalBytesProcessed=i0,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(o0.get(t))}),o0.set(t,t.performance.eventLoopUtilization())),r.id=(0,fp.getNextMonotonicTime)(),YR().primaryStore.put(r.id,r),h0||eee(),tee&&(m0=nee(r))}async function nee(e){if(await m0,!Xo){let r=(0,M_.dirname)((0,L_.getLogFilePath)());try{Xo=await(0,VR.open)((0,M_.join)(r,"analytics.log"),"r+")}catch{Xo=await(0,VR.open)((0,M_.join)(r,"analytics.log"),"w+")}}let t=(await Xo.stat()).size;if(t>ree){let r=Buffer.alloc(t);await Xo.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Xo.write(r,{position:0}),await Xo.truncate(r.length),t=r.length}await Xo.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 hr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}rX(n,r),wA(n);let s=n.toJSON();if(W3.config=s,jt=Bl(s),jt.logging_rotation_rotate)for(let i in uL)jt[i]&&hr.error(`Config ${uL[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);hr.trace(z3)}}a(Fh,"initConfig");function rX(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&&(hr.trace("Updating config file with missing config params"),Kr.writeFileSync(t,String(e)))}a(rX,"checkForUpdatedConfig");function wA(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 vl.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 vl.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=q3(r,t);if(n.error)throw vl.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(wA,"validateConfig");function nX(e,t){jt===void 0&&(jt={});let r=Gs[e.toLowerCase()];if(r===void 0){hr.trace(`Unable to update config object because config param '${e}' does not exist`);return}jt[r.toLowerCase()]=t}a(nX,"updateConfigObject");function pL(e,t,r=void 0,n=!1,s=!1,i=!1){jt===void 0&&Fh();let o=hL(Gs.hdb_root),c=Bn.join(o,un.HDB_CONFIG_FILE),l=jo(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=Gs[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=IA(E,t);l.setIn([...f],h)}else for(let E in r){let f=Gs[E.toLowerCase()];if(f===vn.HTTP_SECUREPORT&&r[E]===jt[vn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),f===vn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===jt[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=IA(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){hr.error(g)}}}u&&EL(l,u),wA(l);let d=l.getIn(["rootPath"]),_=Bn.join(d,un.HDB_CONFIG_FILE);n===!0&&sX(c,d),Kr.writeFileSync(_,String(l)),s&&(jt=Bl(l.toJSON())),hr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(pL,"updateConfigValue");function sX(e,t){try{let r=Bn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${un.HDB_CONFIG_FILE}.bak`);Kr.copySync(e,r),hr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){hr.error(Q3),hr.error(r)}}a(sX,"backupConfigFile");var iX=["databases"];function Bl(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}),kh=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])&&!iX.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()]&&Gs[l]&&(s[Gs[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Bl,"flattenConfig");function IA(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($3(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Er.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 Er.autoCast(t)}a(IA,"castConfigValue");function oX(){let e=Er.getPropsFilePath(),t=lc(e);return jo(t).toJSON()}a(oX,"getConfiguration");async function aX(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return pL(void 0,void 0,s,!0),Z3}catch(i){throw typeof i=="string"||i instanceof String?K3(i,i,Y3.BAD_REQUEST,void 0,void 0,!0):i}}a(aX,"setConfiguration");function CA(){let e=Er.getPropsFilePath();try{Kr.accessSync(e,Kr.constants.F_OK|Kr.constants.R_OK)}catch(n){if(!Er.noBootFile())throw hr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=lc(e);return jo(t).toJSON()}a(CA,"readConfigFile");function jo(e){return dL.parseDocument(Kr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(jo,"parseYamlDoc");function cX(){let e=CA(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Er.isEmptyOrZeroLength(t)?[]:t;let r=lL(t);if(r)throw vl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Er.isEmptyOrZeroLength(n)?[]:n;let s=lL(n);if(s)throw vl.CONFIG_VALIDATION(s.message);if(!Er.isEmptyOrZeroLength(n)&&!Er.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Er.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw vl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(cX,"getClusteringRoutes");function mL(e){let t=_L(e);jt={};for(let r in Gs){let n=t.get(r.toUpperCase());if(Er.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Gs[r].toLowerCase();s===vn.LOGGING_ROOT?jt[s]=Bn.dirname(n):jt[s]=n}return jt}a(mL,"initOldConfig");function lX(e){let t=CA();return V3.get(t,e.replaceAll("_","."))}a(lX,"getConfigFromFile");async function uX(e,t){let r=jo(lc());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Kr.writeFile(lc(),String(r))}a(uX,"addConfig");function dX(e){let t=lc(Er.getPropsFilePath()),r=jo(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Bn.join(n,un.HDB_CONFIG_FILE);Kr.writeFileSync(s,String(r))}a(dX,"deleteConfigFromFile");function _X(){return kh||(Fh(),kh)}a(_X,"getConfigObj");function fX(){return jt||Fh(),jt}a(fX,"getFlatConfigObj")});var gL=N((_Re,TL)=>{"use strict";var Gh=M(),qh=class{static{a(this,"BaseLicense")}constructor(t=0,r=Gh.RAM_ALLOCATION_ENUM.DEFAULT,n=Gh.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},PA=class extends qh{static{a(this,"ExtendedLicense")}constructor(t=0,r=Gh.RAM_ALLOCATION_ENUM.DEFAULT,n=Gh.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};TL.exports={BaseLicense:qh,ExtendedLicense:PA}});var uc=N((ERe,IL)=>{"use strict";var xl=require("fs-extra"),RL=Bh(),yL=require("crypto"),EX=require("moment"),hX=require("uuid").v4,Yr=j(),LA=require("path"),pX=re(),zo=M(),{totalmem:AL}=require("os"),mX=gL().ExtendedLicense,Hl="invalid license key format",SX="061183",TX="mofi25",gX="aes-256-cbc",AX=16,RX=32,bL=se(),{resolvePath:OL}=Ct();bL.initSync();var DA;IL.exports={validateLicense:NL,generateFingerPrint:bX,licenseSearch:vA,getLicense:IX,checkMemoryLimit:wX};function MA(){return LA.join(bL.getHdbBasePath(),zo.LICENSE_KEY_DIR_NAME,zo.LICENSE_FILE_NAME)}a(MA,"getLicenseDirPath");function yX(){let e=MA();return OL(LA.join(e,zo.LICENSE_FILE_NAME))}a(yX,"getLicenseFilePath");function UA(){let e=MA();return OL(LA.join(e,zo.REG_KEY_FILE_NAME))}a(UA,"getFingerPrintFilePath");async function bX(){let e=UA();try{return await xl.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await OX();throw Yr.error(`Error writing fingerprint file to ${e}`),Yr.error(t),new Error("There was an error generating the fingerprint")}}a(bX,"generateFingerPrint");async function OX(){let e=hX(),t=RL.hash(e),r=UA();try{await xl.mkdirp(MA()),await xl.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Yr.error(`Error writing fingerprint file to ${r}`),Yr.error(n),new Error("There was an error generating the fingerprint")}return t}a(OX,"writeFingerprint");function NL(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:zo.RAM_ALLOCATION_ENUM.DEFAULT,version:zo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Yr.error("empty license key passed to validate."),r;let n=UA(),s=!1;try{s=xl.statSync(n)}catch(i){Yr.error(i)}if(s){let i;try{i=xl.readFileSync(n,"utf8")}catch{Yr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(TX),c=o[1];c=Buffer.concat([Buffer.from(c)],AX);let l=Buffer.concat([Buffer.from(i)],RX),u=yL.createDecipheriv(gX,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=NX(o[0],i);if(f)d=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Hl),Yr.error(Hl),new Error(Hl)}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(Hl),Yr.error(Hl),new Error(Hl)}else r.exp_date=d;r.exp_date<EX().valueOf()&&(r.valid_date=!1),RL.validate(o[1],`${SX}${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||Yr.error("Invalid licence"),r}a(NL,"validateLicense");function NX(e,t){try{let r=yL.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Yr.warn("Check old license failed")}}a(NX,"checkOldLicense");function vA(){let e=new mX,t=[];try{t=xl.readFileSync(yX(),"utf-8").split(zo.NEW_LINE)}catch(r){r.code==="ENOENT"?Yr.debug("no license file found"):Yr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(pX.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=NL(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){Yr.error("There was an error parsing the license string."),Yr.error(s),e.ram_allocation=zo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return DA=e,e}a(vA,"licenseSearch");async function IX(){return DA||await vA(),DA}a(IX,"getLicense");function wX(){let e=vA().ram_allocation,t=process.constrainedMemory?.()||AL();if(t=Math.round(Math.min(t,AL())/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(wX,"checkMemoryLimit")});var xn=N((TRe,$L)=>{"use strict";var DL="username is required",LL="nothing to update, must supply active, role or password to update",ML="password cannot be an empty string",UL="If role is specified, it cannot be empty.",vL="active must be true or false";$L.exports={addUser:HX,alterUser:xX,dropUser:FX,getSuperUser:VX,userInfo:GX,listUsers:Vh,listUsersExternal:qX,setUsersToGlobal:Fl,findAndValidateUser:GL,getClusterUser:KX,USERNAME_REQUIRED:DL,ALTERUSER_NOTHING_TO_UPDATE:LL,EMPTY_PASSWORD:ML,EMPTY_ROLE:UL,ACTIVE_BOOLEAN:vL};var BL=cn(),CX=oc(),xA=Bh(),HL=ZD(),xL=$r(),kA=eo(),Hn=re(),kL=require("validate.js"),Ke=j(),{promisify:PX}=require("util"),FA=Xi(),wL=M(),CL=It(),DX=Ct(),pRe=se(),mRe=uc(),LX=Qi(),{table:SRe}=(Pe(),oe(lt)),{handleHDBError:Ai,hdb_errors:MX}=_e(),{HTTP_STATUS_CODES:Ri,AUTHENTICATION_ERROR_MSGS:BA,HDB_ERROR_MSGS:kl}=MX,{UserEventMsg:GA}=qs(),HA=require("lodash"),{server:qA}=(qr(),oe(ja)),UX=j();qA.getUser=(e,t)=>GL(e,t,t!=null);var FL={username:!0,active:!0,role:!0,password:!0},PL=new Map,$h=xL.searchByValue,vX=xL.searchByHash,BX=PX(CX.delete);async function HX(e){let t=kL.cleanAttributes(e,FL),r=HL.addUserValidation(t);if(r)throw Ai(new Error,r.message,Ri.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 $h(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 Ai(new Error,kl.ROLE_NAME_NOT_FOUND(t.role),Ri.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Ai(new Error,kl.DUP_ROLES_FOUND(t.role),Ri.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=FA.encrypt(t.password)),t.password=xA.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await BL.insert(i)}catch(l){throw Ke.error("There was an error searching for a user."),Ke.error(l),l}Ke.debug(o);try{await Fl()}catch(l){throw Ke.error("Got an error setting users to global"),Ke.error(l),l}if(o.skipped_hashes.length===1)throw Ai(new Error,kl.USER_ALREADY_EXISTS(t.username),Ri.CONFLICT,void 0,void 0,!0);let c={...t};return c.role=s[0],kA.signalUserChange(new GA(process.pid)),`${c.username} successfully added`}a(HX,"addUser");async function xX(e){let t=kL.cleanAttributes(e,FL);if(Hn.isEmptyOrZeroLength(t.username))throw new Error(DL);if(Hn.isEmptyOrZeroLength(t.password)&&Hn.isEmptyOrZeroLength(t.role)&&Hn.isEmptyOrZeroLength(t.active))throw new Error(LL);if(!Hn.isEmpty(t.password)&&Hn.isEmptyOrZeroLength(t.password.trim()))throw new Error(ML);if(!Hn.isEmpty(t.active)&&!Hn.isBoolean(t.active))throw new Error(vL);let r=kX(t.username);if(!Hn.isEmpty(t.password)&&!Hn.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=FA.encrypt(t.password)),t.password=xA.hash(t.password)),t.role==="")throw new Error(UL);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 $h(i)||[])}catch(c){throw Ke.error("Got an error searching for a role."),Ke.error(c),c}if(!o||o.length===0){let c=kl.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ke.error(c),Ai(new Error,c,Ri.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=kl.ALTER_USER_DUP_ROLES(t.role);throw Ke.error(c),Ai(new Error,c,Ri.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 BL.update(n)}catch(i){throw Ke.error("Error during update."),Ke.error(i),i}try{await Fl()}catch(i){throw Ke.error("Got an error setting users to global"),Ke.error(i),i}return kA.signalUserChange(new GA(process.pid)),s}a(xX,"alterUser");function kX(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(kX,"isClusterUser");async function FX(e){try{let t=HL.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 Ai(new Error,kl.USER_NOT_EXIST(e.username),Ri.NOT_FOUND,void 0,void 0,!0);let n;try{n=await BX(r)}catch(s){throw Ke.error("Got an error deleting a user."),Ke.error(s),s}Ke.debug(n);try{await Fl()}catch(s){throw Ke.error("Got an error setting users to global."),Ke.error(s),s}return kA.signalUserChange(new GA(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(FX,"dropUser");async function GX(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=HA.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await vX(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(GX,"userInfo");async function qX(){let e;try{e=await Vh()}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(qX,"listUsersExternal");async function Vh(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await $h(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]=HA.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 $h(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=HA.cloneDeep(o),o.role=r[o.role],$X(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(Vh,"listUsers");function $X(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(LX)){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($X,"appendSystemTablesToRole");async function Fl(){try{let e=await Vh();global.hdb_users=e}catch(e){throw Ke.error(e),e}}a(Fl,"setUsersToGlobal");async function GL(e,t,r=!0){global.hdb_users||await Fl();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Ai(new Error,BA.GENERIC_AUTH_FAIL,Ri.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Ai(new Error,BA.USER_INACTIVE,Ri.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(PL.get(t)===n.password)return s;if(xA.validate(n.password,t))PL.set(t,n.password);else throw Ai(new Error,BA.GENERIC_AUTH_FAIL,Ri.UNAUTHORIZED,void 0,void 0,!0)}return s}a(GL,"findAndValidateUser");async function VX(){global.hdb_users||await Fl();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(VX,"getSuperUser");async function KX(){let e=await Vh(),t=DX.getConfigFromFile(wL.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Hn.isEmpty(r)&&r?.role?.role===wL.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=FA.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+CL.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+CL.SERVER_SUFFIX.ADMIN,r}a(KX,"getClusterUser");var qL=[];qA.invalidateUser=function(e){for(let t of qL)try{t(e)}catch(r){UX.error("Error invalidating user",r)}};qA.onInvalidatedUser=function(e){qL.push(e)}});var E_=N((yRe,WL)=>{"use strict";var dc=j(),kn=M(),YX=gD(),ARe=Fs(),RRe=Zi(),WX=xn(),{validateEvent:VL}=qs(),f_=Un(),jX=require("process"),{resetDatabases:zX}=(Pe(),oe(lt)),QX={[kn.ITC_EVENT_TYPES.SCHEMA]:JX,[kn.ITC_EVENT_TYPES.USER]:YL};async function JX(e){let t=VL(e);if(t){dc.error(t);return}dc.trace("ITC schemaHandler received schema event:",e),await YX(e.message),await XX(e.message)}a(JX,"schemaHandler");async function XX(e){try{f_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),f_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),f_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=zX();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){dc.error(t)}}a(XX,"syncSchemaMetadata");var KL=[];async function YL(e){try{try{f_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),f_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){dc.warn(r)}let t=VL(e);if(t){dc.error(t);return}dc.trace(`ITC userHandler ${kn.HDB_ITC_CLIENT_PREFIX}${jX.pid} received user event:`,e),await WX.setUsersToGlobal();for(let r of KL)r()}catch(t){dc.error(t)}}a(YL,"userHandler");YL.addListener=function(e){KL.push(e)};WL.exports=QX});var qs=N((CRe,zL)=>{"use strict";var ORe=j(),$A=re(),ZX=M(),{ITC_ERRORS:h_}=Pn(),{parentPort:NRe,threadId:eZ,isMainThread:tZ,workerData:IRe}=require("worker_threads"),{onMessageFromWorkers:rZ,broadcast:wRe,broadcastWithAcknowledgement:nZ}=dt();zL.exports={sendItcEvent:sZ,validateEvent:jL,SchemaEventMsg:iZ,UserEventMsg:oZ};var Kh;rZ(async(e,t)=>{Kh=Kh||E_(),jL(e),Kh[e.type]&&await Kh[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function sZ(e){return!tZ&&e.message&&(e.message.originator=eZ),nZ(e)}a(sZ,"sendItcEvent");function jL(e){if(typeof e!="object")return h_.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||$A.isEmpty(e.type))return h_.MISSING_TYPE;if(!e.hasOwnProperty("message")||$A.isEmpty(e.message))return h_.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||$A.isEmpty(e.message.originator))return h_.MISSING_ORIGIN;if(ZX.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return h_.INVALID_EVENT(e.type)}a(jL,"validateEvent");function iZ(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(iZ,"SchemaEventMsg");function oZ(e){this.originator=e}a(oZ,"UserEventMsg")});var eo=N((LRe,ZL)=>{"use strict";var QL=M(),DRe=re(),Yh=j(),JL=mD(),Gl,{sendItcEvent:XL}=qs();function aZ(e){try{Yh.info("signalSchemaChange called with message:",e),Gl=Gl||E_();let t=new JL(QL.ITC_EVENT_TYPES.SCHEMA,e);return Gl.schema(t),XL(t)}catch(t){Yh.error(t)}}a(aZ,"signalSchemaChange");function cZ(e){try{Yh.trace("signalUserChange called with message:",e),Gl=Gl||E_();let t=new JL(QL.ITC_EVENT_TYPES.USER,e);return Gl.user(t),XL(t)}catch(t){Yh.error(t)}}a(cZ,"signalUserChange");ZL.exports={signalSchemaChange:aZ,signalUserChange:cZ}});var Wh=N((URe,tM)=>{"use strict";var eM=re(),lZ=M(),uZ=j(),dZ=Ih(),_Z=Nh(),fZ=eo(),{SchemaEventMsg:EZ}=qs(),hZ="already exists in";tM.exports=pZ;async function pZ(e,t,r){if(eM.isEmptyOrZeroLength(r))return r;let n=[];eM.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 mZ(e,t.schema,t.name,i)})),s}a(pZ,"lmdbCheckForNewAttributes");async function mZ(e,t,r,n){let s=new _Z(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await SZ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(hZ))uZ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(mZ,"createNewAttribute");async function SZ(e){let t;return t=await dZ(e),fZ.signalSchemaChange(new EZ(process.pid,lZ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(SZ,"createAttribute")});var ql=N((BRe,rM)=>{"use strict";var VA=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}};rM.exports=VA});var sM=N((xRe,nM)=>{"use strict";var TZ=ql(),gZ=M().OPERATIONS_ENUM,KA=class extends TZ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(gZ.INSERT,r,n,s,i),this.records=t}};nM.exports=KA});var oM=N((FRe,iM)=>{"use strict";var AZ=ql(),RZ=M().OPERATIONS_ENUM,YA=class extends AZ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(RZ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};iM.exports=YA});var cM=N((qRe,aM)=>{"use strict";var yZ=ql(),bZ=M().OPERATIONS_ENUM,WA=class extends yZ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(bZ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};aM.exports=WA});var uM=N((VRe,lM)=>{"use strict";var OZ=ql(),NZ=M().OPERATIONS_ENUM,jA=class extends OZ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(NZ.DELETE,n,s,t,i),this.original_records=r}};lM.exports=jA});var p_=N((WRe,EM)=>{"use strict";var YRe=require("path"),dM=ht(),IZ=sM(),wZ=oM(),CZ=cM(),PZ=uM(),$l=Ht(),_M=re(),{CONFIG_PARAMS:DZ}=M(),fM=se();fM.initSync();var jh=M().OPERATIONS_ENUM,{getTransactionAuditStorePath:LZ}=Tt();EM.exports=MZ;async function MZ(e,t){if(fM.get(DZ.LOGGING_AUDITLOG)===!1)return;let r=LZ(e.schema,e.table),n=await dM.openEnvironment(r,e.table,!0),s=UZ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){dM.initializeDBIs(n,$l.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,$l.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[$l.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[$l.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),_M.isEmpty(s.user_name)||n.dbis[$l.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[$l.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(MZ,"writeTransaction");function UZ(e,t){let r=_M.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===jh.INSERT)return new IZ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===jh.UPDATE)return new wZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===jh.UPSERT)return new CZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===jh.DELETE)return new PZ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(UZ,"createTransactionObject")});var zA=N((QRe,hM)=>{"use strict";var vZ=c_(),zRe=Kd(),m_=M(),BZ=Yd(),HZ=ec().insertRecords,xZ=ht(),kZ=j(),FZ=Wh(),{getSchemaPath:GZ}=Tt(),qZ=p_();hM.exports=$Z;async function $Z(e){try{let{schema_table:t,attributes:r}=vZ(e);BZ(e,r,t.hash_attribute),e.schema!==m_.SYSTEM_SCHEMA_NAME&&(r.includes(m_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(m_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(m_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(m_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await FZ(e.hdb_auth_header,t,r),s=GZ(e.schema,e.table),i=await xZ.openEnvironment(s,e.table),o=await HZ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await qZ(e,o)}catch(c){kZ.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($Z,"lmdbCreateRecords")});var SM=N((XRe,mM)=>{"use strict";var pM=M(),VZ=zA(),KZ=Kd(),YZ=require("fs-extra"),{getSchemaPath:WZ}=Tt();mM.exports=jZ;async function jZ(e){let t=[{name:e.schema,createddate:Date.now()}],r=new KZ(pM.SYSTEM_SCHEMA_NAME,pM.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await VZ(r),await YZ.mkdirp(WZ(e.schema))}a(jZ,"lmdbCreateSchema")});var gM=N((eye,TM)=>{"use strict";var QA=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}};TM.exports=QA});var bM=N((iye,yM)=>{"use strict";var AM=ht(),JA=sn(),XA=Pn().LMDB_ERRORS_ENUM,zZ=Ht(),RM=j(),rye=re(),QZ=require("lmdb"),JZ=gM(),XZ=M(),{OVERFLOW_MARKER:nye,MAX_SEARCH_KEY_LENGTH:sye}=zZ,ZZ=XZ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function e5(e,t,r,n){if(JA.validateEnv(e),t===void 0)throw new Error(XA.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(XA.IDS_REQUIRED):new Error(XA.IDS_MUST_BE_ITERABLE);try{let s=AM.listDBIs(e);AM.initializeDBIs(e,t,s);let i=new JZ,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[ZZ]>n){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,QZ.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=JA.getIndexedValues(y);if(I)for(let U=0,H=I.length;U<H;U++)S.remove(I[U],o)}catch{RM.warn(`cannot delete from attribute: ${g}, ${y}:${o}`)}}});c.push(T),l.push(o),i.original_records.push(h)}catch(h){RM.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=JA.getNextMonotonicTime(),i}catch(s){throw s}}a(e5,"deleteRecords");yM.exports={deleteRecords:e5}});var S_=N((aye,NM)=>{"use strict";var Vl=re(),t5=bM(),r5=ht(),{getSchemaPath:n5}=Tt(),s5=p_(),i5=j();NM.exports=o5;async function o5(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Vl.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Vl.isEmptyOrZeroLength(e.hash_values)&&!Vl.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Vl.isEmpty(l)||e.hash_values.push(l)}}if(Vl.isEmptyOrZeroLength(e.hash_values))return OM([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Vl.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=n5(e.schema,e.table),i=await r5.openEnvironment(s,e.table),o=await t5.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await s5(e,o)}catch(c){i5.error(`unable to write transaction due to ${c.message}`)}return OM(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(o5,"lmdbDeleteRecords");function OM(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(OM,"createDeleteResponse")});var eR=N((uye,IM)=>{"use strict";var a5=M(),lye=sn();function ZA(e,t){let r=Object.create(null);if(t.length===1&&a5.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(ZA,"parseRow");function c5(e,t,r,n){let s=ZA(r,e);n.push(s)}a(c5,"searchAll");function l5(e,t,r,n){let s=ZA(r,e);n[t]=s}a(l5,"searchAllToMap");function u5(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(u5,"iterateDBI");function _c(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(_c,"pushResults");function d5(e,t,r,n,s,i){t.toString().endsWith(e)&&_c(t,r,n,s,i)}a(d5,"endsWith");function _5(e,t,r,n,s,i){t.toString().includes(e)&&_c(t,r,n,s,i)}a(_5,"contains");function f5(e,t,r,n,s,i){t>e&&_c(t,r,n,s,i)}a(f5,"greaterThanCompare");function E5(e,t,r,n,s,i){t>=e&&_c(t,r,n,s,i)}a(E5,"greaterThanEqualCompare");function h5(e,t,r,n,s,i){t<e&&_c(t,r,n,s,i)}a(h5,"lessThanCompare");function p5(e,t,r,n,s,i){t<=e&&_c(t,r,n,s,i)}a(p5,"lessThanEqualCompare");IM.exports={parseRow:ZA,searchAll:c5,searchAllToMap:l5,iterateDBI:u5,endsWith:d5,contains:_5,greaterThanCompare:f5,greaterThanEqualCompare:E5,lessThanCompare:h5,lessThanEqualCompare:p5,pushResults:_c}});var Kl=N((hye,UM)=>{"use strict";var Qo=ht(),_ye=j(),Fn=sn(),zh=Ht(),zt=Pn().LMDB_ERRORS_ENUM,fye=re(),m5=M(),Qh=eR(),{parseRow:S5}=Qh,Eye=require("lmdb"),{OVERFLOW_MARKER:wM,MAX_SEARCH_KEY_LENGTH:T5}=zh;function CM(e,t,r,n=!1,s=void 0,i=void 0){return fc(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(CM,"iterateFullIndex");function T_(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return fc(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(T_,"iterateRangeBetween");function fc(e,t,r,n){let s=e.database||e,i=Qo.openDBI(s,r);i[zh.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Qo.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(fc,"setupTransaction");function PM(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(wM)){if(!s)if(r)s=Qo.openDBI(e,r);else{let l=Qo.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Qo.openDBI(e,l[u]),!s[zh.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(PM,"getOverflowCheck");function g5(e,t,r,n=!1,s=void 0,i=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return fc(e,t,t,(o,c,l)=>(Jh(r),r=g_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>S5(u.value,r))))}a(g5,"searchAll");function A5(e,t,r,n=!1,s=void 0,i=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);Jh(r),r=g_(e.database||e,r);let o=new Map;for(let{key:c,value:l}of CM(e,t,t,n,s,i))o.set(c,Qh.parseRow(l,r));return o}a(A5,"searchAllToMap");function R5(e,t,r=!1,n=void 0,s=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=CM(e,void 0,t,r,n,s),c=o.transaction,l=PM(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(R5,"iterateDBI");function y5(e,t){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return Qo.statDBI(e,t).entryCount}a(y5,"countAll");function b5(e,t,r,n,s=!1,i=void 0,o=void 0){return Jo(e,r,n),fc(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(b5,"equals");function O5(e,t,r){return Jo(e,t,r),Qo.openDBI(e,t).getValuesCount(r)}a(O5,"count");function N5(e,t,r,n,s=!1,i=void 0,o=void 0){return Jo(e,r,n),fc(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(N5,"startsWith");function I5(e,t,r,n,s=!1,i=void 0,o=void 0){return DM(e,t,r,n,s,i,o,!0)}a(I5,"endsWith");function DM(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Jo(e,r,n),fc(e,null,r,(l,u,d,_)=>{let E=PM(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(wM)?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[zh.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(DM,"contains");function w5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),T_(e,t,r,n,l,s,i,o,!0,!1)}a(w5,"greaterThan");function C5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),T_(e,t,r,n,l,s,i,o,!1,!1)}a(C5,"greaterThanEqual");function P5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),T_(e,t,r,l,n,s,i,o,!1,!0)}a(P5,"lessThan");function D5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),T_(e,t,r,l,n,s,i,o,!1,!1)}a(D5,"lessThanEqual");function L5(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Fn.validateEnv(e),r===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(zt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(zt.END_VALUE_REQUIRED);if(n=Fn.convertKeyValueToWrite(n),s=Fn.convertKeyValueToWrite(s),n>s)throw new Error(zt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return T_(e,t,r,n,s,i,o,c)}a(L5,"between");function M5(e,t,r,n){Fn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(Jh(r),r=g_(s,r),n===void 0)throw new Error(zt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Qh.parseRow(c,r)),o}a(M5,"searchByHash");function U5(e,t,r){Fn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(zt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(U5,"checkHashExists");function v5(e,t,r,n,s=[]){return MM(e,t,r,n,s),LM(e,t,r,n,s).map(i=>i[1])}a(v5,"batchSearchByHash");function B5(e,t,r,n,s=[]){MM(e,t,r,n,s);let i=new Map;for(let[o,c]of LM(e,t,r,n,s))i.set(o,c);return i}a(B5,"batchSearchByHashToMap");function LM(e,t,r,n,s=[]){return fc(e,t,t,(i,o,c)=>{r=g_(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,Qh.parseRow(d,r)];s.push(u)}).filter(u=>u)})}a(LM,"batchHashSearch");function MM(e,t,r,n,s){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(Jh(r),n==null)throw new Error(zt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(zt.IDS_MUST_BE_ITERABLE)}a(MM,"initializeBatchSearchByHash");function Jh(e){if(!Array.isArray(e))throw e===void 0?new Error(zt.FETCH_ATTRIBUTES_REQUIRED):new Error(zt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Jh,"validateFetchAttributes");function Jo(e,t,r){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(zt.SEARCH_VALUE_REQUIRED);if(r?.length>T5)throw new Error(zt.SEARCH_VALUE_TOO_LARGE)}a(Jo,"validateComparisonFunctions");function g_(e,t){return t.length===1&&m5.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Qo.listDBIs(e)),t}a(g_,"setGetWholeRowAttributes");UM.exports={searchAll:g5,searchAllToMap:A5,count:O5,countAll:y5,equals:b5,startsWith:N5,endsWith:I5,contains:DM,searchByHash:M5,setGetWholeRowAttributes:g_,batchSearchByHash:v5,batchSearchByHashToMap:B5,checkHashExists:U5,iterateDBI:R5,greaterThan:w5,greaterThanEqual:C5,lessThan:P5,lessThanEqual:D5,between:L5}});var Yl=N((mye,kM)=>{var vM=require("lodash"),BM=gt(),xe=require("joi"),H5=re(),{hdb_schema_table:A_,checkValidTable:HM,hdb_table:xM,hdb_database:Xh}=Si(),{handleHDBError:x5,hdb_errors:k5}=_e(),{getDatabases:F5}=(Pe(),oe(lt)),{HTTP_STATUS_CODES:G5}=k5,q5=xe.object({database:Xh,schema:Xh,table:xM,search_attribute:A_,search_value:xe.any().required(),get_attributes:xe.array().min(1).items(xe.alternatives(A_,xe.object())).optional(),desc:xe.bool(),limit:xe.number().integer().min(1),offset:xe.number().integer().min(0)}),$5=xe.object({database:Xh,schema:Xh,table:xM,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(A_,xe.object())).optional(),sort:xe.object({attribute:xe.alternatives(A_,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(A_,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()});kM.exports=function(e,t){let r=null;switch(t){case"value":r=BM.validateBySchema(e,q5);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(HM("database",e.schema)),i(HM("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=BM.validateBySchema(e,$5);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=H5.checkGlobalSchemaTable(e.schema,e.table);if(s)return x5(new Error,s,G5.NOT_FOUND);let o=F5()[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=vM.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!vM.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 tR=N((Tye,FM)=>{"use strict";var V5=ht(),K5=Yl(),{getSchemaPath:Y5}=Tt();FM.exports=W5;function W5(e){let t=K5(e,"hashes");if(t)throw t;let r=Y5(e.schema,e.table);return V5.openEnvironment(r,e.table)}a(W5,"initialize")});var rR=N((Aye,GM)=>{"use strict";var j5=Kl(),z5=tR();GM.exports=Q5;async function Q5(e){let t=await z5(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return j5.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Q5,"lmdbGetDataByHash")});var Wl=N((yye,qM)=>{"use strict";var nR=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};qM.exports=nR});var VM=N((Nye,$M)=>{"use strict";var Oye=Wl(),J5=Kl(),X5=tR();$M.exports=Z5;async function Z5(e){let t=await X5(e),r=global.hdb_schema[e.schema][e.table];return J5.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Z5,"lmdbSearchByHash")});var $s=N((wye,KM)=>{"use strict";var sR=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}};KM.exports=sR});var Zh=N((Pye,JM)=>{"use strict";var Wr=Kl(),e6=ht(),t6=re(),ke=Ht(),Ec=M(),r6=Qi(),YM=Pn().LMDB_ERRORS_ENUM,{getSchemaPath:n6}=Tt(),to=Ec.SEARCH_WILDCARDS;async function s6(e,t,r){let n;e.schema===Ec.SYSTEM_SCHEMA_NAME?n=r6[e.table]:n=global.hdb_schema[e.schema][e.table];let s=QM(e,n.hash_attribute,r,t);return jM(e,s,n.hash_attribute,r)}a(s6,"prepSearch");async function jM(e,t,r,n){let s=n6(e.schema,e.table),i=await e6.openEnvironment(s,e.table),o=zM(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(i6(e,r)===!1){let d=e.search_attribute;if(d===r)return n?WM(o,()=>!0):o.map(E=>({[r]:E.key}));let _=a(E=>({[r]:E.value,[d]:E.key}),"toObject");return n?WM(o,_):o.map(_)}let u=e.search_attribute===r?o.map(d=>d.key):o.map(d=>d.value);return n===!0?Wr.batchSearchByHashToMap(c,r,e.get_attributes,u):Wr.batchSearchByHash(c,r,e.get_attributes,u)}a(jM,"executeSearch");function zM(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=Wr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.CONTAINS:s=Wr.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=Wr.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=Wr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Wr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Wr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.SEARCH_ALL:return Wr.searchAll(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Wr.searchAllToMap(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.BETWEEN:s=Wr.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=Wr.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=Wr.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=Wr.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=Wr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(zM,"searchByType");function WM(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(WM,"createMapFromIterable");function i6(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(i6,"checkToFetchMore");function QM(e,t,r,n){if(t6.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),to.indexOf(s)>-1)return r===!0?ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ke.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(to[0])<0&&s.indexOf(to[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(to.indexOf(i)>=0&&to.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ke.SEARCH_TYPES.CONTAINS;if(to.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ke.SEARCH_TYPES.ENDS_WITH;if(to.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ke.SEARCH_TYPES.STARTS_WITH;if(s.includes(to[0])||s.includes(to[1]))return ke.SEARCH_TYPES.EQUALS;throw new Error(YM.UNKNOWN_SEARCH_TYPE)}else switch(n){case Ec.VALUE_SEARCH_COMPARATORS.BETWEEN:return ke.SEARCH_TYPES.BETWEEN;case Ec.VALUE_SEARCH_COMPARATORS.GREATER:return ke.SEARCH_TYPES.GREATER_THAN;case Ec.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ke.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ec.VALUE_SEARCH_COMPARATORS.LESS:return ke.SEARCH_TYPES.LESS_THAN;case Ec.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ke.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(YM.UNKNOWN_SEARCH_TYPE)}}a(QM,"createSearchTypeFromSearchObject");JM.exports={executeSearch:jM,createSearchTypeFromSearchObject:QM,prepSearch:s6,searchByType:zM}});var ZM=N((Mye,XM)=>{"use strict";var Lye=$s(),o6=Yl(),a6=re(),c6=M(),l6=Zh();XM.exports=u6;function u6(e,t){if(!a6.isEmpty(t)&&c6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=o6(e,"value");if(n)throw n;return l6.prepSearch(e,t,!0)}a(u6,"lmdbGetDataByValue")});var R_=N((Bye,eU)=>{"use strict";var vye=$s(),d6=Yl(),_6=re(),f6=M(),E6=Zh();eU.exports=h6;async function h6(e,t){if(!_6.isEmpty(t)&&f6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=d6(e,"value");if(n)throw n;return E6.prepSearch(e,t,!1)}a(h6,"lmdbSearchByValue")});var rU=N((kye,tU)=>{"use strict";var xye=Ht(),iR=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}},oR=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},aR=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};tU.exports={SearchByConditionsObject:iR,SearchCondition:oR,SortAttribute:aR}});var aU=N(($ye,oU)=>{"use strict";var Gye=rU().SearchByConditionsObject,p6=$s(),m6=Yl(),cR=Kl(),ep=Ht(),{Resource:qye}=(Vs(),oe(lR)),iU=Zh(),S6=eR(),T6=require("lodash"),{getSchemaPath:g6}=Tt(),nU=ht(),{handleHDBError:A6,hdb_errors:R6}=_e(),{HTTP_STATUS_CODES:y6}=R6,b6=1e8;oU.exports=O6;async function O6(e){let t=m6(e,"conditions");if(t)throw A6(t,t.message,y6.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=g6(e.schema,e.table),n=await nU.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)nU.openDBI(n,u.search_attribute);let i=T6.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.search_type;d===ep.SEARCH_TYPES.EQUALS?u.estimated_count=cR.count(n,u.search_attribute,u.search_value):d===ep.SEARCH_TYPES.CONTAINS||d===ep.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=b6}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await sU(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(iU.filterByType),_=d.length,E=cR.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=>S6.parseRow(f,E))}else{for(let _=1;_<i.length;_++){let E=i[_],f=await sU(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=cR.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(O6,"lmdbSearchByConditions");async function sU(e,t,r,n){let s=new p6(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===ep.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,iU.searchByType(e,s,i,n).map(o=>o.value)}a(sU,"executeConditionSearch")});var y_=N((Kye,cU)=>{"use strict";var N6=M().OPERATIONS_ENUM,uR=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=N6.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};cU.exports=uR});var dR=N((Wye,pU)=>{"use strict";var _U=$s(),fU=y_(),EU=R_(),hU=S_(),dn=M(),lU=re(),uU=ht(),{getTransactionAuditStorePath:I6,getSchemaPath:w6}=Tt(),dU=j();pU.exports=C6;async function C6(e){try{if(lU.isEmpty(global.hdb_schema[e.schema])||lU.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await P6(e),await D6(e);let t=w6(e.schema,e.table);try{await uU.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=I6(e.schema,e.table);await uU.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(C6,"lmdbDropTable");async function P6(e){let t=new _U(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 EU(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 fU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await hU(s)}a(P6,"deleteAttributesFromSystem");async function D6(e){let t=new _U(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 EU(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 fU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await hU(s)}catch(i){throw i}}a(D6,"dropTableFromSystem")});var SU=N((zye,mU)=>{"use strict";var L6=require("fs-extra"),M6=$s(),U6=Wl(),v6=y_(),B6=dR(),H6=S_(),x6=rR(),k6=R_(),ro=M(),{getSchemaPath:F6}=Tt(),{handleHDBError:G6,hdb_errors:q6}=_e(),{HDB_ERROR_MSGS:$6,HTTP_STATUS_CODES:V6}=q6;mU.exports=K6;async function K6(e){let t;try{t=await Y6(e.schema);let r=new M6(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await k6(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await B6(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new v6(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await H6(s);let i=F6(t);await L6.remove(i)}catch(r){throw r}}a(K6,"lmdbDropSchema");async function Y6(e){let t=new U6(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await x6(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw G6(new Error,$6.SCHEMA_NOT_FOUND(e),V6.NOT_FOUND,void 0,void 0,!0);return n}a(Y6,"validateDropSchema")});var b_=N((Jye,TU)=>{"use strict";var _R=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};TU.exports=_R});var ER=N((ebe,gU)=>{"use strict";var W6=require("fs-extra"),tp=ht(),{getTransactionAuditStorePath:j6}=Tt(),fR=Ht(),Zye=b_();gU.exports=z6;async function z6(e){let t;try{let r=j6(e.schema,e.table);await W6.mkdirp(r),t=await tp.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{tp.createDBI(t,fR.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),tp.createDBI(t,fR.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),tp.createDBI(t,fR.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(z6,"createTransactionsAuditEnvironment")});var yU=N((nbe,RU)=>{"use strict";var hR=M(),AU=ht(),Q6=ec(),{getSystemSchemaPath:J6,getSchemaPath:X6}=Tt(),rbe=Qi(),Z6=Ih(),pR=Nh(),e8=j(),t8=ER();RU.exports=r8;async function r8(e,t){let r=X6(t.schema,t.table),n=new pR(t.schema,t.table,hR.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new pR(t.schema,t.table,hR.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new pR(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await AU.createEnvironment(r,t.table),e!==void 0){let o=await AU.openEnvironment(J6(),hR.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Q6.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 mR(n),await mR(s),await mR(i)}await t8(t)}catch(o){throw o}}a(r8,"lmdbCreateTable");async function mR(e){try{await Z6(e)}catch(t){e8.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(mR,"createAttribute")});var OU=N((ibe,bU)=>{"use strict";var n8=c_(),s8=Yd(),i8=Wh(),O_=M(),o8=ec().updateRecords,a8=ht(),{getSchemaPath:c8}=Tt(),l8=p_(),u8=j();bU.exports=d8;async function d8(e){try{let{schema_table:t,attributes:r}=n8(e);s8(e,r,t.hash_attribute),e.schema!==O_.SYSTEM_SCHEMA_NAME&&(r.includes(O_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(O_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(O_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(O_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await i8(e.hdb_auth_header,t,r),s=c8(e.schema,e.table),i=await a8.openEnvironment(s,e.table),o=await o8(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await l8(e,o)}catch(c){u8.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(d8,"lmdbUpdateRecords")});var IU=N((abe,NU)=>{"use strict";var _8=M().OPERATIONS_ENUM,SR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=_8.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};NU.exports=SR});var CU=N((ube,wU)=>{"use strict";var lbe=IU(),f8=c_(),E8=Yd(),h8=Wh(),N_=M(),p8=ec().upsertRecords,m8=ht(),{getSchemaPath:S8}=Tt(),T8=p_(),g8=j(),{handleHDBError:A8,hdb_errors:R8}=_e();wU.exports=y8;async function y8(e){let t;try{t=f8(e)}catch(l){throw A8(l,l.message,R8.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;E8(e,n,r.hash_attribute),e.schema!==N_.SYSTEM_SCHEMA_NAME&&(n.includes(N_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(N_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(N_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(N_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await h8(e.hdb_auth_header,r,n),i=S8(e.schema,e.table),o=await m8.openEnvironment(i,e.table),c=await p8(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await T8(e,c)}catch(l){g8.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(y8,"lmdbUpsertRecords")});var DU=N((_be,PU)=>{"use strict";var TR=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};PU.exports=TR});var MU=N((Ebe,LU)=>{"use strict";var gR=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}};LU.exports=gR});var BU=N((mbe,vU)=>{"use strict";var AR=ht(),{getTransactionAuditStorePath:b8}=Tt(),pbe=DU(),I_=Ht(),O8=re(),UU=MU(),N8=require("util").promisify,I8=N8(setTimeout),w8=1e4,C8=100;vU.exports=P8;async function P8(e){let t=b8(e.schema,e.table),r=await AR.openEnvironment(t,e.table,!0),n=AR.listDBIs(r);AR.initializeDBIs(r,I_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new UU;do s=await D8(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 I8(C8);while(s.transactions_deleted>0);return i}a(P8,"deleteAuditLogsBefore");async function D8(e,t){let r=new UU;try{let n=e.dbis[I_.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[I_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];O8.isEmpty(c)||(s=e.dbis[I_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[I_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>w8)break}return await s,r}catch(n){throw n}}a(D8,"deleteTransactions")});var xU=N((Tbe,HU)=>{"use strict";var RR=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};HU.exports=RR});var FU=N((Rbe,kU)=>{"use strict";var L8=$s(),M8=y_(),Abe=xU(),yi=M(),U8=re(),yR=ht(),v8=Qi(),B8=R_(),H8=S_(),{getSchemaPath:x8}=Tt();kU.exports=k8;async function k8(e,t=!0){let r;e.schema===yi.SYSTEM_SCHEMA_NAME?r=v8[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await G8(e),s=x8(e.schema,e.table),i=await yR.openEnvironment(s,e.table);return t===!0&&await F8(e,i,r.hash_attribute),yR.dropDBI(i,e.attribute),n}a(k8,"lmdbDropAttribute");async function F8(e,t,r){let n=yR.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(F8,"removeAttributeFromAllObjects");async function G8(e){let t=new L8(yi.SYSTEM_SCHEMA_NAME,yi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,yi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[yi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,yi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await B8(t)).filter(o=>o[yi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(U8.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[yi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new M8(yi.SYSTEM_SCHEMA_NAME,yi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return H8(i)}a(G8,"dropAttributeFromSystem")});var YU=N((Obe,KU)=>{"use strict";var bR=ht(),jl=Ht(),bbe=sn(),OR=M(),GU=re(),{getTransactionAuditStorePath:q8}=Tt(),$8=Kl(),rp=ql(),V8=j();KU.exports=K8;async function K8(e){let t=q8(e.schema,e.table),r=await bR.openEnvironment(t,e.table,!0),n=bR.listDBIs(r);bR.initializeDBIs(r,jl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case OR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return qU(r,e.search_values);case OR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,W8(r,e.search_values,s);case OR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Y8(r,e.search_values);default:return qU(r)}}a(K8,"readAuditLog");function qU(e,t=[0,Date.now()]){GU.isEmpty(t[0])&&(t[0]=0),GU.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[jl.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 rp,s))}a(qU,"searchTransactionsByTimestamp");function Y8(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[jl.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,VU(e,i))}return Object.fromEntries(r)}a(Y8,"searchTransactionsByUsername");function W8(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=$8.equals(e,jl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,jl.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=VU(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);$U(l,"records",r,d,o),$U(l,"original_records",r,d,o)}return Object.fromEntries(o)}a(W8,"searchTransactionsByHashValues");function $U(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 rp(e.operation,e.user_name,i,void 0);_[t]=[c],u.push(_)}}else{let u=new rp(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a($U,"loopRecords");function VU(e,t){let r=[];try{let n=e.dbis[jl.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 rp,i);r.push(o)}}catch(i){V8.warn(i)}return r}catch(n){throw n}}a(VU,"batchSearchTransactions")});var jU=N((Cbe,WU)=>{"use strict";var{getSchemaPath:Ibe}=Tt(),wbe=ht(),{database:j8}=(Pe(),oe(lt));WU.exports={writeTransaction:z8};async function z8(e,t,r){return j8({database:e,table:t}).transaction(r)}a(z8,"writeTransaction")});var XU=N((Dbe,JU)=>{"use strict";var{getSchemaPath:zU}=Tt(),QU=ht();JU.exports={flush:Q8,resetReadTxn:J8};async function Q8(e,t){return(await QU.openEnvironment(zU(e,t),t.toString())).flushed}a(Q8,"flush");async function J8(e,t){try{(await QU.openEnvironment(zU(e,t),t.toString())).resetReadTxn()}catch{}}a(J8,"resetReadTxn")});var rv=N((Mbe,tv)=>{"use strict";var{Readable:X8}=require("stream"),{getDatabases:Z8}=(Pe(),oe(lt)),{readSync:e9,openSync:t9,createReadStream:ZU}=require("fs"),{open:r9}=require("lmdb"),ev=t_(),n9=r_(),{AUDIT_STORE_OPTIONS:s9}=(ji(),oe(nv)),{INTERNAL_DBIS_NAME:i9,AUDIT_STORE_NAME:o9}=Ht();tv.exports=c9;var NR=32768,a9=100;async function c9(e){let t=e.database||e.schema||"data",r=Z8()[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,_=r9({noSync:!0,maxDbs:n9.MAX_DBS}),E,f=_.openDB(i9,new ev(!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:Y}of U.getRange({start:null,transaction:h,versions:U.useVersions}))E=I.put(H,Y,X),T++%a9===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 ev(!U,U);await m(S,H)}e.include_audit&&await m(o9,{...s9}),await E;let g=ZU(_.path);return g.headers=l(),g.on("close",()=>{h.done(),_.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=t9(o.path);return o.transaction(()=>{let u=Buffer.alloc(NR);e9(c,u,0,NR),o.resetReadTxn();let d=o.useReadTransaction();d.renew();let _=ZU(null,{fd:c,start:NR}),E=new X8.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(c9,"getBackup")});var ov=N((vbe,iv)=>{"use strict";var l9=j(),{handleHDBError:u9}=_e(),d9=yP(),_9=Ih(),f9=zA(),E9=SM(),h9=S_(),p9=rR(),m9=VM(),S9=ZM(),T9=R_(),g9=aU(),A9=SU(),R9=yU(),y9=OU(),b9=CU(),O9=BU(),N9=dR(),I9=FU(),w9=YU(),C9=jU(),sv=XU(),P9=rv(),IR=class extends d9{static{a(this,"LMDBBridge")}async searchByConditions(t){return g9(t)}async getDataByHash(t){return await p9(t)}async searchByHash(t){return await m9(t)}async getDataByValue(t,r){return await S9(t,r)}async searchByValue(t){return await T9(t)}async createSchema(t){return await E9(t)}async dropSchema(t){return await A9(t)}async createTable(t,r){return await R9(t,r)}async dropTable(t){return await N9(t)}async createAttribute(t){return await _9(t)}async createRecords(t){return await f9(t)}async updateRecords(t){return await y9(t)}async upsertRecords(t){try{return await b9(t)}catch(r){throw u9(r,null,null,l9.ERR,r)}}async deleteRecords(t){return await h9(t)}async dropAttribute(t){return await I9(t)}async deleteAuditLogsBefore(t){return await O9(t)}async readAuditLog(t){return await w9(t)}writeTransaction(t,r,n){return C9.writeTransaction(t,r,n)}flush(t,r){return sv.flush(t,r)}resetReadTxn(t,r){return sv.resetReadTxn(t,r)}getBackup(t){return P9(t)}};iv.exports=IR});function Ev(e){CR=e}function U9(){M9=setInterval(function(){for(let e of wR)if(e.stale){let t=e[Fe]?.url;uv.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},L9).unref()}var PR,lv,uv,dv,_v,fv,av,wR,D9,w_,cv,CR,hc,np,L9,M9,sp=Ie(()=>{PR=L(sn()),lv=L(_e()),uv=L(j());Vs();dv=L(se()),_v=L(M()),fv=L(re()),av=100,wR=new Set,D9=(0,fv.convertToMS)(dv.get(_v.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3;a(Ev,"replicationConfirmation");hc=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),wR.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(wR.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(w_&&!this.overloadChecked&&performance.now()-cv>D9)throw new lv.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,PR.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)<av>>n?l():s=this.writes[0].store.transaction(()=>{for(let _ of this.writes)_.entry=_.store.getEntry(_.key),c(_);return!0})),s)return w_||(w_=s,cv=performance.now(),w_.then(()=>{w_=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];CR&&f&&i.push(CR(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)+av/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=[]}},np=class extends hc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,PR.getNextMonotonicTime)())}getReadTxn(){}},L9=3e4;a(U9,"startMonitoringTxns");U9()});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 hc;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 hv,pc=Ie(()=>{hv=L(fi());Vs();sp();a(Pt,"transaction");(0,hv._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 yv={};je(yv,{ResourceBridge:()=>MR});function UR({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 mv(e,t){let r=bi(e),n=UR(e,r);if(!r)throw new Ks.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&&op(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 bi(e){let t=e.database||e.schema||B9,r=ut()[t];if(!r)throw(0,Ks.handleHDBError)(new Error,v9.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Sv(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*Tv(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 gv,ip,Ks,Av,Ys,DR,LR,Rv,v9,B9,H9,x9,pv,MR,bv=Ie(()=>{"use strict";gv=L(ov()),ip=L(Yl()),Ks=L(_e());Pe();Av=L(c_()),Ys=L(M()),DR=L(eo()),LR=L(qs()),Rv=L(re());pc();ap();({HDB_ERROR_MSGS:v9}=Ks.hdb_errors),B9="data",H9=1e4,x9=10,MR=class extends gv.default{static{a(this,"ResourceBridge")}constructor(t){super(t),pv=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,ip.default)(t,"conditions");if(r)throw(0,Ks.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=bi(t);if(!n)throw new Ks.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:UR(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 Ks.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}]}Et({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await bi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=bi(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){bi(t).dropTable()}createSchema(t){return zl({database:t.schema,table:null}),DR.signalSchemaChange(new LR.SchemaEventMsg(process.pid,Ys.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await vR(t.schema),DR.signalSchemaChange(new LR.SchemaEventMsg(process.pid,Ys.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,pv.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,Av.default)(t),s,i=ut()[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=op(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=ut()[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 Sv(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=ut()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ks.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:Ys.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,Rv.async_set_timeout)(x9),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%H9===0&&await u();return l.length>0&&await u(),s?Sv(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,ip.default)(t,"hashes");if(r)throw r;return mv(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of mv(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Ys.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,ip.default)(t,"value");if(n)throw n;let s=bi(t);if(!s)throw new Ks.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===Ys.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:UR(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=bi(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){bi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return bi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=bi(t),n={};switch(t.search_type){case Ys.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 Ys.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of Tv(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return Tv(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(UR,"getSelect");a(mv,"getRecords");a(bi,"getTable");a(Sv,"createDeleteResponse");a(Tv,"groupRecordsInHistory")});var Un=N((Qbe,Ov)=>{"use strict";var{ResourceBridge:k9}=(bv(),oe(yv)),F9=se();F9.initSync();var cp;function G9(){return cp||(cp=new k9,cp)}a(G9,"getBridge");Ov.exports=G9()});var Cv=N((Xbe,wv)=>{"use strict";var Nv=require("lodash"),C_=require("mathjs"),q9=require("jsonata"),Iv=re();wv.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?Nv.uniqWith(e,Nv.isEqual):e,"distinct_array"),searchJSON:$9,mad:P_.bind(null,C_.mad),mean:P_.bind(null,C_.mean),mode:P_.bind(null,C_.mode),prod:P_.bind(null,C_.prod),median:P_.bind(null,C_.median)};function P_(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(P_,"aggregateFunction");function $9(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(Iv.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Iv.isEmpty(this.__ala__.res[r])){let n=q9(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a($9,"searchJSON")});var Dv=N((eOe,Pv)=>{"use strict";var nr=require("moment"),BR="YYYY-MM-DDTHH:mm:ss.SSSZZ";nr.suppressDeprecationWarnings=!0;Pv.exports={current_date:a(()=>nr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>nr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return nr(e).utc().format("YYYY");case"month":return nr(e).utc().format("MM");case"day":return nr(e).utc().format("DD");case"hour":return nr(e).utc().format("HH");case"minute":return nr(e).utc().format("mm");case"second":return nr(e).utc().format("ss");case"millisecond":return nr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>nr(e).utc().format(BR),"date"),date_format:a((e,t)=>nr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>nr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>nr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=nr(e).utc(),s=nr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>nr().utc().valueOf(),"now"),get_server_time:a(()=>nr().format(BR),"get_server_time"),offset_utc:a((e,t)=>nr(e).utc().utcOffset(t).format(BR),"offset_utc")}});var vv=N((rOe,Uv)=>{"use strict";var V9=require("@turf/area"),K9=require("@turf/length"),Y9=require("@turf/circle"),W9=require("@turf/difference"),j9=require("@turf/distance"),z9=require("@turf/boolean-contains"),Q9=require("@turf/boolean-equal"),J9=require("@turf/boolean-disjoint"),X9=require("@turf/helpers"),Lv=M(),$e=re(),no=j();Uv.exports={geoArea:Z9,geoLength:e7,geoCircle:t7,geoDifference:r7,geoDistance:Mv,geoNear:n7,geoContains:s7,geoEqual:i7,geoCrosses:o7,geoConvert:a7};function Z9(e){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return V9.default(e)}catch(t){return no.trace(t,e),NaN}}a(Z9,"geoArea");function e7(e,t){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return K9.default(e,{units:t||"kilometers"})}catch(r){return no.trace(r,e),NaN}}a(e7,"geoLength");function t7(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return Y9.default(e,t,{units:r||"kilometers"})}catch(n){return no.trace(n,e,t),NaN}}a(t7,"geoCircle");function r7(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 W9(e,t)}catch(r){return no.trace(r,e,t),NaN}}a(r7,"geoDifference");function Mv(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 j9.default(e,t,{units:r||"kilometers"})}catch(n){return no.trace(n,e,t),NaN}}a(Mv,"geoDistance");function n7(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 Mv(e,t,n)<=r}catch(s){return no.trace(s,e,t),!1}}a(n7,"geoNear");function s7(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 z9.default(e,t)}catch(r){return no.trace(r,e,t),!1}}a(s7,"geoContains");function i7(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 Q9.default(e,t)}catch(r){return no.trace(r,e,t),!1}}a(i7,"geoEqual");function o7(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!J9.default(e,t)}catch(r){return no.trace(r,e,t),!1}}a(o7,"geoCrosses");function a7(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(Lv.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Lv.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=$e.autoCastJSON(e)),X9[t](e,r)}a(a7,"geoConvert")});var lp=N((sOe,Bv)=>{var mc=Cv(),Gn=Dv(),Oi=vv();Bv.exports=e=>{e.aggr.mad=e.aggr.MAD=mc.mad,e.aggr.mean=e.aggr.MEAN=mc.mean,e.aggr.mode=e.aggr.MODE=mc.mode,e.aggr.prod=e.aggr.PROD=mc.prod,e.aggr.median=e.aggr.MEDIAN=mc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=mc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=mc.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=Oi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Oi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Oi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Oi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Oi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Oi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Oi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Oi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Oi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Oi.geoNear}});var Fv=N((iOe,kv)=>{"use strict";var D_=require("lodash"),_n=require("alasql");_n.options.cache=!1;var c7=lp(),Hv=require("clone"),up=require("recursive-iterator"),Ue=j(),et=re(),Ql=Un(),l7=M(),{hdb_errors:u7}=_e(),{getDatabases:xv}=(Pe(),oe(lt)),d7="IS NULL",Ws="There was a problem performing this search. Please check the logs and try again.";c7(_n);var HR=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(Ws)}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(Ws)}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(Ws)}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(Ws)}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(Ws)}}_getColumns(){let t=new up(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(Hv(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=D_.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=xv()[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 up(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 up(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(l7.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&&D_.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(Hv(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(d7)>-1&&this.tables.forEach(s=>{let i={columnid:xv()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=D_.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 Ql.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(Ws)}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 Ql.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(Ws)}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 Ql.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(Ws)}else try{c.search_attribute=s.attribute,c.search_value="*";let d=await Ql.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(Ws)}}}_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=D_.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 up(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=D_.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(Ws)}}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 Ql.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(u7.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 Ql.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(Ws)}}return Object.values(Object.values(this.data)[0].__merged_data)}};kv.exports=HR});var $r=N((aOe,Gv)=>{"use strict";var _7=AP();Gv.exports={searchByConditions:E7,searchByHash:h7,searchByValue:p7,search:m7};var xR=Un(),{transformReq:kR}=re(),f7=Fv();async function E7(e){return kR(e),xR.searchByConditions(e)}a(E7,"searchByConditions");async function h7(e){kR(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of xR.searchByHash(e))r&&t.push(r);return t}a(h7,"searchByHash");async function p7(e){kR(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of xR.searchByValue(e))t.push(r);return t}a(p7,"searchByValue");function m7(e,t){try{let r=new _7(e);r.validate(),new f7(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(m7,"search")});var dp=N((lOe,qv)=>{"use strict";var S7=Un();qv.exports={writeTransaction:T7};function T7(e,t,r){return S7.writeTransaction(e,t,r)}a(T7,"writeTransaction")});var Yv=N((_Oe,Kv)=>{"use strict";var g7=$r(),A7=Fs(),$v=j(),R7=cn(),dOe=dp(),y7=require("clone"),GR=require("alasql"),b7=lp(),Vv=require("util"),O7=Vv.promisify(A7.getTableSchema),N7=Vv.promisify(g7.search),I7=M(),FR=re();b7(GR);Kv.exports={update:C7};var w7="There was a problem performing this update. Please check the logs and try again.";async function C7({statement:e,hdb_user:t}){let r=await O7(e.table.databaseid,e.table.tableid),n=P7(e.columns);FR.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=y7(s),c=FR.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=GR.parse(l).statements[0],d=await N7(u),_=D7(n,d);return L7(o,_,t)}a(C7,"update");function P7(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=GR.compile(`SELECT ${r.expression.toString()} AS [${I7.FUNC_VAL}] FROM ?`)}),t}catch(t){throw $v.error(t),new Error(w7)}}a(P7,"createUpdateRecord");function D7(e,t){return FR.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(D7,"buildUpdateRecords");async function L7(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await R7.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){$v.error(`Error delete new_attributes from update response: ${i}`)}return s}a(L7,"updateRecords")});var jv=N((pOe,Wv)=>{var M7=require("alasql"),U7=$r(),v7=j(),B7=Un(),$R=require("util"),qR=re(),H7=M(),x7=Fs(),EOe=dp(),hOe=cn(),k7="record",F7="successfully deleted",G7=$R.callbackify(K7),q7=$R.promisify(U7.search),$7=$R.promisify(x7.getTableSchema);Wv.exports={convertDelete:G7};function V7(e){return`${e.deleted_hashes.length} ${k7}${e.deleted_hashes.length===1?"":"s"} ${F7}`}a(V7,"generateReturnMessage");async function K7({statement:e,hdb_user:t}){let r=await $7(e.table.databaseid,e.table.tableid);qR.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=qR.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=M7.parse(o).statements[0],l={operation:H7.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await q7(c);let u=await B7.deleteRecords(l);return qR.isEmptyOrZeroLength(u.message)&&(u.message=V7(u)),delete u.txn_time,u}catch(u){throw v7.error(u),u.hdb_code?u.message:u}}a(K7,"convertDelete")});var Zv=N((SOe,Xv)=>{"use strict";var Y7=Zi(),{hdb_errors:zv}=_e(),{getDatabases:Qv}=(Pe(),oe(lt));Xv.exports={checkSchemaExists:Jv,checkSchemaTableExists:W7,schema_describe:Y7};async function Jv(e){if(!Qv()[e])return zv.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Jv,"checkSchemaExists");async function W7(e,t){let r=await Jv(e);if(r)return r;if(!Qv()[e][t])return zv.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(W7,"checkSchemaTableExists")});var Jl=N((gOe,j7)=>{j7.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 B_={};je(B_,{addAnalyticsListener:()=>v_,recordAction:()=>pr,recordActionBinary:()=>qn,setAnalyticsEnabled:()=>z7});function z7(e){c0=e}function pr(e,t,r,n,s){if(!c0)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=Ep.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},Ep.set(i,o)}_p||Q7()}function qn(e,t,r,n,s){pr(!!e,t,r,n,s)}function v_(e){d0.push(e)}function Q7(){_p=performance.now(),setTimeout(async()=>{let e=performance.now()-_p;_p=0;let t=[],r={time:Date.now(),period:e,threadId:Sc.threadId,metrics:t};for(let[s,i]of Ep){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 _0){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 f0()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Sc.threadId,byThread:!0,...n});for(let s of d0)s(t);Ep=new Map,Sc.parentPort?Sc.parentPort.postMessage({type:u0,report:r}):p0({report:r})},l0).unref()}async function J7(e,t=6e4){let r=YR(),n=E0(),s=new Promise(T=>{let m=performance.now();setImmediate(()=>{let g=performance.now();g-m>5e3&&(0,L_.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,L_.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:Y,total:V,distribution:ne,threads:Q,...de}=y;Y||(Y=1);let W=X+(I?"-"+I:"");U!==void 0&&(W+="-"+U),H!==void 0&&(W+="-"+H);let ae=c.get(W);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*Y)/(Oe+Y))}ae.count+=Y,V>=0&&(ae.total+=V,ae.ratio=ae.total/ae.count)}else ae={period:t,...y},delete ae.distribution,c.set(W,ae),ae.byThread&&(ae.threads=[],ae.threads[S]={...de},u.push(ae));if(ne){ne=ne.map(Ne=>typeof Ne=="number"?{value:Ne,count:1}:Ne);let Oe=l.get(W);Oe?Oe.push(...ne):l.set(W,ne)}}await f0()}for(let T of u){let{path:m,method:g,type:S,metric:y,count:I,total:U,distribution:H,threads:X,...Y}=T;X=X.filter(V=>V);for(let V in Y){if(typeof T[V]!="number")continue;let ne=0;for(let Q of X){let de=Q[V];typeof de=="number"&&(ne+=de)}T[V]=ne}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 _0){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,Y,V,ne,Q,de,W,ae,Oe]=y;Object.assign(g,{p1:X,p10:Y,p25:V,median:ne,p75:Q,p90:de,p95:W,p99:ae,p999:Oe})}let _;for(let[T,m]of c)m.id=(0,fp.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,fp.getNextMonotonicTime)(),m={id:T,metric:"main-thread-utilization",idle:f-e0,active:h-t0,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(T,m,{append:!0}).then(g=>{g||n.primaryStore.put(T,m)})}e0=f,t0=h}async function r0(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function YR(){return n0||(n0=Et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function E0(){return s0||(s0=Et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function eee(){h0=!0;let e=(0,U_.get)(KR.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await J7(l0,e),await r0(YR(),X7),await r0(E0(),Z7)},Math.min(e/2,2147483647)).unref()}function p0(e,t){let r=e.report;r.threadId=t?.threadId||Sc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(i0+=n.mean*n.count);r.totalBytesProcessed=i0,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(o0.get(t))}),o0.set(t,t.performance.eventLoopUtilization())),r.id=(0,fp.getNextMonotonicTime)(),YR().primaryStore.put(r.id,r),h0||eee(),tee&&(m0=nee(r))}async function nee(e){if(await m0,!Xo){let r=(0,M_.dirname)((0,L_.getLogFilePath)());try{Xo=await(0,VR.open)((0,M_.join)(r,"analytics.log"),"r+")}catch{Xo=await(0,VR.open)((0,M_.join)(r,"analytics.log"),"w+")}}let t=(await Xo.stat()).size;if(t>ree){let r=Buffer.alloc(t);await Xo.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Xo.write(r,{position:0}),await Xo.truncate(r.length),t=r.length}await Xo.write(JSON.stringify(e)+`
|
|
12
12
|
`,t)}var Sc,a0,L_,M_,VR,fp,U_,KR,Ep,c0,_p,l0,u0,d0,_0,e0,t0,f0,X7,Z7,n0,s0,h0,i0,o0,tee,m0,Xo,ree,Ni=Ie(()=>{Sc=require("worker_threads"),a0=L(dt());Pe();L_=L(j()),M_=require("path"),VR=require("fs/promises"),fp=L(sn()),U_=L(se()),KR=L(M());qr();(0,U_.initSync)();Ep=new Map,c0=(0,U_.get)(KR.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(z7,"setAnalyticsEnabled");a(pr,"recordAction");it.recordAnalytics=pr;a(qn,"recordActionBinary");_p=0,l0=1e3,u0="analytics-report",d0=[];a(v_,"addAnalyticsListener");_0=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(Q7,"sendAnalytics");a(J7,"aggregation");e0=0,t0=0,f0=a(()=>new Promise(setImmediate),"rest");a(r0,"cleanup");X7=36e5,Z7=31536e6;a(YR,"getRawAnalyticsTable");a(E0,"getAnalyticsTable");(0,a0.setChildListenerByType)(u0,p0);a(eee,"startScheduledTasks");i0=0,o0=new Map,tee=!1;a(p0,"recordAnalytics");ree=1e6;a(nee,"logAnalytics")});var JR=N((MOe,C0)=>{"use strict";var{decode:see}=require("msgpackr"),{isMainThread:POe,parentPort:DOe,threadId:LOe}=require("worker_threads"),mp=mr(),Xl=It(),zR=M(),jr=j(),jR=se(),iee=M(),{onMessageByType:oee}=dt(),A0=Xi(),{recordAction:S0,recordActionBinary:aee}=(Ni(),oe(B_)),{publishToStream:cee}=mp,{ConsumerEvents:T0}=require("nats"),lee=$r(),{promisify:uee}=require("util"),R0=uee(setTimeout),Sp=1e4,Tp,pp,dee,_ee,y0,H_=new Map,Zl=new Map;C0.exports={initialize:b0,ingestConsumer:QR,setSubscription:fee,setIgnoreOrigin:pee,getDatabaseSubscriptions:hee,updateConsumer:O0};async function b0(){oee(zR.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await O0(n)}),y0=!0,jr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await mp.getNATSReferences();Tp=e,pp=e.info.server_name,dee=t,_ee=r}a(b0,"initialize");async function O0(e){if(e.status==="start"){let{js:t,jsm:r}=await N0(e.node_domain_name);QR(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=H_.get(e.stream_name+e.node_domain_name);t&&(jr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),H_.set(e.stream_name+e.node_domain_name,"close")),Zl.get(e.node_domain_name)==="failed"&&Zl.set(e.node_domain_name,"close")}}a(O0,"updateConsumer");var gp=new Map;function fee(e,t,r){let n=gp.get(e);n||gp.set(e,n=new Map),n.set(t,r),y0||b0().then(Eee)}a(fee,"setSubscription");async function Eee(){let e=await lee.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Xl.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await N0(r),!n))break;let{schema:o,table:c}=i,l=A0.createNatsTableStreamName(o,c);QR(l,n,s,r)}}}a(Eee,"accessConsumers");async function N0(e){let t,r,n=1;for(;!r;)try{t=await Tp.jetstream({domain:e}),r=await Tp.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Zl.get(e)==="close")break;Zl.set(e,"failed"),n%10===1&&jr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<Sp?n++*100:Sp;await R0(i)}return{js:t,jsm:r}}a(N0,"connectToRemoteJS");function hee(){return gp}a(hee,"getDatabaseSubscriptions");var I0;function pee(e){I0=e}a(pee,"setIgnoreOrigin");var w0=100,g0=new Array(w0),hp=0;async function QR(e,t,r,n){let{connection:s}=await mp.getNATSReferences();Tp=s,pp=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,pp),jr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Zl.get(n)==="close")break;o%10===1&&jr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(jr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await mp.createConsumer(r,e,pp,new Date(Date.now()).toISOString()));let d=o++*100<Sp?o++*100:Sp;await R0(d)}let c=!1,l;for(;!c;){if(H_.get(e+n)==="close"||Zl.get(n)==="close"){H_.delete(e+n),c=!0;continue}l=await i.consume({max_messages:jR.get(zR.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),H_.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===T0.ConsumerDeleted&&(await l.close(),c=!0),d.type===T0.HeartbeatsMissed){let _=d.data;jr.trace(`${_} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),_===100&&(jr.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 g0[hp],g0[hp]=mee(d).catch(_=>{jr.error(_)}),++hp>=w0&&(hp=0)}catch(d){d.message==="consumer deleted"?(jr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):jr.error("Error consuming clustering ingest, restarting consumer",d)}}}a(QR,"ingestConsumer");async function mee(e){let t=see(e.data);S0(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),jr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=jR.get(zR.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Xl.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Xl.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Xl.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!I0),aee(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Xl.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:d,hash_values:_,__origin:E,expiresAt:f}=t;jr.trace("processing message:",o,c,u,(d?"records: "+d.map(U=>U?.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),jr.trace(`messageProcessor nats msg id: ${e.headers.get(Xl.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=gp.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:WR(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:WR(o),value:H,expiresAt:f,id:_?.[X],table:u}));for(;l;)U.push({type:WR(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})}jR.get(iee.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&cee(e.subject.split(".").slice(0,-1).join("."),A0.createNatsTableStreamName(c,u),e.headers,e.data),await T;let I=Date.now()-m;m&&S0(I,"replication-latency",e.subject,o,"ingest")}catch(o){jr.error(o)}e.ack()}a(mee,"messageProcessor");function WR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(WR,"convertOperation")});var mr=N((FOe,Y0)=>{"use strict";var Or=se();Or.initSync();var See=require("fs-extra"),Tee=require("semver"),F_=require("path"),{monotonicFactory:gee}=require("ulidx"),D0=gee(),Aee=require("util"),L0=require("child_process"),Ree=Aee.promisify(L0.exec),yee=L0.spawn,Pr=It(),Qe=M(),Ap=re(),js=j(),Rp=Xi(),bee=dp(),x_=Ct(),{broadcast:Oee,onMessageByType:Nee,getWorkerIndex:Iee}=dt(),{isMainThread:M0}=require("worker_threads"),{Encoder:wee,decode:ty}=require("msgpackr"),U0=new wee,{isEmpty:Rc}=Ap,v0=xn(),vOe=48*36e11;M0&&Nee(Qe.ITC_EVENT_TYPES.RESTART,()=>{zr=void 0,Ac=void 0});var{connect:Cee,StorageType:Pee,RetentionPolicy:Dee,AckPolicy:ry,DeliverPolicy:ny,DiscardPolicy:Lee,NatsConnection:BOe,JetStreamManager:HOe,JetStreamClient:xOe,StringCodec:kOe,JSONCodec:Mee,createInbox:sy,headers:Uee,ErrorCode:P0}=require("nats"),{PACKAGE_ROOT:vee}=M(),Bee=Jl(),{recordAction:Hee}=(Ni(),oe(B_)),B0=Mee(),xee="clustering",kee=Bee.engines[Pr.NATS_SERVER_NAME],Fee=F_.join(vee,"dependencies"),ey=F_.join(Fee,`${process.platform}-${process.arch}`,Pr.NATS_BINARY_NAME),XR,ZR,k_,Tc,gc;Y0.exports={runCommand:H0,checkNATSServerInstalled:Gee,createConnection:iy,getConnection:G_,getJetStreamManager:q_,getJetStream:k0,getNATSReferences:Ii,getServerList:$ee,createLocalStream:oy,listStreams:F0,deleteLocalStream:Vee,getServerConfig:eu,listRemoteStreams:Kee,viewStream:Yee,viewStreamIterator:Wee,publishToStream:jee,request:Jee,reloadNATS:ay,reloadNATSHub:Xee,reloadNATSLeaf:Zee,extractServerName:Qee,requestErrorHandler:ete,createLocalTableStream:V0,createTableStreams:nte,purgeTableStream:K0,purgeSchemaTableStreams:ste,getStreamInfo:ite,updateLocalStreams:ate,closeConnection:qee,getJsmServerName:yp,addNatsMsgHeader:G0,clearClientCache:x0,updateRemoteConsumer:tte,createConsumer:q0,updateConsumerIterator:rte};async function H0(e,t=void 0){let{stdout:r,stderr:n}=await Ree(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
13
13
|
`,""));return r.replace(`
|
|
14
14
|
`,"")}a(H0,"runCommand");async function Gee(){try{await See.access(ey)}catch{return!1}let e=await H0(`${ey} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Tee.eq(t,kee)}a(Gee,"checkNATSServerInstalled");async function iy(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await v0.getClusterUser();if(Rc(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}js.trace("create nats connection called");let i=await Cee({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(),js.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&js.error("Error with Nats client connection, connection closed",o),i===zr&&x0()}),i}a(iy,"createConnection");function x0(){zr=void 0,Tc=void 0,gc=void 0,Ac=void 0}a(x0,"clearClientCache");async function qee(){zr&&(await zr.drain(),zr=void 0,Tc=void 0,gc=void 0,Ac=void 0)}a(qee,"closeConnection");var zr,Ac;async function G_(){return Ac||(Ac=iy(Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),zr=await Ac),zr||Ac}a(G_,"getConnection");async function q_(){if(Tc)return Tc;Rc(zr)&&await G_();let{domain:e}=eu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Rc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Tc=await zr.jetstreamManager({domain:e,timeout:6e4}),Tc}a(q_,"getJetStreamManager");async function k0(){if(gc)return gc;Rc(zr)&&await G_();let{domain:e}=eu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Rc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return gc=zr.jetstream({domain:e,timeout:6e4}),gc}a(k0,"getJetStream");async function Ii(){let e=zr||await G_(),t=Tc||await q_(),r=gc||await k0();return{connection:e,jsm:t,js:r}}a(Ii,"getNATSReferences");async function $ee(e){let t=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await v0.getClusterUser(),s=await iy(t,r,n),i=sy(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of o){let _=B0.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 Ap.async_set_timeout(e),await o.drain(),await s.close(),await u,c}a($ee,"getServerList");async function oy(e,t){let{jsm:r}=await Ii(),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:Pee.File,retention:Dee.Limits,subjects:t,discard:Lee.Old,max_msgs:s,max_bytes:i,max_age:n})}a(oy,"createLocalStream");async function F0(){let{jsm:e}=await Ii(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(F0,"listStreams");async function Vee(e){let{jsm:t}=await Ii();await t.streams.delete(e)}a(Vee,"deleteLocalStream");async function Kee(e){let{connection:t}=await Ii(),r=[],n=sy(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(B0.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(Kee,"listRemoteStreams");async function Yee(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Ii(),i=D0(),o={durable_name:i,ack_policy:ry.Explicit};t&&(o.deliver_policy=ny.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 _=ty(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(Yee,"viewStream");async function*Wee(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Ii(),i=D0(),o={durable_name:i,ack_policy:ry.Explicit};t&&(o.deliver_policy=ny.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=ty(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(Wee,"viewStreamIterator");async function jee(e,t,r,n){js.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=G0(n,r);let{js:s}=await Ii(),i=await yp(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:U0.encode(n);try{js.trace(`publishToStream publishing to subject: ${o}`),Hee(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 $0(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){js.trace(`publishToStream creating stream: ${t}`);let d=o.split(".");d[2]="*",await oy(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(jee,"publishToStream");function G0(e,t){t===void 0&&(t=Uee());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(G0,"addNatsMsgHeader");function eu(e){e=e.toLowerCase();let t=F_.join(Or.get(Qe.CONFIG_PARAMS.ROOTPATH),xee);if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Rc(ZR)&&(ZR={port:x_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:x_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Pr.SERVER_SUFFIX.HUB,config_file:Pr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:F_.join(t,Pr.PID_FILES.HUB),hdb_nats_path:t}),ZR;if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Rc(XR)&&(XR={port:x_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:x_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Pr.SERVER_SUFFIX.LEAF,config_file:Pr.NATS_CONFIG_FILES.LEAF_SERVER,domain:x_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Pr.SERVER_SUFFIX.LEAF,pid_file_path:F_.join(t,Pr.PID_FILES.LEAF),hdb_nats_path:t}),XR;js.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(eu,"getServerConfig");async function q0(e,t,r,n){try{await e.consumers.add(t,{ack_policy:ry.Explicit,durable_name:r,deliver_policy:ny.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(q0,"createConsumer");async function zee(e,t,r){await e.consumers.delete(t,r)}a(zee,"removeConsumer");function Qee(e){return e.split(".")[1]}a(Qee,"extractServerName");async function Jee(e,t,r=6e4,n=sy()){if(!Ap.isObject(t))throw new Error("data param must be an object");let s=U0.encode(t),{connection:i}=await Ii(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return ty(c.data)}a(Jee,"request");function ay(e){return new Promise(async(t,r)=>{let n=yee(ey,["--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(ay,"reloadNATS");async function Xee(){let{pid_file_path:e}=eu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await ay(e)}a(Xee,"reloadNATSHub");async function Zee(){let{pid_file_path:e}=eu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await ay(e)}a(Zee,"reloadNATSLeaf");function ete(e,t,r){let n;switch(e.code){case P0.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case P0.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(ete,"requestErrorHandler");async function tte(e,t){let r=t+Pr.SERVER_SUFFIX.LEAF,{connection:n}=await Ii(),{jsm:s}=await lte(r),{schema:i,table:o}=e,c=Rp.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await $0(async()=>{if(e.subscribe===!0)await q0(s,c,n.info.server_name,l);else try{await zee(s,c,n.info.server_name)}catch(u){js.trace(u)}})}a(tte,"updateRemoteConsumer");async function rte(e,t,r,n){let s=Rp.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(!M0&&Iee()<Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=JR();await c(o)}await Oee(o),n==="stop"&&await Ap.async_set_timeout(1e3)}a(rte,"updateConsumerIterator");function $0(e){return bee.writeTransaction(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a($0,"exclusiveLock");async function V0(e,t){let r=Rp.createNatsTableStreamName(e,t),n=await yp(),s=ote(e,t,n);await oy(r,[s])}a(V0,"createLocalTableStream");async function nte(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await V0(n,s)}}a(nte,"createTableStreams");async function K0(e,t,r=void 0){if(Or.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=Rp.createNatsTableStreamName(e,t),{domain:s}=eu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await G_()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")js.warn(n);else throw n}}a(K0,"purgeTableStream");async function ste(e,t){if(Or.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await K0(e,t[r])}a(ste,"purgeSchemaTableStreams");async function ite(e){return(await q_()).streams.info(e)}a(ite,"getStreamInfo");function ote(e,t,r){return`${Pr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(ote,"createSubjectName");async function yp(){if(k_)return k_;if(k_=(await q_())?.nc?.info?.server_name,k_===void 0)throw new Error("Unable to get jetstream manager server name");return k_}a(yp,"getJsmServerName");async function ate(){let e=await q_(),t=await yp(),r=await F0();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=cte(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(".");js.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}a(ate,"updateLocalStreams");function cte(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(cte,"updateStreamLimits");async function lte(e){let t,r;try{t=await zr.jetstream({domain:e}),r=await zr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw js.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(lte,"connectToRemoteJS")});var yc=N(Op=>{var bp=j();for(let e of["trace","debug","info","warn","error","fatal","notify"])bp.logsAtLevel(e)&&(Op[e]=bp[e]);Op.loggerWithTag=e=>bp.loggerWithTag(e,!0);Op.setLogLevel=bp.setLogLevel});function cy(e){let t=e.get(Np),r=t?(0,tu.unpack)(t):null;r||(r={remoteNameToId:{}});let n=ot(),s=!1;r.nodeName=ot();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:V_(e)??1,nodes:[]})})}i[n]=0,e.putSync(Np,(0,tu.pack)(r))}return r}function $_(e){return cy(e).remoteNameToId}function j0(e,t,r){let n=cy(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(Np,(0,tu.pack)(n)),i}function Ip(e,t){let r=cy(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(Np,(0,tu.pack)(r))}return W0.info?.("The remote node name map",e,n,s),s}var W0,tu,Np,ly=Ie(()=>{W0=L(yc());us();tu=require("msgpackr"),Np=Symbol.for("remote-ids");a(cy,"getIdMappingRecord");a($_,"exportIdMapping");a(j0,"remoteToLocalNodeId");a(Ip,"getIdOfRemoteNode")});var Zo,uy=Ie(()=>{Zo=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 J0={};je(J0,{Resources:()=>wp,keyArrayToString:()=>ru,resetResources:()=>ute,resources:()=>wi});function ute(){return wi=new wp}function ru(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var z0,Q0,wp,wi,nu=Ie(()=>{pc();uy();z0=L(j()),Q0=L(_e()),wp=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 Q0.ServerError(`Conflicting paths for ${t}`);z0.default.error(c),i.Resource=new Zo(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(ute,"resetResources");a(ru,"keyArrayToString")});function fy(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=Z0,dte(e.primaryStore,e.auditStore)):(c=X0,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{eB(X0[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=ru(t);let d=new _y(r);d.startTime=n;let _=u.get(t);return _?_.push(d):(u.set(t,_=[d]),_.tables=u,_.key=t),d.subscriptions=_,d}function eB(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),tB(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=ru(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,dy.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,dy.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 dte(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=Z0[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{eB(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function tB(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function rB(e){return e.nextTransaction||(fy({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),tB(e)),e.nextTransaction}var dy,X0,Z0,_y,Ey=Ie(()=>{dy=L(j());Cl();nu();ji();X0=Object.create(null),Z0=Object.create(null);a(fy,"addSubscription");_y=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(eB,"notifyFromTransactionData");a(dte,"listenToCommits");a(tB,"nextTransaction");a(rB,"whenNextTransaction")});var cB={};je(cB,{commits_awaiting_replication:()=>ou,getHDBNodeTable:()=>Sr,iterateRoutes:()=>Y_,shouldReplicateToNode:()=>K_,subscribeToNodeUpdates:()=>au});function Sr(){return nB||(nB=Et({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 au(e){Sr().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;aB.debug?.("adding node",n,"on node",ot()," on process",process.pid),server.nodes=server.nodes.filter(s=>s.name!==n),r.type==="put"&&n!==ot()&&(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 K_(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&Sr().primaryStore.get(ot())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function _te(){au(e=>{ea({},(t,r)=>{let n=e.name,s=sB.get(n);if(s||sB.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 ou.get(r)||[])u>l&&u<=c&&d();o.lastTime=c},"callback")}));o.lastTime=0,s.set(r,o)}})})}function*Y_(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=su.default.get(iu.CONFIG_PARAMS.REPLICATION_SECUREPORT)??(!su.default.get(iu.CONFIG_PARAMS.REPLICATION_PORT)&&su.default.get(iu.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||su.default.get(iu.CONFIG_PARAMS.REPLICATION_PORT)||su.default.get(iu.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){iB.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 iB,oB,su,iu,aB,nB,sB,ou,cu=Ie(()=>{Pe();us();sp();iB=require("worker_threads"),oB=L(_e()),su=L(se()),iu=L(M()),aB=L(yc());server.nodes=[];a(Sr,"getHDBNodeTable");a(au,"subscribeToNodeUpdates");a(K_,"shouldReplicateToNode");sB=new Map;Ev((e,t,r)=>{if(r>server.nodes.length)throw new oB.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);ou||(ou=new Map,_te());let n=ou.get(e);return n||(n=[],ou.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(_te,"startSubscriptionToReplications");a(Y_,"iterateRoutes")});var fB={};je(fB,{connectedToNode:()=>bc,disconnectedFromNode:()=>du,ensureNode:()=>io,requestClusterStatus:()=>_B,startOnMainThread:()=>py});async function py(e){let t=0,r=ut();for(let i of Object.getOwnPropertyNames(r)){let o=r[i];for(let c in o){let l=o[c];if(l.auditStore){Cp.set(i,V_(l.auditStore));break}}}Ci.whenThreadsStarted.then(async()=>{let i=[];for await(let o of r.system.hdb_nodes.search([]))i.push(o);for(let o of Y_(e))try{let c=!o.subscriptions;if(c){let u=ot();Sr().primaryStore.get(u)===void 0&&await io(u,{name:u,url:e.url??ta(),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)}au(s)});let n;function s(i,o=i?.name){let c=ot()&&o===ot()||ta()&&i?.url===ta();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(_t.trace("Setting up node replication for",i),!i){for(let[_,E]of so){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),_t.warn("Node was deleted, unsubscribing from node",o,S,_),y?.postMessage({type:"unsubscribe-from-node",node:o,database:S,url:_});break}}if(f){so.get(_).iterator.remove(),so.delete(_);return}}return}if(c)return;if(!i.url){_t.info(`Node ${i.name} is missing url`);return}let l=so.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(_t.info(`Added node ${i.name} at ${i.url} for process ${ot()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[_,E]of lu)if(i.url===E.url){lu.delete(_);break}lu.set(i.name,i)}let u=ut();if(l||(l=new Map,so.set(i.url,l)),l.iterator=ea(e,(_,E,f)=>{f?d(E,!0):d(E,!1)}),i.subscriptions)for(let _ of i.subscriptions){let E=_.database||_.schema;u[E]||(_t.warn(`Database ${E} not found for node ${i.name}, making a subscription anyway`),d(E,!1))}function d(_,E){_t.trace("Setting up replication for database",_,"on node",i.name);let f=l.get(_),h,T=[{replicateByDefault:E,...i}];Cp.has(_)&&(T.push({replicateByDefault:E,name:ot(),start_time:Cp.get(_),end_time:Date.now(),replicates:!0}),Cp.delete(_));let m=K_(i,_),g=Ci.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):uu(S)},fte);else{_t.info("Node no longer should be used, unsubscribing from node",i.replicates,!!u[_],Sr().primaryStore.get(ot())?.replicates),Sr().primaryStore.get(ot())?.replicates||(n=!1);let S={type:"unsubscribe-from-node",database:_,url:i.url,name:i.name};h?h.postMessage(S):Dp(S)}}a(d,"onDatabase")}a(s,"onNodeUpdate"),du=a(function(i){try{_t.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let o=Array.from(lu.keys()),c=o.sort(),l=c.indexOf(i.name||zs(i.url));if(l===-1){_t.warn("Disconnected node not found in node map",i.name,o);return}let u=so.get(i.url),d=u?.get(i.database);if(!d){_t.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=lu.get(f);u=so.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)){_t.info(`Disconnected node is already failing over to ${f} for ${i.database}`);continue}g.push(y),S=!0}if(!S){_t.info(`Disconnected node ${i.name} has no nodes to fail over to ${f}`);return}d.redirectingTo=T,_t.info(`Failing over ${i.database} from ${i.name} to ${f}`),m?m.postMessage({type:"subscribe-to-node",database:i.database,nodes:g}):uu({database:i.database,nodes:g});return}_t.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(o){_t.error("Error failing over node",o)}},"disconnectedFromNode"),bc=a(function(i){let o=so.get(i.url),c=o?.get(i.database);if(!c){_t.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}):uu({database:i.database,nodes:u}))}},"connectedToNode"),(0,Ci.onMessageByType)("disconnected-from-node",du),(0,Ci.onMessageByType)("connected-to-node",bc),(0,Ci.onMessageByType)("request-cluster-status",_B)}function _B(e,t){let r=[];for(let[n,s]of lu)try{let i=so.get(s.url);_t.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,hy.cloneDeep)(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){_t.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function io(e,t){let r=Sr();e=e??zs(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){_t.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(_t.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.put(t);else{t.replicates&&!lB.default.get(uB.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,hy.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}_t.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Ci,Pp,_t,hy,lB,uB,dB,fte,so,du,bc,lu,Cp,W_=Ie(()=>{Pe();Ci=L(dt());us();Pp=require("worker_threads");cu();_t=L(j()),hy=require("lodash"),lB=L(se()),uB=L(M()),dB=require("crypto"),fte=200,so=new Map,lu=new Map,Cp=new Map;a(py,"startOnMainThread");a(_B,"requestClusterStatus");Pp.parentPort&&(du=a(e=>{Pp.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),bc=a(e=>{Pp.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Ci.onMessageByType)("subscribe-to-node",e=>{uu(e)}),(0,Ci.onMessageByType)("unsubscribe-from-node",e=>{Dp(e)}));a(io,"ensureNode")});var Lp=N((ENe,EB)=>{"use strict";var Ete=M().OPERATIONS_ENUM,my=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=Ete.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};EB.exports=my});var pB=N((pNe,hB)=>{"use strict";var hte={OPERATION:"operation",REFRESH:"refresh"},Sy=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Ty=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};hB.exports={JWTTokens:Sy,TOKEN_TYPE_ENUM:hte,JWTRSAKeys:Ty}});var _u=N((SNe,gB)=>{"use strict";var z_=require("jsonwebtoken"),gy=require("fs-extra"),Ay=re(),ds=M(),{handleHDBError:fn,hdb_errors:pte}=_e(),{HTTP_STATUS_CODES:En,AUTHENTICATION_ERROR_MSGS:hn}=pte,j_=j(),mB=Bh(),by=xn(),mte=cn().update,Ste=Lp(),Tte=eo(),{UserEventMsg:gte}=qs(),ra=se();ra.initSync();var Ry=require("path"),{JWTTokens:Ate,JWTRSAKeys:Rte,TOKEN_TYPE_ENUM:Mp}=pB(),yte=ra.get(ds.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?ra.get(ds.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",bte=ra.get(ds.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?ra.get(ds.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Up="RS256",yy;gB.exports={createTokens:Ote,validateOperationToken:Ite,refreshOperationToken:Nte,validateRefreshToken:TB,getJWTRSAKeys:Q_};async function Ote(e){if(Ay.isEmpty(e)||typeof e!="object")throw fn(new Error,hn.INVALID_AUTH_OBJECT,En.BAD_REQUEST,void 0,void 0,!0);if(Ay.isEmpty(e.username))throw fn(new Error,hn.USERNAME_REQUIRED,En.BAD_REQUEST,void 0,void 0,!0);if(Ay.isEmpty(e.password))throw fn(new Error,hn.PASSWORD_REQUIRED,En.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await by.findAndValidateUser(e.username,e.password),!t)throw fn(new Error,hn.INVALID_CREDENTIALS,En.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw j_.error(E),fn(new Error,hn.INVALID_CREDENTIALS,En.UNAUTHORIZED,void 0,void 0,!0)}let r=await Q_(),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 SB(i,r.private_key,r.passphrase),c=await z_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:bte,algorithm:Up,subject:Mp.REFRESH}),l=mB.hash(c),u=new Ste(ds.SYSTEM_SCHEMA_NAME,ds.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),d,_;try{d=await mte(u)}catch(E){j_.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 Tte.signalUserChange(new gte(process.pid)),new Ate(o,c)}a(Ote,"createTokens");async function SB(e,t,r){return await z_.sign(e,{key:t,passphrase:r},{expiresIn:yte,algorithm:Up,subject:Mp.OPERATION})}a(SB,"signOperationToken");async function Q_(){if(yy===void 0)try{let e=Ry.join(ra.getHdbBasePath(),ds.LICENSE_KEY_DIR_NAME,ds.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Ry.join(ra.getHdbBasePath(),ds.LICENSE_KEY_DIR_NAME,ds.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Ry.join(ra.getHdbBasePath(),ds.LICENSE_KEY_DIR_NAME,ds.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await gy.readFile(e)).toString(),s=(await gy.readFile(t)).toString(),i=(await gy.readFile(r)).toString();yy=new Rte(i,s,n)}catch(e){throw j_.error(e),fn(new Error,hn.NO_ENCRYPTION_KEYS,En.INTERNAL_SERVER_ERROR)}return yy}a(Q_,"getJWTRSAKeys");async function Nte(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 TB(e.refresh_token);let t=await Q_(),r=await z_.decode(e.refresh_token);return{operation_token:await SB({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(Nte,"refreshOperationToken");async function Ite(e){try{let t=await Q_(),r=await z_.verify(e,t.public_key,{algorithms:Up,subject:Mp.OPERATION});return await by.findAndValidateUser(r.username,void 0,!1)}catch(t){throw j_.warn(t),t.name&&t.name==="TokenExpiredError"?fn(new Error,hn.TOKEN_EXPIRED,En.FORBIDDEN):fn(new Error,hn.INVALID_TOKEN,En.UNAUTHORIZED)}}a(Ite,"validateOperationToken");async function TB(e){let t;try{let r=await Q_(),n=await z_.verify(e,r.public_key,{algorithms:Up,subject:Mp.REFRESH});t=await by.findAndValidateUser(n.username,void 0,!1)}catch(r){throw j_.warn(r),r.name&&r.name==="TokenExpiredError"?fn(new Error,hn.TOKEN_EXPIRED,En.FORBIDDEN):fn(new Error,hn.INVALID_TOKEN,En.UNAUTHORIZED)}if(!mB.validate(t.refresh_token,e))throw fn(new Error,hn.INVALID_TOKEN,En.UNAUTHORIZED);return t}a(TB,"validateRefreshToken")});var Xs=N(KB=>{"use strict";var sr=require("path"),{watch:wte}=require("chokidar"),pn=require("fs-extra"),fu=require("node-forge"),IB=require("net"),{generateKeyPair:Ny,X509Certificate:oo,createPrivateKey:wB}=require("crypto"),Cte=require("util");Ny=Cte.promisify(Ny);var yt=fu.pki,Qs=require("joi"),{v4:CB}=require("uuid"),{validateBySchema:Py}=gt(),pt=j(),_s=se(),Es=M(),{CONFIG_PARAMS:Eu}=Es,Js=yA(),{ClientError:sa}=_e(),Nc=require("node:tls"),{relative:PB,join:Pte}=require("node:path"),{CERT_PREFERENCE_APP:gNe,CERTIFICATE_VALUES:AB}=Js,Dte=Wa(),Iy=Ct(),RB=parseInt(process.version.slice(1))<20,{table:Lte,getDatabases:Mte,databases:Oy}=(Pe(),oe(lt)),{getJWTRSAKeys:yB}=_u();Object.assign(KB,{generateKeys:My,updateConfigCert:xB,createCsr:Fte,signCertificate:Gte,setCertTable:hu,loadCertificates:vB,reviewSelfSignedCert:vy,createTLSSelector:GB,listCertificates:$B,addCertificate:Wte,removeCertificate:zte,createNatsCerts:Vte,generateCertsKeys:$te,getReplicationCert:X_,getReplicationCertAuth:kte,renewSelfSigned:Kte,hostnamesFromCert:VB,getKey:Qte});var{urlToNodeName:DB,getThisNodeUrl:Ute,getThisNodeName:Bp,clearThisNodeName:vte}=(us(),oe(aa)),{readFileSync:Bte,statSync:LB}=require("node:fs"),ANe=se(),{getTicketKeys:Hte,onMessageFromWorkers:xte}=dt(),na=j(),{isMainThread:MB}=require("worker_threads"),{TLSSocket:UB,createSecureContext:RNe}=require("node:tls"),Dy=3650,J_=["127.0.0.1","localhost","::1"],Ly=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];xte(async e=>{e.type===Es.ITC_EVENT_TYPES.RESTART&&(_s.initSync(!0),await vy())});var Dr;function oa(){return Dr||(Dr=Mte().system.hdb_certificate,Dr||(Dr=Lte({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(oa,"getCertTable");async function X_(){let e=GB("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(Bp());if(!r)return;let n=new oo(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(X_,"getReplicationCert");async function kte(){oa();let e=(await X_()).options.cert,r=new oo(e).issuer.match(/CN=(.*)/)?.[1];return Dr.get(r)}a(kte,"getReplicationCertAuth");var bB,ia=new Map;function vB(){if(bB)return;bB=!0;let e=[{configKey:Eu.TLS},{configKey:Eu.OPERATIONSAPI_TLS}];oa();let t=sr.dirname(Iy.getConfigFilePath()),r;for(let{configKey:n}of e){let s=Iy.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&PB(Pte(t,"keys"),o);c&&OB(o,l=>{ia.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&MB){let d;OB(u,_=>{if(AB.cert===_)return;let E=i.hostname??i.hostnames??i.host??i.hosts;E&&!Array.isArray(E)&&(E=[E]);let f=kB(u),h=new oo(f),T;try{T=By(h)}catch(y){pt.error("error extracting common name from certificate",y);return}if(T==null){pt.error("error extracting common name from certificate");return}if(h.checkIssued(new oo(AB.cert)))return;let m=Dr.primaryStore.get(T),g=LB(u).mtimeMs,S=!m||m.is_self_signed?1:m.file_timestamp??m.__updatedtime__;if(m&&g<=S){g<S&&pt.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(vB,"loadCertificates");function OB(e,t,r){let n,s=a((i,o)=>{try{let c=o.mtimeMs;c&&c!==n&&(n&&MB&&pt.warn(`Reloading ${r}:`,i),n=c,t(kB(i)))}catch(c){pt.error(`Error loading ${r}:`,i,c)}},"loadFile");pn.existsSync(e)?s(e,LB(e)):pt.error(`${r} file not found:`,e),wte(e,{persistent:!1}).on("change",s)}a(OB,"loadAndWatch");function wy(){let e=Ute();if(e==null){let t=J_[0];return pt.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return DB(e)}a(wy,"getHost");function vp(){let e=Bp();if(e==null){let t=J_[0];return pt.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(vp,"getCommonName");async function Fte(){let e=await X_(),t=yt.certificateFromPem(e.options.cert),r=yt.privateKeyFromPem(e.options.key);pt.info("Creating CSR with cert named:",e.name);let n=yt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:vp()},...Ly];pt.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:BB()}];return pt.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),fu.pki.certificationRequestToPem(n)}a(Fte,"createCsr");function BB(){let e=J_.includes(vp())?J_:[...J_,vp()];return e.includes(wy())||e.push(wy()),[{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=>IB.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(BB,"certExtensions");async function Gte(e){let t={},r=sr.join(_s.getHdbBasePath(),Es.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;oa();for await(let d of Dr.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(ia.has(d.private_key_name)){n=ia.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await pn.exists(sr.join(r,d.private_key_name))){n=pn.readFile(sr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await Cy();s=d.ca,n=d.private_key}n=yt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=yt.certificateFromPem(s.certificate);pt.info("Signing CSR with cert named",s.name);let o=yt.certificationRequestFromPem(e.csr);try{o.verify()}catch(d){return pt.error(d),new Error("Error verifying CSR: "+d.message)}let c=fu.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()+Dy),pt.info("sign cert setting validity:",c.validity),pt.info("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),pt.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;pt.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,fu.md.sha256.create()),t.certificate=yt.certificateToPem(c)}else pt.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(Gte,"signCertificate");async function qte(e,t){await hu({name:Bp(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await hu({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:yt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(qte,"createCertificateTable");async function hu(e){let t=new oo(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},oa(),await Dr.patch(e)}a(hu,"setCertTable");async function My(){let e=await Ny("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{public_key:yt.publicKeyFromPem(e.publicKey),private_key:yt.privateKeyFromPem(e.privateKey)}}a(My,"generateKeys");async function Uy(e,t,r){let n=yt.createCertificate();if(!t){let o=await X_();t=yt.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()+Dy);let i=[{name:"commonName",value:vp()},...Ly];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(BB()),n.sign(e,fu.md.sha256.create()),yt.certificateToPem(n)}a(Uy,"generateCertificates");async function Cy(){let e=await $B(),t;for(let r of e){if(!r.is_authority)continue;let n=await qB(r.private_key_name);if(r.private_key_name&&n&&new oo(r.certificate).checkPrivateKey(wB(n))){pt.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;pt.trace("No CA found with matching private key")}a(Cy,"getCertAuthority");async function HB(e,t,r=!0){let n=yt.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()+Dy);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${_s.get(Eu.REPLICATION_HOSTNAME)??DB(_s.get(Eu.REPLICATION_URL))??CB().split("-")[0]}`},...Ly];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,fu.md.sha256.create());let o=sr.join(_s.getHdbBasePath(),Es.LICENSE_KEY_DIR_NAME),c=sr.join(o,Js.PRIVATEKEY_PEM_NAME);return r&&await pn.writeFile(c,yt.privateKeyToPem(e)),n}a(HB,"generateCertAuthority");async function $te(){let{private_key:e,public_key:t}=await My(),r=await HB(e,t),n=await Uy(e,t,r);await qte(n,r),xB()}a($te,"generateCertsKeys");async function Vte(){let e=await Uy(yt.privateKeyFromPem(Js.CERTIFICATE_VALUES.key),void 0,yt.certificateFromPem(Js.CERTIFICATE_VALUES.cert)),t=sr.join(_s.getHdbBasePath(),Es.LICENSE_KEY_DIR_NAME),r=sr.join(t,Js.NATS_CERTIFICATE_PEM_NAME);await pn.exists(r)||await pn.writeFile(r,e);let n=sr.join(t,Js.NATS_CA_PEM_NAME);await pn.exists(n)||await pn.writeFile(n,Js.CERTIFICATE_VALUES.cert)}a(Vte,"createNatsCerts");async function Kte(){oa();for await(let e of Dr.search([{attribute:"is_self_signed",value:!0}]))await Dr.delete(e.name);await vy()}a(Kte,"renewSelfSigned");async function vy(){vte(),await vB(),oa();let e=await Cy();if(!e){pt.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=_s.get(Eu.TLS_PRIVATEKEY),n=sr.join(_s.getHdbBasePath(),Es.LICENSE_KEY_DIR_NAME),s,i=PB(n,r);try{s=yt.privateKeyFromPem(await pn.readFile(r))}catch(c){pt.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 My(),await pn.exists(sr.join(n,Js.PRIVATEKEY_PEM_NAME))&&(i=`privateKey${CB().split("-")[0]}.pem`),await pn.writeFile(sr.join(n,i),yt.privateKeyToPem(s))}let o=await HB(s,yt.setRsaPublicKey(s.n,s.e),!1);await hu({name:o.subject.getField("CN").value,uses:["https"],certificate:yt.certificateToPem(o),private_key_name:i,is_authority:!0,is_self_signed:!0})}if(!await X_()){let r=Bp();pt.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await Cy();let n=yt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await Uy(yt.privateKeyFromPem(e.private_key),s,n);await hu({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(vy,"reviewSelfSignedCert");function xB(){let e=Dte(Object.keys(Es.CONFIG_PARAM_MAP),!0),t=sr.join(_s.getHdbBasePath(),Es.LICENSE_KEY_DIR_NAME),r=sr.join(t,Js.PRIVATEKEY_PEM_NAME),n=sr.join(t,Js.NATS_CERTIFICATE_PEM_NAME),s=sr.join(t,Js.NATS_CA_PEM_NAME),i=Es.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),Iy.updateConfigValue(void 0,void 0,o,!1,!0)}a(xB,"updateConfigCert");function kB(e){return e.startsWith("-----BEGIN")?e:Bte(e,"utf8")}a(kB,"readPEM");var NB=Nc.createSecureContext;Nc.createSecureContext=function(e){if(!e.cert||!e.key)return NB(e);let t={...e};delete t.key,delete t.cert;let r=NB(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var FB=Nc.Server;Nc.Server=function(e,t){return e.ALPNCallback&&(e.ALPNProtocols=null),FB.call(this,e,t)};Nc.Server.prototype=FB.prototype;var Yte=UB.prototype._init;UB.prototype._init=function(e,t){Yte.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 Oc=new Map;function GB(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(),Oc.clear();let d=0;for await(let _ of Oy.system.hdb_certificate.search([])){let E=_.certificate,f=new oo(E);_.is_authority&&(f.asString=E,Oc.set(f.subject,E))}for await(let _ of Oy.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 qB(_.private_key_name),T=_.certificate,m=new oo(T);if(Oc.has(m.issuer)&&(T+=`
|