harperdb 4.4.24 → 4.4.25
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 +2 -2
- package/bin/lite.js +2 -2
- package/launchServiceScripts/launchInstallNATSServer.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +2 -2
- package/launchServiceScripts/launchNatsReplyService.js +2 -2
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +2 -2
- package/npm-shrinkwrap.json +111 -102
- package/package.json +2 -1
- package/server/jobs/jobProcess.js +2 -2
- package/server/threads/threadServer.js +2 -2
- package/studio/build-local/asset-manifest.json +2 -2
- package/studio/build-local/index.html +1 -1
- package/studio/build-local/static/js/{main.38f2a843.js → main.09b6ee2c.js} +2 -2
- package/utility/scripts/restartHdb.js +2 -2
- /package/studio/build-local/static/js/{main.38f2a843.js.LICENSE.txt → main.09b6ee2c.js.LICENSE.txt} +0 -0
|
@@ -8,10 +8,10 @@ Caused by:`));else if(typeof u=="object")try{n+=JSON.stringify(u)}catch{n+="Obje
|
|
|
8
8
|
`).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:A2.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}a(N2,"findPs")});var Ht=O((tAe,FC)=>{"use strict";var I2="__dbis__",w2="__txns__",C2="__environment_name__",P2="__dbi_defintion__",D2={EQUALS:"equals",STARTS_WITH:"startsWith",_STARTS_WITH:"starts_with",ENDS_WITH:"endsWith",_ENDS_WITH:"ends_with",CONTAINS:"contains",SEARCH_ALL:"searchAll",SEARCH_ALL_TO_MAP:"searchAllToMap",BATCH_SEARCH_BY_HASH:"batchSearchByHash",BATCH_SEARCH_BY_HASH_TO_MAP:"batchSearchByHashToMap",GREATER_THAN:"greaterThan",_GREATER_THAN:"greater_than",GREATER_THAN_EQUAL:"greaterThanEqual",_GREATER_THAN_EQUAL:"greater_than_equal",LESS_THAN:"lessThan",_LESS_THAN:"less_than",LESS_THAN_EQUAL:"lessThanEqual",_LESS_THAN_EQUAL:"less_than_equal",BETWEEN:"between"},L2=["__createdtime__","__updatedtime__"],M2="\uFFFF",kC={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},U2=Object.values(kC);FC.exports={AUDIT_STORE_NAME:w2,INTERNAL_DBIS_NAME:I2,DBI_DEFINITION_NAME:P2,SEARCH_TYPES:D2,TIMESTAMP_NAMES:L2,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:C2,TRANSACTIONS_DBI_NAMES_ENUM:kC,TRANSACTIONS_DBIS:U2,OVERFLOW_MARKER:M2}});var Pn=O((rAe,zC)=>{"use strict";var GC=L(),qC=Ht(),$C={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},VC=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),KC={500:VC("There was an error processing your request."),400:"Invalid request"},v2=KC[$C.INTERNAL_SERVER_ERROR],B2={OP_NOT_SUPPORTED_FOR_FS:a(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:a(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:a(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:a(e=>`${e} not found.`,"NOT_FOUND")},H2={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},x2={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:a(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:a(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:a(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:a((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:a(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},k2={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${qC.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${qC.INTERNAL_DBIS_NAME}`,START_VALUE_REQUIRED:"start_value is required",END_VALUE_REQUIRED:"end_value is required",CANNOT_COMPARE_STRING_TO_NUMERIC_KEYS:"cannot compare a string to numeric keys",END_VALUE_MUST_BE_GREATER_THAN_START_VALUE:"end_value must be greater than or equal to start_value",UNKNOWN_SEARCH_TYPE:"unknown search type",CANNOT_DROP_TABLE_HASH_ATTRIBUTE:"cannot drop a table's hash attribute"},F2={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${GC.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,"ATTR_NAME_LENGTH_ERR"),ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${GC.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"},YC={GENERIC_AUTH_FAIL:"Login failed",USER_INACTIVE:"Cannot complete request: User is inactive",INVALID_TOKEN:"invalid token",NO_ENCRYPTION_KEYS:"unable to generate JWT as there are no encryption keys. please contact your administrator",INVALID_CREDENTIALS:"invalid credentials",PASSWORD_REQUIRED:"password is required",USERNAME_REQUIRED:"username is required",REFRESH_TOKEN_REQUIRED:"refresh_token is required",INVALID_AUTH_OBJECT:"invalid auth_object",INVALID_BODY:"invalid body",TOKEN_EXPIRED:"token expired",REFRESH_TOKEN_SAVE_FAILED:"unable to store refresh_token"},G2={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:a(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:a(e=>`Operation '${e}' not found`,"OP_NOT_FOUND"),SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:a((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:a(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},q2={ATTR_PERM_MISSING:a((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:a((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_BOOLEAN"),ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:a(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:a(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:a(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:a(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:a(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:a(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:a(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:a((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:a(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:a(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:a(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:a(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:a(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},$2={ATTR_NOT_FOUND:a((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:a((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:a(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:a(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:a(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:a((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:a((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},V2={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},K2={ALTER_USER_DUP_ROLES:a(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:a(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:a(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:a(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:a(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:a(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},WC={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:a(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},jC={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:a(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},Y2={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set fastifyRoutes enabled to true in hdb/harperdb-config.yaml file.",BAD_SSH_KEY_NAME:"SSH key name can only contain alphanumeric, dash and underscore characters"},W2={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},j2={...YC,...x2,...B2,...G2,...q2,...$2,...V2,...K2,...F2,...WC,...jC,...Y2,...W2,...H2};zC.exports={CHECK_LOGS_WRAPPER:VC,HDB_ERROR_MSGS:j2,DEFAULT_ERROR_MSGS:KC,DEFAULT_ERROR_RESP:v2,HTTP_STATUS_CODES:$C,LMDB_ERRORS_ENUM:k2,AUTHENTICATION_ERROR_MSGS:YC,VALIDATION_ERROR_MSGS:WC,ITC_ERRORS:jC}});var _e=O((sAe,XC)=>{"use strict";var Dl=Pn(),z2=K(),Q2=L(),fh=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,QC),this.statusCode=n||Dl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Dl.DEFAULT_ERROR_MSGS[n]?Dl.DEFAULT_ERROR_MSGS[n]:Dl.DEFAULT_ERROR_MSGS[Dl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,s&&(this.logLevel=s),typeof this.message!="string"&&(this.stack=t.stack),i&&z2[s](i)}},Og=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},Ng=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function QC(e,t,r,n=Q2.LOG_LEVELS.ERROR,s=null,i=!1){if(JC(e))return e;let o=new fh(e,t,r,n,s);return i&&delete o.stack,o}a(QC,"handleHDBError");function JC(e){return e.__proto__.constructor.name===fh.name}a(JC,"isHDBError");XC.exports={isHDBError:JC,handleHDBError:QC,ClientError:Og,ServerError:Ng,hdb_errors:Dl}});var Rt=O((oAe,iP)=>{"use strict";var Wd=L(),J2=te(),sn=ne(),jd=require("path"),X2=require("minimist"),ZC=require("fs-extra"),eP=require("lodash");sn.initSync();var{CONFIG_PARAMS:Vo,DATABASES_PARAM_CONFIG:$d,SYSTEM_SCHEMA_NAME:Eh}=Wd,Vd,Kd,Yd;function tP(){if(Vd!==void 0)return Vd;if(sn.getHdbBasePath()!==void 0)return Vd=sn.get(Vo.STORAGE_PATH)||jd.join(sn.getHdbBasePath(),Wd.DATABASES_DIR_NAME),Vd}a(tP,"getBaseSchemaPath");function rP(){if(Kd!==void 0)return Kd;if(sn.getHdbBasePath()!==void 0)return Kd=sP(Eh),Kd}a(rP,"getSystemSchemaPath");function nP(){if(Yd!==void 0)return Yd;if(sn.getHdbBasePath()!==void 0)return Yd=sn.get(Wd.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||jd.join(sn.getHdbBasePath(),Wd.TRANSACTIONS_DIR_NAME),Yd}a(nP,"getTransactionAuditStoreBasePath");function Z2(e,t){let r=sn.get(Vo.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||jd.join(nP(),e.toString())}a(Z2,"getTransactionAuditStorePath");function sP(e,t){e=e.toString(),t=t&&t.toString();let r=sn.get(Wd.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||jd.join(tP(),e)}a(sP,"getSchemaPath");function e4(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,X2(process.argv));let n=r[Vo.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!J2.isObject(n))throw o;i=n}for(let o of i){let c=o[Eh];if(!c)continue;let l=sn.get(Vo.DATABASES);l=l??{};let u=c?.tables?.[t]?.[$d.PATH];if(u)return eP.set(l,[Eh,$d.TABLES,t,$d.PATH],u),sn.setProperty(Vo.DATABASES,l),u;let d=c?.[$d.PATH];if(d)return eP.set(l,[Eh,$d.PATH],d),sn.setProperty(Vo.DATABASES,l),d}}let s=r[Vo.STORAGE_PATH.toUpperCase()];if(s){if(!ZC.pathExistsSync(s))throw new Error(s+" does not exist");let i=jd.join(s,e);return ZC.mkdirsSync(i),sn.setProperty(Vo.STORAGE_PATH,s),i}return rP()}a(e4,"initSystemSchemaPaths");function t4(){Vd=void 0,Kd=void 0,Yd=void 0}a(t4,"resetPaths");iP.exports={getBaseSchemaPath:tP,getSystemSchemaPath:rP,getTransactionAuditStorePath:Z2,getTransactionAuditStoreBasePath:nP,getSchemaPath:sP,initSystemSchemaPaths:e4,resetPaths:t4}});var on=O((uAe,uP)=>{"use strict";var r4=Pn().LMDB_ERRORS_ENUM,cAe=require("lmdb"),n4=Ht(),lAe=require("buffer").Buffer,{OVERFLOW_MARKER:oP,MAX_SEARCH_KEY_LENGTH:hh}=n4,aP=["number","string","symbol","boolean","bigint"];function s4(e){if(e=e?.primaryStore||e,!e)throw new Error(r4.ENV_REQUIRED)}a(s4,"validateEnv");function i4(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(i4,"stringifyData");function o4(e){return e instanceof Date?e.valueOf():e}a(o4,"convertKeyValueToWrite");function a4(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(aP.includes(typeof e))return e.length>hh?[e.slice(0,hh)+oP]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(aP.includes(typeof i))i.length>hh?r.push(i.slice(0,hh)+oP):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}a(a4,"getIndexedValues");var ph=0,cP=0;function lP(){cP=Date.now()-performance.now()}a(lP,"adjustStartTime");lP();var c4=6e4;setInterval(lP,c4).unref();function l4(){let e=performance.now()+cP;return e>ph?(ph=e,e):(ph+=488e-6,ph)}a(l4,"getNextMonotonicTime");uP.exports={validateEnv:s4,stringifyData:i4,convertKeyValueToWrite:o4,getNextMonotonicTime:l4,getIndexedValues:a4}});var zd=O((_Ae,dP)=>{"use strict";var u4=L().OPERATIONS_ENUM,Ig=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=u4.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};dP.exports=Ig});var Qd=O((hAe,hP)=>{"use strict";var EAe=zd(),mh=L(),wg=te(),_P=K(),d4=require("uuid"),{handleHDBError:Sh,hdb_errors:_4}=_e(),{HDB_ERROR_MSGS:Th,HTTP_STATUS_CODES:gh}=_4;hP.exports=fP;function fP(e,t,r){for(let s=0;s<t.length;s++)EP(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];f4(i,r,e.operation)}}a(fP,"processRows");fP.validateAttribute=EP;function EP(e){if(Buffer.byteLength(String(e))>mh.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Sh(new Error,Th.ATTR_NAME_LENGTH_ERR(e),gh.BAD_REQUEST,void 0,void 0,!0);if(wg.isEmptyOrZeroLength(e)||wg.isEmpty(e.trim()))throw Sh(new Error,Th.ATTR_NAME_NULLISH_ERR,gh.BAD_REQUEST,void 0,void 0,!0)}a(EP,"validateAttribute");function f4(e,t,r){if(!e.hasOwnProperty(t)||wg.isEmptyOrZeroLength(e[t])){if(r===mh.OPERATIONS_ENUM.INSERT||r===mh.OPERATIONS_ENUM.UPSERT){e[t]=d4.v4();return}throw _P.error("Update transaction aborted due to record with no hash value:",e),Sh(new Error,Th.RECORD_MISSING_HASH_ERR,gh.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>mh.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw _P.error(e),Sh(new Error,Th.HASH_VAL_LENGTH_ERR,gh.BAD_REQUEST,void 0,void 0,!0)}a(f4,"validateHash")});var pP,Dn,Cg,Ll=Ie(()=>{pP=require("events"),Dn=class extends pP.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new Cg;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){let t=this.queue?.shift();return t||this.emit("drained"),t}waitForDrain(){return new Promise(t=>{!this.queue||this.queue.length===0?t(!0):(this.once("drained",()=>t(!0)),this.currentDrainResolver=t,this.drainCloseListener||(this.drainCloseListener=!0,this.on("close",()=>{this.currentDrainResolver?.(!1)})))})}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},Cg=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});var Ja={};je(Ja,{server:()=>it});var mP,it,qr=Ie(()=>{mP=M(Ei()),it={};(0,mP._assignPackageExport)("server",it)});var Lg={};je(Lg,{loadGQLSchema:()=>p4,start:()=>Dg,startOnMainThread:()=>h4});function Dg({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),_=o(new c(r.toString(),s)),E=new Map,f=[],h;for(let g of _.definitions)switch(g.kind){case l.OBJECT_TYPE_DEFINITION:let H=function(W){if(W.kind==="NonNullType"){let Q=H(W.type);return Q.nullable=!1,Q}if(W.kind==="ListType")return{type:"array",elements:H(W.type)};let se={type:W.name?.value};return Object.defineProperty(se,"location",{value:W.loc.startToken}),se};a(H,"getProperty");let S=g.name.value,y=[],I={table:null,database:null,properties:y};E.set(S,I);for(let W of g.directives){if(W.name.value==="table"){for(let se of W.arguments)I[se.name.value]=se.value.value;I.schema&&(I.database=I.schema),I.table||(I.table=S),I.audit&&(I.audit=I.audit!=="false"),I.attributes=I.properties,f.push(I)}if(W.name.value==="sealed"&&(I.sealed=!0),W.name.value==="splitSegments"&&(I.splitSegments=!0),W.name.value==="replicate"&&(I.replicate=!0),W.name.value==="export"){I.export=!0;for(let se of W.arguments)typeof I.export!="object"&&(I.export={}),I.export[se.name.value]=se.value.value}}let U=!1,X={};for(let W of g.fields){let V=H(W.type);V.name=W.name.value,y.push(V),X[V.name]=void 0;for(let se of W.directives){let Q=se.name.value;if(Q==="primaryKey")U?console.warn("Can not define two attributes as a primary key at",se.loc):(V.isPrimaryKey=!0,U=!0);else if(Q==="indexed")V.indexed=!0;else if(Q==="computed"){for(let de of se.arguments||[])if(de.name.value==="from"){let j=de.value.value;V.computed={from:m(j,de,X)},V.version==null&&(V.version=j)}else de.name.value==="version"&&(V.version=de.value.value);V.computed=V.computed||!0}else if(Q==="relationship"){let de={};for(let j of se.arguments)de[j.name.value]=j.value.value;V.relationship=de}else if(Q==="createdTime")V.assignCreatedTime=!0;else if(Q==="updatedTime")V.assignUpdatedTime=!0;else if(Q==="expiresAt")V.expiresAt=!0;else if(Q==="allow"){let de=V.authorizedRoles=[];for(let j of se.arguments)j.name.value==="role"&&de.push(j.value.value)}else server.knownGraphQLDirectives.includes(Q)&&console.warn(`@${Q} is an unknown directive, at`,se.loc)}}I.type=S,S==="Query"&&(h=I)}function T(g){let S=E.get(g.type);S?(Object.defineProperty(g,"properties",{value:S.properties}),Object.defineProperty(g,"definition",{value:S})):g.type==="array"?T(g.elements):E4.includes(g.type)||(0,TP.getWorkerIndex)()===0&&console.error(`The type ${g.type} is unknown at line ${g.location.line}, column ${g.location.column}, in ${s}`)}a(T,"connectPropertyType");for(let g of E.values())for(let S of g.properties)T(S);for(let g of f)g.tableClass=e(g),g.export&&(g.export.name===""?i.set((0,Pg.dirname)(n),g.tableClass):i.set((0,Pg.dirname)(n)+"/"+(g.export.name||g.type),g.tableClass,g.export));function m(g,S,y){return new SP.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${g}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(y)}a(m,"createComputedFrom")}}var Pg,SP,TP,E4,h4,p4,gP=Ie(()=>{Pg=require("path"),SP=require("node:vm");Pe();TP=M(ot()),E4=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);a(Dg,"start");h4=Dg,p4=Dg({ensureTable:pt}).handleFile});var IP={};je(IP,{parse:()=>Ug,streamAsJSON:()=>Jd,stringify:()=>Xa});function Jd(e){return new Mg({value:e})}function RP(e){return console.error(e),JSON.stringify(e.toString())}function AP(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Xa(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===OP)return NP(e);if(t.resolution)return t.resolution.then(()=>Xa(e));throw t}}function NP(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+=NP(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Xa(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function Ug(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),T4.test(e)?m4.parse(e):JSON.parse(e)):null}var yP,bP,m4,S4,OP,Mg,T4,vg=Ie(()=>{yP=require("stream"),bP=M(require("json-bigint-fixes")),m4=(0,bP.default)({useNativeBigInt:!0}),S4=1e4,OP={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw OP};a(Jd,"streamAsJSON");Mg=class extends yP.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;){try{o=i.next(),o.then&&(yield o.then(c=>(o=c,""),c=>(o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")}}if(o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),RP)}catch(s){yield RP(s)}else yield Xa(t)}else yield Xa(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);AP(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>S4?this.flush():!0)}flush(){let t=super.push(this.buffer.join(""));return this.buffer=[],this.bufferSize=0,t}readIterator(t){try{let r;if(t.childIterator)return AP(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(RP,"handleError");a(AP,"when");a(Xa,"stringify");a(NP,"jsStringify");T4=/[[,:]\s*-?\d{16,}/;a(Ug,"parse")});var FP=O((yAe,kP)=>{"use strict";var Bg=require("recursive-iterator"),g4=require("alasql"),Hg=require("clone"),wP=te(),{handleHDBError:CP,hdb_errors:R4}=_e(),{HDB_ERROR_MSGS:PP,HTTP_STATUS_CODES:DP}=R4,{getDatabases:A4}=(Pe(),oe(ut)),y4=["DISTINCT_ARRAY"],LP=Symbol("validateTables"),xg=Symbol("validateTable"),AAe=Symbol("getAllColumns"),MP=Symbol("validateAllColumns"),Rh=Symbol("findColumn"),UP=Symbol("validateOrderBy"),Xd=Symbol("validateSegment"),kg=Symbol("validateColumn"),vP=Symbol("setColumnsForTable"),BP=Symbol("checkColumnsForAsterisk"),HP=Symbol("validateGroupBy"),xP=Symbol("hasColumns"),Fg=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[LP](),this[BP](),this[MP]()}[LP](){if(this[xP]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[xg](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[xg](t.table)})}}[xP](){let t=!1,r=new Bg(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[xg](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=A4();if(!r[t.databaseid])throw CP(new Error,PP.SCHEMA_NOT_FOUND(t.databaseid),DP.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw CP(new Error,PP.TABLE_NOT_FOUND(t.databaseid,t.tableid),DP.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Hg(s);i.table=Hg(t),this.attributes.push(i)})}[Rh](t){return this.attributes.filter(r=>t.tableid?(r.table.as===t.tableid||r.table.tableid===t.tableid)&&r.attribute===t.columnid:r.attribute===t.columnid)}[BP](){let t=new Bg(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[vP](r.tableid)}[vP](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new g4.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[MP](){this[Xd](this.statement.columns,!1),this[Xd](this.statement.joins,!1),this[Xd](this.statement.where,!1),this[HP](this.statement.group,!1),this[Xd](this.statement.order,!0)}[Xd](t,r){if(!t)return;let n=new Bg(t),s=[];for(let{node:i,path:o}of n)!wP.isEmpty(i)&&!wP.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[UP](i):s.push(this[kg](i)));return s}[HP](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&y4.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Hg(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Rh](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[Rh](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[UP](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[kg](t)}[kg](t){let r=this[Rh](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};kP.exports=Fg});var qP=O((OAe,GP)=>{"use strict";var Gg=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};GP.exports=Gg});var VP=O((IAe,$P)=>{"use strict";var qg=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};$P.exports=qg});var jP={};je(jP,{HAS_EXPIRATION:()=>bh,HAS_RESIDENCY_ID:()=>Qg,HAS_STRUCTURE_UPDATE:()=>Oh,LAST_TIMESTAMP_PLACEHOLDER:()=>r_,LOCAL_TIMESTAMP:()=>b4,METADATA:()=>Zd,NO_TIMESTAMP:()=>Vg,PENDING_LOCAL_TIME:()=>Jg,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>zg,RecordEncoder:()=>jg,TIMESTAMP_ASSIGN_LAST:()=>N4,TIMESTAMP_ASSIGN_NEW:()=>YP,TIMESTAMP_ASSIGN_PREVIOUS:()=>WP,TIMESTAMP_PLACEHOLDER:()=>Ah,TIMESTAMP_RECORD_PREVIOUS:()=>Kg,getUpdateRecord:()=>Xg,handleLocalTimeForGets:()=>Nh});function w4(){return t_[0]=t_[0]^64,O4.getFloat64(0)}function Nh(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),l=c?.value,u=l?.[Zd];return u>=0&&(c.metadataFlags=u,c.localTime=l.localTime,c.value=l.value,c.residencyId=l.residencyId,l.expiresAt>=0&&(c.expiresAt=l.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[Zd]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let l=c.value,u=l[Zd];return u>=0&&(c.metadataFlags=u,c.localTime=l.localTime,c.value=l.value,c.residencyId=l.residencyId,l.expiresAt>=0&&(c.expiresAt=l.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Za.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<Za.length;l++){let u=Za[l].deref();(!u||u.isDone||u.isCommitted)&&Za.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function Xg(e,t,r){return function(n,s,i,o,c=-1,l,u,d="put",_,E){_||l==null?Ml=i?.localTime?Kg|WP:Vg:Ml=l?i?.localTime?Kg|16384:YP|16384:Vg;let f=u?.expiresAt;if(f>=0&&(c|=bh),e_=c,Yg=f,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Ml>0},T,m=0;try{let g=i?.residencyId,S=u?.residencyId;S&&(Wg=S,e_|=Qg,m|=ec),g!==S&&(m|=tc,g||(g=0)),c&bh&&(m|=s_),u?.originatingOperation&&(m|=n_),_&&(h.ifVersion=T=i?.version??null);let y=e.put(n,s,h);if(l){let I=u?.user?.username;if(E&&(yh=e.encoder.encode(E)),e.encoder.hasStructureUpdate&&(m|=Oh,e.encoder.hasStructureUpdate=!1),_&&i?.localTime){let U=i?.localTime,H=r.get(U);if(H){let X=xt(H).previousLocalTime;return r.put(U,Ul(o,t,n,X,u?.nodeId??server.replication.getThisNodeId(r)??0,I,d,yh,m,S,g,f),{ifVersion:T}),y}}r.put(r_,Ul(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,I,d,yh,m,S,g,f,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:T})}return y}catch(g){throw g.message+=" id: "+n+" options: "+h,g}}}var KP,$g,Ah,r_,zg,b4,Zd,t_,O4,Vg,YP,N4,WP,Kg,bh,Qg,Jg,Oh,I4,yh,Ml,e_,Yg,Wg,jg,Za,vl=Ie(()=>{KP=require("msgpackr");Qi();$g=M(K()),Ah=new Uint8Array([1,1,1,1,4,64,0,0]),r_=new Uint8Array([1,1,1,1,1,0,0,0]),zg=new Uint8Array([1,1,1,1,3,64,0,0]),b4=Symbol("local-timestamp"),Zd=Symbol("metadata"),t_=new Uint8Array(8),O4=new DataView(t_.buffer,0,8),Vg=0,YP=0,N4=1,WP=3,Kg=4,bh=16,Qg=32,Jg=1,Oh=256,Ml=0,e_=-1,Yg=-1,Wg=0,jg=class extends KP.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(Ml||e_>=0){let o=0,c=Ml;c&&(o+=8,Ml=0);let l=e_,u=Yg,d=Wg;l>=0&&(o+=2,e_=-1,u>=0&&(o+=8,Yg=-1),d&&(o+=4,Wg=0));let _=I4=r.call(this,s,i|2048|o);yh=_.subarray((_.start||0)+o,_.end);let E=_.start||0;return c&&(Ah[4]=c,Ah[5]=c>>8,_.set(Ah,E),E+=8),l>=0&&(_[E++]=l&31,_[E++]=l>>5,u>=0&&((_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(E,u),E+=8),d&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setUint32(E,d)),_}else return r.call(this,s,i)};let n=this.saveStructures;this.saveStructures=function(s,i){let o=n.call(this,s,i);return this.hasStructureUpdate=!0,o}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(t_,0,c),c+=8;else for(let E=0;E<8;E++)t_[E]=t[c++];l=w4(),i=t[c]}let u,d;i<32&&(o=i|t[c+1]<<5,c+=2,o&bh&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&Qg&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let _=r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c);return{localTime:l,value:_,[Zd]:o,expiresAt:u,residencyId:d}}return r?.valueAsBuffer?t:super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(w4,"getTimestamp");a(Nh,"handleLocalTimeForGets");Za=[];setInterval(()=>{for(let e=0;e<Za.length;e++){let t=Za[e].deref();!t||t.isDone||t.isCommitted?Za.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?($g.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):$g.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();a(Xg,"getUpdateRecord")});var i_=O((LAe,QP)=>{"use strict";var zP=ne(),C4=L(),{RecordEncoder:P4}=(vl(),oe(jP)),DAe=require("fs");zP.initSync();var D4=zP.get(C4.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Zg=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=D4&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:P4})}};QP.exports=Zg});var o_=O((UAe,JP)=>{"use strict";var Ln=ne(),cs=L();Ln.initSync();var Ih=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=Ln.get(cs.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Ln.get(cs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Ln.get(cs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Ln.get(cs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Ln.get(cs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Ln.get(cs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Ln.get(cs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Ln.get(cs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Ln.get(cs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Ln.get(cs.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Ln.get(cs.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Ln.get(cs.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};JP.exports=Ih;Ih.MAX_DBS=1e4});var mt=O((BAe,aD)=>{"use strict";var tR=require("lmdb"),Fs=require("fs-extra"),Mn=require("path"),wh=on(),eD=K(),an=Pn().LMDB_ERRORS_ENUM,Ch=VP(),rR=i_(),tD=o_(),Ko=Ht(),XP=L(),{table:L4,resetDatabases:M4}=(Pe(),oe(ut)),ZP=ne(),Gs=Ko.INTERNAL_DBIS_NAME,rD=Ko.DBI_DEFINITION_NAME,U4="data.mdb",v4="lock.mdb",a_=".mdb",B4="-lock",eR=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=ls(t,r),this.key_type=this.dbi[Ko.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ko.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new tR.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Ph(e,t){if(e===void 0)throw new Error(an.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(an.ENV_NAME_REQUIRED)}a(Ph,"pathEnvNameValidation");async function nR(e,t,r=!0){try{await Fs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(an.INVALID_BASE_PATH):n}try{let n=Mn.join(e,t+a_);return await Fs.access(n,Fs.constants.R_OK|Fs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Fs.access(Mn.join(e,t,U4),Fs.constants.R_OK|Fs.constants.F_OK),Mn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(an.INVALID_ENVIRONMENT)}else throw new Error(an.INVALID_ENVIRONMENT);throw n}}a(nR,"validateEnvironmentPath");function Dh(e,t){if(wh.validateEnv(e),t===void 0)throw new Error(an.DBI_NAME_REQUIRED)}a(Dh,"validateEnvDBIName");async function H4(e,t,r=!1,n=!1){Ph(e,t);let s=Mn.basename(e);t=t.toString();let i=ZP.get(XP.CONFIG_PARAMS.DATABASES);i||ZP.setProperty(XP.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await nR(e,t,n),nD(e,t,r)}catch(o){if(o.message===an.INVALID_ENVIRONMENT){let c=Mn.join(e,t);await Fs.mkdirp(n?c:e);let l=new tD(n?c:c+a_,!1),u=tR.open(l);u.dbis=Object.create(null);let d=new rR(!1);u.openDB(Gs,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let _=sR(e,t,r);return u[Ko.ENVIRONMENT_NAME_KEY]=_,global.lmdb_map[_]=u,u}throw o}}a(H4,"createEnvironment");async function x4(e,t,r,n=!0){Ph(e,t),t=t.toString();let s=Mn.join(e,t);return L4({table:t,database:Mn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(x4,"copyEnvironment");async function nD(e,t,r=!1){Ph(e,t),t=t.toString();let n=sR(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await nR(e,t),i=Mn.join(e,t+a_),o=s!=i,c=new tD(s,o),l=tR.open(c);l.dbis=Object.create(null);let u=iD(l);for(let d=0;d<u.length;d++)ls(l,u[d]);return l[Ko.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(nD,"openEnvironment");async function k4(e,t,r=!1){Ph(e,t),t=t.toString();let n=Mn.join(e,t+a_),s=await nR(e,t);if(global.lmdb_map!==void 0){let i=sR(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await sD(o),delete global.lmdb_map[i]}}await Fs.remove(s),await Fs.remove(s===n?s+B4:Mn.join(Mn.dirname(s),v4))}a(k4,"deleteEnvironment");async function sD(e){wh.validateEnv(e);let t=e[Ko.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(sD,"closeEnvironment");function sR(e,t,r=!1){let s=`${Mn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(sR,"getCachedEnvironmentName");function F4(e){wh.validateEnv(e);let t=Object.create(null),r=ls(e,Gs);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Gs)try{t[n]=Object.assign(new Ch,s)}catch{eD.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(F4,"listDBIDefinitions");function iD(e){wh.validateEnv(e);let t=[],r=ls(e,Gs);for(let{key:n}of r.getRange({start:!1}))n!==Gs&&t.push(n);return t}a(iD,"listDBIs");function G4(e,t){let n=ls(e,Gs).getEntry(t),s=new Ch;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{eD.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(G4,"getDBIDefinition");function oD(e,t,r,n=!r){if(Dh(e,t),t=t.toString(),t===Gs)throw new Error(an.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return ls(e,t)}catch(s){if(s.message===an.DBI_DOES_NOT_EXIST){let i=new rR(r,n===!0),o=e.openDB(t,i),c=new Ch(r===!0,n);return o[rD]=c,ls(e,Gs).putSync(t,c),e.dbis[t]=o,o}throw s}}a(oD,"createDBI");function ls(e,t){if(Dh(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Gs?r=G4(e,t):r=new Ch,r===void 0)throw new Error(an.DBI_DOES_NOT_EXIST);let n;try{let s=new rR(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(an.DBI_DOES_NOT_EXIST):s}return n[rD]=r,e.dbis[t]=n,n}a(ls,"openDBI");function q4(e,t){Dh(e,t),t=t.toString();let r=ls(e,t),n=r.getStats();return r[Ko.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(q4,"statDBI");async function $4(e,t){try{let r=Mn.join(e,t+a_);return(await Fs.stat(r)).size}catch{throw new Error(an.INVALID_ENVIRONMENT)}}a($4,"environmentDataSize");function V4(e,t){if(Dh(e,t),t=t.toString(),t===Gs)throw new Error(an.CANNOT_DROP_INTERNAL_DBIS_NAME);ls(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],ls(e,Gs).removeSync(t)}a(V4,"dropDBI");function K4(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{ls(e,i)}catch(o){if(o.message===an.DBI_DOES_NOT_EXIST)oD(e,i,i!==t,i===t),n=!0;else throw o}}n&&M4()}a(K4,"initializeDBIs");aD.exports={openDBI:ls,openEnvironment:nD,createEnvironment:H4,listDBIs:iD,listDBIDefinitions:F4,createDBI:oD,dropDBI:V4,statDBI:q4,deleteEnvironment:k4,initializeDBIs:K4,TransactionCursor:eR,environmentDataSize:$4,copyEnvironment:x4,closeEnvironment:sD}});var lD=O((xAe,cD)=>{"use strict";var iR=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};cD.exports=iR});var dD=O((FAe,uD)=>{"use strict";var oR=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};uD.exports=oR});var fD=O((qAe,_D)=>{"use strict";var aR=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};_D.exports=aR});var nc=O((WAe,pD)=>{"use strict";var Y4=mt(),W4=lD(),j4=dD(),z4=fD(),mi=on(),c_=Pn().LMDB_ERRORS_ENUM,Q4=Ht(),Ji=L(),J4=te(),X4=require("uuid"),VAe=require("lmdb"),{handleHDBError:Z4,hdb_errors:eJ}=_e(),{OVERFLOW_MARKER:KAe,MAX_SEARCH_KEY_LENGTH:YAe}=Q4,ED=ne();ED.initSync();var Lh=ED.get(Ji.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),cR=Ji.TIME_STAMP_NAMES_ENUM.CREATED_TIME,rc=Ji.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function tJ(e,t,r,n,s=mi.getNextMonotonicTime()){_R(e,t,r,n),lR(e,t,r);let i=new W4,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];hD(u,!0,s);let d=rJ(e,t,r,u),_=u[t];o.push(d),c.push(_)}return uR(o,c,n,i,s)}a(tJ,"insertRecords");function rJ(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let d=c([[{}]]);Array.isArray(d)&&(c=d[0][Ji.FUNC_VAL],n[o]=c)}let l=mi.getIndexedValues(c),u=e.dbis[o];if(l){Lh&&u.prefetch(l.map(d=>({key:d,value:s})),Mh);for(let d=0,_=l.length;d<_;d++)u.put(l[d],s)}}Lh&&e.dbis[t].prefetch([s],Mh),e.dbis[t].put(s,n,n[rc])})}a(rJ,"insertRecord");function nJ(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(nJ,"removeSkippedRecords");function hD(e,t,r){let n=r>0;(n||!Number.isInteger(e[rc]))&&(e[rc]=r||(r=mi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[cR]))&&(e[cR]=r||mi.getNextMonotonicTime()):delete e[cR]}a(hD,"setTimestamps");function lR(e,t,r){r.indexOf(Ji.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Ji.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Ji.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Ji.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Y4.initializeDBIs(e,t,r)}a(lR,"initializeTransaction");async function sJ(e,t,r,n,s=mi.getNextMonotonicTime()){_R(e,t,r,n),lR(e,t,r);let i=new j4,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],_=d[t],E;try{E=dR(e,t,d,_,i,!0,s)}catch{i.skipped_hashes.push(_),o.push(u);continue}c.push(E),l.push(_)}return uR(c,l,n,i,s,o)}a(sJ,"updateRecords");async function iJ(e,t,r,n,s=mi.getNextMonotonicTime()){try{_R(e,t,r,n)}catch(l){throw Z4(l,l.message,eJ.HTTP_STATUS_CODES.BAD_REQUEST)}lR(e,t,r);let i=new z4,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;J4.isEmpty(u[t])?(d=X4.v4(),u[t]=d):d=u[t];let _=dR(e,t,u,d,i,!1,s);o.push(_),c.push(d)}return uR(o,c,n,i,s)}a(iJ,"upsertRecords");async function uR(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||mi.getNextMonotonicTime(),nJ(r,i),n}a(uR,"finalizeWrite");function dR(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if(hD(r,!d,o),Number.isInteger(r[rc])&&u[rc]>r[rc])return!1;d&&s.original_records.push(u);let _,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let T=r[h],m=e.dbis[h];if(m===void 0)continue;let g=u[h];if(typeof T=="function"){let y=T([[u]]);Array.isArray(y)&&(T=y[0][Ji.FUNC_VAL],r[h]=T)}if(T===g)continue;let S=mi.getIndexedValues(g);if(S){Lh&&m.prefetch(S.map(y=>({key:y,value:n})),Mh);for(let y=0,I=S.length;y<I;y++)m.remove(S[y],n)}if(S=mi.getIndexedValues(T),S){Lh&&m.prefetch(S.map(y=>({key:y,value:n})),Mh);for(let y=0,I=S.length;y<I;y++)m.put(S[y],n)}}let f={...u,...r};c.put(n,f,f[rc])},"do_put");return l?_=c.ifVersion(n,l.version,E):_=c.ifNoExists(n,E),_.then(f=>f?!0:dR(e,t,r,n,s,i,o))}a(dR,"updateUpsertRecord");function oJ(e,t,r){if(mi.validateEnv(e),t===void 0)throw new Error(c_.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(c_.WRITE_ATTRIBUTES_REQUIRED):new Error(c_.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(oJ,"validateBasic");function _R(e,t,r,n){if(oJ(e,t,r),!Array.isArray(n))throw n===void 0?new Error(c_.RECORDS_REQUIRED):new Error(c_.RECORDS_MUST_BE_ARRAY)}a(_R,"validateWrite");function Mh(){}a(Mh,"noop");pD.exports={insertRecords:tJ,updateRecords:sJ,upsertRecords:iJ}});var Xi=O((zAe,aJ)=>{aJ.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var Ti=O((QAe,TD)=>{"use strict";var SD=te(),mD=L(),Bl=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Si=require("joi"),Yo={schema_format:{pattern:Bl,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},cJ=Si.alternatives(Si.string().min(1).max(Yo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Yo.schema_format.message}),Si.number(),Si.array()).required(),lJ=Si.alternatives(Si.string().min(1).max(Yo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Yo.schema_format.message}),Si.number()),uJ=Si.alternatives(Si.string().min(1).max(Yo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Yo.schema_format.message}),Si.number()).required();function dJ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Yo.schema_length.maximum?`'${e}' maximum of 250 characters`:Bl.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(dJ,"checkValidTable");function _J(e,t){return SD.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(_J,"validateSchemaExists");function fJ(e,t){let r=t.state.ancestors[0].schema;return SD.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(fJ,"validateTableExists");function EJ(e,t){return e.toLowerCase()===mD.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${mD.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(EJ,"validateSchemaName");TD.exports={common_validators:Yo,schema_regex:Bl,hdb_schema_table:cJ,validateSchemaExists:_J,validateTableExists:fJ,validateSchemaName:EJ,checkValidTable:dJ,hdb_database:lJ,hdb_table:uJ}});var _t=O((XAe,gD)=>{"use strict";var cn=require("validate.js");cn.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||cn.validators.type.checks[t](e)?null:` must be a '${t}' value`};cn.validators.type.checks={Object:a(function(e){return cn.isObject(e)&&!cn.isArray(e)},"Object"),Array:cn.isArray,Integer:cn.isInteger,Number:cn.isNumber,String:cn.isString,Date:cn.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};cn.validators.hasValidFileExt=function(e,t){return cn.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};gD.exports={validateObject:hJ,validateObjectAsync:pJ,validateBySchema:mJ};function hJ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=cn(e,t,{format:"flat"});return r?new Error(r):null}a(hJ,"validateObject");async function pJ(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await cn.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(pJ,"validateObjectAsync");function mJ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(mJ,"validateBySchema")});var Uh=O((eye,RD)=>{var{common_validators:gi}=Ti(),u_=_t(),l_="is required",rr={database:{presence:!1,format:gi.schema_format,length:gi.schema_length},schema:{presence:!1,format:gi.schema_format,length:gi.schema_length},table:{presence:!0,format:gi.schema_format,length:gi.schema_length},attribute:{presence:!0,format:gi.schema_format,length:gi.schema_length},hash_attribute:{presence:!0,format:gi.schema_format,length:gi.schema_length}};function d_(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(d_,"makeAttributesStrings");function SJ(e){return e=d_(e),rr.table.presence=!1,rr.attribute.presence=!1,rr.hash_attribute.presence=!1,u_.validateObject(e,rr)}a(SJ,"schema_object");function TJ(e){return e=d_(e),rr.table.presence={message:l_},rr.attribute.presence=!1,rr.hash_attribute.presence=!1,u_.validateObject(e,rr)}a(TJ,"table_object");function gJ(e){return e=d_(e),rr.table.presence={message:l_},rr.attribute.presence=!1,u_.validateObject(e,rr)}a(gJ,"create_table_object");function RJ(e){return e=d_(e),rr.table.presence={message:l_},rr.attribute.presence={message:l_},rr.hash_attribute.presence=!1,u_.validateObject(e,rr)}a(RJ,"attribute_object");function AJ(e){return e=d_(e),rr.table.presence={message:l_},rr.attribute.presence=!1,rr.hash_attribute.presence=!1,u_.validateObject(e,rr)}a(AJ,"describe_table");function yJ(e){if(e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(yJ,"validateTableResidence");RD.exports={schema_object:SJ,create_table_object:gJ,table_object:TJ,attribute_object:RJ,describe_table:AJ,validateTableResidence:yJ}});var yD=O((rye,AD)=>{"use strict";var bJ=require("uuid"),fR=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||bJ.v4(),this.schema_table=`${this.schema}.${this.table}`}};AD.exports=fR});var vh=O((sye,bD)=>{"use strict";var OJ=yD(),ER=class extends OJ{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};bD.exports=ER});var ND=O((oye,OD)=>{"use strict";OD.exports=IJ;var NJ="inserted";function IJ(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===NJ?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(IJ,"returnObject")});var Bh=O((lye,PD)=>{"use strict";var wJ=L(),hR=mt(),CJ=nc(),{getSystemSchemaPath:PJ,getSchemaPath:DJ}=Rt(),cye=Xi(),LJ=Uh(),MJ=vh(),UJ=ND(),{handleHDBError:ID,hdb_errors:CD}=_e(),wD=te(),{HTTP_STATUS_CODES:vJ}=CD,BJ="inserted";PD.exports=HJ;async function HJ(e){let t=LJ.attribute_object(e);if(t)throw ID(new Error,t.message,CD.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&wD.checkGlobalSchemaTable(e.schema,e.table);if(r)throw ID(new Error,r,vJ.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=wD.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new MJ(e.schema,e.table,e.attribute,e.id);try{let i=await hR.openEnvironment(DJ(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);hR.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await hR.openEnvironment(PJ(),wJ.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await CJ.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return UJ(BJ,c,{records:[s]},l)}catch(i){throw i}}a(HJ,"lmdbCreateAttribute")});var mR=O((dye,LD)=>{var{hdb_table:xJ,hdb_database:DD}=Ti(),kJ=_t(),pR=require("joi"),FJ={undefined:"undefined",null:"null"},GJ=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||FJ[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),qJ=pR.object({database:DD,schema:DD,table:xJ,records:pR.array().items(pR.object().custom(GJ)).required()});LD.exports=function(e){return kJ.validateBySchema(e,qJ)}});var __=O((Eye,UD)=>{"use strict";var Zi=te(),MD=K(),fye=mR(),{getDatabases:$J}=(Pe(),oe(ut)),{ClientError:sc}=_e();UD.exports=VJ;function VJ(e){if(Zi.isEmpty(e))throw new sc("invalid update parameters defined.");if(Zi.isEmptyOrZeroLength(e.schema))throw new sc("invalid schema specified.");if(Zi.isEmptyOrZeroLength(e.table))throw new sc("invalid table specified.");if(!Array.isArray(e.records))throw new sc("records must be an array");let t=$J()[e.schema]?.[e.table];if(Zi.isEmpty(t))throw new sc(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&Zi.isEmptyOrZeroLength(o[r]))throw MD.error("a valid hash attribute must be provided with update record:",o),new sc("a valid hash attribute must be provided with update record, check log for more info");if(!Zi.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw MD.error(`a valid hash value must be provided with ${e.operation} record:`,o),new sc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Zi.isEmpty(o[r])&&o[r]!==""&&n.has(Zi.autoCast(o[r]))&&(o.skip=!0),n.add(Zi.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(VJ,"insertUpdateValidate")});var BD=O((pye,vD)=>{"use strict";var SR=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};vD.exports=SR});var kD=O((Sye,xD)=>{"use strict";var TR=mt(),KJ=K(),HD=Pn().LMDB_ERRORS_ENUM;xD.exports=YJ;async function YJ(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await TR.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==HD.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await TR.closeEnvironment(global.lmdb_map[n]),await TR.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==HD.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){KJ.error(t)}}a(YJ,"cleanLMDBMap")});var eo=O((gye,$D)=>{"use strict";var f_=require("crypto"),WJ=ne(),{CONFIG_PARAMS:jJ}=L(),GD="aes-256-cbc",zJ=32,QJ=16,gR=64,qD=32,JJ=gR+qD,FD=new Map;$D.exports={encrypt:XJ,decrypt:ZJ,createNatsTableStreamName:e3};function XJ(e){let t=f_.randomBytes(zJ),r=f_.randomBytes(QJ),n=f_.createCipheriv(GD,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(XJ,"encrypt");function ZJ(e){let t=e.substr(0,gR),r=e.substr(gR,qD),n=e.substr(JJ,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=f_.createDecipheriv(GD,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(ZJ,"decrypt");function e3(e,t){let r=WJ.get(jJ.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=FD.get(r);return n||(n=f_.createHash("md5").update(r).digest("hex"),FD.set(r,n)),n}a(e3,"createNatsTableStreamName")});var Ri=O((yye,YD)=>{"use strict";var Aye=$r(),E_=K(),VD=Uh(),t3=eo(),Hh=te(),{handleHDBError:xh,hdb_errors:r3}=_e(),{HDB_ERROR_MSGS:kh,HTTP_STATUS_CODES:RR}=r3,KD=ne();KD.initSync();var{getDatabases:AR}=(Pe(),oe(ut)),n3=require("fs-extra"),s3=L();YD.exports={describeAll:i3,describeTable:Fh,describeSchema:o3};async function i3(e={}){try{let t=Hh.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=AR(),o={},c={},l=[],u=e?.exact_count;for(let _ in i){o[_]=!0,!t&&!s&&!r&&(c[_]=e.hdb_user?.role?.permission[_]?.describe);let E=i[_];for(let f in E)try{let h;if(t||s||r)h=await Fh({schema:_,table:f,exact_count:u});else if(n&&n[_].describe&&n[_].tables[f].describe){let T=n[_].tables[f].attribute_permissions;h=await Fh({schema:_,table:f,exact_count:u},T)}h&&l.push(h)}catch(h){E_.error(h)}}let d={};for(let _ in l)t||s||r?(d[l[_].schema]==null&&(d[l[_].schema]={}),d[l[_].schema][l[_].name]=l[_],o[l[_].schema]&&delete o[l[_].schema]):c[l[_].schema]&&(d[l[_].schema]==null&&(d[l[_].schema]={}),d[l[_].schema][l[_].name]=l[_],o[l[_].schema]&&delete o[l[_].schema]);for(let _ in o)t||s||r?d[_]={}:c[_]&&(d[_]={});return d}catch(t){return E_.error("Got an error in describeAll"),E_.error(t),xh(new Error,kh.DESCRIBE_ALL_ERR)}}a(i3,"describeAll");async function Fh(e,t){Hh.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(s=e.hdb_user?.role?.permission[r]?.tables[n]?.attribute_permissions);let i=VD.describe_table(e);if(i)throw i;let c=AR()[r];if(!c)throw xh(new Error,kh.SCHEMA_NOT_FOUND(e.schema),RR.NOT_FOUND);let l=c[n];if(!l)throw xh(new Error,kh.TABLE_NOT_FOUND(e.schema,e.table),RR.NOT_FOUND);function u(f){d.push({attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(h=>({type:h.type,name:h.name})):void 0})}a(u,"pushAtt");let d=[];if(s){let f={};s.forEach(h=>{h.describe&&(f[h.attribute_name]=!0)}),l.attributes.forEach(h=>{f[h.name]&&u(h)})}else l.attributes?.forEach(f=>u(f));let _;try{_=(await n3.stat(l.primaryStore.env.path)).size}catch(f){E_.warn("unable to get database size",f)}let E={schema:r,name:l.tableName,hash_attribute:l.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:_};l.replicate!==void 0&&(E.replicate=l.replicate),l.expirationMS!==void 0&&(E.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(E.sealed=l.sealed),l.sources?.length>0&&(E.sources=l.sources.map(f=>f.name).filter(f=>f&&f!=="NATSReplicator"&&f!=="Replicator")),KD.get(s3.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(E.clustering_stream_name=t3.createNatsTableStreamName(E.schema,E.name));try{let f=l.getRecordCount({exactCount:e.exact_count==="true"});E.record_count=f.recordCount,E.table_size=l.getSize(),E.db_audit_size=l.getAuditSize(),E.estimated_record_range=f.estimatedRange;let h=l.auditStore;if(h)for(let T of h.getKeys({reverse:!0,limit:1}))E.last_updated_record=T[0];if(!E.last_updated_record&&l.indices.__updatedtime__)for(let T of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))E.last_updated_record=T}catch(f){E_.warn(`unable to stat table dbi due to ${f}`)}return E}a(Fh,"descTable");async function o3(e){Hh.transformReq(e);let t=VD.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(r=e.hdb_user?.role?.permission[e.schema]);let n=e.schema.toString(),i=AR()[n];if(!i)throw xh(new Error,kh.SCHEMA_NOT_FOUND(e.schema),RR.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Hh.isEmpty(l)||l.describe){let u=await Fh({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(o3,"describeSchema")});var us=O((Iye,JD)=>{var a3=Xi(),{callbackify:jD,promisify:c3}=require("util"),{getDatabases:zD}=(Pe(),oe(ut));JD.exports={setSchemaDataToGlobal:WD,getTableSchema:l3,getSystemSchema:u3,setSchemaDataToGlobalAsync:c3(WD)};var QD=Ri(),Oye=jD(QD.describeAll),Nye=jD(QD.describeTable);function WD(e){global.hdb_schema=zD(),e&&e()}a(WD,"setSchemaDataToGlobal");function l3(e,t,r){let n=zD()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(l3,"getTableSchema");function u3(){return a3}a(u3,"getSystemSchema")});var Vr=O((Cye,tL)=>{"use strict";var qh=mR(),Cr=te(),d3=require("util"),$h=Un(),_3=us(),XD=K(),{handleHDBError:ic,hdb_errors:f3}=_e(),{HTTP_STATUS_CODES:oc}=f3,E3=d3.promisify(_3.getTableSchema),h3="updated",ZD="inserted",eL="upserted";tL.exports={insert:m3,update:S3,upsert:T3,validation:p3,flush:g3};async function p3(e){if(Cr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Cr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Cr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await E3(e.schema,e.table),r=qh(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Cr.isEmptyOrZeroLength(c[n]))throw XD.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Cr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw XD.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Cr.isEmpty(c[n])&&c[n]!==""&&s.has(Cr.autoCast(c[n]))&&(c.skip=!0),s.add(Cr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(p3,"validation");async function m3(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=qh(e);if(t)throw ic(new Error,t.message,oc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw ic(new Error,r,oc.BAD_REQUEST);let n=await $h.createRecords(e);return Gh(ZD,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(m3,"insertData");async function S3(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=qh(e);if(t)throw ic(new Error,t.message,oc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw ic(new Error,r,oc.BAD_REQUEST);let n=await $h.updateRecords(e);return Cr.isEmpty(n.existing_rows)?Gh(h3,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Gh(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(S3,"updateData");async function T3(e){if(e.operation!=="upsert")throw ic(new Error,"invalid operation, must be upsert",oc.INTERNAL_SERVER_ERROR);let t=qh(e);if(t)throw ic(new Error,t.message,oc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw ic(new Error,r,oc.BAD_REQUEST);let n=await $h.upsertRecords(e);return Gh(eL,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(T3,"upsertData");function Gh(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===ZD?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===eL?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Gh,"returnObject");function g3(e){return Cr.transformReq(e),$h.flush(e.schema,e.table)}a(g3,"flush")});var bR=O((Dye,sL)=>{var R3=_t(),yR=require("joi"),{hdb_table:A3,hdb_database:rL}=Ti(),nL={schema:rL,database:rL,table:A3},y3={date:yR.date().iso().required()},b3={timestamp:yR.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};sL.exports=function(e,t){let r=t==="timestamp"?{...nL,...b3}:{...nL,...y3},n=yR.object(r);return R3.validateBySchema(e,n)}});var aL=O((Lye,oL)=>{var O3=_t(),OR=require("joi"),{hdb_table:N3,hdb_database:iL}=Ti(),I3=OR.object({schema:iL,database:iL,table:N3,hash_values:OR.array().required(),ids:OR.array()});oL.exports=function(e){return O3.validateBySchema(e,I3)}});var CR=O((Mye,cL)=>{"use strict";var NR=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},IR=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},wR=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};cL.exports={InsertObject:NR,NoSQLSeachObject:IR,DeleteResponseObject:wR}});var zo=O((vye,fL)=>{"use strict";var uL=bR(),w3=aL(),ac=te(),lL=require("moment"),dL=K(),{promisify:C3,callbackify:P3}=require("util"),cc=L(),D3=us(),PR=C3(D3.getTableSchema),DR=Un(),{DeleteResponseObject:L3}=CR(),{handleHDBError:Wo,hdb_errors:M3}=_e(),{HDB_ERROR_MSGS:Vh,HTTP_STATUS_CODES:jo}=M3,U3="records successfully deleted",v3=P3(_L);fL.exports={delete:v3,deleteRecord:_L,deleteFilesBefore:B3,deleteAuditLogsBefore:H3};async function B3(e){let t=uL(e,"date");if(t)throw Wo(t,t.message,jo.BAD_REQUEST,void 0,void 0,!0);if(ac.transformReq(e),!lL(e.date,lL.ISO_8601).isValid())throw Wo(new Error,Vh.INVALID_DATE,jo.BAD_REQUEST,cc.LOG_LEVELS.ERROR,Vh.INVALID_DATE,!0);let n=ac.checkSchemaTableExist(e.schema,e.table);if(n)throw Wo(new Error,n,jo.NOT_FOUND,cc.LOG_LEVELS.ERROR,n,!0);let s=await DR.deleteRecordsBefore(e);if(await PR(e.schema,e.table),dL.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(B3,"deleteFilesBefore");async function H3(e){let t=uL(e,"timestamp");if(t)throw Wo(t,t.message,jo.BAD_REQUEST,void 0,void 0,!0);if(ac.transformReq(e),isNaN(e.timestamp))throw Wo(new Error,Vh.INVALID_VALUE("Timestamp"),jo.BAD_REQUEST,cc.LOG_LEVELS.ERROR,Vh.INVALID_VALUE("Timestamp"),!0);let r=ac.checkSchemaTableExist(e.schema,e.table);if(r)throw Wo(new Error,r,jo.NOT_FOUND,cc.LOG_LEVELS.ERROR,r,!0);let n=await DR.deleteAuditLogsBefore(e);return await PR(e.schema,e.table),dL.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(H3,"deleteAuditLogsBefore");async function _L(e){e.ids&&(e.hash_values=e.ids);let t=w3(e);if(t)throw Wo(t,t.message,jo.BAD_REQUEST,void 0,void 0,!0);ac.transformReq(e);let r=ac.checkSchemaTableExist(e.schema,e.table);if(r)throw Wo(new Error,r,jo.NOT_FOUND,cc.LOG_LEVELS.ERROR,r,!0);try{await PR(e.schema,e.table);let n=await DR.deleteRecords(e);return ac.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${U3}`),n}catch(n){if(n.message===cc.SEARCH_NOT_FOUND_MESSAGE){let s=new L3;return s.message=cc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(_L,"deleteRecord")});var Kh=O((Hye,pL)=>{var x3=require("crypto"),EL=9;function k3(e){let t=G3(EL),r=hL(e+t);return t+r}a(k3,"createHash");function F3(e,t){let r=e?.substr(0,EL),n=r+hL(t+r);return e===n}a(F3,"validateHash");function G3(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a(G3,"generateSalt");function hL(e){return x3.createHash("md5").update(e).digest("hex")}a(hL,"md5");pL.exports={hash:k3,validate:F3}});var SL=O((kye,mL)=>{var LR=_t(),Kr={username:{presence:!0,exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function q3(e){return Kr.password.presence=!0,Kr.username.presence=!0,Kr.role.presence=!0,Kr.active.presence=!0,LR.validateObject(e,Kr)}a(q3,"addUserValidation");function $3(e){return Kr.password.presence=!1,Kr.username.presence=!0,Kr.role.presence=!1,Kr.active.presence=!1,LR.validateObject(e,Kr)}a($3,"alterUserValidation");function V3(e){return Kr.password.presence=!1,Kr.username.presence=!0,Kr.role.presence=!1,Kr.active.presence=!1,LR.validateObject(e,Kr)}a(V3,"dropUserValidation");mL.exports={addUserValidation:q3,alterUserValidation:$3,dropUserValidation:V3}});var ft=O((qye,gL)=>{"use strict";var{platform:Gye}=require("os"),K3="nats-server.zip",MR="nats-server",Y3=process.platform==="win32"?`${MR}.exe`:MR,W3=/^[^\s.,*>]+$/,TL="__request__",j3=a(e=>`${e}.${TL}`,"REQUEST_SUBJECT"),z3={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Q3={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},J3={HUB:"hub.pid",LEAF:"leaf.pid"},X3={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Z3={SUCCESS:"success",ERROR:"error"},eX={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},tX={TXN:"txn",MSGID:"msgid"},Hl={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},rX={[Hl.ERR]:1,[Hl.WRN]:2,[Hl.INF]:3,[Hl.DBG]:4,[Hl.TRC]:5},nX={debug:"-D",trace:"-DVV"};gL.exports={NATS_SERVER_ZIP:K3,NATS_SERVER_NAME:MR,NATS_BINARY_NAME:Y3,PID_FILES:J3,NATS_CONFIG_FILES:Q3,SERVER_SUFFIX:X3,NATS_TERM_CONSTRAINTS_RX:W3,REQUEST_SUFFIX:TL,UPDATE_REMOTE_RESPONSE_STATUSES:Z3,CLUSTER_STATUS_STATUSES:eX,REQUEST_SUBJECT:j3,SUBJECT_PREFIXES:tX,MSG_HEADERS:z3,LOG_LEVELS:Hl,LOG_LEVEL_FLAGS:nX,LOG_LEVEL_HIERARCHY:rX}});var UR=O(RL=>{"use strict";var sX={cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
|
|
9
9
|
`),key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
|
|
10
10
|
`)},iX="certificate.pem",oX="privateKey.pem",aX="caCertificate.pem",cX="natsCertificate.pem",lX="natsCaCertificate.pem",yt={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},uX={tls_certificate:yt.SERVER,tls_certificateAuthority:yt.CA,customFunctions_tls_certificate:yt.SERVER,customFunctions_tls_certificateAuthority:yt.CA,operationsApi_tls_certificate:yt["OPERATIONS-API"],operationsApi_tls_certificateAuthority:yt["OPERATIONS-CA"]},dX={[yt.SERVER]:2,[yt.DEFAULT]:1},_X={[yt["OPERATIONS-API"]]:3,[yt.SERVER]:2,[yt.DEFAULT]:1},fX={[yt["OPERATIONS-API"]]:3,[yt.SERVER]:2,[yt.DEFAULT]:1},EX={[yt["OPERATIONS-CA"]]:3,[yt.CA]:2,[yt["DEFAULT-CA"]]:1},hX={[yt["OPERATIONS-CA"]]:3,[yt.CA]:2,[yt["DEFAULT-CA"]]:1},pX={[yt.CA]:2,[yt["DEFAULT-CA"]]:1};Object.assign(RL,{CERTIFICATE_PEM_NAME:iX,PRIVATEKEY_PEM_NAME:oX,CA_PEM_NAME:aX,CERT_NAME:yt,CERT_CONFIG_NAME_MAP:uX,CERT_PREFERENCE_APP:dX,CERT_PREFERENCE_OPS:_X,CERT_PREFERENCE_REP:fX,CA_CERT_PREFERENCE_REP:EX,CA_CERT_PREFERENCE_OPS:hX,CA_CERT_PREFERENCE_APP:pX,CERTIFICATE_VALUES:sX,NATS_CERTIFICATE_PEM_NAME:cX,NATS_CA_PEM_NAME:lX})});var BR=O((Yye,IL)=>{"use strict";var OL=require("fs-extra"),me=require("joi"),mX=require("os"),{boolean:He,string:wt,number:nr,array:uc}=me.types(),{totalmem:AL}=require("os"),lc=require("path"),SX=K(),vR=te(),Kye=UR(),yL=L(),TX=_t(),bL="log",gX="components",RX="Invalid logging.rotation.maxSize unit. Available units are G, M or K",AX="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",yX="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",bX="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",OX="rootPath config parameter is undefined",ln=me.alternatives([nr.min(0),wt]).optional().empty(null),Yh=me.alternatives([uc.items(wt,{host:wt.required(),port:ln},{hostname:wt.required(),port:ln}).empty(null),uc.items(wt)]),Ai,NL=!1;IL.exports={configValidator:NX,routesValidator:LX,route_constraints:Yh};function NX(e,t=!1){if(NL=t,Ai=e.rootPath,vR.isEmpty(Ai))throw OX;let r=He.optional(),n=nr.min(0).max(1e3).empty(null).default(DX),s=wt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(h_),i=wt.optional().empty(null),o=wt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=me.string().empty(null).default(h_),l=me.custom(wX).empty(null).default(h_),u=e.clustering?.enabled,d=me.object({certificate:i,certificateAuthority:i,privateKey:i}),_;return u===!0?_=me.object({enabled:r,hubServer:me.object({cluster:me.object({name:me.required().empty(null),network:me.object({port:ln,routes:Yh}).required()}).required(),leafNodes:me.object({network:me.object({port:ln}).required()}).required(),network:me.object({port:ln}).required()}).required(),leafServer:me.object({network:me.object({port:ln,routes:Yh}).required(),streams:me.object({maxAge:nr.min(120).allow(null).optional(),maxBytes:nr.min(1).allow(null).optional(),maxMsgs:nr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:me.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:He.optional(),databaseLevel:He.optional(),tls:me.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:He.required(),verify:He.optional()}),user:wt.optional().empty(null)}).optional():_=me.object({enabled:r,tls:me.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:He.optional()})}).optional(),me.object({authentication:me.alternatives(me.object({authorizeLocal:He,cacheTTL:nr.required(),enableSessions:He}),He).optional(),analytics:me.object({aggregatePeriod:nr}),replication:me.object({hostname:me.alternatives(wt,nr).optional().empty(null),url:wt.optional().empty(null),port:ln,securePort:ln,routes:uc.optional().empty(null),databases:me.alternatives(wt,uc),enableRootCAs:He.optional(),copyTablesToCatchUp:He.optional()}).optional(),componentsRoot:s.optional(),clustering:_,localStudio:me.object({enabled:r}).required(),logging:me.object({auditAuthEvents:me.object({logFailed:He,logSuccessful:He}),file:He.required(),level:me.valid("notify","fatal","error","warn","info","debug","trace"),rotation:me.object({enabled:He.optional(),compress:He.optional(),interval:wt.custom(PX).optional().empty(null),maxSize:wt.custom(CX).optional().empty(null),path:wt.optional().empty(null).default(h_)}).required(),root:s,stdStreams:He.required(),auditLog:He.required()}).required(),operationsApi:me.object({network:me.object({cors:He.optional(),corsAccessList:uc.optional(),headersTimeout:nr.min(1).optional(),keepAliveTimeout:nr.min(1).optional(),port:ln,domainSocket:me.optional().empty("hdb/operations-server").default(h_),securePort:ln,timeout:nr.min(1).optional()}).optional(),tls:me.alternatives([me.array().items(d),d])}).required(),rootPath:wt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:me.object({network:me.object({port:ln,securePort:ln,mtls:me.alternatives([He.optional(),me.object({user:wt.optional(),certificateAuthority:i,required:He.optional()})])}).required(),webSocket:He.optional(),requireAuthentication:He.optional()}),http:me.object({compressionThreshold:nr.optional(),cors:He.optional(),corsAccessList:uc.optional(),headersTimeout:nr.min(1).optional(),port:ln,securePort:ln,maxHeaderSize:nr.optional(),mtls:me.alternatives([He.optional(),me.object({user:wt.optional(),certificateAuthority:i,required:He.optional()})]),threadRange:me.alternatives([uc.optional(),wt.optional()])}).required(),threads:me.alternatives(n.optional(),me.object({count:n.optional(),debug:me.alternatives(He.optional(),me.object({startingPort:nr.min(1).optional(),host:wt.optional(),waitForDebugger:He.optional()})),maxHeapMemory:nr.min(0).optional()})),storage:me.object({writeAsync:He.required(),overlappingSync:He.optional(),caching:He.optional(),compression:me.alternatives([He.optional(),me.object({dictionary:wt.optional(),threshold:nr.optional()})]),compactOnStart:He.optional(),compactOnStartKeepBackup:He.optional(),noReadAhead:He.optional(),path:l,prefetchWrites:He.optional(),maxFreeSpaceToLoad:nr.optional(),maxFreeSpaceToRetain:nr.optional()}).required(),ignoreScripts:He.optional(),tls:me.alternatives([me.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(NX,"configValidator");function IX(e){return NL||OL.existsSync(e)?null:`Specified path ${e} does not exist.`}a(IX,"doesPathExist");function wX(e,t){me.assert(e,wt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=IX(e);if(r)return t.message(r)}a(wX,"validatePath");function CX(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(RX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(yX):e}a(CX,"validateRotationMaxSize");function PX(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(AX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(bX):e}a(PX,"validateRotationInterval");function DX(e,t){let r=t.state.path.join("."),n=mX.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||AL();return i=Math.round(Math.min(i,AL())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),SX.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(DX,"setDefaultThreads");function h_(e,t){let r=t.state.path.join(".");if(!vR.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(vR.isEmpty(Ai))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return lc.join(Ai,gX);case"logging.root":return lc.join(Ai,bL);case"clustering.leafServer.streams.path":return lc.join(Ai,"clustering","leaf");case"storage.path":let n=lc.join(Ai,yL.LEGACY_DATABASES_DIR_NAME);return OL.existsSync(n)?n:lc.join(Ai,yL.DATABASES_DIR_NAME);case"logging.rotation.path":return lc.join(Ai,bL);case"operationsApi.network.domainSocket":return r==null?null:lc.join(Ai,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(h_,"setDefaultRoot");function LX(e){let t=me.object({routes:Yh});return TX.validateBySchema({routes:e},t)}a(LX,"routesValidator")});var Ct=O(HL=>{"use strict";var un=L(),hr=te(),pr=K(),{configValidator:MX,routesValidator:wL}=BR(),Yr=require("fs-extra"),PL=require("yaml"),Bn=require("path"),UX=require("is-number"),DL=require("properties-reader"),vX=require("lodash"),{handleHDBError:BX}=_e(),{HTTP_STATUS_CODES:HX,HDB_ERROR_MSGS:xl}=Pn(),{server:xX}=(qr(),oe(Ja)),{DATABASES_PARAM_CONFIG:p_,CONFIG_PARAMS:vn,CONFIG_PARAM_MAP:qs}=un,kX="Unable to get config value because config is uninitialized",FX="Config successfully initialized",GX="Error backing up config file",qX="Empty parameter sent to getConfigValue",LL=Bn.join(un.PACKAGE_ROOT,"config","yaml",un.HDB_DEFAULT_CONFIG_FILE),$X=Bn.join(un.PACKAGE_ROOT,"config","yaml","defaultNatsConfig.yaml"),VX="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",CL={logging_rotation_retain:"logging.rotation.retain",logging_rotation_rotate:"logging.rotation.rotate",logging_rotation_rotateinterval:"logging.rotation.rotateInterval",logging_rotation_rotatemodule:"logging.rotation.rotateModule",logging_rotation_timezone:"logging.rotation.timezone",logging_rotation_workerinterval:"logging.rotation.workerInterval"},Wh,zt,jh;Object.assign(HL,{createConfigFile:KX,getDefaultConfig:YX,getConfigValue:UL,initConfig:zh,flattenConfig:kl,updateConfigValue:vL,updateConfigObject:jX,getConfiguration:JX,setConfiguration:XX,readConfigFile:FR,getClusteringRoutes:ZX,initOldConfig:BL,getConfigFromFile:eZ,getConfigFilePath:dc,addConfig:tZ,deleteConfigFromFile:rZ,getConfigObj:nZ,resolvePath:HR,getFlatConfigObj:sZ});function HR(e){if(e?.startsWith("~/"))return Bn.join(hr.getHomeDir(),e.slice(1));let t=ne();return Bn.resolve(t.getHdbBasePath(),e)}a(HR,"resolvePath");function KX(e,t=!1){let r=Qo(LL);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=PL.parseDocument(Yr.readFileSync($X,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}Wh=kl(r.toJSON());let n;for(let c in e){let l=qs[c.toLowerCase()];if(l===vn.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(u=>({[u]:e[c][u]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let u=l.split("_"),d=xR(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{r.setIn([...u],d)}catch(_){pr.error(_)}}}n&&ML(r,n),kR(r,t);let s=r.toJSON();zt=kl(s);let i=r.getIn(["rootPath"]),o=Bn.join(i,un.HDB_CONFIG_FILE);Yr.createFileSync(o),Yr.writeFileSync(o,String(r)),pr.trace(`Config file written to ${o}`)}a(KX,"createConfigFile");function ML(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!hr.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(p_.TABLES))for(let i in n[s][p_.TABLES])for(let o in n[s][p_.TABLES][i]){let c=n[s][p_.TABLES][i][o],l=[vn.DATABASES,s,p_.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[vn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){pr.error("Error parsing schemas CLI/env config arguments",n)}}a(ML,"setSchemasConfig");function YX(e){if(Wh===void 0){let r=Qo(LL);Wh=kl(r.toJSON())}let t=qs[e.toLowerCase()];if(t!==void 0)return Wh[t.toLowerCase()]}a(YX,"getDefaultConfig");function UL(e){if(e==null){pr.info(qX);return}if(zt===void 0){pr.trace(kX);return}let t=qs[e.toLowerCase()];if(t!==void 0)return zt[t.toLowerCase()]}a(UL,"getConfigValue");function dc(e=hr.getPropsFilePath()){let t=hr.getEnvCliRootPath();if(t)return HR(Bn.join(t,un.HDB_CONFIG_FILE));let r=DL(e);return HR(r.get(un.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(dc,"getConfigFilePath");function zh(e=!1){if(zt===void 0||e){let t;if(!hr.noBootFile()){t=hr.getPropsFilePath();try{Yr.accessSync(t,Yr.constants.F_OK|Yr.constants.R_OK)}catch(i){throw pr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=dc(t),n;if(r.includes("config/settings.js"))try{BL(r);return}catch(i){if(i.code!==un.NODE_ERROR_CODES.ENOENT)throw i}try{n=Qo(r)}catch(i){if(i.code===un.NODE_ERROR_CODES.ENOENT){pr.trace(`HarperDB config file not found at ${r}.
|
|
11
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw pr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}WX(n,r),kR(n);let s=n.toJSON();if(xX.config=s,zt=kl(s),zt.logging_rotation_rotate)for(let i in CL)zt[i]&&pr.error(`Config ${CL[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);pr.trace(FX)}}a(zh,"initConfig");function WX(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Bn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Bn.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(pr.trace("Updating config file with missing config params"),Yr.writeFileSync(t,String(e)))}a(WX,"checkForUpdatedConfig");function kR(e,t=!1){let r=e.toJSON();if(r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads),r.http?.port&&r.http?.port===r.http?.securePort)throw xl.CONFIG_VALIDATION("http.port and http.securePort cannot be the same value");if(r.operationsApi?.network?.port&&r.operationsApi?.network?.port===r.operationsApi?.network?.securePort)throw xl.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=MX(r,t);if(n.error)throw xl.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}a(kR,"validateConfig");function jX(e,t){zt===void 0&&(zt={});let r=qs[e.toLowerCase()];if(r===void 0){pr.trace(`Unable to update config object because config param '${e}' does not exist`);return}zt[r.toLowerCase()]=t}a(jX,"updateConfigObject");function vL(e,t,r=void 0,n=!1,s=!1,i=!1){zt===void 0&&zh();let o=UL(qs.hdb_root),c=Bn.join(o,un.HDB_CONFIG_FILE),l=Qo(c),u;if(r===void 0&&e.toLowerCase()===vn.DATABASES)u=t;else if(r===void 0){let E;if(i)E=e;else if(E=qs[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=xR(E,t);l.setIn([...f],h)}else for(let E in r){let f=qs[E.toLowerCase()];if(f===vn.HTTP_SECUREPORT&&r[E]===zt[vn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),f===vn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===zt[vn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),f===vn.DATABASES){u=r[E];continue}if(f?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),T=un.LEGACY_CONFIG_PARAMS[E.toUpperCase()];T&&T.startsWith("customFunctions")&&l.hasIn(T.split("_"))&&(f=T,h=T.split("_"));let m=xR(f,r[E]);f==="rootPath"&&m?.endsWith("/")&&(m=m.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],m)}catch(g){pr.error(g)}}}u&&ML(l,u),kR(l);let d=l.getIn(["rootPath"]),_=Bn.join(d,un.HDB_CONFIG_FILE);n===!0&&zX(c,d),Yr.writeFileSync(_,String(l)),s&&(zt=kl(l.toJSON())),pr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(vL,"updateConfigValue");function zX(e,t){try{let r=Bn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${un.HDB_CONFIG_FILE}.bak`);Yr.copySync(e,r),pr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){pr.error(GX),pr.error(r)}}a(zX,"backupConfigFile");var QX=["databases"];function kl(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network={...e.http,...e.operationsApi.network}),e?.operationsApi&&(e.operationsApi.tls={...e.tls,...e.operationsApi.tls}),jh=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!QX.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!vn[l.toUpperCase()]&&qs[l]&&(s[qs[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(kl,"flattenConfig");function xR(e,t){if(e===vn.CLUSTERING_NODENAME||e===vn.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(UX(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||hr.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return hr.autoCast(t)}a(xR,"castConfigValue");function JX(){let e=hr.getPropsFilePath(),t=dc(e);return Qo(t).toJSON()}a(JX,"getConfiguration");async function XX(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return vL(void 0,void 0,s,!0),VX}catch(i){throw typeof i=="string"||i instanceof String?BX(i,i,HX.BAD_REQUEST,void 0,void 0,!0):i}}a(XX,"setConfiguration");function FR(){let e=hr.getPropsFilePath();try{Yr.accessSync(e,Yr.constants.F_OK|Yr.constants.R_OK)}catch(n){if(!hr.noBootFile())throw pr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=dc(e);return Qo(t).toJSON()}a(FR,"readConfigFile");function Qo(e){return PL.parseDocument(Yr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Qo,"parseYamlDoc");function ZX(){let e=FR(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=hr.isEmptyOrZeroLength(t)?[]:t;let r=wL(t);if(r)throw xl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=hr.isEmptyOrZeroLength(n)?[]:n;let s=wL(n);if(s)throw xl.CONFIG_VALIDATION(s.message);if(!hr.isEmptyOrZeroLength(n)&&!hr.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!hr.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw xl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(ZX,"getClusteringRoutes");function BL(e){let t=DL(e);zt={};for(let r in qs){let n=t.get(r.toUpperCase());if(hr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=qs[r].toLowerCase();s===vn.LOGGING_ROOT?zt[s]=Bn.dirname(n):zt[s]=n}return zt}a(BL,"initOldConfig");function eZ(e){let t=FR();return vX.get(t,e.replaceAll("_","."))}a(eZ,"getConfigFromFile");async function tZ(e,t){let r=Qo(dc());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Yr.writeFile(dc(),String(r))}a(tZ,"addConfig");function rZ(e){let t=dc(hr.getPropsFilePath()),r=Qo(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Bn.join(n,un.HDB_CONFIG_FILE);Yr.writeFileSync(s,String(r))}a(rZ,"deleteConfigFromFile");function nZ(){return jh||(zh(),jh)}a(nZ,"getConfigObj");function sZ(){return zt||zh(),zt}a(sZ,"getFlatConfigObj")});var kL=O((Qye,xL)=>{"use strict";var Qh=L(),Jh=class{static{a(this,"BaseLicense")}constructor(t=0,r=Qh.RAM_ALLOCATION_ENUM.DEFAULT,n=Qh.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},GR=class extends Jh{static{a(this,"ExtendedLicense")}constructor(t=0,r=Qh.RAM_ALLOCATION_ENUM.DEFAULT,n=Qh.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};xL.exports={BaseLicense:Jh,ExtendedLicense:GR}});var _c=O((Xye,YL)=>{"use strict";var Gl=require("fs-extra"),GL=Kh(),qL=require("crypto"),iZ=require("moment"),oZ=require("uuid").v4,Wr=K(),$R=require("path"),aZ=te(),Jo=L(),{totalmem:FL}=require("os"),cZ=kL().ExtendedLicense,Fl="invalid license key format",lZ="061183",uZ="mofi25",dZ="aes-256-cbc",_Z=16,fZ=32,$L=ne(),{resolvePath:VL}=Ct();$L.initSync();var qR;YL.exports={validateLicense:KL,generateFingerPrint:hZ,licenseSearch:YR,getLicense:SZ,checkMemoryLimit:TZ};function VR(){return $R.join($L.getHdbBasePath(),Jo.LICENSE_KEY_DIR_NAME,Jo.LICENSE_FILE_NAME)}a(VR,"getLicenseDirPath");function EZ(){let e=VR();return VL($R.join(e,Jo.LICENSE_FILE_NAME))}a(EZ,"getLicenseFilePath");function KR(){let e=VR();return VL($R.join(e,Jo.REG_KEY_FILE_NAME))}a(KR,"getFingerPrintFilePath");async function hZ(){let e=KR();try{return await Gl.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await pZ();throw Wr.error(`Error writing fingerprint file to ${e}`),Wr.error(t),new Error("There was an error generating the fingerprint")}}a(hZ,"generateFingerPrint");async function pZ(){let e=oZ(),t=GL.hash(e),r=KR();try{await Gl.mkdirp(VR()),await Gl.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Wr.error(`Error writing fingerprint file to ${r}`),Wr.error(n),new Error("There was an error generating the fingerprint")}return t}a(pZ,"writeFingerprint");function KL(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Jo.RAM_ALLOCATION_ENUM.DEFAULT,version:Jo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Wr.error("empty license key passed to validate."),r;let n=KR(),s=!1;try{s=Gl.statSync(n)}catch(i){Wr.error(i)}if(s){let i;try{i=Gl.readFileSync(n,"utf8")}catch{Wr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(uZ),c=o[1];c=Buffer.concat([Buffer.from(c)],_Z);let l=Buffer.concat([Buffer.from(i)],fZ),u=qL.createDecipheriv(dZ,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let d=null;try{d=u.update(o[0],"hex","utf8"),d.trim(),d+=u.final("utf8")}catch{let f=mZ(o[0],i);if(f)d=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Fl),Wr.error(Fl),new Error(Fl)}let _;if(isNaN(d))try{_=JSON.parse(d),r.version=_.version,r.exp_date=_.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),_.ram_allocation&&(r.ram_allocation=_.ram_allocation)}catch{throw console.error(Fl),Wr.error(Fl),new Error(Fl)}else r.exp_date=d;r.exp_date<iZ().valueOf()&&(r.valid_date=!1),GL.validate(o[1],`${lZ}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Wr.error("Invalid licence"),r}a(KL,"validateLicense");function mZ(e,t){try{let r=qL.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Wr.warn("Check old license failed")}}a(mZ,"checkOldLicense");function YR(){let e=new cZ,t=[];try{t=Gl.readFileSync(EZ(),"utf-8").split(Jo.NEW_LINE)}catch(r){r.code==="ENOENT"?Wr.debug("no license file found"):Wr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(aZ.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=KL(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){Wr.error("There was an error parsing the license string."),Wr.error(s),e.ram_allocation=Jo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return qR=e,e}a(YR,"licenseSearch");async function SZ(){return qR||await YR(),qR}a(SZ,"getLicense");function TZ(){let e=YR().ram_allocation,t=process.constrainedMemory?.()||FL();if(t=Math.round(Math.min(t,FL())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(TZ,"checkMemoryLimit")});var xn=O((nbe,cM)=>{"use strict";var QL="username is required",JL="nothing to update, must supply active, role or password to update",XL="password cannot be an empty string",ZL="If role is specified, it cannot be empty.",eM="active must be true or false";cM.exports={addUser:wZ,alterUser:CZ,dropUser:DZ,getSuperUser:vZ,userInfo:LZ,listUsers:Zh,listUsersExternal:MZ,setUsersToGlobal:$l,findAndValidateUser:oM,getClusterUser:BZ,USERNAME_REQUIRED:QL,ALTERUSER_NOTHING_TO_UPDATE:JL,EMPTY_PASSWORD:XL,EMPTY_ROLE:ZL,ACTIVE_BOOLEAN:eM};var tM=Vr(),gZ=zo(),zR=Kh(),rM=SL(),nM=$r(),QR=to(),Hn=te(),sM=require("validate.js"),Ke=K(),{promisify:RZ}=require("util"),JR=eo(),WL=L(),jL=ft(),AZ=Ct(),ebe=ne(),tbe=_c(),yZ=Xi(),{table:rbe}=(Pe(),oe(ut)),{handleHDBError:yi,hdb_errors:bZ}=_e(),{HTTP_STATUS_CODES:bi,AUTHENTICATION_ERROR_MSGS:WR,HDB_ERROR_MSGS:ql}=bZ,{UserEventMsg:XR}=$s(),jR=require("lodash"),{server:ZR}=(qr(),oe(Ja)),OZ=K();ZR.getUser=(e,t)=>oM(e,t,t!=null);var iM={username:!0,active:!0,role:!0,password:!0},zL=new Map,Xh=nM.searchByValue,NZ=nM.searchByHash,IZ=RZ(gZ.delete);async function wZ(e){let t=sM.cleanAttributes(e,iM),r=rM.addUserValidation(t);if(r)throw yi(new Error,r.message,bi.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await Xh(n),s=s&&Array.from(s)}catch(l){throw Ke.error("There was an error searching for a role in add user"),Ke.error(l),l}if(!s||s.length<1)throw yi(new Error,ql.ROLE_NAME_NOT_FOUND(t.role),bi.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw yi(new Error,ql.DUP_ROLES_FOUND(t.role),bi.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=JR.encrypt(t.password)),t.password=zR.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await tM.insert(i)}catch(l){throw Ke.error("There was an error searching for a user."),Ke.error(l),l}Ke.debug(o);try{await $l()}catch(l){throw Ke.error("Got an error setting users to global"),Ke.error(l),l}if(o.skipped_hashes.length===1)throw yi(new Error,ql.USER_ALREADY_EXISTS(t.username),bi.CONFLICT,void 0,void 0,!0);let c={...t};return c.role=s[0],QR.signalUserChange(new XR(process.pid)),`${c.username} successfully added`}a(wZ,"addUser");async function CZ(e){let t=sM.cleanAttributes(e,iM);if(Hn.isEmptyOrZeroLength(t.username))throw new Error(QL);if(Hn.isEmptyOrZeroLength(t.password)&&Hn.isEmptyOrZeroLength(t.role)&&Hn.isEmptyOrZeroLength(t.active))throw new Error(JL);if(!Hn.isEmpty(t.password)&&Hn.isEmptyOrZeroLength(t.password.trim()))throw new Error(XL);if(!Hn.isEmpty(t.active)&&!Hn.isBoolean(t.active))throw new Error(eM);let r=PZ(t.username);if(!Hn.isEmpty(t.password)&&!Hn.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=JR.encrypt(t.password)),t.password=zR.hash(t.password)),t.role==="")throw new Error(ZL);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await Xh(i)||[])}catch(c){throw Ke.error("Got an error searching for a role."),Ke.error(c),c}if(!o||o.length===0){let c=ql.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ke.error(c),yi(new Error,c,bi.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=ql.ALTER_USER_DUP_ROLES(t.role);throw Ke.error(c),yi(new Error,c,bi.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await tM.update(n)}catch(i){throw Ke.error("Error during update."),Ke.error(i),i}try{await $l()}catch(i){throw Ke.error("Got an error setting users to global"),Ke.error(i),i}return QR.signalUserChange(new XR(process.pid)),s}a(CZ,"alterUser");function PZ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(PZ,"isClusterUser");async function DZ(e){try{let t=rM.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Hn.isEmpty(global.hdb_users.get(e.username)))throw yi(new Error,ql.USER_NOT_EXIST(e.username),bi.NOT_FOUND,void 0,void 0,!0);let n;try{n=await IZ(r)}catch(s){throw Ke.error("Got an error deleting a user."),Ke.error(s),s}Ke.debug(n);try{await $l()}catch(s){throw Ke.error("Got an error setting users to global."),Ke.error(s),s}return QR.signalUserChange(new XR(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(DZ,"dropUser");async function LZ(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=jR.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await NZ(r)}catch(s){throw Ke.error("Got an error searching for a role."),Ke.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ke.error(r),r}return t}a(LZ,"userInfo");async function MZ(){let e;try{e=await Zh()}catch(t){throw Ke.error("Got an error listing users."),Ke.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(MZ,"listUsersExternal");async function Zh(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Xh(e)}catch(o){throw Ke.error("Got an error searching for roles."),Ke.error(o),o}let r={};for(let o of t)r[o.id]=jR.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await Xh(n)}catch(o){throw Ke.error("Got an error searching for users."),Ke.error(o),o}let i=new Map;for(let o of s)o=jR.cloneDeep(o),o.role=r[o.role],UZ(o.role),i.set(o.username,o);return i}catch(e){throw Ke.error("got an error listing users"),Ke.error(e),Hn.errorizeMessage(e)}return null}a(Zh,"listUsers");function UZ(e){try{if(!e){Ke.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(yZ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ke.error("Got an error trying to set system permissions."),Ke.error(t)}}a(UZ,"appendSystemTablesToRole");async function $l(){try{let e=await Zh();global.hdb_users=e}catch(e){throw Ke.error(e),e}}a($l,"setUsersToGlobal");async function oM(e,t,r=!0){global.hdb_users||await $l();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw yi(new Error,WR.GENERIC_AUTH_FAIL,bi.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw yi(new Error,WR.USER_INACTIVE,bi.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(zL.get(t)===n.password)return s;if(zR.validate(n.password,t))zL.set(t,n.password);else throw yi(new Error,WR.GENERIC_AUTH_FAIL,bi.UNAUTHORIZED,void 0,void 0,!0)}return s}a(oM,"findAndValidateUser");async function vZ(){global.hdb_users||await $l();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(vZ,"getSuperUser");async function BZ(){let e=await Zh(),t=AZ.getConfigFromFile(WL.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Hn.isEmpty(r)&&r?.role?.role===WL.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=JR.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+jL.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+jL.SERVER_SUFFIX.ADMIN,r}a(BZ,"getClusterUser");var aM=[];ZR.invalidateUser=function(e){for(let t of aM)try{t(e)}catch(r){OZ.error("Error invalidating user",r)}};ZR.onInvalidatedUser=function(e){aM.push(e)}});var S_=O((abe,_M)=>{"use strict";var fc=K(),kn=L(),HZ=kD(),ibe=us(),obe=Ri(),xZ=xn(),{validateEvent:lM}=$s(),m_=Un(),kZ=require("process"),{resetDatabases:FZ}=(Pe(),oe(ut)),GZ={[kn.ITC_EVENT_TYPES.SCHEMA]:qZ,[kn.ITC_EVENT_TYPES.USER]:dM};async function qZ(e){let t=lM(e);if(t){fc.error(t);return}fc.trace("ITC schemaHandler received schema event:",e),await HZ(e.message),await $Z(e.message)}a(qZ,"schemaHandler");async function $Z(e){try{m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=FZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){fc.error(t)}}a($Z,"syncSchemaMetadata");var uM=[];async function dM(e){try{try{m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){fc.warn(r)}let t=lM(e);if(t){fc.error(t);return}fc.trace(`ITC userHandler ${kn.HDB_ITC_CLIENT_PREFIX}${kZ.pid} received user event:`,e),await xZ.setUsersToGlobal();for(let r of uM)r()}catch(t){fc.error(t)}}a(dM,"userHandler");dM.addListener=function(e){uM.push(e)};_M.exports=GZ});var $s=O((fbe,EM)=>{"use strict";var lbe=K(),eA=te(),VZ=L(),{ITC_ERRORS:T_}=Pn(),{parentPort:ube,threadId:KZ,isMainThread:YZ,workerData:dbe}=require("worker_threads"),{onMessageFromWorkers:WZ,broadcast:_be,broadcastWithAcknowledgement:jZ}=ot();EM.exports={sendItcEvent:zZ,validateEvent:fM,SchemaEventMsg:QZ,UserEventMsg:JZ};var ep;WZ(async(e,t)=>{ep=ep||S_(),fM(e),ep[e.type]&&await ep[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function zZ(e){return!YZ&&e.message&&(e.message.originator=KZ),jZ(e)}a(zZ,"sendItcEvent");function fM(e){if(typeof e!="object")return T_.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||eA.isEmpty(e.type))return T_.MISSING_TYPE;if(!e.hasOwnProperty("message")||eA.isEmpty(e.message))return T_.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||eA.isEmpty(e.message.originator))return T_.MISSING_ORIGIN;if(VZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return T_.INVALID_EVENT(e.type)}a(fM,"validateEvent");function QZ(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(QZ,"SchemaEventMsg");function JZ(e){this.originator=e}a(JZ,"UserEventMsg")});var to=O((pbe,SM)=>{"use strict";var hM=L(),hbe=te(),tp=K(),pM=BD(),Vl,{sendItcEvent:mM}=$s();function XZ(e){try{tp.info("signalSchemaChange called with message:",e),Vl=Vl||S_();let t=new pM(hM.ITC_EVENT_TYPES.SCHEMA,e);return Vl.schema(t),mM(t)}catch(t){tp.error(t)}}a(XZ,"signalSchemaChange");function ZZ(e){try{tp.trace("signalUserChange called with message:",e),Vl=Vl||S_();let t=new pM(hM.ITC_EVENT_TYPES.USER,e);return Vl.user(t),mM(t)}catch(t){tp.error(t)}}a(ZZ,"signalUserChange");SM.exports={signalSchemaChange:XZ,signalUserChange:ZZ}});var rp=O((Sbe,gM)=>{"use strict";var TM=te(),e5=L(),t5=K(),r5=Bh(),n5=vh(),s5=to(),{SchemaEventMsg:i5}=$s(),o5="already exists in";gM.exports=a5;async function a5(e,t,r){if(TM.isEmptyOrZeroLength(r))return r;let n=[];TM.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await c5(e,t.schema,t.name,i)})),s}a(a5,"lmdbCheckForNewAttributes");async function c5(e,t,r,n){let s=new n5(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await l5(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(o5))t5.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(c5,"createNewAttribute");async function l5(e){let t;return t=await r5(e),s5.signalSchemaChange(new i5(process.pid,e5.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(l5,"createAttribute")});var Kl=O((gbe,RM)=>{"use strict";var tA=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};RM.exports=tA});var yM=O((Abe,AM)=>{"use strict";var u5=Kl(),d5=L().OPERATIONS_ENUM,rA=class extends u5{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(d5.INSERT,r,n,s,i),this.records=t}};AM.exports=rA});var OM=O((bbe,bM)=>{"use strict";var _5=Kl(),f5=L().OPERATIONS_ENUM,nA=class extends _5{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(f5.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};bM.exports=nA});var IM=O((Nbe,NM)=>{"use strict";var E5=Kl(),h5=L().OPERATIONS_ENUM,sA=class extends E5{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(h5.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};NM.exports=sA});var CM=O((wbe,wM)=>{"use strict";var p5=Kl(),m5=L().OPERATIONS_ENUM,iA=class extends p5{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(m5.DELETE,n,s,t,i),this.original_records=r}};wM.exports=iA});var g_=O((Dbe,MM)=>{"use strict";var Pbe=require("path"),PM=mt(),S5=yM(),T5=OM(),g5=IM(),R5=CM(),Yl=Ht(),DM=te(),{CONFIG_PARAMS:A5}=L(),LM=ne();LM.initSync();var np=L().OPERATIONS_ENUM,{getTransactionAuditStorePath:y5}=Rt();MM.exports=b5;async function b5(e,t){if(LM.get(A5.LOGGING_AUDITLOG)===!1)return;let r=y5(e.schema,e.table),n=await PM.openEnvironment(r,e.table,!0),s=O5(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){PM.initializeDBIs(n,Yl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Yl.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Yl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Yl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),DM.isEmpty(s.user_name)||n.dbis[Yl.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Yl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(b5,"writeTransaction");function O5(e,t){let r=DM.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===np.INSERT)return new S5(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===np.UPDATE)return new T5(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===np.UPSERT)return new g5(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===np.DELETE)return new R5(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(O5,"createTransactionObject")});var oA=O((Ube,UM)=>{"use strict";var N5=__(),Mbe=zd(),R_=L(),I5=Qd(),w5=nc().insertRecords,C5=mt(),P5=K(),D5=rp(),{getSchemaPath:L5}=Rt(),M5=g_();UM.exports=U5;async function U5(e){try{let{schema_table:t,attributes:r}=N5(e);I5(e,r,t.hash_attribute),e.schema!==R_.SYSTEM_SCHEMA_NAME&&(r.includes(R_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(R_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(R_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(R_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await D5(e.hdb_auth_header,t,r),s=L5(e.schema,e.table),i=await C5.openEnvironment(s,e.table),o=await w5(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await M5(e,o)}catch(c){P5.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(U5,"lmdbCreateRecords")});var HM=O((Bbe,BM)=>{"use strict";var vM=L(),v5=oA(),B5=zd(),H5=require("fs-extra"),{getSchemaPath:x5}=Rt();BM.exports=k5;async function k5(e){let t=[{name:e.schema,createddate:Date.now()}],r=new B5(vM.SYSTEM_SCHEMA_NAME,vM.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await v5(r),await H5.mkdirp(x5(e.schema))}a(k5,"lmdbCreateSchema")});var kM=O((xbe,xM)=>{"use strict";var aA=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};xM.exports=aA});var $M=O(($be,qM)=>{"use strict";var FM=mt(),cA=on(),lA=Pn().LMDB_ERRORS_ENUM,F5=Ht(),GM=K(),Fbe=te(),G5=require("lmdb"),q5=kM(),$5=L(),{OVERFLOW_MARKER:Gbe,MAX_SEARCH_KEY_LENGTH:qbe}=F5,V5=$5.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function K5(e,t,r,n){if(cA.validateEnv(e),t===void 0)throw new Error(lA.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(lA.IDS_REQUIRED):new Error(lA.IDS_MUST_BE_ITERABLE);try{let s=FM.listDBIs(e);FM.initializeDBIs(e,t,s);let i=new q5,o,c=[],l=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||n&&h[V5]>n){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,G5.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let m=0;m<s.length;m++){let g=s[m];if(!h.hasOwnProperty(g)||g===t)continue;let S=e.dbis[g],y=h[g];if(y!=null)try{let I=cA.getIndexedValues(y);if(I)for(let U=0,H=I.length;U<H;U++)S.remove(I[U],o)}catch{GM.warn(`cannot delete from attribute: ${g}, ${y}:${o}`)}}});c.push(T),l.push(o),i.original_records.push(h)}catch(h){GM.warn(h),i.skipped.push(o)}let u=[],d=await Promise.all(c);for(let E=0,f=d.length;E<f;E++)d[E]===!0?i.deleted.push(l[E]):(i.skipped.push(l[E]),u.push(E));let _=0;for(let E=0;E<u.length;E++){let f=u[E];i.original_records.splice(f-_,1),_++}return i.txn_time=cA.getNextMonotonicTime(),i}catch(s){throw s}}a(K5,"deleteRecords");qM.exports={deleteRecords:K5}});var A_=O((Kbe,KM)=>{"use strict";var Wl=te(),Y5=$M(),W5=mt(),{getSchemaPath:j5}=Rt(),z5=g_(),Q5=K();KM.exports=J5;async function J5(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Wl.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Wl.isEmptyOrZeroLength(e.hash_values)&&!Wl.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Wl.isEmpty(l)||e.hash_values.push(l)}}if(Wl.isEmptyOrZeroLength(e.hash_values))return VM([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Wl.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=j5(e.schema,e.table),i=await W5.openEnvironment(s,e.table),o=await Y5.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await z5(e,o)}catch(c){Q5.error(`unable to write transaction due to ${c.message}`)}return VM(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(J5,"lmdbDeleteRecords");function VM(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(VM,"createDeleteResponse")});var dA=O((jbe,YM)=>{"use strict";var X5=L(),Wbe=on();function uA(e,t){let r=Object.create(null);if(t.length===1&&X5.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(uA,"parseRow");function Z5(e,t,r,n){let s=uA(r,e);n.push(s)}a(Z5,"searchAll");function e6(e,t,r,n){let s=uA(r,e);n[t]=s}a(e6,"searchAllToMap");function t6(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(t6,"iterateDBI");function Ec(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(Ec,"pushResults");function r6(e,t,r,n,s,i){t.toString().endsWith(e)&&Ec(t,r,n,s,i)}a(r6,"endsWith");function n6(e,t,r,n,s,i){t.toString().includes(e)&&Ec(t,r,n,s,i)}a(n6,"contains");function s6(e,t,r,n,s,i){t>e&&Ec(t,r,n,s,i)}a(s6,"greaterThanCompare");function i6(e,t,r,n,s,i){t>=e&&Ec(t,r,n,s,i)}a(i6,"greaterThanEqualCompare");function o6(e,t,r,n,s,i){t<e&&Ec(t,r,n,s,i)}a(o6,"lessThanCompare");function a6(e,t,r,n,s,i){t<=e&&Ec(t,r,n,s,i)}a(a6,"lessThanEqualCompare");YM.exports={parseRow:uA,searchAll:Z5,searchAllToMap:e6,iterateDBI:t6,endsWith:r6,contains:n6,greaterThanCompare:s6,greaterThanEqualCompare:i6,lessThanCompare:o6,lessThanEqualCompare:a6,pushResults:Ec}});var jl=O((Zbe,ZM)=>{"use strict";var Xo=mt(),Qbe=K(),Fn=on(),sp=Ht(),Qt=Pn().LMDB_ERRORS_ENUM,Jbe=te(),c6=L(),ip=dA(),{parseRow:l6}=ip,Xbe=require("lmdb"),{OVERFLOW_MARKER:WM,MAX_SEARCH_KEY_LENGTH:u6}=sp;function jM(e,t,r,n=!1,s=void 0,i=void 0){return hc(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(jM,"iterateFullIndex");function y_(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return hc(e,t,r,(d,_,E,f)=>{let S={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return f===r?(S.values=!1,_.getRange(S).map(y=>({value:y}))):_.getRange(S)})}a(y_,"iterateRangeBetween");function hc(e,t,r,n){let s=e.database||e,i=Xo.openDBI(s,r);i[sp.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Xo.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(hc,"setupTransaction");function zM(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(WM)){if(!s)if(r)s=Xo.openDBI(e,r);else{let l=Xo.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Xo.openDBI(e,l[u]),!s[sp.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(zM,"getOverflowCheck");function d6(e,t,r,n=!1,s=void 0,i=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);return hc(e,t,t,(o,c,l)=>(op(r),r=b_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>l6(u.value,r))))}a(d6,"searchAll");function _6(e,t,r,n=!1,s=void 0,i=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);op(r),r=b_(e.database||e,r);let o=new Map;for(let{key:c,value:l}of jM(e,t,t,n,s,i))o.set(c,ip.parseRow(l,r));return o}a(_6,"searchAllToMap");function f6(e,t,r=!1,n=void 0,s=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=jM(e,void 0,t,r,n,s),c=o.transaction,l=zM(c.database,c,void 0,t);for(let{key:u,value:d}of o){let _=l(u,d);i[_]===void 0&&(i[_]=[]),i[_].push(d)}return i}a(f6,"iterateDBI");function E6(e,t){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);return Xo.statDBI(e,t).entryCount}a(E6,"countAll");function h6(e,t,r,n,s=!1,i=void 0,o=void 0){return Zo(e,r,n),hc(e,t,r,(c,l,u,d)=>(n=Fn.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(_=>({key:n,value:_}))))}a(h6,"equals");function p6(e,t,r){return Zo(e,t,r),Xo.openDBI(e,t).getValuesCount(r)}a(p6,"count");function m6(e,t,r,n,s=!1,i=void 0,o=void 0){return Zo(e,r,n),hc(e,null,r,(c,l)=>{n=Fn.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let _;for(let E of l.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){_=E;break}return _!==void 0&&(Number.isInteger(o)?o++:i++),d=l.getRange({transaction:c,start:_,end:void 0,reverse:s,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==_){if(f.toString().startsWith(n))return E;if(u===!0)return d.DONE}}),d.filter(E=>E)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(_=>{if(_.key.toString().startsWith(n))return _;if(u===!0)return d.DONE}),u?d:d.filter(_=>_)})}a(m6,"startsWith");function S6(e,t,r,n,s=!1,i=void 0,o=void 0){return QM(e,t,r,n,s,i,o,!0)}a(S6,"endsWith");function QM(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Zo(e,r,n),hc(e,null,r,(l,u,d,_)=>{let E=zM(d,l,_,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(WM)?u.getValues(f,{transaction:l}).map(T=>{let m=E(f,T);if(c?m.endsWith(n):m.includes(n))return{key:m,value:T}}).filter(T=>T):(c?h.endsWith(n):h.includes(n))?u[sp.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:u.getValues(f,{transaction:l}).map(T=>({key:f,value:T})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(QM,"contains");function T6(e,t,r,n,s=!1,i=void 0,o=void 0){Zo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),y_(e,t,r,n,l,s,i,o,!0,!1)}a(T6,"greaterThan");function g6(e,t,r,n,s=!1,i=void 0,o=void 0){Zo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),y_(e,t,r,n,l,s,i,o,!1,!1)}a(g6,"greaterThanEqual");function R6(e,t,r,n,s=!1,i=void 0,o=void 0){Zo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),y_(e,t,r,l,n,s,i,o,!1,!0)}a(R6,"lessThan");function A6(e,t,r,n,s=!1,i=void 0,o=void 0){Zo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),y_(e,t,r,l,n,s,i,o,!1,!1)}a(A6,"lessThanEqual");function y6(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Fn.validateEnv(e),r===void 0)throw new Error(Qt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Qt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Qt.END_VALUE_REQUIRED);if(n=Fn.convertKeyValueToWrite(n),s=Fn.convertKeyValueToWrite(s),n>s)throw new Error(Qt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return y_(e,t,r,n,s,i,o,c)}a(y6,"between");function b6(e,t,r,n){Fn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);if(op(r),r=b_(s,r),n===void 0)throw new Error(Qt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=ip.parseRow(c,r)),o}a(b6,"searchByHash");function O6(e,t,r){Fn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Qt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(O6,"checkHashExists");function N6(e,t,r,n,s=[]){return XM(e,t,r,n,s),JM(e,t,r,n,s).map(i=>i[1])}a(N6,"batchSearchByHash");function I6(e,t,r,n,s=[]){XM(e,t,r,n,s);let i=new Map;for(let[o,c]of JM(e,t,r,n,s))i.set(o,c);return i}a(I6,"batchSearchByHashToMap");function JM(e,t,r,n,s=[]){return hc(e,t,t,(i,o,c)=>{r=b_(c,r);let l=r.length<3;return n.map(u=>{let d=c.dbis[t].get(u,{transaction:i,lazy:l});if(d)return[u,ip.parseRow(d,r)];s.push(u)}).filter(u=>u)})}a(JM,"batchHashSearch");function XM(e,t,r,n,s){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);if(op(r),n==null)throw new Error(Qt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Qt.IDS_MUST_BE_ITERABLE)}a(XM,"initializeBatchSearchByHash");function op(e){if(!Array.isArray(e))throw e===void 0?new Error(Qt.FETCH_ATTRIBUTES_REQUIRED):new Error(Qt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(op,"validateFetchAttributes");function Zo(e,t,r){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Qt.SEARCH_VALUE_REQUIRED);if(r?.length>u6)throw new Error(Qt.SEARCH_VALUE_TOO_LARGE)}a(Zo,"validateComparisonFunctions");function b_(e,t){return t.length===1&&c6.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Xo.listDBIs(e)),t}a(b_,"setGetWholeRowAttributes");ZM.exports={searchAll:d6,searchAllToMap:_6,count:p6,countAll:E6,equals:h6,startsWith:m6,endsWith:S6,contains:QM,searchByHash:b6,setGetWholeRowAttributes:b_,batchSearchByHash:N6,batchSearchByHashToMap:I6,checkHashExists:O6,iterateDBI:f6,greaterThan:T6,greaterThanEqual:g6,lessThan:R6,lessThanEqual:A6,between:y6}});var zl=O((tOe,sU)=>{var eU=require("lodash"),tU=_t(),xe=require("joi"),w6=te(),{hdb_schema_table:O_,checkValidTable:rU,hdb_table:nU,hdb_database:ap}=Ti(),{handleHDBError:C6,hdb_errors:P6}=_e(),{getDatabases:D6}=(Pe(),oe(ut)),{HTTP_STATUS_CODES:L6}=P6,M6=xe.object({database:ap,schema:ap,table:nU,search_attribute:O_,search_value:xe.any().required(),get_attributes:xe.array().min(1).items(xe.alternatives(O_,xe.object())).optional(),desc:xe.bool(),limit:xe.number().integer().min(1),offset:xe.number().integer().min(0)}),U6=xe.object({database:ap,schema:ap,table:nU,operator:xe.string().valid("and","or").default("and").lowercase(),offset:xe.number().integer().min(0),limit:xe.number().integer().min(1),get_attributes:xe.array().min(1).items(xe.alternatives(O_,xe.object())).optional(),sort:xe.object({attribute:xe.alternatives(O_,xe.array().min(1)),descending:xe.bool().optional()}).optional(),conditions:xe.array().min(1).items(xe.alternatives(xe.object({operator:xe.string().valid("and","or").default("and").lowercase(),conditions:xe.array()}),xe.object({search_attribute:xe.alternatives(O_,xe.array().min(1)),search_type:xe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:xe.when("search_type",{switch:[{is:"equals",then:xe.any()},{is:"between",then:xe.array().items(xe.alternatives([xe.string(),xe.number()])).length(2)}],otherwise:xe.alternatives(xe.string(),xe.number())}).required()}))).required()});sU.exports=function(e,t){let r=null;switch(t){case"value":r=tU.validateBySchema(e,M6);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(rU("database",e.schema)),i(rU("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=tU.validateBySchema(e,U6);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=w6.checkGlobalSchemaTable(e.schema,e.table);if(s)return C6(new Error,s,L6.NOT_FOUND);let o=D6()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(d=>{for(let _=0,E=d.conditions.length;_<E;_++){let f=d.conditions[_];f.conditions?l(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=eU.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!eU.some(o,_=>_===d||_.attribute===d||_.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var _A=O((nOe,iU)=>{"use strict";var v6=mt(),B6=zl(),{getSchemaPath:H6}=Rt();iU.exports=x6;function x6(e){let t=B6(e,"hashes");if(t)throw t;let r=H6(e.schema,e.table);return v6.openEnvironment(r,e.table)}a(x6,"initialize")});var fA=O((iOe,oU)=>{"use strict";var k6=jl(),F6=_A();oU.exports=G6;async function G6(e){let t=await F6(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return k6.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(G6,"lmdbGetDataByHash")});var Ql=O((aOe,aU)=>{"use strict";var EA=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};aU.exports=EA});var lU=O((uOe,cU)=>{"use strict";var lOe=Ql(),q6=jl(),$6=_A();cU.exports=V6;async function V6(e){let t=await $6(e),r=global.hdb_schema[e.schema][e.table];return q6.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(V6,"lmdbSearchByHash")});var Vs=O((_Oe,uU)=>{"use strict";var hA=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};uU.exports=hA});var cp=O((EOe,pU)=>{"use strict";var jr=jl(),K6=mt(),Y6=te(),ke=Ht(),pc=L(),W6=Xi(),dU=Pn().LMDB_ERRORS_ENUM,{getSchemaPath:j6}=Rt(),ro=pc.SEARCH_WILDCARDS;async function z6(e,t,r){let n;e.schema===pc.SYSTEM_SCHEMA_NAME?n=W6[e.table]:n=global.hdb_schema[e.schema][e.table];let s=hU(e,n.hash_attribute,r,t);return fU(e,s,n.hash_attribute,r)}a(z6,"prepSearch");async function fU(e,t,r,n){let s=j6(e.schema,e.table),i=await K6.openEnvironment(s,e.table),o=EU(i,e,t,r),c=o.transaction||i;if([ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ke.SEARCH_TYPES.SEARCH_ALL,ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(Q6(e,r)===!1){let d=e.search_attribute;if(d===r)return n?_U(o,()=>!0):o.map(E=>({[r]:E.key}));let _=a(E=>({[r]:E.value,[d]:E.key}),"toObject");return n?_U(o,_):o.map(_)}let u=e.search_attribute===r?o.map(d=>d.key):o.map(d=>d.value);return n===!0?jr.batchSearchByHashToMap(c,r,e.get_attributes,u):jr.batchSearchByHash(c,r,e.get_attributes,u)}a(fU,"executeSearch");function EU(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case ke.SEARCH_TYPES.EQUALS:s=jr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.CONTAINS:s=jr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.ENDS_WITH:case ke.SEARCH_TYPES._ENDS_WITH:s=jr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.STARTS_WITH:case ke.SEARCH_TYPES._STARTS_WITH:s=jr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return jr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return jr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.SEARCH_ALL:return jr.searchAll(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return jr.searchAllToMap(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.BETWEEN:s=jr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case ke.SEARCH_TYPES.GREATER_THAN:case ke.SEARCH_TYPES._GREATER_THAN:s=jr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.GREATER_THAN_EQUAL:case ke.SEARCH_TYPES._GREATER_THAN_EQUAL:s=jr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.LESS_THAN:case ke.SEARCH_TYPES._LESS_THAN:s=jr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.LESS_THAN_EQUAL:case ke.SEARCH_TYPES._LESS_THAN_EQUAL:s=jr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(EU,"searchByType");function _U(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(_U,"createMapFromIterable");function Q6(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(Q6,"checkToFetchMore");function hU(e,t,r,n){if(Y6.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),ro.indexOf(s)>-1)return r===!0?ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ke.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(ro[0])<0&&s.indexOf(ro[1])<0)return c===!0?r===!0?ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ke.SEARCH_TYPES.EQUALS;if(ro.indexOf(i)>=0&&ro.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ke.SEARCH_TYPES.CONTAINS;if(ro.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ke.SEARCH_TYPES.ENDS_WITH;if(ro.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ke.SEARCH_TYPES.STARTS_WITH;if(s.includes(ro[0])||s.includes(ro[1]))return ke.SEARCH_TYPES.EQUALS;throw new Error(dU.UNKNOWN_SEARCH_TYPE)}else switch(n){case pc.VALUE_SEARCH_COMPARATORS.BETWEEN:return ke.SEARCH_TYPES.BETWEEN;case pc.VALUE_SEARCH_COMPARATORS.GREATER:return ke.SEARCH_TYPES.GREATER_THAN;case pc.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ke.SEARCH_TYPES.GREATER_THAN_EQUAL;case pc.VALUE_SEARCH_COMPARATORS.LESS:return ke.SEARCH_TYPES.LESS_THAN;case pc.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ke.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(dU.UNKNOWN_SEARCH_TYPE)}}a(hU,"createSearchTypeFromSearchObject");pU.exports={executeSearch:fU,createSearchTypeFromSearchObject:hU,prepSearch:z6,searchByType:EU}});var SU=O((mOe,mU)=>{"use strict";var pOe=Vs(),J6=zl(),X6=te(),Z6=L(),e8=cp();mU.exports=t8;function t8(e,t){if(!X6.isEmpty(t)&&Z6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=J6(e,"value");if(n)throw n;return e8.prepSearch(e,t,!0)}a(t8,"lmdbGetDataByValue")});var N_=O((gOe,TU)=>{"use strict";var TOe=Vs(),r8=zl(),n8=te(),s8=L(),i8=cp();TU.exports=o8;async function o8(e,t){if(!n8.isEmpty(t)&&s8.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=r8(e,"value");if(n)throw n;return i8.prepSearch(e,t,!1)}a(o8,"lmdbSearchByValue")});var RU=O((yOe,gU)=>{"use strict";var AOe=Ht(),pA=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},mA=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},SA=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};gU.exports={SearchByConditionsObject:pA,SearchCondition:mA,SortAttribute:SA}});var NU=O((IOe,OU)=>{"use strict";var OOe=RU().SearchByConditionsObject,a8=Vs(),c8=zl(),TA=jl(),lp=Ht(),{Resource:NOe}=(Ks(),oe(gA)),bU=cp(),l8=dA(),u8=require("lodash"),{getSchemaPath:d8}=Rt(),AU=mt(),{handleHDBError:_8,hdb_errors:f8}=_e(),{HTTP_STATUS_CODES:E8}=f8,h8=1e8;OU.exports=p8;async function p8(e){let t=c8(e,"conditions");if(t)throw _8(t,t.message,E8.BAD_REQUEST,void 0,void 0,!0);e.operator=e.operator?e.operator.toLowerCase():void 0,e.offset=Number.isInteger(e.offset)?e.offset:0;let r=d8(e.schema,e.table),n=await AU.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)AU.openDBI(n,u.search_attribute);let i=u8.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.search_type;d===lp.SEARCH_TYPES.EQUALS?u.estimated_count=TA.count(n,u.search_attribute,u.search_value):d===lp.SEARCH_TYPES.CONTAINS||d===lp.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=h8}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await yU(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(bU.filterByType),_=d.length,E=TA.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(f=>u.get(f,{transaction:o,lazy:!0})),_>0&&(l=l.filter(f=>{for(let h=0;h<_;h++)if(!d[h](f))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(f=>l8.parseRow(f,E))}else{for(let _=1;_<i.length;_++){let E=i[_],f=await yU(o,e,E,s.hash_attribute);c=c.concat(f)}let u=new Set,d=e.offset||0;c=c.filter(_=>u.has(_)?!1:(u.add(_),!0)).slice(d,e.limit&&e.limit+d),l=TA.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(p8,"lmdbSearchByConditions");async function yU(e,t,r,n){let s=new a8(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===lp.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,bU.searchByType(e,s,i,n).map(o=>o.value)}a(yU,"executeConditionSearch")});var Jl=O((COe,IU)=>{"use strict";var m8=L().OPERATIONS_ENUM,RA=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=m8.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};IU.exports=RA});var AA=O((DOe,vU)=>{"use strict";var DU=Vs(),LU=Jl(),MU=N_(),UU=A_(),dn=L(),wU=te(),CU=mt(),{getTransactionAuditStorePath:S8,getSchemaPath:T8}=Rt(),PU=K();vU.exports=g8;async function g8(e){try{if(wU.isEmpty(global.hdb_schema[e.schema])||wU.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await R8(e),await A8(e);let t=T8(e.schema,e.table);try{await CU.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")PU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=S8(e.schema,e.table);await CU.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")PU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(g8,"lmdbDropTable");async function R8(e){let t=new DU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await MU(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 LU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await UU(s)}a(R8,"deleteAttributesFromSystem");async function A8(e){let t=new DU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await MU(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 LU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await UU(s)}catch(i){throw i}}a(A8,"dropTableFromSystem")});var HU=O((MOe,BU)=>{"use strict";var y8=require("fs-extra"),b8=Vs(),O8=Ql(),N8=Jl(),I8=AA(),w8=A_(),C8=fA(),P8=N_(),no=L(),{getSchemaPath:D8}=Rt(),{handleHDBError:L8,hdb_errors:M8}=_e(),{HDB_ERROR_MSGS:U8,HTTP_STATUS_CODES:v8}=M8;BU.exports=B8;async function B8(e){let t;try{t=await H8(e.schema);let r=new b8(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await P8(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await I8(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new N8(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await w8(s);let i=D8(t);await y8.remove(i)}catch(r){throw r}}a(B8,"lmdbDropSchema");async function H8(e){let t=new O8(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await C8(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw L8(new Error,U8.SCHEMA_NOT_FOUND(e),v8.NOT_FOUND,void 0,void 0,!0);return n}a(H8,"validateDropSchema")});var Xl=O((vOe,xU)=>{"use strict";var yA=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};xU.exports=yA});var OA=O((xOe,kU)=>{"use strict";var x8=require("fs-extra"),up=mt(),{getTransactionAuditStorePath:k8}=Rt(),bA=Ht(),HOe=Xl();kU.exports=F8;async function F8(e){let t;try{let r=k8(e.schema,e.table);await x8.mkdirp(r),t=await up.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{up.createDBI(t,bA.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),up.createDBI(t,bA.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),up.createDBI(t,bA.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(F8,"createTransactionsAuditEnvironment")});var qU=O((GOe,GU)=>{"use strict";var NA=L(),FU=mt(),G8=nc(),{getSystemSchemaPath:q8,getSchemaPath:$8}=Rt(),FOe=Xi(),V8=Bh(),IA=vh(),K8=K(),Y8=OA();GU.exports=W8;async function W8(e,t){let r=$8(t.schema,t.table),n=new IA(t.schema,t.table,NA.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new IA(t.schema,t.table,NA.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new IA(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await FU.createEnvironment(r,t.table),e!==void 0){let o=await FU.openEnvironment(q8(),NA.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await G8.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_table_attributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await wA(n),await wA(s),await wA(i)}await Y8(t)}catch(o){throw o}}a(W8,"lmdbCreateTable");async function wA(e){try{await V8(e)}catch(t){K8.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(wA,"createAttribute")});var VU=O(($Oe,$U)=>{"use strict";var j8=__(),z8=Qd(),Q8=rp(),I_=L(),J8=nc().updateRecords,X8=mt(),{getSchemaPath:Z8}=Rt(),e9=g_(),t9=K();$U.exports=r9;async function r9(e){try{let{schema_table:t,attributes:r}=j8(e);z8(e,r,t.hash_attribute),e.schema!==I_.SYSTEM_SCHEMA_NAME&&(r.includes(I_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(I_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(I_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(I_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Q8(e.hdb_auth_header,t,r),s=Z8(e.schema,e.table),i=await X8.openEnvironment(s,e.table),o=await J8(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await e9(e,o)}catch(c){t9.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(r9,"lmdbUpdateRecords")});var YU=O((KOe,KU)=>{"use strict";var n9=L().OPERATIONS_ENUM,CA=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=n9.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};KU.exports=CA});var jU=O((jOe,WU)=>{"use strict";var WOe=YU(),s9=__(),i9=Qd(),o9=rp(),w_=L(),a9=nc().upsertRecords,c9=mt(),{getSchemaPath:l9}=Rt(),u9=g_(),d9=K(),{handleHDBError:_9,hdb_errors:f9}=_e();WU.exports=E9;async function E9(e){let t;try{t=s9(e)}catch(l){throw _9(l,l.message,f9.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;i9(e,n,r.hash_attribute),e.schema!==w_.SYSTEM_SCHEMA_NAME&&(n.includes(w_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(w_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(w_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(w_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await o9(e.hdb_auth_header,r,n),i=l9(e.schema,e.table),o=await c9.openEnvironment(i,e.table),c=await a9(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await u9(e,c)}catch(l){d9.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(E9,"lmdbUpsertRecords")});var QU=O((QOe,zU)=>{"use strict";var PA=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};zU.exports=PA});var XU=O((XOe,JU)=>{"use strict";var DA=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};JU.exports=DA});var tv=O((tNe,ev)=>{"use strict";var LA=mt(),{getTransactionAuditStorePath:h9}=Rt(),eNe=QU(),C_=Ht(),p9=te(),ZU=XU(),m9=require("util").promisify,S9=m9(setTimeout),T9=1e4,g9=100;ev.exports=R9;async function R9(e){let t=h9(e.schema,e.table),r=await LA.openEnvironment(t,e.table,!0),n=LA.listDBIs(r);LA.initializeDBIs(r,C_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new ZU;do s=await A9(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await S9(g9);while(s.transactions_deleted>0);return i}a(R9,"deleteAuditLogsBefore");async function A9(e,t){let r=new ZU;try{let n=e.dbis[C_.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[C_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];p9.isEmpty(c)||(s=e.dbis[C_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[C_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>T9)break}return await s,r}catch(n){throw n}}a(A9,"deleteTransactions")});var nv=O((nNe,rv)=>{"use strict";var MA=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};rv.exports=MA});var iv=O((oNe,sv)=>{"use strict";var y9=Vs(),b9=Jl(),iNe=nv(),Oi=L(),O9=te(),UA=mt(),N9=Xi(),I9=N_(),w9=A_(),{getSchemaPath:C9}=Rt();sv.exports=P9;async function P9(e,t=!0){let r;e.schema===Oi.SYSTEM_SCHEMA_NAME?r=N9[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await L9(e),s=C9(e.schema,e.table),i=await UA.openEnvironment(s,e.table);return t===!0&&await D9(e,i,r.hash_attribute),UA.dropDBI(i,e.attribute),n}a(P9,"lmdbDropAttribute");async function D9(e,t,r){let n=UA.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(o,u,l)}await s}a(D9,"removeAttributeFromAllObjects");async function L9(e){let t=new y9(Oi.SYSTEM_SCHEMA_NAME,Oi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await I9(t)).filter(o=>o[Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(O9.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new b9(Oi.SYSTEM_SCHEMA_NAME,Oi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return w9(i)}a(L9,"dropAttributeFromSystem")});var dv=O((lNe,uv)=>{"use strict";var vA=mt(),Zl=Ht(),cNe=on(),BA=L(),ov=te(),{getTransactionAuditStorePath:M9}=Rt(),U9=jl(),dp=Kl(),v9=K();uv.exports=B9;async function B9(e){let t=M9(e.schema,e.table),r=await vA.openEnvironment(t,e.table,!0),n=vA.listDBIs(r);vA.initializeDBIs(r,Zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case BA.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return av(r,e.search_values);case BA.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,x9(r,e.search_values,s);case BA.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return H9(r,e.search_values);default:return av(r)}}a(B9,"readAuditLog");function av(e,t=[0,Date.now()]){ov.isEmpty(t[0])&&(t[0]=0),ov.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new dp,s))}a(av,"searchTransactionsByTimestamp");function H9(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[Zl.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,lv(e,i))}return Object.fromEntries(r)}a(H9,"searchTransactionsByUsername");function x9(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=U9.equals(e,Zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Zl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:_}of d){let E=Number(_);n.has(E)?n.get(E).push(u.toString()):n.set(E,[u.toString()])}}let s=Array.from(n.keys()),i=lv(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);cv(l,"records",r,d,o),cv(l,"original_records",r,d,o)}return Object.fromEntries(o)}a(x9,"searchTransactionsByHashValues");function cv(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let _=new dp(e.operation,e.user_name,i,void 0);_[t]=[c],u.push(_)}}else{let u=new dp(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(cv,"loopRecords");function lv(e,t){let r=[];try{let n=e.dbis[Zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new dp,i);r.push(o)}}catch(i){v9.warn(i)}return r}catch(n){throw n}}a(lv,"batchSearchTransactions")});var fv=O((fNe,_v)=>{"use strict";var{getSchemaPath:dNe}=Rt(),_Ne=mt(),{database:k9}=(Pe(),oe(ut));_v.exports={writeTransaction:F9};async function F9(e,t,r){return k9({database:e,table:t}).transaction(r)}a(F9,"writeTransaction")});var mv=O((hNe,pv)=>{"use strict";var{getSchemaPath:Ev}=Rt(),hv=mt();pv.exports={flush:G9,resetReadTxn:q9};async function G9(e,t){return(await hv.openEnvironment(Ev(e,t),t.toString())).flushed}a(G9,"flush");async function q9(e,t){try{(await hv.openEnvironment(Ev(e,t),t.toString())).resetReadTxn()}catch{}}a(q9,"resetReadTxn")});var Rv=O((mNe,gv)=>{"use strict";var{Readable:$9}=require("stream"),{getDatabases:V9}=(Pe(),oe(ut)),{readSync:K9,openSync:Y9,createReadStream:Sv}=require("fs"),{open:W9}=require("lmdb"),Tv=i_(),j9=o_(),{AUDIT_STORE_OPTIONS:z9}=(Qi(),oe(Av)),{INTERNAL_DBIS_NAME:Q9,AUDIT_STORE_NAME:J9}=Ht();gv.exports=Z9;var HA=32768,X9=100;async function Z9(e){let t=e.database||e.schema||"data",r=V9()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let d=u.dbisDB,_=W9({noSync:!0,maxDbs:j9.MAX_DBS}),E,f=_.openDB(Q9,new Tv(!1)),h=d.useReadTransaction(),T=0,m=a(async function(S,y){y.encoding="binary",y.encoder=void 0;let I=_.openDB(S,y),U=d.openDB(S,y);for(let{key:H,version:X,value:W}of U.getRange({start:null,transaction:h,versions:U.useVersions}))E=I.put(H,W,X),T++%X9===0&&(await new Promise(V=>setTimeout(V,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:y}of d.getRange({transaction:h,start:!1}))if(s.some(I=>S.startsWith?.(I+"/"))){f.put(S,y);let[,I]=S.split("/"),U=!I,H=new Tv(!U,U);await m(S,H)}e.include_audit&&await m(J9,{...z9}),await E;let g=Sv(_.path);return g.headers=l(),g.on("close",()=>{h.done(),_.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=Y9(o.path);return o.transaction(()=>{let u=Buffer.alloc(HA);K9(c,u,0,HA),o.resetReadTxn();let d=o.useReadTransaction();d.renew();let _=Sv(null,{fd:c,start:HA}),E=new $9.from(async function*(){yield u;for await(let f of _)d.openTimer&&(d.openTimer=0),yield f;d.done()}());return E.headers=l(),E});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}a(Z9,"getBackup")});var Ov=O((TNe,bv)=>{"use strict";var e7=K(),{handleHDBError:t7}=_e(),r7=qP(),n7=Bh(),s7=oA(),i7=HM(),o7=A_(),a7=fA(),c7=lU(),l7=SU(),u7=N_(),d7=NU(),_7=HU(),f7=qU(),E7=VU(),h7=jU(),p7=tv(),m7=AA(),S7=iv(),T7=dv(),g7=fv(),yv=mv(),R7=Rv(),xA=class extends r7{static{a(this,"LMDBBridge")}async searchByConditions(t){return d7(t)}async getDataByHash(t){return await a7(t)}async searchByHash(t){return await c7(t)}async getDataByValue(t,r){return await l7(t,r)}async searchByValue(t){return await u7(t)}async createSchema(t){return await i7(t)}async dropSchema(t){return await _7(t)}async createTable(t,r){return await f7(t,r)}async dropTable(t){return await m7(t)}async createAttribute(t){return await n7(t)}async createRecords(t){return await s7(t)}async updateRecords(t){return await E7(t)}async upsertRecords(t){try{return await h7(t)}catch(r){throw t7(r,null,null,e7.ERR,r)}}async deleteRecords(t){return await o7(t)}async dropAttribute(t){return await S7(t)}async deleteAuditLogsBefore(t){return await p7(t)}async readAuditLog(t){return await T7(t)}writeTransaction(t,r,n){return g7.writeTransaction(t,r,n)}flush(t,r){return yv.flush(t,r)}resetReadTxn(t,r){return yv.resetReadTxn(t,r)}getBackup(t){return R7(t)}};bv.exports=xA});function Mv(e){FA=e}function O7(){b7=setInterval(function(){for(let e of kA)if(e.stale){let t=e[Fe]?.url;Cv.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},y7).unref()}var GA,wv,Cv,Pv,Dv,Lv,Nv,kA,A7,P_,Iv,FA,mc,_p,y7,b7,fp=Ie(()=>{GA=M(on()),wv=M(_e()),Cv=M(K());Ks();Pv=M(ne()),Dv=M(L()),Lv=M(te()),Nv=100,kA=new Set,A7=(0,Lv.convertToMS)(Pv.get(Dv.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3;a(Mv,"replicationConfirmation");mc=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),kA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(kA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(P_&&!this.overloadChecked&&performance.now()-Iv>A7)throw new wv.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp||(0,GA.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let _=this.validated;this.validated=this.writes.length;for(let f=_;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let E;for(let f=_;f<this.validated;f++){let h=this.writes[f];h&&(h.before||h.beforeIntermediate)&&(E=!0)}if(E)return(async()=>{try{for(let f=0;f<2;f++){let h;for(let T=_;T<this.validated;T++){let m=this.writes[T];if(!m)continue;let g=m[f===0?"before":"beforeIntermediate"];if(g){let S=g();h?h.push?h.push(S):h=[h,S]:h=S}}h&&await(h.push?Promise.all(h):h)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(_){throw this.abort(),_}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(_=>_);let c=a(_=>{_.commit(r,_.entry,n)},"doWrite"),l=a(()=>{let _=this.writes[o++];if(_)if(_.key){n>0&&(_.entry=_.store.getEntry(_.key));let E=_.store.ifVersion(_.key,_.entry?.version??null,l);s=s||E}else l();else for(let E of this.writes)c(E)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<Nv>>n?l():s=this.writes[0].store.transaction(()=>{for(let _ of this.writes)_.entry=_.store.getEntry(_.key),c(_);return!0})),s)return P_||(P_=s,Iv=performance.now(),P_.then(()=>{P_=null})),s.then(_=>{if(_){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let E=this.writes[0].store.rootStore.databaseName,f=this.writes[this.writes.length-1];FA&&f&&i.push(FA(E,f.store.getEntry(f.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+Nv/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let d={txnTime:r};if(this.next){let _=this.next?.commit(t);if(_?.then)return _?.then(E=>({txnTime:r,next:E}));d.next=_}return d}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},_p=class extends mc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,GA.getNextMonotonicTime)())}getReadTxn(){}},y7=3e4;a(O7,"startMonitoringTxns");O7()});function Pt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new mc;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n[Fe]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({letItLinger:r?.letItLinger});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var Uv,Sc=Ie(()=>{Uv=M(Ei());Ks();fp();a(Pt,"transaction");(0,Uv._assignPackageExport)("transaction",Pt);Pt.commit=function(e){let t=(e[Fe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Pt.abort=function(e){let t=(e[Fe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var qv={};je(qv,{ResourceBridge:()=>VA});function KA({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function Bv(e,t){let r=Ni(e),n=KA(e,r);if(!r)throw new Ys.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},o;Pt(i,()=>new Promise(u=>o=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&hp(d)}catch(_){d={message:_.toString()}}return t?{value:{key:u,value:d}}:{value:d}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function Ni(e){let t=e.database||e.schema||I7,r=dt()[t];if(!r)throw(0,Ys.handleHDBError)(new Error,N7.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Hv(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*xv(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var kv,Ep,Ys,Fv,Ws,qA,$A,Gv,N7,I7,w7,C7,vv,VA,$v=Ie(()=>{"use strict";kv=M(Ov()),Ep=M(zl()),Ys=M(_e());Pe();Fv=M(__()),Ws=M(L()),qA=M(to()),$A=M($s()),Gv=M(te());Sc();pp();({HDB_ERROR_MSGS:N7}=Ys.hdb_errors),I7="data",w7=1e4,C7=10,VA=class extends kv.default{static{a(this,"ResourceBridge")}constructor(t){super(t),vv=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,Ep.default)(t,"conditions");if(r)throw(0,Ys.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Ni(t);if(!n)throw new Ys.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:KA(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Ys.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}pt({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Ni(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Ni(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(u=>{if(!u){let{value:d,version:_}=r.primaryStore.getEntry(o);return i(o,d,_)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Ni(t).dropTable()}createSchema(t){return eu({database:t.schema,table:null}),qA.signalSchemaChange(new $A.SchemaEventMsg(process.pid,Ws.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await YA(t.schema),qA.signalSchemaChange(new $A.SchemaEventMsg(process.pid,Ws.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,vv.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,Fv.default)(t),s,i=dt()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(o.replicateTo=t.replicateTo),t.replicatedConfirmation&&(o.replicatedConfirmation=t.replicatedConfirmation),Pt(o,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(E=>E.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let _=d[i.primaryKey],E=_!=null&&await i.get(_,o);if(t.requires_existing&&!E||t.requires_no_existing&&E){u.push(d[i.primaryKey]);continue}E&&(E=hp(E));for(let f in d)if(Object.prototype.hasOwnProperty.call(d,f)){let h=d[f];if(typeof h=="function")try{let T=h([[E]]);Array.isArray(T)&&(h=T[0].func_val,d[f]=h)}catch(T){throw T.message+="Trying to set key "+f+" on object"+JSON.stringify(d),T}}if(E)for(let f in E)Object.prototype.hasOwnProperty.call(d,f)||(d[f]=E[f]);await(_==null?i.create(d,o):i.put(d,o)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=dt()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),Pt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return Hv(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=dt()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ys.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:Ws.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),o.push(...d.skipped_hashes),await(0,Gv.async_set_timeout)(C7),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%w7===0&&await u();return l.length>0&&await u(),s?Hv(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Ep.default)(t,"hashes");if(r)throw r;return Bv(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Bv(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Ws.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,Ep.default)(t,"value");if(n)throw n;let s=Ni(t);if(!s)throw new Ys.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===Ws.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:KA(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Ni(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){Ni({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Ni(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Ni(t),n={};switch(t.search_type){case Ws.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.operation??o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case Ws.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of xv(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return xv(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(KA,"getSelect");a(Bv,"getRecords");a(Ni,"getTable");a(Hv,"createDeleteResponse");a(xv,"groupRecordsInHistory")});var Un=O((UNe,Vv)=>{"use strict";var{ResourceBridge:P7}=($v(),oe(qv)),D7=ne();D7.initSync();var mp;function L7(){return mp||(mp=new P7,mp)}a(L7,"getBridge");Vv.exports=L7()});var jv=O((BNe,Wv)=>{"use strict";var Kv=require("lodash"),D_=require("mathjs"),M7=require("jsonata"),Yv=te();Wv.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?Kv.uniqWith(e,Kv.isEqual):e,"distinct_array"),searchJSON:U7,mad:L_.bind(null,D_.mad),mean:L_.bind(null,D_.mean),mode:L_.bind(null,D_.mode),prod:L_.bind(null,D_.prod),median:L_.bind(null,D_.median)};function L_(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(L_,"aggregateFunction");function U7(e,t){if(typeof e!="string"||e.length===0)throw new Error("search json expression must be a non-empty string");let r="__"+e+"__";if(Yv.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Yv.isEmpty(this.__ala__.res[r])){let n=M7(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(U7,"searchJSON")});var Qv=O((xNe,zv)=>{"use strict";var sr=require("moment"),WA="YYYY-MM-DDTHH:mm:ss.SSSZZ";sr.suppressDeprecationWarnings=!0;zv.exports={current_date:a(()=>sr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>sr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return sr(e).utc().format("YYYY");case"month":return sr(e).utc().format("MM");case"day":return sr(e).utc().format("DD");case"hour":return sr(e).utc().format("HH");case"minute":return sr(e).utc().format("mm");case"second":return sr(e).utc().format("ss");case"millisecond":return sr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>sr(e).utc().format(WA),"date"),date_format:a((e,t)=>sr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>sr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>sr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=sr(e).utc(),s=sr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>sr().utc().valueOf(),"now"),get_server_time:a(()=>sr().format(WA),"get_server_time"),offset_utc:a((e,t)=>sr(e).utc().utcOffset(t).format(WA),"offset_utc")}});var e0=O((FNe,Zv)=>{"use strict";var v7=require("@turf/area"),B7=require("@turf/length"),H7=require("@turf/circle"),x7=require("@turf/difference"),k7=require("@turf/distance"),F7=require("@turf/boolean-contains"),G7=require("@turf/boolean-equal"),q7=require("@turf/boolean-disjoint"),$7=require("@turf/helpers"),Jv=L(),$e=te(),so=K();Zv.exports={geoArea:V7,geoLength:K7,geoCircle:Y7,geoDifference:W7,geoDistance:Xv,geoNear:j7,geoContains:z7,geoEqual:Q7,geoCrosses:J7,geoConvert:X7};function V7(e){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return v7.default(e)}catch(t){return so.trace(t,e),NaN}}a(V7,"geoArea");function K7(e,t){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return B7.default(e,{units:t||"kilometers"})}catch(r){return so.trace(r,e),NaN}}a(K7,"geoLength");function Y7(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return H7.default(e,t,{units:r||"kilometers"})}catch(n){return so.trace(n,e,t),NaN}}a(Y7,"geoCircle");function W7(e,t){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return x7(e,t)}catch(r){return so.trace(r,e,t),NaN}}a(W7,"geoDifference");function Xv(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return k7.default(e,t,{units:r||"kilometers"})}catch(n){return so.trace(n,e,t),NaN}}a(Xv,"geoDistance");function j7(e,t,r,n){if($e.isEmpty(e)||$e.isEmpty(t))return!1;if($e.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return Xv(e,t,n)<=r}catch(s){return so.trace(s,e,t),!1}}a(j7,"geoNear");function z7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return F7.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(z7,"geoContains");function Q7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return G7.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(Q7,"geoEqual");function J7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return!q7.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(J7,"geoCrosses");function X7(e,t,r){if($e.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if($e.isEmpty(t))throw new Error("geo_type is required");if($e.isEmpty(Jv.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Jv.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=$e.autoCastJSON(e)),$7[t](e,r)}a(X7,"geoConvert")});var Sp=O((qNe,t0)=>{var Tc=jv(),Gn=Qv(),Ii=e0();t0.exports=e=>{e.aggr.mad=e.aggr.MAD=Tc.mad,e.aggr.mean=e.aggr.MEAN=Tc.mean,e.aggr.mode=e.aggr.MODE=Tc.mode,e.aggr.prod=e.aggr.PROD=Tc.prod,e.aggr.median=e.aggr.MEDIAN=Tc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Tc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Tc.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Gn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Gn.current_time,e.fn.extract=e.fn.EXTRACT=Gn.extract,e.fn.date=e.fn.DATE=Gn.date,e.fn.date_format=e.fn.DATE_FORMAT=Gn.date_format,e.fn.date_add=e.fn.DATE_ADD=Gn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Gn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Gn.date_diff,e.fn.now=e.fn.NOW=Gn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Gn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Gn.get_server_time,e.fn.getdate=e.fn.GETDATE=Gn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Gn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Ii.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ii.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ii.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ii.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ii.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ii.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ii.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ii.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ii.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ii.geoNear}});var i0=O(($Ne,s0)=>{"use strict";var M_=require("lodash"),_n=require("alasql");_n.options.cache=!1;var Z7=Sp(),r0=require("clone"),Tp=require("recursive-iterator"),Ue=K(),et=te(),tu=Un(),eee=L(),{hdb_errors:tee}=_e(),{getDatabases:n0}=(Pe(),oe(ut)),ree="IS NULL",js="There was a problem performing this search. Please check the logs and try again.";Z7(_n);var jA=class{static{a(this,"SQLSearch")}constructor(t,r){if(et.isEmpty(t))throw Ue.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),et.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!et.isEmptyOrZeroLength(n))return Ue.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ue.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ue.error(n),new Error(js)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ue.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ue.error(n),new Error(js)}if(Object.keys(this.data).length===0)return Ue.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ue.error("Error thrown from processJoins in SQLSearch class method search."),Ue.error(n),new Error(js)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ue.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ue.error(n),new Error(js)}try{return t=await this._finalSQL(),t}catch(n){throw Ue.error("Error thrown from finalSQL in SQLSearch class method search."),Ue.error(n),new Error(js)}}_getColumns(){let t=new Tp(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(r0(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=M_.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=n0()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(et.isEmpty(this.statement.where)){Ue.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Tp(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!et.isEmpty(r)&&r.right)if(et.isNotEmptyAndHasValue(r.right.value)){let n=et.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new _n.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=et.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new _n.yy.LogicValue({value:i}):n instanceof _n.yy.StringValue&&et.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new _n.yy.NumValue({value:i}))});if(t){Ue.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Tp(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!et.isEmpty(eee.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(et.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(et.isEmptyOrZeroLength(r.left.columnid)||et.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(et.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!et.isEmpty(r.right.value)||!et.isEmpty(r.left.value)?n.add(et.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(et.isEmptyOrZeroLength(this.all_table_attributes)&&et.isEmptyOrZeroLength(this.statement.from)&&et.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&M_.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(et.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);et.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(et.isEmptyOrZeroLength(this.all_table_attributes)&&!et.isEmptyOrZeroLength(this.columns.columns))return t;if(et.isEmptyOrZeroLength(this.all_table_attributes)&&et.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await _n.promise(r)}catch(r){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ue.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(r0(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(et.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(ree)>-1&&this.tables.forEach(s=>{let i={columnid:n0()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=M_.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!et.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!et.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await tu.getDataByHash(c);for(let _ of c.hash_values)d.get(_)&&!this.data[i].__merged_data[_]&&(this.data[i].__merged_data[_]=[...n[i]],this._setMergedHashAttribute(i,_))}catch(d){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(d),new Error(js)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let _={...c};_.search_value=d;let E=await tu.getDataByValue(_);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]):(this.data[i].__merged_data[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,f))}))}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(d),new Error(js)}else if(!et.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!et.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let _=0,E=d.length;_<E;_++){let f=d[_];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await tu.getDataByValue(c,f.operation);if(l)for(let[T]of h)this.data[i].__merged_data[T]||(this.data[i].__merged_data[T]=[...n[i]],this._setMergedHashAttribute(i,T));else for(let[T,m]of h)this.data[i].__merged_data[T]?this._updateMergedAttribute(i,T,s.attribute,m[s.attribute]):(this.data[i].__merged_data[T]=[...n[i]],this._updateMergedAttribute(i,T,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,T))}}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ue.error(d),new Error(js)}else try{c.search_attribute=s.attribute,c.search_value="*";let d=await tu.getDataByValue(c);if(l)for(let[_]of d)this.data[i].__merged_data[_]||(this.data[i].__merged_data[_]=[...n[i]],this._setMergedHashAttribute(i,_));else for(let[_,E]of d)this.data[i].__merged_data[_]?this._updateMergedAttribute(i,_,s.attribute,E[s.attribute]):(this.data[i].__merged_data[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,E[s.attribute]),this._setMergedHashAttribute(i,_))}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ue.error(d),new Error(js)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof _n.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new _n.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new _n.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new _n.yy.FuncValue:new _n.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,T=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${T}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${T}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let d="",_="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",_=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${_}`,h=this._convertColumnsToIndexes(f,s);E=await _n.promise(h,t),t=null}catch(f){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ue.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let T=E[f];o.forEach(m=>{T[m.key]!==null&&T[m.key]!==void 0&&m.keys.add(T[m.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),T=M_.difference(h,[...f.keys].map(m=>m.toString()));for(let m=0,g=T.length;m<g;m++){let S=T[m];delete this.data[`${f.schema}_${f.table}`].__merged_data[S]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Tp(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=M_.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw Ue.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ue.error(i),new Error(js)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let d in i)o.push(i[d][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await tu.getDataByHash(c),u=s.columns.length;for(let d=0,_=o.length;d<_;d++){let E=o[d],f=l.get(E);for(let h=0;h<u;h++){let T=s.columns[h],m=f[T]===void 0?null:f[T];this.data[n].__merged_data[E].push(m)}}}}catch(r){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ue.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();Ue.trace(`Final SQL: ${s}`),n=await _n.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ue.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ue.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return Ue.error(tee.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ue.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await tu.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]={...r[s]}),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw Ue.error("There was an error when processing this SQL operation. Check your logs"),Ue.error(o),new Error(js)}}return Object.values(Object.values(this.data)[0].__merged_data)}};s0.exports=jA});var $r=O((KNe,o0)=>{"use strict";var nee=FP();o0.exports={searchByConditions:iee,searchByHash:oee,searchByValue:aee,search:cee};var zA=Un(),{transformReq:QA}=te(),see=i0();async function iee(e){return QA(e),zA.searchByConditions(e)}a(iee,"searchByConditions");async function oee(e){QA(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of zA.searchByHash(e))r&&t.push(r);return t}a(oee,"searchByHash");async function aee(e){QA(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of zA.searchByValue(e))t.push(r);return t}a(aee,"searchByValue");function cee(e,t){try{let r=new nee(e);r.validate(),new see(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(cee,"search")});var gp=O((WNe,a0)=>{"use strict";var lee=Un();a0.exports={writeTransaction:uee};function uee(e,t,r){return lee.writeTransaction(e,t,r)}a(uee,"writeTransaction")});var d0=O((QNe,u0)=>{"use strict";var dee=$r(),_ee=us(),c0=K(),fee=Vr(),zNe=gp(),Eee=require("clone"),XA=require("alasql"),hee=Sp(),l0=require("util"),pee=l0.promisify(_ee.getTableSchema),mee=l0.promisify(dee.search),See=L(),JA=te();hee(XA);u0.exports={update:gee};var Tee="There was a problem performing this update. Please check the logs and try again.";async function gee({statement:e,hdb_user:t}){let r=await pee(e.table.databaseid,e.table.tableid),n=Ree(e.columns);JA.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=Eee(s),c=JA.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=XA.parse(l).statements[0],d=await mee(u),_=Aee(n,d);return yee(o,_,t)}a(gee,"update");function Ree(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=XA.compile(`SELECT ${r.expression.toString()} AS [${See.FUNC_VAL}] FROM ?`)}),t}catch(t){throw c0.error(t),new Error(Tee)}}a(Ree,"createUpdateRecord");function Aee(e,t){return JA.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Aee,"buildUpdateRecords");async function yee(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await fee.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){c0.error(`Error delete new_attributes from update response: ${i}`)}return s}a(yee,"updateRecords")});var f0=O((eIe,_0)=>{var bee=require("alasql"),Oee=$r(),Nee=K(),Iee=Un(),ey=require("util"),ZA=te(),wee=L(),Cee=us(),XNe=gp(),ZNe=Vr(),Pee="record",Dee="successfully deleted",Lee=ey.callbackify(Bee),Mee=ey.promisify(Oee.search),Uee=ey.promisify(Cee.getTableSchema);_0.exports={convertDelete:Lee};function vee(e){return`${e.deleted_hashes.length} ${Pee}${e.deleted_hashes.length===1?"":"s"} ${Dee}`}a(vee,"generateReturnMessage");async function Bee({statement:e,hdb_user:t}){let r=await Uee(e.table.databaseid,e.table.tableid);ZA.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=ZA.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=bee.parse(o).statements[0],l={operation:wee.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Mee(c);let u=await Iee.deleteRecords(l);return ZA.isEmptyOrZeroLength(u.message)&&(u.message=vee(u)),delete u.txn_time,u}catch(u){throw Nee.error(u),u.hdb_code?u.message:u}}a(Bee,"convertDelete")});var S0=O((rIe,m0)=>{"use strict";var Hee=Ri(),{hdb_errors:E0}=_e(),{getDatabases:h0}=(Pe(),oe(ut));m0.exports={checkSchemaExists:p0,checkSchemaTableExists:xee,schema_describe:Hee};async function p0(e){if(!h0()[e])return E0.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(p0,"checkSchemaExists");async function xee(e,t){let r=await p0(e);if(r)return r;if(!h0()[e][t])return E0.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(xee,"checkSchemaTableExists")});var ru=O((sIe,kee)=>{kee.exports={name:"harperdb",version:"4.4.24",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","enterprise","Fastify","NATS","HarperDB","Harper","clustering","replication","REST","WebSockets","decentralized","server-sent events","document store"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:replication && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc --no-clean --reporter=lcovonly npm run test:security && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:replication && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && npm run test:security && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","test:security":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/security/**/*.js' --config '../unitTests/.mocharc.json'","test:replication":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/replication/**/*.js' --config '../unitTests/.mocharc.json'","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test",format:"prettier .","format:fix":"npm run format -- --write",lint:"eslint .","lint:fix":"npm run lint -- --fix"},dependencies:{"@aws-sdk/client-s3":"3.717.0","@aws-sdk/lib-storage":"3.717.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.10.0","@fastify/compress":"~6.5.0","@fastify/cors":"~9.0.1","@fastify/static":"~7.0.4","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.6.0",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.29.0","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.10.0","gunzip-maybe":"1.4.2","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.2.6",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",moment:"2.30.1","mqtt-packet":"~9.0.0",msgpackr:"1.11.2",nats:"2.19.0",needle:"3.3.1","node-forge":"^1.3.1","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.3",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^1.1.0","serve-static":"2.1.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.24.5","tar-fs":"3.0.6",ulidx:"0.5.0",uuid:"10.0.0","validate.js":"0.13.1",ws:"8.18.0",yaml:"2.7.0"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"20.14.8","@typescript-eslint/eslint-plugin":"^7.18.0","@typescript-eslint/parser":"^7.18.0",axios:"1.7.5",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.24.2",eslint:"^8.57.1","eslint-config-prettier":"^9.1.0","eslint-plugin-sonarjs":"^3.0.1",eventsource:"^2.0.2","graphql-http":"^1.22.3","hook-std":"3.0.0","intercept-stdout":"0.1.2",mkcert:"1.5.1",mocha:"^11.0.1","mocha-teamcity-reporter":"^4.2.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"6.1.3","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"3.3.3",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.7.2",undici:"^6.19.8","why-is-node-still-running":"^1.0.0"},overrides:{alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","segfault-handler":"^1.3.0","utf-8-validate":"^5.0.10"}}});var x_={};je(x_,{addAnalyticsListener:()=>H_,recordAction:()=>mr,recordActionBinary:()=>qn,setAnalyticsEnabled:()=>Fee});function Fee(e){I0=e}function mr(e,t,r,n,s){if(!I0)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=yp.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let u=c;o.values=c=new Float32Array(l*2),c.set(u),c.index=l+1}c[l]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},yp.set(i,o)}Rp||Gee()}function qn(e,t,r,n,s){mr(!!e,t,r,n,s)}function H_(e){P0.push(e)}function Gee(){Rp=performance.now(),setTimeout(async()=>{let e=performance.now()-Rp;Rp=0;let t=[],r={time:Date.now(),period:e,threadId:gc.threadId,metrics:t};for(let[s,i]of yp){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],d;for(let _ of D0){let E=Math.floor(c*_),f=o[E-1];if(E>l){let h=E-l;if(f===d){let T=u[u.length-1];typeof T=="number"?u[u.length-1]={value:T,count:1+h}:T.count+=h}else u.push(h>1?{value:f,count:h}:f),d=f;l=E}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await L0()}let n=process.memoryUsage();t.push({metric:"memory",threadId:gc.threadId,byThread:!0,...n});for(let s of P0)s(t);yp=new Map,gc.parentPort?gc.parentPort.postMessage({type:C0,report:r}):v0({report:r})},w0).unref()}async function qee(e,t=6e4){let r=ny(),n=M0(),s=new Promise(T=>{let m=performance.now();setImmediate(()=>{let g=performance.now();g-m>5e3&&(0,U_.warn)("Unusually high event queue latency on the main thread of "+Math.round(g-m)+"ms"),m=performance.now()}),n.primaryStore.prefetch([1],()=>{let g=performance.now();g-m>5e3&&(0,U_.warn)("Unusually high task queue latency on the main thread of "+Math.round(g-m)+"ms"),T(g-m)})}),i;for(let T of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(T.value?.time){i=T.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],d;for(let{key:T,value:m}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!m)continue;if(o){if(T>o+t)break}else o=T;d=T;let{metrics:g,threadId:S}=m;for(let y of g||[]){let{path:I,method:U,type:H,metric:X,count:W,total:V,distribution:se,threads:Q,...de}=y;W||(W=1);let j=X+(I?"-"+I:"");U!==void 0&&(j+="-"+U),H!==void 0&&(j+="-"+H);let ae=c.get(j);if(ae){if(ae.threads){let Ne=ae.threads[S];if(Ne)ae=Ne;else{ae.threads[S]={...de};continue}}ae.count||(ae.count=1);let Oe=ae.count;for(let Ne in de){let Me=de[Ne];typeof Me=="number"&&(ae[Ne]=(ae[Ne]*Oe+Me*W)/(Oe+W))}ae.count+=W,V>=0&&(ae.total+=V,ae.ratio=ae.total/ae.count)}else ae={period:t,...y},delete ae.distribution,c.set(j,ae),ae.byThread&&(ae.threads=[],ae.threads[S]={...de},u.push(ae));if(se){se=se.map(Ne=>typeof Ne=="number"?{value:Ne,count:1}:Ne);let Oe=l.get(j);Oe?Oe.push(...se):l.set(j,se)}}await L0()}for(let T of u){let{path:m,method:g,type:S,metric:y,count:I,total:U,distribution:H,threads:X,...W}=T;X=X.filter(V=>V);for(let V in W){if(typeof T[V]!="number")continue;let se=0;for(let Q of X){let de=Q[V];typeof de=="number"&&(se+=de)}T[V]=se}T.count=X.length,delete T.threads,delete T.byThread}for(let[T,m]of l){let g=c.get(T);m.sort((Ne,Me)=>Ne.value>Me.value?1:-1);let S=g.count-1,y=[],I=0,U=0,H;for(let Ne of D0){let Me=S*Ne;for(;I<Me;)H=m[U++],I+=H.count,U===1&&I--;let Gr=m[U>1?U-2:0];H||(H=m[0]),y.push(H.value-(H.value-Gr.value)*(I-Me)/H.count)}let[X,W,V,se,Q,de,j,ae,Oe]=y;Object.assign(g,{p1:X,p10:W,p25:V,median:se,p75:Q,p90:de,p95:j,p99:ae,p999:Oe})}let _;for(let[T,m]of c)m.id=(0,Ap.getNextMonotonicTime)(),m.time=d,n.primaryStore.put(m.id,m,{append:!0}).then(g=>{g||n.primaryStore.put(m.id,m)}),_=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(_||h*10>f){let T=(0,Ap.getNextMonotonicTime)(),m={id:T,metric:"main-thread-utilization",idle:f-T0,active:h-g0,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(T,m,{append:!0}).then(g=>{g||n.primaryStore.put(T,m)})}T0=f,g0=h}async function R0(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function ny(){return A0||(A0=pt({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function M0(){return y0||(y0=pt({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Kee(){U0=!0;let e=(0,B_.get)(ry.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await qee(w0,e),await R0(ny(),$ee),await R0(M0(),Vee)},Math.min(e/2,2147483647)).unref()}function v0(e,t){let r=e.report;r.threadId=t?.threadId||gc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(b0+=n.mean*n.count);r.totalBytesProcessed=b0,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(O0.get(t))}),O0.set(t,t.performance.eventLoopUtilization())),r.id=(0,Ap.getNextMonotonicTime)(),ny().primaryStore.put(r.id,r),U0||Kee(),Yee&&(B0=jee(r))}async function jee(e){if(await B0,!ea){let r=(0,v_.dirname)((0,U_.getLogFilePath)());try{ea=await(0,ty.open)((0,v_.join)(r,"analytics.log"),"r+")}catch{ea=await(0,ty.open)((0,v_.join)(r,"analytics.log"),"w+")}}let t=(await ea.stat()).size;if(t>Wee){let r=Buffer.alloc(t);await ea.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ea.write(r,{position:0}),await ea.truncate(r.length),t=r.length}await ea.write(JSON.stringify(e)+`
|
|
11
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw pr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}WX(n,r),kR(n);let s=n.toJSON();if(xX.config=s,zt=kl(s),zt.logging_rotation_rotate)for(let i in CL)zt[i]&&pr.error(`Config ${CL[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);pr.trace(FX)}}a(zh,"initConfig");function WX(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Bn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Bn.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(pr.trace("Updating config file with missing config params"),Yr.writeFileSync(t,String(e)))}a(WX,"checkForUpdatedConfig");function kR(e,t=!1){let r=e.toJSON();if(r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads),r.http?.port&&r.http?.port===r.http?.securePort)throw xl.CONFIG_VALIDATION("http.port and http.securePort cannot be the same value");if(r.operationsApi?.network?.port&&r.operationsApi?.network?.port===r.operationsApi?.network?.securePort)throw xl.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=MX(r,t);if(n.error)throw xl.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}a(kR,"validateConfig");function jX(e,t){zt===void 0&&(zt={});let r=qs[e.toLowerCase()];if(r===void 0){pr.trace(`Unable to update config object because config param '${e}' does not exist`);return}zt[r.toLowerCase()]=t}a(jX,"updateConfigObject");function vL(e,t,r=void 0,n=!1,s=!1,i=!1){zt===void 0&&zh();let o=UL(qs.hdb_root),c=Bn.join(o,un.HDB_CONFIG_FILE),l=Qo(c),u;if(r===void 0&&e.toLowerCase()===vn.DATABASES)u=t;else if(r===void 0){let E;if(i)E=e;else if(E=qs[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=xR(E,t);l.setIn([...f],h)}else for(let E in r){let f=qs[E.toLowerCase()];if(f===vn.HTTP_SECUREPORT&&r[E]===zt[vn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),f===vn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===zt[vn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),f===vn.DATABASES){u=r[E];continue}if(f?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),T=un.LEGACY_CONFIG_PARAMS[E.toUpperCase()];T&&T.startsWith("customFunctions")&&l.hasIn(T.split("_"))&&(f=T,h=T.split("_"));let m=xR(f,r[E]);f==="rootPath"&&m?.endsWith("/")&&(m=m.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],m)}catch(g){pr.error(g)}}}u&&ML(l,u),kR(l);let d=l.getIn(["rootPath"]),_=Bn.join(d,un.HDB_CONFIG_FILE);n===!0&&zX(c,d),Yr.writeFileSync(_,String(l)),s&&(zt=kl(l.toJSON())),pr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(vL,"updateConfigValue");function zX(e,t){try{let r=Bn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${un.HDB_CONFIG_FILE}.bak`);Yr.copySync(e,r),pr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){pr.error(GX),pr.error(r)}}a(zX,"backupConfigFile");var QX=["databases"];function kl(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network={...e.http,...e.operationsApi.network}),e?.operationsApi&&(e.operationsApi.tls={...e.tls,...e.operationsApi.tls}),jh=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!QX.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!vn[l.toUpperCase()]&&qs[l]&&(s[qs[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(kl,"flattenConfig");function xR(e,t){if(e===vn.CLUSTERING_NODENAME||e===vn.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(UX(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||hr.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return hr.autoCast(t)}a(xR,"castConfigValue");function JX(){let e=hr.getPropsFilePath(),t=dc(e);return Qo(t).toJSON()}a(JX,"getConfiguration");async function XX(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return vL(void 0,void 0,s,!0),VX}catch(i){throw typeof i=="string"||i instanceof String?BX(i,i,HX.BAD_REQUEST,void 0,void 0,!0):i}}a(XX,"setConfiguration");function FR(){let e=hr.getPropsFilePath();try{Yr.accessSync(e,Yr.constants.F_OK|Yr.constants.R_OK)}catch(n){if(!hr.noBootFile())throw pr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=dc(e);return Qo(t).toJSON()}a(FR,"readConfigFile");function Qo(e){return PL.parseDocument(Yr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Qo,"parseYamlDoc");function ZX(){let e=FR(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=hr.isEmptyOrZeroLength(t)?[]:t;let r=wL(t);if(r)throw xl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=hr.isEmptyOrZeroLength(n)?[]:n;let s=wL(n);if(s)throw xl.CONFIG_VALIDATION(s.message);if(!hr.isEmptyOrZeroLength(n)&&!hr.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!hr.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw xl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(ZX,"getClusteringRoutes");function BL(e){let t=DL(e);zt={};for(let r in qs){let n=t.get(r.toUpperCase());if(hr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=qs[r].toLowerCase();s===vn.LOGGING_ROOT?zt[s]=Bn.dirname(n):zt[s]=n}return zt}a(BL,"initOldConfig");function eZ(e){let t=FR();return vX.get(t,e.replaceAll("_","."))}a(eZ,"getConfigFromFile");async function tZ(e,t){let r=Qo(dc());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Yr.writeFile(dc(),String(r))}a(tZ,"addConfig");function rZ(e){let t=dc(hr.getPropsFilePath()),r=Qo(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Bn.join(n,un.HDB_CONFIG_FILE);Yr.writeFileSync(s,String(r))}a(rZ,"deleteConfigFromFile");function nZ(){return jh||(zh(),jh)}a(nZ,"getConfigObj");function sZ(){return zt||zh(),zt}a(sZ,"getFlatConfigObj")});var kL=O((Qye,xL)=>{"use strict";var Qh=L(),Jh=class{static{a(this,"BaseLicense")}constructor(t=0,r=Qh.RAM_ALLOCATION_ENUM.DEFAULT,n=Qh.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},GR=class extends Jh{static{a(this,"ExtendedLicense")}constructor(t=0,r=Qh.RAM_ALLOCATION_ENUM.DEFAULT,n=Qh.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};xL.exports={BaseLicense:Jh,ExtendedLicense:GR}});var _c=O((Xye,YL)=>{"use strict";var Gl=require("fs-extra"),GL=Kh(),qL=require("crypto"),iZ=require("moment"),oZ=require("uuid").v4,Wr=K(),$R=require("path"),aZ=te(),Jo=L(),{totalmem:FL}=require("os"),cZ=kL().ExtendedLicense,Fl="invalid license key format",lZ="061183",uZ="mofi25",dZ="aes-256-cbc",_Z=16,fZ=32,$L=ne(),{resolvePath:VL}=Ct();$L.initSync();var qR;YL.exports={validateLicense:KL,generateFingerPrint:hZ,licenseSearch:YR,getLicense:SZ,checkMemoryLimit:TZ};function VR(){return $R.join($L.getHdbBasePath(),Jo.LICENSE_KEY_DIR_NAME,Jo.LICENSE_FILE_NAME)}a(VR,"getLicenseDirPath");function EZ(){let e=VR();return VL($R.join(e,Jo.LICENSE_FILE_NAME))}a(EZ,"getLicenseFilePath");function KR(){let e=VR();return VL($R.join(e,Jo.REG_KEY_FILE_NAME))}a(KR,"getFingerPrintFilePath");async function hZ(){let e=KR();try{return await Gl.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await pZ();throw Wr.error(`Error writing fingerprint file to ${e}`),Wr.error(t),new Error("There was an error generating the fingerprint")}}a(hZ,"generateFingerPrint");async function pZ(){let e=oZ(),t=GL.hash(e),r=KR();try{await Gl.mkdirp(VR()),await Gl.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Wr.error(`Error writing fingerprint file to ${r}`),Wr.error(n),new Error("There was an error generating the fingerprint")}return t}a(pZ,"writeFingerprint");function KL(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Jo.RAM_ALLOCATION_ENUM.DEFAULT,version:Jo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Wr.error("empty license key passed to validate."),r;let n=KR(),s=!1;try{s=Gl.statSync(n)}catch(i){Wr.error(i)}if(s){let i;try{i=Gl.readFileSync(n,"utf8")}catch{Wr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(uZ),c=o[1];c=Buffer.concat([Buffer.from(c)],_Z);let l=Buffer.concat([Buffer.from(i)],fZ),u=qL.createDecipheriv(dZ,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let d=null;try{d=u.update(o[0],"hex","utf8"),d.trim(),d+=u.final("utf8")}catch{let f=mZ(o[0],i);if(f)d=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Fl),Wr.error(Fl),new Error(Fl)}let _;if(isNaN(d))try{_=JSON.parse(d),r.version=_.version,r.exp_date=_.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),_.ram_allocation&&(r.ram_allocation=_.ram_allocation)}catch{throw console.error(Fl),Wr.error(Fl),new Error(Fl)}else r.exp_date=d;r.exp_date<iZ().valueOf()&&(r.valid_date=!1),GL.validate(o[1],`${lZ}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Wr.error("Invalid licence"),r}a(KL,"validateLicense");function mZ(e,t){try{let r=qL.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Wr.warn("Check old license failed")}}a(mZ,"checkOldLicense");function YR(){let e=new cZ,t=[];try{t=Gl.readFileSync(EZ(),"utf-8").split(Jo.NEW_LINE)}catch(r){r.code==="ENOENT"?Wr.debug("no license file found"):Wr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(aZ.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=KL(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){Wr.error("There was an error parsing the license string."),Wr.error(s),e.ram_allocation=Jo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return qR=e,e}a(YR,"licenseSearch");async function SZ(){return qR||await YR(),qR}a(SZ,"getLicense");function TZ(){let e=YR().ram_allocation,t=process.constrainedMemory?.()||FL();if(t=Math.round(Math.min(t,FL())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(TZ,"checkMemoryLimit")});var xn=O((nbe,cM)=>{"use strict";var QL="username is required",JL="nothing to update, must supply active, role or password to update",XL="password cannot be an empty string",ZL="If role is specified, it cannot be empty.",eM="active must be true or false";cM.exports={addUser:wZ,alterUser:CZ,dropUser:DZ,getSuperUser:vZ,userInfo:LZ,listUsers:Zh,listUsersExternal:MZ,setUsersToGlobal:$l,findAndValidateUser:oM,getClusterUser:BZ,USERNAME_REQUIRED:QL,ALTERUSER_NOTHING_TO_UPDATE:JL,EMPTY_PASSWORD:XL,EMPTY_ROLE:ZL,ACTIVE_BOOLEAN:eM};var tM=Vr(),gZ=zo(),zR=Kh(),rM=SL(),nM=$r(),QR=to(),Hn=te(),sM=require("validate.js"),Ke=K(),{promisify:RZ}=require("util"),JR=eo(),WL=L(),jL=ft(),AZ=Ct(),ebe=ne(),tbe=_c(),yZ=Xi(),{table:rbe}=(Pe(),oe(ut)),{handleHDBError:yi,hdb_errors:bZ}=_e(),{HTTP_STATUS_CODES:bi,AUTHENTICATION_ERROR_MSGS:WR,HDB_ERROR_MSGS:ql}=bZ,{UserEventMsg:XR}=$s(),jR=require("lodash"),{server:ZR}=(qr(),oe(Ja)),OZ=K();ZR.getUser=(e,t)=>oM(e,t,t!=null);var iM={username:!0,active:!0,role:!0,password:!0},zL=new Map,Xh=nM.searchByValue,NZ=nM.searchByHash,IZ=RZ(gZ.delete);async function wZ(e){let t=sM.cleanAttributes(e,iM),r=rM.addUserValidation(t);if(r)throw yi(new Error,r.message,bi.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await Xh(n),s=s&&Array.from(s)}catch(l){throw Ke.error("There was an error searching for a role in add user"),Ke.error(l),l}if(!s||s.length<1)throw yi(new Error,ql.ROLE_NAME_NOT_FOUND(t.role),bi.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw yi(new Error,ql.DUP_ROLES_FOUND(t.role),bi.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=JR.encrypt(t.password)),t.password=zR.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await tM.insert(i)}catch(l){throw Ke.error("There was an error searching for a user."),Ke.error(l),l}Ke.debug(o);try{await $l()}catch(l){throw Ke.error("Got an error setting users to global"),Ke.error(l),l}if(o.skipped_hashes.length===1)throw yi(new Error,ql.USER_ALREADY_EXISTS(t.username),bi.CONFLICT,void 0,void 0,!0);let c={...t};return c.role=s[0],QR.signalUserChange(new XR(process.pid)),`${c.username} successfully added`}a(wZ,"addUser");async function CZ(e){let t=sM.cleanAttributes(e,iM);if(Hn.isEmptyOrZeroLength(t.username))throw new Error(QL);if(Hn.isEmptyOrZeroLength(t.password)&&Hn.isEmptyOrZeroLength(t.role)&&Hn.isEmptyOrZeroLength(t.active))throw new Error(JL);if(!Hn.isEmpty(t.password)&&Hn.isEmptyOrZeroLength(t.password.trim()))throw new Error(XL);if(!Hn.isEmpty(t.active)&&!Hn.isBoolean(t.active))throw new Error(eM);let r=PZ(t.username);if(!Hn.isEmpty(t.password)&&!Hn.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=JR.encrypt(t.password)),t.password=zR.hash(t.password)),t.role==="")throw new Error(ZL);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await Xh(i)||[])}catch(c){throw Ke.error("Got an error searching for a role."),Ke.error(c),c}if(!o||o.length===0){let c=ql.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ke.error(c),yi(new Error,c,bi.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=ql.ALTER_USER_DUP_ROLES(t.role);throw Ke.error(c),yi(new Error,c,bi.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await tM.update(n)}catch(i){throw Ke.error("Error during update."),Ke.error(i),i}try{await $l()}catch(i){throw Ke.error("Got an error setting users to global"),Ke.error(i),i}return QR.signalUserChange(new XR(process.pid)),s}a(CZ,"alterUser");function PZ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(PZ,"isClusterUser");async function DZ(e){try{let t=rM.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Hn.isEmpty(global.hdb_users.get(e.username)))throw yi(new Error,ql.USER_NOT_EXIST(e.username),bi.NOT_FOUND,void 0,void 0,!0);let n;try{n=await IZ(r)}catch(s){throw Ke.error("Got an error deleting a user."),Ke.error(s),s}Ke.debug(n);try{await $l()}catch(s){throw Ke.error("Got an error setting users to global."),Ke.error(s),s}return QR.signalUserChange(new XR(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(DZ,"dropUser");async function LZ(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=jR.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await NZ(r)}catch(s){throw Ke.error("Got an error searching for a role."),Ke.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ke.error(r),r}return t}a(LZ,"userInfo");async function MZ(){let e;try{e=await Zh()}catch(t){throw Ke.error("Got an error listing users."),Ke.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(MZ,"listUsersExternal");async function Zh(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Xh(e)}catch(o){throw Ke.error("Got an error searching for roles."),Ke.error(o),o}let r={};for(let o of t)r[o.id]=jR.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await Xh(n)}catch(o){throw Ke.error("Got an error searching for users."),Ke.error(o),o}let i=new Map;for(let o of s)o=jR.cloneDeep(o),o.role=r[o.role],UZ(o.role),i.set(o.username,o);return i}catch(e){throw Ke.error("got an error listing users"),Ke.error(e),Hn.errorizeMessage(e)}return null}a(Zh,"listUsers");function UZ(e){try{if(!e){Ke.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(yZ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ke.error("Got an error trying to set system permissions."),Ke.error(t)}}a(UZ,"appendSystemTablesToRole");async function $l(){try{let e=await Zh();global.hdb_users=e}catch(e){throw Ke.error(e),e}}a($l,"setUsersToGlobal");async function oM(e,t,r=!0){global.hdb_users||await $l();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw yi(new Error,WR.GENERIC_AUTH_FAIL,bi.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw yi(new Error,WR.USER_INACTIVE,bi.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(zL.get(t)===n.password)return s;if(zR.validate(n.password,t))zL.set(t,n.password);else throw yi(new Error,WR.GENERIC_AUTH_FAIL,bi.UNAUTHORIZED,void 0,void 0,!0)}return s}a(oM,"findAndValidateUser");async function vZ(){global.hdb_users||await $l();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(vZ,"getSuperUser");async function BZ(){let e=await Zh(),t=AZ.getConfigFromFile(WL.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Hn.isEmpty(r)&&r?.role?.role===WL.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=JR.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+jL.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+jL.SERVER_SUFFIX.ADMIN,r}a(BZ,"getClusterUser");var aM=[];ZR.invalidateUser=function(e){for(let t of aM)try{t(e)}catch(r){OZ.error("Error invalidating user",r)}};ZR.onInvalidatedUser=function(e){aM.push(e)}});var S_=O((abe,_M)=>{"use strict";var fc=K(),kn=L(),HZ=kD(),ibe=us(),obe=Ri(),xZ=xn(),{validateEvent:lM}=$s(),m_=Un(),kZ=require("process"),{resetDatabases:FZ}=(Pe(),oe(ut)),GZ={[kn.ITC_EVENT_TYPES.SCHEMA]:qZ,[kn.ITC_EVENT_TYPES.USER]:dM};async function qZ(e){let t=lM(e);if(t){fc.error(t);return}fc.trace("ITC schemaHandler received schema event:",e),await HZ(e.message),await $Z(e.message)}a(qZ,"schemaHandler");async function $Z(e){try{m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=FZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){fc.error(t)}}a($Z,"syncSchemaMetadata");var uM=[];async function dM(e){try{try{m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){fc.warn(r)}let t=lM(e);if(t){fc.error(t);return}fc.trace(`ITC userHandler ${kn.HDB_ITC_CLIENT_PREFIX}${kZ.pid} received user event:`,e),await xZ.setUsersToGlobal();for(let r of uM)r()}catch(t){fc.error(t)}}a(dM,"userHandler");dM.addListener=function(e){uM.push(e)};_M.exports=GZ});var $s=O((fbe,EM)=>{"use strict";var lbe=K(),eA=te(),VZ=L(),{ITC_ERRORS:T_}=Pn(),{parentPort:ube,threadId:KZ,isMainThread:YZ,workerData:dbe}=require("worker_threads"),{onMessageFromWorkers:WZ,broadcast:_be,broadcastWithAcknowledgement:jZ}=ot();EM.exports={sendItcEvent:zZ,validateEvent:fM,SchemaEventMsg:QZ,UserEventMsg:JZ};var ep;WZ(async(e,t)=>{ep=ep||S_(),fM(e),ep[e.type]&&await ep[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function zZ(e){return!YZ&&e.message&&(e.message.originator=KZ),jZ(e)}a(zZ,"sendItcEvent");function fM(e){if(typeof e!="object")return T_.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||eA.isEmpty(e.type))return T_.MISSING_TYPE;if(!e.hasOwnProperty("message")||eA.isEmpty(e.message))return T_.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||eA.isEmpty(e.message.originator))return T_.MISSING_ORIGIN;if(VZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return T_.INVALID_EVENT(e.type)}a(fM,"validateEvent");function QZ(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(QZ,"SchemaEventMsg");function JZ(e){this.originator=e}a(JZ,"UserEventMsg")});var to=O((pbe,SM)=>{"use strict";var hM=L(),hbe=te(),tp=K(),pM=BD(),Vl,{sendItcEvent:mM}=$s();function XZ(e){try{tp.info("signalSchemaChange called with message:",e),Vl=Vl||S_();let t=new pM(hM.ITC_EVENT_TYPES.SCHEMA,e);return Vl.schema(t),mM(t)}catch(t){tp.error(t)}}a(XZ,"signalSchemaChange");function ZZ(e){try{tp.trace("signalUserChange called with message:",e),Vl=Vl||S_();let t=new pM(hM.ITC_EVENT_TYPES.USER,e);return Vl.user(t),mM(t)}catch(t){tp.error(t)}}a(ZZ,"signalUserChange");SM.exports={signalSchemaChange:XZ,signalUserChange:ZZ}});var rp=O((Sbe,gM)=>{"use strict";var TM=te(),e5=L(),t5=K(),r5=Bh(),n5=vh(),s5=to(),{SchemaEventMsg:i5}=$s(),o5="already exists in";gM.exports=a5;async function a5(e,t,r){if(TM.isEmptyOrZeroLength(r))return r;let n=[];TM.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await c5(e,t.schema,t.name,i)})),s}a(a5,"lmdbCheckForNewAttributes");async function c5(e,t,r,n){let s=new n5(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await l5(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(o5))t5.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(c5,"createNewAttribute");async function l5(e){let t;return t=await r5(e),s5.signalSchemaChange(new i5(process.pid,e5.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(l5,"createAttribute")});var Kl=O((gbe,RM)=>{"use strict";var tA=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};RM.exports=tA});var yM=O((Abe,AM)=>{"use strict";var u5=Kl(),d5=L().OPERATIONS_ENUM,rA=class extends u5{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(d5.INSERT,r,n,s,i),this.records=t}};AM.exports=rA});var OM=O((bbe,bM)=>{"use strict";var _5=Kl(),f5=L().OPERATIONS_ENUM,nA=class extends _5{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(f5.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};bM.exports=nA});var IM=O((Nbe,NM)=>{"use strict";var E5=Kl(),h5=L().OPERATIONS_ENUM,sA=class extends E5{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(h5.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};NM.exports=sA});var CM=O((wbe,wM)=>{"use strict";var p5=Kl(),m5=L().OPERATIONS_ENUM,iA=class extends p5{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(m5.DELETE,n,s,t,i),this.original_records=r}};wM.exports=iA});var g_=O((Dbe,MM)=>{"use strict";var Pbe=require("path"),PM=mt(),S5=yM(),T5=OM(),g5=IM(),R5=CM(),Yl=Ht(),DM=te(),{CONFIG_PARAMS:A5}=L(),LM=ne();LM.initSync();var np=L().OPERATIONS_ENUM,{getTransactionAuditStorePath:y5}=Rt();MM.exports=b5;async function b5(e,t){if(LM.get(A5.LOGGING_AUDITLOG)===!1)return;let r=y5(e.schema,e.table),n=await PM.openEnvironment(r,e.table,!0),s=O5(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){PM.initializeDBIs(n,Yl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Yl.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Yl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Yl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),DM.isEmpty(s.user_name)||n.dbis[Yl.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Yl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(b5,"writeTransaction");function O5(e,t){let r=DM.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===np.INSERT)return new S5(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===np.UPDATE)return new T5(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===np.UPSERT)return new g5(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===np.DELETE)return new R5(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(O5,"createTransactionObject")});var oA=O((Ube,UM)=>{"use strict";var N5=__(),Mbe=zd(),R_=L(),I5=Qd(),w5=nc().insertRecords,C5=mt(),P5=K(),D5=rp(),{getSchemaPath:L5}=Rt(),M5=g_();UM.exports=U5;async function U5(e){try{let{schema_table:t,attributes:r}=N5(e);I5(e,r,t.hash_attribute),e.schema!==R_.SYSTEM_SCHEMA_NAME&&(r.includes(R_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(R_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(R_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(R_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await D5(e.hdb_auth_header,t,r),s=L5(e.schema,e.table),i=await C5.openEnvironment(s,e.table),o=await w5(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await M5(e,o)}catch(c){P5.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(U5,"lmdbCreateRecords")});var HM=O((Bbe,BM)=>{"use strict";var vM=L(),v5=oA(),B5=zd(),H5=require("fs-extra"),{getSchemaPath:x5}=Rt();BM.exports=k5;async function k5(e){let t=[{name:e.schema,createddate:Date.now()}],r=new B5(vM.SYSTEM_SCHEMA_NAME,vM.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await v5(r),await H5.mkdirp(x5(e.schema))}a(k5,"lmdbCreateSchema")});var kM=O((xbe,xM)=>{"use strict";var aA=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};xM.exports=aA});var $M=O(($be,qM)=>{"use strict";var FM=mt(),cA=on(),lA=Pn().LMDB_ERRORS_ENUM,F5=Ht(),GM=K(),Fbe=te(),G5=require("lmdb"),q5=kM(),$5=L(),{OVERFLOW_MARKER:Gbe,MAX_SEARCH_KEY_LENGTH:qbe}=F5,V5=$5.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function K5(e,t,r,n){if(cA.validateEnv(e),t===void 0)throw new Error(lA.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(lA.IDS_REQUIRED):new Error(lA.IDS_MUST_BE_ITERABLE);try{let s=FM.listDBIs(e);FM.initializeDBIs(e,t,s);let i=new q5,o,c=[],l=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||n&&h[V5]>n){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,G5.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let m=0;m<s.length;m++){let g=s[m];if(!h.hasOwnProperty(g)||g===t)continue;let S=e.dbis[g],y=h[g];if(y!=null)try{let I=cA.getIndexedValues(y);if(I)for(let U=0,H=I.length;U<H;U++)S.remove(I[U],o)}catch{GM.warn(`cannot delete from attribute: ${g}, ${y}:${o}`)}}});c.push(T),l.push(o),i.original_records.push(h)}catch(h){GM.warn(h),i.skipped.push(o)}let u=[],d=await Promise.all(c);for(let E=0,f=d.length;E<f;E++)d[E]===!0?i.deleted.push(l[E]):(i.skipped.push(l[E]),u.push(E));let _=0;for(let E=0;E<u.length;E++){let f=u[E];i.original_records.splice(f-_,1),_++}return i.txn_time=cA.getNextMonotonicTime(),i}catch(s){throw s}}a(K5,"deleteRecords");qM.exports={deleteRecords:K5}});var A_=O((Kbe,KM)=>{"use strict";var Wl=te(),Y5=$M(),W5=mt(),{getSchemaPath:j5}=Rt(),z5=g_(),Q5=K();KM.exports=J5;async function J5(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Wl.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Wl.isEmptyOrZeroLength(e.hash_values)&&!Wl.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Wl.isEmpty(l)||e.hash_values.push(l)}}if(Wl.isEmptyOrZeroLength(e.hash_values))return VM([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Wl.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=j5(e.schema,e.table),i=await W5.openEnvironment(s,e.table),o=await Y5.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await z5(e,o)}catch(c){Q5.error(`unable to write transaction due to ${c.message}`)}return VM(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(J5,"lmdbDeleteRecords");function VM(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(VM,"createDeleteResponse")});var dA=O((jbe,YM)=>{"use strict";var X5=L(),Wbe=on();function uA(e,t){let r=Object.create(null);if(t.length===1&&X5.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(uA,"parseRow");function Z5(e,t,r,n){let s=uA(r,e);n.push(s)}a(Z5,"searchAll");function e6(e,t,r,n){let s=uA(r,e);n[t]=s}a(e6,"searchAllToMap");function t6(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(t6,"iterateDBI");function Ec(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(Ec,"pushResults");function r6(e,t,r,n,s,i){t.toString().endsWith(e)&&Ec(t,r,n,s,i)}a(r6,"endsWith");function n6(e,t,r,n,s,i){t.toString().includes(e)&&Ec(t,r,n,s,i)}a(n6,"contains");function s6(e,t,r,n,s,i){t>e&&Ec(t,r,n,s,i)}a(s6,"greaterThanCompare");function i6(e,t,r,n,s,i){t>=e&&Ec(t,r,n,s,i)}a(i6,"greaterThanEqualCompare");function o6(e,t,r,n,s,i){t<e&&Ec(t,r,n,s,i)}a(o6,"lessThanCompare");function a6(e,t,r,n,s,i){t<=e&&Ec(t,r,n,s,i)}a(a6,"lessThanEqualCompare");YM.exports={parseRow:uA,searchAll:Z5,searchAllToMap:e6,iterateDBI:t6,endsWith:r6,contains:n6,greaterThanCompare:s6,greaterThanEqualCompare:i6,lessThanCompare:o6,lessThanEqualCompare:a6,pushResults:Ec}});var jl=O((Zbe,ZM)=>{"use strict";var Xo=mt(),Qbe=K(),Fn=on(),sp=Ht(),Qt=Pn().LMDB_ERRORS_ENUM,Jbe=te(),c6=L(),ip=dA(),{parseRow:l6}=ip,Xbe=require("lmdb"),{OVERFLOW_MARKER:WM,MAX_SEARCH_KEY_LENGTH:u6}=sp;function jM(e,t,r,n=!1,s=void 0,i=void 0){return hc(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(jM,"iterateFullIndex");function y_(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return hc(e,t,r,(d,_,E,f)=>{let S={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return f===r?(S.values=!1,_.getRange(S).map(y=>({value:y}))):_.getRange(S)})}a(y_,"iterateRangeBetween");function hc(e,t,r,n){let s=e.database||e,i=Xo.openDBI(s,r);i[sp.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Xo.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(hc,"setupTransaction");function zM(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(WM)){if(!s)if(r)s=Xo.openDBI(e,r);else{let l=Xo.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Xo.openDBI(e,l[u]),!s[sp.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(zM,"getOverflowCheck");function d6(e,t,r,n=!1,s=void 0,i=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);return hc(e,t,t,(o,c,l)=>(op(r),r=b_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>l6(u.value,r))))}a(d6,"searchAll");function _6(e,t,r,n=!1,s=void 0,i=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);op(r),r=b_(e.database||e,r);let o=new Map;for(let{key:c,value:l}of jM(e,t,t,n,s,i))o.set(c,ip.parseRow(l,r));return o}a(_6,"searchAllToMap");function f6(e,t,r=!1,n=void 0,s=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=jM(e,void 0,t,r,n,s),c=o.transaction,l=zM(c.database,c,void 0,t);for(let{key:u,value:d}of o){let _=l(u,d);i[_]===void 0&&(i[_]=[]),i[_].push(d)}return i}a(f6,"iterateDBI");function E6(e,t){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);return Xo.statDBI(e,t).entryCount}a(E6,"countAll");function h6(e,t,r,n,s=!1,i=void 0,o=void 0){return Zo(e,r,n),hc(e,t,r,(c,l,u,d)=>(n=Fn.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(_=>({key:n,value:_}))))}a(h6,"equals");function p6(e,t,r){return Zo(e,t,r),Xo.openDBI(e,t).getValuesCount(r)}a(p6,"count");function m6(e,t,r,n,s=!1,i=void 0,o=void 0){return Zo(e,r,n),hc(e,null,r,(c,l)=>{n=Fn.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let _;for(let E of l.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){_=E;break}return _!==void 0&&(Number.isInteger(o)?o++:i++),d=l.getRange({transaction:c,start:_,end:void 0,reverse:s,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==_){if(f.toString().startsWith(n))return E;if(u===!0)return d.DONE}}),d.filter(E=>E)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(_=>{if(_.key.toString().startsWith(n))return _;if(u===!0)return d.DONE}),u?d:d.filter(_=>_)})}a(m6,"startsWith");function S6(e,t,r,n,s=!1,i=void 0,o=void 0){return QM(e,t,r,n,s,i,o,!0)}a(S6,"endsWith");function QM(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Zo(e,r,n),hc(e,null,r,(l,u,d,_)=>{let E=zM(d,l,_,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(WM)?u.getValues(f,{transaction:l}).map(T=>{let m=E(f,T);if(c?m.endsWith(n):m.includes(n))return{key:m,value:T}}).filter(T=>T):(c?h.endsWith(n):h.includes(n))?u[sp.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:u.getValues(f,{transaction:l}).map(T=>({key:f,value:T})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(QM,"contains");function T6(e,t,r,n,s=!1,i=void 0,o=void 0){Zo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),y_(e,t,r,n,l,s,i,o,!0,!1)}a(T6,"greaterThan");function g6(e,t,r,n,s=!1,i=void 0,o=void 0){Zo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),y_(e,t,r,n,l,s,i,o,!1,!1)}a(g6,"greaterThanEqual");function R6(e,t,r,n,s=!1,i=void 0,o=void 0){Zo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),y_(e,t,r,l,n,s,i,o,!1,!0)}a(R6,"lessThan");function A6(e,t,r,n,s=!1,i=void 0,o=void 0){Zo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),y_(e,t,r,l,n,s,i,o,!1,!1)}a(A6,"lessThanEqual");function y6(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Fn.validateEnv(e),r===void 0)throw new Error(Qt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Qt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Qt.END_VALUE_REQUIRED);if(n=Fn.convertKeyValueToWrite(n),s=Fn.convertKeyValueToWrite(s),n>s)throw new Error(Qt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return y_(e,t,r,n,s,i,o,c)}a(y6,"between");function b6(e,t,r,n){Fn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);if(op(r),r=b_(s,r),n===void 0)throw new Error(Qt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=ip.parseRow(c,r)),o}a(b6,"searchByHash");function O6(e,t,r){Fn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Qt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(O6,"checkHashExists");function N6(e,t,r,n,s=[]){return XM(e,t,r,n,s),JM(e,t,r,n,s).map(i=>i[1])}a(N6,"batchSearchByHash");function I6(e,t,r,n,s=[]){XM(e,t,r,n,s);let i=new Map;for(let[o,c]of JM(e,t,r,n,s))i.set(o,c);return i}a(I6,"batchSearchByHashToMap");function JM(e,t,r,n,s=[]){return hc(e,t,t,(i,o,c)=>{r=b_(c,r);let l=r.length<3;return n.map(u=>{let d=c.dbis[t].get(u,{transaction:i,lazy:l});if(d)return[u,ip.parseRow(d,r)];s.push(u)}).filter(u=>u)})}a(JM,"batchHashSearch");function XM(e,t,r,n,s){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);if(op(r),n==null)throw new Error(Qt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Qt.IDS_MUST_BE_ITERABLE)}a(XM,"initializeBatchSearchByHash");function op(e){if(!Array.isArray(e))throw e===void 0?new Error(Qt.FETCH_ATTRIBUTES_REQUIRED):new Error(Qt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(op,"validateFetchAttributes");function Zo(e,t,r){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Qt.SEARCH_VALUE_REQUIRED);if(r?.length>u6)throw new Error(Qt.SEARCH_VALUE_TOO_LARGE)}a(Zo,"validateComparisonFunctions");function b_(e,t){return t.length===1&&c6.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Xo.listDBIs(e)),t}a(b_,"setGetWholeRowAttributes");ZM.exports={searchAll:d6,searchAllToMap:_6,count:p6,countAll:E6,equals:h6,startsWith:m6,endsWith:S6,contains:QM,searchByHash:b6,setGetWholeRowAttributes:b_,batchSearchByHash:N6,batchSearchByHashToMap:I6,checkHashExists:O6,iterateDBI:f6,greaterThan:T6,greaterThanEqual:g6,lessThan:R6,lessThanEqual:A6,between:y6}});var zl=O((tOe,sU)=>{var eU=require("lodash"),tU=_t(),xe=require("joi"),w6=te(),{hdb_schema_table:O_,checkValidTable:rU,hdb_table:nU,hdb_database:ap}=Ti(),{handleHDBError:C6,hdb_errors:P6}=_e(),{getDatabases:D6}=(Pe(),oe(ut)),{HTTP_STATUS_CODES:L6}=P6,M6=xe.object({database:ap,schema:ap,table:nU,search_attribute:O_,search_value:xe.any().required(),get_attributes:xe.array().min(1).items(xe.alternatives(O_,xe.object())).optional(),desc:xe.bool(),limit:xe.number().integer().min(1),offset:xe.number().integer().min(0)}),U6=xe.object({database:ap,schema:ap,table:nU,operator:xe.string().valid("and","or").default("and").lowercase(),offset:xe.number().integer().min(0),limit:xe.number().integer().min(1),get_attributes:xe.array().min(1).items(xe.alternatives(O_,xe.object())).optional(),sort:xe.object({attribute:xe.alternatives(O_,xe.array().min(1)),descending:xe.bool().optional()}).optional(),conditions:xe.array().min(1).items(xe.alternatives(xe.object({operator:xe.string().valid("and","or").default("and").lowercase(),conditions:xe.array()}),xe.object({search_attribute:xe.alternatives(O_,xe.array().min(1)),search_type:xe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:xe.when("search_type",{switch:[{is:"equals",then:xe.any()},{is:"between",then:xe.array().items(xe.alternatives([xe.string(),xe.number()])).length(2)}],otherwise:xe.alternatives(xe.string(),xe.number())}).required()}))).required()});sU.exports=function(e,t){let r=null;switch(t){case"value":r=tU.validateBySchema(e,M6);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(rU("database",e.schema)),i(rU("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=tU.validateBySchema(e,U6);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=w6.checkGlobalSchemaTable(e.schema,e.table);if(s)return C6(new Error,s,L6.NOT_FOUND);let o=D6()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(d=>{for(let _=0,E=d.conditions.length;_<E;_++){let f=d.conditions[_];f.conditions?l(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=eU.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!eU.some(o,_=>_===d||_.attribute===d||_.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var _A=O((nOe,iU)=>{"use strict";var v6=mt(),B6=zl(),{getSchemaPath:H6}=Rt();iU.exports=x6;function x6(e){let t=B6(e,"hashes");if(t)throw t;let r=H6(e.schema,e.table);return v6.openEnvironment(r,e.table)}a(x6,"initialize")});var fA=O((iOe,oU)=>{"use strict";var k6=jl(),F6=_A();oU.exports=G6;async function G6(e){let t=await F6(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return k6.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(G6,"lmdbGetDataByHash")});var Ql=O((aOe,aU)=>{"use strict";var EA=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};aU.exports=EA});var lU=O((uOe,cU)=>{"use strict";var lOe=Ql(),q6=jl(),$6=_A();cU.exports=V6;async function V6(e){let t=await $6(e),r=global.hdb_schema[e.schema][e.table];return q6.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(V6,"lmdbSearchByHash")});var Vs=O((_Oe,uU)=>{"use strict";var hA=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};uU.exports=hA});var cp=O((EOe,pU)=>{"use strict";var jr=jl(),K6=mt(),Y6=te(),ke=Ht(),pc=L(),W6=Xi(),dU=Pn().LMDB_ERRORS_ENUM,{getSchemaPath:j6}=Rt(),ro=pc.SEARCH_WILDCARDS;async function z6(e,t,r){let n;e.schema===pc.SYSTEM_SCHEMA_NAME?n=W6[e.table]:n=global.hdb_schema[e.schema][e.table];let s=hU(e,n.hash_attribute,r,t);return fU(e,s,n.hash_attribute,r)}a(z6,"prepSearch");async function fU(e,t,r,n){let s=j6(e.schema,e.table),i=await K6.openEnvironment(s,e.table),o=EU(i,e,t,r),c=o.transaction||i;if([ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ke.SEARCH_TYPES.SEARCH_ALL,ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(Q6(e,r)===!1){let d=e.search_attribute;if(d===r)return n?_U(o,()=>!0):o.map(E=>({[r]:E.key}));let _=a(E=>({[r]:E.value,[d]:E.key}),"toObject");return n?_U(o,_):o.map(_)}let u=e.search_attribute===r?o.map(d=>d.key):o.map(d=>d.value);return n===!0?jr.batchSearchByHashToMap(c,r,e.get_attributes,u):jr.batchSearchByHash(c,r,e.get_attributes,u)}a(fU,"executeSearch");function EU(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case ke.SEARCH_TYPES.EQUALS:s=jr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.CONTAINS:s=jr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.ENDS_WITH:case ke.SEARCH_TYPES._ENDS_WITH:s=jr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.STARTS_WITH:case ke.SEARCH_TYPES._STARTS_WITH:s=jr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return jr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return jr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.SEARCH_ALL:return jr.searchAll(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return jr.searchAllToMap(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.BETWEEN:s=jr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case ke.SEARCH_TYPES.GREATER_THAN:case ke.SEARCH_TYPES._GREATER_THAN:s=jr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.GREATER_THAN_EQUAL:case ke.SEARCH_TYPES._GREATER_THAN_EQUAL:s=jr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.LESS_THAN:case ke.SEARCH_TYPES._LESS_THAN:s=jr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.LESS_THAN_EQUAL:case ke.SEARCH_TYPES._LESS_THAN_EQUAL:s=jr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(EU,"searchByType");function _U(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(_U,"createMapFromIterable");function Q6(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(Q6,"checkToFetchMore");function hU(e,t,r,n){if(Y6.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),ro.indexOf(s)>-1)return r===!0?ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ke.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(ro[0])<0&&s.indexOf(ro[1])<0)return c===!0?r===!0?ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ke.SEARCH_TYPES.EQUALS;if(ro.indexOf(i)>=0&&ro.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ke.SEARCH_TYPES.CONTAINS;if(ro.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ke.SEARCH_TYPES.ENDS_WITH;if(ro.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ke.SEARCH_TYPES.STARTS_WITH;if(s.includes(ro[0])||s.includes(ro[1]))return ke.SEARCH_TYPES.EQUALS;throw new Error(dU.UNKNOWN_SEARCH_TYPE)}else switch(n){case pc.VALUE_SEARCH_COMPARATORS.BETWEEN:return ke.SEARCH_TYPES.BETWEEN;case pc.VALUE_SEARCH_COMPARATORS.GREATER:return ke.SEARCH_TYPES.GREATER_THAN;case pc.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ke.SEARCH_TYPES.GREATER_THAN_EQUAL;case pc.VALUE_SEARCH_COMPARATORS.LESS:return ke.SEARCH_TYPES.LESS_THAN;case pc.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ke.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(dU.UNKNOWN_SEARCH_TYPE)}}a(hU,"createSearchTypeFromSearchObject");pU.exports={executeSearch:fU,createSearchTypeFromSearchObject:hU,prepSearch:z6,searchByType:EU}});var SU=O((mOe,mU)=>{"use strict";var pOe=Vs(),J6=zl(),X6=te(),Z6=L(),e8=cp();mU.exports=t8;function t8(e,t){if(!X6.isEmpty(t)&&Z6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=J6(e,"value");if(n)throw n;return e8.prepSearch(e,t,!0)}a(t8,"lmdbGetDataByValue")});var N_=O((gOe,TU)=>{"use strict";var TOe=Vs(),r8=zl(),n8=te(),s8=L(),i8=cp();TU.exports=o8;async function o8(e,t){if(!n8.isEmpty(t)&&s8.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=r8(e,"value");if(n)throw n;return i8.prepSearch(e,t,!1)}a(o8,"lmdbSearchByValue")});var RU=O((yOe,gU)=>{"use strict";var AOe=Ht(),pA=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},mA=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},SA=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};gU.exports={SearchByConditionsObject:pA,SearchCondition:mA,SortAttribute:SA}});var NU=O((IOe,OU)=>{"use strict";var OOe=RU().SearchByConditionsObject,a8=Vs(),c8=zl(),TA=jl(),lp=Ht(),{Resource:NOe}=(Ks(),oe(gA)),bU=cp(),l8=dA(),u8=require("lodash"),{getSchemaPath:d8}=Rt(),AU=mt(),{handleHDBError:_8,hdb_errors:f8}=_e(),{HTTP_STATUS_CODES:E8}=f8,h8=1e8;OU.exports=p8;async function p8(e){let t=c8(e,"conditions");if(t)throw _8(t,t.message,E8.BAD_REQUEST,void 0,void 0,!0);e.operator=e.operator?e.operator.toLowerCase():void 0,e.offset=Number.isInteger(e.offset)?e.offset:0;let r=d8(e.schema,e.table),n=await AU.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)AU.openDBI(n,u.search_attribute);let i=u8.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.search_type;d===lp.SEARCH_TYPES.EQUALS?u.estimated_count=TA.count(n,u.search_attribute,u.search_value):d===lp.SEARCH_TYPES.CONTAINS||d===lp.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=h8}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await yU(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(bU.filterByType),_=d.length,E=TA.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(f=>u.get(f,{transaction:o,lazy:!0})),_>0&&(l=l.filter(f=>{for(let h=0;h<_;h++)if(!d[h](f))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(f=>l8.parseRow(f,E))}else{for(let _=1;_<i.length;_++){let E=i[_],f=await yU(o,e,E,s.hash_attribute);c=c.concat(f)}let u=new Set,d=e.offset||0;c=c.filter(_=>u.has(_)?!1:(u.add(_),!0)).slice(d,e.limit&&e.limit+d),l=TA.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(p8,"lmdbSearchByConditions");async function yU(e,t,r,n){let s=new a8(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===lp.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,bU.searchByType(e,s,i,n).map(o=>o.value)}a(yU,"executeConditionSearch")});var Jl=O((COe,IU)=>{"use strict";var m8=L().OPERATIONS_ENUM,RA=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=m8.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};IU.exports=RA});var AA=O((DOe,vU)=>{"use strict";var DU=Vs(),LU=Jl(),MU=N_(),UU=A_(),dn=L(),wU=te(),CU=mt(),{getTransactionAuditStorePath:S8,getSchemaPath:T8}=Rt(),PU=K();vU.exports=g8;async function g8(e){try{if(wU.isEmpty(global.hdb_schema[e.schema])||wU.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await R8(e),await A8(e);let t=T8(e.schema,e.table);try{await CU.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")PU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=S8(e.schema,e.table);await CU.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")PU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(g8,"lmdbDropTable");async function R8(e){let t=new DU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await MU(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 LU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await UU(s)}a(R8,"deleteAttributesFromSystem");async function A8(e){let t=new DU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await MU(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 LU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await UU(s)}catch(i){throw i}}a(A8,"dropTableFromSystem")});var HU=O((MOe,BU)=>{"use strict";var y8=require("fs-extra"),b8=Vs(),O8=Ql(),N8=Jl(),I8=AA(),w8=A_(),C8=fA(),P8=N_(),no=L(),{getSchemaPath:D8}=Rt(),{handleHDBError:L8,hdb_errors:M8}=_e(),{HDB_ERROR_MSGS:U8,HTTP_STATUS_CODES:v8}=M8;BU.exports=B8;async function B8(e){let t;try{t=await H8(e.schema);let r=new b8(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await P8(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await I8(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new N8(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await w8(s);let i=D8(t);await y8.remove(i)}catch(r){throw r}}a(B8,"lmdbDropSchema");async function H8(e){let t=new O8(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await C8(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw L8(new Error,U8.SCHEMA_NOT_FOUND(e),v8.NOT_FOUND,void 0,void 0,!0);return n}a(H8,"validateDropSchema")});var Xl=O((vOe,xU)=>{"use strict";var yA=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};xU.exports=yA});var OA=O((xOe,kU)=>{"use strict";var x8=require("fs-extra"),up=mt(),{getTransactionAuditStorePath:k8}=Rt(),bA=Ht(),HOe=Xl();kU.exports=F8;async function F8(e){let t;try{let r=k8(e.schema,e.table);await x8.mkdirp(r),t=await up.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{up.createDBI(t,bA.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),up.createDBI(t,bA.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),up.createDBI(t,bA.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(F8,"createTransactionsAuditEnvironment")});var qU=O((GOe,GU)=>{"use strict";var NA=L(),FU=mt(),G8=nc(),{getSystemSchemaPath:q8,getSchemaPath:$8}=Rt(),FOe=Xi(),V8=Bh(),IA=vh(),K8=K(),Y8=OA();GU.exports=W8;async function W8(e,t){let r=$8(t.schema,t.table),n=new IA(t.schema,t.table,NA.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new IA(t.schema,t.table,NA.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new IA(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await FU.createEnvironment(r,t.table),e!==void 0){let o=await FU.openEnvironment(q8(),NA.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await G8.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_table_attributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await wA(n),await wA(s),await wA(i)}await Y8(t)}catch(o){throw o}}a(W8,"lmdbCreateTable");async function wA(e){try{await V8(e)}catch(t){K8.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(wA,"createAttribute")});var VU=O(($Oe,$U)=>{"use strict";var j8=__(),z8=Qd(),Q8=rp(),I_=L(),J8=nc().updateRecords,X8=mt(),{getSchemaPath:Z8}=Rt(),e9=g_(),t9=K();$U.exports=r9;async function r9(e){try{let{schema_table:t,attributes:r}=j8(e);z8(e,r,t.hash_attribute),e.schema!==I_.SYSTEM_SCHEMA_NAME&&(r.includes(I_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(I_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(I_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(I_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Q8(e.hdb_auth_header,t,r),s=Z8(e.schema,e.table),i=await X8.openEnvironment(s,e.table),o=await J8(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await e9(e,o)}catch(c){t9.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(r9,"lmdbUpdateRecords")});var YU=O((KOe,KU)=>{"use strict";var n9=L().OPERATIONS_ENUM,CA=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=n9.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};KU.exports=CA});var jU=O((jOe,WU)=>{"use strict";var WOe=YU(),s9=__(),i9=Qd(),o9=rp(),w_=L(),a9=nc().upsertRecords,c9=mt(),{getSchemaPath:l9}=Rt(),u9=g_(),d9=K(),{handleHDBError:_9,hdb_errors:f9}=_e();WU.exports=E9;async function E9(e){let t;try{t=s9(e)}catch(l){throw _9(l,l.message,f9.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;i9(e,n,r.hash_attribute),e.schema!==w_.SYSTEM_SCHEMA_NAME&&(n.includes(w_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(w_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(w_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(w_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await o9(e.hdb_auth_header,r,n),i=l9(e.schema,e.table),o=await c9.openEnvironment(i,e.table),c=await a9(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await u9(e,c)}catch(l){d9.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(E9,"lmdbUpsertRecords")});var QU=O((QOe,zU)=>{"use strict";var PA=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};zU.exports=PA});var XU=O((XOe,JU)=>{"use strict";var DA=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};JU.exports=DA});var tv=O((tNe,ev)=>{"use strict";var LA=mt(),{getTransactionAuditStorePath:h9}=Rt(),eNe=QU(),C_=Ht(),p9=te(),ZU=XU(),m9=require("util").promisify,S9=m9(setTimeout),T9=1e4,g9=100;ev.exports=R9;async function R9(e){let t=h9(e.schema,e.table),r=await LA.openEnvironment(t,e.table,!0),n=LA.listDBIs(r);LA.initializeDBIs(r,C_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new ZU;do s=await A9(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await S9(g9);while(s.transactions_deleted>0);return i}a(R9,"deleteAuditLogsBefore");async function A9(e,t){let r=new ZU;try{let n=e.dbis[C_.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[C_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];p9.isEmpty(c)||(s=e.dbis[C_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[C_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>T9)break}return await s,r}catch(n){throw n}}a(A9,"deleteTransactions")});var nv=O((nNe,rv)=>{"use strict";var MA=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};rv.exports=MA});var iv=O((oNe,sv)=>{"use strict";var y9=Vs(),b9=Jl(),iNe=nv(),Oi=L(),O9=te(),UA=mt(),N9=Xi(),I9=N_(),w9=A_(),{getSchemaPath:C9}=Rt();sv.exports=P9;async function P9(e,t=!0){let r;e.schema===Oi.SYSTEM_SCHEMA_NAME?r=N9[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await L9(e),s=C9(e.schema,e.table),i=await UA.openEnvironment(s,e.table);return t===!0&&await D9(e,i,r.hash_attribute),UA.dropDBI(i,e.attribute),n}a(P9,"lmdbDropAttribute");async function D9(e,t,r){let n=UA.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(o,u,l)}await s}a(D9,"removeAttributeFromAllObjects");async function L9(e){let t=new y9(Oi.SYSTEM_SCHEMA_NAME,Oi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await I9(t)).filter(o=>o[Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(O9.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new b9(Oi.SYSTEM_SCHEMA_NAME,Oi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return w9(i)}a(L9,"dropAttributeFromSystem")});var dv=O((lNe,uv)=>{"use strict";var vA=mt(),Zl=Ht(),cNe=on(),BA=L(),ov=te(),{getTransactionAuditStorePath:M9}=Rt(),U9=jl(),dp=Kl(),v9=K();uv.exports=B9;async function B9(e){let t=M9(e.schema,e.table),r=await vA.openEnvironment(t,e.table,!0),n=vA.listDBIs(r);vA.initializeDBIs(r,Zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case BA.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return av(r,e.search_values);case BA.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,x9(r,e.search_values,s);case BA.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return H9(r,e.search_values);default:return av(r)}}a(B9,"readAuditLog");function av(e,t=[0,Date.now()]){ov.isEmpty(t[0])&&(t[0]=0),ov.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new dp,s))}a(av,"searchTransactionsByTimestamp");function H9(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[Zl.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,lv(e,i))}return Object.fromEntries(r)}a(H9,"searchTransactionsByUsername");function x9(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=U9.equals(e,Zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Zl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:_}of d){let E=Number(_);n.has(E)?n.get(E).push(u.toString()):n.set(E,[u.toString()])}}let s=Array.from(n.keys()),i=lv(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);cv(l,"records",r,d,o),cv(l,"original_records",r,d,o)}return Object.fromEntries(o)}a(x9,"searchTransactionsByHashValues");function cv(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let _=new dp(e.operation,e.user_name,i,void 0);_[t]=[c],u.push(_)}}else{let u=new dp(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(cv,"loopRecords");function lv(e,t){let r=[];try{let n=e.dbis[Zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new dp,i);r.push(o)}}catch(i){v9.warn(i)}return r}catch(n){throw n}}a(lv,"batchSearchTransactions")});var fv=O((fNe,_v)=>{"use strict";var{getSchemaPath:dNe}=Rt(),_Ne=mt(),{database:k9}=(Pe(),oe(ut));_v.exports={writeTransaction:F9};async function F9(e,t,r){return k9({database:e,table:t}).transaction(r)}a(F9,"writeTransaction")});var mv=O((hNe,pv)=>{"use strict";var{getSchemaPath:Ev}=Rt(),hv=mt();pv.exports={flush:G9,resetReadTxn:q9};async function G9(e,t){return(await hv.openEnvironment(Ev(e,t),t.toString())).flushed}a(G9,"flush");async function q9(e,t){try{(await hv.openEnvironment(Ev(e,t),t.toString())).resetReadTxn()}catch{}}a(q9,"resetReadTxn")});var Rv=O((mNe,gv)=>{"use strict";var{Readable:$9}=require("stream"),{getDatabases:V9}=(Pe(),oe(ut)),{readSync:K9,openSync:Y9,createReadStream:Sv}=require("fs"),{open:W9}=require("lmdb"),Tv=i_(),j9=o_(),{AUDIT_STORE_OPTIONS:z9}=(Qi(),oe(Av)),{INTERNAL_DBIS_NAME:Q9,AUDIT_STORE_NAME:J9}=Ht();gv.exports=Z9;var HA=32768,X9=100;async function Z9(e){let t=e.database||e.schema||"data",r=V9()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let d=u.dbisDB,_=W9({noSync:!0,maxDbs:j9.MAX_DBS}),E,f=_.openDB(Q9,new Tv(!1)),h=d.useReadTransaction(),T=0,m=a(async function(S,y){y.encoding="binary",y.encoder=void 0;let I=_.openDB(S,y),U=d.openDB(S,y);for(let{key:H,version:X,value:W}of U.getRange({start:null,transaction:h,versions:U.useVersions}))E=I.put(H,W,X),T++%X9===0&&(await new Promise(V=>setTimeout(V,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:y}of d.getRange({transaction:h,start:!1}))if(s.some(I=>S.startsWith?.(I+"/"))){f.put(S,y);let[,I]=S.split("/"),U=!I,H=new Tv(!U,U);await m(S,H)}e.include_audit&&await m(J9,{...z9}),await E;let g=Sv(_.path);return g.headers=l(),g.on("close",()=>{h.done(),_.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=Y9(o.path);return o.transaction(()=>{let u=Buffer.alloc(HA);K9(c,u,0,HA),o.resetReadTxn();let d=o.useReadTransaction();d.renew();let _=Sv(null,{fd:c,start:HA}),E=new $9.from(async function*(){yield u;for await(let f of _)d.openTimer&&(d.openTimer=0),yield f;d.done()}());return E.headers=l(),E});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}a(Z9,"getBackup")});var Ov=O((TNe,bv)=>{"use strict";var e7=K(),{handleHDBError:t7}=_e(),r7=qP(),n7=Bh(),s7=oA(),i7=HM(),o7=A_(),a7=fA(),c7=lU(),l7=SU(),u7=N_(),d7=NU(),_7=HU(),f7=qU(),E7=VU(),h7=jU(),p7=tv(),m7=AA(),S7=iv(),T7=dv(),g7=fv(),yv=mv(),R7=Rv(),xA=class extends r7{static{a(this,"LMDBBridge")}async searchByConditions(t){return d7(t)}async getDataByHash(t){return await a7(t)}async searchByHash(t){return await c7(t)}async getDataByValue(t,r){return await l7(t,r)}async searchByValue(t){return await u7(t)}async createSchema(t){return await i7(t)}async dropSchema(t){return await _7(t)}async createTable(t,r){return await f7(t,r)}async dropTable(t){return await m7(t)}async createAttribute(t){return await n7(t)}async createRecords(t){return await s7(t)}async updateRecords(t){return await E7(t)}async upsertRecords(t){try{return await h7(t)}catch(r){throw t7(r,null,null,e7.ERR,r)}}async deleteRecords(t){return await o7(t)}async dropAttribute(t){return await S7(t)}async deleteAuditLogsBefore(t){return await p7(t)}async readAuditLog(t){return await T7(t)}writeTransaction(t,r,n){return g7.writeTransaction(t,r,n)}flush(t,r){return yv.flush(t,r)}resetReadTxn(t,r){return yv.resetReadTxn(t,r)}getBackup(t){return R7(t)}};bv.exports=xA});function Mv(e){FA=e}function O7(){b7=setInterval(function(){for(let e of kA)if(e.stale){let t=e[Fe]?.url;Cv.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},y7).unref()}var GA,wv,Cv,Pv,Dv,Lv,Nv,kA,A7,P_,Iv,FA,mc,_p,y7,b7,fp=Ie(()=>{GA=M(on()),wv=M(_e()),Cv=M(K());Ks();Pv=M(ne()),Dv=M(L()),Lv=M(te()),Nv=100,kA=new Set,A7=(0,Lv.convertToMS)(Pv.get(Dv.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3;a(Mv,"replicationConfirmation");mc=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),kA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(kA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(P_&&!this.overloadChecked&&performance.now()-Iv>A7)throw new wv.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp||(0,GA.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let _=this.validated;this.validated=this.writes.length;for(let f=_;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let E;for(let f=_;f<this.validated;f++){let h=this.writes[f];h&&(h.before||h.beforeIntermediate)&&(E=!0)}if(E)return(async()=>{try{for(let f=0;f<2;f++){let h;for(let T=_;T<this.validated;T++){let m=this.writes[T];if(!m)continue;let g=m[f===0?"before":"beforeIntermediate"];if(g){let S=g();h?h.push?h.push(S):h=[h,S]:h=S}}h&&await(h.push?Promise.all(h):h)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(_){throw this.abort(),_}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(_=>_);let c=a(_=>{_.commit(r,_.entry,n)},"doWrite"),l=a(()=>{let _=this.writes[o++];if(_)if(_.key){n>0&&(_.entry=_.store.getEntry(_.key));let E=_.store.ifVersion(_.key,_.entry?.version??null,l);s=s||E}else l();else for(let E of this.writes)c(E)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<Nv>>n?l():s=this.writes[0].store.transaction(()=>{for(let _ of this.writes)_.entry=_.store.getEntry(_.key),c(_);return!0})),s)return P_||(P_=s,Iv=performance.now(),P_.then(()=>{P_=null})),s.then(_=>{if(_){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let E=this.writes[0].store.rootStore.databaseName,f=this.writes[this.writes.length-1];FA&&f&&i.push(FA(E,f.store.getEntry(f.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+Nv/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let d={txnTime:r};if(this.next){let _=this.next?.commit(t);if(_?.then)return _?.then(E=>({txnTime:r,next:E}));d.next=_}return d}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},_p=class extends mc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,GA.getNextMonotonicTime)())}getReadTxn(){}},y7=3e4;a(O7,"startMonitoringTxns");O7()});function Pt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new mc;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n[Fe]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({letItLinger:r?.letItLinger});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var Uv,Sc=Ie(()=>{Uv=M(Ei());Ks();fp();a(Pt,"transaction");(0,Uv._assignPackageExport)("transaction",Pt);Pt.commit=function(e){let t=(e[Fe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Pt.abort=function(e){let t=(e[Fe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var qv={};je(qv,{ResourceBridge:()=>VA});function KA({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function Bv(e,t){let r=Ni(e),n=KA(e,r);if(!r)throw new Ys.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},o;Pt(i,()=>new Promise(u=>o=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&hp(d)}catch(_){d={message:_.toString()}}return t?{value:{key:u,value:d}}:{value:d}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function Ni(e){let t=e.database||e.schema||I7,r=dt()[t];if(!r)throw(0,Ys.handleHDBError)(new Error,N7.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Hv(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*xv(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var kv,Ep,Ys,Fv,Ws,qA,$A,Gv,N7,I7,w7,C7,vv,VA,$v=Ie(()=>{"use strict";kv=M(Ov()),Ep=M(zl()),Ys=M(_e());Pe();Fv=M(__()),Ws=M(L()),qA=M(to()),$A=M($s()),Gv=M(te());Sc();pp();({HDB_ERROR_MSGS:N7}=Ys.hdb_errors),I7="data",w7=1e4,C7=10,VA=class extends kv.default{static{a(this,"ResourceBridge")}constructor(t){super(t),vv=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,Ep.default)(t,"conditions");if(r)throw(0,Ys.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Ni(t);if(!n)throw new Ys.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:KA(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Ys.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}pt({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Ni(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Ni(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(u=>{if(!u){let{value:d,version:_}=r.primaryStore.getEntry(o);return i(o,d,_)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Ni(t).dropTable()}createSchema(t){return eu({database:t.schema,table:null}),qA.signalSchemaChange(new $A.SchemaEventMsg(process.pid,Ws.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await YA(t.schema),qA.signalSchemaChange(new $A.SchemaEventMsg(process.pid,Ws.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,vv.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,Fv.default)(t),s,i=dt()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(o.replicateTo=t.replicateTo),t.replicatedConfirmation&&(o.replicatedConfirmation=t.replicatedConfirmation),Pt(o,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(E=>E.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let _=d[i.primaryKey],E=_!=null&&await i.get(_,o);if(t.requires_existing&&!E||t.requires_no_existing&&E){u.push(d[i.primaryKey]);continue}E&&(E=hp(E));for(let f in d)if(Object.prototype.hasOwnProperty.call(d,f)){let h=d[f];if(typeof h=="function")try{let T=h([[E]]);Array.isArray(T)&&(h=T[0].func_val,d[f]=h)}catch(T){throw T.message+="Trying to set key "+f+" on object"+JSON.stringify(d),T}}if(E)for(let f in E)Object.prototype.hasOwnProperty.call(d,f)||(d[f]=E[f]);await(_==null?i.create(d,o):i.put(d,o)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=dt()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),Pt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return Hv(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=dt()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ys.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:Ws.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),o.push(...d.skipped_hashes),await(0,Gv.async_set_timeout)(C7),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%w7===0&&await u();return l.length>0&&await u(),s?Hv(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Ep.default)(t,"hashes");if(r)throw r;return Bv(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Bv(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Ws.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,Ep.default)(t,"value");if(n)throw n;let s=Ni(t);if(!s)throw new Ys.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===Ws.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:KA(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Ni(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){Ni({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Ni(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Ni(t),n={};switch(t.search_type){case Ws.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.operation??o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case Ws.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of xv(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return xv(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(KA,"getSelect");a(Bv,"getRecords");a(Ni,"getTable");a(Hv,"createDeleteResponse");a(xv,"groupRecordsInHistory")});var Un=O((UNe,Vv)=>{"use strict";var{ResourceBridge:P7}=($v(),oe(qv)),D7=ne();D7.initSync();var mp;function L7(){return mp||(mp=new P7,mp)}a(L7,"getBridge");Vv.exports=L7()});var jv=O((BNe,Wv)=>{"use strict";var Kv=require("lodash"),D_=require("mathjs"),M7=require("jsonata"),Yv=te();Wv.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?Kv.uniqWith(e,Kv.isEqual):e,"distinct_array"),searchJSON:U7,mad:L_.bind(null,D_.mad),mean:L_.bind(null,D_.mean),mode:L_.bind(null,D_.mode),prod:L_.bind(null,D_.prod),median:L_.bind(null,D_.median)};function L_(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(L_,"aggregateFunction");function U7(e,t){if(typeof e!="string"||e.length===0)throw new Error("search json expression must be a non-empty string");let r="__"+e+"__";if(Yv.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Yv.isEmpty(this.__ala__.res[r])){let n=M7(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(U7,"searchJSON")});var Qv=O((xNe,zv)=>{"use strict";var sr=require("moment"),WA="YYYY-MM-DDTHH:mm:ss.SSSZZ";sr.suppressDeprecationWarnings=!0;zv.exports={current_date:a(()=>sr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>sr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return sr(e).utc().format("YYYY");case"month":return sr(e).utc().format("MM");case"day":return sr(e).utc().format("DD");case"hour":return sr(e).utc().format("HH");case"minute":return sr(e).utc().format("mm");case"second":return sr(e).utc().format("ss");case"millisecond":return sr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>sr(e).utc().format(WA),"date"),date_format:a((e,t)=>sr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>sr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>sr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=sr(e).utc(),s=sr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>sr().utc().valueOf(),"now"),get_server_time:a(()=>sr().format(WA),"get_server_time"),offset_utc:a((e,t)=>sr(e).utc().utcOffset(t).format(WA),"offset_utc")}});var e0=O((FNe,Zv)=>{"use strict";var v7=require("@turf/area"),B7=require("@turf/length"),H7=require("@turf/circle"),x7=require("@turf/difference"),k7=require("@turf/distance"),F7=require("@turf/boolean-contains"),G7=require("@turf/boolean-equal"),q7=require("@turf/boolean-disjoint"),$7=require("@turf/helpers"),Jv=L(),$e=te(),so=K();Zv.exports={geoArea:V7,geoLength:K7,geoCircle:Y7,geoDifference:W7,geoDistance:Xv,geoNear:j7,geoContains:z7,geoEqual:Q7,geoCrosses:J7,geoConvert:X7};function V7(e){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return v7.default(e)}catch(t){return so.trace(t,e),NaN}}a(V7,"geoArea");function K7(e,t){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return B7.default(e,{units:t||"kilometers"})}catch(r){return so.trace(r,e),NaN}}a(K7,"geoLength");function Y7(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return H7.default(e,t,{units:r||"kilometers"})}catch(n){return so.trace(n,e,t),NaN}}a(Y7,"geoCircle");function W7(e,t){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return x7(e,t)}catch(r){return so.trace(r,e,t),NaN}}a(W7,"geoDifference");function Xv(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return k7.default(e,t,{units:r||"kilometers"})}catch(n){return so.trace(n,e,t),NaN}}a(Xv,"geoDistance");function j7(e,t,r,n){if($e.isEmpty(e)||$e.isEmpty(t))return!1;if($e.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return Xv(e,t,n)<=r}catch(s){return so.trace(s,e,t),!1}}a(j7,"geoNear");function z7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return F7.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(z7,"geoContains");function Q7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return G7.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(Q7,"geoEqual");function J7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return!q7.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(J7,"geoCrosses");function X7(e,t,r){if($e.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if($e.isEmpty(t))throw new Error("geo_type is required");if($e.isEmpty(Jv.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Jv.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=$e.autoCastJSON(e)),$7[t](e,r)}a(X7,"geoConvert")});var Sp=O((qNe,t0)=>{var Tc=jv(),Gn=Qv(),Ii=e0();t0.exports=e=>{e.aggr.mad=e.aggr.MAD=Tc.mad,e.aggr.mean=e.aggr.MEAN=Tc.mean,e.aggr.mode=e.aggr.MODE=Tc.mode,e.aggr.prod=e.aggr.PROD=Tc.prod,e.aggr.median=e.aggr.MEDIAN=Tc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Tc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Tc.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Gn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Gn.current_time,e.fn.extract=e.fn.EXTRACT=Gn.extract,e.fn.date=e.fn.DATE=Gn.date,e.fn.date_format=e.fn.DATE_FORMAT=Gn.date_format,e.fn.date_add=e.fn.DATE_ADD=Gn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Gn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Gn.date_diff,e.fn.now=e.fn.NOW=Gn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Gn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Gn.get_server_time,e.fn.getdate=e.fn.GETDATE=Gn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Gn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Ii.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ii.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ii.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ii.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ii.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ii.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ii.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ii.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ii.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ii.geoNear}});var i0=O(($Ne,s0)=>{"use strict";var M_=require("lodash"),_n=require("alasql");_n.options.cache=!1;var Z7=Sp(),r0=require("clone"),Tp=require("recursive-iterator"),Ue=K(),et=te(),tu=Un(),eee=L(),{hdb_errors:tee}=_e(),{getDatabases:n0}=(Pe(),oe(ut)),ree="IS NULL",js="There was a problem performing this search. Please check the logs and try again.";Z7(_n);var jA=class{static{a(this,"SQLSearch")}constructor(t,r){if(et.isEmpty(t))throw Ue.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),et.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!et.isEmptyOrZeroLength(n))return Ue.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ue.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ue.error(n),new Error(js)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ue.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ue.error(n),new Error(js)}if(Object.keys(this.data).length===0)return Ue.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ue.error("Error thrown from processJoins in SQLSearch class method search."),Ue.error(n),new Error(js)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ue.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ue.error(n),new Error(js)}try{return t=await this._finalSQL(),t}catch(n){throw Ue.error("Error thrown from finalSQL in SQLSearch class method search."),Ue.error(n),new Error(js)}}_getColumns(){let t=new Tp(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(r0(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=M_.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=n0()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(et.isEmpty(this.statement.where)){Ue.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Tp(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!et.isEmpty(r)&&r.right)if(et.isNotEmptyAndHasValue(r.right.value)){let n=et.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new _n.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=et.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new _n.yy.LogicValue({value:i}):n instanceof _n.yy.StringValue&&et.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new _n.yy.NumValue({value:i}))});if(t){Ue.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Tp(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!et.isEmpty(eee.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(et.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(et.isEmptyOrZeroLength(r.left.columnid)||et.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(et.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!et.isEmpty(r.right.value)||!et.isEmpty(r.left.value)?n.add(et.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(et.isEmptyOrZeroLength(this.all_table_attributes)&&et.isEmptyOrZeroLength(this.statement.from)&&et.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&M_.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(et.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);et.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(et.isEmptyOrZeroLength(this.all_table_attributes)&&!et.isEmptyOrZeroLength(this.columns.columns))return t;if(et.isEmptyOrZeroLength(this.all_table_attributes)&&et.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await _n.promise(r)}catch(r){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ue.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(r0(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(et.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(ree)>-1&&this.tables.forEach(s=>{let i={columnid:n0()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=M_.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!et.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!et.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await tu.getDataByHash(c);for(let _ of c.hash_values)d.get(_)&&!this.data[i].__merged_data[_]&&(this.data[i].__merged_data[_]=[...n[i]],this._setMergedHashAttribute(i,_))}catch(d){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(d),new Error(js)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let _={...c};_.search_value=d;let E=await tu.getDataByValue(_);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]):(this.data[i].__merged_data[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,f))}))}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(d),new Error(js)}else if(!et.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!et.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let _=0,E=d.length;_<E;_++){let f=d[_];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await tu.getDataByValue(c,f.operation);if(l)for(let[T]of h)this.data[i].__merged_data[T]||(this.data[i].__merged_data[T]=[...n[i]],this._setMergedHashAttribute(i,T));else for(let[T,m]of h)this.data[i].__merged_data[T]?this._updateMergedAttribute(i,T,s.attribute,m[s.attribute]):(this.data[i].__merged_data[T]=[...n[i]],this._updateMergedAttribute(i,T,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,T))}}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ue.error(d),new Error(js)}else try{c.search_attribute=s.attribute,c.search_value="*";let d=await tu.getDataByValue(c);if(l)for(let[_]of d)this.data[i].__merged_data[_]||(this.data[i].__merged_data[_]=[...n[i]],this._setMergedHashAttribute(i,_));else for(let[_,E]of d)this.data[i].__merged_data[_]?this._updateMergedAttribute(i,_,s.attribute,E[s.attribute]):(this.data[i].__merged_data[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,E[s.attribute]),this._setMergedHashAttribute(i,_))}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ue.error(d),new Error(js)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof _n.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new _n.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new _n.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new _n.yy.FuncValue:new _n.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,T=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${T}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${T}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let d="",_="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",_=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${_}`,h=this._convertColumnsToIndexes(f,s);E=await _n.promise(h,t),t=null}catch(f){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ue.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let T=E[f];o.forEach(m=>{T[m.key]!==null&&T[m.key]!==void 0&&m.keys.add(T[m.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),T=M_.difference(h,[...f.keys].map(m=>m.toString()));for(let m=0,g=T.length;m<g;m++){let S=T[m];delete this.data[`${f.schema}_${f.table}`].__merged_data[S]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Tp(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=M_.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw Ue.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ue.error(i),new Error(js)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let d in i)o.push(i[d][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await tu.getDataByHash(c),u=s.columns.length;for(let d=0,_=o.length;d<_;d++){let E=o[d],f=l.get(E);for(let h=0;h<u;h++){let T=s.columns[h],m=f[T]===void 0?null:f[T];this.data[n].__merged_data[E].push(m)}}}}catch(r){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ue.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();Ue.trace(`Final SQL: ${s}`),n=await _n.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ue.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ue.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return Ue.error(tee.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ue.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await tu.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]={...r[s]}),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw Ue.error("There was an error when processing this SQL operation. Check your logs"),Ue.error(o),new Error(js)}}return Object.values(Object.values(this.data)[0].__merged_data)}};s0.exports=jA});var $r=O((KNe,o0)=>{"use strict";var nee=FP();o0.exports={searchByConditions:iee,searchByHash:oee,searchByValue:aee,search:cee};var zA=Un(),{transformReq:QA}=te(),see=i0();async function iee(e){return QA(e),zA.searchByConditions(e)}a(iee,"searchByConditions");async function oee(e){QA(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of zA.searchByHash(e))r&&t.push(r);return t}a(oee,"searchByHash");async function aee(e){QA(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of zA.searchByValue(e))t.push(r);return t}a(aee,"searchByValue");function cee(e,t){try{let r=new nee(e);r.validate(),new see(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(cee,"search")});var gp=O((WNe,a0)=>{"use strict";var lee=Un();a0.exports={writeTransaction:uee};function uee(e,t,r){return lee.writeTransaction(e,t,r)}a(uee,"writeTransaction")});var d0=O((QNe,u0)=>{"use strict";var dee=$r(),_ee=us(),c0=K(),fee=Vr(),zNe=gp(),Eee=require("clone"),XA=require("alasql"),hee=Sp(),l0=require("util"),pee=l0.promisify(_ee.getTableSchema),mee=l0.promisify(dee.search),See=L(),JA=te();hee(XA);u0.exports={update:gee};var Tee="There was a problem performing this update. Please check the logs and try again.";async function gee({statement:e,hdb_user:t}){let r=await pee(e.table.databaseid,e.table.tableid),n=Ree(e.columns);JA.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=Eee(s),c=JA.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=XA.parse(l).statements[0],d=await mee(u),_=Aee(n,d);return yee(o,_,t)}a(gee,"update");function Ree(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=XA.compile(`SELECT ${r.expression.toString()} AS [${See.FUNC_VAL}] FROM ?`)}),t}catch(t){throw c0.error(t),new Error(Tee)}}a(Ree,"createUpdateRecord");function Aee(e,t){return JA.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Aee,"buildUpdateRecords");async function yee(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await fee.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){c0.error(`Error delete new_attributes from update response: ${i}`)}return s}a(yee,"updateRecords")});var f0=O((eIe,_0)=>{var bee=require("alasql"),Oee=$r(),Nee=K(),Iee=Un(),ey=require("util"),ZA=te(),wee=L(),Cee=us(),XNe=gp(),ZNe=Vr(),Pee="record",Dee="successfully deleted",Lee=ey.callbackify(Bee),Mee=ey.promisify(Oee.search),Uee=ey.promisify(Cee.getTableSchema);_0.exports={convertDelete:Lee};function vee(e){return`${e.deleted_hashes.length} ${Pee}${e.deleted_hashes.length===1?"":"s"} ${Dee}`}a(vee,"generateReturnMessage");async function Bee({statement:e,hdb_user:t}){let r=await Uee(e.table.databaseid,e.table.tableid);ZA.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=ZA.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=bee.parse(o).statements[0],l={operation:wee.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Mee(c);let u=await Iee.deleteRecords(l);return ZA.isEmptyOrZeroLength(u.message)&&(u.message=vee(u)),delete u.txn_time,u}catch(u){throw Nee.error(u),u.hdb_code?u.message:u}}a(Bee,"convertDelete")});var S0=O((rIe,m0)=>{"use strict";var Hee=Ri(),{hdb_errors:E0}=_e(),{getDatabases:h0}=(Pe(),oe(ut));m0.exports={checkSchemaExists:p0,checkSchemaTableExists:xee,schema_describe:Hee};async function p0(e){if(!h0()[e])return E0.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(p0,"checkSchemaExists");async function xee(e,t){let r=await p0(e);if(r)return r;if(!h0()[e][t])return E0.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(xee,"checkSchemaTableExists")});var ru=O((sIe,kee)=>{kee.exports={name:"harperdb",version:"4.4.25",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","enterprise","Fastify","NATS","HarperDB","Harper","clustering","replication","REST","WebSockets","decentralized","server-sent events","document store"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:replication && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc --no-clean --reporter=lcovonly npm run test:security && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:replication && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && npm run test:security && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","test:security":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/security/**/*.js' --config '../unitTests/.mocharc.json'","test:replication":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/replication/**/*.js' --config '../unitTests/.mocharc.json'","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test",format:"prettier .","format:fix":"npm run format -- --write",lint:"eslint .","lint:fix":"npm run lint -- --fix"},dependencies:{"@aws-sdk/client-s3":"3.717.0","@aws-sdk/lib-storage":"3.717.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.10.0","@fastify/compress":"~6.5.0","@fastify/cors":"~9.0.1","@fastify/static":"~7.0.4","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.6.0",chalk:"4.1.2",chokidar:"^4.0.3","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.29.0","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.10.0","gunzip-maybe":"1.4.2","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.2.6",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",moment:"2.30.1","mqtt-packet":"~9.0.0",msgpackr:"1.11.2",nats:"2.19.0",needle:"3.3.1","node-forge":"^1.3.1","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.3",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^1.1.0","serve-static":"2.1.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.24.5","tar-fs":"3.0.6",ulidx:"0.5.0",uuid:"10.0.0","validate.js":"0.13.1",ws:"8.18.0",yaml:"2.7.0"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"20.14.8","@typescript-eslint/eslint-plugin":"^7.18.0","@typescript-eslint/parser":"^7.18.0",axios:"1.7.5",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.24.2",eslint:"^8.57.1","eslint-config-prettier":"^9.1.0","eslint-plugin-sonarjs":"^3.0.1",eventsource:"^2.0.2","graphql-http":"^1.22.3","hook-std":"3.0.0","intercept-stdout":"0.1.2",mkcert:"1.5.1",mocha:"^11.0.1","mocha-teamcity-reporter":"^4.2.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"6.1.3","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"3.3.3",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.7.2",undici:"^6.19.8","why-is-node-still-running":"^1.0.0"},overrides:{alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","segfault-handler":"^1.3.0","utf-8-validate":"^5.0.10"}}});var x_={};je(x_,{addAnalyticsListener:()=>H_,recordAction:()=>mr,recordActionBinary:()=>qn,setAnalyticsEnabled:()=>Fee});function Fee(e){I0=e}function mr(e,t,r,n,s){if(!I0)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=yp.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let u=c;o.values=c=new Float32Array(l*2),c.set(u),c.index=l+1}c[l]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},yp.set(i,o)}Rp||Gee()}function qn(e,t,r,n,s){mr(!!e,t,r,n,s)}function H_(e){P0.push(e)}function Gee(){Rp=performance.now(),setTimeout(async()=>{let e=performance.now()-Rp;Rp=0;let t=[],r={time:Date.now(),period:e,threadId:gc.threadId,metrics:t};for(let[s,i]of yp){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],d;for(let _ of D0){let E=Math.floor(c*_),f=o[E-1];if(E>l){let h=E-l;if(f===d){let T=u[u.length-1];typeof T=="number"?u[u.length-1]={value:T,count:1+h}:T.count+=h}else u.push(h>1?{value:f,count:h}:f),d=f;l=E}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await L0()}let n=process.memoryUsage();t.push({metric:"memory",threadId:gc.threadId,byThread:!0,...n});for(let s of P0)s(t);yp=new Map,gc.parentPort?gc.parentPort.postMessage({type:C0,report:r}):v0({report:r})},w0).unref()}async function qee(e,t=6e4){let r=ny(),n=M0(),s=new Promise(T=>{let m=performance.now();setImmediate(()=>{let g=performance.now();g-m>5e3&&(0,U_.warn)("Unusually high event queue latency on the main thread of "+Math.round(g-m)+"ms"),m=performance.now()}),n.primaryStore.prefetch([1],()=>{let g=performance.now();g-m>5e3&&(0,U_.warn)("Unusually high task queue latency on the main thread of "+Math.round(g-m)+"ms"),T(g-m)})}),i;for(let T of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(T.value?.time){i=T.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],d;for(let{key:T,value:m}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!m)continue;if(o){if(T>o+t)break}else o=T;d=T;let{metrics:g,threadId:S}=m;for(let y of g||[]){let{path:I,method:U,type:H,metric:X,count:W,total:V,distribution:se,threads:Q,...de}=y;W||(W=1);let j=X+(I?"-"+I:"");U!==void 0&&(j+="-"+U),H!==void 0&&(j+="-"+H);let ae=c.get(j);if(ae){if(ae.threads){let Ne=ae.threads[S];if(Ne)ae=Ne;else{ae.threads[S]={...de};continue}}ae.count||(ae.count=1);let Oe=ae.count;for(let Ne in de){let Me=de[Ne];typeof Me=="number"&&(ae[Ne]=(ae[Ne]*Oe+Me*W)/(Oe+W))}ae.count+=W,V>=0&&(ae.total+=V,ae.ratio=ae.total/ae.count)}else ae={period:t,...y},delete ae.distribution,c.set(j,ae),ae.byThread&&(ae.threads=[],ae.threads[S]={...de},u.push(ae));if(se){se=se.map(Ne=>typeof Ne=="number"?{value:Ne,count:1}:Ne);let Oe=l.get(j);Oe?Oe.push(...se):l.set(j,se)}}await L0()}for(let T of u){let{path:m,method:g,type:S,metric:y,count:I,total:U,distribution:H,threads:X,...W}=T;X=X.filter(V=>V);for(let V in W){if(typeof T[V]!="number")continue;let se=0;for(let Q of X){let de=Q[V];typeof de=="number"&&(se+=de)}T[V]=se}T.count=X.length,delete T.threads,delete T.byThread}for(let[T,m]of l){let g=c.get(T);m.sort((Ne,Me)=>Ne.value>Me.value?1:-1);let S=g.count-1,y=[],I=0,U=0,H;for(let Ne of D0){let Me=S*Ne;for(;I<Me;)H=m[U++],I+=H.count,U===1&&I--;let Gr=m[U>1?U-2:0];H||(H=m[0]),y.push(H.value-(H.value-Gr.value)*(I-Me)/H.count)}let[X,W,V,se,Q,de,j,ae,Oe]=y;Object.assign(g,{p1:X,p10:W,p25:V,median:se,p75:Q,p90:de,p95:j,p99:ae,p999:Oe})}let _;for(let[T,m]of c)m.id=(0,Ap.getNextMonotonicTime)(),m.time=d,n.primaryStore.put(m.id,m,{append:!0}).then(g=>{g||n.primaryStore.put(m.id,m)}),_=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(_||h*10>f){let T=(0,Ap.getNextMonotonicTime)(),m={id:T,metric:"main-thread-utilization",idle:f-T0,active:h-g0,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(T,m,{append:!0}).then(g=>{g||n.primaryStore.put(T,m)})}T0=f,g0=h}async function R0(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function ny(){return A0||(A0=pt({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function M0(){return y0||(y0=pt({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Kee(){U0=!0;let e=(0,B_.get)(ry.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await qee(w0,e),await R0(ny(),$ee),await R0(M0(),Vee)},Math.min(e/2,2147483647)).unref()}function v0(e,t){let r=e.report;r.threadId=t?.threadId||gc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(b0+=n.mean*n.count);r.totalBytesProcessed=b0,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(O0.get(t))}),O0.set(t,t.performance.eventLoopUtilization())),r.id=(0,Ap.getNextMonotonicTime)(),ny().primaryStore.put(r.id,r),U0||Kee(),Yee&&(B0=jee(r))}async function jee(e){if(await B0,!ea){let r=(0,v_.dirname)((0,U_.getLogFilePath)());try{ea=await(0,ty.open)((0,v_.join)(r,"analytics.log"),"r+")}catch{ea=await(0,ty.open)((0,v_.join)(r,"analytics.log"),"w+")}}let t=(await ea.stat()).size;if(t>Wee){let r=Buffer.alloc(t);await ea.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ea.write(r,{position:0}),await ea.truncate(r.length),t=r.length}await ea.write(JSON.stringify(e)+`
|
|
12
12
|
`,t)}var gc,N0,U_,v_,ty,Ap,B_,ry,yp,I0,Rp,w0,C0,P0,D0,T0,g0,L0,$ee,Vee,A0,y0,U0,b0,O0,Yee,B0,ea,Wee,wi=Ie(()=>{gc=require("worker_threads"),N0=M(ot());Pe();U_=M(K()),v_=require("path"),ty=require("fs/promises"),Ap=M(on()),B_=M(ne()),ry=M(L());qr();(0,B_.initSync)();yp=new Map,I0=(0,B_.get)(ry.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(Fee,"setAnalyticsEnabled");a(mr,"recordAction");it.recordAnalytics=mr;a(qn,"recordActionBinary");Rp=0,w0=1e3,C0="analytics-report",P0=[];a(H_,"addAnalyticsListener");D0=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(Gee,"sendAnalytics");a(qee,"aggregation");T0=0,g0=0,L0=a(()=>new Promise(setImmediate),"rest");a(R0,"cleanup");$ee=36e5,Vee=31536e6;a(ny,"getRawAnalyticsTable");a(M0,"getAnalyticsTable");(0,N0.setChildListenerByType)(C0,v0);a(Kee,"startScheduledTasks");b0=0,O0=new Map,Yee=!1;a(v0,"recordAnalytics");Wee=1e6;a(jee,"logAnalytics")});var cy=O((mIe,j0)=>{"use strict";var{decode:zee}=require("msgpackr"),{isMainThread:EIe,parentPort:hIe,threadId:pIe}=require("worker_threads"),Np=kt(),nu=ft(),oy=L(),zr=K(),iy=ne(),Qee=L(),{onMessageByType:Jee}=ot(),F0=eo(),{recordAction:H0,recordActionBinary:Xee}=(wi(),oe(x_)),{publishToStream:Zee}=Np,{ConsumerEvents:x0}=require("nats"),ete=$r(),{promisify:tte}=require("util"),G0=tte(setTimeout),Ip=1e4,wp,Op,rte,nte,q0,k_=new Map,su=new Map;j0.exports={initialize:$0,ingestConsumer:ay,setSubscription:ste,setIgnoreOrigin:ate,getDatabaseSubscriptions:ote,updateConsumer:V0};async function $0(){Jee(oy.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await V0(n)}),q0=!0,zr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await Np.getNATSReferences();wp=e,Op=e.info.server_name,rte=t,nte=r}a($0,"initialize");async function V0(e){if(e.status==="start"){let{js:t,jsm:r}=await K0(e.node_domain_name);ay(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=k_.get(e.stream_name+e.node_domain_name);t&&(zr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),k_.set(e.stream_name+e.node_domain_name,"close")),su.get(e.node_domain_name)==="failed"&&su.set(e.node_domain_name,"close")}}a(V0,"updateConsumer");var Cp=new Map;function ste(e,t,r){let n=Cp.get(e);n||Cp.set(e,n=new Map),n.set(t,r),q0||$0().then(ite)}a(ste,"setSubscription");async function ite(){let e=await ete.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+nu.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await K0(r),!n))break;let{schema:o,table:c}=i,l=F0.createNatsTableStreamName(o,c);ay(l,n,s,r)}}}a(ite,"accessConsumers");async function K0(e){let t,r,n=1;for(;!r;)try{t=await wp.jetstream({domain:e}),r=await wp.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(su.get(e)==="close")break;su.set(e,"failed"),n%10===1&&zr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<Ip?n++*100:Ip;await G0(i)}return{js:t,jsm:r}}a(K0,"connectToRemoteJS");function ote(){return Cp}a(ote,"getDatabaseSubscriptions");var Y0;function ate(e){Y0=e}a(ate,"setIgnoreOrigin");var W0=100,k0=new Array(W0),bp=0;async function ay(e,t,r,n){let{connection:s}=await Np.getNATSReferences();wp=s,Op=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,Op),zr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(su.get(n)==="close")break;o%10===1&&zr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(zr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await Np.createConsumer(r,e,Op,new Date(Date.now()).toISOString()));let d=o++*100<Ip?o++*100:Ip;await G0(d)}let c=!1,l;for(;!c;){if(k_.get(e+n)==="close"||su.get(n)==="close"){k_.delete(e+n),c=!0;continue}l=await i.consume({max_messages:iy.get(oy.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),k_.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===x0.ConsumerDeleted&&(await l.close(),c=!0),d.type===x0.HeartbeatsMissed){let _=d.data;zr.trace(`${_} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),_===100&&(zr.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let d of l)await k0[bp],k0[bp]=cte(d).catch(_=>{zr.error(_)}),++bp>=W0&&(bp=0)}catch(d){d.message==="consumer deleted"?(zr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):zr.error("Error consuming clustering ingest, restarting consumer",d)}}}a(ay,"ingestConsumer");async function cte(e){let t=zee(e.data);H0(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),zr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=iy.get(oy.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(nu.MSG_HEADERS.TRANSACTED_NODES)&&r.values(nu.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(nu.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!Y0),Xee(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(nu.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:d,hash_values:_,__origin:E,expiresAt:f}=t;zr.trace("processing message:",o,c,u,(d?"records: "+d.map(U=>U?.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),zr.trace(`messageProcessor nats msg id: ${e.headers.get(nu.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=_);let T=new Promise(U=>h=U),{timestamp:m,user:g,node_name:S}=E||{},y=Cp.get(c)?.get(u);if(!y)throw new Error(`Missing table for replication message: ${u}`);if(o==="define_schema")t.type=o,t.onCommit=h,y.send(t);else if(d.length===1&&!l)y.send({type:sy(o),value:d[0],id:_?.[0],expiresAt:f,timestamp:m,table:u,onCommit:h,user:g,nodeName:S});else{let U=d.map((H,X)=>({type:sy(o),value:H,expiresAt:f,id:_?.[X],table:u}));for(;l;)U.push({type:sy(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;y.send({type:"transaction",writes:U,table:u,timestamp:m,onCommit:h,user:g,nodeName:S})}iy.get(Qee.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Zee(e.subject.split(".").slice(0,-1).join("."),F0.createNatsTableStreamName(c,u),e.headers,e.data),await T;let I=Date.now()-m;m&&H0(I,"replication-latency",e.subject,o,"ingest")}catch(o){zr.error(o)}e.ack()}a(cte,"messageProcessor");function sy(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(sy,"convertOperation")});var kt=O((bIe,dB)=>{"use strict";var Or=ne();Or.initSync();var lte=require("fs-extra"),ute=require("semver"),q_=require("path"),{monotonicFactory:dte}=require("ulidx"),Q0=dte(),_te=require("util"),J0=require("child_process"),fte=_te.promisify(J0.exec),Ete=J0.spawn,Pr=ft(),Qe=L(),Pp=te(),zs=K(),Dp=eo(),hte=gp(),F_=Ct(),{broadcast:pte,onMessageByType:mte,getWorkerIndex:Ste}=ot(),{isMainThread:X0}=require("worker_threads"),{Encoder:Tte,decode:_y}=require("msgpackr"),Z0=new Tte,{isEmpty:bc}=Pp,eB=xn(),TIe=48*36e11;X0&&mte(Qe.ITC_EVENT_TYPES.RESTART,()=>{Qr=void 0,yc=void 0});var{connect:gte,StorageType:Rte,RetentionPolicy:Ate,AckPolicy:fy,DeliverPolicy:Ey,DiscardPolicy:yte,NatsConnection:gIe,JetStreamManager:RIe,JetStreamClient:AIe,StringCodec:yIe,JSONCodec:bte,createInbox:hy,headers:Ote,ErrorCode:z0}=require("nats"),{PACKAGE_ROOT:Nte}=L(),Ite=ru(),{recordAction:wte}=(wi(),oe(x_)),tB=bte(),Cte="clustering",Pte=Ite.engines[Pr.NATS_SERVER_NAME],Dte=q_.join(Nte,"dependencies"),dy=q_.join(Dte,`${process.platform}-${process.arch}`,Pr.NATS_BINARY_NAME),ly,uy,G_,Rc,Ac;dB.exports={runCommand:rB,checkNATSServerInstalled:Lte,createConnection:py,getConnection:$_,getJetStreamManager:V_,getJetStream:sB,getNATSReferences:Ci,getServerList:Ute,createLocalStream:my,listStreams:iB,deleteLocalStream:vte,getServerConfig:iu,listRemoteStreams:Bte,viewStream:Hte,viewStreamIterator:xte,publishToStream:kte,request:qte,reloadNATS:Sy,reloadNATSHub:$te,reloadNATSLeaf:Vte,extractServerName:Gte,requestErrorHandler:Kte,createLocalTableStream:lB,createTableStreams:jte,purgeTableStream:uB,purgeSchemaTableStreams:zte,getStreamInfo:Qte,updateLocalStreams:Xte,closeConnection:Mte,getJsmServerName:Lp,addNatsMsgHeader:oB,clearClientCache:nB,updateRemoteConsumer:Yte,createConsumer:aB,updateConsumerIterator:Wte};async function rB(e,t=void 0){let{stdout:r,stderr:n}=await fte(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
13
13
|
`,""));return r.replace(`
|
|
14
|
-
`,"")}a(rB,"runCommand");async function Lte(){try{await lte.access(dy)}catch{return!1}let e=await rB(`${dy} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return ute.eq(t,Pte)}a(Lte,"checkNATSServerInstalled");async function py(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await eB.getClusterUser();if(bc(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}zs.trace("create nats connection called");let i=await gte({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Or.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Or.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Or.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),zs.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&zs.error("Error with Nats client connection, connection closed",o),i===Qr&&nB()}),i}a(py,"createConnection");function nB(){Qr=void 0,Rc=void 0,Ac=void 0,yc=void 0}a(nB,"clearClientCache");async function Mte(){Qr&&(await Qr.drain(),Qr=void 0,Rc=void 0,Ac=void 0,yc=void 0)}a(Mte,"closeConnection");var Qr,yc;async function $_(){return yc||(yc=py(Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Qr=await yc),Qr||yc}a($_,"getConnection");async function V_(){if(Rc)return Rc;bc(Qr)&&await $_();let{domain:e}=iu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(bc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Rc=await Qr.jetstreamManager({domain:e,timeout:6e4}),Rc}a(V_,"getJetStreamManager");async function sB(){if(Ac)return Ac;bc(Qr)&&await $_();let{domain:e}=iu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(bc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ac=Qr.jetstream({domain:e,timeout:6e4}),Ac}a(sB,"getJetStream");async function Ci(){let e=Qr||await $_(),t=Rc||await V_(),r=Ac||await sB();return{connection:e,jsm:t,js:r}}a(Ci,"getNATSReferences");async function Ute(e){let t=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await eB.getClusterUser(),s=await py(t,r,n),i=hy(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of o){let _=tB.decode(d.data);_.response_time=Date.now()-l,c.push(_)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await Pp.async_set_timeout(e),await o.drain(),await s.close(),await u,c}a(Ute,"getServerList");async function my(e,t){let{jsm:r}=await Ci(),n=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Rte.File,retention:Ate.Limits,subjects:t,discard:yte.Old,max_msgs:s,max_bytes:i,max_age:n})}a(my,"createLocalStream");async function iB(){let{jsm:e}=await Ci(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(iB,"listStreams");async function vte(e){let{jsm:t}=await Ci();await t.streams.delete(e)}a(vte,"deleteLocalStream");async function Bte(e){let{connection:t}=await Ci(),r=[],n=hy(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(tB.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(Bte,"listRemoteStreams");async function Hte(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Ci(),i=Q0(),o={durable_name:i,ack_policy:fy.Explicit};t&&(o.deliver_policy=Ey.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let _=_y(d.data),E={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:_};if(d.headers&&(E.origin=d.headers.get(Pr.MSG_HEADERS.ORIGIN)),u.push(E),d.ack(),d.info.pending===0)break}return await c.delete(),u}a(Hte,"viewStream");async function*xte(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Ci(),i=Q0(),o={durable_name:i,ack_policy:fy.Explicit};t&&(o.deliver_policy=Ey.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let d=_y(u.data);d[0]||(d=[d]);for(let _ of d){let E={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:_};u.headers&&(E.origin=u.headers.get(Pr.MSG_HEADERS.ORIGIN)),yield E}if(u.ack(),u.info.pending===0)break}await c.delete()}a(xte,"viewStreamIterator");async function kte(e,t,r,n){zs.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=oB(n,r);let{js:s}=await Ci(),i=await Lp(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:Z0.encode(n);try{zs.trace(`publishToStream publishing to subject: ${o}`),wte(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return cB(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){zs.trace(`publishToStream creating stream: ${t}`);let d=o.split(".");d[2]="*",await my(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(kte,"publishToStream");function oB(e,t){t===void 0&&(t=Ote());let r=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Pr.MSG_HEADERS.ORIGIN)&&r&&t.append(Pr.MSG_HEADERS.ORIGIN,r),t}a(oB,"addNatsMsgHeader");function iu(e){e=e.toLowerCase();let t=q_.join(Or.get(Qe.CONFIG_PARAMS.ROOTPATH),Cte);if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return bc(uy)&&(uy={port:F_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:F_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Pr.SERVER_SUFFIX.HUB,config_file:Pr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:q_.join(t,Pr.PID_FILES.HUB),hdb_nats_path:t}),uy;if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return bc(ly)&&(ly={port:F_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:F_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Pr.SERVER_SUFFIX.LEAF,config_file:Pr.NATS_CONFIG_FILES.LEAF_SERVER,domain:F_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Pr.SERVER_SUFFIX.LEAF,pid_file_path:q_.join(t,Pr.PID_FILES.LEAF),hdb_nats_path:t}),ly;zs.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(iu,"getServerConfig");async function aB(e,t,r,n){try{await e.consumers.add(t,{ack_policy:fy.Explicit,durable_name:r,deliver_policy:Ey.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(aB,"createConsumer");async function Fte(e,t,r){await e.consumers.delete(t,r)}a(Fte,"removeConsumer");function Gte(e){return e.split(".")[1]}a(Gte,"extractServerName");async function qte(e,t,r=6e4,n=hy()){if(!Pp.isObject(t))throw new Error("data param must be an object");let s=Z0.encode(t),{connection:i}=await Ci(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return _y(c.data)}a(qte,"request");function Sy(e){return new Promise(async(t,r)=>{let n=Ete(dy,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(Sy,"reloadNATS");async function $te(){let{pid_file_path:e}=iu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Sy(e)}a($te,"reloadNATSHub");async function Vte(){let{pid_file_path:e}=iu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Sy(e)}a(Vte,"reloadNATSLeaf");function Kte(e,t,r){let n;switch(e.code){case z0.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case z0.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(Kte,"requestErrorHandler");async function Yte(e,t){let r=t+Pr.SERVER_SUFFIX.LEAF,{connection:n}=await Ci(),{jsm:s}=await ere(r),{schema:i,table:o}=e,c=Dp.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await cB(async()=>{if(e.subscribe===!0)await aB(s,c,n.info.server_name,l);else try{await Fte(s,c,n.info.server_name)}catch(u){zs.trace(u)}})}a(Yte,"updateRemoteConsumer");async function Wte(e,t,r,n){let s=Dp.createNatsTableStreamName(e,t),i=r+Pr.SERVER_SUFFIX.LEAF,o={type:Qe.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!X0&&Ste()<Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=cy();await c(o)}await pte(o),n==="stop"&&await Pp.async_set_timeout(1e3)}a(Wte,"updateConsumerIterator");function cB(e){return hte.writeTransaction(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(cB,"exclusiveLock");async function lB(e,t){let r=Dp.createNatsTableStreamName(e,t),n=await Lp(),s=Jte(e,t,n);await my(r,[s])}a(lB,"createLocalTableStream");async function jte(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await lB(n,s)}}a(jte,"createTableStreams");async function uB(e,t,r=void 0){if(Or.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=Dp.createNatsTableStreamName(e,t),{domain:s}=iu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await $_()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")zs.warn(n);else throw n}}a(uB,"purgeTableStream");async function zte(e,t){if(Or.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await uB(e,t[r])}a(zte,"purgeSchemaTableStreams");async function Qte(e){return(await V_()).streams.info(e)}a(Qte,"getStreamInfo");function Jte(e,t,r){return`${Pr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Jte,"createSubjectName");async function Lp(){if(G_)return G_;if(G_=(await V_())?.nc?.info?.server_name,G_===void 0)throw new Error("Unable to get jetstream manager server name");return G_}a(Lp,"getJsmServerName");async function Xte(){let e=await V_(),t=await Lp(),r=await iB();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=Zte(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");zs.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}a(Xte,"updateLocalStreams");function Zte(e){let{config:t}=e,r=!1,n=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(Zte,"updateStreamLimits");async function ere(e){let t,r;try{t=await Qr.jetstream({domain:e}),r=await Qr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw zs.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(ere,"connectToRemoteJS")});var Oc=O(Up=>{var Mp=K();for(let e of["trace","debug","info","warn","error","fatal","notify"])Mp.logsAtLevel(e)&&(Up[e]=Mp[e]);Up.loggerWithTag=e=>Mp.loggerWithTag(e,!0);Up.setLogLevel=Mp.setLogLevel});function Ty(e){let t=e.get(vp),r=t?(0,ou.unpack)(t):null;r||(r={remoteNameToId:{}});let n=at(),s=!1;r.nodeName=at();let i=r.remoteNameToId;if(i[n]!==0){let o=0,c;for(let l in i){let u=i[l];u===0?c=l:u>o&&(o=u)}if(c){o++,i[c]=o;let l=[Symbol.for("seq"),o];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:Y_(e)??1,nodes:[]})})}i[n]=0,e.putSync(vp,(0,ou.pack)(r))}return r}function K_(e){return Ty(e).remoteNameToId}function fB(e,t,r){let n=Ty(r),s=n.remoteNameToId,i=new Map,o=!1;for(let c in t){let l=t[c],u=s[c];if(u==null){let d=0;for(let _ in s){let E=s[_];E>d&&(d=E)}u=d+1,s[c]=u,o=!0}i.set(l,u)}return o&&r.putSync(vp,(0,ou.pack)(n)),i}function Bp(e,t){let r=Ty(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let o in n){let c=n[o];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(vp,(0,ou.pack)(r))}return _B.info?.("The remote node name map",e,n,s),s}var _B,ou,vp,gy=Ie(()=>{_B=M(Oc());ds();ou=require("msgpackr"),vp=Symbol.for("remote-ids");a(Ty,"getIdMappingRecord");a(K_,"exportIdMapping");a(fB,"remoteToLocalNodeId");a(Bp,"getIdOfRemoteNode")});var ta,Ry=Ie(()=>{ta=class{constructor(t){this.error=t}static{a(this,"ErrorResource")}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var pB={};je(pB,{Resources:()=>Hp,keyArrayToString:()=>au,resetResources:()=>tre,resources:()=>Pi});function tre(){return Pi=new Hp}function au(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var EB,hB,Hp,Pi,cu=Ie(()=>{Sc();Ry();EB=M(K()),hB=M(_e()),Hp=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s){let c=new hB.ServerError(`Conflicting paths for ${t}`);EB.default.error(c),i.Resource=new ta(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),l=this.get(c);if(!l&&c.indexOf(".")>-1){let u=c.split(".");l=this.get(u[0])}if(l&&(!r||l.exportTypes?.[r]!==!1)){if(l.relativeURL=t.slice(n),!l.hasSubPaths)return l;s=l}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),!s&&o.indexOf(".")>-1&&(s=this.get(o.split(".")[0])),s&&(!r||s.exportTypes?.[r]!==!1)?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(!r||s.exportTypes?.[r]!==!1)&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return Pt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(tre,"resetResources");a(au,"keyArrayToString")});function by(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=SB,rre(e.primaryStore,e.auditStore)):(c=mB,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{TB(mB[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[o];u||(u=l[o]=new Map,u.envs=l,u.tableId=o,u.store=e.primaryStore),t=au(t);let d=new yy(r);d.startTime=n;let _=u.get(t);return _?_.push(d):(u.set(t,_=[d]),_.tables=u,_.key=t),d.subscriptions=_,d}function TB(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),gB(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=xt(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=au(c),u=0;do{let d=o.get(l);if(d){for(let E of d)if(!(u>0&&!(E.includeDescendants&&!(E.onlyChildren&&u>1)))){if(E.startTime>=n){(0,Ay.info)("omitting",c,E.startTime,n);continue}try{let f;E.supportsTransactions&&E.txnInProgress!==i.version&&(f=!0,E.txnInProgress||(r?r.push(E):r=[E]),E.txnInProgress=i.version),E.listener(c,i,n,f)}catch(f){console.error(f),(0,Ay.info)(f)}}}if(l==null)break;let _=l.lastIndexOf?.("/",l.length-2);_!==l.length-1&&u++,_>-1?l=l.slice(0,_+1):l=null}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function rre(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let l=SB[s];if(!l)return;let u=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{TB(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function gB(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function RB(e){return e.nextTransaction||(by({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),gB(e)),e.nextTransaction}var Ay,mB,SB,yy,Oy=Ie(()=>{Ay=M(K());Ll();cu();Qi();mB=Object.create(null),SB=Object.create(null);a(by,"addSubscription");yy=class extends Dn{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(TB,"notifyFromTransactionData");a(rre,"listenToCommits");a(gB,"nextTransaction");a(RB,"whenNextTransaction")});var IB={};je(IB,{commits_awaiting_replication:()=>du,getHDBNodeTable:()=>Sr,iterateRoutes:()=>j_,shouldReplicateToNode:()=>W_,subscribeToNodeUpdates:()=>_u});function Sr(){return AB||(AB=pt({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function _u(e){Sr().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;NB.debug?.("adding node",n,"on node",at()," on process",process.pid),server.nodes=server.nodes.filter(s=>s.name!==n),r.type==="put"&&n!==at()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r)),(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function W_(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&Sr().primaryStore.get(at())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function nre(){_u(e=>{ra({},(t,r)=>{let n=e.name,s=yB.get(n);if(s||yB.set(n,s=new Map),s.has(r))return;let i;for(let o in t)if(i=t[o].auditStore,i)break;if(i){let o=new Float64Array(i.getUserSharedBuffer(["replicated",r,n],new ArrayBuffer(8),{callback:a(()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:d}of du.get(r)||[])u>l&&u<=c&&d();o.lastTime=c},"callback")}));o.lastTime=0,s.set(r,o)}})})}function*j_(e){for(let t of e.routes||[]){let r=t.url,n;if(typeof t=="string"?t.includes("://")?r=t:n=t:n=t.hostname??t.host,n&&!r){let s=lu.default.get(uu.CONFIG_PARAMS.REPLICATION_SECUREPORT)??(!lu.default.get(uu.CONFIG_PARAMS.REPLICATION_PORT)&&lu.default.get(uu.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||lu.default.get(uu.CONFIG_PARAMS.REPLICATION_PORT)||lu.default.get(uu.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){bB.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,start_time:t.startTime}}}var bB,OB,lu,uu,NB,AB,yB,du,fu=Ie(()=>{Pe();ds();fp();bB=require("worker_threads"),OB=M(_e()),lu=M(ne()),uu=M(L()),NB=M(Oc());server.nodes=[];a(Sr,"getHDBNodeTable");a(_u,"subscribeToNodeUpdates");a(W_,"shouldReplicateToNode");yB=new Map;Mv((e,t,r)=>{if(r>server.nodes.length)throw new OB.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);du||(du=new Map,nre());let n=du.get(e);return n||(n=[],du.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(nre,"startSubscriptionToReplications");a(j_,"iterateRoutes")});var LB={};je(LB,{connectedToNode:()=>Nc,disconnectedFromNode:()=>pu,ensureNode:()=>oo,requestClusterStatus:()=>DB,startOnMainThread:()=>Iy});async function Iy(e){let t=0,r=dt();for(let i of Object.getOwnPropertyNames(r)){let o=r[i];for(let c in o){let l=o[c];if(l.auditStore){xp.set(i,Y_(l.auditStore));break}}}Di.whenThreadsStarted.then(async()=>{let i=[];for await(let o of r.system.hdb_nodes.search([]))i.push(o);for(let o of j_(e))try{let c=!o.subscriptions;if(c){let u=at();Sr().primaryStore.get(u)===void 0&&await oo(u,{name:u,url:e.url??na(),replicates:!0})}let l=o.trusted!==!1;if(c&&o.replicates==null&&(o.replicates=!0),i.find(u=>u.url===o.url))continue;s(o)}catch(c){console.error(c)}_u(s)});let n;function s(i,o=i?.name){let c=at()&&o===at()||na()&&i?.url===na();if(c){let _=!!i?.replicates;if(n!==void 0&&n!==_)for(let E of Sr().search([]))E.replicates&&E.name!==o&&s(E,E.name);n=_}if(Et.trace("Setting up node replication for",i),!i){for(let[_,E]of io){let f;for(let[h,{worker:T,nodes:m}]of E){let g=m[0];if(g&&g.name==o){f=!0;for(let[S,{worker:y}]of E)E.delete(S),Et.warn("Node was deleted, unsubscribing from node",o,S,_),y?.postMessage({type:"unsubscribe-from-node",node:o,database:S,url:_});break}}if(f){io.get(_).iterator.remove(),io.delete(_);return}}return}if(c)return;if(!i.url){Et.info(`Node ${i.name} is missing url`);return}let l=io.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(Et.info(`Added node ${i.name} at ${i.url} for process ${at()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[_,E]of Eu)if(i.url===E.url){Eu.delete(_);break}Eu.set(i.name,i)}let u=dt();if(l||(l=new Map,io.set(i.url,l)),l.iterator=ra(e,(_,E,f)=>{f?d(E,!0):d(E,!1)}),i.subscriptions)for(let _ of i.subscriptions){let E=_.database||_.schema;u[E]||(Et.warn(`Database ${E} not found for node ${i.name}, making a subscription anyway`),d(E,!1))}function d(_,E){Et.trace("Setting up replication for database",_,"on node",i.name);let f=l.get(_),h,T=[{replicateByDefault:E,...i}];xp.has(_)&&(T.push({replicateByDefault:E,name:at(),start_time:xp.get(_),end_time:Date.now(),replicates:!0}),xp.delete(_));let m=W_(i,_),g=Di.workers.filter(S=>S.name==="http");if(f?(h=f.worker,f.nodes=T):m&&(t=t%g.length,h=g[t++],l.set(_,{worker:h,nodes:T,url:i.url}),h?.on("exit",()=>{l.get(_)?.worker===h&&(l.delete(_),d(_,E))})),m)setTimeout(()=>{let S={type:"subscribe-to-node",database:_,nodes:T};h?h.postMessage(S):hu(S)},sre);else{Et.info("Node no longer should be used, unsubscribing from node",i.replicates,!!u[_],Sr().primaryStore.get(at())?.replicates),Sr().primaryStore.get(at())?.replicates||(n=!1);let S={type:"unsubscribe-from-node",database:_,url:i.url,name:i.name};h?h.postMessage(S):Fp(S)}}a(d,"onDatabase")}a(s,"onNodeUpdate"),pu=a(function(i){try{Et.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let o=Array.from(Eu.keys()),c=o.sort(),l=c.indexOf(i.name||Qs(i.url));if(l===-1){Et.warn("Disconnected node not found in node map",i.name,o);return}let u=io.get(i.url),d=u?.get(i.database);if(!d){Et.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished)return;let _=d.nodes[0];if(!(_.replicates===!0||_.replicates?.sends||_.subscriptions?.length))return;let E=(l+1)%c.length;for(;l!==E;){let f=c[E],h=Eu.get(f);u=io.get(h.url);let T=u?.get(i.database);if(!T){E=(E+1)%c.length;continue}let{worker:m,nodes:g}=T,S=!1;for(let y of d.nodes){if(g.some(I=>I.name===y.name)){Et.info(`Disconnected node is already failing over to ${f} for ${i.database}`);continue}g.push(y),S=!0}if(!S){Et.info(`Disconnected node ${i.name} has no nodes to fail over to ${f}`);return}d.redirectingTo=T,Et.info(`Failing over ${i.database} from ${i.name} to ${f}`),m?m.postMessage({type:"subscribe-to-node",database:i.database,nodes:g}):hu({database:i.database,nodes:g});return}Et.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(o){Et.error("Error failing over node",o)}},"disconnectedFromNode"),Nc=a(function(i){let o=io.get(i.url),c=o?.get(i.database);if(!c){Et.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,o);return}if(c.connected=!0,c.latency=i.latency,c.catchingUpFrom=i.lastSendTime,c.redirectingTo){let{worker:l,nodes:u}=c.redirectingTo,d=u.find(_=>_.name===i.name);c.redirectingTo=null,d&&(u.splice(u.indexOf(d),1),l?l.postMessage({type:"subscribe-to-node",database:i.database,nodes:u}):hu({database:i.database,nodes:u}))}},"connectedToNode"),(0,Di.onMessageByType)("disconnected-from-node",pu),(0,Di.onMessageByType)("connected-to-node",Nc),(0,Di.onMessageByType)("request-cluster-status",DB)}function DB(e,t){let r=[];for(let[n,s]of Eu)try{let i=io.get(s.url);Et.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:d,nodes:_,latency:E,catchingUpFrom:f}]of i)o.push({database:l,connected:d,latency:E,catching_up_from:f?new Date(f).toISOString():"up-to-date",thread_id:u?.threadId,nodes:_.map(h=>h.name)});let c=(0,Ny.cloneDeep)(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){Et.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function oo(e,t){let r=Sr();e=e??Qs(t.url),t.name=e;try{if(t.ca){let s=new PB.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subject_alt_name:s.subjectAltName,serial_number:s.serialNumber,valid_from:s.validFrom,valid_to:s.validTo}}}catch(s){Et.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(Et.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.put(t);else{t.replicates&&!wB.default.get(CB.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=(0,Ny.cloneDeep)(n[s]);for(let c of t[s]){let l=!1;for(let u of o)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...o,...i];break}Et.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Di,kp,Et,Ny,wB,CB,PB,sre,io,pu,Nc,Eu,xp,z_=Ie(()=>{Pe();Di=M(ot());ds();kp=require("worker_threads");fu();Et=M(K()),Ny=require("lodash"),wB=M(ne()),CB=M(L()),PB=require("crypto"),sre=200,io=new Map,Eu=new Map,xp=new Map;a(Iy,"startOnMainThread");a(DB,"requestClusterStatus");kp.parentPort&&(pu=a(e=>{kp.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Nc=a(e=>{kp.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Di.onMessageByType)("subscribe-to-node",e=>{hu(e)}),(0,Di.onMessageByType)("unsubscribe-from-node",e=>{Fp(e)}));a(oo,"ensureNode")});var Q_=O((XIe,MB)=>{"use strict";var ire=L().OPERATIONS_ENUM,wy=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=ire.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};MB.exports=wy});var vB=O((ewe,UB)=>{"use strict";var ore={OPERATION:"operation",REFRESH:"refresh"},Cy=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Py=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};UB.exports={JWTTokens:Cy,TOKEN_TYPE_ENUM:ore,JWTRSAKeys:Py}});var mu=O((rwe,kB)=>{"use strict";var X_=require("jsonwebtoken"),Dy=require("fs-extra"),Ly=te(),_s=L(),{handleHDBError:fn,hdb_errors:are}=_e(),{HTTP_STATUS_CODES:En,AUTHENTICATION_ERROR_MSGS:hn}=are,J_=K(),BB=Kh(),vy=xn(),cre=Vr().update,lre=Q_(),ure=to(),{UserEventMsg:dre}=$s(),sa=ne();sa.initSync();var My=require("path"),{JWTTokens:_re,JWTRSAKeys:fre,TOKEN_TYPE_ENUM:Gp}=vB(),Ere=sa.get(_s.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?sa.get(_s.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",hre=sa.get(_s.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?sa.get(_s.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",qp="RS256",Uy;kB.exports={createTokens:pre,validateOperationToken:Sre,refreshOperationToken:mre,validateRefreshToken:xB,getJWTRSAKeys:Z_};async function pre(e){if(Ly.isEmpty(e)||typeof e!="object")throw fn(new Error,hn.INVALID_AUTH_OBJECT,En.BAD_REQUEST,void 0,void 0,!0);if(Ly.isEmpty(e.username))throw fn(new Error,hn.USERNAME_REQUIRED,En.BAD_REQUEST,void 0,void 0,!0);if(Ly.isEmpty(e.password))throw fn(new Error,hn.PASSWORD_REQUIRED,En.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await vy.findAndValidateUser(e.username,e.password),!t)throw fn(new Error,hn.INVALID_CREDENTIALS,En.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw J_.error(E),fn(new Error,hn.INVALID_CREDENTIALS,En.UNAUTHORIZED,void 0,void 0,!0)}let r=await Z_(),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 HB(i,r.private_key,r.passphrase),c=await X_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:hre,algorithm:qp,subject:Gp.REFRESH}),l=BB.hash(c),u=new lre(_s.SYSTEM_SCHEMA_NAME,_s.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),d,_;try{d=await cre(u)}catch(E){J_.error(E),_=E}if(_!==void 0||d.skipped_hashes.length>0)throw fn(new Error,hn.REFRESH_TOKEN_SAVE_FAILED,En.INTERNAL_SERVER_ERROR);return ure.signalUserChange(new dre(process.pid)),new _re(o,c)}a(pre,"createTokens");async function HB(e,t,r){return await X_.sign(e,{key:t,passphrase:r},{expiresIn:Ere,algorithm:qp,subject:Gp.OPERATION})}a(HB,"signOperationToken");async function Z_(){if(Uy===void 0)try{let e=My.join(sa.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,_s.JWT_ENUM.JWT_PASSPHRASE_NAME),t=My.join(sa.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,_s.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=My.join(sa.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,_s.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await Dy.readFile(e)).toString(),s=(await Dy.readFile(t)).toString(),i=(await Dy.readFile(r)).toString();Uy=new fre(i,s,n)}catch(e){throw J_.error(e),fn(new Error,hn.NO_ENCRYPTION_KEYS,En.INTERNAL_SERVER_ERROR)}return Uy}a(Z_,"getJWTRSAKeys");async function mre(e){if(!e)throw fn(new Error,hn.INVALID_BODY,En.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw fn(new Error,hn.REFRESH_TOKEN_REQUIRED,En.BAD_REQUEST,void 0,void 0,!0);await xB(e.refresh_token);let t=await Z_(),r=await X_.decode(e.refresh_token);return{operation_token:await HB({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(mre,"refreshOperationToken");async function Sre(e){try{let t=await Z_(),r=await X_.verify(e,t.public_key,{algorithms:qp,subject:Gp.OPERATION});return await vy.findAndValidateUser(r.username,void 0,!1)}catch(t){throw J_.warn(t),t.name&&t.name==="TokenExpiredError"?fn(new Error,hn.TOKEN_EXPIRED,En.FORBIDDEN):fn(new Error,hn.INVALID_TOKEN,En.UNAUTHORIZED)}}a(Sre,"validateOperationToken");async function xB(e){let t;try{let r=await Z_(),n=await X_.verify(e,r.public_key,{algorithms:qp,subject:Gp.REFRESH});t=await vy.findAndValidateUser(n.username,void 0,!1)}catch(r){throw J_.warn(r),r.name&&r.name==="TokenExpiredError"?fn(new Error,hn.TOKEN_EXPIRED,En.FORBIDDEN):fn(new Error,hn.INVALID_TOKEN,En.UNAUTHORIZED)}if(!BB.validate(t.refresh_token,e))throw fn(new Error,hn.INVALID_TOKEN,En.UNAUTHORIZED);return t}a(xB,"validateRefreshToken")});var Zs=O(uH=>{"use strict";var ir=require("path"),pn=require("fs-extra"),Su=require("node-forge"),YB=require("net"),{generateKeyPair:Hy,X509Certificate:ao,createPrivateKey:WB}=require("crypto"),Tre=require("util");Hy=Tre.promisify(Hy);var bt=Su.pki,Js=require("joi"),{v4:jB}=require("uuid"),{validateBySchema:Gy}=_t(),St=K(),Es=ne(),hs=L(),{CONFIG_PARAMS:Tu}=hs,Xs=UR(),{ClientError:oa}=_e(),wc=require("node:tls"),{relative:zB,join:gre}=require("node:path"),{CERT_PREFERENCE_APP:swe,CERTIFICATE_VALUES:FB}=Xs,Rre=Qa(),xy=Ct(),GB=parseInt(process.version.slice(1))<20,{table:Are,getDatabases:yre,databases:By}=(Pe(),oe(ut)),{getJWTRSAKeys:qB}=mu();Object.assign(uH,{generateKeys:Vy,updateConfigCert:nH,createCsr:Dre,signCertificate:Lre,setCertTable:gu,loadCertificates:eH,reviewSelfSignedCert:Yy,createTLSSelector:oH,listCertificates:cH,addCertificate:xre,removeCertificate:Fre,createNatsCerts:vre,generateCertsKeys:Ure,getReplicationCert:tf,getReplicationCertAuth:Pre,renewSelfSigned:Bre,hostnamesFromCert:lH,getKey:Gre});var{urlToNodeName:QB,getThisNodeUrl:bre,getThisNodeName:Vp,clearThisNodeName:Ore}=(ds(),oe(la)),{readFileSync:Nre,watchFile:Ire,statSync:JB}=require("node:fs"),iwe=ne(),{getTicketKeys:wre,onMessageFromWorkers:Cre}=ot(),ia=K(),{isMainThread:XB}=require("worker_threads"),{TLSSocket:ZB,createSecureContext:owe}=require("node:tls"),qy=3650,ef=["127.0.0.1","localhost","::1"],$y=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];Cre(async e=>{e.type===hs.ITC_EVENT_TYPES.RESTART&&(Es.initSync(!0),await Yy())});var Dr;function ca(){return Dr||(Dr=yre().system.hdb_certificate,Dr||(Dr=Are({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),Dr}a(ca,"getCertTable");async function tf(){let e=oH("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(Vp());if(!r)return;let n=new ao(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(tf,"getReplicationCert");async function Pre(){ca();let e=(await tf()).options.cert,r=new ao(e).issuer.match(/CN=(.*)/)?.[1];return Dr.get(r)}a(Pre,"getReplicationCertAuth");var $B,aa=new Map;function eH(){if($B)return;$B=!0;let e=[{configKey:Tu.TLS},{configKey:Tu.OPERATIONSAPI_TLS}];ca();let t=ir.dirname(xy.getConfigFilePath()),r;for(let{configKey:n}of e){let s=xy.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&zB(gre(t,"keys"),o);c&&VB(o,l=>{aa.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&XB){let d;VB(u,_=>{if(FB.cert===_)return;let E=i.hostname??i.hostnames??i.host??i.hosts;E&&!Array.isArray(E)&&(E=[E]);let f=sH(u),h=new ao(f),T;try{T=Wy(h)}catch(y){St.error("error extracting common name from certificate",y);return}if(T==null){St.error("error extracting common name from certificate");return}if(h.checkIssued(new ao(FB.cert)))return;let m=Dr.primaryStore.get(T),g=JB(u).mtimeMs,S=!m||m.is_self_signed?1:m.file_timestamp??m.__updatedtime__;if(m&&g<=S){g<S&&St.info(`Certificate ${T} at ${u} is older (${new Date(g)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=Dr.put({name:T,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:f,private_key_name:c,is_authority:l,hostnames:E,file_timestamp:g,details:{issuer:h.issuer.replace(/\n/g," "),subject:h.subject.replace(/\n/g," "),subject_alt_name:h.subjectAltName,serial_number:h.serialNumber,valid_from:h.validFrom,valid_to:h.validTo}})},l?"certificate authority":"certificate")}}}}}return r}a(eH,"loadCertificates");function VB(e,t,r){let n,s=a((i,o)=>{try{let c=i.mtimeMs;c&&c!==n&&(o&&XB&&St.warn(`Reloading ${r}:`,e),n=c,t(sH(e)))}catch(c){St.error(`Error loading ${r}:`,e,c)}},"loadFile");pn.existsSync(e)?s(JB(e)):St.error(`${r} file not found:`,e),Ire(e,{persistent:!1},s)}a(VB,"loadAndWatch");function ky(){let e=bre();if(e==null){let t=ef[0];return St.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return QB(e)}a(ky,"getHost");function $p(){let e=Vp();if(e==null){let t=ef[0];return St.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a($p,"getCommonName");async function Dre(){let e=await tf(),t=bt.certificateFromPem(e.options.cert),r=bt.privateKeyFromPem(e.options.key);St.info("Creating CSR with cert named:",e.name);let n=bt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:$p()},...$y];St.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:tH()}];return St.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Su.pki.certificationRequestToPem(n)}a(Dre,"createCsr");function tH(){let e=ef.includes($p())?ef:[...ef,$p()];return e.includes(ky())||e.push(ky()),[{name:"basicConstraints",cA:!1,critical:!0},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0,critical:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"nsCertType",client:!0,server:!0},{name:"subjectAltName",altNames:e.map(t=>YB.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(tH,"certExtensions");async function Lre(e){let t={},r=ir.join(Es.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;ca();for await(let d of Dr.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(aa.has(d.private_key_name)){n=aa.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await pn.exists(ir.join(r,d.private_key_name))){n=pn.readFile(ir.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await Fy();s=d.ca,n=d.private_key}n=bt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=bt.certificateFromPem(s.certificate);St.info("Signing CSR with cert named",s.name);let o=bt.certificationRequestFromPem(e.csr);try{o.verify()}catch(d){return St.error(d),new Error("Error verifying CSR: "+d.message)}let c=Su.pki.createCertificate();c.serialNumber=Math.random().toString().slice(2,10),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+qy),St.info("sign cert setting validity:",c.validity),St.info("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),St.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;St.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,Su.md.sha256.create()),t.certificate=bt.certificateToPem(c)}else St.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(Lre,"signCertificate");async function Mre(e,t){await gu({name:Vp(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await gu({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:bt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(Mre,"createCertificateTable");async function gu(e){let t=new ao(e.certificate);e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},ca(),await Dr.patch(e)}a(gu,"setCertTable");async function Vy(){let e=await Hy("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{public_key:bt.publicKeyFromPem(e.publicKey),private_key:bt.privateKeyFromPem(e.privateKey)}}a(Vy,"generateKeys");async function Ky(e,t,r){let n=bt.createCertificate();if(!t){let o=await tf();t=bt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+qy);let i=[{name:"commonName",value:$p()},...$y];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(tH()),n.sign(e,Su.md.sha256.create()),bt.certificateToPem(n)}a(Ky,"generateCertificates");async function Fy(){let e=await cH(),t;for(let r of e){if(!r.is_authority)continue;let n=await aH(r.private_key_name);if(r.private_key_name&&n&&new ao(r.certificate).checkPrivateKey(WB(n))){St.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;St.trace("No CA found with matching private key")}a(Fy,"getCertAuthority");async function rH(e,t,r=!0){let n=bt.createCertificate();n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+qy);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${Es.get(Tu.REPLICATION_HOSTNAME)??QB(Es.get(Tu.REPLICATION_URL))??jB().split("-")[0]}`},...$y];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,Su.md.sha256.create());let o=ir.join(Es.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),c=ir.join(o,Xs.PRIVATEKEY_PEM_NAME);return r&&await pn.writeFile(c,bt.privateKeyToPem(e)),n}a(rH,"generateCertAuthority");async function Ure(){let{private_key:e,public_key:t}=await Vy(),r=await rH(e,t),n=await Ky(e,t,r);await Mre(n,r),nH()}a(Ure,"generateCertsKeys");async function vre(){let e=await Ky(bt.privateKeyFromPem(Xs.CERTIFICATE_VALUES.key),void 0,bt.certificateFromPem(Xs.CERTIFICATE_VALUES.cert)),t=ir.join(Es.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),r=ir.join(t,Xs.NATS_CERTIFICATE_PEM_NAME);await pn.exists(r)||await pn.writeFile(r,e);let n=ir.join(t,Xs.NATS_CA_PEM_NAME);await pn.exists(n)||await pn.writeFile(n,Xs.CERTIFICATE_VALUES.cert)}a(vre,"createNatsCerts");async function Bre(){ca();for await(let e of Dr.search([{attribute:"is_self_signed",value:!0}]))await Dr.delete(e.name);await Yy()}a(Bre,"renewSelfSigned");async function Yy(){Ore(),await eH(),ca();let e=await Fy();if(!e){St.notify("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=Es.get(Tu.TLS_PRIVATEKEY),n=ir.join(Es.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),s,i=zB(n,r);try{s=bt.privateKeyFromPem(await pn.readFile(r))}catch(c){St.warn("Unable to parse the TLS key",r,"A new key will be generated and used to create Certificate Authority",c),{private_key:s}=await Vy(),await pn.exists(ir.join(n,Xs.PRIVATEKEY_PEM_NAME))&&(i=`privateKey${jB().split("-")[0]}.pem`),await pn.writeFile(ir.join(n,i),bt.privateKeyToPem(s))}let o=await rH(s,bt.setRsaPublicKey(s.n,s.e),!1);await gu({name:o.subject.getField("CN").value,uses:["https"],certificate:bt.certificateToPem(o),private_key_name:i,is_authority:!0,is_self_signed:!0})}if(!await tf()){let r=Vp();St.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await Fy();let n=bt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await Ky(bt.privateKeyFromPem(e.private_key),s,n);await gu({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(Yy,"reviewSelfSignedCert");function nH(){let e=Rre(Object.keys(hs.CONFIG_PARAM_MAP),!0),t=ir.join(Es.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),r=ir.join(t,Xs.PRIVATEKEY_PEM_NAME),n=ir.join(t,Xs.NATS_CERTIFICATE_PEM_NAME),s=ir.join(t,Xs.NATS_CA_PEM_NAME),i=hs.CONFIG_PARAMS,o={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(o[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(o[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,o[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,o[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),xy.updateConfigValue(void 0,void 0,o,!1,!0)}a(nH,"updateConfigCert");function sH(e){return e.startsWith("-----BEGIN")?e:Nre(e,"utf8")}a(sH,"readPEM");var KB=wc.createSecureContext;wc.createSecureContext=function(e){if(!e.cert||!e.key)return KB(e);let t={...e};delete t.key,delete t.cert;let r=KB(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var iH=wc.Server;wc.Server=function(e,t){return e.ALPNCallback&&(e.ALPNProtocols=null),iH.call(this,e,t)};wc.Server.prototype=iH.prototype;var Hre=ZB.prototype._init;ZB.prototype._init=function(e,t){Hre.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,o)=>{this.sni_context=o?.context||o,this.certCbDone()})}};var Ic=new Map;function oH(e,t){let r=new Map,n,s=!1;return i.initialize=o=>i.ready?i.ready:(o&&(o.secureContexts=r,o.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),Ic.clear();let d=0;for await(let _ of By.system.hdb_certificate.search([])){let E=_.certificate,f=new ao(E);_.is_authority&&(f.asString=E,Ic.set(f.subject,E))}for await(let _ of By.system.hdb_certificate.search([]))try{if(_.is_authority)continue;let E=e==="operations-api",f=_.is_self_signed?1:2;E&&_.uses?.includes?.("operations")&&(f+=1);let h=await aH(_.private_key_name),T=_.certificate,m=new ao(T);if(Ic.has(m.issuer)&&(T+=`
|
|
14
|
+
`,"")}a(rB,"runCommand");async function Lte(){try{await lte.access(dy)}catch{return!1}let e=await rB(`${dy} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return ute.eq(t,Pte)}a(Lte,"checkNATSServerInstalled");async function py(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await eB.getClusterUser();if(bc(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}zs.trace("create nats connection called");let i=await gte({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Or.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Or.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Or.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),zs.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&zs.error("Error with Nats client connection, connection closed",o),i===Qr&&nB()}),i}a(py,"createConnection");function nB(){Qr=void 0,Rc=void 0,Ac=void 0,yc=void 0}a(nB,"clearClientCache");async function Mte(){Qr&&(await Qr.drain(),Qr=void 0,Rc=void 0,Ac=void 0,yc=void 0)}a(Mte,"closeConnection");var Qr,yc;async function $_(){return yc||(yc=py(Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Qr=await yc),Qr||yc}a($_,"getConnection");async function V_(){if(Rc)return Rc;bc(Qr)&&await $_();let{domain:e}=iu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(bc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Rc=await Qr.jetstreamManager({domain:e,timeout:6e4}),Rc}a(V_,"getJetStreamManager");async function sB(){if(Ac)return Ac;bc(Qr)&&await $_();let{domain:e}=iu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(bc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ac=Qr.jetstream({domain:e,timeout:6e4}),Ac}a(sB,"getJetStream");async function Ci(){let e=Qr||await $_(),t=Rc||await V_(),r=Ac||await sB();return{connection:e,jsm:t,js:r}}a(Ci,"getNATSReferences");async function Ute(e){let t=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await eB.getClusterUser(),s=await py(t,r,n),i=hy(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of o){let _=tB.decode(d.data);_.response_time=Date.now()-l,c.push(_)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await Pp.async_set_timeout(e),await o.drain(),await s.close(),await u,c}a(Ute,"getServerList");async function my(e,t){let{jsm:r}=await Ci(),n=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Rte.File,retention:Ate.Limits,subjects:t,discard:yte.Old,max_msgs:s,max_bytes:i,max_age:n})}a(my,"createLocalStream");async function iB(){let{jsm:e}=await Ci(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(iB,"listStreams");async function vte(e){let{jsm:t}=await Ci();await t.streams.delete(e)}a(vte,"deleteLocalStream");async function Bte(e){let{connection:t}=await Ci(),r=[],n=hy(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(tB.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(Bte,"listRemoteStreams");async function Hte(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Ci(),i=Q0(),o={durable_name:i,ack_policy:fy.Explicit};t&&(o.deliver_policy=Ey.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let _=_y(d.data),E={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:_};if(d.headers&&(E.origin=d.headers.get(Pr.MSG_HEADERS.ORIGIN)),u.push(E),d.ack(),d.info.pending===0)break}return await c.delete(),u}a(Hte,"viewStream");async function*xte(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Ci(),i=Q0(),o={durable_name:i,ack_policy:fy.Explicit};t&&(o.deliver_policy=Ey.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let d=_y(u.data);d[0]||(d=[d]);for(let _ of d){let E={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:_};u.headers&&(E.origin=u.headers.get(Pr.MSG_HEADERS.ORIGIN)),yield E}if(u.ack(),u.info.pending===0)break}await c.delete()}a(xte,"viewStreamIterator");async function kte(e,t,r,n){zs.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=oB(n,r);let{js:s}=await Ci(),i=await Lp(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:Z0.encode(n);try{zs.trace(`publishToStream publishing to subject: ${o}`),wte(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return cB(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){zs.trace(`publishToStream creating stream: ${t}`);let d=o.split(".");d[2]="*",await my(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(kte,"publishToStream");function oB(e,t){t===void 0&&(t=Ote());let r=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Pr.MSG_HEADERS.ORIGIN)&&r&&t.append(Pr.MSG_HEADERS.ORIGIN,r),t}a(oB,"addNatsMsgHeader");function iu(e){e=e.toLowerCase();let t=q_.join(Or.get(Qe.CONFIG_PARAMS.ROOTPATH),Cte);if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return bc(uy)&&(uy={port:F_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:F_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Pr.SERVER_SUFFIX.HUB,config_file:Pr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:q_.join(t,Pr.PID_FILES.HUB),hdb_nats_path:t}),uy;if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return bc(ly)&&(ly={port:F_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:F_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Pr.SERVER_SUFFIX.LEAF,config_file:Pr.NATS_CONFIG_FILES.LEAF_SERVER,domain:F_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Pr.SERVER_SUFFIX.LEAF,pid_file_path:q_.join(t,Pr.PID_FILES.LEAF),hdb_nats_path:t}),ly;zs.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(iu,"getServerConfig");async function aB(e,t,r,n){try{await e.consumers.add(t,{ack_policy:fy.Explicit,durable_name:r,deliver_policy:Ey.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(aB,"createConsumer");async function Fte(e,t,r){await e.consumers.delete(t,r)}a(Fte,"removeConsumer");function Gte(e){return e.split(".")[1]}a(Gte,"extractServerName");async function qte(e,t,r=6e4,n=hy()){if(!Pp.isObject(t))throw new Error("data param must be an object");let s=Z0.encode(t),{connection:i}=await Ci(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return _y(c.data)}a(qte,"request");function Sy(e){return new Promise(async(t,r)=>{let n=Ete(dy,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(Sy,"reloadNATS");async function $te(){let{pid_file_path:e}=iu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Sy(e)}a($te,"reloadNATSHub");async function Vte(){let{pid_file_path:e}=iu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Sy(e)}a(Vte,"reloadNATSLeaf");function Kte(e,t,r){let n;switch(e.code){case z0.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case z0.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(Kte,"requestErrorHandler");async function Yte(e,t){let r=t+Pr.SERVER_SUFFIX.LEAF,{connection:n}=await Ci(),{jsm:s}=await ere(r),{schema:i,table:o}=e,c=Dp.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await cB(async()=>{if(e.subscribe===!0)await aB(s,c,n.info.server_name,l);else try{await Fte(s,c,n.info.server_name)}catch(u){zs.trace(u)}})}a(Yte,"updateRemoteConsumer");async function Wte(e,t,r,n){let s=Dp.createNatsTableStreamName(e,t),i=r+Pr.SERVER_SUFFIX.LEAF,o={type:Qe.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!X0&&Ste()<Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=cy();await c(o)}await pte(o),n==="stop"&&await Pp.async_set_timeout(1e3)}a(Wte,"updateConsumerIterator");function cB(e){return hte.writeTransaction(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(cB,"exclusiveLock");async function lB(e,t){let r=Dp.createNatsTableStreamName(e,t),n=await Lp(),s=Jte(e,t,n);await my(r,[s])}a(lB,"createLocalTableStream");async function jte(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await lB(n,s)}}a(jte,"createTableStreams");async function uB(e,t,r=void 0){if(Or.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=Dp.createNatsTableStreamName(e,t),{domain:s}=iu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await $_()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")zs.warn(n);else throw n}}a(uB,"purgeTableStream");async function zte(e,t){if(Or.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await uB(e,t[r])}a(zte,"purgeSchemaTableStreams");async function Qte(e){return(await V_()).streams.info(e)}a(Qte,"getStreamInfo");function Jte(e,t,r){return`${Pr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Jte,"createSubjectName");async function Lp(){if(G_)return G_;if(G_=(await V_())?.nc?.info?.server_name,G_===void 0)throw new Error("Unable to get jetstream manager server name");return G_}a(Lp,"getJsmServerName");async function Xte(){let e=await V_(),t=await Lp(),r=await iB();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=Zte(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");zs.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}a(Xte,"updateLocalStreams");function Zte(e){let{config:t}=e,r=!1,n=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(Zte,"updateStreamLimits");async function ere(e){let t,r;try{t=await Qr.jetstream({domain:e}),r=await Qr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw zs.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(ere,"connectToRemoteJS")});var Oc=O(Up=>{var Mp=K();for(let e of["trace","debug","info","warn","error","fatal","notify"])Mp.logsAtLevel(e)&&(Up[e]=Mp[e]);Up.loggerWithTag=e=>Mp.loggerWithTag(e,!0);Up.setLogLevel=Mp.setLogLevel});function Ty(e){let t=e.get(vp),r=t?(0,ou.unpack)(t):null;r||(r={remoteNameToId:{}});let n=at(),s=!1;r.nodeName=at();let i=r.remoteNameToId;if(i[n]!==0){let o=0,c;for(let l in i){let u=i[l];u===0?c=l:u>o&&(o=u)}if(c){o++,i[c]=o;let l=[Symbol.for("seq"),o];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:Y_(e)??1,nodes:[]})})}i[n]=0,e.putSync(vp,(0,ou.pack)(r))}return r}function K_(e){return Ty(e).remoteNameToId}function fB(e,t,r){let n=Ty(r),s=n.remoteNameToId,i=new Map,o=!1;for(let c in t){let l=t[c],u=s[c];if(u==null){let d=0;for(let _ in s){let E=s[_];E>d&&(d=E)}u=d+1,s[c]=u,o=!0}i.set(l,u)}return o&&r.putSync(vp,(0,ou.pack)(n)),i}function Bp(e,t){let r=Ty(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let o in n){let c=n[o];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(vp,(0,ou.pack)(r))}return _B.info?.("The remote node name map",e,n,s),s}var _B,ou,vp,gy=Ie(()=>{_B=M(Oc());ds();ou=require("msgpackr"),vp=Symbol.for("remote-ids");a(Ty,"getIdMappingRecord");a(K_,"exportIdMapping");a(fB,"remoteToLocalNodeId");a(Bp,"getIdOfRemoteNode")});var ta,Ry=Ie(()=>{ta=class{constructor(t){this.error=t}static{a(this,"ErrorResource")}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var pB={};je(pB,{Resources:()=>Hp,keyArrayToString:()=>au,resetResources:()=>tre,resources:()=>Pi});function tre(){return Pi=new Hp}function au(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var EB,hB,Hp,Pi,cu=Ie(()=>{Sc();Ry();EB=M(K()),hB=M(_e()),Hp=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s){let c=new hB.ServerError(`Conflicting paths for ${t}`);EB.default.error(c),i.Resource=new ta(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),l=this.get(c);if(!l&&c.indexOf(".")>-1){let u=c.split(".");l=this.get(u[0])}if(l&&(!r||l.exportTypes?.[r]!==!1)){if(l.relativeURL=t.slice(n),!l.hasSubPaths)return l;s=l}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),!s&&o.indexOf(".")>-1&&(s=this.get(o.split(".")[0])),s&&(!r||s.exportTypes?.[r]!==!1)?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(!r||s.exportTypes?.[r]!==!1)&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return Pt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(tre,"resetResources");a(au,"keyArrayToString")});function by(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=SB,rre(e.primaryStore,e.auditStore)):(c=mB,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{TB(mB[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[o];u||(u=l[o]=new Map,u.envs=l,u.tableId=o,u.store=e.primaryStore),t=au(t);let d=new yy(r);d.startTime=n;let _=u.get(t);return _?_.push(d):(u.set(t,_=[d]),_.tables=u,_.key=t),d.subscriptions=_,d}function TB(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),gB(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=xt(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=au(c),u=0;do{let d=o.get(l);if(d){for(let E of d)if(!(u>0&&!(E.includeDescendants&&!(E.onlyChildren&&u>1)))){if(E.startTime>=n){(0,Ay.info)("omitting",c,E.startTime,n);continue}try{let f;E.supportsTransactions&&E.txnInProgress!==i.version&&(f=!0,E.txnInProgress||(r?r.push(E):r=[E]),E.txnInProgress=i.version),E.listener(c,i,n,f)}catch(f){console.error(f),(0,Ay.info)(f)}}}if(l==null)break;let _=l.lastIndexOf?.("/",l.length-2);_!==l.length-1&&u++,_>-1?l=l.slice(0,_+1):l=null}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function rre(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let l=SB[s];if(!l)return;let u=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{TB(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function gB(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function RB(e){return e.nextTransaction||(by({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),gB(e)),e.nextTransaction}var Ay,mB,SB,yy,Oy=Ie(()=>{Ay=M(K());Ll();cu();Qi();mB=Object.create(null),SB=Object.create(null);a(by,"addSubscription");yy=class extends Dn{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(TB,"notifyFromTransactionData");a(rre,"listenToCommits");a(gB,"nextTransaction");a(RB,"whenNextTransaction")});var IB={};je(IB,{commits_awaiting_replication:()=>du,getHDBNodeTable:()=>Sr,iterateRoutes:()=>j_,shouldReplicateToNode:()=>W_,subscribeToNodeUpdates:()=>_u});function Sr(){return AB||(AB=pt({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function _u(e){Sr().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;NB.debug?.("adding node",n,"on node",at()," on process",process.pid),server.nodes=server.nodes.filter(s=>s.name!==n),r.type==="put"&&n!==at()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r)),(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function W_(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&Sr().primaryStore.get(at())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function nre(){_u(e=>{ra({},(t,r)=>{let n=e.name,s=yB.get(n);if(s||yB.set(n,s=new Map),s.has(r))return;let i;for(let o in t)if(i=t[o].auditStore,i)break;if(i){let o=new Float64Array(i.getUserSharedBuffer(["replicated",r,n],new ArrayBuffer(8),{callback:a(()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:d}of du.get(r)||[])u>l&&u<=c&&d();o.lastTime=c},"callback")}));o.lastTime=0,s.set(r,o)}})})}function*j_(e){for(let t of e.routes||[]){let r=t.url,n;if(typeof t=="string"?t.includes("://")?r=t:n=t:n=t.hostname??t.host,n&&!r){let s=lu.default.get(uu.CONFIG_PARAMS.REPLICATION_SECUREPORT)??(!lu.default.get(uu.CONFIG_PARAMS.REPLICATION_PORT)&&lu.default.get(uu.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||lu.default.get(uu.CONFIG_PARAMS.REPLICATION_PORT)||lu.default.get(uu.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){bB.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,start_time:t.startTime}}}var bB,OB,lu,uu,NB,AB,yB,du,fu=Ie(()=>{Pe();ds();fp();bB=require("worker_threads"),OB=M(_e()),lu=M(ne()),uu=M(L()),NB=M(Oc());server.nodes=[];a(Sr,"getHDBNodeTable");a(_u,"subscribeToNodeUpdates");a(W_,"shouldReplicateToNode");yB=new Map;Mv((e,t,r)=>{if(r>server.nodes.length)throw new OB.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);du||(du=new Map,nre());let n=du.get(e);return n||(n=[],du.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(nre,"startSubscriptionToReplications");a(j_,"iterateRoutes")});var LB={};je(LB,{connectedToNode:()=>Nc,disconnectedFromNode:()=>pu,ensureNode:()=>oo,requestClusterStatus:()=>DB,startOnMainThread:()=>Iy});async function Iy(e){let t=0,r=dt();for(let i of Object.getOwnPropertyNames(r)){let o=r[i];for(let c in o){let l=o[c];if(l.auditStore){xp.set(i,Y_(l.auditStore));break}}}Di.whenThreadsStarted.then(async()=>{let i=[];for await(let o of r.system.hdb_nodes.search([]))i.push(o);for(let o of j_(e))try{let c=!o.subscriptions;if(c){let u=at();Sr().primaryStore.get(u)===void 0&&await oo(u,{name:u,url:e.url??na(),replicates:!0})}let l=o.trusted!==!1;if(c&&o.replicates==null&&(o.replicates=!0),i.find(u=>u.url===o.url))continue;s(o)}catch(c){console.error(c)}_u(s)});let n;function s(i,o=i?.name){let c=at()&&o===at()||na()&&i?.url===na();if(c){let _=!!i?.replicates;if(n!==void 0&&n!==_)for(let E of Sr().search([]))E.replicates&&E.name!==o&&s(E,E.name);n=_}if(Et.trace("Setting up node replication for",i),!i){for(let[_,E]of io){let f;for(let[h,{worker:T,nodes:m}]of E){let g=m[0];if(g&&g.name==o){f=!0;for(let[S,{worker:y}]of E)E.delete(S),Et.warn("Node was deleted, unsubscribing from node",o,S,_),y?.postMessage({type:"unsubscribe-from-node",node:o,database:S,url:_});break}}if(f){io.get(_).iterator.remove(),io.delete(_);return}}return}if(c)return;if(!i.url){Et.info(`Node ${i.name} is missing url`);return}let l=io.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(Et.info(`Added node ${i.name} at ${i.url} for process ${at()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[_,E]of Eu)if(i.url===E.url){Eu.delete(_);break}Eu.set(i.name,i)}let u=dt();if(l||(l=new Map,io.set(i.url,l)),l.iterator=ra(e,(_,E,f)=>{f?d(E,!0):d(E,!1)}),i.subscriptions)for(let _ of i.subscriptions){let E=_.database||_.schema;u[E]||(Et.warn(`Database ${E} not found for node ${i.name}, making a subscription anyway`),d(E,!1))}function d(_,E){Et.trace("Setting up replication for database",_,"on node",i.name);let f=l.get(_),h,T=[{replicateByDefault:E,...i}];xp.has(_)&&(T.push({replicateByDefault:E,name:at(),start_time:xp.get(_),end_time:Date.now(),replicates:!0}),xp.delete(_));let m=W_(i,_),g=Di.workers.filter(S=>S.name==="http");if(f?(h=f.worker,f.nodes=T):m&&(t=t%g.length,h=g[t++],l.set(_,{worker:h,nodes:T,url:i.url}),h?.on("exit",()=>{l.get(_)?.worker===h&&(l.delete(_),d(_,E))})),m)setTimeout(()=>{let S={type:"subscribe-to-node",database:_,nodes:T};h?h.postMessage(S):hu(S)},sre);else{Et.info("Node no longer should be used, unsubscribing from node",i.replicates,!!u[_],Sr().primaryStore.get(at())?.replicates),Sr().primaryStore.get(at())?.replicates||(n=!1);let S={type:"unsubscribe-from-node",database:_,url:i.url,name:i.name};h?h.postMessage(S):Fp(S)}}a(d,"onDatabase")}a(s,"onNodeUpdate"),pu=a(function(i){try{Et.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let o=Array.from(Eu.keys()),c=o.sort(),l=c.indexOf(i.name||Qs(i.url));if(l===-1){Et.warn("Disconnected node not found in node map",i.name,o);return}let u=io.get(i.url),d=u?.get(i.database);if(!d){Et.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished)return;let _=d.nodes[0];if(!(_.replicates===!0||_.replicates?.sends||_.subscriptions?.length))return;let E=(l+1)%c.length;for(;l!==E;){let f=c[E],h=Eu.get(f);u=io.get(h.url);let T=u?.get(i.database);if(!T){E=(E+1)%c.length;continue}let{worker:m,nodes:g}=T,S=!1;for(let y of d.nodes){if(g.some(I=>I.name===y.name)){Et.info(`Disconnected node is already failing over to ${f} for ${i.database}`);continue}g.push(y),S=!0}if(!S){Et.info(`Disconnected node ${i.name} has no nodes to fail over to ${f}`);return}d.redirectingTo=T,Et.info(`Failing over ${i.database} from ${i.name} to ${f}`),m?m.postMessage({type:"subscribe-to-node",database:i.database,nodes:g}):hu({database:i.database,nodes:g});return}Et.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(o){Et.error("Error failing over node",o)}},"disconnectedFromNode"),Nc=a(function(i){let o=io.get(i.url),c=o?.get(i.database);if(!c){Et.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,o);return}if(c.connected=!0,c.latency=i.latency,c.catchingUpFrom=i.lastSendTime,c.redirectingTo){let{worker:l,nodes:u}=c.redirectingTo,d=u.find(_=>_.name===i.name);c.redirectingTo=null,d&&(u.splice(u.indexOf(d),1),l?l.postMessage({type:"subscribe-to-node",database:i.database,nodes:u}):hu({database:i.database,nodes:u}))}},"connectedToNode"),(0,Di.onMessageByType)("disconnected-from-node",pu),(0,Di.onMessageByType)("connected-to-node",Nc),(0,Di.onMessageByType)("request-cluster-status",DB)}function DB(e,t){let r=[];for(let[n,s]of Eu)try{let i=io.get(s.url);Et.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:d,nodes:_,latency:E,catchingUpFrom:f}]of i)o.push({database:l,connected:d,latency:E,catching_up_from:f?new Date(f).toISOString():"up-to-date",thread_id:u?.threadId,nodes:_.map(h=>h.name)});let c=(0,Ny.cloneDeep)(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){Et.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function oo(e,t){let r=Sr();e=e??Qs(t.url),t.name=e;try{if(t.ca){let s=new PB.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subject_alt_name:s.subjectAltName,serial_number:s.serialNumber,valid_from:s.validFrom,valid_to:s.validTo}}}catch(s){Et.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(Et.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.put(t);else{t.replicates&&!wB.default.get(CB.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=(0,Ny.cloneDeep)(n[s]);for(let c of t[s]){let l=!1;for(let u of o)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...o,...i];break}Et.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Di,kp,Et,Ny,wB,CB,PB,sre,io,pu,Nc,Eu,xp,z_=Ie(()=>{Pe();Di=M(ot());ds();kp=require("worker_threads");fu();Et=M(K()),Ny=require("lodash"),wB=M(ne()),CB=M(L()),PB=require("crypto"),sre=200,io=new Map,Eu=new Map,xp=new Map;a(Iy,"startOnMainThread");a(DB,"requestClusterStatus");kp.parentPort&&(pu=a(e=>{kp.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Nc=a(e=>{kp.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Di.onMessageByType)("subscribe-to-node",e=>{hu(e)}),(0,Di.onMessageByType)("unsubscribe-from-node",e=>{Fp(e)}));a(oo,"ensureNode")});var Q_=O((XIe,MB)=>{"use strict";var ire=L().OPERATIONS_ENUM,wy=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=ire.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};MB.exports=wy});var vB=O((ewe,UB)=>{"use strict";var ore={OPERATION:"operation",REFRESH:"refresh"},Cy=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Py=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};UB.exports={JWTTokens:Cy,TOKEN_TYPE_ENUM:ore,JWTRSAKeys:Py}});var mu=O((rwe,kB)=>{"use strict";var X_=require("jsonwebtoken"),Dy=require("fs-extra"),Ly=te(),_s=L(),{handleHDBError:fn,hdb_errors:are}=_e(),{HTTP_STATUS_CODES:En,AUTHENTICATION_ERROR_MSGS:hn}=are,J_=K(),BB=Kh(),vy=xn(),cre=Vr().update,lre=Q_(),ure=to(),{UserEventMsg:dre}=$s(),sa=ne();sa.initSync();var My=require("path"),{JWTTokens:_re,JWTRSAKeys:fre,TOKEN_TYPE_ENUM:Gp}=vB(),Ere=sa.get(_s.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?sa.get(_s.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",hre=sa.get(_s.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?sa.get(_s.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",qp="RS256",Uy;kB.exports={createTokens:pre,validateOperationToken:Sre,refreshOperationToken:mre,validateRefreshToken:xB,getJWTRSAKeys:Z_};async function pre(e){if(Ly.isEmpty(e)||typeof e!="object")throw fn(new Error,hn.INVALID_AUTH_OBJECT,En.BAD_REQUEST,void 0,void 0,!0);if(Ly.isEmpty(e.username))throw fn(new Error,hn.USERNAME_REQUIRED,En.BAD_REQUEST,void 0,void 0,!0);if(Ly.isEmpty(e.password))throw fn(new Error,hn.PASSWORD_REQUIRED,En.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await vy.findAndValidateUser(e.username,e.password),!t)throw fn(new Error,hn.INVALID_CREDENTIALS,En.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw J_.error(E),fn(new Error,hn.INVALID_CREDENTIALS,En.UNAUTHORIZED,void 0,void 0,!0)}let r=await Z_(),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 HB(i,r.private_key,r.passphrase),c=await X_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:hre,algorithm:qp,subject:Gp.REFRESH}),l=BB.hash(c),u=new lre(_s.SYSTEM_SCHEMA_NAME,_s.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),d,_;try{d=await cre(u)}catch(E){J_.error(E),_=E}if(_!==void 0||d.skipped_hashes.length>0)throw fn(new Error,hn.REFRESH_TOKEN_SAVE_FAILED,En.INTERNAL_SERVER_ERROR);return ure.signalUserChange(new dre(process.pid)),new _re(o,c)}a(pre,"createTokens");async function HB(e,t,r){return await X_.sign(e,{key:t,passphrase:r},{expiresIn:Ere,algorithm:qp,subject:Gp.OPERATION})}a(HB,"signOperationToken");async function Z_(){if(Uy===void 0)try{let e=My.join(sa.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,_s.JWT_ENUM.JWT_PASSPHRASE_NAME),t=My.join(sa.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,_s.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=My.join(sa.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,_s.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await Dy.readFile(e)).toString(),s=(await Dy.readFile(t)).toString(),i=(await Dy.readFile(r)).toString();Uy=new fre(i,s,n)}catch(e){throw J_.error(e),fn(new Error,hn.NO_ENCRYPTION_KEYS,En.INTERNAL_SERVER_ERROR)}return Uy}a(Z_,"getJWTRSAKeys");async function mre(e){if(!e)throw fn(new Error,hn.INVALID_BODY,En.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw fn(new Error,hn.REFRESH_TOKEN_REQUIRED,En.BAD_REQUEST,void 0,void 0,!0);await xB(e.refresh_token);let t=await Z_(),r=await X_.decode(e.refresh_token);return{operation_token:await HB({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(mre,"refreshOperationToken");async function Sre(e){try{let t=await Z_(),r=await X_.verify(e,t.public_key,{algorithms:qp,subject:Gp.OPERATION});return await vy.findAndValidateUser(r.username,void 0,!1)}catch(t){throw J_.warn(t),t.name&&t.name==="TokenExpiredError"?fn(new Error,hn.TOKEN_EXPIRED,En.FORBIDDEN):fn(new Error,hn.INVALID_TOKEN,En.UNAUTHORIZED)}}a(Sre,"validateOperationToken");async function xB(e){let t;try{let r=await Z_(),n=await X_.verify(e,r.public_key,{algorithms:qp,subject:Gp.REFRESH});t=await vy.findAndValidateUser(n.username,void 0,!1)}catch(r){throw J_.warn(r),r.name&&r.name==="TokenExpiredError"?fn(new Error,hn.TOKEN_EXPIRED,En.FORBIDDEN):fn(new Error,hn.INVALID_TOKEN,En.UNAUTHORIZED)}if(!BB.validate(t.refresh_token,e))throw fn(new Error,hn.INVALID_TOKEN,En.UNAUTHORIZED);return t}a(xB,"validateRefreshToken")});var Zs=O(uH=>{"use strict";var ir=require("path"),{watch:Tre}=require("chokidar"),pn=require("fs-extra"),Su=require("node-forge"),YB=require("net"),{generateKeyPair:Hy,X509Certificate:ao,createPrivateKey:WB}=require("crypto"),gre=require("util");Hy=gre.promisify(Hy);var bt=Su.pki,Js=require("joi"),{v4:jB}=require("uuid"),{validateBySchema:Gy}=_t(),St=K(),Es=ne(),hs=L(),{CONFIG_PARAMS:Tu}=hs,Xs=UR(),{ClientError:oa}=_e(),wc=require("node:tls"),{relative:zB,join:Rre}=require("node:path"),{CERT_PREFERENCE_APP:swe,CERTIFICATE_VALUES:FB}=Xs,Are=Qa(),xy=Ct(),GB=parseInt(process.version.slice(1))<20,{table:yre,getDatabases:bre,databases:By}=(Pe(),oe(ut)),{getJWTRSAKeys:qB}=mu();Object.assign(uH,{generateKeys:Vy,updateConfigCert:nH,createCsr:Dre,signCertificate:Lre,setCertTable:gu,loadCertificates:eH,reviewSelfSignedCert:Yy,createTLSSelector:oH,listCertificates:cH,addCertificate:xre,removeCertificate:Fre,createNatsCerts:vre,generateCertsKeys:Ure,getReplicationCert:tf,getReplicationCertAuth:Pre,renewSelfSigned:Bre,hostnamesFromCert:lH,getKey:Gre});var{urlToNodeName:QB,getThisNodeUrl:Ore,getThisNodeName:Vp,clearThisNodeName:Nre}=(ds(),oe(la)),{readFileSync:Ire,statSync:JB}=require("node:fs"),iwe=ne(),{getTicketKeys:wre,onMessageFromWorkers:Cre}=ot(),ia=K(),{isMainThread:XB}=require("worker_threads"),{TLSSocket:ZB,createSecureContext:owe}=require("node:tls"),qy=3650,ef=["127.0.0.1","localhost","::1"],$y=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];Cre(async e=>{e.type===hs.ITC_EVENT_TYPES.RESTART&&(Es.initSync(!0),await Yy())});var Dr;function ca(){return Dr||(Dr=bre().system.hdb_certificate,Dr||(Dr=yre({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),Dr}a(ca,"getCertTable");async function tf(){let e=oH("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(Vp());if(!r)return;let n=new ao(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(tf,"getReplicationCert");async function Pre(){ca();let e=(await tf()).options.cert,r=new ao(e).issuer.match(/CN=(.*)/)?.[1];return Dr.get(r)}a(Pre,"getReplicationCertAuth");var $B,aa=new Map;function eH(){if($B)return;$B=!0;let e=[{configKey:Tu.TLS},{configKey:Tu.OPERATIONSAPI_TLS}];ca();let t=ir.dirname(xy.getConfigFilePath()),r;for(let{configKey:n}of e){let s=xy.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&zB(Rre(t,"keys"),o);c&&VB(o,l=>{aa.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&XB){let d;VB(u,_=>{if(FB.cert===_)return;let E=i.hostname??i.hostnames??i.host??i.hosts;E&&!Array.isArray(E)&&(E=[E]);let f=sH(u),h=new ao(f),T;try{T=Wy(h)}catch(y){St.error("error extracting common name from certificate",y);return}if(T==null){St.error("error extracting common name from certificate");return}if(h.checkIssued(new ao(FB.cert)))return;let m=Dr.primaryStore.get(T),g=JB(u).mtimeMs,S=!m||m.is_self_signed?1:m.file_timestamp??m.__updatedtime__;if(m&&g<=S){g<S&&St.info(`Certificate ${T} at ${u} is older (${new Date(g)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=Dr.put({name:T,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:f,private_key_name:c,is_authority:l,hostnames:E,file_timestamp:g,details:{issuer:h.issuer.replace(/\n/g," "),subject:h.subject.replace(/\n/g," "),subject_alt_name:h.subjectAltName,serial_number:h.serialNumber,valid_from:h.validFrom,valid_to:h.validTo}})},l?"certificate authority":"certificate")}}}}}return r}a(eH,"loadCertificates");function VB(e,t,r){let n,s=a((i,o)=>{try{let c=o.mtimeMs;c&&c!==n&&(n&&XB&&St.warn(`Reloading ${r}:`,i),n=c,t(sH(i)))}catch(c){St.error(`Error loading ${r}:`,i,c)}},"loadFile");pn.existsSync(e)?s(e,JB(e)):St.error(`${r} file not found:`,e),Tre(e,{persistent:!1}).on("change",s)}a(VB,"loadAndWatch");function ky(){let e=Ore();if(e==null){let t=ef[0];return St.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return QB(e)}a(ky,"getHost");function $p(){let e=Vp();if(e==null){let t=ef[0];return St.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a($p,"getCommonName");async function Dre(){let e=await tf(),t=bt.certificateFromPem(e.options.cert),r=bt.privateKeyFromPem(e.options.key);St.info("Creating CSR with cert named:",e.name);let n=bt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:$p()},...$y];St.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:tH()}];return St.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Su.pki.certificationRequestToPem(n)}a(Dre,"createCsr");function tH(){let e=ef.includes($p())?ef:[...ef,$p()];return e.includes(ky())||e.push(ky()),[{name:"basicConstraints",cA:!1,critical:!0},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0,critical:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"nsCertType",client:!0,server:!0},{name:"subjectAltName",altNames:e.map(t=>YB.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(tH,"certExtensions");async function Lre(e){let t={},r=ir.join(Es.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;ca();for await(let d of Dr.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(aa.has(d.private_key_name)){n=aa.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await pn.exists(ir.join(r,d.private_key_name))){n=pn.readFile(ir.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await Fy();s=d.ca,n=d.private_key}n=bt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=bt.certificateFromPem(s.certificate);St.info("Signing CSR with cert named",s.name);let o=bt.certificationRequestFromPem(e.csr);try{o.verify()}catch(d){return St.error(d),new Error("Error verifying CSR: "+d.message)}let c=Su.pki.createCertificate();c.serialNumber=Math.random().toString().slice(2,10),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+qy),St.info("sign cert setting validity:",c.validity),St.info("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),St.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;St.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,Su.md.sha256.create()),t.certificate=bt.certificateToPem(c)}else St.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(Lre,"signCertificate");async function Mre(e,t){await gu({name:Vp(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await gu({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:bt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(Mre,"createCertificateTable");async function gu(e){let t=new ao(e.certificate);e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},ca(),await Dr.patch(e)}a(gu,"setCertTable");async function Vy(){let e=await Hy("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{public_key:bt.publicKeyFromPem(e.publicKey),private_key:bt.privateKeyFromPem(e.privateKey)}}a(Vy,"generateKeys");async function Ky(e,t,r){let n=bt.createCertificate();if(!t){let o=await tf();t=bt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+qy);let i=[{name:"commonName",value:$p()},...$y];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(tH()),n.sign(e,Su.md.sha256.create()),bt.certificateToPem(n)}a(Ky,"generateCertificates");async function Fy(){let e=await cH(),t;for(let r of e){if(!r.is_authority)continue;let n=await aH(r.private_key_name);if(r.private_key_name&&n&&new ao(r.certificate).checkPrivateKey(WB(n))){St.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;St.trace("No CA found with matching private key")}a(Fy,"getCertAuthority");async function rH(e,t,r=!0){let n=bt.createCertificate();n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+qy);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${Es.get(Tu.REPLICATION_HOSTNAME)??QB(Es.get(Tu.REPLICATION_URL))??jB().split("-")[0]}`},...$y];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,Su.md.sha256.create());let o=ir.join(Es.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),c=ir.join(o,Xs.PRIVATEKEY_PEM_NAME);return r&&await pn.writeFile(c,bt.privateKeyToPem(e)),n}a(rH,"generateCertAuthority");async function Ure(){let{private_key:e,public_key:t}=await Vy(),r=await rH(e,t),n=await Ky(e,t,r);await Mre(n,r),nH()}a(Ure,"generateCertsKeys");async function vre(){let e=await Ky(bt.privateKeyFromPem(Xs.CERTIFICATE_VALUES.key),void 0,bt.certificateFromPem(Xs.CERTIFICATE_VALUES.cert)),t=ir.join(Es.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),r=ir.join(t,Xs.NATS_CERTIFICATE_PEM_NAME);await pn.exists(r)||await pn.writeFile(r,e);let n=ir.join(t,Xs.NATS_CA_PEM_NAME);await pn.exists(n)||await pn.writeFile(n,Xs.CERTIFICATE_VALUES.cert)}a(vre,"createNatsCerts");async function Bre(){ca();for await(let e of Dr.search([{attribute:"is_self_signed",value:!0}]))await Dr.delete(e.name);await Yy()}a(Bre,"renewSelfSigned");async function Yy(){Nre(),await eH(),ca();let e=await Fy();if(!e){St.notify("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=Es.get(Tu.TLS_PRIVATEKEY),n=ir.join(Es.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),s,i=zB(n,r);try{s=bt.privateKeyFromPem(await pn.readFile(r))}catch(c){St.warn("Unable to parse the TLS key",r,"A new key will be generated and used to create Certificate Authority",c),{private_key:s}=await Vy(),await pn.exists(ir.join(n,Xs.PRIVATEKEY_PEM_NAME))&&(i=`privateKey${jB().split("-")[0]}.pem`),await pn.writeFile(ir.join(n,i),bt.privateKeyToPem(s))}let o=await rH(s,bt.setRsaPublicKey(s.n,s.e),!1);await gu({name:o.subject.getField("CN").value,uses:["https"],certificate:bt.certificateToPem(o),private_key_name:i,is_authority:!0,is_self_signed:!0})}if(!await tf()){let r=Vp();St.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await Fy();let n=bt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await Ky(bt.privateKeyFromPem(e.private_key),s,n);await gu({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(Yy,"reviewSelfSignedCert");function nH(){let e=Are(Object.keys(hs.CONFIG_PARAM_MAP),!0),t=ir.join(Es.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),r=ir.join(t,Xs.PRIVATEKEY_PEM_NAME),n=ir.join(t,Xs.NATS_CERTIFICATE_PEM_NAME),s=ir.join(t,Xs.NATS_CA_PEM_NAME),i=hs.CONFIG_PARAMS,o={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(o[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(o[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,o[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,o[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),xy.updateConfigValue(void 0,void 0,o,!1,!0)}a(nH,"updateConfigCert");function sH(e){return e.startsWith("-----BEGIN")?e:Ire(e,"utf8")}a(sH,"readPEM");var KB=wc.createSecureContext;wc.createSecureContext=function(e){if(!e.cert||!e.key)return KB(e);let t={...e};delete t.key,delete t.cert;let r=KB(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var iH=wc.Server;wc.Server=function(e,t){return e.ALPNCallback&&(e.ALPNProtocols=null),iH.call(this,e,t)};wc.Server.prototype=iH.prototype;var Hre=ZB.prototype._init;ZB.prototype._init=function(e,t){Hre.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,o)=>{this.sni_context=o?.context||o,this.certCbDone()})}};var Ic=new Map;function oH(e,t){let r=new Map,n,s=!1;return i.initialize=o=>i.ready?i.ready:(o&&(o.secureContexts=r,o.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),Ic.clear();let d=0;for await(let _ of By.system.hdb_certificate.search([])){let E=_.certificate,f=new ao(E);_.is_authority&&(f.asString=E,Ic.set(f.subject,E))}for await(let _ of By.system.hdb_certificate.search([]))try{if(_.is_authority)continue;let E=e==="operations-api",f=_.is_self_signed?1:2;E&&_.uses?.includes?.("operations")&&(f+=1);let h=await aH(_.private_key_name),T=_.certificate,m=new ao(T);if(Ic.has(m.issuer)&&(T+=`
|
|
15
15
|
`+Ic.get(m.issuer)),!h||!T)throw new Error("Missing private key or certificate for secure server");let g={ciphers:_.ciphers,ticketKeys:wre(),availableCAs:Ic,ca:t&&Array.from(Ic.values()),cert:T,key:h,key_file:_.private_key_name,is_self_signed:_.is_self_signed};o&&(g.sessionIdContext=o.sessionIdContext);let S=wc.createSecureContext(g);S.name=_.name,S.options=g,S.quality=f,S.certificateAuthorities=Array.from(Ic),S.certStart=T.toString().slice(0,100);let y=_.hostnames??lH(m);Array.isArray(y)||(y=[y]);let I;for(let U of y)if(U){U[0]==="*"&&(s=!0,U=U.slice(1)),U===ky()&&(f+=2),YB.isIP(U)&&(I=!0);let H=r.get(U)?.quality??0;f>H&&r.set(U,S)}else ia.error("No hostname found for certificate at",wc.certificate);ia.trace("Adding TLS",S.name,"for",o.ports||"client","cert named",_.name,"hostnames",y,"quality",f,"best quality",d),f>d&&(i.defaultContext=n=S,d=f,o&&(o.defaultContext=S))}catch(E){ia.error("Error applying TLS for",_.name,E)}o?.secureContextsListeners.forEach(_=>_()),c(n)}catch(d){l(d)}}a(u,"updateTLS"),By.system.hdb_certificate.subscribe({listener:a(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(o,c){ia.info("TLS requested for",o||"(no SNI)",this.isReplicationConnection);let l=o;for(;;){let d=r.get(l);if(d)return ia.debug("Found certificate for",o,d.certStart),d.replicationContext&&(this.isReplicationConnection||GB)&&(d=d.replicationContext),c(null,d);if(s&&l){let _=l.indexOf(".",1);_<0?l="":l=l.slice(_)}else break}o?ia.debug("No certificate found to match",o,"using the default certificate"):ia.debug("No SNI, using the default certificate",n?.name);let u=n;u?u.replicationContext&&(this.isReplicationConnection||GB)&&(u=u.replicationContext):ia.info("No default certificate found"),c(null,u)}a(i,"SNICallback")}a(oH,"createTLSSelector");async function aH(e){let t=aa.get(e);return!t&&e?await pn.readFile(ir.join(Es.get(Tu.ROOTPATH),hs.LICENSE_KEY_DIR_NAME,e),"utf8"):t}a(aH,"getPrivateKeyByName");async function cH(){ca();let e=[];for await(let t of Dr.search([]))e.push(t);return e}a(cH,"listCertificates");async function xre(e){let t=Gy(e,Js.object({name:Js.string().required(),certificate:Js.string().required(),is_authority:Js.boolean().required(),private_key:Js.string(),hosts:Js.array(),uses:Js.array()}));if(t)throw new oa(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,o=new ao(n),c=!1,l=!1,u;for(let[f,h]of aa)!s&&!c&&o.checkPrivateKey(WB(h))&&(c=!0,u=f),s&&s===h&&(l=!0,u=f);if(!i&&!s&&!c)throw new oa("A suitable private key was not found for this certificate");let d;if(!r){try{d=Wy(o)}catch(f){St.error(f)}if(d==null)throw new oa("Error extracting certificate common name, please provide a name parameter")}let _=kre(r??d);s&&!c&&!l&&(await pn.writeFile(ir.join(Es.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME,_+".pem"),s),aa.set(_,s));let E={name:r??d,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(E.private_key_name=u??_+".pem"),await gu(E),"Successfully added certificate: "+_}a(xre,"addCertificate");function kre(e){return e.replace(/[^a-z0-9\.]/gi,"-")}a(kre,"sanitizeName");async function Fre(e){let t=Gy(e,Js.object({name:Js.string().required()}));if(t)throw new oa(t.message);let{name:r}=e;ca();let n=await Dr.get(r);if(!n)throw new oa(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await Dr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(St.info("Removing private key named",s),await pn.remove(ir.join(Es.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME,s)))}return await Dr.delete(r),"Successfully removed "+r}a(Fre,"removeCertificate");function Wy(e){return e.subject.match(/CN=(.*)/)?.[1]}a(Wy,"extractCommonName");function lH(e){return e.subjectAltName?e.subjectAltName.split(",").map(t=>{let r=t.indexOf(":");if(t=t.slice(r+1),t=t.trim(),t[0]==='"')try{t=JSON.parse(t)}catch{}return t.indexOf("=")>-1?t.match(/CN=([^,]*)/)?.[1]:t}).filter(t=>t):[Wy(e)]}a(lH,"hostnamesFromCert");async function Gre(e){if(e.bypass_auth!==!0)throw new oa("Unauthorized","401");let t=Gy(e,Js.object({name:Js.string().required()}));if(t)throw new oa(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await qB()).private_key;if(r===".jwtPublic")return(await qB()).public_key;if(aa.get(r))return aa.get(e.name);throw new oa("Key not found")}a(Gre,"getKey")});async function Zy(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=at(),i;if(e.includes("wss://")){if(!zy){let l=(0,IH.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),zy=u.secureContexts}if(i=zy.get(s),i&&fe.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let o={};r&&(o.Authorization=r);let c={headers:o,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,CH.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,ALPNProtocols:["http/1.1","harperdb-replication"],rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(c.secureContext=wH.createSecureContext({...i.options,ca:Array.from(Pc)})),new OH.WebSocket(e,"harperdb-replication-v1",c)}function zp(e,t,r){let n=t.port||t.securePort,s=Xy.pid%1e3+"-"+NH.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3),i=0,o=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(o.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||Cc,_,E,f=!1,h=t.subscription;h?.then&&h.then(ie=>h=ie);let T=t.tables||u&&dt()[u];if(!r){fe.error?.("No authorization provided"),is(1008,"Unauthorized");return}let m=new Map,g=[],S=r.name;S&&t.connection&&(t.connection.nodeName=S);let y,I,U,H,X,W,V=1e3,se,Q=0,de=0,j=0,ae=0;if(t.url){let ie=a(()=>{X&&j===e._socket?.bytesRead&&ae===e._socket?.bytesWritten?e.terminate():(X=performance.now(),e.ping(),j=e._socket?.bytesRead,ae=e._socket?.bytesWritten)},"send_ping");U=setInterval(ie,RH).unref(),ie()}else Oe();function Oe(){clearTimeout(H),j=e._socket?.bytesRead,ae=e._socket?.bytesWritten,H=setTimeout(()=>{j===e._socket?.bytesRead&&ae===e._socket?.bytesWritten&&(fe.warn?.(`Timeout waiting for ping from ${S}, terminating connection and reconnecting`),e.terminate())},RH*2).unref()}a(Oe,"resetPingTimer"),u&&Wa(u);let Ne,Me,Gr=[],Dd=[],qa,wn=[],Ld=[],wl=[],Xw=150,eh=0,vt=0,$a,Va,Bs,Hs,th;e.on("message",ie=>{Q=performance.now();try{let Se=ie.dataView=new Dc(ie.buffer,ie.byteOffset,ie.byteLength);if(ie[0]>127){let R=(0,lt.decode)(ie),[w,A,b]=R;switch(w){case _H:{if(A){if(S){if(S!==A){fe.error?.(s,`Node name mismatch, expecting to connect to ${S}, but peer reported name as ${A}, disconnecting`),e.send((0,lt.encode)([Ru])),is(1008,"Node name mismatch");return}}else if(S=A,t.connection?.tentativeNode){let x=t.connection.tentativeNode;x.name=S,t.connection.tentativeNode=null,oo(S,x)}if(t.connection&&(t.connection.nodeName=S),fe.debug?.(s,"received node name:",S,"db:",u),!u)try{Wa(u=R[2]),u==="system"&&(Ne=ra(t,(x,q)=>{Ya(q)&&Ir(q)}),e.on("close",()=>{Ne?.remove()}))}catch(x){fe.warn?.(s,"Error setting database",x),e.send((0,lt.encode)([Ru])),is(1008,x.message);return}Ka()}break}case TH:{fe.debug?.(s,"Received table definitions for",A.map(x=>x.table));for(let x of A){let q=R[2];x.database=q;let ee;Ya(q)&&(q==="system"?We[q]?.[x.table]||(ee=Qy(x,We[q]?.[x.table])):ee=Qy(x,We[q]?.[x.table]),_||(_=ee?.auditStore),T||(T=dt()?.[q]))}break}case Ru:is();break;case pH:try{let x=r?.replicates||r?.subscribers||r?.name;server.operation(A,{user:r},!x).then(q=>{Array.isArray(q)&&(q={results:q}),q.requestId=A.requestId,e.send((0,lt.encode)([Yp,q]))},q=>{e.send((0,lt.encode)([Yp,{requestId:A.requestId,error:q instanceof Error?q.toString():q}]))})}catch(x){e.send((0,lt.encode)([Yp,{requestId:A.requestId,error:x instanceof Error?x.toString():x}]))}break;case Yp:let{resolve:P,reject:N}=m.get(A.requestId);A.error?N(new Error(A.error)):P(A),m.delete(A.requestId);break;case jy:let B=R[3];T||(u?fe.error?.(s,"No tables found for",u):fe.error?.(s,"Database name never received"));let k=T[B];k=Qy({table:B,database:u,attributes:A.attributes,schemaDefined:A.schemaDefined},k),Gr[b]={name:B,decoder:new lt.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:A.typedStructs,structures:A.structures}),getEntry(x){return k.primaryStore.getEntry(x)},rootStore:k.primaryStore.rootStore};break;case fH:th=_?fB(S,A,_):new Map,qa=R[2],fe.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${qa}`);break;case EH:let C=b;wl[C]=A;break;case SH:let F=["replicated",u,S];E||(E=new Float64Array(_.getUserSharedBuffer(F,new ArrayBuffer(8)))),E[0]=A,fe.trace?.(s,"received and broadcasting committed update",A),E.buffer.notify();break;case mH:y=A,h.send({type:"end_txn",localTime:y,remoteNodeIds:g});break;case hH:{let x=A,q;try{let ee=R[3],G=Dd[b]||(Dd[b]=T[R[4]]);if(!G)return fe.warn?.("Unknown table id trying to handle record request",b);let Ae=G.primaryStore.getBinaryFast(Symbol.for("structures")),Ee=Ae.length;if(Ee!==vt){vt=Ee;let re=(0,lt.decode)(Ae);e.send((0,lt.encode)([jy,{typedStructs:re.typed,structures:re.named},b,G.tableName]))}let Re=G.primaryStore.getBinaryFast(ee);if(Re){let re=G.primaryStore.decoder.decode(Re,{valueAsBuffer:!0});q=(0,lt.encode)([Kp,x,{value:re.value,expiresAt:re.expiresAt,version:re.version,residencyId:re.residencyId,nodeId:re.nodeId,user:re.user}])}else q=(0,lt.encode)([Kp,x])}catch(ee){q=(0,lt.encode)([Kp,x,{error:ee.message}])}e.send(q);break}case Kp:{let{resolve:x,reject:q,tableId:ee,key:G}=m.get(R[1]),Ae=R[2];if(Ae?.error)q(new Error(Ae.error));else if(Ae){let Ee=Gr[ee].decoder.decode(Ae.value);Ae.value=Ee,Ae.key=G,x(Ae)}else x();m.delete(R[1]);break}case dH:{Hs=A;let x,q,ee=!1;if(h){if(u!==h.databaseName&&!h.then){fe.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(fe.debug?.(s,"received subscription request for",u,"at",Hs),!h){let ce;h=new Promise(Ye=>{fe.debug?.("Waiting for subscription to database "+u),ce=Ye}),h.ready=ce,Cc.set(u,h)}if(r.name)q=Sr().subscribe(r.name),q.then(async ce=>{x=ce;for await(let Ye of x){let rt=Ye.value;if(!(rt?.replicates===!0||rt?.replicates?.receives||rt?.subscriptions?.some(Ze=>(Ze.database||Ze.schema)===u&&Ze.publish!==!1))){ee=!0,e.send((0,lt.encode)([Ru])),is(1008,`Unauthorized database subscription to ${u}`);return}}},ce=>{fe.error?.(s,"Error subscribing to HDB nodes",ce)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,lt.encode)([Ru])),is(1008,`Unauthorized database subscription to ${u}`);return}if(Bs&&(fe.debug?.(s,"stopping previous subscription",u),Bs.emit("close")),Hs.length===0)return;let G=Hs[0],Ae=a(ce=>{if(ce&&(G.replicateByDefault?!G.tables.includes(ce.tableName):G.tables.includes(ce.tableName)))return{table:ce}},"tableToTableEntry"),Ee={txnTime:0},Re,re,Y=1/0,ge,Be=a((ce,Ye)=>{if(Y=Ye,ce.type==="end_txn"){Ee.txnTime&&(o[i]!==66&&fe.error?.("Invalid encoding of message"),_i(9),_i(jp),ja(ge=Ye),we()),i=c,Ee.txnTime=0;return}let rt=ce.nodeId,Ze=ce.tableId,st=re[Ze];if(!st&&(st=re[Ze]=Ae(h.tableById[Ze]),!st))return fe.debug?.("Not subscribed to table",Ze);let Bt=st.table,ko=Bt.primaryStore,Wt=ko.encoder;(ce.extendedType&Oh||!Wt.typedStructs)&&(Wt._mergeStructures(Wt.getStructures()),Wt.typedStructs&&(Wt.lastTypedStructuresLength=Wt.typedStructs.length));let rh=Re[rt];if(!(rh&&rh.startTime<Ye&&(!rh.endTime||rh.endTime>Ye)))return rf&&fe.trace?.(s,"skipping replication update",ce.recordId,"to:",S,"from:",rt,"subscribed:",Re),Zw();rf&&fe.trace?.(s,"sending replication update",ce.recordId,"to:",S,"from:",rt,"subscribed:",Re);let cg=ce.version;Ee.txnTime!==cg&&(Ee.txnTime&&(rf&&fe.trace?.(s,"new txn time, sending queued txn",Ee.txnTime),o[i]!==66&&fe.error?.("Invalid encoding of message"),we()),Ee.txnTime=cg,i=c,ja(cg));let za=ce.residencyId,lg=ji(za,Bt),nh;if(lg&&!lg.includes(S)){let Pl=ji(ce.previousResidencyId,Bt);if(Pl&&!Pl.includes(S)&&(ce.type==="put"||ce.type==="patch")||Bt.getResidencyById)return Zw();let Bd=ce.recordId;fe.trace?.(s,"sending invalidation",Bd,S,"from",rt);let _g=0;za&&(_g|=ec),ce.previousResidencyId&&(_g|=tc);let fg,sh=null;for(let eC in Bt.indices){if(!sh){if(fg=ce.getValue(ko,!0),!fg)break;sh={}}sh[eC]=fg[eC]}nh=Ul(ce.version,Ze,Bd,null,rt,ce.user,ce.type==="put"||ce.type==="patch"?"invalidate":ce.type,Wt.encode(sh),_g,za,ce.previousResidencyId,ce.expiresAt)}function Zw(){fe.trace?.(s,"skipping audit record",ce.recordId),W||(W=setTimeout(()=>{W=null,(ge||0)+gH/2<Y&&(rf&&fe.trace?.(s,"sending skipped sequence update",Y),e.send((0,lt.encode)([mH,Y])))},gH).unref())}a(Zw,"skipAuditRecord");let ug=Wt.typedStructs,dg=Wt.structures;if((ug?.length!=st.typed_length||dg?.length!=st.structure_length)&&(st.typed_length=ug?.length,st.structure_length=dg.length,fe.debug?.(s,"send table struct",st.typed_length,st.structure_length),st.sentName||(st.sentName=!0),e.send((0,lt.encode)([jy,{typedStructs:ug,structures:dg,attributes:Bt.attributes,schemaDefined:Bt.schemaDefined},Ze,st.table.tableName]))),za&&!Ld[za]&&(e.send((0,lt.encode)([EH,lg,za])),Ld[za]=!0),nh)_i(nh.length),vd(nh);else{let Pl=ce.encoded,Bd=Pl[0]===66?8:0;_i(Pl.length-Bd),vd(Pl,Bd)}},"sendAuditRecord"),we=a(()=>{c-i>8?(e.send(o.subarray(i,c)),fe.debug?.(s,"Sent message, size:",c-i)):fe.debug?.(s,"skipping empty transaction")},"sendQueuedData");Bs=new Jy.EventEmitter,Bs.once("close",()=>{ee=!0,x?.end()});for(let{startTime:ce}of Hs)ce<Y&&(Y=ce);(q||Promise.resolve()).then(async()=>{h=await h,_=h.auditStore,re=h.tableById.map(Ae),Re=[];for(let{name:Ye,startTime:rt,endTime:Ze}of Hs){let st=Bp(Ye,_);fe.debug?.("subscription to",Ye,"using local id",st,"starting",rt),Re[st]={startTime:rt,endTime:Ze}}Ir(u),Ne||(Ne=Lc(Ye=>{Ye.databaseName===u&&Ir(u)}),Me=nf(Ye=>{Ye===u&&(e.send((0,lt.encode)([Ru])),is())}),e.on("close",()=>{Ne?.remove(),Me?.remove()})),e.send((0,lt.encode)([fH,K_(h.auditStore),Hs.map(({name:Ye})=>Ye)]));let ce=!0;do{isFinite(Y)||(fe.warn?.("Invalid sequence id "+Y),is(1008,"Invalid sequence id"+Y));let Ye;if(ce&&!ee&&(ce=!1,!(eb(_)<=Y)&&yH.default.get(bH.CONFIG_PARAMS.REPLICATION_COPYTABLESTOCATCHUP)!==!1&&server.nodes[0]?.name===S)){fe.info?.("Replicating all tables to",S);let Ze=Y,st=Qp(_);for(let Bt in T){if(!Ae(Bt))continue;let ko=T[Bt];for(let Wt of ko.primaryStore.getRange({snapshot:!1})){if(ee)return;Wt.localTime>=Y&&(fe.trace?.(s,"Copying record from",u,Bt,Wt.key,Wt.localTime),Ze=Math.max(Wt.localTime,Ze),Ye=!0,Be({recordId:Wt.key,tableId:ko.tableId,type:"put",getValue(){return Wt.value},encoded:ko.primaryStore.getBinary(Wt.key),version:Wt.version,residencyId:Wt.residencyId,nodeId:st},Wt.localTime))}}Y=Ze}for(let{key:rt,value:Ze}of _.getRange({start:Y||1,exclusiveStart:!0,snapshot:!1})){if(ee)return;de=rt;let st=xt(Ze);Be(st,rt),e._socket.writableNeedDrain?await new Promise(Bt=>e._socket.once("drain",Bt)):await new Promise(setImmediate),Bs.startTime=rt,Ye=!0}Ye&&Be({type:"end_txn"},Y),de=0,await RB(_)}while(!ee)}).catch(ce=>{fe.error?.(s,"Error handling subscription to node",ce),is(1008,"Error handling subscription to node")});break}}return}Se.position=8;let tt=!0,v,p;do{let R=Se.readInt();if(R===9&&Se.getUint8(Se.position)==jp){Se.position++,y=p=Se.readFloat64(),fe.trace?.("received remote sequence update",y,u);break}let w=Se.position,A=xt(ie,w,w+R),b=Gr[A.tableId];b||fe.error?.(`No table found with an id of ${A.tableId}`);let P;A.residencyId&&(P=wl[A.residencyId],fe.trace?.(s,"received residency list",P,A.type,A.recordId));try{v={table:b.name,id:A.recordId,type:A.type,nodeId:th.get(A.nodeId),residencyList:P,timestamp:A.version,value:A.getValue(b),user:A.user,beginTxn:tt,expiresAt:A.expiresAt}}catch(N){throw N.message+="typed structures for current decoder"+JSON.stringify(b.decoder.typedStructs),N}tt=!1,rf&&fe.trace?.(s,"received replication message",A.type,"id",v.id,"version",A.version,"nodeId",v.nodeId,"value",v.value),h.send(v),Se.position=w+R}while(Se.position<ie.byteLength);eh++,mr(ie.byteLength,"bytes-received",S+"."+u+"."+v.table,"replication","ingest"),eh>Xw&&!$a&&($a=!0,e.pause()),h.send({type:"end_txn",localTime:y,remoteNodeIds:g,onCommit(){if(v){let R=Date.now()-v.timestamp;mr(R,"replication-latency",S+"."+u+"."+v.table,v.type,"ingest")}eh--,$a&&($a=!1,e.resume()),!I&&p&&(fe.trace?.(s,"queuing confirmation of a commit at",p),setTimeout(()=>{e.send((0,lt.encode)([SH,I])),fe.trace?.(s,"sent confirmation of a commit at",I),I=null},qre)),I=p}})}catch(Se){fe.error?.(s,"Error handling incoming replication message",Se)}}),e.on("ping",Oe),e.on("pong",()=>{t.connection&&(t.connection.latency=performance.now()-X,Nc({name:S,database:u,url:t.url,lastSendTime:de,latency:t.connection.latency})),X=null}),e.on("close",(ie,Se)=>{clearInterval(U),clearTimeout(H),Bs&&Bs.emit("close"),Va&&Va.end();for(let[tt,{reject:v}]of m)v(new Error(`Connection closed ${Se?.toString()} ${ie}`));fe.debug?.(s,"closed",ie,Se?.toString())});function Ve(){}a(Ve,"recordRemoteNodeSequence");function is(ie,Se){e.isFinished=!0,e.close(ie,Se)}a(is,"close");function Ka(){if(f||(f=!0,t.connection?.on("subscriptions-updated",Ka)),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let ie=new Map;try{for(let v of h?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let p of v.value.nodes||[])p.lastTxnTime>(ie.get(p.id)??0)&&ie.set(p.id,p.lastTxnTime)}catch(v){if(!v.message.includes("Can not re"))throw v}let Se=t.connection?.nodeSubscriptions?.[0];g=[];let tt=t.connection?.nodeSubscriptions.map((v,p)=>{let R=[],{replicateByDefault:w}=v;if(v.subscriptions){for(let N of v.subscriptions)if(N.subscribe&&(N.schema||N.database)===u){let B=N.table;T?.[B]?.replicate!==!1&&R.push(B)}w=!1}else for(let N in T)(w?T[N].replicate===!1:T[N].replicate)&&R.push(N);let A=_&&Bp(v.name,_),b=h?.dbisDB?.get([Symbol.for("seq"),A])??1,P=Math.max(b?.seqId??1,(typeof v.start_time=="string"?new Date(v.start_time).getTime():v.start_time)??1);if(fe.debug?.("Starting time recorded in db",v.name,A,u,b?.seqId,"start time:",P),Se!==v){P>5e3&&(P-=5e3);let N=_&&Bp(Se.name,_),B=h?.dbisDB?.get([Symbol.for("seq"),N])??1;for(let k of B?.nodes||[])k.name===v.name&&(P=k.seqId,fe.debug?.("Using sequence id from proxy node",Se.name,P))}return g.push(A),ie.get(A)>P&&(P=ie.get(A),fe.debug?.("Updating start time from more recent txn recorded",Se.name,P)),{name:v.name,replicateByDefault:w,tables:R,startTime:P,endTime:v.end_time}});if(tt)if(fe.debug?.(s,"sending subscription request",tt,h?.dbisDB?.path),clearTimeout(se),tt.length>0)e.send((0,lt.encode)([dH,tt]));else{let v=a(()=>{let p=performance.now();se=setTimeout(()=>{Q<=p?is(1008,"No nodes to subscribe to"):v()},V)},"schedule_close");v()}}a(Ka,"sendSubscriptionRequestUpdate");function ji(ie,Se){if(!ie)return;let tt=wn[ie];return tt||(tt=Se.getResidencyRecord(ie),wn[ie]=tt),tt}a(ji,"getResidence");function Ya(ie){return!(ua&&ua!="*"&&!ua[ie]&&!ua.includes?.(ie)&&!ua.some?.(Se=>Se.name===ie))}a(Ya,"checkDatabaseAccess");function Wa(ie){if(h=h||d.get(ie),!Ya(ie))throw new Error(`Access to database "${ie}" is not permitted`);h||fe.warn?.(`No database named "${ie}" was declared and registered`),_=h?.auditStore,T||(T=dt()?.[ie]);let Se=at();if(Se===S)throw Se?new Error("Should not connect to self",Se):new Error("Node name not defined");return Md(Se,ie),!0}a(Wa,"setDatabase");function Md(ie,Se){let tt=dt()?.[Se],v=[];for(let p in tt){let R=tt[p];v.push({table:p,schemaDefined:R.schemaDefined,attributes:R.attributes.map(w=>({name:w.name,type:w.type,isPrimaryKey:w.isPrimaryKey}))})}fe.trace?.("Sending database info for node",ie,"database name",Se),e.send((0,lt.encode)([_H,ie,Se,v]))}a(Md,"sendNodeDBName");function Ir(ie){let Se=dt()?.[ie],tt=[];for(let v in Se){if(Hs&&!Hs.some(R=>R.replicateByDefault?!R.tables.includes(v):R.tables.includes(v)))continue;let p=Se[v];tt.push({table:v,schemaDefined:p.schemaDefined,attributes:p.attributes.map(R=>({name:R.name,type:R.type,isPrimaryKey:R.isPrimaryKey}))})}e.send((0,lt.encode)([TH,tt,ie]))}a(Ir,"sendDBSchema");let Cl=1,Ud=[];return{end(){Va&&Va.end(),Bs&&Bs.emit("close")},getRecord(ie){let Se=Cl++;return new Promise((tt,v)=>{let p=[hH,Se,ie.table.tableId,ie.id];Ud[ie.table.tableId]||(p.push(ie.table.tableName),Ud[ie.table.tableId]=!0),e.send((0,lt.encode)(p)),m.set(Se,{tableId:ie.table.tableId,key:ie.id,resolve(R){let{table:w,entry:A}=ie;tt(R),R&&w._recordRelocate(A,R)},reject:v})})},sendOperation(ie){let Se=Cl++;return ie.requestId=Se,e.send((0,lt.encode)([pH,ie])),new Promise((tt,v)=>{m.set(Se,{resolve:tt,reject:v})})}};function _i(ie){xo(5),ie<128?o[c++]=ie:ie<16384?(l.setUint16(c,ie|32768),c+=2):ie<1056964608?(l.setUint32(c,ie|3221225472),c+=4):(o[c]=255,l.setUint32(c+1,ie),c+=5)}function vd(ie,Se=0,tt=ie.length){let v=tt-Se;xo(v),ie.copy(o,c,Se,tt),c+=v}function ja(ie){xo(8),l.setFloat64(c,ie),c+=8}function xo(ie){if(ie+16>o.length-c){let Se=Buffer.allocUnsafeSlow(c+ie-i+65536>>10<<11);o.copy(Se,0,i,c),c=c-i,i=0,o=Se,l=new DataView(o.buffer,0,o.length)}}}function Qy(e,t){let r=e.database??"data";if(r!=="data"&&!We[r]){fe.warn?.("Database not found",e.database);return}t||(t={});let n=!1,s=e.schemaDefined,i=t.attributes||[];for(let o=0;o<e.attributes?.length;o++){let c=e.attributes[o],l=i[o];(!l||l.name!==c.name||l.type!==c.type)&&(n=!0,s||(c.indexed=!0),i[o]=c)}return n?(fe.debug?.("(Re)creating",e),pt({table:e.table,database:e.database,schemaDefined:e.schemaDefined,attributes:i,...t})):t}var yH,bH,lt,OH,NH,fe,Jy,IH,wH,Xy,CH,dH,_H,fH,Ru,EH,jy,hH,Kp,pH,Yp,mH,SH,TH,PH,Cc,rf,gH,qre,RH,zy,AH,Wp,DH=Ie(()=>{Pe();Qi();gy();Oy();ds();yH=M(ne()),bH=M(L());vl();lt=require("msgpackr"),OH=require("ws"),NH=require("worker_threads"),fe=M(Oc());z_();Jy=require("events"),IH=M(Zs()),wH=M(require("node:tls"));fu();Xy=M(require("node:process")),CH=require("node:net");wi();dH=129,_H=140,fH=141,Ru=142,EH=130,jy=132,hH=133,Kp=134,pH=136,Yp=137,mH=143,SH=144,TH=145,PH=new Map,Cc=new Map,rf=!0,gH=300,qre=2,RH=3e4;a(Zy,"createWebSocket");AH=1e3,Wp=class extends Jy.EventEmitter{constructor(r,n,s,i,o){super();this.url=r;this.subscription=n;this.databaseName=s;this.nodeName=i;this.authorization=o;this.nodeName=this.nodeName??Qs(r)}static{a(this,"NodeReplicationConnection")}socket;startTime;retryTime=AH;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions=[];latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;async connect(){this.session||this.resetSession();let r=[];this.socket=await Zy(this.url,{serverName:this.nodeName,authorization:this.authorization});let n;fe.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${Xy.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),fe.info?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=AH,Nc({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,n=zp(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this},{replicates:!0}),this.sessionResolve(n)}),this.socket.on("error",s=>{s.code==="SELF_SIGNED_CERT_IN_CHAIN"?(fe.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),s.isHandled=!0):s.code!=="ECONNREFUSED"&&(s.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?fe.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):fe.error?.(`Error in connection to ${this.url} due to ${s.message}`)),this.sessionReject(s)}),this.socket.on("close",(s,i)=>{if(this.isConnected&&(pu({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.socket.isFinished){this.isFinished=!0,n?.end(),this.emit("finished");return}if(++this.retries%20===1){let o=i?.toString();fe.warn?.(`${n?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${o?'"'+o+'" ':""}(code: ${s})`)}n=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>3})}resetSession(){this.session=new Promise((r,n)=>{this.sessionResolve=r,this.sessionReject=n})}subscribe(r,n){this.nodeSubscriptions=r,this.replicateTablesByDefault=n,this.emit("subscriptions-updated",r)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(r){return this.session.then(n=>n.getRecord(r))}};a(zp,"replicateOverWS");a(Qy,"ensureTableIfChanged")});var la={};je(la,{clearThisNodeName:()=>Qre,disableReplication:()=>Yre,enabled_databases:()=>ua,forEachReplicatedDatabase:()=>ra,getThisNodeId:()=>Qp,getThisNodeName:()=>at,getThisNodeUrl:()=>na,hostnameToUrl:()=>em,lastTimeInAuditStore:()=>Y_,monitorNodeCAs:()=>kH,replicateOperation:()=>Xre,replication_certificate_authorities:()=>Pc,sendOperationToNode:()=>of,servers:()=>Vre,setReplicator:()=>GH,start:()=>Kre,startOnMainThread:()=>Iy,subscribeToNode:()=>hu,unsubscribeFromNode:()=>Fp,urlToNodeName:()=>Qs});function Kre(e){if(e.port||(e.port=ps.default.get(Mc.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT)),e.securePort||(e.securePort=ps.default.get(Mc.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT)),!at())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let n of j_(e))t.set(Qs(n.url),n);Wre(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=it.ws(async(n,s,i,o)=>{if(s.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return o(n,s,i);await i,n._socket.unref(),zp(n,e,s?.user),n.on("error",c=>{c.code!=="ECONNREFUSED"&&Tr.error("Error in connection to "+this.url,c.message)})},e);e.runFirst=!0,it.http((n,s)=>{if(n.isWebSocket&&n.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){!n.authorized&&n._nodeRequest.socket.authorizationError&&Tr.error(`Incoming client connection from ${n.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,n._nodeRequest.socket.authorizationError);let i=Sr().primaryStore;if(n.authorized&&n.peerCertificate.subject){let o=n.peerCertificate.subject,c=o&&(i.get(o.CN)||t.get(o.CN));c?n.user=c:Tr.warn(`No node found for certificate common name ${o.CN}, available nodes are ${Array.from(i.getRange({}).filter(({value:l})=>l).map(({key:l})=>l)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let o=i.get(n.ip)||t.get(n.ip);o?n.user=o:Tr.warn(`No node found for IP address ${n.ip}, available nodes are ${Array.from(new Set([...i.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return s(n)},e);for(let n of r)if(n.secureContexts){let s=a(()=>{let i=new Set(n.secureContexts.values());n.defaultContext&&i.add(n.defaultContext);for(let o of i)try{let c=Array.from(Pc);o.options.availableCAs&&c.push(...o.options.availableCAs.values());let l={...o.options,ca:c};o.replicationContext=Zp.createSecureContext(l)}catch(c){Tr.error("Error creating replication TLS config",c)}},"updateContexts");n.secureContextsListeners.push(s),kH(s),ps.default.get(Mc.CONFIG_PARAMS.REPLICATION_ENABLEROOTCAS)!==!1&&s()}}function kH(e){let t=0;_u(r=>{r?.ca&&(Pc.add(r.ca),Pc.size!==t&&(t=Pc.size,e?.()))})}function Yre(e=!0){xH=e}function Wre(e){xH||(dt(),ua=e.databases,ra(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||Cc;for(let[s,i]of sf){let o=i.get(r);o&&(o.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];GH(r,s,e),PH.get(s)?.forEach(i=>i(s))}}))}function GH(e,t,r){if(!t)return console.error(`Attempt to replicate non-existent table ${t.name} from database ${e}`);if(t.replicate===!1||t.sources?.some(s=>s.isReplicator))return;let n;t.sourcedFrom(class FH extends Lr{static{a(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||Cc,o=i.get(e),c=o?.tableById||[];c[t.tableId]=t;let l=o?.ready;if(Tr.trace("Setting up replicator subscription to database",e),!o?.auditStore)return this.subscription=o=new Dn,i.set(e,o),o.tableById=c,o.auditStore=t.auditStore,o.dbisDB=t.dbisDB,o.databaseName=e,l&&l(o),o;this.subscription=o}static subscribeOnThisThread(i,o){return!0}static async load(i){if(i){let o=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),o]);if(c){let l,u=new Set;do{let d;for(let E of c){let f=jre(E,FH.subscription,e);f?.isConnected&&!u.has(f)&&(!d||f.latency<d.latency)&&(d=f)}if(!d)throw l||new BH.ServerError("No connection to any other nodes are available",502);let _={requestId:$re++,table:t,entry:i,id:i.key};u.add(d);try{return await d.getRecord(_)}catch(E){if(d.isConnected)throw E;Tr.warn("Error in load from node",Xp,E),l||(l=E)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function qH(e,t,r,n,s){let i=sf.get(e);i||sf.set(e,i=new Map);let o=i.get(r);if(o)return o;if(t)return i.set(r,o=new Wp(e,t,r,n,s)),o.connect(),o.once("finished",()=>i.delete(r)),o}function jre(e,t,r){let n=LH.get(e)?.get(r);if(n)return n;let s=Sr().primaryStore.get(e);return s?.url&&(n=qH(s.url,t,r,e,s.authorization),LH.set(e,sf.get(s.url))),n}async function of(e,t,r){r||(r={}),r.serverName=e.name;let n=await Zy(e.url,r),s=zp(n,{},{});return new Promise((i,o)=>{n.on("open",()=>{i(s.sendOperation(t))}),n.on("error",c=>{o(c)}),n.on("close",c=>{Tr.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function hu(e){try{HH.isMainThread&&Tr.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=Cc.get(e.database);if(!t){let n;t=new Promise(s=>{Tr.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,Cc.set(e.database,t)}let r=qH(e.nodes[0].url,t,e.database,e.nodes[0].name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>W_(n,e.database)),e.replicateByDefault)}catch(t){Tr.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function Fp({name:e,url:t,database:r}){Tr.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(Sr().primaryStore.getRange({})));let n=sf.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function zre(){if(tb!==void 0)return tb;let e=ps.default.get(Mc.CONFIG_PARAMS.OPERATIONSAPI_TLS_CERTIFICATE)||ps.default.get(Mc.CONFIG_PARAMS.TLS_CERTIFICATE);if(e)return tb=new UH.X509Certificate((0,vH.readFileSync)(e)).subject.match(/CN=(.*)/)?.[1]??null}function at(){return Xp||(Xp=ps.default.get("replication_hostname")??Qs(ps.default.get("replication_url"))??zre()??MH("operationsapi_network_secureport")??MH("operationsapi_network_port")??"127.0.0.1")}function Qre(){Xp=void 0}function MH(e){let t=ps.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function Jp(e){let t=ps.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function Qp(e){return K_(e)?.[at()]}function na(){let e=ps.default.get("replication_url");return e||em(at())}function em(e){let t=Jp("replication_port");if(t)return`ws://${e}:${t}`;if(t=Jp("replication_secureport"),t)return`wss://${e}:${t}`;if(t=Jp("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=Jp("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Qs(e){if(e)return new URL(e).hostname}function ra(e,t){for(let n of Object.getOwnPropertyNames(We))r(n);return nf(n=>{r(n)}),Lc((n,s)=>{r(n.databaseName)});function r(n){let s=We[n];Tr.trace("Checking replication status of ",n,e?.databases),e?.databases===void 0||e.databases==="*"||e.databases.includes(n)||e.databases.some?.(i=>i.name===n)||!s?t(s,n,!0):Jre(n)&&t(s,n,!1)}a(r,"forDatabase")}function Jre(e){let t=We[e];for(let r in t)if(t[r].replicate)return!0}function Y_(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function Xre(e){let t={message:""};if(e.replicated){e.replicated=!1,Tr.trace?.("Replicating operation",e.operation,"to nodes",it.nodes.map(n=>n.name));let r=await Promise.allSettled(it.nodes.map(n=>of(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=it.nodes[s]?.name,i})}return t}var ps,Tr,UH,vH,Mc,Zp,BH,HH,xH,$re,Vre,Pc,ua,sf,LH,tb,Xp,ds=Ie(()=>{Pe();Ks();Ll();DH();qr();ps=M(ne()),Tr=M(K()),UH=require("crypto"),vH=require("fs");z_();fu();Mc=M(L());gy();Zp=M(require("node:tls")),BH=M(_e()),HH=require("worker_threads"),$re=1,Vre=[],Pc=ps.default.get(Mc.CONFIG_PARAMS.REPLICATION_ENABLEROOTCAS)!==!1?new Set(Zp.rootCertificates):new Set;a(Kre,"start");a(kH,"monitorNodeCAs");a(Yre,"disableReplication");a(Wre,"assignReplicationSource");a(GH,"setReplicator");sf=new Map;a(qH,"getConnection");LH=new Map;a(jre,"getConnectionByName");a(of,"sendOperationToNode");a(hu,"subscribeToNode");a(Fp,"unsubscribeFromNode");a(zre,"getCommonNameFromCert");a(at,"getThisNodeName");a(Qre,"clearThisNodeName");Object.defineProperty(it,"hostname",{get(){return at()}});a(MH,"getHostFromListeningPort");a(Jp,"getPortFromListeningPort");a(Qp,"getThisNodeId");it.replication={getThisNodeId:Qp,exportIdMapping:K_};a(na,"getThisNodeUrl");a(em,"hostnameToUrl");a(Qs,"urlToNodeName");a(ra,"forEachReplicatedDatabase");a(Jre,"hasExplicitlyReplicatedTable");a(Y_,"lastTimeInAuditStore");a(Xre,"replicateOperation")});var af=O((vwe,WH)=>{"use strict";var Au=Uh(),yu=S0(),Zre=K(),ene=require("uuid").v4,Uwe=require("clone"),rm=to(),bu=L(),tne=require("util"),da=Un(),{handleHDBError:mn,hdb_errors:rne}=_e(),{HDB_ERROR_MSGS:tm,HTTP_STATUS_CODES:Sn}=rne,{SchemaEventMsg:nm}=$s(),$H=kt(),{getDatabases:nne}=(Pe(),oe(ut)),{transformReq:Ou}=te(),{replicateOperation:VH}=(ds(),oe(la));WH.exports={createSchema:sne,createSchemaStructure:KH,createTable:ine,createTableStructure:YH,createAttribute:une,dropSchema:one,dropTable:ane,dropAttribute:cne,getBackup:dne};async function sne(e){let t=await KH(e);return rm.signalSchemaChange(new nm(process.pid,e.operation,e.schema)),t}a(sne,"createSchema");async function KH(e){let t=Au.schema_object(e);if(t)throw mn(t,t.message,Sn.BAD_REQUEST,void 0,void 0,!0);if(Ou(e),!await yu.checkSchemaExists(e.schema))throw mn(new Error,tm.SCHEMA_EXISTS_ERR(e.schema),Sn.BAD_REQUEST,bu.LOG_LEVELS.ERROR,tm.SCHEMA_EXISTS_ERR(e.schema),!0);return await da.createSchema(e),`database '${e.schema}' successfully created`}a(KH,"createSchemaStructure");async function ine(e){return Ou(e),e.hash_attribute=e.primary_key??e.hash_attribute,await YH(e)}a(ine,"createTable");async function YH(e){let t=Au.create_table_object(e);if(t)throw mn(t,t.message,Sn.BAD_REQUEST,void 0,void 0,!0);if(Au.validateTableResidence(e.residence),!await yu.checkSchemaTableExists(e.schema,e.table))throw mn(new Error,tm.TABLE_EXISTS_ERR(e.schema,e.table),Sn.BAD_REQUEST,bu.LOG_LEVELS.ERROR,tm.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:ene(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await da.createTable(n,e);else throw mn(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Sn.BAD_REQUEST);else await da.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(YH,"createTableStructure");async function one(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Au.schema_object(e),n=t??r;if(n)throw mn(n,n.message,Sn.BAD_REQUEST,void 0,void 0,!0);Ou(e);let s=await yu.checkSchemaExists(e.schema);if(s)throw mn(new Error,s,Sn.NOT_FOUND,bu.LOG_LEVELS.ERROR,s,!0);let i=await yu.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);await da.dropSchema(e),rm.signalSchemaChange(new nm(process.pid,e.operation,e.schema)),await $H.purgeSchemaTableStreams(e.schema,o);let c=await VH(e);return c.message=`successfully deleted '${e.schema}'`,c}a(one,"dropSchema");async function ane(e){let t=Au.table_object(e);if(t)throw mn(t,t.message,Sn.BAD_REQUEST,void 0,void 0,!0);Ou(e);let r=await yu.checkSchemaTableExists(e.schema,e.table);if(r)throw mn(new Error,r,Sn.NOT_FOUND,bu.LOG_LEVELS.ERROR,r,!0);await da.dropTable(e),await $H.purgeTableStream(e.schema,e.table);let n=await VH(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}a(ane,"dropTable");async function cne(e){let t=Au.attribute_object(e);if(t)throw mn(t,t.message,Sn.BAD_REQUEST,void 0,void 0,!0);Ou(e);let r=await yu.checkSchemaTableExists(e.schema,e.table);if(r)throw mn(new Error,r,Sn.NOT_FOUND,bu.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw mn(new Error,"You cannot drop a hash attribute",Sn.BAD_REQUEST,void 0,void 0,!0);if(bu.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw mn(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Sn.BAD_REQUEST,void 0,void 0,!0);try{return await da.dropAttribute(e),lne(e),rm.signalSchemaChange(new nm(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Zre.error(`Got an error deleting attribute ${tne.inspect(e)}.`),n}}a(cne,"dropAttribute");function lne(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(lne,"dropAttributeFromGlobal");async function une(e){Ou(e);let t=nne()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw mn(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Sn.BAD_REQUEST,void 0,void 0,!0);return await da.createAttribute(e),rm.signalSchemaChange(new nm(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(une,"createAttribute");function dne(e){return da.getBackup(e)}a(dne,"getBackup")});var zH=O((Hwe,jH)=>{"use strict";var{OPERATIONS_ENUM:_ne}=L(),rb=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=_ne.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};jH.exports=rb});var nb=O((Fwe,ex)=>{"use strict";var fne=Un(),kwe=zH(),sm=te(),im=L(),Ene=ne(),{handleHDBError:QH,hdb_errors:hne}=_e(),{HDB_ERROR_MSGS:JH,HTTP_STATUS_CODES:XH}=hne,pne=Object.values(im.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),ZH="To use this operation audit log must be enabled in harperdb-config.yaml";ex.exports=mne;async function mne(e){if(sm.isEmpty(e.schema))throw new Error(JH.SCHEMA_REQUIRED_ERR);if(sm.isEmpty(e.table))throw new Error(JH.TABLE_REQUIRED_ERR);if(!Ene.get(im.CONFIG_PARAMS.LOGGING_AUDITLOG))throw QH(new Error,ZH,XH.BAD_REQUEST,im.LOG_LEVELS.ERROR,ZH,!0);let t=sm.checkSchemaTableExist(e.schema,e.table);if(t)throw QH(new Error,t,XH.NOT_FOUND,im.LOG_LEVELS.ERROR,t,!0);if(!sm.isEmpty(e.search_type)&&pne.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await fne.readAuditLog(e)}a(mne,"readAuditLog")});var rx=O((qwe,tx)=>{"use strict";var{OPERATIONS_ENUM:Sne}=L(),sb=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Sne.GET_BACKUP,this.schema=t,this.table=r}};tx.exports=sb});var ix=O((Ywe,sx)=>{"use strict";var Tne=Un(),Vwe=rx(),ib=te(),gne=L(),Kwe=ne(),{handleHDBError:Rne,hdb_errors:Ane}=_e(),{HDB_ERROR_MSGS:nx,HTTP_STATUS_CODES:yne}=Ane;sx.exports=bne;async function bne(e){if(ib.isEmpty(e.schema))throw new Error(nx.SCHEMA_REQUIRED_ERR);if(ib.isEmpty(e.table))throw new Error(nx.TABLE_REQUIRED_ERR);let t=ib.checkSchemaTableExist(e.schema,e.table);if(t)throw Rne(new Error,t,yne.NOT_FOUND,gne.LOG_LEVELS.ERROR,t,!0);return await Tne.getBackup(read_audit_log_object)}a(bne,"getBackup")});var dx=O((jwe,ux)=>{var Nu=require("validate.js"),ax=_t(),Iu=L(),{handleHDBError:One,hdb_errors:Nne}=_e(),{HDB_ERROR_MSGS:Jt,HTTP_STATUS_CODES:Ine}=Nne,ob=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),wne={STRUCTURE_USER:"structure_user"},ox=Object.values(Iu.ROLE_TYPES_ENUM),Cne="attribute_permissions",Pne="attribute_name",{PERMS_CRUD_ENUM:wu}=Iu,Dne=[Cne,...Object.values(wu)],cx=[wu.READ,wu.INSERT,wu.UPDATE],Lne=[Pne,...cx];function Mne(e){let t=ob();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,lx(e,t)}a(Mne,"addRoleValidation");function Une(e){let t=ob();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,lx(e,t)}a(Une,"alterRoleValidation");function vne(e){let t=ob();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,ax.validateObject(e,t)}a(vne,"dropRoleValidation");var Bne=["operation","role","id","permission","hdb_user","hdb_auth_header","access"];function lx(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)Bne.includes(n[o])||s.push(n[o]);s.length>0&&or(Jt.INVALID_ROLE_JSON_KEYS(s),r);let i=ax.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{or(o,r)}),e.permission){let o=Hne(e);o&&or(o,r),ox.forEach(c=>{e.permission[c]&&!Nu.isBoolean(e.permission[c])&&or(Jt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(ox.indexOf(o)<0){if(o===wne.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,d=l.length;u<d;u++){let _=l[u];global.hdb_schema[_]||or(Jt.SCHEMA_NOT_FOUND(_),r)}continue}or(Jt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){or(Jt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[o][l]){or(Jt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(d=>{Dne.includes(d)||or(Jt.INVALID_PERM_KEY(d),r,o,l)}),Object.values(wu).forEach(d=>{Nu.isDefined(u[d])?Nu.isBoolean(u[d])||or(Jt.TABLE_PERM_NOT_BOOLEAN(d),r,o,l):or(Jt.TABLE_PERM_MISSING(d),r,o,l)}),u.attribute_permissions===void 0){or(Jt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){or(Jt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[o][l].attributes.map(({attribute:E})=>E),_={read:!1,insert:!1,update:!1};for(let E in u.attribute_permissions){let f=u.attribute_permissions[E];if(Object.keys(f).forEach(T=>{!Lne.includes(T)&&T!==wu.DELETE&&or(Jt.INVALID_ATTR_PERM_KEY(T),r,o,l)}),!Nu.isDefined(f.attribute_name)){or(Jt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=f.attribute_name;if(!d.includes(h)){or(Jt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}cx.forEach(T=>{Nu.isDefined(f[T])?Nu.isBoolean(f[T])||or(Jt.ATTR_PERM_NOT_BOOLEAN(T,h),r,o,l):or(Jt.ATTR_PERM_MISSING(T,h),r,o,l)}),!_.read&&f.read===!0&&(_.read=!0),!_.insert&&f.insert===!0&&(_.insert=!0),!_.update&&f.update===!0&&(_.update=!0)}if(u.read===!1&&_.read===!0||u.insert===!1&&_.insert===!0||u.update===!1&&_.update===!0){let E=`${o}.${l}`;or(Jt.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,l)}}}}return xne(r)}a(lx,"customValidate");ux.exports={addRoleValidation:Mne,alterRoleValidation:Une,dropRoleValidation:vne};function Hne(e){let{operation:t,permission:r}=e;if(t===Iu.OPERATIONS_ENUM.ADD_ROLE||t===Iu.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 Jt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Iu.ROLE_TYPES_ENUM.SUPER_USER:Iu.ROLE_TYPES_ENUM.CLUSTER_USER;return Jt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(Hne,"validateNoSUPerms");function xne(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:Jt.ROLE_PERMS_ERROR,...e};return One(new Error,n,Ine.BAD_REQUEST)}else return null}a(xne,"generateRolePermResponse");function or(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(or,"addPermError")});var lf=O((Jwe,hx)=>{"use strict";var _x=Vr(),fx=$r(),kne=zo(),cb=dx(),lb=to(),Qwe=require("uuid").v4,Fne=require("util"),om=L(),Gne=te(),ub=fx.searchByValue,qne=fx.searchByHash,$ne=Fne.promisify(kne.delete),Vne=Vs(),Kne=Ql(),{hdb_errors:Yne,handleHDBError:Uc}=_e(),{HDB_ERROR_MSGS:Ex,HTTP_STATUS_CODES:cf}=Yne,{UserEventMsg:db}=$s();hx.exports={addRole:Wne,alterRole:jne,dropRole:zne,listRoles:Qne};function ab(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(ab,"scrubRoleDetails");async function Wne(e){let t=cb.addRoleValidation(e);if(t)throw t;e=ab(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 ub(r)||[])}catch(i){throw Uc(i)}if(n&&n.length>0)throw Uc(new Error,Ex.ROLE_ALREADY_EXISTS(e.role),cf.CONFLICT,void 0,void 0,!0);e.id||(e.id=e.role);let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await _x.insert(s),lb.signalUserChange(new db(process.pid)),e=ab(e),e}a(Wne,"addRole");async function jne(e){let t=cb.alterRoleValidation(e);if(t)throw t;e=ab(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await _x.update(r)}catch(s){throw Uc(s)}if(n&&n?.message==="updated 0 of 1 records")throw Uc(new Error,"Invalid role id",cf.BAD_REQUEST,void 0,void 0,!0);return await lb.signalUserChange(new db(process.pid)),e}a(jne,"alterRole");async function zne(e){let t=cb.dropRoleValidation(e);if(t)throw Uc(new Error,t,cf.BAD_REQUEST,void 0,void 0,!0);let r=new Kne(om.SYSTEM_SCHEMA_NAME,om.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await qne(r));if(n.length===0)throw Uc(new Error,Ex.ROLE_NOT_FOUND,cf.NOT_FOUND,void 0,void 0,!0);let s=new Vne(om.SYSTEM_SCHEMA_NAME,om.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await ub(s)),o=!1;if(Gne.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Uc(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,cf.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await $ne(c),lb.signalUserChange(new db(process.pid)),`${n[0].role} successfully deleted`}a(zne,"dropRole");async function Qne(){return ub({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(Qne,"listRoles")});var Tx=O((Zwe,Sx)=>{"use strict";var Jne=ne(),_a=require("joi"),Xne=_t(),px=require("moment"),Zne=require("fs-extra"),_b=require("path"),ese=require("lodash"),uf=L(),{LOG_LEVELS:vc}=L(),tse="YYYY-MM-DD hh:mm:ss",rse=_b.resolve(__dirname,"../logs");Sx.exports=function(e){return Xne.validateBySchema(e,nse)};var nse=_a.object({from:_a.custom(mx),until:_a.custom(mx),level:_a.valid(vc.NOTIFY,vc.FATAL,vc.ERROR,vc.WARN,vc.INFO,vc.DEBUG,vc.TRACE),order:_a.valid("asc","desc"),limit:_a.number().min(1),start:_a.number().min(0),log_name:_a.custom(sse)});function mx(e,t){if(px(e,px.ISO_8601).format(tse)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(mx,"validateDatetime");function sse(e,t){if(ese.invert(uf.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Jne.get(uf.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?uf.LOG_NAMES.HDB:e,i=s===uf.LOG_NAMES.INSTALL?_b.join(rse,uf.LOG_NAMES.INSTALL):_b.join(n,s);return Zne.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(sse,"validateReadLogPath")});var Eb=O((tCe,Rx)=>{"use strict";var am=L(),ise=K(),ose=ne(),ase=Tx(),fb=require("path"),gx=require("fs-extra"),{once:cse}=require("events"),{handleHDBError:lse,hdb_errors:use}=_e(),{PACKAGE_ROOT:dse}=L(),_se=fb.join(dse,"logs"),fse=1e3,Ese=200;Rx.exports=hse;async function hse(e){let t=ase(e);if(t)throw lse(t,t.message,use.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=ose.get(am.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?am.LOG_NAMES.HDB:e.log_name,s=n===am.LOG_NAMES.INSTALL?fb.join(_se,am.LOG_NAMES.INSTALL):fb.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,u=e.until!==void 0,d=u?new Date(e.until):void 0,_=e.limit===void 0?fse:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+_,T=0;E==="desc"&&!l&&!d&&(T=Math.max(gx.statSync(s).size-(h+5)*Ese,0));let m=gx.createReadStream(s,{start:T});m.on("error",H=>{ise.error(H)});let g=0,S=[],y="",I;m.on("data",H=>{let X=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;H=y+H;let W=0,V;for(;(V=X.exec(H))&&!m.destroyed;){I&&(I.message=H.slice(W,V.index),U(I));let[se,Q,de]=V,j=de.split("] ["),ae=j[0],Oe=j[1];j.splice(0,2),I={timestamp:Q,thread:ae,level:Oe,tags:j,message:""},W=V.index+se.length}y=H.slice(W)}),m.on("end",H=>{m.destroyed||I&&(I.message=y.trim(),U(I))}),m.resume();function U(H){let X,W,V;switch(!0){case(i&&c&&u):X=new Date(H.timestamp),W=new Date(l),V=new Date(d),H.level===o&&X>=W&&X<=V&&g<f?g++:H.level===o&&X>=W&&X<=V&&(fa(H,E,S),g++,g===h&&m.destroy());break;case(i&&c):X=new Date(H.timestamp),W=new Date(l),H.level===o&&X>=W&&g<f?g++:H.level===o&&X>=W&&(fa(H,E,S),g++,g===h&&m.destroy());break;case(i&&u):X=new Date(H.timestamp),V=new Date(d),H.level===o&&X<=V&&g<f?g++:H.level===o&&X<=V&&(fa(H,E,S),g++,g===h&&m.destroy());break;case(c&&u):X=new Date(H.timestamp),W=new Date(l),V=new Date(d),X>=W&&X<=V&&g<f?g++:X>=W&&X<=V&&(fa(H,E,S),g++,g===h&&m.destroy());break;case i:H.level===o&&g<f?g++:H.level===o&&(fa(H,E,S),g++,g===h&&m.destroy());break;case c:X=new Date(H.timestamp),W=new Date(l),X>=W&&g<f?g++:X>=W&&g>=f&&(fa(H,E,S),g++,g===h&&m.destroy());break;case u:X=new Date(H.timestamp),V=new Date(d),X<=V&&g<f?g++:X<=V&&g>=f&&(fa(H,E,S),g++,g===h&&m.destroy());break;default:g<f?g++:(fa(H,E,S),g++,g===h&&m.destroy())}}return a(U,"onLogMessage"),await cse(m,"close"),S}a(hse,"readLog");function fa(e,t,r){t==="desc"?pse(e,r):t==="asc"?mse(e,r):r.push(e)}a(fa,"pushLineToResult");function pse(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(pse,"insertDescending");function mse(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(mse,"insertAscending")});var cm=O((aCe,Ox)=>{"use strict";var hb=require("joi"),{string:Cu,boolean:Ax,date:Sse}=hb.types(),Tse=_t(),{validateSchemaExists:nCe,validateTableExists:sCe,validateSchemaName:iCe}=Ti(),gse=L(),Rse=ft(),yx=ne();yx.initSync();var oCe=Cu.invalid(yx.get(gse.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(Rse.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),bx={operation:Cu.valid("add_node","update_node","set_node_replication"),node_name:Cu.optional(),subscriptions:hb.array().items({table:Cu.optional(),schema:Cu.optional(),database:Cu.optional(),subscribe:Ax.required(),publish:Ax.required().custom(yse),start_time:Sse.iso()})};function Ase(e){return Tse.validateBySchema(e,hb.object(bx))}a(Ase,"addUpdateNodeValidator");function yse(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(yse,"checkForFalsy");Ox.exports={addUpdateNodeValidator:Ase,validation_schema:bx}});var Ix=O((lCe,Nx)=>{var bse=_t(),Ose={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Nx.exports=function(e){return bse.validateObject(e,Ose)}});var pb=O((dCe,Px)=>{"use strict";var Nse=Ix(),Pu=require("passport"),Ise=require("passport-local").Strategy,wse=require("passport-http").BasicStrategy,Cse=require("util"),Pse=xn(),Cx=Cse.callbackify(Pse.findAndValidateUser),uCe=Pn(),Dse=L(),wx=mu();Pu.use(new Ise(function(e,t,r){Cx(e,t,r)}));Pu.use(new wse(function(e,t,r){Cx(e,t,r)}));Pu.serializeUser(function(e,t){t(null,e)});Pu.deserializeUser(function(e,t){t(null,e)});function Lse(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":Pu.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Dse.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?wx.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):wx.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Pu.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(Lse,"authorize");function Mse(e,t){let r=Nse(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(Mse,"checkPermissions");Px.exports={authorize:Lse,checkPermissions:Mse}});var Ea=O((fCe,Dx)=>{"use strict";var mb=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},Sb=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};Dx.exports={Node:mb,NodeSubscription:Sb}});var Mx=O((hCe,Lx)=>{"use strict";var Use=L().OPERATIONS_ENUM,Tb=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Use.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Lx.exports=Tb});var df=O((mCe,Ux)=>{"use strict";var gb=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},Rb=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)}};Ux.exports={RemotePayloadObject:gb,RemotePayloadSubscription:Rb}});var Bx=O((TCe,vx)=>{"use strict";var Ab=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}};vx.exports=Ab});var xx=O((OCe,Hx)=>{"use strict";var vse=Bx(),RCe=Ht(),ACe=mt(),Bse=K(),{getSchemaPath:yCe,getTransactionAuditStorePath:bCe}=Rt(),{getDatabases:Hse}=(Pe(),oe(ut));Hx.exports=xse;async function xse(e){let t=new vse;try{let r=Hse()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats();t.schema=e.schema,t.table=e.name,t.record_count=n.entryCount,t.transaction_log_record_count=s.entryCount}catch(r){Bse.warn(`unable to stat table dbi due to ${r}`)}return t}a(xse,"lmdbGetTableSize")});var Fx=O((ICe,kx)=>{"use strict";var yb=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}};kx.exports=yb});var Lu=O((MCe,Vx)=>{"use strict";var kse=require("fs-extra"),Fse=require("path"),Jr=require("systeminformation"),ha=K(),Gx=kt(),CCe=ft(),Du=L(),Gse=xx(),qse=Ri(),{getThreadInfo:qx}=ot(),_f=ne();_f.initSync();var $se=Fx(),{openEnvironment:PCe}=mt(),{getSchemaPath:DCe}=Rt(),{database:LCe,databases:bb}=(Pe(),oe(ut)),lm;Vx.exports={getHDBProcessInfo:wb,getNetworkInfo:Pb,getDiskInfo:Cb,getMemoryInfo:Ib,getCPUInfo:Nb,getTimeInfo:Ob,getSystemInformation:Db,systemInformation:Vse,getTableSize:Lb,getMetrics:Mb};function Ob(){return Jr.time()}a(Ob,"getTimeInfo");async function Nb(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:u,...d}=await Jr.cpu();d.cpu_speed=await Jr.cpuCurrentSpeed();let{raw_currentload:_,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:T,raw_currentload_user:m,cpus:g,...S}=await Jr.currentLoad();return S.cpus=[],g.forEach(y=>{let{raw_load:I,raw_load_idle:U,raw_load_irq:H,raw_load_nice:X,raw_load_system:W,raw_load_user:V,...se}=y;S.cpus.push(se)}),d.current_load=S,d}catch(e){return ha.error(`error in getCPUInfo: ${e}`),{}}}a(Nb,"getCPUInfo");async function Ib(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Jr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return ha.error(`error in getMemoryInfo: ${e}`),{}}}a(Ib,"getMemoryInfo");async function wb(){let e={core:[],clustering:[]};try{let t=await Jr.processes(),r;try{r=Number.parseInt(await kse.readFile(Fse.join(_f.get(Du.CONFIG_PARAMS.ROOTPATH),Du.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Du.NODE_ERROR_CODES.ENOENT)ha.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 ha.error(`error in getHDBProcessInfo: ${t}`),e}}a(wb,"getHDBProcessInfo");async function Cb(){let e={};try{if(!_f.get(Du.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Jr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,...u}=await Jr.fsStats();return e.read_write=u,e.size=await Jr.fsSize(),e}catch(t){return ha.error(`error in getDiskInfo: ${t}`),e}}a(Cb,"getDiskInfo");async function Pb(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return _f.get(Du.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await Jr.networkInterfaceDefault(),e.latency=await Jr.inetChecksite("google.com"),(await Jr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrier_changes:_,...E}=n;e.interfaces.push(E)}),(await Jr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)})),e}catch(t){return ha.error(`error in getNetworkInfo: ${t}`),e}}a(Pb,"getNetworkInfo");async function Db(){if(lm!==void 0)return lm;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Jr.osInfo();e=c;let l=await Jr.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,lm=e,lm}catch(t){return ha.error(`error in getSystemInformation: ${t}`),e}}a(Db,"getSystemInformation");async function Lb(){let e=[],t=await qse.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Gse(n));return e}a(Lb,"getTableSize");async function Mb(){let e={};for(let t in bb){let r=e[t]={},n=r.tables={};for(let s in bb[t])try{let i=bb[t][s];if(!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:u,thread:d,txnid:_}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:_,overflowPages:E}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:_,overflowPages:E}}let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){ha.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(Mb,"getMetrics");async function $x(){if(_f.get(Du.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await Gx.getNATSReferences(),t=await Gx.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($x,"getNatsStreamInfo");async function Vse(e){let t=new $se;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await Db(),t.time=Ob(),t.cpu=await Nb(),t.memory=await Ib(),t.disk=await Cb(),t.network=await Pb(),t.harperdb_processes=await wb(),t.table_size=await Lb(),t.metrics=await Mb(),t.threads=await qx(),t.replication=await $x(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await Db();break;case"time":t.time=Ob();break;case"cpu":t.cpu=await Nb();break;case"memory":t.memory=await Ib();break;case"disk":t.disk=await Cb();break;case"network":t.network=await Pb();break;case"harperdb_processes":t.harperdb_processes=await wb();break;case"table_size":t.table_size=await Lb();break;case"database_metrics":case"metrics":t.metrics=await Mb();break;case"threads":t.threads=await qx();break;case"replication":t.replication=await $x();break;default:break}return t}a(Vse,"systemInformation")});var Bc=O((vCe,Kx)=>{"use strict";Kx.exports={version:Kse,printVersion:Yse};var um=ru();function Kse(){if(um)return um.version}a(Kse,"version");function Yse(){um&&console.log(`HarperDB Version ${um.version}`)}a(Yse,"printVersion")});var ms=O((kCe,zx)=>{"use strict";var Wse=Vr(),Ub=te(),jse=require("util"),Hc=L(),Yx=ne();Yx.initSync();var zse=pb(),Wx=$r(),{Node:HCe,NodeSubscription:xCe}=Ea(),Qse=Ql(),Jse=Mx(),{RemotePayloadObject:Xse,RemotePayloadSubscription:Zse}=df(),{handleHDBError:eie,hdb_errors:tie}=_e(),{HTTP_STATUS_CODES:rie,HDB_ERROR_MSGS:nie}=tie,sie=Vs(),iie=Lu(),oie=Bc(),{getDatabases:aie}=(Pe(),oe(ut)),cie=jse.promisify(zse.authorize),lie=Wx.searchByHash,uie=Wx.searchByValue;zx.exports={authHeaderToUser:die,isEmpty:_ie,getNodeRecord:fie,upsertNodeRecord:Eie,buildNodePayloads:hie,checkClusteringEnabled:pie,getAllNodeRecords:mie,getSystemInfo:Sie,reverseSubscription:jx};async function die(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await cie(t,null),e}a(die,"authHeaderToUser");function _ie(e){return e==null}a(_ie,"isEmpty");async function fie(e){let t=new Qse(Hc.SYSTEM_SCHEMA_NAME,Hc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return lie(t)}a(fie,"getNodeRecord");async function Eie(e){let t=new Jse(Hc.SYSTEM_SCHEMA_NAME,Hc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Wse.upsert(t)}a(Eie,"upsertNodeRecord");function jx(e){if(Ub.isEmpty(e.subscribe)||Ub.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(jx,"reverseSubscription");function hie(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:u}=c,d=Ub.getTableHashAttribute(l,u),{subscribe:_,publish:E}=jx(c),f=aie()[l]?.[u],h=new Zse(l,u,d,E,_,c.start_time,f.schemaDefined?f.attributes:void 0);s.push(h)}return new Xse(r,t,s,n)}a(hie,"buildNodePayloads");function pie(){if(!Yx.get(Hc.CONFIG_PARAMS.CLUSTERING_ENABLED))throw eie(new Error,nie.CLUSTERING_NOT_ENABLED,rie.BAD_REQUEST,void 0,void 0,!0)}a(pie,"checkClusteringEnabled");async function mie(){let e=new sie(Hc.SYSTEM_SCHEMA_NAME,Hc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await uie(e))}a(mie,"getAllNodeRecords");async function Sie(){let e=await iie.getSystemInformation();return{hdb_version:oie.version(),node_version:e.node_version,platform:e.platform}}a(Sie,"getSystemInfo")});var vb=O((GCe,nk)=>{"use strict";var dm=kt(),Qx=te(),Jx=ft(),Xx=L(),_m=K(),Zx=af(),Tie=Xl(),{RemotePayloadObject:gie}=df(),{handleHDBError:ek,hdb_errors:Rie}=_e(),{HTTP_STATUS_CODES:tk}=Rie,{NodeSubscription:rk}=Ea();nk.exports=Aie;async function Aie(e,t){let r;try{r=await dm.request(`${t}.${Jx.REQUEST_SUFFIX}`,new gie(Xx.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),_m.trace("Response from remote describe all request:",r)}catch(o){_m.error(`addNode received error from describe all request to remote node: ${o}`);let c=dm.requestErrorHandler(o,"add_node",t);throw ek(new Error,c,tk.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===Jx.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw ek(new Error,o,tk.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===Xx.SYSTEM_SCHEMA_NAME){await dm.createLocalTableStream(l,c);let h=new rk(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let u=Qx.doesSchemaExist(l),d=n[l]!==void 0,_=c?Qx.doesTableExist(l,c):!0,E=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!_&&!E){s.push(o);continue}if(!u&&d&&(_m.trace(`addNode creating schema: ${l}`),await Zx.createSchema({operation:"create_schema",schema:l})),!_&&E){_m.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Tie(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await Zx.createTable(h)}await dm.createLocalTableStream(l,c);let f=new rk(l,c,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:s}}a(Aie,"reviewSubscriptions")});var xc={};je(xc,{addNodeBack:()=>Iie,removeNodeBack:()=>wie,setNode:()=>Nie});async function Nie(e){e.node_name&&!e.hostname&&(e.hostname=e.node_name),e.verify_tls!==void 0&&(e.rejectUnauthorized=e.verify_tls);let{url:t,hostname:r}=e;t?r||(r=e.hostname=Qs(t)):t=em(r);let n=(0,ik.validateBySchema)(e,Oie);if(n)throw(0,co.handleHDBError)(n,n.message,bie.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new co.ClientError("url or hostname is required for remove_node operation");let f=r,h=Sr(),T=await h.get(f);if(!T)throw new co.ClientError(f+" does not exist");try{await of({url:T.url},{operation:ff.OPERATIONS_ENUM.REMOVE_NODE_BACK,name:T?.subscriptions?.length>0?at():f},void 0)}catch(m){$n.warn(`Error removing node from target node ${f}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,m)}return await h.delete(f),`Successfully removed '${f}' from cluster`}if(!t)throw new co.ClientError("url required for this operation");let s=na();if(s==null)throw new co.ClientError("replication url is missing from harperdb-config.yaml");let i,o,c;if(t?.startsWith("wss:")){i=await(0,Ss.getReplicationCert)();let f=await(0,Ss.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(o=await(0,Ss.createCsr)(),$n.info("Sending CSR to target node:",t)):f&&(c=f.certificate,$n.info("Sending CA named",f.name,"to target node",t))}let l={operation:ff.OPERATIONS_ENUM.ADD_NODE_BACK,hostname:(0,ok.get)(ff.CONFIG_PARAMS.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:o,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if(e.subscriptions?l.subscriptions=e.subscriptions.map(sk):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let f=sk(e);l.subscribe=f.subscribe,l.publish=f.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,d;try{u=await of({url:t},l,e)}catch(f){f.message=`Error returned from ${t}: `+f.message,$n.warn("Error adding node:",t,"to cluster:",f),d=f}if(o&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw d?(d.message+=" and connection was required to sign certificate",d):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);o&&($n.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Ss.setCertTable)({name:yie.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Ss.setCertTable)({name:at(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let _={url:t,ca:u?.usingCA};if(e.hostname&&(_.name=e.hostname),e.subscriptions?_.subscriptions=e.subscriptions:_.replicates=!0,e.start_time&&(_.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(_.authorization=e.authorization),_.replicates){let f={url:s,ca:c,replicates:!0,subscriptions:null};e.retain_authorization&&(f.authorization=e.authorization),e.start_time&&(f.start_time=e.start_time),await oo(at(),f)}await oo(u?u.nodeName:_.name??Qs(t),_);let E;return e.operation==="update_node"?E=`Successfully updated '${t}'`:E=`Successfully added '${t}' to cluster`,d&&(E+=" but there was an error updating target node: "+d.message),E}async function Iie(e){$n.trace("addNodeBack received request:",e);let t=await(0,Ss.signCertificate)(e),r;e.csr?(r=t.signingCA,$n.info("addNodeBack received CSR from node:",e.url,"this node will use and respond with CA that was used to issue CSR")):(r=e?.cert_auth,$n.info("addNodeBack received CA from node:",e.url));let n={url:e.url,ca:r};e.subscriptions?n.subscriptions=e.subscriptions:(n.replicates=!0,n.subscriptions=null),e.start_time&&(n.start_time=e.start_time),e.authorization&&(n.authorization=e.authorization);let s=await(0,Ss.getReplicationCertAuth)();if(n.replicates){let i={url:na(),ca:s?.certificate,replicates:!0,subscriptions:null};e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await oo(at(),i)}return await oo(e.hostname,n),t.nodeName=at(),t.usingCA=s?.certificate,$n.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function wie(e){$n.trace("removeNodeBack received request:",e),await Sr().delete(e.name)}function sk(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Ss,ik,Mu,ok,ff,$n,co,yie,bie,Oie,kc=Ie(()=>{Ss=M(Zs()),ik=M(_t()),Mu=M(require("joi")),ok=M(ne()),ff=M(L());z_();fu();ds();$n=M(K()),co=M(_e()),{pki:yie}=require("node-forge"),{HTTP_STATUS_CODES:bie}=co.hdb_errors,Oie=Mu.default.object({hostname:Mu.default.string(),verify_tls:Mu.default.boolean(),replicates:Mu.default.boolean(),subscriptions:Mu.default.array()});a(Nie,"setNode");a(Iie,"addNodeBack");a(wie,"removeNodeBack");a(sk,"reverseSubscription")});var mm=O((zCe,ck)=>{"use strict";var{handleHDBError:fm,hdb_errors:Cie}=_e(),{HTTP_STATUS_CODES:Em}=Cie,{addUpdateNodeValidator:Pie}=cm(),hm=K(),pm=L(),ak=ft(),Die=te(),Ef=kt(),hf=ms(),Bb=ne(),Lie=vb(),{Node:Mie,NodeSubscription:Uie}=Ea(),{broadcast:vie}=ot(),{setNode:Bie}=(kc(),oe(xc)),WCe=ne(),jCe=L(),Hie="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",xie="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",kie=Bb.get(pm.CONFIG_PARAMS.CLUSTERING_NODENAME);ck.exports=Fie;async function Fie(e,t=!1){if(hm.trace("addNode called with:",e),Bb.get(pm.CONFIG_PARAMS.REPLICATION_URL)||Bb.get(pm.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Bie(e);hf.checkClusteringEnabled();let r=Pie(e);if(r)throw fm(r,r.message,Em.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let _=await hf.getNodeRecord(n);if(!Die.isEmptyOrZeroLength(_))throw fm(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,Em.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Lie(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Hie,o;let c=hf.buildNodePayloads(s,kie,pm.OPERATIONS_ENUM.ADD_NODE,await hf.getSystemInfo()),l=[];for(let _=0,E=s.length;_<E;_++){let f=s[_];s[_].start_time===void 0&&delete s[_].start_time,l.push(new Uie(f.schema,f.table,f.publish,f.subscribe))}hm.trace("addNode sending remote payload:",c);let u;try{u=await Ef.request(`${n}.${ak.REQUEST_SUFFIX}`,c)}catch(_){hm.error(`addNode received error from request: ${_}`);for(let f=0,h=s.length;f<h;f++){let T=s[f];T.publish=!1,T.subscribe=!1,await Ef.updateRemoteConsumer(T,n)}let E=Ef.requestErrorHandler(_,"add_node",n);throw fm(new Error,E,Em.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===ak.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${n}: ${u.message}`;throw fm(new Error,_,Em.INTERNAL_SERVER_ERROR,"error",_)}hm.trace(u);for(let _=0,E=s.length;_<E;_++){let f=s[_];await Ef.updateRemoteConsumer(f,n),f.subscribe===!0&&await Ef.updateConsumerIterator(f.schema,f.table,n,"start")}let d=new Mie(n,l,u.system_info);return await hf.upsertNodeRecord(d),vie({type:"nats_update"}),i.length>0?o.message=xie:o.message=`Successfully added '${n}' to manifest`,o}a(Fie,"addNode")});var Fb=O((XCe,uk)=>{"use strict";var{handleHDBError:Hb,hdb_errors:Gie}=_e(),{HTTP_STATUS_CODES:xb}=Gie,{addUpdateNodeValidator:qie}=cm(),pf=K(),Sm=L(),lk=ft(),JCe=te(),mf=kt(),Sf=ms(),kb=ne(),{cloneDeep:$ie}=require("lodash"),Vie=vb(),{Node:Kie,NodeSubscription:Yie}=Ea(),{broadcast:Wie}=ot(),{setNode:jie}=(kc(),oe(xc)),zie="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Qie="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Jie=kb.get(Sm.CONFIG_PARAMS.CLUSTERING_NODENAME);uk.exports=Xie;async function Xie(e){if(pf.trace("updateNode called with:",e),kb.get(Sm.CONFIG_PARAMS.REPLICATION_URL)??kb.get(Sm.CONFIG_PARAMS.REPLICATION_HOSTNAME))return jie(e);Sf.checkClusteringEnabled();let t=qie(e);if(t)throw Hb(t,t.message,xb.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Sf.getNodeRecord(r);s.length>0&&(n=$ie(s));let{added:i,skipped:o}=await Vie(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=zie,c;let l=Sf.buildNodePayloads(i,Jie,Sm.OPERATIONS_ENUM.UPDATE_NODE,await Sf.getSystemInfo());for(let d=0,_=i.length;d<_;d++){let E=i[d];pf.trace(`updateNode updating work stream for node: ${r} subscription:`,E),i[d].start_time===void 0&&delete i[d].start_time}pf.trace("updateNode sending remote payload:",l);let u;try{u=await mf.request(`${r}.${lk.REQUEST_SUFFIX}`,l)}catch(d){pf.error(`updateNode received error from request: ${d}`);let _=mf.requestErrorHandler(d,"update_node",r);throw Hb(new Error,_,xb.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===lk.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw Hb(new Error,d,xb.INTERNAL_SERVER_ERROR,"error",d)}pf.trace(u);for(let d=0,_=i.length;d<_;d++){let E=i[d];await mf.updateRemoteConsumer(E,r),E.subscribe===!0?await mf.updateConsumerIterator(E.schema,E.table,r,"start"):await mf.updateConsumerIterator(E.schema,E.table,r,"stop")}return n||(n=[new Kie(r,[],u.system_info)]),await Zie(n[0],i,u.system_info),o.length>0?c.message=Qie:c.message=`Successfully updated '${r}'`,c}a(Xie,"updateNode");async function Zie(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,u=e.subscriptions.length;l<u;l++){let d=n.subscriptions[l];if(d.schema===o.schema&&d.table===o.table){d.publish=o.publish,d.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new Yie(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Sf.upsertNodeRecord(n),Wie({type:"nats_update"})}a(Zie,"updateNodeTable")});var hk=O((ePe,Ek)=>{"use strict";var fk=require("joi"),{string:dk}=fk.types(),eoe=_t(),_k=L(),toe=ne(),roe=ft();Ek.exports=noe;function noe(e){let t=dk.invalid(toe.get(_k.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(roe.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=fk.object({operation:dk.valid(_k.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return eoe.validateBySchema(e,r)}a(noe,"removeNodeValidator")});var Tm=O((rPe,gk)=>{"use strict";var{handleHDBError:pk,hdb_errors:soe}=_e(),{HTTP_STATUS_CODES:mk}=soe,ioe=hk(),Tf=K(),Sk=ms(),ooe=te(),Uu=L(),Tk=ft(),Gb=kt(),qb=ne(),{RemotePayloadObject:aoe}=df(),{NodeSubscription:coe}=Ea(),loe=Jl(),uoe=zo(),{broadcast:doe}=ot(),{setNode:_oe}=(kc(),oe(xc)),foe=qb.get(Uu.CONFIG_PARAMS.CLUSTERING_NODENAME);gk.exports=Eoe;async function Eoe(e){if(Tf.trace("removeNode called with:",e),qb.get(Uu.CONFIG_PARAMS.REPLICATION_URL)??qb.get(Uu.CONFIG_PARAMS.REPLICATION_HOSTNAME))return _oe(e);Sk.checkClusteringEnabled();let t=ioe(e);if(t)throw pk(t,t.message,mk.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await Sk.getNodeRecord(r);if(ooe.isEmptyOrZeroLength(n))throw pk(new Error,`Node '${r}' was not found.`,mk.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new aoe(Uu.OPERATIONS_ENUM.REMOVE_NODE,foe,[]),i,o=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await Gb.updateConsumerIterator(d.schema,d.table,r,"stop");try{await Gb.updateRemoteConsumer(new coe(d.schema,d.table,!1,!1),r)}catch(_){Tf.error(_)}}try{i=await Gb.request(`${r}.${Tk.REQUEST_SUFFIX}`,s),Tf.trace("Remove node reply from remote node:",r,i)}catch(l){Tf.error("removeNode received error from request:",l),o=!0}let c=new loe(Uu.SYSTEM_SCHEMA_NAME,Uu.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await uoe.deleteRecord(c),doe({type:"nats_update"}),i?.status===Tk.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Tf.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(Eoe,"removeNode")});var yk=O((sPe,Ak)=>{"use strict";var Rk=require("joi"),{string:hoe,array:poe}=Rk.types(),moe=_t(),Soe=cm();Ak.exports=Toe;function Toe(e){let t=Rk.object({operation:hoe.valid("configure_cluster").required(),connections:poe.items(Soe.validation_schema).required()});return moe.validateBySchema(e,t)}a(Toe,"configureClusterValidator")});var $b=O((oPe,wk)=>{"use strict";var bk=L(),gm=K(),goe=te(),Roe=ne(),Aoe=Tm(),yoe=mm(),boe=ms(),Ooe=yk(),{handleHDBError:Ok,hdb_errors:Noe}=_e(),{HTTP_STATUS_CODES:Nk}=Noe,Ioe="Configure cluster complete.",woe="Failed to configure the cluster. Check the logs for more details.",Coe="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";wk.exports=Poe;async function Poe(e){gm.trace("configure cluster called with:",e);let t=Ooe(e);if(t)throw Ok(t,t.message,Nk.BAD_REQUEST,void 0,void 0,!0);let r=await boe.getAllNodeRecords(),n=[];if(Roe.get(bk.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,_=r.length;d<_;d++){let E=await Ik(Aoe,{operation:bk.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(E)}gm.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let d=0;d<i;d++){let _=e.connections[d],E=await Ik(yoe,_,_.node_name);s.push(E)}gm.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,u=n.concat(s);for(let d=0,_=u.length;d<_;d++){let E=u[d];E.status==="rejected"&&(gm.error(E.node_name,E?.error?.message,E?.error?.stack),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,response:E?.result})}if(goe.isEmptyOrZeroLength(o))return{message:Ioe,connections:c};if(l)return{message:Coe,failed_nodes:o,connections:c};throw Ok(new Error,woe,Nk.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(Poe,"configureCluster");async function Ik(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(Ik,"functionWrapper")});var Lk=O((cPe,Dk)=>{"use strict";var gf=require("joi"),Doe=_t(),{validateSchemaExists:Ck,validateTableExists:Loe,validateSchemaName:Pk}=Ti(),Moe=gf.object({operation:gf.string().valid("purge_stream"),schema:gf.string().custom(Ck).custom(Pk).optional(),database:gf.string().custom(Ck).custom(Pk).optional(),table:gf.string().custom(Loe).required()});function Uoe(e){return Doe.validateBySchema(e,Moe)}a(Uoe,"purgeStreamValidator");Dk.exports=Uoe});var Vb=O((uPe,Mk)=>{"use strict";var{handleHDBError:voe,hdb_errors:Boe}=_e(),{HTTP_STATUS_CODES:Hoe}=Boe,xoe=Lk(),koe=kt(),Foe=ms();Mk.exports=Goe;async function Goe(e){e.schema=e.schema??e.database;let t=xoe(e);if(t)throw voe(t,t.message,Hoe.BAD_REQUEST,void 0,void 0,!0);Foe.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await koe.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(Goe,"purgeStream")});var Wb=O((_Pe,Fk)=>{"use strict";var Yb=ms(),qoe=kt(),Rm=ne(),vu=L(),Fc=ft(),$oe=te(),Kb=K(),{RemotePayloadObject:Voe}=df(),{ErrorCode:Uk}=require("nats"),{parentPort:vk}=require("worker_threads"),{onMessageByType:Koe}=ot(),{getThisNodeName:Yoe}=(ds(),oe(la)),{requestClusterStatus:Woe}=(z_(),oe(LB)),Bk=Rm.get(vu.CONFIG_PARAMS.CLUSTERING_ENABLED),Hk=Rm.get(vu.CONFIG_PARAMS.CLUSTERING_NODENAME);Fk.exports={clusterStatus:joe,buildNodeStatus:kk};var xk;Koe("cluster-status",async e=>{xk(e)});async function joe(){if(Rm.get(vu.CONFIG_PARAMS.REPLICATION_URL)||Rm.get(vu.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;return vk?(vk.postMessage({type:"request-cluster-status"}),n=await new Promise(s=>{xk=s})):n=Woe(),n.node_name=Yoe(),n.is_enabled=!0,n}let e={node_name:Hk,is_enabled:Bk,connections:[]};if(!Bk)return e;let t=await Yb.getAllNodeRecords();if($oe.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(kk(t[n],e.connections));return await Promise.allSettled(r),e}a(joe,"clusterStatus");async function kk(e,t){let r=e.name,n=new Voe(vu.OPERATIONS_ENUM.CLUSTER_STATUS,Hk,void 0,await Yb.getSystemInfo()),s,i,o=Fc.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await qoe.request(Fc.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Fc.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Fc.CLUSTER_STATUS_STATUSES.CLOSED,Kb.error(`Error getting node status from ${r} `,s))}catch(l){Kb.warn(`Error getting node status from ${r}`,l),l.code===Uk.NoResponders?o=Fc.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===Uk.Timeout?o=Fc.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Fc.CLUSTER_STATUS_STATUSES.CLOSED}let c=new zoe(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!==vu.PRE_4_0_0_VERSION&&await Yb.upsertNodeRecord(l)}catch(l){Kb.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(kk,"buildNodeStatus");function zoe(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(zoe,"NodeStatusObject")});var zb=O((EPe,Gk)=>{"use strict";var{handleHDBError:Qoe,hdb_errors:Joe}=_e(),{HTTP_STATUS_CODES:Xoe}=Joe,Zoe=kt(),eae=ms(),jb=te(),Am=require("joi"),tae=_t(),rae=2e3,nae=Am.object({timeout:Am.number().min(1),connected_nodes:Am.boolean(),routes:Am.boolean()});Gk.exports=sae;async function sae(e){eae.checkClusteringEnabled();let t=tae.validateBySchema(e,nae);if(t)throw Qoe(t,t.message,Xoe.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||jb.autoCastBoolean(n),o=s===void 0||jb.autoCastBoolean(s),c={nodes:[]},l=await Zoe.getServerList(r??rae),u={};if(i)for(let d=0,_=l.length;d<_;d++){let E=l[d].statsz;E&&(u[l[d].server.name]=E.routes)}for(let d=0,_=l.length;d<_;d++){if(l[d].statsz)continue;let E=l[d].server,f=l[d].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:l[d].response_time};i&&(h.connected_nodes=[],u[E.name]&&u[E.name].forEach(T=>{h.connected_nodes.includes(T.name.slice(0,-4))||h.connected_nodes.push(T.name.slice(0,-4))})),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(T=>({host:T.split(":")[0],port:jb.autoCast(T.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(sae,"clusterNetwork")});var Kk=O((pPe,Vk)=>{"use strict";var Qb=require("joi"),qk=_t(),{route_constraints:$k}=BR();Vk.exports={setRoutesValidator:iae,deleteRoutesValidator:oae};function iae(e){let t=Qb.object({server:Qb.valid("hub","leaf"),routes:$k.required()});return qk.validateBySchema(e,t)}a(iae,"setRoutesValidator");function oae(e){let t=Qb.object({routes:$k.required()});return qk.validateBySchema(e,t)}a(oae,"deleteRoutesValidator")});var ym=O((SPe,Xk)=>{"use strict";var lo=Ct(),Jb=te(),Ts=L(),Bu=ne(),Yk=Kk(),{handleHDBError:Wk,hdb_errors:aae}=_e(),{HTTP_STATUS_CODES:jk}=aae,zk="cluster routes successfully set",Qk="cluster routes successfully deleted";Xk.exports={setRoutes:lae,getRoutes:uae,deleteRoutes:dae};function cae(e){let t=lo.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let o=0,c=e.routes.length;o<c;o++){let l=e.routes[o];l.port=Jb.autoCast(l.port);let u=r.some(_=>_.host===l.host&&_.port===l.port),d=n.some(_=>_.host===l.host&&_.port===l.port);u||d?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?lo.updateConfigValue(Ts.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):lo.updateConfigValue(Ts.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:zk,set:i,skipped:s}}a(cae,"setRoutesNats");function lae(e){let t=Yk.setRoutesValidator(e);if(t)throw Wk(t,t.message,jk.BAD_REQUEST,void 0,void 0,!0);if(Bu.get(Ts.CONFIG_PARAMS.CLUSTERING_ENABLED))return cae(e);let r=[],n=[],s=Bu.get(Ts.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{Jk(s,i)?n.push(i):(s.push(i),r.push(i))}),lo.updateConfigValue(Ts.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:zk,set:r,skipped:n}}a(lae,"setRoutes");function Jk(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}a(Jk,"existsInArray");function uae(){if(Bu.get(Ts.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=lo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return Bu.get(Ts.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}a(uae,"getRoutes");function dae(e){let t=Yk.deleteRoutesValidator(e);if(t)throw Wk(t,t.message,jk.BAD_REQUEST,void 0,void 0,!0);if(Bu.get(Ts.CONFIG_PARAMS.CLUSTERING_ENABLED))return _ae(e);let r=[],n=[],s=Bu.get(Ts.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(o=>{Jk(e.routes,o)?r.push(o):(i.push(o),n.push(o))}),lo.updateConfigValue(Ts.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:Qk,deleted:r,skipped:n}}a(dae,"deleteRoutes");function _ae(e){let t=lo.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],o=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let d=e.routes[l],_=!1;for(let E=0,f=r.length;E<f;E++){let h=r[E];if(d.host===h.host&&d.port===h.port){r.splice(E,1),_=!0,o=!0,s.push(d);break}}if(!_){let E=!0;for(let f=0,h=n.length;f<h;f++){let T=n[f];if(d.host===T.host&&d.port===T.port){n.splice(f,1),c=!0,E=!1,s.push(d);break}}E&&i.push(d)}}return o&&(r=Jb.isEmptyOrZeroLength(r)?null:r,lo.updateConfigValue(Ts.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=Jb.isEmptyOrZeroLength(n)?null:n,lo.updateConfigValue(Ts.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:Qk,deleted:s,skipped:i}}a(_ae,"deleteRoutesNats")});var eF=O((gPe,Zk)=>{"use strict";var Rf=require("alasql"),Gc=require("recursive-iterator"),ei=K(),fae=te(),Af=L(),Xb=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,hae(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=>Af.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=>!Af.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][Af.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Eae(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(o).filter(u=>!Af.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new Rf.yy.Column({columnid:u});s.tableid&&(d.tableid=s.tableid),this.ast.columns.push(d),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function Eae(e){return e.filter(t=>t[Af.PERMS_CRUD_ENUM.READ])}a(Eae,"filterReadRestrictedAttrs");function hae(e,t,r,n,s){pae(e,t,r,n,s)}a(hae,"interpretAST");function yf(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(yf,"addSchemaTableToMap");function pae(e,t,r,n,s){if(!e){ei.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Rf.yy.Insert?gae(e,t,r):e instanceof Rf.yy.Select?mae(e,t,r,n,s):e instanceof Rf.yy.Update?Sae(e,t,r):e instanceof Rf.yy.Delete?Tae(e,t,r):ei.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(pae,"getRecordAttributesAST");function mae(e,t,r,n,s){if(!e){ei.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(fae.isEmptyOrZeroLength(i)){ei.error("No schema specified");return}e.from.forEach(c=>{yf(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),yf(c.table,t,r,n,s)});let o=new Gc(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{ei.info(`table specified as ${l} not found.`);return}t.get(u).get(l).indexOf(c.columnid)<0&&t.get(u).get(l).push(c.columnid)}if(e.where){let c=new Gc(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let d=u.tableid?u.tableid:l;if(!t.get(i).has(d))if(r.has(d))d=r.get(d);else{ei.info(`table specified as ${d} not found.`);continue}t.get(i).get(d).indexOf(u.columnid)<0&&t.get(i).get(d).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new Gc(c.on);for(let{node:u}of l)if(u&&u.columnid){let d=u.tableid,_=s.get(d);if(!t.get(_).has(d))if(r.has(d))d=r.get(d);else{ei.info(`table specified as ${d} not found.`);continue}t.get(_).get(d).indexOf(u.columnid)<0&&t.get(_).get(d).push(u.columnid)}}),e.order){let c=new Gc(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,d=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(d).has(u))if(r.has(u))u=r.get(u);else{ei.info(`table specified as ${u} not found.`);return}t.get(d).get(u).indexOf(l.columnid)<0&&t.get(d).get(u).push(l.columnid)}}}a(mae,"getSelectAttributes");function Sae(e,t,r){if(!e){ei.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Gc(e.columns),s=e.table.databaseid;yf(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&Zb(e.table.tableid,s,i.columnid,t,r)}a(Sae,"getUpdateAttributes");function Tae(e,t,r){if(!e){ei.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Gc(e.where),s=e.table.databaseid;yf(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&Zb(e.table.tableid,s,i.columnid,t,r)}a(Tae,"getDeleteAttributes");function gae(e,t,r){if(!e){ei.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Gc(e.columns),s=e.into.databaseid;yf(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&Zb(e.into.tableid,s,i.columnid,t,r)}a(gae,"getInsertAttributes");function Zb(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(Zb,"pushAttribute");Zk.exports=Xb});var rO=O((APe,sF)=>{var bm=_c(),tF=require("chalk"),Vn=K(),rF=require("prompt"),{promisify:Rae}=require("util"),eO=L(),Aae=require("fs-extra"),yae=require("path"),bae=te(),Oae=Bc(),nF=ne();nF.initSync();var Nae=require("moment"),Iae=Rae(rF.get),wae=yae.join(nF.getHdbBasePath(),eO.LICENSE_KEY_DIR_NAME,eO.LICENSE_FILE_NAME,eO.LICENSE_FILE_NAME);sF.exports={getFingerprint:Pae,setLicense:Cae,parseLicense:tO,register:Dae,getRegistrationInfo:Mae};async function Cae(e){if(e&&e.key&&e.company){try{Vn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await tO(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Vn.error(r),Vn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Cae,"setLicense");async function Pae(){let e={};try{e=await bm.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Vn.error(r),Vn.error(t),new Error(r)}return e}a(Pae,"getFingerprint");async function tO(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Vn.info("Validating license input...");let r=bm.validateLicense(e,t);if(Vn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Vn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Vn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Vn.info("writing license to disk"),await Aae.writeFile(wae,JSON.stringify({license_key:e,company:t}))}catch(n){throw Vn.error("Failed to write License"),n}return"Registration successful."}a(tO,"parseLicense");async function Dae(){let e=await Lae();return tO(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Dae,"register");async function Lae(){let e=await bm.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:tF.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:tF.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{rF.start()}catch(n){Vn.error(n)}let r;try{r=await Iae(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(Lae,"promptForRegistration");async function Mae(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await bm.getLicense()}catch(r){throw Vn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(bae.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Oae.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Nae.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Mae,"getRegistrationInfo")});var oF=O((bPe,iF)=>{"use strict";var Uae=ft(),nO=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+Uae.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:u,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:d,port:_,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"}};iF.exports=nO});var lF=O((NPe,cF)=>{"use strict";var aF=ft(),sO=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,u,d,_){this.port=t,_===null&&(_=void 0),this.server_name=r+aF.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+aF.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:d,ca_file:_,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:_,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:_,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};cF.exports=sO});var dF=O((wPe,uF)=>{"use strict";var iO=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};uF.exports=iO});var fF=O((PPe,_F)=>{"use strict";var vae=ft(),oO=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+vae.SERVER_SUFFIX.ADMIN,this.password=r}};_F.exports=oO});var wm=O((LPe,pF)=>{"use strict";var qc=require("path"),$c=require("fs-extra"),Bae=oF(),Hae=lF(),xae=dF(),kae=fF(),aO=xn(),xu=te(),Tn=Ct(),Nm=L(),bf=ft(),{CONFIG_PARAMS:Xt}=Nm,ku=K(),Of=ne(),EF=eo(),cO=kt(),Fae=Zs(),Hu="clustering",Gae=1e4,hF=50;pF.exports={generateNatsConfig:$ae,removeNatsConfig:Vae,getHubConfigPath:qae};function qae(){let e=Of.get(Xt.ROOTPATH);return qc.join(e,Hu,bf.NATS_CONFIG_FILES.HUB_SERVER)}a(qae,"getHubConfigPath");async function $ae(e=!1,t=void 0){let r=Of.get(Xt.ROOTPATH);$c.ensureDirSync(qc.join(r,"clustering","leaf")),Of.initSync();let n=Tn.getConfigFromFile(Xt.CLUSTERING_TLS_CERT_AUTH),s=Tn.getConfigFromFile(Xt.CLUSTERING_TLS_PRIVATEKEY),i=Tn.getConfigFromFile(Xt.CLUSTERING_TLS_CERTIFICATE);!await $c.exists(i)&&!await $c.exists(!n)&&await Fae.createNatsCerts();let o=qc.join(r,Hu,bf.PID_FILES.HUB),c=qc.join(r,Hu,bf.PID_FILES.LEAF),l=Tn.getConfigFromFile(Xt.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=qc.join(r,Hu,bf.NATS_CONFIG_FILES.HUB_SERVER),d=qc.join(r,Hu,bf.NATS_CONFIG_FILES.LEAF_SERVER),_=Tn.getConfigFromFile(Xt.CLUSTERING_TLS_INSECURE),E=Tn.getConfigFromFile(Xt.CLUSTERING_TLS_VERIFY),f=Tn.getConfigFromFile(Xt.CLUSTERING_NODENAME),h=Tn.getConfigFromFile(Xt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await cO.checkNATSServerInstalled()||Im("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let T=await aO.listUsers(),m=Tn.getConfigFromFile(Xt.CLUSTERING_USER),g=await aO.getClusterUser();(xu.isEmpty(g)||g.active!==!0)&&Im(`Invalid cluster user '${m}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Om(Xt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Om(Xt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Om(Xt.CLUSTERING_HUBSERVER_NETWORK_PORT),await Om(Xt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],y=[];for(let[se,Q]of T.entries())Q.role?.role===Nm.ROLE_TYPES_ENUM.CLUSTER_USER&&Q.active&&(S.push(new kae(Q.username,EF.decrypt(Q.hash))),y.push(new xae(Q.username,EF.decrypt(Q.hash))));let I=[],{hub_routes:U}=Tn.getClusteringRoutes();if(!xu.isEmptyOrZeroLength(U))for(let se of U)I.push(`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@${se.host}:${se.port}`);let H=new Bae(Tn.getConfigFromFile(Xt.CLUSTERING_HUBSERVER_NETWORK_PORT),f,o,i,s,n,_,E,h,Tn.getConfigFromFile(Xt.CLUSTERING_HUBSERVER_CLUSTER_NAME),Tn.getConfigFromFile(Xt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),I,S,y);n==null&&(delete H.tls.ca_file,delete H.leafnodes.tls.ca_file),t=xu.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Nm.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await $c.writeJson(u,H),ku.trace(`Hub server config written to ${u}`));let X=`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,W=`tls://${g.uri_encoded_name}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,V=new Hae(Tn.getConfigFromFile(Xt.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,c,l,[X],[W],S,y,i,s,n,_);n==null&&delete V.tls.ca_file,(t===void 0||t===Nm.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await $c.writeJson(d,V),ku.trace(`Leaf server config written to ${d}`))}a($ae,"generateNatsConfig");async function Om(e){let t=Of.get(e);return xu.isEmpty(t)&&Im(`port undefined for '${e}'`),await xu.isPortTaken(t)&&Im(`'${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(Om,"isPortAvailable");function Im(e){let t=`Error generating clustering config: ${e}`;ku.error(t),console.error(t),process.exit(1)}a(Im,"generateNatsConfigError");async function Vae(e){let{port:t,config_file:r}=cO.getServerConfig(e),{username:n,decrypt_hash:s}=await aO.getClusterUser(),i=0,o=2e3;for(;i<hF;){try{let d=await cO.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){ku.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=hF)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 u=o*(i*2);u>3e4&&ku.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await xu.async_set_timeout(u)}let c="0".repeat(Gae),l=qc.join(Of.get(Xt.ROOTPATH),Hu,r);await $c.writeFile(l,c),await $c.remove(l),ku.notify(e,"started.")}a(Vae,"removeNatsConfig")});var AF=O((UPe,RF)=>{"use strict";var Kn=ne(),Kae=_c(),Ge=L(),Nf=ft(),uo=require("path"),{PACKAGE_ROOT:Pm}=L(),mF=ne(),Cm=te(),Fu="/dev/null",Yae=uo.join(Pm,"launchServiceScripts"),SF=uo.join(Pm,"utility/scripts"),Wae=uo.join(SF,Ge.HDB_RESTART_SCRIPT),TF=uo.resolve(Pm,"dependencies",`${process.platform}-${process.arch}`,Nf.NATS_BINARY_NAME);function gF(){let t=Kae.licenseSearch().ram_allocation||Ge.RAM_ALLOCATION_ENUM.DEFAULT,r=Ge.MEM_SETTING_KEY+t,n={[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Cm.noBootFile()&&(n[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Cm.getEnvCliRootPath()),{name:Ge.PROCESS_DESCRIPTORS.HDB,script:Ge.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:Pm}}a(gF,"generateMainServerConfig");var jae=9930;function zae(){Kn.initSync(!0);let e=Kn.get(Ge.CONFIG_PARAMS.ROOTPATH),t=uo.join(e,"clustering",Nf.NATS_CONFIG_FILES.HUB_SERVER),r=uo.join(Kn.get(Ge.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ge.LOG_NAMES.HDB),n=mF.get(Ge.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Nf.LOG_LEVEL_FLAGS[Kn.get(Ge.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ge.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==jae?"-"+n:""),script:TF,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Kn.get(Ge.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Fu,i.error_file=Fu),i}a(zae,"generateNatsHubServerConfig");var Qae=9940;function Jae(){Kn.initSync(!0);let e=Kn.get(Ge.CONFIG_PARAMS.ROOTPATH),t=uo.join(e,"clustering",Nf.NATS_CONFIG_FILES.LEAF_SERVER),r=uo.join(Kn.get(Ge.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ge.LOG_NAMES.HDB),n=mF.get(Ge.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Nf.LOG_LEVEL_FLAGS[Kn.get(Ge.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ge.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Qae?"-"+n:""),script:TF,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Kn.get(Ge.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Fu,i.error_file=Fu),i}a(Jae,"generateNatsLeafServerConfig");function Xae(){Kn.initSync();let e=uo.join(Kn.get(Ge.CONFIG_PARAMS.LOGGING_ROOT),Ge.LOG_NAMES.HDB),t={name:Ge.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Ge.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Yae,autorestart:!1};return Kn.get(Ge.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Fu,t.error_file=Fu),t}a(Xae,"generateClusteringUpgradeV4ServiceConfig");function Zae(){let e={[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.RESTART_HDB};return Cm.noBootFile()&&(e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Cm.getEnvCliRootPath()),{...{name:Ge.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:SF},script:Wae}}a(Zae,"generateRestart");function ece(){return{apps:[gF()]}}a(ece,"generateAllServiceConfigs");RF.exports={generateAllServiceConfigs:ece,generateMainServerConfig:gF,generateRestart:Zae,generateNatsHubServerConfig:zae,generateNatsLeafServerConfig:Jae,generateClusteringUpgradeV4ServiceConfig:Xae}});var wf=O((HPe,BF)=>{"use strict";var ct=L(),tce=te(),fo=wm(),Dm=kt(),_o=ft(),pa=AF(),Lm=ne(),Vc=K(),rce=ms(),{startWorker:yF,onMessageFromWorkers:nce}=ot(),sce=Lu(),BPe=require("util"),ice=require("child_process"),oce=require("fs"),{execFile:ace}=ice,Je;BF.exports={enterPM2Mode:cce,start:ma,stop:lO,reload:OF,restart:NF,list:uO,describe:CF,connect:Eo,kill:fce,startAllServices:Ece,startService:dO,getUniqueServicesList:PF,restartAllServices:hce,isServiceRegistered:DF,reloadStopStart:LF,restartHdb:wF,deleteProcess:dce,startClusteringProcesses:UF,startClusteringThreads:vF,isHdbRestartRunning:_ce,isClusteringRunning:mce,stopClustering:pce,reloadClustering:Sce,expectedRestartOfChildren:IF};var If=!1;nce(e=>{e.type==="restart"&&Lm.initSync(!0)});function cce(){If=!0}a(cce,"enterPM2Mode");function Eo(){return Je||(Je=require("pm2")),new Promise((e,t)=>{Je.connect((r,n)=>{r&&t(r),e(n)})})}a(Eo,"connect");var Xr,lce=10,bF;function ma(e,t=!1){if(If)return uce(e);let r=ace(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let o=Xr.indexOf(r);o>-1&&Xr.splice(o,1),!bF&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<lce&&(oce.existsSync(fo.getHubConfigPath())?ma(e):(await fo.generateNatsConfig(!0),ma(e),await new Promise(c=>setTimeout(c,3e3)),await fo.removeNatsConfig(ct.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await fo.removeNatsConfig(ct.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=Lm.get(ct.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,d;for(;l=c.exec(i);){if(l.index&&_o.LOG_LEVEL_HIERARCHY[o]>=_o.LOG_LEVEL_HIERARCHY[d||"info"]){let f=d===_o.LOG_LEVELS.ERR||d===_o.LOG_LEVELS.WRN?Vc.OUTPUTS.STDERR:Vc.OUTPUTS.STDOUT;Vc.logCustomLevel(d||"info",f,n,i.slice(u,l.index).trim())}let[_,E]=l;u=l.index+_.length,d=_o.LOG_LEVELS[E]}if(_o.LOG_LEVEL_HIERARCHY[o]>=_o.LOG_LEVEL_HIERARCHY[d||"info"]){let _=d===_o.LOG_LEVELS.ERR||d===_o.LOG_LEVELS.WRN?Vc.OUTPUTS.STDERR:Vc.OUTPUTS.STDOUT;Vc.logCustomLevel(d||"info",_,n,i.slice(u).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!Xr&&(Xr=[],!t)){let i=a(()=>{bF=!0,Xr&&(Xr.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)}Xr.push(r)}a(ma,"start");function uce(e){return new Promise(async(t,r)=>{try{await Eo()}catch(n){r(n)}Je.start(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}a(uce,"startWithPM2");function lO(e){if(!If){for(let t of Xr||[])t.name===e&&(Xr.splice(Xr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Eo()}catch(n){r(n)}Je.stop(e,async(n,s)=>{n&&(Je.disconnect(),r(n)),Je.delete(e,(i,o)=>{i&&(Je.disconnect(),r(n)),Je.disconnect(),t(o)})})})}a(lO,"stop");function OF(e){return new Promise(async(t,r)=>{try{await Eo()}catch(n){r(n)}Je.reload(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}a(OF,"reload");function NF(e){if(!If){IF();for(let t of Xr||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await Eo()}catch(n){r(n)}Je.restart(e,(n,s)=>{Je.disconnect(),t(s)})})}a(NF,"restart");function IF(){for(let e of Xr||[])e.config&&(e.config.restarts=0)}a(IF,"expectedRestartOfChildren");function dce(e){return new Promise(async(t,r)=>{try{await Eo()}catch(n){r(n)}Je.delete(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}a(dce,"deleteProcess");async function wF(){await ma(pa.generateRestart())}a(wF,"restartHdb");async function _ce(){let e=await uO();for(let t in e)if(e[t].name===ct.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(_ce,"isHdbRestartRunning");function uO(){return new Promise(async(e,t)=>{try{await Eo()}catch(r){t(r)}Je.list((r,n)=>{r&&(Je.disconnect(),t(r)),Je.disconnect(),e(n)})})}a(uO,"list");function CF(e){return new Promise(async(t,r)=>{try{await Eo()}catch(n){r(n)}Je.describe(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}a(CF,"describe");function fce(){if(!If){for(let e of Xr||[])e.kill();Xr=[];return}return new Promise(async(e,t)=>{try{await Eo()}catch(r){t(r)}Je.killDaemon((r,n)=>{r&&(Je.disconnect(),t(r)),Je.disconnect(),e(n)})})}a(fce,"kill");async function Ece(){try{await UF(),await vF(),await ma(pa.generateAllServiceConfigs())}catch(e){throw Je?.disconnect(),e}}a(Ece,"startAllServices");async function dO(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ct.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=pa.generateMainServerConfig();break;case ct.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=pa.generateNatsIngestServiceConfig();break;case ct.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=pa.generateNatsReplyServiceConfig();break;case ct.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=pa.generateNatsHubServerConfig(),await ma(r,t),await fo.removeNatsConfig(e);return;case ct.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=pa.generateNatsLeafServerConfig(),await ma(r,t),await fo.removeNatsConfig(e);return;case ct.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=pa.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await ma(r)}catch(r){throw Je?.disconnect(),r}}a(dO,"startService");async function PF(){try{let e=await uO(),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 Je?.disconnect(),e}}a(PF,"getUniqueServicesList");async function hce(e=[]){try{let t=!1,r=await PF();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===ct.PROCESS_DESCRIPTORS.HDB?t=!0:await NF(o))}t&&await LF(ct.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Je?.disconnect(),t}}a(hce,"restartAllServices");async function DF(e){if(Xr?.find(r=>r.name===e))return!0;let t=await sce.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(DF,"isServiceRegistered");async function LF(e){let t=Lm.get(ct.CONFIG_PARAMS.THREADS_COUNT)??Lm.get(ct.CONFIG_PARAMS.THREADS),r=await CF(e),n=tce.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await lO(e),await dO(e)):e===ct.PROCESS_DESCRIPTORS.HDB?await wF():await OF(e)}a(LF,"reloadStopStart");var MF;async function UF(e=!1){for(let t in ct.CLUSTERING_PROCESSES){let r=ct.CLUSTERING_PROCESSES[t];await dO(r,e)}}a(UF,"startClusteringProcesses");async function vF(){MF=yF(ct.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ct.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Dm.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Dm.updateLocalStreams();let e=await rce.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ct.PRE_4_0_0_VERSION){Vc.info("Starting clustering upgrade 4.0.0 process"),yF(ct.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(vF,"startClusteringThreads");async function pce(){for(let e in ct.CLUSTERING_PROCESSES)if(e!==ct.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ct.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await MF.terminate();else{let t=ct.CLUSTERING_PROCESSES[e];await lO(t)}}a(pce,"stopClustering");async function mce(){for(let e in ct.CLUSTERING_PROCESSES){let t=ct.CLUSTERING_PROCESSES[e];if(await DF(t)===!1)return!1}return!0}a(mce,"isClusteringRunning");async function Sce(){await fo.generateNatsConfig(!0),await Dm.reloadNATSHub(),await Dm.reloadNATSLeaf(),await fo.removeNatsConfig(ct.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await fo.removeNatsConfig(ct.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Sce,"reloadClustering")});var EO={};je(EO,{compactOnStart:()=>Tce,copyDb:()=>qF});async function Tce(){Sa.notify("Running compact on start"),console.log("Running compact on start");let e=(0,_O.get)(Ta.CONFIG_PARAMS.ROOTPATH),t=new Map,r=dt();(0,fO.updateConfigValue)(Ta.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1);try{for(let n in r){if(n==="system"||n.endsWith("-copy"))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,Mm.join)(e,"backup",n+".mdb"),o=(0,Mm.join)(e,Ta.DATABASES_DIR_NAME,n+"-copy.mdb"),c=0;try{c=await HF(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){Sa.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 qF(n,o),console.log("Backing up",n,"to",i),await(0,Kc.move)(s,i,{overwrite:!0})}try{Gu()}catch(n){Sa.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,Kc.move)(i,s,{overwrite:!0}),await(0,Kc.remove)((0,Mm.join)(e,Ta.DATABASES_DIR_NAME,`${n}-copy.mdb-lock`));try{Gu()}catch(n){Sa.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){Sa.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,fO.updateConfigValue)(Ta.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,Kc.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw Gu(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await HF(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}.
|
|
16
16
|
Total record count before compaction: ${i}, total after: ${c}.
|
|
17
17
|
Database backup has not been removed and can be found here: ${s}`;Sa.error(l),console.error(l)}(0,_O.get)(Ta.CONFIG_PARAMS.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,Kc.remove)(s))}}async function HF(e){let t=await(0,GF.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function qF(e,t){console.log("copyDb start");let r=dt()[e],n;for(let _ in r){n=r[_].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,o=(0,xF.open)(new kF.default(t)),c=o.openDB(Um.INTERNAL_DBIS_NAME),l,u=0,d=s.useReadTransaction();try{for(let{key:E,value:f}of s.getRange({transaction:d})){let h=f.is_hash_attribute||f.isPrimaryKey,T,m;if(h&&(T=f.compression,m=vm(),m?f.compression=m:delete f.compression,T?.dictionary?.toString()===m?.dictionary?.toString()&&(T=null,m=null)),c.put(E,f),!(h||f.indexed))continue;let g=new FF.default(!h,h);g.encoding="binary",g.compression=T;let S=n.openDB(E,g);S.decoder=null,S.decoderCopies=!1,S.encoding="binary",g.compression=m;let y=o.openDB(E,g);y.encoder=null,console.log("copying",E,"from",e,"to",t),await _(S,y,h,d)}if(i){let E=n.openDB(Um.AUDIT_STORE_NAME,Cf);console.log("copying audit log for",e,"to",t),_(i,E,!1,d)}async function _(E,f,h,T){let m=0,g=0,S=1e7,y=null;for(;S-- >0;)try{for(let I of E.getKeys({start:y,transaction:T}))try{y=I;let{value:U,version:H}=E.getEntry(I,{transaction:T});l=f.put(I,U,h?H:void 0),m++,T.openTimer&&(T.openTimer=0),g+=(I?.length||10)+U.length,u++>5e3&&(await l,console.log("copied",m,"entries",g,"bytes"),u=0)}catch(U){console.error("Error copying record",typeof I=="symbol"?"symbol":I,"from",e,"to",t,U)}console.log("finish copying, copied",m,"entries",g,"bytes");return}catch{if(typeof y=="string"){if(y==="z")return console.error("Reached end of dbi",y,"for",e,"to",t);y=y.slice(0,-2)+"z"}else if(typeof y=="number")y++;else return console.error("Unknown key type",y,"for",e,"to",t)}}a(_,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),o.close()}}var xF,Mm,Kc,_O,kF,FF,Um,Ta,GF,fO,Sa,hO=Ie(()=>{Pe();xF=require("lmdb"),Mm=require("path"),Kc=require("fs-extra"),_O=M(ne()),kF=M(o_()),FF=M(i_()),Um=M(Ht()),Ta=M(L());Qi();GF=M(Ri()),fO=M(Ct()),Sa=M(K());a(Tce,"compactOnStart");a(HF,"getTotalDBRecordCount");a(qF,"copyDb")});var Vu=O((KPe,zF)=>{"use strict";var gce=require("minimist"),{isMainThread:mO,parentPort:Df,threadId:qPe}=require("worker_threads"),Dt=L(),{PROCESS_DESCRIPTORS_VALIDATE:qu}=Dt,Li=K(),SO=te(),Hm=wm(),Bm=kt(),$Pe=ft(),YF=Ct(),ti=wf(),$F=Lu(),{compactOnStart:Rce}=(hO(),oe(EO)),Ace=Qa(),{restartWorkers:xm,onMessageByType:yce}=ot(),{handleHDBError:bce,hdb_errors:Oce}=_e(),{HTTP_STATUS_CODES:Nce}=Oce,Lf=ne(),{sendOperationToNode:VF,getThisNodeName:Ice,monitorNodeCAs:wce}=(ds(),oe(la)),{getHDBNodeTable:VPe}=(fu(),oe(IB));Lf.initSync();var Pf=`Restarting HarperDB. This may take up to ${Dt.RESTART_TIMEOUT_MS/1e3} seconds.`,Cce="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",KF="Clustering is not enabled so cannot be restarted",Pce="Invalid service",$u,gs;zF.exports={restart:WF,restartService:TO};mO&&yce(Dt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await TO({service:e.workerType}):WF({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function WF(e){gs=Object.keys(e).length===0,$u=await ti.isServiceRegistered(Dt.HDB_PROC_DESCRIPTOR);let t=gce(process.argv);if(t.service){await TO(t);return}if(gs&&!$u){console.error(Cce);return}if(gs&&console.log(Pf),$u){ti.enterPM2Mode(),Li.notify(Pf);let r=Ace(Object.keys(Dt.CONFIG_PARAM_MAP),!0);return SO.isEmptyOrZeroLength(Object.keys(r))||YF.updateConfigValue(void 0,void 0,r,!0,!0),Dce(),Pf}return mO?(Li.notify(Pf),Lf.get(Dt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Rce(),process.env.HARPER_EXIT_ON_RESTART&&process.exit(0),setTimeout(()=>{xm()},50)):Df.postMessage({type:Dt.ITC_EVENT_TYPES.RESTART}),Pf}a(WF,"restart");async function TO(e){let{service:t}=e;if(Dt.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw bce(new Error,Pce,Nce.BAD_REQUEST,void 0,void 0,!0);if(ti.expectedRestartOfChildren(),$u=await ti.isServiceRegistered(Dt.HDB_PROC_DESCRIPTOR),!mO){e.replicated&&wce(),Df.postMessage({type:Dt.ITC_EVENT_TYPES.RESTART,workerType:t}),Df.ref(),await new Promise(s=>{Df.on("message",i=>{i.type==="restart-complete"&&(s(),Df.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===Ice())continue;let{job_id:i}=await VF(s,e);n.push(await new Promise((o,c)=>{let u=2400,d=setInterval(async()=>{if(u--<=0){clearInterval(d);let f=new Error("Timed out waiting for restart job to complete");f.replicated=n,c(f)}let E=(await VF(s,{operation:"get_job",id:i})).results[0];if(E.status==="COMPLETE"&&(clearInterval(d),o({node:s.name,message:E.message})),E.status==="ERROR"){clearInterval(d);let f=new Error(E.message);f.replicated=n,c(f)}},250)}))}return{replicated:n}}return}let r;switch(t){case qu.clustering:if(!Lf.get(Dt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=KF;break}gs&&console.log("Restarting clustering"),Li.notify("Restarting clustering"),await jF();break;case qu.clustering_config:case qu["clustering config"]:if(!Lf.get(Dt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=KF;break}gs&&console.log("Restarting clustering_config"),Li.notify("Restarting clustering_config"),await ti.reloadClustering();break;case"custom_functions":case"custom functions":case qu.harperdb:case qu.http_workers:case qu.http:if(gs&&!$u){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}gs&&console.log("Restarting http_workers"),Li.notify("Restarting http_workers"),gs?await ti.restart(Dt.HDB_PROC_DESCRIPTOR):await xm("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(Li.error(r),gs&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(TO,"restartService");async function Dce(){await jF(),await ti.restart(Dt.HDB_PROC_DESCRIPTOR),await SO.async_set_timeout(2e3),Lf.get(Dt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await pO(),gs&&(await Bm.closeConnection(),process.exit(0))}a(Dce,"restartPM2Mode");async function jF(){if(!YF.getConfigFromFile(Dt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await $F.getHDBProcessInfo()).clustering.length===0)Li.trace("Clustering not running, restart will start clustering services"),await Hm.generateNatsConfig(!0),await ti.startClusteringProcesses(),await ti.startClusteringThreads(),await pO(),gs&&await Bm.closeConnection();else{await Hm.generateNatsConfig(!0),$u?(Li.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await ti.restart(Dt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ti.restart(Dt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await $F.getHDBProcessInfo()).clustering.forEach(s=>{Li.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await SO.async_set_timeout(3e3),await pO(),await Bm.updateLocalStreams(),gs&&await Bm.closeConnection(),Li.trace("Restart clustering restarting ingest and reply service threads");let t=xm(Dt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=xm(Dt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(jF,"restartClustering");async function pO(){await Hm.removeNatsConfig(Dt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Hm.removeNatsConfig(Dt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(pO,"removeNatsConfig")});var oG=O((jPe,iG)=>{"use strict";var WPe=require("lodash"),gn=L(),{handleHDBError:QF,hdb_errors:Lce}=_e(),{HDB_ERROR_MSGS:Mce,HTTP_STATUS_CODES:Uce}=Lce,gO=K();iG.exports={getRolePermissions:Bce};var Yc=Object.create(null),vce=a(e=>({key:e,perms:{}}),"perms_template_obj"),eG=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),tG=a((e=!1,t=!1,r=!1,n=!1)=>({[gn.PERMS_CRUD_ENUM.READ]:e,[gn.PERMS_CRUD_ENUM.INSERT]:t,[gn.PERMS_CRUD_ENUM.UPDATE]:r,[gn.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),RO=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...tG(t,r,n,s)}),"table_perms_template"),JF=a((e,t=tG())=>({attribute_name:e,describe:sG(t),[Mf]:t[Mf],[AO]:t[AO],[yO]:t[yO]}),"attr_perms_template"),XF=a((e,t=!1)=>({attribute_name:e,describe:t,[Mf]:t}),"timestamp_attr_perms_template"),{READ:Mf,INSERT:AO,UPDATE:yO}=gn.PERMS_CRUD_ENUM,rG=Object.values(gn.PERMS_CRUD_ENUM),nG=[Mf,AO,yO];function Bce(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[gn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(Yc[t]&&Yc[t].key===n)return Yc[t].perms;let s=Hce(e,r);return Yc[t]?Yc[t].key=n:Yc[t]=vce(n),Yc[t].perms=s,s}catch(r){if(!e[gn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[gn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<gn.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw gO.error(n),gO.debug(r),QF(new Error,Mce.OUTDATED_PERMS_TRANSLATION_ERROR,Uce.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
|