harperdb 4.4.19 → 4.4.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +1 -1
- package/bin/lite.js +1 -1
- package/launchServiceScripts/launchInstallNATSServer.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +2 -2
- package/launchServiceScripts/launchNatsReplyService.js +1 -1
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +1 -1
- package/npm-shrinkwrap.json +33 -33
- package/package.json +2 -2
- package/server/jobs/jobProcess.js +1 -1
- package/server/threads/threadServer.js +1 -1
- package/studio/build-local/asset-manifest.json +2 -2
- package/studio/build-local/index.html +1 -1
- package/studio/build-local/static/js/{main.b641de5c.js → main.12321ebb.js} +2 -2
- package/utility/scripts/restartHdb.js +1 -1
- /package/studio/build-local/static/js/{main.b641de5c.js.LICENSE.txt → main.12321ebb.js.LICENSE.txt} +0 -0
|
@@ -8,7 +8,7 @@ Caused by:`));else if(typeof u=="object")try{n+=JSON.stringify(u)}catch{n+="Obje
|
|
|
8
8
|
`).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name: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 xt=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=xt(),$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")},x2={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},H2={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,...H2,...B2,...G2,...q2,...$2,...V2,...K2,...F2,...WC,...jC,...Y2,...W2,...x2};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 zd=L(),J2=te(),sn=ne(),Qd=require("path"),X2=require("minimist"),ZC=require("fs-extra"),eP=require("lodash");sn.initSync();var{CONFIG_PARAMS:Vo,DATABASES_PARAM_CONFIG:Kd,SYSTEM_SCHEMA_NAME:Eh}=zd,Yd,Wd,jd;function tP(){if(Yd!==void 0)return Yd;if(sn.getHdbBasePath()!==void 0)return Yd=sn.get(Vo.STORAGE_PATH)||Qd.join(sn.getHdbBasePath(),zd.DATABASES_DIR_NAME),Yd}a(tP,"getBaseSchemaPath");function rP(){if(Wd!==void 0)return Wd;if(sn.getHdbBasePath()!==void 0)return Wd=sP(Eh),Wd}a(rP,"getSystemSchemaPath");function nP(){if(jd!==void 0)return jd;if(sn.getHdbBasePath()!==void 0)return jd=sn.get(zd.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Qd.join(sn.getHdbBasePath(),zd.TRANSACTIONS_DIR_NAME),jd}a(nP,"getTransactionAuditStoreBasePath");function Z2(e,t){let r=sn.get(Vo.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Qd.join(nP(),e.toString())}a(Z2,"getTransactionAuditStorePath");function sP(e,t){e=e.toString(),t=t&&t.toString();let r=sn.get(zd.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Qd.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]?.[Kd.PATH];if(u)return eP.set(l,[Eh,Kd.TABLES,t,Kd.PATH],u),sn.setProperty(Vo.DATABASES,l),u;let d=c?.[Kd.PATH];if(d)return eP.set(l,[Eh,Kd.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=Qd.join(s,e);return ZC.mkdirsSync(i),sn.setProperty(Vo.STORAGE_PATH,s),i}return rP()}a(e4,"initSystemSchemaPaths");function t4(){Yd=void 0,Wd=void 0,jd=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=xt(),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 Jd=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 Xd=O((hAe,hP)=>{"use strict";var EAe=Jd(),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(fi()),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 x=function(W){if(W.kind==="NonNullType"){let Q=x(W.type);return Q.nullable=!1,Q}if(W.kind==="ListType")return{type:"array",elements:x(W.type)};let se={type:W.name?.value};return Object.defineProperty(se,"location",{value:W.loc.startToken}),se};a(x,"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=x(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:()=>Zd,stringify:()=>Xa});function Zd(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(Zd,"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"),xg=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"),Hg=Symbol("validateTable"),AAe=Symbol("getAllColumns"),MP=Symbol("validateAllColumns"),Rh=Symbol("findColumn"),UP=Symbol("validateOrderBy"),e_=Symbol("validateSegment"),kg=Symbol("validateColumn"),vP=Symbol("setColumnsForTable"),BP=Symbol("checkColumnsForAsterisk"),xP=Symbol("validateGroupBy"),HP=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[HP]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Hg](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Hg](t.table)})}}[HP](){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}[Hg](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=xg(s);i.table=xg(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[e_](this.statement.columns,!1),this[e_](this.statement.joins,!1),this[e_](this.statement.where,!1),this[xP](this.statement.group,!1),this[e_](this.statement.order,!0)}[e_](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}[xP](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=xg(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:()=>s_,LOCAL_TIMESTAMP:()=>b4,METADATA:()=>t_,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 n_[0]=n_[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?.[t_];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?.[t_]>=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[t_];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),r_=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,r_|=Qg,m|=ec),g!==S&&(m|=tc,g||(g=0)),c&bh&&(m|=o_),u?.originatingOperation&&(m|=i_),_&&(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,x=r.get(U);if(x){let X=Ht(x).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(s_,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,s_,zg,b4,t_,n_,O4,Vg,YP,N4,WP,Kg,bh,Qg,Jg,Oh,I4,yh,Ml,r_,Yg,Wg,jg,Za,vl=Ie(()=>{KP=require("msgpackr");Qi();$g=M(K()),Ah=new Uint8Array([1,1,1,1,4,64,0,0]),s_=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"),t_=Symbol("metadata"),n_=new Uint8Array(8),O4=new DataView(n_.buffer,0,8),Vg=0,YP=0,N4=1,WP=3,Kg=4,bh=16,Qg=32,Jg=1,Oh=256,Ml=0,r_=-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||r_>=0){let o=0,c=Ml;c&&(o+=8,Ml=0);let l=r_,u=Yg,d=Wg;l>=0&&(o+=2,r_=-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(n_,0,c),c+=8;else for(let E=0;E<8;E++)n_[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:_,[t_]: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 a_=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 c_=O((UAe,JP)=>{"use strict";var Ln=ne(),as=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(as.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Ln.get(as.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Ln.get(as.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Ln.get(as.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Ln.get(as.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Ln.get(as.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Ln.get(as.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Ln.get(as.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Ln.get(as.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Ln.get(as.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Ln.get(as.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Ln.get(as.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=a_(),tD=c_(),Ko=xt(),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",l_=".mdb",B4="-lock",eR=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=cs(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+l_);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 x4(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+l_,!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(x4,"createEnvironment");async function H4(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(H4,"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+l_),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++)cs(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+l_),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=cs(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=cs(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=cs(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 cs(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,cs(e,Gs).putSync(t,c),e.dbis[t]=o,o}throw s}}a(oD,"createDBI");function cs(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(cs,"openDBI");function q4(e,t){Dh(e,t),t=t.toString();let r=cs(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+l_);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);cs(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],cs(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{cs(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:cs,openEnvironment:nD,createEnvironment:x4,listDBIs:iD,listDBIDefinitions:F4,createDBI:oD,dropDBI:V4,statDBI:q4,deleteEnvironment:k4,initializeDBIs:K4,TransactionCursor:eR,environmentDataSize:$4,copyEnvironment:H4,closeEnvironment:sD}});var lD=O((HAe,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(),pi=on(),u_=Pn().LMDB_ERRORS_ENUM,Q4=xt(),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=pi.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=pi.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=pi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[cR]))&&(e[cR]=r||pi.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=pi.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=pi.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||pi.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=pi.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=pi.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(pi.validateEnv(e),t===void 0)throw new Error(u_.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(u_.WRITE_ATTRIBUTES_REQUIRED):new Error(u_.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(u_.RECORDS_REQUIRED):new Error(u_.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 Si=O((QAe,TD)=>{"use strict";var SD=te(),mD=L(),Bl=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,mi=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=mi.alternatives(mi.string().min(1).max(Yo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Yo.schema_format.message}),mi.number(),mi.array()).required(),lJ=mi.alternatives(mi.string().min(1).max(Yo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Yo.schema_format.message}),mi.number()),uJ=mi.alternatives(mi.string().min(1).max(Yo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Yo.schema_format.message}),mi.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:Ti}=Si(),__=_t(),d_="is required",rr={database:{presence:!1,format:Ti.schema_format,length:Ti.schema_length},schema:{presence:!1,format:Ti.schema_format,length:Ti.schema_length},table:{presence:!0,format:Ti.schema_format,length:Ti.schema_length},attribute:{presence:!0,format:Ti.schema_format,length:Ti.schema_length},hash_attribute:{presence:!0,format:Ti.schema_format,length:Ti.schema_length}};function f_(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(f_,"makeAttributesStrings");function SJ(e){return e=f_(e),rr.table.presence=!1,rr.attribute.presence=!1,rr.hash_attribute.presence=!1,__.validateObject(e,rr)}a(SJ,"schema_object");function TJ(e){return e=f_(e),rr.table.presence={message:d_},rr.attribute.presence=!1,rr.hash_attribute.presence=!1,__.validateObject(e,rr)}a(TJ,"table_object");function gJ(e){return e=f_(e),rr.table.presence={message:d_},rr.attribute.presence=!1,__.validateObject(e,rr)}a(gJ,"create_table_object");function RJ(e){return e=f_(e),rr.table.presence={message:d_},rr.attribute.presence={message:d_},rr.hash_attribute.presence=!1,__.validateObject(e,rr)}a(RJ,"attribute_object");function AJ(e){return e=f_(e),rr.table.presence={message:d_},rr.attribute.presence=!1,rr.hash_attribute.presence=!1,__.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=xJ;async function xJ(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(xJ,"lmdbCreateAttribute")});var mR=O((dye,LD)=>{var{hdb_table:HJ,hdb_database:DD}=Si(),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:HJ,records:pR.array().items(pR.object().custom(GJ)).required()});LD.exports=function(e){return kJ.validateBySchema(e,qJ)}});var E_=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,HD)=>{"use strict";var TR=mt(),KJ=K(),xD=Pn().LMDB_ERRORS_ENUM;HD.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!==xD.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!==xD.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 h_=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=h_.randomBytes(zJ),r=h_.randomBytes(QJ),n=h_.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=h_.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=h_.createHash("md5").update(r).digest("hex"),FD.set(r,n)),n}a(e3,"createNatsTableStreamName")});var gi=O((yye,YD)=>{"use strict";var Aye=$r(),p_=K(),VD=Uh(),t3=eo(),xh=te(),{handleHDBError:Hh,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=xh.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){p_.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 p_.error("Got an error in describeAll"),p_.error(t),Hh(new Error,kh.DESCRIBE_ALL_ERR)}}a(i3,"describeAll");async function Fh(e,t){xh.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 Hh(new Error,kh.SCHEMA_NOT_FOUND(e.schema),RR.NOT_FOUND);let l=c[n];if(!l)throw Hh(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){p_.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){p_.warn(`unable to stat table dbi due to ${f}`)}return E}a(Fh,"descTable");async function o3(e){xh.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 Hh(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]),xh.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 ls=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=gi(),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=ls(),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}=Si(),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}=Si(),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=ls(),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:x3};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 x3(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(x3,"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((xye,pL)=>{var H3=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 H3.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"},xl={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},rX={[xl.ERR]:1,[xl.WRN]:2,[xl.INF]:3,[xl.DBG]:4,[xl.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:xl,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:xe,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)]),Ri,NL=!1;IL.exports={configValidator:NX,routesValidator:LX,route_constraints:Yh};function NX(e,t=!1){if(NL=t,Ri=e.rootPath,vR.isEmpty(Ri))throw OX;let r=xe.optional(),n=nr.min(0).max(1e3).empty(null).default(DX),s=wt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(m_),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(m_),l=me.custom(wX).empty(null).default(m_),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:xe.optional(),databaseLevel:xe.optional(),tls:me.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:xe.required(),verify:xe.optional()}),user:wt.optional().empty(null)}).optional():_=me.object({enabled:r,tls:me.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:xe.optional()})}).optional(),me.object({authentication:me.alternatives(me.object({authorizeLocal:xe,cacheTTL:nr.required(),enableSessions:xe}),xe).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:xe.optional(),copyTablesToCatchUp:xe.optional()}).optional(),componentsRoot:s.optional(),clustering:_,localStudio:me.object({enabled:r}).required(),logging:me.object({auditAuthEvents:me.object({logFailed:xe,logSuccessful:xe}),file:xe.required(),level:me.valid("notify","fatal","error","warn","info","debug","trace"),rotation:me.object({enabled:xe.optional(),compress:xe.optional(),interval:wt.custom(PX).optional().empty(null),maxSize:wt.custom(CX).optional().empty(null),path:wt.optional().empty(null).default(m_)}).required(),root:s,stdStreams:xe.required(),auditLog:xe.required()}).required(),operationsApi:me.object({network:me.object({cors:xe.optional(),corsAccessList:uc.optional(),headersTimeout:nr.min(1).optional(),keepAliveTimeout:nr.min(1).optional(),port:ln,domainSocket:me.optional().empty("hdb/operations-server").default(m_),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([xe.optional(),me.object({user:wt.optional(),certificateAuthority:i,required:xe.optional()})])}).required(),webSocket:xe.optional(),requireAuthentication:xe.optional()}),http:me.object({compressionThreshold:nr.optional(),cors:xe.optional(),corsAccessList:uc.optional(),headersTimeout:nr.min(1).optional(),port:ln,securePort:ln,maxHeaderSize:nr.optional(),mtls:me.alternatives([xe.optional(),me.object({user:wt.optional(),certificateAuthority:i,required:xe.optional()})]),threadRange:me.alternatives([uc.optional(),wt.optional()])}).required(),threads:me.alternatives(n.optional(),me.object({count:n.optional(),debug:me.alternatives(xe.optional(),me.object({startingPort:nr.min(1).optional(),host:wt.optional(),waitForDebugger:xe.optional()})),maxHeapMemory:nr.min(0).optional()})),storage:me.object({writeAsync:xe.required(),overlappingSync:xe.optional(),caching:xe.optional(),compression:me.alternatives([xe.optional(),me.object({dictionary:wt.optional(),threshold:nr.optional()})]),compactOnStart:xe.optional(),compactOnStartKeepBackup:xe.optional(),noReadAhead:xe.optional(),path:l,prefetchWrites:xe.optional(),maxFreeSpaceToLoad:nr.optional(),maxFreeSpaceToRetain:nr.optional()}).required(),ignoreScripts:xe.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 m_(e,t){let r=t.state.path.join(".");if(!vR.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(vR.isEmpty(Ri))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return lc.join(Ri,gX);case"logging.root":return lc.join(Ri,bL);case"clustering.leafServer.streams.path":return lc.join(Ri,"clustering","leaf");case"storage.path":let n=lc.join(Ri,yL.LEGACY_DATABASES_DIR_NAME);return OL.existsSync(n)?n:lc.join(Ri,yL.DATABASES_DIR_NAME);case"logging.rotation.path":return lc.join(Ri,bL);case"operationsApi.network.domainSocket":return r==null?null:lc.join(Ri,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(m_,"setDefaultRoot");function LX(e){let t=me.object({routes:Yh});return TX.validateBySchema({routes:e},t)}a(LX,"routesValidator")});var Ct=O(xL=>{"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:xX,HDB_ERROR_MSGS:Hl}=Pn(),{server:HX}=(qr(),oe(Ja)),{DATABASES_PARAM_CONFIG:S_,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(xL,{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:xR,getFlatConfigObj:sZ});function xR(e){if(e?.startsWith("~/"))return Bn.join(hr.getHomeDir(),e.slice(1));let t=ne();return Bn.resolve(t.getHdbBasePath(),e)}a(xR,"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=HR(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(S_.TABLES))for(let i in n[s][S_.TABLES])for(let o in n[s][S_.TABLES][i]){let c=n[s][S_.TABLES][i][o],l=[vn.DATABASES,s,S_.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[vn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){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 xR(Bn.join(t,un.HDB_CONFIG_FILE));let r=DL(e);return xR(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(HX.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 Hl.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 Hl.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=MX(r,t);if(n.error)throw Hl.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=HR(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=HR(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 HR(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(HR,"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,xX.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 Hl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=hr.isEmptyOrZeroLength(n)?[]:n;let s=wL(n);if(s)throw Hl.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 Hl.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,HL)=>{"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}};HL.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 Hn=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(),xn=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:Ai,hdb_errors:bZ}=_e(),{HTTP_STATUS_CODES:yi,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 Ai(new Error,r.message,yi.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 Ai(new Error,ql.ROLE_NAME_NOT_FOUND(t.role),yi.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Ai(new Error,ql.DUP_ROLES_FOUND(t.role),yi.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 Ai(new Error,ql.USER_ALREADY_EXISTS(t.username),yi.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(xn.isEmptyOrZeroLength(t.username))throw new Error(QL);if(xn.isEmptyOrZeroLength(t.password)&&xn.isEmptyOrZeroLength(t.role)&&xn.isEmptyOrZeroLength(t.active))throw new Error(JL);if(!xn.isEmpty(t.password)&&xn.isEmptyOrZeroLength(t.password.trim()))throw new Error(XL);if(!xn.isEmpty(t.active)&&!xn.isBoolean(t.active))throw new Error(eM);let r=PZ(t.username);if(!xn.isEmpty(t.password)&&!xn.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),Ai(new Error,c,yi.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=ql.ALTER_USER_DUP_ROLES(t.role);throw Ke.error(c),Ai(new Error,c,yi.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(xn.isEmpty(global.hdb_users.get(e.username)))throw Ai(new Error,ql.USER_NOT_EXIST(e.username),yi.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),xn.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 Ai(new Error,WR.GENERIC_AUTH_FAIL,yi.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Ai(new Error,WR.USER_INACTIVE,yi.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 Ai(new Error,WR.GENERIC_AUTH_FAIL,yi.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(!xn.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 g_=O((abe,_M)=>{"use strict";var fc=K(),kn=L(),xZ=kD(),ibe=ls(),obe=gi(),HZ=Hn(),{validateEvent:lM}=$s(),T_=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 xZ(e.message),await $Z(e.message)}a(qZ,"schemaHandler");async function $Z(e){try{T_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),T_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),T_.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{T_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),T_.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 HZ.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:R_}=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||g_(),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 R_.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||eA.isEmpty(e.type))return R_.MISSING_TYPE;if(!e.hasOwnProperty("message")||eA.isEmpty(e.message))return R_.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||eA.isEmpty(e.message.originator))return R_.MISSING_ORIGIN;if(VZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return R_.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||g_();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||g_();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 A_=O((Dbe,MM)=>{"use strict";var Pbe=require("path"),PM=mt(),S5=yM(),T5=OM(),g5=IM(),R5=CM(),Yl=xt(),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=E_(),Mbe=Jd(),y_=L(),I5=Xd(),w5=nc().insertRecords,C5=mt(),P5=K(),D5=rp(),{getSchemaPath:L5}=Rt(),M5=A_();UM.exports=U5;async function U5(e){try{let{schema_table:t,attributes:r}=N5(e);I5(e,r,t.hash_attribute),e.schema!==y_.SYSTEM_SCHEMA_NAME&&(r.includes(y_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(y_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(y_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(y_.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 xM=O((Bbe,BM)=>{"use strict";var vM=L(),v5=oA(),B5=Jd(),x5=require("fs-extra"),{getSchemaPath:H5}=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 x5.mkdirp(H5(e.schema))}a(k5,"lmdbCreateSchema")});var kM=O((Hbe,HM)=>{"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}};HM.exports=aA});var $M=O(($be,qM)=>{"use strict";var FM=mt(),cA=on(),lA=Pn().LMDB_ERRORS_ENUM,F5=xt(),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,x=I.length;U<x;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 b_=O((Kbe,KM)=>{"use strict";var Wl=te(),Y5=$M(),W5=mt(),{getSchemaPath:j5}=Rt(),z5=A_(),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 e8(e,t,r,n){let s=uA(r,e);n[t]=s}a(e8,"searchAllToMap");function t8(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(t8,"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 r8(e,t,r,n,s,i){t.toString().endsWith(e)&&Ec(t,r,n,s,i)}a(r8,"endsWith");function n8(e,t,r,n,s,i){t.toString().includes(e)&&Ec(t,r,n,s,i)}a(n8,"contains");function s8(e,t,r,n,s,i){t>e&&Ec(t,r,n,s,i)}a(s8,"greaterThanCompare");function i8(e,t,r,n,s,i){t>=e&&Ec(t,r,n,s,i)}a(i8,"greaterThanEqualCompare");function o8(e,t,r,n,s,i){t<e&&Ec(t,r,n,s,i)}a(o8,"lessThanCompare");function a8(e,t,r,n,s,i){t<=e&&Ec(t,r,n,s,i)}a(a8,"lessThanEqualCompare");YM.exports={parseRow:uA,searchAll:Z5,searchAllToMap:e8,iterateDBI:t8,endsWith:r8,contains:n8,greaterThanCompare:s8,greaterThanEqualCompare:i8,lessThanCompare:o8,lessThanEqualCompare:a8,pushResults:Ec}});var jl=O((Zbe,ZM)=>{"use strict";var Xo=mt(),Qbe=K(),Fn=on(),sp=xt(),Qt=Pn().LMDB_ERRORS_ENUM,Jbe=te(),c8=L(),ip=dA(),{parseRow:l8}=ip,Xbe=require("lmdb"),{OVERFLOW_MARKER:WM,MAX_SEARCH_KEY_LENGTH:u8}=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 O_(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(O_,"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 d8(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=N_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>l8(u.value,r))))}a(d8,"searchAll");function _8(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=N_(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(_8,"searchAllToMap");function f8(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(f8,"iterateDBI");function E8(e,t){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);return Xo.statDBI(e,t).entryCount}a(E8,"countAll");function h8(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(h8,"equals");function p8(e,t,r){return Zo(e,t,r),Xo.openDBI(e,t).getValuesCount(r)}a(p8,"count");function m8(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(m8,"startsWith");function S8(e,t,r,n,s=!1,i=void 0,o=void 0){return QM(e,t,r,n,s,i,o,!0)}a(S8,"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 T8(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),O_(e,t,r,n,l,s,i,o,!0,!1)}a(T8,"greaterThan");function g8(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),O_(e,t,r,n,l,s,i,o,!1,!1)}a(g8,"greaterThanEqual");function R8(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),O_(e,t,r,l,n,s,i,o,!1,!0)}a(R8,"lessThan");function A8(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),O_(e,t,r,l,n,s,i,o,!1,!1)}a(A8,"lessThanEqual");function y8(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 O_(e,t,r,n,s,i,o,c)}a(y8,"between");function b8(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=N_(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(b8,"searchByHash");function O8(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(O8,"checkHashExists");function N8(e,t,r,n,s=[]){return XM(e,t,r,n,s),JM(e,t,r,n,s).map(i=>i[1])}a(N8,"batchSearchByHash");function I8(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(I8,"batchSearchByHashToMap");function JM(e,t,r,n,s=[]){return hc(e,t,t,(i,o,c)=>{r=N_(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>u8)throw new Error(Qt.SEARCH_VALUE_TOO_LARGE)}a(Zo,"validateComparisonFunctions");function N_(e,t){return t.length===1&&c8.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Xo.listDBIs(e)),t}a(N_,"setGetWholeRowAttributes");ZM.exports={searchAll:d8,searchAllToMap:_8,count:p8,countAll:E8,equals:h8,startsWith:m8,endsWith:S8,contains:QM,searchByHash:b8,setGetWholeRowAttributes:N_,batchSearchByHash:N8,batchSearchByHashToMap:I8,checkHashExists:O8,iterateDBI:f8,greaterThan:T8,greaterThanEqual:g8,lessThan:R8,lessThanEqual:A8,between:y8}});var zl=O((tOe,sU)=>{var eU=require("lodash"),tU=_t(),He=require("joi"),w8=te(),{hdb_schema_table:I_,checkValidTable:rU,hdb_table:nU,hdb_database:ap}=Si(),{handleHDBError:C8,hdb_errors:P8}=_e(),{getDatabases:D8}=(Pe(),oe(ut)),{HTTP_STATUS_CODES:L8}=P8,M8=He.object({database:ap,schema:ap,table:nU,search_attribute:I_,search_value:He.any().required(),get_attributes:He.array().min(1).items(He.alternatives(I_,He.object())).optional(),desc:He.bool(),limit:He.number().integer().min(1),offset:He.number().integer().min(0)}),U8=He.object({database:ap,schema:ap,table:nU,operator:He.string().valid("and","or").default("and").lowercase(),offset:He.number().integer().min(0),limit:He.number().integer().min(1),get_attributes:He.array().min(1).items(He.alternatives(I_,He.object())).optional(),sort:He.object({attribute:He.alternatives(I_,He.array().min(1)),descending:He.bool().optional()}).optional(),conditions:He.array().min(1).items(He.alternatives(He.object({operator:He.string().valid("and","or").default("and").lowercase(),conditions:He.array()}),He.object({search_attribute:He.alternatives(I_,He.array().min(1)),search_type:He.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:He.when("search_type",{switch:[{is:"equals",then:He.any()},{is:"between",then:He.array().items(He.alternatives([He.string(),He.number()])).length(2)}],otherwise:He.alternatives(He.string(),He.number())}).required()}))).required()});sU.exports=function(e,t){let r=null;switch(t){case"value":r=tU.validateBySchema(e,M8);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,U8);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=w8.checkGlobalSchemaTable(e.schema,e.table);if(s)return C8(new Error,s,L8.NOT_FOUND);let o=D8()[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 v8=mt(),B8=zl(),{getSchemaPath:x8}=Rt();iU.exports=H8;function H8(e){let t=B8(e,"hashes");if(t)throw t;let r=x8(e.schema,e.table);return v8.openEnvironment(r,e.table)}a(H8,"initialize")});var fA=O((iOe,oU)=>{"use strict";var k8=jl(),F8=_A();oU.exports=G8;async function G8(e){let t=await F8(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return k8.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(G8,"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(),q8=jl(),$8=_A();cU.exports=V8;async function V8(e){let t=await $8(e),r=global.hdb_schema[e.schema][e.table];return q8.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(V8,"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(),K8=mt(),Y8=te(),ke=xt(),pc=L(),W8=Xi(),dU=Pn().LMDB_ERRORS_ENUM,{getSchemaPath:j8}=Rt(),ro=pc.SEARCH_WILDCARDS;async function z8(e,t,r){let n;e.schema===pc.SYSTEM_SCHEMA_NAME?n=W8[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(z8,"prepSearch");async function fU(e,t,r,n){let s=j8(e.schema,e.table),i=await K8.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(Q8(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 Q8(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(Q8,"checkToFetchMore");function hU(e,t,r,n){if(Y8.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:z8,searchByType:EU}});var SU=O((mOe,mU)=>{"use strict";var pOe=Vs(),J8=zl(),X8=te(),Z8=L(),e6=cp();mU.exports=t6;function t6(e,t){if(!X8.isEmpty(t)&&Z8.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=J8(e,"value");if(n)throw n;return e6.prepSearch(e,t,!0)}a(t6,"lmdbGetDataByValue")});var w_=O((gOe,TU)=>{"use strict";var TOe=Vs(),r6=zl(),n6=te(),s6=L(),i6=cp();TU.exports=o6;async function o6(e,t){if(!n6.isEmpty(t)&&s6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=r6(e,"value");if(n)throw n;return i6.prepSearch(e,t,!1)}a(o6,"lmdbSearchByValue")});var RU=O((yOe,gU)=>{"use strict";var AOe=xt(),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,a6=Vs(),c6=zl(),TA=jl(),lp=xt(),{Resource:NOe}=(Ks(),oe(gA)),bU=cp(),l6=dA(),u6=require("lodash"),{getSchemaPath:d6}=Rt(),AU=mt(),{handleHDBError:_6,hdb_errors:f6}=_e(),{HTTP_STATUS_CODES:E6}=f6,h6=1e8;OU.exports=p6;async function p6(e){let t=c6(e,"conditions");if(t)throw _6(t,t.message,E6.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=d6(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=u6.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=h6}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=>l6.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(p6,"lmdbSearchByConditions");async function yU(e,t,r,n){let s=new a6(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 m6=L().OPERATIONS_ENUM,RA=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=m6.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=w_(),UU=b_(),dn=L(),wU=te(),CU=mt(),{getTransactionAuditStorePath:S6,getSchemaPath:T6}=Rt(),PU=K();vU.exports=g6;async function g6(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 R6(e),await A6(e);let t=T6(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=S6(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(g6,"lmdbDropTable");async function R6(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(R6,"deleteAttributesFromSystem");async function A6(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(A6,"dropTableFromSystem")});var xU=O((MOe,BU)=>{"use strict";var y6=require("fs-extra"),b6=Vs(),O6=Ql(),N6=Jl(),I6=AA(),w6=b_(),C6=fA(),P6=w_(),no=L(),{getSchemaPath:D6}=Rt(),{handleHDBError:L6,hdb_errors:M6}=_e(),{HDB_ERROR_MSGS:U6,HTTP_STATUS_CODES:v6}=M6;BU.exports=B6;async function B6(e){let t;try{t=await x6(e.schema);let r=new b6(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 P6(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await I6(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new N6(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await w6(s);let i=D6(t);await y6.remove(i)}catch(r){throw r}}a(B6,"lmdbDropSchema");async function x6(e){let t=new O6(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 C6(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw L6(new Error,U6.SCHEMA_NOT_FOUND(e),v6.NOT_FOUND,void 0,void 0,!0);return n}a(x6,"validateDropSchema")});var Xl=O((vOe,HU)=>{"use strict";var yA=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};HU.exports=yA});var OA=O((HOe,kU)=>{"use strict";var H6=require("fs-extra"),up=mt(),{getTransactionAuditStorePath:k6}=Rt(),bA=xt(),xOe=Xl();kU.exports=F6;async function F6(e){let t;try{let r=k6(e.schema,e.table);await H6.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(F6,"createTransactionsAuditEnvironment")});var qU=O((GOe,GU)=>{"use strict";var NA=L(),FU=mt(),G6=nc(),{getSystemSchemaPath:q6,getSchemaPath:$6}=Rt(),FOe=Xi(),V6=Bh(),IA=vh(),K6=K(),Y6=OA();GU.exports=W6;async function W6(e,t){let r=$6(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(q6(),NA.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await G6.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 Y6(t)}catch(o){throw o}}a(W6,"lmdbCreateTable");async function wA(e){try{await V6(e)}catch(t){K6.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(wA,"createAttribute")});var VU=O(($Oe,$U)=>{"use strict";var j6=E_(),z6=Xd(),Q6=rp(),C_=L(),J6=nc().updateRecords,X6=mt(),{getSchemaPath:Z6}=Rt(),e9=A_(),t9=K();$U.exports=r9;async function r9(e){try{let{schema_table:t,attributes:r}=j6(e);z6(e,r,t.hash_attribute),e.schema!==C_.SYSTEM_SCHEMA_NAME&&(r.includes(C_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(C_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(C_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(C_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Q6(e.hdb_auth_header,t,r),s=Z6(e.schema,e.table),i=await X6.openEnvironment(s,e.table),o=await J6(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=E_(),i9=Xd(),o9=rp(),P_=L(),a9=nc().upsertRecords,c9=mt(),{getSchemaPath:l9}=Rt(),u9=A_(),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!==P_.SYSTEM_SCHEMA_NAME&&(n.includes(P_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(P_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(P_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(P_.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(),D_=xt(),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,D_.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[D_.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[D_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];p9.isEmpty(c)||(s=e.dbis[D_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[D_.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(),bi=L(),O9=te(),UA=mt(),N9=Xi(),I9=w_(),w9=b_(),{getSchemaPath:C9}=Rt();sv.exports=P9;async function P9(e,t=!0){let r;e.schema===bi.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(bi.SYSTEM_SCHEMA_NAME,bi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await I9(t)).filter(o=>o[bi.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[bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new b9(bi.SYSTEM_SCHEMA_NAME,bi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return w9(i)}a(L9,"dropAttributeFromSystem")});var dv=O((lNe,uv)=>{"use strict";var vA=mt(),Zl=xt(),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,H9(r,e.search_values,s);case BA.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return x9(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 x9(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(x9,"searchTransactionsByUsername");function H9(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(H9,"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=a_(),j9=c_(),{AUDIT_STORE_OPTIONS:z9}=(Qi(),oe(Av)),{INTERNAL_DBIS_NAME:Q9,AUDIT_STORE_NAME:J9}=xt();gv.exports=Z9;var xA=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:x,version:X,value:W}of U.getRange({start:null,transaction:h,versions:U.useVersions}))E=I.put(x,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,x=new Tv(!U,U);await m(S,x)}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(xA);K9(c,u,0,xA),o.resetReadTxn();let d=o.useReadTransaction();d.renew();let _=Sv(null,{fd:c,start:xA}),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=xM(),o7=b_(),a7=fA(),c7=lU(),l7=SU(),u7=w_(),d7=NU(),_7=xU(),f7=qU(),E7=VU(),h7=jU(),p7=tv(),m7=AA(),S7=iv(),T7=dv(),g7=fv(),yv=mv(),R7=Rv(),HA=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=HA});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,L_,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(L_&&!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 L_||(L_=s,Iv=performance.now(),L_.then(()=>{L_=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(fi());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=Oi(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 Oi(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 xv(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*Hv(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(E_()),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=Oi(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 Oi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Oi(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){Oi(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 xv(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?xv(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=Oi(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=Oi(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){Oi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Oi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Oi(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 Hv(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return Hv(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(KA,"getSelect");a(Bv,"getRecords");a(Oi,"getTable");a(xv,"createDeleteResponse");a(Hv,"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"),M_=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:U_.bind(null,M_.mad),mean:U_.bind(null,M_.mean),mode:U_.bind(null,M_.mode),prod:U_.bind(null,M_.prod),median:U_.bind(null,M_.median)};function U_(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(U_,"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((HNe,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"),x7=require("@turf/circle"),H7=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 x7.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 H7(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(),Ni=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=Ni.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ni.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ni.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ni.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ni.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ni.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ni.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ni.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ni.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ni.geoNear}});var i0=O(($Ne,s0)=>{"use strict";var v_=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=v_.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&&v_.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=v_.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=v_.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=v_.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=ls(),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=ls(),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 xee=gi(),{hdb_errors:E0}=_e(),{getDatabases:h0}=(Pe(),oe(ut));m0.exports={checkSchemaExists:p0,checkSchemaTableExists:Hee,schema_describe:xee};async function p0(e){if(!h0()[e])return E0.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(p0,"checkSchemaExists");async function Hee(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(Hee,"checkSchemaTableExists")});var ru=O((sIe,kee)=>{kee.exports={name:"harperdb",version:"4.4.19",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.5",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 F_={};je(F_,{addAnalyticsListener:()=>k_,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 k_(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,B_.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,B_.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:x,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),x!==void 0&&(j+="-"+x);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:x,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,x;for(let Ne of D0){let Me=S*Ne;for(;I<Me;)x=m[U++],I+=x.count,U===1&&I--;let Gr=m[U>1?U-2:0];x||(x=m[0]),y.push(x.value-(x.value-Gr.value)*(I-Me)/x.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,H_.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,x_.dirname)((0,B_.getLogFilePath)());try{ea=await(0,ty.open)((0,x_.join)(r,"analytics.log"),"r+")}catch{ea=await(0,ty.open)((0,x_.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(HX.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 Hl.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 Hl.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=MX(r,t);if(n.error)throw Hl.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=HR(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=HR(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 HR(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(HR,"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,xX.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 Hl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=hr.isEmptyOrZeroLength(n)?[]:n;let s=wL(n);if(s)throw Hl.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 Hl.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,HL)=>{"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}};HL.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 Hn=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(),xn=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:Ai,hdb_errors:bZ}=_e(),{HTTP_STATUS_CODES:yi,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 Ai(new Error,r.message,yi.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 Ai(new Error,ql.ROLE_NAME_NOT_FOUND(t.role),yi.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Ai(new Error,ql.DUP_ROLES_FOUND(t.role),yi.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 Ai(new Error,ql.USER_ALREADY_EXISTS(t.username),yi.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(xn.isEmptyOrZeroLength(t.username))throw new Error(QL);if(xn.isEmptyOrZeroLength(t.password)&&xn.isEmptyOrZeroLength(t.role)&&xn.isEmptyOrZeroLength(t.active))throw new Error(JL);if(!xn.isEmpty(t.password)&&xn.isEmptyOrZeroLength(t.password.trim()))throw new Error(XL);if(!xn.isEmpty(t.active)&&!xn.isBoolean(t.active))throw new Error(eM);let r=PZ(t.username);if(!xn.isEmpty(t.password)&&!xn.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),Ai(new Error,c,yi.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=ql.ALTER_USER_DUP_ROLES(t.role);throw Ke.error(c),Ai(new Error,c,yi.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(xn.isEmpty(global.hdb_users.get(e.username)))throw Ai(new Error,ql.USER_NOT_EXIST(e.username),yi.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),xn.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 Ai(new Error,WR.GENERIC_AUTH_FAIL,yi.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Ai(new Error,WR.USER_INACTIVE,yi.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 Ai(new Error,WR.GENERIC_AUTH_FAIL,yi.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(!xn.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 g_=O((abe,_M)=>{"use strict";var fc=K(),kn=L(),xZ=kD(),ibe=ls(),obe=gi(),HZ=Hn(),{validateEvent:lM}=$s(),T_=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 xZ(e.message),await $Z(e.message)}a(qZ,"schemaHandler");async function $Z(e){try{T_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),T_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),T_.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{T_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),T_.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 HZ.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:R_}=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||g_(),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 R_.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||eA.isEmpty(e.type))return R_.MISSING_TYPE;if(!e.hasOwnProperty("message")||eA.isEmpty(e.message))return R_.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||eA.isEmpty(e.message.originator))return R_.MISSING_ORIGIN;if(VZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return R_.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||g_();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||g_();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 A_=O((Dbe,MM)=>{"use strict";var Pbe=require("path"),PM=mt(),S5=yM(),T5=OM(),g5=IM(),R5=CM(),Yl=xt(),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=E_(),Mbe=Jd(),y_=L(),I5=Xd(),w5=nc().insertRecords,C5=mt(),P5=K(),D5=rp(),{getSchemaPath:L5}=Rt(),M5=A_();UM.exports=U5;async function U5(e){try{let{schema_table:t,attributes:r}=N5(e);I5(e,r,t.hash_attribute),e.schema!==y_.SYSTEM_SCHEMA_NAME&&(r.includes(y_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(y_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(y_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(y_.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 xM=O((Bbe,BM)=>{"use strict";var vM=L(),v5=oA(),B5=Jd(),x5=require("fs-extra"),{getSchemaPath:H5}=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 x5.mkdirp(H5(e.schema))}a(k5,"lmdbCreateSchema")});var kM=O((Hbe,HM)=>{"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}};HM.exports=aA});var $M=O(($be,qM)=>{"use strict";var FM=mt(),cA=on(),lA=Pn().LMDB_ERRORS_ENUM,F5=xt(),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,x=I.length;U<x;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 b_=O((Kbe,KM)=>{"use strict";var Wl=te(),Y5=$M(),W5=mt(),{getSchemaPath:j5}=Rt(),z5=A_(),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=xt(),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 O_(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(O_,"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=N_(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=N_(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),O_(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),O_(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),O_(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),O_(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 O_(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=N_(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=N_(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 N_(e,t){return t.length===1&&c6.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Xo.listDBIs(e)),t}a(N_,"setGetWholeRowAttributes");ZM.exports={searchAll:d6,searchAllToMap:_6,count:p6,countAll:E6,equals:h6,startsWith:m6,endsWith:S6,contains:QM,searchByHash:b6,setGetWholeRowAttributes:N_,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(),He=require("joi"),w6=te(),{hdb_schema_table:I_,checkValidTable:rU,hdb_table:nU,hdb_database:ap}=Si(),{handleHDBError:C6,hdb_errors:P6}=_e(),{getDatabases:D6}=(Pe(),oe(ut)),{HTTP_STATUS_CODES:L6}=P6,M6=He.object({database:ap,schema:ap,table:nU,search_attribute:I_,search_value:He.any().required(),get_attributes:He.array().min(1).items(He.alternatives(I_,He.object())).optional(),desc:He.bool(),limit:He.number().integer().min(1),offset:He.number().integer().min(0)}),U6=He.object({database:ap,schema:ap,table:nU,operator:He.string().valid("and","or").default("and").lowercase(),offset:He.number().integer().min(0),limit:He.number().integer().min(1),get_attributes:He.array().min(1).items(He.alternatives(I_,He.object())).optional(),sort:He.object({attribute:He.alternatives(I_,He.array().min(1)),descending:He.bool().optional()}).optional(),conditions:He.array().min(1).items(He.alternatives(He.object({operator:He.string().valid("and","or").default("and").lowercase(),conditions:He.array()}),He.object({search_attribute:He.alternatives(I_,He.array().min(1)),search_type:He.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:He.when("search_type",{switch:[{is:"equals",then:He.any()},{is:"between",then:He.array().items(He.alternatives([He.string(),He.number()])).length(2)}],otherwise:He.alternatives(He.string(),He.number())}).required()}))).required()});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:x6}=Rt();iU.exports=H6;function H6(e){let t=B6(e,"hashes");if(t)throw t;let r=x6(e.schema,e.table);return v6.openEnvironment(r,e.table)}a(H6,"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=xt(),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 w_=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=xt(),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=xt(),{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=w_(),UU=b_(),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 xU=O((MOe,BU)=>{"use strict";var y8=require("fs-extra"),b8=Vs(),O8=Ql(),N8=Jl(),I8=AA(),w8=b_(),C8=fA(),P8=w_(),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 x8(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 x8(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(x8,"validateDropSchema")});var Xl=O((vOe,HU)=>{"use strict";var yA=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};HU.exports=yA});var OA=O((HOe,kU)=>{"use strict";var H8=require("fs-extra"),up=mt(),{getTransactionAuditStorePath:k8}=Rt(),bA=xt(),xOe=Xl();kU.exports=F8;async function F8(e){let t;try{let r=k8(e.schema,e.table);await H8.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=E_(),z8=Xd(),Q8=rp(),C_=L(),J8=nc().updateRecords,X8=mt(),{getSchemaPath:Z8}=Rt(),e9=A_(),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!==C_.SYSTEM_SCHEMA_NAME&&(r.includes(C_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(C_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(C_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(C_.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=E_(),i9=Xd(),o9=rp(),P_=L(),a9=nc().upsertRecords,c9=mt(),{getSchemaPath:l9}=Rt(),u9=A_(),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!==P_.SYSTEM_SCHEMA_NAME&&(n.includes(P_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(P_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(P_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(P_.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(),D_=xt(),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,D_.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[D_.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[D_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];p9.isEmpty(c)||(s=e.dbis[D_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[D_.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(),bi=L(),O9=te(),UA=mt(),N9=Xi(),I9=w_(),w9=b_(),{getSchemaPath:C9}=Rt();sv.exports=P9;async function P9(e,t=!0){let r;e.schema===bi.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(bi.SYSTEM_SCHEMA_NAME,bi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await I9(t)).filter(o=>o[bi.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[bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new b9(bi.SYSTEM_SCHEMA_NAME,bi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return w9(i)}a(L9,"dropAttributeFromSystem")});var dv=O((lNe,uv)=>{"use strict";var vA=mt(),Zl=xt(),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,H9(r,e.search_values,s);case BA.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return x9(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 x9(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(x9,"searchTransactionsByUsername");function H9(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(H9,"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=a_(),j9=c_(),{AUDIT_STORE_OPTIONS:z9}=(Qi(),oe(Av)),{INTERNAL_DBIS_NAME:Q9,AUDIT_STORE_NAME:J9}=xt();gv.exports=Z9;var xA=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:x,version:X,value:W}of U.getRange({start:null,transaction:h,versions:U.useVersions}))E=I.put(x,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,x=new Tv(!U,U);await m(S,x)}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(xA);K9(c,u,0,xA),o.resetReadTxn();let d=o.useReadTransaction();d.renew();let _=Sv(null,{fd:c,start:xA}),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=xM(),o7=b_(),a7=fA(),c7=lU(),l7=SU(),u7=w_(),d7=NU(),_7=xU(),f7=qU(),E7=VU(),h7=jU(),p7=tv(),m7=AA(),S7=iv(),T7=dv(),g7=fv(),yv=mv(),R7=Rv(),HA=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=HA});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,L_,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(L_&&!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 L_||(L_=s,Iv=performance.now(),L_.then(()=>{L_=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(fi());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=Oi(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 Oi(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 xv(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*Hv(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(E_()),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=Oi(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 Oi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Oi(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){Oi(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 xv(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?xv(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=Oi(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=Oi(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){Oi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Oi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Oi(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 Hv(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return Hv(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(KA,"getSelect");a(Bv,"getRecords");a(Oi,"getTable");a(xv,"createDeleteResponse");a(Hv,"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"),M_=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:U_.bind(null,M_.mad),mean:U_.bind(null,M_.mean),mode:U_.bind(null,M_.mode),prod:U_.bind(null,M_.prod),median:U_.bind(null,M_.median)};function U_(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(U_,"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((HNe,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"),x7=require("@turf/circle"),H7=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 x7.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 H7(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(),Ni=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=Ni.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ni.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ni.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ni.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ni.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ni.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ni.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ni.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ni.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ni.geoNear}});var i0=O(($Ne,s0)=>{"use strict";var v_=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=v_.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&&v_.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=v_.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=v_.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=v_.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=ls(),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=ls(),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 xee=gi(),{hdb_errors:E0}=_e(),{getDatabases:h0}=(Pe(),oe(ut));m0.exports={checkSchemaExists:p0,checkSchemaTableExists:Hee,schema_describe:xee};async function p0(e){if(!h0()[e])return E0.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(p0,"checkSchemaExists");async function Hee(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(Hee,"checkSchemaTableExists")});var ru=O((sIe,kee)=>{kee.exports={name:"harperdb",version:"4.4.20",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 F_={};je(F_,{addAnalyticsListener:()=>k_,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 k_(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,B_.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,B_.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:x,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),x!==void 0&&(j+="-"+x);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:x,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,x;for(let Ne of D0){let Me=S*Ne;for(;I<Me;)x=m[U++],I+=x.count,U===1&&I--;let Gr=m[U>1?U-2:0];x||(x=m[0]),y.push(x.value-(x.value-Gr.value)*(I-Me)/x.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,H_.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,x_.dirname)((0,B_.getLogFilePath)());try{ea=await(0,ty.open)((0,x_.join)(r,"analytics.log"),"r+")}catch{ea=await(0,ty.open)((0,x_.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,B_,x_,ty,Ap,H_,ry,yp,I0,Rp,w0,C0,P0,D0,T0,g0,L0,$ee,Vee,A0,y0,U0,b0,O0,Yee,B0,ea,Wee,Ii=Ie(()=>{gc=require("worker_threads"),N0=M(ot());Pe();B_=M(K()),x_=require("path"),ty=require("fs/promises"),Ap=M(on()),H_=M(ne()),ry=M(L());qr();(0,H_.initSync)();yp=new Map,I0=(0,H_.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(k_,"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:x0,recordActionBinary:Xee}=(Ii(),oe(F_)),{publishToStream:Zee}=Np,{ConsumerEvents:H0}=require("nats"),ete=$r(),{promisify:tte}=require("util"),G0=tte(setTimeout),Ip=1e4,wp,Op,rte,nte,q0,G_=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=G_.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?.(),G_.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(G_.get(e+n)==="close"||su.get(n)==="close"){G_.delete(e+n),c=!0;continue}l=await i.consume({max_messages:iy.get(oy.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),G_.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===H0.ConsumerDeleted&&(await l.close(),c=!0),d.type===H0.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);x0(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((x,X)=>({type:sy(o),value:x,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&&x0(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 br=ne();br.initSync();var lte=require("fs-extra"),ute=require("semver"),V_=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(),q_=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=Hn(),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}=(Ii(),oe(F_)),tB=bte(),Cte="clustering",Pte=Ite.engines[Pr.NATS_SERVER_NAME],Dte=V_.join(Nte,"dependencies"),dy=V_.join(Dte,`${process.platform}-${process.arch}`,Pr.NATS_BINARY_NAME),ly,uy,$_,Rc,Ac;dB.exports={runCommand:rB,checkNATSServerInstalled:Lte,createConnection:py,getConnection:K_,getJetStreamManager:Y_,getJetStream:sB,getNATSReferences:wi,getServerList:Ute,createLocalStream:my,listStreams:iB,deleteLocalStream:vte,getServerConfig:iu,listRemoteStreams:Bte,viewStream:xte,viewStreamIterator:Hte,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
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:br.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:br.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:br.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 K_(){return yc||(yc=py(br.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Qr=await yc),Qr||yc}a(K_,"getConnection");async function Y_(){if(Rc)return Rc;bc(Qr)&&await K_();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(Y_,"getJetStreamManager");async function sB(){if(Ac)return Ac;bc(Qr)&&await K_();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 wi(){let e=Qr||await K_(),t=Rc||await Y_(),r=Ac||await sB();return{connection:e,jsm:t,js:r}}a(wi,"getNATSReferences");async function Ute(e){let t=br.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 wi(),n=br.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=br.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=br.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 wi(),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 wi();await t.streams.delete(e)}a(vte,"deleteLocalStream");async function Bte(e){let{connection:t}=await wi(),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 xte(e,t=void 0,r=void 0){let{jsm:n,js:s}=await wi(),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(xte,"viewStream");async function*Hte(e,t=void 0,r=void 0){let{jsm:n,js:s}=await wi(),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(Hte,"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 wi(),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=br.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=V_.join(br.get(Qe.CONFIG_PARAMS.ROOTPATH),Cte);if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return bc(uy)&&(uy={port:q_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:q_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Pr.SERVER_SUFFIX.HUB,config_file:Pr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:V_.join(t,Pr.PID_FILES.HUB),hdb_nats_path:t}),uy;if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return bc(ly)&&(ly={port:q_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:q_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Pr.SERVER_SUFFIX.LEAF,config_file:Pr.NATS_CONFIG_FILES.LEAF_SERVER,domain:q_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Pr.SERVER_SUFFIX.LEAF,pid_file_path:V_.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 wi(),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 wi(),{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()<br.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(br.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=Dp.createNatsTableStreamName(e,t),{domain:s}=iu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await K_()).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(br.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 Y_()).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($_)return $_;if($_=(await Y_())?.nc?.info?.server_name,$_===void 0)throw new Error("Unable to get jetstream manager server name");return $_}a(Lp,"getJsmServerName");async function Xte(){let e=await Y_(),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=br.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=br.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=br.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:j_(e)??1,nodes:[]})})}i[n]=0,e.putSync(vp,(0,ou.pack)(r))}return r}function W_(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());us();ou=require("msgpackr"),vp=Symbol.for("remote-ids");a(Ty,"getIdMappingRecord");a(W_,"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:()=>xp,keyArrayToString:()=>au,resetResources:()=>tre,resources:()=>Ci});function tre(){return Ci=new xp}function au(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var EB,hB,xp,Ci,cu=Ie(()=>{Sc();Ry();EB=M(K()),hB=M(_e()),xp=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=Ht(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);_>-1?l=l.slice(0,_):l=null,u++}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:()=>Q_,shouldReplicateToNode:()=>z_,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 z_(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*Q_(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();us();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(z_,"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(Q_,"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){Hp.set(i,j_(l.auditStore));break}}}Pi.whenThreadsStarted.then(async()=>{let i=[];for await(let o of r.system.hdb_nodes.search([]))i.push(o);for(let o of Q_(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}];Hp.has(_)&&(T.push({replicateByDefault:E,name:at(),start_time:Hp.get(_),end_time:Date.now(),replicates:!0}),Hp.delete(_));let m=z_(i,_),g=Pi.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,Pi.onMessageByType)("disconnected-from-node",pu),(0,Pi.onMessageByType)("connected-to-node",Nc),(0,Pi.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 Pi,kp,Et,Ny,wB,CB,PB,sre,io,pu,Nc,Eu,Hp,J_=Ie(()=>{Pe();Pi=M(ot());us();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,Hp=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,Pi.onMessageByType)("subscribe-to-node",e=>{hu(e)}),(0,Pi.onMessageByType)("unsubscribe-from-node",e=>{Fp(e)}));a(oo,"ensureNode")});var X_=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 ef=require("jsonwebtoken"),Dy=require("fs-extra"),Ly=te(),ds=L(),{handleHDBError:fn,hdb_errors:are}=_e(),{HTTP_STATUS_CODES:En,AUTHENTICATION_ERROR_MSGS:hn}=are,Z_=K(),BB=Kh(),vy=Hn(),cre=Vr().update,lre=X_(),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(ds.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?sa.get(ds.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",hre=sa.get(ds.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?sa.get(ds.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",qp="RS256",Uy;kB.exports={createTokens:pre,validateOperationToken:Sre,refreshOperationToken:mre,validateRefreshToken:HB,getJWTRSAKeys:tf};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 Z_.error(E),fn(new Error,hn.INVALID_CREDENTIALS,En.UNAUTHORIZED,void 0,void 0,!0)}let r=await tf(),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 xB(i,r.private_key,r.passphrase),c=await ef.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:hre,algorithm:qp,subject:Gp.REFRESH}),l=BB.hash(c),u=new lre(ds.SYSTEM_SCHEMA_NAME,ds.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),d,_;try{d=await cre(u)}catch(E){Z_.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 xB(e,t,r){return await ef.sign(e,{key:t,passphrase:r},{expiresIn:Ere,algorithm:qp,subject:Gp.OPERATION})}a(xB,"signOperationToken");async function tf(){if(Uy===void 0)try{let e=My.join(sa.getHdbBasePath(),ds.LICENSE_KEY_DIR_NAME,ds.JWT_ENUM.JWT_PASSPHRASE_NAME),t=My.join(sa.getHdbBasePath(),ds.LICENSE_KEY_DIR_NAME,ds.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=My.join(sa.getHdbBasePath(),ds.LICENSE_KEY_DIR_NAME,ds.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 Z_.error(e),fn(new Error,hn.NO_ENCRYPTION_KEYS,En.INTERNAL_SERVER_ERROR)}return Uy}a(tf,"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 HB(e.refresh_token);let t=await tf(),r=await ef.decode(e.refresh_token);return{operation_token:await xB({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 tf(),r=await ef.verify(e,t.public_key,{algorithms:qp,subject:Gp.OPERATION});return await vy.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Z_.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 HB(e){let t;try{let r=await tf(),n=await ef.verify(e,r.public_key,{algorithms:qp,subject:Gp.REFRESH});t=await vy.findAndValidateUser(n.username,void 0,!1)}catch(r){throw Z_.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(HB,"validateRefreshToken")});var Zs=O(ux=>{"use strict";var ir=require("path"),pn=require("fs-extra"),Su=require("node-forge"),YB=require("net"),{generateKeyPair:xy,X509Certificate:ao,createPrivateKey:WB}=require("crypto"),Tre=require("util");xy=Tre.promisify(xy);var bt=Su.pki,Js=require("joi"),{v4:jB}=require("uuid"),{validateBySchema:Gy}=_t(),St=K(),_s=ne(),Es=L(),{CONFIG_PARAMS:Tu}=Es,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(),Hy=Ct(),GB=parseInt(process.version.slice(1))<20,{table:Are,getDatabases:yre,databases:By}=(Pe(),oe(ut)),{getJWTRSAKeys:qB}=mu();Object.assign(ux,{generateKeys:Vy,updateConfigCert:nx,createCsr:Dre,signCertificate:Lre,setCertTable:gu,loadCertificates:ex,reviewSelfSignedCert:Yy,createTLSSelector:ox,listCertificates:cx,addCertificate:Hre,removeCertificate:Fre,createNatsCerts:vre,generateCertsKeys:Ure,getReplicationCert:nf,getReplicationCertAuth:Pre,renewSelfSigned:Bre,hostnamesFromCert:lx,getKey:Gre});var{urlToNodeName:QB,getThisNodeUrl:bre,getThisNodeName:Vp,clearThisNodeName:Ore}=(us(),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,rf=["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===Es.ITC_EVENT_TYPES.RESTART&&(_s.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 nf(){let e=ox("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(nf,"getReplicationCert");async function Pre(){ca();let e=(await nf()).options.cert,r=new ao(e).issuer.match(/CN=(.*)/)?.[1];return Dr.get(r)}a(Pre,"getReplicationCertAuth");var $B,aa=new Map;function ex(){if($B)return;$B=!0;let e=[{configKey:Tu.TLS},{configKey:Tu.OPERATIONSAPI_TLS}];ca();let t=ir.dirname(Hy.getConfigFilePath()),r;for(let{configKey:n}of e){let s=Hy.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=sx(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(ex,"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(sx(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=rf[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=rf[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 nf(),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:tx()}];return St.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Su.pki.certificationRequestToPem(n)}a(Dre,"createCsr");function tx(){let e=rf.includes($p())?rf:[...rf,$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(tx,"certExtensions");async function Lre(e){let t={},r=ir.join(_s.getHdbBasePath(),Es.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 xy("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 nf();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(tx()),n.sign(e,Su.md.sha256.create()),bt.certificateToPem(n)}a(Ky,"generateCertificates");async function Fy(){let e=await cx(),t;for(let r of e){if(!r.is_authority)continue;let n=await ax(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 rx(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-${_s.get(Tu.REPLICATION_HOSTNAME)??QB(_s.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(_s.getHdbBasePath(),Es.LICENSE_KEY_DIR_NAME),c=ir.join(o,Xs.PRIVATEKEY_PEM_NAME);return r&&await pn.writeFile(c,bt.privateKeyToPem(e)),n}a(rx,"generateCertAuthority");async function Ure(){let{private_key:e,public_key:t}=await Vy(),r=await rx(e,t),n=await Ky(e,t,r);await Mre(n,r),nx()}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(_s.getHdbBasePath(),Es.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 ex(),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=_s.get(Tu.TLS_PRIVATEKEY),n=ir.join(_s.getHdbBasePath(),Es.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 rx(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 nf()){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 nx(){let e=Rre(Object.keys(Es.CONFIG_PARAM_MAP),!0),t=ir.join(_s.getHdbBasePath(),Es.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=Es.CONFIG_PARAMS,o={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(o[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(o[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,o[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,o[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),Hy.updateConfigValue(void 0,void 0,o,!1,!0)}a(nx,"updateConfigCert");function sx(e){return e.startsWith("-----BEGIN")?e:Nre(e,"utf8")}a(sx,"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 ix=wc.Server;wc.Server=function(e,t){return e.ALPNCallback&&(e.ALPNProtocols=null),ix.call(this,e,t)};wc.Server.prototype=ix.prototype;var xre=ZB.prototype._init;ZB.prototype._init=function(e,t){xre.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 ox(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 ax(_.private_key_name),T=_.certificate,m=new ao(T);if(Ic.has(m.issuer)&&(T+=`
|