harperdb 4.3.29 → 4.3.30
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 +2 -2
- 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 +5 -5
- 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.2bfc8c33.js → main.502be660.js} +2 -2
- package/utility/scripts/restartHdb.js +1 -1
- /package/studio/build-local/static/js/{main.2bfc8c33.js.LICENSE.txt → main.502be660.js.LICENSE.txt} +0 -0
package/bin/harperdb.js
CHANGED
|
@@ -7,7 +7,7 @@ Caused by:`))):typeof _=="object"?n+=JSON.stringify(_):n+=_,c<i&&(n+=" ")}return
|
|
|
7
7
|
`).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:WK.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(JK,"findPs")});var _t=R((Xhe,Qy)=>{"use strict";var XK="__dbis__",ZK="__txns__",eW="__environment_name__",tW="__dbi_defintion__",rW={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"},nW=["__createdtime__","__updatedtime__"],sW="\uFFFF",Wy={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},iW=Object.values(Wy);Qy.exports={AUDIT_STORE_NAME:ZK,INTERNAL_DBIS_NAME:XK,DBI_DEFINITION_NAME:tW,SEARCH_TYPES:rW,TIMESTAMP_NAMES:nW,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:eW,TRANSACTIONS_DBI_NAMES_ENUM:Wy,TRANSACTIONS_DBIS:iW,OVERFLOW_MARKER:sW}});var nn=R((Zhe,nI)=>{"use strict";var jy=L(),zy=_t(),Jy={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},Xy=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Zy={500:Xy("There was an error processing your request."),400:"Invalid request"},oW=Zy[Jy.INTERNAL_SERVER_ERROR],aW={OP_NOT_SUPPORTED_FOR_FS:e=>`${e} is not available for this instance because it uses the File System data store.`,MISSING_VALUE:e=>`${e} is missing.`,INVALID_VALUE:e=>`${e} is invalid.`,NOT_FOUND:e=>`${e} not found.`},cW={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},lW={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:e=>`There was an error downloading '${e}'.`,INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,INVALID_FILE_EXT_ERR:e=>`Error selecting correct parser - valid file type not found in json - ${e}`,MAX_FILE_SIZE_ERR:(e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:e=>`There was an error downloading '${e}' from AWS.`,WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},uW={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 ${zy.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${zy.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"},_W={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${jy.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${jy.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"},eI={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"},dW={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:e=>`Operation '${e}' is restricted to 'super_user' roles`,OP_NOT_FOUND:e=>`Operation '${e}' not found`,SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:(e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,USER_HAS_NO_PERMS:e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},fW={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view database metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},EW={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`database '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`database '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in '${e}'`,SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},hW={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},pW={ALTER_USER_DUP_ROLES:e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,ALTER_USER_ROLE_NOT_FOUND:e=>`Update failed. Requested '${e}' role not found.`,DUP_ROLES_FOUND:e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,ROLE_NAME_NOT_FOUND:e=>`${e} role not found`,USER_ALREADY_EXISTS:e=>`User ${e} already exists`,USER_NOT_EXIST:e=>`User ${e} does not exist`},tI={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`},rI={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:e=>`ITC server received invalid event type: ${e}`},mW={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."},SW={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},TW={...eI,...lW,...aW,...dW,...fW,...EW,...hW,...pW,..._W,...tI,...rI,...mW,...SW,...cW};nI.exports={CHECK_LOGS_WRAPPER:Xy,HDB_ERROR_MSGS:TW,DEFAULT_ERROR_MSGS:Zy,DEFAULT_ERROR_RESP:oW,HTTP_STATUS_CODES:Jy,LMDB_ERRORS_ENUM:uW,AUTHENTICATION_ERROR_MSGS:eI,VALIDATION_ERROR_MSGS:tI,ITC_ERRORS:rI}});var ie=R((tpe,oI)=>{"use strict";var uc=nn(),gW=k(),RW=L(),af=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,sI),this.statusCode=n||uc.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(uc.DEFAULT_ERROR_MSGS[n]?uc.DEFAULT_ERROR_MSGS[n]:uc.DEFAULT_ERROR_MSGS[uc.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&&gW[s](i)}},ES=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}},hS=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function sI(e,t,r,n=RW.LOG_LEVELS.ERROR,s=null,i=!1){if(iI(e))return e;let o=new af(e,t,r,n,s);return i&&delete o.stack,o}a(sI,"handleHDBError");function iI(e){return e.__proto__.constructor.name===af.name}a(iI,"isHDBError");oI.exports={isHDBError:iI,handleHDBError:sI,ClientError:ES,ServerError:hS,hdb_errors:uc}});var Je=R((npe,fI)=>{"use strict";var Zl=L(),AW=Y(),br=J(),eu=require("path"),OW=require("minimist"),aI=require("fs-extra"),cI=require("lodash");br.initSync();var{CONFIG_PARAMS:ro,DATABASES_PARAM_CONFIG:jl,SYSTEM_SCHEMA_NAME:cf}=Zl,zl,Jl,Xl;function lI(){if(zl!==void 0)return zl;if(br.getHdbBasePath()!==void 0)return zl=br.get(ro.STORAGE_PATH)||eu.join(br.getHdbBasePath(),Zl.DATABASES_DIR_NAME),zl}a(lI,"getBaseSchemaPath");function uI(){if(Jl!==void 0)return Jl;if(br.getHdbBasePath()!==void 0)return Jl=dI(cf),Jl}a(uI,"getSystemSchemaPath");function _I(){if(Xl!==void 0)return Xl;if(br.getHdbBasePath()!==void 0)return Xl=br.get(Zl.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||eu.join(br.getHdbBasePath(),Zl.TRANSACTIONS_DIR_NAME),Xl}a(_I,"getTransactionAuditStoreBasePath");function bW(e,t){let r=br.get(ro.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||eu.join(_I(),e.toString())}a(bW,"getTransactionAuditStorePath");function dI(e,t){e=e.toString(),t=t&&t.toString();let r=br.get(Zl.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||eu.join(lI(),e)}a(dI,"getSchemaPath");function NW(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,OW(process.argv));let n=r[ro.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!AW.isObject(n))throw o;i=n}for(let o of i){let c=o[cf];if(!c)continue;let l=br.get(ro.DATABASES);l=l??{};let _=c?.tables?.[t]?.[jl.PATH];if(_)return cI.set(l,[cf,jl.TABLES,t,jl.PATH],_),br.setProperty(ro.DATABASES,l),_;let u=c?.[jl.PATH];if(u)return cI.set(l,[cf,jl.PATH],u),br.setProperty(ro.DATABASES,l),u}}let s=r[ro.STORAGE_PATH.toUpperCase()];if(s){if(!aI.pathExistsSync(s))throw new Error(s+" does not exist");let i=eu.join(s,e);return aI.mkdirsSync(i),br.setProperty(ro.STORAGE_PATH,s),i}return uI()}a(NW,"initSystemSchemaPaths");function yW(){zl=void 0,Jl=void 0,Xl=void 0}a(yW,"resetPaths");fI.exports={getBaseSchemaPath:lI,getSystemSchemaPath:uI,getTransactionAuditStorePath:bW,getTransactionAuditStoreBasePath:_I,getSchemaPath:dI,initSystemSchemaPaths:NW,resetPaths:yW}});var Nr=R((ape,SI)=>{"use strict";var IW=nn().LMDB_ERRORS_ENUM,ipe=require("lmdb"),wW=_t(),ope=require("buffer").Buffer,{OVERFLOW_MARKER:EI,MAX_SEARCH_KEY_LENGTH:lf}=wW,hI=["number","string","symbol","boolean","bigint"];function CW(e){if(e=e?.primaryStore||e,!e)throw new Error(IW.ENV_REQUIRED)}a(CW,"validateEnv");function DW(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(DW,"stringifyData");function LW(e){return e instanceof Date?e.valueOf():e}a(LW,"convertKeyValueToWrite");function PW(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(hI.includes(typeof e))return e.length>lf?[e.slice(0,lf)+EI]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(hI.includes(typeof i))i.length>lf?r.push(i.slice(0,lf)+EI):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(PW,"getIndexedValues");var uf=0,pI=0;function mI(){pI=Date.now()-performance.now()}a(mI,"adjustStartTime");mI();var MW=6e4;setInterval(mI,MW).unref();function UW(){let e=performance.now()+pI;return e>uf?(uf=e,e):(uf+=488e-6,uf)}a(UW,"getNextMonotonicTime");SI.exports={validateEnv:CW,stringifyData:DW,convertKeyValueToWrite:LW,getNextMonotonicTime:UW,getIndexedValues:PW}});var tu=R((lpe,TI)=>{"use strict";var vW=L().OPERATIONS_ENUM,pS=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=vW.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};TI.exports=pS});var ru=R((dpe,OI)=>{"use strict";var _pe=tu(),_f=L(),mS=Y(),gI=k(),BW=require("uuid"),{handleHDBError:df,hdb_errors:HW}=ie(),{HDB_ERROR_MSGS:ff,HTTP_STATUS_CODES:Ef}=HW;OI.exports=RI;function RI(e,t,r){for(let s=0;s<t.length;s++)AI(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];GW(i,r,e.operation)}}a(RI,"processRows");RI.validateAttribute=AI;function AI(e){if(Buffer.byteLength(String(e))>_f.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw df(new Error,ff.ATTR_NAME_LENGTH_ERR(e),Ef.BAD_REQUEST,void 0,void 0,!0);if(mS.isEmptyOrZeroLength(e)||mS.isEmpty(e.trim()))throw df(new Error,ff.ATTR_NAME_NULLISH_ERR,Ef.BAD_REQUEST,void 0,void 0,!0)}a(AI,"validateAttribute");function GW(e,t,r){if(!e.hasOwnProperty(t)||mS.isEmptyOrZeroLength(e[t])){if(r===_f.OPERATIONS_ENUM.INSERT||r===_f.OPERATIONS_ENUM.UPSERT){e[t]=BW.v4();return}throw gI.error("Update transaction aborted due to record with no hash value:",e),df(new Error,ff.RECORD_MISSING_HASH_ERR,Ef.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>_f.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw gI.error(e),df(new Error,ff.HASH_VAL_LENGTH_ERR,Ef.BAD_REQUEST,void 0,void 0,!0)}a(GW,"validateHash")});var bI,ts,SS,nu=be(()=>{bI=require("events"),ts=class extends bI.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new SS;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)}},SS=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 jo={};$e(jo,{server:()=>dt});var NI,dt,yr=be(()=>{NI=require("../index"),dt={};(0,NI._assignPackageExport)("server",dt)});var RS={};$e(RS,{loadGQLSchema:()=>FW,start:()=>gS,startOnMainThread:()=>qW});function gS({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:_,StringValueNode:u}=await import("graphql"),d=o(new c(r.toString(),s)),E=new Map,f=[],h;for(let S of d.definitions)switch(S.kind){case l.OBJECT_TYPE_DEFINITION:let U=function(v){if(v.kind==="NonNullType"){let W=U(v.type);return W.nullable=!1,W}if(v.kind==="ListType")return{type:"array",elements:U(v.type)};let M={type:v.name?.value};return Object.defineProperty(M,"location",{value:v.loc.startToken}),M};a(U,"getProperty");let g=S.name.value,T=[],b={table:null,database:null,properties:T};E.set(g,b);for(let v of S.directives){if(v.name.value==="table"){for(let q of v.arguments)b[q.name.value]=q.value.value;b.schema&&(b.database=b.schema),b.table||(b.table=g),b.audit&&(b.audit=b.audit!=="false"),b.attributes=b.properties,f.push(b)}if(v.name.value==="sealed"&&(b.sealed=!0),v.name.value==="export"){b.export=!0;for(let q of v.arguments)q.name.value==="name"&&(b.export={name:q.value.value})}}let N=!1;for(let v of S.fields){let q=U(v.type);q.name=v.name.value,T.push(q);for(let M of v.directives)if(M.name.value==="primaryKey")N?console.warn("Can not define two attributes as a primary key"):(q.isPrimaryKey=!0,N=!0);else if(M.name.value==="indexed")q.indexed=!0;else if(M.name.value==="relationship"){let W={};for(let z of M.arguments)W[z.name.value]=z.value.value;q.relationship=W}else if(M.name.value==="createdTime")q.assignCreatedTime=!0;else if(M.name.value==="updatedTime")q.assignUpdatedTime=!0;else if(M.name.value==="expiresAt")q.expiresAt=!0;else if(M.name.value==="allow"){let W=q.authorizedRoles=[];for(let z of M.arguments)z.name.value==="role"&&W.push(z.value.value)}}b.type=g,g==="Query"&&(h=b)}function m(S){let g=E.get(S.type);g?(Object.defineProperty(S,"properties",{value:g.properties}),Object.defineProperty(S,"definition",{value:g})):S.type==="array"?m(S.elements):xW.includes(S.type)||(0,yI.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(m,"connectPropertyType");for(let S of E.values())for(let g of S.properties)m(g);for(let S of f)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,TS.dirname)(n),S.tableClass):i.set((0,TS.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var TS,yI,xW,qW,FW,II=be(()=>{TS=require("path");Re();yI=G(rt()),xW=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(gS,"start");qW=gS,FW=gS({ensureTable:St}).handleFile});async function hf(e){let t=(0,DI.pathToFileURL)(e).toString();return kW?(su||(su=$W(YW)),(await(await su).import(t)).namespace):import(t)}async function $W(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),su=new Compartment({console,Math,Date,fetch:VW,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,CI.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:er,tables:sn,databases:ft})}};let n=await(0,wI.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),su}function VW(e,t){let r=typeof e=="string"||e.url;if(new URL(r).protocol!="https")throw new Error("Only https is allowed in fetch");return fetch(e,t)}function YW(){return{Resource:er,tables:sn}}var wI,CI,DI,kW,su,AS=be(()=>{Mn();Re();wI=require("fs/promises"),CI=require("path"),DI=require("url"),kW=!1;a(hf,"secureImport");a($W,"getCompartment");a(VW,"secureOnlyFetch");a(YW,"getGlobalVars")});var bS={};$e(bS,{handleFile:()=>KW});async function KW(e,t,r,n){let s=new Map,i=await hf(r);c(i.default)&&n.set((0,OS.dirname)(t),i.default),o(i,(0,OS.dirname)(t));function o(l,_){for(let u in l){let d=l[u];c(d)?n.set(_+"/"+u,d):typeof d=="object"&&o(d,_+"/"+u)}}a(o,"recurseForResources");function c(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(c,"isResource"),s}var OS,LI=be(()=>{AS();OS=require("path");a(KW,"handleFile")});var yS={};$e(yS,{start:()=>WW});function WW({resources:e}){e.set("login",NS),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var NS,PI=be(()=>{Mn();a(WW,"start");NS=class extends er{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var xI={};$e(xI,{parse:()=>wS,streamAsJSON:()=>iu,stringify:()=>zo});function iu(e){return new IS({value:e})}function MI(e){return console.error(e),JSON.stringify(e.toString())}function UI(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function zo(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===HI)return GI(e);if(t.resolution)return t.resolution.then(()=>zo(e));throw t}}function GI(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+=GI(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+zo(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function wS(e){return zW.test(e)?QW.parse(e):JSON.parse(e)}var vI,BI,QW,jW,HI,IS,zW,CS=be(()=>{vI=require("stream"),BI=G(require("json-bigint-fixes")),QW=(0,BI.default)({useNativeBigInt:!0}),jW=1e4,HI={};BigInt.prototype.toJSON=function(){throw HI};a(iu,"streamAsJSON");IS=class extends vI.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(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else 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),MI)}catch(s){yield MI(s)}else yield zo(t)}else yield zo(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);UI(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>jW?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 UI(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(MI,"handleError");a(UI,"when");a(zo,"stringify");a(GI,"jsStringify");zW=/[[,:]\s*-?\d{16,}/;a(wS,"parse")});var XI=R((wpe,JI)=>{"use strict";var DS=require("recursive-iterator"),JW=require("alasql"),LS=require("clone"),qI=Y(),{handleHDBError:FI,hdb_errors:XW}=ie(),{HDB_ERROR_MSGS:kI,HTTP_STATUS_CODES:$I}=XW,{getDatabases:ZW}=(Re(),ae(Ve)),eQ=["DISTINCT_ARRAY"],VI=Symbol("validateTables"),PS=Symbol("validateTable"),Ipe=Symbol("getAllColumns"),YI=Symbol("validateAllColumns"),pf=Symbol("findColumn"),KI=Symbol("validateOrderBy"),ou=Symbol("validateSegment"),MS=Symbol("validateColumn"),WI=Symbol("setColumnsForTable"),QI=Symbol("checkColumnsForAsterisk"),jI=Symbol("validateGroupBy"),zI=Symbol("hasColumns"),US=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[VI](),this[QI](),this[YI]()}[VI](){if(this[zI]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[PS](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[PS](t.table)})}}[zI](){let t=!1,r=new DS(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[PS](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=ZW();if(!r[t.databaseid])throw FI(new Error,kI.SCHEMA_NOT_FOUND(t.databaseid),$I.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw FI(new Error,kI.TABLE_NOT_FOUND(t.databaseid,t.tableid),$I.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=LS(s);i.table=LS(t),this.attributes.push(i)})}[pf](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)}[QI](){let t=new DS(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[WI](r.tableid)}[WI](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new JW.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[YI](){this[ou](this.statement.columns,!1),this[ou](this.statement.joins,!1),this[ou](this.statement.where,!1),this[jI](this.statement.group,!1),this[ou](this.statement.order,!0)}[ou](t,r){if(!t)return;let n=new DS(t),s=[];for(let{node:i,path:o}of n)!qI.isEmpty(i)&&!qI.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[KI](i):s.push(this[MS](i)));return s}[jI](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&eQ.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=LS(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[pf](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[pf](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`}[KI](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[MS](t)}[MS](t){let r=this[pf](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]}};JI.exports=US});var ew=R((Dpe,ZI)=>{"use strict";var vS=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")}};ZI.exports=vS});var rw=R((Ppe,tw)=>{"use strict";var BS=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};tw.exports=BS});var ow={};$e(ow,{HAS_EXPIRATION:()=>$S,LAST_TIMESTAMP_PLACEHOLDER:()=>lu,LOCAL_TIMESTAMP:()=>tQ,METADATA:()=>au,NO_TIMESTAMP:()=>GS,PENDING_LOCAL_TIME:()=>VS,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>kS,RecordEncoder:()=>FS,TIMESTAMP_ASSIGN_LAST:()=>nQ,TIMESTAMP_ASSIGN_NEW:()=>sw,TIMESTAMP_ASSIGN_PREVIOUS:()=>iw,TIMESTAMP_PLACEHOLDER:()=>mf,TIMESTAMP_RECORD_PREVIOUS:()=>xS,getUpdateRecord:()=>YS,handleLocalTimeForGets:()=>Rf});function iQ(){return cu[0]=cu[0]^64,rQ.getFloat64(0)}function Rf(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,_=l?.[au];return _>=0&&(c.metadataFlags=_,c.localTime=l.localTime,c.value=l.value,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?.[au]>=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,_=l[au];return _>=0&&(c.metadataFlags=_,c.localTime=l.localTime,c.value=l.value,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,Jo.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<Jo.length;l++){let _=Jo[l].deref();(!_||_.isDone||_.isCommitted)&&Jo.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function YS(e,t,r){return function(n,s,i,o,c=-1,l,_,u,d="put",E,f){if(E||l==null?_c=i?.localTime?xS|iw:GS:_c=l?i?.localTime?xS|16384:sw|16384:GS,u>0&&(c|=$S),Tf=c,qS=u,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:_c>0},m;try{E&&(h.ifVersion=m=i?.version??null);let S=e.put(n,s,h);if(l){let g=_?.user?.username;if(f&&(Sf=e.encoder.encode(f)),E&&i?.localTime){let T=i?.localTime,b=r.get(T);if(b){let N=Yt(b).previousLocalTime;return r.put(T,gf(o,t,n,N,g,d,Sf),{ifVersion:m}),S}}r.put(lu,gf(o,t,n,i?.localTime?1:0,g,d,Sf),{append:d!=="invalidate",instructedWrite:!0,ifVersion:m})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var nw,HS,mf,lu,kS,tQ,au,cu,rQ,GS,sw,nQ,iw,xS,$S,VS,sQ,Sf,_c,Tf,qS,FS,Jo,uu=be(()=>{nw=require("msgpackr");no();HS=G(k()),mf=new Uint8Array([1,1,1,1,4,64,0,0]),lu=new Uint8Array([1,1,1,1,1,0,0,0]),kS=new Uint8Array([1,1,1,1,3,64,0,0]),tQ=Symbol("local-timestamp"),au=Symbol("metadata"),cu=new Uint8Array(8),rQ=new DataView(cu.buffer,0,8),GS=0,sw=0,nQ=1,iw=3,xS=4,$S=16,VS=1,_c=0,Tf=-1,qS=0,FS=class extends nw.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(_c||Tf>=0){let i=0,o=_c;o&&(i+=8,_c=0);let c=Tf,l=qS;c>=0&&(i+=2,Tf=-1,l&&(i+=8,qS=0));let _=sQ=r.call(this,n,s|2048|i);Sf=_.subarray((_.start||0)+i,_.end);let u=_.start||0;return o&&(mf[4]=o,mf[5]=o>>8,_.set(mf,u),u+=8),c>=0&&(_[u++]=c,_[u++]=0,l&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(u,l)),_}else return r.call(this,n,s)}}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(cu,0,c),c+=8;else for(let d=0;d<8;d++)cu[d]=t[c++];l=iQ(),i=t[c]}let _;i<32&&(o=i,c+=2,o&$S&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let u=super.decode(t.subarray(c,s),s-c);return{localTime:l,value:u,[au]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(iQ,"getTimestamp");a(Rf,"handleLocalTimeForGets");Jo=[];setInterval(()=>{for(let e=0;e<Jo.length;e++){let t=Jo[e].deref();!t||t.isDone||t.isCommitted?Jo.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(HS.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):HS.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(YS,"getUpdateRecord")});var _u=R((Hpe,cw)=>{"use strict";var aw=J(),oQ=L(),{RecordEncoder:aQ}=(uu(),ae(ow)),Bpe=require("fs");aw.initSync();var cQ=aw.get(oQ.CONFIG_PARAMS.STORAGE_CACHING)!==!1,KS=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=cQ&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:aQ})}};cw.exports=KS});var du=R((xpe,lw)=>{"use strict";var on=J(),Un=L();on.initSync();var Af=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=on.get(Un.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||on.get(Un.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||on.get(Un.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",on.get(Un.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=on.get(Un.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),on.get(Un.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=on.get(Un.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),on.get(Un.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=on.get(Un.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),on.get(Un.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=on.get(Un.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=on.get(Un.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};lw.exports=Af;Af.MAX_DBS=1e4});var Ye=R((Fpe,Tw)=>{"use strict";var QS=require("lmdb"),rs=require("fs-extra"),an=require("path"),Of=Nr(),dw=k(),Ir=nn().LMDB_ERRORS_ENUM,bf=rw(),jS=_u(),fw=du(),so=_t(),uw=L(),{table:lQ,resetDatabases:uQ}=(Re(),ae(Ve)),_w=J(),ns=so.INTERNAL_DBIS_NAME,Ew=so.DBI_DEFINITION_NAME,_Q="data.mdb",dQ="lock.mdb",fu=".mdb",fQ="-lock",WS=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=vn(t,r),this.key_type=this.dbi[so.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[so.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new QS.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Nf(e,t){if(e===void 0)throw new Error(Ir.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Ir.ENV_NAME_REQUIRED)}a(Nf,"pathEnvNameValidation");async function zS(e,t,r=!0){try{await rs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Ir.INVALID_BASE_PATH):n}try{let n=an.join(e,t+fu);return await rs.access(n,rs.constants.R_OK|rs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await rs.access(an.join(e,t,_Q),rs.constants.R_OK|rs.constants.F_OK),an.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Ir.INVALID_ENVIRONMENT)}else throw new Error(Ir.INVALID_ENVIRONMENT);throw n}}a(zS,"validateEnvironmentPath");function yf(e,t){if(Of.validateEnv(e),t===void 0)throw new Error(Ir.DBI_NAME_REQUIRED)}a(yf,"validateEnvDBIName");async function EQ(e,t,r=!1,n=!1){Nf(e,t);let s=an.basename(e);t=t.toString();let i=_w.get(uw.CONFIG_PARAMS.DATABASES);i||_w.setProperty(uw.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await zS(e,t,n),hw(e,t,r)}catch(o){if(o.message===Ir.INVALID_ENVIRONMENT){let c=an.join(e,t);await rs.mkdirp(n?c:e);let l=new fw(n?c:c+fu,!1),_=QS.open(l);_.dbis=Object.create(null);let u=new jS(!1);_.openDB(ns,u),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=JS(e,t,r);return _[so.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(EQ,"createEnvironment");async function hQ(e,t,r,n=!0){Nf(e,t),t=t.toString();let s=an.join(e,t);return lQ({table:t,database:an.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(hQ,"copyEnvironment");async function hw(e,t,r=!1){Nf(e,t),t=t.toString();let n=JS(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 zS(e,t),i=an.join(e,t+fu),o=s!=i,c=new fw(s,o),l=QS.open(c);l.dbis=Object.create(null);let _=mw(l);for(let u=0;u<_.length;u++)vn(l,_[u]);return l[so.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(hw,"openEnvironment");async function pQ(e,t,r=!1){Nf(e,t),t=t.toString();let n=an.join(e,t+fu),s=await zS(e,t);if(global.lmdb_map!==void 0){let i=JS(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await pw(o),delete global.lmdb_map[i]}}await rs.remove(s),await rs.remove(s===n?s+fQ:an.join(an.dirname(s),dQ))}a(pQ,"deleteEnvironment");async function pw(e){Of.validateEnv(e);let t=e[so.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(pw,"closeEnvironment");function JS(e,t,r=!1){let s=`${an.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(JS,"getCachedEnvironmentName");function mQ(e){Of.validateEnv(e);let t=Object.create(null),r=vn(e,ns);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==ns)try{t[n]=Object.assign(new bf,s)}catch{dw.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(mQ,"listDBIDefinitions");function mw(e){Of.validateEnv(e);let t=[],r=vn(e,ns);for(let{key:n}of r.getRange({start:!1}))n!==ns&&t.push(n);return t}a(mw,"listDBIs");function SQ(e,t){let n=vn(e,ns).getEntry(t),s=new bf;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{dw.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(SQ,"getDBIDefinition");function Sw(e,t,r,n=!r){if(yf(e,t),t=t.toString(),t===ns)throw new Error(Ir.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return vn(e,t)}catch(s){if(s.message===Ir.DBI_DOES_NOT_EXIST){let i=new jS(r,n===!0),o=e.openDB(t,i),c=new bf(r===!0,n);return o[Ew]=c,vn(e,ns).putSync(t,c),e.dbis[t]=o,o}throw s}}a(Sw,"createDBI");function vn(e,t){if(yf(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ns?r=SQ(e,t):r=new bf,r===void 0)throw new Error(Ir.DBI_DOES_NOT_EXIST);let n;try{let s=new jS(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(Ir.DBI_DOES_NOT_EXIST):s}return n[Ew]=r,e.dbis[t]=n,n}a(vn,"openDBI");function TQ(e,t){yf(e,t),t=t.toString();let r=vn(e,t),n=r.getStats();return r[so.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(TQ,"statDBI");async function gQ(e,t){try{let r=an.join(e,t+fu);return(await rs.stat(r)).size}catch{throw new Error(Ir.INVALID_ENVIRONMENT)}}a(gQ,"environmentDataSize");function RQ(e,t){if(yf(e,t),t=t.toString(),t===ns)throw new Error(Ir.CANNOT_DROP_INTERNAL_DBIS_NAME);vn(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],vn(e,ns).removeSync(t)}a(RQ,"dropDBI");function AQ(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{vn(e,i)}catch(o){if(o.message===Ir.DBI_DOES_NOT_EXIST)Sw(e,i,i!==t,i===t),n=!0;else throw o}}n&&uQ()}a(AQ,"initializeDBIs");Tw.exports={openDBI:vn,openEnvironment:hw,createEnvironment:EQ,listDBIs:mw,listDBIDefinitions:mQ,createDBI:Sw,dropDBI:RQ,statDBI:TQ,deleteEnvironment:pQ,initializeDBIs:AQ,TransactionCursor:WS,environmentDataSize:gQ,copyEnvironment:hQ,closeEnvironment:pw}});var Rw=R(($pe,gw)=>{"use strict";var XS=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};gw.exports=XS});var Ow=R((Ype,Aw)=>{"use strict";var ZS=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}};Aw.exports=ZS});var Nw=R((Wpe,bw)=>{"use strict";var eT=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};bw.exports=eT});var Zo=R((Xpe,ww)=>{"use strict";var OQ=Ye(),bQ=Rw(),NQ=Ow(),yQ=Nw(),Cs=Nr(),Eu=nn().LMDB_ERRORS_ENUM,IQ=_t(),ui=L(),wQ=Y(),CQ=require("uuid"),jpe=require("lmdb"),{handleHDBError:DQ,hdb_errors:LQ}=ie(),{OVERFLOW_MARKER:zpe,MAX_SEARCH_KEY_LENGTH:Jpe}=IQ,yw=J();yw.initSync();var If=yw.get(ui.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),tT=ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Xo=ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function PQ(e,t,r,n,s=Cs.getNextMonotonicTime()){iT(e,t,r,n),rT(e,t,r);let i=new bQ,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l];Iw(_,!0,s);let u=MQ(e,t,r,_),d=_[t];o.push(u),c.push(d)}return nT(o,c,n,i,s)}a(PQ,"insertRecords");function MQ(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 u=c([[{}]]);Array.isArray(u)&&(c=u[0][ui.FUNC_VAL],n[o]=c)}let l=Cs.getIndexedValues(c),_=e.dbis[o];if(l){If&&_.prefetch(l.map(u=>({key:u,value:s})),wf);for(let u=0,d=l.length;u<d;u++)_.put(l[u],s)}}If&&e.dbis[t].prefetch([s],wf),e.dbis[t].put(s,n,n[Xo])})}a(MQ,"insertRecord");function UQ(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(UQ,"removeSkippedRecords");function Iw(e,t,r){let n=r>0;(n||!Number.isInteger(e[Xo]))&&(e[Xo]=r||(r=Cs.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[tT]))&&(e[tT]=r||Cs.getNextMonotonicTime()):delete e[tT]}a(Iw,"setTimestamps");function rT(e,t,r){r.indexOf(ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),OQ.initializeDBIs(e,t,r)}a(rT,"initializeTransaction");async function vQ(e,t,r,n,s=Cs.getNextMonotonicTime()){iT(e,t,r,n),rT(e,t,r);let i=new NQ,o=[],c=[],l=[];for(let _=0;_<n.length;_++){let u=n[_],d=u[t],E;try{E=sT(e,t,u,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(E),l.push(d)}return nT(c,l,n,i,s,o)}a(vQ,"updateRecords");async function BQ(e,t,r,n,s=Cs.getNextMonotonicTime()){try{iT(e,t,r,n)}catch(l){throw DQ(l,l.message,LQ.HTTP_STATUS_CODES.BAD_REQUEST)}rT(e,t,r);let i=new yQ,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l],u;wQ.isEmpty(_[t])?(u=CQ.v4(),_[t]=u):u=_[t];let d=sT(e,t,_,u,i,!1,s);o.push(d),c.push(u)}return nT(o,c,n,i,s)}a(BQ,"upsertRecords");async function nT(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||Cs.getNextMonotonicTime(),UQ(r,i),n}a(nT,"finalizeWrite");function sT(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),_=l?.value,u=_;if(!_){if(i)return!1;_={}}if(Iw(r,!u,o),Number.isInteger(r[Xo])&&_[Xo]>r[Xo])return!1;u&&s.original_records.push(_);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let m=r[h],S=e.dbis[h];if(S===void 0)continue;let g=_[h];if(typeof m=="function"){let b=m([[_]]);Array.isArray(b)&&(m=b[0][ui.FUNC_VAL],r[h]=m)}if(m===g)continue;let T=Cs.getIndexedValues(g);if(T){If&&S.prefetch(T.map(b=>({key:b,value:n})),wf);for(let b=0,N=T.length;b<N;b++)S.remove(T[b],n)}if(T=Cs.getIndexedValues(m),T){If&&S.prefetch(T.map(b=>({key:b,value:n})),wf);for(let b=0,N=T.length;b<N;b++)S.put(T[b],n)}}let f=Object.assign({},_,r);c.put(n,f,f[Xo])},"do_put");return l?d=c.ifVersion(n,l.version,E):d=c.ifNoExists(n,E),d.then(f=>f?!0:sT(e,t,r,n,s,i,o))}a(sT,"updateUpsertRecord");function HQ(e,t,r){if(Cs.validateEnv(e),t===void 0)throw new Error(Eu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Eu.WRITE_ATTRIBUTES_REQUIRED):new Error(Eu.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(HQ,"validateBasic");function iT(e,t,r,n){if(HQ(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Eu.RECORDS_REQUIRED):new Error(Eu.RECORDS_MUST_BE_ARRAY)}a(iT,"validateWrite");function wf(){}a(wf,"noop");ww.exports={insertRecords:PQ,updateRecords:vQ,upsertRecords:BQ}});var _i=R((eme,GQ)=>{GQ.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{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 Ls=R((tme,Lw)=>{"use strict";var Dw=Y(),Cw=L(),dc=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ds=require("joi"),io={schema_format:{pattern:dc,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},xQ=Ds.alternatives(Ds.string().min(1).max(io.schema_length.maximum).pattern(dc).messages({"string.pattern.base":"{:#label} "+io.schema_format.message}),Ds.number(),Ds.array()).required(),qQ=Ds.alternatives(Ds.string().min(1).max(io.schema_length.maximum).pattern(dc).messages({"string.pattern.base":"{:#label} "+io.schema_format.message}),Ds.number()),FQ=Ds.alternatives(Ds.string().min(1).max(io.schema_length.maximum).pattern(dc).messages({"string.pattern.base":"{:#label} "+io.schema_format.message}),Ds.number()).required();function kQ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>io.schema_length.maximum?`'${e}' maximum of 250 characters`:dc.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(kQ,"checkValidTable");function $Q(e,t){return Dw.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a($Q,"validateSchemaExists");function VQ(e,t){let r=t.state.ancestors[0].schema;return Dw.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(VQ,"validateTableExists");function YQ(e,t){return e.toLowerCase()===Cw.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Cw.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(YQ,"validateSchemaName");Lw.exports={common_validators:io,schema_regex:dc,hdb_schema_table:xQ,validateSchemaExists:$Q,validateTableExists:VQ,validateSchemaName:YQ,checkValidTable:kQ,hdb_database:qQ,hdb_table:FQ}});var nt=R((nme,Pw)=>{"use strict";var wr=require("validate.js");wr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||wr.validators.type.checks[t](e)?null:` must be a '${t}' value`};wr.validators.type.checks={Object:function(e){return wr.isObject(e)&&!wr.isArray(e)},Array:wr.isArray,Integer:wr.isInteger,Number:wr.isNumber,String:wr.isString,Date:wr.isDate,Boolean:function(e){return typeof e=="boolean"}};wr.validators.hasValidFileExt=function(e,t){return wr.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};Pw.exports={validateObject:KQ,validateObjectAsync:WQ,validateBySchema:QQ};function KQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=wr(e,t,{format:"flat"});return r?new Error(r):null}a(KQ,"validateObject");async function WQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await wr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(WQ,"validateObjectAsync");function QQ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(QQ,"validateBySchema")});var Cf=R((ime,Mw)=>{var{common_validators:Ps}=Ls(),pu=nt(),hu="is required",yt={database:{presence:!1,format:Ps.schema_format,length:Ps.schema_length},schema:{presence:!1,format:Ps.schema_format,length:Ps.schema_length},table:{presence:!0,format:Ps.schema_format,length:Ps.schema_length},attribute:{presence:!0,format:Ps.schema_format,length:Ps.schema_length},hash_attribute:{presence:!0,format:Ps.schema_format,length:Ps.schema_length}};function mu(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(mu,"makeAttributesStrings");function jQ(e){return e=mu(e),yt.table.presence=!1,yt.attribute.presence=!1,yt.hash_attribute.presence=!1,pu.validateObject(e,yt)}a(jQ,"schema_object");function zQ(e){return e=mu(e),yt.table.presence={message:hu},yt.attribute.presence=!1,yt.hash_attribute.presence=!1,pu.validateObject(e,yt)}a(zQ,"table_object");function JQ(e){return e=mu(e),yt.table.presence={message:hu},yt.attribute.presence=!1,pu.validateObject(e,yt)}a(JQ,"create_table_object");function XQ(e){return e=mu(e),yt.table.presence={message:hu},yt.attribute.presence={message:hu},yt.hash_attribute.presence=!1,pu.validateObject(e,yt)}a(XQ,"attribute_object");function ZQ(e){return e=mu(e),yt.table.presence={message:hu},yt.attribute.presence=!1,yt.hash_attribute.presence=!1,pu.validateObject(e,yt)}a(ZQ,"describe_table");function ej(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(ej,"validateTableResidence");Mw.exports={schema_object:jQ,create_table_object:JQ,table_object:zQ,attribute_object:XQ,describe_table:ZQ,validateTableResidence:ej}});var vw=R((ame,Uw)=>{"use strict";var tj=require("uuid"),oT=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||tj.v4(),this.schema_table=`${this.schema}.${this.table}`}};Uw.exports=oT});var Df=R((lme,Bw)=>{"use strict";var rj=vw(),aT=class extends rj{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}};Bw.exports=aT});var Gw=R((_me,Hw)=>{"use strict";Hw.exports=sj;var nj="inserted";function sj(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===nj?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(sj,"returnObject")});var Lf=R((fme,$w)=>{"use strict";var ij=L(),cT=Ye(),oj=Zo(),{getSystemSchemaPath:aj,getSchemaPath:cj}=Je(),lj=_i(),uj=Cf(),_j=Df(),dj=Gw(),{handleHDBError:xw,hdb_errors:Fw}=ie(),qw=Y(),{HTTP_STATUS_CODES:fj}=Fw,lT=lj.hdb_attribute,kw=[];for(let e=0;e<lT.attributes.length;e++)kw.push(lT.attributes[e].attribute);var Ej="inserted";$w.exports=hj;async function hj(e){let t=uj.attribute_object(e);if(t)throw xw(new Error,t.message,Fw.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&qw.checkGlobalSchemaTable(e.schema,e.table);if(r)throw xw(new Error,r,fj.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=qw.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 _j(e.schema,e.table,e.attribute,e.id);try{let i=await cT.openEnvironment(cj(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}`);cT.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await cT.openEnvironment(aj(),ij.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await oj.insertRecords(o,lT.hash_attribute,kw,[s]);return dj(Ej,c,{records:[s]},l)}catch(i){throw i}}a(hj,"lmdbCreateAttribute")});var _T=R((hme,Yw)=>{var{hdb_table:pj,hdb_database:Vw}=Ls(),mj=nt(),uT=require("joi"),Sj={undefined:"undefined",null:"null"},Tj=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||Sj[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"),gj=uT.object({database:Vw,schema:Vw,table:pj,records:uT.array().items(uT.object().custom(Tj)).required()});Yw.exports=function(e){return mj.validateBySchema(e,gj)}});var Su=R((Sme,Ww)=>{"use strict";var di=Y(),Kw=k(),mme=_T(),{getDatabases:Rj}=(Re(),ae(Ve)),{ClientError:ea}=ie();Ww.exports=Aj;function Aj(e){if(di.isEmpty(e))throw new ea("invalid update parameters defined.");if(di.isEmptyOrZeroLength(e.schema))throw new ea("invalid schema specified.");if(di.isEmptyOrZeroLength(e.table))throw new ea("invalid table specified.");if(!Array.isArray(e.records))throw new ea("records must be an array");let t=Rj()[e.schema]?.[e.table];if(di.isEmpty(t))throw new ea(`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&&di.isEmptyOrZeroLength(o[r]))throw Kw.error("a valid hash attribute must be provided with update record:",o),new ea("a valid hash attribute must be provided with update record, check log for more info");if(!di.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Kw.error(`a valid hash value must be provided with ${e.operation} record:`,o),new ea(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!di.isEmpty(o[r])&&o[r]!==""&&n.has(di.autoCast(o[r]))&&(o.skip=!0),n.add(di.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(Aj,"insertUpdateValidate")});var jw=R((gme,Qw)=>{"use strict";var dT=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};Qw.exports=dT});var Xw=R((Ame,Jw)=>{"use strict";var fT=Ye(),Oj=k(),zw=nn().LMDB_ERRORS_ENUM;Jw.exports=bj;async function bj(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 fT.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==zw.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await fT.closeEnvironment(global.lmdb_map[n]),await fT.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==zw.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){Oj.error(t)}}a(bj,"cleanLMDBMap")});var fi=R((bme,rC)=>{"use strict";var Tu=require("crypto"),Nj=J(),{CONFIG_PARAMS:yj}=L(),eC="aes-256-cbc",Ij=32,wj=16,ET=64,tC=32,Cj=ET+tC,Zw=new Map;rC.exports={encrypt:Dj,decrypt:Lj,createNatsTableStreamName:Pj};function Dj(e){let t=Tu.randomBytes(Ij),r=Tu.randomBytes(wj),n=Tu.createCipheriv(eC,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(Dj,"encrypt");function Lj(e){let t=e.substr(0,ET),r=e.substr(ET,tC),n=e.substr(Cj,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Tu.createDecipheriv(eC,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Lj,"decrypt");function Pj(e,t){let r=Nj.get(yj.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=Zw.get(r);return n||(n=Tu.createHash("md5").update(r).digest("hex"),Zw.set(r,n)),n}a(Pj,"createNatsTableStreamName")});var Ei=R((Ime,sC)=>{"use strict";var yme=ur(),gu=k(),nC=Cf(),Mj=fi(),Pf=Y(),{handleHDBError:Mf,hdb_errors:Uj}=ie(),{HDB_ERROR_MSGS:Uf,HTTP_STATUS_CODES:hT}=Uj,vj=J();vj.initSync();var{getDatabases:pT}=(Re(),ae(Ve)),Bj=require("fs-extra");sC.exports={describeAll:Hj,describeTable:vf,describeSchema:Gj};async function Hj(e={}){try{let t=Pf.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=pT(),o={},c={},l=[],_=e?.exact_count;for(let d in i){o[d]=!0,!t&&!s&&!r&&(c[d]=e.hdb_user?.role?.permission[d]?.describe);let E=i[d];for(let f in E)try{let h;if(t||s||r)h=await vf({schema:d,table:f,exact_count:_});else if(n&&n[d].describe&&n[d].tables[f].describe){let m=n[d].tables[f].attribute_permissions;h=await vf({schema:d,table:f,exact_count:_},m)}h&&l.push(h)}catch(h){gu.error(h)}}let u={};for(let d in l)t||s||r?(u[l[d].schema]==null&&(u[l[d].schema]={}),u[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(u[l[d].schema]==null&&(u[l[d].schema]={}),u[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s||r?u[d]={}:c[d]&&(u[d]={});return u}catch(t){return gu.error("Got an error in describeAll"),gu.error(t),Mf(new Error,Uf.DESCRIBE_ALL_ERR)}}a(Hj,"describeAll");async function vf(e,t){Pf.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=nC.describe_table(e);if(i)throw i;let c=pT()[r];if(!c)throw Mf(new Error,Uf.SCHEMA_NOT_FOUND(e.schema),hT.NOT_FOUND);let l=c[n];if(!l)throw Mf(new Error,Uf.TABLE_NOT_FOUND(e.schema,e.table),hT.NOT_FOUND);function _(f){u.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(h=>({type:h.type,name:h.name})):void 0}))}a(_,"pushAtt");let u=[];if(s){let f={};s.forEach(h=>{h.describe&&(f[h.attribute_name]=!0)}),l.attributes.forEach(h=>{f[h.name]&&_(h)})}else l.attributes?.forEach(f=>_(f));let d;try{d=(await Bj.stat(l.primaryStore.env.path)).size}catch(f){gu.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:u,db_size:d};E.clustering_stream_name=Mj.createNatsTableStreamName(E.schema,E.name);try{let f=l.getRecordCount({exactCount:e.exact_count==="true"});E.record_count=f.recordCount,E.estimated_record_range=f.estimatedRange;let h=l.auditStore;if(h)for(let m of h.getKeys({reverse:!0,limit:1}))E.last_updated_record=m[0];if(!E.last_updated_record&&l.indices.__updatedtime__)for(let m of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))E.last_updated_record=m}catch(f){gu.warn(`unable to stat table dbi due to ${f}`)}return E}a(vf,"descTable");async function Gj(e){Pf.transformReq(e);let t=nC.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=pT()[n];if(!i)throw Mf(new Error,Uf.SCHEMA_NOT_FOUND(e.schema),hT.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Pf.isEmpty(l)||l.describe){let _=await vf({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(Gj,"describeSchema")});var Bn=R((Lme,lC)=>{var xj=_i(),{callbackify:oC,promisify:qj}=require("util"),{getDatabases:aC}=(Re(),ae(Ve));lC.exports={setSchemaDataToGlobal:iC,getTableSchema:Fj,getSystemSchema:kj,setSchemaDataToGlobalAsync:qj(iC)};var cC=Ei(),Cme=oC(cC.describeAll),Dme=oC(cC.describeTable);function iC(e){global.hdb_schema=aC(),e&&e()}a(iC,"setSchemaDataToGlobal");function Fj(e,t,r){let n=aC()[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(Fj,"getTableSchema");function kj(){return xj}a(kj,"getSystemSchema")});var Cr=R((Mme,fC)=>{"use strict";var Hf=_T(),tr=Y(),$j=require("util"),Gf=Hn(),Vj=Bn(),uC=k(),{handleHDBError:ta,hdb_errors:Yj}=ie(),{HTTP_STATUS_CODES:ra}=Yj,Kj=$j.promisify(Vj.getTableSchema),Wj="updated",_C="inserted",dC="upserted";fC.exports={insert:jj,update:zj,upsert:Jj,validation:Qj,flush:Xj};async function Qj(e){if(tr.isEmpty(e))throw new Error("invalid update parameters defined.");if(tr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(tr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Kj(e.schema,e.table),r=Hf(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&&tr.isEmptyOrZeroLength(c[n]))throw uC.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(!tr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw uC.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!tr.isEmpty(c[n])&&c[n]!==""&&s.has(tr.autoCast(c[n]))&&(c.skip=!0),s.add(tr.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(Qj,"validation");async function jj(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Hf(e);if(t)throw ta(new Error,t.message,ra.BAD_REQUEST);tr.transformReq(e);let r=tr.checkSchemaTableExist(e.schema,e.table);if(r)throw ta(new Error,r,ra.BAD_REQUEST);let n=await Gf.createRecords(e);return Bf(_C,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(jj,"insertData");async function zj(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Hf(e);if(t)throw ta(new Error,t.message,ra.BAD_REQUEST);tr.transformReq(e);let r=tr.checkSchemaTableExist(e.schema,e.table);if(r)throw ta(new Error,r,ra.BAD_REQUEST);let n=await Gf.updateRecords(e);return tr.isEmpty(n.existing_rows)?Bf(Wj,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Bf(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(zj,"updateData");async function Jj(e){if(e.operation!=="upsert")throw ta(new Error,"invalid operation, must be upsert",ra.INTERNAL_SERVER_ERROR);let t=Hf(e);if(t)throw ta(new Error,t.message,ra.BAD_REQUEST);tr.transformReq(e);let r=tr.checkSchemaTableExist(e.schema,e.table);if(r)throw ta(new Error,r,ra.BAD_REQUEST);let n=await Gf.upsertRecords(e);return Bf(dC,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(Jj,"upsertData");function Bf(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===_C?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===dC?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Bf,"returnObject");function Xj(e){return tr.transformReq(e),Gf.flush(e.schema,e.table)}a(Xj,"flush")});var ST=R((vme,pC)=>{var Zj=nt(),mT=require("joi"),{hdb_table:ez,hdb_database:EC}=Ls(),hC={schema:EC,database:EC,table:ez},tz={date:mT.date().iso().required()},rz={timestamp:mT.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};pC.exports=function(e,t){let r=t==="timestamp"?{...hC,...rz}:{...hC,...tz},n=mT.object(r);return Zj.validateBySchema(e,n)}});var TC=R((Bme,SC)=>{var nz=nt(),TT=require("joi"),{hdb_table:sz,hdb_database:mC}=Ls(),iz=TT.object({schema:mC,database:mC,table:sz,hash_values:TT.array().required(),ids:TT.array()});SC.exports=function(e){return nz.validateBySchema(e,iz)}});var OT=R((Hme,gC)=>{"use strict";var gT=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}},RT=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}},AT=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};gC.exports={InsertObject:gT,NoSQLSeachObject:RT,DeleteResponseObject:AT}});var ia=R((xme,NC)=>{"use strict";var AC=ST(),oz=TC(),na=Y(),RC=require("moment"),OC=k(),{promisify:az,callbackify:cz}=require("util"),sa=L(),lz=Bn(),bT=az(lz.getTableSchema),NT=Hn(),{DeleteResponseObject:uz}=OT(),{handleHDBError:oo,hdb_errors:_z}=ie(),{HDB_ERROR_MSGS:xf,HTTP_STATUS_CODES:ao}=_z,dz="records successfully deleted",fz=cz(bC);NC.exports={delete:fz,deleteRecord:bC,deleteFilesBefore:Ez,deleteAuditLogsBefore:hz};async function Ez(e){let t=AC(e,"date");if(t)throw oo(t,t.message,ao.BAD_REQUEST,void 0,void 0,!0);if(na.transformReq(e),!RC(e.date,RC.ISO_8601).isValid())throw oo(new Error,xf.INVALID_DATE,ao.BAD_REQUEST,sa.LOG_LEVELS.ERROR,xf.INVALID_DATE,!0);let n=na.checkSchemaTableExist(e.schema,e.table);if(n)throw oo(new Error,n,ao.NOT_FOUND,sa.LOG_LEVELS.ERROR,n,!0);let s=await NT.deleteRecordsBefore(e);if(await bT(e.schema,e.table),OC.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(Ez,"deleteFilesBefore");async function hz(e){let t=AC(e,"timestamp");if(t)throw oo(t,t.message,ao.BAD_REQUEST,void 0,void 0,!0);if(na.transformReq(e),isNaN(e.timestamp))throw oo(new Error,xf.INVALID_VALUE("Timestamp"),ao.BAD_REQUEST,sa.LOG_LEVELS.ERROR,xf.INVALID_VALUE("Timestamp"),!0);let r=na.checkSchemaTableExist(e.schema,e.table);if(r)throw oo(new Error,r,ao.NOT_FOUND,sa.LOG_LEVELS.ERROR,r,!0);let n=await NT.deleteAuditLogsBefore(e);return await bT(e.schema,e.table),OC.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(hz,"deleteAuditLogsBefore");async function bC(e){e.ids&&(e.hash_values=e.ids);let t=oz(e);if(t)throw oo(t,t.message,ao.BAD_REQUEST,void 0,void 0,!0);na.transformReq(e);let r=na.checkSchemaTableExist(e.schema,e.table);if(r)throw oo(new Error,r,ao.NOT_FOUND,sa.LOG_LEVELS.ERROR,r,!0);try{await bT(e.schema,e.table);let n=await NT.deleteRecords(e);return na.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${dz}`),n}catch(n){if(n.message===sa.SEARCH_NOT_FOUND_MESSAGE){let s=new uz;return s.message=sa.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(bC,"deleteRecord")});var qf=R((Fme,wC)=>{var pz=require("crypto"),yC=9;function mz(e){let t=Tz(yC),r=IC(e+t);return t+r}a(mz,"createHash");function Sz(e,t){let r=e?.substr(0,yC),n=r+IC(t+r);return e===n}a(Sz,"validateHash");function Tz(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(Tz,"generateSalt");function IC(e){return pz.createHash("md5").update(e).digest("hex")}a(IC,"md5");wC.exports={hash:mz,validate:Sz}});var DC=R(($me,CC)=>{var yT=nt(),_r={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function gz(e){return _r.password.presence=!0,_r.username.presence=!0,_r.role.presence=!0,_r.active.presence=!0,yT.validateObject(e,_r)}a(gz,"addUserValidation");function Rz(e){return _r.password.presence=!1,_r.username.presence=!0,_r.role.presence=!1,_r.active.presence=!1,yT.validateObject(e,_r)}a(Rz,"alterUserValidation");function Az(e){return _r.password.presence=!1,_r.username.presence=!0,_r.role.presence=!1,_r.active.presence=!1,yT.validateObject(e,_r)}a(Az,"dropUserValidation");CC.exports={addUserValidation:gz,alterUserValidation:Rz,dropUserValidation:Az}});var Ze=R((Kme,PC)=>{"use strict";var{platform:Yme}=require("os"),Oz="nats-server.zip",IT="nats-server",bz=process.platform==="win32"?`${IT}.exe`:IT,Nz=/^[^\s.,*>]+$/,LC="__request__",yz=a(e=>`${e}.${LC}`,"REQUEST_SUBJECT"),Iz={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},wz={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Cz={HUB:"hub.pid",LEAF:"leaf.pid"},Dz={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Lz={SUCCESS:"success",ERROR:"error"},Pz={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Mz={TXN:"txn",MSGID:"msgid"},fc={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Uz={[fc.ERR]:1,[fc.WRN]:2,[fc.INF]:3,[fc.DBG]:4,[fc.TRC]:5},vz={debug:"-D",trace:"-DVV"};PC.exports={NATS_SERVER_ZIP:Oz,NATS_SERVER_NAME:IT,NATS_BINARY_NAME:bz,PID_FILES:Cz,NATS_CONFIG_FILES:wz,SERVER_SUFFIX:Dz,NATS_TERM_CONSTRAINTS_RX:Nz,REQUEST_SUFFIX:LC,UPDATE_REMOTE_RESPONSE_STATUSES:Lz,CLUSTER_STATUS_STATUSES:Pz,REQUEST_SUBJECT:yz,SUBJECT_PREFIXES:Mz,MSG_HEADERS:Iz,LOG_LEVELS:fc,LOG_LEVEL_FLAGS:vz,LOG_LEVEL_HIERARCHY:Uz}});var wT=R((Qme,MC)=>{"use strict";var Bz={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
|
|
8
8
|
`),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
|
`)},Hz="certificate.pem",Gz="privateKey.pem",xz="ca.pem";MC.exports={CERTIFICATE_VALUES:Bz,CERTIFICATE_PEM_NAME:Hz,PRIVATEKEY_PEM_NAME:Gz,CA_PEM_NAME:xz}});var CT=R((zme,xC)=>{"use strict";var HC=require("fs-extra"),le=require("joi"),qz=require("os"),{boolean:ye,string:dr,number:st,array:Ff}=le.types(),{totalmem:UC}=require("os"),oa=require("path"),Fz=k(),kf=Y(),jme=wT(),vC=L(),kz=nt(),BC="log",$z="components",Vz="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Yz="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Kz="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",Wz="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",Qz="rootPath config parameter is undefined",jz="clustering.enabled config parameter is undefined",aa=st.min(0).required(),$f=Ff.items({host:dr.required(),port:aa}).empty(null),Ms,GC=!1;xC.exports={configValidator:zz,routesValidator:rJ,route_constraints:$f};function zz(e,t=!1){if(GC=t,Ms=e.rootPath,kf.isEmpty(Ms))throw Qz;let r=ye.required(),n=st.min(0).max(1e3).empty(null).default(tJ),s=dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Ru),i=dr.optional().empty(null),o=dr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=le.string().empty(null).default(Ru),l=le.custom(Xz).empty(null).default(Ru),_=e.clustering?.enabled;if(kf.isEmpty(_))throw jz;let u=le.object({certificate:i,certificateAuthority:i,privateKey:i}),d;return _===!0?d=le.object({enabled:r,hubServer:le.object({cluster:le.object({name:le.required().empty(null),network:le.object({port:aa,routes:$f}).required()}).required(),leafNodes:le.object({network:le.object({port:aa}).required()}).required(),network:le.object({port:aa}).required()}).required(),leafServer:le.object({network:le.object({port:aa,routes:$f}).required(),streams:le.object({maxAge:st.min(120).allow(null).optional(),maxBytes:st.min(1).allow(null).optional(),maxMsgs:st.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:le.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:ye.optional(),databaseLevel:ye.optional(),tls:le.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required(),verify:ye.optional()}),user:dr.optional().empty(null)}).required():d=le.object({enabled:r,tls:le.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required()})}).required(),le.object({authentication:le.object({authorizeLocal:ye,cacheTTL:st.required(),enableSessions:ye}),analytics:le.object({aggregatePeriod:st}),componentsRoot:s.optional(),clustering:d,localStudio:le.object({enabled:r}).required(),logging:le.object({auditAuthEvents:le.object({logFailed:ye,logSuccessful:ye}),file:ye.required(),level:le.valid("notify","fatal","error","warn","info","debug","trace"),rotation:le.object({enabled:ye.optional(),compress:ye.optional(),interval:dr.custom(eJ).optional().empty(null),maxSize:dr.custom(Zz).optional().empty(null),path:dr.optional().empty(null).default(Ru)}).required(),root:s,stdStreams:ye.required(),auditLog:ye.required()}).required(),operationsApi:le.object({network:le.object({cors:ye.optional(),corsAccessList:Ff.optional(),headersTimeout:st.min(1).optional(),keepAliveTimeout:st.min(1).optional(),port:st.optional().empty(null),domainSocket:le.optional().empty("hdb/operations-server").default(Ru),securePort:st.optional().empty(null),timeout:st.min(1).optional()}).optional(),tls:le.alternatives([le.array().items(u),u])}).required(),rootPath:dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:le.object({network:le.object({port:aa,securePort:aa,mtls:le.alternatives([ye.optional(),le.object({user:dr.optional(),certificateAuthority:i,required:ye.optional()})])}).required(),webSocket:ye.optional(),requireAuthentication:ye.optional()}),http:le.object({compressionThreshold:st.optional(),cors:ye.optional(),corsAccessList:Ff.optional(),headersTimeout:st.min(1).optional(),port:st.min(0).optional().empty(null),securePort:st.min(0).optional().empty(null),maxHeaderSize:st.optional(),mtls:le.alternatives([ye.optional(),le.object({user:dr.optional(),certificateAuthority:i,required:ye.optional()})]),threadRange:le.alternatives([Ff.optional(),dr.optional()])}).required(),threads:le.alternatives(n.optional(),le.object({count:n.optional(),debug:le.alternatives(ye.optional(),le.object({startingPort:st.min(1).optional(),host:dr.optional(),waitForDebugger:ye.optional()})),maxHeapMemory:st.min(0).optional()})),storage:le.object({writeAsync:ye.required(),overlappingSync:ye.optional(),caching:ye.optional(),compression:le.alternatives([ye.optional(),le.object({dictionary:dr.optional(),threshold:st.optional()})]),compactOnStart:ye.optional(),compactOnStartKeepBackup:ye.optional(),noReadAhead:ye.optional(),path:l,prefetchWrites:ye.optional(),maxFreeSpaceToLoad:st.optional(),maxFreeSpaceToRetain:st.optional()}).required(),ignoreScripts:ye.optional(),tls:le.alternatives([le.array().items(u),u])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(zz,"configValidator");function Jz(e){return GC||HC.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Jz,"doesPathExist");function Xz(e,t){le.assert(e,dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Jz(e);if(r)return t.message(r)}a(Xz,"validatePath");function Zz(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Vz);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Kz):e}a(Zz,"validateRotationMaxSize");function eJ(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Yz);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Wz):e}a(eJ,"validateRotationInterval");function tJ(e,t){let r=t.state.path.join("."),n=qz.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||UC();return i=Math.round(Math.min(i,UC())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),Fz.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(tJ,"setDefaultThreads");function Ru(e,t){let r=t.state.path.join(".");if(!kf.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(kf.isEmpty(Ms))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return oa.join(Ms,$z);case"logging.root":return oa.join(Ms,BC);case"clustering.leafServer.streams.path":return oa.join(Ms,"clustering","leaf");case"storage.path":let n=oa.join(Ms,vC.LEGACY_DATABASES_DIR_NAME);return HC.existsSync(n)?n:oa.join(Ms,vC.DATABASES_DIR_NAME);case"logging.rotation.path":return oa.join(Ms,BC);case"operationsApi.network.domainSocket":return r==null?null:oa.join(Ms,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Ru,"setDefaultRoot");function rJ(e){let t=le.object({routes:$f});return kz.validateBySchema({routes:e},t)}a(rJ,"routesValidator")});var Et=R((Zme,QC)=>{"use strict";var ln=L(),Kt=Y(),Bt=k(),{configValidator:nJ,routesValidator:qC}=CT(),Dr=require("fs-extra"),sJ=require("yaml"),ss=require("path"),iJ=require("is-number"),kC=require("properties-reader"),oJ=require("lodash"),{handleHDBError:aJ}=ie(),{HTTP_STATUS_CODES:cJ,HDB_ERROR_MSGS:Vf}=nn(),Xme=require("minimist"),{server:lJ}=(yr(),ae(jo)),{DATABASES_PARAM_CONFIG:Au,CONFIG_PARAMS:cn,CONFIG_PARAM_MAP:is}=ln,uJ="Unable to get config value because config is uninitialized",_J="Config successfully initialized",dJ="Error backing up config file",fJ="Empty parameter sent to getConfigValue",$C=ss.join(ln.PACKAGE_ROOT,"config","yaml",ln.HDB_DEFAULT_CONFIG_FILE),EJ="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",FC={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"},Yf,Ht,Kf;QC.exports={createConfigFile:hJ,getDefaultConfig:pJ,getConfigValue:YC,initConfig:LT,flattenConfig:Ec,updateConfigValue:KC,updateConfigObject:SJ,getConfiguration:RJ,setConfiguration:AJ,readConfigFile:MT,getClusteringRoutes:OJ,initOldConfig:WC,getConfigFromFile:bJ,getConfigFilePath:ca,addConfig:NJ,deleteConfigFromFile:yJ,getConfigObj:IJ};function hJ(e,t=!1){let r=co($C);Yf=Ec(r.toJSON());let n;for(let c in e){let l=is[c.toLowerCase()];if(l===cn.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(_=>({[_]:e[c][_]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let _=l.split("_"),u=DT(l,e[c]);l==="rootPath"&&u?.endsWith("/")&&(u=u.slice(0,-1));try{r.setIn([..._],u)}catch(d){Bt.error(d)}}}n&&VC(r,n),PT(r,t);let s=r.toJSON();Ht=Ec(s);let i=r.getIn(["rootPath"]),o=ss.join(i,ln.HDB_CONFIG_FILE);Dr.createFileSync(o),Dr.writeFileSync(o,String(r)),Bt.trace(`Config file written to ${o}`)}a(hJ,"createConfigFile");function VC(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Kt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Au.TABLES))for(let i in n[s][Au.TABLES])for(let o in n[s][Au.TABLES][i]){let c=n[s][Au.TABLES][i][o],l=[cn.DATABASES,s,Au.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=[cn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Bt.error("Error parsing schemas CLI/env config arguments",n)}}a(VC,"setSchemasConfig");function pJ(e){if(Yf===void 0){let r=co($C);Yf=Ec(r.toJSON())}let t=is[e.toLowerCase()];if(t!==void 0)return Yf[t.toLowerCase()]}a(pJ,"getDefaultConfig");function YC(e){if(e==null){Bt.error(fJ);return}if(Ht===void 0){Bt.trace(uJ);return}let t=is[e.toLowerCase()];if(t!==void 0)return Ht[t.toLowerCase()]}a(YC,"getConfigValue");function ca(e=Kt.getPropsFilePath()){let t=Kt.getEnvCliRootPath();return t?ss.join(t,ln.HDB_CONFIG_FILE):kC(e).get(ln.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ca,"getConfigFilePath");function LT(e=!1){if(Ht===void 0||e){let t;if(!Kt.noBootFile()){t=Kt.getPropsFilePath();try{Dr.accessSync(t,Dr.constants.F_OK|Dr.constants.R_OK)}catch(i){throw Bt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=ca(t),n;if(r.includes("config/settings.js"))try{WC(r);return}catch(i){if(i.code!==ln.NODE_ERROR_CODES.ENOENT)throw i}try{n=co(r)}catch(i){if(i.code===ln.NODE_ERROR_CODES.ENOENT){Bt.trace(`HarperDB config file not found at ${r}.
|
|
10
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw Bt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}mJ(n,r),PT(n);let s=n.toJSON();if(lJ.config=s,Ht=Ec(s),Ht.logging_rotation_rotate)for(let i in FC)Ht[i]&&Bt.error(`Config ${FC[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Bt.trace(_J)}}a(LT,"initConfig");function mJ(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ss.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ss.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ss.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),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&&(Bt.trace("Updating config file with missing config params"),Dr.writeFileSync(t,String(e)))}a(mJ,"checkForUpdatedConfig");function PT(e,t=!1){let r=e.toJSON();r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads);let n=nJ(r,t);if(n.error)throw Vf.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(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket)}a(PT,"validateConfig");function SJ(e,t){Ht===void 0&&(Ht={});let r=is[e.toLowerCase()];if(r===void 0){Bt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ht[r.toLowerCase()]=t}a(SJ,"updateConfigObject");function KC(e,t,r=void 0,n=!1,s=!1,i=!1){Ht===void 0&<();let o=YC(is.hdb_root),c=ss.join(o,ln.HDB_CONFIG_FILE),l=co(c),_;if(r===void 0&&e.toLowerCase()===cn.DATABASES)_=t;else if(r===void 0){let E;if(i)E=e;else if(E=is[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=DT(E,t);l.setIn([...f],h)}else for(let E in r){let f=is[E.toLowerCase()];if(f===cn.HTTP_SECUREPORT&&r[E]===Ht[cn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),f===cn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===Ht[cn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),f===cn.DATABASES){_=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("_"),m=ln.LEGACY_CONFIG_PARAMS[E.toUpperCase()];m&&m.startsWith("customFunctions")&&l.hasIn(m.split("_"))&&(f=m,h=m.split("_"));let S=DT(f,r[E]);f==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],S)}catch(g){Bt.error(g)}}}_&&VC(l,_),PT(l);let u=l.getIn(["rootPath"]),d=ss.join(u,ln.HDB_CONFIG_FILE);n===!0&&TJ(c,u),Dr.writeFileSync(d,String(l)),s&&(Ht=Ec(l.toJSON())),Bt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(KC,"updateConfigValue");function TJ(e,t){try{let r=ss.join(t,"backup",`${ln.HDB_CONFIG_FILE}.bak`);Dr.copySync(e,r),Bt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Bt.error(dJ),Bt.error(r)}}a(TJ,"backupConfigFile");var gJ=["databases"];function Ec(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),Kf=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])&&!gJ.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;!cn[l.toUpperCase()]&&is[l]&&(s[is[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Ec,"flattenConfig");function DT(e,t){if(e===cn.CLUSTERING_NODENAME||e===cn.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(iJ(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Kt.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 Kt.autoCast(t)}a(DT,"castConfigValue");function RJ(){let e=Kt.getPropsFilePath(),t=ca(e);return co(t).toJSON()}a(RJ,"getConfiguration");async function AJ(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return KC(void 0,void 0,s,!0),EJ}catch(i){throw typeof i=="string"||i instanceof String?aJ(i,i,cJ.BAD_REQUEST,void 0,void 0,!0):i}}a(AJ,"setConfiguration");function MT(){let e=Kt.getPropsFilePath();try{Dr.accessSync(e,Dr.constants.F_OK|Dr.constants.R_OK)}catch(n){if(!Kt.noBootFile())throw Bt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ca(e);return co(t).toJSON()}a(MT,"readConfigFile");function co(e){return sJ.parseDocument(Dr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(co,"parseYamlDoc");function OJ(){let e=MT(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Kt.isEmptyOrZeroLength(t)?[]:t;let r=qC(t);if(r)throw Vf.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Kt.isEmptyOrZeroLength(n)?[]:n;let s=qC(n);if(s)throw Vf.CONFIG_VALIDATION(s.message);if(!Kt.isEmptyOrZeroLength(n)&&!Kt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Kt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Vf.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(OJ,"getClusteringRoutes");function WC(e){let t=kC(e);Ht={};for(let r in is){let n=t.get(r.toUpperCase());if(Kt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=is[r].toLowerCase();s===cn.LOGGING_ROOT?Ht[s]=ss.dirname(n):Ht[s]=n}return Ht}a(WC,"initOldConfig");function bJ(e){let t=MT();return oJ.get(t,e.replaceAll("_","."))}a(bJ,"getConfigFromFile");async function NJ(e,t){let r=co(ca());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Dr.writeFile(ca(),String(r))}a(NJ,"addConfig");function yJ(e){let t=ca(Kt.getPropsFilePath()),r=co(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=ss.join(n,ln.HDB_CONFIG_FILE);Dr.writeFileSync(s,String(r))}a(yJ,"deleteConfigFromFile");function IJ(){return Kf||(LT(),Kf)}a(IJ,"getConfigObj")});var zC=R((tSe,jC)=>{"use strict";var Wf=L(),Qf=class{static{a(this,"BaseLicense")}constructor(t=0,r=Wf.RAM_ALLOCATION_ENUM.DEFAULT,n=Wf.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},UT=class extends Qf{static{a(this,"ExtendedLicense")}constructor(t=0,r=Wf.RAM_ALLOCATION_ENUM.DEFAULT,n=Wf.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};jC.exports={BaseLicense:Qf,ExtendedLicense:UT}});var la=R((nSe,rD)=>{"use strict";var pc=require("fs-extra"),XC=qf(),ZC=require("crypto"),wJ=require("moment"),CJ=require("uuid").v4,fr=k(),BT=require("path"),DJ=Y(),lo=L(),{totalmem:JC}=require("os"),LJ=zC().ExtendedLicense,hc="invalid license key format",PJ="061183",MJ="mofi25",UJ="aes-256-cbc",vJ=16,BJ=32,eD=J();eD.initSync();var vT;rD.exports={validateLicense:tD,generateFingerPrint:GJ,licenseSearch:xT,getLicense:FJ,checkMemoryLimit:kJ};function HT(){return BT.join(eD.getHdbBasePath(),lo.LICENSE_KEY_DIR_NAME,lo.LICENSE_FILE_NAME)}a(HT,"getLicenseDirPath");function HJ(){let e=HT();return BT.join(e,lo.LICENSE_FILE_NAME)}a(HJ,"getLicenseFilePath");function GT(){let e=HT();return BT.join(e,lo.REG_KEY_FILE_NAME)}a(GT,"getFingerPrintFilePath");async function GJ(){let e=GT();try{return await pc.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await xJ();throw fr.error(`Error writing fingerprint file to ${e}`),fr.error(t),new Error("There was an error generating the fingerprint")}}a(GJ,"generateFingerPrint");async function xJ(){let e=CJ(),t=XC.hash(e),r=GT();try{await pc.mkdirp(HT()),await pc.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw fr.error(`Error writing fingerprint file to ${r}`),fr.error(n),new Error("There was an error generating the fingerprint")}return t}a(xJ,"writeFingerprint");function tD(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:lo.RAM_ALLOCATION_ENUM.DEFAULT,version:lo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return fr.error("empty license key passed to validate."),r;let n=GT(),s=!1;try{s=pc.statSync(n)}catch(i){fr.error(i)}if(s){let i;try{i=pc.readFileSync(n,"utf8")}catch{fr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(MJ),c=o[1];c=Buffer.concat([Buffer.from(c)],vJ);let l=Buffer.concat([Buffer.from(i)],BJ),_=ZC.createDecipheriv(UJ,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let u=null;try{u=_.update(o[0],"hex","utf8"),u.trim(),u+=_.final("utf8")}catch{let f=qJ(o[0],i);if(f)u=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(hc),fr.error(hc),new Error(hc)}let d;if(isNaN(u))try{d=JSON.parse(u),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(hc),fr.error(hc),new Error(hc)}else r.exp_date=u;r.exp_date<wJ().valueOf()&&(r.valid_date=!1),XC.validate(o[1],`${PJ}${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||fr.error("Invalid licence"),r}a(tD,"validateLicense");function qJ(e,t){try{let r=ZC.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{fr.warn("Check old license failed")}}a(qJ,"checkOldLicense");function xT(){let e=new LJ,t=[];try{t=pc.readFileSync(HJ(),"utf-8").split(lo.NEW_LINE)}catch(r){r.code==="ENOENT"?fr.info("no license file found"):fr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(DJ.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=tD(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){fr.error("There was an error parsing the license string."),fr.error(s),e.ram_allocation=lo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return vT=e,e}a(xT,"licenseSearch");async function FJ(){return vT||await xT(),vT}a(FJ,"getLicense");function kJ(){let e=xT().ram_allocation,t=process.constrainedMemory?.()||JC();if(t=Math.round(Math.min(t,JC())/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(kJ,"checkMemoryLimit")});var Lr=R((cSe,SD)=>{"use strict";var oD="username is required",aD="nothing to update, must supply active, role or password to update",cD="password cannot be an empty string",lD="If role is specified, it cannot be empty.",uD="active must be true or false";SD.exports={addUser:JJ,alterUser:XJ,dropUser:e2,getSuperUser:s2,userInfo:t2,listUsers:zf,listUsersExternal:r2,setUsersToGlobal:Sc,findAndValidateUser:pD,getClusterUser:i2,USERNAME_REQUIRED:oD,ALTERUSER_NOTHING_TO_UPDATE:aD,EMPTY_PASSWORD:cD,EMPTY_ROLE:lD,ACTIVE_BOOLEAN:uD};var _D=Cr(),$J=ia(),kT=qf(),dD=DC(),fD=ur(),$T=hi(),un=Y(),ED=require("validate.js"),Ne=k(),{promisify:VJ}=require("util"),VT=fi(),nD=L(),sD=Ze(),YJ=Et(),iSe=J(),oSe=la(),KJ=_i(),{table:aSe}=(Re(),ae(Ve)),{handleHDBError:Us,hdb_errors:WJ}=ie(),{HTTP_STATUS_CODES:vs,AUTHENTICATION_ERROR_MSGS:qT,HDB_ERROR_MSGS:mc}=WJ,{UserEventMsg:YT}=os(),FT=require("lodash"),{server:KT}=(yr(),ae(jo)),QJ=k();KT.getUser=(e,t)=>pD(e,t,t!=null);var hD={username:!0,active:!0,role:!0,password:!0},iD=new Map,jf=fD.searchByValue,jJ=fD.searchByHash,zJ=VJ($J.delete);async function JJ(e){let t=ED.cleanAttributes(e,hD),r=dD.addUserValidation(t);if(r)throw Us(new Error,r.message,vs.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 jf(n),s=s&&Array.from(s)}catch(l){throw Ne.error("There was an error searching for a role in add user"),Ne.error(l),l}if(!s||s.length<1)throw Us(new Error,mc.ROLE_NAME_NOT_FOUND(t.role),vs.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Us(new Error,mc.DUP_ROLES_FOUND(t.role),vs.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=VT.encrypt(t.password)),t.password=kT.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await _D.insert(i)}catch(l){throw Ne.error("There was an error searching for a user."),Ne.error(l),l}Ne.debug(o);try{await Sc()}catch(l){throw Ne.error("Got an error setting users to global"),Ne.error(l),l}if(o.skipped_hashes.length===1)throw Us(new Error,mc.USER_ALREADY_EXISTS(t.username),vs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],$T.signalUserChange(new YT(process.pid)),`${c.username} successfully added`}a(JJ,"addUser");async function XJ(e){let t=ED.cleanAttributes(e,hD);if(un.isEmptyOrZeroLength(t.username))throw new Error(oD);if(un.isEmptyOrZeroLength(t.password)&&un.isEmptyOrZeroLength(t.role)&&un.isEmptyOrZeroLength(t.active))throw new Error(aD);if(!un.isEmpty(t.password)&&un.isEmptyOrZeroLength(t.password.trim()))throw new Error(cD);if(!un.isEmpty(t.active)&&!un.isBoolean(t.active))throw new Error(uD);let r=ZJ(t.username);if(!un.isEmpty(t.password)&&!un.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=VT.encrypt(t.password)),t.password=kT.hash(t.password)),t.role==="")throw new Error(lD);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 jf(i)||[])}catch(c){throw Ne.error("Got an error searching for a role."),Ne.error(c),c}if(!o||o.length===0){let c=mc.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ne.error(c),Us(new Error,c,vs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=mc.ALTER_USER_DUP_ROLES(t.role);throw Ne.error(c),Us(new Error,c,vs.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 _D.update(n)}catch(i){throw Ne.error("Error during update."),Ne.error(i),i}try{await Sc()}catch(i){throw Ne.error("Got an error setting users to global"),Ne.error(i),i}return $T.signalUserChange(new YT(process.pid)),s}a(XJ,"alterUser");function ZJ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(ZJ,"isClusterUser");async function e2(e){try{let t=dD.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(un.isEmpty(global.hdb_users.get(e.username)))throw Us(new Error,mc.USER_NOT_EXIST(e.username),vs.NOT_FOUND,void 0,void 0,!0);let n;try{n=await zJ(r)}catch(s){throw Ne.error("Got an error deleting a user."),Ne.error(s),s}Ne.debug(n);try{await Sc()}catch(s){throw Ne.error("Got an error setting users to global."),Ne.error(s),s}return $T.signalUserChange(new YT(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(e2,"dropUser");async function t2(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=FT.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await jJ(r)}catch(s){throw Ne.error("Got an error searching for a role."),Ne.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ne.error(r),r}return t}a(t2,"userInfo");async function r2(){let e;try{e=await zf()}catch(t){throw Ne.error("Got an error listing users."),Ne.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(r2,"listUsersExternal");async function zf(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await jf(e)}catch(o){throw Ne.error("Got an error searching for roles."),Ne.error(o),o}let r={};for(let o of t)r[o.id]=FT.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 jf(n)}catch(o){throw Ne.error("Got an error searching for users."),Ne.error(o),o}let i=new Map;for(let o of s)o=FT.cloneDeep(o),o.role=r[o.role],n2(o.role),i.set(o.username,o);return i}catch(e){throw Ne.error("got an error listing users"),Ne.error(e),un.errorizeMessage(e)}return null}a(zf,"listUsers");function n2(e){try{if(!e){Ne.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(KJ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ne.error("Got an error trying to set system permissions."),Ne.error(t)}}a(n2,"appendSystemTablesToRole");async function Sc(){try{let e=await zf();global.hdb_users=e}catch(e){throw Ne.error(e),e}}a(Sc,"setUsersToGlobal");async function pD(e,t,r=!0){global.hdb_users||await Sc();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Us(new Error,qT.GENERIC_AUTH_FAIL,vs.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Us(new Error,qT.USER_INACTIVE,vs.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(iD.get(t)===n.password)return s;if(kT.validate(n.password,t))iD.set(t,n.password);else throw Us(new Error,qT.GENERIC_AUTH_FAIL,vs.UNAUTHORIZED,void 0,void 0,!0)}return s}a(pD,"findAndValidateUser");async function s2(){global.hdb_users||await Sc();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(s2,"getSuperUser");async function i2(){let e=await zf(),t=YJ.getConfigFromFile(nD.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!un.isEmpty(r)&&r?.role?.role===nD.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=VT.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+sD.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+sD.SERVER_SUFFIX.ADMIN,r}a(i2,"getClusterUser");var mD=[];KT.invalidateUser=function(e){for(let t of mD)try{t(e)}catch(r){QJ.error("Error invalidating user",r)}};KT.onInvalidatedUser=function(e){mD.push(e)}});var bu=R((dSe,AD)=>{"use strict";var ua=k(),_n=L(),o2=Xw(),uSe=Bn(),_Se=Ei(),a2=Lr(),{validateEvent:TD}=os(),Ou=Hn(),c2=require("process"),{resetDatabases:l2}=(Re(),ae(Ve)),u2={[_n.ITC_EVENT_TYPES.SCHEMA]:_2,[_n.ITC_EVENT_TYPES.USER]:RD};async function _2(e){let t=TD(e);if(t){ua.error(t);return}ua.trace("ITC schemaHandler received schema event:",e),await o2(e.message),await d2(e.message)}a(_2,"schemaHandler");async function d2(e){try{Ou.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Ou.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Ou.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=l2();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ua.error(t)}}a(d2,"syncSchemaMetadata");var gD=[];async function RD(e){try{try{Ou.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Ou.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ua.warn(r)}let t=TD(e);if(t){ua.error(t);return}ua.trace(`ITC userHandler ${_n.HDB_ITC_CLIENT_PREFIX}${c2.pid} received user event:`,e),await a2.setUsersToGlobal();for(let r of gD)r()}catch(t){ua.error(t)}}a(RD,"userHandler");RD.addListener=function(e){gD.push(e)};AD.exports=u2});var os=R((SSe,bD)=>{"use strict";var ESe=k(),WT=Y(),f2=L(),{ITC_ERRORS:Nu}=nn(),{parentPort:hSe,threadId:E2,isMainThread:h2,workerData:pSe}=require("worker_threads"),{onMessageFromWorkers:p2,broadcast:mSe,broadcastWithAcknowledgement:m2}=rt();bD.exports={sendItcEvent:S2,validateEvent:OD,SchemaEventMsg:T2,UserEventMsg:g2};var Jf;p2(async(e,t)=>{Jf=Jf||bu(),OD(e),Jf[e.type]&&await Jf[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function S2(e){return!h2&&e.message&&(e.message.originator=E2),m2(e)}a(S2,"sendItcEvent");function OD(e){if(typeof e!="object")return Nu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||WT.isEmpty(e.type))return Nu.MISSING_TYPE;if(!e.hasOwnProperty("message")||WT.isEmpty(e.message))return Nu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||WT.isEmpty(e.message.originator))return Nu.MISSING_ORIGIN;if(f2.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Nu.INVALID_EVENT(e.type)}a(OD,"validateEvent");function T2(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(T2,"SchemaEventMsg");function g2(e){this.originator=e}a(g2,"UserEventMsg")});var hi=R((RSe,wD)=>{"use strict";var ND=L(),gSe=Y(),Xf=k(),yD=jw(),Tc,{sendItcEvent:ID}=os();function R2(e){try{Xf.trace("signalSchemaChange called with message:",e),Tc=Tc||bu();let t=new yD(ND.ITC_EVENT_TYPES.SCHEMA,e);return Tc.schema(t),ID(t)}catch(t){Xf.error(t)}}a(R2,"signalSchemaChange");function A2(e){try{Xf.trace("signalUserChange called with message:",e),Tc=Tc||bu();let t=new yD(ND.ITC_EVENT_TYPES.USER,e);return Tc.user(t),ID(t)}catch(t){Xf.error(t)}}a(A2,"signalUserChange");wD.exports={signalSchemaChange:R2,signalUserChange:A2}});var Zf=R((OSe,DD)=>{"use strict";var CD=Y(),O2=L(),b2=k(),N2=Lf(),y2=Df(),I2=hi(),{SchemaEventMsg:w2}=os(),C2="already exists in";DD.exports=D2;async function D2(e,t,r){if(CD.isEmptyOrZeroLength(r))return r;let n=[];CD.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 L2(e,t.schema,t.name,i)})),s}a(D2,"lmdbCheckForNewAttributes");async function L2(e,t,r,n){let s=new y2(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await P2(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(C2))b2.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(L2,"createNewAttribute");async function P2(e){let t;return t=await N2(e),I2.signalSchemaChange(new w2(process.pid,O2.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(P2,"createAttribute")});var gc=R((NSe,LD)=>{"use strict";var QT=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}};LD.exports=QT});var MD=R((ISe,PD)=>{"use strict";var M2=gc(),U2=L().OPERATIONS_ENUM,jT=class extends M2{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(U2.INSERT,r,n,s,i),this.records=t}};PD.exports=jT});var vD=R((CSe,UD)=>{"use strict";var v2=gc(),B2=L().OPERATIONS_ENUM,zT=class extends v2{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(B2.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};UD.exports=zT});var HD=R((LSe,BD)=>{"use strict";var H2=gc(),G2=L().OPERATIONS_ENUM,JT=class extends H2{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(G2.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};BD.exports=JT});var xD=R((MSe,GD)=>{"use strict";var x2=gc(),q2=L().OPERATIONS_ENUM,XT=class extends x2{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(q2.DELETE,n,s,t,i),this.original_records=r}};GD.exports=XT});var yu=R((BSe,$D)=>{"use strict";var vSe=require("path"),qD=Ye(),F2=MD(),k2=vD(),$2=HD(),V2=xD(),Rc=_t(),FD=Y(),{CONFIG_PARAMS:Y2}=L(),kD=J();kD.initSync();var eE=L().OPERATIONS_ENUM,{getTransactionAuditStorePath:K2}=Je();$D.exports=W2;async function W2(e,t){if(kD.get(Y2.LOGGING_AUDITLOG)===!1)return;let r=K2(e.schema,e.table),n=await qD.openEnvironment(r,e.table,!0),s=Q2(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){qD.initializeDBIs(n,Rc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Rc.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Rc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Rc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),FD.isEmpty(s.user_name)||n.dbis[Rc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Rc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(W2,"writeTransaction");function Q2(e,t){let r=FD.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===eE.INSERT)return new F2(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===eE.UPDATE)return new k2(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===eE.UPSERT)return new $2(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===eE.DELETE)return new V2(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Q2,"createTransactionObject")});var ZT=R((xSe,VD)=>{"use strict";var j2=Su(),GSe=tu(),Iu=L(),z2=ru(),J2=Zo().insertRecords,X2=Ye(),Z2=k(),e4=Zf(),{getSchemaPath:t4}=Je(),r4=yu();VD.exports=n4;async function n4(e){try{let{schema_table:t,attributes:r}=j2(e);z2(e,r,t.hash_attribute),e.schema!==Iu.SYSTEM_SCHEMA_NAME&&(r.includes(Iu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Iu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Iu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Iu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await e4(e.hdb_auth_header,t,r),s=t4(e.schema,e.table),i=await X2.openEnvironment(s,e.table),o=await J2(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await r4(e,o)}catch(c){Z2.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(n4,"lmdbCreateRecords")});var WD=R((FSe,KD)=>{"use strict";var YD=L(),s4=ZT(),i4=tu(),o4=require("fs-extra"),{getSchemaPath:a4}=Je();KD.exports=c4;async function c4(e){let t=[{name:e.schema,createddate:Date.now()}],r=new i4(YD.SYSTEM_SCHEMA_NAME,YD.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await s4(r),await o4.mkdirp(a4(e.schema))}a(c4,"lmdbCreateSchema")});var jD=R(($Se,QD)=>{"use strict";var eg=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}};QD.exports=eg});var ZD=R((QSe,XD)=>{"use strict";var zD=Ye(),tg=Nr(),rg=nn().LMDB_ERRORS_ENUM,l4=_t(),JD=k(),YSe=Y(),u4=require("lmdb"),_4=jD(),d4=L(),{OVERFLOW_MARKER:KSe,MAX_SEARCH_KEY_LENGTH:WSe}=l4,f4=d4.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function E4(e,t,r,n){if(tg.validateEnv(e),t===void 0)throw new Error(rg.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(rg.IDS_REQUIRED):new Error(rg.IDS_MUST_BE_ITERABLE);try{let s=zD.listDBIs(e);zD.initializeDBIs(e,t,s);let i=new _4,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[f4]>n){i.skipped.push(o);continue}let m=e.dbis[t].ifVersion(o,u4.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let g=s[S];if(!h.hasOwnProperty(g)||g===t)continue;let T=e.dbis[g],b=h[g];if(b!=null)try{let N=tg.getIndexedValues(b);if(N)for(let U=0,v=N.length;U<v;U++)T.remove(N[U],o)}catch{JD.warn(`cannot delete from attribute: ${g}, ${b}:${o}`)}}});c.push(m),l.push(o),i.original_records.push(h)}catch(h){JD.warn(h),i.skipped.push(o)}let _=[],u=await Promise.all(c);for(let E=0,f=u.length;E<f;E++)u[E]===!0?i.deleted.push(l[E]):(i.skipped.push(l[E]),_.push(E));let d=0;for(let E=0;E<_.length;E++){let f=_[E];i.original_records.splice(f-d,1),d++}return i.txn_time=tg.getNextMonotonicTime(),i}catch(s){throw s}}a(E4,"deleteRecords");XD.exports={deleteRecords:E4}});var wu=R((zSe,tL)=>{"use strict";var Ac=Y(),h4=ZD(),p4=Ye(),{getSchemaPath:m4}=Je(),S4=yu(),T4=k();tL.exports=g4;async function g4(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ac.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ac.isEmptyOrZeroLength(e.hash_values)&&!Ac.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Ac.isEmpty(l)||e.hash_values.push(l)}}if(Ac.isEmptyOrZeroLength(e.hash_values))return eL([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ac.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=m4(e.schema,e.table),i=await p4.openEnvironment(s,e.table),o=await h4.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await S4(e,o)}catch(c){T4.error(`unable to write transaction due to ${c.message}`)}return eL(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(g4,"lmdbDeleteRecords");function eL(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(eL,"createDeleteResponse")});var sg=R((ZSe,rL)=>{"use strict";var R4=L(),XSe=Nr();function ng(e,t){let r=Object.create(null);if(t.length===1&&R4.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(ng,"parseRow");function A4(e,t,r,n){let s=ng(r,e);n.push(s)}a(A4,"searchAll");function O4(e,t,r,n){let s=ng(r,e);n[t]=s}a(O4,"searchAllToMap");function b4(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(b4,"iterateDBI");function _a(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(_a,"pushResults");function N4(e,t,r,n,s,i){t.toString().endsWith(e)&&_a(t,r,n,s,i)}a(N4,"endsWith");function y4(e,t,r,n,s,i){t.toString().includes(e)&&_a(t,r,n,s,i)}a(y4,"contains");function I4(e,t,r,n,s,i){t>e&&_a(t,r,n,s,i)}a(I4,"greaterThanCompare");function w4(e,t,r,n,s,i){t>=e&&_a(t,r,n,s,i)}a(w4,"greaterThanEqualCompare");function C4(e,t,r,n,s,i){t<e&&_a(t,r,n,s,i)}a(C4,"lessThanCompare");function D4(e,t,r,n,s,i){t<=e&&_a(t,r,n,s,i)}a(D4,"lessThanEqualCompare");rL.exports={parseRow:ng,searchAll:A4,searchAllToMap:O4,iterateDBI:b4,endsWith:N4,contains:y4,greaterThanCompare:I4,greaterThanEqualCompare:w4,lessThanCompare:C4,lessThanEqualCompare:D4,pushResults:_a}});var Oc=R((sTe,lL)=>{"use strict";var uo=Ye(),tTe=k(),dn=Nr(),tE=_t(),Tt=nn().LMDB_ERRORS_ENUM,rTe=Y(),L4=L(),rE=sg(),{parseRow:P4}=rE,nTe=require("lmdb"),{OVERFLOW_MARKER:nL,MAX_SEARCH_KEY_LENGTH:M4}=tE;function sL(e,t,r,n=!1,s=void 0,i=void 0){return da(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(sL,"iterateFullIndex");function Cu(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,_=!1){return da(e,t,r,(u,d,E,f)=>{let T={transaction:u,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!_,exclusiveStart:i===!0?_:l};return f===r?(T.values=!1,d.getRange(T).map(b=>({value:b}))):d.getRange(T)})}a(Cu,"iterateRangeBetween");function da(e,t,r,n){let s=e.database||e,i=uo.openDBI(s,r);i[tE.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&uo.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(da,"setupTransaction");function iL(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(nL)){if(!s)if(r)s=uo.openDBI(e,r);else{let l=uo.listDBIs(e);for(let _=0,u=l.length;_<u&&(s=uo.openDBI(e,l[_]),!s[tE.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(iL,"getOverflowCheck");function U4(e,t,r,n=!1,s=void 0,i=void 0){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);return da(e,t,t,(o,c,l)=>(nE(r),r=Du(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>P4(_.value,r))))}a(U4,"searchAll");function v4(e,t,r,n=!1,s=void 0,i=void 0){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);nE(r),r=Du(e.database||e,r);let o=new Map;for(let{key:c,value:l}of sL(e,t,t,n,s,i))o.set(c,rE.parseRow(l,r));return o}a(v4,"searchAllToMap");function B4(e,t,r=!1,n=void 0,s=void 0){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=sL(e,void 0,t,r,n,s),c=o.transaction,l=iL(c.database,c,void 0,t);for(let{key:_,value:u}of o){let d=l(_,u);i[d]===void 0&&(i[d]=[]),i[d].push(u)}return i}a(B4,"iterateDBI");function H4(e,t){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);return uo.statDBI(e,t).entryCount}a(H4,"countAll");function G4(e,t,r,n,s=!1,i=void 0,o=void 0){return _o(e,r,n),da(e,t,r,(c,l,_,u)=>(n=dn.convertKeyValueToWrite(n),u===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(d=>({key:n,value:d}))))}a(G4,"equals");function x4(e,t,r){return _o(e,t,r),uo.openDBI(e,t).getValuesCount(r)}a(x4,"count");function q4(e,t,r,n,s=!1,i=void 0,o=void 0){return _o(e,r,n),da(e,null,r,(c,l)=>{n=dn.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let u;if(s===!0){let d;for(let E of l.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){d=E;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),u=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==d){if(f.toString().startsWith(n))return E;if(_===!0)return u.DONE}}),u.filter(E=>E)}else return u=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return u.DONE}),_?u:u.filter(d=>d)})}a(q4,"startsWith");function F4(e,t,r,n,s=!1,i=void 0,o=void 0){return oL(e,t,r,n,s,i,o,!0)}a(F4,"endsWith");function oL(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return _o(e,r,n),da(e,null,r,(l,_,u,d)=>{let E=iL(u,l,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(nL)?_.getValues(f,{transaction:l}).map(m=>{let S=E(f,m);if(c?S.endsWith(n):S.includes(n))return{key:S,value:m}}).filter(m=>m):(c?h.endsWith(n):h.includes(n))?_[tE.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:_.getValues(f,{transaction:l}).map(m=>({key:f,value:m})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(oL,"contains");function k4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Cu(e,t,r,n,l,s,i,o,!0,!1)}a(k4,"greaterThan");function $4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Cu(e,t,r,n,l,s,i,o,!1,!1)}a($4,"greaterThanEqual");function V4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Cu(e,t,r,l,n,s,i,o,!1,!0)}a(V4,"lessThan");function Y4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Cu(e,t,r,l,n,s,i,o,!1,!1)}a(Y4,"lessThanEqual");function K4(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(dn.validateEnv(e),r===void 0)throw new Error(Tt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Tt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Tt.END_VALUE_REQUIRED);if(n=dn.convertKeyValueToWrite(n),s=dn.convertKeyValueToWrite(s),n>s)throw new Error(Tt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Cu(e,t,r,n,s,i,o,c)}a(K4,"between");function W4(e,t,r,n){dn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);if(nE(r),r=Du(s,r),n===void 0)throw new Error(Tt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=rE.parseRow(c,r)),o}a(W4,"searchByHash");function Q4(e,t,r){dn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Tt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(Q4,"checkHashExists");function j4(e,t,r,n,s=[]){return cL(e,t,r,n,s),aL(e,t,r,n,s).map(i=>i[1])}a(j4,"batchSearchByHash");function z4(e,t,r,n,s=[]){cL(e,t,r,n,s);let i=new Map;for(let[o,c]of aL(e,t,r,n,s))i.set(o,c);return i}a(z4,"batchSearchByHashToMap");function aL(e,t,r,n,s=[]){return da(e,t,t,(i,o,c)=>{r=Du(c,r);let l=r.length<3;return n.map(_=>{let u=c.dbis[t].get(_,{transaction:i,lazy:l});if(u)return[_,rE.parseRow(u,r)];s.push(_)}).filter(_=>_)})}a(aL,"batchHashSearch");function cL(e,t,r,n,s){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);if(nE(r),n==null)throw new Error(Tt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Tt.IDS_MUST_BE_ITERABLE)}a(cL,"initializeBatchSearchByHash");function nE(e){if(!Array.isArray(e))throw e===void 0?new Error(Tt.FETCH_ATTRIBUTES_REQUIRED):new Error(Tt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(nE,"validateFetchAttributes");function _o(e,t,r){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Tt.SEARCH_VALUE_REQUIRED);if(r?.length>M4)throw new Error(Tt.SEARCH_VALUE_TOO_LARGE)}a(_o,"validateComparisonFunctions");function Du(e,t){return t.length===1&&L4.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=uo.listDBIs(e)),t}a(Du,"setGetWholeRowAttributes");lL.exports={searchAll:U4,searchAllToMap:v4,count:x4,countAll:H4,equals:G4,startsWith:q4,endsWith:F4,contains:oL,searchByHash:W4,setGetWholeRowAttributes:Du,batchSearchByHash:j4,batchSearchByHashToMap:z4,checkHashExists:Q4,iterateDBI:B4,greaterThan:k4,greaterThanEqual:$4,lessThan:V4,lessThanEqual:Y4,between:K4}});var bc=R((oTe,EL)=>{var uL=require("lodash"),_L=nt(),me=require("joi"),J4=Y(),{hdb_schema_table:Lu,checkValidTable:dL,hdb_table:fL,hdb_database:sE}=Ls(),{handleHDBError:X4,hdb_errors:Z4}=ie(),{getDatabases:e3}=(Re(),ae(Ve)),{HTTP_STATUS_CODES:t3}=Z4,r3=me.object({database:sE,schema:sE,table:fL,search_attribute:Lu,search_value:me.any().required(),get_attributes:me.array().min(1).items(me.alternatives(Lu,me.object())).optional(),desc:me.bool(),limit:me.number().integer().min(1),offset:me.number().integer().min(0)}),n3=me.object({database:sE,schema:sE,table:fL,operator:me.string().valid("and","or").default("and").lowercase(),offset:me.number().integer().min(0),limit:me.number().integer().min(1),get_attributes:me.array().min(1).items(me.alternatives(Lu,me.object())).optional(),sort:me.object({attribute:me.alternatives(Lu,me.array().min(1)),descending:me.bool().optional()}).optional(),conditions:me.array().min(1).items(me.alternatives(me.object({operator:me.string().valid("and","or").default("and").lowercase(),conditions:me.array()}),me.object({search_attribute:me.alternatives(Lu,me.array().min(1)),search_type:me.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:me.when("search_type",{switch:[{is:"equals",then:me.any()},{is:"between",then:me.array().items(me.alternatives([me.string(),me.number()])).length(2)}],otherwise:me.alternatives(me.string(),me.number())}).required()}))).required()});EL.exports=function(e,t){let r=null;switch(t){case"value":r=_L.validateBySchema(e,r3);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(dL("database",e.schema)),i(dL("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=_L.validateBySchema(e,n3);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=J4.checkGlobalSchemaTable(e.schema,e.table);if(s)return X4(new Error,s,t3.NOT_FOUND);let o=e3()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(u=>{for(let d=0,E=u.conditions.length;d<E;d++){let f=u.conditions[d];f.conditions?l(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&l(e);let _=uL.filter(c,u=>u!=="*"&&!u.startsWith?.("$")&&u.attribute!=="*"&&!Array.isArray(u)&&!u.name&&!uL.some(o,d=>d===u||d.attribute===u||d.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var ig=R((cTe,hL)=>{"use strict";var s3=Ye(),i3=bc(),{getSchemaPath:o3}=Je();hL.exports=a3;function a3(e){let t=i3(e,"hashes");if(t)throw t;let r=o3(e.schema,e.table);return s3.openEnvironment(r,e.table)}a(a3,"initialize")});var og=R((uTe,pL)=>{"use strict";var c3=Oc(),l3=ig();pL.exports=u3;async function u3(e){let t=await l3(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return c3.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(u3,"lmdbGetDataByHash")});var Nc=R((dTe,mL)=>{"use strict";var ag=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};mL.exports=ag});var TL=R((hTe,SL)=>{"use strict";var ETe=Nc(),_3=Oc(),d3=ig();SL.exports=f3;async function f3(e){let t=await d3(e),r=global.hdb_schema[e.schema][e.table];return _3.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(f3,"lmdbSearchByHash")});var as=R((mTe,gL)=>{"use strict";var cg=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,_=void 0,u=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=_,this.offset=u}};gL.exports=cg});var iE=R((TTe,yL)=>{"use strict";var Er=Oc(),E3=Ye(),h3=Y(),Se=_t(),fa=L(),p3=_i(),RL=nn().LMDB_ERRORS_ENUM,{getSchemaPath:m3}=Je(),pi=fa.SEARCH_WILDCARDS;async function S3(e,t,r){let n;e.schema===fa.SYSTEM_SCHEMA_NAME?n=p3[e.table]:n=global.hdb_schema[e.schema][e.table];let s=NL(e,n.hash_attribute,r,t);return OL(e,s,n.hash_attribute,r)}a(S3,"prepSearch");async function OL(e,t,r,n){let s=m3(e.schema,e.table),i=await E3.openEnvironment(s,e.table),o=bL(i,e,t,r),c=o.transaction||i;if([Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Se.SEARCH_TYPES.SEARCH_ALL,Se.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(T3(e,r)===!1){let u=e.search_attribute;if(u===r)return n?AL(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[u]:E.key}),"toObject");return n?AL(o,d):o.map(d)}let _=e.search_attribute===r?o.map(u=>u.key):o.map(u=>u.value);return n===!0?Er.batchSearchByHashToMap(c,r,e.get_attributes,_):Er.batchSearchByHash(c,r,e.get_attributes,_)}a(OL,"executeSearch");function bL(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 Se.SEARCH_TYPES.EQUALS:s=Er.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.CONTAINS:s=Er.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.ENDS_WITH:case Se.SEARCH_TYPES._ENDS_WITH:s=Er.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.STARTS_WITH:case Se.SEARCH_TYPES._STARTS_WITH:s=Er.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Er.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Er.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Se.SEARCH_TYPES.SEARCH_ALL:return Er.searchAll(e,n,t.get_attributes,o,c,l);case Se.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Er.searchAllToMap(e,n,t.get_attributes,o,c,l);case Se.SEARCH_TYPES.BETWEEN:s=Er.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case Se.SEARCH_TYPES.GREATER_THAN:case Se.SEARCH_TYPES._GREATER_THAN:s=Er.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.GREATER_THAN_EQUAL:case Se.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Er.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.LESS_THAN:case Se.SEARCH_TYPES._LESS_THAN:s=Er.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.LESS_THAN_EQUAL:case Se.SEARCH_TYPES._LESS_THAN_EQUAL:s=Er.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(bL,"searchByType");function AL(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(AL,"createMapFromIterable");function T3(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(T3,"checkToFetchMore");function NL(e,t,r,n){if(h3.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),pi.indexOf(s)>-1)return r===!0?Se.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Se.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(pi[0])<0&&s.indexOf(pi[1])<0)return c===!0?r===!0?Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Se.SEARCH_TYPES.EQUALS;if(pi.indexOf(i)>=0&&pi.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Se.SEARCH_TYPES.CONTAINS;if(pi.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Se.SEARCH_TYPES.ENDS_WITH;if(pi.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Se.SEARCH_TYPES.STARTS_WITH;if(s.includes(pi[0])||s.includes(pi[1]))return Se.SEARCH_TYPES.EQUALS;throw new Error(RL.UNKNOWN_SEARCH_TYPE)}else switch(n){case fa.VALUE_SEARCH_COMPARATORS.BETWEEN:return Se.SEARCH_TYPES.BETWEEN;case fa.VALUE_SEARCH_COMPARATORS.GREATER:return Se.SEARCH_TYPES.GREATER_THAN;case fa.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Se.SEARCH_TYPES.GREATER_THAN_EQUAL;case fa.VALUE_SEARCH_COMPARATORS.LESS:return Se.SEARCH_TYPES.LESS_THAN;case fa.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Se.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(RL.UNKNOWN_SEARCH_TYPE)}}a(NL,"createSearchTypeFromSearchObject");yL.exports={executeSearch:OL,createSearchTypeFromSearchObject:NL,prepSearch:S3,searchByType:bL}});var wL=R((ATe,IL)=>{"use strict";var RTe=as(),g3=bc(),R3=Y(),A3=L(),O3=iE();IL.exports=b3;function b3(e,t){if(!R3.isEmpty(t)&&A3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=g3(e,"value");if(n)throw n;return O3.prepSearch(e,t,!0)}a(b3,"lmdbGetDataByValue")});var Pu=R((NTe,CL)=>{"use strict";var bTe=as(),N3=bc(),y3=Y(),I3=L(),w3=iE();CL.exports=C3;async function C3(e,t){if(!y3.isEmpty(t)&&I3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=N3(e,"value");if(n)throw n;return w3.prepSearch(e,t,!1)}a(C3,"lmdbSearchByValue")});var LL=R((wTe,DL)=>{"use strict";var ITe=_t(),lg=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}},ug=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},_g=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};DL.exports={SearchByConditionsObject:lg,SearchCondition:ug,SortAttribute:_g}});var BL=R((PTe,vL)=>{"use strict";var DTe=LL().SearchByConditionsObject,D3=as(),L3=bc(),dg=Oc(),oE=_t(),{Resource:LTe}=(Mn(),ae(fg)),UL=iE(),P3=sg(),M3=require("lodash"),{getSchemaPath:U3}=Je(),PL=Ye(),{handleHDBError:v3,hdb_errors:B3}=ie(),{HTTP_STATUS_CODES:H3}=B3,G3=1e8;vL.exports=x3;async function x3(e){let t=L3(e,"conditions");if(t)throw v3(t,t.message,H3.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=U3(e.schema,e.table),n=await PL.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)PL.openDBI(n,_.search_attribute);let i=M3.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let u=_.search_type;u===oE.SEARCH_TYPES.EQUALS?_.estimated_count=dg.count(n,_.search_attribute,_.search_value):u===oE.SEARCH_TYPES.CONTAINS||u===oE.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=G3}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await ML(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],u=i.slice(1).map(UL.filterByType),d=u.length,E=dg.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(f=>_.get(f,{transaction:o,lazy:!0})),d>0&&(l=l.filter(f=>{for(let h=0;h<d;h++)if(!u[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=>P3.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await ML(o,e,E,s.hash_attribute);c=c.concat(f)}let _=new Set,u=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(u,e.limit&&e.limit+u),l=dg.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(x3,"lmdbSearchByConditions");async function ML(e,t,r,n){let s=new D3(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===oE.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,UL.searchByType(e,s,i,n).map(o=>o.value)}a(ML,"executeConditionSearch")});var Mu=R((UTe,HL)=>{"use strict";var q3=L().OPERATIONS_ENUM,Eg=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=q3.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};HL.exports=Eg});var hg=R((BTe,YL)=>{"use strict";var FL=as(),kL=Mu(),$L=Pu(),VL=wu(),Pr=L(),GL=Y(),xL=Ye(),{getTransactionAuditStorePath:F3,getSchemaPath:k3}=Je(),qL=k();YL.exports=$3;async function $3(e){try{if(GL.isEmpty(global.hdb_schema[e.schema])||GL.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await V3(e),await Y3(e);let t=k3(e.schema,e.table);try{await xL.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")qL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=F3(e.schema,e.table);await xL.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")qL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a($3,"lmdbDropTable");async function V3(e){let t=new FL(Pr.SYSTEM_SCHEMA_NAME,Pr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Pr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Pr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await $L(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 kL(Pr.SYSTEM_SCHEMA_NAME,Pr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await VL(s)}a(V3,"deleteAttributesFromSystem");async function Y3(e){let t=new FL(Pr.SYSTEM_SCHEMA_NAME,Pr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Pr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Pr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Pr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Pr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await $L(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 kL(Pr.SYSTEM_SCHEMA_NAME,Pr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await VL(s)}catch(i){throw i}}a(Y3,"dropTableFromSystem")});var WL=R((GTe,KL)=>{"use strict";var K3=require("fs-extra"),W3=as(),Q3=Nc(),j3=Mu(),z3=hg(),J3=wu(),X3=og(),Z3=Pu(),mi=L(),{getSchemaPath:eX}=Je(),{handleHDBError:tX,hdb_errors:rX}=ie(),{HDB_ERROR_MSGS:nX,HTTP_STATUS_CODES:sX}=rX;KL.exports=iX;async function iX(e){let t;try{t=await oX(e.schema);let r=new W3(mi.SYSTEM_SCHEMA_NAME,mi.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await Z3(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await z3(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new j3(mi.SYSTEM_SCHEMA_NAME,mi.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await J3(s);let i=eX(t);await K3.remove(i)}catch(r){throw r}}a(iX,"lmdbDropSchema");async function oX(e){let t=new Q3(mi.SYSTEM_SCHEMA_NAME,mi.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await X3(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw tX(new Error,nX.SCHEMA_NOT_FOUND(e),sX.NOT_FOUND,void 0,void 0,!0);return n}a(oX,"validateDropSchema")});var Uu=R((qTe,QL)=>{"use strict";var pg=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};QL.exports=pg});var Sg=R(($Te,jL)=>{"use strict";var aX=require("fs-extra"),aE=Ye(),{getTransactionAuditStorePath:cX}=Je(),mg=_t(),kTe=Uu();jL.exports=lX;async function lX(e){let t;try{let r=cX(e.schema,e.table);await aX.mkdirp(r),t=await aE.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{aE.createDBI(t,mg.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),aE.createDBI(t,mg.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),aE.createDBI(t,mg.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(lX,"createTransactionsAuditEnvironment")});var ZL=R((YTe,XL)=>{"use strict";var Tg=L(),zL=Ye(),uX=Zo(),{getSystemSchemaPath:_X,getSchemaPath:dX}=Je(),fX=_i(),EX=Lf(),gg=Df(),hX=k(),pX=Sg(),Ag=fX.hdb_table,JL=[];for(let e=0;e<Ag.attributes.length;e++)JL.push(Ag.attributes[e].attribute);XL.exports=mX;async function mX(e,t){let r=dX(t.schema,t.table),n=new gg(t.schema,t.table,Tg.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new gg(t.schema,t.table,Tg.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new gg(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await zL.createEnvironment(r,t.table),e!==void 0){let o=await zL.openEnvironment(_X(),Tg.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await uX.insertRecords(o,Ag.hash_attribute,JL,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Rg(n),await Rg(s),await Rg(i)}await pX(t)}catch(o){throw o}}a(mX,"lmdbCreateTable");async function Rg(e){try{await EX(e)}catch(t){hX.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Rg,"createAttribute")});var tP=R((WTe,eP)=>{"use strict";var SX=Su(),TX=ru(),gX=Zf(),vu=L(),RX=Zo().updateRecords,AX=Ye(),{getSchemaPath:OX}=Je(),bX=yu(),NX=k();eP.exports=yX;async function yX(e){try{let{schema_table:t,attributes:r}=SX(e);TX(e,r,t.hash_attribute),e.schema!==vu.SYSTEM_SCHEMA_NAME&&(r.includes(vu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(vu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(vu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(vu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await gX(e.hdb_auth_header,t,r),s=OX(e.schema,e.table),i=await AX.openEnvironment(s,e.table),o=await RX(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await bX(e,o)}catch(c){NX.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(yX,"lmdbUpdateRecords")});var nP=R((jTe,rP)=>{"use strict";var IX=L().OPERATIONS_ENUM,Og=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=IX.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};rP.exports=Og});var iP=R((XTe,sP)=>{"use strict";var JTe=nP(),wX=Su(),CX=ru(),DX=Zf(),Bu=L(),LX=Zo().upsertRecords,PX=Ye(),{getSchemaPath:MX}=Je(),UX=yu(),vX=k(),{handleHDBError:BX,hdb_errors:HX}=ie();sP.exports=GX;async function GX(e){let t;try{t=wX(e)}catch(l){throw BX(l,l.message,HX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;CX(e,n,r.hash_attribute),e.schema!==Bu.SYSTEM_SCHEMA_NAME&&(n.includes(Bu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Bu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Bu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Bu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await DX(e.hdb_auth_header,r,n),i=MX(e.schema,e.table),o=await PX.openEnvironment(i,e.table),c=await LX(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await UX(e,c)}catch(l){vX.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(GX,"lmdbUpsertRecords")});var aP=R((ege,oP)=>{"use strict";var bg=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};oP.exports=bg});var lP=R((rge,cP)=>{"use strict";var Ng=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}};cP.exports=Ng});var dP=R((ige,_P)=>{"use strict";var yg=Ye(),{getTransactionAuditStorePath:xX}=Je(),sge=aP(),Hu=_t(),qX=Y(),uP=lP(),FX=require("util").promisify,kX=FX(setTimeout),$X=1e4,VX=100;_P.exports=YX;async function YX(e){let t=xX(e.schema,e.table),r=await yg.openEnvironment(t,e.table,!0),n=yg.listDBIs(r);yg.initializeDBIs(r,Hu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new uP;do s=await KX(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 kX(VX);while(s.transactions_deleted>0);return i}a(YX,"deleteAuditLogsBefore");async function KX(e,t){let r=new uP;try{let n=e.dbis[Hu.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[Hu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];qX.isEmpty(c)||(s=e.dbis[Hu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[Hu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>$X)break}return await s,r}catch(n){throw n}}a(KX,"deleteTransactions")});var EP=R((age,fP)=>{"use strict";var Ig=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};fP.exports=Ig});var pP=R((uge,hP)=>{"use strict";var WX=as(),QX=Mu(),lge=EP(),Bs=L(),jX=Y(),wg=Ye(),zX=_i(),JX=Pu(),XX=wu(),{getSchemaPath:ZX}=Je();hP.exports=eZ;async function eZ(e,t=!0){let r;e.schema===Bs.SYSTEM_SCHEMA_NAME?r=zX[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await rZ(e),s=ZX(e.schema,e.table),i=await wg.openEnvironment(s,e.table);return t===!0&&await tZ(e,i,r.hash_attribute),wg.dropDBI(i,e.attribute),n}a(eZ,"lmdbDropAttribute");async function tZ(e,t,r){let n=wg.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let _={};for(let u in c)u!==i&&(_[u]=c[u]);s=t.dbis[r].put(o,_,l)}await s}a(tZ,"removeAttributeFromAllObjects");async function rZ(e){let t=new WX(Bs.SYSTEM_SCHEMA_NAME,Bs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await JX(t)).filter(o=>o[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(jX.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new QX(Bs.SYSTEM_SCHEMA_NAME,Bs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return XX(i)}a(rZ,"dropAttributeFromSystem")});var AP=R((fge,RP)=>{"use strict";var Cg=Ye(),yc=_t(),dge=Nr(),Dg=L(),mP=Y(),{getTransactionAuditStorePath:nZ}=Je(),sZ=Oc(),cE=gc(),iZ=k();RP.exports=oZ;async function oZ(e){let t=nZ(e.schema,e.table),r=await Cg.openEnvironment(t,e.table,!0),n=Cg.listDBIs(r);Cg.initializeDBIs(r,yc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Dg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return SP(r,e.search_values);case Dg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,cZ(r,e.search_values,s);case Dg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return aZ(r,e.search_values);default:return SP(r)}}a(oZ,"readAuditLog");function SP(e,t=[0,Date.now()]){mP.isEmpty(t[0])&&(t[0]=0),mP.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[yc.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 cE,s))}a(SP,"searchTransactionsByTimestamp");function aZ(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[yc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,gP(e,i))}return Object.fromEntries(r)}a(aZ,"searchTransactionsByUsername");function cZ(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let _=t[c],u=sZ.equals(e,yc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,yc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of u){let E=Number(d);n.has(E)?n.get(E).push(_.toString()):n.set(E,[_.toString()])}}let s=Array.from(n.keys()),i=gP(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],_=l.timestamp,u=n.get(_);TP(l,"records",r,u,o),TP(l,"original_records",r,u,o)}return Object.fromEntries(o)}a(cZ,"searchTransactionsByHashValues");function TP(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 _=s.get(l),u=_[_.length-1];if(u.timestamp===i)u[t]=[c];else{let d=new cE(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new cE(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(l,[_])}}}a(TP,"loopRecords");function gP(e,t){let r=[];try{let n=e.dbis[yc.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 cE,i);r.push(o)}}catch(i){iZ.warn(i)}return r}catch(n){throw n}}a(gP,"batchSearchTransactions")});var bP=R((mge,OP)=>{"use strict";var{getSchemaPath:hge}=Je(),pge=Ye(),{database:lZ}=(Re(),ae(Ve));OP.exports={writeTransaction:uZ};async function uZ(e,t,r){return lZ({database:e,table:t}).transaction(r)}a(uZ,"writeTransaction")});var wP=R((Tge,IP)=>{"use strict";var{getSchemaPath:NP}=Je(),yP=Ye();IP.exports={flush:_Z,resetReadTxn:dZ};async function _Z(e,t){return(await yP.openEnvironment(NP(e,t),t.toString())).flushed}a(_Z,"flush");async function dZ(e,t){try{(await yP.openEnvironment(NP(e,t),t.toString())).resetReadTxn()}catch{}}a(dZ,"resetReadTxn")});var PP=R((Rge,LP)=>{"use strict";var{Readable:fZ}=require("stream"),{getDatabases:EZ}=(Re(),ae(Ve)),{readSync:hZ,openSync:pZ,createReadStream:CP}=require("fs"),{open:mZ}=require("lmdb"),DP=_u(),SZ=du(),{AUDIT_STORE_OPTIONS:TZ}=(no(),ae(MP)),{INTERNAL_DBIS_NAME:gZ,AUDIT_STORE_NAME:RZ}=_t();LP.exports=OZ;var Lg=32768,AZ=100;async function OZ(e){let t=e.database||e.schema||"data",r=EZ()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let u=_.dbisDB,d=mZ({noSync:!0,maxDbs:SZ.MAX_DBS}),E,f=d.openDB(gZ,new DP(!1)),h=u.useReadTransaction(),m=0,S=a(async function(T,b){b.encoding="binary",b.encoder=void 0;let N=d.openDB(T,b),U=u.openDB(T,b);for(let{key:v,version:q,value:M}of U.getRange({start:null,transaction:h,versions:U.useVersions}))E=N.put(v,M,q),m++%AZ===0&&(await new Promise(W=>setTimeout(W,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:T,value:b}of u.getRange({transaction:h,start:!1}))if(s.some(N=>T.startsWith?.(N+"/"))){f.put(T,b);let[,N]=T.split("/"),U=!N,v=new DP(!U,U);await S(T,v)}e.include_audit&&await S(RZ,Object.assign({},TZ)),await E;let g=CP(d.path);return g.headers=l(),g.on("close",()=>{h.done(),d.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=pZ(o.path);return o.transaction(()=>{let _=Buffer.alloc(Lg);hZ(c,_,0,Lg),o.resetReadTxn();let u=o.useReadTransaction();u.renew();let d=CP(null,{fd:c,start:Lg}),E=new fZ.from(async function*(){yield _;for await(let f of d)u.openTimer&&(u.openTimer=0),yield f;u.done()}());return E.headers=l(),E});function l(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(OZ,"getBackup")});var BP=R((Oge,vP)=>{"use strict";var bZ=k(),{handleHDBError:NZ}=ie(),yZ=ew(),IZ=Lf(),wZ=ZT(),CZ=WD(),DZ=wu(),LZ=og(),PZ=TL(),MZ=wL(),UZ=Pu(),vZ=BL(),BZ=WL(),HZ=ZL(),GZ=tP(),xZ=iP(),qZ=dP(),FZ=hg(),kZ=pP(),$Z=AP(),VZ=bP(),UP=wP(),YZ=PP(),Pg=class extends yZ{static{a(this,"LMDBBridge")}async searchByConditions(t){return vZ(t)}async getDataByHash(t){return await LZ(t)}async searchByHash(t){return await PZ(t)}async getDataByValue(t,r){return await MZ(t,r)}async searchByValue(t){return await UZ(t)}async createSchema(t){return await CZ(t)}async dropSchema(t){return await BZ(t)}async createTable(t,r){return await HZ(t,r)}async dropTable(t){return await FZ(t)}async createAttribute(t){return await IZ(t)}async createRecords(t){return await wZ(t)}async updateRecords(t){return await GZ(t)}async upsertRecords(t){try{return await xZ(t)}catch(r){throw NZ(r,null,null,bZ.ERR,r)}}async deleteRecords(t){return await DZ(t)}async dropAttribute(t){return await kZ(t)}async deleteAuditLogsBefore(t){return await qZ(t)}async readAuditLog(t){return await $Z(t)}writeTransaction(t,r,n){return VZ.writeTransaction(t,r,n)}flush(t,r){return UP.flush(t,r)}resetReadTxn(t,r){return UP.resetReadTxn(t,r)}getBackup(t){return YZ(t)}};vP.exports=Pg});function jZ(){QZ=setInterval(function(){for(let e of Mg)if(e.stale){let t=e[Ie]?.url;qP.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},WZ).unref()}var Ug,xP,qP,FP,kP,$P,HP,Mg,KZ,Gu,GP,Ea,lE,WZ,QZ,vg=be(()=>{Ug=G(Nr()),xP=G(ie()),qP=G(k());Mn();FP=G(J()),kP=G(L()),$P=G(Y()),HP=100,Mg=new Set,KZ=(0,$P.convertToMS)(FP.get(kP.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,Ea=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),Mg.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Mg.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(Gu&&!this.overloadChecked&&performance.now()-GP>KZ)throw new xP.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=t.timestamp||(0,Ug.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length)try{let d=this.validated;this.validated=this.writes.length;for(let f=d;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let E;for(let f=d;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 m=d;m<this.validated;m++){let S=this.writes[m];if(!S)continue;let g=S[f===0?"before":"beforeIntermediate"];if(g){let T=g();h?h.push?h.push(T):h=[h,T]:h=T}}h&&await(h.push?Promise.all(h):h)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(d){throw this.abort(),d}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(d=>d);let c=a(d=>{d.commit(r,d.entry,n)},"doWrite"),l=a(()=>{let d=this.writes[o++];if(d)if(d.key){n>0&&(d.entry=d.store.getEntry(d.key));let E=d.store.ifVersion(d.key,d.entry?.version??null,l);s=s||E}else l();else for(let E of this.writes)c(E)},"nextCondition"),_=this.lmdbDb;if(this.writes.length>0&&(_?.retryRisk&&(_.retryRisk*=.99),this.writes.length+(_?.retryRisk||0)<HP>>n?l():s=this.writes[0].store.transaction(()=>{for(let d of this.writes)d.entry=d.store.getEntry(d.key),c(d);return!0})),s)return Gu||(Gu=s,GP=performance.now(),Gu.then(()=>{Gu=null})),s.then(d=>d?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(_&&(_.retryRisk=(_.retryRisk||0)+HP/2),t?t.retries=n+1:t={retries:1},this.commit(t)));let u={txnTime:r};if(this.next){let d=this.next?.commit(t);if(d?.then)return d?.then(E=>({txnTime:r,next:E}));u.next=d}return u}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},lE=class extends Ea{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Ug.getNextMonotonicTime)())}getReadTxn(){}},WZ=3e4;a(jZ,"startMonitoringTxns");jZ()});function it(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 Ea;e.timestamp&&(n.timestamp=e.timestamp),n[Ie]=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 VP,ha=be(()=>{VP=require("../index");Mn();vg();a(it,"transaction");(0,VP._assignPackageExport)("transaction",it);it.commit=function(e){let t=(e[Ie]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};it.abort=function(e){let t=(e[Ie]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var XP={};$e(XP,{ResourceBridge:()=>Gg});function xg({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 KP(e,t){let r=Hs(e),n=xg(e,r);if(!r)throw new cs.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},o;it(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let _=c[l++],u;try{u=await r.get({id:_,lazy:s,select:n},i),u=u&&_E(u)}catch(d){u={message:d.toString()}}return t?{value:{key:_,value:u}}:{value:u}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function Hs(e){let t=e.database||e.schema||JZ,r=Mr()[t];if(!r)throw(0,cs.handleHDBError)(new Error,zZ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function WP(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*QP(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:l}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(l)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[l]})}n&&(yield n)}var jP,uE,cs,zP,ls,Bg,Hg,JP,zZ,JZ,XZ,ZZ,YP,Gg,ZP=be(()=>{"use strict";jP=G(BP()),uE=G(bc()),cs=G(ie());Re();zP=G(Su()),ls=G(L()),Bg=G(hi()),Hg=G(os()),JP=G(Y());ha();dE();({HDB_ERROR_MSGS:zZ}=cs.hdb_errors),JZ="data",XZ=1e4,ZZ=10,Gg=class extends jP.default{static{a(this,"ResourceBridge")}constructor(t){super(t),YP=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,uE.default)(t,"conditions");if(r)throw(0,cs.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Hs(t);if(!n)throw new cs.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:xg(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache})}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 cs.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}]}St({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await Hs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Hs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(_=>{if(!_){let{value:u,version:d}=r.primaryStore.getEntry(o);return i(o,u,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(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Hs(t).dropTable()}createSchema(t){return Ic({database:t.schema,table:null}),Bg.signalSchemaChange(new Hg.SchemaEventMsg(process.pid,ls.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await qg(t.schema),Bg.signalSchemaChange(new Hg.SchemaEventMsg(process.pid,ls.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,YP.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,zP.default)(t),s,i=Mr()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return it(o,async c=>{if(!i.schemaDefined){s=[];for(let u of n)i.attributes.find(E=>E.name==u)||s.push(u);s.length>0&&await i.addAttributes(s.map(u=>({name:u,indexed:!0})))}let l=[],_=[];for(let u of t.records){let d=u[i.primaryKey],E=d!=null&&await i.get(d,o);if(t.requires_existing&&!E||t.requires_no_existing&&E){_.push(u[i.primaryKey]);continue}E&&(E=_E(E));for(let f in u)if(Object.prototype.hasOwnProperty.call(u,f)){let h=u[f];if(typeof h=="function")try{let m=h([[E]]);Array.isArray(m)&&(h=m[0].func_val,u[f]=h)}catch(m){throw m.message+="Trying to set key "+f+" on object"+JSON.stringify(u),m}}if(E)for(let f in E)Object.prototype.hasOwnProperty.call(u,f)||(u[f]=E[f]);await(d==null?i.create(u,o):i.put(u,o)),l.push(u[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=Mr()[t.schema][t.table],n={user:t.hdb_user};return it(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 WP(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Mr()[t.schema][t.table];if(!r.createdTimeProperty)throw new cs.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:ls.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],_=a(async()=>{let u=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...u.deleted_hashes),o.push(...u.skipped_hashes),await(0,JP.async_set_timeout)(ZZ),l=[],s=!0},"chunkDelete");for await(let u of n)l.push(u[r.primaryKey]),c++,c%XZ===0&&await _();return l.length>0&&await _(),s?WP(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,uE.default)(t,"hashes");if(r)throw r;return KP(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of KP(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&ls.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,uE.default)(t,"value");if(n)throw n;let s=Hs(t);if(!s)throw new cs.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===ls.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:xg(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache})}async getDataByValue(t,r){let n=new Map,s=Hs(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){Hs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Hs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Hs(t),n={};switch(t.search_type){case ls.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.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case ls.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of QP(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return QP(r,t.search_values?.[0],t.search_values?.[1])}}};a(xg,"getSelect");a(KP,"getRecords");a(Hs,"getTable");a(WP,"createDeleteResponse");a(QP,"groupRecordsInHistory")});var Hn=R((Gge,eM)=>{"use strict";var{ResourceBridge:e5}=(ZP(),ae(XP)),t5=J();t5.initSync();var fE;function r5(){return fE||(fE=new e5,fE)}a(r5,"getBridge");eM.exports=r5()});var sM=R((qge,nM)=>{"use strict";var tM=require("lodash"),xu=require("mathjs"),n5=require("jsonata"),rM=Y();nM.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?tM.uniqWith(e,tM.isEqual):e,searchJSON:s5,mad:qu.bind(null,xu.mad),mean:qu.bind(null,xu.mean),mode:qu.bind(null,xu.mode),prod:qu.bind(null,xu.prod),median:qu.bind(null,xu.median)};function qu(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(qu,"aggregateFunction");function s5(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(rM.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),rM.isEmpty(this.__ala__.res[r])){let n=n5(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(s5,"searchJSON")});var oM=R((kge,iM)=>{"use strict";var It=require("moment"),Fg="YYYY-MM-DDTHH:mm:ss.SSSZZ";It.suppressDeprecationWarnings=!0;iM.exports={current_date:()=>It().utc().format("YYYY-MM-DD"),current_time:()=>It().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return It(e).utc().format("YYYY");case"month":return It(e).utc().format("MM");case"day":return It(e).utc().format("DD");case"hour":return It(e).utc().format("HH");case"minute":return It(e).utc().format("mm");case"second":return It(e).utc().format("ss");case"millisecond":return It(e).utc().format("SSS");default:break}},date:e=>It(e).utc().format(Fg),date_format:(e,t)=>It(e).utc().format(t),date_add:(e,t,r)=>It(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>It(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=It(e).utc(),s=It(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>It().utc().valueOf(),get_server_time:()=>It().format(Fg),offset_utc:(e,t)=>It(e).utc().utcOffset(t).format(Fg)}});var uM=R(($ge,lM)=>{"use strict";var i5=require("@turf/area"),o5=require("@turf/length"),a5=require("@turf/circle"),c5=require("@turf/difference"),l5=require("@turf/distance"),u5=require("@turf/boolean-contains"),_5=require("@turf/boolean-equal"),d5=require("@turf/boolean-disjoint"),f5=require("@turf/helpers"),aM=L(),Ae=Y(),Si=k();lM.exports={geoArea:E5,geoLength:h5,geoCircle:p5,geoDifference:m5,geoDistance:cM,geoNear:S5,geoContains:T5,geoEqual:g5,geoCrosses:R5,geoConvert:A5};function E5(e){if(Ae.isEmpty(e))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return i5.default(e)}catch(t){return Si.trace(t,e),NaN}}a(E5,"geoArea");function h5(e,t){if(Ae.isEmpty(e))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return o5.default(e,{units:t||"kilometers"})}catch(r){return Si.trace(r,e),NaN}}a(h5,"geoLength");function p5(e,t,r){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return a5.default(e,t,{units:r||"kilometers"})}catch(n){return Si.trace(n,e,t),NaN}}a(p5,"geoCircle");function m5(e,t){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return c5(e,t)}catch(r){return Si.trace(r,e,t),NaN}}a(m5,"geoDifference");function cM(e,t,r){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return l5.default(e,t,{units:r||"kilometers"})}catch(n){return Si.trace(n,e,t),NaN}}a(cM,"geoDistance");function S5(e,t,r,n){if(Ae.isEmpty(e)||Ae.isEmpty(t))return!1;if(Ae.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return cM(e,t,n)<=r}catch(s){return Si.trace(s,e,t),!1}}a(S5,"geoNear");function T5(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return u5.default(e,t)}catch(r){return Si.trace(r,e,t),!1}}a(T5,"geoContains");function g5(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return _5.default(e,t)}catch(r){return Si.trace(r,e,t),!1}}a(g5,"geoEqual");function R5(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return!d5.default(e,t)}catch(r){return Si.trace(r,e,t),!1}}a(R5,"geoCrosses");function A5(e,t,r){if(Ae.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ae.isEmpty(t))throw new Error("geo_type is required");if(Ae.isEmpty(aM.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(aM.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ae.autoCastJSON(e)),f5[t](e,r)}a(A5,"geoConvert")});var EE=R((Yge,_M)=>{var pa=sM(),fn=oM(),Gs=uM();_M.exports=e=>{e.aggr.mad=e.aggr.MAD=pa.mad,e.aggr.mean=e.aggr.MEAN=pa.mean,e.aggr.mode=e.aggr.MODE=pa.mode,e.aggr.prod=e.aggr.PROD=pa.prod,e.aggr.median=e.aggr.MEDIAN=pa.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=pa.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=pa.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=fn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=fn.current_time,e.fn.extract=e.fn.EXTRACT=fn.extract,e.fn.date=e.fn.DATE=fn.date,e.fn.date_format=e.fn.DATE_FORMAT=fn.date_format,e.fn.date_add=e.fn.DATE_ADD=fn.date_add,e.fn.date_sub=e.fn.DATE_SUB=fn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=fn.date_diff,e.fn.now=e.fn.NOW=fn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=fn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=fn.get_server_time,e.fn.getdate=e.fn.GETDATE=fn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=fn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Gs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Gs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Gs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Gs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Gs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Gs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Gs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Gs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Gs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Gs.geoNear}});var hM=R((Kge,EM)=>{"use strict";var Fu=require("lodash"),Ur=require("alasql");Ur.options.cache=!1;var O5=EE(),dM=require("clone"),hE=require("recursive-iterator"),he=k(),Me=Y(),wc=Hn(),b5=L(),{hdb_errors:N5}=ie(),{getDatabases:fM}=(Re(),ae(Ve)),y5="IS NULL",us="There was a problem performing this search. Please check the logs and try again.";O5(Ur);var kg=class{static{a(this,"SQLSearch")}constructor(t,r){if(Me.isEmpty(t))throw he.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(),Me.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Me.isEmptyOrZeroLength(n))return he.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw he.error("Error thrown from checkEmptySQL in SQLSearch class method search."),he.error(n),new Error(us)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw he.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),he.error(n),new Error(us)}if(Object.keys(this.data).length===0)return he.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw he.error("Error thrown from processJoins in SQLSearch class method search."),he.error(n),new Error(us)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw he.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),he.error(n),new Error(us)}try{return t=await this._finalSQL(),t}catch(n){throw he.error("Error thrown from finalSQL in SQLSearch class method search."),he.error(n),new Error(us)}}_getColumns(){let t=new hE(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(dM(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Fu.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=fM()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Me.isEmpty(this.statement.where)){he.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new hE(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Me.isEmpty(r)&&r.right)if(Me.isNotEmptyAndHasValue(r.right.value)){let n=Me.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Ur.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Me.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Ur.yy.LogicValue({value:i}):n instanceof Ur.yy.StringValue&&Me.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Ur.yy.NumValue({value:i}))});if(t){he.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new hE(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(!Me.isEmpty(b5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Me.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Me.isEmptyOrZeroLength(r.left.columnid)||Me.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(Me.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"=":!Me.isEmpty(r.right.value)||!Me.isEmpty(r.left.value)?n.add(Me.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 _=0;_<l.length;_++)if(l[_].value)n.add(l[_].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(Me.isEmptyOrZeroLength(this.all_table_attributes)&&Me.isEmptyOrZeroLength(this.statement.from)&&Me.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&&Fu.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(Me.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Me.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(Me.isEmptyOrZeroLength(this.all_table_attributes)&&!Me.isEmptyOrZeroLength(this.columns.columns))return t;if(Me.isEmptyOrZeroLength(this.all_table_attributes)&&Me.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Ur.promise(r)}catch(r){throw he.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),he.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(dM(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(Me.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(y5)>-1&&this.tables.forEach(s=>{let i={columnid:fM()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Fu.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,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!Me.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Me.isEmptyOrZeroLength(this.exact_search_values[_].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[_].values);let u=await wc.getDataByHash(c);for(let d of c.hash_values)u.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(u){throw he.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),he.error(u),new Error(us)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async u=>{let d=Object.assign({},c);d.search_value=u;let E=await wc.getDataByValue(d);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(u){throw he.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),he.error(u),new Error(us)}else if(!Me.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Me.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let u=this.comparator_search_values[_].comparators;for(let d=0,E=u.length;d<E;d++){let f=u[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await wc.getDataByValue(c,f.operation);if(l)for(let[m]of h)this.data[i].__merged_data[m]||(this.data[i].__merged_data[m]=[...n[i]],this._setMergedHashAttribute(i,m));else for(let[m,S]of h)this.data[i].__merged_data[m]?this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]):(this.data[i].__merged_data[m]=[...n[i]],this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,m))}}catch(u){throw he.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),he.error(u),new Error(us)}else try{c.search_attribute=s.attribute,c.search_value="*";let u=await wc.getDataByValue(c);if(l)for(let[d]of u)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,E]of u)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]),this._setMergedHashAttribute(i,d))}catch(u){throw he.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),he.error(u),new Error(us)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof Ur.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 Ur.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Ur.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 Ur.yy.FuncValue:new Ur.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,m=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${m}.${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 "${m}.${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 _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(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 u="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(u=this.statement.limit?"LIMIT "+this.statement.limit:"",d=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 Ur.promise(h,t),t=null}catch(f){throw he.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),he.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 m=E[f];o.forEach(S=>{m[S.key]!==null&&m[S.key]!==void 0&&S.keys.add(m[S.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),m=Fu.difference(h,[...f.keys].map(S=>S.toString()));for(let S=0,g=m.length;S<g;S++){let T=m[S];delete this.data[`${f.schema}_${f.table}`].__merged_data[T]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new hE(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=Fu.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 he.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),he.error(i),new Error(us)}}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 u in i)o.push(i[u][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 wc.getDataByHash(c),_=s.columns.length;for(let u=0,d=o.length;u<d;u++){let E=o[u],f=l.get(E);for(let h=0;h<_;h++){let m=s.columns[h],S=f[m]===void 0?null:f[m];this.data[n].__merged_data[E].push(S)}}}}catch(r){throw he.error("Error thrown from getDataByHash function in SQLSearch class method getData."),he.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();he.trace(`Final SQL: ${s}`),n=await Ur.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),he.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw he.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),he.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 he.error(N5.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),he.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],_=new RegExp(`${l}.\`${o}\``,"g"),u=`${l}.[${c}]`;n=n.replace(_,u)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(l,_)});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 wc.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]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw he.error("There was an error when processing this SQL operation. Check your logs"),he.error(o),new Error(us)}}return Object.values(Object.values(this.data)[0].__merged_data)}};EM.exports=kg});var ur=R((Qge,pM)=>{"use strict";var I5=XI();pM.exports={searchByConditions:C5,searchByHash:D5,searchByValue:L5,search:P5};var $g=Hn(),{transformReq:Vg}=Y(),w5=hM();async function C5(e){return Vg(e),$g.searchByConditions(e)}a(C5,"searchByConditions");async function D5(e){Vg(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of $g.searchByHash(e))r&&t.push(r);return t}a(D5,"searchByHash");async function L5(e){Vg(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of $g.searchByValue(e))t.push(r);return t}a(L5,"searchByValue");function P5(e,t){try{let r=new I5(e);r.validate(),new w5(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(P5,"search")});var pE=R((zge,mM)=>{"use strict";var M5=Hn();mM.exports={writeTransaction:U5};function U5(e,t,r){return M5.writeTransaction(e,t,r)}a(U5,"writeTransaction")});var RM=R((Zge,gM)=>{"use strict";var v5=ur(),B5=Bn(),SM=k(),H5=Cr(),Xge=pE(),G5=require("clone"),Kg=require("alasql"),x5=EE(),TM=require("util"),q5=TM.promisify(B5.getTableSchema),F5=TM.promisify(v5.search),k5=L(),Yg=Y();x5(Kg);gM.exports={update:V5};var $5="There was a problem performing this update. Please check the logs and try again.";async function V5({statement:e,hdb_user:t}){let r=await q5(e.table.databaseid,e.table.tableid),n=Y5(e.columns);Yg.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=G5(s),c=Yg.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=Kg.parse(l).statements[0],u=await F5(_),d=K5(n,u);return W5(o,d,t)}a(V5,"update");function Y5(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Kg.compile(`SELECT ${r.expression.toString()} AS [${k5.FUNC_VAL}] FROM ?`)}),t}catch(t){throw SM.error(t),new Error($5)}}a(Y5,"createUpdateRecord");function K5(e,t){return Yg.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(K5,"buildUpdateRecords");async function W5(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await H5.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){SM.error(`Error delete new_attributes from update response: ${i}`)}return s}a(W5,"updateRecords")});var OM=R((nRe,AM)=>{var Q5=require("alasql"),j5=ur(),z5=k(),J5=Hn(),Qg=require("util"),Wg=Y(),X5=L(),Z5=Bn(),tRe=pE(),rRe=Cr(),e8="record",t8="successfully deleted",r8=Qg.callbackify(o8),n8=Qg.promisify(j5.search),s8=Qg.promisify(Z5.getTableSchema);AM.exports={convertDelete:r8};function i8(e){return`${e.deleted_hashes.length} ${e8}${e.deleted_hashes.length===1?"":"s"} ${t8}`}a(i8,"generateReturnMessage");async function o8({statement:e,hdb_user:t}){let r=await s8(e.table.databaseid,e.table.tableid);Wg.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Wg.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Q5.parse(o).statements[0],l={operation:X5.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await n8(c);let _=await J5.deleteRecords(l);return Wg.isEmptyOrZeroLength(_.message)&&(_.message=i8(_)),delete _.txn_time,_}catch(_){throw z5.error(_),_.hdb_code?_.message:_}}a(o8,"convertDelete")});var wM=R((iRe,IM)=>{"use strict";var a8=Ei(),{hdb_errors:bM}=ie(),{getDatabases:NM}=(Re(),ae(Ve));IM.exports={checkSchemaExists:yM,checkSchemaTableExists:c8,schema_describe:a8};async function yM(e){if(!NM()[e])return bM.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(yM,"checkSchemaExists");async function c8(e,t){let r=await yM(e);if(r)return r;if(!NM()[e][t])return bM.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(c8,"checkSchemaTableExists")});var ma=R((aRe,l8)=>{l8.exports={name:"harperdb",version:"4.3.29",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",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.635.0","@aws-sdk/lib-storage":"3.635.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.12.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.8",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.26.2","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.1.3",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.30.1","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.19.0",needle:"3.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.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.22.9","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.17.1",yaml:"2.4.1"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.8",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.20.2",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.3.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.22.11","newman-reporter-teamcity":"0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.4.2","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var Ku={};$e(Ku,{addAnalyticsListener:()=>Yu,recordAction:()=>vr,recordActionBinary:()=>En,setAnalyticsEnabled:()=>u8});function u8(e){HM=e}function vr(e,t,r,n,s){if(!HM)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=TE.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let _=c;o.values=c=new Float32Array(l*2),c.set(_),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},TE.set(i,o)}mE||_8()}function En(e,t,r,n,s){vr(!!e,t,r,n,s)}function Yu(e){qM.push(e)}function _8(){mE=performance.now(),setTimeout(async()=>{let e=performance.now()-mE;mE=0;let t=[],r={time:Date.now(),period:e,threadId:Sa.threadId,metrics:t};for(let[s,i]of TE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,_=[],u;for(let d of FM){let E=Math.floor(c*d),f=o[E-1];if(E>l){let h=E-l;if(f===u){let m=_[_.length-1];typeof m=="number"?_[_.length-1]={value:m,count:1+h}:m.count+=h}else _.push(h>1?{value:f,count:h}:f),u=f;l=E}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await kM()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Sa.threadId,byThread:!0,...n});for(let s of qM)s(t);TE=new Map,Sa.parentPort?Sa.parentPort.postMessage({type:xM,report:r}):YM({report:r})},GM).unref()}async function d8(e,t=6e4){let r=Jg(),n=$M(),s=new Promise(m=>{let S=performance.now();setImmediate(()=>{let g=performance.now();g-S>5e3&&(0,ku.warn)("Unusually high event queue latency on the main thread of "+Math.round(g-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let g=performance.now();g-S>5e3&&(0,ku.warn)("Unusually high task queue latency on the main thread of "+Math.round(g-S)+"ms"),m(g-S)})}),i;for(let m of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(m.value?.time){i=m.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,_=[],u;for(let{key:m,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(m>o+t)break}else o=m;u=m;let{metrics:g,threadId:T}=S;for(let b of g||[]){let{path:N,method:U,type:v,metric:q,count:M,total:W,distribution:z,threads:X,...ce}=b;M||(M=1);let _e=q+(N?"-"+N:"");U!==void 0&&(_e+="-"+U),v!==void 0&&(_e+="-"+v);let de=c.get(_e);if(de){if(de.threads){let we=de.threads[T];if(we)de=we;else{de.threads[T]=Object.assign({},ce);continue}}de.count||(de.count=1);let Ge=de.count;for(let we in ce){let xe=ce[we];typeof xe=="number"&&(de[we]=(de[we]*Ge+xe*M)/(Ge+M))}de.count+=M,W>=0&&(de.total+=W,de.ratio=de.total/de.count)}else de=Object.assign({period:t},b),delete de.distribution,c.set(_e,de),de.byThread&&(de.threads=[],de.threads[T]=Object.assign({},ce),_.push(de));if(z){z=z.map(we=>typeof we=="number"?{value:we,count:1}:we);let Ge=l.get(_e);Ge?Ge.push(...z):l.set(_e,z)}}await kM()}for(let m of _){let{path:S,method:g,type:T,metric:b,count:N,total:U,distribution:v,threads:q,...M}=m;q=q.filter(W=>W);for(let W in M){if(typeof m[W]!="number")continue;let z=0;for(let X of q){let ce=X[W];typeof ce=="number"&&(z+=ce)}m[W]=z}m.count=q.length,delete m.threads,delete m.byThread}for(let[m,S]of l){let g=c.get(m);S.sort((we,xe)=>we.value>xe.value?1:-1);let T=g.count-1,b=[],N=0,U=0,v;for(let we of FM){let xe=T*we;for(;N<xe;)v=S[U++],N+=v.count,U===1&&N--;let Wd=S[U>1?U-2:0];v||(v=S[0]),b.push(v.value-(v.value-Wd.value)*(N-xe)/v.count)}let[q,M,W,z,X,ce,_e,de,Ge]=b;Object.assign(g,{p1:q,p10:M,p25:W,median:z,p75:X,p90:ce,p95:_e,p99:de,p999:Ge})}let d;for(let[m,S]of c)S.id=(0,SE.getNextMonotonicTime)(),S.time=u,n.primaryStore.put(S.id,S,{append:!0}).then(g=>{g||n.primaryStore.put(S.id,S)}),d=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(d||h*10>f){let m=(0,SE.getNextMonotonicTime)(),S={id:m,metric:"main-thread-utilization",idle:f-CM,active:h-DM,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(m,S,{append:!0}).then(g=>{g||n.primaryStore.put(m,S)})}CM=f,DM=h}async function LM(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Jg(){return PM||(PM=St({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function $M(){return MM||(MM=St({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function h8(){VM=!0;let e=(0,Vu.get)(zg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await d8(GM,e),await LM(Jg(),f8),await LM($M(),E8)},Math.min(e/2,2147483647)).unref()}function YM(e,t){let r=e.report;r.threadId=t?.threadId||Sa.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(UM+=n.mean*n.count);r.totalBytesProcessed=UM,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(vM.get(t))}),vM.set(t,t.performance.eventLoopUtilization())),r.id=(0,SE.getNextMonotonicTime)(),Jg().primaryStore.put(r.id,r),VM||h8(),p8&&(KM=S8(r))}async function S8(e){if(await KM,!fo){let r=(0,$u.dirname)((0,ku.getLogFilePath)());try{fo=await(0,jg.open)((0,$u.join)(r,"analytics.log"),"r+")}catch{fo=await(0,jg.open)((0,$u.join)(r,"analytics.log"),"w+")}}let t=(await fo.stat()).size;if(t>m8){let r=Buffer.alloc(t);await fo.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await fo.write(r,{position:0}),await fo.truncate(r.length),t=r.length}await fo.write(JSON.stringify(e)+`
|
|
10
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw Bt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}mJ(n,r),PT(n);let s=n.toJSON();if(lJ.config=s,Ht=Ec(s),Ht.logging_rotation_rotate)for(let i in FC)Ht[i]&&Bt.error(`Config ${FC[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Bt.trace(_J)}}a(LT,"initConfig");function mJ(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ss.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ss.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ss.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),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&&(Bt.trace("Updating config file with missing config params"),Dr.writeFileSync(t,String(e)))}a(mJ,"checkForUpdatedConfig");function PT(e,t=!1){let r=e.toJSON();r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads);let n=nJ(r,t);if(n.error)throw Vf.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(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket)}a(PT,"validateConfig");function SJ(e,t){Ht===void 0&&(Ht={});let r=is[e.toLowerCase()];if(r===void 0){Bt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ht[r.toLowerCase()]=t}a(SJ,"updateConfigObject");function KC(e,t,r=void 0,n=!1,s=!1,i=!1){Ht===void 0&<();let o=YC(is.hdb_root),c=ss.join(o,ln.HDB_CONFIG_FILE),l=co(c),_;if(r===void 0&&e.toLowerCase()===cn.DATABASES)_=t;else if(r===void 0){let E;if(i)E=e;else if(E=is[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=DT(E,t);l.setIn([...f],h)}else for(let E in r){let f=is[E.toLowerCase()];if(f===cn.HTTP_SECUREPORT&&r[E]===Ht[cn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),f===cn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===Ht[cn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),f===cn.DATABASES){_=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("_"),m=ln.LEGACY_CONFIG_PARAMS[E.toUpperCase()];m&&m.startsWith("customFunctions")&&l.hasIn(m.split("_"))&&(f=m,h=m.split("_"));let S=DT(f,r[E]);f==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],S)}catch(g){Bt.error(g)}}}_&&VC(l,_),PT(l);let u=l.getIn(["rootPath"]),d=ss.join(u,ln.HDB_CONFIG_FILE);n===!0&&TJ(c,u),Dr.writeFileSync(d,String(l)),s&&(Ht=Ec(l.toJSON())),Bt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(KC,"updateConfigValue");function TJ(e,t){try{let r=ss.join(t,"backup",`${ln.HDB_CONFIG_FILE}.bak`);Dr.copySync(e,r),Bt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Bt.error(dJ),Bt.error(r)}}a(TJ,"backupConfigFile");var gJ=["databases"];function Ec(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),Kf=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])&&!gJ.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;!cn[l.toUpperCase()]&&is[l]&&(s[is[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Ec,"flattenConfig");function DT(e,t){if(e===cn.CLUSTERING_NODENAME||e===cn.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(iJ(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Kt.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 Kt.autoCast(t)}a(DT,"castConfigValue");function RJ(){let e=Kt.getPropsFilePath(),t=ca(e);return co(t).toJSON()}a(RJ,"getConfiguration");async function AJ(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return KC(void 0,void 0,s,!0),EJ}catch(i){throw typeof i=="string"||i instanceof String?aJ(i,i,cJ.BAD_REQUEST,void 0,void 0,!0):i}}a(AJ,"setConfiguration");function MT(){let e=Kt.getPropsFilePath();try{Dr.accessSync(e,Dr.constants.F_OK|Dr.constants.R_OK)}catch(n){if(!Kt.noBootFile())throw Bt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ca(e);return co(t).toJSON()}a(MT,"readConfigFile");function co(e){return sJ.parseDocument(Dr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(co,"parseYamlDoc");function OJ(){let e=MT(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Kt.isEmptyOrZeroLength(t)?[]:t;let r=qC(t);if(r)throw Vf.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Kt.isEmptyOrZeroLength(n)?[]:n;let s=qC(n);if(s)throw Vf.CONFIG_VALIDATION(s.message);if(!Kt.isEmptyOrZeroLength(n)&&!Kt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Kt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Vf.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(OJ,"getClusteringRoutes");function WC(e){let t=kC(e);Ht={};for(let r in is){let n=t.get(r.toUpperCase());if(Kt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=is[r].toLowerCase();s===cn.LOGGING_ROOT?Ht[s]=ss.dirname(n):Ht[s]=n}return Ht}a(WC,"initOldConfig");function bJ(e){let t=MT();return oJ.get(t,e.replaceAll("_","."))}a(bJ,"getConfigFromFile");async function NJ(e,t){let r=co(ca());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Dr.writeFile(ca(),String(r))}a(NJ,"addConfig");function yJ(e){let t=ca(Kt.getPropsFilePath()),r=co(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=ss.join(n,ln.HDB_CONFIG_FILE);Dr.writeFileSync(s,String(r))}a(yJ,"deleteConfigFromFile");function IJ(){return Kf||(LT(),Kf)}a(IJ,"getConfigObj")});var zC=R((tSe,jC)=>{"use strict";var Wf=L(),Qf=class{static{a(this,"BaseLicense")}constructor(t=0,r=Wf.RAM_ALLOCATION_ENUM.DEFAULT,n=Wf.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},UT=class extends Qf{static{a(this,"ExtendedLicense")}constructor(t=0,r=Wf.RAM_ALLOCATION_ENUM.DEFAULT,n=Wf.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};jC.exports={BaseLicense:Qf,ExtendedLicense:UT}});var la=R((nSe,rD)=>{"use strict";var pc=require("fs-extra"),XC=qf(),ZC=require("crypto"),wJ=require("moment"),CJ=require("uuid").v4,fr=k(),BT=require("path"),DJ=Y(),lo=L(),{totalmem:JC}=require("os"),LJ=zC().ExtendedLicense,hc="invalid license key format",PJ="061183",MJ="mofi25",UJ="aes-256-cbc",vJ=16,BJ=32,eD=J();eD.initSync();var vT;rD.exports={validateLicense:tD,generateFingerPrint:GJ,licenseSearch:xT,getLicense:FJ,checkMemoryLimit:kJ};function HT(){return BT.join(eD.getHdbBasePath(),lo.LICENSE_KEY_DIR_NAME,lo.LICENSE_FILE_NAME)}a(HT,"getLicenseDirPath");function HJ(){let e=HT();return BT.join(e,lo.LICENSE_FILE_NAME)}a(HJ,"getLicenseFilePath");function GT(){let e=HT();return BT.join(e,lo.REG_KEY_FILE_NAME)}a(GT,"getFingerPrintFilePath");async function GJ(){let e=GT();try{return await pc.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await xJ();throw fr.error(`Error writing fingerprint file to ${e}`),fr.error(t),new Error("There was an error generating the fingerprint")}}a(GJ,"generateFingerPrint");async function xJ(){let e=CJ(),t=XC.hash(e),r=GT();try{await pc.mkdirp(HT()),await pc.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw fr.error(`Error writing fingerprint file to ${r}`),fr.error(n),new Error("There was an error generating the fingerprint")}return t}a(xJ,"writeFingerprint");function tD(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:lo.RAM_ALLOCATION_ENUM.DEFAULT,version:lo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return fr.error("empty license key passed to validate."),r;let n=GT(),s=!1;try{s=pc.statSync(n)}catch(i){fr.error(i)}if(s){let i;try{i=pc.readFileSync(n,"utf8")}catch{fr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(MJ),c=o[1];c=Buffer.concat([Buffer.from(c)],vJ);let l=Buffer.concat([Buffer.from(i)],BJ),_=ZC.createDecipheriv(UJ,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let u=null;try{u=_.update(o[0],"hex","utf8"),u.trim(),u+=_.final("utf8")}catch{let f=qJ(o[0],i);if(f)u=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(hc),fr.error(hc),new Error(hc)}let d;if(isNaN(u))try{d=JSON.parse(u),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(hc),fr.error(hc),new Error(hc)}else r.exp_date=u;r.exp_date<wJ().valueOf()&&(r.valid_date=!1),XC.validate(o[1],`${PJ}${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||fr.error("Invalid licence"),r}a(tD,"validateLicense");function qJ(e,t){try{let r=ZC.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{fr.warn("Check old license failed")}}a(qJ,"checkOldLicense");function xT(){let e=new LJ,t=[];try{t=pc.readFileSync(HJ(),"utf-8").split(lo.NEW_LINE)}catch(r){r.code==="ENOENT"?fr.info("no license file found"):fr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(DJ.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=tD(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){fr.error("There was an error parsing the license string."),fr.error(s),e.ram_allocation=lo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return vT=e,e}a(xT,"licenseSearch");async function FJ(){return vT||await xT(),vT}a(FJ,"getLicense");function kJ(){let e=xT().ram_allocation,t=process.constrainedMemory?.()||JC();if(t=Math.round(Math.min(t,JC())/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(kJ,"checkMemoryLimit")});var Lr=R((cSe,SD)=>{"use strict";var oD="username is required",aD="nothing to update, must supply active, role or password to update",cD="password cannot be an empty string",lD="If role is specified, it cannot be empty.",uD="active must be true or false";SD.exports={addUser:JJ,alterUser:XJ,dropUser:e2,getSuperUser:s2,userInfo:t2,listUsers:zf,listUsersExternal:r2,setUsersToGlobal:Sc,findAndValidateUser:pD,getClusterUser:i2,USERNAME_REQUIRED:oD,ALTERUSER_NOTHING_TO_UPDATE:aD,EMPTY_PASSWORD:cD,EMPTY_ROLE:lD,ACTIVE_BOOLEAN:uD};var _D=Cr(),$J=ia(),kT=qf(),dD=DC(),fD=ur(),$T=hi(),un=Y(),ED=require("validate.js"),Ne=k(),{promisify:VJ}=require("util"),VT=fi(),nD=L(),sD=Ze(),YJ=Et(),iSe=J(),oSe=la(),KJ=_i(),{table:aSe}=(Re(),ae(Ve)),{handleHDBError:Us,hdb_errors:WJ}=ie(),{HTTP_STATUS_CODES:vs,AUTHENTICATION_ERROR_MSGS:qT,HDB_ERROR_MSGS:mc}=WJ,{UserEventMsg:YT}=os(),FT=require("lodash"),{server:KT}=(yr(),ae(jo)),QJ=k();KT.getUser=(e,t)=>pD(e,t,t!=null);var hD={username:!0,active:!0,role:!0,password:!0},iD=new Map,jf=fD.searchByValue,jJ=fD.searchByHash,zJ=VJ($J.delete);async function JJ(e){let t=ED.cleanAttributes(e,hD),r=dD.addUserValidation(t);if(r)throw Us(new Error,r.message,vs.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 jf(n),s=s&&Array.from(s)}catch(l){throw Ne.error("There was an error searching for a role in add user"),Ne.error(l),l}if(!s||s.length<1)throw Us(new Error,mc.ROLE_NAME_NOT_FOUND(t.role),vs.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Us(new Error,mc.DUP_ROLES_FOUND(t.role),vs.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=VT.encrypt(t.password)),t.password=kT.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await _D.insert(i)}catch(l){throw Ne.error("There was an error searching for a user."),Ne.error(l),l}Ne.debug(o);try{await Sc()}catch(l){throw Ne.error("Got an error setting users to global"),Ne.error(l),l}if(o.skipped_hashes.length===1)throw Us(new Error,mc.USER_ALREADY_EXISTS(t.username),vs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],$T.signalUserChange(new YT(process.pid)),`${c.username} successfully added`}a(JJ,"addUser");async function XJ(e){let t=ED.cleanAttributes(e,hD);if(un.isEmptyOrZeroLength(t.username))throw new Error(oD);if(un.isEmptyOrZeroLength(t.password)&&un.isEmptyOrZeroLength(t.role)&&un.isEmptyOrZeroLength(t.active))throw new Error(aD);if(!un.isEmpty(t.password)&&un.isEmptyOrZeroLength(t.password.trim()))throw new Error(cD);if(!un.isEmpty(t.active)&&!un.isBoolean(t.active))throw new Error(uD);let r=ZJ(t.username);if(!un.isEmpty(t.password)&&!un.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=VT.encrypt(t.password)),t.password=kT.hash(t.password)),t.role==="")throw new Error(lD);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 jf(i)||[])}catch(c){throw Ne.error("Got an error searching for a role."),Ne.error(c),c}if(!o||o.length===0){let c=mc.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ne.error(c),Us(new Error,c,vs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=mc.ALTER_USER_DUP_ROLES(t.role);throw Ne.error(c),Us(new Error,c,vs.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 _D.update(n)}catch(i){throw Ne.error("Error during update."),Ne.error(i),i}try{await Sc()}catch(i){throw Ne.error("Got an error setting users to global"),Ne.error(i),i}return $T.signalUserChange(new YT(process.pid)),s}a(XJ,"alterUser");function ZJ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(ZJ,"isClusterUser");async function e2(e){try{let t=dD.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(un.isEmpty(global.hdb_users.get(e.username)))throw Us(new Error,mc.USER_NOT_EXIST(e.username),vs.NOT_FOUND,void 0,void 0,!0);let n;try{n=await zJ(r)}catch(s){throw Ne.error("Got an error deleting a user."),Ne.error(s),s}Ne.debug(n);try{await Sc()}catch(s){throw Ne.error("Got an error setting users to global."),Ne.error(s),s}return $T.signalUserChange(new YT(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(e2,"dropUser");async function t2(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=FT.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await jJ(r)}catch(s){throw Ne.error("Got an error searching for a role."),Ne.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ne.error(r),r}return t}a(t2,"userInfo");async function r2(){let e;try{e=await zf()}catch(t){throw Ne.error("Got an error listing users."),Ne.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(r2,"listUsersExternal");async function zf(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await jf(e)}catch(o){throw Ne.error("Got an error searching for roles."),Ne.error(o),o}let r={};for(let o of t)r[o.id]=FT.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 jf(n)}catch(o){throw Ne.error("Got an error searching for users."),Ne.error(o),o}let i=new Map;for(let o of s)o=FT.cloneDeep(o),o.role=r[o.role],n2(o.role),i.set(o.username,o);return i}catch(e){throw Ne.error("got an error listing users"),Ne.error(e),un.errorizeMessage(e)}return null}a(zf,"listUsers");function n2(e){try{if(!e){Ne.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(KJ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ne.error("Got an error trying to set system permissions."),Ne.error(t)}}a(n2,"appendSystemTablesToRole");async function Sc(){try{let e=await zf();global.hdb_users=e}catch(e){throw Ne.error(e),e}}a(Sc,"setUsersToGlobal");async function pD(e,t,r=!0){global.hdb_users||await Sc();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Us(new Error,qT.GENERIC_AUTH_FAIL,vs.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Us(new Error,qT.USER_INACTIVE,vs.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(iD.get(t)===n.password)return s;if(kT.validate(n.password,t))iD.set(t,n.password);else throw Us(new Error,qT.GENERIC_AUTH_FAIL,vs.UNAUTHORIZED,void 0,void 0,!0)}return s}a(pD,"findAndValidateUser");async function s2(){global.hdb_users||await Sc();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(s2,"getSuperUser");async function i2(){let e=await zf(),t=YJ.getConfigFromFile(nD.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!un.isEmpty(r)&&r?.role?.role===nD.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=VT.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+sD.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+sD.SERVER_SUFFIX.ADMIN,r}a(i2,"getClusterUser");var mD=[];KT.invalidateUser=function(e){for(let t of mD)try{t(e)}catch(r){QJ.error("Error invalidating user",r)}};KT.onInvalidatedUser=function(e){mD.push(e)}});var bu=R((dSe,AD)=>{"use strict";var ua=k(),_n=L(),o2=Xw(),uSe=Bn(),_Se=Ei(),a2=Lr(),{validateEvent:TD}=os(),Ou=Hn(),c2=require("process"),{resetDatabases:l2}=(Re(),ae(Ve)),u2={[_n.ITC_EVENT_TYPES.SCHEMA]:_2,[_n.ITC_EVENT_TYPES.USER]:RD};async function _2(e){let t=TD(e);if(t){ua.error(t);return}ua.trace("ITC schemaHandler received schema event:",e),await o2(e.message),await d2(e.message)}a(_2,"schemaHandler");async function d2(e){try{Ou.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Ou.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Ou.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=l2();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ua.error(t)}}a(d2,"syncSchemaMetadata");var gD=[];async function RD(e){try{try{Ou.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Ou.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ua.warn(r)}let t=TD(e);if(t){ua.error(t);return}ua.trace(`ITC userHandler ${_n.HDB_ITC_CLIENT_PREFIX}${c2.pid} received user event:`,e),await a2.setUsersToGlobal();for(let r of gD)r()}catch(t){ua.error(t)}}a(RD,"userHandler");RD.addListener=function(e){gD.push(e)};AD.exports=u2});var os=R((SSe,bD)=>{"use strict";var ESe=k(),WT=Y(),f2=L(),{ITC_ERRORS:Nu}=nn(),{parentPort:hSe,threadId:E2,isMainThread:h2,workerData:pSe}=require("worker_threads"),{onMessageFromWorkers:p2,broadcast:mSe,broadcastWithAcknowledgement:m2}=rt();bD.exports={sendItcEvent:S2,validateEvent:OD,SchemaEventMsg:T2,UserEventMsg:g2};var Jf;p2(async(e,t)=>{Jf=Jf||bu(),OD(e),Jf[e.type]&&await Jf[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function S2(e){return!h2&&e.message&&(e.message.originator=E2),m2(e)}a(S2,"sendItcEvent");function OD(e){if(typeof e!="object")return Nu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||WT.isEmpty(e.type))return Nu.MISSING_TYPE;if(!e.hasOwnProperty("message")||WT.isEmpty(e.message))return Nu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||WT.isEmpty(e.message.originator))return Nu.MISSING_ORIGIN;if(f2.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Nu.INVALID_EVENT(e.type)}a(OD,"validateEvent");function T2(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(T2,"SchemaEventMsg");function g2(e){this.originator=e}a(g2,"UserEventMsg")});var hi=R((RSe,wD)=>{"use strict";var ND=L(),gSe=Y(),Xf=k(),yD=jw(),Tc,{sendItcEvent:ID}=os();function R2(e){try{Xf.trace("signalSchemaChange called with message:",e),Tc=Tc||bu();let t=new yD(ND.ITC_EVENT_TYPES.SCHEMA,e);return Tc.schema(t),ID(t)}catch(t){Xf.error(t)}}a(R2,"signalSchemaChange");function A2(e){try{Xf.trace("signalUserChange called with message:",e),Tc=Tc||bu();let t=new yD(ND.ITC_EVENT_TYPES.USER,e);return Tc.user(t),ID(t)}catch(t){Xf.error(t)}}a(A2,"signalUserChange");wD.exports={signalSchemaChange:R2,signalUserChange:A2}});var Zf=R((OSe,DD)=>{"use strict";var CD=Y(),O2=L(),b2=k(),N2=Lf(),y2=Df(),I2=hi(),{SchemaEventMsg:w2}=os(),C2="already exists in";DD.exports=D2;async function D2(e,t,r){if(CD.isEmptyOrZeroLength(r))return r;let n=[];CD.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 L2(e,t.schema,t.name,i)})),s}a(D2,"lmdbCheckForNewAttributes");async function L2(e,t,r,n){let s=new y2(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await P2(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(C2))b2.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(L2,"createNewAttribute");async function P2(e){let t;return t=await N2(e),I2.signalSchemaChange(new w2(process.pid,O2.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(P2,"createAttribute")});var gc=R((NSe,LD)=>{"use strict";var QT=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}};LD.exports=QT});var MD=R((ISe,PD)=>{"use strict";var M2=gc(),U2=L().OPERATIONS_ENUM,jT=class extends M2{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(U2.INSERT,r,n,s,i),this.records=t}};PD.exports=jT});var vD=R((CSe,UD)=>{"use strict";var v2=gc(),B2=L().OPERATIONS_ENUM,zT=class extends v2{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(B2.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};UD.exports=zT});var HD=R((LSe,BD)=>{"use strict";var H2=gc(),G2=L().OPERATIONS_ENUM,JT=class extends H2{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(G2.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};BD.exports=JT});var xD=R((MSe,GD)=>{"use strict";var x2=gc(),q2=L().OPERATIONS_ENUM,XT=class extends x2{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(q2.DELETE,n,s,t,i),this.original_records=r}};GD.exports=XT});var yu=R((BSe,$D)=>{"use strict";var vSe=require("path"),qD=Ye(),F2=MD(),k2=vD(),$2=HD(),V2=xD(),Rc=_t(),FD=Y(),{CONFIG_PARAMS:Y2}=L(),kD=J();kD.initSync();var eE=L().OPERATIONS_ENUM,{getTransactionAuditStorePath:K2}=Je();$D.exports=W2;async function W2(e,t){if(kD.get(Y2.LOGGING_AUDITLOG)===!1)return;let r=K2(e.schema,e.table),n=await qD.openEnvironment(r,e.table,!0),s=Q2(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){qD.initializeDBIs(n,Rc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Rc.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Rc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Rc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),FD.isEmpty(s.user_name)||n.dbis[Rc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Rc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(W2,"writeTransaction");function Q2(e,t){let r=FD.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===eE.INSERT)return new F2(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===eE.UPDATE)return new k2(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===eE.UPSERT)return new $2(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===eE.DELETE)return new V2(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Q2,"createTransactionObject")});var ZT=R((xSe,VD)=>{"use strict";var j2=Su(),GSe=tu(),Iu=L(),z2=ru(),J2=Zo().insertRecords,X2=Ye(),Z2=k(),e4=Zf(),{getSchemaPath:t4}=Je(),r4=yu();VD.exports=n4;async function n4(e){try{let{schema_table:t,attributes:r}=j2(e);z2(e,r,t.hash_attribute),e.schema!==Iu.SYSTEM_SCHEMA_NAME&&(r.includes(Iu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Iu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Iu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Iu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await e4(e.hdb_auth_header,t,r),s=t4(e.schema,e.table),i=await X2.openEnvironment(s,e.table),o=await J2(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await r4(e,o)}catch(c){Z2.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(n4,"lmdbCreateRecords")});var WD=R((FSe,KD)=>{"use strict";var YD=L(),s4=ZT(),i4=tu(),o4=require("fs-extra"),{getSchemaPath:a4}=Je();KD.exports=c4;async function c4(e){let t=[{name:e.schema,createddate:Date.now()}],r=new i4(YD.SYSTEM_SCHEMA_NAME,YD.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await s4(r),await o4.mkdirp(a4(e.schema))}a(c4,"lmdbCreateSchema")});var jD=R(($Se,QD)=>{"use strict";var eg=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}};QD.exports=eg});var ZD=R((QSe,XD)=>{"use strict";var zD=Ye(),tg=Nr(),rg=nn().LMDB_ERRORS_ENUM,l4=_t(),JD=k(),YSe=Y(),u4=require("lmdb"),_4=jD(),d4=L(),{OVERFLOW_MARKER:KSe,MAX_SEARCH_KEY_LENGTH:WSe}=l4,f4=d4.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function E4(e,t,r,n){if(tg.validateEnv(e),t===void 0)throw new Error(rg.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(rg.IDS_REQUIRED):new Error(rg.IDS_MUST_BE_ITERABLE);try{let s=zD.listDBIs(e);zD.initializeDBIs(e,t,s);let i=new _4,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[f4]>n){i.skipped.push(o);continue}let m=e.dbis[t].ifVersion(o,u4.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let g=s[S];if(!h.hasOwnProperty(g)||g===t)continue;let T=e.dbis[g],b=h[g];if(b!=null)try{let N=tg.getIndexedValues(b);if(N)for(let U=0,v=N.length;U<v;U++)T.remove(N[U],o)}catch{JD.warn(`cannot delete from attribute: ${g}, ${b}:${o}`)}}});c.push(m),l.push(o),i.original_records.push(h)}catch(h){JD.warn(h),i.skipped.push(o)}let _=[],u=await Promise.all(c);for(let E=0,f=u.length;E<f;E++)u[E]===!0?i.deleted.push(l[E]):(i.skipped.push(l[E]),_.push(E));let d=0;for(let E=0;E<_.length;E++){let f=_[E];i.original_records.splice(f-d,1),d++}return i.txn_time=tg.getNextMonotonicTime(),i}catch(s){throw s}}a(E4,"deleteRecords");XD.exports={deleteRecords:E4}});var wu=R((zSe,tL)=>{"use strict";var Ac=Y(),h4=ZD(),p4=Ye(),{getSchemaPath:m4}=Je(),S4=yu(),T4=k();tL.exports=g4;async function g4(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ac.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ac.isEmptyOrZeroLength(e.hash_values)&&!Ac.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Ac.isEmpty(l)||e.hash_values.push(l)}}if(Ac.isEmptyOrZeroLength(e.hash_values))return eL([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ac.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=m4(e.schema,e.table),i=await p4.openEnvironment(s,e.table),o=await h4.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await S4(e,o)}catch(c){T4.error(`unable to write transaction due to ${c.message}`)}return eL(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(g4,"lmdbDeleteRecords");function eL(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(eL,"createDeleteResponse")});var sg=R((ZSe,rL)=>{"use strict";var R4=L(),XSe=Nr();function ng(e,t){let r=Object.create(null);if(t.length===1&&R4.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(ng,"parseRow");function A4(e,t,r,n){let s=ng(r,e);n.push(s)}a(A4,"searchAll");function O4(e,t,r,n){let s=ng(r,e);n[t]=s}a(O4,"searchAllToMap");function b4(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(b4,"iterateDBI");function _a(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(_a,"pushResults");function N4(e,t,r,n,s,i){t.toString().endsWith(e)&&_a(t,r,n,s,i)}a(N4,"endsWith");function y4(e,t,r,n,s,i){t.toString().includes(e)&&_a(t,r,n,s,i)}a(y4,"contains");function I4(e,t,r,n,s,i){t>e&&_a(t,r,n,s,i)}a(I4,"greaterThanCompare");function w4(e,t,r,n,s,i){t>=e&&_a(t,r,n,s,i)}a(w4,"greaterThanEqualCompare");function C4(e,t,r,n,s,i){t<e&&_a(t,r,n,s,i)}a(C4,"lessThanCompare");function D4(e,t,r,n,s,i){t<=e&&_a(t,r,n,s,i)}a(D4,"lessThanEqualCompare");rL.exports={parseRow:ng,searchAll:A4,searchAllToMap:O4,iterateDBI:b4,endsWith:N4,contains:y4,greaterThanCompare:I4,greaterThanEqualCompare:w4,lessThanCompare:C4,lessThanEqualCompare:D4,pushResults:_a}});var Oc=R((sTe,lL)=>{"use strict";var uo=Ye(),tTe=k(),dn=Nr(),tE=_t(),Tt=nn().LMDB_ERRORS_ENUM,rTe=Y(),L4=L(),rE=sg(),{parseRow:P4}=rE,nTe=require("lmdb"),{OVERFLOW_MARKER:nL,MAX_SEARCH_KEY_LENGTH:M4}=tE;function sL(e,t,r,n=!1,s=void 0,i=void 0){return da(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(sL,"iterateFullIndex");function Cu(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,_=!1){return da(e,t,r,(u,d,E,f)=>{let T={transaction:u,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!_,exclusiveStart:i===!0?_:l};return f===r?(T.values=!1,d.getRange(T).map(b=>({value:b}))):d.getRange(T)})}a(Cu,"iterateRangeBetween");function da(e,t,r,n){let s=e.database||e,i=uo.openDBI(s,r);i[tE.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&uo.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(da,"setupTransaction");function iL(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(nL)){if(!s)if(r)s=uo.openDBI(e,r);else{let l=uo.listDBIs(e);for(let _=0,u=l.length;_<u&&(s=uo.openDBI(e,l[_]),!s[tE.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(iL,"getOverflowCheck");function U4(e,t,r,n=!1,s=void 0,i=void 0){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);return da(e,t,t,(o,c,l)=>(nE(r),r=Du(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>P4(_.value,r))))}a(U4,"searchAll");function v4(e,t,r,n=!1,s=void 0,i=void 0){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);nE(r),r=Du(e.database||e,r);let o=new Map;for(let{key:c,value:l}of sL(e,t,t,n,s,i))o.set(c,rE.parseRow(l,r));return o}a(v4,"searchAllToMap");function B4(e,t,r=!1,n=void 0,s=void 0){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=sL(e,void 0,t,r,n,s),c=o.transaction,l=iL(c.database,c,void 0,t);for(let{key:_,value:u}of o){let d=l(_,u);i[d]===void 0&&(i[d]=[]),i[d].push(u)}return i}a(B4,"iterateDBI");function H4(e,t){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);return uo.statDBI(e,t).entryCount}a(H4,"countAll");function G4(e,t,r,n,s=!1,i=void 0,o=void 0){return _o(e,r,n),da(e,t,r,(c,l,_,u)=>(n=dn.convertKeyValueToWrite(n),u===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(d=>({key:n,value:d}))))}a(G4,"equals");function x4(e,t,r){return _o(e,t,r),uo.openDBI(e,t).getValuesCount(r)}a(x4,"count");function q4(e,t,r,n,s=!1,i=void 0,o=void 0){return _o(e,r,n),da(e,null,r,(c,l)=>{n=dn.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let u;if(s===!0){let d;for(let E of l.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){d=E;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),u=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==d){if(f.toString().startsWith(n))return E;if(_===!0)return u.DONE}}),u.filter(E=>E)}else return u=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return u.DONE}),_?u:u.filter(d=>d)})}a(q4,"startsWith");function F4(e,t,r,n,s=!1,i=void 0,o=void 0){return oL(e,t,r,n,s,i,o,!0)}a(F4,"endsWith");function oL(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return _o(e,r,n),da(e,null,r,(l,_,u,d)=>{let E=iL(u,l,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(nL)?_.getValues(f,{transaction:l}).map(m=>{let S=E(f,m);if(c?S.endsWith(n):S.includes(n))return{key:S,value:m}}).filter(m=>m):(c?h.endsWith(n):h.includes(n))?_[tE.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:_.getValues(f,{transaction:l}).map(m=>({key:f,value:m})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(oL,"contains");function k4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Cu(e,t,r,n,l,s,i,o,!0,!1)}a(k4,"greaterThan");function $4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Cu(e,t,r,n,l,s,i,o,!1,!1)}a($4,"greaterThanEqual");function V4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Cu(e,t,r,l,n,s,i,o,!1,!0)}a(V4,"lessThan");function Y4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Cu(e,t,r,l,n,s,i,o,!1,!1)}a(Y4,"lessThanEqual");function K4(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(dn.validateEnv(e),r===void 0)throw new Error(Tt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Tt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Tt.END_VALUE_REQUIRED);if(n=dn.convertKeyValueToWrite(n),s=dn.convertKeyValueToWrite(s),n>s)throw new Error(Tt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Cu(e,t,r,n,s,i,o,c)}a(K4,"between");function W4(e,t,r,n){dn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);if(nE(r),r=Du(s,r),n===void 0)throw new Error(Tt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=rE.parseRow(c,r)),o}a(W4,"searchByHash");function Q4(e,t,r){dn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Tt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(Q4,"checkHashExists");function j4(e,t,r,n,s=[]){return cL(e,t,r,n,s),aL(e,t,r,n,s).map(i=>i[1])}a(j4,"batchSearchByHash");function z4(e,t,r,n,s=[]){cL(e,t,r,n,s);let i=new Map;for(let[o,c]of aL(e,t,r,n,s))i.set(o,c);return i}a(z4,"batchSearchByHashToMap");function aL(e,t,r,n,s=[]){return da(e,t,t,(i,o,c)=>{r=Du(c,r);let l=r.length<3;return n.map(_=>{let u=c.dbis[t].get(_,{transaction:i,lazy:l});if(u)return[_,rE.parseRow(u,r)];s.push(_)}).filter(_=>_)})}a(aL,"batchHashSearch");function cL(e,t,r,n,s){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);if(nE(r),n==null)throw new Error(Tt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Tt.IDS_MUST_BE_ITERABLE)}a(cL,"initializeBatchSearchByHash");function nE(e){if(!Array.isArray(e))throw e===void 0?new Error(Tt.FETCH_ATTRIBUTES_REQUIRED):new Error(Tt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(nE,"validateFetchAttributes");function _o(e,t,r){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Tt.SEARCH_VALUE_REQUIRED);if(r?.length>M4)throw new Error(Tt.SEARCH_VALUE_TOO_LARGE)}a(_o,"validateComparisonFunctions");function Du(e,t){return t.length===1&&L4.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=uo.listDBIs(e)),t}a(Du,"setGetWholeRowAttributes");lL.exports={searchAll:U4,searchAllToMap:v4,count:x4,countAll:H4,equals:G4,startsWith:q4,endsWith:F4,contains:oL,searchByHash:W4,setGetWholeRowAttributes:Du,batchSearchByHash:j4,batchSearchByHashToMap:z4,checkHashExists:Q4,iterateDBI:B4,greaterThan:k4,greaterThanEqual:$4,lessThan:V4,lessThanEqual:Y4,between:K4}});var bc=R((oTe,EL)=>{var uL=require("lodash"),_L=nt(),me=require("joi"),J4=Y(),{hdb_schema_table:Lu,checkValidTable:dL,hdb_table:fL,hdb_database:sE}=Ls(),{handleHDBError:X4,hdb_errors:Z4}=ie(),{getDatabases:e3}=(Re(),ae(Ve)),{HTTP_STATUS_CODES:t3}=Z4,r3=me.object({database:sE,schema:sE,table:fL,search_attribute:Lu,search_value:me.any().required(),get_attributes:me.array().min(1).items(me.alternatives(Lu,me.object())).optional(),desc:me.bool(),limit:me.number().integer().min(1),offset:me.number().integer().min(0)}),n3=me.object({database:sE,schema:sE,table:fL,operator:me.string().valid("and","or").default("and").lowercase(),offset:me.number().integer().min(0),limit:me.number().integer().min(1),get_attributes:me.array().min(1).items(me.alternatives(Lu,me.object())).optional(),sort:me.object({attribute:me.alternatives(Lu,me.array().min(1)),descending:me.bool().optional()}).optional(),conditions:me.array().min(1).items(me.alternatives(me.object({operator:me.string().valid("and","or").default("and").lowercase(),conditions:me.array()}),me.object({search_attribute:me.alternatives(Lu,me.array().min(1)),search_type:me.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:me.when("search_type",{switch:[{is:"equals",then:me.any()},{is:"between",then:me.array().items(me.alternatives([me.string(),me.number()])).length(2)}],otherwise:me.alternatives(me.string(),me.number())}).required()}))).required()});EL.exports=function(e,t){let r=null;switch(t){case"value":r=_L.validateBySchema(e,r3);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(dL("database",e.schema)),i(dL("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=_L.validateBySchema(e,n3);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=J4.checkGlobalSchemaTable(e.schema,e.table);if(s)return X4(new Error,s,t3.NOT_FOUND);let o=e3()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(u=>{for(let d=0,E=u.conditions.length;d<E;d++){let f=u.conditions[d];f.conditions?l(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&l(e);let _=uL.filter(c,u=>u!=="*"&&!u.startsWith?.("$")&&u.attribute!=="*"&&!Array.isArray(u)&&!u.name&&!uL.some(o,d=>d===u||d.attribute===u||d.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var ig=R((cTe,hL)=>{"use strict";var s3=Ye(),i3=bc(),{getSchemaPath:o3}=Je();hL.exports=a3;function a3(e){let t=i3(e,"hashes");if(t)throw t;let r=o3(e.schema,e.table);return s3.openEnvironment(r,e.table)}a(a3,"initialize")});var og=R((uTe,pL)=>{"use strict";var c3=Oc(),l3=ig();pL.exports=u3;async function u3(e){let t=await l3(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return c3.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(u3,"lmdbGetDataByHash")});var Nc=R((dTe,mL)=>{"use strict";var ag=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};mL.exports=ag});var TL=R((hTe,SL)=>{"use strict";var ETe=Nc(),_3=Oc(),d3=ig();SL.exports=f3;async function f3(e){let t=await d3(e),r=global.hdb_schema[e.schema][e.table];return _3.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(f3,"lmdbSearchByHash")});var as=R((mTe,gL)=>{"use strict";var cg=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,_=void 0,u=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=_,this.offset=u}};gL.exports=cg});var iE=R((TTe,yL)=>{"use strict";var Er=Oc(),E3=Ye(),h3=Y(),Se=_t(),fa=L(),p3=_i(),RL=nn().LMDB_ERRORS_ENUM,{getSchemaPath:m3}=Je(),pi=fa.SEARCH_WILDCARDS;async function S3(e,t,r){let n;e.schema===fa.SYSTEM_SCHEMA_NAME?n=p3[e.table]:n=global.hdb_schema[e.schema][e.table];let s=NL(e,n.hash_attribute,r,t);return OL(e,s,n.hash_attribute,r)}a(S3,"prepSearch");async function OL(e,t,r,n){let s=m3(e.schema,e.table),i=await E3.openEnvironment(s,e.table),o=bL(i,e,t,r),c=o.transaction||i;if([Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Se.SEARCH_TYPES.SEARCH_ALL,Se.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(T3(e,r)===!1){let u=e.search_attribute;if(u===r)return n?AL(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[u]:E.key}),"toObject");return n?AL(o,d):o.map(d)}let _=e.search_attribute===r?o.map(u=>u.key):o.map(u=>u.value);return n===!0?Er.batchSearchByHashToMap(c,r,e.get_attributes,_):Er.batchSearchByHash(c,r,e.get_attributes,_)}a(OL,"executeSearch");function bL(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 Se.SEARCH_TYPES.EQUALS:s=Er.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.CONTAINS:s=Er.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.ENDS_WITH:case Se.SEARCH_TYPES._ENDS_WITH:s=Er.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.STARTS_WITH:case Se.SEARCH_TYPES._STARTS_WITH:s=Er.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Er.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Er.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Se.SEARCH_TYPES.SEARCH_ALL:return Er.searchAll(e,n,t.get_attributes,o,c,l);case Se.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Er.searchAllToMap(e,n,t.get_attributes,o,c,l);case Se.SEARCH_TYPES.BETWEEN:s=Er.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case Se.SEARCH_TYPES.GREATER_THAN:case Se.SEARCH_TYPES._GREATER_THAN:s=Er.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.GREATER_THAN_EQUAL:case Se.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Er.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.LESS_THAN:case Se.SEARCH_TYPES._LESS_THAN:s=Er.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.LESS_THAN_EQUAL:case Se.SEARCH_TYPES._LESS_THAN_EQUAL:s=Er.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(bL,"searchByType");function AL(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(AL,"createMapFromIterable");function T3(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(T3,"checkToFetchMore");function NL(e,t,r,n){if(h3.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),pi.indexOf(s)>-1)return r===!0?Se.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Se.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(pi[0])<0&&s.indexOf(pi[1])<0)return c===!0?r===!0?Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Se.SEARCH_TYPES.EQUALS;if(pi.indexOf(i)>=0&&pi.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Se.SEARCH_TYPES.CONTAINS;if(pi.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Se.SEARCH_TYPES.ENDS_WITH;if(pi.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Se.SEARCH_TYPES.STARTS_WITH;if(s.includes(pi[0])||s.includes(pi[1]))return Se.SEARCH_TYPES.EQUALS;throw new Error(RL.UNKNOWN_SEARCH_TYPE)}else switch(n){case fa.VALUE_SEARCH_COMPARATORS.BETWEEN:return Se.SEARCH_TYPES.BETWEEN;case fa.VALUE_SEARCH_COMPARATORS.GREATER:return Se.SEARCH_TYPES.GREATER_THAN;case fa.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Se.SEARCH_TYPES.GREATER_THAN_EQUAL;case fa.VALUE_SEARCH_COMPARATORS.LESS:return Se.SEARCH_TYPES.LESS_THAN;case fa.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Se.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(RL.UNKNOWN_SEARCH_TYPE)}}a(NL,"createSearchTypeFromSearchObject");yL.exports={executeSearch:OL,createSearchTypeFromSearchObject:NL,prepSearch:S3,searchByType:bL}});var wL=R((ATe,IL)=>{"use strict";var RTe=as(),g3=bc(),R3=Y(),A3=L(),O3=iE();IL.exports=b3;function b3(e,t){if(!R3.isEmpty(t)&&A3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=g3(e,"value");if(n)throw n;return O3.prepSearch(e,t,!0)}a(b3,"lmdbGetDataByValue")});var Pu=R((NTe,CL)=>{"use strict";var bTe=as(),N3=bc(),y3=Y(),I3=L(),w3=iE();CL.exports=C3;async function C3(e,t){if(!y3.isEmpty(t)&&I3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=N3(e,"value");if(n)throw n;return w3.prepSearch(e,t,!1)}a(C3,"lmdbSearchByValue")});var LL=R((wTe,DL)=>{"use strict";var ITe=_t(),lg=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}},ug=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},_g=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};DL.exports={SearchByConditionsObject:lg,SearchCondition:ug,SortAttribute:_g}});var BL=R((PTe,vL)=>{"use strict";var DTe=LL().SearchByConditionsObject,D3=as(),L3=bc(),dg=Oc(),oE=_t(),{Resource:LTe}=(Mn(),ae(fg)),UL=iE(),P3=sg(),M3=require("lodash"),{getSchemaPath:U3}=Je(),PL=Ye(),{handleHDBError:v3,hdb_errors:B3}=ie(),{HTTP_STATUS_CODES:H3}=B3,G3=1e8;vL.exports=x3;async function x3(e){let t=L3(e,"conditions");if(t)throw v3(t,t.message,H3.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=U3(e.schema,e.table),n=await PL.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)PL.openDBI(n,_.search_attribute);let i=M3.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let u=_.search_type;u===oE.SEARCH_TYPES.EQUALS?_.estimated_count=dg.count(n,_.search_attribute,_.search_value):u===oE.SEARCH_TYPES.CONTAINS||u===oE.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=G3}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await ML(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],u=i.slice(1).map(UL.filterByType),d=u.length,E=dg.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(f=>_.get(f,{transaction:o,lazy:!0})),d>0&&(l=l.filter(f=>{for(let h=0;h<d;h++)if(!u[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=>P3.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await ML(o,e,E,s.hash_attribute);c=c.concat(f)}let _=new Set,u=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(u,e.limit&&e.limit+u),l=dg.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(x3,"lmdbSearchByConditions");async function ML(e,t,r,n){let s=new D3(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===oE.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,UL.searchByType(e,s,i,n).map(o=>o.value)}a(ML,"executeConditionSearch")});var Mu=R((UTe,HL)=>{"use strict";var q3=L().OPERATIONS_ENUM,Eg=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=q3.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};HL.exports=Eg});var hg=R((BTe,YL)=>{"use strict";var FL=as(),kL=Mu(),$L=Pu(),VL=wu(),Pr=L(),GL=Y(),xL=Ye(),{getTransactionAuditStorePath:F3,getSchemaPath:k3}=Je(),qL=k();YL.exports=$3;async function $3(e){try{if(GL.isEmpty(global.hdb_schema[e.schema])||GL.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await V3(e),await Y3(e);let t=k3(e.schema,e.table);try{await xL.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")qL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=F3(e.schema,e.table);await xL.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")qL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a($3,"lmdbDropTable");async function V3(e){let t=new FL(Pr.SYSTEM_SCHEMA_NAME,Pr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Pr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Pr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await $L(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 kL(Pr.SYSTEM_SCHEMA_NAME,Pr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await VL(s)}a(V3,"deleteAttributesFromSystem");async function Y3(e){let t=new FL(Pr.SYSTEM_SCHEMA_NAME,Pr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Pr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Pr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Pr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Pr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await $L(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 kL(Pr.SYSTEM_SCHEMA_NAME,Pr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await VL(s)}catch(i){throw i}}a(Y3,"dropTableFromSystem")});var WL=R((GTe,KL)=>{"use strict";var K3=require("fs-extra"),W3=as(),Q3=Nc(),j3=Mu(),z3=hg(),J3=wu(),X3=og(),Z3=Pu(),mi=L(),{getSchemaPath:eX}=Je(),{handleHDBError:tX,hdb_errors:rX}=ie(),{HDB_ERROR_MSGS:nX,HTTP_STATUS_CODES:sX}=rX;KL.exports=iX;async function iX(e){let t;try{t=await oX(e.schema);let r=new W3(mi.SYSTEM_SCHEMA_NAME,mi.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await Z3(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await z3(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new j3(mi.SYSTEM_SCHEMA_NAME,mi.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await J3(s);let i=eX(t);await K3.remove(i)}catch(r){throw r}}a(iX,"lmdbDropSchema");async function oX(e){let t=new Q3(mi.SYSTEM_SCHEMA_NAME,mi.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await X3(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw tX(new Error,nX.SCHEMA_NOT_FOUND(e),sX.NOT_FOUND,void 0,void 0,!0);return n}a(oX,"validateDropSchema")});var Uu=R((qTe,QL)=>{"use strict";var pg=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};QL.exports=pg});var Sg=R(($Te,jL)=>{"use strict";var aX=require("fs-extra"),aE=Ye(),{getTransactionAuditStorePath:cX}=Je(),mg=_t(),kTe=Uu();jL.exports=lX;async function lX(e){let t;try{let r=cX(e.schema,e.table);await aX.mkdirp(r),t=await aE.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{aE.createDBI(t,mg.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),aE.createDBI(t,mg.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),aE.createDBI(t,mg.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(lX,"createTransactionsAuditEnvironment")});var ZL=R((YTe,XL)=>{"use strict";var Tg=L(),zL=Ye(),uX=Zo(),{getSystemSchemaPath:_X,getSchemaPath:dX}=Je(),fX=_i(),EX=Lf(),gg=Df(),hX=k(),pX=Sg(),Ag=fX.hdb_table,JL=[];for(let e=0;e<Ag.attributes.length;e++)JL.push(Ag.attributes[e].attribute);XL.exports=mX;async function mX(e,t){let r=dX(t.schema,t.table),n=new gg(t.schema,t.table,Tg.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new gg(t.schema,t.table,Tg.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new gg(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await zL.createEnvironment(r,t.table),e!==void 0){let o=await zL.openEnvironment(_X(),Tg.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await uX.insertRecords(o,Ag.hash_attribute,JL,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Rg(n),await Rg(s),await Rg(i)}await pX(t)}catch(o){throw o}}a(mX,"lmdbCreateTable");async function Rg(e){try{await EX(e)}catch(t){hX.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Rg,"createAttribute")});var tP=R((WTe,eP)=>{"use strict";var SX=Su(),TX=ru(),gX=Zf(),vu=L(),RX=Zo().updateRecords,AX=Ye(),{getSchemaPath:OX}=Je(),bX=yu(),NX=k();eP.exports=yX;async function yX(e){try{let{schema_table:t,attributes:r}=SX(e);TX(e,r,t.hash_attribute),e.schema!==vu.SYSTEM_SCHEMA_NAME&&(r.includes(vu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(vu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(vu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(vu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await gX(e.hdb_auth_header,t,r),s=OX(e.schema,e.table),i=await AX.openEnvironment(s,e.table),o=await RX(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await bX(e,o)}catch(c){NX.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(yX,"lmdbUpdateRecords")});var nP=R((jTe,rP)=>{"use strict";var IX=L().OPERATIONS_ENUM,Og=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=IX.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};rP.exports=Og});var iP=R((XTe,sP)=>{"use strict";var JTe=nP(),wX=Su(),CX=ru(),DX=Zf(),Bu=L(),LX=Zo().upsertRecords,PX=Ye(),{getSchemaPath:MX}=Je(),UX=yu(),vX=k(),{handleHDBError:BX,hdb_errors:HX}=ie();sP.exports=GX;async function GX(e){let t;try{t=wX(e)}catch(l){throw BX(l,l.message,HX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;CX(e,n,r.hash_attribute),e.schema!==Bu.SYSTEM_SCHEMA_NAME&&(n.includes(Bu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Bu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Bu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Bu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await DX(e.hdb_auth_header,r,n),i=MX(e.schema,e.table),o=await PX.openEnvironment(i,e.table),c=await LX(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await UX(e,c)}catch(l){vX.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(GX,"lmdbUpsertRecords")});var aP=R((ege,oP)=>{"use strict";var bg=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};oP.exports=bg});var lP=R((rge,cP)=>{"use strict";var Ng=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}};cP.exports=Ng});var dP=R((ige,_P)=>{"use strict";var yg=Ye(),{getTransactionAuditStorePath:xX}=Je(),sge=aP(),Hu=_t(),qX=Y(),uP=lP(),FX=require("util").promisify,kX=FX(setTimeout),$X=1e4,VX=100;_P.exports=YX;async function YX(e){let t=xX(e.schema,e.table),r=await yg.openEnvironment(t,e.table,!0),n=yg.listDBIs(r);yg.initializeDBIs(r,Hu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new uP;do s=await KX(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 kX(VX);while(s.transactions_deleted>0);return i}a(YX,"deleteAuditLogsBefore");async function KX(e,t){let r=new uP;try{let n=e.dbis[Hu.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[Hu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];qX.isEmpty(c)||(s=e.dbis[Hu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[Hu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>$X)break}return await s,r}catch(n){throw n}}a(KX,"deleteTransactions")});var EP=R((age,fP)=>{"use strict";var Ig=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};fP.exports=Ig});var pP=R((uge,hP)=>{"use strict";var WX=as(),QX=Mu(),lge=EP(),Bs=L(),jX=Y(),wg=Ye(),zX=_i(),JX=Pu(),XX=wu(),{getSchemaPath:ZX}=Je();hP.exports=eZ;async function eZ(e,t=!0){let r;e.schema===Bs.SYSTEM_SCHEMA_NAME?r=zX[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await rZ(e),s=ZX(e.schema,e.table),i=await wg.openEnvironment(s,e.table);return t===!0&&await tZ(e,i,r.hash_attribute),wg.dropDBI(i,e.attribute),n}a(eZ,"lmdbDropAttribute");async function tZ(e,t,r){let n=wg.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let _={};for(let u in c)u!==i&&(_[u]=c[u]);s=t.dbis[r].put(o,_,l)}await s}a(tZ,"removeAttributeFromAllObjects");async function rZ(e){let t=new WX(Bs.SYSTEM_SCHEMA_NAME,Bs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await JX(t)).filter(o=>o[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(jX.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new QX(Bs.SYSTEM_SCHEMA_NAME,Bs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return XX(i)}a(rZ,"dropAttributeFromSystem")});var AP=R((fge,RP)=>{"use strict";var Cg=Ye(),yc=_t(),dge=Nr(),Dg=L(),mP=Y(),{getTransactionAuditStorePath:nZ}=Je(),sZ=Oc(),cE=gc(),iZ=k();RP.exports=oZ;async function oZ(e){let t=nZ(e.schema,e.table),r=await Cg.openEnvironment(t,e.table,!0),n=Cg.listDBIs(r);Cg.initializeDBIs(r,yc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Dg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return SP(r,e.search_values);case Dg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,cZ(r,e.search_values,s);case Dg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return aZ(r,e.search_values);default:return SP(r)}}a(oZ,"readAuditLog");function SP(e,t=[0,Date.now()]){mP.isEmpty(t[0])&&(t[0]=0),mP.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[yc.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 cE,s))}a(SP,"searchTransactionsByTimestamp");function aZ(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[yc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,gP(e,i))}return Object.fromEntries(r)}a(aZ,"searchTransactionsByUsername");function cZ(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let _=t[c],u=sZ.equals(e,yc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,yc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of u){let E=Number(d);n.has(E)?n.get(E).push(_.toString()):n.set(E,[_.toString()])}}let s=Array.from(n.keys()),i=gP(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],_=l.timestamp,u=n.get(_);TP(l,"records",r,u,o),TP(l,"original_records",r,u,o)}return Object.fromEntries(o)}a(cZ,"searchTransactionsByHashValues");function TP(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 _=s.get(l),u=_[_.length-1];if(u.timestamp===i)u[t]=[c];else{let d=new cE(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new cE(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(l,[_])}}}a(TP,"loopRecords");function gP(e,t){let r=[];try{let n=e.dbis[yc.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 cE,i);r.push(o)}}catch(i){iZ.warn(i)}return r}catch(n){throw n}}a(gP,"batchSearchTransactions")});var bP=R((mge,OP)=>{"use strict";var{getSchemaPath:hge}=Je(),pge=Ye(),{database:lZ}=(Re(),ae(Ve));OP.exports={writeTransaction:uZ};async function uZ(e,t,r){return lZ({database:e,table:t}).transaction(r)}a(uZ,"writeTransaction")});var wP=R((Tge,IP)=>{"use strict";var{getSchemaPath:NP}=Je(),yP=Ye();IP.exports={flush:_Z,resetReadTxn:dZ};async function _Z(e,t){return(await yP.openEnvironment(NP(e,t),t.toString())).flushed}a(_Z,"flush");async function dZ(e,t){try{(await yP.openEnvironment(NP(e,t),t.toString())).resetReadTxn()}catch{}}a(dZ,"resetReadTxn")});var PP=R((Rge,LP)=>{"use strict";var{Readable:fZ}=require("stream"),{getDatabases:EZ}=(Re(),ae(Ve)),{readSync:hZ,openSync:pZ,createReadStream:CP}=require("fs"),{open:mZ}=require("lmdb"),DP=_u(),SZ=du(),{AUDIT_STORE_OPTIONS:TZ}=(no(),ae(MP)),{INTERNAL_DBIS_NAME:gZ,AUDIT_STORE_NAME:RZ}=_t();LP.exports=OZ;var Lg=32768,AZ=100;async function OZ(e){let t=e.database||e.schema||"data",r=EZ()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let u=_.dbisDB,d=mZ({noSync:!0,maxDbs:SZ.MAX_DBS}),E,f=d.openDB(gZ,new DP(!1)),h=u.useReadTransaction(),m=0,S=a(async function(T,b){b.encoding="binary",b.encoder=void 0;let N=d.openDB(T,b),U=u.openDB(T,b);for(let{key:v,version:q,value:M}of U.getRange({start:null,transaction:h,versions:U.useVersions}))E=N.put(v,M,q),m++%AZ===0&&(await new Promise(W=>setTimeout(W,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:T,value:b}of u.getRange({transaction:h,start:!1}))if(s.some(N=>T.startsWith?.(N+"/"))){f.put(T,b);let[,N]=T.split("/"),U=!N,v=new DP(!U,U);await S(T,v)}e.include_audit&&await S(RZ,Object.assign({},TZ)),await E;let g=CP(d.path);return g.headers=l(),g.on("close",()=>{h.done(),d.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=pZ(o.path);return o.transaction(()=>{let _=Buffer.alloc(Lg);hZ(c,_,0,Lg),o.resetReadTxn();let u=o.useReadTransaction();u.renew();let d=CP(null,{fd:c,start:Lg}),E=new fZ.from(async function*(){yield _;for await(let f of d)u.openTimer&&(u.openTimer=0),yield f;u.done()}());return E.headers=l(),E});function l(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(OZ,"getBackup")});var BP=R((Oge,vP)=>{"use strict";var bZ=k(),{handleHDBError:NZ}=ie(),yZ=ew(),IZ=Lf(),wZ=ZT(),CZ=WD(),DZ=wu(),LZ=og(),PZ=TL(),MZ=wL(),UZ=Pu(),vZ=BL(),BZ=WL(),HZ=ZL(),GZ=tP(),xZ=iP(),qZ=dP(),FZ=hg(),kZ=pP(),$Z=AP(),VZ=bP(),UP=wP(),YZ=PP(),Pg=class extends yZ{static{a(this,"LMDBBridge")}async searchByConditions(t){return vZ(t)}async getDataByHash(t){return await LZ(t)}async searchByHash(t){return await PZ(t)}async getDataByValue(t,r){return await MZ(t,r)}async searchByValue(t){return await UZ(t)}async createSchema(t){return await CZ(t)}async dropSchema(t){return await BZ(t)}async createTable(t,r){return await HZ(t,r)}async dropTable(t){return await FZ(t)}async createAttribute(t){return await IZ(t)}async createRecords(t){return await wZ(t)}async updateRecords(t){return await GZ(t)}async upsertRecords(t){try{return await xZ(t)}catch(r){throw NZ(r,null,null,bZ.ERR,r)}}async deleteRecords(t){return await DZ(t)}async dropAttribute(t){return await kZ(t)}async deleteAuditLogsBefore(t){return await qZ(t)}async readAuditLog(t){return await $Z(t)}writeTransaction(t,r,n){return VZ.writeTransaction(t,r,n)}flush(t,r){return UP.flush(t,r)}resetReadTxn(t,r){return UP.resetReadTxn(t,r)}getBackup(t){return YZ(t)}};vP.exports=Pg});function jZ(){QZ=setInterval(function(){for(let e of Mg)if(e.stale){let t=e[Ie]?.url;qP.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},WZ).unref()}var Ug,xP,qP,FP,kP,$P,HP,Mg,KZ,Gu,GP,Ea,lE,WZ,QZ,vg=be(()=>{Ug=G(Nr()),xP=G(ie()),qP=G(k());Mn();FP=G(J()),kP=G(L()),$P=G(Y()),HP=100,Mg=new Set,KZ=(0,$P.convertToMS)(FP.get(kP.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,Ea=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),Mg.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Mg.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(Gu&&!this.overloadChecked&&performance.now()-GP>KZ)throw new xP.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,Ug.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let d=this.validated;this.validated=this.writes.length;for(let f=d;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let E;for(let f=d;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 m=d;m<this.validated;m++){let S=this.writes[m];if(!S)continue;let g=S[f===0?"before":"beforeIntermediate"];if(g){let T=g();h?h.push?h.push(T):h=[h,T]:h=T}}h&&await(h.push?Promise.all(h):h)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(d){throw this.abort(),d}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(d=>d);let c=a(d=>{d.commit(r,d.entry,n)},"doWrite"),l=a(()=>{let d=this.writes[o++];if(d)if(d.key){n>0&&(d.entry=d.store.getEntry(d.key));let E=d.store.ifVersion(d.key,d.entry?.version??null,l);s=s||E}else l();else for(let E of this.writes)c(E)},"nextCondition"),_=this.lmdbDb;if(this.writes.length>0&&(_?.retryRisk&&(_.retryRisk*=.99),this.writes.length+(_?.retryRisk||0)<HP>>n?l():s=this.writes[0].store.transaction(()=>{for(let d of this.writes)d.entry=d.store.getEntry(d.key),c(d);return!0})),s)return Gu||(Gu=s,GP=performance.now(),Gu.then(()=>{Gu=null})),s.then(d=>d?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(_&&(_.retryRisk=(_.retryRisk||0)+HP/2),t?t.retries=n+1:t={retries:1},this.commit(t)));let u={txnTime:r};if(this.next){let d=this.next?.commit(t);if(d?.then)return d?.then(E=>({txnTime:r,next:E}));u.next=d}return u}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},lE=class extends Ea{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Ug.getNextMonotonicTime)())}getReadTxn(){}},WZ=3e4;a(jZ,"startMonitoringTxns");jZ()});function it(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 Ea;e.timestamp&&(n.timestamp=e.timestamp),n[Ie]=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 VP,ha=be(()=>{VP=require("../index");Mn();vg();a(it,"transaction");(0,VP._assignPackageExport)("transaction",it);it.commit=function(e){let t=(e[Ie]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};it.abort=function(e){let t=(e[Ie]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var XP={};$e(XP,{ResourceBridge:()=>Gg});function xg({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 KP(e,t){let r=Hs(e),n=xg(e,r);if(!r)throw new cs.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},o;it(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let _=c[l++],u;try{u=await r.get({id:_,lazy:s,select:n},i),u=u&&_E(u)}catch(d){u={message:d.toString()}}return t?{value:{key:_,value:u}}:{value:u}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function Hs(e){let t=e.database||e.schema||JZ,r=Mr()[t];if(!r)throw(0,cs.handleHDBError)(new Error,zZ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function WP(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*QP(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:l}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(l)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[l]})}n&&(yield n)}var jP,uE,cs,zP,ls,Bg,Hg,JP,zZ,JZ,XZ,ZZ,YP,Gg,ZP=be(()=>{"use strict";jP=G(BP()),uE=G(bc()),cs=G(ie());Re();zP=G(Su()),ls=G(L()),Bg=G(hi()),Hg=G(os()),JP=G(Y());ha();dE();({HDB_ERROR_MSGS:zZ}=cs.hdb_errors),JZ="data",XZ=1e4,ZZ=10,Gg=class extends jP.default{static{a(this,"ResourceBridge")}constructor(t){super(t),YP=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,uE.default)(t,"conditions");if(r)throw(0,cs.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Hs(t);if(!n)throw new cs.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:xg(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache})}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 cs.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}]}St({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await Hs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Hs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(_=>{if(!_){let{value:u,version:d}=r.primaryStore.getEntry(o);return i(o,u,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(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Hs(t).dropTable()}createSchema(t){return Ic({database:t.schema,table:null}),Bg.signalSchemaChange(new Hg.SchemaEventMsg(process.pid,ls.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await qg(t.schema),Bg.signalSchemaChange(new Hg.SchemaEventMsg(process.pid,ls.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,YP.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,zP.default)(t),s,i=Mr()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return it(o,async c=>{if(!i.schemaDefined){s=[];for(let u of n)i.attributes.find(E=>E.name==u)||s.push(u);s.length>0&&await i.addAttributes(s.map(u=>({name:u,indexed:!0})))}let l=[],_=[];for(let u of t.records){let d=u[i.primaryKey],E=d!=null&&await i.get(d,o);if(t.requires_existing&&!E||t.requires_no_existing&&E){_.push(u[i.primaryKey]);continue}E&&(E=_E(E));for(let f in u)if(Object.prototype.hasOwnProperty.call(u,f)){let h=u[f];if(typeof h=="function")try{let m=h([[E]]);Array.isArray(m)&&(h=m[0].func_val,u[f]=h)}catch(m){throw m.message+="Trying to set key "+f+" on object"+JSON.stringify(u),m}}if(E)for(let f in E)Object.prototype.hasOwnProperty.call(u,f)||(u[f]=E[f]);await(d==null?i.create(u,o):i.put(u,o)),l.push(u[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=Mr()[t.schema][t.table],n={user:t.hdb_user};return it(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 WP(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Mr()[t.schema][t.table];if(!r.createdTimeProperty)throw new cs.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:ls.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],_=a(async()=>{let u=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...u.deleted_hashes),o.push(...u.skipped_hashes),await(0,JP.async_set_timeout)(ZZ),l=[],s=!0},"chunkDelete");for await(let u of n)l.push(u[r.primaryKey]),c++,c%XZ===0&&await _();return l.length>0&&await _(),s?WP(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,uE.default)(t,"hashes");if(r)throw r;return KP(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of KP(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&ls.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,uE.default)(t,"value");if(n)throw n;let s=Hs(t);if(!s)throw new cs.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===ls.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:xg(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache})}async getDataByValue(t,r){let n=new Map,s=Hs(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){Hs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Hs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Hs(t),n={};switch(t.search_type){case ls.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.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case ls.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of QP(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return QP(r,t.search_values?.[0],t.search_values?.[1])}}};a(xg,"getSelect");a(KP,"getRecords");a(Hs,"getTable");a(WP,"createDeleteResponse");a(QP,"groupRecordsInHistory")});var Hn=R((Gge,eM)=>{"use strict";var{ResourceBridge:e5}=(ZP(),ae(XP)),t5=J();t5.initSync();var fE;function r5(){return fE||(fE=new e5,fE)}a(r5,"getBridge");eM.exports=r5()});var sM=R((qge,nM)=>{"use strict";var tM=require("lodash"),xu=require("mathjs"),n5=require("jsonata"),rM=Y();nM.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?tM.uniqWith(e,tM.isEqual):e,searchJSON:s5,mad:qu.bind(null,xu.mad),mean:qu.bind(null,xu.mean),mode:qu.bind(null,xu.mode),prod:qu.bind(null,xu.prod),median:qu.bind(null,xu.median)};function qu(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(qu,"aggregateFunction");function s5(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(rM.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),rM.isEmpty(this.__ala__.res[r])){let n=n5(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(s5,"searchJSON")});var oM=R((kge,iM)=>{"use strict";var It=require("moment"),Fg="YYYY-MM-DDTHH:mm:ss.SSSZZ";It.suppressDeprecationWarnings=!0;iM.exports={current_date:()=>It().utc().format("YYYY-MM-DD"),current_time:()=>It().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return It(e).utc().format("YYYY");case"month":return It(e).utc().format("MM");case"day":return It(e).utc().format("DD");case"hour":return It(e).utc().format("HH");case"minute":return It(e).utc().format("mm");case"second":return It(e).utc().format("ss");case"millisecond":return It(e).utc().format("SSS");default:break}},date:e=>It(e).utc().format(Fg),date_format:(e,t)=>It(e).utc().format(t),date_add:(e,t,r)=>It(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>It(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=It(e).utc(),s=It(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>It().utc().valueOf(),get_server_time:()=>It().format(Fg),offset_utc:(e,t)=>It(e).utc().utcOffset(t).format(Fg)}});var uM=R(($ge,lM)=>{"use strict";var i5=require("@turf/area"),o5=require("@turf/length"),a5=require("@turf/circle"),c5=require("@turf/difference"),l5=require("@turf/distance"),u5=require("@turf/boolean-contains"),_5=require("@turf/boolean-equal"),d5=require("@turf/boolean-disjoint"),f5=require("@turf/helpers"),aM=L(),Ae=Y(),Si=k();lM.exports={geoArea:E5,geoLength:h5,geoCircle:p5,geoDifference:m5,geoDistance:cM,geoNear:S5,geoContains:T5,geoEqual:g5,geoCrosses:R5,geoConvert:A5};function E5(e){if(Ae.isEmpty(e))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return i5.default(e)}catch(t){return Si.trace(t,e),NaN}}a(E5,"geoArea");function h5(e,t){if(Ae.isEmpty(e))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return o5.default(e,{units:t||"kilometers"})}catch(r){return Si.trace(r,e),NaN}}a(h5,"geoLength");function p5(e,t,r){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return a5.default(e,t,{units:r||"kilometers"})}catch(n){return Si.trace(n,e,t),NaN}}a(p5,"geoCircle");function m5(e,t){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return c5(e,t)}catch(r){return Si.trace(r,e,t),NaN}}a(m5,"geoDifference");function cM(e,t,r){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return l5.default(e,t,{units:r||"kilometers"})}catch(n){return Si.trace(n,e,t),NaN}}a(cM,"geoDistance");function S5(e,t,r,n){if(Ae.isEmpty(e)||Ae.isEmpty(t))return!1;if(Ae.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return cM(e,t,n)<=r}catch(s){return Si.trace(s,e,t),!1}}a(S5,"geoNear");function T5(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return u5.default(e,t)}catch(r){return Si.trace(r,e,t),!1}}a(T5,"geoContains");function g5(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return _5.default(e,t)}catch(r){return Si.trace(r,e,t),!1}}a(g5,"geoEqual");function R5(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return!d5.default(e,t)}catch(r){return Si.trace(r,e,t),!1}}a(R5,"geoCrosses");function A5(e,t,r){if(Ae.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ae.isEmpty(t))throw new Error("geo_type is required");if(Ae.isEmpty(aM.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(aM.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ae.autoCastJSON(e)),f5[t](e,r)}a(A5,"geoConvert")});var EE=R((Yge,_M)=>{var pa=sM(),fn=oM(),Gs=uM();_M.exports=e=>{e.aggr.mad=e.aggr.MAD=pa.mad,e.aggr.mean=e.aggr.MEAN=pa.mean,e.aggr.mode=e.aggr.MODE=pa.mode,e.aggr.prod=e.aggr.PROD=pa.prod,e.aggr.median=e.aggr.MEDIAN=pa.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=pa.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=pa.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=fn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=fn.current_time,e.fn.extract=e.fn.EXTRACT=fn.extract,e.fn.date=e.fn.DATE=fn.date,e.fn.date_format=e.fn.DATE_FORMAT=fn.date_format,e.fn.date_add=e.fn.DATE_ADD=fn.date_add,e.fn.date_sub=e.fn.DATE_SUB=fn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=fn.date_diff,e.fn.now=e.fn.NOW=fn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=fn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=fn.get_server_time,e.fn.getdate=e.fn.GETDATE=fn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=fn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Gs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Gs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Gs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Gs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Gs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Gs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Gs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Gs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Gs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Gs.geoNear}});var hM=R((Kge,EM)=>{"use strict";var Fu=require("lodash"),Ur=require("alasql");Ur.options.cache=!1;var O5=EE(),dM=require("clone"),hE=require("recursive-iterator"),he=k(),Me=Y(),wc=Hn(),b5=L(),{hdb_errors:N5}=ie(),{getDatabases:fM}=(Re(),ae(Ve)),y5="IS NULL",us="There was a problem performing this search. Please check the logs and try again.";O5(Ur);var kg=class{static{a(this,"SQLSearch")}constructor(t,r){if(Me.isEmpty(t))throw he.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(),Me.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Me.isEmptyOrZeroLength(n))return he.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw he.error("Error thrown from checkEmptySQL in SQLSearch class method search."),he.error(n),new Error(us)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw he.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),he.error(n),new Error(us)}if(Object.keys(this.data).length===0)return he.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw he.error("Error thrown from processJoins in SQLSearch class method search."),he.error(n),new Error(us)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw he.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),he.error(n),new Error(us)}try{return t=await this._finalSQL(),t}catch(n){throw he.error("Error thrown from finalSQL in SQLSearch class method search."),he.error(n),new Error(us)}}_getColumns(){let t=new hE(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(dM(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Fu.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=fM()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Me.isEmpty(this.statement.where)){he.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new hE(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Me.isEmpty(r)&&r.right)if(Me.isNotEmptyAndHasValue(r.right.value)){let n=Me.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Ur.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Me.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Ur.yy.LogicValue({value:i}):n instanceof Ur.yy.StringValue&&Me.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Ur.yy.NumValue({value:i}))});if(t){he.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new hE(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(!Me.isEmpty(b5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Me.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Me.isEmptyOrZeroLength(r.left.columnid)||Me.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(Me.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"=":!Me.isEmpty(r.right.value)||!Me.isEmpty(r.left.value)?n.add(Me.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 _=0;_<l.length;_++)if(l[_].value)n.add(l[_].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(Me.isEmptyOrZeroLength(this.all_table_attributes)&&Me.isEmptyOrZeroLength(this.statement.from)&&Me.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&&Fu.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(Me.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Me.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(Me.isEmptyOrZeroLength(this.all_table_attributes)&&!Me.isEmptyOrZeroLength(this.columns.columns))return t;if(Me.isEmptyOrZeroLength(this.all_table_attributes)&&Me.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Ur.promise(r)}catch(r){throw he.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),he.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(dM(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(Me.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(y5)>-1&&this.tables.forEach(s=>{let i={columnid:fM()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Fu.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,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!Me.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Me.isEmptyOrZeroLength(this.exact_search_values[_].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[_].values);let u=await wc.getDataByHash(c);for(let d of c.hash_values)u.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(u){throw he.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),he.error(u),new Error(us)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async u=>{let d=Object.assign({},c);d.search_value=u;let E=await wc.getDataByValue(d);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(u){throw he.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),he.error(u),new Error(us)}else if(!Me.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Me.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let u=this.comparator_search_values[_].comparators;for(let d=0,E=u.length;d<E;d++){let f=u[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await wc.getDataByValue(c,f.operation);if(l)for(let[m]of h)this.data[i].__merged_data[m]||(this.data[i].__merged_data[m]=[...n[i]],this._setMergedHashAttribute(i,m));else for(let[m,S]of h)this.data[i].__merged_data[m]?this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]):(this.data[i].__merged_data[m]=[...n[i]],this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,m))}}catch(u){throw he.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),he.error(u),new Error(us)}else try{c.search_attribute=s.attribute,c.search_value="*";let u=await wc.getDataByValue(c);if(l)for(let[d]of u)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,E]of u)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]),this._setMergedHashAttribute(i,d))}catch(u){throw he.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),he.error(u),new Error(us)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof Ur.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 Ur.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Ur.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 Ur.yy.FuncValue:new Ur.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,m=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${m}.${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 "${m}.${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 _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(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 u="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(u=this.statement.limit?"LIMIT "+this.statement.limit:"",d=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 Ur.promise(h,t),t=null}catch(f){throw he.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),he.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 m=E[f];o.forEach(S=>{m[S.key]!==null&&m[S.key]!==void 0&&S.keys.add(m[S.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),m=Fu.difference(h,[...f.keys].map(S=>S.toString()));for(let S=0,g=m.length;S<g;S++){let T=m[S];delete this.data[`${f.schema}_${f.table}`].__merged_data[T]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new hE(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=Fu.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 he.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),he.error(i),new Error(us)}}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 u in i)o.push(i[u][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 wc.getDataByHash(c),_=s.columns.length;for(let u=0,d=o.length;u<d;u++){let E=o[u],f=l.get(E);for(let h=0;h<_;h++){let m=s.columns[h],S=f[m]===void 0?null:f[m];this.data[n].__merged_data[E].push(S)}}}}catch(r){throw he.error("Error thrown from getDataByHash function in SQLSearch class method getData."),he.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();he.trace(`Final SQL: ${s}`),n=await Ur.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),he.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw he.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),he.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 he.error(N5.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),he.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],_=new RegExp(`${l}.\`${o}\``,"g"),u=`${l}.[${c}]`;n=n.replace(_,u)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(l,_)});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 wc.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]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw he.error("There was an error when processing this SQL operation. Check your logs"),he.error(o),new Error(us)}}return Object.values(Object.values(this.data)[0].__merged_data)}};EM.exports=kg});var ur=R((Qge,pM)=>{"use strict";var I5=XI();pM.exports={searchByConditions:C5,searchByHash:D5,searchByValue:L5,search:P5};var $g=Hn(),{transformReq:Vg}=Y(),w5=hM();async function C5(e){return Vg(e),$g.searchByConditions(e)}a(C5,"searchByConditions");async function D5(e){Vg(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of $g.searchByHash(e))r&&t.push(r);return t}a(D5,"searchByHash");async function L5(e){Vg(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of $g.searchByValue(e))t.push(r);return t}a(L5,"searchByValue");function P5(e,t){try{let r=new I5(e);r.validate(),new w5(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(P5,"search")});var pE=R((zge,mM)=>{"use strict";var M5=Hn();mM.exports={writeTransaction:U5};function U5(e,t,r){return M5.writeTransaction(e,t,r)}a(U5,"writeTransaction")});var RM=R((Zge,gM)=>{"use strict";var v5=ur(),B5=Bn(),SM=k(),H5=Cr(),Xge=pE(),G5=require("clone"),Kg=require("alasql"),x5=EE(),TM=require("util"),q5=TM.promisify(B5.getTableSchema),F5=TM.promisify(v5.search),k5=L(),Yg=Y();x5(Kg);gM.exports={update:V5};var $5="There was a problem performing this update. Please check the logs and try again.";async function V5({statement:e,hdb_user:t}){let r=await q5(e.table.databaseid,e.table.tableid),n=Y5(e.columns);Yg.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=G5(s),c=Yg.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=Kg.parse(l).statements[0],u=await F5(_),d=K5(n,u);return W5(o,d,t)}a(V5,"update");function Y5(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Kg.compile(`SELECT ${r.expression.toString()} AS [${k5.FUNC_VAL}] FROM ?`)}),t}catch(t){throw SM.error(t),new Error($5)}}a(Y5,"createUpdateRecord");function K5(e,t){return Yg.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(K5,"buildUpdateRecords");async function W5(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await H5.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){SM.error(`Error delete new_attributes from update response: ${i}`)}return s}a(W5,"updateRecords")});var OM=R((nRe,AM)=>{var Q5=require("alasql"),j5=ur(),z5=k(),J5=Hn(),Qg=require("util"),Wg=Y(),X5=L(),Z5=Bn(),tRe=pE(),rRe=Cr(),e8="record",t8="successfully deleted",r8=Qg.callbackify(o8),n8=Qg.promisify(j5.search),s8=Qg.promisify(Z5.getTableSchema);AM.exports={convertDelete:r8};function i8(e){return`${e.deleted_hashes.length} ${e8}${e.deleted_hashes.length===1?"":"s"} ${t8}`}a(i8,"generateReturnMessage");async function o8({statement:e,hdb_user:t}){let r=await s8(e.table.databaseid,e.table.tableid);Wg.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Wg.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Q5.parse(o).statements[0],l={operation:X5.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await n8(c);let _=await J5.deleteRecords(l);return Wg.isEmptyOrZeroLength(_.message)&&(_.message=i8(_)),delete _.txn_time,_}catch(_){throw z5.error(_),_.hdb_code?_.message:_}}a(o8,"convertDelete")});var wM=R((iRe,IM)=>{"use strict";var a8=Ei(),{hdb_errors:bM}=ie(),{getDatabases:NM}=(Re(),ae(Ve));IM.exports={checkSchemaExists:yM,checkSchemaTableExists:c8,schema_describe:a8};async function yM(e){if(!NM()[e])return bM.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(yM,"checkSchemaExists");async function c8(e,t){let r=await yM(e);if(r)return r;if(!NM()[e][t])return bM.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(c8,"checkSchemaTableExists")});var ma=R((aRe,l8)=>{l8.exports={name:"harperdb",version:"4.3.30",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",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.635.0","@aws-sdk/lib-storage":"3.635.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.12.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.8",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.26.2","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.1.3",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.30.1","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.19.0",needle:"3.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.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.22.9","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.17.1",yaml:"2.4.1"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.8",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.20.2",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.3.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.22.11","newman-reporter-teamcity":"0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.4.2","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var Ku={};$e(Ku,{addAnalyticsListener:()=>Yu,recordAction:()=>vr,recordActionBinary:()=>En,setAnalyticsEnabled:()=>u8});function u8(e){HM=e}function vr(e,t,r,n,s){if(!HM)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=TE.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let _=c;o.values=c=new Float32Array(l*2),c.set(_),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},TE.set(i,o)}mE||_8()}function En(e,t,r,n,s){vr(!!e,t,r,n,s)}function Yu(e){qM.push(e)}function _8(){mE=performance.now(),setTimeout(async()=>{let e=performance.now()-mE;mE=0;let t=[],r={time:Date.now(),period:e,threadId:Sa.threadId,metrics:t};for(let[s,i]of TE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,_=[],u;for(let d of FM){let E=Math.floor(c*d),f=o[E-1];if(E>l){let h=E-l;if(f===u){let m=_[_.length-1];typeof m=="number"?_[_.length-1]={value:m,count:1+h}:m.count+=h}else _.push(h>1?{value:f,count:h}:f),u=f;l=E}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await kM()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Sa.threadId,byThread:!0,...n});for(let s of qM)s(t);TE=new Map,Sa.parentPort?Sa.parentPort.postMessage({type:xM,report:r}):YM({report:r})},GM).unref()}async function d8(e,t=6e4){let r=Jg(),n=$M(),s=new Promise(m=>{let S=performance.now();setImmediate(()=>{let g=performance.now();g-S>5e3&&(0,ku.warn)("Unusually high event queue latency on the main thread of "+Math.round(g-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let g=performance.now();g-S>5e3&&(0,ku.warn)("Unusually high task queue latency on the main thread of "+Math.round(g-S)+"ms"),m(g-S)})}),i;for(let m of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(m.value?.time){i=m.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,_=[],u;for(let{key:m,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(m>o+t)break}else o=m;u=m;let{metrics:g,threadId:T}=S;for(let b of g||[]){let{path:N,method:U,type:v,metric:q,count:M,total:W,distribution:z,threads:X,...ce}=b;M||(M=1);let _e=q+(N?"-"+N:"");U!==void 0&&(_e+="-"+U),v!==void 0&&(_e+="-"+v);let de=c.get(_e);if(de){if(de.threads){let we=de.threads[T];if(we)de=we;else{de.threads[T]=Object.assign({},ce);continue}}de.count||(de.count=1);let Ge=de.count;for(let we in ce){let xe=ce[we];typeof xe=="number"&&(de[we]=(de[we]*Ge+xe*M)/(Ge+M))}de.count+=M,W>=0&&(de.total+=W,de.ratio=de.total/de.count)}else de=Object.assign({period:t},b),delete de.distribution,c.set(_e,de),de.byThread&&(de.threads=[],de.threads[T]=Object.assign({},ce),_.push(de));if(z){z=z.map(we=>typeof we=="number"?{value:we,count:1}:we);let Ge=l.get(_e);Ge?Ge.push(...z):l.set(_e,z)}}await kM()}for(let m of _){let{path:S,method:g,type:T,metric:b,count:N,total:U,distribution:v,threads:q,...M}=m;q=q.filter(W=>W);for(let W in M){if(typeof m[W]!="number")continue;let z=0;for(let X of q){let ce=X[W];typeof ce=="number"&&(z+=ce)}m[W]=z}m.count=q.length,delete m.threads,delete m.byThread}for(let[m,S]of l){let g=c.get(m);S.sort((we,xe)=>we.value>xe.value?1:-1);let T=g.count-1,b=[],N=0,U=0,v;for(let we of FM){let xe=T*we;for(;N<xe;)v=S[U++],N+=v.count,U===1&&N--;let Wd=S[U>1?U-2:0];v||(v=S[0]),b.push(v.value-(v.value-Wd.value)*(N-xe)/v.count)}let[q,M,W,z,X,ce,_e,de,Ge]=b;Object.assign(g,{p1:q,p10:M,p25:W,median:z,p75:X,p90:ce,p95:_e,p99:de,p999:Ge})}let d;for(let[m,S]of c)S.id=(0,SE.getNextMonotonicTime)(),S.time=u,n.primaryStore.put(S.id,S,{append:!0}).then(g=>{g||n.primaryStore.put(S.id,S)}),d=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(d||h*10>f){let m=(0,SE.getNextMonotonicTime)(),S={id:m,metric:"main-thread-utilization",idle:f-CM,active:h-DM,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(m,S,{append:!0}).then(g=>{g||n.primaryStore.put(m,S)})}CM=f,DM=h}async function LM(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Jg(){return PM||(PM=St({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function $M(){return MM||(MM=St({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function h8(){VM=!0;let e=(0,Vu.get)(zg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await d8(GM,e),await LM(Jg(),f8),await LM($M(),E8)},Math.min(e/2,2147483647)).unref()}function YM(e,t){let r=e.report;r.threadId=t?.threadId||Sa.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(UM+=n.mean*n.count);r.totalBytesProcessed=UM,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(vM.get(t))}),vM.set(t,t.performance.eventLoopUtilization())),r.id=(0,SE.getNextMonotonicTime)(),Jg().primaryStore.put(r.id,r),VM||h8(),p8&&(KM=S8(r))}async function S8(e){if(await KM,!fo){let r=(0,$u.dirname)((0,ku.getLogFilePath)());try{fo=await(0,jg.open)((0,$u.join)(r,"analytics.log"),"r+")}catch{fo=await(0,jg.open)((0,$u.join)(r,"analytics.log"),"w+")}}let t=(await fo.stat()).size;if(t>m8){let r=Buffer.alloc(t);await fo.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await fo.write(r,{position:0}),await fo.truncate(r.length),t=r.length}await fo.write(JSON.stringify(e)+`
|
|
11
11
|
`,t)}var Sa,BM,ku,$u,jg,SE,Vu,zg,TE,HM,mE,GM,xM,qM,FM,CM,DM,kM,f8,E8,PM,MM,VM,UM,vM,p8,KM,fo,m8,Ti=be(()=>{Sa=require("worker_threads"),BM=G(rt());Re();ku=G(k()),$u=require("path"),jg=require("fs/promises"),SE=G(Nr()),Vu=G(J()),zg=G(L());yr();(0,Vu.initSync)();TE=new Map,HM=(0,Vu.get)(zg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(u8,"setAnalyticsEnabled");a(vr,"recordAction");dt.recordAnalytics=vr;a(En,"recordActionBinary");mE=0,GM=1e3,xM="analytics-report",qM=[];a(Yu,"addAnalyticsListener");FM=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(_8,"sendAnalytics");a(d8,"aggregation");CM=0,DM=0,kM=a(()=>new Promise(setImmediate),"rest");a(LM,"cleanup");f8=36e5,E8=31536e6;a(Jg,"getRawAnalyticsTable");a($M,"getAnalyticsTable");(0,BM.setChildListenerByType)(xM,YM);a(h8,"startScheduledTasks");UM=0,vM=new Map,p8=!1;a(YM,"recordAnalytics");m8=1e6;a(S8,"logAnalytics")});var rR=R((gRe,sU)=>{"use strict";var{decode:T8}=require("msgpackr"),{isMainThread:mRe,parentPort:SRe,threadId:TRe}=require("worker_threads"),AE=gt(),Cc=Ze(),eR=L(),hr=k(),Zg=J(),g8=L(),{onMessageByType:R8}=rt(),zM=fi(),{recordAction:WM,recordActionBinary:A8}=(Ti(),ae(Ku)),{publishToStream:O8}=AE,{ConsumerEvents:QM}=require("nats"),b8=ur(),{promisify:N8}=require("util"),JM=N8(setTimeout),OE=1e4,bE,RE,y8,I8,XM,Wu=new Map,Dc=new Map;sU.exports={initialize:ZM,ingestConsumer:tR,setSubscription:w8,setIgnoreOrigin:L8,getDatabaseSubscriptions:D8,updateConsumer:eU};async function ZM(){R8(eR.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await eU(n)}),XM=!0,hr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await AE.getNATSReferences();bE=e,RE=e.info.server_name,y8=t,I8=r}a(ZM,"initialize");async function eU(e){if(e.status==="start"){let{js:t,jsm:r}=await tU(e.node_domain_name);tR(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Wu.get(e.stream_name+e.node_domain_name);t&&(hr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Wu.set(e.stream_name+e.node_domain_name,"close")),Dc.get(e.node_domain_name)==="failed"&&Dc.set(e.node_domain_name,"close")}}a(eU,"updateConsumer");var NE=new Map;function w8(e,t,r){let n=NE.get(e);n||NE.set(e,n=new Map),n.set(t,r),XM||ZM().then(C8)}a(w8,"setSubscription");async function C8(){let e=await b8.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Cc.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions)if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await tU(r),!n))break;let{schema:o,table:c}=i,l=zM.createNatsTableStreamName(o,c);tR(l,n,s,r)}}}a(C8,"accessConsumers");async function tU(e){let t,r,n=1;for(;!r;)try{t=await bE.jetstream({domain:e}),r=await bE.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Dc.get(e)==="close")break;Dc.set(e,"failed"),n%10===1&&hr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<OE?n++*100:OE;await JM(i)}return{js:t,jsm:r}}a(tU,"connectToRemoteJS");function D8(){return NE}a(D8,"getDatabaseSubscriptions");var rU;function L8(e){rU=e}a(L8,"setIgnoreOrigin");var nU=100,jM=new Array(nU),gE=0;async function tR(e,t,r,n){let{connection:s}=await AE.getNATSReferences();bE=s,RE=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,RE),hr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(Dc.get(n)==="close")break;o%10===1&&hr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(hr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await AE.createConsumer(r,e,RE,new Date(Date.now()).toISOString()));let u=o++*100<OE?o++*100:OE;await JM(u)}let c=!1,l;for(;!c;){if(Wu.get(e+n)==="close"||Dc.get(n)==="close"){Wu.delete(e+n),c=!0;continue}l=await i.consume({max_messages:Zg.get(eR.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Wu.set(e+n,l);let _=!1;(async()=>{for await(let u of await l.status())if(u.type===QM.ConsumerDeleted&&(await l.close(),c=!0),u.type===QM.HeartbeatsMissed){let d=u.data;hr.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===100&&(hr.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),_=!0)}})();try{for await(let u of l)await jM[gE],jM[gE]=P8(u).catch(d=>{hr.error(d)}),++gE>=nU&&(gE=0)}catch(u){u.message==="consumer deleted"?(hr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):hr.error("Error consuming clustering ingest, restarting consumer",u)}}}a(tR,"ingestConsumer");async function P8(e){let t=T8(e.data);WM(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),hr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=Zg.get(eR.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Cc.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Cc.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Cc.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!rU),A8(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Cc.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:_,records:u,hash_values:d,__origin:E,expiresAt:f}=t;hr.trace("processing message:",o,c,_,(u?"records: "+u.map(U=>U?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),hr.trace(`messageProcessor nats msg id: ${e.headers.get(Cc.MSG_HEADERS.NATS_MSG_ID)}`);let h;u||(u=d);let m=new Promise(U=>h=U),{timestamp:S,user:g,node_name:T}=E||{},b=NE.get(c)?.get(_);if(!b)throw new Error(`Missing table for replication message: ${_}`);if(o==="define_schema")t.type=o,t.onCommit=h,b.send(t);else if(u.length===1&&!l)b.send({type:Xg(o),value:u[0],id:d?.[0],expiresAt:f,timestamp:S,table:_,onCommit:h,user:g,nodeName:T});else{let U=u.map((v,q)=>({type:Xg(o),value:v,expiresAt:f,id:d?.[q],table:_}));for(;l;)U.push({type:Xg(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;b.send({type:"transaction",writes:U,table:_,timestamp:S,onCommit:h,user:g,nodeName:T})}Zg.get(g8.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&O8(e.subject.split(".").slice(0,-1).join("."),zM.createNatsTableStreamName(c,_),e.headers,e.data),await m;let N=Date.now()-S;S&&WM(N,"replication-latency",e.subject,o,"ingest")}catch(o){hr.error(o)}e.ack()}a(P8,"messageProcessor");function Xg(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(Xg,"convertOperation")});var gt=R((IRe,RU)=>{"use strict";var Wt=J();Wt.initSync();var M8=require("fs-extra"),U8=require("semver"),zu=require("path"),{monotonicFactory:v8}=require("ulidx"),oU=v8(),B8=require("util"),aU=require("child_process"),H8=B8.promisify(aU.exec),G8=aU.spawn,rr=Ze(),Ce=L(),yE=Y(),_s=k(),IE=fi(),x8=pE(),Qu=Et(),{broadcast:q8,onMessageByType:F8,getWorkerIndex:k8}=rt(),{isMainThread:cU}=require("worker_threads"),{Encoder:$8,decode:oR}=require("msgpackr"),lU=new $8,{isEmpty:Aa}=yE,uU=Lr(),ARe=48*36e11;cU&&F8(Ce.ITC_EVENT_TYPES.RESTART,()=>{Br=void 0,Ra=void 0});var{connect:V8,StorageType:Y8,RetentionPolicy:K8,AckPolicy:aR,DeliverPolicy:cR,DiscardPolicy:W8,NatsConnection:ORe,JetStreamManager:bRe,JetStreamClient:NRe,StringCodec:yRe,JSONCodec:Q8,createInbox:lR,headers:j8,ErrorCode:iU}=require("nats"),{PACKAGE_ROOT:z8}=L(),J8=ma(),{recordAction:X8}=(Ti(),ae(Ku)),_U=Q8(),Z8="clustering",e6=J8.engines[rr.NATS_SERVER_NAME],t6=zu.join(z8,"dependencies"),iR=zu.join(t6,`${process.platform}-${process.arch}`,rr.NATS_BINARY_NAME),nR,sR,ju,Ta,ga;RU.exports={runCommand:dU,checkNATSServerInstalled:r6,createConnection:uR,getConnection:Ju,getJetStreamManager:Xu,getJetStream:EU,getNATSReferences:xs,getServerList:s6,createLocalStream:_R,listStreams:hU,deleteLocalStream:i6,getServerConfig:Lc,listRemoteStreams:o6,viewStream:a6,viewStreamIterator:c6,publishToStream:l6,request:d6,reloadNATS:dR,reloadNATSHub:f6,reloadNATSLeaf:E6,extractServerName:_6,requestErrorHandler:h6,createLocalTableStream:TU,createTableStreams:S6,purgeTableStream:gU,purgeSchemaTableStreams:T6,getStreamInfo:g6,updateLocalStreams:A6,closeConnection:n6,getJsmServerName:wE,addNatsMsgHeader:pU,clearClientCache:fU,updateRemoteConsumer:p6,createConsumer:mU,updateConsumerIterator:m6};async function dU(e,t=void 0){let{stdout:r,stderr:n}=await H8(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
12
12
|
`,""));return r.replace(`
|
|
13
13
|
`,"")}a(dU,"runCommand");async function r6(){try{await M8.access(iR)}catch{return!1}let e=await dU(`${iR} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return U8.eq(t,e6)}a(r6,"checkNATSServerInstalled");async function uR(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await uU.getClusterUser();if(Aa(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}_s.trace("create nats connection called");let i=await V8({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),_s.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&_s.error("Error with Nats client connection, connection closed",o),fU()}),i}a(uR,"createConnection");function fU(){Br=void 0,Ta=void 0,ga=void 0,Ra=void 0}a(fU,"clearClientCache");async function n6(){Br&&(await Br.drain(),Br=void 0,Ta=void 0,ga=void 0,Ra=void 0)}a(n6,"closeConnection");var Br,Ra;async function Ju(){return Ra||(Ra=uR(Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Br=await Ra),Br||Ra}a(Ju,"getConnection");async function Xu(){if(Ta)return Ta;Aa(Br)&&await Ju();let{domain:e}=Lc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Aa(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ta=await Br.jetstreamManager({domain:e,timeout:6e4}),Ta}a(Xu,"getJetStreamManager");async function EU(){if(ga)return ga;Aa(Br)&&await Ju();let{domain:e}=Lc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Aa(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ga=Br.jetstream({domain:e,timeout:6e4}),ga}a(EU,"getJetStream");async function xs(){let e=Br||await Ju(),t=Ta||await Xu(),r=ga||await EU();return{connection:e,jsm:t,js:r}}a(xs,"getNATSReferences");async function s6(e){let t=Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await uU.getClusterUser(),s=await uR(t,r,n),i=lR(),o=s.subscribe(i),c=[],l,_=(async()=>{for await(let u of o){let d=_U.decode(u.data);d.response_time=Date.now()-l,c.push(d)}})();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 yE.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(s6,"getServerList");async function _R(e,t){let{jsm:r}=await xs(),n=Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Y8.File,retention:K8.Limits,subjects:t,discard:W8.Old,max_msgs:s,max_bytes:i,max_age:n})}a(_R,"createLocalStream");async function hU(){let{jsm:e}=await xs(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(hU,"listStreams");async function i6(e){let{jsm:t}=await xs();await t.streams.delete(e)}a(i6,"deleteLocalStream");async function o6(e){let{connection:t}=await xs(),r=[],n=lR(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(_U.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(o6,"listRemoteStreams");async function a6(e,t=void 0,r=void 0){let{jsm:n,js:s}=await xs(),i=oU(),o={durable_name:i,ack_policy:aR.Explicit};t&&(o.deliver_policy=cR.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 _=[];for await(let u of l){let d=oR(u.data),E={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};if(u.headers&&(E.origin=u.headers.get(rr.MSG_HEADERS.ORIGIN)),_.push(E),u.ack(),u.info.pending===0)break}return await c.delete(),_}a(a6,"viewStream");async function*c6(e,t=void 0,r=void 0){let{jsm:n,js:s}=await xs(),i=oU(),o={durable_name:i,ack_policy:aR.Explicit};t&&(o.deliver_policy=cR.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 _ of l){let u=oR(_.data);u[0]||(u=[u]);for(let d of u){let E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(E.origin=_.headers.get(rr.MSG_HEADERS.ORIGIN)),yield E}if(_.ack(),_.info.pending===0)break}await c.delete()}a(c6,"viewStreamIterator");async function l6(e,t,r,n){_s.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=pU(n,r);let{js:s}=await xs(),i=await wE(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:lU.encode(n);try{_s.trace(`publishToStream publishing to subject: ${o}`),X8(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 SU(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){_s.trace(`publishToStream creating stream: ${t}`);let u=o.split(".");u[2]="*",await _R(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(l6,"publishToStream");function pU(e,t){t===void 0&&(t=j8());let r=Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(rr.MSG_HEADERS.ORIGIN)&&r&&t.append(rr.MSG_HEADERS.ORIGIN,r),t}a(pU,"addNatsMsgHeader");function Lc(e){e=e.toLowerCase();let t=zu.join(Wt.get(Ce.CONFIG_PARAMS.ROOTPATH),Z8);if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Aa(sR)&&(sR={port:Qu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Qu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+rr.SERVER_SUFFIX.HUB,config_file:rr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:zu.join(t,rr.PID_FILES.HUB),hdb_nats_path:t}),sR;if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Aa(nR)&&(nR={port:Qu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Qu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+rr.SERVER_SUFFIX.LEAF,config_file:rr.NATS_CONFIG_FILES.LEAF_SERVER,domain:Qu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+rr.SERVER_SUFFIX.LEAF,pid_file_path:zu.join(t,rr.PID_FILES.LEAF),hdb_nats_path:t}),nR;_s.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Lc,"getServerConfig");async function mU(e,t,r,n){try{await e.consumers.add(t,{ack_policy:aR.Explicit,durable_name:r,deliver_policy:cR.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(mU,"createConsumer");async function u6(e,t,r){await e.consumers.delete(t,r)}a(u6,"removeConsumer");function _6(e){return e.split(".")[1]}a(_6,"extractServerName");async function d6(e,t,r=6e4,n=lR()){if(!yE.isObject(t))throw new Error("data param must be an object");let s=lU.encode(t),{connection:i}=await xs(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return oR(c.data)}a(d6,"request");function dR(e){return new Promise(async(t,r)=>{let n=G8(iR,["--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(dR,"reloadNATS");async function f6(){let{pid_file_path:e}=Lc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await dR(e)}a(f6,"reloadNATSHub");async function E6(){let{pid_file_path:e}=Lc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await dR(e)}a(E6,"reloadNATSLeaf");function h6(e,t,r){let n;switch(e.code){case iU.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case iU.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(h6,"requestErrorHandler");async function p6(e,t){let r=t+rr.SERVER_SUFFIX.LEAF,{connection:n}=await xs(),{jsm:s}=await b6(r),{schema:i,table:o}=e,c=IE.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await SU(async()=>{if(e.subscribe===!0)await mU(s,c,n.info.server_name,l);else try{await u6(s,c,n.info.server_name)}catch(_){_s.trace(_)}})}a(p6,"updateRemoteConsumer");async function m6(e,t,r,n){let s=IE.createNatsTableStreamName(e,t),i=r+rr.SERVER_SUFFIX.LEAF,o={type:Ce.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!cU&&k8()<Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=rR();await c(o)}await q8(o),n==="stop"&&await yE.async_set_timeout(1e3)}a(m6,"updateConsumerIterator");function SU(e){return x8.writeTransaction(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(SU,"exclusiveLock");async function TU(e,t){let r=IE.createNatsTableStreamName(e,t),n=await wE(),s=R6(e,t,n);await _R(r,[s])}a(TU,"createLocalTableStream");async function S6(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await TU(n,s)}}a(S6,"createTableStreams");async function gU(e,t,r=void 0){if(Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=IE.createNatsTableStreamName(e,t),{domain:s}=Lc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Ju()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")_s.warn(n);else throw n}}a(gU,"purgeTableStream");async function T6(e,t){if(Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await gU(e,t[r])}a(T6,"purgeSchemaTableStreams");async function g6(e){return(await Xu()).streams.info(e)}a(g6,"getStreamInfo");function R6(e,t,r){return`${rr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(R6,"createSubjectName");async function wE(){if(ju)return ju;if(ju=(await Xu())?.nc?.info?.server_name,ju===void 0)throw new Error("Unable to get jetstream manager server name");return ju}a(wE,"getJsmServerName");async function A6(){let e=await Xu(),t=await wE(),r=await hU();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=O6(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let u=_.join(".");_s.trace(`Updating stream subject name from: ${i} to: ${u}`),s.subjects[0]=u,await e.streams.update(s.name,s)}}a(A6,"updateLocalStreams");function O6(e){let{config:t}=e,r=!1,n=Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Wt.get(Ce.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(O6,"updateStreamLimits");async function b6(e){let t,r;try{t=await Br.jetstream({domain:e}),r=await Br.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw _s.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(b6,"connectToRemoteJS")});var PE=R((DRe,NU)=>{"use strict";var Pc=Cf(),Mc=wM(),N6=k(),y6=require("uuid").v4,CRe=require("clone"),DE=hi(),Uc=L(),I6=require("util"),Eo=Hn(),{handleHDBError:Hr,hdb_errors:w6}=ie(),{HDB_ERROR_MSGS:CE,HTTP_STATUS_CODES:Gr}=w6,{SchemaEventMsg:LE}=os(),AU=gt(),{getDatabases:C6}=(Re(),ae(Ve)),{transformReq:vc}=Y();NU.exports={createSchema:D6,createSchemaStructure:OU,createTable:L6,createTableStructure:bU,createAttribute:B6,dropSchema:P6,dropTable:M6,dropAttribute:U6,getBackup:H6};async function D6(e){let t=await OU(e);return DE.signalSchemaChange(new LE(process.pid,e.operation,e.schema)),t}a(D6,"createSchema");async function OU(e){let t=Pc.schema_object(e);if(t)throw Hr(t,t.message,Gr.BAD_REQUEST,void 0,void 0,!0);if(vc(e),!await Mc.checkSchemaExists(e.schema))throw Hr(new Error,CE.SCHEMA_EXISTS_ERR(e.schema),Gr.BAD_REQUEST,Uc.LOG_LEVELS.ERROR,CE.SCHEMA_EXISTS_ERR(e.schema),!0);return await Eo.createSchema(e),`database '${e.schema}' successfully created`}a(OU,"createSchemaStructure");async function L6(e){return vc(e),e.hash_attribute=e.primary_key??e.hash_attribute,await bU(e)}a(L6,"createTable");async function bU(e){let t=Pc.create_table_object(e);if(t)throw Hr(t,t.message,Gr.BAD_REQUEST,void 0,void 0,!0);if(Pc.validateTableResidence(e.residence),!await Mc.checkSchemaTableExists(e.schema,e.table))throw Hr(new Error,CE.TABLE_EXISTS_ERR(e.schema,e.table),Gr.BAD_REQUEST,Uc.LOG_LEVELS.ERROR,CE.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:y6(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Eo.createTable(n,e);else throw Hr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Gr.BAD_REQUEST);else await Eo.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(bU,"createTableStructure");async function P6(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Pc.schema_object(e),n=t??r;if(n)throw Hr(n,n.message,Gr.BAD_REQUEST,void 0,void 0,!0);vc(e);let s=await Mc.checkSchemaExists(e.schema);if(s)throw Hr(new Error,s,Gr.NOT_FOUND,Uc.LOG_LEVELS.ERROR,s,!0);let i=await Mc.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Eo.dropSchema(e),DE.signalSchemaChange(new LE(process.pid,e.operation,e.schema)),await AU.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(P6,"dropSchema");async function M6(e){let t=Pc.table_object(e);if(t)throw Hr(t,t.message,Gr.BAD_REQUEST,void 0,void 0,!0);vc(e);let r=await Mc.checkSchemaTableExists(e.schema,e.table);if(r)throw Hr(new Error,r,Gr.NOT_FOUND,Uc.LOG_LEVELS.ERROR,r,!0);return await Eo.dropTable(e),await AU.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(M6,"dropTable");async function U6(e){let t=Pc.attribute_object(e);if(t)throw Hr(t,t.message,Gr.BAD_REQUEST,void 0,void 0,!0);vc(e);let r=await Mc.checkSchemaTableExists(e.schema,e.table);if(r)throw Hr(new Error,r,Gr.NOT_FOUND,Uc.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Hr(new Error,"You cannot drop a hash attribute",Gr.BAD_REQUEST,void 0,void 0,!0);if(Uc.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Hr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Gr.BAD_REQUEST,void 0,void 0,!0);try{return await Eo.dropAttribute(e),v6(e),DE.signalSchemaChange(new LE(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw N6.error(`Got an error deleting attribute ${I6.inspect(e)}.`),n}}a(U6,"dropAttribute");function v6(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(v6,"dropAttributeFromGlobal");async function B6(e){vc(e);let t=C6()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Hr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Gr.BAD_REQUEST,void 0,void 0,!0);return await Eo.createAttribute(e),DE.signalSchemaChange(new LE(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(B6,"createAttribute");function H6(e){return Eo.getBackup(e)}a(H6,"getBackup")});var IU=R((PRe,yU)=>{"use strict";var{OPERATIONS_ENUM:G6}=L(),fR=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=G6.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};yU.exports=fR});var ER=R((vRe,PU)=>{"use strict";var x6=Hn(),URe=IU(),ME=Y(),UE=L(),q6=J(),{handleHDBError:wU,hdb_errors:F6}=ie(),{HDB_ERROR_MSGS:CU,HTTP_STATUS_CODES:DU}=F6,k6=Object.values(UE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),LU="To use this operation audit log must be enabled in harperdb-config.yaml";PU.exports=$6;async function $6(e){if(ME.isEmpty(e.schema))throw new Error(CU.SCHEMA_REQUIRED_ERR);if(ME.isEmpty(e.table))throw new Error(CU.TABLE_REQUIRED_ERR);if(!q6.get(UE.CONFIG_PARAMS.LOGGING_AUDITLOG))throw wU(new Error,LU,DU.BAD_REQUEST,UE.LOG_LEVELS.ERROR,LU,!0);let t=ME.checkSchemaTableExist(e.schema,e.table);if(t)throw wU(new Error,t,DU.NOT_FOUND,UE.LOG_LEVELS.ERROR,t,!0);if(!ME.isEmpty(e.search_type)&&k6.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await x6.readAuditLog(e)}a($6,"readAuditLog")});var UU=R((HRe,MU)=>{"use strict";var{OPERATIONS_ENUM:V6}=L(),hR=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=V6.GET_BACKUP,this.schema=t,this.table=r}};MU.exports=hR});var HU=R((FRe,BU)=>{"use strict";var Y6=Hn(),xRe=UU(),pR=Y(),K6=L(),qRe=J(),{handleHDBError:W6,hdb_errors:Q6}=ie(),{HDB_ERROR_MSGS:vU,HTTP_STATUS_CODES:j6}=Q6;BU.exports=z6;async function z6(e){if(pR.isEmpty(e.schema))throw new Error(vU.SCHEMA_REQUIRED_ERR);if(pR.isEmpty(e.table))throw new Error(vU.TABLE_REQUIRED_ERR);let t=pR.checkSchemaTableExist(e.schema,e.table);if(t)throw W6(new Error,t,j6.NOT_FOUND,K6.LOG_LEVELS.ERROR,t,!0);return await Y6.getBackup(read_audit_log_object)}a(z6,"getBackup")});var $U=R(($Re,kU)=>{var ho=require("validate.js"),xU=nt(),Bc=L(),{handleHDBError:J6,hdb_errors:X6}=ie(),{HDB_ERROR_MSGS:Rt,HTTP_STATUS_CODES:Z6}=X6,mR=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),e9={STRUCTURE_USER:"structure_user"},GU=Object.values(Bc.ROLE_TYPES_ENUM),t9="attribute_permissions",r9="attribute_name",{PERMS_CRUD_ENUM:Hc}=Bc,n9=[t9,...Object.values(Hc)],qU=[Hc.READ,Hc.INSERT,Hc.UPDATE],s9=[r9,...qU];function i9(e){let t=mR();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,FU(e,t)}a(i9,"addRoleValidation");function o9(e){let t=mR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,FU(e,t)}a(o9,"alterRoleValidation");function a9(e){let t=mR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,xU.validateObject(e,t)}a(a9,"dropRoleValidation");var c9=["operation","role","id","permission","hdb_user","hdb_auth_header"];function FU(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)c9.includes(n[o])||s.push(n[o]);s.length>0&&wt(Rt.INVALID_ROLE_JSON_KEYS(s),r);let i=xU.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{wt(o,r)}),e.permission){let o=l9(e);o&&wt(o,r),GU.forEach(c=>{e.permission[c]&&!ho.isBoolean(e.permission[c])&&wt(Rt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(GU.indexOf(o)<0){if(o===e9.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let _=0,u=l.length;_<u;_++){let d=l[_];global.hdb_schema[d]||wt(Rt.SCHEMA_NOT_FOUND(d),r)}continue}wt(Rt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){wt(Rt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let _=c.tables[l];if(!l||!global.hdb_schema[o][l]){wt(Rt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(_).forEach(u=>{n9.includes(u)||wt(Rt.INVALID_PERM_KEY(u),r,o,l)}),Object.values(Hc).forEach(u=>{ho.isDefined(_[u])?ho.isBoolean(_[u])||wt(Rt.TABLE_PERM_NOT_BOOLEAN(u),r,o,l):wt(Rt.TABLE_PERM_MISSING(u),r,o,l)}),ho.isDefined(_.attribute_permissions)){if(!ho.isArray(_.attribute_permissions)){wt(Rt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}}else{wt(Rt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}if(_.attribute_permissions){let u=global.hdb_schema[o][l].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in _.attribute_permissions){let f=_.attribute_permissions[E];if(Object.keys(f).forEach(m=>{!s9.includes(m)&&m!==Hc.DELETE&&wt(Rt.INVALID_ATTR_PERM_KEY(m),r,o,l)}),!ho.isDefined(f.attribute_name)){wt(Rt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=f.attribute_name;if(!u.includes(h)){wt(Rt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}qU.forEach(m=>{ho.isDefined(f[m])?ho.isBoolean(f[m])||wt(Rt.ATTR_PERM_NOT_BOOLEAN(m,h),r,o,l):wt(Rt.ATTR_PERM_MISSING(m,h),r,o,l)}),!d.read&&f.read===!0&&(d.read=!0),!d.insert&&f.insert===!0&&(d.insert=!0),!d.update&&f.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let E=`${o}.${l}`;wt(Rt.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,l)}}}}return u9(r)}a(FU,"customValidate");kU.exports={addRoleValidation:i9,alterRoleValidation:o9,dropRoleValidation:a9};function l9(e){let{operation:t,permission:r}=e;if(t===Bc.OPERATIONS_ENUM.ADD_ROLE||t===Bc.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return Rt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Bc.ROLE_TYPES_ENUM.SUPER_USER:Bc.ROLE_TYPES_ENUM.CLUSTER_USER;return Rt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(l9,"validateNoSUPerms");function u9(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:Rt.ROLE_PERMS_ERROR,...e};return J6(new Error,n,Z6.BAD_REQUEST)}else return null}a(u9,"generateRolePermResponse");function wt(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(wt,"addPermError")});var BE=R((YRe,WU)=>{"use strict";var VU=Cr(),YU=ur(),_9=ia(),TR=$U(),gR=hi(),d9=require("uuid").v4,f9=require("util"),vE=L(),E9=Y(),RR=YU.searchByValue,h9=YU.searchByHash,p9=f9.promisify(_9.delete),m9=as(),S9=Nc(),{hdb_errors:T9,handleHDBError:Oa}=ie(),{HDB_ERROR_MSGS:KU,HTTP_STATUS_CODES:Zu}=T9,{UserEventMsg:AR}=os();WU.exports={addRole:g9,alterRole:R9,dropRole:A9,listRoles:O9};function SR(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(SR,"scrubRoleDetails");async function g9(e){let t=TR.addRoleValidation(e);if(t)throw t;e=SR(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await RR(r)||[])}catch(i){throw Oa(i)}if(n&&n.length>0)throw Oa(new Error,KU.ROLE_ALREADY_EXISTS(e.role),Zu.CONFLICT,void 0,void 0,!0);e.id||(e.id=d9());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await VU.insert(s),gR.signalUserChange(new AR(process.pid)),e=SR(e),e}a(g9,"addRole");async function R9(e){let t=TR.alterRoleValidation(e);if(t)throw t;e=SR(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await VU.update(r)}catch(s){throw Oa(s)}if(n&&n?.message==="updated 0 of 1 records")throw Oa(new Error,"Invalid role id",Zu.BAD_REQUEST,void 0,void 0,!0);return await gR.signalUserChange(new AR(process.pid)),e}a(R9,"alterRole");async function A9(e){let t=TR.dropRoleValidation(e);if(t)throw Oa(new Error,t,Zu.BAD_REQUEST,void 0,void 0,!0);let r=new S9(vE.SYSTEM_SCHEMA_NAME,vE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await h9(r));if(n.length===0)throw Oa(new Error,KU.ROLE_NOT_FOUND,Zu.NOT_FOUND,void 0,void 0,!0);let s=new m9(vE.SYSTEM_SCHEMA_NAME,vE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await RR(s)),o=!1;if(E9.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Oa(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Zu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await p9(c),gR.signalUserChange(new AR(process.pid)),`${n[0].role} successfully deleted`}a(A9,"dropRole");async function O9(){return RR({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(O9,"listRoles")});var JU=R((WRe,zU)=>{"use strict";var b9=J(),po=require("joi"),N9=nt(),QU=require("moment"),y9=require("fs-extra"),OR=require("path"),I9=require("lodash"),e_=L(),{LOG_LEVELS:ba}=L(),w9="YYYY-MM-DD hh:mm:ss",C9=OR.resolve(__dirname,"../logs");zU.exports=function(e){return N9.validateBySchema(e,D9)};var D9=po.object({from:po.custom(jU),until:po.custom(jU),level:po.valid(ba.NOTIFY,ba.FATAL,ba.ERROR,ba.WARN,ba.INFO,ba.DEBUG,ba.TRACE),order:po.valid("asc","desc"),limit:po.number().min(1),start:po.number().min(0),log_name:po.custom(L9)});function jU(e,t){if(QU(e,QU.ISO_8601).format(w9)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(jU,"validateDatetime");function L9(e,t){if(I9.invert(e_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=b9.get(e_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?e_.LOG_NAMES.HDB:e,i=s===e_.LOG_NAMES.INSTALL?OR.join(C9,e_.LOG_NAMES.INSTALL):OR.join(n,s);return y9.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(L9,"validateReadLogPath")});var NR=R((jRe,ZU)=>{"use strict";var HE=L(),P9=k(),M9=J(),U9=JU(),bR=require("path"),XU=require("fs-extra"),{once:v9}=require("events"),{handleHDBError:B9,hdb_errors:H9}=ie(),{PACKAGE_ROOT:G9}=L(),x9=bR.join(G9,"logs"),q9=1e3,F9=200;ZU.exports=k9;async function k9(e){let t=U9(e);if(t)throw B9(t,t.message,H9.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=M9.get(HE.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?HE.LOG_NAMES.HDB:e.log_name,s=n===HE.LOG_NAMES.INSTALL?bR.join(x9,HE.LOG_NAMES.INSTALL):bR.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,l=c?new Date(e.from):void 0,_=e.until!==void 0,u=_?new Date(e.until):void 0,d=e.limit===void 0?q9:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,m=0;E==="desc"&&!l&&!u&&(m=Math.max(XU.statSync(s).size-(h+5)*F9,0));let S=XU.createReadStream(s,{start:m});S.on("error",v=>{P9.error(v)});let g=0,T=[],b="",N;S.on("data",v=>{let q=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;v=b+v;let M=0,W;for(;(W=q.exec(v))&&!S.destroyed;){N&&(N.message=v.slice(M,W.index),U(N));let[z,X,ce]=W,_e=ce.split("] ["),de=_e[0],Ge=_e[1];_e.splice(0,2),N={timestamp:X,thread:de,level:Ge,tags:_e,message:""},M=W.index+z.length}b=v.slice(M)}),S.on("end",v=>{S.destroyed||N&&(N.message=b.trim(),U(N))}),S.resume();function U(v){let q,M,W;switch(!0){case(i&&c&&_):q=new Date(v.timestamp),M=new Date(l),W=new Date(u),v.level===o&&q>=M&&q<=W&&g<f?g++:v.level===o&&q>=M&&q<=W&&(mo(v,E,T),g++,g===h&&S.destroy());break;case(i&&c):q=new Date(v.timestamp),M=new Date(l),v.level===o&&q>=M&&g<f?g++:v.level===o&&q>=M&&(mo(v,E,T),g++,g===h&&S.destroy());break;case(i&&_):q=new Date(v.timestamp),W=new Date(u),v.level===o&&q<=W&&g<f?g++:v.level===o&&q<=W&&(mo(v,E,T),g++,g===h&&S.destroy());break;case(c&&_):q=new Date(v.timestamp),M=new Date(l),W=new Date(u),q>=M&&q<=W&&g<f?g++:q>=M&&q<=W&&(mo(v,E,T),g++,g===h&&S.destroy());break;case i:v.level===o&&g<f?g++:v.level===o&&(mo(v,E,T),g++,g===h&&S.destroy());break;case c:q=new Date(v.timestamp),M=new Date(l),q>=M&&g<f?g++:q>=M&&g>=f&&(mo(v,E,T),g++,g===h&&S.destroy());break;case _:q=new Date(v.timestamp),W=new Date(u),q<=W&&g<f?g++:q<=W&&g>=f&&(mo(v,E,T),g++,g===h&&S.destroy());break;default:g<f?g++:(mo(v,E,T),g++,g===h&&S.destroy())}}return a(U,"onLogMessage"),await v9(S,"close"),T}a(k9,"readLog");function mo(e,t,r){t==="desc"?$9(e,r):t==="asc"?V9(e,r):r.push(e)}a(mo,"pushLineToResult");function $9(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a($9,"insertDescending");function V9(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(V9,"insertAscending")});var GE=R((eAe,nv)=>{"use strict";var yR=require("joi"),{string:t_,boolean:ev,date:Y9}=yR.types(),K9=nt(),{validateSchemaExists:JRe,validateTableExists:XRe,validateSchemaName:ZRe}=Ls(),W9=L(),Q9=Ze(),tv=J();tv.initSync();var j9=t_.invalid(tv.get(W9.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Q9.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),rv={operation:t_.valid("add_node","update_node","set_node_replication"),node_name:j9,subscriptions:yR.array().items({table:t_.optional(),schema:t_.optional(),database:t_.optional(),subscribe:ev.required(),publish:ev.required().custom(J9),start_time:Y9.iso()}).min(1).required()};function z9(e){return K9.validateBySchema(e,yR.object(rv))}a(z9,"addUpdateNodeValidator");function J9(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(J9,"checkForFalsy");nv.exports={addUpdateNodeValidator:z9,validation_schema:rv}});var iv=R((rAe,sv)=>{var X9=nt(),Z9={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};sv.exports=function(e){return X9.validateObject(e,Z9)}});var xE=R((nAe,ov)=>{"use strict";var e7=L().OPERATIONS_ENUM,IR=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=e7.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};ov.exports=IR});var cv=R((iAe,av)=>{"use strict";var t7={OPERATION:"operation",REFRESH:"refresh"},wR=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},CR=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};av.exports={JWTTokens:wR,TOKEN_TYPE_ENUM:t7,JWTRSAKeys:CR}});var s_=R((aAe,dv)=>{"use strict";var n_=require("jsonwebtoken"),DR=require("fs-extra"),LR=Y(),Gn=L(),{handleHDBError:xr,hdb_errors:r7}=ie(),{HTTP_STATUS_CODES:qr,AUTHENTICATION_ERROR_MSGS:Fr}=r7,r_=k(),lv=qf(),UR=Lr(),n7=Cr().update,s7=xE(),i7=hi(),{UserEventMsg:o7}=os(),So=J();So.initSync();var PR=require("path"),{JWTTokens:a7,JWTRSAKeys:c7,TOKEN_TYPE_ENUM:qE}=cv(),l7=So.get(Gn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?So.get(Gn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",u7=So.get(Gn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?So.get(Gn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",FE="RS256",MR;dv.exports={createTokens:_7,validateOperationToken:f7,refreshOperationToken:d7,validateRefreshToken:_v};async function _7(e){if(LR.isEmpty(e)||typeof e!="object")throw xr(new Error,Fr.INVALID_AUTH_OBJECT,qr.BAD_REQUEST,void 0,void 0,!0);if(LR.isEmpty(e.username))throw xr(new Error,Fr.USERNAME_REQUIRED,qr.BAD_REQUEST,void 0,void 0,!0);if(LR.isEmpty(e.password))throw xr(new Error,Fr.PASSWORD_REQUIRED,qr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await UR.findAndValidateUser(e.username,e.password),!t)throw xr(new Error,Fr.INVALID_CREDENTIALS,qr.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw r_.error(E),xr(new Error,Fr.INVALID_CREDENTIALS,qr.UNAUTHORIZED,void 0,void 0,!0)}let r=await kE(),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 uv(i,r.private_key,r.passphrase),c=await n_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:u7,algorithm:FE,subject:qE.REFRESH}),l=lv.hash(c),_=new s7(Gn.SYSTEM_SCHEMA_NAME,Gn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),u,d;try{u=await n7(_)}catch(E){r_.error(E),d=E}if(d!==void 0||u.skipped_hashes.length>0)throw xr(new Error,Fr.REFRESH_TOKEN_SAVE_FAILED,qr.INTERNAL_SERVER_ERROR);return i7.signalUserChange(new o7(process.pid)),new a7(o,c)}a(_7,"createTokens");async function uv(e,t,r){return await n_.sign(e,{key:t,passphrase:r},{expiresIn:l7,algorithm:FE,subject:qE.OPERATION})}a(uv,"signOperationToken");async function kE(){if(MR===void 0)try{let e=PR.join(So.getHdbBasePath(),Gn.LICENSE_KEY_DIR_NAME,Gn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=PR.join(So.getHdbBasePath(),Gn.LICENSE_KEY_DIR_NAME,Gn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=PR.join(So.getHdbBasePath(),Gn.LICENSE_KEY_DIR_NAME,Gn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await DR.readFile(e)).toString(),s=(await DR.readFile(t)).toString(),i=(await DR.readFile(r)).toString();MR=new c7(i,s,n)}catch(e){throw r_.error(e),xr(new Error,Fr.NO_ENCRYPTION_KEYS,qr.INTERNAL_SERVER_ERROR)}return MR}a(kE,"getJWTRSAKeys");async function d7(e){if(!e)throw xr(new Error,Fr.INVALID_BODY,qr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw xr(new Error,Fr.REFRESH_TOKEN_REQUIRED,qr.BAD_REQUEST,void 0,void 0,!0);await _v(e.refresh_token);let t=await kE(),r=await n_.decode(e.refresh_token);return{operation_token:await uv({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(d7,"refreshOperationToken");async function f7(e){try{let t=await kE(),r=await n_.verify(e,t.public_key,{algorithms:FE,subject:qE.OPERATION});return await UR.findAndValidateUser(r.username,void 0,!1)}catch(t){throw r_.warn(t),t.name&&t.name==="TokenExpiredError"?xr(new Error,Fr.TOKEN_EXPIRED,qr.FORBIDDEN):xr(new Error,Fr.INVALID_TOKEN,qr.UNAUTHORIZED)}}a(f7,"validateOperationToken");async function _v(e){let t;try{let r=await kE(),n=await n_.verify(e,r.public_key,{algorithms:FE,subject:qE.REFRESH});t=await UR.findAndValidateUser(n.username,void 0,!1)}catch(r){throw r_.warn(r),r.name&&r.name==="TokenExpiredError"?xr(new Error,Fr.TOKEN_EXPIRED,qr.FORBIDDEN):xr(new Error,Fr.INVALID_TOKEN,qr.UNAUTHORIZED)}if(!lv.validate(t.refresh_token,e))throw xr(new Error,Fr.INVALID_TOKEN,qr.UNAUTHORIZED);return t}a(_v,"validateRefreshToken")});var vR=R((uAe,hv)=>{"use strict";var E7=iv(),Gc=require("passport"),h7=require("passport-local").Strategy,p7=require("passport-http").BasicStrategy,m7=require("util"),S7=Lr(),Ev=m7.callbackify(S7.findAndValidateUser),lAe=nn(),T7=L(),fv=s_();Gc.use(new h7(function(e,t,r){Ev(e,t,r)}));Gc.use(new p7(function(e,t,r){Ev(e,t,r)}));Gc.serializeUser(function(e,t){t(null,e)});Gc.deserializeUser(function(e,t){t(null,e)});function g7(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":Gc.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===T7.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?fv.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):fv.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Gc.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(g7,"authorize");function R7(e,t){let r=E7(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(R7,"checkPermissions");hv.exports={authorize:g7,checkPermissions:R7}});var xc=R((dAe,pv)=>{"use strict";var BR=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},HR=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};pv.exports={Node:BR,NodeSubscription:HR}});var Sv=R((EAe,mv)=>{"use strict";var A7=L().OPERATIONS_ENUM,GR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=A7.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};mv.exports=GR});var i_=R((pAe,Tv)=>{"use strict";var xR=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},qR=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};Tv.exports={RemotePayloadObject:xR,RemotePayloadSubscription:qR}});var Rv=R((SAe,gv)=>{"use strict";var FR=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};gv.exports=FR});var bv=R((OAe,Ov)=>{"use strict";var O7=Rv(),gAe=_t(),Av=Ye(),b7=k(),{getSchemaPath:RAe,getTransactionAuditStorePath:AAe}=Je(),{getDatabases:N7}=(Re(),ae(Ve));Ov.exports=y7;async function y7(e){let t=new O7;try{let r=N7()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await Av.environmentDataSize(schema_path,e.name),o=await Av.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=n.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=s.entryCount}catch(r){b7.warn(`unable to stat table dbi due to ${r}`)}return t}a(y7,"lmdbGetTableSize")});var yv=R((NAe,Nv)=>{"use strict";var kR=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};Nv.exports=kR});var gi=R((LAe,Dv)=>{"use strict";var I7=require("fs-extra"),w7=require("path"),pr=require("systeminformation"),To=k(),Iv=gt(),IAe=Ze(),VE=L(),C7=bv(),D7=Ei(),{getThreadInfo:wv}=rt(),ZR=J();ZR.initSync();var L7=yv(),{openEnvironment:wAe}=Ye(),{getSchemaPath:CAe}=Je(),{database:DAe,databases:$R}=(Re(),ae(Ve)),$E;Dv.exports={getHDBProcessInfo:WR,getNetworkInfo:jR,getDiskInfo:QR,getMemoryInfo:KR,getCPUInfo:YR,getTimeInfo:VR,getSystemInformation:zR,systemInformation:P7,getTableSize:JR,getMetrics:XR};function VR(){return pr.time()}a(VR,"getTimeInfo");async function YR(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:_,...u}=await pr.cpu();u.cpu_speed=await pr.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:m,raw_currentload_user:S,cpus:g,...T}=await pr.currentLoad();return T.cpus=[],g.forEach(b=>{let{raw_load:N,raw_load_idle:U,raw_load_irq:v,raw_load_nice:q,raw_load_system:M,raw_load_user:W,...z}=b;T.cpus.push(z)}),u.current_load=T,u}catch(e){return To.error(`error in getCPUInfo: ${e}`),{}}}a(YR,"getCPUInfo");async function KR(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await pr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return To.error(`error in getMemoryInfo: ${e}`),{}}}a(KR,"getMemoryInfo");async function WR(){let e={core:[],clustering:[]};try{let t=await pr.processes(),r;try{r=Number.parseInt(await I7.readFile(w7.join(ZR.get(VE.CONFIG_PARAMS.ROOTPATH),VE.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===VE.NODE_ERROR_CODES.ENOENT)To.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return To.error(`error in getHDBProcessInfo: ${t}`),e}}a(WR,"getHDBProcessInfo");async function QR(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await pr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,..._}=await pr.fsStats();return e.read_write=_,e.size=await pr.fsSize(),e}catch(t){return To.error(`error in getDiskInfo: ${t}`),e}}a(QR,"getDiskInfo");async function jR(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await pr.networkInterfaceDefault(),e.latency=await pr.inetChecksite("google.com"),(await pr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:_,ieee8021xState:u,carrier_changes:d,...E}=n;e.interfaces.push(E)}),(await pr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return To.error(`error in getNetworkInfo: ${t}`),e}}a(jR,"getNetworkInfo");async function zR(){if($E!==void 0)return $E;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await pr.osInfo();e=c;let l=await pr.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,$E=e,$E}catch(t){return To.error(`error in getSystemInformation: ${t}`),e}}a(zR,"getSystemInformation");async function JR(){let e=[],t=await D7.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await C7(n));return e}a(JR,"getTableSize");async function XR(){let e={};for(let t in $R){let r=e[t]={},n=r.tables={};for(let s in $R[t])try{let i=$R[t][s];r.readers||(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[_,u,d]=l.trim().split(" ");return{pid:_,thread:u,txnid:d}}),i.primaryStore.auditStore&&(r.audit=i.auditStore.getStats()));let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){To.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(XR,"getMetrics");async function Cv(){if(ZR.get(VE.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await Iv.getNATSReferences(),t=await Iv.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(Cv,"getNatsStreamInfo");async function P7(e){let t=new L7;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await zR(),t.time=VR(),t.cpu=await YR(),t.memory=await KR(),t.disk=await QR(),t.network=await jR(),t.harperdb_processes=await WR(),t.table_size=await JR(),t.metrics=await XR(),t.threads=await wv(),t.replication=await Cv(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await zR();break;case"time":t.time=VR();break;case"cpu":t.cpu=await YR();break;case"memory":t.memory=await KR();break;case"disk":t.disk=await QR();break;case"network":t.network=await jR();break;case"harperdb_processes":t.harperdb_processes=await WR();break;case"table_size":t.table_size=await JR();break;case"database_metrics":case"metrics":t.metrics=await XR();break;case"threads":t.threads=await wv();break;case"replication":t.replication=await Cv();break;default:break}return t}a(P7,"systemInformation")});var Ri=R((MAe,Lv)=>{"use strict";Lv.exports={version:M7,printVersion:U7};var YE=ma();function M7(){if(YE)return YE.version}a(M7,"version");function U7(){YE&&console.log(`HarperDB Version ${YE.version}`)}a(U7,"printVersion")});var Ai=R((HAe,vv)=>{"use strict";var v7=Cr(),eA=Y(),B7=require("util"),Na=L(),Pv=J();Pv.initSync();var H7=vR(),Mv=ur(),{Node:vAe,NodeSubscription:BAe}=xc(),G7=Nc(),x7=Sv(),{RemotePayloadObject:q7,RemotePayloadSubscription:F7}=i_(),{handleHDBError:k7,hdb_errors:$7}=ie(),{HTTP_STATUS_CODES:V7,HDB_ERROR_MSGS:Y7}=$7,K7=as(),W7=gi(),Q7=Ri(),{getDatabases:j7}=(Re(),ae(Ve)),z7=B7.promisify(H7.authorize),J7=Mv.searchByHash,X7=Mv.searchByValue;vv.exports={authHeaderToUser:Z7,isEmpty:eee,getNodeRecord:tee,upsertNodeRecord:ree,buildNodePayloads:nee,checkClusteringEnabled:see,getAllNodeRecords:iee,getSystemInfo:oee,reverseSubscription:Uv};async function Z7(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await z7(t,null),e}a(Z7,"authHeaderToUser");function eee(e){return e==null}a(eee,"isEmpty");async function tee(e){let t=new G7(Na.SYSTEM_SCHEMA_NAME,Na.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return J7(t)}a(tee,"getNodeRecord");async function ree(e){let t=new x7(Na.SYSTEM_SCHEMA_NAME,Na.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return v7.upsert(t)}a(ree,"upsertNodeRecord");function Uv(e){if(eA.isEmpty(e.subscribe)||eA.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(Uv,"reverseSubscription");function nee(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:_}=c,u=eA.getTableHashAttribute(l,_),{subscribe:d,publish:E}=Uv(c),f=j7()[l]?.[_],h=new F7(l,_,u,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);s.push(h)}return new q7(r,t,s,n)}a(nee,"buildNodePayloads");function see(){if(!Pv.get(Na.CONFIG_PARAMS.CLUSTERING_ENABLED))throw k7(new Error,Y7.CLUSTERING_NOT_ENABLED,V7.BAD_REQUEST,void 0,void 0,!0)}a(see,"checkClusteringEnabled");async function iee(){let e=new K7(Na.SYSTEM_SCHEMA_NAME,Na.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await X7(e))}a(iee,"getAllNodeRecords");async function oee(){let e=await W7.getSystemInformation();return{hdb_version:Q7.version(),node_version:e.node_version,platform:e.platform}}a(oee,"getSystemInfo")});var tA=R((xAe,$v)=>{"use strict";var KE=gt(),Bv=Y(),Hv=Ze(),Gv=L(),WE=k(),xv=PE(),aee=Uu(),{RemotePayloadObject:cee}=i_(),{handleHDBError:qv,hdb_errors:lee}=ie(),{HTTP_STATUS_CODES:Fv}=lee,{NodeSubscription:kv}=xc();$v.exports=uee;async function uee(e,t){let r;try{r=await KE.request(`${t}.${Hv.REQUEST_SUFFIX}`,new cee(Gv.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),WE.trace("Response from remote describe all request:",r)}catch(o){WE.error(`addNode received error from describe all request to remote node: ${o}`);let c=KE.requestErrorHandler(o,"add_node",t);throw qv(new Error,c,Fv.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===Hv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw qv(new Error,o,Fv.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,l=o.database??o.schema??"data";if(l===Gv.SYSTEM_SCHEMA_NAME){await KE.createLocalTableStream(l,c);let h=new kv(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=Bv.doesSchemaExist(l),u=n[l]!==void 0,d=c?Bv.doesTableExist(l,c):!0,E=c?n?.[l]?.[c]!==void 0:!0;if(!_&&!u||!d&&!E){s.push(o);continue}if(!_&&u&&(WE.trace(`addNode creating schema: ${l}`),await xv.createSchema({operation:"create_schema",schema:l})),!d&&E){WE.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new aee(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await xv.createTable(h)}await KE.createLocalTableStream(l,c);let f=new kv(l,c,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:s}}a(uee,"reviewSubscriptions")});var c_=R((FAe,Kv)=>{"use strict";var{handleHDBError:QE,hdb_errors:_ee}=ie(),{HTTP_STATUS_CODES:jE}=_ee,{addUpdateNodeValidator:dee}=GE(),zE=k(),Yv=L(),Vv=Ze(),fee=Y(),o_=gt(),a_=Ai(),Eee=J(),hee=tA(),{Node:pee,NodeSubscription:mee}=xc(),{broadcast:See}=rt(),Tee="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",gee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Ree=Eee.get(Yv.CONFIG_PARAMS.CLUSTERING_NODENAME);Kv.exports=Aee;async function Aee(e,t=!1){zE.trace("addNode called with:",e),a_.checkClusteringEnabled();let r=dee(e);if(r)throw QE(r,r.message,jE.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await a_.getNodeRecord(n);if(!fee.isEmptyOrZeroLength(d))throw QE(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,jE.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await hee(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Tee,o;let c=a_.buildNodePayloads(s,Ree,Yv.OPERATIONS_ENUM.ADD_NODE,await a_.getSystemInfo()),l=[];for(let d=0,E=s.length;d<E;d++){let f=s[d];s[d].start_time===void 0&&delete s[d].start_time,l.push(new mee(f.schema,f.table,f.publish,f.subscribe))}zE.trace("addNode sending remote payload:",c);let _;try{_=await o_.request(`${n}.${Vv.REQUEST_SUFFIX}`,c)}catch(d){zE.error(`addNode received error from request: ${d}`);for(let f=0,h=s.length;f<h;f++){let m=s[f];m.publish=!1,m.subscribe=!1,await o_.updateRemoteConsumer(m,n)}let E=o_.requestErrorHandler(d,"add_node",n);throw QE(new Error,E,jE.INTERNAL_SERVER_ERROR,"error",E)}if(_.status===Vv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw QE(new Error,d,jE.INTERNAL_SERVER_ERROR,"error",d)}zE.trace(_);for(let d=0,E=s.length;d<E;d++){let f=s[d];await o_.updateRemoteConsumer(f,n),f.subscribe===!0&&await o_.updateConsumerIterator(f.schema,f.table,n,"start")}let u=new pee(n,l,_.system_info);return await a_.upsertNodeRecord(u),See({type:"nats_update"}),i.length>0?o.message=gee:o.message=`Successfully added '${n}' to manifest`,o}a(Aee,"addNode")});var sA=R((VAe,jv)=>{"use strict";var{handleHDBError:rA,hdb_errors:Oee}=ie(),{HTTP_STATUS_CODES:nA}=Oee,{addUpdateNodeValidator:bee}=GE(),l_=k(),Qv=L(),Wv=Ze(),$Ae=Y(),u_=gt(),__=Ai(),Nee=J(),{cloneDeep:yee}=require("lodash"),Iee=tA(),{Node:wee,NodeSubscription:Cee}=xc(),{broadcast:Dee}=rt(),Lee="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Pee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Mee=Nee.get(Qv.CONFIG_PARAMS.CLUSTERING_NODENAME);jv.exports=Uee;async function Uee(e){l_.trace("updateNode called with:",e),__.checkClusteringEnabled();let t=bee(e);if(t)throw rA(t,t.message,nA.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await __.getNodeRecord(r);s.length>0&&(n=yee(s));let{added:i,skipped:o}=await Iee(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Lee,c;let l=__.buildNodePayloads(i,Mee,Qv.OPERATIONS_ENUM.UPDATE_NODE,await __.getSystemInfo());for(let u=0,d=i.length;u<d;u++){let E=i[u];l_.trace(`updateNode updating work stream for node: ${r} subscription:`,E),i[u].start_time===void 0&&delete i[u].start_time}l_.trace("updateNode sending remote payload:",l);let _;try{_=await u_.request(`${r}.${Wv.REQUEST_SUFFIX}`,l)}catch(u){l_.error(`updateNode received error from request: ${u}`);let d=u_.requestErrorHandler(u,"update_node",r);throw rA(new Error,d,nA.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===Wv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw rA(new Error,u,nA.INTERNAL_SERVER_ERROR,"error",u)}l_.trace(_);for(let u=0,d=i.length;u<d;u++){let E=i[u];await u_.updateRemoteConsumer(E,r),E.subscribe===!0?await u_.updateConsumerIterator(E.schema,E.table,r,"start"):await u_.updateConsumerIterator(E.schema,E.table,r,"stop")}return n||(n=[new wee(r,[],_.system_info)]),await vee(n[0],i,_.system_info),o.length>0?c.message=Pee:c.message=`Successfully updated '${r}'`,c}a(Uee,"updateNode");async function vee(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,_=e.subscriptions.length;l<_;l++){let u=n.subscriptions[l];if(u.schema===o.schema&&u.table===o.table){u.publish=o.publish,u.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new Cee(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await __.upsertNodeRecord(n),Dee({type:"nats_update"})}a(vee,"updateNodeTable")});var e0=R((KAe,Zv)=>{"use strict";var Xv=require("joi"),{string:zv}=Xv.types(),Bee=nt(),Jv=L(),Hee=J(),Gee=Ze();Zv.exports=xee;function xee(e){let t=zv.invalid(Hee.get(Jv.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Gee.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=Xv.object({operation:zv.valid(Jv.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Bee.validateBySchema(e,r)}a(xee,"removeNodeValidator")});var XE=R((QAe,i0)=>{"use strict";var{handleHDBError:t0,hdb_errors:qee}=ie(),{HTTP_STATUS_CODES:r0}=qee,Fee=e0(),d_=k(),n0=Ai(),kee=Y(),JE=L(),s0=Ze(),iA=gt(),$ee=J(),{RemotePayloadObject:Vee}=i_(),{NodeSubscription:Yee}=xc(),Kee=Mu(),Wee=ia(),{broadcast:Qee}=rt(),jee=$ee.get(JE.CONFIG_PARAMS.CLUSTERING_NODENAME);i0.exports=zee;async function zee(e){d_.trace("removeNode called with:",e),n0.checkClusteringEnabled();let t=Fee(e);if(t)throw t0(t,t.message,r0.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await n0.getNodeRecord(r);if(kee.isEmptyOrZeroLength(n))throw t0(new Error,`Node '${r}' was not found.`,r0.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Vee(JE.OPERATIONS_ENUM.REMOVE_NODE,jee,[]),i,o=!1;for(let l=0,_=n.subscriptions.length;l<_;l++){let u=n.subscriptions[l];u.subscribe===!0&&await iA.updateConsumerIterator(u.schema,u.table,r,"stop");try{await iA.updateRemoteConsumer(new Yee(u.schema,u.table,!1,!1),r)}catch(d){d_.error(d)}}try{i=await iA.request(`${r}.${s0.REQUEST_SUFFIX}`,s),d_.trace("Remove node reply from remote node:",r,i)}catch(l){d_.error("removeNode received error from request:",l),o=!0}let c=new Kee(JE.SYSTEM_SCHEMA_NAME,JE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Wee.deleteRecord(c),Qee({type:"nats_update"}),i?.status===s0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(d_.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(zee,"removeNode")});var c0=R((zAe,a0)=>{"use strict";var o0=require("joi"),{string:Jee,array:Xee}=o0.types(),Zee=nt(),ete=GE();a0.exports=tte;function tte(e){let t=o0.object({operation:Jee.valid("configure_cluster").required(),connections:Xee.items(ete.validation_schema).required()});return Zee.validateBySchema(e,t)}a(tte,"configureClusterValidator")});var eh=R((XAe,f0)=>{"use strict";var rte=L(),ZE=k(),nte=Y(),ste=XE(),ite=c_(),l0=Ai(),ote=c0(),{handleHDBError:u0,hdb_errors:ate}=ie(),{HTTP_STATUS_CODES:_0}=ate,cte="Configure cluster complete.",lte="Failed to configure the cluster. Check the logs for more details.",ute="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";f0.exports=_te;async function _te(e){ZE.trace("configure cluster called with:",e),l0.checkClusteringEnabled();let t=ote(e);if(t)throw u0(t,t.message,_0.BAD_REQUEST,void 0,void 0,!0);let r=await l0.getAllNodeRecords(),n=[];for(let u=0,d=r.length;u<d;u++){let E=await d0(ste,{operation:rte.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[u].name},r[u].name);n.push(E)}ZE.trace("All results from configure_cluster remove node:",n);let s=[],i=e.connections.length;for(let u=0;u<i;u++){let d=e.connections[u],E=await d0(ite,d,d.node_name);s.push(E)}ZE.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,_=n.concat(s);for(let u=0,d=_.length;u<d;u++){let E=_[u];E.status==="rejected"&&(ZE.error(E),o.includes(E.node_name)||o.push(E.node_name)),(E?.result?.message?.includes?.("Successfully")||E?.result?.includes?.("Successfully"))&&(l=!0),!(typeof E.result=="string"&&E.result.includes("Successfully removed")||E.status==="rejected")&&c.push({node_name:E?.node_name,subscriptions:E?.result})}if(nte.isEmptyOrZeroLength(o))return{message:cte,connections:c};if(l)return{message:ute,failed_nodes:o,connections:c};throw u0(new Error,lte,_0.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(_te,"configureCluster");async function d0(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(d0,"functionWrapper")});var m0=R((eOe,p0)=>{"use strict";var f_=require("joi"),dte=nt(),{validateSchemaExists:E0,validateTableExists:fte,validateSchemaName:h0}=Ls(),Ete=f_.object({operation:f_.string().valid("purge_stream"),schema:f_.string().custom(E0).custom(h0).optional(),database:f_.string().custom(E0).custom(h0).optional(),table:f_.string().custom(fte).required()});function hte(e){return dte.validateBySchema(e,Ete)}a(hte,"purgeStreamValidator");p0.exports=hte});var oA=R((rOe,S0)=>{"use strict";var{handleHDBError:pte,hdb_errors:mte}=ie(),{HTTP_STATUS_CODES:Ste}=mte,Tte=m0(),gte=gt(),Rte=Ai();S0.exports=Ate;async function Ate(e){e.schema=e.schema??e.database;let t=Tte(e);if(t)throw pte(t,t.message,Ste.BAD_REQUEST,void 0,void 0,!0);Rte.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await gte.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(Ate,"purgeStream")});var rh=R((sOe,b0)=>{"use strict";var cA=Ai(),Ote=gt(),R0=J(),th=L(),ya=Ze(),bte=Y(),aA=k(),{RemotePayloadObject:Nte}=i_(),{ErrorCode:T0}=require("nats"),g0=R0.get(th.CONFIG_PARAMS.CLUSTERING_ENABLED),A0=R0.get(th.CONFIG_PARAMS.CLUSTERING_NODENAME);b0.exports={clusterStatus:yte,buildNodeStatus:O0};async function yte(){let e={node_name:A0,is_enabled:g0,connections:[]};if(!g0)return e;let t=await cA.getAllNodeRecords();if(bte.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(O0(t[n],e.connections));return await Promise.allSettled(r),e}a(yte,"clusterStatus");async function O0(e,t){let r=e.name,n=new Nte(th.OPERATIONS_ENUM.CLUSTER_STATUS,A0,void 0,await cA.getSystemInfo()),s,i,o=ya.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Ote.request(ya.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===ya.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ya.CLUSTER_STATUS_STATUSES.CLOSED,aA.error(`Error getting node status from ${r} `,s))}catch(l){aA.warn(`Error getting node status from ${r}`,l),l.code===T0.NoResponders?o=ya.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===T0.Timeout?o=ya.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ya.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Ite(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==th.PRE_4_0_0_VERSION&&await cA.upsertNodeRecord(l)}catch(l){aA.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(O0,"buildNodeStatus");function Ite(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(Ite,"NodeStatusObject")});var sh=R((oOe,N0)=>{"use strict";var{handleHDBError:wte,hdb_errors:Cte}=ie(),{HTTP_STATUS_CODES:Dte}=Cte,Lte=gt(),Pte=Ai(),lA=Y(),nh=require("joi"),Mte=nt(),Ute=2e3,vte=nh.object({timeout:nh.number().min(1),connected_nodes:nh.boolean(),routes:nh.boolean()});N0.exports=Bte;async function Bte(e){Pte.checkClusteringEnabled();let t=Mte.validateBySchema(e,vte);if(t)throw wte(t,t.message,Dte.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||lA.autoCastBoolean(n),o=s===void 0||lA.autoCastBoolean(s),c={nodes:[]},l=await Lte.getServerList(r??Ute),_={};if(i)for(let u=0,d=l.length;u<d;u++){let E=l[u].statsz;E&&(_[l[u].server.name]=E.routes)}for(let u=0,d=l.length;u<d;u++){if(l[u].statsz)continue;let E=l[u].server,f=l[u].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:l[u].response_time};i&&(h.connected_nodes=[],_[E.name]&&_[E.name].forEach(m=>{h.connected_nodes.includes(m.name.slice(0,-4))||h.connected_nodes.push(m.name.slice(0,-4))})),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(m=>({host:m.split(":")[0],port:lA.autoCast(m.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Bte,"clusterNetwork")});var C0=R((cOe,w0)=>{"use strict";var uA=require("joi"),y0=nt(),{route_constraints:I0}=CT();w0.exports={setRoutesValidator:Hte,deleteRoutesValidator:Gte};function Hte(e){let t=uA.object({server:uA.valid("hub","leaf").required(),routes:I0.required()});return y0.validateBySchema(e,t)}a(Hte,"setRoutesValidator");function Gte(e){let t=uA.object({routes:I0.required()});return y0.validateBySchema(e,t)}a(Gte,"deleteRoutesValidator")});var oh=R((uOe,M0)=>{"use strict";var Ia=Et(),_A=Y(),ih=L(),D0=C0(),{handleHDBError:L0,hdb_errors:xte}=ie(),{HTTP_STATUS_CODES:P0}=xte,qte="cluster routes successfully set",Fte="cluster routes successfully deleted";M0.exports={setRoutes:kte,getRoutes:$te,deleteRoutes:Vte};function kte(e){let t=D0.setRoutesValidator(e);if(t)throw L0(t,t.message,P0.BAD_REQUEST,void 0,void 0,!0);let r=Ia.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,l=e.routes.length;c<l;c++){let _=e.routes[c];_.port=_A.autoCast(_.port);let u=n.some(E=>E.host===_.host&&E.port===_.port),d=s.some(E=>E.host===_.host&&E.port===_.port);u||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?Ia.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):Ia.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:qte,set:o,skipped:i}}a(kte,"setRoutes");function $te(){let e=Ia.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a($te,"getRoutes");function Vte(e){let t=D0.deleteRoutesValidator(e);if(t)throw L0(t,t.message,P0.BAD_REQUEST,void 0,void 0,!0);let r=Ia.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,l=!1;for(let _=0,u=e.routes.length;_<u;_++){let d=e.routes[_],E=!1;for(let f=0,h=n.length;f<h;f++){let m=n[f];if(d.host===m.host&&d.port===m.port){n.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,m=s.length;h<m;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),l=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(n=_A.isEmptyOrZeroLength(n)?null:n,Ia.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),l&&(s=_A.isEmptyOrZeroLength(s)?null:s,Ia.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:Fte,deleted:i,skipped:o}}a(Vte,"deleteRoutes")});var v0=R((dOe,U0)=>{"use strict";var E_=require("alasql"),wa=require("recursive-iterator"),ds=k(),Yte=Y(),h_=L(),dA=class{static{a(this,"sql_statement_bucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,Wte(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(s=>h_.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!h_.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][h_.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Kte(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let l=this.affected_attributes.get(i).get(o).filter(_=>!h_.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let u=new E_.yy.Column({columnid:_});s.tableid&&(u.tableid=s.tableid),this.ast.columns.push(u),l.includes(_)||l.push(_)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function Kte(e){return e.filter(t=>t[h_.PERMS_CRUD_ENUM.READ])}a(Kte,"filterReadRestrictedAttrs");function Wte(e,t,r,n,s){Qte(e,t,r,n,s)}a(Wte,"interpretAST");function p_(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(p_,"addSchemaTableToMap");function Qte(e,t,r,n,s){if(!e){ds.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof E_.yy.Insert?Xte(e,t,r):e instanceof E_.yy.Select?jte(e,t,r,n,s):e instanceof E_.yy.Update?zte(e,t,r):e instanceof E_.yy.Delete?Jte(e,t,r):ds.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Qte,"getRecordAttributesAST");function jte(e,t,r,n,s){if(!e){ds.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Yte.isEmptyOrZeroLength(i)){ds.error("No schema specified");return}e.from.forEach(c=>{p_(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),p_(c.table,t,r,n,s)});let o=new wa(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,_=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{ds.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(c.columnid)<0&&t.get(_).get(l).push(c.columnid)}if(e.where){let c=new wa(e.where),l=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid?_.tableid:l;if(!t.get(i).has(u))if(r.has(u))u=r.get(u);else{ds.info(`table specified as ${u} not found.`);continue}t.get(i).get(u).indexOf(_.columnid)<0&&t.get(i).get(u).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new wa(c.on);for(let{node:_}of l)if(_&&_.columnid){let u=_.tableid,d=s.get(u);if(!t.get(d).has(u))if(r.has(u))u=r.get(u);else{ds.info(`table specified as ${u} not found.`);continue}t.get(d).get(u).indexOf(_.columnid)<0&&t.get(d).get(u).push(_.columnid)}}),e.order){let c=new wa(e.order);for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid,u=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{ds.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(l.columnid)<0&&t.get(u).get(_).push(l.columnid)}}}a(jte,"getSelectAttributes");function zte(e,t,r){if(!e){ds.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new wa(e.columns),s=e.table.databaseid;p_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&fA(e.table.tableid,s,i.columnid,t,r)}a(zte,"getUpdateAttributes");function Jte(e,t,r){if(!e){ds.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new wa(e.where),s=e.table.databaseid;p_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&fA(e.table.tableid,s,i.columnid,t,r)}a(Jte,"getDeleteAttributes");function Xte(e,t,r){if(!e){ds.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new wa(e.columns),s=e.into.databaseid;p_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&fA(e.into.tableid,s,i.columnid,t,r)}a(Xte,"getInsertAttributes");function fA(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(fA,"pushAttribute");U0.exports=dA});var ch=R((EOe,x0)=>{var ah=la(),B0=require("chalk"),hn=k(),H0=require("prompt"),{promisify:Zte}=require("util"),EA=L(),ere=require("fs-extra"),tre=require("path"),rre=Y(),nre=Ri(),G0=J();G0.initSync();var sre=require("moment"),ire=Zte(H0.get),ore=tre.join(G0.getHdbBasePath(),EA.LICENSE_KEY_DIR_NAME,EA.LICENSE_FILE_NAME,EA.LICENSE_FILE_NAME);x0.exports={getFingerprint:cre,setLicense:are,parseLicense:hA,register:lre,getRegistrationInfo:_re};async function are(e){if(e&&e.key&&e.company){try{hn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await hA(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw hn.error(r),hn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(are,"setLicense");async function cre(){let e={};try{e=await ah.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw hn.error(r),hn.error(t),new Error(r)}return e}a(cre,"getFingerprint");async function hA(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");hn.info("Validating license input...");let r=ah.validateLicense(e,t);if(hn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(hn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(hn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{hn.info("writing license to disk"),await ere.writeFile(ore,JSON.stringify({license_key:e,company:t}))}catch(n){throw hn.error("Failed to write License"),n}return"Registration successful."}a(hA,"parseLicense");async function lre(){let e=await ure();return hA(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(lre,"register");async function ure(){let e=await ah.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:B0.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:B0.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{H0.start()}catch(n){hn.error(n)}let r;try{r=await ire(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(ure,"promptForRegistration");async function _re(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await ah.getLicense()}catch(r){throw hn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(rre.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=nre.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=sre.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(_re,"getRegistrationInfo")});var F0=R((pOe,q0)=>{"use strict";var dre=Ze(),pA=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+dre.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:u,port:d,routes:E,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};q0.exports=pA});var V0=R((SOe,$0)=>{"use strict";var k0=Ze(),mA=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d){this.port=t,d===null&&(d=void 0),this.server_name=r+k0.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+k0.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:u,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};$0.exports=mA});var K0=R((gOe,Y0)=>{"use strict";var SA=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};Y0.exports=SA});var Q0=R((AOe,W0)=>{"use strict";var fre=Ze(),TA=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+fre.SERVER_SUFFIX.ADMIN,this.password=r}};W0.exports=TA});var fh=R((bOe,J0)=>{"use strict";var qc=require("path"),_h=require("fs-extra"),Ere=F0(),hre=V0(),pre=K0(),mre=Q0(),gA=Lr(),kc=Y(),kr=Et(),uh=L(),m_=Ze(),{CONFIG_PARAMS:At}=uh,$c=k(),S_=J(),j0=fi(),RA=gt(),Fc="clustering",Sre=1e4,z0=50;J0.exports={generateNatsConfig:gre,removeNatsConfig:Rre,getHubConfigPath:Tre};function Tre(){let e=S_.get(At.ROOTPATH);return qc.join(e,Fc,m_.NATS_CONFIG_FILES.HUB_SERVER)}a(Tre,"getHubConfigPath");async function gre(e=!1,t=void 0){S_.initSync();let r=S_.get(At.ROOTPATH),n=qc.join(r,Fc,m_.PID_FILES.HUB),s=qc.join(r,Fc,m_.PID_FILES.LEAF),i=kr.getConfigFromFile(At.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=qc.join(r,Fc,m_.NATS_CONFIG_FILES.HUB_SERVER),c=qc.join(r,Fc,m_.NATS_CONFIG_FILES.LEAF_SERVER),l=kr.getConfigFromFile(At.CLUSTERING_TLS_CERTIFICATE),_=kr.getConfigFromFile(At.CLUSTERING_TLS_PRIVATEKEY),u=kr.getConfigFromFile(At.CLUSTERING_TLS_CERT_AUTH),d=kr.getConfigFromFile(At.CLUSTERING_TLS_INSECURE),E=kr.getConfigFromFile(At.CLUSTERING_TLS_VERIFY),f=kr.getConfigFromFile(At.CLUSTERING_NODENAME),h=kr.getConfigFromFile(At.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await RA.checkNATSServerInstalled()||dh("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await gA.listUsers(),S=kr.getConfigFromFile(At.CLUSTERING_USER),g=await gA.getClusterUser();(kc.isEmpty(g)||g.active!==!0)&&dh(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await lh(At.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await lh(At.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await lh(At.CLUSTERING_HUBSERVER_NETWORK_PORT),await lh(At.CLUSTERING_LEAFSERVER_NETWORK_PORT));let T=[],b=[];for(let[z,X]of m.entries())X.role?.role===uh.ROLE_TYPES_ENUM.CLUSTER_USER&&X.active&&(T.push(new mre(X.username,j0.decrypt(X.hash))),b.push(new pre(X.username,j0.decrypt(X.hash))));let N=[],{hub_routes:U}=kr.getClusteringRoutes();if(!kc.isEmptyOrZeroLength(U))for(let z of U)N.push(`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@${z.host}:${z.port}`);let v=new Ere(kr.getConfigFromFile(At.CLUSTERING_HUBSERVER_NETWORK_PORT),f,n,l,_,u,d,E,h,kr.getConfigFromFile(At.CLUSTERING_HUBSERVER_CLUSTER_NAME),kr.getConfigFromFile(At.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),N,T,b);u==null&&(delete v.tls.ca_file,delete v.leafnodes.tls.ca_file),t=kc.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===uh.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await _h.writeJson(o,v),$c.trace(`Hub server config written to ${o}`));let q=`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,M=`tls://${g.uri_encoded_name}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,W=new hre(kr.getConfigFromFile(At.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,s,i,[q],[M],T,b,l,_,u,d);u==null&&delete W.tls.ca_file,(t===void 0||t===uh.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await _h.writeJson(c,W),$c.trace(`Leaf server config written to ${c}`))}a(gre,"generateNatsConfig");async function lh(e){let t=S_.get(e);return kc.isEmpty(t)&&dh(`port undefined for '${e}'`),await kc.isPortTaken(t)&&dh(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(lh,"isPortAvailable");function dh(e){let t=`Error generating clustering config: ${e}`;$c.error(t),console.error(t),process.exit(1)}a(dh,"generateNatsConfigError");async function Rre(e){let{port:t,config_file:r}=RA.getServerConfig(e),{username:n,decrypt_hash:s}=await gA.getClusterUser(),i=0,o=2e3;for(;i<z0;){try{let u=await RA.createConnection(t,n,s,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){$c.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=z0)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let _=o*(i*2);_>3e4&&$c.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await kc.async_set_timeout(_)}let c="0".repeat(Sre),l=qc.join(S_.get(At.ROOTPATH),Fc,r);await _h.writeFile(l,c),await _h.remove(l),$c.notify(e,"started.")}a(Rre,"removeNatsConfig")});var nB=R((yOe,rB)=>{"use strict";var pn=J(),Are=la(),Te=L(),T_=Ze(),Oi=require("path"),{PACKAGE_ROOT:hh}=L(),X0=J(),Eh=Y(),Vc="/dev/null",Ore=Oi.join(hh,"launchServiceScripts"),Z0=Oi.join(hh,"utility/scripts"),bre=Oi.join(Z0,Te.HDB_RESTART_SCRIPT),eB=Oi.resolve(hh,"dependencies",`${process.platform}-${process.arch}`,T_.NATS_BINARY_NAME);function tB(){let t=Are.licenseSearch().ram_allocation||Te.RAM_ALLOCATION_ENUM.DEFAULT,r=Te.MEM_SETTING_KEY+t,n={[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Eh.noBootFile()&&(n[Te.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Eh.getEnvCliRootPath()),{name:Te.PROCESS_DESCRIPTORS.HDB,script:Te.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:hh}}a(tB,"generateMainServerConfig");var Nre=9930;function yre(){pn.initSync(!0);let e=pn.get(Te.CONFIG_PARAMS.ROOTPATH),t=Oi.join(e,"clustering",T_.NATS_CONFIG_FILES.HUB_SERVER),r=Oi.join(pn.get(Te.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Te.LOG_NAMES.HDB),n=X0.get(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=T_.LOG_LEVEL_FLAGS[pn.get(Te.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Nre?"-"+n:""),script:eB,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return pn.get(Te.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Vc,i.error_file=Vc),i}a(yre,"generateNatsHubServerConfig");var Ire=9940;function wre(){pn.initSync(!0);let e=pn.get(Te.CONFIG_PARAMS.ROOTPATH),t=Oi.join(e,"clustering",T_.NATS_CONFIG_FILES.LEAF_SERVER),r=Oi.join(pn.get(Te.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Te.LOG_NAMES.HDB),n=X0.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=T_.LOG_LEVEL_FLAGS[pn.get(Te.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Ire?"-"+n:""),script:eB,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return pn.get(Te.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Vc,i.error_file=Vc),i}a(wre,"generateNatsLeafServerConfig");function Cre(){pn.initSync();let e=Oi.join(pn.get(Te.CONFIG_PARAMS.LOGGING_ROOT),Te.LOG_NAMES.HDB),t={name:Te.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Te.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Ore,autorestart:!1};return pn.get(Te.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Vc,t.error_file=Vc),t}a(Cre,"generateClusteringUpgradeV4ServiceConfig");function Dre(){let e={[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.RESTART_HDB};return Eh.noBootFile()&&(e[Te.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Eh.getEnvCliRootPath()),{...{name:Te.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:Z0},script:bre}}a(Dre,"generateRestart");function Lre(){return{apps:[tB()]}}a(Lre,"generateAllServiceConfigs");rB.exports={generateAllServiceConfigs:Lre,generateMainServerConfig:tB,generateRestart:Dre,generateNatsHubServerConfig:yre,generateNatsLeafServerConfig:wre,generateClusteringUpgradeV4ServiceConfig:Cre}});var Yc=R((COe,pB)=>{"use strict";var He=L(),Pre=Y(),Ni=fh(),ph=gt(),bi=Ze(),go=nB(),mh=J(),Ro=k(),Mre=Ai(),{startWorker:sB,onMessageFromWorkers:Ure}=rt(),vre=gi(),wOe=require("util"),Bre=require("child_process"),Hre=require("fs"),{execFile:Gre}=Bre,De;pB.exports={enterPM2Mode:xre,start:Ao,stop:AA,reload:oB,restart:aB,list:OA,describe:lB,connect:yi,kill:Vre,startAllServices:Yre,startService:bA,getUniqueServicesList:uB,restartAllServices:Kre,isServiceRegistered:_B,reloadStopStart:dB,restartHdb:cB,deleteProcess:kre,startClusteringProcesses:EB,startClusteringThreads:hB,isHdbRestartRunning:$re,isClusteringRunning:Qre,stopClustering:Wre,reloadClustering:jre};var g_=!1;Ure(e=>{e.type==="restart"&&mh.initSync(!0)});function xre(){g_=!0}a(xre,"enterPM2Mode");function yi(){return De||(De=require("pm2")),new Promise((e,t)=>{De.connect((r,n)=>{Ro.setupConsoleLogging(),r&&t(r),e(n)})})}a(yi,"connect");var $r,qre=10,iB;function Ao(e,t=!1){if(g_)return Fre(e);let r=Gre(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=$r.indexOf(r);o>-1&&$r.splice(o,1),!iB&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<qre&&(Hre.existsSync(Ni.getHubConfigPath())?Ao(e):(await Ni.generateNatsConfig(!0),Ao(e),await new Promise(c=>setTimeout(c,3e3)),await Ni.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ni.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=mh.get(He.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,_=0,u;for(;l=c.exec(i);){if(l.index&&bi.LOG_LEVEL_HIERARCHY[o]>=bi.LOG_LEVEL_HIERARCHY[u||"info"]){let f=u===bi.LOG_LEVELS.ERR||u===bi.LOG_LEVELS.WRN?Ro.OUTPUTS.STDERR:Ro.OUTPUTS.STDOUT;Ro.logCustomLevel(u||"info",f,n,i.slice(_,l.index).trim())}let[d,E]=l;_=l.index+d.length,u=bi.LOG_LEVELS[E]}if(bi.LOG_LEVEL_HIERARCHY[o]>=bi.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===bi.LOG_LEVELS.ERR||u===bi.LOG_LEVELS.WRN?Ro.OUTPUTS.STDERR:Ro.OUTPUTS.STDOUT;Ro.logCustomLevel(u||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),$r=[],!$r&&!t){let i=a(()=>{iB=!0,$r&&($r.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}$r.push(r)}a(Ao,"start");function Fre(e){return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.start(e,(n,s)=>{n&&(De.disconnect(),r(n)),De.disconnect(),t(s)})})}a(Fre,"startWithPM2");function AA(e){if(!g_){for(let t of $r||[])t.name===e&&($r.splice($r.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.stop(e,async(n,s)=>{n&&(De.disconnect(),r(n)),De.delete(e,(i,o)=>{i&&(De.disconnect(),r(n)),De.disconnect(),t(o)})})})}a(AA,"stop");function oB(e){return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.reload(e,(n,s)=>{n&&(De.disconnect(),r(n)),De.disconnect(),t(s)})})}a(oB,"reload");function aB(e){if(!g_)for(let t of $r||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.restart(e,(n,s)=>{De.disconnect(),t(s)})})}a(aB,"restart");function kre(e){return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.delete(e,(n,s)=>{n&&(De.disconnect(),r(n)),De.disconnect(),t(s)})})}a(kre,"deleteProcess");async function cB(){await Ao(go.generateRestart())}a(cB,"restartHdb");async function $re(){let e=await OA();for(let t in e)if(e[t].name===He.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a($re,"isHdbRestartRunning");function OA(){return new Promise(async(e,t)=>{try{await yi()}catch(r){t(r)}De.list((r,n)=>{r&&(De.disconnect(),t(r)),De.disconnect(),e(n)})})}a(OA,"list");function lB(e){return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.describe(e,(n,s)=>{n&&(De.disconnect(),r(n)),De.disconnect(),t(s)})})}a(lB,"describe");function Vre(){if(!g_){for(let e of $r||[])e.kill();$r=[];return}return new Promise(async(e,t)=>{try{await yi()}catch(r){t(r)}De.killDaemon((r,n)=>{r&&(De.disconnect(),t(r)),De.disconnect(),e(n)})})}a(Vre,"kill");async function Yre(){try{await EB(),await hB(),await Ao(go.generateAllServiceConfigs())}catch(e){throw De?.disconnect(),e}}a(Yre,"startAllServices");async function bA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case He.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=go.generateMainServerConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=go.generateNatsIngestServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=go.generateNatsReplyServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=go.generateNatsHubServerConfig(),await Ao(r,t),await Ni.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=go.generateNatsLeafServerConfig(),await Ao(r,t),await Ni.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=go.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ao(r)}catch(r){throw De?.disconnect(),r}}a(bA,"startService");async function uB(){try{let e=await OA(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw De?.disconnect(),e}}a(uB,"getUniqueServicesList");async function Kre(e=[]){try{let t=!1,r=await uB();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===He.PROCESS_DESCRIPTORS.HDB?t=!0:await aB(o))}t&&await dB(He.PROCESS_DESCRIPTORS.HDB)}catch(t){throw De?.disconnect(),t}}a(Kre,"restartAllServices");async function _B(e){if($r?.find(r=>r.name===e))return!0;let t=await vre.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(_B,"isServiceRegistered");async function dB(e){let t=mh.get(He.CONFIG_PARAMS.THREADS_COUNT)??mh.get(He.CONFIG_PARAMS.THREADS),r=await lB(e),n=Pre.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await AA(e),await bA(e)):e===He.PROCESS_DESCRIPTORS.HDB?await cB():await oB(e)}a(dB,"reloadStopStart");var fB;async function EB(e=!1){for(let t in He.CLUSTERING_PROCESSES){let r=He.CLUSTERING_PROCESSES[t];await bA(r,e)}}a(EB,"startClusteringProcesses");async function hB(){fB=sB(He.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await ph.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await ph.updateLocalStreams();let e=await Mre.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===He.PRE_4_0_0_VERSION){Ro.info("Starting clustering upgrade 4.0.0 process"),sB(He.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(hB,"startClusteringThreads");async function Wre(){for(let e in He.CLUSTERING_PROCESSES)if(e!==He.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===He.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await fB.terminate();else{let t=He.CLUSTERING_PROCESSES[e];await AA(t)}}a(Wre,"stopClustering");async function Qre(){for(let e in He.CLUSTERING_PROCESSES){let t=He.CLUSTERING_PROCESSES[e];if(await _B(t)===!1)return!1}return!0}a(Qre,"isClusteringRunning");async function jre(){await Ni.generateNatsConfig(!0),await ph.reloadNATSHub(),await ph.reloadNATSLeaf(),await Ni.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ni.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(jre,"reloadClustering")});var gh={};$e(gh,{compactOnStart:()=>zre,copyDb:()=>AB});async function zre(){A_.notify("Running compact on start"),console.log("Running compact on start");let e=(0,NA.get)(Oo.CONFIG_PARAMS.ROOTPATH),t=new Map,r=Mr();try{for(let n in r){if(n==="system")continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,Sh.join)(e,"backup",n+".mdb"),o=(0,Sh.join)(e,Oo.DATABASES_DIR_NAME,n+"-copy.mdb"),c=await mB(n);console.log("Database",n,"before compact has a total record count of",c),t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await AB(n,o),console.log("Backing up",n,"to",i),await(0,Ca.move)(s,i,{overwrite:!0})}R_();for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,Ca.move)(i,s,{overwrite:!0}),await(0,Ca.remove)((0,Sh.join)(e,Oo.DATABASES_DIR_NAME,`${n}-copy.mdb-lock`));R_()}catch(n){A_.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,yA.updateConfigValue)(Oo.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1);for(let[s,{db_path:i,backup_dest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,Ca.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw R_(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await mB(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
|