harperdb 4.3.40 → 4.3.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +1 -1
- package/bin/lite.js +1 -1
- package/launchServiceScripts/launchInstallNATSServer.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +1 -1
- package/launchServiceScripts/launchNatsReplyService.js +1 -1
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +1 -1
- package/npm-shrinkwrap.json +30 -30
- package/package.json +2 -2
- 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.6fe75e34.js → main.870bbedf.js} +2 -2
- package/utility/scripts/restartHdb.js +1 -1
- /package/studio/build-local/static/js/{main.6fe75e34.js.LICENSE.txt → main.870bbedf.js.LICENSE.txt} +0 -0
package/bin/harperdb.js
CHANGED
|
@@ -7,7 +7,7 @@ Caused by:`));else if(typeof _=="object")try{n+=JSON.stringify(_)}catch{n+="Obje
|
|
|
7
7
|
`).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:jK.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(ZK,"findPs")});var _t=R((tpe,zy)=>{"use strict";var eW="__dbis__",tW="__txns__",rW="__environment_name__",nW="__dbi_defintion__",sW={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"},iW=["__createdtime__","__updatedtime__"],oW="\uFFFF",jy={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},aW=Object.values(jy);zy.exports={AUDIT_STORE_NAME:tW,INTERNAL_DBIS_NAME:eW,DBI_DEFINITION_NAME:nW,SEARCH_TYPES:sW,TIMESTAMP_NAMES:iW,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:rW,TRANSACTIONS_DBI_NAMES_ENUM:jy,TRANSACTIONS_DBIS:aW,OVERFLOW_MARKER:oW}});var nn=R((rpe,iI)=>{"use strict";var Jy=L(),Xy=_t(),Zy={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},eI=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),tI={500:eI("There was an error processing your request."),400:"Invalid request"},cW=tI[Zy.INTERNAL_SERVER_ERROR],lW={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.`},uW={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},_W={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"},dW={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 ${Xy.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Xy.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"},fW={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Jy.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${Jy.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes, check log for more info`,INVALID_FORWARD_SLASH_IN_HASH_ERR:"transaction aborted due to record(s) with a hash value that contains a forward slash, check log for more info",RECORD_MISSING_HASH_ERR:"transaction aborted due to record(s) with no hash value, check log for more info"},rI={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"},EW={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."},hW={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`},pW={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"},mW={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},SW={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`},nI={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.`},sI={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}`},TW={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."},gW={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},RW={...rI,..._W,...lW,...EW,...hW,...pW,...mW,...SW,...fW,...nI,...sI,...TW,...gW,...uW};iI.exports={CHECK_LOGS_WRAPPER:eI,HDB_ERROR_MSGS:RW,DEFAULT_ERROR_MSGS:tI,DEFAULT_ERROR_RESP:cW,HTTP_STATUS_CODES:Zy,LMDB_ERRORS_ENUM:dW,AUTHENTICATION_ERROR_MSGS:rI,VALIDATION_ERROR_MSGS:nI,ITC_ERRORS:sI}});var ie=R((spe,cI)=>{"use strict";var _c=nn(),AW=k(),OW=L(),af=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,oI),this.statusCode=n||_c.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(_c.DEFAULT_ERROR_MSGS[n]?_c.DEFAULT_ERROR_MSGS[n]:_c.DEFAULT_ERROR_MSGS[_c.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&&AW[s](i)}},SS=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}},TS=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function oI(e,t,r,n=OW.LOG_LEVELS.ERROR,s=null,i=!1){if(aI(e))return e;let o=new af(e,t,r,n,s);return i&&delete o.stack,o}a(oI,"handleHDBError");function aI(e){return e.__proto__.constructor.name===af.name}a(aI,"isHDBError");cI.exports={isHDBError:aI,handleHDBError:oI,ClientError:SS,ServerError:TS,hdb_errors:_c}});var Je=R((ope,hI)=>{"use strict";var tu=L(),bW=Y(),Ir=X(),ru=require("path"),NW=require("minimist"),lI=require("fs-extra"),uI=require("lodash");Ir.initSync();var{CONFIG_PARAMS:ro,DATABASES_PARAM_CONFIG:Jl,SYSTEM_SCHEMA_NAME:cf}=tu,Xl,Zl,eu;function _I(){if(Xl!==void 0)return Xl;if(Ir.getHdbBasePath()!==void 0)return Xl=Ir.get(ro.STORAGE_PATH)||ru.join(Ir.getHdbBasePath(),tu.DATABASES_DIR_NAME),Xl}a(_I,"getBaseSchemaPath");function dI(){if(Zl!==void 0)return Zl;if(Ir.getHdbBasePath()!==void 0)return Zl=EI(cf),Zl}a(dI,"getSystemSchemaPath");function fI(){if(eu!==void 0)return eu;if(Ir.getHdbBasePath()!==void 0)return eu=Ir.get(tu.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||ru.join(Ir.getHdbBasePath(),tu.TRANSACTIONS_DIR_NAME),eu}a(fI,"getTransactionAuditStoreBasePath");function yW(e,t){let r=Ir.get(ro.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||ru.join(fI(),e.toString())}a(yW,"getTransactionAuditStorePath");function EI(e,t){e=e.toString(),t=t&&t.toString();let r=Ir.get(tu.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||ru.join(_I(),e)}a(EI,"getSchemaPath");function IW(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,NW(process.argv));let n=r[ro.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!bW.isObject(n))throw o;i=n}for(let o of i){let c=o[cf];if(!c)continue;let l=Ir.get(ro.DATABASES);l=l??{};let _=c?.tables?.[t]?.[Jl.PATH];if(_)return uI.set(l,[cf,Jl.TABLES,t,Jl.PATH],_),Ir.setProperty(ro.DATABASES,l),_;let u=c?.[Jl.PATH];if(u)return uI.set(l,[cf,Jl.PATH],u),Ir.setProperty(ro.DATABASES,l),u}}let s=r[ro.STORAGE_PATH.toUpperCase()];if(s){if(!lI.pathExistsSync(s))throw new Error(s+" does not exist");let i=ru.join(s,e);return lI.mkdirsSync(i),Ir.setProperty(ro.STORAGE_PATH,s),i}return dI()}a(IW,"initSystemSchemaPaths");function wW(){Xl=void 0,Zl=void 0,eu=void 0}a(wW,"resetPaths");hI.exports={getBaseSchemaPath:_I,getSystemSchemaPath:dI,getTransactionAuditStorePath:yW,getTransactionAuditStoreBasePath:fI,getSchemaPath:EI,initSystemSchemaPaths:IW,resetPaths:wW}});var wr=R((upe,gI)=>{"use strict";var CW=nn().LMDB_ERRORS_ENUM,cpe=require("lmdb"),DW=_t(),lpe=require("buffer").Buffer,{OVERFLOW_MARKER:pI,MAX_SEARCH_KEY_LENGTH:lf}=DW,mI=["number","string","symbol","boolean","bigint"];function LW(e){if(e=e?.primaryStore||e,!e)throw new Error(CW.ENV_REQUIRED)}a(LW,"validateEnv");function PW(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(PW,"stringifyData");function MW(e){return e instanceof Date?e.valueOf():e}a(MW,"convertKeyValueToWrite");function UW(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(mI.includes(typeof e))return e.length>lf?[e.slice(0,lf)+pI]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(mI.includes(typeof i))i.length>lf?r.push(i.slice(0,lf)+pI):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(UW,"getIndexedValues");var uf=0,SI=0;function TI(){SI=Date.now()-performance.now()}a(TI,"adjustStartTime");TI();var vW=6e4;setInterval(TI,vW).unref();function BW(){let e=performance.now()+SI;return e>uf?(uf=e,e):(uf+=488e-6,uf)}a(BW,"getNextMonotonicTime");gI.exports={validateEnv:LW,stringifyData:PW,convertKeyValueToWrite:MW,getNextMonotonicTime:BW,getIndexedValues:UW}});var nu=R((dpe,RI)=>{"use strict";var HW=L().OPERATIONS_ENUM,gS=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=HW.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};RI.exports=gS});var su=R((hpe,NI)=>{"use strict";var Epe=nu(),_f=L(),RS=Y(),AI=k(),xW=require("uuid"),{handleHDBError:df,hdb_errors:GW}=ie(),{HDB_ERROR_MSGS:ff,HTTP_STATUS_CODES:Ef}=GW;NI.exports=OI;function OI(e,t,r){for(let s=0;s<t.length;s++)bI(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];qW(i,r,e.operation)}}a(OI,"processRows");OI.validateAttribute=bI;function bI(e){if(Buffer.byteLength(String(e))>_f.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw df(new Error,ff.ATTR_NAME_LENGTH_ERR(e),Ef.BAD_REQUEST,void 0,void 0,!0);if(RS.isEmptyOrZeroLength(e)||RS.isEmpty(e.trim()))throw df(new Error,ff.ATTR_NAME_NULLISH_ERR,Ef.BAD_REQUEST,void 0,void 0,!0)}a(bI,"validateAttribute");function qW(e,t,r){if(!e.hasOwnProperty(t)||RS.isEmptyOrZeroLength(e[t])){if(r===_f.OPERATIONS_ENUM.INSERT||r===_f.OPERATIONS_ENUM.UPSERT){e[t]=xW.v4();return}throw AI.error("Update transaction aborted due to record with no hash value:",e),df(new Error,ff.RECORD_MISSING_HASH_ERR,Ef.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>_f.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw AI.error(e),df(new Error,ff.HASH_VAL_LENGTH_ERR,Ef.BAD_REQUEST,void 0,void 0,!0)}a(qW,"validateHash")});var yI,ts,AS,iu=be(()=>{yI=require("events"),ts=class extends yI.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new AS;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)}},AS=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 zo={};$e(zo,{server:()=>dt});var II,dt,Cr=be(()=>{II=require("../index"),dt={};(0,II._assignPackageExport)("server",dt)});var NS={};$e(NS,{loadGQLSchema:()=>$W,start:()=>bS,startOnMainThread:()=>kW});function bS({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:_,StringValueNode:u}=await import("graphql"),d=o(new c(r.toString(),s)),E=new Map,f=[],h;for(let S of d.definitions)switch(S.kind){case l.OBJECT_TYPE_DEFINITION:let U=function(v){if(v.kind==="NonNullType"){let W=U(v.type);return W.nullable=!1,W}if(v.kind==="ListType")return{type:"array",elements:U(v.type)};let M={type:v.name?.value};return Object.defineProperty(M,"location",{value:v.loc.startToken}),M};a(U,"getProperty");let g=S.name.value,T=[],N={table:null,database:null,properties:T};E.set(g,N);for(let v of S.directives){if(v.name.value==="table"){for(let q of v.arguments)N[q.name.value]=q.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=g),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,f.push(N)}if(v.name.value==="sealed"&&(N.sealed=!0),v.name.value==="export"){N.export=!0;for(let q of v.arguments)q.name.value==="name"&&(N.export={name:q.value.value})}}let b=!1;for(let v of S.fields){let q=U(v.type);q.name=v.name.value,T.push(q);for(let M of v.directives)if(M.name.value==="primaryKey")b?console.warn("Can not define two attributes as a primary key"):(q.isPrimaryKey=!0,b=!0);else if(M.name.value==="indexed")q.indexed=!0;else if(M.name.value==="relationship"){let W={};for(let z of M.arguments)W[z.name.value]=z.value.value;q.relationship=W}else if(M.name.value==="createdTime")q.assignCreatedTime=!0;else if(M.name.value==="updatedTime")q.assignUpdatedTime=!0;else if(M.name.value==="expiresAt")q.expiresAt=!0;else if(M.name.value==="allow"){let W=q.authorizedRoles=[];for(let z of M.arguments)z.name.value==="role"&&W.push(z.value.value)}}N.type=g,g==="Query"&&(h=N)}function m(S){let g=E.get(S.type);g?(Object.defineProperty(S,"properties",{value:g.properties}),Object.defineProperty(S,"definition",{value:g})):S.type==="array"?m(S.elements):FW.includes(S.type)||(0,wI.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(m,"connectPropertyType");for(let S of E.values())for(let g of S.properties)m(g);for(let S of f)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,OS.dirname)(n),S.tableClass):i.set((0,OS.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var OS,wI,FW,kW,$W,CI=be(()=>{OS=require("path");Re();wI=x(rt()),FW=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(bS,"start");kW=bS,$W=bS({ensureTable:St}).handleFile});async function hf(e){let t=(0,PI.pathToFileURL)(e).toString();return VW?(ou||(ou=YW(WW)),(await(await ou).import(t)).namespace):import(t)}async function YW(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),ou=new Compartment({console,Math,Date,fetch:KW,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,LI.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:tr,tables:sn,databases:ft})}};let n=await(0,DI.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),ou}function KW(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 WW(){return{Resource:tr,tables:sn}}var DI,LI,PI,VW,ou,yS=be(()=>{Mn();Re();DI=require("fs/promises"),LI=require("path"),PI=require("url"),VW=!1;a(hf,"secureImport");a(YW,"getCompartment");a(KW,"secureOnlyFetch");a(WW,"getGlobalVars")});var wS={};$e(wS,{handleFile:()=>QW});async function QW(e,t,r,n){let s=new Map,i=await hf(r);c(i.default)&&n.set((0,IS.dirname)(t),i.default),o(i,(0,IS.dirname)(t));function o(l,_){for(let u in l){let d=l[u];c(d)?n.set(_+"/"+u,d):typeof d=="object"&&o(d,_+"/"+u)}}a(o,"recurseForResources");function c(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(c,"isResource"),s}var IS,MI=be(()=>{yS();IS=require("path");a(QW,"handleFile")});var DS={};$e(DS,{start:()=>jW});function jW({resources:e}){e.set("login",CS),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var CS,UI=be(()=>{Mn();a(jW,"start");CS=class extends tr{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 FI={};$e(FI,{parse:()=>PS,streamAsJSON:()=>au,stringify:()=>Jo});function au(e){return new LS({value:e})}function vI(e){return console.error(e),JSON.stringify(e.toString())}function BI(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Jo(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===GI)return qI(e);if(t.resolution)return t.resolution.then(()=>Jo(e));throw t}}function qI(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+=qI(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Jo(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function PS(e){return XW.test(e)?zW.parse(e):JSON.parse(e)}var HI,xI,zW,JW,GI,LS,XW,MS=be(()=>{HI=require("stream"),xI=x(require("json-bigint-fixes")),zW=(0,xI.default)({useNativeBigInt:!0}),JW=1e4,GI={};BigInt.prototype.toJSON=function(){throw GI};a(au,"streamAsJSON");LS=class extends HI.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),vI)}catch(s){yield vI(s)}else yield Jo(t)}else yield Jo(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);BI(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>JW?this.flush():!0)}flush(){let t=super.push(this.buffer.join(""));return this.buffer=[],this.bufferSize=0,t}readIterator(t){try{let r;if(t.childIterator)return BI(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(vI,"handleError");a(BI,"when");a(Jo,"stringify");a(qI,"jsStringify");XW=/[[,:]\s*-?\d{16,}/;a(PS,"parse")});var ew=R((Lpe,ZI)=>{"use strict";var US=require("recursive-iterator"),ZW=require("alasql"),vS=require("clone"),kI=Y(),{handleHDBError:$I,hdb_errors:eQ}=ie(),{HDB_ERROR_MSGS:VI,HTTP_STATUS_CODES:YI}=eQ,{getDatabases:tQ}=(Re(),ae(Ve)),rQ=["DISTINCT_ARRAY"],KI=Symbol("validateTables"),BS=Symbol("validateTable"),Dpe=Symbol("getAllColumns"),WI=Symbol("validateAllColumns"),pf=Symbol("findColumn"),QI=Symbol("validateOrderBy"),cu=Symbol("validateSegment"),HS=Symbol("validateColumn"),jI=Symbol("setColumnsForTable"),zI=Symbol("checkColumnsForAsterisk"),JI=Symbol("validateGroupBy"),XI=Symbol("hasColumns"),xS=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[KI](),this[zI](),this[WI]()}[KI](){if(this[XI]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[BS](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[BS](t.table)})}}[XI](){let t=!1,r=new US(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[BS](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=tQ();if(!r[t.databaseid])throw $I(new Error,VI.SCHEMA_NOT_FOUND(t.databaseid),YI.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw $I(new Error,VI.TABLE_NOT_FOUND(t.databaseid,t.tableid),YI.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=vS(s);i.table=vS(t),this.attributes.push(i)})}[pf](t){return this.attributes.filter(r=>t.tableid?(r.table.as===t.tableid||r.table.tableid===t.tableid)&&r.attribute===t.columnid:r.attribute===t.columnid)}[zI](){let t=new US(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[jI](r.tableid)}[jI](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new ZW.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[WI](){this[cu](this.statement.columns,!1),this[cu](this.statement.joins,!1),this[cu](this.statement.where,!1),this[JI](this.statement.group,!1),this[cu](this.statement.order,!0)}[cu](t,r){if(!t)return;let n=new US(t),s=[];for(let{node:i,path:o}of n)!kI.isEmpty(i)&&!kI.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[QI](i):s.push(this[HS](i)));return s}[JI](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&rQ.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=vS(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[pf](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[pf](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[QI](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[HS](t)}[HS](t){let r=this[pf](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};ZI.exports=xS});var rw=R((Mpe,tw)=>{"use strict";var GS=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")}};tw.exports=GS});var sw=R((vpe,nw)=>{"use strict";var qS=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};nw.exports=qS});var cw={};$e(cw,{HAS_EXPIRATION:()=>WS,LAST_TIMESTAMP_PLACEHOLDER:()=>_u,LOCAL_TIMESTAMP:()=>nQ,METADATA:()=>lu,NO_TIMESTAMP:()=>kS,PENDING_LOCAL_TIME:()=>QS,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>KS,RecordEncoder:()=>YS,TIMESTAMP_ASSIGN_LAST:()=>iQ,TIMESTAMP_ASSIGN_NEW:()=>ow,TIMESTAMP_ASSIGN_PREVIOUS:()=>aw,TIMESTAMP_PLACEHOLDER:()=>mf,TIMESTAMP_RECORD_PREVIOUS:()=>$S,getUpdateRecord:()=>jS,handleLocalTimeForGets:()=>Rf});function aQ(){return uu[0]=uu[0]^64,sQ.getFloat64(0)}function Rf(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),l=c?.value,_=l?.[lu];return _>=0&&(c.metadataFlags=_,c.localTime=l.localTime,c.value=l.value,l.expiresAt>0&&(c.expiresAt=l.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[lu]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let l=c.value,_=l[lu];return _>=0&&(c.metadataFlags=_,c.localTime=l.localTime,c.value=l.value,l.expiresAt>0&&(c.expiresAt=l.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Xo.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<Xo.length;l++){let _=Xo[l].deref();(!_||_.isDone||_.isCommitted)&&Xo.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function jS(e,t,r){return function(n,s,i,o,c=-1,l,_,u,d="put",E,f){if(E||l==null?dc=i?.localTime?$S|aw:kS:dc=l?i?.localTime?$S|16384:ow|16384:kS,u>0&&(c|=WS),Tf=c,VS=u,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:dc>0},m;try{E&&(h.ifVersion=m=i?.version??null);let S=e.put(n,s,h);if(l){let g=_?.user?.username;if(f&&(Sf=e.encoder.encode(f)),E&&i?.localTime){let T=i?.localTime,N=r.get(T);if(N){let b=Kt(N).previousLocalTime;return r.put(T,gf(o,t,n,b,g,d,Sf),{ifVersion:m}),S}}r.put(_u,gf(o,t,n,i?.localTime?1:0,g,d,Sf),{append:d!=="invalidate",instructedWrite:!0,ifVersion:m})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var iw,FS,mf,_u,KS,nQ,lu,uu,sQ,kS,ow,iQ,aw,$S,WS,QS,oQ,Sf,dc,Tf,VS,YS,Xo,du=be(()=>{iw=require("msgpackr");no();FS=x(k()),mf=new Uint8Array([1,1,1,1,4,64,0,0]),_u=new Uint8Array([1,1,1,1,1,0,0,0]),KS=new Uint8Array([1,1,1,1,3,64,0,0]),nQ=Symbol("local-timestamp"),lu=Symbol("metadata"),uu=new Uint8Array(8),sQ=new DataView(uu.buffer,0,8),kS=0,ow=0,iQ=1,aw=3,$S=4,WS=16,QS=1,dc=0,Tf=-1,VS=0,YS=class extends iw.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(dc||Tf>=0){let i=0,o=dc;o&&(i+=8,dc=0);let c=Tf,l=VS;c>=0&&(i+=2,Tf=-1,l&&(i+=8,VS=0));let _=oQ=r.call(this,n,s|2048|i);Sf=_.subarray((_.start||0)+i,_.end);let u=_.start||0;return o&&(mf[4]=o,mf[5]=o>>8,_.set(mf,u),u+=8),c>=0&&(_[u++]=c,_[u++]=0,l&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(u,l)),_}else return r.call(this,n,s)}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(uu,0,c),c+=8;else for(let d=0;d<8;d++)uu[d]=t[c++];l=aQ(),i=t[c]}let _;i<32&&(o=i,c+=2,o&WS&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let u=super.decode(t.subarray(c,s),s-c);return{localTime:l,value:u,[lu]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(aQ,"getTimestamp");a(Rf,"handleLocalTimeForGets");Xo=[];setInterval(()=>{for(let e=0;e<Xo.length;e++){let t=Xo[e].deref();!t||t.isDone||t.isCommitted?Xo.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(FS.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):FS.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(jS,"getUpdateRecord")});var fu=R((qpe,uw)=>{"use strict";var lw=X(),cQ=L(),{RecordEncoder:lQ}=(du(),ae(cw)),Gpe=require("fs");lw.initSync();var uQ=lw.get(cQ.CONFIG_PARAMS.STORAGE_CACHING)!==!1,zS=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=uQ&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:lQ})}};uw.exports=zS});var Eu=R((kpe,_w)=>{"use strict";var on=X(),Un=L();on.initSync();var Af=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=on.get(Un.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||on.get(Un.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||on.get(Un.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",on.get(Un.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=on.get(Un.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),on.get(Un.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=on.get(Un.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),on.get(Un.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=on.get(Un.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),on.get(Un.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=on.get(Un.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=on.get(Un.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};_w.exports=Af;Af.MAX_DBS=1e4});var Ye=R((Vpe,Rw)=>{"use strict";var XS=require("lmdb"),rs=require("fs-extra"),an=require("path"),Of=wr(),Ew=k(),Dr=nn().LMDB_ERRORS_ENUM,bf=sw(),ZS=fu(),hw=Eu(),so=_t(),dw=L(),{table:_Q,resetDatabases:dQ}=(Re(),ae(Ve)),fw=X(),ns=so.INTERNAL_DBIS_NAME,pw=so.DBI_DEFINITION_NAME,fQ="data.mdb",EQ="lock.mdb",hu=".mdb",hQ="-lock",JS=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=vn(t,r),this.key_type=this.dbi[so.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[so.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new XS.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Nf(e,t){if(e===void 0)throw new Error(Dr.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Dr.ENV_NAME_REQUIRED)}a(Nf,"pathEnvNameValidation");async function eT(e,t,r=!0){try{await rs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Dr.INVALID_BASE_PATH):n}try{let n=an.join(e,t+hu);return await rs.access(n,rs.constants.R_OK|rs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await rs.access(an.join(e,t,fQ),rs.constants.R_OK|rs.constants.F_OK),an.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Dr.INVALID_ENVIRONMENT)}else throw new Error(Dr.INVALID_ENVIRONMENT);throw n}}a(eT,"validateEnvironmentPath");function yf(e,t){if(Of.validateEnv(e),t===void 0)throw new Error(Dr.DBI_NAME_REQUIRED)}a(yf,"validateEnvDBIName");async function pQ(e,t,r=!1,n=!1){Nf(e,t);let s=an.basename(e);t=t.toString();let i=fw.get(dw.CONFIG_PARAMS.DATABASES);i||fw.setProperty(dw.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await eT(e,t,n),mw(e,t,r)}catch(o){if(o.message===Dr.INVALID_ENVIRONMENT){let c=an.join(e,t);await rs.mkdirp(n?c:e);let l=new hw(n?c:c+hu,!1),_=XS.open(l);_.dbis=Object.create(null);let u=new ZS(!1);_.openDB(ns,u),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=tT(e,t,r);return _[so.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(pQ,"createEnvironment");async function mQ(e,t,r,n=!0){Nf(e,t),t=t.toString();let s=an.join(e,t);return _Q({table:t,database:an.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(mQ,"copyEnvironment");async function mw(e,t,r=!1){Nf(e,t),t=t.toString();let n=tT(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 eT(e,t),i=an.join(e,t+hu),o=s!=i,c=new hw(s,o),l=XS.open(c);l.dbis=Object.create(null);let _=Tw(l);for(let u=0;u<_.length;u++)vn(l,_[u]);return l[so.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(mw,"openEnvironment");async function SQ(e,t,r=!1){Nf(e,t),t=t.toString();let n=an.join(e,t+hu),s=await eT(e,t);if(global.lmdb_map!==void 0){let i=tT(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Sw(o),delete global.lmdb_map[i]}}await rs.remove(s),await rs.remove(s===n?s+hQ:an.join(an.dirname(s),EQ))}a(SQ,"deleteEnvironment");async function Sw(e){Of.validateEnv(e);let t=e[so.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Sw,"closeEnvironment");function tT(e,t,r=!1){let s=`${an.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(tT,"getCachedEnvironmentName");function TQ(e){Of.validateEnv(e);let t=Object.create(null),r=vn(e,ns);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==ns)try{t[n]=Object.assign(new bf,s)}catch{Ew.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(TQ,"listDBIDefinitions");function Tw(e){Of.validateEnv(e);let t=[],r=vn(e,ns);for(let{key:n}of r.getRange({start:!1}))n!==ns&&t.push(n);return t}a(Tw,"listDBIs");function gQ(e,t){let n=vn(e,ns).getEntry(t),s=new bf;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{Ew.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(gQ,"getDBIDefinition");function gw(e,t,r,n=!r){if(yf(e,t),t=t.toString(),t===ns)throw new Error(Dr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return vn(e,t)}catch(s){if(s.message===Dr.DBI_DOES_NOT_EXIST){let i=new ZS(r,n===!0),o=e.openDB(t,i),c=new bf(r===!0,n);return o[pw]=c,vn(e,ns).putSync(t,c),e.dbis[t]=o,o}throw s}}a(gw,"createDBI");function vn(e,t){if(yf(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ns?r=gQ(e,t):r=new bf,r===void 0)throw new Error(Dr.DBI_DOES_NOT_EXIST);let n;try{let s=new ZS(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(Dr.DBI_DOES_NOT_EXIST):s}return n[pw]=r,e.dbis[t]=n,n}a(vn,"openDBI");function RQ(e,t){yf(e,t),t=t.toString();let r=vn(e,t),n=r.getStats();return r[so.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(RQ,"statDBI");async function AQ(e,t){try{let r=an.join(e,t+hu);return(await rs.stat(r)).size}catch{throw new Error(Dr.INVALID_ENVIRONMENT)}}a(AQ,"environmentDataSize");function OQ(e,t){if(yf(e,t),t=t.toString(),t===ns)throw new Error(Dr.CANNOT_DROP_INTERNAL_DBIS_NAME);vn(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],vn(e,ns).removeSync(t)}a(OQ,"dropDBI");function bQ(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{vn(e,i)}catch(o){if(o.message===Dr.DBI_DOES_NOT_EXIST)gw(e,i,i!==t,i===t),n=!0;else throw o}}n&&dQ()}a(bQ,"initializeDBIs");Rw.exports={openDBI:vn,openEnvironment:mw,createEnvironment:pQ,listDBIs:Tw,listDBIDefinitions:TQ,createDBI:gw,dropDBI:OQ,statDBI:RQ,deleteEnvironment:SQ,initializeDBIs:bQ,TransactionCursor:JS,environmentDataSize:AQ,copyEnvironment:mQ,closeEnvironment:Sw}});var Ow=R((Kpe,Aw)=>{"use strict";var rT=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};Aw.exports=rT});var Nw=R((Qpe,bw)=>{"use strict";var nT=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}};bw.exports=nT});var Iw=R((zpe,yw)=>{"use strict";var sT=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};yw.exports=sT});var ea=R((tme,Dw)=>{"use strict";var NQ=Ye(),yQ=Ow(),IQ=Nw(),wQ=Iw(),Ds=wr(),pu=nn().LMDB_ERRORS_ENUM,CQ=_t(),ui=L(),DQ=Y(),LQ=require("uuid"),Xpe=require("lmdb"),{handleHDBError:PQ,hdb_errors:MQ}=ie(),{OVERFLOW_MARKER:Zpe,MAX_SEARCH_KEY_LENGTH:eme}=CQ,ww=X();ww.initSync();var If=ww.get(ui.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),iT=ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Zo=ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function UQ(e,t,r,n,s=Ds.getNextMonotonicTime()){lT(e,t,r,n),oT(e,t,r);let i=new yQ,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l];Cw(_,!0,s);let u=vQ(e,t,r,_),d=_[t];o.push(u),c.push(d)}return aT(o,c,n,i,s)}a(UQ,"insertRecords");function vQ(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let u=c([[{}]]);Array.isArray(u)&&(c=u[0][ui.FUNC_VAL],n[o]=c)}let l=Ds.getIndexedValues(c),_=e.dbis[o];if(l){If&&_.prefetch(l.map(u=>({key:u,value:s})),wf);for(let u=0,d=l.length;u<d;u++)_.put(l[u],s)}}If&&e.dbis[t].prefetch([s],wf),e.dbis[t].put(s,n,n[Zo])})}a(vQ,"insertRecord");function BQ(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(BQ,"removeSkippedRecords");function Cw(e,t,r){let n=r>0;(n||!Number.isInteger(e[Zo]))&&(e[Zo]=r||(r=Ds.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[iT]))&&(e[iT]=r||Ds.getNextMonotonicTime()):delete e[iT]}a(Cw,"setTimestamps");function oT(e,t,r){r.indexOf(ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),NQ.initializeDBIs(e,t,r)}a(oT,"initializeTransaction");async function HQ(e,t,r,n,s=Ds.getNextMonotonicTime()){lT(e,t,r,n),oT(e,t,r);let i=new IQ,o=[],c=[],l=[];for(let _=0;_<n.length;_++){let u=n[_],d=u[t],E;try{E=cT(e,t,u,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(E),l.push(d)}return aT(c,l,n,i,s,o)}a(HQ,"updateRecords");async function xQ(e,t,r,n,s=Ds.getNextMonotonicTime()){try{lT(e,t,r,n)}catch(l){throw PQ(l,l.message,MQ.HTTP_STATUS_CODES.BAD_REQUEST)}oT(e,t,r);let i=new wQ,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l],u;DQ.isEmpty(_[t])?(u=LQ.v4(),_[t]=u):u=_[t];let d=cT(e,t,_,u,i,!1,s);o.push(d),c.push(u)}return aT(o,c,n,i,s)}a(xQ,"upsertRecords");async function aT(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Ds.getNextMonotonicTime(),BQ(r,i),n}a(aT,"finalizeWrite");function cT(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),_=l?.value,u=_;if(!_){if(i)return!1;_={}}if(Cw(r,!u,o),Number.isInteger(r[Zo])&&_[Zo]>r[Zo])return!1;u&&s.original_records.push(_);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let m=r[h],S=e.dbis[h];if(S===void 0)continue;let g=_[h];if(typeof m=="function"){let N=m([[_]]);Array.isArray(N)&&(m=N[0][ui.FUNC_VAL],r[h]=m)}if(m===g)continue;let T=Ds.getIndexedValues(g);if(T){If&&S.prefetch(T.map(N=>({key:N,value:n})),wf);for(let N=0,b=T.length;N<b;N++)S.remove(T[N],n)}if(T=Ds.getIndexedValues(m),T){If&&S.prefetch(T.map(N=>({key:N,value:n})),wf);for(let N=0,b=T.length;N<b;N++)S.put(T[N],n)}}let f=Object.assign({},_,r);c.put(n,f,f[Zo])},"do_put");return l?d=c.ifVersion(n,l.version,E):d=c.ifNoExists(n,E),d.then(f=>f?!0:cT(e,t,r,n,s,i,o))}a(cT,"updateUpsertRecord");function GQ(e,t,r){if(Ds.validateEnv(e),t===void 0)throw new Error(pu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(pu.WRITE_ATTRIBUTES_REQUIRED):new Error(pu.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(GQ,"validateBasic");function lT(e,t,r,n){if(GQ(e,t,r),!Array.isArray(n))throw n===void 0?new Error(pu.RECORDS_REQUIRED):new Error(pu.RECORDS_MUST_BE_ARRAY)}a(lT,"validateWrite");function wf(){}a(wf,"noop");Dw.exports={insertRecords:UQ,updateRecords:HQ,upsertRecords:xQ}});var _i=R((nme,qQ)=>{qQ.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 Ps=R((sme,Mw)=>{"use strict";var Pw=Y(),Lw=L(),fc=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ls=require("joi"),io={schema_format:{pattern:fc,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},FQ=Ls.alternatives(Ls.string().min(1).max(io.schema_length.maximum).pattern(fc).messages({"string.pattern.base":"{:#label} "+io.schema_format.message}),Ls.number(),Ls.array()).required(),kQ=Ls.alternatives(Ls.string().min(1).max(io.schema_length.maximum).pattern(fc).messages({"string.pattern.base":"{:#label} "+io.schema_format.message}),Ls.number()),$Q=Ls.alternatives(Ls.string().min(1).max(io.schema_length.maximum).pattern(fc).messages({"string.pattern.base":"{:#label} "+io.schema_format.message}),Ls.number()).required();function VQ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>io.schema_length.maximum?`'${e}' maximum of 250 characters`:fc.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(VQ,"checkValidTable");function YQ(e,t){return Pw.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(YQ,"validateSchemaExists");function KQ(e,t){let r=t.state.ancestors[0].schema;return Pw.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(KQ,"validateTableExists");function WQ(e,t){return e.toLowerCase()===Lw.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Lw.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(WQ,"validateSchemaName");Mw.exports={common_validators:io,schema_regex:fc,hdb_schema_table:FQ,validateSchemaExists:YQ,validateTableExists:KQ,validateSchemaName:WQ,checkValidTable:VQ,hdb_database:kQ,hdb_table:$Q}});var nt=R((ome,Uw)=>{"use strict";var Lr=require("validate.js");Lr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Lr.validators.type.checks[t](e)?null:` must be a '${t}' value`};Lr.validators.type.checks={Object:function(e){return Lr.isObject(e)&&!Lr.isArray(e)},Array:Lr.isArray,Integer:Lr.isInteger,Number:Lr.isNumber,String:Lr.isString,Date:Lr.isDate,Boolean:function(e){return typeof e=="boolean"}};Lr.validators.hasValidFileExt=function(e,t){return Lr.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};Uw.exports={validateObject:QQ,validateObjectAsync:jQ,validateBySchema:zQ};function QQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Lr(e,t,{format:"flat"});return r?new Error(r):null}a(QQ,"validateObject");async function jQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Lr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(jQ,"validateObjectAsync");function zQ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(zQ,"validateBySchema")});var Cf=R((cme,vw)=>{var{common_validators:Ms}=Ps(),Su=nt(),mu="is required",yt={database:{presence:!1,format:Ms.schema_format,length:Ms.schema_length},schema:{presence:!1,format:Ms.schema_format,length:Ms.schema_length},table:{presence:!0,format:Ms.schema_format,length:Ms.schema_length},attribute:{presence:!0,format:Ms.schema_format,length:Ms.schema_length},hash_attribute:{presence:!0,format:Ms.schema_format,length:Ms.schema_length}};function Tu(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(Tu,"makeAttributesStrings");function JQ(e){return e=Tu(e),yt.table.presence=!1,yt.attribute.presence=!1,yt.hash_attribute.presence=!1,Su.validateObject(e,yt)}a(JQ,"schema_object");function XQ(e){return e=Tu(e),yt.table.presence={message:mu},yt.attribute.presence=!1,yt.hash_attribute.presence=!1,Su.validateObject(e,yt)}a(XQ,"table_object");function ZQ(e){return e=Tu(e),yt.table.presence={message:mu},yt.attribute.presence=!1,Su.validateObject(e,yt)}a(ZQ,"create_table_object");function ej(e){return e=Tu(e),yt.table.presence={message:mu},yt.attribute.presence={message:mu},yt.hash_attribute.presence=!1,Su.validateObject(e,yt)}a(ej,"attribute_object");function tj(e){return e=Tu(e),yt.table.presence={message:mu},yt.attribute.presence=!1,yt.hash_attribute.presence=!1,Su.validateObject(e,yt)}a(tj,"describe_table");function rj(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(rj,"validateTableResidence");vw.exports={schema_object:JQ,create_table_object:ZQ,table_object:XQ,attribute_object:ej,describe_table:tj,validateTableResidence:rj}});var Hw=R((ume,Bw)=>{"use strict";var nj=require("uuid"),uT=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||nj.v4(),this.schema_table=`${this.schema}.${this.table}`}};Bw.exports=uT});var Df=R((dme,xw)=>{"use strict";var sj=Hw(),_T=class extends sj{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}};xw.exports=_T});var qw=R((Eme,Gw)=>{"use strict";Gw.exports=oj;var ij="inserted";function oj(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===ij?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(oj,"returnObject")});var Lf=R((pme,Yw)=>{"use strict";var aj=L(),dT=Ye(),cj=ea(),{getSystemSchemaPath:lj,getSchemaPath:uj}=Je(),_j=_i(),dj=Cf(),fj=Df(),Ej=qw(),{handleHDBError:Fw,hdb_errors:$w}=ie(),kw=Y(),{HTTP_STATUS_CODES:hj}=$w,fT=_j.hdb_attribute,Vw=[];for(let e=0;e<fT.attributes.length;e++)Vw.push(fT.attributes[e].attribute);var pj="inserted";Yw.exports=mj;async function mj(e){let t=dj.attribute_object(e);if(t)throw Fw(new Error,t.message,$w.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&kw.checkGlobalSchemaTable(e.schema,e.table);if(r)throw Fw(new Error,r,hj.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=kw.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 fj(e.schema,e.table,e.attribute,e.id);try{let i=await dT.openEnvironment(uj(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}`);dT.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await dT.openEnvironment(lj(),aj.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await cj.insertRecords(o,fT.hash_attribute,Vw,[s]);return Ej(pj,c,{records:[s]},l)}catch(i){throw i}}a(mj,"lmdbCreateAttribute")});var hT=R((Sme,Ww)=>{var{hdb_table:Sj,hdb_database:Kw}=Ps(),Tj=nt(),ET=require("joi"),gj={undefined:"undefined",null:"null"},Rj=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||gj[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"),Aj=ET.object({database:Kw,schema:Kw,table:Sj,records:ET.array().items(ET.object().custom(Rj)).required()});Ww.exports=function(e){return Tj.validateBySchema(e,Aj)}});var gu=R((Rme,jw)=>{"use strict";var di=Y(),Qw=k(),gme=hT(),{getDatabases:Oj}=(Re(),ae(Ve)),{ClientError:ta}=ie();jw.exports=bj;function bj(e){if(di.isEmpty(e))throw new ta("invalid update parameters defined.");if(di.isEmptyOrZeroLength(e.schema))throw new ta("invalid schema specified.");if(di.isEmptyOrZeroLength(e.table))throw new ta("invalid table specified.");if(!Array.isArray(e.records))throw new ta("records must be an array");let t=Oj()[e.schema]?.[e.table];if(di.isEmpty(t))throw new ta(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&di.isEmptyOrZeroLength(o[r]))throw Qw.error("a valid hash attribute must be provided with update record:",o),new ta("a valid hash attribute must be provided with update record, check log for more info");if(!di.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Qw.error(`a valid hash value must be provided with ${e.operation} record:`,o),new ta(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!di.isEmpty(o[r])&&o[r]!==""&&n.has(di.autoCast(o[r]))&&(o.skip=!0),n.add(di.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(bj,"insertUpdateValidate")});var Jw=R((Ome,zw)=>{"use strict";var pT=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};zw.exports=pT});var eC=R((Nme,Zw)=>{"use strict";var mT=Ye(),Nj=k(),Xw=nn().LMDB_ERRORS_ENUM;Zw.exports=yj;async function yj(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await mT.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==Xw.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await mT.closeEnvironment(global.lmdb_map[n]),await mT.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==Xw.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){Nj.error(t)}}a(yj,"cleanLMDBMap")});var fi=R((Ime,sC)=>{"use strict";var Ru=require("crypto"),Ij=X(),{CONFIG_PARAMS:wj}=L(),rC="aes-256-cbc",Cj=32,Dj=16,ST=64,nC=32,Lj=ST+nC,tC=new Map;sC.exports={encrypt:Pj,decrypt:Mj,createNatsTableStreamName:Uj};function Pj(e){let t=Ru.randomBytes(Cj),r=Ru.randomBytes(Dj),n=Ru.createCipheriv(rC,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(Pj,"encrypt");function Mj(e){let t=e.substr(0,ST),r=e.substr(ST,nC),n=e.substr(Lj,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Ru.createDecipheriv(rC,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Mj,"decrypt");function Uj(e,t){let r=Ij.get(wj.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=tC.get(r);return n||(n=Ru.createHash("md5").update(r).digest("hex"),tC.set(r,n)),n}a(Uj,"createNatsTableStreamName")});var Ei=R((Dme,oC)=>{"use strict";var Cme=ur(),Au=k(),iC=Cf(),vj=fi(),Pf=Y(),{handleHDBError:Mf,hdb_errors:Bj}=ie(),{HDB_ERROR_MSGS:Uf,HTTP_STATUS_CODES:TT}=Bj,Hj=X();Hj.initSync();var{getDatabases:gT}=(Re(),ae(Ve)),xj=require("fs-extra");oC.exports={describeAll:Gj,describeTable:vf,describeSchema:qj};async function Gj(e={}){try{let t=Pf.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=gT(),o={},c={},l=[],_=e?.exact_count;for(let d in i){o[d]=!0,!t&&!s&&!r&&(c[d]=e.hdb_user?.role?.permission[d]?.describe);let E=i[d];for(let f in E)try{let h;if(t||s||r)h=await vf({schema:d,table:f,exact_count:_});else if(n&&n[d].describe&&n[d].tables[f].describe){let m=n[d].tables[f].attribute_permissions;h=await vf({schema:d,table:f,exact_count:_},m)}h&&l.push(h)}catch(h){Au.error(h)}}let u={};for(let d in l)t||s||r?(u[l[d].schema]==null&&(u[l[d].schema]={}),u[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(u[l[d].schema]==null&&(u[l[d].schema]={}),u[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s||r?u[d]={}:c[d]&&(u[d]={});return u}catch(t){return Au.error("Got an error in describeAll"),Au.error(t),Mf(new Error,Uf.DESCRIBE_ALL_ERR)}}a(Gj,"describeAll");async function vf(e,t){Pf.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(s=e.hdb_user?.role?.permission[r]?.tables[n]?.attribute_permissions);let i=iC.describe_table(e);if(i)throw i;let c=gT()[r];if(!c)throw Mf(new Error,Uf.SCHEMA_NOT_FOUND(e.schema),TT.NOT_FOUND);let l=c[n];if(!l)throw Mf(new Error,Uf.TABLE_NOT_FOUND(e.schema,e.table),TT.NOT_FOUND);function _(f){u.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(h=>({type:h.type,name:h.name})):void 0}))}a(_,"pushAtt");let u=[];if(s){let f={};s.forEach(h=>{h.describe&&(f[h.attribute_name]=!0)}),l.attributes.forEach(h=>{f[h.name]&&_(h)})}else l.attributes?.forEach(f=>_(f));let d;try{d=(await xj.stat(l.primaryStore.env.path)).size}catch(f){Au.warn("unable to get database size",f)}let E={schema:r,name:l.tableName,hash_attribute:l.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:u,db_size:d};E.clustering_stream_name=vj.createNatsTableStreamName(E.schema,E.name);try{let f=l.getRecordCount({exactCount:e.exact_count==="true"});E.record_count=f.recordCount,E.estimated_record_range=f.estimatedRange;let h=l.auditStore;if(h)for(let m of h.getKeys({reverse:!0,limit:1}))E.last_updated_record=m[0];if(!E.last_updated_record&&l.indices.__updatedtime__)for(let m of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))E.last_updated_record=m}catch(f){Au.warn(`unable to stat table dbi due to ${f}`)}return E}a(vf,"descTable");async function qj(e){Pf.transformReq(e);let t=iC.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=gT()[n];if(!i)throw Mf(new Error,Uf.SCHEMA_NOT_FOUND(e.schema),TT.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Pf.isEmpty(l)||l.describe){let _=await vf({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(qj,"describeSchema")});var Bn=R((Ume,_C)=>{var Fj=_i(),{callbackify:cC,promisify:kj}=require("util"),{getDatabases:lC}=(Re(),ae(Ve));_C.exports={setSchemaDataToGlobal:aC,getTableSchema:$j,getSystemSchema:Vj,setSchemaDataToGlobalAsync:kj(aC)};var uC=Ei(),Pme=cC(uC.describeAll),Mme=cC(uC.describeTable);function aC(e){global.hdb_schema=lC(),e&&e()}a(aC,"setSchemaDataToGlobal");function $j(e,t,r){let n=lC()[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($j,"getTableSchema");function Vj(){return Fj}a(Vj,"getSystemSchema")});var Pr=R((Bme,hC)=>{"use strict";var Hf=hT(),rr=Y(),Yj=require("util"),xf=Hn(),Kj=Bn(),dC=k(),{handleHDBError:ra,hdb_errors:Wj}=ie(),{HTTP_STATUS_CODES:na}=Wj,Qj=Yj.promisify(Kj.getTableSchema),jj="updated",fC="inserted",EC="upserted";hC.exports={insert:Jj,update:Xj,upsert:Zj,validation:zj,flush:ez};async function zj(e){if(rr.isEmpty(e))throw new Error("invalid update parameters defined.");if(rr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(rr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Qj(e.schema,e.table),r=Hf(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&rr.isEmptyOrZeroLength(c[n]))throw dC.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(!rr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw dC.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!rr.isEmpty(c[n])&&c[n]!==""&&s.has(rr.autoCast(c[n]))&&(c.skip=!0),s.add(rr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(zj,"validation");async function Jj(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Hf(e);if(t)throw ra(new Error,t.message,na.BAD_REQUEST);rr.transformReq(e);let r=rr.checkSchemaTableExist(e.schema,e.table);if(r)throw ra(new Error,r,na.BAD_REQUEST);let n=await xf.createRecords(e);return Bf(fC,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(Jj,"insertData");async function Xj(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Hf(e);if(t)throw ra(new Error,t.message,na.BAD_REQUEST);rr.transformReq(e);let r=rr.checkSchemaTableExist(e.schema,e.table);if(r)throw ra(new Error,r,na.BAD_REQUEST);let n=await xf.updateRecords(e);return rr.isEmpty(n.existing_rows)?Bf(jj,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Bf(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(Xj,"updateData");async function Zj(e){if(e.operation!=="upsert")throw ra(new Error,"invalid operation, must be upsert",na.INTERNAL_SERVER_ERROR);let t=Hf(e);if(t)throw ra(new Error,t.message,na.BAD_REQUEST);rr.transformReq(e);let r=rr.checkSchemaTableExist(e.schema,e.table);if(r)throw ra(new Error,r,na.BAD_REQUEST);let n=await xf.upsertRecords(e);return Bf(EC,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(Zj,"upsertData");function Bf(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===fC?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===EC?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Bf,"returnObject");function ez(e){return rr.transformReq(e),xf.flush(e.schema,e.table)}a(ez,"flush")});var AT=R((xme,SC)=>{var tz=nt(),RT=require("joi"),{hdb_table:rz,hdb_database:pC}=Ps(),mC={schema:pC,database:pC,table:rz},nz={date:RT.date().iso().required()},sz={timestamp:RT.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};SC.exports=function(e,t){let r=t==="timestamp"?{...mC,...sz}:{...mC,...nz},n=RT.object(r);return tz.validateBySchema(e,n)}});var RC=R((Gme,gC)=>{var iz=nt(),OT=require("joi"),{hdb_table:oz,hdb_database:TC}=Ps(),az=OT.object({schema:TC,database:TC,table:oz,hash_values:OT.array().required(),ids:OT.array()});gC.exports=function(e){return iz.validateBySchema(e,az)}});var IT=R((qme,AC)=>{"use strict";var bT=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}},NT=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}},yT=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};AC.exports={InsertObject:bT,NoSQLSeachObject:NT,DeleteResponseObject:yT}});var oa=R((kme,IC)=>{"use strict";var bC=AT(),cz=RC(),sa=Y(),OC=require("moment"),NC=k(),{promisify:lz,callbackify:uz}=require("util"),ia=L(),_z=Bn(),wT=lz(_z.getTableSchema),CT=Hn(),{DeleteResponseObject:dz}=IT(),{handleHDBError:oo,hdb_errors:fz}=ie(),{HDB_ERROR_MSGS:Gf,HTTP_STATUS_CODES:ao}=fz,Ez="records successfully deleted",hz=uz(yC);IC.exports={delete:hz,deleteRecord:yC,deleteFilesBefore:pz,deleteAuditLogsBefore:mz};async function pz(e){let t=bC(e,"date");if(t)throw oo(t,t.message,ao.BAD_REQUEST,void 0,void 0,!0);if(sa.transformReq(e),!OC(e.date,OC.ISO_8601).isValid())throw oo(new Error,Gf.INVALID_DATE,ao.BAD_REQUEST,ia.LOG_LEVELS.ERROR,Gf.INVALID_DATE,!0);let n=sa.checkSchemaTableExist(e.schema,e.table);if(n)throw oo(new Error,n,ao.NOT_FOUND,ia.LOG_LEVELS.ERROR,n,!0);let s=await CT.deleteRecordsBefore(e);if(await wT(e.schema,e.table),NC.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(pz,"deleteFilesBefore");async function mz(e){let t=bC(e,"timestamp");if(t)throw oo(t,t.message,ao.BAD_REQUEST,void 0,void 0,!0);if(sa.transformReq(e),isNaN(e.timestamp))throw oo(new Error,Gf.INVALID_VALUE("Timestamp"),ao.BAD_REQUEST,ia.LOG_LEVELS.ERROR,Gf.INVALID_VALUE("Timestamp"),!0);let r=sa.checkSchemaTableExist(e.schema,e.table);if(r)throw oo(new Error,r,ao.NOT_FOUND,ia.LOG_LEVELS.ERROR,r,!0);let n=await CT.deleteAuditLogsBefore(e);return await wT(e.schema,e.table),NC.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(mz,"deleteAuditLogsBefore");async function yC(e){e.ids&&(e.hash_values=e.ids);let t=cz(e);if(t)throw oo(t,t.message,ao.BAD_REQUEST,void 0,void 0,!0);sa.transformReq(e);let r=sa.checkSchemaTableExist(e.schema,e.table);if(r)throw oo(new Error,r,ao.NOT_FOUND,ia.LOG_LEVELS.ERROR,r,!0);try{await wT(e.schema,e.table);let n=await CT.deleteRecords(e);return sa.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Ez}`),n}catch(n){if(n.message===ia.SEARCH_NOT_FOUND_MESSAGE){let s=new dz;return s.message=ia.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(yC,"deleteRecord")});var qf=R((Vme,DC)=>{var Sz=require("crypto"),wC=9;function Tz(e){let t=Rz(wC),r=CC(e+t);return t+r}a(Tz,"createHash");function gz(e,t){let r=e?.substr(0,wC),n=r+CC(t+r);return e===n}a(gz,"validateHash");function Rz(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(Rz,"generateSalt");function CC(e){return Sz.createHash("md5").update(e).digest("hex")}a(CC,"md5");DC.exports={hash:Tz,validate:gz}});var PC=R((Kme,LC)=>{var DT=nt(),_r={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function Az(e){return _r.password.presence=!0,_r.username.presence=!0,_r.role.presence=!0,_r.active.presence=!0,DT.validateObject(e,_r)}a(Az,"addUserValidation");function Oz(e){return _r.password.presence=!1,_r.username.presence=!0,_r.role.presence=!1,_r.active.presence=!1,DT.validateObject(e,_r)}a(Oz,"alterUserValidation");function bz(e){return _r.password.presence=!1,_r.username.presence=!0,_r.role.presence=!1,_r.active.presence=!1,DT.validateObject(e,_r)}a(bz,"dropUserValidation");LC.exports={addUserValidation:Az,alterUserValidation:Oz,dropUserValidation:bz}});var Ze=R((jme,UC)=>{"use strict";var{platform:Qme}=require("os"),Nz="nats-server.zip",LT="nats-server",yz=process.platform==="win32"?`${LT}.exe`:LT,Iz=/^[^\s.,*>]+$/,MC="__request__",wz=a(e=>`${e}.${MC}`,"REQUEST_SUBJECT"),Cz={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Dz={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Lz={HUB:"hub.pid",LEAF:"leaf.pid"},Pz={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Mz={SUCCESS:"success",ERROR:"error"},Uz={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},vz={TXN:"txn",MSGID:"msgid"},Ec={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Bz={[Ec.ERR]:1,[Ec.WRN]:2,[Ec.INF]:3,[Ec.DBG]:4,[Ec.TRC]:5},Hz={debug:"-D",trace:"-DVV"};UC.exports={NATS_SERVER_ZIP:Nz,NATS_SERVER_NAME:LT,NATS_BINARY_NAME:yz,PID_FILES:Lz,NATS_CONFIG_FILES:Dz,SERVER_SUFFIX:Pz,NATS_TERM_CONSTRAINTS_RX:Iz,REQUEST_SUFFIX:MC,UPDATE_REMOTE_RESPONSE_STATUSES:Mz,CLUSTER_STATUS_STATUSES:Uz,REQUEST_SUBJECT:wz,SUBJECT_PREFIXES:vz,MSG_HEADERS:Cz,LOG_LEVELS:Ec,LOG_LEVEL_FLAGS:Hz,LOG_LEVEL_HIERARCHY:Bz}});var PT=R((Jme,vC)=>{"use strict";var xz={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
|
|
8
8
|
`),cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
|
|
9
9
|
`)},Gz="certificate.pem",qz="privateKey.pem",Fz="ca.pem";vC.exports={CERTIFICATE_VALUES:xz,CERTIFICATE_PEM_NAME:Gz,PRIVATEKEY_PEM_NAME:qz,CA_PEM_NAME:Fz}});var MT=R((Zme,FC)=>{"use strict";var GC=require("fs-extra"),le=require("joi"),kz=require("os"),{boolean:ye,string:dr,number:st,array:Ff}=le.types(),{totalmem:BC}=require("os"),aa=require("path"),$z=k(),kf=Y(),Xme=PT(),HC=L(),Vz=nt(),xC="log",Yz="components",Kz="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Wz="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Qz="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",jz="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",zz="rootPath config parameter is undefined",Jz="clustering.enabled config parameter is undefined",ca=st.min(0).required(),$f=Ff.items({host:dr.required(),port:ca}).empty(null),Us,qC=!1;FC.exports={configValidator:Xz,routesValidator:sJ,route_constraints:$f};function Xz(e,t=!1){if(qC=t,Us=e.rootPath,kf.isEmpty(Us))throw zz;let r=ye.required(),n=st.min(0).max(1e3).empty(null).default(nJ),s=dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Ou),i=dr.optional().empty(null),o=dr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=le.string().empty(null).default(Ou),l=le.custom(eJ).empty(null).default(Ou),_=e.clustering?.enabled;if(kf.isEmpty(_))throw Jz;let u=le.object({certificate:i,certificateAuthority:i,privateKey:i}),d;return _===!0?d=le.object({enabled:r,hubServer:le.object({cluster:le.object({name:le.required().empty(null),network:le.object({port:ca,routes:$f}).required()}).required(),leafNodes:le.object({network:le.object({port:ca}).required()}).required(),network:le.object({port:ca}).required()}).required(),leafServer:le.object({network:le.object({port:ca,routes:$f}).required(),streams:le.object({maxAge:st.min(120).allow(null).optional(),maxBytes:st.min(1).allow(null).optional(),maxMsgs:st.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:le.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:ye.optional(),databaseLevel:ye.optional(),tls:le.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required(),verify:ye.optional()}),user:dr.optional().empty(null)}).required():d=le.object({enabled:r,tls:le.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required()})}).required(),le.object({authentication:le.object({authorizeLocal:ye,cacheTTL:st.required(),enableSessions:ye}),analytics:le.object({aggregatePeriod:st}),componentsRoot:s.optional(),clustering:d,localStudio:le.object({enabled:r}).required(),logging:le.object({auditAuthEvents:le.object({logFailed:ye,logSuccessful:ye}),file:ye.required(),level:le.valid("notify","fatal","error","warn","info","debug","trace"),rotation:le.object({enabled:ye.optional(),compress:ye.optional(),interval:dr.custom(rJ).optional().empty(null),maxSize:dr.custom(tJ).optional().empty(null),path:dr.optional().empty(null).default(Ou)}).required(),root:s,stdStreams:ye.required(),auditLog:ye.required()}).required(),operationsApi:le.object({network:le.object({cors:ye.optional(),corsAccessList:Ff.optional(),headersTimeout:st.min(1).optional(),keepAliveTimeout:st.min(1).optional(),port:st.optional().empty(null),domainSocket:le.optional().empty("hdb/operations-server").default(Ou),securePort:st.optional().empty(null),timeout:st.min(1).optional()}).optional(),tls:le.alternatives([le.array().items(u),u])}).required(),rootPath:dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:le.object({network:le.object({port:ca,securePort:ca,mtls:le.alternatives([ye.optional(),le.object({user:dr.optional(),certificateAuthority:i,required:ye.optional()})])}).required(),webSocket:ye.optional(),requireAuthentication:ye.optional()}),http:le.object({compressionThreshold:st.optional(),cors:ye.optional(),corsAccessList:Ff.optional(),headersTimeout:st.min(1).optional(),port:st.min(0).optional().empty(null),securePort:st.min(0).optional().empty(null),maxHeaderSize:st.optional(),mtls:le.alternatives([ye.optional(),le.object({user:dr.optional(),certificateAuthority:i,required:ye.optional()})]),threadRange:le.alternatives([Ff.optional(),dr.optional()])}).required(),threads:le.alternatives(n.optional(),le.object({count:n.optional(),debug:le.alternatives(ye.optional(),le.object({startingPort:st.min(1).optional(),host:dr.optional(),waitForDebugger:ye.optional()})),maxHeapMemory:st.min(0).optional()})),storage:le.object({writeAsync:ye.required(),overlappingSync:ye.optional(),caching:ye.optional(),compression:le.alternatives([ye.optional(),le.object({dictionary:dr.optional(),threshold:st.optional()})]),compactOnStart:ye.optional(),compactOnStartKeepBackup:ye.optional(),noReadAhead:ye.optional(),path:l,prefetchWrites:ye.optional(),maxFreeSpaceToLoad:st.optional(),maxFreeSpaceToRetain:st.optional()}).required(),ignoreScripts:ye.optional(),tls:le.alternatives([le.array().items(u),u])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(Xz,"configValidator");function Zz(e){return qC||GC.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Zz,"doesPathExist");function eJ(e,t){le.assert(e,dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Zz(e);if(r)return t.message(r)}a(eJ,"validatePath");function tJ(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Kz);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Qz):e}a(tJ,"validateRotationMaxSize");function rJ(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Wz);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(jz):e}a(rJ,"validateRotationInterval");function nJ(e,t){let r=t.state.path.join("."),n=kz.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||BC();return i=Math.round(Math.min(i,BC())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),$z.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(nJ,"setDefaultThreads");function Ou(e,t){let r=t.state.path.join(".");if(!kf.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(kf.isEmpty(Us))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return aa.join(Us,Yz);case"logging.root":return aa.join(Us,xC);case"clustering.leafServer.streams.path":return aa.join(Us,"clustering","leaf");case"storage.path":let n=aa.join(Us,HC.LEGACY_DATABASES_DIR_NAME);return GC.existsSync(n)?n:aa.join(Us,HC.DATABASES_DIR_NAME);case"logging.rotation.path":return aa.join(Us,xC);case"operationsApi.network.domainSocket":return r==null?null:aa.join(Us,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Ou,"setDefaultRoot");function sJ(e){let t=le.object({routes:$f});return Vz.validateBySchema({routes:e},t)}a(sJ,"routesValidator")});var Et=R((rSe,zC)=>{"use strict";var ln=L(),Wt=Y(),Bt=k(),{configValidator:iJ,routesValidator:kC}=MT(),Mr=require("fs-extra"),oJ=require("yaml"),ss=require("path"),aJ=require("is-number"),VC=require("properties-reader"),cJ=require("lodash"),{handleHDBError:lJ}=ie(),{HTTP_STATUS_CODES:uJ,HDB_ERROR_MSGS:Vf}=nn(),tSe=require("minimist"),{server:_J}=(Cr(),ae(zo)),{DATABASES_PARAM_CONFIG:bu,CONFIG_PARAMS:cn,CONFIG_PARAM_MAP:is}=ln,dJ="Unable to get config value because config is uninitialized",fJ="Config successfully initialized",EJ="Error backing up config file",hJ="Empty parameter sent to getConfigValue",YC=ss.join(ln.PACKAGE_ROOT,"config","yaml",ln.HDB_DEFAULT_CONFIG_FILE),pJ="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",$C={logging_rotation_retain:"logging.rotation.retain",logging_rotation_rotate:"logging.rotation.rotate",logging_rotation_rotateinterval:"logging.rotation.rotateInterval",logging_rotation_rotatemodule:"logging.rotation.rotateModule",logging_rotation_timezone:"logging.rotation.timezone",logging_rotation_workerinterval:"logging.rotation.workerInterval"},Yf,Ht,Kf;zC.exports={createConfigFile:mJ,getDefaultConfig:SJ,getConfigValue:WC,initConfig:vT,flattenConfig:hc,updateConfigValue:QC,updateConfigObject:gJ,getConfiguration:OJ,setConfiguration:bJ,readConfigFile:HT,getClusteringRoutes:NJ,initOldConfig:jC,getConfigFromFile:yJ,getConfigFilePath:la,addConfig:IJ,deleteConfigFromFile:wJ,getConfigObj:CJ};function mJ(e,t=!1){let r=co(YC);Yf=hc(r.toJSON());let n;for(let c in e){let l=is[c.toLowerCase()];if(l===cn.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(_=>({[_]:e[c][_]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let _=l.split("_"),u=UT(l,e[c]);l==="rootPath"&&u?.endsWith("/")&&(u=u.slice(0,-1));try{r.setIn([..._],u)}catch(d){Bt.error(d)}}}n&&KC(r,n),BT(r,t);let s=r.toJSON();Ht=hc(s);let i=r.getIn(["rootPath"]),o=ss.join(i,ln.HDB_CONFIG_FILE);Mr.createFileSync(o),Mr.writeFileSync(o,String(r)),Bt.trace(`Config file written to ${o}`)}a(mJ,"createConfigFile");function KC(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Wt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(bu.TABLES))for(let i in n[s][bu.TABLES])for(let o in n[s][bu.TABLES][i]){let c=n[s][bu.TABLES][i][o],l=[cn.DATABASES,s,bu.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[cn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Bt.error("Error parsing schemas CLI/env config arguments",n)}}a(KC,"setSchemasConfig");function SJ(e){if(Yf===void 0){let r=co(YC);Yf=hc(r.toJSON())}let t=is[e.toLowerCase()];if(t!==void 0)return Yf[t.toLowerCase()]}a(SJ,"getDefaultConfig");function WC(e){if(e==null){Bt.error(hJ);return}if(Ht===void 0){Bt.trace(dJ);return}let t=is[e.toLowerCase()];if(t!==void 0)return Ht[t.toLowerCase()]}a(WC,"getConfigValue");function la(e=Wt.getPropsFilePath()){let t=Wt.getEnvCliRootPath();return t?ss.join(t,ln.HDB_CONFIG_FILE):VC(e).get(ln.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(la,"getConfigFilePath");function vT(e=!1){if(Ht===void 0||e){let t;if(!Wt.noBootFile()){t=Wt.getPropsFilePath();try{Mr.accessSync(t,Mr.constants.F_OK|Mr.constants.R_OK)}catch(i){throw Bt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=la(t),n;if(r.includes("config/settings.js"))try{jC(r);return}catch(i){if(i.code!==ln.NODE_ERROR_CODES.ENOENT)throw i}try{n=co(r)}catch(i){if(i.code===ln.NODE_ERROR_CODES.ENOENT){Bt.trace(`HarperDB config file not found at ${r}.
|
|
10
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw Bt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}TJ(n,r),BT(n);let s=n.toJSON();if(_J.config=s,Ht=hc(s),Ht.logging_rotation_rotate)for(let i in $C)Ht[i]&&Bt.error(`Config ${$C[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Bt.trace(fJ)}}a(vT,"initConfig");function TJ(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ss.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ss.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ss.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(Bt.trace("Updating config file with missing config params"),Mr.writeFileSync(t,String(e)))}a(TJ,"checkForUpdatedConfig");function BT(e,t=!1){let r=e.toJSON();r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads);let n=iJ(r,t);if(n.error)throw Vf.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket)}a(BT,"validateConfig");function gJ(e,t){Ht===void 0&&(Ht={});let r=is[e.toLowerCase()];if(r===void 0){Bt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ht[r.toLowerCase()]=t}a(gJ,"updateConfigObject");function QC(e,t,r=void 0,n=!1,s=!1,i=!1){Ht===void 0&&vT();let o=WC(is.hdb_root),c=ss.join(o,ln.HDB_CONFIG_FILE),l=co(c),_;if(r===void 0&&e.toLowerCase()===cn.DATABASES)_=t;else if(r===void 0){let E;if(i)E=e;else if(E=is[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=UT(E,t);l.setIn([...f],h)}else for(let E in r){let f=is[E.toLowerCase()];if(f===cn.HTTP_SECUREPORT&&r[E]===Ht[cn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),f===cn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===Ht[cn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),f===cn.DATABASES){_=r[E];continue}if(f?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),m=ln.LEGACY_CONFIG_PARAMS[E.toUpperCase()];m&&m.startsWith("customFunctions")&&l.hasIn(m.split("_"))&&(f=m,h=m.split("_"));let S=UT(f,r[E]);f==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],S)}catch(g){Bt.error(g)}}}_&&KC(l,_),BT(l);let u=l.getIn(["rootPath"]),d=ss.join(u,ln.HDB_CONFIG_FILE);n===!0&&RJ(c,u),Mr.writeFileSync(d,String(l)),s&&(Ht=hc(l.toJSON())),Bt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(QC,"updateConfigValue");function RJ(e,t){try{let r=ss.join(t,"backup",`${ln.HDB_CONFIG_FILE}.bak`);Mr.copySync(e,r),Bt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Bt.error(EJ),Bt.error(r)}}a(RJ,"backupConfigFile");var AJ=["databases"];function hc(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),Kf=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!AJ.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!cn[l.toUpperCase()]&&is[l]&&(s[is[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(hc,"flattenConfig");function UT(e,t){if(e===cn.CLUSTERING_NODENAME||e===cn.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(aJ(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Wt.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 Wt.autoCast(t)}a(UT,"castConfigValue");function OJ(){let e=Wt.getPropsFilePath(),t=la(e);return co(t).toJSON()}a(OJ,"getConfiguration");async function bJ(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return QC(void 0,void 0,s,!0),pJ}catch(i){throw typeof i=="string"||i instanceof String?lJ(i,i,uJ.BAD_REQUEST,void 0,void 0,!0):i}}a(bJ,"setConfiguration");function HT(){let e=Wt.getPropsFilePath();try{Mr.accessSync(e,Mr.constants.F_OK|Mr.constants.R_OK)}catch(n){if(!Wt.noBootFile())throw Bt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=la(e);return co(t).toJSON()}a(HT,"readConfigFile");function co(e){return oJ.parseDocument(Mr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(co,"parseYamlDoc");function NJ(){let e=HT(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Wt.isEmptyOrZeroLength(t)?[]:t;let r=kC(t);if(r)throw Vf.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Wt.isEmptyOrZeroLength(n)?[]:n;let s=kC(n);if(s)throw Vf.CONFIG_VALIDATION(s.message);if(!Wt.isEmptyOrZeroLength(n)&&!Wt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Wt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Vf.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(NJ,"getClusteringRoutes");function jC(e){let t=VC(e);Ht={};for(let r in is){let n=t.get(r.toUpperCase());if(Wt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=is[r].toLowerCase();s===cn.LOGGING_ROOT?Ht[s]=ss.dirname(n):Ht[s]=n}return Ht}a(jC,"initOldConfig");function yJ(e){let t=HT();return cJ.get(t,e.replaceAll("_","."))}a(yJ,"getConfigFromFile");async function IJ(e,t){let r=co(la());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Mr.writeFile(la(),String(r))}a(IJ,"addConfig");function wJ(e){let t=la(Wt.getPropsFilePath()),r=co(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=ss.join(n,ln.HDB_CONFIG_FILE);Mr.writeFileSync(s,String(r))}a(wJ,"deleteConfigFromFile");function CJ(){return Kf||(vT(),Kf)}a(CJ,"getConfigObj")});var XC=R((sSe,JC)=>{"use strict";var Wf=L(),Qf=class{static{a(this,"BaseLicense")}constructor(t=0,r=Wf.RAM_ALLOCATION_ENUM.DEFAULT,n=Wf.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},xT=class extends Qf{static{a(this,"ExtendedLicense")}constructor(t=0,r=Wf.RAM_ALLOCATION_ENUM.DEFAULT,n=Wf.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};JC.exports={BaseLicense:Qf,ExtendedLicense:xT}});var ua=R((oSe,sD)=>{"use strict";var mc=require("fs-extra"),eD=qf(),tD=require("crypto"),DJ=require("moment"),LJ=require("uuid").v4,fr=k(),qT=require("path"),PJ=Y(),lo=L(),{totalmem:ZC}=require("os"),MJ=XC().ExtendedLicense,pc="invalid license key format",UJ="061183",vJ="mofi25",BJ="aes-256-cbc",HJ=16,xJ=32,rD=X();rD.initSync();var GT;sD.exports={validateLicense:nD,generateFingerPrint:qJ,licenseSearch:$T,getLicense:$J,checkMemoryLimit:VJ};function FT(){return qT.join(rD.getHdbBasePath(),lo.LICENSE_KEY_DIR_NAME,lo.LICENSE_FILE_NAME)}a(FT,"getLicenseDirPath");function GJ(){let e=FT();return qT.join(e,lo.LICENSE_FILE_NAME)}a(GJ,"getLicenseFilePath");function kT(){let e=FT();return qT.join(e,lo.REG_KEY_FILE_NAME)}a(kT,"getFingerPrintFilePath");async function qJ(){let e=kT();try{return await mc.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await FJ();throw fr.error(`Error writing fingerprint file to ${e}`),fr.error(t),new Error("There was an error generating the fingerprint")}}a(qJ,"generateFingerPrint");async function FJ(){let e=LJ(),t=eD.hash(e),r=kT();try{await mc.mkdirp(FT()),await mc.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw fr.error(`Error writing fingerprint file to ${r}`),fr.error(n),new Error("There was an error generating the fingerprint")}return t}a(FJ,"writeFingerprint");function nD(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:lo.RAM_ALLOCATION_ENUM.DEFAULT,version:lo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return fr.error("empty license key passed to validate."),r;let n=kT(),s=!1;try{s=mc.statSync(n)}catch(i){fr.error(i)}if(s){let i;try{i=mc.readFileSync(n,"utf8")}catch{fr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(vJ),c=o[1];c=Buffer.concat([Buffer.from(c)],HJ);let l=Buffer.concat([Buffer.from(i)],xJ),_=tD.createDecipheriv(BJ,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let u=null;try{u=_.update(o[0],"hex","utf8"),u.trim(),u+=_.final("utf8")}catch{let f=kJ(o[0],i);if(f)u=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(pc),fr.error(pc),new Error(pc)}let d;if(isNaN(u))try{d=JSON.parse(u),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(pc),fr.error(pc),new Error(pc)}else r.exp_date=u;r.exp_date<DJ().valueOf()&&(r.valid_date=!1),eD.validate(o[1],`${UJ}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||fr.error("Invalid licence"),r}a(nD,"validateLicense");function kJ(e,t){try{let r=tD.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{fr.warn("Check old license failed")}}a(kJ,"checkOldLicense");function $T(){let e=new MJ,t=[];try{t=mc.readFileSync(GJ(),"utf-8").split(lo.NEW_LINE)}catch(r){r.code==="ENOENT"?fr.info("no license file found"):fr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(PJ.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=nD(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){fr.error("There was an error parsing the license string."),fr.error(s),e.ram_allocation=lo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return GT=e,e}a($T,"licenseSearch");async function $J(){return GT||await $T(),GT}a($J,"getLicense");function VJ(){let e=$T().ram_allocation,t=process.constrainedMemory?.()||ZC();if(t=Math.round(Math.min(t,ZC())/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(VJ,"checkMemoryLimit")});var Ur=R((_Se,gD)=>{"use strict";var cD="username is required",lD="nothing to update, must supply active, role or password to update",uD="password cannot be an empty string",_D="If role is specified, it cannot be empty.",dD="active must be true or false";gD.exports={addUser:ZJ,alterUser:e2,dropUser:r2,getSuperUser:o2,userInfo:n2,listUsers:zf,listUsersExternal:s2,setUsersToGlobal:Tc,findAndValidateUser:SD,getClusterUser:a2,USERNAME_REQUIRED:cD,ALTERUSER_NOTHING_TO_UPDATE:lD,EMPTY_PASSWORD:uD,EMPTY_ROLE:_D,ACTIVE_BOOLEAN:dD};var fD=Pr(),YJ=oa(),KT=qf(),ED=PC(),hD=ur(),WT=hi(),un=Y(),pD=require("validate.js"),Ne=k(),{promisify:KJ}=require("util"),QT=fi(),iD=L(),oD=Ze(),WJ=Et(),cSe=X(),lSe=ua(),QJ=_i(),{table:uSe}=(Re(),ae(Ve)),{handleHDBError:vs,hdb_errors:jJ}=ie(),{HTTP_STATUS_CODES:Bs,AUTHENTICATION_ERROR_MSGS:VT,HDB_ERROR_MSGS:Sc}=jJ,{UserEventMsg:jT}=os(),YT=require("lodash"),{server:zT}=(Cr(),ae(zo)),zJ=k();zT.getUser=(e,t)=>SD(e,t,t!=null);var mD={username:!0,active:!0,role:!0,password:!0},aD=new Map,jf=hD.searchByValue,JJ=hD.searchByHash,XJ=KJ(YJ.delete);async function ZJ(e){let t=pD.cleanAttributes(e,mD),r=ED.addUserValidation(t);if(r)throw vs(new Error,r.message,Bs.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await jf(n),s=s&&Array.from(s)}catch(l){throw Ne.error("There was an error searching for a role in add user"),Ne.error(l),l}if(!s||s.length<1)throw vs(new Error,Sc.ROLE_NAME_NOT_FOUND(t.role),Bs.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw vs(new Error,Sc.DUP_ROLES_FOUND(t.role),Bs.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=QT.encrypt(t.password)),t.password=KT.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await fD.insert(i)}catch(l){throw Ne.error("There was an error searching for a user."),Ne.error(l),l}Ne.debug(o);try{await Tc()}catch(l){throw Ne.error("Got an error setting users to global"),Ne.error(l),l}if(o.skipped_hashes.length===1)throw vs(new Error,Sc.USER_ALREADY_EXISTS(t.username),Bs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],WT.signalUserChange(new jT(process.pid)),`${c.username} successfully added`}a(ZJ,"addUser");async function e2(e){let t=pD.cleanAttributes(e,mD);if(un.isEmptyOrZeroLength(t.username))throw new Error(cD);if(un.isEmptyOrZeroLength(t.password)&&un.isEmptyOrZeroLength(t.role)&&un.isEmptyOrZeroLength(t.active))throw new Error(lD);if(!un.isEmpty(t.password)&&un.isEmptyOrZeroLength(t.password.trim()))throw new Error(uD);if(!un.isEmpty(t.active)&&!un.isBoolean(t.active))throw new Error(dD);let r=t2(t.username);if(!un.isEmpty(t.password)&&!un.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=QT.encrypt(t.password)),t.password=KT.hash(t.password)),t.role==="")throw new Error(_D);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await jf(i)||[])}catch(c){throw Ne.error("Got an error searching for a role."),Ne.error(c),c}if(!o||o.length===0){let c=Sc.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ne.error(c),vs(new Error,c,Bs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Sc.ALTER_USER_DUP_ROLES(t.role);throw Ne.error(c),vs(new Error,c,Bs.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 fD.update(n)}catch(i){throw Ne.error("Error during update."),Ne.error(i),i}try{await Tc()}catch(i){throw Ne.error("Got an error setting users to global"),Ne.error(i),i}return WT.signalUserChange(new jT(process.pid)),s}a(e2,"alterUser");function t2(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(t2,"isClusterUser");async function r2(e){try{let t=ED.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(un.isEmpty(global.hdb_users.get(e.username)))throw vs(new Error,Sc.USER_NOT_EXIST(e.username),Bs.NOT_FOUND,void 0,void 0,!0);let n;try{n=await XJ(r)}catch(s){throw Ne.error("Got an error deleting a user."),Ne.error(s),s}Ne.debug(n);try{await Tc()}catch(s){throw Ne.error("Got an error setting users to global."),Ne.error(s),s}return WT.signalUserChange(new jT(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(r2,"dropUser");async function n2(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=YT.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await JJ(r)}catch(s){throw Ne.error("Got an error searching for a role."),Ne.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ne.error(r),r}return t}a(n2,"userInfo");async function s2(){let e;try{e=await zf()}catch(t){throw Ne.error("Got an error listing users."),Ne.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(s2,"listUsersExternal");async function zf(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await jf(e)}catch(o){throw Ne.error("Got an error searching for roles."),Ne.error(o),o}let r={};for(let o of t)r[o.id]=YT.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await jf(n)}catch(o){throw Ne.error("Got an error searching for users."),Ne.error(o),o}let i=new Map;for(let o of s)o=YT.cloneDeep(o),o.role=r[o.role],i2(o.role),i.set(o.username,o);return i}catch(e){throw Ne.error("got an error listing users"),Ne.error(e),un.errorizeMessage(e)}return null}a(zf,"listUsers");function i2(e){try{if(!e){Ne.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(QJ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ne.error("Got an error trying to set system permissions."),Ne.error(t)}}a(i2,"appendSystemTablesToRole");async function Tc(){try{let e=await zf();global.hdb_users=e}catch(e){throw Ne.error(e),e}}a(Tc,"setUsersToGlobal");async function SD(e,t,r=!0){global.hdb_users||await Tc();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw vs(new Error,VT.GENERIC_AUTH_FAIL,Bs.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw vs(new Error,VT.USER_INACTIVE,Bs.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(aD.get(t)===n.password)return s;if(KT.validate(n.password,t))aD.set(t,n.password);else throw vs(new Error,VT.GENERIC_AUTH_FAIL,Bs.UNAUTHORIZED,void 0,void 0,!0)}return s}a(SD,"findAndValidateUser");async function o2(){global.hdb_users||await Tc();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(o2,"getSuperUser");async function a2(){let e=await zf(),t=WJ.getConfigFromFile(iD.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!un.isEmpty(r)&&r?.role?.role===iD.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=QT.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+oD.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+oD.SERVER_SUFFIX.ADMIN,r}a(a2,"getClusterUser");var TD=[];zT.invalidateUser=function(e){for(let t of TD)try{t(e)}catch(r){zJ.error("Error invalidating user",r)}};zT.onInvalidatedUser=function(e){TD.push(e)}});var yu=R((hSe,bD)=>{"use strict";var _a=k(),_n=L(),c2=eC(),fSe=Bn(),ESe=Ei(),l2=Ur(),{validateEvent:RD}=os(),Nu=Hn(),u2=require("process"),{resetDatabases:_2}=(Re(),ae(Ve)),d2={[_n.ITC_EVENT_TYPES.SCHEMA]:f2,[_n.ITC_EVENT_TYPES.USER]:OD};async function f2(e){let t=RD(e);if(t){_a.error(t);return}_a.trace("ITC schemaHandler received schema event:",e),await c2(e.message),await E2(e.message)}a(f2,"schemaHandler");async function E2(e){try{Nu.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Nu.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Nu.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=_2();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){_a.error(t)}}a(E2,"syncSchemaMetadata");var AD=[];async function OD(e){try{try{Nu.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Nu.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){_a.warn(r)}let t=RD(e);if(t){_a.error(t);return}_a.trace(`ITC userHandler ${_n.HDB_ITC_CLIENT_PREFIX}${u2.pid} received user event:`,e),await l2.setUsersToGlobal();for(let r of AD)r()}catch(t){_a.error(t)}}a(OD,"userHandler");OD.addListener=function(e){AD.push(e)};bD.exports=d2});var os=R((RSe,yD)=>{"use strict";var mSe=k(),JT=Y(),h2=L(),{ITC_ERRORS:Iu}=nn(),{parentPort:SSe,threadId:p2,isMainThread:m2,workerData:TSe}=require("worker_threads"),{onMessageFromWorkers:S2,broadcast:gSe,broadcastWithAcknowledgement:T2}=rt();yD.exports={sendItcEvent:g2,validateEvent:ND,SchemaEventMsg:R2,UserEventMsg:A2};var Jf;S2(async(e,t)=>{Jf=Jf||yu(),ND(e),Jf[e.type]&&await Jf[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function g2(e){return!m2&&e.message&&(e.message.originator=p2),T2(e)}a(g2,"sendItcEvent");function ND(e){if(typeof e!="object")return Iu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||JT.isEmpty(e.type))return Iu.MISSING_TYPE;if(!e.hasOwnProperty("message")||JT.isEmpty(e.message))return Iu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||JT.isEmpty(e.message.originator))return Iu.MISSING_ORIGIN;if(h2.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Iu.INVALID_EVENT(e.type)}a(ND,"validateEvent");function R2(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(R2,"SchemaEventMsg");function A2(e){this.originator=e}a(A2,"UserEventMsg")});var hi=R((bSe,DD)=>{"use strict";var ID=L(),OSe=Y(),Xf=k(),wD=Jw(),gc,{sendItcEvent:CD}=os();function O2(e){try{Xf.trace("signalSchemaChange called with message:",e),gc=gc||yu();let t=new wD(ID.ITC_EVENT_TYPES.SCHEMA,e);return gc.schema(t),CD(t)}catch(t){Xf.error(t)}}a(O2,"signalSchemaChange");function b2(e){try{Xf.trace("signalUserChange called with message:",e),gc=gc||yu();let t=new wD(ID.ITC_EVENT_TYPES.USER,e);return gc.user(t),CD(t)}catch(t){Xf.error(t)}}a(b2,"signalUserChange");DD.exports={signalSchemaChange:O2,signalUserChange:b2}});var Zf=R((ySe,PD)=>{"use strict";var LD=Y(),N2=L(),y2=k(),I2=Lf(),w2=Df(),C2=hi(),{SchemaEventMsg:D2}=os(),L2="already exists in";PD.exports=P2;async function P2(e,t,r){if(LD.isEmptyOrZeroLength(r))return r;let n=[];LD.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 M2(e,t.schema,t.name,i)})),s}a(P2,"lmdbCheckForNewAttributes");async function M2(e,t,r,n){let s=new w2(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await U2(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(L2))y2.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(M2,"createNewAttribute");async function U2(e){let t;return t=await I2(e),C2.signalSchemaChange(new D2(process.pid,N2.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(U2,"createAttribute")});var Rc=R((wSe,MD)=>{"use strict";var XT=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}};MD.exports=XT});var vD=R((DSe,UD)=>{"use strict";var v2=Rc(),B2=L().OPERATIONS_ENUM,ZT=class extends v2{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(B2.INSERT,r,n,s,i),this.records=t}};UD.exports=ZT});var HD=R((PSe,BD)=>{"use strict";var H2=Rc(),x2=L().OPERATIONS_ENUM,eg=class extends H2{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(x2.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};BD.exports=eg});var GD=R((USe,xD)=>{"use strict";var G2=Rc(),q2=L().OPERATIONS_ENUM,tg=class extends G2{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(q2.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};xD.exports=tg});var FD=R((BSe,qD)=>{"use strict";var F2=Rc(),k2=L().OPERATIONS_ENUM,rg=class extends F2{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(k2.DELETE,n,s,t,i),this.original_records=r}};qD.exports=rg});var wu=R((GSe,YD)=>{"use strict";var xSe=require("path"),kD=Ye(),$2=vD(),V2=HD(),Y2=GD(),K2=FD(),Ac=_t(),$D=Y(),{CONFIG_PARAMS:W2}=L(),VD=X();VD.initSync();var eE=L().OPERATIONS_ENUM,{getTransactionAuditStorePath:Q2}=Je();YD.exports=j2;async function j2(e,t){if(VD.get(W2.LOGGING_AUDITLOG)===!1)return;let r=Q2(e.schema,e.table),n=await kD.openEnvironment(r,e.table,!0),s=z2(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){kD.initializeDBIs(n,Ac.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ac.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Ac.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Ac.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),$D.isEmpty(s.user_name)||n.dbis[Ac.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Ac.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(j2,"writeTransaction");function z2(e,t){let r=$D.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===eE.INSERT)return new $2(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===eE.UPDATE)return new V2(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===eE.UPSERT)return new Y2(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===eE.DELETE)return new K2(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(z2,"createTransactionObject")});var ng=R((kSe,KD)=>{"use strict";var J2=gu(),FSe=nu(),Cu=L(),X2=su(),Z2=ea().insertRecords,e4=Ye(),t4=k(),r4=Zf(),{getSchemaPath:n4}=Je(),s4=wu();KD.exports=i4;async function i4(e){try{let{schema_table:t,attributes:r}=J2(e);X2(e,r,t.hash_attribute),e.schema!==Cu.SYSTEM_SCHEMA_NAME&&(r.includes(Cu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Cu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Cu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Cu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await r4(e.hdb_auth_header,t,r),s=n4(e.schema,e.table),i=await e4.openEnvironment(s,e.table),o=await Z2(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await s4(e,o)}catch(c){t4.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(i4,"lmdbCreateRecords")});var jD=R((VSe,QD)=>{"use strict";var WD=L(),o4=ng(),a4=nu(),c4=require("fs-extra"),{getSchemaPath:l4}=Je();QD.exports=u4;async function u4(e){let t=[{name:e.schema,createddate:Date.now()}],r=new a4(WD.SYSTEM_SCHEMA_NAME,WD.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await o4(r),await c4.mkdirp(l4(e.schema))}a(u4,"lmdbCreateSchema")});var JD=R((KSe,zD)=>{"use strict";var sg=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}};zD.exports=sg});var tL=R((JSe,eL)=>{"use strict";var XD=Ye(),ig=wr(),og=nn().LMDB_ERRORS_ENUM,_4=_t(),ZD=k(),QSe=Y(),d4=require("lmdb"),f4=JD(),E4=L(),{OVERFLOW_MARKER:jSe,MAX_SEARCH_KEY_LENGTH:zSe}=_4,h4=E4.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function p4(e,t,r,n){if(ig.validateEnv(e),t===void 0)throw new Error(og.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(og.IDS_REQUIRED):new Error(og.IDS_MUST_BE_ITERABLE);try{let s=XD.listDBIs(e);XD.initializeDBIs(e,t,s);let i=new f4,o,c=[],l=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||n&&h[h4]>n){i.skipped.push(o);continue}let m=e.dbis[t].ifVersion(o,d4.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let g=s[S];if(!h.hasOwnProperty(g)||g===t)continue;let T=e.dbis[g],N=h[g];if(N!=null)try{let b=ig.getIndexedValues(N);if(b)for(let U=0,v=b.length;U<v;U++)T.remove(b[U],o)}catch{ZD.warn(`cannot delete from attribute: ${g}, ${N}:${o}`)}}});c.push(m),l.push(o),i.original_records.push(h)}catch(h){ZD.warn(h),i.skipped.push(o)}let _=[],u=await Promise.all(c);for(let E=0,f=u.length;E<f;E++)u[E]===!0?i.deleted.push(l[E]):(i.skipped.push(l[E]),_.push(E));let d=0;for(let E=0;E<_.length;E++){let f=_[E];i.original_records.splice(f-d,1),d++}return i.txn_time=ig.getNextMonotonicTime(),i}catch(s){throw s}}a(p4,"deleteRecords");eL.exports={deleteRecords:p4}});var Du=R((ZSe,nL)=>{"use strict";var Oc=Y(),m4=tL(),S4=Ye(),{getSchemaPath:T4}=Je(),g4=wu(),R4=k();nL.exports=A4;async function A4(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Oc.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Oc.isEmptyOrZeroLength(e.hash_values)&&!Oc.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Oc.isEmpty(l)||e.hash_values.push(l)}}if(Oc.isEmptyOrZeroLength(e.hash_values))return rL([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Oc.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=T4(e.schema,e.table),i=await S4.openEnvironment(s,e.table),o=await m4.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await g4(e,o)}catch(c){R4.error(`unable to write transaction due to ${c.message}`)}return rL(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(A4,"lmdbDeleteRecords");function rL(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(rL,"createDeleteResponse")});var cg=R((rTe,sL)=>{"use strict";var O4=L(),tTe=wr();function ag(e,t){let r=Object.create(null);if(t.length===1&&O4.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(ag,"parseRow");function b4(e,t,r,n){let s=ag(r,e);n.push(s)}a(b4,"searchAll");function N4(e,t,r,n){let s=ag(r,e);n[t]=s}a(N4,"searchAllToMap");function y4(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(y4,"iterateDBI");function da(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(da,"pushResults");function I4(e,t,r,n,s,i){t.toString().endsWith(e)&&da(t,r,n,s,i)}a(I4,"endsWith");function w4(e,t,r,n,s,i){t.toString().includes(e)&&da(t,r,n,s,i)}a(w4,"contains");function C4(e,t,r,n,s,i){t>e&&da(t,r,n,s,i)}a(C4,"greaterThanCompare");function D4(e,t,r,n,s,i){t>=e&&da(t,r,n,s,i)}a(D4,"greaterThanEqualCompare");function L4(e,t,r,n,s,i){t<e&&da(t,r,n,s,i)}a(L4,"lessThanCompare");function P4(e,t,r,n,s,i){t<=e&&da(t,r,n,s,i)}a(P4,"lessThanEqualCompare");sL.exports={parseRow:ag,searchAll:b4,searchAllToMap:N4,iterateDBI:y4,endsWith:I4,contains:w4,greaterThanCompare:C4,greaterThanEqualCompare:D4,lessThanCompare:L4,lessThanEqualCompare:P4,pushResults:da}});var bc=R((aTe,_L)=>{"use strict";var uo=Ye(),sTe=k(),dn=wr(),tE=_t(),Tt=nn().LMDB_ERRORS_ENUM,iTe=Y(),M4=L(),rE=cg(),{parseRow:U4}=rE,oTe=require("lmdb"),{OVERFLOW_MARKER:iL,MAX_SEARCH_KEY_LENGTH:v4}=tE;function oL(e,t,r,n=!1,s=void 0,i=void 0){return fa(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(oL,"iterateFullIndex");function Lu(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,_=!1){return fa(e,t,r,(u,d,E,f)=>{let T={transaction:u,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!_,exclusiveStart:i===!0?_:l};return f===r?(T.values=!1,d.getRange(T).map(N=>({value:N}))):d.getRange(T)})}a(Lu,"iterateRangeBetween");function fa(e,t,r,n){let s=e.database||e,i=uo.openDBI(s,r);i[tE.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&uo.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(fa,"setupTransaction");function aL(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(iL)){if(!s)if(r)s=uo.openDBI(e,r);else{let l=uo.listDBIs(e);for(let _=0,u=l.length;_<u&&(s=uo.openDBI(e,l[_]),!s[tE.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(aL,"getOverflowCheck");function B4(e,t,r,n=!1,s=void 0,i=void 0){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);return fa(e,t,t,(o,c,l)=>(nE(r),r=Pu(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>U4(_.value,r))))}a(B4,"searchAll");function H4(e,t,r,n=!1,s=void 0,i=void 0){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);nE(r),r=Pu(e.database||e,r);let o=new Map;for(let{key:c,value:l}of oL(e,t,t,n,s,i))o.set(c,rE.parseRow(l,r));return o}a(H4,"searchAllToMap");function x4(e,t,r=!1,n=void 0,s=void 0){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=oL(e,void 0,t,r,n,s),c=o.transaction,l=aL(c.database,c,void 0,t);for(let{key:_,value:u}of o){let d=l(_,u);i[d]===void 0&&(i[d]=[]),i[d].push(u)}return i}a(x4,"iterateDBI");function G4(e,t){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);return uo.statDBI(e,t).entryCount}a(G4,"countAll");function q4(e,t,r,n,s=!1,i=void 0,o=void 0){return _o(e,r,n),fa(e,t,r,(c,l,_,u)=>(n=dn.convertKeyValueToWrite(n),u===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(q4,"equals");function F4(e,t,r){return _o(e,t,r),uo.openDBI(e,t).getValuesCount(r)}a(F4,"count");function k4(e,t,r,n,s=!1,i=void 0,o=void 0){return _o(e,r,n),fa(e,null,r,(c,l)=>{n=dn.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let u;if(s===!0){let d;for(let E of l.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){d=E;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),u=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==d){if(f.toString().startsWith(n))return E;if(_===!0)return u.DONE}}),u.filter(E=>E)}else return u=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return u.DONE}),_?u:u.filter(d=>d)})}a(k4,"startsWith");function $4(e,t,r,n,s=!1,i=void 0,o=void 0){return cL(e,t,r,n,s,i,o,!0)}a($4,"endsWith");function cL(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return _o(e,r,n),fa(e,null,r,(l,_,u,d)=>{let E=aL(u,l,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(iL)?_.getValues(f,{transaction:l}).map(m=>{let S=E(f,m);if(c?S.endsWith(n):S.includes(n))return{key:S,value:m}}).filter(m=>m):(c?h.endsWith(n):h.includes(n))?_[tE.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:_.getValues(f,{transaction:l}).map(m=>({key:f,value:m})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(cL,"contains");function V4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Lu(e,t,r,n,l,s,i,o,!0,!1)}a(V4,"greaterThan");function Y4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Lu(e,t,r,n,l,s,i,o,!1,!1)}a(Y4,"greaterThanEqual");function K4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Lu(e,t,r,l,n,s,i,o,!1,!0)}a(K4,"lessThan");function W4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Lu(e,t,r,l,n,s,i,o,!1,!1)}a(W4,"lessThanEqual");function Q4(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(dn.validateEnv(e),r===void 0)throw new Error(Tt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Tt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Tt.END_VALUE_REQUIRED);if(n=dn.convertKeyValueToWrite(n),s=dn.convertKeyValueToWrite(s),n>s)throw new Error(Tt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Lu(e,t,r,n,s,i,o,c)}a(Q4,"between");function j4(e,t,r,n){dn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);if(nE(r),r=Pu(s,r),n===void 0)throw new Error(Tt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=rE.parseRow(c,r)),o}a(j4,"searchByHash");function z4(e,t,r){dn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Tt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(z4,"checkHashExists");function J4(e,t,r,n,s=[]){return uL(e,t,r,n,s),lL(e,t,r,n,s).map(i=>i[1])}a(J4,"batchSearchByHash");function X4(e,t,r,n,s=[]){uL(e,t,r,n,s);let i=new Map;for(let[o,c]of lL(e,t,r,n,s))i.set(o,c);return i}a(X4,"batchSearchByHashToMap");function lL(e,t,r,n,s=[]){return fa(e,t,t,(i,o,c)=>{r=Pu(c,r);let l=r.length<3;return n.map(_=>{let u=c.dbis[t].get(_,{transaction:i,lazy:l});if(u)return[_,rE.parseRow(u,r)];s.push(_)}).filter(_=>_)})}a(lL,"batchHashSearch");function uL(e,t,r,n,s){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);if(nE(r),n==null)throw new Error(Tt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Tt.IDS_MUST_BE_ITERABLE)}a(uL,"initializeBatchSearchByHash");function nE(e){if(!Array.isArray(e))throw e===void 0?new Error(Tt.FETCH_ATTRIBUTES_REQUIRED):new Error(Tt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(nE,"validateFetchAttributes");function _o(e,t,r){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Tt.SEARCH_VALUE_REQUIRED);if(r?.length>v4)throw new Error(Tt.SEARCH_VALUE_TOO_LARGE)}a(_o,"validateComparisonFunctions");function Pu(e,t){return t.length===1&&M4.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=uo.listDBIs(e)),t}a(Pu,"setGetWholeRowAttributes");_L.exports={searchAll:B4,searchAllToMap:H4,count:F4,countAll:G4,equals:q4,startsWith:k4,endsWith:$4,contains:cL,searchByHash:j4,setGetWholeRowAttributes:Pu,batchSearchByHash:J4,batchSearchByHashToMap:X4,checkHashExists:z4,iterateDBI:x4,greaterThan:V4,greaterThanEqual:Y4,lessThan:K4,lessThanEqual:W4,between:Q4}});var Nc=R((lTe,pL)=>{var dL=require("lodash"),fL=nt(),me=require("joi"),Z4=Y(),{hdb_schema_table:Mu,checkValidTable:EL,hdb_table:hL,hdb_database:sE}=Ps(),{handleHDBError:e3,hdb_errors:t3}=ie(),{getDatabases:r3}=(Re(),ae(Ve)),{HTTP_STATUS_CODES:n3}=t3,s3=me.object({database:sE,schema:sE,table:hL,search_attribute:Mu,search_value:me.any().required(),get_attributes:me.array().min(1).items(me.alternatives(Mu,me.object())).optional(),desc:me.bool(),limit:me.number().integer().min(1),offset:me.number().integer().min(0)}),i3=me.object({database:sE,schema:sE,table:hL,operator:me.string().valid("and","or").default("and").lowercase(),offset:me.number().integer().min(0),limit:me.number().integer().min(1),get_attributes:me.array().min(1).items(me.alternatives(Mu,me.object())).optional(),sort:me.object({attribute:me.alternatives(Mu,me.array().min(1)),descending:me.bool().optional()}).optional(),conditions:me.array().min(1).items(me.alternatives(me.object({operator:me.string().valid("and","or").default("and").lowercase(),conditions:me.array()}),me.object({search_attribute:me.alternatives(Mu,me.array().min(1)),search_type:me.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:me.when("search_type",{switch:[{is:"equals",then:me.any()},{is:"between",then:me.array().items(me.alternatives([me.string(),me.number()])).length(2)}],otherwise:me.alternatives(me.string(),me.number())}).required()}))).required()});pL.exports=function(e,t){let r=null;switch(t){case"value":r=fL.validateBySchema(e,s3);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(EL("database",e.schema)),i(EL("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=fL.validateBySchema(e,i3);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Z4.checkGlobalSchemaTable(e.schema,e.table);if(s)return e3(new Error,s,n3.NOT_FOUND);let o=r3()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(u=>{for(let d=0,E=u.conditions.length;d<E;d++){let f=u.conditions[d];f.conditions?l(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&l(e);let _=dL.filter(c,u=>u!=="*"&&!u.startsWith?.("$")&&u.attribute!=="*"&&!Array.isArray(u)&&!u.name&&!dL.some(o,d=>d===u||d.attribute===u||d.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var lg=R((_Te,mL)=>{"use strict";var o3=Ye(),a3=Nc(),{getSchemaPath:c3}=Je();mL.exports=l3;function l3(e){let t=a3(e,"hashes");if(t)throw t;let r=c3(e.schema,e.table);return o3.openEnvironment(r,e.table)}a(l3,"initialize")});var ug=R((fTe,SL)=>{"use strict";var u3=bc(),_3=lg();SL.exports=d3;async function d3(e){let t=await _3(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return u3.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(d3,"lmdbGetDataByHash")});var yc=R((hTe,TL)=>{"use strict";var _g=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};TL.exports=_g});var RL=R((STe,gL)=>{"use strict";var mTe=yc(),f3=bc(),E3=lg();gL.exports=h3;async function h3(e){let t=await E3(e),r=global.hdb_schema[e.schema][e.table];return f3.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(h3,"lmdbSearchByHash")});var as=R((gTe,AL)=>{"use strict";var dg=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,_=void 0,u=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=_,this.offset=u}};AL.exports=dg});var iE=R((ATe,wL)=>{"use strict";var Er=bc(),p3=Ye(),m3=Y(),Se=_t(),Ea=L(),S3=_i(),OL=nn().LMDB_ERRORS_ENUM,{getSchemaPath:T3}=Je(),pi=Ea.SEARCH_WILDCARDS;async function g3(e,t,r){let n;e.schema===Ea.SYSTEM_SCHEMA_NAME?n=S3[e.table]:n=global.hdb_schema[e.schema][e.table];let s=IL(e,n.hash_attribute,r,t);return NL(e,s,n.hash_attribute,r)}a(g3,"prepSearch");async function NL(e,t,r,n){let s=T3(e.schema,e.table),i=await p3.openEnvironment(s,e.table),o=yL(i,e,t,r),c=o.transaction||i;if([Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Se.SEARCH_TYPES.SEARCH_ALL,Se.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(R3(e,r)===!1){let u=e.search_attribute;if(u===r)return n?bL(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[u]:E.key}),"toObject");return n?bL(o,d):o.map(d)}let _=e.search_attribute===r?o.map(u=>u.key):o.map(u=>u.value);return n===!0?Er.batchSearchByHashToMap(c,r,e.get_attributes,_):Er.batchSearchByHash(c,r,e.get_attributes,_)}a(NL,"executeSearch");function yL(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case Se.SEARCH_TYPES.EQUALS:s=Er.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.CONTAINS:s=Er.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.ENDS_WITH:case Se.SEARCH_TYPES._ENDS_WITH:s=Er.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.STARTS_WITH:case Se.SEARCH_TYPES._STARTS_WITH:s=Er.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Er.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Er.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Se.SEARCH_TYPES.SEARCH_ALL:return Er.searchAll(e,n,t.get_attributes,o,c,l);case Se.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Er.searchAllToMap(e,n,t.get_attributes,o,c,l);case Se.SEARCH_TYPES.BETWEEN:s=Er.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case Se.SEARCH_TYPES.GREATER_THAN:case Se.SEARCH_TYPES._GREATER_THAN:s=Er.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.GREATER_THAN_EQUAL:case Se.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Er.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.LESS_THAN:case Se.SEARCH_TYPES._LESS_THAN:s=Er.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.LESS_THAN_EQUAL:case Se.SEARCH_TYPES._LESS_THAN_EQUAL:s=Er.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(yL,"searchByType");function bL(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(bL,"createMapFromIterable");function R3(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(R3,"checkToFetchMore");function IL(e,t,r,n){if(m3.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),pi.indexOf(s)>-1)return r===!0?Se.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Se.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(pi[0])<0&&s.indexOf(pi[1])<0)return c===!0?r===!0?Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Se.SEARCH_TYPES.EQUALS;if(pi.indexOf(i)>=0&&pi.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Se.SEARCH_TYPES.CONTAINS;if(pi.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Se.SEARCH_TYPES.ENDS_WITH;if(pi.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Se.SEARCH_TYPES.STARTS_WITH;if(s.includes(pi[0])||s.includes(pi[1]))return Se.SEARCH_TYPES.EQUALS;throw new Error(OL.UNKNOWN_SEARCH_TYPE)}else switch(n){case Ea.VALUE_SEARCH_COMPARATORS.BETWEEN:return Se.SEARCH_TYPES.BETWEEN;case Ea.VALUE_SEARCH_COMPARATORS.GREATER:return Se.SEARCH_TYPES.GREATER_THAN;case Ea.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Se.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ea.VALUE_SEARCH_COMPARATORS.LESS:return Se.SEARCH_TYPES.LESS_THAN;case Ea.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Se.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(OL.UNKNOWN_SEARCH_TYPE)}}a(IL,"createSearchTypeFromSearchObject");wL.exports={executeSearch:NL,createSearchTypeFromSearchObject:IL,prepSearch:g3,searchByType:yL}});var DL=R((NTe,CL)=>{"use strict";var bTe=as(),A3=Nc(),O3=Y(),b3=L(),N3=iE();CL.exports=y3;function y3(e,t){if(!O3.isEmpty(t)&&b3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=A3(e,"value");if(n)throw n;return N3.prepSearch(e,t,!0)}a(y3,"lmdbGetDataByValue")});var Uu=R((wTe,LL)=>{"use strict";var ITe=as(),I3=Nc(),w3=Y(),C3=L(),D3=iE();LL.exports=L3;async function L3(e,t){if(!w3.isEmpty(t)&&C3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=I3(e,"value");if(n)throw n;return D3.prepSearch(e,t,!1)}a(L3,"lmdbSearchByValue")});var ML=R((LTe,PL)=>{"use strict";var DTe=_t(),fg=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}},Eg=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},hg=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};PL.exports={SearchByConditionsObject:fg,SearchCondition:Eg,SortAttribute:hg}});var xL=R((vTe,HL)=>{"use strict";var MTe=ML().SearchByConditionsObject,P3=as(),M3=Nc(),pg=bc(),oE=_t(),{Resource:UTe}=(Mn(),ae(mg)),BL=iE(),U3=cg(),v3=require("lodash"),{getSchemaPath:B3}=Je(),UL=Ye(),{handleHDBError:H3,hdb_errors:x3}=ie(),{HTTP_STATUS_CODES:G3}=x3,q3=1e8;HL.exports=F3;async function F3(e){let t=M3(e,"conditions");if(t)throw H3(t,t.message,G3.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=B3(e.schema,e.table),n=await UL.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)UL.openDBI(n,_.search_attribute);let i=v3.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let u=_.search_type;u===oE.SEARCH_TYPES.EQUALS?_.estimated_count=pg.count(n,_.search_attribute,_.search_value):u===oE.SEARCH_TYPES.CONTAINS||u===oE.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=q3}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await vL(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],u=i.slice(1).map(BL.filterByType),d=u.length,E=pg.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(f=>_.get(f,{transaction:o,lazy:!0})),d>0&&(l=l.filter(f=>{for(let h=0;h<d;h++)if(!u[h](f))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(f=>U3.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await vL(o,e,E,s.hash_attribute);c=c.concat(f)}let _=new Set,u=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(u,e.limit&&e.limit+u),l=pg.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(F3,"lmdbSearchByConditions");async function vL(e,t,r,n){let s=new P3(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===oE.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,BL.searchByType(e,s,i,n).map(o=>o.value)}a(vL,"executeConditionSearch")});var vu=R((HTe,GL)=>{"use strict";var k3=L().OPERATIONS_ENUM,Sg=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=k3.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};GL.exports=Sg});var Tg=R((GTe,WL)=>{"use strict";var $L=as(),VL=vu(),YL=Uu(),KL=Du(),vr=L(),qL=Y(),FL=Ye(),{getTransactionAuditStorePath:$3,getSchemaPath:V3}=Je(),kL=k();WL.exports=Y3;async function Y3(e){try{if(qL.isEmpty(global.hdb_schema[e.schema])||qL.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await K3(e),await W3(e);let t=V3(e.schema,e.table);try{await FL.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")kL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=$3(e.schema,e.table);await FL.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")kL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Y3,"lmdbDropTable");async function K3(e){let t=new $L(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,vr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[vr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await YL(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 VL(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await KL(s)}a(K3,"deleteAttributesFromSystem");async function W3(e){let t=new $L(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,vr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[vr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,vr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,vr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await YL(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 VL(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await KL(s)}catch(i){throw i}}a(W3,"dropTableFromSystem")});var jL=R((FTe,QL)=>{"use strict";var Q3=require("fs-extra"),j3=as(),z3=yc(),J3=vu(),X3=Tg(),Z3=Du(),eX=ug(),tX=Uu(),mi=L(),{getSchemaPath:rX}=Je(),{handleHDBError:nX,hdb_errors:sX}=ie(),{HDB_ERROR_MSGS:iX,HTTP_STATUS_CODES:oX}=sX;QL.exports=aX;async function aX(e){let t;try{t=await cX(e.schema);let r=new j3(mi.SYSTEM_SCHEMA_NAME,mi.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await tX(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await X3(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new J3(mi.SYSTEM_SCHEMA_NAME,mi.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Z3(s);let i=rX(t);await Q3.remove(i)}catch(r){throw r}}a(aX,"lmdbDropSchema");async function cX(e){let t=new z3(mi.SYSTEM_SCHEMA_NAME,mi.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await eX(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw nX(new Error,iX.SCHEMA_NOT_FOUND(e),oX.NOT_FOUND,void 0,void 0,!0);return n}a(cX,"validateDropSchema")});var Bu=R(($Te,zL)=>{"use strict";var gg=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};zL.exports=gg});var Ag=R((KTe,JL)=>{"use strict";var lX=require("fs-extra"),aE=Ye(),{getTransactionAuditStorePath:uX}=Je(),Rg=_t(),YTe=Bu();JL.exports=_X;async function _X(e){let t;try{let r=uX(e.schema,e.table);await lX.mkdirp(r),t=await aE.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{aE.createDBI(t,Rg.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),aE.createDBI(t,Rg.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),aE.createDBI(t,Rg.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(_X,"createTransactionsAuditEnvironment")});var tP=R((QTe,eP)=>{"use strict";var Og=L(),XL=Ye(),dX=ea(),{getSystemSchemaPath:fX,getSchemaPath:EX}=Je(),hX=_i(),pX=Lf(),bg=Df(),mX=k(),SX=Ag(),yg=hX.hdb_table,ZL=[];for(let e=0;e<yg.attributes.length;e++)ZL.push(yg.attributes[e].attribute);eP.exports=TX;async function TX(e,t){let r=EX(t.schema,t.table),n=new bg(t.schema,t.table,Og.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new bg(t.schema,t.table,Og.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new bg(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await XL.createEnvironment(r,t.table),e!==void 0){let o=await XL.openEnvironment(fX(),Og.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await dX.insertRecords(o,yg.hash_attribute,ZL,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Ng(n),await Ng(s),await Ng(i)}await SX(t)}catch(o){throw o}}a(TX,"lmdbCreateTable");async function Ng(e){try{await pX(e)}catch(t){mX.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Ng,"createAttribute")});var nP=R((zTe,rP)=>{"use strict";var gX=gu(),RX=su(),AX=Zf(),Hu=L(),OX=ea().updateRecords,bX=Ye(),{getSchemaPath:NX}=Je(),yX=wu(),IX=k();rP.exports=wX;async function wX(e){try{let{schema_table:t,attributes:r}=gX(e);RX(e,r,t.hash_attribute),e.schema!==Hu.SYSTEM_SCHEMA_NAME&&(r.includes(Hu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Hu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Hu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Hu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await AX(e.hdb_auth_header,t,r),s=NX(e.schema,e.table),i=await bX.openEnvironment(s,e.table),o=await OX(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await yX(e,o)}catch(c){IX.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(wX,"lmdbUpdateRecords")});var iP=R((XTe,sP)=>{"use strict";var CX=L().OPERATIONS_ENUM,Ig=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=CX.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};sP.exports=Ig});var aP=R((tge,oP)=>{"use strict";var ege=iP(),DX=gu(),LX=su(),PX=Zf(),xu=L(),MX=ea().upsertRecords,UX=Ye(),{getSchemaPath:vX}=Je(),BX=wu(),HX=k(),{handleHDBError:xX,hdb_errors:GX}=ie();oP.exports=qX;async function qX(e){let t;try{t=DX(e)}catch(l){throw xX(l,l.message,GX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;LX(e,n,r.hash_attribute),e.schema!==xu.SYSTEM_SCHEMA_NAME&&(n.includes(xu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(xu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(xu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(xu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await PX(e.hdb_auth_header,r,n),i=vX(e.schema,e.table),o=await UX.openEnvironment(i,e.table),c=await MX(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await BX(e,c)}catch(l){HX.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(qX,"lmdbUpsertRecords")});var lP=R((nge,cP)=>{"use strict";var wg=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};cP.exports=wg});var _P=R((ige,uP)=>{"use strict";var Cg=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}};uP.exports=Cg});var EP=R((cge,fP)=>{"use strict";var Dg=Ye(),{getTransactionAuditStorePath:FX}=Je(),age=lP(),Gu=_t(),kX=Y(),dP=_P(),$X=require("util").promisify,VX=$X(setTimeout),YX=1e4,KX=100;fP.exports=WX;async function WX(e){let t=FX(e.schema,e.table),r=await Dg.openEnvironment(t,e.table,!0),n=Dg.listDBIs(r);Dg.initializeDBIs(r,Gu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new dP;do s=await QX(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 VX(KX);while(s.transactions_deleted>0);return i}a(WX,"deleteAuditLogsBefore");async function QX(e,t){let r=new dP;try{let n=e.dbis[Gu.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[Gu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];kX.isEmpty(c)||(s=e.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>YX)break}return await s,r}catch(n){throw n}}a(QX,"deleteTransactions")});var pP=R((uge,hP)=>{"use strict";var Lg=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};hP.exports=Lg});var SP=R((fge,mP)=>{"use strict";var jX=as(),zX=vu(),dge=pP(),Hs=L(),JX=Y(),Pg=Ye(),XX=_i(),ZX=Uu(),eZ=Du(),{getSchemaPath:tZ}=Je();mP.exports=rZ;async function rZ(e,t=!0){let r;e.schema===Hs.SYSTEM_SCHEMA_NAME?r=XX[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await sZ(e),s=tZ(e.schema,e.table),i=await Pg.openEnvironment(s,e.table);return t===!0&&await nZ(e,i,r.hash_attribute),Pg.dropDBI(i,e.attribute),n}a(rZ,"lmdbDropAttribute");async function nZ(e,t,r){let n=Pg.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let _={};for(let u in c)u!==i&&(_[u]=c[u]);s=t.dbis[r].put(o,_,l)}await s}a(nZ,"removeAttributeFromAllObjects");async function sZ(e){let t=new jX(Hs.SYSTEM_SCHEMA_NAME,Hs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await ZX(t)).filter(o=>o[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(JX.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new zX(Hs.SYSTEM_SCHEMA_NAME,Hs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return eZ(i)}a(sZ,"dropAttributeFromSystem")});var bP=R((pge,OP)=>{"use strict";var Mg=Ye(),Ic=_t(),hge=wr(),Ug=L(),TP=Y(),{getTransactionAuditStorePath:iZ}=Je(),oZ=bc(),cE=Rc(),aZ=k();OP.exports=cZ;async function cZ(e){let t=iZ(e.schema,e.table),r=await Mg.openEnvironment(t,e.table,!0),n=Mg.listDBIs(r);Mg.initializeDBIs(r,Ic.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Ug.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return gP(r,e.search_values);case Ug.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,uZ(r,e.search_values,s);case Ug.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return lZ(r,e.search_values);default:return gP(r)}}a(cZ,"readAuditLog");function gP(e,t=[0,Date.now()]){TP.isEmpty(t[0])&&(t[0]=0),TP.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Ic.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new cE,s))}a(gP,"searchTransactionsByTimestamp");function lZ(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[Ic.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,AP(e,i))}return Object.fromEntries(r)}a(lZ,"searchTransactionsByUsername");function uZ(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let _=t[c],u=oZ.equals(e,Ic.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ic.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of u){let E=Number(d);n.has(E)?n.get(E).push(_.toString()):n.set(E,[_.toString()])}}let s=Array.from(n.keys()),i=AP(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],_=l.timestamp,u=n.get(_);RP(l,"records",r,u,o),RP(l,"original_records",r,u,o)}return Object.fromEntries(o)}a(uZ,"searchTransactionsByHashValues");function RP(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let _=s.get(l),u=_[_.length-1];if(u.timestamp===i)u[t]=[c];else{let d=new cE(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new cE(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(l,[_])}}}a(RP,"loopRecords");function AP(e,t){let r=[];try{let n=e.dbis[Ic.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new cE,i);r.push(o)}}catch(i){aZ.warn(i)}return r}catch(n){throw n}}a(AP,"batchSearchTransactions")});var yP=R((gge,NP)=>{"use strict";var{getSchemaPath:Sge}=Je(),Tge=Ye(),{database:_Z}=(Re(),ae(Ve));NP.exports={writeTransaction:dZ};async function dZ(e,t,r){return _Z({database:e,table:t}).transaction(r)}a(dZ,"writeTransaction")});var DP=R((Age,CP)=>{"use strict";var{getSchemaPath:IP}=Je(),wP=Ye();CP.exports={flush:fZ,resetReadTxn:EZ};async function fZ(e,t){return(await wP.openEnvironment(IP(e,t),t.toString())).flushed}a(fZ,"flush");async function EZ(e,t){try{(await wP.openEnvironment(IP(e,t),t.toString())).resetReadTxn()}catch{}}a(EZ,"resetReadTxn")});var UP=R((bge,MP)=>{"use strict";var{Readable:hZ}=require("stream"),{getDatabases:pZ}=(Re(),ae(Ve)),{readSync:mZ,openSync:SZ,createReadStream:LP}=require("fs"),{open:TZ}=require("lmdb"),PP=fu(),gZ=Eu(),{AUDIT_STORE_OPTIONS:RZ}=(no(),ae(vP)),{INTERNAL_DBIS_NAME:AZ,AUDIT_STORE_NAME:OZ}=_t();MP.exports=NZ;var vg=32768,bZ=100;async function NZ(e){let t=e.database||e.schema||"data",r=pZ()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let u=_.dbisDB,d=TZ({noSync:!0,maxDbs:gZ.MAX_DBS}),E,f=d.openDB(AZ,new PP(!1)),h=u.useReadTransaction(),m=0,S=a(async function(T,N){N.encoding="binary",N.encoder=void 0;let b=d.openDB(T,N),U=u.openDB(T,N);for(let{key:v,version:q,value:M}of U.getRange({start:null,transaction:h,versions:U.useVersions}))E=b.put(v,M,q),m++%bZ===0&&(await new Promise(W=>setTimeout(W,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:T,value:N}of u.getRange({transaction:h,start:!1}))if(s.some(b=>T.startsWith?.(b+"/"))){f.put(T,N);let[,b]=T.split("/"),U=!b,v=new PP(!U,U);await S(T,v)}e.include_audit&&await S(OZ,Object.assign({},RZ)),await E;let g=LP(d.path);return g.headers=l(),g.on("close",()=>{h.done(),d.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=SZ(o.path);return o.transaction(()=>{let _=Buffer.alloc(vg);mZ(c,_,0,vg),o.resetReadTxn();let u=o.useReadTransaction();u.renew();let d=LP(null,{fd:c,start:vg}),E=new hZ.from(async function*(){yield _;for await(let f of d)u.openTimer&&(u.openTimer=0),yield f;u.done()}());return E.headers=l(),E});function l(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(NZ,"getBackup")});var xP=R((yge,HP)=>{"use strict";var yZ=k(),{handleHDBError:IZ}=ie(),wZ=rw(),CZ=Lf(),DZ=ng(),LZ=jD(),PZ=Du(),MZ=ug(),UZ=RL(),vZ=DL(),BZ=Uu(),HZ=xL(),xZ=jL(),GZ=tP(),qZ=nP(),FZ=aP(),kZ=EP(),$Z=Tg(),VZ=SP(),YZ=bP(),KZ=yP(),BP=DP(),WZ=UP(),Bg=class extends wZ{static{a(this,"LMDBBridge")}async searchByConditions(t){return HZ(t)}async getDataByHash(t){return await MZ(t)}async searchByHash(t){return await UZ(t)}async getDataByValue(t,r){return await vZ(t,r)}async searchByValue(t){return await BZ(t)}async createSchema(t){return await LZ(t)}async dropSchema(t){return await xZ(t)}async createTable(t,r){return await GZ(t,r)}async dropTable(t){return await $Z(t)}async createAttribute(t){return await CZ(t)}async createRecords(t){return await DZ(t)}async updateRecords(t){return await qZ(t)}async upsertRecords(t){try{return await FZ(t)}catch(r){throw IZ(r,null,null,yZ.ERR,r)}}async deleteRecords(t){return await PZ(t)}async dropAttribute(t){return await VZ(t)}async deleteAuditLogsBefore(t){return await kZ(t)}async readAuditLog(t){return await YZ(t)}writeTransaction(t,r,n){return KZ.writeTransaction(t,r,n)}flush(t,r){return BP.flush(t,r)}resetReadTxn(t,r){return BP.resetReadTxn(t,r)}getBackup(t){return WZ(t)}};HP.exports=Bg});function JZ(){zZ=setInterval(function(){for(let e of Hg)if(e.stale){let t=e[Ie]?.url;kP.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},jZ).unref()}var xg,FP,kP,$P,VP,YP,GP,Hg,QZ,qu,qP,ha,lE,jZ,zZ,Gg=be(()=>{xg=x(wr()),FP=x(ie()),kP=x(k());Mn();$P=x(X()),VP=x(L()),YP=x(Y()),GP=100,Hg=new Set,QZ=(0,YP.convertToMS)($P.get(VP.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,ha=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),Hg.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Hg.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(qu&&!this.overloadChecked&&performance.now()-qP>QZ)throw new FP.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,xg.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let d=this.validated;this.validated=this.writes.length;for(let f=d;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let E;for(let f=d;f<this.validated;f++){let h=this.writes[f];h&&(h.before||h.beforeIntermediate)&&(E=!0)}if(E)return(async()=>{try{for(let f=0;f<2;f++){let h;for(let m=d;m<this.validated;m++){let S=this.writes[m];if(!S)continue;let g=S[f===0?"before":"beforeIntermediate"];if(g){let T=g();h?h.push?h.push(T):h=[h,T]:h=T}}h&&await(h.push?Promise.all(h):h)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(d){throw this.abort(),d}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(d=>d);let c=a(d=>{d.commit(r,d.entry,n)},"doWrite"),l=a(()=>{let d=this.writes[o++];if(d)if(d.key){n>0&&(d.entry=d.store.getEntry(d.key));let E=d.store.ifVersion(d.key,d.entry?.version??null,l);s=s||E}else l();else for(let E of this.writes)c(E)},"nextCondition"),_=this.lmdbDb;if(this.writes.length>0&&(_?.retryRisk&&(_.retryRisk*=.99),this.writes.length+(_?.retryRisk||0)<GP>>n?l():s=this.writes[0].store.transaction(()=>{for(let d of this.writes)d.entry=d.store.getEntry(d.key),c(d);return!0})),s)return qu||(qu=s,qP=performance.now(),qu.then(()=>{qu=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)+GP/2),t?t.retries=n+1:t={retries:1},this.commit(t)));let u={txnTime:r};if(this.next){let d=this.next?.commit(t);if(d?.then)return d?.then(E=>({txnTime:r,next:E}));u.next=d}return u}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},lE=class extends ha{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,xg.getNextMonotonicTime)())}getReadTxn(){}},jZ=3e4;a(JZ,"startMonitoringTxns");JZ()});function it(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new ha;e.timestamp&&(n.timestamp=e.timestamp),n[Ie]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({letItLinger:r?.letItLinger});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var KP,pa=be(()=>{KP=require("../index");Mn();Gg();a(it,"transaction");(0,KP._assignPackageExport)("transaction",it);it.commit=function(e){let t=(e[Ie]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};it.abort=function(e){let t=(e[Ie]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var eM={};$e(eM,{ResourceBridge:()=>kg});function $g({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 QP(e,t){let r=xs(e),n=$g(e,r);if(!r)throw new cs.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache},o;it(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let _=c[l++],u;try{u=await r.get({id:_,lazy:s,select:n},i),u=u&&_E(u)}catch(d){u={message:d.toString()}}return t?{value:{key:_,value:u}}:{value:u}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function xs(e){let t=e.database||e.schema||ZZ,r=Br()[t];if(!r)throw(0,cs.handleHDBError)(new Error,XZ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function jP(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*zP(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:l}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(l)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[l]})}n&&(yield n)}var JP,uE,cs,XP,ls,qg,Fg,ZP,XZ,ZZ,e5,t5,WP,kg,tM=be(()=>{"use strict";JP=x(xP()),uE=x(Nc()),cs=x(ie());Re();XP=x(gu()),ls=x(L()),qg=x(hi()),Fg=x(os()),ZP=x(Y());pa();dE();({HDB_ERROR_MSGS:XZ}=cs.hdb_errors),ZZ="data",e5=1e4,t5=10,kg=class extends JP.default{static{a(this,"ResourceBridge")}constructor(t){super(t),WP=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,uE.default)(t,"conditions");if(r)throw(0,cs.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=xs(t);if(!n)throw new cs.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:$g(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new cs.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}St({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await xs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=xs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(_=>{if(!_){let{value:u,version:d}=r.primaryStore.getEntry(o);return i(o,u,d)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){xs(t).dropTable()}createSchema(t){return wc({database:t.schema,table:null}),qg.signalSchemaChange(new Fg.SchemaEventMsg(process.pid,ls.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Vg(t.schema),qg.signalSchemaChange(new Fg.SchemaEventMsg(process.pid,ls.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,WP.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,XP.default)(t),s,i=Br()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return it(o,async c=>{if(!i.schemaDefined){s=[];for(let u of n)i.attributes.find(E=>E.name==u)||s.push(u);s.length>0&&await i.addAttributes(s.map(u=>({name:u,indexed:!0})))}let l=[],_=[];for(let u of t.records){let d=u[i.primaryKey],E=d!=null&&await i.get(d,o);if(t.requires_existing&&!E||t.requires_no_existing&&E){_.push(u[i.primaryKey]);continue}E&&(E=_E(E));for(let f in u)if(Object.prototype.hasOwnProperty.call(u,f)){let h=u[f];if(typeof h=="function")try{let m=h([[E]]);Array.isArray(m)&&(h=m[0].func_val,u[f]=h)}catch(m){throw m.message+="Trying to set key "+f+" on object"+JSON.stringify(u),m}}if(E)for(let f in E)Object.prototype.hasOwnProperty.call(u,f)||(u[f]=E[f]);await(d==null?i.create(u,o):i.put(u,o)),l.push(u[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=Br()[t.schema][t.table],n={user:t.hdb_user};return it(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return jP(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Br()[t.schema][t.table];if(!r.createdTimeProperty)throw new cs.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:ls.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],_=a(async()=>{let u=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...u.deleted_hashes),o.push(...u.skipped_hashes),await(0,ZP.async_set_timeout)(t5),l=[],s=!0},"chunkDelete");for await(let u of n)l.push(u[r.primaryKey]),c++,c%e5===0&&await _();return l.length>0&&await _(),s?jP(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,uE.default)(t,"hashes");if(r)throw r;return QP(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of QP(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&ls.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,uE.default)(t,"value");if(n)throw n;let s=xs(t);if(!s)throw new cs.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===ls.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:$g(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache})}async getDataByValue(t,r){let n=new Map,s=xs(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){xs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return xs(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=xs(t),n={};switch(t.search_type){case ls.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case ls.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of zP(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return zP(r,t.search_values?.[0],t.search_values?.[1])}}};a($g,"getSelect");a(QP,"getRecords");a(xs,"getTable");a(jP,"createDeleteResponse");a(zP,"groupRecordsInHistory")});var Hn=R((Fge,rM)=>{"use strict";var{ResourceBridge:r5}=(tM(),ae(eM)),n5=X();n5.initSync();var fE;function s5(){return fE||(fE=new r5,fE)}a(s5,"getBridge");rM.exports=s5()});var oM=R(($ge,iM)=>{"use strict";var nM=require("lodash"),Fu=require("mathjs"),i5=require("jsonata"),sM=Y();iM.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?nM.uniqWith(e,nM.isEqual):e,searchJSON:o5,mad:ku.bind(null,Fu.mad),mean:ku.bind(null,Fu.mean),mode:ku.bind(null,Fu.mode),prod:ku.bind(null,Fu.prod),median:ku.bind(null,Fu.median)};function ku(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(ku,"aggregateFunction");function o5(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(sM.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),sM.isEmpty(this.__ala__.res[r])){let n=i5(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(o5,"searchJSON")});var cM=R((Yge,aM)=>{"use strict";var It=require("moment"),Yg="YYYY-MM-DDTHH:mm:ss.SSSZZ";It.suppressDeprecationWarnings=!0;aM.exports={current_date:()=>It().utc().format("YYYY-MM-DD"),current_time:()=>It().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return It(e).utc().format("YYYY");case"month":return It(e).utc().format("MM");case"day":return It(e).utc().format("DD");case"hour":return It(e).utc().format("HH");case"minute":return It(e).utc().format("mm");case"second":return It(e).utc().format("ss");case"millisecond":return It(e).utc().format("SSS");default:break}},date:e=>It(e).utc().format(Yg),date_format:(e,t)=>It(e).utc().format(t),date_add:(e,t,r)=>It(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>It(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=It(e).utc(),s=It(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>It().utc().valueOf(),get_server_time:()=>It().format(Yg),offset_utc:(e,t)=>It(e).utc().utcOffset(t).format(Yg)}});var dM=R((Kge,_M)=>{"use strict";var a5=require("@turf/area"),c5=require("@turf/length"),l5=require("@turf/circle"),u5=require("@turf/difference"),_5=require("@turf/distance"),d5=require("@turf/boolean-contains"),f5=require("@turf/boolean-equal"),E5=require("@turf/boolean-disjoint"),h5=require("@turf/helpers"),lM=L(),Ae=Y(),Si=k();_M.exports={geoArea:p5,geoLength:m5,geoCircle:S5,geoDifference:T5,geoDistance:uM,geoNear:g5,geoContains:R5,geoEqual:A5,geoCrosses:O5,geoConvert:b5};function p5(e){if(Ae.isEmpty(e))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return a5.default(e)}catch(t){return Si.trace(t,e),NaN}}a(p5,"geoArea");function m5(e,t){if(Ae.isEmpty(e))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return c5.default(e,{units:t||"kilometers"})}catch(r){return Si.trace(r,e),NaN}}a(m5,"geoLength");function S5(e,t,r){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return l5.default(e,t,{units:r||"kilometers"})}catch(n){return Si.trace(n,e,t),NaN}}a(S5,"geoCircle");function T5(e,t){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return u5(e,t)}catch(r){return Si.trace(r,e,t),NaN}}a(T5,"geoDifference");function uM(e,t,r){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return _5.default(e,t,{units:r||"kilometers"})}catch(n){return Si.trace(n,e,t),NaN}}a(uM,"geoDistance");function g5(e,t,r,n){if(Ae.isEmpty(e)||Ae.isEmpty(t))return!1;if(Ae.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return uM(e,t,n)<=r}catch(s){return Si.trace(s,e,t),!1}}a(g5,"geoNear");function R5(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return d5.default(e,t)}catch(r){return Si.trace(r,e,t),!1}}a(R5,"geoContains");function A5(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return f5.default(e,t)}catch(r){return Si.trace(r,e,t),!1}}a(A5,"geoEqual");function O5(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return!E5.default(e,t)}catch(r){return Si.trace(r,e,t),!1}}a(O5,"geoCrosses");function b5(e,t,r){if(Ae.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ae.isEmpty(t))throw new Error("geo_type is required");if(Ae.isEmpty(lM.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(lM.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ae.autoCastJSON(e)),h5[t](e,r)}a(b5,"geoConvert")});var EE=R((Qge,fM)=>{var ma=oM(),fn=cM(),Gs=dM();fM.exports=e=>{e.aggr.mad=e.aggr.MAD=ma.mad,e.aggr.mean=e.aggr.MEAN=ma.mean,e.aggr.mode=e.aggr.MODE=ma.mode,e.aggr.prod=e.aggr.PROD=ma.prod,e.aggr.median=e.aggr.MEDIAN=ma.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ma.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ma.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=fn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=fn.current_time,e.fn.extract=e.fn.EXTRACT=fn.extract,e.fn.date=e.fn.DATE=fn.date,e.fn.date_format=e.fn.DATE_FORMAT=fn.date_format,e.fn.date_add=e.fn.DATE_ADD=fn.date_add,e.fn.date_sub=e.fn.DATE_SUB=fn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=fn.date_diff,e.fn.now=e.fn.NOW=fn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=fn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=fn.get_server_time,e.fn.getdate=e.fn.GETDATE=fn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=fn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Gs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Gs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Gs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Gs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Gs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Gs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Gs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Gs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Gs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Gs.geoNear}});var mM=R((jge,pM)=>{"use strict";var $u=require("lodash"),Hr=require("alasql");Hr.options.cache=!1;var N5=EE(),EM=require("clone"),hE=require("recursive-iterator"),he=k(),Me=Y(),Cc=Hn(),y5=L(),{hdb_errors:I5}=ie(),{getDatabases:hM}=(Re(),ae(Ve)),w5="IS NULL",us="There was a problem performing this search. Please check the logs and try again.";N5(Hr);var Kg=class{static{a(this,"SQLSearch")}constructor(t,r){if(Me.isEmpty(t))throw he.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),Me.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Me.isEmptyOrZeroLength(n))return he.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw he.error("Error thrown from checkEmptySQL in SQLSearch class method search."),he.error(n),new Error(us)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw he.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),he.error(n),new Error(us)}if(Object.keys(this.data).length===0)return he.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw he.error("Error thrown from processJoins in SQLSearch class method search."),he.error(n),new Error(us)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw he.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),he.error(n),new Error(us)}try{return t=await this._finalSQL(),t}catch(n){throw he.error("Error thrown from finalSQL in SQLSearch class method search."),he.error(n),new Error(us)}}_getColumns(){let t=new hE(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(EM(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=hM()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Me.isEmpty(this.statement.where)){he.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new hE(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Me.isEmpty(r)&&r.right)if(Me.isNotEmptyAndHasValue(r.right.value)){let n=Me.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Hr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Me.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Hr.yy.LogicValue({value:i}):n instanceof Hr.yy.StringValue&&Me.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Hr.yy.NumValue({value:i}))});if(t){he.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new hE(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Me.isEmpty(y5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Me.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Me.isEmptyOrZeroLength(r.left.columnid)||Me.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(Me.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!Me.isEmpty(r.right.value)||!Me.isEmpty(r.left.value)?n.add(Me.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<l.length;_++)if(l[_].value)n.add(l[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(Me.isEmptyOrZeroLength(this.all_table_attributes)&&Me.isEmptyOrZeroLength(this.statement.from)&&Me.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&$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(Me.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Me.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Me.isEmptyOrZeroLength(this.all_table_attributes)&&!Me.isEmptyOrZeroLength(this.columns.columns))return t;if(Me.isEmptyOrZeroLength(this.all_table_attributes)&&Me.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Hr.promise(r)}catch(r){throw he.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),he.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(EM(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Me.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(w5)>-1&&this.tables.forEach(s=>{let i={columnid:hM()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=$u.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!Me.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Me.isEmptyOrZeroLength(this.exact_search_values[_].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[_].values);let u=await Cc.getDataByHash(c);for(let d of c.hash_values)u.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(u){throw he.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),he.error(u),new Error(us)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async u=>{let d=Object.assign({},c);d.search_value=u;let E=await Cc.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]):(this.data[i].__merged_data[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,f))}))}catch(u){throw he.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),he.error(u),new Error(us)}else if(!Me.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Me.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let u=this.comparator_search_values[_].comparators;for(let d=0,E=u.length;d<E;d++){let f=u[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await Cc.getDataByValue(c,f.operation);if(l)for(let[m]of h)this.data[i].__merged_data[m]||(this.data[i].__merged_data[m]=[...n[i]],this._setMergedHashAttribute(i,m));else for(let[m,S]of h)this.data[i].__merged_data[m]?this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]):(this.data[i].__merged_data[m]=[...n[i]],this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,m))}}catch(u){throw he.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),he.error(u),new Error(us)}else try{c.search_attribute=s.attribute,c.search_value="*";let u=await Cc.getDataByValue(c);if(l)for(let[d]of u)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,E]of u)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]),this._setMergedHashAttribute(i,d))}catch(u){throw he.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),he.error(u),new Error(us)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof Hr.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 Hr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Hr.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 Hr.yy.FuncValue:new Hr.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,m=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${m}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${m}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let u="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(u=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${_} ${u} ${d}`,h=this._convertColumnsToIndexes(f,s);E=await Hr.promise(h,t),t=null}catch(f){throw he.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),he.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let m=E[f];o.forEach(S=>{m[S.key]!==null&&m[S.key]!==void 0&&S.keys.add(m[S.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),m=$u.difference(h,[...f.keys].map(S=>S.toString()));for(let S=0,g=m.length;S<g;S++){let T=m[S];delete this.data[`${f.schema}_${f.table}`].__merged_data[T]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new hE(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=$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 he.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),he.error(i),new Error(us)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let u in i)o.push(i[u][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await Cc.getDataByHash(c),_=s.columns.length;for(let u=0,d=o.length;u<d;u++){let E=o[u],f=l.get(E);for(let h=0;h<_;h++){let m=s.columns[h],S=f[m]===void 0?null:f[m];this.data[n].__merged_data[E].push(S)}}}}catch(r){throw he.error("Error thrown from getDataByHash function in SQLSearch class method getData."),he.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();he.trace(`Final SQL: ${s}`),n=await Hr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),he.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw he.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),he.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return he.error(I5.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),he.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],_=new RegExp(`${l}.\`${o}\``,"g"),u=`${l}.[${c}]`;n=n.replace(_,u)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(l,_)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await Cc.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw he.error("There was an error when processing this SQL operation. Check your logs"),he.error(o),new Error(us)}}return Object.values(Object.values(this.data)[0].__merged_data)}};pM.exports=Kg});var ur=R((Jge,SM)=>{"use strict";var C5=ew();SM.exports={searchByConditions:L5,searchByHash:P5,searchByValue:M5,search:U5};var Wg=Hn(),{transformReq:Qg}=Y(),D5=mM();async function L5(e){return Qg(e),Wg.searchByConditions(e)}a(L5,"searchByConditions");async function P5(e){Qg(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Wg.searchByHash(e))r&&t.push(r);return t}a(P5,"searchByHash");async function M5(e){Qg(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Wg.searchByValue(e))t.push(r);return t}a(M5,"searchByValue");function U5(e,t){try{let r=new C5(e);r.validate(),new D5(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(U5,"search")});var pE=R((Zge,TM)=>{"use strict";var v5=Hn();TM.exports={writeTransaction:B5};function B5(e,t,r){return v5.writeTransaction(e,t,r)}a(B5,"writeTransaction")});var OM=R((rRe,AM)=>{"use strict";var H5=ur(),x5=Bn(),gM=k(),G5=Pr(),tRe=pE(),q5=require("clone"),zg=require("alasql"),F5=EE(),RM=require("util"),k5=RM.promisify(x5.getTableSchema),$5=RM.promisify(H5.search),V5=L(),jg=Y();F5(zg);AM.exports={update:K5};var Y5="There was a problem performing this update. Please check the logs and try again.";async function K5({statement:e,hdb_user:t}){let r=await k5(e.table.databaseid,e.table.tableid),n=W5(e.columns);jg.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=q5(s),c=jg.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=zg.parse(l).statements[0],u=await $5(_),d=Q5(n,u);return j5(o,d,t)}a(K5,"update");function W5(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=zg.compile(`SELECT ${r.expression.toString()} AS [${V5.FUNC_VAL}] FROM ?`)}),t}catch(t){throw gM.error(t),new Error(Y5)}}a(W5,"createUpdateRecord");function Q5(e,t){return jg.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Q5,"buildUpdateRecords");async function j5(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await G5.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){gM.error(`Error delete new_attributes from update response: ${i}`)}return s}a(j5,"updateRecords")});var NM=R((oRe,bM)=>{var z5=require("alasql"),J5=ur(),X5=k(),Z5=Hn(),Xg=require("util"),Jg=Y(),e8=L(),t8=Bn(),sRe=pE(),iRe=Pr(),r8="record",n8="successfully deleted",s8=Xg.callbackify(c8),i8=Xg.promisify(J5.search),o8=Xg.promisify(t8.getTableSchema);bM.exports={convertDelete:s8};function a8(e){return`${e.deleted_hashes.length} ${r8}${e.deleted_hashes.length===1?"":"s"} ${n8}`}a(a8,"generateReturnMessage");async function c8({statement:e,hdb_user:t}){let r=await o8(e.table.databaseid,e.table.tableid);Jg.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Jg.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=z5.parse(o).statements[0],l={operation:e8.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await i8(c);let _=await Z5.deleteRecords(l);return Jg.isEmptyOrZeroLength(_.message)&&(_.message=a8(_)),delete _.txn_time,_}catch(_){throw X5.error(_),_.hdb_code?_.message:_}}a(c8,"convertDelete")});var DM=R((cRe,CM)=>{"use strict";var l8=Ei(),{hdb_errors:yM}=ie(),{getDatabases:IM}=(Re(),ae(Ve));CM.exports={checkSchemaExists:wM,checkSchemaTableExists:u8,schema_describe:l8};async function wM(e){if(!IM()[e])return yM.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(wM,"checkSchemaExists");async function u8(e,t){let r=await wM(e);if(r)return r;if(!IM()[e][t])return yM.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(u8,"checkSchemaTableExists")});var Sa=R((uRe,_8)=>{_8.exports={name:"harperdb",version:"4.3.40",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.2.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.11.2",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.3",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^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 Qu={};$e(Qu,{addAnalyticsListener:()=>Wu,recordAction:()=>hr,recordActionBinary:()=>En,setAnalyticsEnabled:()=>d8});function d8(e){GM=e}function hr(e,t,r,n,s){if(!GM)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=TE.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let _=c;o.values=c=new Float32Array(l*2),c.set(_),c.index=l+1}c[l]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},TE.set(i,o)}mE||f8()}function En(e,t,r,n,s){hr(!!e,t,r,n,s)}function Wu(e){kM.push(e)}function f8(){mE=performance.now(),setTimeout(async()=>{let e=performance.now()-mE;mE=0;let t=[],r={time:Date.now(),period:e,threadId:Ta.threadId,metrics:t};for(let[s,i]of TE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,_=[],u;for(let d of $M){let E=Math.floor(c*d),f=o[E-1];if(E>l){let h=E-l;if(f===u){let m=_[_.length-1];typeof m=="number"?_[_.length-1]={value:m,count:1+h}:m.count+=h}else _.push(h>1?{value:f,count:h}:f),u=f;l=E}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await VM()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Ta.threadId,byThread:!0,...n});for(let s of kM)s(t);TE=new Map,Ta.parentPort?Ta.parentPort.postMessage({type:FM,report:r}):WM({report:r})},qM).unref()}async function E8(e,t=6e4){let r=tR(),n=YM(),s=new Promise(m=>{let S=performance.now();setImmediate(()=>{let g=performance.now();g-S>5e3&&(0,Vu.warn)("Unusually high event queue latency on the main thread of "+Math.round(g-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let g=performance.now();g-S>5e3&&(0,Vu.warn)("Unusually high task queue latency on the main thread of "+Math.round(g-S)+"ms"),m(g-S)})}),i;for(let m of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(m.value?.time){i=m.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,_=[],u;for(let{key:m,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(m>o+t)break}else o=m;u=m;let{metrics:g,threadId:T}=S;for(let N of g||[]){let{path:b,method:U,type:v,metric:q,count:M,total:W,distribution:z,threads:Z,...ce}=N;M||(M=1);let _e=q+(b?"-"+b:"");U!==void 0&&(_e+="-"+U),v!==void 0&&(_e+="-"+v);let de=c.get(_e);if(de){if(de.threads){let we=de.threads[T];if(we)de=we;else{de.threads[T]=Object.assign({},ce);continue}}de.count||(de.count=1);let xe=de.count;for(let we in ce){let Ge=ce[we];typeof Ge=="number"&&(de[we]=(de[we]*xe+Ge*M)/(xe+M))}de.count+=M,W>=0&&(de.total+=W,de.ratio=de.total/de.count)}else de=Object.assign({period:t},N),delete de.distribution,c.set(_e,de),de.byThread&&(de.threads=[],de.threads[T]=Object.assign({},ce),_.push(de));if(z){z=z.map(we=>typeof we=="number"?{value:we,count:1}:we);let xe=l.get(_e);xe?xe.push(...z):l.set(_e,z)}}await VM()}for(let m of _){let{path:S,method:g,type:T,metric:N,count:b,total:U,distribution:v,threads:q,...M}=m;q=q.filter(W=>W);for(let W in M){if(typeof m[W]!="number")continue;let z=0;for(let Z of q){let ce=Z[W];typeof ce=="number"&&(z+=ce)}m[W]=z}m.count=q.length,delete m.threads,delete m.byThread}for(let[m,S]of l){let g=c.get(m);S.sort((we,Ge)=>we.value>Ge.value?1:-1);let T=g.count-1,N=[],b=0,U=0,v;for(let we of $M){let Ge=T*we;for(;b<Ge;)v=S[U++],b+=v.count,U===1&&b--;let Wd=S[U>1?U-2:0];v||(v=S[0]),N.push(v.value-(v.value-Wd.value)*(b-Ge)/v.count)}let[q,M,W,z,Z,ce,_e,de,xe]=N;Object.assign(g,{p1:q,p10:M,p25:W,median:z,p75:Z,p90:ce,p95:_e,p99:de,p999:xe})}let d;for(let[m,S]of c)S.id=(0,SE.getNextMonotonicTime)(),S.time=u,n.primaryStore.put(S.id,S,{append:!0}).then(g=>{g||n.primaryStore.put(S.id,S)}),d=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(d||h*10>f){let m=(0,SE.getNextMonotonicTime)(),S={id:m,metric:"main-thread-utilization",idle:f-LM,active:h-PM,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(m,S,{append:!0}).then(g=>{g||n.primaryStore.put(m,S)})}LM=f,PM=h}async function MM(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function tR(){return UM||(UM=St({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function YM(){return vM||(vM=St({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function m8(){KM=!0;let e=(0,Ku.get)(eR.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await E8(qM,e),await MM(tR(),h8),await MM(YM(),p8)},Math.min(e/2,2147483647)).unref()}function WM(e,t){let r=e.report;r.threadId=t?.threadId||Ta.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(BM+=n.mean*n.count);r.totalBytesProcessed=BM,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(HM.get(t))}),HM.set(t,t.performance.eventLoopUtilization())),r.id=(0,SE.getNextMonotonicTime)(),tR().primaryStore.put(r.id,r),KM||m8(),S8&&(QM=g8(r))}async function g8(e){if(await QM,!fo){let r=(0,Yu.dirname)((0,Vu.getLogFilePath)());try{fo=await(0,Zg.open)((0,Yu.join)(r,"analytics.log"),"r+")}catch{fo=await(0,Zg.open)((0,Yu.join)(r,"analytics.log"),"w+")}}let t=(await fo.stat()).size;if(t>T8){let r=Buffer.alloc(t);await fo.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await fo.write(r,{position:0}),await fo.truncate(r.length),t=r.length}await fo.write(JSON.stringify(e)+`
|
|
10
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw Bt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}TJ(n,r),BT(n);let s=n.toJSON();if(_J.config=s,Ht=hc(s),Ht.logging_rotation_rotate)for(let i in $C)Ht[i]&&Bt.error(`Config ${$C[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Bt.trace(fJ)}}a(vT,"initConfig");function TJ(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ss.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ss.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ss.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(Bt.trace("Updating config file with missing config params"),Mr.writeFileSync(t,String(e)))}a(TJ,"checkForUpdatedConfig");function BT(e,t=!1){let r=e.toJSON();r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads);let n=iJ(r,t);if(n.error)throw Vf.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket)}a(BT,"validateConfig");function gJ(e,t){Ht===void 0&&(Ht={});let r=is[e.toLowerCase()];if(r===void 0){Bt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ht[r.toLowerCase()]=t}a(gJ,"updateConfigObject");function QC(e,t,r=void 0,n=!1,s=!1,i=!1){Ht===void 0&&vT();let o=WC(is.hdb_root),c=ss.join(o,ln.HDB_CONFIG_FILE),l=co(c),_;if(r===void 0&&e.toLowerCase()===cn.DATABASES)_=t;else if(r===void 0){let E;if(i)E=e;else if(E=is[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=UT(E,t);l.setIn([...f],h)}else for(let E in r){let f=is[E.toLowerCase()];if(f===cn.HTTP_SECUREPORT&&r[E]===Ht[cn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),f===cn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===Ht[cn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),f===cn.DATABASES){_=r[E];continue}if(f?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),m=ln.LEGACY_CONFIG_PARAMS[E.toUpperCase()];m&&m.startsWith("customFunctions")&&l.hasIn(m.split("_"))&&(f=m,h=m.split("_"));let S=UT(f,r[E]);f==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],S)}catch(g){Bt.error(g)}}}_&&KC(l,_),BT(l);let u=l.getIn(["rootPath"]),d=ss.join(u,ln.HDB_CONFIG_FILE);n===!0&&RJ(c,u),Mr.writeFileSync(d,String(l)),s&&(Ht=hc(l.toJSON())),Bt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(QC,"updateConfigValue");function RJ(e,t){try{let r=ss.join(t,"backup",`${ln.HDB_CONFIG_FILE}.bak`);Mr.copySync(e,r),Bt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Bt.error(EJ),Bt.error(r)}}a(RJ,"backupConfigFile");var AJ=["databases"];function hc(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),Kf=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!AJ.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!cn[l.toUpperCase()]&&is[l]&&(s[is[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(hc,"flattenConfig");function UT(e,t){if(e===cn.CLUSTERING_NODENAME||e===cn.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(aJ(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Wt.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 Wt.autoCast(t)}a(UT,"castConfigValue");function OJ(){let e=Wt.getPropsFilePath(),t=la(e);return co(t).toJSON()}a(OJ,"getConfiguration");async function bJ(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return QC(void 0,void 0,s,!0),pJ}catch(i){throw typeof i=="string"||i instanceof String?lJ(i,i,uJ.BAD_REQUEST,void 0,void 0,!0):i}}a(bJ,"setConfiguration");function HT(){let e=Wt.getPropsFilePath();try{Mr.accessSync(e,Mr.constants.F_OK|Mr.constants.R_OK)}catch(n){if(!Wt.noBootFile())throw Bt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=la(e);return co(t).toJSON()}a(HT,"readConfigFile");function co(e){return oJ.parseDocument(Mr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(co,"parseYamlDoc");function NJ(){let e=HT(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Wt.isEmptyOrZeroLength(t)?[]:t;let r=kC(t);if(r)throw Vf.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Wt.isEmptyOrZeroLength(n)?[]:n;let s=kC(n);if(s)throw Vf.CONFIG_VALIDATION(s.message);if(!Wt.isEmptyOrZeroLength(n)&&!Wt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Wt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Vf.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(NJ,"getClusteringRoutes");function jC(e){let t=VC(e);Ht={};for(let r in is){let n=t.get(r.toUpperCase());if(Wt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=is[r].toLowerCase();s===cn.LOGGING_ROOT?Ht[s]=ss.dirname(n):Ht[s]=n}return Ht}a(jC,"initOldConfig");function yJ(e){let t=HT();return cJ.get(t,e.replaceAll("_","."))}a(yJ,"getConfigFromFile");async function IJ(e,t){let r=co(la());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Mr.writeFile(la(),String(r))}a(IJ,"addConfig");function wJ(e){let t=la(Wt.getPropsFilePath()),r=co(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=ss.join(n,ln.HDB_CONFIG_FILE);Mr.writeFileSync(s,String(r))}a(wJ,"deleteConfigFromFile");function CJ(){return Kf||(vT(),Kf)}a(CJ,"getConfigObj")});var XC=R((sSe,JC)=>{"use strict";var Wf=L(),Qf=class{static{a(this,"BaseLicense")}constructor(t=0,r=Wf.RAM_ALLOCATION_ENUM.DEFAULT,n=Wf.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},xT=class extends Qf{static{a(this,"ExtendedLicense")}constructor(t=0,r=Wf.RAM_ALLOCATION_ENUM.DEFAULT,n=Wf.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};JC.exports={BaseLicense:Qf,ExtendedLicense:xT}});var ua=R((oSe,sD)=>{"use strict";var mc=require("fs-extra"),eD=qf(),tD=require("crypto"),DJ=require("moment"),LJ=require("uuid").v4,fr=k(),qT=require("path"),PJ=Y(),lo=L(),{totalmem:ZC}=require("os"),MJ=XC().ExtendedLicense,pc="invalid license key format",UJ="061183",vJ="mofi25",BJ="aes-256-cbc",HJ=16,xJ=32,rD=X();rD.initSync();var GT;sD.exports={validateLicense:nD,generateFingerPrint:qJ,licenseSearch:$T,getLicense:$J,checkMemoryLimit:VJ};function FT(){return qT.join(rD.getHdbBasePath(),lo.LICENSE_KEY_DIR_NAME,lo.LICENSE_FILE_NAME)}a(FT,"getLicenseDirPath");function GJ(){let e=FT();return qT.join(e,lo.LICENSE_FILE_NAME)}a(GJ,"getLicenseFilePath");function kT(){let e=FT();return qT.join(e,lo.REG_KEY_FILE_NAME)}a(kT,"getFingerPrintFilePath");async function qJ(){let e=kT();try{return await mc.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await FJ();throw fr.error(`Error writing fingerprint file to ${e}`),fr.error(t),new Error("There was an error generating the fingerprint")}}a(qJ,"generateFingerPrint");async function FJ(){let e=LJ(),t=eD.hash(e),r=kT();try{await mc.mkdirp(FT()),await mc.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw fr.error(`Error writing fingerprint file to ${r}`),fr.error(n),new Error("There was an error generating the fingerprint")}return t}a(FJ,"writeFingerprint");function nD(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:lo.RAM_ALLOCATION_ENUM.DEFAULT,version:lo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return fr.error("empty license key passed to validate."),r;let n=kT(),s=!1;try{s=mc.statSync(n)}catch(i){fr.error(i)}if(s){let i;try{i=mc.readFileSync(n,"utf8")}catch{fr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(vJ),c=o[1];c=Buffer.concat([Buffer.from(c)],HJ);let l=Buffer.concat([Buffer.from(i)],xJ),_=tD.createDecipheriv(BJ,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let u=null;try{u=_.update(o[0],"hex","utf8"),u.trim(),u+=_.final("utf8")}catch{let f=kJ(o[0],i);if(f)u=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(pc),fr.error(pc),new Error(pc)}let d;if(isNaN(u))try{d=JSON.parse(u),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(pc),fr.error(pc),new Error(pc)}else r.exp_date=u;r.exp_date<DJ().valueOf()&&(r.valid_date=!1),eD.validate(o[1],`${UJ}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||fr.error("Invalid licence"),r}a(nD,"validateLicense");function kJ(e,t){try{let r=tD.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{fr.warn("Check old license failed")}}a(kJ,"checkOldLicense");function $T(){let e=new MJ,t=[];try{t=mc.readFileSync(GJ(),"utf-8").split(lo.NEW_LINE)}catch(r){r.code==="ENOENT"?fr.info("no license file found"):fr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(PJ.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=nD(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){fr.error("There was an error parsing the license string."),fr.error(s),e.ram_allocation=lo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return GT=e,e}a($T,"licenseSearch");async function $J(){return GT||await $T(),GT}a($J,"getLicense");function VJ(){let e=$T().ram_allocation,t=process.constrainedMemory?.()||ZC();if(t=Math.round(Math.min(t,ZC())/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(VJ,"checkMemoryLimit")});var Ur=R((_Se,gD)=>{"use strict";var cD="username is required",lD="nothing to update, must supply active, role or password to update",uD="password cannot be an empty string",_D="If role is specified, it cannot be empty.",dD="active must be true or false";gD.exports={addUser:ZJ,alterUser:e2,dropUser:r2,getSuperUser:o2,userInfo:n2,listUsers:zf,listUsersExternal:s2,setUsersToGlobal:Tc,findAndValidateUser:SD,getClusterUser:a2,USERNAME_REQUIRED:cD,ALTERUSER_NOTHING_TO_UPDATE:lD,EMPTY_PASSWORD:uD,EMPTY_ROLE:_D,ACTIVE_BOOLEAN:dD};var fD=Pr(),YJ=oa(),KT=qf(),ED=PC(),hD=ur(),WT=hi(),un=Y(),pD=require("validate.js"),Ne=k(),{promisify:KJ}=require("util"),QT=fi(),iD=L(),oD=Ze(),WJ=Et(),cSe=X(),lSe=ua(),QJ=_i(),{table:uSe}=(Re(),ae(Ve)),{handleHDBError:vs,hdb_errors:jJ}=ie(),{HTTP_STATUS_CODES:Bs,AUTHENTICATION_ERROR_MSGS:VT,HDB_ERROR_MSGS:Sc}=jJ,{UserEventMsg:jT}=os(),YT=require("lodash"),{server:zT}=(Cr(),ae(zo)),zJ=k();zT.getUser=(e,t)=>SD(e,t,t!=null);var mD={username:!0,active:!0,role:!0,password:!0},aD=new Map,jf=hD.searchByValue,JJ=hD.searchByHash,XJ=KJ(YJ.delete);async function ZJ(e){let t=pD.cleanAttributes(e,mD),r=ED.addUserValidation(t);if(r)throw vs(new Error,r.message,Bs.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await jf(n),s=s&&Array.from(s)}catch(l){throw Ne.error("There was an error searching for a role in add user"),Ne.error(l),l}if(!s||s.length<1)throw vs(new Error,Sc.ROLE_NAME_NOT_FOUND(t.role),Bs.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw vs(new Error,Sc.DUP_ROLES_FOUND(t.role),Bs.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=QT.encrypt(t.password)),t.password=KT.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await fD.insert(i)}catch(l){throw Ne.error("There was an error searching for a user."),Ne.error(l),l}Ne.debug(o);try{await Tc()}catch(l){throw Ne.error("Got an error setting users to global"),Ne.error(l),l}if(o.skipped_hashes.length===1)throw vs(new Error,Sc.USER_ALREADY_EXISTS(t.username),Bs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],WT.signalUserChange(new jT(process.pid)),`${c.username} successfully added`}a(ZJ,"addUser");async function e2(e){let t=pD.cleanAttributes(e,mD);if(un.isEmptyOrZeroLength(t.username))throw new Error(cD);if(un.isEmptyOrZeroLength(t.password)&&un.isEmptyOrZeroLength(t.role)&&un.isEmptyOrZeroLength(t.active))throw new Error(lD);if(!un.isEmpty(t.password)&&un.isEmptyOrZeroLength(t.password.trim()))throw new Error(uD);if(!un.isEmpty(t.active)&&!un.isBoolean(t.active))throw new Error(dD);let r=t2(t.username);if(!un.isEmpty(t.password)&&!un.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=QT.encrypt(t.password)),t.password=KT.hash(t.password)),t.role==="")throw new Error(_D);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await jf(i)||[])}catch(c){throw Ne.error("Got an error searching for a role."),Ne.error(c),c}if(!o||o.length===0){let c=Sc.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ne.error(c),vs(new Error,c,Bs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Sc.ALTER_USER_DUP_ROLES(t.role);throw Ne.error(c),vs(new Error,c,Bs.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 fD.update(n)}catch(i){throw Ne.error("Error during update."),Ne.error(i),i}try{await Tc()}catch(i){throw Ne.error("Got an error setting users to global"),Ne.error(i),i}return WT.signalUserChange(new jT(process.pid)),s}a(e2,"alterUser");function t2(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(t2,"isClusterUser");async function r2(e){try{let t=ED.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(un.isEmpty(global.hdb_users.get(e.username)))throw vs(new Error,Sc.USER_NOT_EXIST(e.username),Bs.NOT_FOUND,void 0,void 0,!0);let n;try{n=await XJ(r)}catch(s){throw Ne.error("Got an error deleting a user."),Ne.error(s),s}Ne.debug(n);try{await Tc()}catch(s){throw Ne.error("Got an error setting users to global."),Ne.error(s),s}return WT.signalUserChange(new jT(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(r2,"dropUser");async function n2(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=YT.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await JJ(r)}catch(s){throw Ne.error("Got an error searching for a role."),Ne.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ne.error(r),r}return t}a(n2,"userInfo");async function s2(){let e;try{e=await zf()}catch(t){throw Ne.error("Got an error listing users."),Ne.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(s2,"listUsersExternal");async function zf(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await jf(e)}catch(o){throw Ne.error("Got an error searching for roles."),Ne.error(o),o}let r={};for(let o of t)r[o.id]=YT.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await jf(n)}catch(o){throw Ne.error("Got an error searching for users."),Ne.error(o),o}let i=new Map;for(let o of s)o=YT.cloneDeep(o),o.role=r[o.role],i2(o.role),i.set(o.username,o);return i}catch(e){throw Ne.error("got an error listing users"),Ne.error(e),un.errorizeMessage(e)}return null}a(zf,"listUsers");function i2(e){try{if(!e){Ne.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(QJ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ne.error("Got an error trying to set system permissions."),Ne.error(t)}}a(i2,"appendSystemTablesToRole");async function Tc(){try{let e=await zf();global.hdb_users=e}catch(e){throw Ne.error(e),e}}a(Tc,"setUsersToGlobal");async function SD(e,t,r=!0){global.hdb_users||await Tc();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw vs(new Error,VT.GENERIC_AUTH_FAIL,Bs.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw vs(new Error,VT.USER_INACTIVE,Bs.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(aD.get(t)===n.password)return s;if(KT.validate(n.password,t))aD.set(t,n.password);else throw vs(new Error,VT.GENERIC_AUTH_FAIL,Bs.UNAUTHORIZED,void 0,void 0,!0)}return s}a(SD,"findAndValidateUser");async function o2(){global.hdb_users||await Tc();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(o2,"getSuperUser");async function a2(){let e=await zf(),t=WJ.getConfigFromFile(iD.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!un.isEmpty(r)&&r?.role?.role===iD.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=QT.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+oD.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+oD.SERVER_SUFFIX.ADMIN,r}a(a2,"getClusterUser");var TD=[];zT.invalidateUser=function(e){for(let t of TD)try{t(e)}catch(r){zJ.error("Error invalidating user",r)}};zT.onInvalidatedUser=function(e){TD.push(e)}});var yu=R((hSe,bD)=>{"use strict";var _a=k(),_n=L(),c2=eC(),fSe=Bn(),ESe=Ei(),l2=Ur(),{validateEvent:RD}=os(),Nu=Hn(),u2=require("process"),{resetDatabases:_2}=(Re(),ae(Ve)),d2={[_n.ITC_EVENT_TYPES.SCHEMA]:f2,[_n.ITC_EVENT_TYPES.USER]:OD};async function f2(e){let t=RD(e);if(t){_a.error(t);return}_a.trace("ITC schemaHandler received schema event:",e),await c2(e.message),await E2(e.message)}a(f2,"schemaHandler");async function E2(e){try{Nu.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Nu.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Nu.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=_2();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){_a.error(t)}}a(E2,"syncSchemaMetadata");var AD=[];async function OD(e){try{try{Nu.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Nu.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){_a.warn(r)}let t=RD(e);if(t){_a.error(t);return}_a.trace(`ITC userHandler ${_n.HDB_ITC_CLIENT_PREFIX}${u2.pid} received user event:`,e),await l2.setUsersToGlobal();for(let r of AD)r()}catch(t){_a.error(t)}}a(OD,"userHandler");OD.addListener=function(e){AD.push(e)};bD.exports=d2});var os=R((RSe,yD)=>{"use strict";var mSe=k(),JT=Y(),h2=L(),{ITC_ERRORS:Iu}=nn(),{parentPort:SSe,threadId:p2,isMainThread:m2,workerData:TSe}=require("worker_threads"),{onMessageFromWorkers:S2,broadcast:gSe,broadcastWithAcknowledgement:T2}=rt();yD.exports={sendItcEvent:g2,validateEvent:ND,SchemaEventMsg:R2,UserEventMsg:A2};var Jf;S2(async(e,t)=>{Jf=Jf||yu(),ND(e),Jf[e.type]&&await Jf[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function g2(e){return!m2&&e.message&&(e.message.originator=p2),T2(e)}a(g2,"sendItcEvent");function ND(e){if(typeof e!="object")return Iu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||JT.isEmpty(e.type))return Iu.MISSING_TYPE;if(!e.hasOwnProperty("message")||JT.isEmpty(e.message))return Iu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||JT.isEmpty(e.message.originator))return Iu.MISSING_ORIGIN;if(h2.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Iu.INVALID_EVENT(e.type)}a(ND,"validateEvent");function R2(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(R2,"SchemaEventMsg");function A2(e){this.originator=e}a(A2,"UserEventMsg")});var hi=R((bSe,DD)=>{"use strict";var ID=L(),OSe=Y(),Xf=k(),wD=Jw(),gc,{sendItcEvent:CD}=os();function O2(e){try{Xf.trace("signalSchemaChange called with message:",e),gc=gc||yu();let t=new wD(ID.ITC_EVENT_TYPES.SCHEMA,e);return gc.schema(t),CD(t)}catch(t){Xf.error(t)}}a(O2,"signalSchemaChange");function b2(e){try{Xf.trace("signalUserChange called with message:",e),gc=gc||yu();let t=new wD(ID.ITC_EVENT_TYPES.USER,e);return gc.user(t),CD(t)}catch(t){Xf.error(t)}}a(b2,"signalUserChange");DD.exports={signalSchemaChange:O2,signalUserChange:b2}});var Zf=R((ySe,PD)=>{"use strict";var LD=Y(),N2=L(),y2=k(),I2=Lf(),w2=Df(),C2=hi(),{SchemaEventMsg:D2}=os(),L2="already exists in";PD.exports=P2;async function P2(e,t,r){if(LD.isEmptyOrZeroLength(r))return r;let n=[];LD.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 M2(e,t.schema,t.name,i)})),s}a(P2,"lmdbCheckForNewAttributes");async function M2(e,t,r,n){let s=new w2(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await U2(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(L2))y2.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(M2,"createNewAttribute");async function U2(e){let t;return t=await I2(e),C2.signalSchemaChange(new D2(process.pid,N2.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(U2,"createAttribute")});var Rc=R((wSe,MD)=>{"use strict";var XT=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}};MD.exports=XT});var vD=R((DSe,UD)=>{"use strict";var v2=Rc(),B2=L().OPERATIONS_ENUM,ZT=class extends v2{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(B2.INSERT,r,n,s,i),this.records=t}};UD.exports=ZT});var HD=R((PSe,BD)=>{"use strict";var H2=Rc(),x2=L().OPERATIONS_ENUM,eg=class extends H2{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(x2.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};BD.exports=eg});var GD=R((USe,xD)=>{"use strict";var G2=Rc(),q2=L().OPERATIONS_ENUM,tg=class extends G2{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(q2.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};xD.exports=tg});var FD=R((BSe,qD)=>{"use strict";var F2=Rc(),k2=L().OPERATIONS_ENUM,rg=class extends F2{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(k2.DELETE,n,s,t,i),this.original_records=r}};qD.exports=rg});var wu=R((GSe,YD)=>{"use strict";var xSe=require("path"),kD=Ye(),$2=vD(),V2=HD(),Y2=GD(),K2=FD(),Ac=_t(),$D=Y(),{CONFIG_PARAMS:W2}=L(),VD=X();VD.initSync();var eE=L().OPERATIONS_ENUM,{getTransactionAuditStorePath:Q2}=Je();YD.exports=j2;async function j2(e,t){if(VD.get(W2.LOGGING_AUDITLOG)===!1)return;let r=Q2(e.schema,e.table),n=await kD.openEnvironment(r,e.table,!0),s=z2(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){kD.initializeDBIs(n,Ac.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ac.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Ac.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Ac.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),$D.isEmpty(s.user_name)||n.dbis[Ac.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Ac.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(j2,"writeTransaction");function z2(e,t){let r=$D.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===eE.INSERT)return new $2(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===eE.UPDATE)return new V2(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===eE.UPSERT)return new Y2(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===eE.DELETE)return new K2(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(z2,"createTransactionObject")});var ng=R((kSe,KD)=>{"use strict";var J2=gu(),FSe=nu(),Cu=L(),X2=su(),Z2=ea().insertRecords,e4=Ye(),t4=k(),r4=Zf(),{getSchemaPath:n4}=Je(),s4=wu();KD.exports=i4;async function i4(e){try{let{schema_table:t,attributes:r}=J2(e);X2(e,r,t.hash_attribute),e.schema!==Cu.SYSTEM_SCHEMA_NAME&&(r.includes(Cu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Cu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Cu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Cu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await r4(e.hdb_auth_header,t,r),s=n4(e.schema,e.table),i=await e4.openEnvironment(s,e.table),o=await Z2(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await s4(e,o)}catch(c){t4.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(i4,"lmdbCreateRecords")});var jD=R((VSe,QD)=>{"use strict";var WD=L(),o4=ng(),a4=nu(),c4=require("fs-extra"),{getSchemaPath:l4}=Je();QD.exports=u4;async function u4(e){let t=[{name:e.schema,createddate:Date.now()}],r=new a4(WD.SYSTEM_SCHEMA_NAME,WD.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await o4(r),await c4.mkdirp(l4(e.schema))}a(u4,"lmdbCreateSchema")});var JD=R((KSe,zD)=>{"use strict";var sg=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}};zD.exports=sg});var tL=R((JSe,eL)=>{"use strict";var XD=Ye(),ig=wr(),og=nn().LMDB_ERRORS_ENUM,_4=_t(),ZD=k(),QSe=Y(),d4=require("lmdb"),f4=JD(),E4=L(),{OVERFLOW_MARKER:jSe,MAX_SEARCH_KEY_LENGTH:zSe}=_4,h4=E4.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function p4(e,t,r,n){if(ig.validateEnv(e),t===void 0)throw new Error(og.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(og.IDS_REQUIRED):new Error(og.IDS_MUST_BE_ITERABLE);try{let s=XD.listDBIs(e);XD.initializeDBIs(e,t,s);let i=new f4,o,c=[],l=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||n&&h[h4]>n){i.skipped.push(o);continue}let m=e.dbis[t].ifVersion(o,d4.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let g=s[S];if(!h.hasOwnProperty(g)||g===t)continue;let T=e.dbis[g],N=h[g];if(N!=null)try{let b=ig.getIndexedValues(N);if(b)for(let U=0,v=b.length;U<v;U++)T.remove(b[U],o)}catch{ZD.warn(`cannot delete from attribute: ${g}, ${N}:${o}`)}}});c.push(m),l.push(o),i.original_records.push(h)}catch(h){ZD.warn(h),i.skipped.push(o)}let _=[],u=await Promise.all(c);for(let E=0,f=u.length;E<f;E++)u[E]===!0?i.deleted.push(l[E]):(i.skipped.push(l[E]),_.push(E));let d=0;for(let E=0;E<_.length;E++){let f=_[E];i.original_records.splice(f-d,1),d++}return i.txn_time=ig.getNextMonotonicTime(),i}catch(s){throw s}}a(p4,"deleteRecords");eL.exports={deleteRecords:p4}});var Du=R((ZSe,nL)=>{"use strict";var Oc=Y(),m4=tL(),S4=Ye(),{getSchemaPath:T4}=Je(),g4=wu(),R4=k();nL.exports=A4;async function A4(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Oc.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Oc.isEmptyOrZeroLength(e.hash_values)&&!Oc.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Oc.isEmpty(l)||e.hash_values.push(l)}}if(Oc.isEmptyOrZeroLength(e.hash_values))return rL([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Oc.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=T4(e.schema,e.table),i=await S4.openEnvironment(s,e.table),o=await m4.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await g4(e,o)}catch(c){R4.error(`unable to write transaction due to ${c.message}`)}return rL(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(A4,"lmdbDeleteRecords");function rL(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(rL,"createDeleteResponse")});var cg=R((rTe,sL)=>{"use strict";var O4=L(),tTe=wr();function ag(e,t){let r=Object.create(null);if(t.length===1&&O4.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(ag,"parseRow");function b4(e,t,r,n){let s=ag(r,e);n.push(s)}a(b4,"searchAll");function N4(e,t,r,n){let s=ag(r,e);n[t]=s}a(N4,"searchAllToMap");function y4(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(y4,"iterateDBI");function da(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(da,"pushResults");function I4(e,t,r,n,s,i){t.toString().endsWith(e)&&da(t,r,n,s,i)}a(I4,"endsWith");function w4(e,t,r,n,s,i){t.toString().includes(e)&&da(t,r,n,s,i)}a(w4,"contains");function C4(e,t,r,n,s,i){t>e&&da(t,r,n,s,i)}a(C4,"greaterThanCompare");function D4(e,t,r,n,s,i){t>=e&&da(t,r,n,s,i)}a(D4,"greaterThanEqualCompare");function L4(e,t,r,n,s,i){t<e&&da(t,r,n,s,i)}a(L4,"lessThanCompare");function P4(e,t,r,n,s,i){t<=e&&da(t,r,n,s,i)}a(P4,"lessThanEqualCompare");sL.exports={parseRow:ag,searchAll:b4,searchAllToMap:N4,iterateDBI:y4,endsWith:I4,contains:w4,greaterThanCompare:C4,greaterThanEqualCompare:D4,lessThanCompare:L4,lessThanEqualCompare:P4,pushResults:da}});var bc=R((aTe,_L)=>{"use strict";var uo=Ye(),sTe=k(),dn=wr(),tE=_t(),Tt=nn().LMDB_ERRORS_ENUM,iTe=Y(),M4=L(),rE=cg(),{parseRow:U4}=rE,oTe=require("lmdb"),{OVERFLOW_MARKER:iL,MAX_SEARCH_KEY_LENGTH:v4}=tE;function oL(e,t,r,n=!1,s=void 0,i=void 0){return fa(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(oL,"iterateFullIndex");function Lu(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,_=!1){return fa(e,t,r,(u,d,E,f)=>{let T={transaction:u,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!_,exclusiveStart:i===!0?_:l};return f===r?(T.values=!1,d.getRange(T).map(N=>({value:N}))):d.getRange(T)})}a(Lu,"iterateRangeBetween");function fa(e,t,r,n){let s=e.database||e,i=uo.openDBI(s,r);i[tE.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&uo.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(fa,"setupTransaction");function aL(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(iL)){if(!s)if(r)s=uo.openDBI(e,r);else{let l=uo.listDBIs(e);for(let _=0,u=l.length;_<u&&(s=uo.openDBI(e,l[_]),!s[tE.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(aL,"getOverflowCheck");function B4(e,t,r,n=!1,s=void 0,i=void 0){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);return fa(e,t,t,(o,c,l)=>(nE(r),r=Pu(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>U4(_.value,r))))}a(B4,"searchAll");function H4(e,t,r,n=!1,s=void 0,i=void 0){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);nE(r),r=Pu(e.database||e,r);let o=new Map;for(let{key:c,value:l}of oL(e,t,t,n,s,i))o.set(c,rE.parseRow(l,r));return o}a(H4,"searchAllToMap");function x4(e,t,r=!1,n=void 0,s=void 0){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=oL(e,void 0,t,r,n,s),c=o.transaction,l=aL(c.database,c,void 0,t);for(let{key:_,value:u}of o){let d=l(_,u);i[d]===void 0&&(i[d]=[]),i[d].push(u)}return i}a(x4,"iterateDBI");function G4(e,t){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);return uo.statDBI(e,t).entryCount}a(G4,"countAll");function q4(e,t,r,n,s=!1,i=void 0,o=void 0){return _o(e,r,n),fa(e,t,r,(c,l,_,u)=>(n=dn.convertKeyValueToWrite(n),u===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(q4,"equals");function F4(e,t,r){return _o(e,t,r),uo.openDBI(e,t).getValuesCount(r)}a(F4,"count");function k4(e,t,r,n,s=!1,i=void 0,o=void 0){return _o(e,r,n),fa(e,null,r,(c,l)=>{n=dn.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let u;if(s===!0){let d;for(let E of l.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){d=E;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),u=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==d){if(f.toString().startsWith(n))return E;if(_===!0)return u.DONE}}),u.filter(E=>E)}else return u=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return u.DONE}),_?u:u.filter(d=>d)})}a(k4,"startsWith");function $4(e,t,r,n,s=!1,i=void 0,o=void 0){return cL(e,t,r,n,s,i,o,!0)}a($4,"endsWith");function cL(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return _o(e,r,n),fa(e,null,r,(l,_,u,d)=>{let E=aL(u,l,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(iL)?_.getValues(f,{transaction:l}).map(m=>{let S=E(f,m);if(c?S.endsWith(n):S.includes(n))return{key:S,value:m}}).filter(m=>m):(c?h.endsWith(n):h.includes(n))?_[tE.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:_.getValues(f,{transaction:l}).map(m=>({key:f,value:m})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(cL,"contains");function V4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Lu(e,t,r,n,l,s,i,o,!0,!1)}a(V4,"greaterThan");function Y4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Lu(e,t,r,n,l,s,i,o,!1,!1)}a(Y4,"greaterThanEqual");function K4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Lu(e,t,r,l,n,s,i,o,!1,!0)}a(K4,"lessThan");function W4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Lu(e,t,r,l,n,s,i,o,!1,!1)}a(W4,"lessThanEqual");function Q4(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(dn.validateEnv(e),r===void 0)throw new Error(Tt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Tt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Tt.END_VALUE_REQUIRED);if(n=dn.convertKeyValueToWrite(n),s=dn.convertKeyValueToWrite(s),n>s)throw new Error(Tt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Lu(e,t,r,n,s,i,o,c)}a(Q4,"between");function j4(e,t,r,n){dn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);if(nE(r),r=Pu(s,r),n===void 0)throw new Error(Tt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=rE.parseRow(c,r)),o}a(j4,"searchByHash");function z4(e,t,r){dn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Tt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(z4,"checkHashExists");function J4(e,t,r,n,s=[]){return uL(e,t,r,n,s),lL(e,t,r,n,s).map(i=>i[1])}a(J4,"batchSearchByHash");function X4(e,t,r,n,s=[]){uL(e,t,r,n,s);let i=new Map;for(let[o,c]of lL(e,t,r,n,s))i.set(o,c);return i}a(X4,"batchSearchByHashToMap");function lL(e,t,r,n,s=[]){return fa(e,t,t,(i,o,c)=>{r=Pu(c,r);let l=r.length<3;return n.map(_=>{let u=c.dbis[t].get(_,{transaction:i,lazy:l});if(u)return[_,rE.parseRow(u,r)];s.push(_)}).filter(_=>_)})}a(lL,"batchHashSearch");function uL(e,t,r,n,s){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);if(nE(r),n==null)throw new Error(Tt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Tt.IDS_MUST_BE_ITERABLE)}a(uL,"initializeBatchSearchByHash");function nE(e){if(!Array.isArray(e))throw e===void 0?new Error(Tt.FETCH_ATTRIBUTES_REQUIRED):new Error(Tt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(nE,"validateFetchAttributes");function _o(e,t,r){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Tt.SEARCH_VALUE_REQUIRED);if(r?.length>v4)throw new Error(Tt.SEARCH_VALUE_TOO_LARGE)}a(_o,"validateComparisonFunctions");function Pu(e,t){return t.length===1&&M4.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=uo.listDBIs(e)),t}a(Pu,"setGetWholeRowAttributes");_L.exports={searchAll:B4,searchAllToMap:H4,count:F4,countAll:G4,equals:q4,startsWith:k4,endsWith:$4,contains:cL,searchByHash:j4,setGetWholeRowAttributes:Pu,batchSearchByHash:J4,batchSearchByHashToMap:X4,checkHashExists:z4,iterateDBI:x4,greaterThan:V4,greaterThanEqual:Y4,lessThan:K4,lessThanEqual:W4,between:Q4}});var Nc=R((lTe,pL)=>{var dL=require("lodash"),fL=nt(),me=require("joi"),Z4=Y(),{hdb_schema_table:Mu,checkValidTable:EL,hdb_table:hL,hdb_database:sE}=Ps(),{handleHDBError:e3,hdb_errors:t3}=ie(),{getDatabases:r3}=(Re(),ae(Ve)),{HTTP_STATUS_CODES:n3}=t3,s3=me.object({database:sE,schema:sE,table:hL,search_attribute:Mu,search_value:me.any().required(),get_attributes:me.array().min(1).items(me.alternatives(Mu,me.object())).optional(),desc:me.bool(),limit:me.number().integer().min(1),offset:me.number().integer().min(0)}),i3=me.object({database:sE,schema:sE,table:hL,operator:me.string().valid("and","or").default("and").lowercase(),offset:me.number().integer().min(0),limit:me.number().integer().min(1),get_attributes:me.array().min(1).items(me.alternatives(Mu,me.object())).optional(),sort:me.object({attribute:me.alternatives(Mu,me.array().min(1)),descending:me.bool().optional()}).optional(),conditions:me.array().min(1).items(me.alternatives(me.object({operator:me.string().valid("and","or").default("and").lowercase(),conditions:me.array()}),me.object({search_attribute:me.alternatives(Mu,me.array().min(1)),search_type:me.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:me.when("search_type",{switch:[{is:"equals",then:me.any()},{is:"between",then:me.array().items(me.alternatives([me.string(),me.number()])).length(2)}],otherwise:me.alternatives(me.string(),me.number())}).required()}))).required()});pL.exports=function(e,t){let r=null;switch(t){case"value":r=fL.validateBySchema(e,s3);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(EL("database",e.schema)),i(EL("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=fL.validateBySchema(e,i3);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Z4.checkGlobalSchemaTable(e.schema,e.table);if(s)return e3(new Error,s,n3.NOT_FOUND);let o=r3()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(u=>{for(let d=0,E=u.conditions.length;d<E;d++){let f=u.conditions[d];f.conditions?l(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&l(e);let _=dL.filter(c,u=>u!=="*"&&!u.startsWith?.("$")&&u.attribute!=="*"&&!Array.isArray(u)&&!u.name&&!dL.some(o,d=>d===u||d.attribute===u||d.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var lg=R((_Te,mL)=>{"use strict";var o3=Ye(),a3=Nc(),{getSchemaPath:c3}=Je();mL.exports=l3;function l3(e){let t=a3(e,"hashes");if(t)throw t;let r=c3(e.schema,e.table);return o3.openEnvironment(r,e.table)}a(l3,"initialize")});var ug=R((fTe,SL)=>{"use strict";var u3=bc(),_3=lg();SL.exports=d3;async function d3(e){let t=await _3(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return u3.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(d3,"lmdbGetDataByHash")});var yc=R((hTe,TL)=>{"use strict";var _g=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};TL.exports=_g});var RL=R((STe,gL)=>{"use strict";var mTe=yc(),f3=bc(),E3=lg();gL.exports=h3;async function h3(e){let t=await E3(e),r=global.hdb_schema[e.schema][e.table];return f3.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(h3,"lmdbSearchByHash")});var as=R((gTe,AL)=>{"use strict";var dg=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,_=void 0,u=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=_,this.offset=u}};AL.exports=dg});var iE=R((ATe,wL)=>{"use strict";var Er=bc(),p3=Ye(),m3=Y(),Se=_t(),Ea=L(),S3=_i(),OL=nn().LMDB_ERRORS_ENUM,{getSchemaPath:T3}=Je(),pi=Ea.SEARCH_WILDCARDS;async function g3(e,t,r){let n;e.schema===Ea.SYSTEM_SCHEMA_NAME?n=S3[e.table]:n=global.hdb_schema[e.schema][e.table];let s=IL(e,n.hash_attribute,r,t);return NL(e,s,n.hash_attribute,r)}a(g3,"prepSearch");async function NL(e,t,r,n){let s=T3(e.schema,e.table),i=await p3.openEnvironment(s,e.table),o=yL(i,e,t,r),c=o.transaction||i;if([Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Se.SEARCH_TYPES.SEARCH_ALL,Se.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(R3(e,r)===!1){let u=e.search_attribute;if(u===r)return n?bL(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[u]:E.key}),"toObject");return n?bL(o,d):o.map(d)}let _=e.search_attribute===r?o.map(u=>u.key):o.map(u=>u.value);return n===!0?Er.batchSearchByHashToMap(c,r,e.get_attributes,_):Er.batchSearchByHash(c,r,e.get_attributes,_)}a(NL,"executeSearch");function yL(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case Se.SEARCH_TYPES.EQUALS:s=Er.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.CONTAINS:s=Er.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.ENDS_WITH:case Se.SEARCH_TYPES._ENDS_WITH:s=Er.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.STARTS_WITH:case Se.SEARCH_TYPES._STARTS_WITH:s=Er.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Er.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Er.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Se.SEARCH_TYPES.SEARCH_ALL:return Er.searchAll(e,n,t.get_attributes,o,c,l);case Se.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Er.searchAllToMap(e,n,t.get_attributes,o,c,l);case Se.SEARCH_TYPES.BETWEEN:s=Er.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case Se.SEARCH_TYPES.GREATER_THAN:case Se.SEARCH_TYPES._GREATER_THAN:s=Er.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.GREATER_THAN_EQUAL:case Se.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Er.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.LESS_THAN:case Se.SEARCH_TYPES._LESS_THAN:s=Er.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.LESS_THAN_EQUAL:case Se.SEARCH_TYPES._LESS_THAN_EQUAL:s=Er.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(yL,"searchByType");function bL(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(bL,"createMapFromIterable");function R3(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(R3,"checkToFetchMore");function IL(e,t,r,n){if(m3.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),pi.indexOf(s)>-1)return r===!0?Se.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Se.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(pi[0])<0&&s.indexOf(pi[1])<0)return c===!0?r===!0?Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Se.SEARCH_TYPES.EQUALS;if(pi.indexOf(i)>=0&&pi.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Se.SEARCH_TYPES.CONTAINS;if(pi.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Se.SEARCH_TYPES.ENDS_WITH;if(pi.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Se.SEARCH_TYPES.STARTS_WITH;if(s.includes(pi[0])||s.includes(pi[1]))return Se.SEARCH_TYPES.EQUALS;throw new Error(OL.UNKNOWN_SEARCH_TYPE)}else switch(n){case Ea.VALUE_SEARCH_COMPARATORS.BETWEEN:return Se.SEARCH_TYPES.BETWEEN;case Ea.VALUE_SEARCH_COMPARATORS.GREATER:return Se.SEARCH_TYPES.GREATER_THAN;case Ea.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Se.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ea.VALUE_SEARCH_COMPARATORS.LESS:return Se.SEARCH_TYPES.LESS_THAN;case Ea.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Se.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(OL.UNKNOWN_SEARCH_TYPE)}}a(IL,"createSearchTypeFromSearchObject");wL.exports={executeSearch:NL,createSearchTypeFromSearchObject:IL,prepSearch:g3,searchByType:yL}});var DL=R((NTe,CL)=>{"use strict";var bTe=as(),A3=Nc(),O3=Y(),b3=L(),N3=iE();CL.exports=y3;function y3(e,t){if(!O3.isEmpty(t)&&b3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=A3(e,"value");if(n)throw n;return N3.prepSearch(e,t,!0)}a(y3,"lmdbGetDataByValue")});var Uu=R((wTe,LL)=>{"use strict";var ITe=as(),I3=Nc(),w3=Y(),C3=L(),D3=iE();LL.exports=L3;async function L3(e,t){if(!w3.isEmpty(t)&&C3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=I3(e,"value");if(n)throw n;return D3.prepSearch(e,t,!1)}a(L3,"lmdbSearchByValue")});var ML=R((LTe,PL)=>{"use strict";var DTe=_t(),fg=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}},Eg=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},hg=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};PL.exports={SearchByConditionsObject:fg,SearchCondition:Eg,SortAttribute:hg}});var xL=R((vTe,HL)=>{"use strict";var MTe=ML().SearchByConditionsObject,P3=as(),M3=Nc(),pg=bc(),oE=_t(),{Resource:UTe}=(Mn(),ae(mg)),BL=iE(),U3=cg(),v3=require("lodash"),{getSchemaPath:B3}=Je(),UL=Ye(),{handleHDBError:H3,hdb_errors:x3}=ie(),{HTTP_STATUS_CODES:G3}=x3,q3=1e8;HL.exports=F3;async function F3(e){let t=M3(e,"conditions");if(t)throw H3(t,t.message,G3.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=B3(e.schema,e.table),n=await UL.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)UL.openDBI(n,_.search_attribute);let i=v3.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let u=_.search_type;u===oE.SEARCH_TYPES.EQUALS?_.estimated_count=pg.count(n,_.search_attribute,_.search_value):u===oE.SEARCH_TYPES.CONTAINS||u===oE.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=q3}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await vL(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],u=i.slice(1).map(BL.filterByType),d=u.length,E=pg.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(f=>_.get(f,{transaction:o,lazy:!0})),d>0&&(l=l.filter(f=>{for(let h=0;h<d;h++)if(!u[h](f))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(f=>U3.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await vL(o,e,E,s.hash_attribute);c=c.concat(f)}let _=new Set,u=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(u,e.limit&&e.limit+u),l=pg.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(F3,"lmdbSearchByConditions");async function vL(e,t,r,n){let s=new P3(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===oE.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,BL.searchByType(e,s,i,n).map(o=>o.value)}a(vL,"executeConditionSearch")});var vu=R((HTe,GL)=>{"use strict";var k3=L().OPERATIONS_ENUM,Sg=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=k3.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};GL.exports=Sg});var Tg=R((GTe,WL)=>{"use strict";var $L=as(),VL=vu(),YL=Uu(),KL=Du(),vr=L(),qL=Y(),FL=Ye(),{getTransactionAuditStorePath:$3,getSchemaPath:V3}=Je(),kL=k();WL.exports=Y3;async function Y3(e){try{if(qL.isEmpty(global.hdb_schema[e.schema])||qL.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await K3(e),await W3(e);let t=V3(e.schema,e.table);try{await FL.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")kL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=$3(e.schema,e.table);await FL.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")kL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Y3,"lmdbDropTable");async function K3(e){let t=new $L(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,vr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[vr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await YL(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 VL(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await KL(s)}a(K3,"deleteAttributesFromSystem");async function W3(e){let t=new $L(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,vr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[vr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,vr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,vr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await YL(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 VL(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await KL(s)}catch(i){throw i}}a(W3,"dropTableFromSystem")});var jL=R((FTe,QL)=>{"use strict";var Q3=require("fs-extra"),j3=as(),z3=yc(),J3=vu(),X3=Tg(),Z3=Du(),eX=ug(),tX=Uu(),mi=L(),{getSchemaPath:rX}=Je(),{handleHDBError:nX,hdb_errors:sX}=ie(),{HDB_ERROR_MSGS:iX,HTTP_STATUS_CODES:oX}=sX;QL.exports=aX;async function aX(e){let t;try{t=await cX(e.schema);let r=new j3(mi.SYSTEM_SCHEMA_NAME,mi.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await tX(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await X3(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new J3(mi.SYSTEM_SCHEMA_NAME,mi.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Z3(s);let i=rX(t);await Q3.remove(i)}catch(r){throw r}}a(aX,"lmdbDropSchema");async function cX(e){let t=new z3(mi.SYSTEM_SCHEMA_NAME,mi.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await eX(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw nX(new Error,iX.SCHEMA_NOT_FOUND(e),oX.NOT_FOUND,void 0,void 0,!0);return n}a(cX,"validateDropSchema")});var Bu=R(($Te,zL)=>{"use strict";var gg=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};zL.exports=gg});var Ag=R((KTe,JL)=>{"use strict";var lX=require("fs-extra"),aE=Ye(),{getTransactionAuditStorePath:uX}=Je(),Rg=_t(),YTe=Bu();JL.exports=_X;async function _X(e){let t;try{let r=uX(e.schema,e.table);await lX.mkdirp(r),t=await aE.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{aE.createDBI(t,Rg.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),aE.createDBI(t,Rg.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),aE.createDBI(t,Rg.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(_X,"createTransactionsAuditEnvironment")});var tP=R((QTe,eP)=>{"use strict";var Og=L(),XL=Ye(),dX=ea(),{getSystemSchemaPath:fX,getSchemaPath:EX}=Je(),hX=_i(),pX=Lf(),bg=Df(),mX=k(),SX=Ag(),yg=hX.hdb_table,ZL=[];for(let e=0;e<yg.attributes.length;e++)ZL.push(yg.attributes[e].attribute);eP.exports=TX;async function TX(e,t){let r=EX(t.schema,t.table),n=new bg(t.schema,t.table,Og.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new bg(t.schema,t.table,Og.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new bg(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await XL.createEnvironment(r,t.table),e!==void 0){let o=await XL.openEnvironment(fX(),Og.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await dX.insertRecords(o,yg.hash_attribute,ZL,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Ng(n),await Ng(s),await Ng(i)}await SX(t)}catch(o){throw o}}a(TX,"lmdbCreateTable");async function Ng(e){try{await pX(e)}catch(t){mX.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Ng,"createAttribute")});var nP=R((zTe,rP)=>{"use strict";var gX=gu(),RX=su(),AX=Zf(),Hu=L(),OX=ea().updateRecords,bX=Ye(),{getSchemaPath:NX}=Je(),yX=wu(),IX=k();rP.exports=wX;async function wX(e){try{let{schema_table:t,attributes:r}=gX(e);RX(e,r,t.hash_attribute),e.schema!==Hu.SYSTEM_SCHEMA_NAME&&(r.includes(Hu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Hu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Hu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Hu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await AX(e.hdb_auth_header,t,r),s=NX(e.schema,e.table),i=await bX.openEnvironment(s,e.table),o=await OX(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await yX(e,o)}catch(c){IX.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(wX,"lmdbUpdateRecords")});var iP=R((XTe,sP)=>{"use strict";var CX=L().OPERATIONS_ENUM,Ig=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=CX.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};sP.exports=Ig});var aP=R((tge,oP)=>{"use strict";var ege=iP(),DX=gu(),LX=su(),PX=Zf(),xu=L(),MX=ea().upsertRecords,UX=Ye(),{getSchemaPath:vX}=Je(),BX=wu(),HX=k(),{handleHDBError:xX,hdb_errors:GX}=ie();oP.exports=qX;async function qX(e){let t;try{t=DX(e)}catch(l){throw xX(l,l.message,GX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;LX(e,n,r.hash_attribute),e.schema!==xu.SYSTEM_SCHEMA_NAME&&(n.includes(xu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(xu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(xu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(xu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await PX(e.hdb_auth_header,r,n),i=vX(e.schema,e.table),o=await UX.openEnvironment(i,e.table),c=await MX(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await BX(e,c)}catch(l){HX.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(qX,"lmdbUpsertRecords")});var lP=R((nge,cP)=>{"use strict";var wg=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};cP.exports=wg});var _P=R((ige,uP)=>{"use strict";var Cg=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}};uP.exports=Cg});var EP=R((cge,fP)=>{"use strict";var Dg=Ye(),{getTransactionAuditStorePath:FX}=Je(),age=lP(),Gu=_t(),kX=Y(),dP=_P(),$X=require("util").promisify,VX=$X(setTimeout),YX=1e4,KX=100;fP.exports=WX;async function WX(e){let t=FX(e.schema,e.table),r=await Dg.openEnvironment(t,e.table,!0),n=Dg.listDBIs(r);Dg.initializeDBIs(r,Gu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new dP;do s=await QX(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 VX(KX);while(s.transactions_deleted>0);return i}a(WX,"deleteAuditLogsBefore");async function QX(e,t){let r=new dP;try{let n=e.dbis[Gu.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[Gu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];kX.isEmpty(c)||(s=e.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>YX)break}return await s,r}catch(n){throw n}}a(QX,"deleteTransactions")});var pP=R((uge,hP)=>{"use strict";var Lg=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};hP.exports=Lg});var SP=R((fge,mP)=>{"use strict";var jX=as(),zX=vu(),dge=pP(),Hs=L(),JX=Y(),Pg=Ye(),XX=_i(),ZX=Uu(),eZ=Du(),{getSchemaPath:tZ}=Je();mP.exports=rZ;async function rZ(e,t=!0){let r;e.schema===Hs.SYSTEM_SCHEMA_NAME?r=XX[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await sZ(e),s=tZ(e.schema,e.table),i=await Pg.openEnvironment(s,e.table);return t===!0&&await nZ(e,i,r.hash_attribute),Pg.dropDBI(i,e.attribute),n}a(rZ,"lmdbDropAttribute");async function nZ(e,t,r){let n=Pg.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let _={};for(let u in c)u!==i&&(_[u]=c[u]);s=t.dbis[r].put(o,_,l)}await s}a(nZ,"removeAttributeFromAllObjects");async function sZ(e){let t=new jX(Hs.SYSTEM_SCHEMA_NAME,Hs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await ZX(t)).filter(o=>o[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(JX.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new zX(Hs.SYSTEM_SCHEMA_NAME,Hs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return eZ(i)}a(sZ,"dropAttributeFromSystem")});var bP=R((pge,OP)=>{"use strict";var Mg=Ye(),Ic=_t(),hge=wr(),Ug=L(),TP=Y(),{getTransactionAuditStorePath:iZ}=Je(),oZ=bc(),cE=Rc(),aZ=k();OP.exports=cZ;async function cZ(e){let t=iZ(e.schema,e.table),r=await Mg.openEnvironment(t,e.table,!0),n=Mg.listDBIs(r);Mg.initializeDBIs(r,Ic.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Ug.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return gP(r,e.search_values);case Ug.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,uZ(r,e.search_values,s);case Ug.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return lZ(r,e.search_values);default:return gP(r)}}a(cZ,"readAuditLog");function gP(e,t=[0,Date.now()]){TP.isEmpty(t[0])&&(t[0]=0),TP.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Ic.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new cE,s))}a(gP,"searchTransactionsByTimestamp");function lZ(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[Ic.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,AP(e,i))}return Object.fromEntries(r)}a(lZ,"searchTransactionsByUsername");function uZ(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let _=t[c],u=oZ.equals(e,Ic.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ic.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of u){let E=Number(d);n.has(E)?n.get(E).push(_.toString()):n.set(E,[_.toString()])}}let s=Array.from(n.keys()),i=AP(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],_=l.timestamp,u=n.get(_);RP(l,"records",r,u,o),RP(l,"original_records",r,u,o)}return Object.fromEntries(o)}a(uZ,"searchTransactionsByHashValues");function RP(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let _=s.get(l),u=_[_.length-1];if(u.timestamp===i)u[t]=[c];else{let d=new cE(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new cE(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(l,[_])}}}a(RP,"loopRecords");function AP(e,t){let r=[];try{let n=e.dbis[Ic.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new cE,i);r.push(o)}}catch(i){aZ.warn(i)}return r}catch(n){throw n}}a(AP,"batchSearchTransactions")});var yP=R((gge,NP)=>{"use strict";var{getSchemaPath:Sge}=Je(),Tge=Ye(),{database:_Z}=(Re(),ae(Ve));NP.exports={writeTransaction:dZ};async function dZ(e,t,r){return _Z({database:e,table:t}).transaction(r)}a(dZ,"writeTransaction")});var DP=R((Age,CP)=>{"use strict";var{getSchemaPath:IP}=Je(),wP=Ye();CP.exports={flush:fZ,resetReadTxn:EZ};async function fZ(e,t){return(await wP.openEnvironment(IP(e,t),t.toString())).flushed}a(fZ,"flush");async function EZ(e,t){try{(await wP.openEnvironment(IP(e,t),t.toString())).resetReadTxn()}catch{}}a(EZ,"resetReadTxn")});var UP=R((bge,MP)=>{"use strict";var{Readable:hZ}=require("stream"),{getDatabases:pZ}=(Re(),ae(Ve)),{readSync:mZ,openSync:SZ,createReadStream:LP}=require("fs"),{open:TZ}=require("lmdb"),PP=fu(),gZ=Eu(),{AUDIT_STORE_OPTIONS:RZ}=(no(),ae(vP)),{INTERNAL_DBIS_NAME:AZ,AUDIT_STORE_NAME:OZ}=_t();MP.exports=NZ;var vg=32768,bZ=100;async function NZ(e){let t=e.database||e.schema||"data",r=pZ()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let u=_.dbisDB,d=TZ({noSync:!0,maxDbs:gZ.MAX_DBS}),E,f=d.openDB(AZ,new PP(!1)),h=u.useReadTransaction(),m=0,S=a(async function(T,N){N.encoding="binary",N.encoder=void 0;let b=d.openDB(T,N),U=u.openDB(T,N);for(let{key:v,version:q,value:M}of U.getRange({start:null,transaction:h,versions:U.useVersions}))E=b.put(v,M,q),m++%bZ===0&&(await new Promise(W=>setTimeout(W,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:T,value:N}of u.getRange({transaction:h,start:!1}))if(s.some(b=>T.startsWith?.(b+"/"))){f.put(T,N);let[,b]=T.split("/"),U=!b,v=new PP(!U,U);await S(T,v)}e.include_audit&&await S(OZ,Object.assign({},RZ)),await E;let g=LP(d.path);return g.headers=l(),g.on("close",()=>{h.done(),d.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=SZ(o.path);return o.transaction(()=>{let _=Buffer.alloc(vg);mZ(c,_,0,vg),o.resetReadTxn();let u=o.useReadTransaction();u.renew();let d=LP(null,{fd:c,start:vg}),E=new hZ.from(async function*(){yield _;for await(let f of d)u.openTimer&&(u.openTimer=0),yield f;u.done()}());return E.headers=l(),E});function l(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(NZ,"getBackup")});var xP=R((yge,HP)=>{"use strict";var yZ=k(),{handleHDBError:IZ}=ie(),wZ=rw(),CZ=Lf(),DZ=ng(),LZ=jD(),PZ=Du(),MZ=ug(),UZ=RL(),vZ=DL(),BZ=Uu(),HZ=xL(),xZ=jL(),GZ=tP(),qZ=nP(),FZ=aP(),kZ=EP(),$Z=Tg(),VZ=SP(),YZ=bP(),KZ=yP(),BP=DP(),WZ=UP(),Bg=class extends wZ{static{a(this,"LMDBBridge")}async searchByConditions(t){return HZ(t)}async getDataByHash(t){return await MZ(t)}async searchByHash(t){return await UZ(t)}async getDataByValue(t,r){return await vZ(t,r)}async searchByValue(t){return await BZ(t)}async createSchema(t){return await LZ(t)}async dropSchema(t){return await xZ(t)}async createTable(t,r){return await GZ(t,r)}async dropTable(t){return await $Z(t)}async createAttribute(t){return await CZ(t)}async createRecords(t){return await DZ(t)}async updateRecords(t){return await qZ(t)}async upsertRecords(t){try{return await FZ(t)}catch(r){throw IZ(r,null,null,yZ.ERR,r)}}async deleteRecords(t){return await PZ(t)}async dropAttribute(t){return await VZ(t)}async deleteAuditLogsBefore(t){return await kZ(t)}async readAuditLog(t){return await YZ(t)}writeTransaction(t,r,n){return KZ.writeTransaction(t,r,n)}flush(t,r){return BP.flush(t,r)}resetReadTxn(t,r){return BP.resetReadTxn(t,r)}getBackup(t){return WZ(t)}};HP.exports=Bg});function JZ(){zZ=setInterval(function(){for(let e of Hg)if(e.stale){let t=e[Ie]?.url;kP.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},jZ).unref()}var xg,FP,kP,$P,VP,YP,GP,Hg,QZ,qu,qP,ha,lE,jZ,zZ,Gg=be(()=>{xg=x(wr()),FP=x(ie()),kP=x(k());Mn();$P=x(X()),VP=x(L()),YP=x(Y()),GP=100,Hg=new Set,QZ=(0,YP.convertToMS)($P.get(VP.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,ha=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),Hg.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Hg.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(qu&&!this.overloadChecked&&performance.now()-qP>QZ)throw new FP.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,xg.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let d=this.validated;this.validated=this.writes.length;for(let f=d;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let E;for(let f=d;f<this.validated;f++){let h=this.writes[f];h&&(h.before||h.beforeIntermediate)&&(E=!0)}if(E)return(async()=>{try{for(let f=0;f<2;f++){let h;for(let m=d;m<this.validated;m++){let S=this.writes[m];if(!S)continue;let g=S[f===0?"before":"beforeIntermediate"];if(g){let T=g();h?h.push?h.push(T):h=[h,T]:h=T}}h&&await(h.push?Promise.all(h):h)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(d){throw this.abort(),d}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(d=>d);let c=a(d=>{d.commit(r,d.entry,n)},"doWrite"),l=a(()=>{let d=this.writes[o++];if(d)if(d.key){n>0&&(d.entry=d.store.getEntry(d.key));let E=d.store.ifVersion(d.key,d.entry?.version??null,l);s=s||E}else l();else for(let E of this.writes)c(E)},"nextCondition"),_=this.lmdbDb;if(this.writes.length>0&&(_?.retryRisk&&(_.retryRisk*=.99),this.writes.length+(_?.retryRisk||0)<GP>>n?l():s=this.writes[0].store.transaction(()=>{for(let d of this.writes)d.entry=d.store.getEntry(d.key),c(d);return!0})),s)return qu||(qu=s,qP=performance.now(),qu.then(()=>{qu=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)+GP/2),t?t.retries=n+1:t={retries:1},this.commit(t)));let u={txnTime:r};if(this.next){let d=this.next?.commit(t);if(d?.then)return d?.then(E=>({txnTime:r,next:E}));u.next=d}return u}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},lE=class extends ha{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,xg.getNextMonotonicTime)())}getReadTxn(){}},jZ=3e4;a(JZ,"startMonitoringTxns");JZ()});function it(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new ha;e.timestamp&&(n.timestamp=e.timestamp),n[Ie]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({letItLinger:r?.letItLinger});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var KP,pa=be(()=>{KP=require("../index");Mn();Gg();a(it,"transaction");(0,KP._assignPackageExport)("transaction",it);it.commit=function(e){let t=(e[Ie]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};it.abort=function(e){let t=(e[Ie]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var eM={};$e(eM,{ResourceBridge:()=>kg});function $g({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 QP(e,t){let r=xs(e),n=$g(e,r);if(!r)throw new cs.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache},o;it(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let _=c[l++],u;try{u=await r.get({id:_,lazy:s,select:n},i),u=u&&_E(u)}catch(d){u={message:d.toString()}}return t?{value:{key:_,value:u}}:{value:u}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function xs(e){let t=e.database||e.schema||ZZ,r=Br()[t];if(!r)throw(0,cs.handleHDBError)(new Error,XZ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function jP(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*zP(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:l}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(l)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[l]})}n&&(yield n)}var JP,uE,cs,XP,ls,qg,Fg,ZP,XZ,ZZ,e5,t5,WP,kg,tM=be(()=>{"use strict";JP=x(xP()),uE=x(Nc()),cs=x(ie());Re();XP=x(gu()),ls=x(L()),qg=x(hi()),Fg=x(os()),ZP=x(Y());pa();dE();({HDB_ERROR_MSGS:XZ}=cs.hdb_errors),ZZ="data",e5=1e4,t5=10,kg=class extends JP.default{static{a(this,"ResourceBridge")}constructor(t){super(t),WP=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,uE.default)(t,"conditions");if(r)throw(0,cs.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=xs(t);if(!n)throw new cs.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:$g(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new cs.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}St({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await xs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=xs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(_=>{if(!_){let{value:u,version:d}=r.primaryStore.getEntry(o);return i(o,u,d)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){xs(t).dropTable()}createSchema(t){return wc({database:t.schema,table:null}),qg.signalSchemaChange(new Fg.SchemaEventMsg(process.pid,ls.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Vg(t.schema),qg.signalSchemaChange(new Fg.SchemaEventMsg(process.pid,ls.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,WP.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,XP.default)(t),s,i=Br()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return it(o,async c=>{if(!i.schemaDefined){s=[];for(let u of n)i.attributes.find(E=>E.name==u)||s.push(u);s.length>0&&await i.addAttributes(s.map(u=>({name:u,indexed:!0})))}let l=[],_=[];for(let u of t.records){let d=u[i.primaryKey],E=d!=null&&await i.get(d,o);if(t.requires_existing&&!E||t.requires_no_existing&&E){_.push(u[i.primaryKey]);continue}E&&(E=_E(E));for(let f in u)if(Object.prototype.hasOwnProperty.call(u,f)){let h=u[f];if(typeof h=="function")try{let m=h([[E]]);Array.isArray(m)&&(h=m[0].func_val,u[f]=h)}catch(m){throw m.message+="Trying to set key "+f+" on object"+JSON.stringify(u),m}}if(E)for(let f in E)Object.prototype.hasOwnProperty.call(u,f)||(u[f]=E[f]);await(d==null?i.create(u,o):i.put(u,o)),l.push(u[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=Br()[t.schema][t.table],n={user:t.hdb_user};return it(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return jP(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Br()[t.schema][t.table];if(!r.createdTimeProperty)throw new cs.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:ls.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],_=a(async()=>{let u=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...u.deleted_hashes),o.push(...u.skipped_hashes),await(0,ZP.async_set_timeout)(t5),l=[],s=!0},"chunkDelete");for await(let u of n)l.push(u[r.primaryKey]),c++,c%e5===0&&await _();return l.length>0&&await _(),s?jP(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,uE.default)(t,"hashes");if(r)throw r;return QP(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of QP(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&ls.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,uE.default)(t,"value");if(n)throw n;let s=xs(t);if(!s)throw new cs.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===ls.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:$g(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache})}async getDataByValue(t,r){let n=new Map,s=xs(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){xs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return xs(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=xs(t),n={};switch(t.search_type){case ls.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case ls.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of zP(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return zP(r,t.search_values?.[0],t.search_values?.[1])}}};a($g,"getSelect");a(QP,"getRecords");a(xs,"getTable");a(jP,"createDeleteResponse");a(zP,"groupRecordsInHistory")});var Hn=R((Fge,rM)=>{"use strict";var{ResourceBridge:r5}=(tM(),ae(eM)),n5=X();n5.initSync();var fE;function s5(){return fE||(fE=new r5,fE)}a(s5,"getBridge");rM.exports=s5()});var oM=R(($ge,iM)=>{"use strict";var nM=require("lodash"),Fu=require("mathjs"),i5=require("jsonata"),sM=Y();iM.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?nM.uniqWith(e,nM.isEqual):e,searchJSON:o5,mad:ku.bind(null,Fu.mad),mean:ku.bind(null,Fu.mean),mode:ku.bind(null,Fu.mode),prod:ku.bind(null,Fu.prod),median:ku.bind(null,Fu.median)};function ku(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(ku,"aggregateFunction");function o5(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(sM.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),sM.isEmpty(this.__ala__.res[r])){let n=i5(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(o5,"searchJSON")});var cM=R((Yge,aM)=>{"use strict";var It=require("moment"),Yg="YYYY-MM-DDTHH:mm:ss.SSSZZ";It.suppressDeprecationWarnings=!0;aM.exports={current_date:()=>It().utc().format("YYYY-MM-DD"),current_time:()=>It().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return It(e).utc().format("YYYY");case"month":return It(e).utc().format("MM");case"day":return It(e).utc().format("DD");case"hour":return It(e).utc().format("HH");case"minute":return It(e).utc().format("mm");case"second":return It(e).utc().format("ss");case"millisecond":return It(e).utc().format("SSS");default:break}},date:e=>It(e).utc().format(Yg),date_format:(e,t)=>It(e).utc().format(t),date_add:(e,t,r)=>It(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>It(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=It(e).utc(),s=It(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>It().utc().valueOf(),get_server_time:()=>It().format(Yg),offset_utc:(e,t)=>It(e).utc().utcOffset(t).format(Yg)}});var dM=R((Kge,_M)=>{"use strict";var a5=require("@turf/area"),c5=require("@turf/length"),l5=require("@turf/circle"),u5=require("@turf/difference"),_5=require("@turf/distance"),d5=require("@turf/boolean-contains"),f5=require("@turf/boolean-equal"),E5=require("@turf/boolean-disjoint"),h5=require("@turf/helpers"),lM=L(),Ae=Y(),Si=k();_M.exports={geoArea:p5,geoLength:m5,geoCircle:S5,geoDifference:T5,geoDistance:uM,geoNear:g5,geoContains:R5,geoEqual:A5,geoCrosses:O5,geoConvert:b5};function p5(e){if(Ae.isEmpty(e))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return a5.default(e)}catch(t){return Si.trace(t,e),NaN}}a(p5,"geoArea");function m5(e,t){if(Ae.isEmpty(e))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return c5.default(e,{units:t||"kilometers"})}catch(r){return Si.trace(r,e),NaN}}a(m5,"geoLength");function S5(e,t,r){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return l5.default(e,t,{units:r||"kilometers"})}catch(n){return Si.trace(n,e,t),NaN}}a(S5,"geoCircle");function T5(e,t){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return u5(e,t)}catch(r){return Si.trace(r,e,t),NaN}}a(T5,"geoDifference");function uM(e,t,r){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return _5.default(e,t,{units:r||"kilometers"})}catch(n){return Si.trace(n,e,t),NaN}}a(uM,"geoDistance");function g5(e,t,r,n){if(Ae.isEmpty(e)||Ae.isEmpty(t))return!1;if(Ae.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return uM(e,t,n)<=r}catch(s){return Si.trace(s,e,t),!1}}a(g5,"geoNear");function R5(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return d5.default(e,t)}catch(r){return Si.trace(r,e,t),!1}}a(R5,"geoContains");function A5(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return f5.default(e,t)}catch(r){return Si.trace(r,e,t),!1}}a(A5,"geoEqual");function O5(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return!E5.default(e,t)}catch(r){return Si.trace(r,e,t),!1}}a(O5,"geoCrosses");function b5(e,t,r){if(Ae.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ae.isEmpty(t))throw new Error("geo_type is required");if(Ae.isEmpty(lM.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(lM.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ae.autoCastJSON(e)),h5[t](e,r)}a(b5,"geoConvert")});var EE=R((Qge,fM)=>{var ma=oM(),fn=cM(),Gs=dM();fM.exports=e=>{e.aggr.mad=e.aggr.MAD=ma.mad,e.aggr.mean=e.aggr.MEAN=ma.mean,e.aggr.mode=e.aggr.MODE=ma.mode,e.aggr.prod=e.aggr.PROD=ma.prod,e.aggr.median=e.aggr.MEDIAN=ma.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ma.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ma.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=fn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=fn.current_time,e.fn.extract=e.fn.EXTRACT=fn.extract,e.fn.date=e.fn.DATE=fn.date,e.fn.date_format=e.fn.DATE_FORMAT=fn.date_format,e.fn.date_add=e.fn.DATE_ADD=fn.date_add,e.fn.date_sub=e.fn.DATE_SUB=fn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=fn.date_diff,e.fn.now=e.fn.NOW=fn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=fn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=fn.get_server_time,e.fn.getdate=e.fn.GETDATE=fn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=fn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Gs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Gs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Gs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Gs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Gs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Gs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Gs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Gs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Gs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Gs.geoNear}});var mM=R((jge,pM)=>{"use strict";var $u=require("lodash"),Hr=require("alasql");Hr.options.cache=!1;var N5=EE(),EM=require("clone"),hE=require("recursive-iterator"),he=k(),Me=Y(),Cc=Hn(),y5=L(),{hdb_errors:I5}=ie(),{getDatabases:hM}=(Re(),ae(Ve)),w5="IS NULL",us="There was a problem performing this search. Please check the logs and try again.";N5(Hr);var Kg=class{static{a(this,"SQLSearch")}constructor(t,r){if(Me.isEmpty(t))throw he.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),Me.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Me.isEmptyOrZeroLength(n))return he.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw he.error("Error thrown from checkEmptySQL in SQLSearch class method search."),he.error(n),new Error(us)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw he.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),he.error(n),new Error(us)}if(Object.keys(this.data).length===0)return he.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw he.error("Error thrown from processJoins in SQLSearch class method search."),he.error(n),new Error(us)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw he.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),he.error(n),new Error(us)}try{return t=await this._finalSQL(),t}catch(n){throw he.error("Error thrown from finalSQL in SQLSearch class method search."),he.error(n),new Error(us)}}_getColumns(){let t=new hE(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(EM(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=hM()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Me.isEmpty(this.statement.where)){he.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new hE(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Me.isEmpty(r)&&r.right)if(Me.isNotEmptyAndHasValue(r.right.value)){let n=Me.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Hr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Me.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Hr.yy.LogicValue({value:i}):n instanceof Hr.yy.StringValue&&Me.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Hr.yy.NumValue({value:i}))});if(t){he.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new hE(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Me.isEmpty(y5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Me.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Me.isEmptyOrZeroLength(r.left.columnid)||Me.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(Me.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!Me.isEmpty(r.right.value)||!Me.isEmpty(r.left.value)?n.add(Me.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<l.length;_++)if(l[_].value)n.add(l[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(Me.isEmptyOrZeroLength(this.all_table_attributes)&&Me.isEmptyOrZeroLength(this.statement.from)&&Me.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&$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(Me.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Me.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Me.isEmptyOrZeroLength(this.all_table_attributes)&&!Me.isEmptyOrZeroLength(this.columns.columns))return t;if(Me.isEmptyOrZeroLength(this.all_table_attributes)&&Me.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Hr.promise(r)}catch(r){throw he.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),he.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(EM(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Me.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(w5)>-1&&this.tables.forEach(s=>{let i={columnid:hM()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=$u.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!Me.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Me.isEmptyOrZeroLength(this.exact_search_values[_].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[_].values);let u=await Cc.getDataByHash(c);for(let d of c.hash_values)u.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(u){throw he.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),he.error(u),new Error(us)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async u=>{let d=Object.assign({},c);d.search_value=u;let E=await Cc.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]):(this.data[i].__merged_data[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,f))}))}catch(u){throw he.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),he.error(u),new Error(us)}else if(!Me.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Me.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let u=this.comparator_search_values[_].comparators;for(let d=0,E=u.length;d<E;d++){let f=u[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await Cc.getDataByValue(c,f.operation);if(l)for(let[m]of h)this.data[i].__merged_data[m]||(this.data[i].__merged_data[m]=[...n[i]],this._setMergedHashAttribute(i,m));else for(let[m,S]of h)this.data[i].__merged_data[m]?this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]):(this.data[i].__merged_data[m]=[...n[i]],this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,m))}}catch(u){throw he.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),he.error(u),new Error(us)}else try{c.search_attribute=s.attribute,c.search_value="*";let u=await Cc.getDataByValue(c);if(l)for(let[d]of u)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,E]of u)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]),this._setMergedHashAttribute(i,d))}catch(u){throw he.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),he.error(u),new Error(us)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof Hr.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 Hr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Hr.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 Hr.yy.FuncValue:new Hr.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,m=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${m}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${m}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let u="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(u=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${_} ${u} ${d}`,h=this._convertColumnsToIndexes(f,s);E=await Hr.promise(h,t),t=null}catch(f){throw he.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),he.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let m=E[f];o.forEach(S=>{m[S.key]!==null&&m[S.key]!==void 0&&S.keys.add(m[S.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),m=$u.difference(h,[...f.keys].map(S=>S.toString()));for(let S=0,g=m.length;S<g;S++){let T=m[S];delete this.data[`${f.schema}_${f.table}`].__merged_data[T]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new hE(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=$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 he.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),he.error(i),new Error(us)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let u in i)o.push(i[u][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await Cc.getDataByHash(c),_=s.columns.length;for(let u=0,d=o.length;u<d;u++){let E=o[u],f=l.get(E);for(let h=0;h<_;h++){let m=s.columns[h],S=f[m]===void 0?null:f[m];this.data[n].__merged_data[E].push(S)}}}}catch(r){throw he.error("Error thrown from getDataByHash function in SQLSearch class method getData."),he.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();he.trace(`Final SQL: ${s}`),n=await Hr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),he.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw he.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),he.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return he.error(I5.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),he.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],_=new RegExp(`${l}.\`${o}\``,"g"),u=`${l}.[${c}]`;n=n.replace(_,u)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(l,_)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await Cc.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw he.error("There was an error when processing this SQL operation. Check your logs"),he.error(o),new Error(us)}}return Object.values(Object.values(this.data)[0].__merged_data)}};pM.exports=Kg});var ur=R((Jge,SM)=>{"use strict";var C5=ew();SM.exports={searchByConditions:L5,searchByHash:P5,searchByValue:M5,search:U5};var Wg=Hn(),{transformReq:Qg}=Y(),D5=mM();async function L5(e){return Qg(e),Wg.searchByConditions(e)}a(L5,"searchByConditions");async function P5(e){Qg(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Wg.searchByHash(e))r&&t.push(r);return t}a(P5,"searchByHash");async function M5(e){Qg(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Wg.searchByValue(e))t.push(r);return t}a(M5,"searchByValue");function U5(e,t){try{let r=new C5(e);r.validate(),new D5(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(U5,"search")});var pE=R((Zge,TM)=>{"use strict";var v5=Hn();TM.exports={writeTransaction:B5};function B5(e,t,r){return v5.writeTransaction(e,t,r)}a(B5,"writeTransaction")});var OM=R((rRe,AM)=>{"use strict";var H5=ur(),x5=Bn(),gM=k(),G5=Pr(),tRe=pE(),q5=require("clone"),zg=require("alasql"),F5=EE(),RM=require("util"),k5=RM.promisify(x5.getTableSchema),$5=RM.promisify(H5.search),V5=L(),jg=Y();F5(zg);AM.exports={update:K5};var Y5="There was a problem performing this update. Please check the logs and try again.";async function K5({statement:e,hdb_user:t}){let r=await k5(e.table.databaseid,e.table.tableid),n=W5(e.columns);jg.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=q5(s),c=jg.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=zg.parse(l).statements[0],u=await $5(_),d=Q5(n,u);return j5(o,d,t)}a(K5,"update");function W5(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=zg.compile(`SELECT ${r.expression.toString()} AS [${V5.FUNC_VAL}] FROM ?`)}),t}catch(t){throw gM.error(t),new Error(Y5)}}a(W5,"createUpdateRecord");function Q5(e,t){return jg.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Q5,"buildUpdateRecords");async function j5(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await G5.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){gM.error(`Error delete new_attributes from update response: ${i}`)}return s}a(j5,"updateRecords")});var NM=R((oRe,bM)=>{var z5=require("alasql"),J5=ur(),X5=k(),Z5=Hn(),Xg=require("util"),Jg=Y(),e8=L(),t8=Bn(),sRe=pE(),iRe=Pr(),r8="record",n8="successfully deleted",s8=Xg.callbackify(c8),i8=Xg.promisify(J5.search),o8=Xg.promisify(t8.getTableSchema);bM.exports={convertDelete:s8};function a8(e){return`${e.deleted_hashes.length} ${r8}${e.deleted_hashes.length===1?"":"s"} ${n8}`}a(a8,"generateReturnMessage");async function c8({statement:e,hdb_user:t}){let r=await o8(e.table.databaseid,e.table.tableid);Jg.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Jg.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=z5.parse(o).statements[0],l={operation:e8.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await i8(c);let _=await Z5.deleteRecords(l);return Jg.isEmptyOrZeroLength(_.message)&&(_.message=a8(_)),delete _.txn_time,_}catch(_){throw X5.error(_),_.hdb_code?_.message:_}}a(c8,"convertDelete")});var DM=R((cRe,CM)=>{"use strict";var l8=Ei(),{hdb_errors:yM}=ie(),{getDatabases:IM}=(Re(),ae(Ve));CM.exports={checkSchemaExists:wM,checkSchemaTableExists:u8,schema_describe:l8};async function wM(e){if(!IM()[e])return yM.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(wM,"checkSchemaExists");async function u8(e,t){let r=await wM(e);if(r)return r;if(!IM()[e][t])return yM.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(u8,"checkSchemaTableExists")});var Sa=R((uRe,_8)=>{_8.exports={name:"harperdb",version:"4.3.41",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.2.5",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.11.2",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.3",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^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 Qu={};$e(Qu,{addAnalyticsListener:()=>Wu,recordAction:()=>hr,recordActionBinary:()=>En,setAnalyticsEnabled:()=>d8});function d8(e){GM=e}function hr(e,t,r,n,s){if(!GM)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=TE.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let _=c;o.values=c=new Float32Array(l*2),c.set(_),c.index=l+1}c[l]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},TE.set(i,o)}mE||f8()}function En(e,t,r,n,s){hr(!!e,t,r,n,s)}function Wu(e){kM.push(e)}function f8(){mE=performance.now(),setTimeout(async()=>{let e=performance.now()-mE;mE=0;let t=[],r={time:Date.now(),period:e,threadId:Ta.threadId,metrics:t};for(let[s,i]of TE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,_=[],u;for(let d of $M){let E=Math.floor(c*d),f=o[E-1];if(E>l){let h=E-l;if(f===u){let m=_[_.length-1];typeof m=="number"?_[_.length-1]={value:m,count:1+h}:m.count+=h}else _.push(h>1?{value:f,count:h}:f),u=f;l=E}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await VM()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Ta.threadId,byThread:!0,...n});for(let s of kM)s(t);TE=new Map,Ta.parentPort?Ta.parentPort.postMessage({type:FM,report:r}):WM({report:r})},qM).unref()}async function E8(e,t=6e4){let r=tR(),n=YM(),s=new Promise(m=>{let S=performance.now();setImmediate(()=>{let g=performance.now();g-S>5e3&&(0,Vu.warn)("Unusually high event queue latency on the main thread of "+Math.round(g-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let g=performance.now();g-S>5e3&&(0,Vu.warn)("Unusually high task queue latency on the main thread of "+Math.round(g-S)+"ms"),m(g-S)})}),i;for(let m of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(m.value?.time){i=m.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,_=[],u;for(let{key:m,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(m>o+t)break}else o=m;u=m;let{metrics:g,threadId:T}=S;for(let N of g||[]){let{path:b,method:U,type:v,metric:q,count:M,total:W,distribution:z,threads:Z,...ce}=N;M||(M=1);let _e=q+(b?"-"+b:"");U!==void 0&&(_e+="-"+U),v!==void 0&&(_e+="-"+v);let de=c.get(_e);if(de){if(de.threads){let we=de.threads[T];if(we)de=we;else{de.threads[T]=Object.assign({},ce);continue}}de.count||(de.count=1);let xe=de.count;for(let we in ce){let Ge=ce[we];typeof Ge=="number"&&(de[we]=(de[we]*xe+Ge*M)/(xe+M))}de.count+=M,W>=0&&(de.total+=W,de.ratio=de.total/de.count)}else de=Object.assign({period:t},N),delete de.distribution,c.set(_e,de),de.byThread&&(de.threads=[],de.threads[T]=Object.assign({},ce),_.push(de));if(z){z=z.map(we=>typeof we=="number"?{value:we,count:1}:we);let xe=l.get(_e);xe?xe.push(...z):l.set(_e,z)}}await VM()}for(let m of _){let{path:S,method:g,type:T,metric:N,count:b,total:U,distribution:v,threads:q,...M}=m;q=q.filter(W=>W);for(let W in M){if(typeof m[W]!="number")continue;let z=0;for(let Z of q){let ce=Z[W];typeof ce=="number"&&(z+=ce)}m[W]=z}m.count=q.length,delete m.threads,delete m.byThread}for(let[m,S]of l){let g=c.get(m);S.sort((we,Ge)=>we.value>Ge.value?1:-1);let T=g.count-1,N=[],b=0,U=0,v;for(let we of $M){let Ge=T*we;for(;b<Ge;)v=S[U++],b+=v.count,U===1&&b--;let Wd=S[U>1?U-2:0];v||(v=S[0]),N.push(v.value-(v.value-Wd.value)*(b-Ge)/v.count)}let[q,M,W,z,Z,ce,_e,de,xe]=N;Object.assign(g,{p1:q,p10:M,p25:W,median:z,p75:Z,p90:ce,p95:_e,p99:de,p999:xe})}let d;for(let[m,S]of c)S.id=(0,SE.getNextMonotonicTime)(),S.time=u,n.primaryStore.put(S.id,S,{append:!0}).then(g=>{g||n.primaryStore.put(S.id,S)}),d=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(d||h*10>f){let m=(0,SE.getNextMonotonicTime)(),S={id:m,metric:"main-thread-utilization",idle:f-LM,active:h-PM,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(m,S,{append:!0}).then(g=>{g||n.primaryStore.put(m,S)})}LM=f,PM=h}async function MM(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function tR(){return UM||(UM=St({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function YM(){return vM||(vM=St({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function m8(){KM=!0;let e=(0,Ku.get)(eR.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await E8(qM,e),await MM(tR(),h8),await MM(YM(),p8)},Math.min(e/2,2147483647)).unref()}function WM(e,t){let r=e.report;r.threadId=t?.threadId||Ta.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(BM+=n.mean*n.count);r.totalBytesProcessed=BM,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(HM.get(t))}),HM.set(t,t.performance.eventLoopUtilization())),r.id=(0,SE.getNextMonotonicTime)(),tR().primaryStore.put(r.id,r),KM||m8(),S8&&(QM=g8(r))}async function g8(e){if(await QM,!fo){let r=(0,Yu.dirname)((0,Vu.getLogFilePath)());try{fo=await(0,Zg.open)((0,Yu.join)(r,"analytics.log"),"r+")}catch{fo=await(0,Zg.open)((0,Yu.join)(r,"analytics.log"),"w+")}}let t=(await fo.stat()).size;if(t>T8){let r=Buffer.alloc(t);await fo.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await fo.write(r,{position:0}),await fo.truncate(r.length),t=r.length}await fo.write(JSON.stringify(e)+`
|
|
11
11
|
`,t)}var Ta,xM,Vu,Yu,Zg,SE,Ku,eR,TE,GM,mE,qM,FM,kM,$M,LM,PM,VM,h8,p8,UM,vM,KM,BM,HM,S8,QM,fo,T8,Ti=be(()=>{Ta=require("worker_threads"),xM=x(rt());Re();Vu=x(k()),Yu=require("path"),Zg=require("fs/promises"),SE=x(wr()),Ku=x(X()),eR=x(L());Cr();(0,Ku.initSync)();TE=new Map,GM=(0,Ku.get)(eR.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(d8,"setAnalyticsEnabled");a(hr,"recordAction");dt.recordAnalytics=hr;a(En,"recordActionBinary");mE=0,qM=1e3,FM="analytics-report",kM=[];a(Wu,"addAnalyticsListener");$M=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(f8,"sendAnalytics");a(E8,"aggregation");LM=0,PM=0,VM=a(()=>new Promise(setImmediate),"rest");a(MM,"cleanup");h8=36e5,p8=31536e6;a(tR,"getRawAnalyticsTable");a(YM,"getAnalyticsTable");(0,xM.setChildListenerByType)(FM,WM);a(m8,"startScheduledTasks");BM=0,HM=new Map,S8=!1;a(WM,"recordAnalytics");T8=1e6;a(g8,"logAnalytics")});var oR=R((ORe,oU)=>{"use strict";var{decode:R8}=require("msgpackr"),{isMainThread:gRe,parentPort:RRe,threadId:ARe}=require("worker_threads"),AE=gt(),Dc=Ze(),sR=L(),pr=k(),nR=X(),A8=L(),{onMessageByType:O8}=rt(),XM=fi(),{recordAction:jM,recordActionBinary:b8}=(Ti(),ae(Qu)),{publishToStream:N8}=AE,{ConsumerEvents:zM}=require("nats"),y8=ur(),{promisify:I8}=require("util"),ZM=I8(setTimeout),OE=1e4,bE,RE,w8,C8,eU,ju=new Map,Lc=new Map;oU.exports={initialize:tU,ingestConsumer:iR,setSubscription:D8,setIgnoreOrigin:M8,getDatabaseSubscriptions:P8,updateConsumer:rU};async function tU(){O8(sR.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await rU(n)}),eU=!0,pr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await AE.getNATSReferences();bE=e,RE=e.info.server_name,w8=t,C8=r}a(tU,"initialize");async function rU(e){if(e.status==="start"){let{js:t,jsm:r}=await nU(e.node_domain_name);iR(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=ju.get(e.stream_name+e.node_domain_name);t&&(pr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),ju.set(e.stream_name+e.node_domain_name,"close")),Lc.get(e.node_domain_name)==="failed"&&Lc.set(e.node_domain_name,"close")}}a(rU,"updateConsumer");var NE=new Map;function D8(e,t,r){let n=NE.get(e);n||NE.set(e,n=new Map),n.set(t,r),eU||tU().then(L8)}a(D8,"setSubscription");async function L8(){let e=await y8.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Dc.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions)if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await nU(r),!n))break;let{schema:o,table:c}=i,l=XM.createNatsTableStreamName(o,c);iR(l,n,s,r)}}}a(L8,"accessConsumers");async function nU(e){let t,r,n=1;for(;!r;)try{t=await bE.jetstream({domain:e}),r=await bE.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Lc.get(e)==="close")break;Lc.set(e,"failed"),n%10===1&&pr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<OE?n++*100:OE;await ZM(i)}return{js:t,jsm:r}}a(nU,"connectToRemoteJS");function P8(){return NE}a(P8,"getDatabaseSubscriptions");var sU;function M8(e){sU=e}a(M8,"setIgnoreOrigin");var iU=100,JM=new Array(iU),gE=0;async function iR(e,t,r,n){let{connection:s}=await AE.getNATSReferences();bE=s,RE=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,RE),pr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(Lc.get(n)==="close")break;o%10===1&&pr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(pr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await AE.createConsumer(r,e,RE,new Date(Date.now()).toISOString()));let u=o++*100<OE?o++*100:OE;await ZM(u)}let c=!1,l;for(;!c;){if(ju.get(e+n)==="close"||Lc.get(n)==="close"){ju.delete(e+n),c=!0;continue}l=await i.consume({max_messages:nR.get(sR.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),ju.set(e+n,l);let _=!1;(async()=>{for await(let u of await l.status())if(u.type===zM.ConsumerDeleted&&(await l.close(),c=!0),u.type===zM.HeartbeatsMissed){let d=u.data;pr.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===100&&(pr.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),_=!0)}})();try{for await(let u of l)await JM[gE],JM[gE]=U8(u).catch(d=>{pr.error(d)}),++gE>=iU&&(gE=0)}catch(u){u.message==="consumer deleted"?(pr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):pr.error("Error consuming clustering ingest, restarting consumer",u)}}}a(iR,"ingestConsumer");async function U8(e){let t=R8(e.data);jM(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),pr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=nR.get(sR.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Dc.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Dc.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Dc.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!sU),b8(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Dc.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:_,records:u,hash_values:d,__origin:E,expiresAt:f}=t;pr.trace("processing message:",o,c,_,(u?"records: "+u.map(U=>U?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),pr.trace(`messageProcessor nats msg id: ${e.headers.get(Dc.MSG_HEADERS.NATS_MSG_ID)}`);let h;u||(u=d);let m=new Promise(U=>h=U),{timestamp:S,user:g,node_name:T}=E||{},N=NE.get(c)?.get(_);if(!N)throw new Error(`Missing table for replication message: ${_}`);if(o==="define_schema")t.type=o,t.onCommit=h,N.send(t);else if(u.length===1&&!l)N.send({type:rR(o),value:u[0],id:d?.[0],expiresAt:f,timestamp:S,table:_,onCommit:h,user:g,nodeName:T});else{let U=u.map((v,q)=>({type:rR(o),value:v,expiresAt:f,id:d?.[q],table:_}));for(;l;)U.push({type:rR(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;N.send({type:"transaction",writes:U,table:_,timestamp:S,onCommit:h,user:g,nodeName:T})}nR.get(A8.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&N8(e.subject.split(".").slice(0,-1).join("."),XM.createNatsTableStreamName(c,_),e.headers,e.data),await m;let b=Date.now()-S;S&&jM(b,"replication-latency",e.subject,o,"ingest")}catch(o){pr.error(o)}e.ack()}a(U8,"messageProcessor");function rR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(rR,"convertOperation")});var gt=R((DRe,OU)=>{"use strict";var Qt=X();Qt.initSync();var v8=require("fs-extra"),B8=require("semver"),Xu=require("path"),{monotonicFactory:H8}=require("ulidx"),cU=H8(),x8=require("util"),lU=require("child_process"),G8=x8.promisify(lU.exec),q8=lU.spawn,nr=Ze(),Ce=L(),yE=Y(),_s=k(),IE=fi(),F8=pE(),zu=Et(),{broadcast:k8,onMessageByType:$8,getWorkerIndex:V8}=rt(),{isMainThread:uU}=require("worker_threads"),{Encoder:Y8,decode:uR}=require("msgpackr"),_U=new Y8,{isEmpty:Oa}=yE,dU=Ur(),NRe=48*36e11;uU&&$8(Ce.ITC_EVENT_TYPES.RESTART,()=>{mr=void 0,Aa=void 0});var{connect:K8,StorageType:W8,RetentionPolicy:Q8,AckPolicy:_R,DeliverPolicy:dR,DiscardPolicy:j8,NatsConnection:yRe,JetStreamManager:IRe,JetStreamClient:wRe,StringCodec:CRe,JSONCodec:z8,createInbox:fR,headers:J8,ErrorCode:aU}=require("nats"),{PACKAGE_ROOT:X8}=L(),Z8=Sa(),{recordAction:e6}=(Ti(),ae(Qu)),fU=z8(),t6="clustering",r6=Z8.engines[nr.NATS_SERVER_NAME],n6=Xu.join(X8,"dependencies"),lR=Xu.join(n6,`${process.platform}-${process.arch}`,nr.NATS_BINARY_NAME),aR,cR,Ju,ga,Ra;OU.exports={runCommand:EU,checkNATSServerInstalled:s6,createConnection:ER,getConnection:Zu,getJetStreamManager:e_,getJetStream:pU,getNATSReferences:qs,getServerList:o6,createLocalStream:hR,listStreams:mU,deleteLocalStream:a6,getServerConfig:Pc,listRemoteStreams:c6,viewStream:l6,viewStreamIterator:u6,publishToStream:_6,request:E6,reloadNATS:pR,reloadNATSHub:h6,reloadNATSLeaf:p6,extractServerName:f6,requestErrorHandler:m6,createLocalTableStream:RU,createTableStreams:g6,purgeTableStream:AU,purgeSchemaTableStreams:R6,getStreamInfo:A6,updateLocalStreams:b6,closeConnection:i6,getJsmServerName:wE,addNatsMsgHeader:SU,clearClientCache:hU,updateRemoteConsumer:S6,createConsumer:TU,updateConsumerIterator:T6};async function EU(e,t=void 0){let{stdout:r,stderr:n}=await G8(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
12
12
|
`,""));return r.replace(`
|
|
13
13
|
`,"")}a(EU,"runCommand");async function s6(){try{await v8.access(lR)}catch{return!1}let e=await EU(`${lR} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return B8.eq(t,r6)}a(s6,"checkNATSServerInstalled");async function ER(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await dU.getClusterUser();if(Oa(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}_s.trace("create nats connection called");let i=await K8({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),_s.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&_s.error("Error with Nats client connection, connection closed",o),i===mr&&hU()}),i}a(ER,"createConnection");function hU(){mr=void 0,ga=void 0,Ra=void 0,Aa=void 0}a(hU,"clearClientCache");async function i6(){mr&&(await mr.drain(),mr=void 0,ga=void 0,Ra=void 0,Aa=void 0)}a(i6,"closeConnection");var mr,Aa;async function Zu(){return Aa||(Aa=ER(Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),mr=await Aa),mr||Aa}a(Zu,"getConnection");async function e_(){if(ga)return ga;Oa(mr)&&await Zu();let{domain:e}=Pc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Oa(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ga=await mr.jetstreamManager({domain:e,timeout:6e4}),ga}a(e_,"getJetStreamManager");async function pU(){if(Ra)return Ra;Oa(mr)&&await Zu();let{domain:e}=Pc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Oa(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ra=mr.jetstream({domain:e,timeout:6e4}),Ra}a(pU,"getJetStream");async function qs(){let e=mr||await Zu(),t=ga||await e_(),r=Ra||await pU();return{connection:e,jsm:t,js:r}}a(qs,"getNATSReferences");async function o6(e){let t=Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await dU.getClusterUser(),s=await ER(t,r,n),i=fR(),o=s.subscribe(i),c=[],l,_=(async()=>{for await(let u of o){let d=fU.decode(u.data);d.response_time=Date.now()-l,c.push(d)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await yE.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(o6,"getServerList");async function hR(e,t){let{jsm:r}=await qs(),n=Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:W8.File,retention:Q8.Limits,subjects:t,discard:j8.Old,max_msgs:s,max_bytes:i,max_age:n})}a(hR,"createLocalStream");async function mU(){let{jsm:e}=await qs(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(mU,"listStreams");async function a6(e){let{jsm:t}=await qs();await t.streams.delete(e)}a(a6,"deleteLocalStream");async function c6(e){let{connection:t}=await qs(),r=[],n=fR(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(fU.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(c6,"listRemoteStreams");async function l6(e,t=void 0,r=void 0){let{jsm:n,js:s}=await qs(),i=cU(),o={durable_name:i,ack_policy:_R.Explicit};t&&(o.deliver_policy=dR.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let u of l){let d=uR(u.data),E={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};if(u.headers&&(E.origin=u.headers.get(nr.MSG_HEADERS.ORIGIN)),_.push(E),u.ack(),u.info.pending===0)break}return await c.delete(),_}a(l6,"viewStream");async function*u6(e,t=void 0,r=void 0){let{jsm:n,js:s}=await qs(),i=cU(),o={durable_name:i,ack_policy:_R.Explicit};t&&(o.deliver_policy=dR.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of l){let u=uR(_.data);u[0]||(u=[u]);for(let d of u){let E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(E.origin=_.headers.get(nr.MSG_HEADERS.ORIGIN)),yield E}if(_.ack(),_.info.pending===0)break}await c.delete()}a(u6,"viewStreamIterator");async function _6(e,t,r,n){_s.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=SU(n,r);let{js:s}=await qs(),i=await wE(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:_U.encode(n);try{_s.trace(`publishToStream publishing to subject: ${o}`),e6(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return gU(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){_s.trace(`publishToStream creating stream: ${t}`);let u=o.split(".");u[2]="*",await hR(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(_6,"publishToStream");function SU(e,t){t===void 0&&(t=J8());let r=Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(nr.MSG_HEADERS.ORIGIN)&&r&&t.append(nr.MSG_HEADERS.ORIGIN,r),t}a(SU,"addNatsMsgHeader");function Pc(e){e=e.toLowerCase();let t=Xu.join(Qt.get(Ce.CONFIG_PARAMS.ROOTPATH),t6);if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Oa(cR)&&(cR={port:zu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:zu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+nr.SERVER_SUFFIX.HUB,config_file:nr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Xu.join(t,nr.PID_FILES.HUB),hdb_nats_path:t}),cR;if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Oa(aR)&&(aR={port:zu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:zu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+nr.SERVER_SUFFIX.LEAF,config_file:nr.NATS_CONFIG_FILES.LEAF_SERVER,domain:zu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+nr.SERVER_SUFFIX.LEAF,pid_file_path:Xu.join(t,nr.PID_FILES.LEAF),hdb_nats_path:t}),aR;_s.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Pc,"getServerConfig");async function TU(e,t,r,n){try{await e.consumers.add(t,{ack_policy:_R.Explicit,durable_name:r,deliver_policy:dR.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(TU,"createConsumer");async function d6(e,t,r){await e.consumers.delete(t,r)}a(d6,"removeConsumer");function f6(e){return e.split(".")[1]}a(f6,"extractServerName");async function E6(e,t,r=6e4,n=fR()){if(!yE.isObject(t))throw new Error("data param must be an object");let s=_U.encode(t),{connection:i}=await qs(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return uR(c.data)}a(E6,"request");function pR(e){return new Promise(async(t,r)=>{let n=q8(lR,["--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(pR,"reloadNATS");async function h6(){let{pid_file_path:e}=Pc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await pR(e)}a(h6,"reloadNATSHub");async function p6(){let{pid_file_path:e}=Pc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await pR(e)}a(p6,"reloadNATSLeaf");function m6(e,t,r){let n;switch(e.code){case aU.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case aU.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(m6,"requestErrorHandler");async function S6(e,t){let r=t+nr.SERVER_SUFFIX.LEAF,{connection:n}=await qs(),{jsm:s}=await y6(r),{schema:i,table:o}=e,c=IE.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await gU(async()=>{if(e.subscribe===!0)await TU(s,c,n.info.server_name,l);else try{await d6(s,c,n.info.server_name)}catch(_){_s.trace(_)}})}a(S6,"updateRemoteConsumer");async function T6(e,t,r,n){let s=IE.createNatsTableStreamName(e,t),i=r+nr.SERVER_SUFFIX.LEAF,o={type:Ce.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!uU&&V8()<Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=oR();await c(o)}await k8(o),n==="stop"&&await yE.async_set_timeout(1e3)}a(T6,"updateConsumerIterator");function gU(e){return F8.writeTransaction(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(gU,"exclusiveLock");async function RU(e,t){let r=IE.createNatsTableStreamName(e,t),n=await wE(),s=O6(e,t,n);await hR(r,[s])}a(RU,"createLocalTableStream");async function g6(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await RU(n,s)}}a(g6,"createTableStreams");async function AU(e,t,r=void 0){if(Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=IE.createNatsTableStreamName(e,t),{domain:s}=Pc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Zu()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")_s.warn(n);else throw n}}a(AU,"purgeTableStream");async function R6(e,t){if(Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await AU(e,t[r])}a(R6,"purgeSchemaTableStreams");async function A6(e){return(await e_()).streams.info(e)}a(A6,"getStreamInfo");function O6(e,t,r){return`${nr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(O6,"createSubjectName");async function wE(){if(Ju)return Ju;if(Ju=(await e_())?.nc?.info?.server_name,Ju===void 0)throw new Error("Unable to get jetstream manager server name");return Ju}a(wE,"getJsmServerName");async function b6(){let e=await e_(),t=await wE(),r=await mU();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=N6(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let u=_.join(".");_s.trace(`Updating stream subject name from: ${i} to: ${u}`),s.subjects[0]=u,await e.streams.update(s.name,s)}}a(b6,"updateLocalStreams");function N6(e){let{config:t}=e,r=!1,n=Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(N6,"updateStreamLimits");async function y6(e){let t,r;try{t=await mr.jetstream({domain:e}),r=await mr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw _s.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(y6,"connectToRemoteJS")});var PE=R((MRe,IU)=>{"use strict";var Mc=Cf(),Uc=DM(),I6=k(),w6=require("uuid").v4,PRe=require("clone"),DE=hi(),vc=L(),C6=require("util"),Eo=Hn(),{handleHDBError:xr,hdb_errors:D6}=ie(),{HDB_ERROR_MSGS:CE,HTTP_STATUS_CODES:Gr}=D6,{SchemaEventMsg:LE}=os(),bU=gt(),{getDatabases:L6}=(Re(),ae(Ve)),{transformReq:Bc}=Y();IU.exports={createSchema:P6,createSchemaStructure:NU,createTable:M6,createTableStructure:yU,createAttribute:x6,dropSchema:U6,dropTable:v6,dropAttribute:B6,getBackup:G6};async function P6(e){let t=await NU(e);return DE.signalSchemaChange(new LE(process.pid,e.operation,e.schema)),t}a(P6,"createSchema");async function NU(e){let t=Mc.schema_object(e);if(t)throw xr(t,t.message,Gr.BAD_REQUEST,void 0,void 0,!0);if(Bc(e),!await Uc.checkSchemaExists(e.schema))throw xr(new Error,CE.SCHEMA_EXISTS_ERR(e.schema),Gr.BAD_REQUEST,vc.LOG_LEVELS.ERROR,CE.SCHEMA_EXISTS_ERR(e.schema),!0);return await Eo.createSchema(e),`database '${e.schema}' successfully created`}a(NU,"createSchemaStructure");async function M6(e){return Bc(e),e.hash_attribute=e.primary_key??e.hash_attribute,await yU(e)}a(M6,"createTable");async function yU(e){let t=Mc.create_table_object(e);if(t)throw xr(t,t.message,Gr.BAD_REQUEST,void 0,void 0,!0);if(Mc.validateTableResidence(e.residence),!await Uc.checkSchemaTableExists(e.schema,e.table))throw xr(new Error,CE.TABLE_EXISTS_ERR(e.schema,e.table),Gr.BAD_REQUEST,vc.LOG_LEVELS.ERROR,CE.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:w6(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Eo.createTable(n,e);else throw xr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Gr.BAD_REQUEST);else await Eo.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(yU,"createTableStructure");async function U6(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Mc.schema_object(e),n=t??r;if(n)throw xr(n,n.message,Gr.BAD_REQUEST,void 0,void 0,!0);Bc(e);let s=await Uc.checkSchemaExists(e.schema);if(s)throw xr(new Error,s,Gr.NOT_FOUND,vc.LOG_LEVELS.ERROR,s,!0);let i=await Uc.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Eo.dropSchema(e),DE.signalSchemaChange(new LE(process.pid,e.operation,e.schema)),await bU.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(U6,"dropSchema");async function v6(e){let t=Mc.table_object(e);if(t)throw xr(t,t.message,Gr.BAD_REQUEST,void 0,void 0,!0);Bc(e);let r=await Uc.checkSchemaTableExists(e.schema,e.table);if(r)throw xr(new Error,r,Gr.NOT_FOUND,vc.LOG_LEVELS.ERROR,r,!0);return await Eo.dropTable(e),await bU.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(v6,"dropTable");async function B6(e){let t=Mc.attribute_object(e);if(t)throw xr(t,t.message,Gr.BAD_REQUEST,void 0,void 0,!0);Bc(e);let r=await Uc.checkSchemaTableExists(e.schema,e.table);if(r)throw xr(new Error,r,Gr.NOT_FOUND,vc.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw xr(new Error,"You cannot drop a hash attribute",Gr.BAD_REQUEST,void 0,void 0,!0);if(vc.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw xr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Gr.BAD_REQUEST,void 0,void 0,!0);try{return await Eo.dropAttribute(e),H6(e),DE.signalSchemaChange(new LE(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw I6.error(`Got an error deleting attribute ${C6.inspect(e)}.`),n}}a(B6,"dropAttribute");function H6(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(H6,"dropAttributeFromGlobal");async function x6(e){Bc(e);let t=L6()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw xr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Gr.BAD_REQUEST,void 0,void 0,!0);return await Eo.createAttribute(e),DE.signalSchemaChange(new LE(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(x6,"createAttribute");function G6(e){return Eo.getBackup(e)}a(G6,"getBackup")});var CU=R((vRe,wU)=>{"use strict";var{OPERATIONS_ENUM:q6}=L(),mR=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=q6.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};wU.exports=mR});var SR=R((xRe,UU)=>{"use strict";var F6=Hn(),HRe=CU(),ME=Y(),UE=L(),k6=X(),{handleHDBError:DU,hdb_errors:$6}=ie(),{HDB_ERROR_MSGS:LU,HTTP_STATUS_CODES:PU}=$6,V6=Object.values(UE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),MU="To use this operation audit log must be enabled in harperdb-config.yaml";UU.exports=Y6;async function Y6(e){if(ME.isEmpty(e.schema))throw new Error(LU.SCHEMA_REQUIRED_ERR);if(ME.isEmpty(e.table))throw new Error(LU.TABLE_REQUIRED_ERR);if(!k6.get(UE.CONFIG_PARAMS.LOGGING_AUDITLOG))throw DU(new Error,MU,PU.BAD_REQUEST,UE.LOG_LEVELS.ERROR,MU,!0);let t=ME.checkSchemaTableExist(e.schema,e.table);if(t)throw DU(new Error,t,PU.NOT_FOUND,UE.LOG_LEVELS.ERROR,t,!0);if(!ME.isEmpty(e.search_type)&&V6.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await F6.readAuditLog(e)}a(Y6,"readAuditLog")});var BU=R((qRe,vU)=>{"use strict";var{OPERATIONS_ENUM:K6}=L(),TR=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=K6.GET_BACKUP,this.schema=t,this.table=r}};vU.exports=TR});var GU=R((VRe,xU)=>{"use strict";var W6=Hn(),kRe=BU(),gR=Y(),Q6=L(),$Re=X(),{handleHDBError:j6,hdb_errors:z6}=ie(),{HDB_ERROR_MSGS:HU,HTTP_STATUS_CODES:J6}=z6;xU.exports=X6;async function X6(e){if(gR.isEmpty(e.schema))throw new Error(HU.SCHEMA_REQUIRED_ERR);if(gR.isEmpty(e.table))throw new Error(HU.TABLE_REQUIRED_ERR);let t=gR.checkSchemaTableExist(e.schema,e.table);if(t)throw j6(new Error,t,J6.NOT_FOUND,Q6.LOG_LEVELS.ERROR,t,!0);return await W6.getBackup(read_audit_log_object)}a(X6,"getBackup")});var YU=R((KRe,VU)=>{var ho=require("validate.js"),FU=nt(),Hc=L(),{handleHDBError:Z6,hdb_errors:e9}=ie(),{HDB_ERROR_MSGS:Rt,HTTP_STATUS_CODES:t9}=e9,RR=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),r9={STRUCTURE_USER:"structure_user"},qU=Object.values(Hc.ROLE_TYPES_ENUM),n9="attribute_permissions",s9="attribute_name",{PERMS_CRUD_ENUM:xc}=Hc,i9=[n9,...Object.values(xc)],kU=[xc.READ,xc.INSERT,xc.UPDATE],o9=[s9,...kU];function a9(e){let t=RR();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,$U(e,t)}a(a9,"addRoleValidation");function c9(e){let t=RR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,$U(e,t)}a(c9,"alterRoleValidation");function l9(e){let t=RR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,FU.validateObject(e,t)}a(l9,"dropRoleValidation");var u9=["operation","role","id","permission","hdb_user","hdb_auth_header"];function $U(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)u9.includes(n[o])||s.push(n[o]);s.length>0&&wt(Rt.INVALID_ROLE_JSON_KEYS(s),r);let i=FU.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{wt(o,r)}),e.permission){let o=_9(e);o&&wt(o,r),qU.forEach(c=>{e.permission[c]&&!ho.isBoolean(e.permission[c])&&wt(Rt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(qU.indexOf(o)<0){if(o===r9.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let _=0,u=l.length;_<u;_++){let d=l[_];global.hdb_schema[d]||wt(Rt.SCHEMA_NOT_FOUND(d),r)}continue}wt(Rt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){wt(Rt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let _=c.tables[l];if(!l||!global.hdb_schema[o][l]){wt(Rt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(_).forEach(u=>{i9.includes(u)||wt(Rt.INVALID_PERM_KEY(u),r,o,l)}),Object.values(xc).forEach(u=>{ho.isDefined(_[u])?ho.isBoolean(_[u])||wt(Rt.TABLE_PERM_NOT_BOOLEAN(u),r,o,l):wt(Rt.TABLE_PERM_MISSING(u),r,o,l)}),ho.isDefined(_.attribute_permissions)){if(!ho.isArray(_.attribute_permissions)){wt(Rt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}}else{wt(Rt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}if(_.attribute_permissions){let u=global.hdb_schema[o][l].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in _.attribute_permissions){let f=_.attribute_permissions[E];if(Object.keys(f).forEach(m=>{!o9.includes(m)&&m!==xc.DELETE&&wt(Rt.INVALID_ATTR_PERM_KEY(m),r,o,l)}),!ho.isDefined(f.attribute_name)){wt(Rt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=f.attribute_name;if(!u.includes(h)){wt(Rt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}kU.forEach(m=>{ho.isDefined(f[m])?ho.isBoolean(f[m])||wt(Rt.ATTR_PERM_NOT_BOOLEAN(m,h),r,o,l):wt(Rt.ATTR_PERM_MISSING(m,h),r,o,l)}),!d.read&&f.read===!0&&(d.read=!0),!d.insert&&f.insert===!0&&(d.insert=!0),!d.update&&f.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let E=`${o}.${l}`;wt(Rt.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,l)}}}}return d9(r)}a($U,"customValidate");VU.exports={addRoleValidation:a9,alterRoleValidation:c9,dropRoleValidation:l9};function _9(e){let{operation:t,permission:r}=e;if(t===Hc.OPERATIONS_ENUM.ADD_ROLE||t===Hc.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return Rt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Hc.ROLE_TYPES_ENUM.SUPER_USER:Hc.ROLE_TYPES_ENUM.CLUSTER_USER;return Rt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(_9,"validateNoSUPerms");function d9(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:Rt.ROLE_PERMS_ERROR,...e};return Z6(new Error,n,t9.BAD_REQUEST)}else return null}a(d9,"generateRolePermResponse");function wt(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(wt,"addPermError")});var BE=R((QRe,jU)=>{"use strict";var KU=Pr(),WU=ur(),f9=oa(),OR=YU(),bR=hi(),E9=require("uuid").v4,h9=require("util"),vE=L(),p9=Y(),NR=WU.searchByValue,m9=WU.searchByHash,S9=h9.promisify(f9.delete),T9=as(),g9=yc(),{hdb_errors:R9,handleHDBError:ba}=ie(),{HDB_ERROR_MSGS:QU,HTTP_STATUS_CODES:t_}=R9,{UserEventMsg:yR}=os();jU.exports={addRole:A9,alterRole:O9,dropRole:b9,listRoles:N9};function AR(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(AR,"scrubRoleDetails");async function A9(e){let t=OR.addRoleValidation(e);if(t)throw t;e=AR(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 NR(r)||[])}catch(i){throw ba(i)}if(n&&n.length>0)throw ba(new Error,QU.ROLE_ALREADY_EXISTS(e.role),t_.CONFLICT,void 0,void 0,!0);e.id||(e.id=E9());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await KU.insert(s),bR.signalUserChange(new yR(process.pid)),e=AR(e),e}a(A9,"addRole");async function O9(e){let t=OR.alterRoleValidation(e);if(t)throw t;e=AR(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await KU.update(r)}catch(s){throw ba(s)}if(n&&n?.message==="updated 0 of 1 records")throw ba(new Error,"Invalid role id",t_.BAD_REQUEST,void 0,void 0,!0);return await bR.signalUserChange(new yR(process.pid)),e}a(O9,"alterRole");async function b9(e){let t=OR.dropRoleValidation(e);if(t)throw ba(new Error,t,t_.BAD_REQUEST,void 0,void 0,!0);let r=new g9(vE.SYSTEM_SCHEMA_NAME,vE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await m9(r));if(n.length===0)throw ba(new Error,QU.ROLE_NOT_FOUND,t_.NOT_FOUND,void 0,void 0,!0);let s=new T9(vE.SYSTEM_SCHEMA_NAME,vE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await NR(s)),o=!1;if(p9.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw ba(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,t_.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await S9(c),bR.signalUserChange(new yR(process.pid)),`${n[0].role} successfully deleted`}a(b9,"dropRole");async function N9(){return NR({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(N9,"listRoles")});var ZU=R((zRe,XU)=>{"use strict";var y9=X(),po=require("joi"),I9=nt(),zU=require("moment"),w9=require("fs-extra"),IR=require("path"),C9=require("lodash"),r_=L(),{LOG_LEVELS:Na}=L(),D9="YYYY-MM-DD hh:mm:ss",L9=IR.resolve(__dirname,"../logs");XU.exports=function(e){return I9.validateBySchema(e,P9)};var P9=po.object({from:po.custom(JU),until:po.custom(JU),level:po.valid(Na.NOTIFY,Na.FATAL,Na.ERROR,Na.WARN,Na.INFO,Na.DEBUG,Na.TRACE),order:po.valid("asc","desc"),limit:po.number().min(1),start:po.number().min(0),log_name:po.custom(M9)});function JU(e,t){if(zU(e,zU.ISO_8601).format(D9)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(JU,"validateDatetime");function M9(e,t){if(C9.invert(r_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=y9.get(r_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?r_.LOG_NAMES.HDB:e,i=s===r_.LOG_NAMES.INSTALL?IR.join(L9,r_.LOG_NAMES.INSTALL):IR.join(n,s);return w9.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(M9,"validateReadLogPath")});var CR=R((XRe,tv)=>{"use strict";var HE=L(),U9=k(),v9=X(),B9=ZU(),wR=require("path"),ev=require("fs-extra"),{once:H9}=require("events"),{handleHDBError:x9,hdb_errors:G9}=ie(),{PACKAGE_ROOT:q9}=L(),F9=wR.join(q9,"logs"),k9=1e3,$9=200;tv.exports=V9;async function V9(e){let t=B9(e);if(t)throw x9(t,t.message,G9.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=v9.get(HE.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?HE.LOG_NAMES.HDB:e.log_name,s=n===HE.LOG_NAMES.INSTALL?wR.join(F9,HE.LOG_NAMES.INSTALL):wR.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,l=c?new Date(e.from):void 0,_=e.until!==void 0,u=_?new Date(e.until):void 0,d=e.limit===void 0?k9:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,m=0;E==="desc"&&!l&&!u&&(m=Math.max(ev.statSync(s).size-(h+5)*$9,0));let S=ev.createReadStream(s,{start:m});S.on("error",v=>{U9.error(v)});let g=0,T=[],N="",b;S.on("data",v=>{let q=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;v=N+v;let M=0,W;for(;(W=q.exec(v))&&!S.destroyed;){b&&(b.message=v.slice(M,W.index),U(b));let[z,Z,ce]=W,_e=ce.split("] ["),de=_e[0],xe=_e[1];_e.splice(0,2),b={timestamp:Z,thread:de,level:xe,tags:_e,message:""},M=W.index+z.length}N=v.slice(M)}),S.on("end",v=>{S.destroyed||b&&(b.message=N.trim(),U(b))}),S.resume();function U(v){let q,M,W;switch(!0){case(i&&c&&_):q=new Date(v.timestamp),M=new Date(l),W=new Date(u),v.level===o&&q>=M&&q<=W&&g<f?g++:v.level===o&&q>=M&&q<=W&&(mo(v,E,T),g++,g===h&&S.destroy());break;case(i&&c):q=new Date(v.timestamp),M=new Date(l),v.level===o&&q>=M&&g<f?g++:v.level===o&&q>=M&&(mo(v,E,T),g++,g===h&&S.destroy());break;case(i&&_):q=new Date(v.timestamp),W=new Date(u),v.level===o&&q<=W&&g<f?g++:v.level===o&&q<=W&&(mo(v,E,T),g++,g===h&&S.destroy());break;case(c&&_):q=new Date(v.timestamp),M=new Date(l),W=new Date(u),q>=M&&q<=W&&g<f?g++:q>=M&&q<=W&&(mo(v,E,T),g++,g===h&&S.destroy());break;case i:v.level===o&&g<f?g++:v.level===o&&(mo(v,E,T),g++,g===h&&S.destroy());break;case c:q=new Date(v.timestamp),M=new Date(l),q>=M&&g<f?g++:q>=M&&g>=f&&(mo(v,E,T),g++,g===h&&S.destroy());break;case _:q=new Date(v.timestamp),W=new Date(u),q<=W&&g<f?g++:q<=W&&g>=f&&(mo(v,E,T),g++,g===h&&S.destroy());break;default:g<f?g++:(mo(v,E,T),g++,g===h&&S.destroy())}}return a(U,"onLogMessage"),await H9(S,"close"),T}a(V9,"readLog");function mo(e,t,r){t==="desc"?Y9(e,r):t==="asc"?K9(e,r):r.push(e)}a(mo,"pushLineToResult");function Y9(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(Y9,"insertDescending");function K9(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(K9,"insertAscending")});var xE=R((nAe,iv)=>{"use strict";var DR=require("joi"),{string:n_,boolean:rv,date:W9}=DR.types(),Q9=nt(),{validateSchemaExists:eAe,validateTableExists:tAe,validateSchemaName:rAe}=Ps(),j9=L(),z9=Ze(),nv=X();nv.initSync();var J9=n_.invalid(nv.get(j9.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(z9.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(),sv={operation:n_.valid("add_node","update_node","set_node_replication"),node_name:J9,subscriptions:DR.array().items({table:n_.optional(),schema:n_.optional(),database:n_.optional(),subscribe:rv.required(),publish:rv.required().custom(Z9),start_time:W9.iso()}).min(1).required()};function X9(e){return Q9.validateBySchema(e,DR.object(sv))}a(X9,"addUpdateNodeValidator");function Z9(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(Z9,"checkForFalsy");iv.exports={addUpdateNodeValidator:X9,validation_schema:sv}});var av=R((iAe,ov)=>{var e7=nt(),t7={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};ov.exports=function(e){return e7.validateObject(e,t7)}});var GE=R((oAe,cv)=>{"use strict";var r7=L().OPERATIONS_ENUM,LR=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=r7.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};cv.exports=LR});var uv=R((cAe,lv)=>{"use strict";var n7={OPERATION:"operation",REFRESH:"refresh"},PR=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},MR=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};lv.exports={JWTTokens:PR,TOKEN_TYPE_ENUM:n7,JWTRSAKeys:MR}});var o_=R((uAe,Ev)=>{"use strict";var i_=require("jsonwebtoken"),UR=require("fs-extra"),vR=Y(),xn=L(),{handleHDBError:qr,hdb_errors:s7}=ie(),{HTTP_STATUS_CODES:Fr,AUTHENTICATION_ERROR_MSGS:kr}=s7,s_=k(),_v=qf(),xR=Ur(),i7=Pr().update,o7=GE(),a7=hi(),{UserEventMsg:c7}=os(),So=X();So.initSync();var BR=require("path"),{JWTTokens:l7,JWTRSAKeys:u7,TOKEN_TYPE_ENUM:qE}=uv(),_7=So.get(xn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?So.get(xn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",d7=So.get(xn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?So.get(xn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",FE="RS256",HR;Ev.exports={createTokens:f7,validateOperationToken:h7,refreshOperationToken:E7,validateRefreshToken:fv};async function f7(e){if(vR.isEmpty(e)||typeof e!="object")throw qr(new Error,kr.INVALID_AUTH_OBJECT,Fr.BAD_REQUEST,void 0,void 0,!0);if(vR.isEmpty(e.username))throw qr(new Error,kr.USERNAME_REQUIRED,Fr.BAD_REQUEST,void 0,void 0,!0);if(vR.isEmpty(e.password))throw qr(new Error,kr.PASSWORD_REQUIRED,Fr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await xR.findAndValidateUser(e.username,e.password),!t)throw qr(new Error,kr.INVALID_CREDENTIALS,Fr.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw s_.error(E),qr(new Error,kr.INVALID_CREDENTIALS,Fr.UNAUTHORIZED,void 0,void 0,!0)}let r=await kE(),n=!1,s=!1;t.role&&t.role.permission&&(n=t.role.permission.super_user===!0,s=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s},o=await dv(i,r.private_key,r.passphrase),c=await i_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:d7,algorithm:FE,subject:qE.REFRESH}),l=_v.hash(c),_=new o7(xn.SYSTEM_SCHEMA_NAME,xn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),u,d;try{u=await i7(_)}catch(E){s_.error(E),d=E}if(d!==void 0||u.skipped_hashes.length>0)throw qr(new Error,kr.REFRESH_TOKEN_SAVE_FAILED,Fr.INTERNAL_SERVER_ERROR);return a7.signalUserChange(new c7(process.pid)),new l7(o,c)}a(f7,"createTokens");async function dv(e,t,r){return await i_.sign(e,{key:t,passphrase:r},{expiresIn:_7,algorithm:FE,subject:qE.OPERATION})}a(dv,"signOperationToken");async function kE(){if(HR===void 0)try{let e=BR.join(So.getHdbBasePath(),xn.LICENSE_KEY_DIR_NAME,xn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=BR.join(So.getHdbBasePath(),xn.LICENSE_KEY_DIR_NAME,xn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=BR.join(So.getHdbBasePath(),xn.LICENSE_KEY_DIR_NAME,xn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await UR.readFile(e)).toString(),s=(await UR.readFile(t)).toString(),i=(await UR.readFile(r)).toString();HR=new u7(i,s,n)}catch(e){throw s_.error(e),qr(new Error,kr.NO_ENCRYPTION_KEYS,Fr.INTERNAL_SERVER_ERROR)}return HR}a(kE,"getJWTRSAKeys");async function E7(e){if(!e)throw qr(new Error,kr.INVALID_BODY,Fr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw qr(new Error,kr.REFRESH_TOKEN_REQUIRED,Fr.BAD_REQUEST,void 0,void 0,!0);await fv(e.refresh_token);let t=await kE(),r=await i_.decode(e.refresh_token);return{operation_token:await dv({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(E7,"refreshOperationToken");async function h7(e){try{let t=await kE(),r=await i_.verify(e,t.public_key,{algorithms:FE,subject:qE.OPERATION});return await xR.findAndValidateUser(r.username,void 0,!1)}catch(t){throw s_.warn(t),t.name&&t.name==="TokenExpiredError"?qr(new Error,kr.TOKEN_EXPIRED,Fr.FORBIDDEN):qr(new Error,kr.INVALID_TOKEN,Fr.UNAUTHORIZED)}}a(h7,"validateOperationToken");async function fv(e){let t;try{let r=await kE(),n=await i_.verify(e,r.public_key,{algorithms:FE,subject:qE.REFRESH});t=await xR.findAndValidateUser(n.username,void 0,!1)}catch(r){throw s_.warn(r),r.name&&r.name==="TokenExpiredError"?qr(new Error,kr.TOKEN_EXPIRED,Fr.FORBIDDEN):qr(new Error,kr.INVALID_TOKEN,Fr.UNAUTHORIZED)}if(!_v.validate(t.refresh_token,e))throw qr(new Error,kr.INVALID_TOKEN,Fr.UNAUTHORIZED);return t}a(fv,"validateRefreshToken")});var GR=R((fAe,mv)=>{"use strict";var p7=av(),Gc=require("passport"),m7=require("passport-local").Strategy,S7=require("passport-http").BasicStrategy,T7=require("util"),g7=Ur(),pv=T7.callbackify(g7.findAndValidateUser),dAe=nn(),R7=L(),hv=o_();Gc.use(new m7(function(e,t,r){pv(e,t,r)}));Gc.use(new S7(function(e,t,r){pv(e,t,r)}));Gc.serializeUser(function(e,t){t(null,e)});Gc.deserializeUser(function(e,t){t(null,e)});function A7(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":Gc.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===R7.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?hv.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):hv.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Gc.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(A7,"authorize");function O7(e,t){let r=p7(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(O7,"checkPermissions");mv.exports={authorize:A7,checkPermissions:O7}});var qc=R((hAe,Sv)=>{"use strict";var qR=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},FR=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};Sv.exports={Node:qR,NodeSubscription:FR}});var gv=R((mAe,Tv)=>{"use strict";var b7=L().OPERATIONS_ENUM,kR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=b7.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Tv.exports=kR});var a_=R((TAe,Rv)=>{"use strict";var $R=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},VR=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)}};Rv.exports={RemotePayloadObject:$R,RemotePayloadSubscription:VR}});var Ov=R((RAe,Av)=>{"use strict";var YR=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}};Av.exports=YR});var yv=R((yAe,Nv)=>{"use strict";var N7=Ov(),OAe=_t(),bv=Ye(),y7=k(),{getSchemaPath:bAe,getTransactionAuditStorePath:NAe}=Je(),{getDatabases:I7}=(Re(),ae(Ve));Nv.exports=w7;async function w7(e){let t=new N7;try{let r=I7()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await bv.environmentDataSize(schema_path,e.name),o=await bv.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){y7.warn(`unable to stat table dbi due to ${r}`)}return t}a(w7,"lmdbGetTableSize")});var wv=R((wAe,Iv)=>{"use strict";var KR=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};Iv.exports=KR});var gi=R((UAe,Pv)=>{"use strict";var C7=require("fs-extra"),D7=require("path"),Sr=require("systeminformation"),To=k(),Cv=gt(),DAe=Ze(),VE=L(),L7=yv(),P7=Ei(),{getThreadInfo:Dv}=rt(),nA=X();nA.initSync();var M7=wv(),{openEnvironment:LAe}=Ye(),{getSchemaPath:PAe}=Je(),{database:MAe,databases:WR}=(Re(),ae(Ve)),$E;Pv.exports={getHDBProcessInfo:JR,getNetworkInfo:ZR,getDiskInfo:XR,getMemoryInfo:zR,getCPUInfo:jR,getTimeInfo:QR,getSystemInformation:eA,systemInformation:U7,getTableSize:tA,getMetrics:rA};function QR(){return Sr.time()}a(QR,"getTimeInfo");async function jR(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:_,...u}=await Sr.cpu();u.cpu_speed=await Sr.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:m,raw_currentload_user:S,cpus:g,...T}=await Sr.currentLoad();return T.cpus=[],g.forEach(N=>{let{raw_load:b,raw_load_idle:U,raw_load_irq:v,raw_load_nice:q,raw_load_system:M,raw_load_user:W,...z}=N;T.cpus.push(z)}),u.current_load=T,u}catch(e){return To.error(`error in getCPUInfo: ${e}`),{}}}a(jR,"getCPUInfo");async function zR(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Sr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return To.error(`error in getMemoryInfo: ${e}`),{}}}a(zR,"getMemoryInfo");async function JR(){let e={core:[],clustering:[]};try{let t=await Sr.processes(),r;try{r=Number.parseInt(await C7.readFile(D7.join(nA.get(VE.CONFIG_PARAMS.ROOTPATH),VE.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===VE.NODE_ERROR_CODES.ENOENT)To.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return To.error(`error in getHDBProcessInfo: ${t}`),e}}a(JR,"getHDBProcessInfo");async function XR(){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:l,..._}=await Sr.fsStats();return e.read_write=_,e.size=await Sr.fsSize(),e}catch(t){return To.error(`error in getDiskInfo: ${t}`),e}}a(XR,"getDiskInfo");async function ZR(){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:l,ieee8021xAuth:_,ieee8021xState:u,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 To.error(`error in getNetworkInfo: ${t}`),e}}a(ZR,"getNetworkInfo");async function eA(){if($E!==void 0)return $E;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Sr.osInfo();e=c;let l=await Sr.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,$E=e,$E}catch(t){return To.error(`error in getSystemInformation: ${t}`),e}}a(eA,"getSystemInformation");async function tA(){let e=[],t=await P7.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await L7(n));return e}a(tA,"getTableSize");async function rA(){let e={};for(let t in WR){let r=e[t]={},n=r.tables={};for(let s in WR[t])try{let i=WR[t][s];r.readers||(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[_,u,d]=l.trim().split(" ");return{pid:_,thread:u,txnid:d}}),i.primaryStore.auditStore&&(r.audit=i.auditStore.getStats()));let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){To.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(rA,"getMetrics");async function Lv(){if(nA.get(VE.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await Cv.getNATSReferences(),t=await Cv.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(Lv,"getNatsStreamInfo");async function U7(e){let t=new M7;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await eA(),t.time=QR(),t.cpu=await jR(),t.memory=await zR(),t.disk=await XR(),t.network=await ZR(),t.harperdb_processes=await JR(),t.table_size=await tA(),t.metrics=await rA(),t.threads=await Dv(),t.replication=await Lv(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await eA();break;case"time":t.time=QR();break;case"cpu":t.cpu=await jR();break;case"memory":t.memory=await zR();break;case"disk":t.disk=await XR();break;case"network":t.network=await ZR();break;case"harperdb_processes":t.harperdb_processes=await JR();break;case"table_size":t.table_size=await tA();break;case"database_metrics":case"metrics":t.metrics=await rA();break;case"threads":t.threads=await Dv();break;case"replication":t.replication=await Lv();break;default:break}return t}a(U7,"systemInformation")});var Ri=R((BAe,Mv)=>{"use strict";Mv.exports={version:v7,printVersion:B7};var YE=Sa();function v7(){if(YE)return YE.version}a(v7,"version");function B7(){YE&&console.log(`HarperDB Version ${YE.version}`)}a(B7,"printVersion")});var Ai=R((qAe,Hv)=>{"use strict";var H7=Pr(),sA=Y(),x7=require("util"),ya=L(),Uv=X();Uv.initSync();var G7=GR(),vv=ur(),{Node:xAe,NodeSubscription:GAe}=qc(),q7=yc(),F7=gv(),{RemotePayloadObject:k7,RemotePayloadSubscription:$7}=a_(),{handleHDBError:V7,hdb_errors:Y7}=ie(),{HTTP_STATUS_CODES:K7,HDB_ERROR_MSGS:W7}=Y7,Q7=as(),j7=gi(),z7=Ri(),{getDatabases:J7}=(Re(),ae(Ve)),X7=x7.promisify(G7.authorize),Z7=vv.searchByHash,eee=vv.searchByValue;Hv.exports={authHeaderToUser:tee,isEmpty:ree,getNodeRecord:nee,upsertNodeRecord:see,buildNodePayloads:iee,checkClusteringEnabled:oee,getAllNodeRecords:aee,getSystemInfo:cee,reverseSubscription:Bv};async function tee(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await X7(t,null),e}a(tee,"authHeaderToUser");function ree(e){return e==null}a(ree,"isEmpty");async function nee(e){let t=new q7(ya.SYSTEM_SCHEMA_NAME,ya.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Z7(t)}a(nee,"getNodeRecord");async function see(e){let t=new F7(ya.SYSTEM_SCHEMA_NAME,ya.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return H7.upsert(t)}a(see,"upsertNodeRecord");function Bv(e){if(sA.isEmpty(e.subscribe)||sA.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(Bv,"reverseSubscription");function iee(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:_}=c,u=sA.getTableHashAttribute(l,_),{subscribe:d,publish:E}=Bv(c),f=J7()[l]?.[_],h=new $7(l,_,u,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);s.push(h)}return new k7(r,t,s,n)}a(iee,"buildNodePayloads");function oee(){if(!Uv.get(ya.CONFIG_PARAMS.CLUSTERING_ENABLED))throw V7(new Error,W7.CLUSTERING_NOT_ENABLED,K7.BAD_REQUEST,void 0,void 0,!0)}a(oee,"checkClusteringEnabled");async function aee(){let e=new Q7(ya.SYSTEM_SCHEMA_NAME,ya.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await eee(e))}a(aee,"getAllNodeRecords");async function cee(){let e=await j7.getSystemInformation();return{hdb_version:z7.version(),node_version:e.node_version,platform:e.platform}}a(cee,"getSystemInfo")});var iA=R((kAe,Yv)=>{"use strict";var KE=gt(),xv=Y(),Gv=Ze(),qv=L(),WE=k(),Fv=PE(),lee=Bu(),{RemotePayloadObject:uee}=a_(),{handleHDBError:kv,hdb_errors:_ee}=ie(),{HTTP_STATUS_CODES:$v}=_ee,{NodeSubscription:Vv}=qc();Yv.exports=dee;async function dee(e,t){let r;try{r=await KE.request(`${t}.${Gv.REQUEST_SUFFIX}`,new uee(qv.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),WE.trace("Response from remote describe all request:",r)}catch(o){WE.error(`addNode received error from describe all request to remote node: ${o}`);let c=KE.requestErrorHandler(o,"add_node",t);throw kv(new Error,c,$v.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===Gv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw kv(new Error,o,$v.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,l=o.database??o.schema??"data";if(l===qv.SYSTEM_SCHEMA_NAME){await KE.createLocalTableStream(l,c);let h=new Vv(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=xv.doesSchemaExist(l),u=n[l]!==void 0,d=c?xv.doesTableExist(l,c):!0,E=c?n?.[l]?.[c]!==void 0:!0;if(!_&&!u||!d&&!E){s.push(o);continue}if(!_&&u&&(WE.trace(`addNode creating schema: ${l}`),await Fv.createSchema({operation:"create_schema",schema:l})),!d&&E){WE.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new lee(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await Fv.createTable(h)}await KE.createLocalTableStream(l,c);let f=new Vv(l,c,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:s}}a(dee,"reviewSubscriptions")});var u_=R((VAe,Qv)=>{"use strict";var{handleHDBError:QE,hdb_errors:fee}=ie(),{HTTP_STATUS_CODES:jE}=fee,{addUpdateNodeValidator:Eee}=xE(),zE=k(),Wv=L(),Kv=Ze(),hee=Y(),c_=gt(),l_=Ai(),pee=X(),mee=iA(),{Node:See,NodeSubscription:Tee}=qc(),{broadcast:gee}=rt(),Ree="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Aee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Oee=pee.get(Wv.CONFIG_PARAMS.CLUSTERING_NODENAME);Qv.exports=bee;async function bee(e,t=!1){zE.trace("addNode called with:",e),l_.checkClusteringEnabled();let r=Eee(e);if(r)throw QE(r,r.message,jE.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await l_.getNodeRecord(n);if(!hee.isEmptyOrZeroLength(d))throw QE(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,jE.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await mee(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Ree,o;let c=l_.buildNodePayloads(s,Oee,Wv.OPERATIONS_ENUM.ADD_NODE,await l_.getSystemInfo()),l=[];for(let d=0,E=s.length;d<E;d++){let f=s[d];s[d].start_time===void 0&&delete s[d].start_time,l.push(new Tee(f.schema,f.table,f.publish,f.subscribe))}zE.trace("addNode sending remote payload:",c);let _;try{_=await c_.request(`${n}.${Kv.REQUEST_SUFFIX}`,c)}catch(d){zE.error(`addNode received error from request: ${d}`);for(let f=0,h=s.length;f<h;f++){let m=s[f];m.publish=!1,m.subscribe=!1,await c_.updateRemoteConsumer(m,n)}let E=c_.requestErrorHandler(d,"add_node",n);throw QE(new Error,E,jE.INTERNAL_SERVER_ERROR,"error",E)}if(_.status===Kv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw QE(new Error,d,jE.INTERNAL_SERVER_ERROR,"error",d)}zE.trace(_);for(let d=0,E=s.length;d<E;d++){let f=s[d];await c_.updateRemoteConsumer(f,n),f.subscribe===!0&&await c_.updateConsumerIterator(f.schema,f.table,n,"start")}let u=new See(n,l,_.system_info);return await l_.upsertNodeRecord(u),gee({type:"nats_update"}),i.length>0?o.message=Aee:o.message=`Successfully added '${n}' to manifest`,o}a(bee,"addNode")});var cA=R((WAe,Jv)=>{"use strict";var{handleHDBError:oA,hdb_errors:Nee}=ie(),{HTTP_STATUS_CODES:aA}=Nee,{addUpdateNodeValidator:yee}=xE(),__=k(),zv=L(),jv=Ze(),KAe=Y(),d_=gt(),f_=Ai(),Iee=X(),{cloneDeep:wee}=require("lodash"),Cee=iA(),{Node:Dee,NodeSubscription:Lee}=qc(),{broadcast:Pee}=rt(),Mee="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Uee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",vee=Iee.get(zv.CONFIG_PARAMS.CLUSTERING_NODENAME);Jv.exports=Bee;async function Bee(e){__.trace("updateNode called with:",e),f_.checkClusteringEnabled();let t=yee(e);if(t)throw oA(t,t.message,aA.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await f_.getNodeRecord(r);s.length>0&&(n=wee(s));let{added:i,skipped:o}=await Cee(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Mee,c;let l=f_.buildNodePayloads(i,vee,zv.OPERATIONS_ENUM.UPDATE_NODE,await f_.getSystemInfo());for(let u=0,d=i.length;u<d;u++){let E=i[u];__.trace(`updateNode updating work stream for node: ${r} subscription:`,E),i[u].start_time===void 0&&delete i[u].start_time}__.trace("updateNode sending remote payload:",l);let _;try{_=await d_.request(`${r}.${jv.REQUEST_SUFFIX}`,l)}catch(u){__.error(`updateNode received error from request: ${u}`);let d=d_.requestErrorHandler(u,"update_node",r);throw oA(new Error,d,aA.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===jv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw oA(new Error,u,aA.INTERNAL_SERVER_ERROR,"error",u)}__.trace(_);for(let u=0,d=i.length;u<d;u++){let E=i[u];await d_.updateRemoteConsumer(E,r),E.subscribe===!0?await d_.updateConsumerIterator(E.schema,E.table,r,"start"):await d_.updateConsumerIterator(E.schema,E.table,r,"stop")}return n||(n=[new Dee(r,[],_.system_info)]),await Hee(n[0],i,_.system_info),o.length>0?c.message=Uee:c.message=`Successfully updated '${r}'`,c}a(Bee,"updateNode");async function Hee(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,_=e.subscriptions.length;l<_;l++){let u=n.subscriptions[l];if(u.schema===o.schema&&u.table===o.table){u.publish=o.publish,u.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new Lee(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await f_.upsertNodeRecord(n),Pee({type:"nats_update"})}a(Hee,"updateNodeTable")});var r0=R((jAe,t0)=>{"use strict";var e0=require("joi"),{string:Xv}=e0.types(),xee=nt(),Zv=L(),Gee=X(),qee=Ze();t0.exports=Fee;function Fee(e){let t=Xv.invalid(Gee.get(Zv.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(qee.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=e0.object({operation:Xv.valid(Zv.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return xee.validateBySchema(e,r)}a(Fee,"removeNodeValidator")});var XE=R((JAe,a0)=>{"use strict";var{handleHDBError:n0,hdb_errors:kee}=ie(),{HTTP_STATUS_CODES:s0}=kee,$ee=r0(),E_=k(),i0=Ai(),Vee=Y(),JE=L(),o0=Ze(),lA=gt(),Yee=X(),{RemotePayloadObject:Kee}=a_(),{NodeSubscription:Wee}=qc(),Qee=vu(),jee=oa(),{broadcast:zee}=rt(),Jee=Yee.get(JE.CONFIG_PARAMS.CLUSTERING_NODENAME);a0.exports=Xee;async function Xee(e){E_.trace("removeNode called with:",e),i0.checkClusteringEnabled();let t=$ee(e);if(t)throw n0(t,t.message,s0.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await i0.getNodeRecord(r);if(Vee.isEmptyOrZeroLength(n))throw n0(new Error,`Node '${r}' was not found.`,s0.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Kee(JE.OPERATIONS_ENUM.REMOVE_NODE,Jee,[]),i,o=!1;for(let l=0,_=n.subscriptions.length;l<_;l++){let u=n.subscriptions[l];u.subscribe===!0&&await lA.updateConsumerIterator(u.schema,u.table,r,"stop");try{await lA.updateRemoteConsumer(new Wee(u.schema,u.table,!1,!1),r)}catch(d){E_.error(d)}}try{i=await lA.request(`${r}.${o0.REQUEST_SUFFIX}`,s),E_.trace("Remove node reply from remote node:",r,i)}catch(l){E_.error("removeNode received error from request:",l),o=!0}let c=new Qee(JE.SYSTEM_SCHEMA_NAME,JE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await jee.deleteRecord(c),zee({type:"nats_update"}),i?.status===o0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(E_.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(Xee,"removeNode")});var u0=R((ZAe,l0)=>{"use strict";var c0=require("joi"),{string:Zee,array:ete}=c0.types(),tte=nt(),rte=xE();l0.exports=nte;function nte(e){let t=c0.object({operation:Zee.valid("configure_cluster").required(),connections:ete.items(rte.validation_schema).required()});return tte.validateBySchema(e,t)}a(nte,"configureClusterValidator")});var eh=R((tOe,h0)=>{"use strict";var ste=L(),ZE=k(),ite=Y(),ote=XE(),ate=u_(),_0=Ai(),cte=u0(),{handleHDBError:d0,hdb_errors:lte}=ie(),{HTTP_STATUS_CODES:f0}=lte,ute="Configure cluster complete.",_te="Failed to configure the cluster. Check the logs for more details.",dte="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";h0.exports=fte;async function fte(e){ZE.trace("configure cluster called with:",e),_0.checkClusteringEnabled();let t=cte(e);if(t)throw d0(t,t.message,f0.BAD_REQUEST,void 0,void 0,!0);let r=await _0.getAllNodeRecords(),n=[];for(let u=0,d=r.length;u<d;u++){let E=await E0(ote,{operation:ste.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[u].name},r[u].name);n.push(E)}ZE.trace("All results from configure_cluster remove node:",n);let s=[],i=e.connections.length;for(let u=0;u<i;u++){let d=e.connections[u],E=await E0(ate,d,d.node_name);s.push(E)}ZE.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,_=n.concat(s);for(let u=0,d=_.length;u<d;u++){let E=_[u];E.status==="rejected"&&(ZE.error(E),o.includes(E.node_name)||o.push(E.node_name)),(E?.result?.message?.includes?.("Successfully")||E?.result?.includes?.("Successfully"))&&(l=!0),!(typeof E.result=="string"&&E.result.includes("Successfully removed")||E.status==="rejected")&&c.push({node_name:E?.node_name,subscriptions:E?.result})}if(ite.isEmptyOrZeroLength(o))return{message:ute,connections:c};if(l)return{message:dte,failed_nodes:o,connections:c};throw d0(new Error,_te,f0.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(fte,"configureCluster");async function E0(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(E0,"functionWrapper")});var T0=R((nOe,S0)=>{"use strict";var h_=require("joi"),Ete=nt(),{validateSchemaExists:p0,validateTableExists:hte,validateSchemaName:m0}=Ps(),pte=h_.object({operation:h_.string().valid("purge_stream"),schema:h_.string().custom(p0).custom(m0).optional(),database:h_.string().custom(p0).custom(m0).optional(),table:h_.string().custom(hte).required()});function mte(e){return Ete.validateBySchema(e,pte)}a(mte,"purgeStreamValidator");S0.exports=mte});var uA=R((iOe,g0)=>{"use strict";var{handleHDBError:Ste,hdb_errors:Tte}=ie(),{HTTP_STATUS_CODES:gte}=Tte,Rte=T0(),Ate=gt(),Ote=Ai();g0.exports=bte;async function bte(e){e.schema=e.schema??e.database;let t=Rte(e);if(t)throw Ste(t,t.message,gte.BAD_REQUEST,void 0,void 0,!0);Ote.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await Ate.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(bte,"purgeStream")});var rh=R((aOe,y0)=>{"use strict";var dA=Ai(),Nte=gt(),O0=X(),th=L(),Ia=Ze(),yte=Y(),_A=k(),{RemotePayloadObject:Ite}=a_(),{ErrorCode:R0}=require("nats"),A0=O0.get(th.CONFIG_PARAMS.CLUSTERING_ENABLED),b0=O0.get(th.CONFIG_PARAMS.CLUSTERING_NODENAME);y0.exports={clusterStatus:wte,buildNodeStatus:N0};async function wte(){let e={node_name:b0,is_enabled:A0,connections:[]};if(!A0)return e;let t=await dA.getAllNodeRecords();if(yte.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(N0(t[n],e.connections));return await Promise.allSettled(r),e}a(wte,"clusterStatus");async function N0(e,t){let r=e.name,n=new Ite(th.OPERATIONS_ENUM.CLUSTER_STATUS,b0,void 0,await dA.getSystemInfo()),s,i,o=Ia.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Nte.request(Ia.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Ia.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Ia.CLUSTER_STATUS_STATUSES.CLOSED,_A.error(`Error getting node status from ${r} `,s))}catch(l){_A.warn(`Error getting node status from ${r}`,l),l.code===R0.NoResponders?o=Ia.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===R0.Timeout?o=Ia.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Ia.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Cte(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==th.PRE_4_0_0_VERSION&&await dA.upsertNodeRecord(l)}catch(l){_A.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(N0,"buildNodeStatus");function Cte(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(Cte,"NodeStatusObject")});var sh=R((lOe,I0)=>{"use strict";var{handleHDBError:Dte,hdb_errors:Lte}=ie(),{HTTP_STATUS_CODES:Pte}=Lte,Mte=gt(),Ute=Ai(),fA=Y(),nh=require("joi"),vte=nt(),Bte=2e3,Hte=nh.object({timeout:nh.number().min(1),connected_nodes:nh.boolean(),routes:nh.boolean()});I0.exports=xte;async function xte(e){Ute.checkClusteringEnabled();let t=vte.validateBySchema(e,Hte);if(t)throw Dte(t,t.message,Pte.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||fA.autoCastBoolean(n),o=s===void 0||fA.autoCastBoolean(s),c={nodes:[]},l=await Mte.getServerList(r??Bte),_={};if(i)for(let u=0,d=l.length;u<d;u++){let E=l[u].statsz;E&&(_[l[u].server.name]=E.routes)}for(let u=0,d=l.length;u<d;u++){if(l[u].statsz)continue;let E=l[u].server,f=l[u].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:l[u].response_time};i&&(h.connected_nodes=[],_[E.name]&&_[E.name].forEach(m=>{h.connected_nodes.includes(m.name.slice(0,-4))||h.connected_nodes.push(m.name.slice(0,-4))})),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(m=>({host:m.split(":")[0],port:fA.autoCast(m.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(xte,"clusterNetwork")});var L0=R((_Oe,D0)=>{"use strict";var EA=require("joi"),w0=nt(),{route_constraints:C0}=MT();D0.exports={setRoutesValidator:Gte,deleteRoutesValidator:qte};function Gte(e){let t=EA.object({server:EA.valid("hub","leaf").required(),routes:C0.required()});return w0.validateBySchema(e,t)}a(Gte,"setRoutesValidator");function qte(e){let t=EA.object({routes:C0.required()});return w0.validateBySchema(e,t)}a(qte,"deleteRoutesValidator")});var oh=R((fOe,v0)=>{"use strict";var wa=Et(),hA=Y(),ih=L(),P0=L0(),{handleHDBError:M0,hdb_errors:Fte}=ie(),{HTTP_STATUS_CODES:U0}=Fte,kte="cluster routes successfully set",$te="cluster routes successfully deleted";v0.exports={setRoutes:Vte,getRoutes:Yte,deleteRoutes:Kte};function Vte(e){let t=P0.setRoutesValidator(e);if(t)throw M0(t,t.message,U0.BAD_REQUEST,void 0,void 0,!0);let r=wa.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,l=e.routes.length;c<l;c++){let _=e.routes[c];_.port=hA.autoCast(_.port);let u=n.some(E=>E.host===_.host&&E.port===_.port),d=s.some(E=>E.host===_.host&&E.port===_.port);u||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?wa.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):wa.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:kte,set:o,skipped:i}}a(Vte,"setRoutes");function Yte(){let e=wa.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Yte,"getRoutes");function Kte(e){let t=P0.deleteRoutesValidator(e);if(t)throw M0(t,t.message,U0.BAD_REQUEST,void 0,void 0,!0);let r=wa.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,l=!1;for(let _=0,u=e.routes.length;_<u;_++){let d=e.routes[_],E=!1;for(let f=0,h=n.length;f<h;f++){let m=n[f];if(d.host===m.host&&d.port===m.port){n.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,m=s.length;h<m;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),l=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(n=hA.isEmptyOrZeroLength(n)?null:n,wa.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),l&&(s=hA.isEmptyOrZeroLength(s)?null:s,wa.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:$te,deleted:i,skipped:o}}a(Kte,"deleteRoutes")});var H0=R((hOe,B0)=>{"use strict";var p_=require("alasql"),Ca=require("recursive-iterator"),ds=k(),Wte=Y(),m_=L(),pA=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,jte(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=>m_.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=>!m_.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][m_.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Qte(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let l=this.affected_attributes.get(i).get(o).filter(_=>!m_.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let u=new p_.yy.Column({columnid:_});s.tableid&&(u.tableid=s.tableid),this.ast.columns.push(u),l.includes(_)||l.push(_)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function Qte(e){return e.filter(t=>t[m_.PERMS_CRUD_ENUM.READ])}a(Qte,"filterReadRestrictedAttrs");function jte(e,t,r,n,s){zte(e,t,r,n,s)}a(jte,"interpretAST");function S_(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(S_,"addSchemaTableToMap");function zte(e,t,r,n,s){if(!e){ds.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof p_.yy.Insert?ere(e,t,r):e instanceof p_.yy.Select?Jte(e,t,r,n,s):e instanceof p_.yy.Update?Xte(e,t,r):e instanceof p_.yy.Delete?Zte(e,t,r):ds.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(zte,"getRecordAttributesAST");function Jte(e,t,r,n,s){if(!e){ds.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Wte.isEmptyOrZeroLength(i)){ds.error("No schema specified");return}e.from.forEach(c=>{S_(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),S_(c.table,t,r,n,s)});let o=new Ca(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,_=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{ds.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(c.columnid)<0&&t.get(_).get(l).push(c.columnid)}if(e.where){let c=new Ca(e.where),l=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid?_.tableid:l;if(!t.get(i).has(u))if(r.has(u))u=r.get(u);else{ds.info(`table specified as ${u} not found.`);continue}t.get(i).get(u).indexOf(_.columnid)<0&&t.get(i).get(u).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new Ca(c.on);for(let{node:_}of l)if(_&&_.columnid){let u=_.tableid,d=s.get(u);if(!t.get(d).has(u))if(r.has(u))u=r.get(u);else{ds.info(`table specified as ${u} not found.`);continue}t.get(d).get(u).indexOf(_.columnid)<0&&t.get(d).get(u).push(_.columnid)}}),e.order){let c=new Ca(e.order);for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid,u=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{ds.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(l.columnid)<0&&t.get(u).get(_).push(l.columnid)}}}a(Jte,"getSelectAttributes");function Xte(e,t,r){if(!e){ds.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Ca(e.columns),s=e.table.databaseid;S_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&mA(e.table.tableid,s,i.columnid,t,r)}a(Xte,"getUpdateAttributes");function Zte(e,t,r){if(!e){ds.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Ca(e.where),s=e.table.databaseid;S_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&mA(e.table.tableid,s,i.columnid,t,r)}a(Zte,"getDeleteAttributes");function ere(e,t,r){if(!e){ds.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Ca(e.columns),s=e.into.databaseid;S_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&mA(e.into.tableid,s,i.columnid,t,r)}a(ere,"getInsertAttributes");function mA(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(mA,"pushAttribute");B0.exports=pA});var ch=R((mOe,F0)=>{var ah=ua(),x0=require("chalk"),hn=k(),G0=require("prompt"),{promisify:tre}=require("util"),SA=L(),rre=require("fs-extra"),nre=require("path"),sre=Y(),ire=Ri(),q0=X();q0.initSync();var ore=require("moment"),are=tre(G0.get),cre=nre.join(q0.getHdbBasePath(),SA.LICENSE_KEY_DIR_NAME,SA.LICENSE_FILE_NAME,SA.LICENSE_FILE_NAME);F0.exports={getFingerprint:ure,setLicense:lre,parseLicense:TA,register:_re,getRegistrationInfo:fre};async function lre(e){if(e&&e.key&&e.company){try{hn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await TA(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw hn.error(r),hn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(lre,"setLicense");async function ure(){let e={};try{e=await ah.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw hn.error(r),hn.error(t),new Error(r)}return e}a(ure,"getFingerprint");async function TA(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");hn.info("Validating license input...");let r=ah.validateLicense(e,t);if(hn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(hn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(hn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{hn.info("writing license to disk"),await rre.writeFile(cre,JSON.stringify({license_key:e,company:t}))}catch(n){throw hn.error("Failed to write License"),n}return"Registration successful."}a(TA,"parseLicense");async function _re(){let e=await dre();return TA(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(_re,"register");async function dre(){let e=await ah.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:x0.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:x0.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{G0.start()}catch(n){hn.error(n)}let r;try{r=await are(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(dre,"promptForRegistration");async function fre(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await ah.getLicense()}catch(r){throw hn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(sre.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=ire.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=ore.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(fre,"getRegistrationInfo")});var $0=R((TOe,k0)=>{"use strict";var Ere=Ze(),gA=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+Ere.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:u,port:d,routes:E,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};k0.exports=gA});var K0=R((ROe,Y0)=>{"use strict";var V0=Ze(),RA=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d){this.port=t,d===null&&(d=void 0),this.server_name=r+V0.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+V0.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:u,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};Y0.exports=RA});var Q0=R((OOe,W0)=>{"use strict";var AA=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};W0.exports=AA});var z0=R((NOe,j0)=>{"use strict";var hre=Ze(),OA=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+hre.SERVER_SUFFIX.ADMIN,this.password=r}};j0.exports=OA});var fh=R((IOe,Z0)=>{"use strict";var Fc=require("path"),_h=require("fs-extra"),pre=$0(),mre=K0(),Sre=Q0(),Tre=z0(),bA=Ur(),$c=Y(),$r=Et(),uh=L(),T_=Ze(),{CONFIG_PARAMS:At}=uh,Vc=k(),g_=X(),J0=fi(),NA=gt(),kc="clustering",gre=1e4,X0=50;Z0.exports={generateNatsConfig:Are,removeNatsConfig:Ore,getHubConfigPath:Rre};function Rre(){let e=g_.get(At.ROOTPATH);return Fc.join(e,kc,T_.NATS_CONFIG_FILES.HUB_SERVER)}a(Rre,"getHubConfigPath");async function Are(e=!1,t=void 0){g_.initSync();let r=g_.get(At.ROOTPATH),n=Fc.join(r,kc,T_.PID_FILES.HUB),s=Fc.join(r,kc,T_.PID_FILES.LEAF),i=$r.getConfigFromFile(At.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Fc.join(r,kc,T_.NATS_CONFIG_FILES.HUB_SERVER),c=Fc.join(r,kc,T_.NATS_CONFIG_FILES.LEAF_SERVER),l=$r.getConfigFromFile(At.CLUSTERING_TLS_CERTIFICATE),_=$r.getConfigFromFile(At.CLUSTERING_TLS_PRIVATEKEY),u=$r.getConfigFromFile(At.CLUSTERING_TLS_CERT_AUTH),d=$r.getConfigFromFile(At.CLUSTERING_TLS_INSECURE),E=$r.getConfigFromFile(At.CLUSTERING_TLS_VERIFY),f=$r.getConfigFromFile(At.CLUSTERING_NODENAME),h=$r.getConfigFromFile(At.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await NA.checkNATSServerInstalled()||dh("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await bA.listUsers(),S=$r.getConfigFromFile(At.CLUSTERING_USER),g=await bA.getClusterUser();($c.isEmpty(g)||g.active!==!0)&&dh(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await lh(At.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await lh(At.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await lh(At.CLUSTERING_HUBSERVER_NETWORK_PORT),await lh(At.CLUSTERING_LEAFSERVER_NETWORK_PORT));let T=[],N=[];for(let[z,Z]of m.entries())Z.role?.role===uh.ROLE_TYPES_ENUM.CLUSTER_USER&&Z.active&&(T.push(new Tre(Z.username,J0.decrypt(Z.hash))),N.push(new Sre(Z.username,J0.decrypt(Z.hash))));let b=[],{hub_routes:U}=$r.getClusteringRoutes();if(!$c.isEmptyOrZeroLength(U))for(let z of U)b.push(`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@${z.host}:${z.port}`);let v=new pre($r.getConfigFromFile(At.CLUSTERING_HUBSERVER_NETWORK_PORT),f,n,l,_,u,d,E,h,$r.getConfigFromFile(At.CLUSTERING_HUBSERVER_CLUSTER_NAME),$r.getConfigFromFile(At.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),b,T,N);u==null&&(delete v.tls.ca_file,delete v.leafnodes.tls.ca_file),t=$c.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===uh.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await _h.writeJson(o,v),Vc.trace(`Hub server config written to ${o}`));let q=`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,M=`tls://${g.uri_encoded_name}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,W=new mre($r.getConfigFromFile(At.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,s,i,[q],[M],T,N,l,_,u,d);u==null&&delete W.tls.ca_file,(t===void 0||t===uh.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await _h.writeJson(c,W),Vc.trace(`Leaf server config written to ${c}`))}a(Are,"generateNatsConfig");async function lh(e){let t=g_.get(e);return $c.isEmpty(t)&&dh(`port undefined for '${e}'`),await $c.isPortTaken(t)&&dh(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(lh,"isPortAvailable");function dh(e){let t=`Error generating clustering config: ${e}`;Vc.error(t),console.error(t),process.exit(1)}a(dh,"generateNatsConfigError");async function Ore(e){let{port:t,config_file:r}=NA.getServerConfig(e),{username:n,decrypt_hash:s}=await bA.getClusterUser(),i=0,o=2e3;for(;i<X0;){try{let u=await NA.createConnection(t,n,s,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){Vc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=X0)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&&Vc.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await $c.async_set_timeout(_)}let c="0".repeat(gre),l=Fc.join(g_.get(At.ROOTPATH),kc,r);await _h.writeFile(l,c),await _h.remove(l),Vc.notify(e,"started.")}a(Ore,"removeNatsConfig")});var iB=R((COe,sB)=>{"use strict";var pn=X(),bre=ua(),Te=L(),R_=Ze(),Oi=require("path"),{PACKAGE_ROOT:hh}=L(),eB=X(),Eh=Y(),Yc="/dev/null",Nre=Oi.join(hh,"launchServiceScripts"),tB=Oi.join(hh,"utility/scripts"),yre=Oi.join(tB,Te.HDB_RESTART_SCRIPT),rB=Oi.resolve(hh,"dependencies",`${process.platform}-${process.arch}`,R_.NATS_BINARY_NAME);function nB(){let t=bre.licenseSearch().ram_allocation||Te.RAM_ALLOCATION_ENUM.DEFAULT,r=Te.MEM_SETTING_KEY+t,n={[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Eh.noBootFile()&&(n[Te.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Eh.getEnvCliRootPath()),{name:Te.PROCESS_DESCRIPTORS.HDB,script:Te.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:hh}}a(nB,"generateMainServerConfig");var Ire=9930;function wre(){pn.initSync(!0);let e=pn.get(Te.CONFIG_PARAMS.ROOTPATH),t=Oi.join(e,"clustering",R_.NATS_CONFIG_FILES.HUB_SERVER),r=Oi.join(pn.get(Te.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Te.LOG_NAMES.HDB),n=eB.get(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=R_.LOG_LEVEL_FLAGS[pn.get(Te.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Ire?"-"+n:""),script:rB,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return pn.get(Te.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Yc,i.error_file=Yc),i}a(wre,"generateNatsHubServerConfig");var Cre=9940;function Dre(){pn.initSync(!0);let e=pn.get(Te.CONFIG_PARAMS.ROOTPATH),t=Oi.join(e,"clustering",R_.NATS_CONFIG_FILES.LEAF_SERVER),r=Oi.join(pn.get(Te.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Te.LOG_NAMES.HDB),n=eB.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=R_.LOG_LEVEL_FLAGS[pn.get(Te.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Cre?"-"+n:""),script:rB,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return pn.get(Te.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Yc,i.error_file=Yc),i}a(Dre,"generateNatsLeafServerConfig");function Lre(){pn.initSync();let e=Oi.join(pn.get(Te.CONFIG_PARAMS.LOGGING_ROOT),Te.LOG_NAMES.HDB),t={name:Te.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Te.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Nre,autorestart:!1};return pn.get(Te.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Yc,t.error_file=Yc),t}a(Lre,"generateClusteringUpgradeV4ServiceConfig");function Pre(){let e={[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.RESTART_HDB};return Eh.noBootFile()&&(e[Te.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Eh.getEnvCliRootPath()),{...{name:Te.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:tB},script:yre}}a(Pre,"generateRestart");function Mre(){return{apps:[nB()]}}a(Mre,"generateAllServiceConfigs");sB.exports={generateAllServiceConfigs:Mre,generateMainServerConfig:nB,generateRestart:Pre,generateNatsHubServerConfig:wre,generateNatsLeafServerConfig:Dre,generateClusteringUpgradeV4ServiceConfig:Lre}});var Kc=R((POe,TB)=>{"use strict";var He=L(),Ure=Y(),Ni=fh(),ph=gt(),bi=Ze(),go=iB(),mh=X(),Ro=k(),vre=Ai(),{startWorker:oB,onMessageFromWorkers:Bre}=rt(),Hre=gi(),LOe=require("util"),xre=require("child_process"),Gre=require("fs"),{execFile:qre}=xre,De;TB.exports={enterPM2Mode:Fre,start:Ao,stop:yA,reload:cB,restart:lB,list:IA,describe:dB,connect:yi,kill:Kre,startAllServices:Wre,startService:wA,getUniqueServicesList:fB,restartAllServices:Qre,isServiceRegistered:EB,reloadStopStart:hB,restartHdb:_B,deleteProcess:Vre,startClusteringProcesses:mB,startClusteringThreads:SB,isHdbRestartRunning:Yre,isClusteringRunning:zre,stopClustering:jre,reloadClustering:Jre,expectedRestartOfChildren:uB};var A_=!1;Bre(e=>{e.type==="restart"&&mh.initSync(!0)});function Fre(){A_=!0}a(Fre,"enterPM2Mode");function yi(){return De||(De=require("pm2")),new Promise((e,t)=>{De.connect((r,n)=>{Ro.setupConsoleLogging(),r&&t(r),e(n)})})}a(yi,"connect");var Tr,kre=10,aB;function Ao(e,t=!1){if(A_)return $re(e);let r=qre(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let o=Tr.indexOf(r);o>-1&&Tr.splice(o,1),!aB&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<kre&&(Gre.existsSync(Ni.getHubConfigPath())?Ao(e):(await Ni.generateNatsConfig(!0),Ao(e),await new Promise(c=>setTimeout(c,3e3)),await Ni.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ni.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=mh.get(He.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,_=0,u;for(;l=c.exec(i);){if(l.index&&bi.LOG_LEVEL_HIERARCHY[o]>=bi.LOG_LEVEL_HIERARCHY[u||"info"]){let f=u===bi.LOG_LEVELS.ERR||u===bi.LOG_LEVELS.WRN?Ro.OUTPUTS.STDERR:Ro.OUTPUTS.STDOUT;Ro.logCustomLevel(u||"info",f,n,i.slice(_,l.index).trim())}let[d,E]=l;_=l.index+d.length,u=bi.LOG_LEVELS[E]}if(bi.LOG_LEVEL_HIERARCHY[o]>=bi.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===bi.LOG_LEVELS.ERR||u===bi.LOG_LEVELS.WRN?Ro.OUTPUTS.STDERR:Ro.OUTPUTS.STDOUT;Ro.logCustomLevel(u||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!Tr&&(Tr=[],!t)){let i=a(()=>{aB=!0,Tr&&(Tr.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)}Tr.push(r)}a(Ao,"start");function $re(e){return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.start(e,(n,s)=>{n&&(De.disconnect(),r(n)),De.disconnect(),t(s)})})}a($re,"startWithPM2");function yA(e){if(!A_){for(let t of Tr||[])t.name===e&&(Tr.splice(Tr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.stop(e,async(n,s)=>{n&&(De.disconnect(),r(n)),De.delete(e,(i,o)=>{i&&(De.disconnect(),r(n)),De.disconnect(),t(o)})})})}a(yA,"stop");function cB(e){return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.reload(e,(n,s)=>{n&&(De.disconnect(),r(n)),De.disconnect(),t(s)})})}a(cB,"reload");function lB(e){if(!A_){uB();for(let t of Tr||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.restart(e,(n,s)=>{De.disconnect(),t(s)})})}a(lB,"restart");function uB(){for(let e of Tr||[])e.config&&(e.config.restarts=0)}a(uB,"expectedRestartOfChildren");function Vre(e){return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.delete(e,(n,s)=>{n&&(De.disconnect(),r(n)),De.disconnect(),t(s)})})}a(Vre,"deleteProcess");async function _B(){await Ao(go.generateRestart())}a(_B,"restartHdb");async function Yre(){let e=await IA();for(let t in e)if(e[t].name===He.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Yre,"isHdbRestartRunning");function IA(){return new Promise(async(e,t)=>{try{await yi()}catch(r){t(r)}De.list((r,n)=>{r&&(De.disconnect(),t(r)),De.disconnect(),e(n)})})}a(IA,"list");function dB(e){return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.describe(e,(n,s)=>{n&&(De.disconnect(),r(n)),De.disconnect(),t(s)})})}a(dB,"describe");function Kre(){if(!A_){for(let e of Tr||[])e.kill();Tr=[];return}return new Promise(async(e,t)=>{try{await yi()}catch(r){t(r)}De.killDaemon((r,n)=>{r&&(De.disconnect(),t(r)),De.disconnect(),e(n)})})}a(Kre,"kill");async function Wre(){try{await mB(),await SB(),await Ao(go.generateAllServiceConfigs())}catch(e){throw De?.disconnect(),e}}a(Wre,"startAllServices");async function wA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case He.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=go.generateMainServerConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=go.generateNatsIngestServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=go.generateNatsReplyServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=go.generateNatsHubServerConfig(),await Ao(r,t),await Ni.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=go.generateNatsLeafServerConfig(),await Ao(r,t),await Ni.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=go.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ao(r)}catch(r){throw De?.disconnect(),r}}a(wA,"startService");async function fB(){try{let e=await IA(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw De?.disconnect(),e}}a(fB,"getUniqueServicesList");async function Qre(e=[]){try{let t=!1,r=await fB();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===He.PROCESS_DESCRIPTORS.HDB?t=!0:await lB(o))}t&&await hB(He.PROCESS_DESCRIPTORS.HDB)}catch(t){throw De?.disconnect(),t}}a(Qre,"restartAllServices");async function EB(e){if(Tr?.find(r=>r.name===e))return!0;let t=await Hre.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(EB,"isServiceRegistered");async function hB(e){let t=mh.get(He.CONFIG_PARAMS.THREADS_COUNT)??mh.get(He.CONFIG_PARAMS.THREADS),r=await dB(e),n=Ure.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await yA(e),await wA(e)):e===He.PROCESS_DESCRIPTORS.HDB?await _B():await cB(e)}a(hB,"reloadStopStart");var pB;async function mB(e=!1){for(let t in He.CLUSTERING_PROCESSES){let r=He.CLUSTERING_PROCESSES[t];await wA(r,e)}}a(mB,"startClusteringProcesses");async function SB(){pB=oB(He.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await ph.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await ph.updateLocalStreams();let e=await vre.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===He.PRE_4_0_0_VERSION){Ro.info("Starting clustering upgrade 4.0.0 process"),oB(He.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(SB,"startClusteringThreads");async function jre(){for(let e in He.CLUSTERING_PROCESSES)if(e!==He.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===He.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await pB.terminate();else{let t=He.CLUSTERING_PROCESSES[e];await yA(t)}}a(jre,"stopClustering");async function zre(){for(let e in He.CLUSTERING_PROCESSES){let t=He.CLUSTERING_PROCESSES[e];if(await EB(t)===!1)return!1}return!0}a(zre,"isClusteringRunning");async function Jre(){await Ni.generateNatsConfig(!0),await ph.reloadNATSHub(),await ph.reloadNATSLeaf(),await Ni.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ni.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Jre,"reloadClustering")});var gh={};$e(gh,{compactOnStart:()=>Xre,copyDb:()=>NB});async function Xre(){Oo.notify("Running compact on start"),console.log("Running compact on start");let e=(0,CA.get)(bo.CONFIG_PARAMS.ROOTPATH),t=new Map,r=Br();try{for(let n in r){if(n==="system")continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,Sh.join)(e,"backup",n+".mdb"),o=(0,Sh.join)(e,bo.DATABASES_DIR_NAME,n+"-copy.mdb"),c=0;try{c=await gB(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){Oo.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await NB(n,o),console.log("Backing up",n,"to",i),await(0,Da.move)(s,i,{overwrite:!0})}try{O_()}catch(n){Oo.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,Da.move)(i,s,{overwrite:!0}),await(0,Da.remove)((0,Sh.join)(e,bo.DATABASES_DIR_NAME,`${n}-copy.mdb-lock`));try{O_()}catch(n){Oo.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){Oo.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,DA.updateConfigValue)(bo.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,Da.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw O_(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await gB(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
|