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
|
@@ -6,7 +6,7 @@ Caused by:`))):typeof _=="object"?n+=JSON.stringify(_):n+=_,c<i&&(n+=" ")}return
|
|
|
6
6
|
`).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:pV.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(RV,"findPs")});var ft=g((Tce,QO)=>{"use strict";var AV="__dbis__",OV="__txns__",bV="__environment_name__",yV="__dbi_defintion__",NV={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"},IV=["__createdtime__","__updatedtime__"],wV="\uFFFF",WO={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},CV=Object.values(WO);QO.exports={AUDIT_STORE_NAME:OV,INTERNAL_DBIS_NAME:AV,DBI_DEFINITION_NAME:yV,SEARCH_TYPES:NV,TIMESTAMP_NAMES:IV,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:bV,TRANSACTIONS_DBI_NAMES_ENUM:WO,TRANSACTIONS_DBIS:CV,OVERFLOW_MARKER:wV}});var vr=g((gce,nb)=>{"use strict";var zO=P(),JO=ft(),XO={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},jO=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),ZO={500:jO("There was an error processing your request."),400:"Invalid request"},DV=ZO[XO.INTERNAL_SERVER_ERROR],LV={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.`},MV={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},PV={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"},UV={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 ${JO.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${JO.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"},vV={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${zO.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 ${zO.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"},eb={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"},BV={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."},xV={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`},HV={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"},GV={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},qV={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`},tb={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.`},rb={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}`},FV={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."},kV={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},VV={...eb,...PV,...LV,...BV,...xV,...HV,...GV,...qV,...vV,...tb,...rb,...FV,...kV,...MV};nb.exports={CHECK_LOGS_WRAPPER:jO,HDB_ERROR_MSGS:VV,DEFAULT_ERROR_MSGS:ZO,DEFAULT_ERROR_RESP:DV,HTTP_STATUS_CODES:XO,LMDB_ERRORS_ENUM:UV,AUTHENTICATION_ERROR_MSGS:eb,VALIDATION_ERROR_MSGS:tb,ITC_ERRORS:rb}});var se=g((Ace,ob)=>{"use strict";var $o=vr(),$V=$(),YV=P(),m_=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,sb),this.statusCode=n||$o.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||($o.DEFAULT_ERROR_MSGS[n]?$o.DEFAULT_ERROR_MSGS[n]:$o.DEFAULT_ERROR_MSGS[$o.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&&$V[s](i)}},Wh=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}},Qh=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function sb(e,t,r,n=YV.LOG_LEVELS.ERROR,s=null,i=!1){if(ib(e))return e;let o=new m_(e,t,r,n,s);return i&&delete o.stack,o}a(sb,"handleHDBError");function ib(e){return e.__proto__.constructor.name===m_.name}a(ib,"isHDBError");ob.exports={isHDBError:ib,handleHDBError:sb,ClientError:Wh,ServerError:Qh,hdb_errors:$o}});var Xe=g((bce,fb)=>{"use strict";var yc=P(),KV=z(),ur=ee(),Nc=require("path"),WV=require("minimist"),ab=require("fs-extra"),cb=require("lodash");ur.initSync();var{CONFIG_PARAMS:ri,DATABASES_PARAM_CONFIG:Rc,SYSTEM_SCHEMA_NAME:p_}=yc,Ac,Oc,bc;function ub(){if(Ac!==void 0)return Ac;if(ur.getHdbBasePath()!==void 0)return Ac=ur.get(ri.STORAGE_PATH)||Nc.join(ur.getHdbBasePath(),yc.DATABASES_DIR_NAME),Ac}a(ub,"getBaseSchemaPath");function lb(){if(Oc!==void 0)return Oc;if(ur.getHdbBasePath()!==void 0)return Oc=db(p_),Oc}a(lb,"getSystemSchemaPath");function _b(){if(bc!==void 0)return bc;if(ur.getHdbBasePath()!==void 0)return bc=ur.get(yc.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Nc.join(ur.getHdbBasePath(),yc.TRANSACTIONS_DIR_NAME),bc}a(_b,"getTransactionAuditStoreBasePath");function QV(e,t){let r=ur.get(ri.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Nc.join(_b(),e.toString())}a(QV,"getTransactionAuditStorePath");function db(e,t){e=e.toString(),t=t&&t.toString();let r=ur.get(yc.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Nc.join(ub(),e)}a(db,"getSchemaPath");function zV(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,WV(process.argv));let n=r[ri.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!KV.isObject(n))throw o;i=n}for(let o of i){let c=o[p_];if(!c)continue;let u=ur.get(ri.DATABASES);u=u??{};let _=c?.tables?.[t]?.[Rc.PATH];if(_)return cb.set(u,[p_,Rc.TABLES,t,Rc.PATH],_),ur.setProperty(ri.DATABASES,u),_;let l=c?.[Rc.PATH];if(l)return cb.set(u,[p_,Rc.PATH],l),ur.setProperty(ri.DATABASES,u),l}}let s=r[ri.STORAGE_PATH.toUpperCase()];if(s){if(!ab.pathExistsSync(s))throw new Error(s+" does not exist");let i=Nc.join(s,e);return ab.mkdirsSync(i),ur.setProperty(ri.STORAGE_PATH,s),i}return lb()}a(zV,"initSystemSchemaPaths");function JV(){Ac=void 0,Oc=void 0,bc=void 0}a(JV,"resetPaths");fb.exports={getBaseSchemaPath:ub,getSystemSchemaPath:lb,getTransactionAuditStorePath:QV,getTransactionAuditStoreBasePath:_b,getSchemaPath:db,initSystemSchemaPaths:zV,resetPaths:JV}});var Br=g((wce,Sb)=>{"use strict";var XV=vr().LMDB_ERRORS_ENUM,Nce=require("lmdb"),jV=ft(),Ice=require("buffer").Buffer,{OVERFLOW_MARKER:Eb,MAX_SEARCH_KEY_LENGTH:S_}=jV,hb=["number","string","symbol","boolean","bigint"];function ZV(e){if(e=e?.primaryStore||e,!e)throw new Error(XV.ENV_REQUIRED)}a(ZV,"validateEnv");function e$(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(e$,"stringifyData");function t$(e){return e instanceof Date?e.valueOf():e}a(t$,"convertKeyValueToWrite");function r$(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(hb.includes(typeof e))return e.length>S_?[e.slice(0,S_)+Eb]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(hb.includes(typeof i))i.length>S_?r.push(i.slice(0,S_)+Eb):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}a(r$,"getIndexedValues");var T_=0,mb=0;function pb(){mb=Date.now()-performance.now()}a(pb,"adjustStartTime");pb();var n$=6e4;setInterval(pb,n$).unref();function s$(){let e=performance.now()+mb;return e>T_?(T_=e,e):(T_+=488e-6,T_)}a(s$,"getNextMonotonicTime");Sb.exports={validateEnv:ZV,stringifyData:e$,convertKeyValueToWrite:t$,getNextMonotonicTime:s$,getIndexedValues:r$}});var Ic=g((Dce,Tb)=>{"use strict";var i$=P().OPERATIONS_ENUM,zh=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=i$.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Tb.exports=zh});var wc=g((Pce,Ob)=>{"use strict";var Mce=Ic(),g_=P(),Jh=z(),gb=$(),o$=require("uuid"),{handleHDBError:R_,hdb_errors:a$}=se(),{HDB_ERROR_MSGS:A_,HTTP_STATUS_CODES:O_}=a$;Ob.exports=Rb;function Rb(e,t,r){for(let s=0;s<t.length;s++)Ab(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];c$(i,r,e.operation)}}a(Rb,"processRows");Rb.validateAttribute=Ab;function Ab(e){if(Buffer.byteLength(String(e))>g_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw R_(new Error,A_.ATTR_NAME_LENGTH_ERR(e),O_.BAD_REQUEST,void 0,void 0,!0);if(Jh.isEmptyOrZeroLength(e)||Jh.isEmpty(e.trim()))throw R_(new Error,A_.ATTR_NAME_NULLISH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}a(Ab,"validateAttribute");function c$(e,t,r){if(!e.hasOwnProperty(t)||Jh.isEmptyOrZeroLength(e[t])){if(r===g_.OPERATIONS_ENUM.INSERT||r===g_.OPERATIONS_ENUM.UPSERT){e[t]=o$.v4();return}throw gb.error("Update transaction aborted due to record with no hash value:",e),R_(new Error,A_.RECORD_MISSING_HASH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>g_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw gb.error(e),R_(new Error,A_.HASH_VAL_LENGTH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}a(c$,"validateHash")});var bb,In,Xh,Cc=Re(()=>{bb=require("events"),In=class extends bb.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new Xh;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)}},Xh=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 Gi={};Fe(Gi,{server:()=>at});var yb,at,lr=Re(()=>{yb=require("../index"),at={};(0,yb._assignPackageExport)("server",at)});var em={};Fe(em,{loadGQLSchema:()=>_$,start:()=>Zh,startOnMainThread:()=>l$});function Zh({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=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 u.OBJECT_TYPE_DEFINITION:let B=function(U){if(U.kind==="NonNullType"){let Q=B(U.type);return Q.nullable=!1,Q}if(U.kind==="ListType")return{type:"array",elements:B(U.type)};let M={type:U.name?.value};return Object.defineProperty(M,"location",{value:U.loc.startToken}),M};a(B,"getProperty");let T=S.name.value,A=[],b={table:null,database:null,properties:A};E.set(T,b);for(let U of S.directives){if(U.name.value==="table"){for(let F of U.arguments)b[F.name.value]=F.value.value;b.schema&&(b.database=b.schema),b.table||(b.table=T),b.audit&&(b.audit=b.audit!=="false"),b.attributes=b.properties,f.push(b)}if(U.name.value==="sealed"&&(b.sealed=!0),U.name.value==="export"){b.export=!0;for(let F of U.arguments)F.name.value==="name"&&(b.export={name:F.value.value})}}let I=!1;for(let U of S.fields){let F=B(U.type);F.name=U.name.value,A.push(F);for(let M of U.directives)if(M.name.value==="primaryKey")I?console.warn("Can not define two attributes as a primary key"):(F.isPrimaryKey=!0,I=!0);else if(M.name.value==="indexed")F.indexed=!0;else if(M.name.value==="relationship"){let Q={};for(let J of M.arguments)Q[J.name.value]=J.value.value;F.relationship=Q}else if(M.name.value==="createdTime")F.assignCreatedTime=!0;else if(M.name.value==="updatedTime")F.assignUpdatedTime=!0;else if(M.name.value==="expiresAt")F.expiresAt=!0;else if(M.name.value==="allow"){let Q=F.authorizedRoles=[];for(let J of M.arguments)J.name.value==="role"&&Q.push(J.value.value)}}b.type=T,T==="Query"&&(h=b)}function p(S){let T=E.get(S.type);T?(Object.defineProperty(S,"properties",{value:T.properties}),Object.defineProperty(S,"definition",{value:T})):S.type==="array"?p(S.elements):u$.includes(S.type)||(0,Nb.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(p,"connectPropertyType");for(let S of E.values())for(let T of S.properties)p(T);for(let S of f)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,jh.dirname)(n),S.tableClass):i.set((0,jh.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var jh,Nb,u$,l$,_$,Ib=Re(()=>{jh=require("path");Ae();Nb=H(Qe()),u$=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(Zh,"start");l$=Zh,_$=Zh({ensureTable:Et}).handleFile});async function b_(e){let t=(0,Db.pathToFileURL)(e).toString();return d$?(Dc||(Dc=f$(h$)),(await(await Dc).import(t)).namespace):import(t)}async function f$(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Dc=new Compartment({console,Math,Date,fetch:E$,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,Cb.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:$t,tables:xr,databases:ct})}};let n=await(0,wb.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Dc}function E$(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 h$(){return{Resource:$t,tables:xr}}var wb,Cb,Db,d$,Dc,tm=Re(()=>{cn();Ae();wb=require("fs/promises"),Cb=require("path"),Db=require("url"),d$=!1;a(b_,"secureImport");a(f$,"getCompartment");a(E$,"secureOnlyFetch");a(h$,"getGlobalVars")});var nm={};Fe(nm,{handleFile:()=>m$});async function m$(e,t,r,n){let s=new Map,i=await b_(r);c(i.default)&&n.set((0,rm.dirname)(t),i.default),o(i,(0,rm.dirname)(t));function o(u,_){for(let l in u){let d=u[l];c(d)?n.set(_+"/"+l,d):typeof d=="object"&&o(d,_+"/"+l)}}a(o,"recurseForResources");function c(u){return typeof u=="function"&&(u.get||u.put||u.post||u.delete)}return a(c,"isResource"),s}var rm,Lb=Re(()=>{tm();rm=require("path");a(m$,"handleFile")});var im={};Fe(im,{start:()=>p$});function p$({resources:e}){e.set("login",sm),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var sm,Mb=Re(()=>{cn();a(p$,"start");sm=class extends $t{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 Gb={};Fe(Gb,{parse:()=>am,streamAsJSON:()=>Lc,stringify:()=>qi});function Lc(e){return new om({value:e})}function Pb(e){return console.error(e),JSON.stringify(e.toString())}function Ub(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function qi(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===xb)return Hb(e);if(t.resolution)return t.resolution.then(()=>qi(e));throw t}}function Hb(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+=Hb(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+qi(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function am(e){return g$.test(e)?S$.parse(e):JSON.parse(e)}var vb,Bb,S$,T$,xb,om,g$,cm=Re(()=>{vb=require("stream"),Bb=H(require("json-bigint-fixes")),S$=(0,Bb.default)({useNativeBigInt:!0}),T$=1e4,xb={};BigInt.prototype.toJSON=function(){throw xb};a(Lc,"streamAsJSON");om=class extends vb.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),Pb)}catch(s){yield Pb(s)}else yield qi(t)}else yield qi(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);Ub(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>T$?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 Ub(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(Pb,"handleError");a(Ub,"when");a(qi,"stringify");a(Hb,"jsStringify");g$=/[[,:]\s*-?\d{16,}/;a(am,"parse")});var jb=g((zce,Xb)=>{"use strict";var um=require("recursive-iterator"),R$=require("alasql"),lm=require("clone"),qb=z(),{handleHDBError:Fb,hdb_errors:A$}=se(),{HDB_ERROR_MSGS:kb,HTTP_STATUS_CODES:Vb}=A$,{getDatabases:O$}=(Ae(),ie(ke)),b$=["DISTINCT_ARRAY"],$b=Symbol("validateTables"),_m=Symbol("validateTable"),Qce=Symbol("getAllColumns"),Yb=Symbol("validateAllColumns"),y_=Symbol("findColumn"),Kb=Symbol("validateOrderBy"),Mc=Symbol("validateSegment"),dm=Symbol("validateColumn"),Wb=Symbol("setColumnsForTable"),Qb=Symbol("checkColumnsForAsterisk"),zb=Symbol("validateGroupBy"),Jb=Symbol("hasColumns"),fm=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[$b](),this[Qb](),this[Yb]()}[$b](){if(this[Jb]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[_m](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[_m](t.table)})}}[Jb](){let t=!1,r=new um(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[_m](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=O$();if(!r[t.databaseid])throw Fb(new Error,kb.SCHEMA_NOT_FOUND(t.databaseid),Vb.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Fb(new Error,kb.TABLE_NOT_FOUND(t.databaseid,t.tableid),Vb.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=lm(s);i.table=lm(t),this.attributes.push(i)})}[y_](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)}[Qb](){let t=new um(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[Wb](r.tableid)}[Wb](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new R$.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Yb](){this[Mc](this.statement.columns,!1),this[Mc](this.statement.joins,!1),this[Mc](this.statement.where,!1),this[zb](this.statement.group,!1),this[Mc](this.statement.order,!0)}[Mc](t,r){if(!t)return;let n=new um(t),s=[];for(let{node:i,path:o}of n)!qb.isEmpty(i)&&!qb.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Kb](i):s.push(this[dm](i)));return s}[zb](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&b$.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=lm(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[y_](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[y_](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`}[Kb](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[dm](t)}[dm](t){let r=this[y_](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]}};Xb.exports=fm});var ey=g((Xce,Zb)=>{"use strict";var Em=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")}};Zb.exports=Em});var ry=g((Zce,ty)=>{"use strict";var hm=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};ty.exports=hm});var oy={};Fe(oy,{HAS_EXPIRATION:()=>Am,LAST_TIMESTAMP_PLACEHOLDER:()=>vc,LOCAL_TIMESTAMP:()=>y$,METADATA:()=>Pc,NO_TIMESTAMP:()=>pm,PENDING_LOCAL_TIME:()=>Om,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>Rm,RecordEncoder:()=>gm,TIMESTAMP_ASSIGN_LAST:()=>I$,TIMESTAMP_ASSIGN_NEW:()=>sy,TIMESTAMP_ASSIGN_PREVIOUS:()=>iy,TIMESTAMP_PLACEHOLDER:()=>N_,TIMESTAMP_RECORD_PREVIOUS:()=>Sm,getUpdateRecord:()=>bm,handleLocalTimeForGets:()=>D_});function C$(){return Uc[0]=Uc[0]^64,N$.getFloat64(0)}function D_(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),u=c?.value,_=u?.[Pc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[Pc]>=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 u=c.value,_=u[Pc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.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,Fi.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Fi.length;u++){let _=Fi[u].deref();(!_||_.isDone||_.isCommitted)&&Fi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function bm(e,t,r){return function(n,s,i,o,c=-1,u,_,l,d="put",E,f){if(E||u==null?Yo=i?.localTime?Sm|iy:pm:Yo=u?i?.localTime?Sm|16384:sy|16384:pm,l>0&&(c|=Am),w_=c,Tm=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Yo>0},p;try{E&&(h.ifVersion=p=i?.version??null);let S=e.put(n,s,h);if(u){let T=_?.user?.username;if(f&&(I_=e.encoder.encode(f)),E&&i?.localTime){let A=i?.localTime,b=r.get(A);if(b){let I=vt(b).previousLocalTime;return r.put(A,C_(o,t,n,I,T,d,I_),{ifVersion:p}),S}}r.put(vc,C_(o,t,n,i?.localTime?1:0,T,d,I_),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var ny,mm,N_,vc,Rm,y$,Pc,Uc,N$,pm,sy,I$,iy,Sm,Am,Om,w$,I_,Yo,w_,Tm,gm,Fi,Bc=Re(()=>{ny=require("msgpackr");ni();mm=H($()),N_=new Uint8Array([1,1,1,1,4,64,0,0]),vc=new Uint8Array([1,1,1,1,1,0,0,0]),Rm=new Uint8Array([1,1,1,1,3,64,0,0]),y$=Symbol("local-timestamp"),Pc=Symbol("metadata"),Uc=new Uint8Array(8),N$=new DataView(Uc.buffer,0,8),pm=0,sy=0,I$=1,iy=3,Sm=4,Am=16,Om=1,Yo=0,w_=-1,Tm=0,gm=class extends ny.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(Yo||w_>=0){let i=0,o=Yo;o&&(i+=8,Yo=0);let c=w_,u=Tm;c>=0&&(i+=2,w_=-1,u&&(i+=8,Tm=0));let _=w$=r.call(this,n,s|2048|i);I_=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(N_[4]=o,N_[5]=o>>8,_.set(N_,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,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,u;if(i===2){if(t.copy)t.copy(Uc,0,c),c+=8;else for(let d=0;d<8;d++)Uc[d]=t[c++];u=C$(),i=t[c]}let _;i<32&&(o=i,c+=2,o&Am&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,s),s-c);return{localTime:u,value:l,[Pc]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(C$,"getTimestamp");a(D_,"handleLocalTimeForGets");Fi=[];setInterval(()=>{for(let e=0;e<Fi.length;e++){let t=Fi[e].deref();!t||t.isDone||t.isCommitted?Fi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(mm.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):mm.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(bm,"getUpdateRecord")});var xc=g((sue,cy)=>{"use strict";var ay=ee(),D$=P(),{RecordEncoder:L$}=(Bc(),ie(oy)),nue=require("fs");ay.initSync();var M$=ay.get(D$.CONFIG_PARAMS.STORAGE_CACHING)!==!1,ym=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=M$&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:L$})}};cy.exports=ym});var Hc=g((oue,uy)=>{"use strict";var Hr=ee(),un=P();Hr.initSync();var L_=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=Hr.get(un.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Hr.get(un.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Hr.get(un.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Hr.get(un.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Hr.get(un.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Hr.get(un.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Hr.get(un.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Hr.get(un.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Hr.get(un.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Hr.get(un.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Hr.get(un.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Hr.get(un.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};uy.exports=L_;L_.MAX_DBS=1e4});var ze=g((cue,Ty)=>{"use strict";var Im=require("lmdb"),wn=require("fs-extra"),Gr=require("path"),M_=Br(),dy=$(),_r=vr().LMDB_ERRORS_ENUM,P_=ry(),wm=xc(),fy=Hc(),si=ft(),ly=P(),{table:P$,resetDatabases:U$}=(Ae(),ie(ke)),_y=ee(),Cn=si.INTERNAL_DBIS_NAME,Ey=si.DBI_DEFINITION_NAME,v$="data.mdb",B$="lock.mdb",Gc=".mdb",x$="-lock",Nm=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=ln(t,r),this.key_type=this.dbi[si.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[si.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new Im.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function U_(e,t){if(e===void 0)throw new Error(_r.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(_r.ENV_NAME_REQUIRED)}a(U_,"pathEnvNameValidation");async function Cm(e,t,r=!0){try{await wn.access(e)}catch(n){throw n.code==="ENOENT"?new Error(_r.INVALID_BASE_PATH):n}try{let n=Gr.join(e,t+Gc);return await wn.access(n,wn.constants.R_OK|wn.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await wn.access(Gr.join(e,t,v$),wn.constants.R_OK|wn.constants.F_OK),Gr.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(_r.INVALID_ENVIRONMENT)}else throw new Error(_r.INVALID_ENVIRONMENT);throw n}}a(Cm,"validateEnvironmentPath");function v_(e,t){if(M_.validateEnv(e),t===void 0)throw new Error(_r.DBI_NAME_REQUIRED)}a(v_,"validateEnvDBIName");async function H$(e,t,r=!1,n=!1){U_(e,t);let s=Gr.basename(e);t=t.toString();let i=_y.get(ly.CONFIG_PARAMS.DATABASES);i||_y.setProperty(ly.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await Cm(e,t,n),hy(e,t,r)}catch(o){if(o.message===_r.INVALID_ENVIRONMENT){let c=Gr.join(e,t);await wn.mkdirp(n?c:e);let u=new fy(n?c:c+Gc,!1),_=Im.open(u);_.dbis=Object.create(null);let l=new wm(!1);_.openDB(Cn,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Dm(e,t,r);return _[si.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(H$,"createEnvironment");async function G$(e,t,r,n=!0){U_(e,t),t=t.toString();let s=Gr.join(e,t);return P$({table:t,database:Gr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(G$,"copyEnvironment");async function hy(e,t,r=!1){U_(e,t),t=t.toString();let n=Dm(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 Cm(e,t),i=Gr.join(e,t+Gc),o=s!=i,c=new fy(s,o),u=Im.open(c);u.dbis=Object.create(null);let _=py(u);for(let l=0;l<_.length;l++)ln(u,_[l]);return u[si.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=u,u}a(hy,"openEnvironment");async function q$(e,t,r=!1){U_(e,t),t=t.toString();let n=Gr.join(e,t+Gc),s=await Cm(e,t);if(global.lmdb_map!==void 0){let i=Dm(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await my(o),delete global.lmdb_map[i]}}await wn.remove(s),await wn.remove(s===n?s+x$:Gr.join(Gr.dirname(s),B$))}a(q$,"deleteEnvironment");async function my(e){M_.validateEnv(e);let t=e[si.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(my,"closeEnvironment");function Dm(e,t,r=!1){let s=`${Gr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(Dm,"getCachedEnvironmentName");function F$(e){M_.validateEnv(e);let t=Object.create(null),r=ln(e,Cn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Cn)try{t[n]=Object.assign(new P_,s)}catch{dy.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(F$,"listDBIDefinitions");function py(e){M_.validateEnv(e);let t=[],r=ln(e,Cn);for(let{key:n}of r.getRange({start:!1}))n!==Cn&&t.push(n);return t}a(py,"listDBIs");function k$(e,t){let n=ln(e,Cn).getEntry(t),s=new P_;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{dy.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(k$,"getDBIDefinition");function Sy(e,t,r,n=!r){if(v_(e,t),t=t.toString(),t===Cn)throw new Error(_r.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return ln(e,t)}catch(s){if(s.message===_r.DBI_DOES_NOT_EXIST){let i=new wm(r,n===!0),o=e.openDB(t,i),c=new P_(r===!0,n);return o[Ey]=c,ln(e,Cn).putSync(t,c),e.dbis[t]=o,o}throw s}}a(Sy,"createDBI");function ln(e,t){if(v_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Cn?r=k$(e,t):r=new P_,r===void 0)throw new Error(_r.DBI_DOES_NOT_EXIST);let n;try{let s=new wm(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(_r.DBI_DOES_NOT_EXIST):s}return n[Ey]=r,e.dbis[t]=n,n}a(ln,"openDBI");function V$(e,t){v_(e,t),t=t.toString();let r=ln(e,t),n=r.getStats();return r[si.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(V$,"statDBI");async function $$(e,t){try{let r=Gr.join(e,t+Gc);return(await wn.stat(r)).size}catch{throw new Error(_r.INVALID_ENVIRONMENT)}}a($$,"environmentDataSize");function Y$(e,t){if(v_(e,t),t=t.toString(),t===Cn)throw new Error(_r.CANNOT_DROP_INTERNAL_DBIS_NAME);ln(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],ln(e,Cn).removeSync(t)}a(Y$,"dropDBI");function K$(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{ln(e,i)}catch(o){if(o.message===_r.DBI_DOES_NOT_EXIST)Sy(e,i,i!==t,i===t),n=!0;else throw o}}n&&U$()}a(K$,"initializeDBIs");Ty.exports={openDBI:ln,openEnvironment:hy,createEnvironment:H$,listDBIs:py,listDBIDefinitions:F$,createDBI:Sy,dropDBI:Y$,statDBI:V$,deleteEnvironment:q$,initializeDBIs:K$,TransactionCursor:Nm,environmentDataSize:$$,copyEnvironment:G$,closeEnvironment:my}});var Ry=g((lue,gy)=>{"use strict";var Lm=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};gy.exports=Lm});var Oy=g((due,Ay)=>{"use strict";var Mm=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}};Ay.exports=Mm});var yy=g((Eue,by)=>{"use strict";var Pm=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};by.exports=Pm});var Ko=g((Tue,wy)=>{"use strict";var W$=ze(),Q$=Ry(),z$=Oy(),J$=yy(),zn=Br(),qc=vr().LMDB_ERRORS_ENUM,X$=ft(),Rs=P(),j$=z(),Z$=require("uuid"),mue=require("lmdb"),{handleHDBError:e1,hdb_errors:t1}=se(),{OVERFLOW_MARKER:pue,MAX_SEARCH_KEY_LENGTH:Sue}=X$,Ny=ee();Ny.initSync();var B_=Ny.get(Rs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Um=Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME,ki=Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function r1(e,t,r,n,s=zn.getNextMonotonicTime()){Hm(e,t,r,n),vm(e,t,r);let i=new Q$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u];Iy(_,!0,s);let l=n1(e,t,r,_),d=_[t];o.push(l),c.push(d)}return Bm(o,c,n,i,s)}a(r1,"insertRecords");function n1(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 l=c([[{}]]);Array.isArray(l)&&(c=l[0][Rs.FUNC_VAL],n[o]=c)}let u=zn.getIndexedValues(c),_=e.dbis[o];if(u){B_&&_.prefetch(u.map(l=>({key:l,value:s})),x_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],s)}}B_&&e.dbis[t].prefetch([s],x_),e.dbis[t].put(s,n,n[ki])})}a(n1,"insertRecord");function s1(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(s1,"removeSkippedRecords");function Iy(e,t,r){let n=r>0;(n||!Number.isInteger(e[ki]))&&(e[ki]=r||(r=zn.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[Um]))&&(e[Um]=r||zn.getNextMonotonicTime()):delete e[Um]}a(Iy,"setTimestamps");function vm(e,t,r){r.indexOf(Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),W$.initializeDBIs(e,t,r)}a(vm,"initializeTransaction");async function i1(e,t,r,n,s=zn.getNextMonotonicTime()){Hm(e,t,r,n),vm(e,t,r);let i=new z$,o=[],c=[],u=[];for(let _=0;_<n.length;_++){let l=n[_],d=l[t],E;try{E=xm(e,t,l,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(E),u.push(d)}return Bm(c,u,n,i,s,o)}a(i1,"updateRecords");async function o1(e,t,r,n,s=zn.getNextMonotonicTime()){try{Hm(e,t,r,n)}catch(u){throw e1(u,u.message,t1.HTTP_STATUS_CODES.BAD_REQUEST)}vm(e,t,r);let i=new J$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u],l;j$.isEmpty(_[t])?(l=Z$.v4(),_[t]=l):l=_[t];let d=xm(e,t,_,l,i,!1,s);o.push(d),c.push(l)}return Bm(o,c,n,i,s)}a(o1,"upsertRecords");async function Bm(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||zn.getNextMonotonicTime(),s1(r,i),n}a(Bm,"finalizeWrite");function xm(e,t,r,n,s,i=!1,o){let c=e.dbis[t],u=c.getEntry(n),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(Iy(r,!l,o),Number.isInteger(r[ki])&&_[ki]>r[ki])return!1;l&&s.original_records.push(_);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let T=_[h];if(typeof p=="function"){let b=p([[_]]);Array.isArray(b)&&(p=b[0][Rs.FUNC_VAL],r[h]=p)}if(p===T)continue;let A=zn.getIndexedValues(T);if(A){B_&&S.prefetch(A.map(b=>({key:b,value:n})),x_);for(let b=0,I=A.length;b<I;b++)S.remove(A[b],n)}if(A=zn.getIndexedValues(p),A){B_&&S.prefetch(A.map(b=>({key:b,value:n})),x_);for(let b=0,I=A.length;b<I;b++)S.put(A[b],n)}}let f=Object.assign({},_,r);c.put(n,f,f[ki])},"do_put");return u?d=c.ifVersion(n,u.version,E):d=c.ifNoExists(n,E),d.then(f=>f?!0:xm(e,t,r,n,s,i,o))}a(xm,"updateUpsertRecord");function a1(e,t,r){if(zn.validateEnv(e),t===void 0)throw new Error(qc.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(qc.WRITE_ATTRIBUTES_REQUIRED):new Error(qc.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(a1,"validateBasic");function Hm(e,t,r,n){if(a1(e,t,r),!Array.isArray(n))throw n===void 0?new Error(qc.RECORDS_REQUIRED):new Error(qc.RECORDS_MUST_BE_ARRAY)}a(Hm,"validateWrite");function x_(){}a(x_,"noop");wy.exports={insertRecords:r1,updateRecords:i1,upsertRecords:o1}});var Vi=g((Rue,c1)=>{c1.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 Xn=g((Aue,Ly)=>{"use strict";var Dy=z(),Cy=P(),Wo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Jn=require("joi"),ii={schema_format:{pattern:Wo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},u1=Jn.alternatives(Jn.string().min(1).max(ii.schema_length.maximum).pattern(Wo).messages({"string.pattern.base":"{:#label} "+ii.schema_format.message}),Jn.number(),Jn.array()).required(),l1=Jn.alternatives(Jn.string().min(1).max(ii.schema_length.maximum).pattern(Wo).messages({"string.pattern.base":"{:#label} "+ii.schema_format.message}),Jn.number()),_1=Jn.alternatives(Jn.string().min(1).max(ii.schema_length.maximum).pattern(Wo).messages({"string.pattern.base":"{:#label} "+ii.schema_format.message}),Jn.number()).required();function d1(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>ii.schema_length.maximum?`'${e}' maximum of 250 characters`:Wo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(d1,"checkValidTable");function f1(e,t){return Dy.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(f1,"validateSchemaExists");function E1(e,t){let r=t.state.ancestors[0].schema;return Dy.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(E1,"validateTableExists");function h1(e,t){return e.toLowerCase()===Cy.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Cy.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(h1,"validateSchemaName");Ly.exports={common_validators:ii,schema_regex:Wo,hdb_schema_table:u1,validateSchemaExists:f1,validateTableExists:E1,validateSchemaName:h1,checkValidTable:d1,hdb_database:l1,hdb_table:_1}});var je=g((bue,My)=>{"use strict";var dr=require("validate.js");dr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||dr.validators.type.checks[t](e)?null:` must be a '${t}' value`};dr.validators.type.checks={Object:function(e){return dr.isObject(e)&&!dr.isArray(e)},Array:dr.isArray,Integer:dr.isInteger,Number:dr.isNumber,String:dr.isString,Date:dr.isDate,Boolean:function(e){return typeof e=="boolean"}};dr.validators.hasValidFileExt=function(e,t){return dr.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};My.exports={validateObject:m1,validateObjectAsync:p1,validateBySchema:S1};function m1(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=dr(e,t,{format:"flat"});return r?new Error(r):null}a(m1,"validateObject");async function p1(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await dr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(p1,"validateObjectAsync");function S1(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(S1,"validateBySchema")});var H_=g((Nue,Py)=>{var{common_validators:jn}=Xn(),kc=je(),Fc="is required",gt={database:{presence:!1,format:jn.schema_format,length:jn.schema_length},schema:{presence:!1,format:jn.schema_format,length:jn.schema_length},table:{presence:!0,format:jn.schema_format,length:jn.schema_length},attribute:{presence:!0,format:jn.schema_format,length:jn.schema_length},hash_attribute:{presence:!0,format:jn.schema_format,length:jn.schema_length}};function Vc(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(Vc,"makeAttributesStrings");function T1(e){return e=Vc(e),gt.table.presence=!1,gt.attribute.presence=!1,gt.hash_attribute.presence=!1,kc.validateObject(e,gt)}a(T1,"schema_object");function g1(e){return e=Vc(e),gt.table.presence={message:Fc},gt.attribute.presence=!1,gt.hash_attribute.presence=!1,kc.validateObject(e,gt)}a(g1,"table_object");function R1(e){return e=Vc(e),gt.table.presence={message:Fc},gt.attribute.presence=!1,kc.validateObject(e,gt)}a(R1,"create_table_object");function A1(e){return e=Vc(e),gt.table.presence={message:Fc},gt.attribute.presence={message:Fc},gt.hash_attribute.presence=!1,kc.validateObject(e,gt)}a(A1,"attribute_object");function O1(e){return e=Vc(e),gt.table.presence={message:Fc},gt.attribute.presence=!1,gt.hash_attribute.presence=!1,kc.validateObject(e,gt)}a(O1,"describe_table");function b1(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(b1,"validateTableResidence");Py.exports={schema_object:T1,create_table_object:R1,table_object:g1,attribute_object:A1,describe_table:O1,validateTableResidence:b1}});var vy=g((wue,Uy)=>{"use strict";var y1=require("uuid"),Gm=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||y1.v4(),this.schema_table=`${this.schema}.${this.table}`}};Uy.exports=Gm});var G_=g((Due,By)=>{"use strict";var N1=vy(),qm=class extends N1{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}};By.exports=qm});var Hy=g((Mue,xy)=>{"use strict";xy.exports=w1;var I1="inserted";function w1(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===I1?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(w1,"returnObject")});var q_=g((Uue,Vy)=>{"use strict";var C1=P(),Fm=ze(),D1=Ko(),{getSystemSchemaPath:L1,getSchemaPath:M1}=Xe(),P1=Vi(),U1=H_(),v1=G_(),B1=Hy(),{handleHDBError:Gy,hdb_errors:Fy}=se(),qy=z(),{HTTP_STATUS_CODES:x1}=Fy,km=P1.hdb_attribute,ky=[];for(let e=0;e<km.attributes.length;e++)ky.push(km.attributes[e].attribute);var H1="inserted";Vy.exports=G1;async function G1(e){let t=U1.attribute_object(e);if(t)throw Gy(new Error,t.message,Fy.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&qy.checkGlobalSchemaTable(e.schema,e.table);if(r)throw Gy(new Error,r,x1.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=qy.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 v1(e.schema,e.table,e.attribute,e.id);try{let i=await Fm.openEnvironment(M1(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}`);Fm.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Fm.openEnvironment(L1(),C1.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await D1.insertRecords(o,km.hash_attribute,ky,[s]);return B1(H1,c,{records:[s]},u)}catch(i){throw i}}a(G1,"lmdbCreateAttribute")});var $m=g((Bue,Yy)=>{var{hdb_table:q1,hdb_database:$y}=Xn(),F1=je(),Vm=require("joi"),k1={undefined:"undefined",null:"null"},V1=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||k1[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"),$1=Vm.object({database:$y,schema:$y,table:q1,records:Vm.array().items(Vm.object().custom(V1)).required()});Yy.exports=function(e){return F1.validateBySchema(e,$1)}});var $c=g((Gue,Wy)=>{"use strict";var As=z(),Ky=$(),Hue=$m(),{getDatabases:Y1}=(Ae(),ie(ke)),{ClientError:$i}=se();Wy.exports=K1;function K1(e){if(As.isEmpty(e))throw new $i("invalid update parameters defined.");if(As.isEmptyOrZeroLength(e.schema))throw new $i("invalid schema specified.");if(As.isEmptyOrZeroLength(e.table))throw new $i("invalid table specified.");if(!Array.isArray(e.records))throw new $i("records must be an array");let t=Y1()[e.schema]?.[e.table];if(As.isEmpty(t))throw new $i(`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&&As.isEmptyOrZeroLength(o[r]))throw Ky.error("a valid hash attribute must be provided with update record:",o),new $i("a valid hash attribute must be provided with update record, check log for more info");if(!As.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Ky.error(`a valid hash value must be provided with ${e.operation} record:`,o),new $i(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!As.isEmpty(o[r])&&o[r]!==""&&n.has(As.autoCast(o[r]))&&(o.skip=!0),n.add(As.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(K1,"insertUpdateValidate")});var zy=g((Fue,Qy)=>{"use strict";var Ym=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};Qy.exports=Ym});var jy=g((Vue,Xy)=>{"use strict";var Km=ze(),W1=$(),Jy=vr().LMDB_ERRORS_ENUM;Xy.exports=Q1;async function Q1(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 Km.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==Jy.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await Km.closeEnvironment(global.lmdb_map[n]),await Km.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==Jy.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){W1.error(t)}}a(Q1,"cleanLMDBMap")});var Os=g((Yue,rN)=>{"use strict";var Yc=require("crypto"),z1=ee(),{CONFIG_PARAMS:J1}=P(),eN="aes-256-cbc",X1=32,j1=16,Wm=64,tN=32,Z1=Wm+tN,Zy=new Map;rN.exports={encrypt:eY,decrypt:tY,createNatsTableStreamName:rY};function eY(e){let t=Yc.randomBytes(X1),r=Yc.randomBytes(j1),n=Yc.createCipheriv(eN,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(eY,"encrypt");function tY(e){let t=e.substr(0,Wm),r=e.substr(Wm,tN),n=e.substr(Z1,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Yc.createDecipheriv(eN,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(tY,"decrypt");function rY(e,t){let r=z1.get(J1.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=Zy.get(r);return n||(n=Yc.createHash("md5").update(r).digest("hex"),Zy.set(r,n)),n}a(rY,"createNatsTableStreamName")});var bs=g((Que,sN)=>{"use strict";var Wue=qr(),Kc=$(),nN=H_(),nY=Os(),F_=z(),{handleHDBError:k_,hdb_errors:sY}=se(),{HDB_ERROR_MSGS:V_,HTTP_STATUS_CODES:Qm}=sY,iY=ee();iY.initSync();var{getDatabases:zm}=(Ae(),ie(ke)),oY=require("fs-extra");sN.exports={describeAll:aY,describeTable:$_,describeSchema:cY};async function aY(e={}){try{let t=F_.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=zm(),o={},c={},u=[],_=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 $_({schema:d,table:f,exact_count:_});else if(n&&n[d].describe&&n[d].tables[f].describe){let p=n[d].tables[f].attribute_permissions;h=await $_({schema:d,table:f,exact_count:_},p)}h&&u.push(h)}catch(h){Kc.error(h)}}let l={};for(let d in u)t||s||r?(l[u[d].schema]==null&&(l[u[d].schema]={}),l[u[d].schema][u[d].name]=u[d],o[u[d].schema]&&delete o[u[d].schema]):c[u[d].schema]&&(l[u[d].schema]==null&&(l[u[d].schema]={}),l[u[d].schema][u[d].name]=u[d],o[u[d].schema]&&delete o[u[d].schema]);for(let d in o)t||s||r?l[d]={}:c[d]&&(l[d]={});return l}catch(t){return Kc.error("Got an error in describeAll"),Kc.error(t),k_(new Error,V_.DESCRIBE_ALL_ERR)}}a(aY,"describeAll");async function $_(e,t){F_.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=nN.describe_table(e);if(i)throw i;let c=zm()[r];if(!c)throw k_(new Error,V_.SCHEMA_NOT_FOUND(e.schema),Qm.NOT_FOUND);let u=c[n];if(!u)throw k_(new Error,V_.TABLE_NOT_FOUND(e.schema,e.table),Qm.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(h=>({type:h.type,name:h.name})):void 0}))}a(_,"pushAtt");let l=[];if(s){let f={};s.forEach(h=>{h.describe&&(f[h.attribute_name]=!0)}),u.attributes.forEach(h=>{f[h.name]&&_(h)})}else u.attributes?.forEach(f=>_(f));let d;try{d=(await oY.stat(u.primaryStore.env.path)).size}catch(f){Kc.warn("unable to get database size",f)}let E={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l,db_size:d};E.clustering_stream_name=nY.createNatsTableStreamName(E.schema,E.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});E.record_count=f.recordCount,E.estimated_record_range=f.estimatedRange;let h=u.auditStore;if(h)for(let p of h.getKeys({reverse:!0,limit:1}))E.last_updated_record=p[0];if(!E.last_updated_record&&u.indices.__updatedtime__)for(let p of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))E.last_updated_record=p}catch(f){Kc.warn(`unable to stat table dbi due to ${f}`)}return E}a($_,"descTable");async function cY(e){F_.transformReq(e);let t=nN.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=zm()[n];if(!i)throw k_(new Error,V_.SCHEMA_NOT_FOUND(e.schema),Qm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),F_.isEmpty(u)||u.describe){let _=await $_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(cY,"describeSchema")});var ys=g((jue,uN)=>{var uY=Vi(),{callbackify:oN,promisify:lY}=require("util"),{getDatabases:aN}=(Ae(),ie(ke));uN.exports={setSchemaDataToGlobal:iN,getTableSchema:_Y,getSystemSchema:dY,setSchemaDataToGlobalAsync:lY(iN)};var cN=bs(),Jue=oN(cN.describeAll),Xue=oN(cN.describeTable);function iN(e){global.hdb_schema=aN(),e&&e()}a(iN,"setSchemaDataToGlobal");function _Y(e,t,r){let n=aN()[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(_Y,"getTableSchema");function dY(){return uY}a(dY,"getSystemSchema")});var Fr=g((ele,fN)=>{"use strict";var K_=$m(),Yt=z(),fY=require("util"),W_=Dn(),EY=ys(),lN=$(),{handleHDBError:Yi,hdb_errors:hY}=se(),{HTTP_STATUS_CODES:Ki}=hY,mY=fY.promisify(EY.getTableSchema),pY="updated",_N="inserted",dN="upserted";fN.exports={insert:TY,update:gY,upsert:RY,validation:SY,flush:AY};async function SY(e){if(Yt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Yt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Yt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await mY(e.schema,e.table),r=K_(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&&Yt.isEmptyOrZeroLength(c[n]))throw lN.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(!Yt.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw lN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Yt.isEmpty(c[n])&&c[n]!==""&&s.has(Yt.autoCast(c[n]))&&(c.skip=!0),s.add(Yt.autoCast(c[n]));for(let u in c)i[u]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(SY,"validation");async function TY(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=K_(e);if(t)throw Yi(new Error,t.message,Ki.BAD_REQUEST);Yt.transformReq(e);let r=Yt.checkSchemaTableExist(e.schema,e.table);if(r)throw Yi(new Error,r,Ki.BAD_REQUEST);let n=await W_.createRecords(e);return Y_(_N,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(TY,"insertData");async function gY(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=K_(e);if(t)throw Yi(new Error,t.message,Ki.BAD_REQUEST);Yt.transformReq(e);let r=Yt.checkSchemaTableExist(e.schema,e.table);if(r)throw Yi(new Error,r,Ki.BAD_REQUEST);let n=await W_.updateRecords(e);return Yt.isEmpty(n.existing_rows)?Y_(pY,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Y_(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(gY,"updateData");async function RY(e){if(e.operation!=="upsert")throw Yi(new Error,"invalid operation, must be upsert",Ki.INTERNAL_SERVER_ERROR);let t=K_(e);if(t)throw Yi(new Error,t.message,Ki.BAD_REQUEST);Yt.transformReq(e);let r=Yt.checkSchemaTableExist(e.schema,e.table);if(r)throw Yi(new Error,r,Ki.BAD_REQUEST);let n=await W_.upsertRecords(e);return Y_(dN,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(RY,"upsertData");function Y_(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===_N?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===dN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Y_,"returnObject");function AY(e){return Yt.transformReq(e),W_.flush(e.schema,e.table)}a(AY,"flush")});var Xm=g((rle,mN)=>{var OY=je(),Jm=require("joi"),{hdb_table:bY,hdb_database:EN}=Xn(),hN={schema:EN,database:EN,table:bY},yY={date:Jm.date().iso().required()},NY={timestamp:Jm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};mN.exports=function(e,t){let r=t==="timestamp"?{...hN,...NY}:{...hN,...yY},n=Jm.object(r);return OY.validateBySchema(e,n)}});var TN=g((nle,SN)=>{var IY=je(),jm=require("joi"),{hdb_table:wY,hdb_database:pN}=Xn(),CY=jm.object({schema:pN,database:pN,table:wY,hash_values:jm.array().required(),ids:jm.array()});SN.exports=function(e){return IY.validateBySchema(e,CY)}});var RN=g((sle,gN)=>{"use strict";var Zm=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}},ep=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}},tp=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};gN.exports={InsertObject:Zm,NoSQLSeachObject:ep,DeleteResponseObject:tp}});var ci=g((ole,NN)=>{"use strict";var ON=Xm(),DY=TN(),Wi=z(),AN=require("moment"),bN=$(),{promisify:LY,callbackify:MY}=require("util"),Qi=P(),PY=ys(),rp=LY(PY.getTableSchema),np=Dn(),{DeleteResponseObject:UY}=RN(),{handleHDBError:oi,hdb_errors:vY}=se(),{HDB_ERROR_MSGS:Q_,HTTP_STATUS_CODES:ai}=vY,BY="records successfully deleted",xY=MY(yN);NN.exports={delete:xY,deleteRecord:yN,deleteFilesBefore:HY,deleteAuditLogsBefore:GY};async function HY(e){let t=ON(e,"date");if(t)throw oi(t,t.message,ai.BAD_REQUEST,void 0,void 0,!0);if(Wi.transformReq(e),!AN(e.date,AN.ISO_8601).isValid())throw oi(new Error,Q_.INVALID_DATE,ai.BAD_REQUEST,Qi.LOG_LEVELS.ERROR,Q_.INVALID_DATE,!0);let n=Wi.checkSchemaTableExist(e.schema,e.table);if(n)throw oi(new Error,n,ai.NOT_FOUND,Qi.LOG_LEVELS.ERROR,n,!0);let s=await np.deleteRecordsBefore(e);if(await rp(e.schema,e.table),bN.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(HY,"deleteFilesBefore");async function GY(e){let t=ON(e,"timestamp");if(t)throw oi(t,t.message,ai.BAD_REQUEST,void 0,void 0,!0);if(Wi.transformReq(e),isNaN(e.timestamp))throw oi(new Error,Q_.INVALID_VALUE("Timestamp"),ai.BAD_REQUEST,Qi.LOG_LEVELS.ERROR,Q_.INVALID_VALUE("Timestamp"),!0);let r=Wi.checkSchemaTableExist(e.schema,e.table);if(r)throw oi(new Error,r,ai.NOT_FOUND,Qi.LOG_LEVELS.ERROR,r,!0);let n=await np.deleteAuditLogsBefore(e);return await rp(e.schema,e.table),bN.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(GY,"deleteAuditLogsBefore");async function yN(e){e.ids&&(e.hash_values=e.ids);let t=DY(e);if(t)throw oi(t,t.message,ai.BAD_REQUEST,void 0,void 0,!0);Wi.transformReq(e);let r=Wi.checkSchemaTableExist(e.schema,e.table);if(r)throw oi(new Error,r,ai.NOT_FOUND,Qi.LOG_LEVELS.ERROR,r,!0);try{await rp(e.schema,e.table);let n=await np.deleteRecords(e);return Wi.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${BY}`),n}catch(n){if(n.message===Qi.SEARCH_NOT_FOUND_MESSAGE){let s=new UY;return s.message=Qi.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(yN,"deleteRecord")});var z_=g((cle,CN)=>{var qY=require("crypto"),IN=9;function FY(e){let t=VY(IN),r=wN(e+t);return t+r}a(FY,"createHash");function kY(e,t){let r=e?.substr(0,IN),n=r+wN(t+r);return e===n}a(kY,"validateHash");function VY(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(VY,"generateSalt");function wN(e){return qY.createHash("md5").update(e).digest("hex")}a(wN,"md5");CN.exports={hash:FY,validate:kY}});var LN=g((lle,DN)=>{var sp=je(),Zt={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 $Y(e){return Zt.password.presence=!0,Zt.username.presence=!0,Zt.role.presence=!0,Zt.active.presence=!0,sp.validateObject(e,Zt)}a($Y,"addUserValidation");function YY(e){return Zt.password.presence=!1,Zt.username.presence=!0,Zt.role.presence=!1,Zt.active.presence=!1,sp.validateObject(e,Zt)}a(YY,"alterUserValidation");function KY(e){return Zt.password.presence=!1,Zt.username.presence=!0,Zt.role.presence=!1,Zt.active.presence=!1,sp.validateObject(e,Zt)}a(KY,"dropUserValidation");DN.exports={addUserValidation:$Y,alterUserValidation:YY,dropUserValidation:KY}});var Ve=g((fle,PN)=>{"use strict";var{platform:dle}=require("os"),WY="nats-server.zip",ip="nats-server",QY=process.platform==="win32"?`${ip}.exe`:ip,zY=/^[^\s.,*>]+$/,MN="__request__",JY=a(e=>`${e}.${MN}`,"REQUEST_SUBJECT"),XY={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},jY={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},ZY={HUB:"hub.pid",LEAF:"leaf.pid"},eK={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},tK={SUCCESS:"success",ERROR:"error"},rK={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},nK={TXN:"txn",MSGID:"msgid"},Qo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},sK={[Qo.ERR]:1,[Qo.WRN]:2,[Qo.INF]:3,[Qo.DBG]:4,[Qo.TRC]:5},iK={debug:"-D",trace:"-DVV"};PN.exports={NATS_SERVER_ZIP:WY,NATS_SERVER_NAME:ip,NATS_BINARY_NAME:QY,PID_FILES:ZY,NATS_CONFIG_FILES:jY,SERVER_SUFFIX:eK,NATS_TERM_CONSTRAINTS_RX:zY,REQUEST_SUFFIX:MN,UPDATE_REMOTE_RESPONSE_STATUSES:tK,CLUSTER_STATUS_STATUSES:rK,REQUEST_SUBJECT:JY,SUBJECT_PREFIXES:nK,MSG_HEADERS:XY,LOG_LEVELS:Qo,LOG_LEVEL_FLAGS:iK,LOG_LEVEL_HIERARCHY:sK}});var vN=g((hle,UN)=>{"use strict";var oK={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
|
|
7
7
|
`),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
|
|
8
8
|
`)},aK="certificate.pem",cK="privateKey.pem",uK="ca.pem";UN.exports={CERTIFICATE_VALUES:oK,CERTIFICATE_PEM_NAME:aK,PRIVATEKEY_PEM_NAME:cK,CA_PEM_NAME:uK}});var op=g((ple,FN)=>{"use strict";var GN=require("fs-extra"),ae=require("joi"),lK=require("os"),{boolean:be,string:er,number:tt,array:J_}=ae.types(),{totalmem:BN}=require("os"),zi=require("path"),_K=$(),X_=z(),mle=vN(),xN=P(),dK=je(),HN="log",fK="components",EK="Invalid logging.rotation.maxSize unit. Available units are G, M or K",hK="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",mK="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",pK="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",SK="rootPath config parameter is undefined",TK="clustering.enabled config parameter is undefined",Ji=tt.min(0).required(),j_=J_.items({host:er.required(),port:Ji}).empty(null),Zn,qN=!1;FN.exports={configValidator:gK,routesValidator:NK,route_constraints:j_};function gK(e,t=!1){if(qN=t,Zn=e.rootPath,X_.isEmpty(Zn))throw SK;let r=be.required(),n=tt.min(0).max(1e3).empty(null).default(yK),s=er.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Wc),i=er.optional().empty(null),o=er.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ae.string().empty(null).default(Wc),u=ae.custom(AK).empty(null).default(Wc),_=e.clustering?.enabled;if(X_.isEmpty(_))throw TK;let l=ae.object({certificate:i,certificateAuthority:i,privateKey:i}),d;return _===!0?d=ae.object({enabled:r,hubServer:ae.object({cluster:ae.object({name:ae.required().empty(null),network:ae.object({port:Ji,routes:j_}).required()}).required(),leafNodes:ae.object({network:ae.object({port:Ji}).required()}).required(),network:ae.object({port:Ji}).required()}).required(),leafServer:ae.object({network:ae.object({port:Ji,routes:j_}).required(),streams:ae.object({maxAge:tt.min(120).allow(null).optional(),maxBytes:tt.min(1).allow(null).optional(),maxMsgs:tt.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ae.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:be.optional(),databaseLevel:be.optional(),tls:ae.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:be.required(),verify:be.optional()}),user:er.optional().empty(null)}).required():d=ae.object({enabled:r,tls:ae.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:be.required()})}).required(),ae.object({authentication:ae.object({authorizeLocal:be,cacheTTL:tt.required(),enableSessions:be}),analytics:ae.object({aggregatePeriod:tt}),componentsRoot:s.optional(),clustering:d,localStudio:ae.object({enabled:r}).required(),logging:ae.object({auditAuthEvents:ae.object({logFailed:be,logSuccessful:be}),file:be.required(),level:ae.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ae.object({enabled:be.optional(),compress:be.optional(),interval:er.custom(bK).optional().empty(null),maxSize:er.custom(OK).optional().empty(null),path:er.optional().empty(null).default(Wc)}).required(),root:s,stdStreams:be.required(),auditLog:be.required()}).required(),operationsApi:ae.object({network:ae.object({cors:be.optional(),corsAccessList:J_.optional(),headersTimeout:tt.min(1).optional(),keepAliveTimeout:tt.min(1).optional(),port:tt.optional().empty(null),domainSocket:ae.optional().empty("hdb/operations-server").default(Wc),securePort:tt.optional().empty(null),timeout:tt.min(1).optional()}).optional(),tls:ae.alternatives([ae.array().items(l),l])}).required(),rootPath:er.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ae.object({network:ae.object({port:Ji,securePort:Ji,mtls:ae.alternatives([be.optional(),ae.object({user:er.optional(),certificateAuthority:i,required:be.optional()})])}).required(),webSocket:be.optional(),requireAuthentication:be.optional()}),http:ae.object({compressionThreshold:tt.optional(),cors:be.optional(),corsAccessList:J_.optional(),headersTimeout:tt.min(1).optional(),port:tt.min(0).optional().empty(null),securePort:tt.min(0).optional().empty(null),maxHeaderSize:tt.optional(),mtls:ae.alternatives([be.optional(),ae.object({user:er.optional(),certificateAuthority:i,required:be.optional()})]),threadRange:ae.alternatives([J_.optional(),er.optional()])}).required(),threads:ae.alternatives(n.optional(),ae.object({count:n.optional(),debug:ae.alternatives(be.optional(),ae.object({startingPort:tt.min(1).optional(),host:er.optional(),waitForDebugger:be.optional()})),maxHeapMemory:tt.min(0).optional()})),storage:ae.object({writeAsync:be.required(),overlappingSync:be.optional(),caching:be.optional(),compression:ae.alternatives([be.optional(),ae.object({dictionary:er.optional(),threshold:tt.optional()})]),compactOnStart:be.optional(),compactOnStartKeepBackup:be.optional(),noReadAhead:be.optional(),path:u,prefetchWrites:be.optional(),maxFreeSpaceToLoad:tt.optional(),maxFreeSpaceToRetain:tt.optional()}).required(),ignoreScripts:be.optional(),tls:ae.alternatives([ae.array().items(l),l])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(gK,"configValidator");function RK(e){return qN||GN.existsSync(e)?null:`Specified path ${e} does not exist.`}a(RK,"doesPathExist");function AK(e,t){ae.assert(e,er.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=RK(e);if(r)return t.message(r)}a(AK,"validatePath");function OK(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(EK);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(mK):e}a(OK,"validateRotationMaxSize");function bK(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(hK);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(pK):e}a(bK,"validateRotationInterval");function yK(e,t){let r=t.state.path.join("."),n=lK.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||BN();return i=Math.round(Math.min(i,BN())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),_K.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(yK,"setDefaultThreads");function Wc(e,t){let r=t.state.path.join(".");if(!X_.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(X_.isEmpty(Zn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return zi.join(Zn,fK);case"logging.root":return zi.join(Zn,HN);case"clustering.leafServer.streams.path":return zi.join(Zn,"clustering","leaf");case"storage.path":let n=zi.join(Zn,xN.LEGACY_DATABASES_DIR_NAME);return GN.existsSync(n)?n:zi.join(Zn,xN.DATABASES_DIR_NAME);case"logging.rotation.path":return zi.join(Zn,HN);case"operationsApi.network.domainSocket":return r==null?null:zi.join(Zn,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Wc,"setDefaultRoot");function NK(e){let t=ae.object({routes:j_});return dK.validateBySchema({routes:e},t)}a(NK,"routesValidator")});var Er=g((gle,JN)=>{"use strict";var Vr=P(),Bt=z(),It=$(),{configValidator:IK,routesValidator:kN}=op(),fr=require("fs-extra"),wK=require("yaml"),Ln=require("path"),CK=require("is-number"),$N=require("properties-reader"),DK=require("lodash"),{handleHDBError:LK}=se(),{HTTP_STATUS_CODES:MK,HDB_ERROR_MSGS:Z_}=vr(),Tle=require("minimist"),{server:PK}=(lr(),ie(Gi)),{DATABASES_PARAM_CONFIG:Qc,CONFIG_PARAMS:kr,CONFIG_PARAM_MAP:Mn}=Vr,UK="Unable to get config value because config is uninitialized",vK="Config successfully initialized",BK="Error backing up config file",xK="Empty parameter sent to getConfigValue",YN=Ln.join(Vr.PACKAGE_ROOT,"config","yaml",Vr.HDB_DEFAULT_CONFIG_FILE),HK="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",VN={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"},ed,wt,td;JN.exports={createConfigFile:GK,getDefaultConfig:qK,getConfigValue:WN,initConfig:cp,flattenConfig:zo,updateConfigValue:QN,updateConfigObject:kK,getConfiguration:YK,setConfiguration:KK,readConfigFile:lp,getClusteringRoutes:WK,initOldConfig:zN,getConfigFromFile:QK,getConfigFilePath:Xi,addConfig:zK,deleteConfigFromFile:JK,getConfigObj:XK};function GK(e,t=!1){let r=ui(YN);ed=zo(r.toJSON());let n;for(let c in e){let u=Mn[c.toLowerCase()];if(u===kr.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(_=>({[_]:e[c][_]}));continue}if(!u&&(c.endsWith("_package")||c.endsWith("_port"))&&(u=c),u!==void 0){let _=u.split("_"),l=ap(u,e[c]);u==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{r.setIn([..._],l)}catch(d){It.error(d)}}}n&&KN(r,n),up(r,t);let s=r.toJSON();wt=zo(s);let i=r.getIn(["rootPath"]),o=Ln.join(i,Vr.HDB_CONFIG_FILE);fr.createFileSync(o),fr.writeFileSync(o,String(r)),It.trace(`Config file written to ${o}`)}a(GK,"createConfigFile");function KN(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Bt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Qc.TABLES))for(let i in n[s][Qc.TABLES])for(let o in n[s][Qc.TABLES][i]){let c=n[s][Qc.TABLES][i][o],u=[kr.DATABASES,s,Qc.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in n[s]){let o=n[s][i],c=[kr.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){It.error("Error parsing schemas CLI/env config arguments",n)}}a(KN,"setSchemasConfig");function qK(e){if(ed===void 0){let r=ui(YN);ed=zo(r.toJSON())}let t=Mn[e.toLowerCase()];if(t!==void 0)return ed[t.toLowerCase()]}a(qK,"getDefaultConfig");function WN(e){if(e==null){It.error(xK);return}if(wt===void 0){It.trace(UK);return}let t=Mn[e.toLowerCase()];if(t!==void 0)return wt[t.toLowerCase()]}a(WN,"getConfigValue");function Xi(e=Bt.getPropsFilePath()){let t=Bt.getEnvCliRootPath();return t?Ln.join(t,Vr.HDB_CONFIG_FILE):$N(e).get(Vr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Xi,"getConfigFilePath");function cp(e=!1){if(wt===void 0||e){let t;if(!Bt.noBootFile()){t=Bt.getPropsFilePath();try{fr.accessSync(t,fr.constants.F_OK|fr.constants.R_OK)}catch(i){throw It.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Xi(t),n;if(r.includes("config/settings.js"))try{zN(r);return}catch(i){if(i.code!==Vr.NODE_ERROR_CODES.ENOENT)throw i}try{n=ui(r)}catch(i){if(i.code===Vr.NODE_ERROR_CODES.ENOENT){It.trace(`HarperDB config file not found at ${r}.
|
|
9
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw It.error(i),new Error(`Error reading HarperDB config file at ${r}`)}FK(n,r),up(n);let s=n.toJSON();if(PK.config=s,wt=zo(s),wt.logging_rotation_rotate)for(let i in VN)wt[i]&&It.error(`Config ${VN[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);It.trace(vK)}}a(cp,"initConfig");function FK(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Ln.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Ln.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Ln.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&&(It.trace("Updating config file with missing config params"),fr.writeFileSync(t,String(e)))}a(FK,"checkForUpdatedConfig");function up(e,t=!1){let r=e.toJSON();r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads);let n=IK(r,t);if(n.error)throw Z_.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(up,"validateConfig");function kK(e,t){wt===void 0&&(wt={});let r=Mn[e.toLowerCase()];if(r===void 0){It.trace(`Unable to update config object because config param '${e}' does not exist`);return}wt[r.toLowerCase()]=t}a(kK,"updateConfigObject");function QN(e,t,r=void 0,n=!1,s=!1,i=!1){wt===void 0&&cp();let o=WN(Mn.hdb_root),c=Ln.join(o,Vr.HDB_CONFIG_FILE),u=ui(c),_;if(r===void 0&&e.toLowerCase()===kr.DATABASES)_=t;else if(r===void 0){let E;if(i)E=e;else if(E=Mn[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=ap(E,t);u.setIn([...f],h)}else for(let E in r){let f=Mn[E.toLowerCase()];if(f===kr.HTTP_SECUREPORT&&r[E]===wt[kr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),f===kr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===wt[kr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),f===kr.DATABASES){_=r[E];continue}if(f?.startsWith("threads_")){let h=u.getIn(["threads"]);h>=0&&(u.deleteIn(["threads"]),u.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),p=Vr.LEGACY_CONFIG_PARAMS[E.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(f=p,h=p.split("_"));let S=ap(f,r[E]);f==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof u.getIn(h.slice(0,-1))=="boolean"&&u.deleteIn(h.slice(0,-1)),u.setIn([...h],S)}catch(T){It.error(T)}}}_&&KN(u,_),up(u);let l=u.getIn(["rootPath"]),d=Ln.join(l,Vr.HDB_CONFIG_FILE);n===!0&&VK(c,l),fr.writeFileSync(d,String(u)),s&&(wt=zo(u.toJSON())),It.trace(`Config parameter: ${e} updated with value: ${t}`)}a(QN,"updateConfigValue");function VK(e,t){try{let r=Ln.join(t,"backup",`${Vr.HDB_CONFIG_FILE}.bak`);fr.copySync(e,r),It.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){It.error(BK),It.error(r)}}a(VK,"backupConfigFile");var $K=["databases"];function zo(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)),td=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])&&!$K.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!kr[u.toUpperCase()]&&Mn[u]&&(s[Mn[u].toLowerCase()]=o[c]),s[u]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(zo,"flattenConfig");function ap(e,t){if(e===kr.CLUSTERING_NODENAME||e===kr.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(CK(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Bt.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 Bt.autoCast(t)}a(ap,"castConfigValue");function YK(){let e=Bt.getPropsFilePath(),t=Xi(e);return ui(t).toJSON()}a(YK,"getConfiguration");async function KK(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return QN(void 0,void 0,s,!0),HK}catch(i){throw typeof i=="string"||i instanceof String?LK(i,i,MK.BAD_REQUEST,void 0,void 0,!0):i}}a(KK,"setConfiguration");function lp(){let e=Bt.getPropsFilePath();try{fr.accessSync(e,fr.constants.F_OK|fr.constants.R_OK)}catch(n){if(!Bt.noBootFile())throw It.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Xi(e);return ui(t).toJSON()}a(lp,"readConfigFile");function ui(e){return wK.parseDocument(fr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ui,"parseYamlDoc");function WK(){let e=lp(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Bt.isEmptyOrZeroLength(t)?[]:t;let r=kN(t);if(r)throw Z_.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Bt.isEmptyOrZeroLength(n)?[]:n;let s=kN(n);if(s)throw Z_.CONFIG_VALIDATION(s.message);if(!Bt.isEmptyOrZeroLength(n)&&!Bt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Bt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Z_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(WK,"getClusteringRoutes");function zN(e){let t=$N(e);wt={};for(let r in Mn){let n=t.get(r.toUpperCase());if(Bt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Mn[r].toLowerCase();s===kr.LOGGING_ROOT?wt[s]=Ln.dirname(n):wt[s]=n}return wt}a(zN,"initOldConfig");function QK(e){let t=lp();return DK.get(t,e.replaceAll("_","."))}a(QK,"getConfigFromFile");async function zK(e,t){let r=ui(Xi());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await fr.writeFile(Xi(),String(r))}a(zK,"addConfig");function JK(e){let t=Xi(Bt.getPropsFilePath()),r=ui(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Ln.join(n,Vr.HDB_CONFIG_FILE);fr.writeFileSync(s,String(r))}a(JK,"deleteConfigFromFile");function XK(){return td||(cp(),td)}a(XK,"getConfigObj")});var jN=g((Ale,XN)=>{"use strict";var rd=P(),nd=class{static{a(this,"BaseLicense")}constructor(t=0,r=rd.RAM_ALLOCATION_ENUM.DEFAULT,n=rd.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},_p=class extends nd{static{a(this,"ExtendedLicense")}constructor(t=0,r=rd.RAM_ALLOCATION_ENUM.DEFAULT,n=rd.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};XN.exports={BaseLicense:nd,ExtendedLicense:_p}});var ji=g((ble,sI)=>{"use strict";var Xo=require("fs-extra"),eI=z_(),tI=require("crypto"),jK=require("moment"),ZK=require("uuid").v4,tr=$(),fp=require("path"),eW=z(),li=P(),{totalmem:ZN}=require("os"),tW=jN().ExtendedLicense,Jo="invalid license key format",rW="061183",nW="mofi25",sW="aes-256-cbc",iW=16,oW=32,rI=ee();rI.initSync();var dp;sI.exports={validateLicense:nI,generateFingerPrint:cW,licenseSearch:mp,getLicense:_W,checkMemoryLimit:dW};function Ep(){return fp.join(rI.getHdbBasePath(),li.LICENSE_KEY_DIR_NAME,li.LICENSE_FILE_NAME)}a(Ep,"getLicenseDirPath");function aW(){let e=Ep();return fp.join(e,li.LICENSE_FILE_NAME)}a(aW,"getLicenseFilePath");function hp(){let e=Ep();return fp.join(e,li.REG_KEY_FILE_NAME)}a(hp,"getFingerPrintFilePath");async function cW(){let e=hp();try{return await Xo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await uW();throw tr.error(`Error writing fingerprint file to ${e}`),tr.error(t),new Error("There was an error generating the fingerprint")}}a(cW,"generateFingerPrint");async function uW(){let e=ZK(),t=eI.hash(e),r=hp();try{await Xo.mkdirp(Ep()),await Xo.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw tr.error(`Error writing fingerprint file to ${r}`),tr.error(n),new Error("There was an error generating the fingerprint")}return t}a(uW,"writeFingerprint");function nI(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:li.RAM_ALLOCATION_ENUM.DEFAULT,version:li.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return tr.error("empty license key passed to validate."),r;let n=hp(),s=!1;try{s=Xo.statSync(n)}catch(i){tr.error(i)}if(s){let i;try{i=Xo.readFileSync(n,"utf8")}catch{tr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(nW),c=o[1];c=Buffer.concat([Buffer.from(c)],iW);let u=Buffer.concat([Buffer.from(i)],oW),_=tI.createDecipheriv(sW,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let f=lW(o[0],i);if(f)l=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Jo),tr.error(Jo),new Error(Jo)}let d;if(isNaN(l))try{d=JSON.parse(l),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(Jo),tr.error(Jo),new Error(Jo)}else r.exp_date=l;r.exp_date<jK().valueOf()&&(r.valid_date=!1),eI.validate(o[1],`${rW}${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||tr.error("Invalid licence"),r}a(nI,"validateLicense");function lW(e,t){try{let r=tI.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{tr.warn("Check old license failed")}}a(lW,"checkOldLicense");function mp(){let e=new tW,t=[];try{t=Xo.readFileSync(aW(),"utf-8").split(li.NEW_LINE)}catch(r){r.code==="ENOENT"?tr.info("no license file found"):tr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(eW.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=nI(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){tr.error("There was an error parsing the license string."),tr.error(s),e.ram_allocation=li.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return dp=e,e}a(mp,"licenseSearch");async function _W(){return dp||await mp(),dp}a(_W,"getLicense");function dW(){let e=mp().ram_allocation,t=process.constrainedMemory?.()||ZN();if(t=Math.round(Math.min(t,ZN())/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(dW,"checkMemoryLimit")});var _n=g((Cle,gI)=>{"use strict";var cI="username is required",uI="nothing to update, must supply active, role or password to update",lI="password cannot be an empty string",_I="If role is specified, it cannot be empty.",dI="active must be true or false";gI.exports={addUser:RW,alterUser:AW,dropUser:bW,getSuperUser:wW,userInfo:yW,listUsers:id,listUsersExternal:NW,setUsersToGlobal:Zo,findAndValidateUser:SI,getClusterUser:CW,USERNAME_REQUIRED:cI,ALTERUSER_NOTHING_TO_UPDATE:uI,EMPTY_PASSWORD:lI,EMPTY_ROLE:_I,ACTIVE_BOOLEAN:dI};var fI=Fr(),fW=ci(),Tp=z_(),EI=LN(),hI=qr(),gp=Ns(),$r=z(),mI=require("validate.js"),Oe=$(),{promisify:EW}=require("util"),Rp=Os(),iI=P(),oI=Ve(),hW=Er(),Nle=ee(),Ile=ji(),mW=Vi(),{table:wle}=(Ae(),ie(ke)),{handleHDBError:es,hdb_errors:pW}=se(),{HTTP_STATUS_CODES:ts,AUTHENTICATION_ERROR_MSGS:pp,HDB_ERROR_MSGS:jo}=pW,{UserEventMsg:Ap}=Pn(),Sp=require("lodash"),{server:Op}=(lr(),ie(Gi)),SW=$();Op.getUser=(e,t)=>SI(e,t,t!=null);var pI={username:!0,active:!0,role:!0,password:!0},aI=new Map,sd=hI.searchByValue,TW=hI.searchByHash,gW=EW(fW.delete);async function RW(e){let t=mI.cleanAttributes(e,pI),r=EI.addUserValidation(t);if(r)throw es(new Error,r.message,ts.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 sd(n),s=s&&Array.from(s)}catch(u){throw Oe.error("There was an error searching for a role in add user"),Oe.error(u),u}if(!s||s.length<1)throw es(new Error,jo.ROLE_NAME_NOT_FOUND(t.role),ts.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw es(new Error,jo.DUP_ROLES_FOUND(t.role),ts.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=Rp.encrypt(t.password)),t.password=Tp.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await fI.insert(i)}catch(u){throw Oe.error("There was an error searching for a user."),Oe.error(u),u}Oe.debug(o);try{await Zo()}catch(u){throw Oe.error("Got an error setting users to global"),Oe.error(u),u}if(o.skipped_hashes.length===1)throw es(new Error,jo.USER_ALREADY_EXISTS(t.username),ts.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],gp.signalUserChange(new Ap(process.pid)),`${c.username} successfully added`}a(RW,"addUser");async function AW(e){let t=mI.cleanAttributes(e,pI);if($r.isEmptyOrZeroLength(t.username))throw new Error(cI);if($r.isEmptyOrZeroLength(t.password)&&$r.isEmptyOrZeroLength(t.role)&&$r.isEmptyOrZeroLength(t.active))throw new Error(uI);if(!$r.isEmpty(t.password)&&$r.isEmptyOrZeroLength(t.password.trim()))throw new Error(lI);if(!$r.isEmpty(t.active)&&!$r.isBoolean(t.active))throw new Error(dI);let r=OW(t.username);if(!$r.isEmpty(t.password)&&!$r.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Rp.encrypt(t.password)),t.password=Tp.hash(t.password)),t.role==="")throw new Error(_I);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 sd(i)||[])}catch(c){throw Oe.error("Got an error searching for a role."),Oe.error(c),c}if(!o||o.length===0){let c=jo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Oe.error(c),es(new Error,c,ts.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=jo.ALTER_USER_DUP_ROLES(t.role);throw Oe.error(c),es(new Error,c,ts.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 fI.update(n)}catch(i){throw Oe.error("Error during update."),Oe.error(i),i}try{await Zo()}catch(i){throw Oe.error("Got an error setting users to global"),Oe.error(i),i}return gp.signalUserChange(new Ap(process.pid)),s}a(AW,"alterUser");function OW(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(OW,"isClusterUser");async function bW(e){try{let t=EI.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if($r.isEmpty(global.hdb_users.get(e.username)))throw es(new Error,jo.USER_NOT_EXIST(e.username),ts.NOT_FOUND,void 0,void 0,!0);let n;try{n=await gW(r)}catch(s){throw Oe.error("Got an error deleting a user."),Oe.error(s),s}Oe.debug(n);try{await Zo()}catch(s){throw Oe.error("Got an error setting users to global."),Oe.error(s),s}return gp.signalUserChange(new Ap(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(bW,"dropUser");async function yW(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Sp.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await TW(r)}catch(s){throw Oe.error("Got an error searching for a role."),Oe.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Oe.error(r),r}return t}a(yW,"userInfo");async function NW(){let e;try{e=await id()}catch(t){throw Oe.error("Got an error listing users."),Oe.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(NW,"listUsersExternal");async function id(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await sd(e)}catch(o){throw Oe.error("Got an error searching for roles."),Oe.error(o),o}let r={};for(let o of t)r[o.id]=Sp.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 sd(n)}catch(o){throw Oe.error("Got an error searching for users."),Oe.error(o),o}let i=new Map;for(let o of s)o=Sp.cloneDeep(o),o.role=r[o.role],IW(o.role),i.set(o.username,o);return i}catch(e){throw Oe.error("got an error listing users"),Oe.error(e),$r.errorizeMessage(e)}return null}a(id,"listUsers");function IW(e){try{if(!e){Oe.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(mW)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Oe.error("Got an error trying to set system permissions."),Oe.error(t)}}a(IW,"appendSystemTablesToRole");async function Zo(){try{let e=await id();global.hdb_users=e}catch(e){throw Oe.error(e),e}}a(Zo,"setUsersToGlobal");async function SI(e,t,r=!0){global.hdb_users||await Zo();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw es(new Error,pp.GENERIC_AUTH_FAIL,ts.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw es(new Error,pp.USER_INACTIVE,ts.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(aI.get(t)===n.password)return s;if(Tp.validate(n.password,t))aI.set(t,n.password);else throw es(new Error,pp.GENERIC_AUTH_FAIL,ts.UNAUTHORIZED,void 0,void 0,!0)}return s}a(SI,"findAndValidateUser");async function wW(){global.hdb_users||await Zo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(wW,"getSuperUser");async function CW(){let e=await id(),t=hW.getConfigFromFile(iI.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!$r.isEmpty(r)&&r?.role?.role===iI.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Rp.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+oI.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+oI.SERVER_SUFFIX.ADMIN,r}a(CW,"getClusterUser");var TI=[];Op.invalidateUser=function(e){for(let t of TI)try{t(e)}catch(r){SW.error("Error invalidating user",r)}};Op.onInvalidatedUser=function(e){TI.push(e)}});var Jc=g((Ple,bI)=>{"use strict";var Zi=$(),Yr=P(),DW=jy(),Lle=ys(),Mle=bs(),LW=_n(),{validateEvent:RI}=Pn(),zc=Dn(),MW=require("process"),{resetDatabases:PW}=(Ae(),ie(ke)),UW={[Yr.ITC_EVENT_TYPES.SCHEMA]:vW,[Yr.ITC_EVENT_TYPES.USER]:OI};async function vW(e){let t=RI(e);if(t){Zi.error(t);return}Zi.trace("ITC schemaHandler received schema event:",e),await DW(e.message),await BW(e.message)}a(vW,"schemaHandler");async function BW(e){try{zc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),zc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),zc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=PW();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Zi.error(t)}}a(BW,"syncSchemaMetadata");var AI=[];async function OI(e){try{try{zc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),zc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Zi.warn(r)}let t=RI(e);if(t){Zi.error(t);return}Zi.trace(`ITC userHandler ${Yr.HDB_ITC_CLIENT_PREFIX}${MW.pid} received user event:`,e),await LW.setUsersToGlobal();for(let r of AI)r()}catch(t){Zi.error(t)}}a(OI,"userHandler");OI.addListener=function(e){AI.push(e)};bI.exports=UW});var Pn=g((Gle,NI)=>{"use strict";var vle=$(),bp=z(),xW=P(),{ITC_ERRORS:Xc}=vr(),{parentPort:Ble,threadId:HW,isMainThread:GW,workerData:xle}=require("worker_threads"),{onMessageFromWorkers:qW,broadcast:Hle,broadcastWithAcknowledgement:FW}=Qe();NI.exports={sendItcEvent:kW,validateEvent:yI,SchemaEventMsg:VW,UserEventMsg:$W};var od;qW(async(e,t)=>{od=od||Jc(),yI(e),od[e.type]&&await od[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function kW(e){return!GW&&e.message&&(e.message.originator=HW),FW(e)}a(kW,"sendItcEvent");function yI(e){if(typeof e!="object")return Xc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||bp.isEmpty(e.type))return Xc.MISSING_TYPE;if(!e.hasOwnProperty("message")||bp.isEmpty(e.message))return Xc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||bp.isEmpty(e.message.originator))return Xc.MISSING_ORIGIN;if(xW.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Xc.INVALID_EVENT(e.type)}a(yI,"validateEvent");function VW(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(VW,"SchemaEventMsg");function $W(e){this.originator=e}a($W,"UserEventMsg")});var Ns=g((kle,DI)=>{"use strict";var II=P(),Fle=z(),ad=$(),wI=zy(),ea,{sendItcEvent:CI}=Pn();function YW(e){try{ad.trace("signalSchemaChange called with message:",e),ea=ea||Jc();let t=new wI(II.ITC_EVENT_TYPES.SCHEMA,e);return ea.schema(t),CI(t)}catch(t){ad.error(t)}}a(YW,"signalSchemaChange");function KW(e){try{ad.trace("signalUserChange called with message:",e),ea=ea||Jc();let t=new wI(II.ITC_EVENT_TYPES.USER,e);return ea.user(t),CI(t)}catch(t){ad.error(t)}}a(KW,"signalUserChange");DI.exports={signalSchemaChange:YW,signalUserChange:KW}});var cd=g(($le,MI)=>{"use strict";var LI=z(),WW=P(),QW=$(),zW=q_(),JW=G_(),XW=Ns(),{SchemaEventMsg:jW}=Pn(),ZW="already exists in";MI.exports=eQ;async function eQ(e,t,r){if(LI.isEmptyOrZeroLength(r))return r;let n=[];LI.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 tQ(e,t.schema,t.name,i)})),s}a(eQ,"lmdbCheckForNewAttributes");async function tQ(e,t,r,n){let s=new JW(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await rQ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(ZW))QW.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(tQ,"createNewAttribute");async function rQ(e){let t;return t=await zW(e),XW.signalSchemaChange(new jW(process.pid,WW.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(rQ,"createAttribute")});var ta=g((Kle,PI)=>{"use strict";var yp=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}};PI.exports=yp});var vI=g((Qle,UI)=>{"use strict";var nQ=ta(),sQ=P().OPERATIONS_ENUM,Np=class extends nQ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(sQ.INSERT,r,n,s,i),this.records=t}};UI.exports=Np});var xI=g((Jle,BI)=>{"use strict";var iQ=ta(),oQ=P().OPERATIONS_ENUM,Ip=class extends iQ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(oQ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};BI.exports=Ip});var GI=g((jle,HI)=>{"use strict";var aQ=ta(),cQ=P().OPERATIONS_ENUM,wp=class extends aQ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(cQ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};HI.exports=wp});var FI=g((e_e,qI)=>{"use strict";var uQ=ta(),lQ=P().OPERATIONS_ENUM,Cp=class extends uQ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(lQ.DELETE,n,s,t,i),this.original_records=r}};qI.exports=Cp});var jc=g((n_e,YI)=>{"use strict";var r_e=require("path"),kI=ze(),_Q=vI(),dQ=xI(),fQ=GI(),EQ=FI(),ra=ft(),VI=z(),{CONFIG_PARAMS:hQ}=P(),$I=ee();$I.initSync();var ud=P().OPERATIONS_ENUM,{getTransactionAuditStorePath:mQ}=Xe();YI.exports=pQ;async function pQ(e,t){if($I.get(hQ.LOGGING_AUDITLOG)===!1)return;let r=mQ(e.schema,e.table),n=await kI.openEnvironment(r,e.table,!0),s=SQ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){kI.initializeDBIs(n,ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ra.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),VI.isEmpty(s.user_name)||n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(pQ,"writeTransaction");function SQ(e,t){let r=VI.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===ud.INSERT)return new _Q(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ud.UPDATE)return new dQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ud.UPSERT)return new fQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ud.DELETE)return new EQ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(SQ,"createTransactionObject")});var Dp=g((o_e,KI)=>{"use strict";var TQ=$c(),i_e=Ic(),Zc=P(),gQ=wc(),RQ=Ko().insertRecords,AQ=ze(),OQ=$(),bQ=cd(),{getSchemaPath:yQ}=Xe(),NQ=jc();KI.exports=IQ;async function IQ(e){try{let{schema_table:t,attributes:r}=TQ(e);gQ(e,r,t.hash_attribute),e.schema!==Zc.SYSTEM_SCHEMA_NAME&&(r.includes(Zc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Zc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Zc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Zc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await bQ(e.hdb_auth_header,t,r),s=yQ(e.schema,e.table),i=await AQ.openEnvironment(s,e.table),o=await RQ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await NQ(e,o)}catch(c){OQ.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(IQ,"lmdbCreateRecords")});var zI=g((c_e,QI)=>{"use strict";var WI=P(),wQ=Dp(),CQ=Ic(),DQ=require("fs-extra"),{getSchemaPath:LQ}=Xe();QI.exports=MQ;async function MQ(e){let t=[{name:e.schema,createddate:Date.now()}],r=new CQ(WI.SYSTEM_SCHEMA_NAME,WI.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await wQ(r),await DQ.mkdirp(LQ(e.schema))}a(MQ,"lmdbCreateSchema")});var XI=g((l_e,JI)=>{"use strict";var Lp=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}};JI.exports=Lp});var tw=g((h_e,ew)=>{"use strict";var jI=ze(),Mp=Br(),Pp=vr().LMDB_ERRORS_ENUM,PQ=ft(),ZI=$(),d_e=z(),UQ=require("lmdb"),vQ=XI(),BQ=P(),{OVERFLOW_MARKER:f_e,MAX_SEARCH_KEY_LENGTH:E_e}=PQ,xQ=BQ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function HQ(e,t,r,n){if(Mp.validateEnv(e),t===void 0)throw new Error(Pp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Pp.IDS_REQUIRED):new Error(Pp.IDS_MUST_BE_ITERABLE);try{let s=jI.listDBIs(e);jI.initializeDBIs(e,t,s);let i=new vQ,o,c=[],u=[];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[xQ]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,UQ.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let T=s[S];if(!h.hasOwnProperty(T)||T===t)continue;let A=e.dbis[T],b=h[T];if(b!=null)try{let I=Mp.getIndexedValues(b);if(I)for(let B=0,U=I.length;B<U;B++)A.remove(I[B],o)}catch{ZI.warn(`cannot delete from attribute: ${T}, ${b}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){ZI.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let E=0,f=l.length;E<f;E++)l[E]===!0?i.deleted.push(u[E]):(i.skipped.push(u[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=Mp.getNextMonotonicTime(),i}catch(s){throw s}}a(HQ,"deleteRecords");ew.exports={deleteRecords:HQ}});var eu=g((p_e,nw)=>{"use strict";var na=z(),GQ=tw(),qQ=ze(),{getSchemaPath:FQ}=Xe(),kQ=jc(),VQ=$();nw.exports=$Q;async function $Q(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(na.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(na.isEmptyOrZeroLength(e.hash_values)&&!na.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][n];na.isEmpty(u)||e.hash_values.push(u)}}if(na.isEmptyOrZeroLength(e.hash_values))return rw([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(na.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=FQ(e.schema,e.table),i=await qQ.openEnvironment(s,e.table),o=await GQ.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await kQ(e,o)}catch(c){VQ.error(`unable to write transaction due to ${c.message}`)}return rw(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a($Q,"lmdbDeleteRecords");function rw(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(rw,"createDeleteResponse")});var vp=g((g_e,sw)=>{"use strict";var YQ=P(),T_e=Br();function Up(e,t){let r=Object.create(null);if(t.length===1&&YQ.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(Up,"parseRow");function KQ(e,t,r,n){let s=Up(r,e);n.push(s)}a(KQ,"searchAll");function WQ(e,t,r,n){let s=Up(r,e);n[t]=s}a(WQ,"searchAllToMap");function QQ(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(QQ,"iterateDBI");function eo(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(eo,"pushResults");function zQ(e,t,r,n,s,i){t.toString().endsWith(e)&&eo(t,r,n,s,i)}a(zQ,"endsWith");function JQ(e,t,r,n,s,i){t.toString().includes(e)&&eo(t,r,n,s,i)}a(JQ,"contains");function XQ(e,t,r,n,s,i){t>e&&eo(t,r,n,s,i)}a(XQ,"greaterThanCompare");function jQ(e,t,r,n,s,i){t>=e&&eo(t,r,n,s,i)}a(jQ,"greaterThanEqualCompare");function ZQ(e,t,r,n,s,i){t<e&&eo(t,r,n,s,i)}a(ZQ,"lessThanCompare");function ez(e,t,r,n,s,i){t<=e&&eo(t,r,n,s,i)}a(ez,"lessThanEqualCompare");sw.exports={parseRow:Up,searchAll:KQ,searchAllToMap:WQ,iterateDBI:QQ,endsWith:zQ,contains:JQ,greaterThanCompare:XQ,greaterThanEqualCompare:jQ,lessThanCompare:ZQ,lessThanEqualCompare:ez,pushResults:eo}});var sa=g((y_e,_w)=>{"use strict";var _i=ze(),A_e=$(),Kr=Br(),ld=ft(),ht=vr().LMDB_ERRORS_ENUM,O_e=z(),tz=P(),_d=vp(),{parseRow:rz}=_d,b_e=require("lmdb"),{OVERFLOW_MARKER:iw,MAX_SEARCH_KEY_LENGTH:nz}=ld;function ow(e,t,r,n=!1,s=void 0,i=void 0){return to(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(ow,"iterateFullIndex");function tu(e,t,r,n,s,i=!1,o=void 0,c=void 0,u=!1,_=!1){return to(e,t,r,(l,d,E,f)=>{let A={transaction:l,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return f===r?(A.values=!1,d.getRange(A).map(b=>({value:b}))):d.getRange(A)})}a(tu,"iterateRangeBetween");function to(e,t,r,n){let s=e.database||e,i=_i.openDBI(s,r);i[ld.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&_i.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(to,"setupTransaction");function aw(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(iw)){if(!s)if(r)s=_i.openDBI(e,r);else{let u=_i.listDBIs(e);for(let _=0,l=u.length;_<l&&(s=_i.openDBI(e,u[_]),!s[ld.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(aw,"getOverflowCheck");function sz(e,t,r,n=!1,s=void 0,i=void 0){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return to(e,t,t,(o,c,u)=>(dd(r),r=ru(u,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>rz(_.value,r))))}a(sz,"searchAll");function iz(e,t,r,n=!1,s=void 0,i=void 0){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);dd(r),r=ru(e.database||e,r);let o=new Map;for(let{key:c,value:u}of ow(e,t,t,n,s,i))o.set(c,_d.parseRow(u,r));return o}a(iz,"searchAllToMap");function oz(e,t,r=!1,n=void 0,s=void 0){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=ow(e,void 0,t,r,n,s),c=o.transaction,u=aw(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(oz,"iterateDBI");function az(e,t){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return _i.statDBI(e,t).entryCount}a(az,"countAll");function cz(e,t,r,n,s=!1,i=void 0,o=void 0){return di(e,r,n),to(e,t,r,(c,u,_,l)=>(n=Kr.convertKeyValueToWrite(n),l===r?u.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:u.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(cz,"equals");function uz(e,t,r){return di(e,t,r),_i.openDBI(e,t).getValuesCount(r)}a(uz,"count");function lz(e,t,r,n,s=!1,i=void 0,o=void 0){return di(e,r,n),to(e,null,r,(c,u)=>{n=Kr.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let l;if(s===!0){let d;for(let E of u.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){d=E;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.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 l.DONE}}),l.filter(E=>E)}else return l=u.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(lz,"startsWith");function _z(e,t,r,n,s=!1,i=void 0,o=void 0){return cw(e,t,r,n,s,i,o,!0)}a(_z,"endsWith");function cw(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return di(e,r,n),to(e,null,r,(u,_,l,d)=>{let E=aw(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(iw)?_.getValues(f,{transaction:u}).map(p=>{let S=E(f,p);if(c?S.endsWith(n):S.includes(n))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(n):h.includes(n))?_[ld.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:_.getValues(f,{transaction:u}).map(p=>({key:f,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(cw,"contains");function dz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),tu(e,t,r,n,u,s,i,o,!0,!1)}a(dz,"greaterThan");function fz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),tu(e,t,r,n,u,s,i,o,!1,!1)}a(fz,"greaterThanEqual");function Ez(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),tu(e,t,r,u,n,s,i,o,!1,!0)}a(Ez,"lessThan");function hz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),tu(e,t,r,u,n,s,i,o,!1,!1)}a(hz,"lessThanEqual");function mz(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Kr.validateEnv(e),r===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(ht.START_VALUE_REQUIRED);if(s===void 0)throw new Error(ht.END_VALUE_REQUIRED);if(n=Kr.convertKeyValueToWrite(n),s=Kr.convertKeyValueToWrite(s),n>s)throw new Error(ht.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return tu(e,t,r,n,s,i,o,c)}a(mz,"between");function pz(e,t,r,n){Kr.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(dd(r),r=ru(s,r),n===void 0)throw new Error(ht.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=_d.parseRow(c,r)),o}a(pz,"searchByHash");function Sz(e,t,r){Kr.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(Sz,"checkHashExists");function Tz(e,t,r,n,s=[]){return lw(e,t,r,n,s),uw(e,t,r,n,s).map(i=>i[1])}a(Tz,"batchSearchByHash");function gz(e,t,r,n,s=[]){lw(e,t,r,n,s);let i=new Map;for(let[o,c]of uw(e,t,r,n,s))i.set(o,c);return i}a(gz,"batchSearchByHashToMap");function uw(e,t,r,n,s=[]){return to(e,t,t,(i,o,c)=>{r=ru(c,r);let u=r.length<3;return n.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,_d.parseRow(l,r)];s.push(_)}).filter(_=>_)})}a(uw,"batchHashSearch");function lw(e,t,r,n,s){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(dd(r),n==null)throw new Error(ht.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(ht.IDS_MUST_BE_ITERABLE)}a(lw,"initializeBatchSearchByHash");function dd(e){if(!Array.isArray(e))throw e===void 0?new Error(ht.FETCH_ATTRIBUTES_REQUIRED):new Error(ht.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(dd,"validateFetchAttributes");function di(e,t,r){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.SEARCH_VALUE_REQUIRED);if(r?.length>nz)throw new Error(ht.SEARCH_VALUE_TOO_LARGE)}a(di,"validateComparisonFunctions");function ru(e,t){return t.length===1&&tz.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=_i.listDBIs(e)),t}a(ru,"setGetWholeRowAttributes");_w.exports={searchAll:sz,searchAllToMap:iz,count:uz,countAll:az,equals:cz,startsWith:lz,endsWith:_z,contains:cw,searchByHash:pz,setGetWholeRowAttributes:ru,batchSearchByHash:Tz,batchSearchByHashToMap:gz,checkHashExists:Sz,iterateDBI:oz,greaterThan:dz,greaterThanEqual:fz,lessThan:Ez,lessThanEqual:hz,between:mz}});var ia=g((I_e,mw)=>{var dw=require("lodash"),fw=je(),he=require("joi"),Rz=z(),{hdb_schema_table:nu,checkValidTable:Ew,hdb_table:hw,hdb_database:fd}=Xn(),{handleHDBError:Az,hdb_errors:Oz}=se(),{getDatabases:bz}=(Ae(),ie(ke)),{HTTP_STATUS_CODES:yz}=Oz,Nz=he.object({database:fd,schema:fd,table:hw,search_attribute:nu,search_value:he.any().required(),get_attributes:he.array().min(1).items(he.alternatives(nu,he.object())).optional(),desc:he.bool(),limit:he.number().integer().min(1),offset:he.number().integer().min(0)}),Iz=he.object({database:fd,schema:fd,table:hw,operator:he.string().valid("and","or").default("and").lowercase(),offset:he.number().integer().min(0),limit:he.number().integer().min(1),get_attributes:he.array().min(1).items(he.alternatives(nu,he.object())).optional(),sort:he.object({attribute:he.alternatives(nu,he.array().min(1)),descending:he.bool().optional()}).optional(),conditions:he.array().min(1).items(he.alternatives(he.object({operator:he.string().valid("and","or").default("and").lowercase(),conditions:he.array()}),he.object({search_attribute:he.alternatives(nu,he.array().min(1)),search_type:he.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:he.when("search_type",{switch:[{is:"equals",then:he.any()},{is:"between",then:he.array().items(he.alternatives([he.string(),he.number()])).length(2)}],otherwise:he.alternatives(he.string(),he.number())}).required()}))).required()});mw.exports=function(e,t){let r=null;switch(t){case"value":r=fw.validateBySchema(e,Nz);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(Ew("database",e.schema)),i(Ew("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=fw.validateBySchema(e,Iz);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Rz.checkGlobalSchemaTable(e.schema,e.table);if(s)return Az(new Error,s,yz.NOT_FOUND);let o=bz()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let u=a(l=>{for(let d=0,E=l.conditions.length;d<E;d++){let f=l.conditions[d];f.conditions?u(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=dw.filter(c,l=>l!=="*"&&!l.startsWith?.("$")&&l.attribute!=="*"&&!Array.isArray(l)&&!l.name&&!dw.some(o,d=>d===l||d.attribute===l||d.attribute===l.attribute));if(_&&_.length>0){let l=_.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var Bp=g((C_e,pw)=>{"use strict";var wz=ze(),Cz=ia(),{getSchemaPath:Dz}=Xe();pw.exports=Lz;function Lz(e){let t=Cz(e,"hashes");if(t)throw t;let r=Dz(e.schema,e.table);return wz.openEnvironment(r,e.table)}a(Lz,"initialize")});var xp=g((L_e,Sw)=>{"use strict";var Mz=sa(),Pz=Bp();Sw.exports=Uz;async function Uz(e){let t=await Pz(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Mz.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Uz,"lmdbGetDataByHash")});var oa=g((P_e,Tw)=>{"use strict";var Hp=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};Tw.exports=Hp});var Rw=g((B_e,gw)=>{"use strict";var v_e=oa(),vz=sa(),Bz=Bp();gw.exports=xz;async function xz(e){let t=await Bz(e),r=global.hdb_schema[e.schema][e.table];return vz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(xz,"lmdbSearchByHash")});var rs=g((H_e,Aw)=>{"use strict";var Gp=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,u=!1,_=void 0,l=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=u,this.limit=_,this.offset=l}};Aw.exports=Gp});var Ed=g((q_e,ww)=>{"use strict";var rr=sa(),Hz=ze(),Gz=z(),me=ft(),ro=P(),qz=Vi(),Ow=vr().LMDB_ERRORS_ENUM,{getSchemaPath:Fz}=Xe(),Is=ro.SEARCH_WILDCARDS;async function kz(e,t,r){let n;e.schema===ro.SYSTEM_SCHEMA_NAME?n=qz[e.table]:n=global.hdb_schema[e.schema][e.table];let s=Iw(e,n.hash_attribute,r,t);return yw(e,s,n.hash_attribute,r)}a(kz,"prepSearch");async function yw(e,t,r,n){let s=Fz(e.schema,e.table),i=await Hz.openEnvironment(s,e.table),o=Nw(i,e,t,r),c=o.transaction||i;if([me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,me.SEARCH_TYPES.SEARCH_ALL,me.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(Vz(e,r)===!1){let l=e.search_attribute;if(l===r)return n?bw(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[l]:E.key}),"toObject");return n?bw(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return n===!0?rr.batchSearchByHashToMap(c,r,e.get_attributes,_):rr.batchSearchByHash(c,r,e.get_attributes,_)}a(yw,"executeSearch");function Nw(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case me.SEARCH_TYPES.EQUALS:s=rr.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.CONTAINS:s=rr.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.ENDS_WITH:case me.SEARCH_TYPES._ENDS_WITH:s=rr.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.STARTS_WITH:case me.SEARCH_TYPES._STARTS_WITH:s=rr.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return rr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return rr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case me.SEARCH_TYPES.SEARCH_ALL:return rr.searchAll(e,n,t.get_attributes,o,c,u);case me.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return rr.searchAllToMap(e,n,t.get_attributes,o,c,u);case me.SEARCH_TYPES.BETWEEN:s=rr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case me.SEARCH_TYPES.GREATER_THAN:case me.SEARCH_TYPES._GREATER_THAN:s=rr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.GREATER_THAN_EQUAL:case me.SEARCH_TYPES._GREATER_THAN_EQUAL:s=rr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.LESS_THAN:case me.SEARCH_TYPES._LESS_THAN:s=rr.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.LESS_THAN_EQUAL:case me.SEARCH_TYPES._LESS_THAN_EQUAL:s=rr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return s}a(Nw,"searchByType");function bw(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(bw,"createMapFromIterable");function Vz(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(Vz,"checkToFetchMore");function Iw(e,t,r,n){if(Gz.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),Is.indexOf(s)>-1)return r===!0?me.SEARCH_TYPES.SEARCH_ALL_TO_MAP:me.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Is[0])<0&&s.indexOf(Is[1])<0)return c===!0?r===!0?me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:me.SEARCH_TYPES.EQUALS;if(Is.indexOf(i)>=0&&Is.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),me.SEARCH_TYPES.CONTAINS;if(Is.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),me.SEARCH_TYPES.ENDS_WITH;if(Is.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),me.SEARCH_TYPES.STARTS_WITH;if(s.includes(Is[0])||s.includes(Is[1]))return me.SEARCH_TYPES.EQUALS;throw new Error(Ow.UNKNOWN_SEARCH_TYPE)}else switch(n){case ro.VALUE_SEARCH_COMPARATORS.BETWEEN:return me.SEARCH_TYPES.BETWEEN;case ro.VALUE_SEARCH_COMPARATORS.GREATER:return me.SEARCH_TYPES.GREATER_THAN;case ro.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return me.SEARCH_TYPES.GREATER_THAN_EQUAL;case ro.VALUE_SEARCH_COMPARATORS.LESS:return me.SEARCH_TYPES.LESS_THAN;case ro.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return me.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Ow.UNKNOWN_SEARCH_TYPE)}}a(Iw,"createSearchTypeFromSearchObject");ww.exports={executeSearch:yw,createSearchTypeFromSearchObject:Iw,prepSearch:kz,searchByType:Nw}});var Dw=g((V_e,Cw)=>{"use strict";var k_e=rs(),$z=ia(),Yz=z(),Kz=P(),Wz=Ed();Cw.exports=Qz;function Qz(e,t){if(!Yz.isEmpty(t)&&Kz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=$z(e,"value");if(n)throw n;return Wz.prepSearch(e,t,!0)}a(Qz,"lmdbGetDataByValue")});var su=g((K_e,Lw)=>{"use strict";var Y_e=rs(),zz=ia(),Jz=z(),Xz=P(),jz=Ed();Lw.exports=Zz;async function Zz(e,t){if(!Jz.isEmpty(t)&&Xz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=zz(e,"value");if(n)throw n;return jz.prepSearch(e,t,!1)}a(Zz,"lmdbSearchByValue")});var Pw=g((z_e,Mw)=>{"use strict";var Q_e=ft(),qp=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}},Fp=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},kp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Mw.exports={SearchByConditionsObject:qp,SearchCondition:Fp,SortAttribute:kp}});var Hw=g((Z_e,xw)=>{"use strict";var X_e=Pw().SearchByConditionsObject,eJ=rs(),tJ=ia(),Vp=sa(),hd=ft(),{Resource:j_e}=(cn(),ie($p)),Bw=Ed(),rJ=vp(),nJ=require("lodash"),{getSchemaPath:sJ}=Xe(),Uw=ze(),{handleHDBError:iJ,hdb_errors:oJ}=se(),{HTTP_STATUS_CODES:aJ}=oJ,cJ=1e8;xw.exports=uJ;async function uJ(e){let t=tJ(e,"conditions");if(t)throw iJ(t,t.message,aJ.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=sJ(e.schema,e.table),n=await Uw.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)Uw.openDBI(n,_.search_attribute);let i=nJ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===hd.SEARCH_TYPES.EQUALS?_.estimated_count=Vp.count(n,_.search_attribute,_.search_value):l===hd.SEARCH_TYPES.CONTAINS||l===hd.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=cJ}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await vw(o,e,i[0],s.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],l=i.slice(1).map(Bw.filterByType),d=l.length,E=Vp.setGetWholeRowAttributes(n,e.get_attributes);u=c.map(f=>_.get(f,{transaction:o,lazy:!0})),d>0&&(u=u.filter(f=>{for(let h=0;h<d;h++)if(!l[h](f))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(f=>rJ.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await vw(o,e,E,s.hash_attribute);c=c.concat(f)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=Vp.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(uJ,"lmdbSearchByConditions");async function vw(e,t,r,n){let s=new eJ(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===hd.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,Bw.searchByType(e,s,i,n).map(o=>o.value)}a(vw,"executeConditionSearch")});var aa=g((tde,Gw)=>{"use strict";var lJ=P().OPERATIONS_ENUM,Yp=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=lJ.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};Gw.exports=Yp});var Kp=g((nde,Ww)=>{"use strict";var Vw=rs(),$w=aa(),Yw=su(),Kw=eu(),hr=P(),qw=z(),Fw=ze(),{getTransactionAuditStorePath:_J,getSchemaPath:dJ}=Xe(),kw=$();Ww.exports=fJ;async function fJ(e){try{if(qw.isEmpty(global.hdb_schema[e.schema])||qw.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await EJ(e),await hJ(e);let t=dJ(e.schema,e.table);try{await Fw.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")kw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=_J(e.schema,e.table);await Fw.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")kw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(fJ,"lmdbDropTable");async function EJ(e){let t=new Vw(hr.SYSTEM_SCHEMA_NAME,hr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Yw(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 $w(hr.SYSTEM_SCHEMA_NAME,hr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await Kw(s)}a(EJ,"deleteAttributesFromSystem");async function hJ(e){let t=new Vw(hr.SYSTEM_SCHEMA_NAME,hr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await Yw(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 $w(hr.SYSTEM_SCHEMA_NAME,hr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await Kw(s)}catch(i){throw i}}a(hJ,"dropTableFromSystem")});var zw=g((ide,Qw)=>{"use strict";var mJ=require("fs-extra"),pJ=rs(),SJ=oa(),TJ=aa(),gJ=Kp(),RJ=eu(),AJ=xp(),OJ=su(),ws=P(),{getSchemaPath:bJ}=Xe(),{handleHDBError:yJ,hdb_errors:NJ}=se(),{HDB_ERROR_MSGS:IJ,HTTP_STATUS_CODES:wJ}=NJ;Qw.exports=CJ;async function CJ(e){let t;try{t=await DJ(e.schema);let r=new pJ(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await OJ(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await gJ(c)}catch(u){if(u.message!=="invalid environment")throw u}}let s=new TJ(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await RJ(s);let i=bJ(t);await mJ.remove(i)}catch(r){throw r}}a(CJ,"lmdbDropSchema");async function DJ(e){let t=new SJ(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await AJ(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw yJ(new Error,IJ.SCHEMA_NOT_FOUND(e),wJ.NOT_FOUND,void 0,void 0,!0);return n}a(DJ,"validateDropSchema")});var md=g((ade,Jw)=>{"use strict";var Wp=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};Jw.exports=Wp});var jw=g((lde,Xw)=>{"use strict";var LJ=require("fs-extra"),pd=ze(),{getTransactionAuditStorePath:MJ}=Xe(),Qp=ft(),ude=md();Xw.exports=PJ;async function PJ(e){let t;try{let r=MJ(e.schema,e.table);await LJ.mkdirp(r),t=await pd.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{pd.createDBI(t,Qp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),pd.createDBI(t,Qp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),pd.createDBI(t,Qp.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(PJ,"createTransactionsAuditEnvironment")});var rC=g((dde,tC)=>{"use strict";var zp=P(),Zw=ze(),UJ=Ko(),{getSystemSchemaPath:vJ,getSchemaPath:BJ}=Xe(),xJ=Vi(),HJ=q_(),Jp=G_(),GJ=$(),qJ=jw(),jp=xJ.hdb_table,eC=[];for(let e=0;e<jp.attributes.length;e++)eC.push(jp.attributes[e].attribute);tC.exports=FJ;async function FJ(e,t){let r=BJ(t.schema,t.table),n=new Jp(t.schema,t.table,zp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Jp(t.schema,t.table,zp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Jp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Zw.createEnvironment(r,t.table),e!==void 0){let o=await Zw.openEnvironment(vJ(),zp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await UJ.insertRecords(o,jp.hash_attribute,eC,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Xp(n),await Xp(s),await Xp(i)}await qJ(t)}catch(o){throw o}}a(FJ,"lmdbCreateTable");async function Xp(e){try{await HJ(e)}catch(t){GJ.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Xp,"createAttribute")});var sC=g((Ede,nC)=>{"use strict";var kJ=$c(),VJ=wc(),$J=cd(),iu=P(),YJ=Ko().updateRecords,KJ=ze(),{getSchemaPath:WJ}=Xe(),QJ=jc(),zJ=$();nC.exports=JJ;async function JJ(e){try{let{schema_table:t,attributes:r}=kJ(e);VJ(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 $J(e.hdb_auth_header,t,r),s=WJ(e.schema,e.table),i=await KJ.openEnvironment(s,e.table),o=await YJ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await QJ(e,o)}catch(c){zJ.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(JJ,"lmdbUpdateRecords")});var oC=g((mde,iC)=>{"use strict";var XJ=P().OPERATIONS_ENUM,Zp=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=XJ.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};iC.exports=Zp});var cC=g((Tde,aC)=>{"use strict";var Sde=oC(),jJ=$c(),ZJ=wc(),e2=cd(),ou=P(),t2=Ko().upsertRecords,r2=ze(),{getSchemaPath:n2}=Xe(),s2=jc(),i2=$(),{handleHDBError:o2,hdb_errors:a2}=se();aC.exports=c2;async function c2(e){let t;try{t=jJ(e)}catch(u){throw o2(u,u.message,a2.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;ZJ(e,n,r.hash_attribute),e.schema!==ou.SYSTEM_SCHEMA_NAME&&(n.includes(ou.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(ou.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(ou.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(ou.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await e2(e.hdb_auth_header,r,n),i=n2(e.schema,e.table),o=await r2.openEnvironment(i,e.table),c=await t2(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await s2(e,c)}catch(u){i2.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(c2,"lmdbUpsertRecords")});var lC=g((Rde,uC)=>{"use strict";var eS=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};uC.exports=eS});var dC=g((Ode,_C)=>{"use strict";var tS=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}};_C.exports=tS});var hC=g((Nde,EC)=>{"use strict";var rS=ze(),{getTransactionAuditStorePath:u2}=Xe(),yde=lC(),au=ft(),l2=z(),fC=dC(),_2=require("util").promisify,d2=_2(setTimeout),f2=1e4,E2=100;EC.exports=h2;async function h2(e){let t=u2(e.schema,e.table),r=await rS.openEnvironment(t,e.table,!0),n=rS.listDBIs(r);rS.initializeDBIs(r,au.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new fC;do s=await m2(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 d2(E2);while(s.transactions_deleted>0);return i}a(h2,"deleteAuditLogsBefore");async function m2(e,t){let r=new fC;try{let n=e.dbis[au.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[au.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];l2.isEmpty(c)||(s=e.dbis[au.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)s=e.dbis[au.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>f2)break}return await s,r}catch(n){throw n}}a(m2,"deleteTransactions")});var pC=g((wde,mC)=>{"use strict";var nS=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};mC.exports=nS});var TC=g((Lde,SC)=>{"use strict";var p2=rs(),S2=aa(),Dde=pC(),ns=P(),T2=z(),sS=ze(),g2=Vi(),R2=su(),A2=eu(),{getSchemaPath:O2}=Xe();SC.exports=b2;async function b2(e,t=!0){let r;e.schema===ns.SYSTEM_SCHEMA_NAME?r=g2[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await N2(e),s=O2(e.schema,e.table),i=await sS.openEnvironment(s,e.table);return t===!0&&await y2(e,i,r.hash_attribute),sS.dropDBI(i,e.attribute),n}a(b2,"lmdbDropAttribute");async function y2(e,t,r){let n=sS.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:u}of n.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);s=t.dbis[r].put(o,_,u)}await s}a(y2,"removeAttributeFromAllObjects");async function N2(e){let t=new p2(ns.SYSTEM_SCHEMA_NAME,ns.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await R2(t)).filter(o=>o[ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(T2.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new S2(ns.SYSTEM_SCHEMA_NAME,ns.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return A2(i)}a(N2,"dropAttributeFromSystem")});var yC=g((Ude,bC)=>{"use strict";var iS=ze(),ca=ft(),Pde=Br(),oS=P(),gC=z(),{getTransactionAuditStorePath:I2}=Xe(),w2=sa(),Sd=ta(),C2=$();bC.exports=D2;async function D2(e){let t=I2(e.schema,e.table),r=await iS.openEnvironment(t,e.table,!0),n=iS.listDBIs(r);iS.initializeDBIs(r,ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case oS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return RC(r,e.search_values);case oS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,M2(r,e.search_values,s);case oS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return L2(r,e.search_values);default:return RC(r)}}a(D2,"readAuditLog");function RC(e,t=[0,Date.now()]){gC.isEmpty(t[0])&&(t[0]=0),gC.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ca.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 Sd,s))}a(RC,"searchTransactionsByTimestamp");function L2(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[ca.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,OC(e,i))}return Object.fromEntries(r)}a(L2,"searchTransactionsByUsername");function M2(e,t,r){let n=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=w2.equals(e,ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ca.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let E=Number(d);n.has(E)?n.get(E).push(_.toString()):n.set(E,[_.toString()])}}let s=Array.from(n.keys()),i=OC(e,s),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=n.get(_);AC(u,"records",r,l,o),AC(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(M2,"searchTransactionsByHashValues");function AC(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],u=c[r].toString();if(n.indexOf(u)>=0)if(s.has(u)){let _=s.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new Sd(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Sd(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(u,[_])}}}a(AC,"loopRecords");function OC(e,t){let r=[];try{let n=e.dbis[ca.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 Sd,i);r.push(o)}}catch(i){C2.warn(i)}return r}catch(n){throw n}}a(OC,"batchSearchTransactions")});var IC=g((Hde,NC)=>{"use strict";var{getSchemaPath:Bde}=Xe(),xde=ze(),{database:P2}=(Ae(),ie(ke));NC.exports={writeTransaction:U2};async function U2(e,t,r){return P2({database:e,table:t}).transaction(r)}a(U2,"writeTransaction")});var LC=g((qde,DC)=>{"use strict";var{getSchemaPath:wC}=Xe(),CC=ze();DC.exports={flush:v2,resetReadTxn:B2};async function v2(e,t){return(await CC.openEnvironment(wC(e,t),t.toString())).flushed}a(v2,"flush");async function B2(e,t){try{(await CC.openEnvironment(wC(e,t),t.toString())).resetReadTxn()}catch{}}a(B2,"resetReadTxn")});var vC=g((kde,UC)=>{"use strict";var{Readable:x2}=require("stream"),{getDatabases:H2}=(Ae(),ie(ke)),{readSync:G2,openSync:q2,createReadStream:MC}=require("fs"),{open:F2}=require("lmdb"),PC=xc(),k2=Hc(),{AUDIT_STORE_OPTIONS:V2}=(ni(),ie(BC)),{INTERNAL_DBIS_NAME:$2,AUDIT_STORE_NAME:Y2}=ft();UC.exports=W2;var aS=32768,K2=100;async function W2(e){let t=e.database||e.schema||"data",r=H2()[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 l=_.dbisDB,d=F2({noSync:!0,maxDbs:k2.MAX_DBS}),E,f=d.openDB($2,new PC(!1)),h=l.useReadTransaction(),p=0,S=a(async function(A,b){b.encoding="binary",b.encoder=void 0;let I=d.openDB(A,b),B=l.openDB(A,b);for(let{key:U,version:F,value:M}of B.getRange({start:null,transaction:h,versions:B.useVersions}))E=I.put(U,M,F),p++%K2===0&&(await new Promise(Q=>setTimeout(Q,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:A,value:b}of l.getRange({transaction:h,start:!1}))if(s.some(I=>A.startsWith?.(I+"/"))){f.put(A,b);let[,I]=A.split("/"),B=!I,U=new PC(!B,B);await S(A,U)}e.include_audit&&await S(Y2,Object.assign({},V2)),await E;let T=MC(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=q2(o.path);return o.transaction(()=>{let _=Buffer.alloc(aS);G2(c,_,0,aS),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=MC(null,{fd:c,start:aS}),E=new x2.from(async function*(){yield _;for await(let f of d)l.openTimer&&(l.openTimer=0),yield f;l.done()}());return E.headers=u(),E});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(W2,"getBackup")});var GC=g(($de,HC)=>{"use strict";var Q2=$(),{handleHDBError:z2}=se(),J2=ey(),X2=q_(),j2=Dp(),Z2=zI(),e4=eu(),t4=xp(),r4=Rw(),n4=Dw(),s4=su(),i4=Hw(),o4=zw(),a4=rC(),c4=sC(),u4=cC(),l4=hC(),_4=Kp(),d4=TC(),f4=yC(),E4=IC(),xC=LC(),h4=vC(),cS=class extends J2{static{a(this,"LMDBBridge")}async searchByConditions(t){return i4(t)}async getDataByHash(t){return await t4(t)}async searchByHash(t){return await r4(t)}async getDataByValue(t,r){return await n4(t,r)}async searchByValue(t){return await s4(t)}async createSchema(t){return await Z2(t)}async dropSchema(t){return await o4(t)}async createTable(t,r){return await a4(t,r)}async dropTable(t){return await _4(t)}async createAttribute(t){return await X2(t)}async createRecords(t){return await j2(t)}async updateRecords(t){return await c4(t)}async upsertRecords(t){try{return await u4(t)}catch(r){throw z2(r,null,null,Q2.ERR,r)}}async deleteRecords(t){return await e4(t)}async dropAttribute(t){return await d4(t)}async deleteAuditLogsBefore(t){return await l4(t)}async readAuditLog(t){return await f4(t)}writeTransaction(t,r,n){return E4.writeTransaction(t,r,n)}flush(t,r){return xC.flush(t,r)}resetReadTxn(t,r){return xC.resetReadTxn(t,r)}getBackup(t){return h4(t)}};HC.exports=cS});function T4(){S4=setInterval(function(){for(let e of uS)if(e.stale){let t=e[ye]?.url;VC.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},p4).unref()}var lS,kC,VC,$C,YC,KC,qC,uS,m4,cu,FC,no,Td,p4,S4,_S=Re(()=>{lS=H(Br()),kC=H(se()),VC=H($());cn();$C=H(ee()),YC=H(P()),KC=H(z()),qC=100,uS=new Set,m4=(0,KC.convertToMS)($C.get(YC.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,no=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),uS.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(uS.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(cu&&!this.overloadChecked&&performance.now()-FC>m4)throw new kC.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,lS.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 p=d;p<this.validated;p++){let S=this.writes[p];if(!S)continue;let T=S[f===0?"before":"beforeIntermediate"];if(T){let A=T();h?h.push?h.push(A):h=[h,A]:h=A}}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"),u=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,u);s=s||E}else u();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)<qC>>n?u():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 cu||(cu=s,FC=performance.now(),cu.then(()=>{cu=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)+qC/2),t?t.retries=n+1:t={retries:1},this.commit(t)));let l={txnTime:r};if(this.next){let d=this.next?.commit(t);if(d?.then)return d?.then(E=>({txnTime:r,next:E}));l.next=d}return l}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},Td=class extends no{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,lS.getNextMonotonicTime)())}getReadTxn(){}},p4=3e4;a(T4,"startMonitoringTxns");T4()});function rt(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 no;e.timestamp&&(n.timestamp=e.timestamp),n[ye]=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 u=n.commit({letItLinger:r?.letItLinger});return u.then?u.then(()=>c):c}function o(c){throw n.abort({}),c}}var WC,so=Re(()=>{WC=require("../index");cn();_S();a(rt,"transaction");(0,WC._assignPackageExport)("transaction",rt);rt.commit=function(e){let t=(e[ye]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};rt.abort=function(e){let t=(e[ye]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var tD={};Fe(tD,{ResourceBridge:()=>ES});function hS({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 zC(e,t){let r=ss(e),n=hS(e,r);if(!r)throw new Un.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;rt(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l;try{l=await r.get({id:_,lazy:s,select:n},i),l=l&&Rd(l)}catch(d){l={message:d.toString()}}return t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function ss(e){let t=e.database||e.schema||R4,r=mr()[t];if(!r)throw(0,Un.handleHDBError)(new Error,g4.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function JC(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*XC(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:u}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(u)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[u]})}n&&(yield n)}var jC,gd,Un,ZC,vn,dS,fS,eD,g4,R4,A4,O4,QC,ES,rD=Re(()=>{"use strict";jC=H(GC()),gd=H(ia()),Un=H(se());Ae();ZC=H($c()),vn=H(P()),dS=H(Ns()),fS=H(Pn()),eD=H(z());so();Ad();({HDB_ERROR_MSGS:g4}=Un.hdb_errors),R4="data",A4=1e4,O4=10,ES=class extends jC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),QC=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,gd.default)(t,"conditions");if(r)throw(0,Un.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=ss(t);if(!n)throw new Un.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:hS(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 Un.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Et({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await ss(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=ss(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,u)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,u),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){ss(t).dropTable()}createSchema(t){return ua({database:t.schema,table:null}),dS.signalSchemaChange(new fS.SchemaEventMsg(process.pid,vn.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await mS(t.schema),dS.signalSchemaChange(new fS.SchemaEventMsg(process.pid,vn.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,QC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,ZC.default)(t),s,i=mr()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return rt(o,async c=>{if(!i.schemaDefined){s=[];for(let l of n)i.attributes.find(E=>E.name==l)||s.push(l);s.length>0&&await i.addAttributes(s.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=l[i.primaryKey],E=d!=null&&await i.get(d,o);if(t.requires_existing&&!E||t.requires_no_existing&&E){_.push(l[i.primaryKey]);continue}E&&(E=Rd(E));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let h=l[f];if(typeof h=="function")try{let p=h([[E]]);Array.isArray(p)&&(h=p[0].func_val,l[f]=h)}catch(p){throw p.message+="Trying to set key "+f+" on object"+JSON.stringify(l),p}}if(E)for(let f in E)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=E[f]);await(d==null?i.create(l,o):i.put(l,o)),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=mr()[t.schema][t.table],n={user:t.hdb_user};return rt(n,async s=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,n)?o.push(u):c.push(u);return JC(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=mr()[t.schema][t.table];if(!r.createdTimeProperty)throw new Un.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:vn.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,eD.async_set_timeout)(O4),u=[],s=!0},"chunkDelete");for await(let l of n)u.push(l[r.primaryKey]),c++,c%A4===0&&await _();return u.length>0&&await _(),s?JC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,gd.default)(t,"hashes");if(r)throw r;return zC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of zC(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&vn.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,gd.default)(t,"value");if(n)throw n;let s=ss(t);if(!s)throw new Un.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===vn.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:hS(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache})}async getDataByValue(t,r){let n=new Map,s=ss(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){ss({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return ss(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=ss(t),n={};switch(t.search_type){case vn.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 vn.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of XC(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return XC(r,t.search_values?.[0],t.search_values?.[1])}}};a(hS,"getSelect");a(zC,"getRecords");a(ss,"getTable");a(JC,"createDeleteResponse");a(XC,"groupRecordsInHistory")});var Dn=g((ife,nD)=>{"use strict";var{ResourceBridge:b4}=(rD(),ie(tD)),y4=ee();y4.initSync();var Od;function N4(){return Od||(Od=new b4,Od)}a(N4,"getBridge");nD.exports=N4()});var aD=g((afe,oD)=>{"use strict";var sD=require("lodash"),uu=require("mathjs"),I4=require("jsonata"),iD=z();oD.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?sD.uniqWith(e,sD.isEqual):e,searchJSON:w4,mad:lu.bind(null,uu.mad),mean:lu.bind(null,uu.mean),mode:lu.bind(null,uu.mode),prod:lu.bind(null,uu.prod),median:lu.bind(null,uu.median)};function lu(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(lu,"aggregateFunction");function w4(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(iD.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),iD.isEmpty(this.__ala__.res[r])){let n=I4(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(w4,"searchJSON")});var uD=g((ufe,cD)=>{"use strict";var Rt=require("moment"),pS="YYYY-MM-DDTHH:mm:ss.SSSZZ";Rt.suppressDeprecationWarnings=!0;cD.exports={current_date:()=>Rt().utc().format("YYYY-MM-DD"),current_time:()=>Rt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Rt(e).utc().format("YYYY");case"month":return Rt(e).utc().format("MM");case"day":return Rt(e).utc().format("DD");case"hour":return Rt(e).utc().format("HH");case"minute":return Rt(e).utc().format("mm");case"second":return Rt(e).utc().format("ss");case"millisecond":return Rt(e).utc().format("SSS");default:break}},date:e=>Rt(e).utc().format(pS),date_format:(e,t)=>Rt(e).utc().format(t),date_add:(e,t,r)=>Rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=Rt(e).utc(),s=Rt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>Rt().utc().valueOf(),get_server_time:()=>Rt().format(pS),offset_utc:(e,t)=>Rt(e).utc().utcOffset(t).format(pS)}});var fD=g((lfe,dD)=>{"use strict";var C4=require("@turf/area"),D4=require("@turf/length"),L4=require("@turf/circle"),M4=require("@turf/difference"),P4=require("@turf/distance"),U4=require("@turf/boolean-contains"),v4=require("@turf/boolean-equal"),B4=require("@turf/boolean-disjoint"),x4=require("@turf/helpers"),lD=P(),Te=z(),Cs=$();dD.exports={geoArea:H4,geoLength:G4,geoCircle:q4,geoDifference:F4,geoDistance:_D,geoNear:k4,geoContains:V4,geoEqual:$4,geoCrosses:Y4,geoConvert:K4};function H4(e){if(Te.isEmpty(e))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return C4.default(e)}catch(t){return Cs.trace(t,e),NaN}}a(H4,"geoArea");function G4(e,t){if(Te.isEmpty(e))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return D4.default(e,{units:t||"kilometers"})}catch(r){return Cs.trace(r,e),NaN}}a(G4,"geoLength");function q4(e,t,r){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return L4.default(e,t,{units:r||"kilometers"})}catch(n){return Cs.trace(n,e,t),NaN}}a(q4,"geoCircle");function F4(e,t){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return M4(e,t)}catch(r){return Cs.trace(r,e,t),NaN}}a(F4,"geoDifference");function _D(e,t,r){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return P4.default(e,t,{units:r||"kilometers"})}catch(n){return Cs.trace(n,e,t),NaN}}a(_D,"geoDistance");function k4(e,t,r,n){if(Te.isEmpty(e)||Te.isEmpty(t))return!1;if(Te.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return _D(e,t,n)<=r}catch(s){return Cs.trace(s,e,t),!1}}a(k4,"geoNear");function V4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return U4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a(V4,"geoContains");function $4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return v4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a($4,"geoEqual");function Y4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return!B4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a(Y4,"geoCrosses");function K4(e,t,r){if(Te.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Te.isEmpty(t))throw new Error("geo_type is required");if(Te.isEmpty(lD.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(lD.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Te.autoCastJSON(e)),x4[t](e,r)}a(K4,"geoConvert")});var bd=g((dfe,ED)=>{var io=aD(),Wr=uD(),is=fD();ED.exports=e=>{e.aggr.mad=e.aggr.MAD=io.mad,e.aggr.mean=e.aggr.MEAN=io.mean,e.aggr.mode=e.aggr.MODE=io.mode,e.aggr.prod=e.aggr.PROD=io.prod,e.aggr.median=e.aggr.MEDIAN=io.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=io.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=io.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Wr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Wr.current_time,e.fn.extract=e.fn.EXTRACT=Wr.extract,e.fn.date=e.fn.DATE=Wr.date,e.fn.date_format=e.fn.DATE_FORMAT=Wr.date_format,e.fn.date_add=e.fn.DATE_ADD=Wr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Wr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Wr.date_diff,e.fn.now=e.fn.NOW=Wr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Wr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Wr.get_server_time,e.fn.getdate=e.fn.GETDATE=Wr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Wr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=is.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=is.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=is.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=is.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=is.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=is.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=is.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=is.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=is.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=is.geoNear}});var SD=g((ffe,pD)=>{"use strict";var _u=require("lodash"),pr=require("alasql");pr.options.cache=!1;var W4=bd(),hD=require("clone"),yd=require("recursive-iterator"),fe=$(),Le=z(),la=Dn(),Q4=P(),{hdb_errors:z4}=se(),{getDatabases:mD}=(Ae(),ie(ke)),J4="IS NULL",Bn="There was a problem performing this search. Please check the logs and try again.";W4(pr);var SS=class{static{a(this,"SQLSearch")}constructor(t,r){if(Le.isEmpty(t))throw fe.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(),Le.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Le.isEmptyOrZeroLength(n))return fe.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw fe.error("Error thrown from checkEmptySQL in SQLSearch class method search."),fe.error(n),new Error(Bn)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw fe.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),fe.error(n),new Error(Bn)}if(Object.keys(this.data).length===0)return fe.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw fe.error("Error thrown from processJoins in SQLSearch class method search."),fe.error(n),new Error(Bn)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw fe.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),fe.error(n),new Error(Bn)}try{return t=await this._finalSQL(),t}catch(n){throw fe.error("Error thrown from finalSQL in SQLSearch class method search."),fe.error(n),new Error(Bn)}}_getColumns(){let t=new yd(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(hD(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=_u.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=mD()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Le.isEmpty(this.statement.where)){fe.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new yd(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Le.isEmpty(r)&&r.right)if(Le.isNotEmptyAndHasValue(r.right.value)){let n=Le.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new pr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Le.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new pr.yy.LogicValue({value:i}):n instanceof pr.yy.StringValue&&Le.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new pr.yy.NumValue({value:i}))});if(t){fe.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new yd(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(!Le.isEmpty(Q4.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Le.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Le.isEmptyOrZeroLength(r.left.columnid)||Le.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(Le.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"=":!Le.isEmpty(r.right.value)||!Le.isEmpty(r.left.value)?n.add(Le.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)n.add(u[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from)&&Le.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&_u.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(Le.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Le.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(Le.isEmptyOrZeroLength(this.all_table_attributes)&&!Le.isEmptyOrZeroLength(this.columns.columns))return t;if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await pr.promise(r)}catch(r){throw fe.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),fe.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(hD(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(Le.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(J4)>-1&&this.tables.forEach(s=>{let i={columnid:mD()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=_u.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},u=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(u=!0),!Le.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await la.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(l){throw fe.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),fe.error(l),new Error(Bn)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let E=await la.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(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),fe.error(l),new Error(Bn)}else if(!Le.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,E=l.length;d<E;d++){let f=l[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await la.getDataByValue(c,f.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...n[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]):(this.data[i].__merged_data[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,p))}}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),fe.error(l),new Error(Bn)}else try{c.search_attribute=s.attribute,c.search_value="*";let l=await la.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,E]of l)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(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),fe.error(l),new Error(Bn)}}}_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 pr.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 pr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new pr.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 pr.yy.FuncValue:new pr.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,p=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${p}.${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 "${p}.${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 u=this.statement.where?"WHERE "+this.statement.where:"";u=u.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(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 l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(f,s);E=await pr.promise(h,t),t=null}catch(f){throw fe.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),fe.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 p=E[f];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),p=_u.difference(h,[...f.keys].map(S=>S.toString()));for(let S=0,T=p.length;S<T;S++){let A=p[S];delete this.data[`${f.schema}_${f.table}`].__merged_data[A]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new yd(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=_u.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw fe.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),fe.error(i),new Error(Bn)}}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 l in i)o.push(i[l][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},u=await la.getDataByHash(c),_=s.columns.length;for(let l=0,d=o.length;l<d;l++){let E=o[l],f=u.get(E);for(let h=0;h<_;h++){let p=s.columns[h],S=f[p]===void 0?null:f[p];this.data[n].__merged_data[E].push(S)}}}}catch(r){throw fe.error("Error thrown from getDataByHash function in SQLSearch class method getData."),fe.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,u=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===u}).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();fe.trace(`Final SQL: ${s}`),n=await pr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),fe.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw fe.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),fe.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 fe.error(z4.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),fe.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 u=s[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;n=n.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(u,_)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await la.getDataByValue(i);for(let[c,u]of o)this.data[s].__merged_data[c]||(u[n.attribute]===void 0&&(u[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=u[n.attribute]??null}catch(o){throw fe.error("There was an error when processing this SQL operation. Check your logs"),fe.error(o),new Error(Bn)}}return Object.values(Object.values(this.data)[0].__merged_data)}};pD.exports=SS});var qr=g((hfe,TD)=>{"use strict";var X4=jb();TD.exports={searchByConditions:Z4,searchByHash:e3,searchByValue:t3,search:r3};var TS=Dn(),{transformReq:gS}=z(),j4=SD();async function Z4(e){return gS(e),TS.searchByConditions(e)}a(Z4,"searchByConditions");async function e3(e){gS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of TS.searchByHash(e))r&&t.push(r);return t}a(e3,"searchByHash");async function t3(e){gS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of TS.searchByValue(e))t.push(r);return t}a(t3,"searchByValue");function r3(e,t){try{let r=new X4(e);r.validate(),new j4(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(r3,"search")});var Nd=g((pfe,gD)=>{"use strict";var n3=Dn();gD.exports={writeTransaction:s3};function s3(e,t,r){return n3.writeTransaction(e,t,r)}a(s3,"writeTransaction")});var bD=g((gfe,OD)=>{"use strict";var i3=qr(),o3=ys(),RD=$(),a3=Fr(),Tfe=Nd(),c3=require("clone"),AS=require("alasql"),u3=bd(),AD=require("util"),l3=AD.promisify(o3.getTableSchema),_3=AD.promisify(i3.search),d3=P(),RS=z();u3(AS);OD.exports={update:E3};var f3="There was a problem performing this update. Please check the logs and try again.";async function E3({statement:e,hdb_user:t}){let r=await l3(e.table.databaseid,e.table.tableid),n=h3(e.columns);RS.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=c3(s),c=RS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=AS.parse(u).statements[0],l=await _3(_),d=m3(n,l);return p3(o,d,t)}a(E3,"update");function h3(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=AS.compile(`SELECT ${r.expression.toString()} AS [${d3.FUNC_VAL}] FROM ?`)}),t}catch(t){throw RD.error(t),new Error(f3)}}a(h3,"createUpdateRecord");function m3(e,t){return RS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(m3,"buildUpdateRecords");async function p3(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await a3.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){RD.error(`Error delete new_attributes from update response: ${i}`)}return s}a(p3,"updateRecords")});var ND=g((bfe,yD)=>{var S3=require("alasql"),T3=qr(),g3=$(),R3=Dn(),bS=require("util"),OS=z(),A3=P(),O3=ys(),Afe=Nd(),Ofe=Fr(),b3="record",y3="successfully deleted",N3=bS.callbackify(D3),I3=bS.promisify(T3.search),w3=bS.promisify(O3.getTableSchema);yD.exports={convertDelete:N3};function C3(e){return`${e.deleted_hashes.length} ${b3}${e.deleted_hashes.length===1?"":"s"} ${y3}`}a(C3,"generateReturnMessage");async function D3({statement:e,hdb_user:t}){let r=await w3(e.table.databaseid,e.table.tableid);OS.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=OS.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=S3.parse(o).statements[0],u={operation:A3.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await I3(c);let _=await R3.deleteRecords(u);return OS.isEmptyOrZeroLength(_.message)&&(_.message=C3(_)),delete _.txn_time,_}catch(_){throw g3.error(_),_.hdb_code?_.message:_}}a(D3,"convertDelete")});var LD=g((Nfe,DD)=>{"use strict";var L3=bs(),{hdb_errors:ID}=se(),{getDatabases:wD}=(Ae(),ie(ke));DD.exports={checkSchemaExists:CD,checkSchemaTableExists:M3,schema_describe:L3};async function CD(e){if(!wD()[e])return ID.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(CD,"checkSchemaExists");async function M3(e,t){let r=await CD(e);if(r)return r;if(!wD()[e][t])return ID.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(M3,"checkSchemaTableExists")});var du=g((wfe,P3)=>{P3.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 pu={};Fe(pu,{addAnalyticsListener:()=>mu,recordAction:()=>Sr,recordActionBinary:()=>Qr,setAnalyticsEnabled:()=>U3});function U3(e){qD=e}function Sr(e,t,r,n,s){if(!qD)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=Cd.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},Cd.set(i,o)}Id||v3()}function Qr(e,t,r,n,s){Sr(!!e,t,r,n,s)}function mu(e){VD.push(e)}function v3(){Id=performance.now(),setTimeout(async()=>{let e=performance.now()-Id;Id=0;let t=[],r={time:Date.now(),period:e,threadId:oo.threadId,metrics:t};for(let[s,i]of Cd){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of $D){let E=Math.floor(c*d),f=o[E-1];if(E>u){let h=E-u;if(f===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:f,count:h}:f),l=f;u=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 YD()}let n=process.memoryUsage();t.push({metric:"memory",threadId:oo.threadId,byThread:!0,...n});for(let s of VD)s(t);Cd=new Map,oo.parentPort?oo.parentPort.postMessage({type:kD,report:r}):QD({report:r})},FD).unref()}async function B3(e,t=6e4){let r=IS(),n=KD(),s=new Promise(p=>{let S=performance.now();setImmediate(()=>{let T=performance.now();T-S>5e3&&(0,fu.warn)("Unusually high event queue latency on the main thread of "+Math.round(T-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let T=performance.now();T-S>5e3&&(0,fu.warn)("Unusually high task queue latency on the main thread of "+Math.round(T-S)+"ms"),p(T-S)})}),i;for(let p of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(p.value?.time){i=p.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,u=new Map,_=[],l;for(let{key:p,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(p>o+t)break}else o=p;l=p;let{metrics:T,threadId:A}=S;for(let b of T||[]){let{path:I,method:B,type:U,metric:F,count:M,total:Q,distribution:J,threads:X,...oe}=b;M||(M=1);let ue=F+(I?"-"+I:"");B!==void 0&&(ue+="-"+B),U!==void 0&&(ue+="-"+U);let le=c.get(ue);if(le){if(le.threads){let Ne=le.threads[A];if(Ne)le=Ne;else{le.threads[A]=Object.assign({},oe);continue}}le.count||(le.count=1);let Be=le.count;for(let Ne in oe){let xe=oe[Ne];typeof xe=="number"&&(le[Ne]=(le[Ne]*Be+xe*M)/(Be+M))}le.count+=M,Q>=0&&(le.total+=Q,le.ratio=le.total/le.count)}else le=Object.assign({period:t},b),delete le.distribution,c.set(ue,le),le.byThread&&(le.threads=[],le.threads[A]=Object.assign({},oe),_.push(le));if(J){J=J.map(Ne=>typeof Ne=="number"?{value:Ne,count:1}:Ne);let Be=u.get(ue);Be?Be.push(...J):u.set(ue,J)}}await YD()}for(let p of _){let{path:S,method:T,type:A,metric:b,count:I,total:B,distribution:U,threads:F,...M}=p;F=F.filter(Q=>Q);for(let Q in M){if(typeof p[Q]!="number")continue;let J=0;for(let X of F){let oe=X[Q];typeof oe=="number"&&(J+=oe)}p[Q]=J}p.count=F.length,delete p.threads,delete p.byThread}for(let[p,S]of u){let T=c.get(p);S.sort((Ne,xe)=>Ne.value>xe.value?1:-1);let A=T.count-1,b=[],I=0,B=0,U;for(let Ne of $D){let xe=A*Ne;for(;I<xe;)U=S[B++],I+=U.count,B===1&&I--;let n_=S[B>1?B-2:0];U||(U=S[0]),b.push(U.value-(U.value-n_.value)*(I-xe)/U.count)}let[F,M,Q,J,X,oe,ue,le,Be]=b;Object.assign(T,{p1:F,p10:M,p25:Q,median:J,p75:X,p90:oe,p95:ue,p99:le,p999:Be})}let d;for(let[p,S]of c)S.id=(0,wd.getNextMonotonicTime)(),S.time=l,n.primaryStore.put(S.id,S,{append:!0}).then(T=>{T||n.primaryStore.put(S.id,S)}),d=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(d||h*10>f){let p=(0,wd.getNextMonotonicTime)(),S={id:p,metric:"main-thread-utilization",idle:f-MD,active:h-PD,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(p,S,{append:!0}).then(T=>{T||n.primaryStore.put(p,S)})}MD=f,PD=h}async function UD(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function IS(){return vD||(vD=Et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function KD(){return BD||(BD=Et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function G3(){WD=!0;let e=(0,hu.get)(NS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await B3(FD,e),await UD(IS(),x3),await UD(KD(),H3)},Math.min(e/2,2147483647)).unref()}function QD(e,t){let r=e.report;r.threadId=t?.threadId||oo.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(xD+=n.mean*n.count);r.totalBytesProcessed=xD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(HD.get(t))}),HD.set(t,t.performance.eventLoopUtilization())),r.id=(0,wd.getNextMonotonicTime)(),IS().primaryStore.put(r.id,r),WD||G3(),q3&&(zD=k3(r))}async function k3(e){if(await zD,!fi){let r=(0,Eu.dirname)((0,fu.getLogFilePath)());try{fi=await(0,yS.open)((0,Eu.join)(r,"analytics.log"),"r+")}catch{fi=await(0,yS.open)((0,Eu.join)(r,"analytics.log"),"w+")}}let t=(await fi.stat()).size;if(t>F3){let r=Buffer.alloc(t);await fi.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await fi.write(r,{position:0}),await fi.truncate(r.length),t=r.length}await fi.write(JSON.stringify(e)+`
|
|
9
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw It.error(i),new Error(`Error reading HarperDB config file at ${r}`)}FK(n,r),up(n);let s=n.toJSON();if(PK.config=s,wt=zo(s),wt.logging_rotation_rotate)for(let i in VN)wt[i]&&It.error(`Config ${VN[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);It.trace(vK)}}a(cp,"initConfig");function FK(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Ln.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Ln.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Ln.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&&(It.trace("Updating config file with missing config params"),fr.writeFileSync(t,String(e)))}a(FK,"checkForUpdatedConfig");function up(e,t=!1){let r=e.toJSON();r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads);let n=IK(r,t);if(n.error)throw Z_.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(up,"validateConfig");function kK(e,t){wt===void 0&&(wt={});let r=Mn[e.toLowerCase()];if(r===void 0){It.trace(`Unable to update config object because config param '${e}' does not exist`);return}wt[r.toLowerCase()]=t}a(kK,"updateConfigObject");function QN(e,t,r=void 0,n=!1,s=!1,i=!1){wt===void 0&&cp();let o=WN(Mn.hdb_root),c=Ln.join(o,Vr.HDB_CONFIG_FILE),u=ui(c),_;if(r===void 0&&e.toLowerCase()===kr.DATABASES)_=t;else if(r===void 0){let E;if(i)E=e;else if(E=Mn[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=ap(E,t);u.setIn([...f],h)}else for(let E in r){let f=Mn[E.toLowerCase()];if(f===kr.HTTP_SECUREPORT&&r[E]===wt[kr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),f===kr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===wt[kr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),f===kr.DATABASES){_=r[E];continue}if(f?.startsWith("threads_")){let h=u.getIn(["threads"]);h>=0&&(u.deleteIn(["threads"]),u.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),p=Vr.LEGACY_CONFIG_PARAMS[E.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(f=p,h=p.split("_"));let S=ap(f,r[E]);f==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof u.getIn(h.slice(0,-1))=="boolean"&&u.deleteIn(h.slice(0,-1)),u.setIn([...h],S)}catch(T){It.error(T)}}}_&&KN(u,_),up(u);let l=u.getIn(["rootPath"]),d=Ln.join(l,Vr.HDB_CONFIG_FILE);n===!0&&VK(c,l),fr.writeFileSync(d,String(u)),s&&(wt=zo(u.toJSON())),It.trace(`Config parameter: ${e} updated with value: ${t}`)}a(QN,"updateConfigValue");function VK(e,t){try{let r=Ln.join(t,"backup",`${Vr.HDB_CONFIG_FILE}.bak`);fr.copySync(e,r),It.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){It.error(BK),It.error(r)}}a(VK,"backupConfigFile");var $K=["databases"];function zo(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)),td=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])&&!$K.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!kr[u.toUpperCase()]&&Mn[u]&&(s[Mn[u].toLowerCase()]=o[c]),s[u]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(zo,"flattenConfig");function ap(e,t){if(e===kr.CLUSTERING_NODENAME||e===kr.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(CK(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Bt.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 Bt.autoCast(t)}a(ap,"castConfigValue");function YK(){let e=Bt.getPropsFilePath(),t=Xi(e);return ui(t).toJSON()}a(YK,"getConfiguration");async function KK(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return QN(void 0,void 0,s,!0),HK}catch(i){throw typeof i=="string"||i instanceof String?LK(i,i,MK.BAD_REQUEST,void 0,void 0,!0):i}}a(KK,"setConfiguration");function lp(){let e=Bt.getPropsFilePath();try{fr.accessSync(e,fr.constants.F_OK|fr.constants.R_OK)}catch(n){if(!Bt.noBootFile())throw It.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Xi(e);return ui(t).toJSON()}a(lp,"readConfigFile");function ui(e){return wK.parseDocument(fr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ui,"parseYamlDoc");function WK(){let e=lp(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Bt.isEmptyOrZeroLength(t)?[]:t;let r=kN(t);if(r)throw Z_.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Bt.isEmptyOrZeroLength(n)?[]:n;let s=kN(n);if(s)throw Z_.CONFIG_VALIDATION(s.message);if(!Bt.isEmptyOrZeroLength(n)&&!Bt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Bt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Z_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(WK,"getClusteringRoutes");function zN(e){let t=$N(e);wt={};for(let r in Mn){let n=t.get(r.toUpperCase());if(Bt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Mn[r].toLowerCase();s===kr.LOGGING_ROOT?wt[s]=Ln.dirname(n):wt[s]=n}return wt}a(zN,"initOldConfig");function QK(e){let t=lp();return DK.get(t,e.replaceAll("_","."))}a(QK,"getConfigFromFile");async function zK(e,t){let r=ui(Xi());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await fr.writeFile(Xi(),String(r))}a(zK,"addConfig");function JK(e){let t=Xi(Bt.getPropsFilePath()),r=ui(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Ln.join(n,Vr.HDB_CONFIG_FILE);fr.writeFileSync(s,String(r))}a(JK,"deleteConfigFromFile");function XK(){return td||(cp(),td)}a(XK,"getConfigObj")});var jN=g((Ale,XN)=>{"use strict";var rd=P(),nd=class{static{a(this,"BaseLicense")}constructor(t=0,r=rd.RAM_ALLOCATION_ENUM.DEFAULT,n=rd.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},_p=class extends nd{static{a(this,"ExtendedLicense")}constructor(t=0,r=rd.RAM_ALLOCATION_ENUM.DEFAULT,n=rd.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};XN.exports={BaseLicense:nd,ExtendedLicense:_p}});var ji=g((ble,sI)=>{"use strict";var Xo=require("fs-extra"),eI=z_(),tI=require("crypto"),jK=require("moment"),ZK=require("uuid").v4,tr=$(),fp=require("path"),eW=z(),li=P(),{totalmem:ZN}=require("os"),tW=jN().ExtendedLicense,Jo="invalid license key format",rW="061183",nW="mofi25",sW="aes-256-cbc",iW=16,oW=32,rI=ee();rI.initSync();var dp;sI.exports={validateLicense:nI,generateFingerPrint:cW,licenseSearch:mp,getLicense:_W,checkMemoryLimit:dW};function Ep(){return fp.join(rI.getHdbBasePath(),li.LICENSE_KEY_DIR_NAME,li.LICENSE_FILE_NAME)}a(Ep,"getLicenseDirPath");function aW(){let e=Ep();return fp.join(e,li.LICENSE_FILE_NAME)}a(aW,"getLicenseFilePath");function hp(){let e=Ep();return fp.join(e,li.REG_KEY_FILE_NAME)}a(hp,"getFingerPrintFilePath");async function cW(){let e=hp();try{return await Xo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await uW();throw tr.error(`Error writing fingerprint file to ${e}`),tr.error(t),new Error("There was an error generating the fingerprint")}}a(cW,"generateFingerPrint");async function uW(){let e=ZK(),t=eI.hash(e),r=hp();try{await Xo.mkdirp(Ep()),await Xo.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw tr.error(`Error writing fingerprint file to ${r}`),tr.error(n),new Error("There was an error generating the fingerprint")}return t}a(uW,"writeFingerprint");function nI(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:li.RAM_ALLOCATION_ENUM.DEFAULT,version:li.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return tr.error("empty license key passed to validate."),r;let n=hp(),s=!1;try{s=Xo.statSync(n)}catch(i){tr.error(i)}if(s){let i;try{i=Xo.readFileSync(n,"utf8")}catch{tr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(nW),c=o[1];c=Buffer.concat([Buffer.from(c)],iW);let u=Buffer.concat([Buffer.from(i)],oW),_=tI.createDecipheriv(sW,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let f=lW(o[0],i);if(f)l=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Jo),tr.error(Jo),new Error(Jo)}let d;if(isNaN(l))try{d=JSON.parse(l),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(Jo),tr.error(Jo),new Error(Jo)}else r.exp_date=l;r.exp_date<jK().valueOf()&&(r.valid_date=!1),eI.validate(o[1],`${rW}${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||tr.error("Invalid licence"),r}a(nI,"validateLicense");function lW(e,t){try{let r=tI.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{tr.warn("Check old license failed")}}a(lW,"checkOldLicense");function mp(){let e=new tW,t=[];try{t=Xo.readFileSync(aW(),"utf-8").split(li.NEW_LINE)}catch(r){r.code==="ENOENT"?tr.info("no license file found"):tr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(eW.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=nI(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){tr.error("There was an error parsing the license string."),tr.error(s),e.ram_allocation=li.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return dp=e,e}a(mp,"licenseSearch");async function _W(){return dp||await mp(),dp}a(_W,"getLicense");function dW(){let e=mp().ram_allocation,t=process.constrainedMemory?.()||ZN();if(t=Math.round(Math.min(t,ZN())/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(dW,"checkMemoryLimit")});var _n=g((Cle,gI)=>{"use strict";var cI="username is required",uI="nothing to update, must supply active, role or password to update",lI="password cannot be an empty string",_I="If role is specified, it cannot be empty.",dI="active must be true or false";gI.exports={addUser:RW,alterUser:AW,dropUser:bW,getSuperUser:wW,userInfo:yW,listUsers:id,listUsersExternal:NW,setUsersToGlobal:Zo,findAndValidateUser:SI,getClusterUser:CW,USERNAME_REQUIRED:cI,ALTERUSER_NOTHING_TO_UPDATE:uI,EMPTY_PASSWORD:lI,EMPTY_ROLE:_I,ACTIVE_BOOLEAN:dI};var fI=Fr(),fW=ci(),Tp=z_(),EI=LN(),hI=qr(),gp=Ns(),$r=z(),mI=require("validate.js"),Oe=$(),{promisify:EW}=require("util"),Rp=Os(),iI=P(),oI=Ve(),hW=Er(),Nle=ee(),Ile=ji(),mW=Vi(),{table:wle}=(Ae(),ie(ke)),{handleHDBError:es,hdb_errors:pW}=se(),{HTTP_STATUS_CODES:ts,AUTHENTICATION_ERROR_MSGS:pp,HDB_ERROR_MSGS:jo}=pW,{UserEventMsg:Ap}=Pn(),Sp=require("lodash"),{server:Op}=(lr(),ie(Gi)),SW=$();Op.getUser=(e,t)=>SI(e,t,t!=null);var pI={username:!0,active:!0,role:!0,password:!0},aI=new Map,sd=hI.searchByValue,TW=hI.searchByHash,gW=EW(fW.delete);async function RW(e){let t=mI.cleanAttributes(e,pI),r=EI.addUserValidation(t);if(r)throw es(new Error,r.message,ts.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 sd(n),s=s&&Array.from(s)}catch(u){throw Oe.error("There was an error searching for a role in add user"),Oe.error(u),u}if(!s||s.length<1)throw es(new Error,jo.ROLE_NAME_NOT_FOUND(t.role),ts.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw es(new Error,jo.DUP_ROLES_FOUND(t.role),ts.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=Rp.encrypt(t.password)),t.password=Tp.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await fI.insert(i)}catch(u){throw Oe.error("There was an error searching for a user."),Oe.error(u),u}Oe.debug(o);try{await Zo()}catch(u){throw Oe.error("Got an error setting users to global"),Oe.error(u),u}if(o.skipped_hashes.length===1)throw es(new Error,jo.USER_ALREADY_EXISTS(t.username),ts.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],gp.signalUserChange(new Ap(process.pid)),`${c.username} successfully added`}a(RW,"addUser");async function AW(e){let t=mI.cleanAttributes(e,pI);if($r.isEmptyOrZeroLength(t.username))throw new Error(cI);if($r.isEmptyOrZeroLength(t.password)&&$r.isEmptyOrZeroLength(t.role)&&$r.isEmptyOrZeroLength(t.active))throw new Error(uI);if(!$r.isEmpty(t.password)&&$r.isEmptyOrZeroLength(t.password.trim()))throw new Error(lI);if(!$r.isEmpty(t.active)&&!$r.isBoolean(t.active))throw new Error(dI);let r=OW(t.username);if(!$r.isEmpty(t.password)&&!$r.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Rp.encrypt(t.password)),t.password=Tp.hash(t.password)),t.role==="")throw new Error(_I);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 sd(i)||[])}catch(c){throw Oe.error("Got an error searching for a role."),Oe.error(c),c}if(!o||o.length===0){let c=jo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Oe.error(c),es(new Error,c,ts.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=jo.ALTER_USER_DUP_ROLES(t.role);throw Oe.error(c),es(new Error,c,ts.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 fI.update(n)}catch(i){throw Oe.error("Error during update."),Oe.error(i),i}try{await Zo()}catch(i){throw Oe.error("Got an error setting users to global"),Oe.error(i),i}return gp.signalUserChange(new Ap(process.pid)),s}a(AW,"alterUser");function OW(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(OW,"isClusterUser");async function bW(e){try{let t=EI.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if($r.isEmpty(global.hdb_users.get(e.username)))throw es(new Error,jo.USER_NOT_EXIST(e.username),ts.NOT_FOUND,void 0,void 0,!0);let n;try{n=await gW(r)}catch(s){throw Oe.error("Got an error deleting a user."),Oe.error(s),s}Oe.debug(n);try{await Zo()}catch(s){throw Oe.error("Got an error setting users to global."),Oe.error(s),s}return gp.signalUserChange(new Ap(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(bW,"dropUser");async function yW(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Sp.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await TW(r)}catch(s){throw Oe.error("Got an error searching for a role."),Oe.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Oe.error(r),r}return t}a(yW,"userInfo");async function NW(){let e;try{e=await id()}catch(t){throw Oe.error("Got an error listing users."),Oe.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(NW,"listUsersExternal");async function id(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await sd(e)}catch(o){throw Oe.error("Got an error searching for roles."),Oe.error(o),o}let r={};for(let o of t)r[o.id]=Sp.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 sd(n)}catch(o){throw Oe.error("Got an error searching for users."),Oe.error(o),o}let i=new Map;for(let o of s)o=Sp.cloneDeep(o),o.role=r[o.role],IW(o.role),i.set(o.username,o);return i}catch(e){throw Oe.error("got an error listing users"),Oe.error(e),$r.errorizeMessage(e)}return null}a(id,"listUsers");function IW(e){try{if(!e){Oe.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(mW)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Oe.error("Got an error trying to set system permissions."),Oe.error(t)}}a(IW,"appendSystemTablesToRole");async function Zo(){try{let e=await id();global.hdb_users=e}catch(e){throw Oe.error(e),e}}a(Zo,"setUsersToGlobal");async function SI(e,t,r=!0){global.hdb_users||await Zo();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw es(new Error,pp.GENERIC_AUTH_FAIL,ts.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw es(new Error,pp.USER_INACTIVE,ts.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(aI.get(t)===n.password)return s;if(Tp.validate(n.password,t))aI.set(t,n.password);else throw es(new Error,pp.GENERIC_AUTH_FAIL,ts.UNAUTHORIZED,void 0,void 0,!0)}return s}a(SI,"findAndValidateUser");async function wW(){global.hdb_users||await Zo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(wW,"getSuperUser");async function CW(){let e=await id(),t=hW.getConfigFromFile(iI.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!$r.isEmpty(r)&&r?.role?.role===iI.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Rp.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+oI.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+oI.SERVER_SUFFIX.ADMIN,r}a(CW,"getClusterUser");var TI=[];Op.invalidateUser=function(e){for(let t of TI)try{t(e)}catch(r){SW.error("Error invalidating user",r)}};Op.onInvalidatedUser=function(e){TI.push(e)}});var Jc=g((Ple,bI)=>{"use strict";var Zi=$(),Yr=P(),DW=jy(),Lle=ys(),Mle=bs(),LW=_n(),{validateEvent:RI}=Pn(),zc=Dn(),MW=require("process"),{resetDatabases:PW}=(Ae(),ie(ke)),UW={[Yr.ITC_EVENT_TYPES.SCHEMA]:vW,[Yr.ITC_EVENT_TYPES.USER]:OI};async function vW(e){let t=RI(e);if(t){Zi.error(t);return}Zi.trace("ITC schemaHandler received schema event:",e),await DW(e.message),await BW(e.message)}a(vW,"schemaHandler");async function BW(e){try{zc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),zc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),zc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=PW();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Zi.error(t)}}a(BW,"syncSchemaMetadata");var AI=[];async function OI(e){try{try{zc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),zc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Zi.warn(r)}let t=RI(e);if(t){Zi.error(t);return}Zi.trace(`ITC userHandler ${Yr.HDB_ITC_CLIENT_PREFIX}${MW.pid} received user event:`,e),await LW.setUsersToGlobal();for(let r of AI)r()}catch(t){Zi.error(t)}}a(OI,"userHandler");OI.addListener=function(e){AI.push(e)};bI.exports=UW});var Pn=g((Gle,NI)=>{"use strict";var vle=$(),bp=z(),xW=P(),{ITC_ERRORS:Xc}=vr(),{parentPort:Ble,threadId:HW,isMainThread:GW,workerData:xle}=require("worker_threads"),{onMessageFromWorkers:qW,broadcast:Hle,broadcastWithAcknowledgement:FW}=Qe();NI.exports={sendItcEvent:kW,validateEvent:yI,SchemaEventMsg:VW,UserEventMsg:$W};var od;qW(async(e,t)=>{od=od||Jc(),yI(e),od[e.type]&&await od[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function kW(e){return!GW&&e.message&&(e.message.originator=HW),FW(e)}a(kW,"sendItcEvent");function yI(e){if(typeof e!="object")return Xc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||bp.isEmpty(e.type))return Xc.MISSING_TYPE;if(!e.hasOwnProperty("message")||bp.isEmpty(e.message))return Xc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||bp.isEmpty(e.message.originator))return Xc.MISSING_ORIGIN;if(xW.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Xc.INVALID_EVENT(e.type)}a(yI,"validateEvent");function VW(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(VW,"SchemaEventMsg");function $W(e){this.originator=e}a($W,"UserEventMsg")});var Ns=g((kle,DI)=>{"use strict";var II=P(),Fle=z(),ad=$(),wI=zy(),ea,{sendItcEvent:CI}=Pn();function YW(e){try{ad.trace("signalSchemaChange called with message:",e),ea=ea||Jc();let t=new wI(II.ITC_EVENT_TYPES.SCHEMA,e);return ea.schema(t),CI(t)}catch(t){ad.error(t)}}a(YW,"signalSchemaChange");function KW(e){try{ad.trace("signalUserChange called with message:",e),ea=ea||Jc();let t=new wI(II.ITC_EVENT_TYPES.USER,e);return ea.user(t),CI(t)}catch(t){ad.error(t)}}a(KW,"signalUserChange");DI.exports={signalSchemaChange:YW,signalUserChange:KW}});var cd=g(($le,MI)=>{"use strict";var LI=z(),WW=P(),QW=$(),zW=q_(),JW=G_(),XW=Ns(),{SchemaEventMsg:jW}=Pn(),ZW="already exists in";MI.exports=eQ;async function eQ(e,t,r){if(LI.isEmptyOrZeroLength(r))return r;let n=[];LI.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 tQ(e,t.schema,t.name,i)})),s}a(eQ,"lmdbCheckForNewAttributes");async function tQ(e,t,r,n){let s=new JW(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await rQ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(ZW))QW.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(tQ,"createNewAttribute");async function rQ(e){let t;return t=await zW(e),XW.signalSchemaChange(new jW(process.pid,WW.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(rQ,"createAttribute")});var ta=g((Kle,PI)=>{"use strict";var yp=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}};PI.exports=yp});var vI=g((Qle,UI)=>{"use strict";var nQ=ta(),sQ=P().OPERATIONS_ENUM,Np=class extends nQ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(sQ.INSERT,r,n,s,i),this.records=t}};UI.exports=Np});var xI=g((Jle,BI)=>{"use strict";var iQ=ta(),oQ=P().OPERATIONS_ENUM,Ip=class extends iQ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(oQ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};BI.exports=Ip});var GI=g((jle,HI)=>{"use strict";var aQ=ta(),cQ=P().OPERATIONS_ENUM,wp=class extends aQ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(cQ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};HI.exports=wp});var FI=g((e_e,qI)=>{"use strict";var uQ=ta(),lQ=P().OPERATIONS_ENUM,Cp=class extends uQ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(lQ.DELETE,n,s,t,i),this.original_records=r}};qI.exports=Cp});var jc=g((n_e,YI)=>{"use strict";var r_e=require("path"),kI=ze(),_Q=vI(),dQ=xI(),fQ=GI(),EQ=FI(),ra=ft(),VI=z(),{CONFIG_PARAMS:hQ}=P(),$I=ee();$I.initSync();var ud=P().OPERATIONS_ENUM,{getTransactionAuditStorePath:mQ}=Xe();YI.exports=pQ;async function pQ(e,t){if($I.get(hQ.LOGGING_AUDITLOG)===!1)return;let r=mQ(e.schema,e.table),n=await kI.openEnvironment(r,e.table,!0),s=SQ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){kI.initializeDBIs(n,ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ra.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),VI.isEmpty(s.user_name)||n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(pQ,"writeTransaction");function SQ(e,t){let r=VI.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===ud.INSERT)return new _Q(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ud.UPDATE)return new dQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ud.UPSERT)return new fQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ud.DELETE)return new EQ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(SQ,"createTransactionObject")});var Dp=g((o_e,KI)=>{"use strict";var TQ=$c(),i_e=Ic(),Zc=P(),gQ=wc(),RQ=Ko().insertRecords,AQ=ze(),OQ=$(),bQ=cd(),{getSchemaPath:yQ}=Xe(),NQ=jc();KI.exports=IQ;async function IQ(e){try{let{schema_table:t,attributes:r}=TQ(e);gQ(e,r,t.hash_attribute),e.schema!==Zc.SYSTEM_SCHEMA_NAME&&(r.includes(Zc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Zc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Zc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Zc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await bQ(e.hdb_auth_header,t,r),s=yQ(e.schema,e.table),i=await AQ.openEnvironment(s,e.table),o=await RQ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await NQ(e,o)}catch(c){OQ.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(IQ,"lmdbCreateRecords")});var zI=g((c_e,QI)=>{"use strict";var WI=P(),wQ=Dp(),CQ=Ic(),DQ=require("fs-extra"),{getSchemaPath:LQ}=Xe();QI.exports=MQ;async function MQ(e){let t=[{name:e.schema,createddate:Date.now()}],r=new CQ(WI.SYSTEM_SCHEMA_NAME,WI.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await wQ(r),await DQ.mkdirp(LQ(e.schema))}a(MQ,"lmdbCreateSchema")});var XI=g((l_e,JI)=>{"use strict";var Lp=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}};JI.exports=Lp});var tw=g((h_e,ew)=>{"use strict";var jI=ze(),Mp=Br(),Pp=vr().LMDB_ERRORS_ENUM,PQ=ft(),ZI=$(),d_e=z(),UQ=require("lmdb"),vQ=XI(),BQ=P(),{OVERFLOW_MARKER:f_e,MAX_SEARCH_KEY_LENGTH:E_e}=PQ,xQ=BQ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function HQ(e,t,r,n){if(Mp.validateEnv(e),t===void 0)throw new Error(Pp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Pp.IDS_REQUIRED):new Error(Pp.IDS_MUST_BE_ITERABLE);try{let s=jI.listDBIs(e);jI.initializeDBIs(e,t,s);let i=new vQ,o,c=[],u=[];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[xQ]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,UQ.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let T=s[S];if(!h.hasOwnProperty(T)||T===t)continue;let A=e.dbis[T],b=h[T];if(b!=null)try{let I=Mp.getIndexedValues(b);if(I)for(let B=0,U=I.length;B<U;B++)A.remove(I[B],o)}catch{ZI.warn(`cannot delete from attribute: ${T}, ${b}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){ZI.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let E=0,f=l.length;E<f;E++)l[E]===!0?i.deleted.push(u[E]):(i.skipped.push(u[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=Mp.getNextMonotonicTime(),i}catch(s){throw s}}a(HQ,"deleteRecords");ew.exports={deleteRecords:HQ}});var eu=g((p_e,nw)=>{"use strict";var na=z(),GQ=tw(),qQ=ze(),{getSchemaPath:FQ}=Xe(),kQ=jc(),VQ=$();nw.exports=$Q;async function $Q(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(na.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(na.isEmptyOrZeroLength(e.hash_values)&&!na.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][n];na.isEmpty(u)||e.hash_values.push(u)}}if(na.isEmptyOrZeroLength(e.hash_values))return rw([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(na.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=FQ(e.schema,e.table),i=await qQ.openEnvironment(s,e.table),o=await GQ.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await kQ(e,o)}catch(c){VQ.error(`unable to write transaction due to ${c.message}`)}return rw(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a($Q,"lmdbDeleteRecords");function rw(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(rw,"createDeleteResponse")});var vp=g((g_e,sw)=>{"use strict";var YQ=P(),T_e=Br();function Up(e,t){let r=Object.create(null);if(t.length===1&&YQ.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(Up,"parseRow");function KQ(e,t,r,n){let s=Up(r,e);n.push(s)}a(KQ,"searchAll");function WQ(e,t,r,n){let s=Up(r,e);n[t]=s}a(WQ,"searchAllToMap");function QQ(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(QQ,"iterateDBI");function eo(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(eo,"pushResults");function zQ(e,t,r,n,s,i){t.toString().endsWith(e)&&eo(t,r,n,s,i)}a(zQ,"endsWith");function JQ(e,t,r,n,s,i){t.toString().includes(e)&&eo(t,r,n,s,i)}a(JQ,"contains");function XQ(e,t,r,n,s,i){t>e&&eo(t,r,n,s,i)}a(XQ,"greaterThanCompare");function jQ(e,t,r,n,s,i){t>=e&&eo(t,r,n,s,i)}a(jQ,"greaterThanEqualCompare");function ZQ(e,t,r,n,s,i){t<e&&eo(t,r,n,s,i)}a(ZQ,"lessThanCompare");function ez(e,t,r,n,s,i){t<=e&&eo(t,r,n,s,i)}a(ez,"lessThanEqualCompare");sw.exports={parseRow:Up,searchAll:KQ,searchAllToMap:WQ,iterateDBI:QQ,endsWith:zQ,contains:JQ,greaterThanCompare:XQ,greaterThanEqualCompare:jQ,lessThanCompare:ZQ,lessThanEqualCompare:ez,pushResults:eo}});var sa=g((y_e,_w)=>{"use strict";var _i=ze(),A_e=$(),Kr=Br(),ld=ft(),ht=vr().LMDB_ERRORS_ENUM,O_e=z(),tz=P(),_d=vp(),{parseRow:rz}=_d,b_e=require("lmdb"),{OVERFLOW_MARKER:iw,MAX_SEARCH_KEY_LENGTH:nz}=ld;function ow(e,t,r,n=!1,s=void 0,i=void 0){return to(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(ow,"iterateFullIndex");function tu(e,t,r,n,s,i=!1,o=void 0,c=void 0,u=!1,_=!1){return to(e,t,r,(l,d,E,f)=>{let A={transaction:l,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return f===r?(A.values=!1,d.getRange(A).map(b=>({value:b}))):d.getRange(A)})}a(tu,"iterateRangeBetween");function to(e,t,r,n){let s=e.database||e,i=_i.openDBI(s,r);i[ld.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&_i.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(to,"setupTransaction");function aw(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(iw)){if(!s)if(r)s=_i.openDBI(e,r);else{let u=_i.listDBIs(e);for(let _=0,l=u.length;_<l&&(s=_i.openDBI(e,u[_]),!s[ld.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(aw,"getOverflowCheck");function sz(e,t,r,n=!1,s=void 0,i=void 0){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return to(e,t,t,(o,c,u)=>(dd(r),r=ru(u,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>rz(_.value,r))))}a(sz,"searchAll");function iz(e,t,r,n=!1,s=void 0,i=void 0){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);dd(r),r=ru(e.database||e,r);let o=new Map;for(let{key:c,value:u}of ow(e,t,t,n,s,i))o.set(c,_d.parseRow(u,r));return o}a(iz,"searchAllToMap");function oz(e,t,r=!1,n=void 0,s=void 0){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=ow(e,void 0,t,r,n,s),c=o.transaction,u=aw(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(oz,"iterateDBI");function az(e,t){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return _i.statDBI(e,t).entryCount}a(az,"countAll");function cz(e,t,r,n,s=!1,i=void 0,o=void 0){return di(e,r,n),to(e,t,r,(c,u,_,l)=>(n=Kr.convertKeyValueToWrite(n),l===r?u.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:u.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(cz,"equals");function uz(e,t,r){return di(e,t,r),_i.openDBI(e,t).getValuesCount(r)}a(uz,"count");function lz(e,t,r,n,s=!1,i=void 0,o=void 0){return di(e,r,n),to(e,null,r,(c,u)=>{n=Kr.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let l;if(s===!0){let d;for(let E of u.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){d=E;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.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 l.DONE}}),l.filter(E=>E)}else return l=u.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(lz,"startsWith");function _z(e,t,r,n,s=!1,i=void 0,o=void 0){return cw(e,t,r,n,s,i,o,!0)}a(_z,"endsWith");function cw(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return di(e,r,n),to(e,null,r,(u,_,l,d)=>{let E=aw(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(iw)?_.getValues(f,{transaction:u}).map(p=>{let S=E(f,p);if(c?S.endsWith(n):S.includes(n))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(n):h.includes(n))?_[ld.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:_.getValues(f,{transaction:u}).map(p=>({key:f,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(cw,"contains");function dz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),tu(e,t,r,n,u,s,i,o,!0,!1)}a(dz,"greaterThan");function fz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),tu(e,t,r,n,u,s,i,o,!1,!1)}a(fz,"greaterThanEqual");function Ez(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),tu(e,t,r,u,n,s,i,o,!1,!0)}a(Ez,"lessThan");function hz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),tu(e,t,r,u,n,s,i,o,!1,!1)}a(hz,"lessThanEqual");function mz(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Kr.validateEnv(e),r===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(ht.START_VALUE_REQUIRED);if(s===void 0)throw new Error(ht.END_VALUE_REQUIRED);if(n=Kr.convertKeyValueToWrite(n),s=Kr.convertKeyValueToWrite(s),n>s)throw new Error(ht.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return tu(e,t,r,n,s,i,o,c)}a(mz,"between");function pz(e,t,r,n){Kr.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(dd(r),r=ru(s,r),n===void 0)throw new Error(ht.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=_d.parseRow(c,r)),o}a(pz,"searchByHash");function Sz(e,t,r){Kr.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(Sz,"checkHashExists");function Tz(e,t,r,n,s=[]){return lw(e,t,r,n,s),uw(e,t,r,n,s).map(i=>i[1])}a(Tz,"batchSearchByHash");function gz(e,t,r,n,s=[]){lw(e,t,r,n,s);let i=new Map;for(let[o,c]of uw(e,t,r,n,s))i.set(o,c);return i}a(gz,"batchSearchByHashToMap");function uw(e,t,r,n,s=[]){return to(e,t,t,(i,o,c)=>{r=ru(c,r);let u=r.length<3;return n.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,_d.parseRow(l,r)];s.push(_)}).filter(_=>_)})}a(uw,"batchHashSearch");function lw(e,t,r,n,s){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(dd(r),n==null)throw new Error(ht.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(ht.IDS_MUST_BE_ITERABLE)}a(lw,"initializeBatchSearchByHash");function dd(e){if(!Array.isArray(e))throw e===void 0?new Error(ht.FETCH_ATTRIBUTES_REQUIRED):new Error(ht.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(dd,"validateFetchAttributes");function di(e,t,r){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.SEARCH_VALUE_REQUIRED);if(r?.length>nz)throw new Error(ht.SEARCH_VALUE_TOO_LARGE)}a(di,"validateComparisonFunctions");function ru(e,t){return t.length===1&&tz.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=_i.listDBIs(e)),t}a(ru,"setGetWholeRowAttributes");_w.exports={searchAll:sz,searchAllToMap:iz,count:uz,countAll:az,equals:cz,startsWith:lz,endsWith:_z,contains:cw,searchByHash:pz,setGetWholeRowAttributes:ru,batchSearchByHash:Tz,batchSearchByHashToMap:gz,checkHashExists:Sz,iterateDBI:oz,greaterThan:dz,greaterThanEqual:fz,lessThan:Ez,lessThanEqual:hz,between:mz}});var ia=g((I_e,mw)=>{var dw=require("lodash"),fw=je(),he=require("joi"),Rz=z(),{hdb_schema_table:nu,checkValidTable:Ew,hdb_table:hw,hdb_database:fd}=Xn(),{handleHDBError:Az,hdb_errors:Oz}=se(),{getDatabases:bz}=(Ae(),ie(ke)),{HTTP_STATUS_CODES:yz}=Oz,Nz=he.object({database:fd,schema:fd,table:hw,search_attribute:nu,search_value:he.any().required(),get_attributes:he.array().min(1).items(he.alternatives(nu,he.object())).optional(),desc:he.bool(),limit:he.number().integer().min(1),offset:he.number().integer().min(0)}),Iz=he.object({database:fd,schema:fd,table:hw,operator:he.string().valid("and","or").default("and").lowercase(),offset:he.number().integer().min(0),limit:he.number().integer().min(1),get_attributes:he.array().min(1).items(he.alternatives(nu,he.object())).optional(),sort:he.object({attribute:he.alternatives(nu,he.array().min(1)),descending:he.bool().optional()}).optional(),conditions:he.array().min(1).items(he.alternatives(he.object({operator:he.string().valid("and","or").default("and").lowercase(),conditions:he.array()}),he.object({search_attribute:he.alternatives(nu,he.array().min(1)),search_type:he.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:he.when("search_type",{switch:[{is:"equals",then:he.any()},{is:"between",then:he.array().items(he.alternatives([he.string(),he.number()])).length(2)}],otherwise:he.alternatives(he.string(),he.number())}).required()}))).required()});mw.exports=function(e,t){let r=null;switch(t){case"value":r=fw.validateBySchema(e,Nz);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(Ew("database",e.schema)),i(Ew("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=fw.validateBySchema(e,Iz);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Rz.checkGlobalSchemaTable(e.schema,e.table);if(s)return Az(new Error,s,yz.NOT_FOUND);let o=bz()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let u=a(l=>{for(let d=0,E=l.conditions.length;d<E;d++){let f=l.conditions[d];f.conditions?u(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=dw.filter(c,l=>l!=="*"&&!l.startsWith?.("$")&&l.attribute!=="*"&&!Array.isArray(l)&&!l.name&&!dw.some(o,d=>d===l||d.attribute===l||d.attribute===l.attribute));if(_&&_.length>0){let l=_.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var Bp=g((C_e,pw)=>{"use strict";var wz=ze(),Cz=ia(),{getSchemaPath:Dz}=Xe();pw.exports=Lz;function Lz(e){let t=Cz(e,"hashes");if(t)throw t;let r=Dz(e.schema,e.table);return wz.openEnvironment(r,e.table)}a(Lz,"initialize")});var xp=g((L_e,Sw)=>{"use strict";var Mz=sa(),Pz=Bp();Sw.exports=Uz;async function Uz(e){let t=await Pz(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Mz.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Uz,"lmdbGetDataByHash")});var oa=g((P_e,Tw)=>{"use strict";var Hp=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};Tw.exports=Hp});var Rw=g((B_e,gw)=>{"use strict";var v_e=oa(),vz=sa(),Bz=Bp();gw.exports=xz;async function xz(e){let t=await Bz(e),r=global.hdb_schema[e.schema][e.table];return vz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(xz,"lmdbSearchByHash")});var rs=g((H_e,Aw)=>{"use strict";var Gp=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,u=!1,_=void 0,l=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=u,this.limit=_,this.offset=l}};Aw.exports=Gp});var Ed=g((q_e,ww)=>{"use strict";var rr=sa(),Hz=ze(),Gz=z(),me=ft(),ro=P(),qz=Vi(),Ow=vr().LMDB_ERRORS_ENUM,{getSchemaPath:Fz}=Xe(),Is=ro.SEARCH_WILDCARDS;async function kz(e,t,r){let n;e.schema===ro.SYSTEM_SCHEMA_NAME?n=qz[e.table]:n=global.hdb_schema[e.schema][e.table];let s=Iw(e,n.hash_attribute,r,t);return yw(e,s,n.hash_attribute,r)}a(kz,"prepSearch");async function yw(e,t,r,n){let s=Fz(e.schema,e.table),i=await Hz.openEnvironment(s,e.table),o=Nw(i,e,t,r),c=o.transaction||i;if([me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,me.SEARCH_TYPES.SEARCH_ALL,me.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(Vz(e,r)===!1){let l=e.search_attribute;if(l===r)return n?bw(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[l]:E.key}),"toObject");return n?bw(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return n===!0?rr.batchSearchByHashToMap(c,r,e.get_attributes,_):rr.batchSearchByHash(c,r,e.get_attributes,_)}a(yw,"executeSearch");function Nw(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case me.SEARCH_TYPES.EQUALS:s=rr.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.CONTAINS:s=rr.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.ENDS_WITH:case me.SEARCH_TYPES._ENDS_WITH:s=rr.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.STARTS_WITH:case me.SEARCH_TYPES._STARTS_WITH:s=rr.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return rr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return rr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case me.SEARCH_TYPES.SEARCH_ALL:return rr.searchAll(e,n,t.get_attributes,o,c,u);case me.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return rr.searchAllToMap(e,n,t.get_attributes,o,c,u);case me.SEARCH_TYPES.BETWEEN:s=rr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case me.SEARCH_TYPES.GREATER_THAN:case me.SEARCH_TYPES._GREATER_THAN:s=rr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.GREATER_THAN_EQUAL:case me.SEARCH_TYPES._GREATER_THAN_EQUAL:s=rr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.LESS_THAN:case me.SEARCH_TYPES._LESS_THAN:s=rr.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.LESS_THAN_EQUAL:case me.SEARCH_TYPES._LESS_THAN_EQUAL:s=rr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return s}a(Nw,"searchByType");function bw(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(bw,"createMapFromIterable");function Vz(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(Vz,"checkToFetchMore");function Iw(e,t,r,n){if(Gz.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),Is.indexOf(s)>-1)return r===!0?me.SEARCH_TYPES.SEARCH_ALL_TO_MAP:me.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Is[0])<0&&s.indexOf(Is[1])<0)return c===!0?r===!0?me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:me.SEARCH_TYPES.EQUALS;if(Is.indexOf(i)>=0&&Is.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),me.SEARCH_TYPES.CONTAINS;if(Is.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),me.SEARCH_TYPES.ENDS_WITH;if(Is.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),me.SEARCH_TYPES.STARTS_WITH;if(s.includes(Is[0])||s.includes(Is[1]))return me.SEARCH_TYPES.EQUALS;throw new Error(Ow.UNKNOWN_SEARCH_TYPE)}else switch(n){case ro.VALUE_SEARCH_COMPARATORS.BETWEEN:return me.SEARCH_TYPES.BETWEEN;case ro.VALUE_SEARCH_COMPARATORS.GREATER:return me.SEARCH_TYPES.GREATER_THAN;case ro.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return me.SEARCH_TYPES.GREATER_THAN_EQUAL;case ro.VALUE_SEARCH_COMPARATORS.LESS:return me.SEARCH_TYPES.LESS_THAN;case ro.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return me.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Ow.UNKNOWN_SEARCH_TYPE)}}a(Iw,"createSearchTypeFromSearchObject");ww.exports={executeSearch:yw,createSearchTypeFromSearchObject:Iw,prepSearch:kz,searchByType:Nw}});var Dw=g((V_e,Cw)=>{"use strict";var k_e=rs(),$z=ia(),Yz=z(),Kz=P(),Wz=Ed();Cw.exports=Qz;function Qz(e,t){if(!Yz.isEmpty(t)&&Kz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=$z(e,"value");if(n)throw n;return Wz.prepSearch(e,t,!0)}a(Qz,"lmdbGetDataByValue")});var su=g((K_e,Lw)=>{"use strict";var Y_e=rs(),zz=ia(),Jz=z(),Xz=P(),jz=Ed();Lw.exports=Zz;async function Zz(e,t){if(!Jz.isEmpty(t)&&Xz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=zz(e,"value");if(n)throw n;return jz.prepSearch(e,t,!1)}a(Zz,"lmdbSearchByValue")});var Pw=g((z_e,Mw)=>{"use strict";var Q_e=ft(),qp=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}},Fp=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},kp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Mw.exports={SearchByConditionsObject:qp,SearchCondition:Fp,SortAttribute:kp}});var Hw=g((Z_e,xw)=>{"use strict";var X_e=Pw().SearchByConditionsObject,eJ=rs(),tJ=ia(),Vp=sa(),hd=ft(),{Resource:j_e}=(cn(),ie($p)),Bw=Ed(),rJ=vp(),nJ=require("lodash"),{getSchemaPath:sJ}=Xe(),Uw=ze(),{handleHDBError:iJ,hdb_errors:oJ}=se(),{HTTP_STATUS_CODES:aJ}=oJ,cJ=1e8;xw.exports=uJ;async function uJ(e){let t=tJ(e,"conditions");if(t)throw iJ(t,t.message,aJ.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=sJ(e.schema,e.table),n=await Uw.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)Uw.openDBI(n,_.search_attribute);let i=nJ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===hd.SEARCH_TYPES.EQUALS?_.estimated_count=Vp.count(n,_.search_attribute,_.search_value):l===hd.SEARCH_TYPES.CONTAINS||l===hd.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=cJ}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await vw(o,e,i[0],s.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],l=i.slice(1).map(Bw.filterByType),d=l.length,E=Vp.setGetWholeRowAttributes(n,e.get_attributes);u=c.map(f=>_.get(f,{transaction:o,lazy:!0})),d>0&&(u=u.filter(f=>{for(let h=0;h<d;h++)if(!l[h](f))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(f=>rJ.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await vw(o,e,E,s.hash_attribute);c=c.concat(f)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=Vp.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(uJ,"lmdbSearchByConditions");async function vw(e,t,r,n){let s=new eJ(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===hd.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,Bw.searchByType(e,s,i,n).map(o=>o.value)}a(vw,"executeConditionSearch")});var aa=g((tde,Gw)=>{"use strict";var lJ=P().OPERATIONS_ENUM,Yp=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=lJ.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};Gw.exports=Yp});var Kp=g((nde,Ww)=>{"use strict";var Vw=rs(),$w=aa(),Yw=su(),Kw=eu(),hr=P(),qw=z(),Fw=ze(),{getTransactionAuditStorePath:_J,getSchemaPath:dJ}=Xe(),kw=$();Ww.exports=fJ;async function fJ(e){try{if(qw.isEmpty(global.hdb_schema[e.schema])||qw.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await EJ(e),await hJ(e);let t=dJ(e.schema,e.table);try{await Fw.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")kw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=_J(e.schema,e.table);await Fw.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")kw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(fJ,"lmdbDropTable");async function EJ(e){let t=new Vw(hr.SYSTEM_SCHEMA_NAME,hr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Yw(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 $w(hr.SYSTEM_SCHEMA_NAME,hr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await Kw(s)}a(EJ,"deleteAttributesFromSystem");async function hJ(e){let t=new Vw(hr.SYSTEM_SCHEMA_NAME,hr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await Yw(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 $w(hr.SYSTEM_SCHEMA_NAME,hr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await Kw(s)}catch(i){throw i}}a(hJ,"dropTableFromSystem")});var zw=g((ide,Qw)=>{"use strict";var mJ=require("fs-extra"),pJ=rs(),SJ=oa(),TJ=aa(),gJ=Kp(),RJ=eu(),AJ=xp(),OJ=su(),ws=P(),{getSchemaPath:bJ}=Xe(),{handleHDBError:yJ,hdb_errors:NJ}=se(),{HDB_ERROR_MSGS:IJ,HTTP_STATUS_CODES:wJ}=NJ;Qw.exports=CJ;async function CJ(e){let t;try{t=await DJ(e.schema);let r=new pJ(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await OJ(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await gJ(c)}catch(u){if(u.message!=="invalid environment")throw u}}let s=new TJ(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await RJ(s);let i=bJ(t);await mJ.remove(i)}catch(r){throw r}}a(CJ,"lmdbDropSchema");async function DJ(e){let t=new SJ(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await AJ(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw yJ(new Error,IJ.SCHEMA_NOT_FOUND(e),wJ.NOT_FOUND,void 0,void 0,!0);return n}a(DJ,"validateDropSchema")});var md=g((ade,Jw)=>{"use strict";var Wp=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};Jw.exports=Wp});var jw=g((lde,Xw)=>{"use strict";var LJ=require("fs-extra"),pd=ze(),{getTransactionAuditStorePath:MJ}=Xe(),Qp=ft(),ude=md();Xw.exports=PJ;async function PJ(e){let t;try{let r=MJ(e.schema,e.table);await LJ.mkdirp(r),t=await pd.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{pd.createDBI(t,Qp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),pd.createDBI(t,Qp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),pd.createDBI(t,Qp.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(PJ,"createTransactionsAuditEnvironment")});var rC=g((dde,tC)=>{"use strict";var zp=P(),Zw=ze(),UJ=Ko(),{getSystemSchemaPath:vJ,getSchemaPath:BJ}=Xe(),xJ=Vi(),HJ=q_(),Jp=G_(),GJ=$(),qJ=jw(),jp=xJ.hdb_table,eC=[];for(let e=0;e<jp.attributes.length;e++)eC.push(jp.attributes[e].attribute);tC.exports=FJ;async function FJ(e,t){let r=BJ(t.schema,t.table),n=new Jp(t.schema,t.table,zp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Jp(t.schema,t.table,zp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Jp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Zw.createEnvironment(r,t.table),e!==void 0){let o=await Zw.openEnvironment(vJ(),zp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await UJ.insertRecords(o,jp.hash_attribute,eC,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Xp(n),await Xp(s),await Xp(i)}await qJ(t)}catch(o){throw o}}a(FJ,"lmdbCreateTable");async function Xp(e){try{await HJ(e)}catch(t){GJ.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Xp,"createAttribute")});var sC=g((Ede,nC)=>{"use strict";var kJ=$c(),VJ=wc(),$J=cd(),iu=P(),YJ=Ko().updateRecords,KJ=ze(),{getSchemaPath:WJ}=Xe(),QJ=jc(),zJ=$();nC.exports=JJ;async function JJ(e){try{let{schema_table:t,attributes:r}=kJ(e);VJ(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 $J(e.hdb_auth_header,t,r),s=WJ(e.schema,e.table),i=await KJ.openEnvironment(s,e.table),o=await YJ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await QJ(e,o)}catch(c){zJ.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(JJ,"lmdbUpdateRecords")});var oC=g((mde,iC)=>{"use strict";var XJ=P().OPERATIONS_ENUM,Zp=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=XJ.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};iC.exports=Zp});var cC=g((Tde,aC)=>{"use strict";var Sde=oC(),jJ=$c(),ZJ=wc(),e2=cd(),ou=P(),t2=Ko().upsertRecords,r2=ze(),{getSchemaPath:n2}=Xe(),s2=jc(),i2=$(),{handleHDBError:o2,hdb_errors:a2}=se();aC.exports=c2;async function c2(e){let t;try{t=jJ(e)}catch(u){throw o2(u,u.message,a2.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;ZJ(e,n,r.hash_attribute),e.schema!==ou.SYSTEM_SCHEMA_NAME&&(n.includes(ou.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(ou.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(ou.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(ou.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await e2(e.hdb_auth_header,r,n),i=n2(e.schema,e.table),o=await r2.openEnvironment(i,e.table),c=await t2(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await s2(e,c)}catch(u){i2.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(c2,"lmdbUpsertRecords")});var lC=g((Rde,uC)=>{"use strict";var eS=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};uC.exports=eS});var dC=g((Ode,_C)=>{"use strict";var tS=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}};_C.exports=tS});var hC=g((Nde,EC)=>{"use strict";var rS=ze(),{getTransactionAuditStorePath:u2}=Xe(),yde=lC(),au=ft(),l2=z(),fC=dC(),_2=require("util").promisify,d2=_2(setTimeout),f2=1e4,E2=100;EC.exports=h2;async function h2(e){let t=u2(e.schema,e.table),r=await rS.openEnvironment(t,e.table,!0),n=rS.listDBIs(r);rS.initializeDBIs(r,au.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new fC;do s=await m2(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 d2(E2);while(s.transactions_deleted>0);return i}a(h2,"deleteAuditLogsBefore");async function m2(e,t){let r=new fC;try{let n=e.dbis[au.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[au.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];l2.isEmpty(c)||(s=e.dbis[au.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)s=e.dbis[au.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>f2)break}return await s,r}catch(n){throw n}}a(m2,"deleteTransactions")});var pC=g((wde,mC)=>{"use strict";var nS=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};mC.exports=nS});var TC=g((Lde,SC)=>{"use strict";var p2=rs(),S2=aa(),Dde=pC(),ns=P(),T2=z(),sS=ze(),g2=Vi(),R2=su(),A2=eu(),{getSchemaPath:O2}=Xe();SC.exports=b2;async function b2(e,t=!0){let r;e.schema===ns.SYSTEM_SCHEMA_NAME?r=g2[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await N2(e),s=O2(e.schema,e.table),i=await sS.openEnvironment(s,e.table);return t===!0&&await y2(e,i,r.hash_attribute),sS.dropDBI(i,e.attribute),n}a(b2,"lmdbDropAttribute");async function y2(e,t,r){let n=sS.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:u}of n.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);s=t.dbis[r].put(o,_,u)}await s}a(y2,"removeAttributeFromAllObjects");async function N2(e){let t=new p2(ns.SYSTEM_SCHEMA_NAME,ns.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await R2(t)).filter(o=>o[ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(T2.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new S2(ns.SYSTEM_SCHEMA_NAME,ns.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return A2(i)}a(N2,"dropAttributeFromSystem")});var yC=g((Ude,bC)=>{"use strict";var iS=ze(),ca=ft(),Pde=Br(),oS=P(),gC=z(),{getTransactionAuditStorePath:I2}=Xe(),w2=sa(),Sd=ta(),C2=$();bC.exports=D2;async function D2(e){let t=I2(e.schema,e.table),r=await iS.openEnvironment(t,e.table,!0),n=iS.listDBIs(r);iS.initializeDBIs(r,ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case oS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return RC(r,e.search_values);case oS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,M2(r,e.search_values,s);case oS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return L2(r,e.search_values);default:return RC(r)}}a(D2,"readAuditLog");function RC(e,t=[0,Date.now()]){gC.isEmpty(t[0])&&(t[0]=0),gC.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ca.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 Sd,s))}a(RC,"searchTransactionsByTimestamp");function L2(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[ca.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,OC(e,i))}return Object.fromEntries(r)}a(L2,"searchTransactionsByUsername");function M2(e,t,r){let n=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=w2.equals(e,ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ca.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let E=Number(d);n.has(E)?n.get(E).push(_.toString()):n.set(E,[_.toString()])}}let s=Array.from(n.keys()),i=OC(e,s),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=n.get(_);AC(u,"records",r,l,o),AC(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(M2,"searchTransactionsByHashValues");function AC(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],u=c[r].toString();if(n.indexOf(u)>=0)if(s.has(u)){let _=s.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new Sd(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Sd(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(u,[_])}}}a(AC,"loopRecords");function OC(e,t){let r=[];try{let n=e.dbis[ca.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 Sd,i);r.push(o)}}catch(i){C2.warn(i)}return r}catch(n){throw n}}a(OC,"batchSearchTransactions")});var IC=g((Hde,NC)=>{"use strict";var{getSchemaPath:Bde}=Xe(),xde=ze(),{database:P2}=(Ae(),ie(ke));NC.exports={writeTransaction:U2};async function U2(e,t,r){return P2({database:e,table:t}).transaction(r)}a(U2,"writeTransaction")});var LC=g((qde,DC)=>{"use strict";var{getSchemaPath:wC}=Xe(),CC=ze();DC.exports={flush:v2,resetReadTxn:B2};async function v2(e,t){return(await CC.openEnvironment(wC(e,t),t.toString())).flushed}a(v2,"flush");async function B2(e,t){try{(await CC.openEnvironment(wC(e,t),t.toString())).resetReadTxn()}catch{}}a(B2,"resetReadTxn")});var vC=g((kde,UC)=>{"use strict";var{Readable:x2}=require("stream"),{getDatabases:H2}=(Ae(),ie(ke)),{readSync:G2,openSync:q2,createReadStream:MC}=require("fs"),{open:F2}=require("lmdb"),PC=xc(),k2=Hc(),{AUDIT_STORE_OPTIONS:V2}=(ni(),ie(BC)),{INTERNAL_DBIS_NAME:$2,AUDIT_STORE_NAME:Y2}=ft();UC.exports=W2;var aS=32768,K2=100;async function W2(e){let t=e.database||e.schema||"data",r=H2()[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 l=_.dbisDB,d=F2({noSync:!0,maxDbs:k2.MAX_DBS}),E,f=d.openDB($2,new PC(!1)),h=l.useReadTransaction(),p=0,S=a(async function(A,b){b.encoding="binary",b.encoder=void 0;let I=d.openDB(A,b),B=l.openDB(A,b);for(let{key:U,version:F,value:M}of B.getRange({start:null,transaction:h,versions:B.useVersions}))E=I.put(U,M,F),p++%K2===0&&(await new Promise(Q=>setTimeout(Q,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:A,value:b}of l.getRange({transaction:h,start:!1}))if(s.some(I=>A.startsWith?.(I+"/"))){f.put(A,b);let[,I]=A.split("/"),B=!I,U=new PC(!B,B);await S(A,U)}e.include_audit&&await S(Y2,Object.assign({},V2)),await E;let T=MC(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=q2(o.path);return o.transaction(()=>{let _=Buffer.alloc(aS);G2(c,_,0,aS),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=MC(null,{fd:c,start:aS}),E=new x2.from(async function*(){yield _;for await(let f of d)l.openTimer&&(l.openTimer=0),yield f;l.done()}());return E.headers=u(),E});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(W2,"getBackup")});var GC=g(($de,HC)=>{"use strict";var Q2=$(),{handleHDBError:z2}=se(),J2=ey(),X2=q_(),j2=Dp(),Z2=zI(),e4=eu(),t4=xp(),r4=Rw(),n4=Dw(),s4=su(),i4=Hw(),o4=zw(),a4=rC(),c4=sC(),u4=cC(),l4=hC(),_4=Kp(),d4=TC(),f4=yC(),E4=IC(),xC=LC(),h4=vC(),cS=class extends J2{static{a(this,"LMDBBridge")}async searchByConditions(t){return i4(t)}async getDataByHash(t){return await t4(t)}async searchByHash(t){return await r4(t)}async getDataByValue(t,r){return await n4(t,r)}async searchByValue(t){return await s4(t)}async createSchema(t){return await Z2(t)}async dropSchema(t){return await o4(t)}async createTable(t,r){return await a4(t,r)}async dropTable(t){return await _4(t)}async createAttribute(t){return await X2(t)}async createRecords(t){return await j2(t)}async updateRecords(t){return await c4(t)}async upsertRecords(t){try{return await u4(t)}catch(r){throw z2(r,null,null,Q2.ERR,r)}}async deleteRecords(t){return await e4(t)}async dropAttribute(t){return await d4(t)}async deleteAuditLogsBefore(t){return await l4(t)}async readAuditLog(t){return await f4(t)}writeTransaction(t,r,n){return E4.writeTransaction(t,r,n)}flush(t,r){return xC.flush(t,r)}resetReadTxn(t,r){return xC.resetReadTxn(t,r)}getBackup(t){return h4(t)}};HC.exports=cS});function T4(){S4=setInterval(function(){for(let e of uS)if(e.stale){let t=e[ye]?.url;VC.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},p4).unref()}var lS,kC,VC,$C,YC,KC,qC,uS,m4,cu,FC,no,Td,p4,S4,_S=Re(()=>{lS=H(Br()),kC=H(se()),VC=H($());cn();$C=H(ee()),YC=H(P()),KC=H(z()),qC=100,uS=new Set,m4=(0,KC.convertToMS)($C.get(YC.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,no=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),uS.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(uS.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(cu&&!this.overloadChecked&&performance.now()-FC>m4)throw new kC.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,lS.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 p=d;p<this.validated;p++){let S=this.writes[p];if(!S)continue;let T=S[f===0?"before":"beforeIntermediate"];if(T){let A=T();h?h.push?h.push(A):h=[h,A]:h=A}}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"),u=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,u);s=s||E}else u();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)<qC>>n?u():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 cu||(cu=s,FC=performance.now(),cu.then(()=>{cu=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)+qC/2),t?t.retries=n+1:t={retries:1},this.commit(t)));let l={txnTime:r};if(this.next){let d=this.next?.commit(t);if(d?.then)return d?.then(E=>({txnTime:r,next:E}));l.next=d}return l}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},Td=class extends no{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,lS.getNextMonotonicTime)())}getReadTxn(){}},p4=3e4;a(T4,"startMonitoringTxns");T4()});function rt(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 no;e.timestamp&&(n.timestamp=e.timestamp),n[ye]=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 u=n.commit({letItLinger:r?.letItLinger});return u.then?u.then(()=>c):c}function o(c){throw n.abort({}),c}}var WC,so=Re(()=>{WC=require("../index");cn();_S();a(rt,"transaction");(0,WC._assignPackageExport)("transaction",rt);rt.commit=function(e){let t=(e[ye]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};rt.abort=function(e){let t=(e[ye]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var tD={};Fe(tD,{ResourceBridge:()=>ES});function hS({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 zC(e,t){let r=ss(e),n=hS(e,r);if(!r)throw new Un.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;rt(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l;try{l=await r.get({id:_,lazy:s,select:n},i),l=l&&Rd(l)}catch(d){l={message:d.toString()}}return t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function ss(e){let t=e.database||e.schema||R4,r=mr()[t];if(!r)throw(0,Un.handleHDBError)(new Error,g4.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function JC(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*XC(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:u}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(u)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[u]})}n&&(yield n)}var jC,gd,Un,ZC,vn,dS,fS,eD,g4,R4,A4,O4,QC,ES,rD=Re(()=>{"use strict";jC=H(GC()),gd=H(ia()),Un=H(se());Ae();ZC=H($c()),vn=H(P()),dS=H(Ns()),fS=H(Pn()),eD=H(z());so();Ad();({HDB_ERROR_MSGS:g4}=Un.hdb_errors),R4="data",A4=1e4,O4=10,ES=class extends jC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),QC=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,gd.default)(t,"conditions");if(r)throw(0,Un.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=ss(t);if(!n)throw new Un.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:hS(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 Un.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Et({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await ss(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=ss(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,u)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,u),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){ss(t).dropTable()}createSchema(t){return ua({database:t.schema,table:null}),dS.signalSchemaChange(new fS.SchemaEventMsg(process.pid,vn.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await mS(t.schema),dS.signalSchemaChange(new fS.SchemaEventMsg(process.pid,vn.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,QC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,ZC.default)(t),s,i=mr()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return rt(o,async c=>{if(!i.schemaDefined){s=[];for(let l of n)i.attributes.find(E=>E.name==l)||s.push(l);s.length>0&&await i.addAttributes(s.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=l[i.primaryKey],E=d!=null&&await i.get(d,o);if(t.requires_existing&&!E||t.requires_no_existing&&E){_.push(l[i.primaryKey]);continue}E&&(E=Rd(E));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let h=l[f];if(typeof h=="function")try{let p=h([[E]]);Array.isArray(p)&&(h=p[0].func_val,l[f]=h)}catch(p){throw p.message+="Trying to set key "+f+" on object"+JSON.stringify(l),p}}if(E)for(let f in E)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=E[f]);await(d==null?i.create(l,o):i.put(l,o)),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=mr()[t.schema][t.table],n={user:t.hdb_user};return rt(n,async s=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,n)?o.push(u):c.push(u);return JC(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=mr()[t.schema][t.table];if(!r.createdTimeProperty)throw new Un.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:vn.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,eD.async_set_timeout)(O4),u=[],s=!0},"chunkDelete");for await(let l of n)u.push(l[r.primaryKey]),c++,c%A4===0&&await _();return u.length>0&&await _(),s?JC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,gd.default)(t,"hashes");if(r)throw r;return zC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of zC(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&vn.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,gd.default)(t,"value");if(n)throw n;let s=ss(t);if(!s)throw new Un.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===vn.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:hS(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache})}async getDataByValue(t,r){let n=new Map,s=ss(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){ss({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return ss(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=ss(t),n={};switch(t.search_type){case vn.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 vn.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of XC(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return XC(r,t.search_values?.[0],t.search_values?.[1])}}};a(hS,"getSelect");a(zC,"getRecords");a(ss,"getTable");a(JC,"createDeleteResponse");a(XC,"groupRecordsInHistory")});var Dn=g((ife,nD)=>{"use strict";var{ResourceBridge:b4}=(rD(),ie(tD)),y4=ee();y4.initSync();var Od;function N4(){return Od||(Od=new b4,Od)}a(N4,"getBridge");nD.exports=N4()});var aD=g((afe,oD)=>{"use strict";var sD=require("lodash"),uu=require("mathjs"),I4=require("jsonata"),iD=z();oD.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?sD.uniqWith(e,sD.isEqual):e,searchJSON:w4,mad:lu.bind(null,uu.mad),mean:lu.bind(null,uu.mean),mode:lu.bind(null,uu.mode),prod:lu.bind(null,uu.prod),median:lu.bind(null,uu.median)};function lu(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(lu,"aggregateFunction");function w4(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(iD.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),iD.isEmpty(this.__ala__.res[r])){let n=I4(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(w4,"searchJSON")});var uD=g((ufe,cD)=>{"use strict";var Rt=require("moment"),pS="YYYY-MM-DDTHH:mm:ss.SSSZZ";Rt.suppressDeprecationWarnings=!0;cD.exports={current_date:()=>Rt().utc().format("YYYY-MM-DD"),current_time:()=>Rt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Rt(e).utc().format("YYYY");case"month":return Rt(e).utc().format("MM");case"day":return Rt(e).utc().format("DD");case"hour":return Rt(e).utc().format("HH");case"minute":return Rt(e).utc().format("mm");case"second":return Rt(e).utc().format("ss");case"millisecond":return Rt(e).utc().format("SSS");default:break}},date:e=>Rt(e).utc().format(pS),date_format:(e,t)=>Rt(e).utc().format(t),date_add:(e,t,r)=>Rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=Rt(e).utc(),s=Rt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>Rt().utc().valueOf(),get_server_time:()=>Rt().format(pS),offset_utc:(e,t)=>Rt(e).utc().utcOffset(t).format(pS)}});var fD=g((lfe,dD)=>{"use strict";var C4=require("@turf/area"),D4=require("@turf/length"),L4=require("@turf/circle"),M4=require("@turf/difference"),P4=require("@turf/distance"),U4=require("@turf/boolean-contains"),v4=require("@turf/boolean-equal"),B4=require("@turf/boolean-disjoint"),x4=require("@turf/helpers"),lD=P(),Te=z(),Cs=$();dD.exports={geoArea:H4,geoLength:G4,geoCircle:q4,geoDifference:F4,geoDistance:_D,geoNear:k4,geoContains:V4,geoEqual:$4,geoCrosses:Y4,geoConvert:K4};function H4(e){if(Te.isEmpty(e))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return C4.default(e)}catch(t){return Cs.trace(t,e),NaN}}a(H4,"geoArea");function G4(e,t){if(Te.isEmpty(e))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return D4.default(e,{units:t||"kilometers"})}catch(r){return Cs.trace(r,e),NaN}}a(G4,"geoLength");function q4(e,t,r){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return L4.default(e,t,{units:r||"kilometers"})}catch(n){return Cs.trace(n,e,t),NaN}}a(q4,"geoCircle");function F4(e,t){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return M4(e,t)}catch(r){return Cs.trace(r,e,t),NaN}}a(F4,"geoDifference");function _D(e,t,r){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return P4.default(e,t,{units:r||"kilometers"})}catch(n){return Cs.trace(n,e,t),NaN}}a(_D,"geoDistance");function k4(e,t,r,n){if(Te.isEmpty(e)||Te.isEmpty(t))return!1;if(Te.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return _D(e,t,n)<=r}catch(s){return Cs.trace(s,e,t),!1}}a(k4,"geoNear");function V4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return U4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a(V4,"geoContains");function $4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return v4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a($4,"geoEqual");function Y4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return!B4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a(Y4,"geoCrosses");function K4(e,t,r){if(Te.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Te.isEmpty(t))throw new Error("geo_type is required");if(Te.isEmpty(lD.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(lD.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Te.autoCastJSON(e)),x4[t](e,r)}a(K4,"geoConvert")});var bd=g((dfe,ED)=>{var io=aD(),Wr=uD(),is=fD();ED.exports=e=>{e.aggr.mad=e.aggr.MAD=io.mad,e.aggr.mean=e.aggr.MEAN=io.mean,e.aggr.mode=e.aggr.MODE=io.mode,e.aggr.prod=e.aggr.PROD=io.prod,e.aggr.median=e.aggr.MEDIAN=io.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=io.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=io.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Wr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Wr.current_time,e.fn.extract=e.fn.EXTRACT=Wr.extract,e.fn.date=e.fn.DATE=Wr.date,e.fn.date_format=e.fn.DATE_FORMAT=Wr.date_format,e.fn.date_add=e.fn.DATE_ADD=Wr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Wr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Wr.date_diff,e.fn.now=e.fn.NOW=Wr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Wr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Wr.get_server_time,e.fn.getdate=e.fn.GETDATE=Wr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Wr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=is.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=is.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=is.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=is.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=is.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=is.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=is.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=is.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=is.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=is.geoNear}});var SD=g((ffe,pD)=>{"use strict";var _u=require("lodash"),pr=require("alasql");pr.options.cache=!1;var W4=bd(),hD=require("clone"),yd=require("recursive-iterator"),fe=$(),Le=z(),la=Dn(),Q4=P(),{hdb_errors:z4}=se(),{getDatabases:mD}=(Ae(),ie(ke)),J4="IS NULL",Bn="There was a problem performing this search. Please check the logs and try again.";W4(pr);var SS=class{static{a(this,"SQLSearch")}constructor(t,r){if(Le.isEmpty(t))throw fe.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(),Le.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Le.isEmptyOrZeroLength(n))return fe.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw fe.error("Error thrown from checkEmptySQL in SQLSearch class method search."),fe.error(n),new Error(Bn)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw fe.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),fe.error(n),new Error(Bn)}if(Object.keys(this.data).length===0)return fe.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw fe.error("Error thrown from processJoins in SQLSearch class method search."),fe.error(n),new Error(Bn)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw fe.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),fe.error(n),new Error(Bn)}try{return t=await this._finalSQL(),t}catch(n){throw fe.error("Error thrown from finalSQL in SQLSearch class method search."),fe.error(n),new Error(Bn)}}_getColumns(){let t=new yd(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(hD(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=_u.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=mD()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Le.isEmpty(this.statement.where)){fe.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new yd(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Le.isEmpty(r)&&r.right)if(Le.isNotEmptyAndHasValue(r.right.value)){let n=Le.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new pr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Le.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new pr.yy.LogicValue({value:i}):n instanceof pr.yy.StringValue&&Le.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new pr.yy.NumValue({value:i}))});if(t){fe.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new yd(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(!Le.isEmpty(Q4.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Le.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Le.isEmptyOrZeroLength(r.left.columnid)||Le.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(Le.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"=":!Le.isEmpty(r.right.value)||!Le.isEmpty(r.left.value)?n.add(Le.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)n.add(u[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from)&&Le.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&_u.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(Le.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Le.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(Le.isEmptyOrZeroLength(this.all_table_attributes)&&!Le.isEmptyOrZeroLength(this.columns.columns))return t;if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await pr.promise(r)}catch(r){throw fe.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),fe.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(hD(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(Le.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(J4)>-1&&this.tables.forEach(s=>{let i={columnid:mD()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=_u.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},u=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(u=!0),!Le.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await la.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(l){throw fe.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),fe.error(l),new Error(Bn)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let E=await la.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(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),fe.error(l),new Error(Bn)}else if(!Le.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,E=l.length;d<E;d++){let f=l[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await la.getDataByValue(c,f.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...n[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]):(this.data[i].__merged_data[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,p))}}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),fe.error(l),new Error(Bn)}else try{c.search_attribute=s.attribute,c.search_value="*";let l=await la.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,E]of l)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(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),fe.error(l),new Error(Bn)}}}_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 pr.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 pr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new pr.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 pr.yy.FuncValue:new pr.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,p=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${p}.${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 "${p}.${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 u=this.statement.where?"WHERE "+this.statement.where:"";u=u.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(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 l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(f,s);E=await pr.promise(h,t),t=null}catch(f){throw fe.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),fe.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 p=E[f];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),p=_u.difference(h,[...f.keys].map(S=>S.toString()));for(let S=0,T=p.length;S<T;S++){let A=p[S];delete this.data[`${f.schema}_${f.table}`].__merged_data[A]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new yd(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=_u.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw fe.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),fe.error(i),new Error(Bn)}}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 l in i)o.push(i[l][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},u=await la.getDataByHash(c),_=s.columns.length;for(let l=0,d=o.length;l<d;l++){let E=o[l],f=u.get(E);for(let h=0;h<_;h++){let p=s.columns[h],S=f[p]===void 0?null:f[p];this.data[n].__merged_data[E].push(S)}}}}catch(r){throw fe.error("Error thrown from getDataByHash function in SQLSearch class method getData."),fe.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,u=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===u}).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();fe.trace(`Final SQL: ${s}`),n=await pr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),fe.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw fe.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),fe.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 fe.error(z4.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),fe.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 u=s[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;n=n.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(u,_)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await la.getDataByValue(i);for(let[c,u]of o)this.data[s].__merged_data[c]||(u[n.attribute]===void 0&&(u[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=u[n.attribute]??null}catch(o){throw fe.error("There was an error when processing this SQL operation. Check your logs"),fe.error(o),new Error(Bn)}}return Object.values(Object.values(this.data)[0].__merged_data)}};pD.exports=SS});var qr=g((hfe,TD)=>{"use strict";var X4=jb();TD.exports={searchByConditions:Z4,searchByHash:e3,searchByValue:t3,search:r3};var TS=Dn(),{transformReq:gS}=z(),j4=SD();async function Z4(e){return gS(e),TS.searchByConditions(e)}a(Z4,"searchByConditions");async function e3(e){gS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of TS.searchByHash(e))r&&t.push(r);return t}a(e3,"searchByHash");async function t3(e){gS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of TS.searchByValue(e))t.push(r);return t}a(t3,"searchByValue");function r3(e,t){try{let r=new X4(e);r.validate(),new j4(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(r3,"search")});var Nd=g((pfe,gD)=>{"use strict";var n3=Dn();gD.exports={writeTransaction:s3};function s3(e,t,r){return n3.writeTransaction(e,t,r)}a(s3,"writeTransaction")});var bD=g((gfe,OD)=>{"use strict";var i3=qr(),o3=ys(),RD=$(),a3=Fr(),Tfe=Nd(),c3=require("clone"),AS=require("alasql"),u3=bd(),AD=require("util"),l3=AD.promisify(o3.getTableSchema),_3=AD.promisify(i3.search),d3=P(),RS=z();u3(AS);OD.exports={update:E3};var f3="There was a problem performing this update. Please check the logs and try again.";async function E3({statement:e,hdb_user:t}){let r=await l3(e.table.databaseid,e.table.tableid),n=h3(e.columns);RS.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=c3(s),c=RS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=AS.parse(u).statements[0],l=await _3(_),d=m3(n,l);return p3(o,d,t)}a(E3,"update");function h3(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=AS.compile(`SELECT ${r.expression.toString()} AS [${d3.FUNC_VAL}] FROM ?`)}),t}catch(t){throw RD.error(t),new Error(f3)}}a(h3,"createUpdateRecord");function m3(e,t){return RS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(m3,"buildUpdateRecords");async function p3(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await a3.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){RD.error(`Error delete new_attributes from update response: ${i}`)}return s}a(p3,"updateRecords")});var ND=g((bfe,yD)=>{var S3=require("alasql"),T3=qr(),g3=$(),R3=Dn(),bS=require("util"),OS=z(),A3=P(),O3=ys(),Afe=Nd(),Ofe=Fr(),b3="record",y3="successfully deleted",N3=bS.callbackify(D3),I3=bS.promisify(T3.search),w3=bS.promisify(O3.getTableSchema);yD.exports={convertDelete:N3};function C3(e){return`${e.deleted_hashes.length} ${b3}${e.deleted_hashes.length===1?"":"s"} ${y3}`}a(C3,"generateReturnMessage");async function D3({statement:e,hdb_user:t}){let r=await w3(e.table.databaseid,e.table.tableid);OS.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=OS.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=S3.parse(o).statements[0],u={operation:A3.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await I3(c);let _=await R3.deleteRecords(u);return OS.isEmptyOrZeroLength(_.message)&&(_.message=C3(_)),delete _.txn_time,_}catch(_){throw g3.error(_),_.hdb_code?_.message:_}}a(D3,"convertDelete")});var LD=g((Nfe,DD)=>{"use strict";var L3=bs(),{hdb_errors:ID}=se(),{getDatabases:wD}=(Ae(),ie(ke));DD.exports={checkSchemaExists:CD,checkSchemaTableExists:M3,schema_describe:L3};async function CD(e){if(!wD()[e])return ID.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(CD,"checkSchemaExists");async function M3(e,t){let r=await CD(e);if(r)return r;if(!wD()[e][t])return ID.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(M3,"checkSchemaTableExists")});var du=g((wfe,P3)=>{P3.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 pu={};Fe(pu,{addAnalyticsListener:()=>mu,recordAction:()=>Sr,recordActionBinary:()=>Qr,setAnalyticsEnabled:()=>U3});function U3(e){qD=e}function Sr(e,t,r,n,s){if(!qD)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=Cd.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},Cd.set(i,o)}Id||v3()}function Qr(e,t,r,n,s){Sr(!!e,t,r,n,s)}function mu(e){VD.push(e)}function v3(){Id=performance.now(),setTimeout(async()=>{let e=performance.now()-Id;Id=0;let t=[],r={time:Date.now(),period:e,threadId:oo.threadId,metrics:t};for(let[s,i]of Cd){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of $D){let E=Math.floor(c*d),f=o[E-1];if(E>u){let h=E-u;if(f===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:f,count:h}:f),l=f;u=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 YD()}let n=process.memoryUsage();t.push({metric:"memory",threadId:oo.threadId,byThread:!0,...n});for(let s of VD)s(t);Cd=new Map,oo.parentPort?oo.parentPort.postMessage({type:kD,report:r}):QD({report:r})},FD).unref()}async function B3(e,t=6e4){let r=IS(),n=KD(),s=new Promise(p=>{let S=performance.now();setImmediate(()=>{let T=performance.now();T-S>5e3&&(0,fu.warn)("Unusually high event queue latency on the main thread of "+Math.round(T-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let T=performance.now();T-S>5e3&&(0,fu.warn)("Unusually high task queue latency on the main thread of "+Math.round(T-S)+"ms"),p(T-S)})}),i;for(let p of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(p.value?.time){i=p.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,u=new Map,_=[],l;for(let{key:p,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(p>o+t)break}else o=p;l=p;let{metrics:T,threadId:A}=S;for(let b of T||[]){let{path:I,method:B,type:U,metric:F,count:M,total:Q,distribution:J,threads:X,...oe}=b;M||(M=1);let ue=F+(I?"-"+I:"");B!==void 0&&(ue+="-"+B),U!==void 0&&(ue+="-"+U);let le=c.get(ue);if(le){if(le.threads){let Ne=le.threads[A];if(Ne)le=Ne;else{le.threads[A]=Object.assign({},oe);continue}}le.count||(le.count=1);let Be=le.count;for(let Ne in oe){let xe=oe[Ne];typeof xe=="number"&&(le[Ne]=(le[Ne]*Be+xe*M)/(Be+M))}le.count+=M,Q>=0&&(le.total+=Q,le.ratio=le.total/le.count)}else le=Object.assign({period:t},b),delete le.distribution,c.set(ue,le),le.byThread&&(le.threads=[],le.threads[A]=Object.assign({},oe),_.push(le));if(J){J=J.map(Ne=>typeof Ne=="number"?{value:Ne,count:1}:Ne);let Be=u.get(ue);Be?Be.push(...J):u.set(ue,J)}}await YD()}for(let p of _){let{path:S,method:T,type:A,metric:b,count:I,total:B,distribution:U,threads:F,...M}=p;F=F.filter(Q=>Q);for(let Q in M){if(typeof p[Q]!="number")continue;let J=0;for(let X of F){let oe=X[Q];typeof oe=="number"&&(J+=oe)}p[Q]=J}p.count=F.length,delete p.threads,delete p.byThread}for(let[p,S]of u){let T=c.get(p);S.sort((Ne,xe)=>Ne.value>xe.value?1:-1);let A=T.count-1,b=[],I=0,B=0,U;for(let Ne of $D){let xe=A*Ne;for(;I<xe;)U=S[B++],I+=U.count,B===1&&I--;let n_=S[B>1?B-2:0];U||(U=S[0]),b.push(U.value-(U.value-n_.value)*(I-xe)/U.count)}let[F,M,Q,J,X,oe,ue,le,Be]=b;Object.assign(T,{p1:F,p10:M,p25:Q,median:J,p75:X,p90:oe,p95:ue,p99:le,p999:Be})}let d;for(let[p,S]of c)S.id=(0,wd.getNextMonotonicTime)(),S.time=l,n.primaryStore.put(S.id,S,{append:!0}).then(T=>{T||n.primaryStore.put(S.id,S)}),d=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(d||h*10>f){let p=(0,wd.getNextMonotonicTime)(),S={id:p,metric:"main-thread-utilization",idle:f-MD,active:h-PD,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(p,S,{append:!0}).then(T=>{T||n.primaryStore.put(p,S)})}MD=f,PD=h}async function UD(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function IS(){return vD||(vD=Et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function KD(){return BD||(BD=Et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function G3(){WD=!0;let e=(0,hu.get)(NS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await B3(FD,e),await UD(IS(),x3),await UD(KD(),H3)},Math.min(e/2,2147483647)).unref()}function QD(e,t){let r=e.report;r.threadId=t?.threadId||oo.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(xD+=n.mean*n.count);r.totalBytesProcessed=xD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(HD.get(t))}),HD.set(t,t.performance.eventLoopUtilization())),r.id=(0,wd.getNextMonotonicTime)(),IS().primaryStore.put(r.id,r),WD||G3(),q3&&(zD=k3(r))}async function k3(e){if(await zD,!fi){let r=(0,Eu.dirname)((0,fu.getLogFilePath)());try{fi=await(0,yS.open)((0,Eu.join)(r,"analytics.log"),"r+")}catch{fi=await(0,yS.open)((0,Eu.join)(r,"analytics.log"),"w+")}}let t=(await fi.stat()).size;if(t>F3){let r=Buffer.alloc(t);await fi.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await fi.write(r,{position:0}),await fi.truncate(r.length),t=r.length}await fi.write(JSON.stringify(e)+`
|
|
10
10
|
`,t)}var oo,GD,fu,Eu,yS,wd,hu,NS,Cd,qD,Id,FD,kD,VD,$D,MD,PD,YD,x3,H3,vD,BD,WD,xD,HD,q3,zD,fi,F3,Ds=Re(()=>{oo=require("worker_threads"),GD=H(Qe());Ae();fu=H($()),Eu=require("path"),yS=require("fs/promises"),wd=H(Br()),hu=H(ee()),NS=H(P());lr();(0,hu.initSync)();Cd=new Map,qD=(0,hu.get)(NS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(U3,"setAnalyticsEnabled");a(Sr,"recordAction");at.recordAnalytics=Sr;a(Qr,"recordActionBinary");Id=0,FD=1e3,kD="analytics-report",VD=[];a(mu,"addAnalyticsListener");$D=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(v3,"sendAnalytics");a(B3,"aggregation");MD=0,PD=0,YD=a(()=>new Promise(setImmediate),"rest");a(UD,"cleanup");x3=36e5,H3=31536e6;a(IS,"getRawAnalyticsTable");a(KD,"getAnalyticsTable");(0,GD.setChildListenerByType)(kD,QD);a(G3,"startScheduledTasks");xD=0,HD=new Map,q3=!1;a(QD,"recordAnalytics");F3=1e6;a(k3,"logAnalytics")});var MS=g((Ffe,aL)=>{"use strict";var{decode:V3}=require("msgpackr"),{isMainThread:Hfe,parentPort:Gfe,threadId:qfe}=require("worker_threads"),Md=ut(),_a=Ve(),DS=P(),nr=$(),CS=ee(),$3=P(),{onMessageByType:Y3}=Qe(),ZD=Os(),{recordAction:JD,recordActionBinary:K3}=(Ds(),ie(pu)),{publishToStream:W3}=Md,{ConsumerEvents:XD}=require("nats"),Q3=qr(),{promisify:z3}=require("util"),eL=z3(setTimeout),Pd=1e4,Ud,Ld,J3,X3,tL,Su=new Map,da=new Map;aL.exports={initialize:rL,ingestConsumer:LS,setSubscription:j3,setIgnoreOrigin:tX,getDatabaseSubscriptions:eX,updateConsumer:nL};async function rL(){Y3(DS.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await nL(n)}),tL=!0,nr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await Md.getNATSReferences();Ud=e,Ld=e.info.server_name,J3=t,X3=r}a(rL,"initialize");async function nL(e){if(e.status==="start"){let{js:t,jsm:r}=await sL(e.node_domain_name);LS(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Su.get(e.stream_name+e.node_domain_name);t&&(nr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Su.set(e.stream_name+e.node_domain_name,"close")),da.get(e.node_domain_name)==="failed"&&da.set(e.node_domain_name,"close")}}a(nL,"updateConsumer");var vd=new Map;function j3(e,t,r){let n=vd.get(e);n||vd.set(e,n=new Map),n.set(t,r),tL||rL().then(Z3)}a(j3,"setSubscription");async function Z3(){let e=await Q3.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+_a.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions)if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await sL(r),!n))break;let{schema:o,table:c}=i,u=ZD.createNatsTableStreamName(o,c);LS(u,n,s,r)}}}a(Z3,"accessConsumers");async function sL(e){let t,r,n=1;for(;!r;)try{t=await Ud.jetstream({domain:e}),r=await Ud.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(da.get(e)==="close")break;da.set(e,"failed"),n%10===1&&nr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<Pd?n++*100:Pd;await eL(i)}return{js:t,jsm:r}}a(sL,"connectToRemoteJS");function eX(){return vd}a(eX,"getDatabaseSubscriptions");var iL;function tX(e){iL=e}a(tX,"setIgnoreOrigin");var oL=100,jD=new Array(oL),Dd=0;async function LS(e,t,r,n){let{connection:s}=await Md.getNATSReferences();Ud=s,Ld=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,Ld),nr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(da.get(n)==="close")break;o%10===1&&nr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(nr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await Md.createConsumer(r,e,Ld,new Date(Date.now()).toISOString()));let l=o++*100<Pd?o++*100:Pd;await eL(l)}let c=!1,u;for(;!c;){if(Su.get(e+n)==="close"||da.get(n)==="close"){Su.delete(e+n),c=!0;continue}u=await i.consume({max_messages:CS.get(DS.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Su.set(e+n,u);let _=!1;(async()=>{for await(let l of await u.status())if(l.type===XD.ConsumerDeleted&&(await u.close(),c=!0),l.type===XD.HeartbeatsMissed){let d=l.data;nr.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${u.consumer.stream}`),d===100&&(nr.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${u.consumer.stream}`),u.stop(),_=!0)}})();try{for await(let l of u)await jD[Dd],jD[Dd]=rX(l).catch(d=>{nr.error(d)}),++Dd>=oL&&(Dd=0)}catch(l){l.message==="consumer deleted"?(nr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",u.consumer.stream),await u.close(),c=!0):nr.error("Error consuming clustering ingest, restarting consumer",l)}}}a(LS,"ingestConsumer");async function rX(e){let t=V3(e.data);JD(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),nr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=CS.get(DS.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(_a.MSG_HEADERS.TRANSACTED_NODES)&&r.values(_a.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(_a.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!iL),K3(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(_a.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:E,expiresAt:f}=t;nr.trace("processing message:",o,c,_,(l?"records: "+l.map(B=>B?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),nr.trace(`messageProcessor nats msg id: ${e.headers.get(_a.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let p=new Promise(B=>h=B),{timestamp:S,user:T,node_name:A}=E||{},b=vd.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(l.length===1&&!u)b.send({type:wS(o),value:l[0],id:d?.[0],expiresAt:f,timestamp:S,table:_,onCommit:h,user:T,nodeName:A});else{let B=l.map((U,F)=>({type:wS(o),value:U,expiresAt:f,id:d?.[F],table:_}));for(;u;)B.push({type:wS(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;b.send({type:"transaction",writes:B,table:_,timestamp:S,onCommit:h,user:T,nodeName:A})}CS.get($3.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&W3(e.subject.split(".").slice(0,-1).join("."),ZD.createNatsTableStreamName(c,_),e.headers,e.data),await p;let I=Date.now()-S;S&&JD(I,"replication-latency",e.subject,o,"ingest")}catch(o){nr.error(o)}e.ack()}a(rX,"messageProcessor");function wS(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(wS,"convertOperation")});var ut=g((Qfe,bL)=>{"use strict";var xt=ee();xt.initSync();var nX=require("fs-extra"),sX=require("semver"),Ru=require("path"),{monotonicFactory:iX}=require("ulidx"),uL=iX(),oX=require("util"),lL=require("child_process"),aX=oX.promisify(lL.exec),cX=lL.spawn,Kt=Ve(),Ie=P(),Bd=z(),xn=$(),xd=Os(),uX=Nd(),Tu=Er(),{broadcast:lX,onMessageByType:_X,getWorkerIndex:dX}=Qe(),{isMainThread:_L}=require("worker_threads"),{Encoder:fX,decode:BS}=require("msgpackr"),dL=new fX,{isEmpty:lo}=Bd,fL=_n(),Vfe=48*36e11;_L&&_X(Ie.ITC_EVENT_TYPES.RESTART,()=>{Tr=void 0,uo=void 0});var{connect:EX,StorageType:hX,RetentionPolicy:mX,AckPolicy:xS,DeliverPolicy:HS,DiscardPolicy:pX,NatsConnection:$fe,JetStreamManager:Yfe,JetStreamClient:Kfe,StringCodec:Wfe,JSONCodec:SX,createInbox:GS,headers:TX,ErrorCode:cL}=require("nats"),{PACKAGE_ROOT:gX}=P(),RX=du(),{recordAction:AX}=(Ds(),ie(pu)),EL=SX(),OX="clustering",bX=RX.engines[Kt.NATS_SERVER_NAME],yX=Ru.join(gX,"dependencies"),vS=Ru.join(yX,`${process.platform}-${process.arch}`,Kt.NATS_BINARY_NAME),PS,US,gu,ao,co;bL.exports={runCommand:hL,checkNATSServerInstalled:NX,createConnection:qS,getConnection:Au,getJetStreamManager:Ou,getJetStream:pL,getNATSReferences:os,getServerList:wX,createLocalStream:FS,listStreams:SL,deleteLocalStream:CX,getServerConfig:fa,listRemoteStreams:DX,viewStream:LX,viewStreamIterator:MX,publishToStream:PX,request:BX,reloadNATS:kS,reloadNATSHub:xX,reloadNATSLeaf:HX,extractServerName:vX,requestErrorHandler:GX,createLocalTableStream:AL,createTableStreams:kX,purgeTableStream:OL,purgeSchemaTableStreams:VX,getStreamInfo:$X,updateLocalStreams:KX,closeConnection:IX,getJsmServerName:Hd,addNatsMsgHeader:TL,clearClientCache:mL,updateRemoteConsumer:qX,createConsumer:gL,updateConsumerIterator:FX};async function hL(e,t=void 0){let{stdout:r,stderr:n}=await aX(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
11
11
|
`,""));return r.replace(`
|
|
12
12
|
`,"")}a(hL,"runCommand");async function NX(){try{await nX.access(vS)}catch{return!1}let e=await hL(`${vS} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return sX.eq(t,bX)}a(NX,"checkNATSServerInstalled");async function qS(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await fL.getClusterUser();if(lo(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}xn.trace("create nats connection called");let i=await EX({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:xt.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:xt.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:xt.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),xn.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&xn.error("Error with Nats client connection, connection closed",o),mL()}),i}a(qS,"createConnection");function mL(){Tr=void 0,ao=void 0,co=void 0,uo=void 0}a(mL,"clearClientCache");async function IX(){Tr&&(await Tr.drain(),Tr=void 0,ao=void 0,co=void 0,uo=void 0)}a(IX,"closeConnection");var Tr,uo;async function Au(){return uo||(uo=qS(xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Tr=await uo),Tr||uo}a(Au,"getConnection");async function Ou(){if(ao)return ao;lo(Tr)&&await Au();let{domain:e}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(lo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ao=await Tr.jetstreamManager({domain:e,timeout:6e4}),ao}a(Ou,"getJetStreamManager");async function pL(){if(co)return co;lo(Tr)&&await Au();let{domain:e}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(lo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return co=Tr.jetstream({domain:e,timeout:6e4}),co}a(pL,"getJetStream");async function os(){let e=Tr||await Au(),t=ao||await Ou(),r=co||await pL();return{connection:e,jsm:t,js:r}}a(os,"getNATSReferences");async function wX(e){let t=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await fL.getClusterUser(),s=await qS(t,r,n),i=GS(),o=s.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=EL.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=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 Bd.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(wX,"getServerList");async function FS(e,t){let{jsm:r}=await os(),n=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:hX.File,retention:mX.Limits,subjects:t,discard:pX.Old,max_msgs:s,max_bytes:i,max_age:n})}a(FS,"createLocalStream");async function SL(){let{jsm:e}=await os(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(SL,"listStreams");async function CX(e){let{jsm:t}=await os();await t.streams.delete(e)}a(CX,"deleteLocalStream");async function DX(e){let{connection:t}=await os(),r=[],n=GS(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(EL.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(DX,"listRemoteStreams");async function LX(e,t=void 0,r=void 0){let{jsm:n,js:s}=await os(),i=uL(),o={durable_name:i,ack_policy:xS.Explicit};t&&(o.deliver_policy=HS.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=BS(l.data),E={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(E.origin=l.headers.get(Kt.MSG_HEADERS.ORIGIN)),_.push(E),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(LX,"viewStream");async function*MX(e,t=void 0,r=void 0){let{jsm:n,js:s}=await os(),i=uL(),o={durable_name:i,ack_policy:xS.Explicit};t&&(o.deliver_policy=HS.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=BS(_.data);l[0]||(l=[l]);for(let d of l){let E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(E.origin=_.headers.get(Kt.MSG_HEADERS.ORIGIN)),yield E}if(_.ack(),_.info.pending===0)break}await c.delete()}a(MX,"viewStreamIterator");async function PX(e,t,r,n){xn.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=TL(n,r);let{js:s}=await os(),i=await Hd(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:dL.encode(n);try{xn.trace(`publishToStream publishing to subject: ${o}`),AX(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return RL(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){xn.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await FS(t,[o]),await s.publish(o,c,{headers:r})}else throw u}});throw u}}a(PX,"publishToStream");function TL(e,t){t===void 0&&(t=TX());let r=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Kt.MSG_HEADERS.ORIGIN)&&r&&t.append(Kt.MSG_HEADERS.ORIGIN,r),t}a(TL,"addNatsMsgHeader");function fa(e){e=e.toLowerCase();let t=Ru.join(xt.get(Ie.CONFIG_PARAMS.ROOTPATH),OX);if(e===Ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return lo(US)&&(US={port:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Kt.SERVER_SUFFIX.HUB,config_file:Kt.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Ru.join(t,Kt.PID_FILES.HUB),hdb_nats_path:t}),US;if(e===Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return lo(PS)&&(PS={port:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Kt.SERVER_SUFFIX.LEAF,config_file:Kt.NATS_CONFIG_FILES.LEAF_SERVER,domain:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Kt.SERVER_SUFFIX.LEAF,pid_file_path:Ru.join(t,Kt.PID_FILES.LEAF),hdb_nats_path:t}),PS;xn.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(fa,"getServerConfig");async function gL(e,t,r,n){try{await e.consumers.add(t,{ack_policy:xS.Explicit,durable_name:r,deliver_policy:HS.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(gL,"createConsumer");async function UX(e,t,r){await e.consumers.delete(t,r)}a(UX,"removeConsumer");function vX(e){return e.split(".")[1]}a(vX,"extractServerName");async function BX(e,t,r=6e4,n=GS()){if(!Bd.isObject(t))throw new Error("data param must be an object");let s=dL.encode(t),{connection:i}=await os(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return BS(c.data)}a(BX,"request");function kS(e){return new Promise(async(t,r)=>{let n=cX(vS,["--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(kS,"reloadNATS");async function xX(){let{pid_file_path:e}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await kS(e)}a(xX,"reloadNATSHub");async function HX(){let{pid_file_path:e}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await kS(e)}a(HX,"reloadNATSLeaf");function GX(e,t,r){let n;switch(e.code){case cL.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case cL.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(GX,"requestErrorHandler");async function qX(e,t){let r=t+Kt.SERVER_SUFFIX.LEAF,{connection:n}=await os(),{jsm:s}=await QX(r),{schema:i,table:o}=e,c=xd.createNatsTableStreamName(i,o),u=e.start_time?e.start_time:new Date(Date.now()).toISOString();await RL(async()=>{if(e.subscribe===!0)await gL(s,c,n.info.server_name,u);else try{await UX(s,c,n.info.server_name)}catch(_){xn.trace(_)}})}a(qX,"updateRemoteConsumer");async function FX(e,t,r,n){let s=xd.createNatsTableStreamName(e,t),i=r+Kt.SERVER_SUFFIX.LEAF,o={type:Ie.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!_L&&dX()<xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=MS();await c(o)}await lX(o),n==="stop"&&await Bd.async_set_timeout(1e3)}a(FX,"updateConsumerIterator");function RL(e){return uX.writeTransaction(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(RL,"exclusiveLock");async function AL(e,t){let r=xd.createNatsTableStreamName(e,t),n=await Hd(),s=YX(e,t,n);await FS(r,[s])}a(AL,"createLocalTableStream");async function kX(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await AL(n,s)}}a(kX,"createTableStreams");async function OL(e,t,r=void 0){if(xt.get(Ie.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=xd.createNatsTableStreamName(e,t),{domain:s}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Au()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")xn.warn(n);else throw n}}a(OL,"purgeTableStream");async function VX(e,t){if(xt.get(Ie.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await OL(e,t[r])}a(VX,"purgeSchemaTableStreams");async function $X(e){return(await Ou()).streams.info(e)}a($X,"getStreamInfo");function YX(e,t,r){return`${Kt.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(YX,"createSubjectName");async function Hd(){if(gu)return gu;if(gu=(await Ou())?.nc?.info?.server_name,gu===void 0)throw new Error("Unable to get jetstream manager server name");return gu}a(Hd,"getJsmServerName");async function KX(){let e=await Ou(),t=await Hd(),r=await SL();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=WX(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let l=_.join(".");xn.trace(`Updating stream subject name from: ${i} to: ${l}`),s.subjects[0]=l,await e.streams.update(s.name,s)}}a(KX,"updateLocalStreams");function WX(e){let{config:t}=e,r=!1,n=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=xt.get(Ie.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(WX,"updateStreamLimits");async function QX(e){let t,r;try{t=await Tr.jetstream({domain:e}),r=await Tr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw xn.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(QX,"connectToRemoteJS")});var bu=g((Xfe,wL)=>{"use strict";var Ea=H_(),ha=LD(),zX=$(),JX=require("uuid").v4,Jfe=require("clone"),qd=Ns(),ma=P(),XX=require("util"),Ei=Dn(),{handleHDBError:gr,hdb_errors:jX}=se(),{HDB_ERROR_MSGS:Gd,HTTP_STATUS_CODES:Rr}=jX,{SchemaEventMsg:Fd}=Pn(),yL=ut(),{getDatabases:ZX}=(Ae(),ie(ke)),{transformReq:pa}=z();wL.exports={createSchema:ej,createSchemaStructure:NL,createTable:tj,createTableStructure:IL,createAttribute:oj,dropSchema:rj,dropTable:nj,dropAttribute:sj,getBackup:aj};async function ej(e){let t=await NL(e);return qd.signalSchemaChange(new Fd(process.pid,e.operation,e.schema)),t}a(ej,"createSchema");async function NL(e){let t=Ea.schema_object(e);if(t)throw gr(t,t.message,Rr.BAD_REQUEST,void 0,void 0,!0);if(pa(e),!await ha.checkSchemaExists(e.schema))throw gr(new Error,Gd.SCHEMA_EXISTS_ERR(e.schema),Rr.BAD_REQUEST,ma.LOG_LEVELS.ERROR,Gd.SCHEMA_EXISTS_ERR(e.schema),!0);return await Ei.createSchema(e),`database '${e.schema}' successfully created`}a(NL,"createSchemaStructure");async function tj(e){return pa(e),e.hash_attribute=e.primary_key??e.hash_attribute,await IL(e)}a(tj,"createTable");async function IL(e){let t=Ea.create_table_object(e);if(t)throw gr(t,t.message,Rr.BAD_REQUEST,void 0,void 0,!0);if(Ea.validateTableResidence(e.residence),!await ha.checkSchemaTableExists(e.schema,e.table))throw gr(new Error,Gd.TABLE_EXISTS_ERR(e.schema,e.table),Rr.BAD_REQUEST,ma.LOG_LEVELS.ERROR,Gd.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:JX(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Ei.createTable(n,e);else throw gr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Rr.BAD_REQUEST);else await Ei.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(IL,"createTableStructure");async function rj(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Ea.schema_object(e),n=t??r;if(n)throw gr(n,n.message,Rr.BAD_REQUEST,void 0,void 0,!0);pa(e);let s=await ha.checkSchemaExists(e.schema);if(s)throw gr(new Error,s,Rr.NOT_FOUND,ma.LOG_LEVELS.ERROR,s,!0);let i=await ha.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Ei.dropSchema(e),qd.signalSchemaChange(new Fd(process.pid,e.operation,e.schema)),await yL.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(rj,"dropSchema");async function nj(e){let t=Ea.table_object(e);if(t)throw gr(t,t.message,Rr.BAD_REQUEST,void 0,void 0,!0);pa(e);let r=await ha.checkSchemaTableExists(e.schema,e.table);if(r)throw gr(new Error,r,Rr.NOT_FOUND,ma.LOG_LEVELS.ERROR,r,!0);return await Ei.dropTable(e),await yL.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(nj,"dropTable");async function sj(e){let t=Ea.attribute_object(e);if(t)throw gr(t,t.message,Rr.BAD_REQUEST,void 0,void 0,!0);pa(e);let r=await ha.checkSchemaTableExists(e.schema,e.table);if(r)throw gr(new Error,r,Rr.NOT_FOUND,ma.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw gr(new Error,"You cannot drop a hash attribute",Rr.BAD_REQUEST,void 0,void 0,!0);if(ma.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw gr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Rr.BAD_REQUEST,void 0,void 0,!0);try{return await Ei.dropAttribute(e),ij(e),qd.signalSchemaChange(new Fd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw zX.error(`Got an error deleting attribute ${XX.inspect(e)}.`),n}}a(sj,"dropAttribute");function ij(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(ij,"dropAttributeFromGlobal");async function oj(e){pa(e);let t=ZX()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw gr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Rr.BAD_REQUEST,void 0,void 0,!0);return await Ei.createAttribute(e),qd.signalSchemaChange(new Fd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(oj,"createAttribute");function aj(e){return Ei.getBackup(e)}a(aj,"getBackup")});var DL=g((Zfe,CL)=>{"use strict";var{OPERATIONS_ENUM:cj}=P(),VS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=cj.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};CL.exports=VS});var $S=g((rEe,vL)=>{"use strict";var uj=Dn(),tEe=DL(),kd=z(),Vd=P(),lj=ee(),{handleHDBError:LL,hdb_errors:_j}=se(),{HDB_ERROR_MSGS:ML,HTTP_STATUS_CODES:PL}=_j,dj=Object.values(Vd.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),UL="To use this operation audit log must be enabled in harperdb-config.yaml";vL.exports=fj;async function fj(e){if(kd.isEmpty(e.schema))throw new Error(ML.SCHEMA_REQUIRED_ERR);if(kd.isEmpty(e.table))throw new Error(ML.TABLE_REQUIRED_ERR);if(!lj.get(Vd.CONFIG_PARAMS.LOGGING_AUDITLOG))throw LL(new Error,UL,PL.BAD_REQUEST,Vd.LOG_LEVELS.ERROR,UL,!0);let t=kd.checkSchemaTableExist(e.schema,e.table);if(t)throw LL(new Error,t,PL.NOT_FOUND,Vd.LOG_LEVELS.ERROR,t,!0);if(!kd.isEmpty(e.search_type)&&dj.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await uj.readAuditLog(e)}a(fj,"readAuditLog")});var xL=g((sEe,BL)=>{"use strict";var{OPERATIONS_ENUM:Ej}=P(),YS=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Ej.GET_BACKUP,this.schema=t,this.table=r}};BL.exports=YS});var qL=g((cEe,GL)=>{"use strict";var hj=Dn(),oEe=xL(),KS=z(),mj=P(),aEe=ee(),{handleHDBError:pj,hdb_errors:Sj}=se(),{HDB_ERROR_MSGS:HL,HTTP_STATUS_CODES:Tj}=Sj;GL.exports=gj;async function gj(e){if(KS.isEmpty(e.schema))throw new Error(HL.SCHEMA_REQUIRED_ERR);if(KS.isEmpty(e.table))throw new Error(HL.TABLE_REQUIRED_ERR);let t=KS.checkSchemaTableExist(e.schema,e.table);if(t)throw pj(new Error,t,Tj.NOT_FOUND,mj.LOG_LEVELS.ERROR,t,!0);return await hj.getBackup(read_audit_log_object)}a(gj,"getBackup")});var KL=g((lEe,YL)=>{var hi=require("validate.js"),kL=je(),Sa=P(),{handleHDBError:Rj,hdb_errors:Aj}=se(),{HDB_ERROR_MSGS:mt,HTTP_STATUS_CODES:Oj}=Aj,WS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),bj={STRUCTURE_USER:"structure_user"},FL=Object.values(Sa.ROLE_TYPES_ENUM),yj="attribute_permissions",Nj="attribute_name",{PERMS_CRUD_ENUM:Ta}=Sa,Ij=[yj,...Object.values(Ta)],VL=[Ta.READ,Ta.INSERT,Ta.UPDATE],wj=[Nj,...VL];function Cj(e){let t=WS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,$L(e,t)}a(Cj,"addRoleValidation");function Dj(e){let t=WS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,$L(e,t)}a(Dj,"alterRoleValidation");function Lj(e){let t=WS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,kL.validateObject(e,t)}a(Lj,"dropRoleValidation");var Mj=["operation","role","id","permission","hdb_user","hdb_auth_header"];function $L(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)Mj.includes(n[o])||s.push(n[o]);s.length>0&&At(mt.INVALID_ROLE_JSON_KEYS(s),r);let i=kL.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{At(o,r)}),e.permission){let o=Pj(e);o&&At(o,r),FL.forEach(c=>{e.permission[c]&&!hi.isBoolean(e.permission[c])&&At(mt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(FL.indexOf(o)<0){if(o===bj.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||At(mt.SCHEMA_NOT_FOUND(d),r)}continue}At(mt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){At(mt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){At(mt.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{Ij.includes(l)||At(mt.INVALID_PERM_KEY(l),r,o,u)}),Object.values(Ta).forEach(l=>{hi.isDefined(_[l])?hi.isBoolean(_[l])||At(mt.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):At(mt.TABLE_PERM_MISSING(l),r,o,u)}),hi.isDefined(_.attribute_permissions)){if(!hi.isArray(_.attribute_permissions)){At(mt.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{At(mt.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].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(p=>{!wj.includes(p)&&p!==Ta.DELETE&&At(mt.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!hi.isDefined(f.attribute_name)){At(mt.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!l.includes(h)){At(mt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}VL.forEach(p=>{hi.isDefined(f[p])?hi.isBoolean(f[p])||At(mt.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):At(mt.ATTR_PERM_MISSING(p,h),r,o,u)}),!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}.${u}`;At(mt.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return Uj(r)}a($L,"customValidate");YL.exports={addRoleValidation:Cj,alterRoleValidation:Dj,dropRoleValidation:Lj};function Pj(e){let{operation:t,permission:r}=e;if(t===Sa.OPERATIONS_ENUM.ADD_ROLE||t===Sa.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 mt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Sa.ROLE_TYPES_ENUM.SUPER_USER:Sa.ROLE_TYPES_ENUM.CLUSTER_USER;return mt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(Pj,"validateNoSUPerms");function Uj(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:mt.ROLE_PERMS_ERROR,...e};return Rj(new Error,n,Oj.BAD_REQUEST)}else return null}a(Uj,"generateRolePermResponse");function At(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(At,"addPermError")});var ZS=g((dEe,JL)=>{"use strict";var WL=Fr(),QL=qr(),vj=ci(),zS=KL(),JS=Ns(),Bj=require("uuid").v4,xj=require("util"),$d=P(),Hj=z(),XS=QL.searchByValue,Gj=QL.searchByHash,qj=xj.promisify(vj.delete),Fj=rs(),kj=oa(),{hdb_errors:Vj,handleHDBError:_o}=se(),{HDB_ERROR_MSGS:zL,HTTP_STATUS_CODES:yu}=Vj,{UserEventMsg:jS}=Pn();JL.exports={addRole:$j,alterRole:Yj,dropRole:Kj,listRoles:Wj};function QS(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(QS,"scrubRoleDetails");async function $j(e){let t=zS.addRoleValidation(e);if(t)throw t;e=QS(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 XS(r)||[])}catch(i){throw _o(i)}if(n&&n.length>0)throw _o(new Error,zL.ROLE_ALREADY_EXISTS(e.role),yu.CONFLICT,void 0,void 0,!0);e.id||(e.id=Bj());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await WL.insert(s),JS.signalUserChange(new jS(process.pid)),e=QS(e),e}a($j,"addRole");async function Yj(e){let t=zS.alterRoleValidation(e);if(t)throw t;e=QS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await WL.update(r)}catch(s){throw _o(s)}if(n&&n?.message==="updated 0 of 1 records")throw _o(new Error,"Invalid role id",yu.BAD_REQUEST,void 0,void 0,!0);return await JS.signalUserChange(new jS(process.pid)),e}a(Yj,"alterRole");async function Kj(e){let t=zS.dropRoleValidation(e);if(t)throw _o(new Error,t,yu.BAD_REQUEST,void 0,void 0,!0);let r=new kj($d.SYSTEM_SCHEMA_NAME,$d.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Gj(r));if(n.length===0)throw _o(new Error,zL.ROLE_NOT_FOUND,yu.NOT_FOUND,void 0,void 0,!0);let s=new Fj($d.SYSTEM_SCHEMA_NAME,$d.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await XS(s)),o=!1;if(Hj.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw _o(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,yu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await qj(c),JS.signalUserChange(new jS(process.pid)),`${n[0].role} successfully deleted`}a(Kj,"dropRole");async function Wj(){return XS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(Wj,"listRoles")});var eM=g((EEe,ZL)=>{"use strict";var Qj=ee(),mi=require("joi"),zj=je(),XL=require("moment"),Jj=require("fs-extra"),eT=require("path"),Xj=require("lodash"),Nu=P(),{LOG_LEVELS:fo}=P(),jj="YYYY-MM-DD hh:mm:ss",Zj=eT.resolve(__dirname,"../logs");ZL.exports=function(e){return zj.validateBySchema(e,eZ)};var eZ=mi.object({from:mi.custom(jL),until:mi.custom(jL),level:mi.valid(fo.NOTIFY,fo.FATAL,fo.ERROR,fo.WARN,fo.INFO,fo.DEBUG,fo.TRACE),order:mi.valid("asc","desc"),limit:mi.number().min(1),start:mi.number().min(0),log_name:mi.custom(tZ)});function jL(e,t){if(XL(e,XL.ISO_8601).format(jj)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(jL,"validateDatetime");function tZ(e,t){if(Xj.invert(Nu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Qj.get(Nu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?Nu.LOG_NAMES.HDB:e,i=s===Nu.LOG_NAMES.INSTALL?eT.join(Zj,Nu.LOG_NAMES.INSTALL):eT.join(n,s);return Jj.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(tZ,"validateReadLogPath")});var rT=g((mEe,rM)=>{"use strict";var Yd=P(),rZ=$(),nZ=ee(),sZ=eM(),tT=require("path"),tM=require("fs-extra"),{once:iZ}=require("events"),{handleHDBError:oZ,hdb_errors:aZ}=se(),{PACKAGE_ROOT:cZ}=P(),uZ=tT.join(cZ,"logs"),lZ=1e3,_Z=200;rM.exports=dZ;async function dZ(e){let t=sZ(e);if(t)throw oZ(t,t.message,aZ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=nZ.get(Yd.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?Yd.LOG_NAMES.HDB:e.log_name,s=n===Yd.LOG_NAMES.INSTALL?tT.join(uZ,Yd.LOG_NAMES.INSTALL):tT.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?lZ:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,p=0;E==="desc"&&!u&&!l&&(p=Math.max(tM.statSync(s).size-(h+5)*_Z,0));let S=tM.createReadStream(s,{start:p});S.on("error",U=>{rZ.error(U)});let T=0,A=[],b="",I;S.on("data",U=>{let F=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;U=b+U;let M=0,Q;for(;(Q=F.exec(U))&&!S.destroyed;){I&&(I.message=U.slice(M,Q.index),B(I));let[J,X,oe]=Q,ue=oe.split("] ["),le=ue[0],Be=ue[1];ue.splice(0,2),I={timestamp:X,thread:le,level:Be,tags:ue,message:""},M=Q.index+J.length}b=U.slice(M)}),S.on("end",U=>{S.destroyed||I&&(I.message=b.trim(),B(I))}),S.resume();function B(U){let F,M,Q;switch(!0){case(i&&c&&_):F=new Date(U.timestamp),M=new Date(u),Q=new Date(l),U.level===o&&F>=M&&F<=Q&&T<f?T++:U.level===o&&F>=M&&F<=Q&&(pi(U,E,A),T++,T===h&&S.destroy());break;case(i&&c):F=new Date(U.timestamp),M=new Date(u),U.level===o&&F>=M&&T<f?T++:U.level===o&&F>=M&&(pi(U,E,A),T++,T===h&&S.destroy());break;case(i&&_):F=new Date(U.timestamp),Q=new Date(l),U.level===o&&F<=Q&&T<f?T++:U.level===o&&F<=Q&&(pi(U,E,A),T++,T===h&&S.destroy());break;case(c&&_):F=new Date(U.timestamp),M=new Date(u),Q=new Date(l),F>=M&&F<=Q&&T<f?T++:F>=M&&F<=Q&&(pi(U,E,A),T++,T===h&&S.destroy());break;case i:U.level===o&&T<f?T++:U.level===o&&(pi(U,E,A),T++,T===h&&S.destroy());break;case c:F=new Date(U.timestamp),M=new Date(u),F>=M&&T<f?T++:F>=M&&T>=f&&(pi(U,E,A),T++,T===h&&S.destroy());break;case _:F=new Date(U.timestamp),Q=new Date(l),F<=Q&&T<f?T++:F<=Q&&T>=f&&(pi(U,E,A),T++,T===h&&S.destroy());break;default:T<f?T++:(pi(U,E,A),T++,T===h&&S.destroy())}}return a(B,"onLogMessage"),await iZ(S,"close"),A}a(dZ,"readLog");function pi(e,t,r){t==="desc"?fZ(e,r):t==="asc"?EZ(e,r):r.push(e)}a(pi,"pushLineToResult");function fZ(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(fZ,"insertDescending");function EZ(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(EZ,"insertAscending")});var Kd=g((REe,oM)=>{"use strict";var nT=require("joi"),{string:Iu,boolean:nM,date:hZ}=nT.types(),mZ=je(),{validateSchemaExists:SEe,validateTableExists:TEe,validateSchemaName:gEe}=Xn(),pZ=P(),SZ=Ve(),sM=ee();sM.initSync();var TZ=Iu.invalid(sM.get(pZ.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(SZ.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(),iM={operation:Iu.valid("add_node","update_node","set_node_replication"),node_name:TZ,subscriptions:nT.array().items({table:Iu.optional(),schema:Iu.optional(),database:Iu.optional(),subscribe:nM.required(),publish:nM.required().custom(RZ),start_time:hZ.iso()}).min(1).required()};function gZ(e){return mZ.validateBySchema(e,nT.object(iM))}a(gZ,"addUpdateNodeValidator");function RZ(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(RZ,"checkForFalsy");oM.exports={addUpdateNodeValidator:gZ,validation_schema:iM}});var cM=g((OEe,aM)=>{var AZ=je(),OZ={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};aM.exports=function(e){return AZ.validateObject(e,OZ)}});var Wd=g((bEe,uM)=>{"use strict";var bZ=P().OPERATIONS_ENUM,sT=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=bZ.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};uM.exports=sT});var _M=g((NEe,lM)=>{"use strict";var yZ={OPERATION:"operation",REFRESH:"refresh"},iT=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},oT=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};lM.exports={JWTTokens:iT,TOKEN_TYPE_ENUM:yZ,JWTRSAKeys:oT}});var Du=g((wEe,hM)=>{"use strict";var Cu=require("jsonwebtoken"),aT=require("fs-extra"),cT=z(),dn=P(),{handleHDBError:Ar,hdb_errors:NZ}=se(),{HTTP_STATUS_CODES:Or,AUTHENTICATION_ERROR_MSGS:br}=NZ,wu=$(),dM=z_(),_T=_n(),IZ=Fr().update,wZ=Wd(),CZ=Ns(),{UserEventMsg:DZ}=Pn(),Si=ee();Si.initSync();var uT=require("path"),{JWTTokens:LZ,JWTRSAKeys:MZ,TOKEN_TYPE_ENUM:Qd}=_M(),PZ=Si.get(dn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Si.get(dn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",UZ=Si.get(dn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Si.get(dn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",zd="RS256",lT;hM.exports={createTokens:vZ,validateOperationToken:xZ,refreshOperationToken:BZ,validateRefreshToken:EM};async function vZ(e){if(cT.isEmpty(e)||typeof e!="object")throw Ar(new Error,br.INVALID_AUTH_OBJECT,Or.BAD_REQUEST,void 0,void 0,!0);if(cT.isEmpty(e.username))throw Ar(new Error,br.USERNAME_REQUIRED,Or.BAD_REQUEST,void 0,void 0,!0);if(cT.isEmpty(e.password))throw Ar(new Error,br.PASSWORD_REQUIRED,Or.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await _T.findAndValidateUser(e.username,e.password),!t)throw Ar(new Error,br.INVALID_CREDENTIALS,Or.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw wu.error(E),Ar(new Error,br.INVALID_CREDENTIALS,Or.UNAUTHORIZED,void 0,void 0,!0)}let r=await Jd(),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 fM(i,r.private_key,r.passphrase),c=await Cu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:UZ,algorithm:zd,subject:Qd.REFRESH}),u=dM.hash(c),_=new wZ(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await IZ(_)}catch(E){wu.error(E),d=E}if(d!==void 0||l.skipped_hashes.length>0)throw Ar(new Error,br.REFRESH_TOKEN_SAVE_FAILED,Or.INTERNAL_SERVER_ERROR);return CZ.signalUserChange(new DZ(process.pid)),new LZ(o,c)}a(vZ,"createTokens");async function fM(e,t,r){return await Cu.sign(e,{key:t,passphrase:r},{expiresIn:PZ,algorithm:zd,subject:Qd.OPERATION})}a(fM,"signOperationToken");async function Jd(){if(lT===void 0)try{let e=uT.join(Si.getHdbBasePath(),dn.LICENSE_KEY_DIR_NAME,dn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=uT.join(Si.getHdbBasePath(),dn.LICENSE_KEY_DIR_NAME,dn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=uT.join(Si.getHdbBasePath(),dn.LICENSE_KEY_DIR_NAME,dn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await aT.readFile(e)).toString(),s=(await aT.readFile(t)).toString(),i=(await aT.readFile(r)).toString();lT=new MZ(i,s,n)}catch(e){throw wu.error(e),Ar(new Error,br.NO_ENCRYPTION_KEYS,Or.INTERNAL_SERVER_ERROR)}return lT}a(Jd,"getJWTRSAKeys");async function BZ(e){if(!e)throw Ar(new Error,br.INVALID_BODY,Or.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Ar(new Error,br.REFRESH_TOKEN_REQUIRED,Or.BAD_REQUEST,void 0,void 0,!0);await EM(e.refresh_token);let t=await Jd(),r=await Cu.decode(e.refresh_token);return{operation_token:await fM({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(BZ,"refreshOperationToken");async function xZ(e){try{let t=await Jd(),r=await Cu.verify(e,t.public_key,{algorithms:zd,subject:Qd.OPERATION});return await _T.findAndValidateUser(r.username,void 0,!1)}catch(t){throw wu.warn(t),t.name&&t.name==="TokenExpiredError"?Ar(new Error,br.TOKEN_EXPIRED,Or.FORBIDDEN):Ar(new Error,br.INVALID_TOKEN,Or.UNAUTHORIZED)}}a(xZ,"validateOperationToken");async function EM(e){let t;try{let r=await Jd(),n=await Cu.verify(e,r.public_key,{algorithms:zd,subject:Qd.REFRESH});t=await _T.findAndValidateUser(n.username,void 0,!1)}catch(r){throw wu.warn(r),r.name&&r.name==="TokenExpiredError"?Ar(new Error,br.TOKEN_EXPIRED,Or.FORBIDDEN):Ar(new Error,br.INVALID_TOKEN,Or.UNAUTHORIZED)}if(!dM.validate(t.refresh_token,e))throw Ar(new Error,br.INVALID_TOKEN,Or.UNAUTHORIZED);return t}a(EM,"validateRefreshToken")});var dT=g((LEe,SM)=>{"use strict";var HZ=cM(),ga=require("passport"),GZ=require("passport-local").Strategy,qZ=require("passport-http").BasicStrategy,FZ=require("util"),kZ=_n(),pM=FZ.callbackify(kZ.findAndValidateUser),DEe=vr(),VZ=P(),mM=Du();ga.use(new GZ(function(e,t,r){pM(e,t,r)}));ga.use(new qZ(function(e,t,r){pM(e,t,r)}));ga.serializeUser(function(e,t){t(null,e)});ga.deserializeUser(function(e,t){t(null,e)});function $Z(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":ga.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===VZ.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?mM.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):mM.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:ga.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a($Z,"authorize");function YZ(e,t){let r=HZ(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(YZ,"checkPermissions");SM.exports={authorize:$Z,checkPermissions:YZ}});var Ti=g((PEe,TM)=>{"use strict";var fT=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},ET=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};TM.exports={Node:fT,NodeSubscription:ET}});var RM=g((vEe,gM)=>{"use strict";var KZ=P().OPERATIONS_ENUM,hT=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=KZ.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};gM.exports=hT});var Lu=g((xEe,AM)=>{"use strict";var mT=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},pT=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)}};AM.exports={RemotePayloadObject:mT,RemotePayloadSubscription:pT}});var bM=g((GEe,OM)=>{"use strict";var ST=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}};OM.exports=ST});var IM=g(($Ee,NM)=>{"use strict";var WZ=bM(),FEe=ft(),yM=ze(),QZ=$(),{getSchemaPath:kEe,getTransactionAuditStorePath:VEe}=Xe(),{getDatabases:zZ}=(Ae(),ie(ke));NM.exports=JZ;async function JZ(e){let t=new WZ;try{let r=zZ()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await yM.environmentDataSize(schema_path,e.name),o=await yM.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){QZ.warn(`unable to stat table dbi due to ${r}`)}return t}a(JZ,"lmdbGetTableSize")});var CM=g((KEe,wM)=>{"use strict";var TT=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}};wM.exports=TT});var Ra=g((jEe,PM)=>{"use strict";var XZ=require("fs-extra"),jZ=require("path"),sr=require("systeminformation"),gi=$(),DM=ut(),QEe=Ve(),jd=P(),ZZ=IM(),e5=bs(),{getThreadInfo:LM}=Qe(),DT=ee();DT.initSync();var t5=CM(),{openEnvironment:zEe}=ze(),{getSchemaPath:JEe}=Xe(),{database:XEe,databases:gT}=(Ae(),ie(ke)),Xd;PM.exports={getHDBProcessInfo:bT,getNetworkInfo:NT,getDiskInfo:yT,getMemoryInfo:OT,getCPUInfo:AT,getTimeInfo:RT,getSystemInformation:IT,systemInformation:r5,getTableSize:wT,getMetrics:CT};function RT(){return sr.time()}a(RT,"getTimeInfo");async function AT(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await sr.cpu();l.cpu_speed=await sr.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:T,...A}=await sr.currentLoad();return A.cpus=[],T.forEach(b=>{let{raw_load:I,raw_load_idle:B,raw_load_irq:U,raw_load_nice:F,raw_load_system:M,raw_load_user:Q,...J}=b;A.cpus.push(J)}),l.current_load=A,l}catch(e){return gi.error(`error in getCPUInfo: ${e}`),{}}}a(AT,"getCPUInfo");async function OT(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await sr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return gi.error(`error in getMemoryInfo: ${e}`),{}}}a(OT,"getMemoryInfo");async function bT(){let e={core:[],clustering:[]};try{let t=await sr.processes(),r;try{r=Number.parseInt(await XZ.readFile(jZ.join(DT.get(jd.CONFIG_PARAMS.ROOTPATH),jd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===jd.NODE_ERROR_CODES.ENOENT)gi.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 gi.error(`error in getHDBProcessInfo: ${t}`),e}}a(bT,"getHDBProcessInfo");async function yT(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await sr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await sr.fsStats();return e.read_write=_,e.size=await sr.fsSize(),e}catch(t){return gi.error(`error in getDiskInfo: ${t}`),e}}a(yT,"getDiskInfo");async function NT(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await sr.networkInterfaceDefault(),e.latency=await sr.inetChecksite("google.com"),(await sr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...E}=n;e.interfaces.push(E)}),(await sr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return gi.error(`error in getNetworkInfo: ${t}`),e}}a(NT,"getNetworkInfo");async function IT(){if(Xd!==void 0)return Xd;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await sr.osInfo();e=c;let u=await sr.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,Xd=e,Xd}catch(t){return gi.error(`error in getSystemInformation: ${t}`),e}}a(IT,"getSystemInformation");async function wT(){let e=[],t=await e5.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await ZZ(n));return e}a(wT,"getTableSize");async function CT(){let e={};for(let t in gT){let r=e[t]={},n=r.tables={};for(let s in gT[t])try{let i=gT[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(u=>{let[_,l,d]=u.trim().split(" ");return{pid:_,thread:l,txnid:d}}),i.primaryStore.auditStore&&(r.audit=i.auditStore.getStats()));let o=i.primaryStore.getStats(),c={};for(let u of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[u]=o[u];n[s]=c}catch(i){gi.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(CT,"getMetrics");async function MM(){if(DT.get(jd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await DM.getNATSReferences(),t=await DM.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(MM,"getNatsStreamInfo");async function r5(e){let t=new t5;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await IT(),t.time=RT(),t.cpu=await AT(),t.memory=await OT(),t.disk=await yT(),t.network=await NT(),t.harperdb_processes=await bT(),t.table_size=await wT(),t.metrics=await CT(),t.threads=await LM(),t.replication=await MM(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await IT();break;case"time":t.time=RT();break;case"cpu":t.cpu=await AT();break;case"memory":t.memory=await OT();break;case"disk":t.disk=await yT();break;case"network":t.network=await NT();break;case"harperdb_processes":t.harperdb_processes=await bT();break;case"table_size":t.table_size=await wT();break;case"database_metrics":case"metrics":t.metrics=await CT();break;case"threads":t.threads=await LM();break;case"replication":t.replication=await MM();break;default:break}return t}a(r5,"systemInformation")});var ef=g((ehe,UM)=>{"use strict";UM.exports={version:n5,printVersion:s5};var Zd=du();function n5(){if(Zd)return Zd.version}a(n5,"version");function s5(){Zd&&console.log(`HarperDB Version ${Zd.version}`)}a(s5,"printVersion")});var fn=g((she,HM)=>{"use strict";var i5=Fr(),LT=z(),o5=require("util"),Eo=P(),vM=ee();vM.initSync();var a5=dT(),BM=qr(),{Node:rhe,NodeSubscription:nhe}=Ti(),c5=oa(),u5=RM(),{RemotePayloadObject:l5,RemotePayloadSubscription:_5}=Lu(),{handleHDBError:d5,hdb_errors:f5}=se(),{HTTP_STATUS_CODES:E5,HDB_ERROR_MSGS:h5}=f5,m5=rs(),p5=Ra(),S5=ef(),{getDatabases:T5}=(Ae(),ie(ke)),g5=o5.promisify(a5.authorize),R5=BM.searchByHash,A5=BM.searchByValue;HM.exports={authHeaderToUser:O5,isEmpty:b5,getNodeRecord:y5,upsertNodeRecord:N5,buildNodePayloads:I5,checkClusteringEnabled:w5,getAllNodeRecords:C5,getSystemInfo:D5,reverseSubscription:xM};async function O5(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await g5(t,null),e}a(O5,"authHeaderToUser");function b5(e){return e==null}a(b5,"isEmpty");async function y5(e){let t=new c5(Eo.SYSTEM_SCHEMA_NAME,Eo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return R5(t)}a(y5,"getNodeRecord");async function N5(e){let t=new u5(Eo.SYSTEM_SCHEMA_NAME,Eo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return i5.upsert(t)}a(N5,"upsertNodeRecord");function xM(e){if(LT.isEmpty(e.subscribe)||LT.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(xM,"reverseSubscription");function I5(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=LT.getTableHashAttribute(u,_),{subscribe:d,publish:E}=xM(c),f=T5()[u]?.[_],h=new _5(u,_,l,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);s.push(h)}return new l5(r,t,s,n)}a(I5,"buildNodePayloads");function w5(){if(!vM.get(Eo.CONFIG_PARAMS.CLUSTERING_ENABLED))throw d5(new Error,h5.CLUSTERING_NOT_ENABLED,E5.BAD_REQUEST,void 0,void 0,!0)}a(w5,"checkClusteringEnabled");async function C5(){let e=new m5(Eo.SYSTEM_SCHEMA_NAME,Eo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await A5(e))}a(C5,"getAllNodeRecords");async function D5(){let e=await p5.getSystemInformation();return{hdb_version:S5.version(),node_version:e.node_version,platform:e.platform}}a(D5,"getSystemInfo")});var MT=g((ohe,KM)=>{"use strict";var tf=ut(),GM=z(),qM=Ve(),FM=P(),rf=$(),kM=bu(),L5=md(),{RemotePayloadObject:M5}=Lu(),{handleHDBError:VM,hdb_errors:P5}=se(),{HTTP_STATUS_CODES:$M}=P5,{NodeSubscription:YM}=Ti();KM.exports=U5;async function U5(e,t){let r;try{r=await tf.request(`${t}.${qM.REQUEST_SUFFIX}`,new M5(FM.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),rf.trace("Response from remote describe all request:",r)}catch(o){rf.error(`addNode received error from describe all request to remote node: ${o}`);let c=tf.requestErrorHandler(o,"add_node",t);throw VM(new Error,c,$M.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===qM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw VM(new Error,o,$M.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,u=o.database??o.schema??"data";if(u===FM.SYSTEM_SCHEMA_NAME){await tf.createLocalTableStream(u,c);let h=new YM(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=GM.doesSchemaExist(u),l=n[u]!==void 0,d=c?GM.doesTableExist(u,c):!0,E=c?n?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!E){s.push(o);continue}if(!_&&l&&(rf.trace(`addNode creating schema: ${u}`),await kM.createSchema({operation:"create_schema",schema:u})),!d&&E){rf.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(n[u][c].attributes)}`);let h=new L5(u,c,n[u][c].hash_attribute);n[u][c].attributes&&(h.attributes=n[u][c].attributes),await kM.createTable(h)}await tf.createLocalTableStream(u,c);let f=new YM(u,c,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:s}}a(U5,"reviewSubscriptions")});var af=g((che,zM)=>{"use strict";var{handleHDBError:nf,hdb_errors:v5}=se(),{HTTP_STATUS_CODES:sf}=v5,{addUpdateNodeValidator:B5}=Kd(),of=$(),QM=P(),WM=Ve(),x5=z(),Mu=ut(),Pu=fn(),H5=ee(),G5=MT(),{Node:q5,NodeSubscription:F5}=Ti(),{broadcast:k5}=Qe(),V5="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",$5="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Y5=H5.get(QM.CONFIG_PARAMS.CLUSTERING_NODENAME);zM.exports=K5;async function K5(e,t=!1){of.trace("addNode called with:",e),Pu.checkClusteringEnabled();let r=B5(e);if(r)throw nf(r,r.message,sf.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await Pu.getNodeRecord(n);if(!x5.isEmptyOrZeroLength(d))throw nf(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,sf.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await G5(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=V5,o;let c=Pu.buildNodePayloads(s,Y5,QM.OPERATIONS_ENUM.ADD_NODE,await Pu.getSystemInfo()),u=[];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,u.push(new F5(f.schema,f.table,f.publish,f.subscribe))}of.trace("addNode sending remote payload:",c);let _;try{_=await Mu.request(`${n}.${WM.REQUEST_SUFFIX}`,c)}catch(d){of.error(`addNode received error from request: ${d}`);for(let f=0,h=s.length;f<h;f++){let p=s[f];p.publish=!1,p.subscribe=!1,await Mu.updateRemoteConsumer(p,n)}let E=Mu.requestErrorHandler(d,"add_node",n);throw nf(new Error,E,sf.INTERNAL_SERVER_ERROR,"error",E)}if(_.status===WM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw nf(new Error,d,sf.INTERNAL_SERVER_ERROR,"error",d)}of.trace(_);for(let d=0,E=s.length;d<E;d++){let f=s[d];await Mu.updateRemoteConsumer(f,n),f.subscribe===!0&&await Mu.updateConsumerIterator(f.schema,f.table,n,"start")}let l=new q5(n,u,_.system_info);return await Pu.upsertNodeRecord(l),k5({type:"nats_update"}),i.length>0?o.message=$5:o.message=`Successfully added '${n}' to manifest`,o}a(K5,"addNode")});var vT=g((_he,jM)=>{"use strict";var{handleHDBError:PT,hdb_errors:W5}=se(),{HTTP_STATUS_CODES:UT}=W5,{addUpdateNodeValidator:Q5}=Kd(),Uu=$(),XM=P(),JM=Ve(),lhe=z(),vu=ut(),Bu=fn(),z5=ee(),{cloneDeep:J5}=require("lodash"),X5=MT(),{Node:j5,NodeSubscription:Z5}=Ti(),{broadcast:e8}=Qe(),t8="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",r8="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",n8=z5.get(XM.CONFIG_PARAMS.CLUSTERING_NODENAME);jM.exports=s8;async function s8(e){Uu.trace("updateNode called with:",e),Bu.checkClusteringEnabled();let t=Q5(e);if(t)throw PT(t,t.message,UT.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Bu.getNodeRecord(r);s.length>0&&(n=J5(s));let{added:i,skipped:o}=await X5(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=t8,c;let u=Bu.buildNodePayloads(i,n8,XM.OPERATIONS_ENUM.UPDATE_NODE,await Bu.getSystemInfo());for(let l=0,d=i.length;l<d;l++){let E=i[l];Uu.trace(`updateNode updating work stream for node: ${r} subscription:`,E),i[l].start_time===void 0&&delete i[l].start_time}Uu.trace("updateNode sending remote payload:",u);let _;try{_=await vu.request(`${r}.${JM.REQUEST_SUFFIX}`,u)}catch(l){Uu.error(`updateNode received error from request: ${l}`);let d=vu.requestErrorHandler(l,"update_node",r);throw PT(new Error,d,UT.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===JM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw PT(new Error,l,UT.INTERNAL_SERVER_ERROR,"error",l)}Uu.trace(_);for(let l=0,d=i.length;l<d;l++){let E=i[l];await vu.updateRemoteConsumer(E,r),E.subscribe===!0?await vu.updateConsumerIterator(E.schema,E.table,r,"start"):await vu.updateConsumerIterator(E.schema,E.table,r,"stop")}return n||(n=[new j5(r,[],_.system_info)]),await i8(n[0],i,_.system_info),o.length>0?c.message=r8:c.message=`Successfully updated '${r}'`,c}a(s8,"updateNode");async function i8(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=n.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new Z5(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Bu.upsertNodeRecord(n),e8({type:"nats_update"})}a(i8,"updateNodeTable")});var nP=g((fhe,rP)=>{"use strict";var tP=require("joi"),{string:ZM}=tP.types(),o8=je(),eP=P(),a8=ee(),c8=Ve();rP.exports=u8;function u8(e){let t=ZM.invalid(a8.get(eP.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(c8.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=tP.object({operation:ZM.valid(eP.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return o8.validateBySchema(e,r)}a(u8,"removeNodeValidator")});var uf=g((hhe,cP)=>{"use strict";var{handleHDBError:sP,hdb_errors:l8}=se(),{HTTP_STATUS_CODES:iP}=l8,_8=nP(),xu=$(),oP=fn(),d8=z(),cf=P(),aP=Ve(),BT=ut(),f8=ee(),{RemotePayloadObject:E8}=Lu(),{NodeSubscription:h8}=Ti(),m8=aa(),p8=ci(),{broadcast:S8}=Qe(),T8=f8.get(cf.CONFIG_PARAMS.CLUSTERING_NODENAME);cP.exports=g8;async function g8(e){xu.trace("removeNode called with:",e),oP.checkClusteringEnabled();let t=_8(e);if(t)throw sP(t,t.message,iP.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await oP.getNodeRecord(r);if(d8.isEmptyOrZeroLength(n))throw sP(new Error,`Node '${r}' was not found.`,iP.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new E8(cf.OPERATIONS_ENUM.REMOVE_NODE,T8,[]),i,o=!1;for(let u=0,_=n.subscriptions.length;u<_;u++){let l=n.subscriptions[u];l.subscribe===!0&&await BT.updateConsumerIterator(l.schema,l.table,r,"stop");try{await BT.updateRemoteConsumer(new h8(l.schema,l.table,!1,!1),r)}catch(d){xu.error(d)}}try{i=await BT.request(`${r}.${aP.REQUEST_SUFFIX}`,s),xu.trace("Remove node reply from remote node:",r,i)}catch(u){xu.error("removeNode received error from request:",u),o=!0}let c=new m8(cf.SYSTEM_SCHEMA_NAME,cf.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await p8.deleteRecord(c),S8({type:"nats_update"}),i?.status===aP.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(xu.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(g8,"removeNode")});var _P=g((phe,lP)=>{"use strict";var uP=require("joi"),{string:R8,array:A8}=uP.types(),O8=je(),b8=Kd();lP.exports=y8;function y8(e){let t=uP.object({operation:R8.valid("configure_cluster").required(),connections:A8.items(b8.validation_schema).required()});return O8.validateBySchema(e,t)}a(y8,"configureClusterValidator")});var xT=g((The,mP)=>{"use strict";var N8=P(),lf=$(),I8=z(),w8=uf(),C8=af(),dP=fn(),D8=_P(),{handleHDBError:fP,hdb_errors:L8}=se(),{HTTP_STATUS_CODES:EP}=L8,M8="Configure cluster complete.",P8="Failed to configure the cluster. Check the logs for more details.",U8="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";mP.exports=v8;async function v8(e){lf.trace("configure cluster called with:",e),dP.checkClusteringEnabled();let t=D8(e);if(t)throw fP(t,t.message,EP.BAD_REQUEST,void 0,void 0,!0);let r=await dP.getAllNodeRecords(),n=[];for(let l=0,d=r.length;l<d;l++){let E=await hP(w8,{operation:N8.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[l].name},r[l].name);n.push(E)}lf.trace("All results from configure_cluster remove node:",n);let s=[],i=e.connections.length;for(let l=0;l<i;l++){let d=e.connections[l],E=await hP(C8,d,d.node_name);s.push(E)}lf.trace("All results from configure_cluster add node:",s);let o=[],c=[],u=!1,_=n.concat(s);for(let l=0,d=_.length;l<d;l++){let E=_[l];E.status==="rejected"&&(lf.error(E),o.includes(E.node_name)||o.push(E.node_name)),(E?.result?.message?.includes?.("Successfully")||E?.result?.includes?.("Successfully"))&&(u=!0),!(typeof E.result=="string"&&E.result.includes("Successfully removed")||E.status==="rejected")&&c.push({node_name:E?.node_name,subscriptions:E?.result})}if(I8.isEmptyOrZeroLength(o))return{message:M8,connections:c};if(u)return{message:U8,failed_nodes:o,connections:c};throw fP(new Error,P8,EP.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(v8,"configureCluster");async function hP(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(hP,"functionWrapper")});var gP=g((Rhe,TP)=>{"use strict";var Hu=require("joi"),B8=je(),{validateSchemaExists:pP,validateTableExists:x8,validateSchemaName:SP}=Xn(),H8=Hu.object({operation:Hu.string().valid("purge_stream"),schema:Hu.string().custom(pP).custom(SP).optional(),database:Hu.string().custom(pP).custom(SP).optional(),table:Hu.string().custom(x8).required()});function G8(e){return B8.validateBySchema(e,H8)}a(G8,"purgeStreamValidator");TP.exports=G8});var HT=g((Ohe,RP)=>{"use strict";var{handleHDBError:q8,hdb_errors:F8}=se(),{HTTP_STATUS_CODES:k8}=F8,V8=gP(),$8=ut(),Y8=fn();RP.exports=K8;async function K8(e){e.schema=e.schema??e.database;let t=V8(e);if(t)throw q8(t,t.message,k8.BAD_REQUEST,void 0,void 0,!0);Y8.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await $8.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(K8,"purgeStream")});var FT=g((yhe,IP)=>{"use strict";var qT=fn(),W8=ut(),bP=ee(),_f=P(),ho=Ve(),Q8=z(),GT=$(),{RemotePayloadObject:z8}=Lu(),{ErrorCode:AP}=require("nats"),OP=bP.get(_f.CONFIG_PARAMS.CLUSTERING_ENABLED),yP=bP.get(_f.CONFIG_PARAMS.CLUSTERING_NODENAME);IP.exports={clusterStatus:J8,buildNodeStatus:NP};async function J8(){let e={node_name:yP,is_enabled:OP,connections:[]};if(!OP)return e;let t=await qT.getAllNodeRecords();if(Q8.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(NP(t[n],e.connections));return await Promise.allSettled(r),e}a(J8,"clusterStatus");async function NP(e,t){let r=e.name,n=new z8(_f.OPERATIONS_ENUM.CLUSTER_STATUS,yP,void 0,await qT.getSystemInfo()),s,i,o=ho.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();s=await W8.request(ho.REQUEST_SUBJECT(r),n),i=Date.now()-u,s.status===ho.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ho.CLUSTER_STATUS_STATUSES.CLOSED,GT.error(`Error getting node status from ${r} `,s))}catch(u){GT.warn(`Error getting node status from ${r}`,u),u.code===AP.NoResponders?o=ho.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===AP.Timeout?o=ho.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ho.CLUSTER_STATUS_STATUSES.CLOSED}let c=new X8(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let u={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==_f.PRE_4_0_0_VERSION&&await qT.upsertNodeRecord(u)}catch(u){GT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(NP,"buildNodeStatus");function X8(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(X8,"NodeStatusObject")});var VT=g((Ihe,wP)=>{"use strict";var{handleHDBError:j8,hdb_errors:Z8}=se(),{HTTP_STATUS_CODES:e6}=Z8,t6=ut(),r6=fn(),kT=z(),df=require("joi"),n6=je(),s6=2e3,i6=df.object({timeout:df.number().min(1),connected_nodes:df.boolean(),routes:df.boolean()});wP.exports=o6;async function o6(e){r6.checkClusteringEnabled();let t=n6.validateBySchema(e,i6);if(t)throw j8(t,t.message,e6.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||kT.autoCastBoolean(n),o=s===void 0||kT.autoCastBoolean(s),c={nodes:[]},u=await t6.getServerList(r??s6),_={};if(i)for(let l=0,d=u.length;l<d;l++){let E=u[l].statsz;E&&(_[u[l].server.name]=E.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let E=u[l].server,f=u[l].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[E.name]&&_[E.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(p=>({host:p.split(":")[0],port:kT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(o6,"clusterNetwork")});var MP=g((Che,LP)=>{"use strict";var $T=require("joi"),CP=je(),{route_constraints:DP}=op();LP.exports={setRoutesValidator:a6,deleteRoutesValidator:c6};function a6(e){let t=$T.object({server:$T.valid("hub","leaf").required(),routes:DP.required()});return CP.validateBySchema(e,t)}a(a6,"setRoutesValidator");function c6(e){let t=$T.object({routes:DP.required()});return CP.validateBySchema(e,t)}a(c6,"deleteRoutesValidator")});var KT=g((Lhe,BP)=>{"use strict";var mo=Er(),YT=z(),ff=P(),PP=MP(),{handleHDBError:UP,hdb_errors:u6}=se(),{HTTP_STATUS_CODES:vP}=u6,l6="cluster routes successfully set",_6="cluster routes successfully deleted";BP.exports={setRoutes:d6,getRoutes:f6,deleteRoutes:E6};function d6(e){let t=PP.setRoutesValidator(e);if(t)throw UP(t,t.message,vP.BAD_REQUEST,void 0,void 0,!0);let r=mo.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,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=YT.autoCast(_.port);let l=n.some(E=>E.host===_.host&&E.port===_.port),d=s.some(E=>E.host===_.host&&E.port===_.port);l||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?mo.updateConfigValue(ff.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):mo.updateConfigValue(ff.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:l6,set:o,skipped:i}}a(d6,"setRoutes");function f6(){let e=mo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(f6,"getRoutes");function E6(e){let t=PP.deleteRoutesValidator(e);if(t)throw UP(t,t.message,vP.BAD_REQUEST,void 0,void 0,!0);let r=mo.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],E=!1;for(let f=0,h=n.length;f<h;f++){let p=n[f];if(d.host===p.host&&d.port===p.port){n.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,p=s.length;h<p;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(n=YT.isEmptyOrZeroLength(n)?null:n,mo.updateConfigValue(ff.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),u&&(s=YT.isEmptyOrZeroLength(s)?null:s,mo.updateConfigValue(ff.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:_6,deleted:i,skipped:o}}a(E6,"deleteRoutes")});var HP=g((Phe,xP)=>{"use strict";var Gu=require("alasql"),po=require("recursive-iterator"),Hn=$(),h6=z(),qu=P(),WT=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,p6(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=>qu.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=>!qu.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][qu.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=m6(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!qu.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Gu.yy.Column({columnid:_});s.tableid&&(l.tableid=s.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function m6(e){return e.filter(t=>t[qu.PERMS_CRUD_ENUM.READ])}a(m6,"filterReadRestrictedAttrs");function p6(e,t,r,n,s){S6(e,t,r,n,s)}a(p6,"interpretAST");function Fu(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(Fu,"addSchemaTableToMap");function S6(e,t,r,n,s){if(!e){Hn.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Gu.yy.Insert?A6(e,t,r):e instanceof Gu.yy.Select?T6(e,t,r,n,s):e instanceof Gu.yy.Update?g6(e,t,r):e instanceof Gu.yy.Delete?R6(e,t,r):Hn.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(S6,"getRecordAttributesAST");function T6(e,t,r,n,s){if(!e){Hn.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(h6.isEmptyOrZeroLength(i)){Hn.error("No schema specified");return}e.from.forEach(c=>{Fu(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Fu(c.table,t,r,n,s)});let o=new po(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Hn.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new po(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Hn.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new po(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=s.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Hn.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new po(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Hn.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(T6,"getSelectAttributes");function g6(e,t,r){if(!e){Hn.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new po(e.columns),s=e.table.databaseid;Fu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&QT(e.table.tableid,s,i.columnid,t,r)}a(g6,"getUpdateAttributes");function R6(e,t,r){if(!e){Hn.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new po(e.where),s=e.table.databaseid;Fu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&QT(e.table.tableid,s,i.columnid,t,r)}a(R6,"getDeleteAttributes");function A6(e,t,r){if(!e){Hn.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new po(e.columns),s=e.into.databaseid;Fu(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&QT(e.into.tableid,s,i.columnid,t,r)}a(A6,"getInsertAttributes");function QT(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(QT,"pushAttribute");xP.exports=WT});var XT=g((vhe,kP)=>{var Ef=ji(),GP=require("chalk"),zr=$(),qP=require("prompt"),{promisify:O6}=require("util"),zT=P(),b6=require("fs-extra"),y6=require("path"),N6=z(),I6=ef(),FP=ee();FP.initSync();var w6=require("moment"),C6=O6(qP.get),D6=y6.join(FP.getHdbBasePath(),zT.LICENSE_KEY_DIR_NAME,zT.LICENSE_FILE_NAME,zT.LICENSE_FILE_NAME);kP.exports={getFingerprint:M6,setLicense:L6,parseLicense:JT,register:P6,getRegistrationInfo:v6};async function L6(e){if(e&&e.key&&e.company){try{zr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await JT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw zr.error(r),zr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(L6,"setLicense");async function M6(){let e={};try{e=await Ef.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw zr.error(r),zr.error(t),new Error(r)}return e}a(M6,"getFingerprint");async function JT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");zr.info("Validating license input...");let r=Ef.validateLicense(e,t);if(zr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(zr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(zr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{zr.info("writing license to disk"),await b6.writeFile(D6,JSON.stringify({license_key:e,company:t}))}catch(n){throw zr.error("Failed to write License"),n}return"Registration successful."}a(JT,"parseLicense");async function P6(){let e=await U6();return JT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(P6,"register");async function U6(){let e=await Ef.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:GP.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:GP.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{qP.start()}catch(n){zr.error(n)}let r;try{r=await C6(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(U6,"promptForRegistration");async function v6(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Ef.getLicense()}catch(r){throw zr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(N6.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=I6.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=w6.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(v6,"getRegistrationInfo")});var $P=g((xhe,VP)=>{"use strict";var B6=Ve(),jT=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+B6.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:u},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:E,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};VP.exports=jT});var WP=g((Ghe,KP)=>{"use strict";var YP=Ve(),ZT=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+YP.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+YP.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:l,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};KP.exports=ZT});var zP=g((Fhe,QP)=>{"use strict";var eg=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};QP.exports=eg});var XP=g((Vhe,JP)=>{"use strict";var x6=Ve(),tg=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+x6.SERVER_SUFFIX.ADMIN,this.password=r}};JP.exports=tg});var sg=g((Yhe,eU)=>{"use strict";var Aa=require("path"),pf=require("fs-extra"),H6=$P(),G6=WP(),q6=zP(),F6=XP(),rg=_n(),ba=z(),yr=Er(),mf=P(),ku=Ve(),{CONFIG_PARAMS:pt}=mf,ya=$(),Vu=ee(),jP=Os(),ng=ut(),Oa="clustering",k6=1e4,ZP=50;eU.exports={generateNatsConfig:$6,removeNatsConfig:Y6,getHubConfigPath:V6};function V6(){let e=Vu.get(pt.ROOTPATH);return Aa.join(e,Oa,ku.NATS_CONFIG_FILES.HUB_SERVER)}a(V6,"getHubConfigPath");async function $6(e=!1,t=void 0){Vu.initSync();let r=Vu.get(pt.ROOTPATH),n=Aa.join(r,Oa,ku.PID_FILES.HUB),s=Aa.join(r,Oa,ku.PID_FILES.LEAF),i=yr.getConfigFromFile(pt.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Aa.join(r,Oa,ku.NATS_CONFIG_FILES.HUB_SERVER),c=Aa.join(r,Oa,ku.NATS_CONFIG_FILES.LEAF_SERVER),u=yr.getConfigFromFile(pt.CLUSTERING_TLS_CERTIFICATE),_=yr.getConfigFromFile(pt.CLUSTERING_TLS_PRIVATEKEY),l=yr.getConfigFromFile(pt.CLUSTERING_TLS_CERT_AUTH),d=yr.getConfigFromFile(pt.CLUSTERING_TLS_INSECURE),E=yr.getConfigFromFile(pt.CLUSTERING_TLS_VERIFY),f=yr.getConfigFromFile(pt.CLUSTERING_NODENAME),h=yr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await ng.checkNATSServerInstalled()||Sf("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await rg.listUsers(),S=yr.getConfigFromFile(pt.CLUSTERING_USER),T=await rg.getClusterUser();(ba.isEmpty(T)||T.active!==!0)&&Sf(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await hf(pt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await hf(pt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await hf(pt.CLUSTERING_HUBSERVER_NETWORK_PORT),await hf(pt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let A=[],b=[];for(let[J,X]of p.entries())X.role?.role===mf.ROLE_TYPES_ENUM.CLUSTER_USER&&X.active&&(A.push(new F6(X.username,jP.decrypt(X.hash))),b.push(new q6(X.username,jP.decrypt(X.hash))));let I=[],{hub_routes:B}=yr.getClusteringRoutes();if(!ba.isEmptyOrZeroLength(B))for(let J of B)I.push(`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@${J.host}:${J.port}`);let U=new H6(yr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_NETWORK_PORT),f,n,u,_,l,d,E,h,yr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_CLUSTER_NAME),yr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),I,A,b);l==null&&(delete U.tls.ca_file,delete U.leafnodes.tls.ca_file),t=ba.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===mf.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await pf.writeJson(o,U),ya.trace(`Hub server config written to ${o}`));let F=`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,M=`tls://${T.uri_encoded_name}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,Q=new G6(yr.getConfigFromFile(pt.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,s,i,[F],[M],A,b,u,_,l,d);l==null&&delete Q.tls.ca_file,(t===void 0||t===mf.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await pf.writeJson(c,Q),ya.trace(`Leaf server config written to ${c}`))}a($6,"generateNatsConfig");async function hf(e){let t=Vu.get(e);return ba.isEmpty(t)&&Sf(`port undefined for '${e}'`),await ba.isPortTaken(t)&&Sf(`'${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(hf,"isPortAvailable");function Sf(e){let t=`Error generating clustering config: ${e}`;ya.error(t),console.error(t),process.exit(1)}a(Sf,"generateNatsConfigError");async function Y6(e){let{port:t,config_file:r}=ng.getServerConfig(e),{username:n,decrypt_hash:s}=await rg.getClusterUser(),i=0,o=2e3;for(;i<ZP;){try{let l=await ng.createConnection(t,n,s,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){ya.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=ZP)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&&ya.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await ba.async_set_timeout(_)}let c="0".repeat(k6),u=Aa.join(Vu.get(pt.ROOTPATH),Oa,r);await pf.writeFile(u,c),await pf.remove(u),ya.notify(e,"started.")}a(Y6,"removeNatsConfig")});var oU=g((Whe,iU)=>{"use strict";var Jr=ee(),K6=ji(),pe=P(),$u=Ve(),Ls=require("path"),{PACKAGE_ROOT:gf}=P(),tU=ee(),Tf=z(),Na="/dev/null",W6=Ls.join(gf,"launchServiceScripts"),rU=Ls.join(gf,"utility/scripts"),Q6=Ls.join(rU,pe.HDB_RESTART_SCRIPT),nU=Ls.resolve(gf,"dependencies",`${process.platform}-${process.arch}`,$u.NATS_BINARY_NAME);function sU(){let t=K6.licenseSearch().ram_allocation||pe.RAM_ALLOCATION_ENUM.DEFAULT,r=pe.MEM_SETTING_KEY+t,n={[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Tf.noBootFile()&&(n[pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Tf.getEnvCliRootPath()),{name:pe.PROCESS_DESCRIPTORS.HDB,script:pe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:gf}}a(sU,"generateMainServerConfig");var z6=9930;function J6(){Jr.initSync(!0);let e=Jr.get(pe.CONFIG_PARAMS.ROOTPATH),t=Ls.join(e,"clustering",$u.NATS_CONFIG_FILES.HUB_SERVER),r=Ls.join(Jr.get(pe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),pe.LOG_NAMES.HDB),n=tU.get(pe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=$u.LOG_LEVEL_FLAGS[Jr.get(pe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==z6?"-"+n:""),script:nU,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Jr.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Na,i.error_file=Na),i}a(J6,"generateNatsHubServerConfig");var X6=9940;function j6(){Jr.initSync(!0);let e=Jr.get(pe.CONFIG_PARAMS.ROOTPATH),t=Ls.join(e,"clustering",$u.NATS_CONFIG_FILES.LEAF_SERVER),r=Ls.join(Jr.get(pe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),pe.LOG_NAMES.HDB),n=tU.get(pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=$u.LOG_LEVEL_FLAGS[Jr.get(pe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==X6?"-"+n:""),script:nU,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Jr.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Na,i.error_file=Na),i}a(j6,"generateNatsLeafServerConfig");function Z6(){Jr.initSync();let e=Ls.join(Jr.get(pe.CONFIG_PARAMS.LOGGING_ROOT),pe.LOG_NAMES.HDB),t={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:pe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:W6,autorestart:!1};return Jr.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Na,t.error_file=Na),t}a(Z6,"generateClusteringUpgradeV4ServiceConfig");function e9(){let e={[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.RESTART_HDB};return Tf.noBootFile()&&(e[pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Tf.getEnvCliRootPath()),{...{name:pe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:rU},script:Q6}}a(e9,"generateRestart");function t9(){return{apps:[sU()]}}a(t9,"generateAllServiceConfigs");iU.exports={generateAllServiceConfigs:t9,generateMainServerConfig:sU,generateRestart:e9,generateNatsHubServerConfig:J6,generateNatsLeafServerConfig:j6,generateClusteringUpgradeV4ServiceConfig:Z6}});var gU=g((Jhe,TU)=>{"use strict";var ve=P(),r9=z(),Ps=sg(),Rf=ut(),Ms=Ve(),Ri=oU(),Af=ee(),Ai=$(),n9=fn(),{startWorker:aU,onMessageFromWorkers:s9}=Qe(),i9=Ra(),zhe=require("util"),o9=require("child_process"),a9=require("fs"),{execFile:c9}=o9,we;TU.exports={enterPM2Mode:u9,start:Oi,stop:ig,reload:uU,restart:lU,list:og,describe:dU,connect:Us,kill:E9,startAllServices:h9,startService:ag,getUniqueServicesList:fU,restartAllServices:m9,isServiceRegistered:EU,reloadStopStart:hU,restartHdb:_U,deleteProcess:d9,startClusteringProcesses:pU,startClusteringThreads:SU,isHdbRestartRunning:f9,isClusteringRunning:S9,stopClustering:p9,reloadClustering:T9};var Yu=!1;s9(e=>{e.type==="restart"&&Af.initSync(!0)});function u9(){Yu=!0}a(u9,"enterPM2Mode");function Us(){return we||(we=require("pm2")),new Promise((e,t)=>{we.connect((r,n)=>{Ai.setupConsoleLogging(),r&&t(r),e(n)})})}a(Us,"connect");var Nr,l9=10,cU;function Oi(e,t=!1){if(Yu)return _9(e);let r=c9(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Nr.indexOf(r);o>-1&&Nr.splice(o,1),!cU&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<l9&&(a9.existsSync(Ps.getHubConfigPath())?Oi(e):(await Ps.generateNatsConfig(!0),Oi(e),await new Promise(c=>setTimeout(c,3e3)),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=Af.get(ve.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&Ms.LOG_LEVEL_HIERARCHY[o]>=Ms.LOG_LEVEL_HIERARCHY[l||"info"]){let f=l===Ms.LOG_LEVELS.ERR||l===Ms.LOG_LEVELS.WRN?Ai.OUTPUTS.STDERR:Ai.OUTPUTS.STDOUT;Ai.logCustomLevel(l||"info",f,n,i.slice(_,u.index).trim())}let[d,E]=u;_=u.index+d.length,l=Ms.LOG_LEVELS[E]}if(Ms.LOG_LEVEL_HIERARCHY[o]>=Ms.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===Ms.LOG_LEVELS.ERR||l===Ms.LOG_LEVELS.WRN?Ai.OUTPUTS.STDERR:Ai.OUTPUTS.STDOUT;Ai.logCustomLevel(l||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),Nr=[],!Nr&&!t){let i=a(()=>{cU=!0,Nr&&(Nr.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)}Nr.push(r)}a(Oi,"start");function _9(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.start(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(_9,"startWithPM2");function ig(e){if(!Yu){for(let t of Nr||[])t.name===e&&(Nr.splice(Nr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.stop(e,async(n,s)=>{n&&(we.disconnect(),r(n)),we.delete(e,(i,o)=>{i&&(we.disconnect(),r(n)),we.disconnect(),t(o)})})})}a(ig,"stop");function uU(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.reload(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(uU,"reload");function lU(e){if(!Yu)for(let t of Nr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.restart(e,(n,s)=>{we.disconnect(),t(s)})})}a(lU,"restart");function d9(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.delete(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(d9,"deleteProcess");async function _U(){await Oi(Ri.generateRestart())}a(_U,"restartHdb");async function f9(){let e=await og();for(let t in e)if(e[t].name===ve.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(f9,"isHdbRestartRunning");function og(){return new Promise(async(e,t)=>{try{await Us()}catch(r){t(r)}we.list((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(og,"list");function dU(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.describe(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(dU,"describe");function E9(){if(!Yu){for(let e of Nr||[])e.kill();Nr=[];return}return new Promise(async(e,t)=>{try{await Us()}catch(r){t(r)}we.killDaemon((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(E9,"kill");async function h9(){try{await pU(),await SU(),await Oi(Ri.generateAllServiceConfigs())}catch(e){throw we?.disconnect(),e}}a(h9,"startAllServices");async function ag(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ve.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Ri.generateMainServerConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Ri.generateNatsIngestServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Ri.generateNatsReplyServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Ri.generateNatsHubServerConfig(),await Oi(r,t),await Ps.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Ri.generateNatsLeafServerConfig(),await Oi(r,t),await Ps.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Ri.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Oi(r)}catch(r){throw we?.disconnect(),r}}a(ag,"startService");async function fU(){try{let e=await og(),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 we?.disconnect(),e}}a(fU,"getUniqueServicesList");async function m9(e=[]){try{let t=!1,r=await fU();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===ve.PROCESS_DESCRIPTORS.HDB?t=!0:await lU(o))}t&&await hU(ve.PROCESS_DESCRIPTORS.HDB)}catch(t){throw we?.disconnect(),t}}a(m9,"restartAllServices");async function EU(e){if(Nr?.find(r=>r.name===e))return!0;let t=await i9.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(EU,"isServiceRegistered");async function hU(e){let t=Af.get(ve.CONFIG_PARAMS.THREADS_COUNT)??Af.get(ve.CONFIG_PARAMS.THREADS),r=await dU(e),n=r9.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await ig(e),await ag(e)):e===ve.PROCESS_DESCRIPTORS.HDB?await _U():await uU(e)}a(hU,"reloadStopStart");var mU;async function pU(e=!1){for(let t in ve.CLUSTERING_PROCESSES){let r=ve.CLUSTERING_PROCESSES[t];await ag(r,e)}}a(pU,"startClusteringProcesses");async function SU(){mU=aU(ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Rf.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Rf.updateLocalStreams();let e=await n9.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ve.PRE_4_0_0_VERSION){Ai.info("Starting clustering upgrade 4.0.0 process"),aU(ve.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(SU,"startClusteringThreads");async function p9(){for(let e in ve.CLUSTERING_PROCESSES)if(e!==ve.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ve.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await mU.terminate();else{let t=ve.CLUSTERING_PROCESSES[e];await ig(t)}}a(p9,"stopClustering");async function S9(){for(let e in ve.CLUSTERING_PROCESSES){let t=ve.CLUSTERING_PROCESSES[e];if(await EU(t)===!1)return!1}return!0}a(S9,"isClusteringRunning");async function T9(){await Ps.generateNatsConfig(!0),await Rf.reloadNATSHub(),await Rf.reloadNATSLeaf(),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(T9,"reloadClustering")});var IU={};Fe(IU,{compactOnStart:()=>g9,copyDb:()=>NU});async function g9(){Wu.notify("Running compact on start"),console.log("Running compact on start");let e=(0,cg.get)(bi.CONFIG_PARAMS.ROOTPATH),t=new Map,r=mr();try{for(let n in r){if(n==="system")continue;let s;for(let u in r[n]){s=r[n][u].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,Of.join)(e,"backup",n+".mdb"),o=(0,Of.join)(e,bi.DATABASES_DIR_NAME,n+"-copy.mdb"),c=await RU(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 NU(n,o),console.log("Backing up",n,"to",i),await(0,So.move)(s,i,{overwrite:!0})}Ku();for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,So.move)(i,s,{overwrite:!0}),await(0,So.remove)((0,Of.join)(e,bi.DATABASES_DIR_NAME,`${n}-copy.mdb-lock`));Ku()}catch(n){Wu.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,ug.updateConfigValue)(bi.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,So.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw Ku(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await RU(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let u=`There is a discrepancy between pre and post compact record count for database ${n}.
|