harperdb 4.3.0-beta.8 → 4.3.0-beta.9

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.
@@ -4,8 +4,8 @@
4
4
  `).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:$q.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(Qq,"findPs")});var _t=g((roe,SO)=>{"use strict";var zq="__dbis__",Jq="__txns__",Xq="__environment_name__",jq="__dbi_defintion__",Zq={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"},ek=["__createdtime__","__updatedtime__"],tk="\uFFFF",pO={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},rk=Object.values(pO);SO.exports={AUDIT_STORE_NAME:Jq,INTERNAL_DBIS_NAME:zq,DBI_DEFINITION_NAME:jq,SEARCH_TYPES:Zq,TIMESTAMP_NAMES:ek,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Xq,TRANSACTIONS_DBI_NAMES_ENUM:pO,TRANSACTIONS_DBIS:rk,OVERFLOW_MARKER:tk}});var Nr=g((noe,IO)=>{"use strict";var TO=U(),gO=_t(),RO={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},AO=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),OO={500:AO("There was an error processing your request."),400:"Invalid request"},nk=OO[RO.INTERNAL_SERVER_ERROR],sk={OP_NOT_SUPPORTED_FOR_FS:e=>`${e} is not available for this instance because it uses the File System data store.`,MISSING_VALUE:e=>`${e} is missing.`,INVALID_VALUE:e=>`${e} is invalid.`,NOT_FOUND:e=>`${e} not found.`},ik={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},ok={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:e=>`There was an error downloading '${e}'.`,INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,INVALID_FILE_EXT_ERR:e=>`Error selecting correct parser - valid file type not found in json - ${e}`,MAX_FILE_SIZE_ERR:(e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:e=>`There was an error downloading '${e}' from AWS.`,WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},ak={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 ${gO.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${gO.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"},ck={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${TO.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${TO.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"},bO={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"},uk={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:e=>`Operation '${e}' is restricted to 'super_user' roles`,OP_NOT_FOUND:e=>`Operation '${e}' not found`,SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:(e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,USER_HAS_NO_PERMS:e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},lk={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view database metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},_k={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`database '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`database '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in '${e}'`,SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},dk={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},fk={ALTER_USER_DUP_ROLES:e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,ALTER_USER_ROLE_NOT_FOUND:e=>`Update failed. Requested '${e}' role not found.`,DUP_ROLES_FOUND:e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,ROLE_NAME_NOT_FOUND:e=>`${e} role not found`,USER_ALREADY_EXISTS:e=>`User ${e} already exists`,USER_NOT_EXIST:e=>`User ${e} does not exist`},yO={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`},NO={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:e=>`ITC server received invalid event type: ${e}`},Ek={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."},hk={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},mk={...bO,...ok,...sk,...uk,...lk,..._k,...dk,...fk,...ck,...yO,...NO,...Ek,...hk,...ik};IO.exports={CHECK_LOGS_WRAPPER:AO,HDB_ERROR_MSGS:mk,DEFAULT_ERROR_MSGS:OO,DEFAULT_ERROR_RESP:nk,HTTP_STATUS_CODES:RO,LMDB_ERRORS_ENUM:ak,AUTHENTICATION_ERROR_MSGS:bO,VALIDATION_ERROR_MSGS:yO,ITC_ERRORS:NO}});var ne=g((ioe,DO)=>{"use strict";var vo=Nr(),pk=K(),Sk=U(),Vl=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,wO),this.statusCode=n||vo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(vo.DEFAULT_ERROR_MSGS[n]?vo.DEFAULT_ERROR_MSGS[n]:vo.DEFAULT_ERROR_MSGS[vo.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&&pk[s](i)}},Th=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}},gh=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function wO(e,t,r,n=Sk.LOG_LEVELS.ERROR,s=null,i=!1){if(CO(e))return e;let o=new Vl(e,t,r,n,s);return i&&delete o.stack,o}a(wO,"handleHDBError");function CO(e){return e.__proto__.constructor.name===Vl.name}a(CO,"isHDBError");DO.exports={isHDBError:CO,handleHDBError:wO,ClientError:Th,ServerError:gh,hdb_errors:vo}});var MO=g((aoe,LO)=>{"use strict";var Tk={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
5
5
  `),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
6
6
  `)},gk="certificate.pem",Rk="privateKey.pem",Ak="ca.pem";LO.exports={CERTIFICATE_VALUES:Tk,CERTIFICATE_PEM_NAME:gk,PRIVATEKEY_PEM_NAME:Rk,CA_PEM_NAME:Ak}});var je=g((coe,UO)=>{"use strict";var nr=require("validate.js");nr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||nr.validators.type.checks[t](e)?null:` must be a '${t}' value`};nr.validators.type.checks={Object:function(e){return nr.isObject(e)&&!nr.isArray(e)},Array:nr.isArray,Integer:nr.isInteger,Number:nr.isNumber,String:nr.isString,Date:nr.isDate,Boolean:function(e){return typeof e=="boolean"}};nr.validators.hasValidFileExt=function(e,t){return nr.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};UO.exports={validateObject:Ok,validateObjectAsync:bk,validateBySchema:yk};function Ok(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=nr(e,t,{format:"flat"});return r?new Error(r):null}a(Ok,"validateObject");async function bk(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await nr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(bk,"validateObjectAsync");function yk(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(yk,"validateBySchema")});var Ah=g((_oe,xO)=>{"use strict";var HO=require("fs-extra"),ie=require("joi"),Nk=require("os"),{boolean:ye,string:sr,number:Rt,array:Rh}=ie.types(),{totalmem:PO}=require("os"),Ci=require("path"),Ik=K(),$l=z(),loe=MO(),vO=U(),wk=je(),BO="log",Ck="components",Dk="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Lk="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Mk="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",Uk="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",Pk="rootPath config parameter is undefined",vk="clustering.enabled config parameter is undefined",Di=Rt.min(0).required(),Yl=Rh.items({host:sr.required(),port:Di}).empty(null),Yn;xO.exports={configValidator:Bk,routesValidator:kk,route_constraints:Yl};function Bk(e){if(Yn=e.rootPath,$l.isEmpty(Yn))throw Pk;let t=ye.required(),r=Rt.min(0).max(1e3).empty(null).default(qk),n=sr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(ac),s=sr.optional().empty(null),i=sr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ie.string().empty(null).default(ac),c=ie.custom(xk).empty(null).default(ac),u=e.clustering?.enabled;if($l.isEmpty(u))throw vk;let _;return u===!0?_=ie.object({enabled:t,hubServer:ie.object({cluster:ie.object({name:ie.required().empty(null),network:ie.object({port:Di,routes:Yl}).required()}).required(),leafNodes:ie.object({network:ie.object({port:Di}).required()}).required(),network:ie.object({port:Di}).required()}).required(),leafServer:ie.object({network:ie.object({port:Di,routes:Yl}).required(),streams:ie.object({maxAge:Rt.min(120).allow(null).optional(),maxBytes:Rt.min(1).allow(null).optional(),maxMsgs:Rt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ie.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:ye.optional(),databaseLevel:ye.optional(),tls:ie.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:ye.required(),verify:ye.optional()}),user:sr.optional().empty(null)}).required():_=ie.object({enabled:t,tls:ie.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:ye.required()})}).required(),ie.object({authentication:ie.object({authorizeLocal:ye,cacheTTL:Rt.required(),enableSessions:ye}),analytics:ie.object({aggregatePeriod:Rt}),componentsRoot:n.optional(),clustering:_,localStudio:ie.object({enabled:t}).required(),logging:ie.object({auditAuthEvents:ie.object({logFailed:ye,logSuccessful:ye}),file:ye.required(),level:ie.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ie.object({enabled:ye.optional(),compress:ye.optional(),interval:sr.custom(Fk).optional().empty(null),maxSize:sr.custom(Gk).optional().empty(null),path:sr.optional().empty(null).default(ac)}).required(),root:n,stdStreams:ye.required(),auditLog:ye.required()}).required(),operationsApi:ie.object({network:ie.object({cors:ye.optional(),corsAccessList:Rh.optional(),headersTimeout:Rt.min(1).optional(),keepAliveTimeout:Rt.min(1).optional(),port:Rt.optional().empty(null),domainSocket:ie.optional().empty("hdb/operations-server").default(ac),securePort:Rt.optional().empty(null),timeout:Rt.min(1).optional()}).optional(),tls:ie.object({certificate:s,certificateAuthority:s,privateKey:s})}).required(),rootPath:sr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ie.object({network:ie.object({port:Di,securePort:Di,mtls:ie.alternatives([ye.optional(),ie.object({user:sr.optional(),certificateAuthority:s,required:ye.optional()})])}).required(),webSocket:ye.optional(),requireAuthentication:ye.optional()}),http:ie.object({compressionThreshold:Rt.optional(),cors:ye.optional(),corsAccessList:Rh.optional(),headersTimeout:Rt.min(1).optional(),port:Rt.min(0).optional().empty(null),securePort:Rt.min(0).optional().empty(null),mtls:ie.alternatives([ye.optional(),ie.object({user:sr.optional(),certificateAuthority:s,required:ye.optional()})])}).required(),threads:ie.alternatives(r.optional(),ie.object({count:r.optional(),debug:ie.alternatives(ye.optional(),ie.object({startingPort:Rt.min(1).optional(),host:sr.optional(),waitForDebugger:ye.optional()})),maxHeapMemory:Rt.min(0).optional()})),storage:ie.object({writeAsync:ye.required(),overlappingSync:ye.optional(),caching:ye.optional(),compression:ye.optional(),noReadAhead:ye.optional(),path:c,prefetchWrites:ye.optional()}).required(),ignoreScripts:ye.optional(),tls:ie.object({certificate:s.optional(),certificateAuthority:s.optional(),privateKey:s.optional(),ciphers:sr.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(Bk,"configValidator");function Hk(e){return HO.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Hk,"doesPathExist");function xk(e,t){ie.assert(e,sr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Hk(e);if(r)return t.message(r)}a(xk,"validatePath");function Gk(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Dk);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Mk):e}a(Gk,"validateRotationMaxSize");function Fk(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Lk);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Uk):e}a(Fk,"validateRotationInterval");function qk(e,t){let r=t.state.path.join("."),n=Nk.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||PO();return i=Math.round(Math.min(i,PO())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),Ik.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(qk,"setDefaultThreads");function ac(e,t){let r=t.state.path.join(".");if(!$l.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if($l.isEmpty(Yn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Ci.join(Yn,Ck);case"logging.root":return Ci.join(Yn,BO);case"clustering.leafServer.streams.path":return Ci.join(Yn,"clustering","leaf");case"storage.path":let n=Ci.join(Yn,vO.LEGACY_DATABASES_DIR_NAME);return HO.existsSync(n)?n:Ci.join(Yn,vO.DATABASES_DIR_NAME);case"logging.rotation.path":return Ci.join(Yn,BO);case"operationsApi.network.domainSocket":return r==null?null:Ci.join(Yn,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(ac,"setDefaultRoot");function kk(e){let t=ie.object({routes:Yl});return wk.validateBySchema({routes:e},t)}a(kk,"routesValidator")});var Li={};$e(Li,{server:()=>Ze});var GO,Ze,ir=Re(()=>{GO=require("../../index"),Ze={};(0,GO._assignPackageExport)("server",Ze)});var Cr=g((Eoe,QO)=>{"use strict";var wr=U(),Dt=z(),At=K(),{configValidator:Vk,routesValidator:FO}=Ah(),or=require("fs-extra"),$k=require("yaml"),Rn=require("path"),Yk=require("is-number"),kO=require("properties-reader"),Kk=require("lodash"),{handleHDBError:Wk}=ne(),{HTTP_STATUS_CODES:Qk,HDB_ERROR_MSGS:Kl}=Nr(),foe=require("minimist"),{server:zk}=(ir(),se(Li)),{DATABASES_PARAM_CONFIG:cc,CONFIG_PARAMS:Ir,CONFIG_PARAM_MAP:An}=wr,Jk="Unable to get config value because config is uninitialized",Xk="Config successfully initialized",jk="Error backing up config file",Zk="Empty parameter sent to getConfigValue",VO=Rn.join(wr.PACKAGE_ROOT,"config","yaml",wr.HDB_DEFAULT_CONFIG_FILE),eV="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",qO={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"},Wl,Ot,Ql;QO.exports={createConfigFile:tV,getDefaultConfig:rV,getConfigValue:YO,initConfig:bh,flattenConfig:Bo,updateConfigValue:KO,updateConfigObject:sV,getConfiguration:aV,setConfiguration:cV,readConfigFile:Nh,getClusteringRoutes:uV,initOldConfig:WO,getConfigFromFile:lV,getConfigFilePath:Mi,addConfig:_V,deleteConfigFromFile:dV,getConfigObj:fV};function tV(e){let t=Qs(VO);Wl=Bo(t.toJSON());let r;for(let o in e){let c=An[o.toLowerCase()];if(c===Ir.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=Oh(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){At.error(l)}}}r&&$O(t,r),yh(t);let n=t.toJSON();Ot=Bo(n);let s=t.getIn(["rootPath"]),i=Rn.join(s,wr.HDB_CONFIG_FILE);or.createFileSync(i),or.writeFileSync(i,String(t)),At.trace(`Config file written to ${i}`)}a(tV,"createConfigFile");function $O(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Dt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(cc.TABLES))for(let i in n[s][cc.TABLES])for(let o in n[s][cc.TABLES][i]){let c=n[s][cc.TABLES][i][o],u=[Ir.DATABASES,s,cc.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in n[s]){let o=n[s][i],c=[Ir.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){At.error("Error parsing schemas CLI/env config arguments",n)}}a($O,"setSchemasConfig");function rV(e){if(Wl===void 0){let r=Qs(VO);Wl=Bo(r.toJSON())}let t=An[e.toLowerCase()];if(t!==void 0)return Wl[t.toLowerCase()]}a(rV,"getDefaultConfig");function YO(e){if(e==null){At.error(Zk);return}if(Ot===void 0){At.trace(Jk);return}let t=An[e.toLowerCase()];if(t!==void 0)return Ot[t.toLowerCase()]}a(YO,"getConfigValue");function Mi(e=Dt.getPropsFilePath()){let t=Dt.getEnvCliRootPath();return t?Rn.join(t,wr.HDB_CONFIG_FILE):kO(e).get(wr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Mi,"getConfigFilePath");function bh(e=!1){if(Ot===void 0||e){let t;if(!Dt.noBootFile()){t=Dt.getPropsFilePath();try{or.accessSync(t,or.constants.F_OK|or.constants.R_OK)}catch(i){throw At.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Mi(t),n;if(r.includes("config/settings.js"))try{WO(r);return}catch(i){if(i.code!==wr.NODE_ERROR_CODES.ENOENT)throw i}try{n=Qs(r)}catch(i){if(i.code===wr.NODE_ERROR_CODES.ENOENT){At.trace(`HarperDB config file not found at ${r}.
7
- This can occur during early stages of install where the config file has not yet been created`);return}else throw At.error(i),new Error(`Error reading HarperDB config file at ${r}`)}nV(n,r),yh(n);let s=n.toJSON();if(zk.config=s,Ot=Bo(s),Ot.logging_rotation_rotate)for(let i in qO)Ot[i]&&At.error(`Config ${qO[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);At.trace(Xk)}}a(bh,"initConfig");function nV(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Rn.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Rn.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Rn.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),n&&(At.trace("Updating config file with missing config params"),or.writeFileSync(t,String(e)))}a(nV,"checkForUpdatedConfig");function yh(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t?.http?.threads&&(t.threads=t?.http?.threads);let r=Vk(t);if(r.error)throw Kl.CONFIG_VALIDATION(r.error.message);typeof r.value.threads=="object"?e.setIn(["threads","count"],r.value.threads.count):e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],r.value?.operationsApi?.network?.domainSocket)}a(yh,"validateConfig");function sV(e,t){Ot===void 0&&(Ot={});let r=An[e.toLowerCase()];if(r===void 0){At.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ot[r.toLowerCase()]=t}a(sV,"updateConfigObject");function KO(e,t,r=void 0,n=!1,s=!1,i=!1){Ot===void 0&&bh();let o=YO(An.hdb_root),c=Rn.join(o,wr.HDB_CONFIG_FILE),u=Qs(c),_;if(r===void 0&&e.toLowerCase()===Ir.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=An[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=Oh(f,t);u.setIn([...E],h)}else for(let f in r){let E=An[f.toLowerCase()];if(E===Ir.HTTP_SECUREPORT&&r[f]===Ot[Ir.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===Ir.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===Ot[Ir.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===Ir.DATABASES){_=r[f];continue}if(E?.startsWith("threads_")){let h=u.getIn(["threads"]);h>=0&&(u.deleteIn(["threads"]),u.setIn(["threads","count"],h))}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=wr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=Oh(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof u.getIn(h.slice(0,-1))=="boolean"&&u.deleteIn(h.slice(0,-1)),u.setIn([...h],S)}catch(T){At.error(T)}}}_&&$O(u,_),yh(u);let l=u.getIn(["rootPath"]),d=Rn.join(l,wr.HDB_CONFIG_FILE);n===!0&&iV(c,l),or.writeFileSync(d,String(u)),s&&(Ot=Bo(u.toJSON())),At.trace(`Config parameter: ${e} updated with value: ${t}`)}a(KO,"updateConfigValue");function iV(e,t){try{let r=Rn.join(t,"backup",`${wr.HDB_CONFIG_FILE}.bak`);or.copySync(e,r),At.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){At.error(jk),At.error(r)}}a(iV,"backupConfigFile");var oV=["databases"];function Bo(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),Ql=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])&&!oV.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!Ir[u.toUpperCase()]&&An[u]&&(s[An[u].toLowerCase()]=o[c]),s[u]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Bo,"flattenConfig");function Oh(e,t){if(e===Ir.CLUSTERING_NODENAME||e===Ir.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(Yk(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Dt.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 Dt.autoCast(t)}a(Oh,"castConfigValue");function aV(){let e=Dt.getPropsFilePath(),t=Mi(e);return Qs(t).toJSON()}a(aV,"getConfiguration");async function cV(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return KO(void 0,void 0,s,!0),eV}catch(i){throw typeof i=="string"||i instanceof String?Wk(i,i,Qk.BAD_REQUEST,void 0,void 0,!0):i}}a(cV,"setConfiguration");function Nh(){let e=Dt.getPropsFilePath();try{or.accessSync(e,or.constants.F_OK|or.constants.R_OK)}catch(n){if(!Dt.noBootFile())throw At.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Mi(e);return Qs(t).toJSON()}a(Nh,"readConfigFile");function Qs(e){return $k.parseDocument(or.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Qs,"parseYamlDoc");function uV(){let e=Nh(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Dt.isEmptyOrZeroLength(t)?[]:t;let r=FO(t);if(r)throw Kl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Dt.isEmptyOrZeroLength(n)?[]:n;let s=FO(n);if(s)throw Kl.CONFIG_VALIDATION(s.message);if(!Dt.isEmptyOrZeroLength(n)&&!Dt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Dt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Kl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(uV,"getClusteringRoutes");function WO(e){let t=kO(e);Ot={};for(let r in An){let n=t.get(r.toUpperCase());if(Dt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=An[r].toLowerCase();s===Ir.LOGGING_ROOT?Ot[s]=Rn.dirname(n):Ot[s]=n}return Ot}a(WO,"initOldConfig");function lV(e){let t=Nh();return Kk.get(t,e.replaceAll("_","."))}a(lV,"getConfigFromFile");async function _V(e,t){let r=Qs(Mi());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await or.writeFile(Mi(),String(r))}a(_V,"addConfig");function dV(e){let t=Mi(Dt.getPropsFilePath()),r=Qs(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Rn.join(n,wr.HDB_CONFIG_FILE);or.writeFileSync(s,String(r))}a(dV,"deleteConfigFromFile");function fV(){return Ql||(bh(),Ql)}a(fV,"getConfigObj")});var re=g((moe,jO)=>{"use strict";var Ih=require("fs-extra"),Ui=require("path"),zO=require("os"),EV=require("properties-reader"),lc=K(),uc=z(),ue=U(),zl=Cr(),hV="Error initializing environment manager",Jl="BOOT_PROPS_FILE_PATH",JO=!1,mV={[ue.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},ms={};jO.exports={BOOT_PROPS_FILE_PATH:Jl,getHdbBasePath:pV,setHdbBasePath:SV,get:XO,initSync:gV,setProperty:Me,initTestEnvironment:RV};function pV(){return ms[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(pV,"getHdbBasePath");function SV(e){ms[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(SV,"setHdbBasePath");function XO(e){let t=zl.getConfigValue(e);return t===void 0?ms[e]:t}a(XO,"get");function Me(e,t){mV[e]&&(ms[e]=t),zl.updateConfigObject(e,t)}a(Me,"setProperty");function TV(){let e;try{e=uc.getPropsFilePath(),Ih.accessSync(e,Ih.constants.F_OK|Ih.constants.R_OK),JO=!0;let t=EV(e);return ms[ue.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ue.HDB_SETTINGS_NAMES.INSTALL_USER),ms[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ms[Jl]=e,!0}catch{return lc.trace(`Environment manager found no properties file at ${e}`),!1}}a(TV,"doesPropFileExist");function gV(e=!1){try{(JO||TV()||uc.noBootFile())&&(zl.initConfig(e),ms[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=zl.getConfigValue(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){lc.error(hV),lc.error(t),console.error(t),process.exit(1)}}a(gV,"initSync");function RV(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Ui.join(__dirname,"../../","unitTests");ms[Jl]=Ui.join(u,"hdb_boot_properties.file"),Me(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Ui.join(u,"settings.test")),Me(ue.HDB_SETTINGS_NAMES.INSTALL_USER,zO.userInfo()?zO.userInfo().username:void 0),Me(ue.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Me(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Ui.join(u,"envDir","log")),Me(ue.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Me(ue.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Me(ue.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Me(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Ui.join(u,"envDir")),Me(ue.CONFIG_PARAMS.STORAGE_PATH,Ui.join(u,"envDir")),s&&(Me(ue.CONFIG_PARAMS.HTTP_SECUREPORT,XO(ue.CONFIG_PARAMS.HTTP_PORT)),Me(ue.CONFIG_PARAMS.HTTP_PORT,null)),Me(ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Me(ue.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Me(ue.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,uc.isEmpty(i)?!1:i),Me(ue.CONFIG_PARAMS.HTTP_CORS,uc.isEmpty(i)?!1:i),Me(ue.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Me(ue.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Me(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Me(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Me(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Ui.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Me(ue.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,uc.isEmpty(c)?!1:c),o&&(Me("CORS_ACCESSLIST",o),Me(ue.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Me(ue.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Me(ue.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Me(ue.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Me(ue.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Me(ue.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Me(ue.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Jl}. Please check your boot props and settings files`;lc.fatal(r),lc.error(t)}}a(RV,"initTestEnvironment")});var Qe=g((Soe,ib)=>{"use strict";var hc=U(),AV=z(),ar=re(),mc=require("path"),OV=require("minimist"),ZO=require("fs-extra"),eb=require("lodash");ar.initSync();var{CONFIG_PARAMS:zs,DATABASES_PARAM_CONFIG:_c,SYSTEM_SCHEMA_NAME:Xl}=hc,dc,fc,Ec;function tb(){if(dc!==void 0)return dc;if(ar.getHdbBasePath()!==void 0)return dc=ar.get(zs.STORAGE_PATH)||mc.join(ar.getHdbBasePath(),hc.DATABASES_DIR_NAME),dc}a(tb,"getBaseSchemaPath");function rb(){if(fc!==void 0)return fc;if(ar.getHdbBasePath()!==void 0)return fc=sb(Xl),fc}a(rb,"getSystemSchemaPath");function nb(){if(Ec!==void 0)return Ec;if(ar.getHdbBasePath()!==void 0)return Ec=ar.get(hc.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||mc.join(ar.getHdbBasePath(),hc.TRANSACTIONS_DIR_NAME),Ec}a(nb,"getTransactionAuditStoreBasePath");function bV(e,t){let r=ar.get(zs.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||mc.join(nb(),e.toString())}a(bV,"getTransactionAuditStorePath");function sb(e,t){e=e.toString(),t=t&&t.toString();let r=ar.get(hc.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||mc.join(tb(),e)}a(sb,"getSchemaPath");function yV(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,OV(process.argv));let n=r[zs.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!AV.isObject(n))throw o;i=n}for(let o of i){let c=o[Xl];if(!c)continue;let u=ar.get(zs.DATABASES);u=u??{};let _=c?.tables?.[t]?.[_c.PATH];if(_)return eb.set(u,[Xl,_c.TABLES,t,_c.PATH],_),ar.setProperty(zs.DATABASES,u),_;let l=c?.[_c.PATH];if(l)return eb.set(u,[Xl,_c.PATH],l),ar.setProperty(zs.DATABASES,u),l}}let s=r[zs.STORAGE_PATH.toUpperCase()];if(s){if(!ZO.pathExistsSync(s))throw new Error(s+" does not exist");let i=mc.join(s,e);return ZO.mkdirsSync(i),ar.setProperty(zs.STORAGE_PATH,s),i}return rb()}a(yV,"initSystemSchemaPaths");function NV(){dc=void 0,fc=void 0,Ec=void 0}a(NV,"resetPaths");ib.exports={getBaseSchemaPath:tb,getSystemSchemaPath:rb,getTransactionAuditStorePath:bV,getTransactionAuditStoreBasePath:nb,getSchemaPath:sb,initSystemSchemaPaths:yV,resetPaths:NV}});var Dr=g((Aoe,lb)=>{"use strict";var IV=Nr().LMDB_ERRORS_ENUM,goe=require("lmdb"),wV=_t(),Roe=require("buffer").Buffer,{OVERFLOW_MARKER:ob,MAX_SEARCH_KEY_LENGTH:jl}=wV,ab=["number","string","symbol","boolean","bigint"];function CV(e){if(e=e?.primaryStore||e,!e)throw new Error(IV.ENV_REQUIRED)}a(CV,"validateEnv");function DV(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(DV,"stringifyData");function LV(e){return e instanceof Date?e.valueOf():e}a(LV,"convertKeyValueToWrite");function MV(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(ab.includes(typeof e))return e.length>jl?[e.slice(0,jl)+ob]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(ab.includes(typeof i))i.length>jl?r.push(i.slice(0,jl)+ob):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(MV,"getIndexedValues");var Zl=0,cb=0;function ub(){cb=Date.now()-performance.now()}a(ub,"adjustStartTime");ub();var UV=6e4;setInterval(ub,UV).unref();function PV(){let e=performance.now()+cb;return e>Zl?(Zl=e,e):(Zl+=488e-6,Zl)}a(PV,"getNextMonotonicTime");lb.exports={validateEnv:CV,stringifyData:DV,convertKeyValueToWrite:LV,getNextMonotonicTime:PV,getIndexedValues:MV}});var _b,On,wh,pc=Re(()=>{_b=require("events"),On=class extends _b.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new wh;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(){return this.queue?.shift()}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)}},wh=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 Lh={};$e(Lh,{loadGQLSchema:()=>HV,start:()=>Dh,startOnMainThread:()=>BV});function Dh({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),s)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let H=function(P){if(P.kind==="NonNullType"){let J=H(P.type);return J.nullable=!1,J}if(P.kind==="ListType")return{type:"array",elements:H(P.type)};let B={type:P.name?.value};return Object.defineProperty(B,"location",{value:P.loc.startToken}),B};a(H,"getProperty");let T=S.name.value,b=[],R={table:null,database:null,properties:b};f.set(T,R);for(let P of S.directives){if(P.name.value==="table"){for(let k of P.arguments)R[k.name.value]=k.value.value;R.schema&&(R.database=R.schema),R.table||(R.table=T),R.audit&&(R.audit=R.audit!=="false"),R.attributes=R.properties,E.push(R)}if(P.name.value==="sealed"&&(R.sealed=!0),P.name.value==="export"){R.export=!0;for(let k of P.arguments)k.name.value==="name"&&(R.export={name:k.value.value})}}let L=!1;for(let P of S.fields){let k=H(P.type);k.name=P.name.value,b.push(k);for(let B of P.directives)if(B.name.value==="primaryKey")L?console.warn("Can not define two attributes as a primary key"):(k.isPrimaryKey=!0,L=!0);else if(B.name.value==="indexed")k.indexed=!0;else if(B.name.value==="relationship"){let J={};for(let Q of B.arguments)J[Q.name.value]=Q.value.value;k.relationship=J}else if(B.name.value==="createdTime")k.assignCreatedTime=!0;else if(B.name.value==="updatedTime")k.assignUpdatedTime=!0;else if(B.name.value==="expiresAt")k.expiresAt=!0;else if(B.name.value==="allow"){let J=k.authorizedRoles=[];for(let Q of B.arguments)Q.name.value==="role"&&J.push(Q.value.value)}}R.type=T,T==="Query"&&(h=R)}function p(S){let T=f.get(S.type);T?(Object.defineProperty(S,"properties",{value:T.properties}),Object.defineProperty(S,"definition",{value:T})):S.type==="array"?p(S.elements):vV.includes(S.type)||(0,db.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(p,"connectPropertyType");for(let S of f.values())for(let T of S.properties)p(T);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,Ch.dirname)(n),S.tableClass):i.set((0,Ch.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var Ch,db,vV,BV,HV,fb=Re(()=>{Ch=require("path");Ae();db=x(et()),vV=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(Dh,"start");BV=Dh,HV=Dh({ensureTable:at}).handleFile});async function e_(e){return xV?(Sc||(Sc=GV(qV)),(await(await Sc).import(e)).namespace):import(e)}async function GV(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Sc=new Compartment({console,Math,Date,fetch:FV,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,hb.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Gt,tables:Lr,databases:tt})}};let n=await(0,Eb.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Sc}function FV(e,t){let r=typeof e=="string"||e.url;if(new URL(r).protocol!="https")throw new Error("Only https is allowed in fetch");return fetch(e,t)}function qV(){return{Resource:Gt,tables:Lr}}var Eb,hb,xV,Sc,Mh=Re(()=>{bn();Ae();Eb=require("fs/promises"),hb=require("path"),xV=!1;a(e_,"secureImport");a(GV,"getCompartment");a(FV,"secureOnlyFetch");a(qV,"getGlobalVars")});var Ph={};$e(Ph,{handleFile:()=>kV});async function kV(e,t,r,n){let s=new Map,i=(0,mb.pathToFileURL)(r).toString(),o=await e_(i);u(o.default)&&n.set((0,Uh.dirname)(t),o.default),c(o,(0,Uh.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?n.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),s}var mb,Uh,pb=Re(()=>{mb=require("url");Mh();Uh=require("path");a(kV,"handleFile")});var Bh={};$e(Bh,{start:()=>VV});function VV({resources:e}){e.set("login",vh),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var vh,Sb=Re(()=>{bn();a(VV,"start");vh=class extends Gt{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var yb={};$e(yb,{parse:()=>xh,streamAsJSON:()=>Tc,stringify:()=>Pi});function Tc(e){return new Hh({value:e})}function Tb(e){return console.error(e),JSON.stringify(e.toString())}function gb(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Pi(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===Ob)return bb(e);if(t.resolution)return t.resolution.then(()=>Pi(e));throw t}}function bb(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+=bb(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Pi(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function xh(e){return KV.test(e)?$V.parse(e):JSON.parse(e)}var Rb,Ab,$V,YV,Ob,Hh,KV,Gh=Re(()=>{Rb=require("stream"),Ab=x(require("json-bigint-fixes")),$V=(0,Ab.default)({useNativeBigInt:!0}),YV=1e4,Ob={};BigInt.prototype.toJSON=function(){throw Ob};a(Tc,"streamAsJSON");Hh=class extends Rb.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),Tb)}catch(s){yield Tb(s)}else yield Pi(t)}else yield Pi(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);gb(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>YV?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 gb(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(Tb,"handleError");a(gb,"when");a(Pi,"stringify");a(bb,"jsStringify");KV=/-?\d{16,}/;a(xh,"parse")});var xb=g((xoe,Hb)=>{"use strict";var Fh=require("recursive-iterator"),WV=require("alasql"),qh=require("clone"),Nb=z(),{handleHDBError:Ib,hdb_errors:QV}=ne(),{HDB_ERROR_MSGS:wb,HTTP_STATUS_CODES:Cb}=QV,{getDatabases:zV}=(Ae(),se(Fe)),JV=["DISTINCT_ARRAY"],Db=Symbol("validateTables"),kh=Symbol("validateTable"),Hoe=Symbol("getAllColumns"),Lb=Symbol("validateAllColumns"),t_=Symbol("findColumn"),Mb=Symbol("validateOrderBy"),gc=Symbol("validateSegment"),Vh=Symbol("validateColumn"),Ub=Symbol("setColumnsForTable"),Pb=Symbol("checkColumnsForAsterisk"),vb=Symbol("validateGroupBy"),Bb=Symbol("hasColumns"),$h=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Db](),this[Pb](),this[Lb]()}[Db](){if(this[Bb]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[kh](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[kh](t.table)})}}[Bb](){let t=!1,r=new Fh(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[kh](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=zV();if(!r[t.databaseid])throw Ib(new Error,wb.SCHEMA_NOT_FOUND(t.databaseid),Cb.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Ib(new Error,wb.TABLE_NOT_FOUND(t.databaseid,t.tableid),Cb.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=qh(s);i.table=qh(t),this.attributes.push(i)})}[t_](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)}[Pb](){let t=new Fh(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[Ub](r.tableid)}[Ub](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new WV.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Lb](){this[gc](this.statement.columns,!1),this[gc](this.statement.joins,!1),this[gc](this.statement.where,!1),this[vb](this.statement.group,!1),this[gc](this.statement.order,!0)}[gc](t,r){if(!t)return;let n=new Fh(t),s=[];for(let{node:i,path:o}of n)!Nb.isEmpty(i)&&!Nb.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Mb](i):s.push(this[Vh](i)));return s}[vb](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&JV.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=qh(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[t_](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[t_](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`}[Mb](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[Vh](t)}[Vh](t){let r=this[t_](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]}};Hb.exports=$h});var Fb=g((Foe,Gb)=>{"use strict";var Yh=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")}};Gb.exports=Yh});var kb=g((koe,qb)=>{"use strict";var Kh=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};qb.exports=Kh});var Kb={};$e(Kb,{HAS_EXPIRATION:()=>em,LAST_TIMESTAMP_PLACEHOLDER:()=>Oc,LOCAL_TIMESTAMP:()=>XV,METADATA:()=>Rc,NO_TIMESTAMP:()=>Qh,PENDING_LOCAL_TIME:()=>tm,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>Zh,RecordEncoder:()=>Xh,TIMESTAMP_ASSIGN_LAST:()=>ZV,TIMESTAMP_ASSIGN_NEW:()=>$b,TIMESTAMP_ASSIGN_PREVIOUS:()=>Yb,TIMESTAMP_PLACEHOLDER:()=>r_,TIMESTAMP_RECORD_PREVIOUS:()=>zh,fromResource:()=>o_,getUpdateRecord:()=>rm,handleLocalTimeForGets:()=>a_});function t$(){return Ac[0]=Ac[0]^64,jV.getFloat64(0)}function o_(e){jh=!0;try{return e()}finally{jh=!1}}function a_(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),u=c?.value,_=u?.[Rc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[Rc]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let u=c.value,_=u[Rc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){if(this.timerTracked||(this.timerTracked=!0,vi.push(new WeakRef(this))),!jh)try{throw new Error("Read transaction used outside of resource")}catch(u){this.readStack=u.stack}o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<vi.length;u++){let _=vi[u].deref();(!_||_.isDone||_.isCommitted)&&vi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function rm(e,t,r){return function(n,s,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?Ho=i?.localTime?zh|Yb:Qh:Ho=u?i?.localTime?zh|16384:$b|16384:Qh,l>0&&(c|=em),s_=c,Jh=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Ho>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(n,s,h);if(u){let T=_?.user?.username;if(E&&(n_=e.encoder.encode(E)),f&&i?.localTime){let b=i?.localTime,R=r.get(b);if(R){let L=Lt(R).previousLocalTime;return r.put(b,i_(o,t,n,L,T,d,n_),{ifVersion:p}),S}}r.put(Oc,i_(o,t,n,i?.localTime?1:0,T,d,n_),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var Vb,Wh,r_,Oc,Zh,XV,Rc,Ac,jV,Qh,$b,ZV,Yb,zh,em,tm,e$,n_,Ho,s_,Jh,Xh,Yoe,jh,vi,xo=Re(()=>{Vb=require("msgpackr");Bi();Wh=x(K()),r_=new Uint8Array([1,1,1,1,4,64,0,0]),Oc=new Uint8Array([1,1,1,1,1,0,0,0]),Zh=new Uint8Array([1,1,1,1,3,64,0,0]),XV=Symbol("local-timestamp"),Rc=Symbol("metadata"),Ac=new Uint8Array(8),jV=new DataView(Ac.buffer,0,8),Qh=0,$b=0,ZV=1,Yb=3,zh=4,em=16,tm=1,Ho=0,s_=-1,Jh=0,Xh=class extends Vb.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(Ho||s_>=0){let i=0,o=Ho;o&&(i+=8,Ho=0);let c=s_,u=Jh;c>=0&&(i+=2,s_=-1,u&&(i+=8,Jh=0));let _=e$=r.call(this,n,s|2048|i);n_=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(r_[4]=o,r_[5]=o>>8,_.set(r_,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,n,s)}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,u;if(i===2){if(t.copy)t.copy(Ac,0,c),c+=8;else for(let d=0;d<8;d++)Ac[d]=t[c++];u=t$(),i=t[c]}let _;i<32&&(o=i,c+=2,o&em&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,s),s-c);return{localTime:u,value:l,[Rc]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(t$,"getTimestamp");Yoe=Map.prototype.get;a(o_,"fromResource");a(a_,"handleLocalTimeForGets");vi=[];setInterval(()=>{for(let e=0;e<vi.length;e++){let t=vi[e].deref();!t||t.isDone||t.isCommitted?vi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Wh.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Wh.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(rm,"getUpdateRecord")});var c_=g((Woe,Wb)=>{"use strict";var sm=re(),im=U(),{RecordEncoder:r$}=(xo(),se(Kb));sm.initSync();var n$=sm.get(im.CONFIG_PARAMS.STORAGE_COMPRESSION),s$=sm.get(im.CONFIG_PARAMS.STORAGE_CACHING)!==!1,i$=im.UPDATES_PROPERTY,nm=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=n$&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=s$&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:r$},this.alwaysLazyProperty=n=>n===i$)}};Wb.exports=nm});var l_=g((zoe,zb)=>{"use strict";var Go=re(),bc=U();Go.initSync();var o$=Go.get(bc.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Go.get(bc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Go.get(bc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Qb=Go.get(bc.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),a$=Go.get(bc.CONFIG_PARAMS.STORAGE_NOREADAHEAD),u_=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=o$,this.noFSAccess=!0,Qb!==void 0&&(this.overlappingSync=Qb),this.noReadAhead=a$}};zb.exports=u_;u_.MAX_DBS=1e4});var Ye=g((Xoe,iy)=>{"use strict";var am=require("lmdb"),yn=require("fs-extra"),Mr=require("path"),__=Dr(),jb=K(),cr=Nr().LMDB_ERRORS_ENUM,d_=kb(),cm=c_(),Zb=l_(),Js=_t(),Jb=U(),{table:c$,resetDatabases:u$}=(Ae(),se(Fe)),Xb=re(),Nn=Js.INTERNAL_DBIS_NAME,ey=Js.DBI_DEFINITION_NAME,l$="data.mdb",_$="lock.mdb",yc=".mdb",d$="-lock",om=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=tn(t,r),this.key_type=this.dbi[Js.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Js.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new am.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function f_(e,t){if(e===void 0)throw new Error(cr.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(cr.ENV_NAME_REQUIRED)}a(f_,"pathEnvNameValidation");async function um(e,t,r=!0){try{await yn.access(e)}catch(n){throw n.code==="ENOENT"?new Error(cr.INVALID_BASE_PATH):n}try{let n=Mr.join(e,t+yc);return await yn.access(n,yn.constants.R_OK|yn.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await yn.access(Mr.join(e,t,l$),yn.constants.R_OK|yn.constants.F_OK),Mr.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(cr.INVALID_ENVIRONMENT)}else throw new Error(cr.INVALID_ENVIRONMENT);throw n}}a(um,"validateEnvironmentPath");function E_(e,t){if(__.validateEnv(e),t===void 0)throw new Error(cr.DBI_NAME_REQUIRED)}a(E_,"validateEnvDBIName");async function f$(e,t,r=!1,n=!1){f_(e,t);let s=Mr.basename(e);t=t.toString();let i=Xb.get(Jb.CONFIG_PARAMS.DATABASES);i||Xb.setProperty(Jb.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await um(e,t,n),ty(e,t,r)}catch(o){if(o.message===cr.INVALID_ENVIRONMENT){let c=Mr.join(e,t);await yn.mkdirp(n?c:e);let u=new Zb(n?c:c+yc,!1),_=am.open(u);_.dbis=Object.create(null);let l=new cm(!1);_.openDB(Nn,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=lm(e,t,r);return _[Js.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(f$,"createEnvironment");async function E$(e,t,r,n=!0){f_(e,t),t=t.toString();let s=Mr.join(e,t);return c$({table:t,database:Mr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(E$,"copyEnvironment");async function ty(e,t,r=!1){f_(e,t),t=t.toString();let n=lm(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 um(e,t),i=Mr.join(e,t+yc),o=s!=i,c=new Zb(s,o),u=am.open(c);u.dbis=Object.create(null);let _=ny(u);for(let l=0;l<_.length;l++)tn(u,_[l]);return u[Js.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=u,u}a(ty,"openEnvironment");async function h$(e,t,r=!1){f_(e,t),t=t.toString();let n=Mr.join(e,t+yc),s=await um(e,t);if(global.lmdb_map!==void 0){let i=lm(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await ry(o),delete global.lmdb_map[i]}}await yn.remove(s),await yn.remove(s===n?s+d$:Mr.join(Mr.dirname(s),_$))}a(h$,"deleteEnvironment");async function ry(e){__.validateEnv(e);let t=e[Js.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(ry,"closeEnvironment");function lm(e,t,r=!1){let s=`${Mr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(lm,"getCachedEnvironmentName");function m$(e){__.validateEnv(e);let t=Object.create(null),r=tn(e,Nn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Nn)try{t[n]=Object.assign(new d_,s)}catch{jb.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(m$,"listDBIDefinitions");function ny(e){__.validateEnv(e);let t=[],r=tn(e,Nn);for(let{key:n}of r.getRange({start:!1}))n!==Nn&&t.push(n);return t}a(ny,"listDBIs");function p$(e,t){let n=tn(e,Nn).getEntry(t),s=new d_;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{jb.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(p$,"getDBIDefinition");function sy(e,t,r,n=!r){if(E_(e,t),t=t.toString(),t===Nn)throw new Error(cr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return tn(e,t)}catch(s){if(s.message===cr.DBI_DOES_NOT_EXIST){let i=new cm(r,n===!0),o=e.openDB(t,i),c=new d_(r===!0,n);return o[ey]=c,tn(e,Nn).putSync(t,c),e.dbis[t]=o,o}throw s}}a(sy,"createDBI");function tn(e,t){if(E_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Nn?r=p$(e,t):r=new d_,r===void 0)throw new Error(cr.DBI_DOES_NOT_EXIST);let n;try{let s=new cm(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(cr.DBI_DOES_NOT_EXIST):s}return n[ey]=r,e.dbis[t]=n,n}a(tn,"openDBI");function S$(e,t){E_(e,t),t=t.toString();let r=tn(e,t),n=r.getStats();return r[Js.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(S$,"statDBI");async function T$(e,t){try{let r=Mr.join(e,t+yc);return(await yn.stat(r)).size}catch{throw new Error(cr.INVALID_ENVIRONMENT)}}a(T$,"environmentDataSize");function g$(e,t){if(E_(e,t),t=t.toString(),t===Nn)throw new Error(cr.CANNOT_DROP_INTERNAL_DBIS_NAME);tn(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],tn(e,Nn).removeSync(t)}a(g$,"dropDBI");function R$(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{tn(e,i)}catch(o){if(o.message===cr.DBI_DOES_NOT_EXIST)sy(e,i,i!==t,i===t),n=!0;else throw o}}n&&u$()}a(R$,"initializeDBIs");iy.exports={openDBI:tn,openEnvironment:ty,createEnvironment:f$,listDBIs:ny,listDBIDefinitions:m$,createDBI:sy,dropDBI:g$,statDBI:S$,deleteEnvironment:h$,initializeDBIs:R$,TransactionCursor:om,environmentDataSize:T$,copyEnvironment:E$,closeEnvironment:ry}});var ay=g((Zoe,oy)=>{"use strict";var _m=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};oy.exports=_m});var uy=g((tae,cy)=>{"use strict";var dm=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}};cy.exports=dm});var _y=g((nae,ly)=>{"use strict";var fm=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};ly.exports=fm});var Fo=g((cae,Ey)=>{"use strict";var A$=Ye(),O$=ay(),b$=uy(),y$=_y(),Kn=Dr(),Nc=Nr().LMDB_ERRORS_ENUM,N$=_t(),ps=U(),I$=z(),w$=require("uuid"),iae=require("lmdb"),{handleHDBError:C$,hdb_errors:D$}=ne(),{OVERFLOW_MARKER:oae,MAX_SEARCH_KEY_LENGTH:aae}=N$,dy=re();dy.initSync();var h_=dy.get(ps.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Em=ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Hi=ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function L$(e,t,r,n,s=Kn.getNextMonotonicTime()){Sm(e,t,r,n),hm(e,t,r);let i=new O$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u];fy(_,!0,s);let l=M$(e,t,r,_),d=_[t];o.push(l),c.push(d)}return mm(o,c,n,i,s)}a(L$,"insertRecords");function M$(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][ps.FUNC_VAL],n[o]=c)}let u=Kn.getIndexedValues(c),_=e.dbis[o];if(u){h_&&_.prefetch(u.map(l=>({key:l,value:s})),m_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],s)}}h_&&e.dbis[t].prefetch([s],m_),e.dbis[t].put(s,n,n[Hi])})}a(M$,"insertRecord");function U$(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(U$,"removeSkippedRecords");function fy(e,t,r){let n=r>0;(n||!Number.isInteger(e[Hi]))&&(e[Hi]=r||(r=Kn.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[Em]))&&(e[Em]=r||Kn.getNextMonotonicTime()):delete e[Em]}a(fy,"setTimestamps");function hm(e,t,r){r.indexOf(ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),A$.initializeDBIs(e,t,r)}a(hm,"initializeTransaction");async function P$(e,t,r,n,s=Kn.getNextMonotonicTime()){Sm(e,t,r,n),hm(e,t,r);let i=new b$,o=[],c=[],u=[];for(let _=0;_<n.length;_++){let l=n[_],d=l[t],f;try{f=pm(e,t,l,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return mm(c,u,n,i,s,o)}a(P$,"updateRecords");async function v$(e,t,r,n,s=Kn.getNextMonotonicTime()){try{Sm(e,t,r,n)}catch(u){throw C$(u,u.message,D$.HTTP_STATUS_CODES.BAD_REQUEST)}hm(e,t,r);let i=new y$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u],l;I$.isEmpty(_[t])?(l=w$.v4(),_[t]=l):l=_[t];let d=pm(e,t,_,l,i,!1,s);o.push(d),c.push(l)}return mm(o,c,n,i,s)}a(v$,"upsertRecords");async function mm(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Kn.getNextMonotonicTime(),U$(r,i),n}a(mm,"finalizeWrite");function pm(e,t,r,n,s,i=!1,o){let c=e.dbis[t],u=c.getEntry(n),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(fy(r,!l,o),Number.isInteger(r[Hi])&&_[Hi]>r[Hi])return!1;l&&s.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let T=_[h];if(typeof p=="function"){let R=p([[_]]);Array.isArray(R)&&(p=R[0][ps.FUNC_VAL],r[h]=p)}if(p===T)continue;let b=Kn.getIndexedValues(T);if(b){h_&&S.prefetch(b.map(R=>({key:R,value:n})),m_);for(let R=0,L=b.length;R<L;R++)S.remove(b[R],n)}if(b=Kn.getIndexedValues(p),b){h_&&S.prefetch(b.map(R=>({key:R,value:n})),m_);for(let R=0,L=b.length;R<L;R++)S.put(b[R],n)}}let E=Object.assign({},_,r);c.put(n,E,E[Hi])},"do_put");return u?d=c.ifVersion(n,u.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:pm(e,t,r,n,s,i,o))}a(pm,"updateUpsertRecord");function B$(e,t,r){if(Kn.validateEnv(e),t===void 0)throw new Error(Nc.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Nc.WRITE_ATTRIBUTES_REQUIRED):new Error(Nc.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(B$,"validateBasic");function Sm(e,t,r,n){if(B$(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Nc.RECORDS_REQUIRED):new Error(Nc.RECORDS_MUST_BE_ARRAY)}a(Sm,"validateWrite");function m_(){}a(m_,"noop");Ey.exports={insertRecords:L$,updateRecords:P$,upsertRecords:v$}});var xi=g((lae,H$)=>{H$.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},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 Qn=g((_ae,py)=>{"use strict";var my=z(),hy=U(),qo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Wn=require("joi"),Xs={schema_format:{pattern:qo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},x$=Wn.alternatives(Wn.string().min(1).max(Xs.schema_length.maximum).pattern(qo).messages({"string.pattern.base":"{:#label} "+Xs.schema_format.message}),Wn.number(),Wn.array()).required(),G$=Wn.alternatives(Wn.string().min(1).max(Xs.schema_length.maximum).pattern(qo).messages({"string.pattern.base":"{:#label} "+Xs.schema_format.message}),Wn.number()),F$=Wn.alternatives(Wn.string().min(1).max(Xs.schema_length.maximum).pattern(qo).messages({"string.pattern.base":"{:#label} "+Xs.schema_format.message}),Wn.number()).required();function q$(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Xs.schema_length.maximum?`'${e}' maximum of 250 characters`:qo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(q$,"checkValidTable");function k$(e,t){return my.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(k$,"validateSchemaExists");function V$(e,t){let r=t.state.ancestors[0].schema;return my.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(V$,"validateTableExists");function $$(e,t){return e.toLowerCase()===hy.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hy.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a($$,"validateSchemaName");py.exports={common_validators:Xs,schema_regex:qo,hdb_schema_table:x$,validateSchemaExists:k$,validateTableExists:V$,validateSchemaName:$$,checkValidTable:q$,hdb_database:G$,hdb_table:F$}});var p_=g((fae,Sy)=>{var{common_validators:zn}=Qn(),wc=je(),Ic="is required",dt={database:{presence:!1,format:zn.schema_format,length:zn.schema_length},schema:{presence:!1,format:zn.schema_format,length:zn.schema_length},table:{presence:!0,format:zn.schema_format,length:zn.schema_length},attribute:{presence:!0,format:zn.schema_format,length:zn.schema_length},hash_attribute:{presence:!0,format:zn.schema_format,length:zn.schema_length}};function Cc(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(Cc,"makeAttributesStrings");function Y$(e){return e=Cc(e),dt.table.presence=!1,dt.attribute.presence=!1,dt.hash_attribute.presence=!1,wc.validateObject(e,dt)}a(Y$,"schema_object");function K$(e){return e=Cc(e),dt.table.presence={message:Ic},dt.attribute.presence=!1,dt.hash_attribute.presence=!1,wc.validateObject(e,dt)}a(K$,"table_object");function W$(e){return e=Cc(e),dt.table.presence={message:Ic},dt.attribute.presence=!1,wc.validateObject(e,dt)}a(W$,"create_table_object");function Q$(e){return e=Cc(e),dt.table.presence={message:Ic},dt.attribute.presence={message:Ic},dt.hash_attribute.presence=!1,wc.validateObject(e,dt)}a(Q$,"attribute_object");function z$(e){return e=Cc(e),dt.table.presence={message:Ic},dt.attribute.presence=!1,dt.hash_attribute.presence=!1,wc.validateObject(e,dt)}a(z$,"describe_table");function J$(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(J$,"validateTableResidence");Sy.exports={schema_object:Y$,create_table_object:W$,table_object:K$,attribute_object:Q$,describe_table:z$,validateTableResidence:J$}});var gy=g((hae,Ty)=>{"use strict";var X$=require("uuid"),Tm=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||X$.v4(),this.schema_table=`${this.schema}.${this.table}`}};Ty.exports=Tm});var S_=g((pae,Ry)=>{"use strict";var j$=gy(),gm=class extends j${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}};Ry.exports=gm});var Oy=g((Tae,Ay)=>{"use strict";Ay.exports=e1;var Z$="inserted";function e1(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===Z$?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(e1,"returnObject")});var T_=g((Rae,wy)=>{"use strict";var t1=U(),Rm=Ye(),r1=Fo(),{getSystemSchemaPath:n1,getSchemaPath:s1}=Qe(),i1=xi(),o1=p_(),a1=S_(),c1=Oy(),{handleHDBError:by,hdb_errors:Ny}=ne(),yy=z(),{HTTP_STATUS_CODES:u1}=Ny,Am=i1.hdb_attribute,Iy=[];for(let e=0;e<Am.attributes.length;e++)Iy.push(Am.attributes[e].attribute);var l1="inserted";wy.exports=_1;async function _1(e){let t=o1.attribute_object(e);if(t)throw by(new Error,t.message,Ny.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&yy.checkGlobalSchemaTable(e.schema,e.table);if(r)throw by(new Error,r,u1.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=yy.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 a1(e.schema,e.table,e.attribute,e.id);try{let i=await Rm.openEnvironment(s1(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}`);Rm.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Rm.openEnvironment(n1(),t1.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await r1.insertRecords(o,Am.hash_attribute,Iy,[s]);return c1(l1,c,{records:[s]},u)}catch(i){throw i}}a(_1,"lmdbCreateAttribute")});var bm=g((Oae,Dy)=>{var{hdb_table:d1,hdb_database:Cy}=Qn(),f1=je(),Om=require("joi"),E1={undefined:"undefined",null:"null"},h1=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||E1[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"),m1=Om.object({database:Cy,schema:Cy,table:d1,records:Om.array().items(Om.object().custom(h1)).required()});Dy.exports=function(e){return f1.validateBySchema(e,m1)}});var Dc=g((Nae,My)=>{"use strict";var Ss=z(),Ly=K(),yae=bm(),{getDatabases:p1}=(Ae(),se(Fe)),{ClientError:Gi}=ne();My.exports=S1;function S1(e){if(Ss.isEmpty(e))throw new Gi("invalid update parameters defined.");if(Ss.isEmptyOrZeroLength(e.schema))throw new Gi("invalid schema specified.");if(Ss.isEmptyOrZeroLength(e.table))throw new Gi("invalid table specified.");if(!Array.isArray(e.records))throw new Gi("records must be an array");let t=p1()[e.schema]?.[e.table];if(Ss.isEmpty(t))throw new Gi(`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&&Ss.isEmptyOrZeroLength(o[r]))throw Ly.error("a valid hash attribute must be provided with update record:",o),new Gi("a valid hash attribute must be provided with update record, check log for more info");if(!Ss.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Ly.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Gi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Ss.isEmpty(o[r])&&o[r]!==""&&n.has(Ss.autoCast(o[r]))&&(o.skip=!0),n.add(Ss.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(S1,"insertUpdateValidate")});var Lc=g((wae,Uy)=>{"use strict";var T1=U().OPERATIONS_ENUM,ym=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=T1.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Uy.exports=ym});var Mc=g((Lae,vy)=>{"use strict";var Dae=Lc(),g_=U(),Nm=z(),Py=K(),g1=require("uuid"),{handleHDBError:R_,hdb_errors:R1}=ne(),{HDB_ERROR_MSGS:A_,HTTP_STATUS_CODES:O_}=R1;vy.exports=A1;function A1(e,t,r){for(let s=0;s<t.length;s++)O1(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];b1(i,r,e.operation)}}a(A1,"processRows");function O1(e){if(Buffer.byteLength(String(e))>g_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw R_(new Error,A_.ATTR_NAME_LENGTH_ERR(e),O_.BAD_REQUEST,void 0,void 0,!0);if(Nm.isEmptyOrZeroLength(e)||Nm.isEmpty(e.trim()))throw R_(new Error,A_.ATTR_NAME_NULLISH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}a(O1,"validateAttribute");function b1(e,t,r){if(!e.hasOwnProperty(t)||Nm.isEmptyOrZeroLength(e[t])){if(r===g_.OPERATIONS_ENUM.INSERT||r===g_.OPERATIONS_ENUM.UPSERT){e[t]=g1.v4();return}throw Py.error("Update transaction aborted due to record with no hash value:",e),R_(new Error,A_.RECORD_MISSING_HASH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>g_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Py.error(e),R_(new Error,A_.HASH_VAL_LENGTH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}a(b1,"validateHash")});var Hy=g((Uae,By)=>{"use strict";var Im=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};By.exports=Im});var Fy=g((vae,Gy)=>{"use strict";var wm=Ye(),y1=K(),xy=Nr().LMDB_ERRORS_ENUM;Gy.exports=N1;async function N1(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 wm.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==xy.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await wm.closeEnvironment(global.lmdb_map[n]),await wm.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==xy.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){y1.error(t)}}a(N1,"cleanLMDBMap")});var Ts=g((Hae,$y)=>{"use strict";var Uc=require("crypto"),I1=re(),{CONFIG_PARAMS:w1}=U(),ky="aes-256-cbc",C1=32,D1=16,Cm=64,Vy=32,L1=Cm+Vy,qy=new Map;$y.exports={encrypt:M1,decrypt:U1,createNatsTableStreamName:P1};function M1(e){let t=Uc.randomBytes(C1),r=Uc.randomBytes(D1),n=Uc.createCipheriv(ky,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(M1,"encrypt");function U1(e){let t=e.substr(0,Cm),r=e.substr(Cm,Vy),n=e.substr(L1,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Uc.createDecipheriv(ky,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(U1,"decrypt");function P1(e,t){let r=I1.get(w1.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=qy.get(r);return n||(n=Uc.createHash("md5").update(r).digest("hex"),qy.set(r,n)),n}a(P1,"createNatsTableStreamName")});var Fi=g((Fae,Ky)=>{"use strict";var Gae=Ur(),b_=K(),Yy=p_(),v1=Ts(),y_=z(),{handleHDBError:N_,hdb_errors:B1}=ne(),{HDB_ERROR_MSGS:I_,HTTP_STATUS_CODES:Dm}=B1,H1=re();H1.initSync();var{getDatabases:Lm}=(Ae(),se(Fe));Ky.exports={describeAll:x1,describeTable:w_,describeSchema:G1};async function x1(e){try{let t=y_.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=Lm(),i={},o={},c=[],u=e?.exact_count;for(let l in s){i[l]=!0,!t&&!n&&(o[l]=e.hdb_user.role.permission[l].describe);let d=s[l];for(let f in d)try{let E;if(t||n)E=await w_({schema:l,table:f,exact_count:u});else if(r&&r[l].describe&&r[l].tables[f].describe){let h=r[l].tables[f].attribute_permissions;E=await w_({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){b_.error(E)}}let _={};for(let l in c)t||n?(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||n?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return b_.error("Got an error in describeAll"),b_.error(t),N_(new Error,I_.DESCRIBE_ALL_ERR)}}a(x1,"describeAll");async function w_(e,t){y_.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=Yy.describe_table(e);if(i)throw i;let c=Lm()[r];if(!c)throw N_(new Error,I_.SCHEMA_NOT_FOUND(e.schema),Dm.NOT_FOUND);let u=c[n];if(!u)throw N_(new Error,I_.TABLE_NOT_FOUND(e.schema,e.table),Dm.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let l=[];if(s){let f={};s.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l};d.clustering_stream_name=v1.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){b_.warn(`unable to stat table dbi due to ${f}`)}return d}a(w_,"descTable");async function G1(e){y_.transformReq(e);let t=Yy.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=Lm()[n];if(!i)throw N_(new Error,I_.SCHEMA_NOT_FOUND(e.schema),Dm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),y_.isEmpty(u)||u.describe){let _=await w_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(G1,"describeSchema")});var js=g(($ae,Xy)=>{var F1=xi(),{callbackify:Qy,promisify:q1}=require("util"),{getDatabases:zy}=(Ae(),se(Fe));Xy.exports={setSchemaDataToGlobal:Wy,getTableSchema:k1,getSystemSchema:V1,setSchemaDataToGlobalAsync:q1(Wy)};var Jy=Fi(),kae=Qy(Jy.describeAll),Vae=Qy(Jy.describeTable);function Wy(e){global.hdb_schema=zy(),e&&e()}a(Wy,"setSchemaDataToGlobal");function k1(e,t,r){let n=zy()[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(k1,"getTableSchema");function V1(){return F1}a(V1,"getSystemSchema")});var rn=g((Kae,tN)=>{"use strict";var D_=bm(),Ft=z(),$1=require("util"),L_=In(),Y1=js(),jy=K(),{handleHDBError:qi,hdb_errors:K1}=ne(),{HTTP_STATUS_CODES:ki}=K1,W1=$1.promisify(Y1.getTableSchema),Q1="updated",Zy="inserted",eN="upserted";tN.exports={insert:J1,update:X1,upsert:j1,validation:z1,flush:Z1};async function z1(e){if(Ft.isEmpty(e))throw new Error("invalid update parameters defined.");if(Ft.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Ft.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await W1(e.schema,e.table),r=D_(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&&Ft.isEmptyOrZeroLength(c[n]))throw jy.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(!Ft.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw jy.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Ft.isEmpty(c[n])&&c[n]!==""&&s.has(Ft.autoCast(c[n]))&&(c.skip=!0),s.add(Ft.autoCast(c[n]));for(let u in c)i[u]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(z1,"validation");async function J1(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=D_(e);if(t)throw qi(new Error,t.message,ki.BAD_REQUEST);Ft.transformReq(e);let r=Ft.checkSchemaTableExist(e.schema,e.table);if(r)throw qi(new Error,r,ki.BAD_REQUEST);let n=await L_.createRecords(e);return C_(Zy,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(J1,"insertData");async function X1(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=D_(e);if(t)throw qi(new Error,t.message,ki.BAD_REQUEST);Ft.transformReq(e);let r=Ft.checkSchemaTableExist(e.schema,e.table);if(r)throw qi(new Error,r,ki.BAD_REQUEST);let n=await L_.updateRecords(e);return Ft.isEmpty(n.existing_rows)?C_(Q1,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):C_(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(X1,"updateData");async function j1(e){if(e.operation!=="upsert")throw qi(new Error,"invalid operation, must be upsert",ki.INTERNAL_SERVER_ERROR);let t=D_(e);if(t)throw qi(new Error,t.message,ki.BAD_REQUEST);Ft.transformReq(e);let r=Ft.checkSchemaTableExist(e.schema,e.table);if(r)throw qi(new Error,r,ki.BAD_REQUEST);let n=await L_.upsertRecords(e);return C_(eN,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(j1,"upsertData");function C_(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===Zy?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===eN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(C_,"returnObject");function Z1(e){return Ft.transformReq(e),L_.flush(e.schema,e.table)}a(Z1,"flush")});var Um=g((Qae,sN)=>{var eY=je(),Mm=require("joi"),{hdb_table:tY,hdb_database:rN}=Qn(),nN={schema:rN,database:rN,table:tY},rY={date:Mm.date().iso().required()},nY={timestamp:Mm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};sN.exports=function(e,t){let r=t==="timestamp"?{...nN,...nY}:{...nN,...rY},n=Mm.object(r);return eY.validateBySchema(e,n)}});var aN=g((zae,oN)=>{var sY=je(),Pm=require("joi"),{hdb_table:iY,hdb_database:iN}=Qn(),oY=Pm.object({schema:iN,database:iN,table:iY,hash_values:Pm.array().required(),ids:Pm.array()});oN.exports=function(e){return sY.validateBySchema(e,oY)}});var uN=g((Jae,cN)=>{"use strict";var vm=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}},Bm=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}},Hm=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};cN.exports={InsertObject:vm,NoSQLSeachObject:Bm,DeleteResponseObject:Hm}});var Yi=g((jae,EN)=>{"use strict";var _N=Um(),aY=aN(),Vi=z(),lN=require("moment"),dN=K(),{promisify:cY,callbackify:uY}=require("util"),$i=U(),lY=js(),xm=cY(lY.getTableSchema),Gm=In(),{DeleteResponseObject:_Y}=uN(),{handleHDBError:Zs,hdb_errors:dY}=ne(),{HDB_ERROR_MSGS:M_,HTTP_STATUS_CODES:ei}=dY,fY="records successfully deleted",EY=uY(fN);EN.exports={delete:EY,deleteRecord:fN,deleteFilesBefore:hY,deleteAuditLogsBefore:mY};async function hY(e){let t=_N(e,"date");if(t)throw Zs(t,t.message,ei.BAD_REQUEST,void 0,void 0,!0);if(Vi.transformReq(e),!lN(e.date,lN.ISO_8601).isValid())throw Zs(new Error,M_.INVALID_DATE,ei.BAD_REQUEST,$i.LOG_LEVELS.ERROR,M_.INVALID_DATE,!0);let n=Vi.checkSchemaTableExist(e.schema,e.table);if(n)throw Zs(new Error,n,ei.NOT_FOUND,$i.LOG_LEVELS.ERROR,n,!0);let s=await Gm.deleteRecordsBefore(e);if(await xm(e.schema,e.table),dN.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(hY,"deleteFilesBefore");async function mY(e){let t=_N(e,"timestamp");if(t)throw Zs(t,t.message,ei.BAD_REQUEST,void 0,void 0,!0);if(Vi.transformReq(e),isNaN(e.timestamp))throw Zs(new Error,M_.INVALID_VALUE("Timestamp"),ei.BAD_REQUEST,$i.LOG_LEVELS.ERROR,M_.INVALID_VALUE("Timestamp"),!0);let r=Vi.checkSchemaTableExist(e.schema,e.table);if(r)throw Zs(new Error,r,ei.NOT_FOUND,$i.LOG_LEVELS.ERROR,r,!0);let n=await Gm.deleteAuditLogsBefore(e);return await xm(e.schema,e.table),dN.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(mY,"deleteAuditLogsBefore");async function fN(e){e.ids&&(e.hash_values=e.ids);let t=aY(e);if(t)throw Zs(t,t.message,ei.BAD_REQUEST,void 0,void 0,!0);Vi.transformReq(e);let r=Vi.checkSchemaTableExist(e.schema,e.table);if(r)throw Zs(new Error,r,ei.NOT_FOUND,$i.LOG_LEVELS.ERROR,r,!0);try{await xm(e.schema,e.table);let n=await Gm.deleteRecords(e);return Vi.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${fY}`),n}catch(n){if(n.message===$i.SEARCH_NOT_FOUND_MESSAGE){let s=new _Y;return s.message=$i.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(fN,"deleteRecord")});var U_=g((ece,pN)=>{var pY=require("crypto"),hN=9;function SY(e){let t=gY(hN),r=mN(e+t);return t+r}a(SY,"createHash");function TY(e,t){let r=e?.substr(0,hN),n=r+mN(t+r);return e===n}a(TY,"validateHash");function gY(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(gY,"generateSalt");function mN(e){return pY.createHash("md5").update(e).digest("hex")}a(mN,"md5");pN.exports={hash:SY,validate:TY}});var TN=g((rce,SN)=>{var Fm=je(),Kt={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function RY(e){return Kt.password.presence=!0,Kt.username.presence=!0,Kt.role.presence=!0,Kt.active.presence=!0,Fm.validateObject(e,Kt)}a(RY,"addUserValidation");function AY(e){return Kt.password.presence=!1,Kt.username.presence=!0,Kt.role.presence=!1,Kt.active.presence=!1,Fm.validateObject(e,Kt)}a(AY,"alterUserValidation");function OY(e){return Kt.password.presence=!1,Kt.username.presence=!0,Kt.role.presence=!1,Kt.active.presence=!1,Fm.validateObject(e,Kt)}a(OY,"dropUserValidation");SN.exports={addUserValidation:RY,alterUserValidation:AY,dropUserValidation:OY}});var rt=g((ice,RN)=>{"use strict";var{platform:sce}=require("os"),bY="nats-server.zip",qm="nats-server",yY=process.platform==="win32"?`${qm}.exe`:qm,NY=/^[^\s.,*>]+$/,gN="__request__",IY=a(e=>`${e}.${gN}`,"REQUEST_SUBJECT"),wY={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},CY={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},DY={HUB:"hub.pid",LEAF:"leaf.pid"},LY={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},MY={SUCCESS:"success",ERROR:"error"},UY={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},PY={TXN:"txn",MSGID:"msgid"},ko={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},vY={[ko.ERR]:1,[ko.WRN]:2,[ko.INF]:3,[ko.DBG]:4,[ko.TRC]:5},BY={debug:"-D",trace:"-DVV"};RN.exports={NATS_SERVER_ZIP:bY,NATS_SERVER_NAME:qm,NATS_BINARY_NAME:yY,PID_FILES:DY,NATS_CONFIG_FILES:CY,SERVER_SUFFIX:LY,NATS_TERM_CONSTRAINTS_RX:NY,REQUEST_SUFFIX:gN,UPDATE_REMOTE_RESPONSE_STATUSES:MY,CLUSTER_STATUS_STATUSES:UY,REQUEST_SUBJECT:IY,SUBJECT_PREFIXES:PY,MSG_HEADERS:wY,LOG_LEVELS:ko,LOG_LEVEL_FLAGS:BY,LOG_LEVEL_HIERARCHY:vY}});var ON=g((ace,AN)=>{"use strict";var P_=U(),v_=class{static{a(this,"BaseLicense")}constructor(t=0,r=P_.RAM_ALLOCATION_ENUM.DEFAULT,n=P_.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},km=class extends v_{static{a(this,"ExtendedLicense")}constructor(t=0,r=P_.RAM_ALLOCATION_ENUM.DEFAULT,n=P_.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};AN.exports={BaseLicense:v_,ExtendedLicense:km}});var Ki=g((uce,CN)=>{"use strict";var $o=require("fs-extra"),yN=U_(),NN=require("crypto"),HY=require("moment"),xY=require("uuid").v4,Wt=K(),$m=require("path"),GY=z(),ti=U(),{totalmem:bN}=require("os"),FY=ON().ExtendedLicense,Vo="invalid license key format",qY="061183",kY="mofi25",VY="aes-256-cbc",$Y=16,YY=32,IN=re();IN.initSync();var Vm;CN.exports={validateLicense:wN,generateFingerPrint:WY,licenseSearch:Wm,getLicense:JY,checkMemoryLimit:XY};function Ym(){return $m.join(IN.getHdbBasePath(),ti.LICENSE_KEY_DIR_NAME,ti.LICENSE_FILE_NAME)}a(Ym,"getLicenseDirPath");function KY(){let e=Ym();return $m.join(e,ti.LICENSE_FILE_NAME)}a(KY,"getLicenseFilePath");function Km(){let e=Ym();return $m.join(e,ti.REG_KEY_FILE_NAME)}a(Km,"getFingerPrintFilePath");async function WY(){let e=Km();try{return await $o.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await QY();throw Wt.error(`Error writing fingerprint file to ${e}`),Wt.error(t),new Error("There was an error generating the fingerprint")}}a(WY,"generateFingerPrint");async function QY(){let e=xY(),t=yN.hash(e),r=Km();try{await $o.mkdirp(Ym()),await $o.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Wt.error(`Error writing fingerprint file to ${r}`),Wt.error(n),new Error("There was an error generating the fingerprint")}return t}a(QY,"writeFingerprint");function wN(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:ti.RAM_ALLOCATION_ENUM.DEFAULT,version:ti.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Wt.error("empty license key passed to validate."),r;let n=Km(),s=!1;try{s=$o.statSync(n)}catch(i){Wt.error(i)}if(s){let i;try{i=$o.readFileSync(n,"utf8")}catch{Wt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(kY),c=o[1];c=Buffer.concat([Buffer.from(c)],$Y);let u=Buffer.concat([Buffer.from(i)],YY),_=NN.createDecipheriv(VY,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=zY(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Vo),Wt.error(Vo),new Error(Vo)}let d;if(isNaN(l))try{d=JSON.parse(l),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(Vo),Wt.error(Vo),new Error(Vo)}else r.exp_date=l;r.exp_date<HY().valueOf()&&(r.valid_date=!1),yN.validate(o[1],`${qY}${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||Wt.error("Invalid licence"),r}a(wN,"validateLicense");function zY(e,t){try{let r=NN.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Wt.warn("Check old license failed")}}a(zY,"checkOldLicense");function Wm(){let e=new FY,t=[];try{t=$o.readFileSync(KY(),"utf-8").split(ti.NEW_LINE)}catch(r){r.code==="ENOENT"?Wt.info("no license file found"):Wt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(GY.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=wN(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){Wt.error("There was an error parsing the license string."),Wt.error(s),e.ram_allocation=ti.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Vm=e,e}a(Wm,"licenseSearch");async function JY(){return Vm||await Wm(),Vm}a(JY,"getLicense");function XY(){let e=Wm().ram_allocation,t=process.constrainedMemory?.()||bN();if(t=Math.round(Math.min(t,bN())/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(XY,"checkMemoryLimit")});var nn=g((Ece,YN)=>{"use strict";var UN="username is required",PN="nothing to update, must supply active, role or password to update",vN="password cannot be an empty string",BN="If role is specified, it cannot be empty.",HN="active must be true or false";YN.exports={addUser:oK,alterUser:aK,dropUser:uK,getSuperUser:fK,userInfo:lK,listUsers:H_,listUsersExternal:_K,setUsersToGlobal:Ko,findAndValidateUser:VN,getClusterUser:EK,USERNAME_REQUIRED:UN,ALTERUSER_NOTHING_TO_UPDATE:PN,EMPTY_PASSWORD:vN,EMPTY_ROLE:BN,ACTIVE_BOOLEAN:HN};var xN=rn(),jY=Yi(),Jm=U_(),GN=TN(),FN=Ur(),Xm=gs(),Pr=z(),qN=require("validate.js"),Se=K(),{promisify:ZY}=require("util"),jm=Ts(),DN=U(),LN=rt(),eK=Cr(),_ce=re(),dce=Ki(),tK=xi(),{table:fce}=(Ae(),se(Fe)),{handleHDBError:Jn,hdb_errors:rK}=ne(),{HTTP_STATUS_CODES:Xn,AUTHENTICATION_ERROR_MSGS:Qm,HDB_ERROR_MSGS:Yo}=rK,{UserEventMsg:Zm}=wn(),zm=require("lodash"),{server:ep}=(ir(),se(Li)),nK=K();ep.getUser=(e,t)=>VN(e,t,t!=null);var kN={username:!0,active:!0,role:!0,password:!0},MN=new Map,B_=FN.searchByValue,sK=FN.searchByHash,iK=ZY(jY.delete);async function oK(e){let t=qN.cleanAttributes(e,kN),r=GN.addUserValidation(t);if(r)throw Jn(new Error,r.message,Xn.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 B_(n),s=s&&Array.from(s)}catch(u){throw Se.error("There was an error searching for a role in add user"),Se.error(u),u}if(!s||s.length<1)throw Jn(new Error,Yo.ROLE_NAME_NOT_FOUND(t.role),Xn.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Jn(new Error,Yo.DUP_ROLES_FOUND(t.role),Xn.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=jm.encrypt(t.password)),t.password=Jm.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await xN.insert(i)}catch(u){throw Se.error("There was an error searching for a user."),Se.error(u),u}Se.debug(o);try{await Ko()}catch(u){throw Se.error("Got an error setting users to global"),Se.error(u),u}if(o.skipped_hashes.length===1)throw Jn(new Error,Yo.USER_ALREADY_EXISTS(t.username),Xn.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],Xm.signalUserChange(new Zm(process.pid)),`${c.username} successfully added`}a(oK,"addUser");async function aK(e){let t=qN.cleanAttributes(e,kN);if(Pr.isEmptyOrZeroLength(t.username))throw new Error(UN);if(Pr.isEmptyOrZeroLength(t.password)&&Pr.isEmptyOrZeroLength(t.role)&&Pr.isEmptyOrZeroLength(t.active))throw new Error(PN);if(!Pr.isEmpty(t.password)&&Pr.isEmptyOrZeroLength(t.password.trim()))throw new Error(vN);if(!Pr.isEmpty(t.active)&&!Pr.isBoolean(t.active))throw new Error(HN);let r=cK(t.username);if(!Pr.isEmpty(t.password)&&!Pr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=jm.encrypt(t.password)),t.password=Jm.hash(t.password)),t.role==="")throw new Error(BN);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 B_(i)||[])}catch(c){throw Se.error("Got an error searching for a role."),Se.error(c),c}if(!o||o.length===0){let c=Yo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Se.error(c),Jn(new Error,c,Xn.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Yo.ALTER_USER_DUP_ROLES(t.role);throw Se.error(c),Jn(new Error,c,Xn.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 xN.update(n)}catch(i){throw Se.error("Error during update."),Se.error(i),i}try{await Ko()}catch(i){throw Se.error("Got an error setting users to global"),Se.error(i),i}return Xm.signalUserChange(new Zm(process.pid)),s}a(aK,"alterUser");function cK(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(cK,"isClusterUser");async function uK(e){try{let t=GN.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Pr.isEmpty(global.hdb_users.get(e.username)))throw Jn(new Error,Yo.USER_NOT_EXIST(e.username),Xn.NOT_FOUND,void 0,void 0,!0);let n;try{n=await iK(r)}catch(s){throw Se.error("Got an error deleting a user."),Se.error(s),s}Se.debug(n);try{await Ko()}catch(s){throw Se.error("Got an error setting users to global."),Se.error(s),s}return Xm.signalUserChange(new Zm(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(uK,"dropUser");async function lK(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=zm.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await sK(r)}catch(s){throw Se.error("Got an error searching for a role."),Se.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Se.error(r),r}return t}a(lK,"userInfo");async function _K(){let e;try{e=await H_()}catch(t){throw Se.error("Got an error listing users."),Se.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(_K,"listUsersExternal");async function H_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await B_(e)}catch(o){throw Se.error("Got an error searching for roles."),Se.error(o),o}let r={};for(let o of t)r[o.id]=zm.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 B_(n)}catch(o){throw Se.error("Got an error searching for users."),Se.error(o),o}let i=new Map;for(let o of s)o=zm.cloneDeep(o),o.role=r[o.role],dK(o.role),i.set(o.username,o);return i}catch(e){throw Se.error("got an error listing users"),Se.error(e),Pr.errorizeMessage(e)}return null}a(H_,"listUsers");function dK(e){try{if(!e){Se.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(tK)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Se.error("Got an error trying to set system permissions."),Se.error(t)}}a(dK,"appendSystemTablesToRole");async function Ko(){try{let e=await H_();global.hdb_users=e}catch(e){throw Se.error(e),e}}a(Ko,"setUsersToGlobal");async function VN(e,t,r=!0){global.hdb_users||await Ko();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Jn(new Error,Qm.GENERIC_AUTH_FAIL,Xn.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Jn(new Error,Qm.USER_INACTIVE,Xn.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(MN.get(t)===n.password)return s;if(Jm.validate(n.password,t))MN.set(t,n.password);else throw Jn(new Error,Qm.GENERIC_AUTH_FAIL,Xn.UNAUTHORIZED,void 0,void 0,!0)}return s}a(VN,"findAndValidateUser");async function fK(){global.hdb_users||await Ko();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(fK,"getSuperUser");async function EK(){let e=await H_(),t=eK.getConfigFromFile(DN.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Pr.isEmpty(r)&&r?.role?.role===DN.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=jm.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+LN.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+LN.SERVER_SUFFIX.ADMIN,r}a(EK,"getClusterUser");var $N=[];ep.invalidateUser=function(e){for(let t of $N)try{t(e)}catch(r){nK.error("Error invalidating user",r)}};ep.onInvalidatedUser=function(e){$N.push(e)}});var vc=g((Sce,zN)=>{"use strict";var Wi=K(),vr=U(),hK=Fy(),mce=js(),pce=Fi(),mK=nn(),{validateEvent:KN}=wn(),Pc=In(),pK=require("process"),{resetDatabases:SK}=(Ae(),se(Fe)),TK={[vr.ITC_EVENT_TYPES.SCHEMA]:gK,[vr.ITC_EVENT_TYPES.USER]:QN};async function gK(e){let t=KN(e);if(t){Wi.error(t);return}Wi.trace("ITC schemaHandler received schema event:",e),await hK(e.message),await RK(e.message)}a(gK,"schemaHandler");async function RK(e){try{Pc.resetReadTxn(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Pc.resetReadTxn(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Pc.resetReadTxn(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=SK();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Wi.error(t)}}a(RK,"syncSchemaMetadata");var WN=[];async function QN(e){try{try{Pc.resetReadTxn(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Pc.resetReadTxn(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Wi.warn(r)}let t=KN(e);if(t){Wi.error(t);return}Wi.trace(`ITC userHandler ${vr.HDB_ITC_CLIENT_PREFIX}${pK.pid} received user event:`,e),await mK.setUsersToGlobal();for(let r of WN)r()}catch(t){Wi.error(t)}}a(QN,"userHandler");QN.addListener=function(e){WN.push(e)};zN.exports=TK});var wn=g((bce,XN)=>{"use strict";var gce=K(),tp=z(),AK=U(),{ITC_ERRORS:Bc}=Nr(),{parentPort:Rce,threadId:OK,isMainThread:bK,workerData:Ace}=require("worker_threads"),{onMessageFromWorkers:yK,broadcast:Oce,broadcastWithAcknowledgement:NK}=et();XN.exports={sendItcEvent:IK,validateEvent:JN,SchemaEventMsg:wK,UserEventMsg:CK};var x_;yK(async(e,t)=>{x_=x_||vc(),JN(e),x_[e.type]&&await x_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function IK(e){return!bK&&e.message&&(e.message.originator=OK),NK(e)}a(IK,"sendItcEvent");function JN(e){if(typeof e!="object")return Bc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||tp.isEmpty(e.type))return Bc.MISSING_TYPE;if(!e.hasOwnProperty("message")||tp.isEmpty(e.message))return Bc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||tp.isEmpty(e.message.originator))return Bc.MISSING_ORIGIN;if(AK.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Bc.INVALID_EVENT(e.type)}a(JN,"validateEvent");function wK(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(wK,"SchemaEventMsg");function CK(e){this.originator=e}a(CK,"UserEventMsg")});var gs=g((Ice,tI)=>{"use strict";var jN=U(),Nce=z(),G_=K(),ZN=Hy(),Wo,{sendItcEvent:eI}=wn();function DK(e){try{G_.trace("signalSchemaChange called with message:",e),Wo=Wo||vc();let t=new ZN(jN.ITC_EVENT_TYPES.SCHEMA,e);return Wo.schema(t),eI(t)}catch(t){G_.error(t)}}a(DK,"signalSchemaChange");function LK(e){try{G_.trace("signalUserChange called with message:",e),Wo=Wo||vc();let t=new ZN(jN.ITC_EVENT_TYPES.USER,e);return Wo.user(t),eI(t)}catch(t){G_.error(t)}}a(LK,"signalUserChange");tI.exports={signalSchemaChange:DK,signalUserChange:LK}});var F_=g((Cce,nI)=>{"use strict";var rI=z(),MK=U(),UK=K(),PK=T_(),vK=S_(),BK=gs(),{SchemaEventMsg:HK}=wn(),xK="already exists in";nI.exports=GK;async function GK(e,t,r){if(rI.isEmptyOrZeroLength(r))return r;let n=[];rI.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 FK(e,t.schema,t.name,i)})),s}a(GK,"lmdbCheckForNewAttributes");async function FK(e,t,r,n){let s=new vK(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await qK(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(xK))UK.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(FK,"createNewAttribute");async function qK(e){let t;return t=await PK(e),BK.signalSchemaChange(new HK(process.pid,MK.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(qK,"createAttribute")});var Qo=g((Lce,sI)=>{"use strict";var rp=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}};sI.exports=rp});var oI=g((Uce,iI)=>{"use strict";var kK=Qo(),VK=U().OPERATIONS_ENUM,np=class extends kK{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(VK.INSERT,r,n,s,i),this.records=t}};iI.exports=np});var cI=g((vce,aI)=>{"use strict";var $K=Qo(),YK=U().OPERATIONS_ENUM,sp=class extends $K{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(YK.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};aI.exports=sp});var lI=g((Hce,uI)=>{"use strict";var KK=Qo(),WK=U().OPERATIONS_ENUM,ip=class extends KK{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(WK.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};uI.exports=ip});var dI=g((Gce,_I)=>{"use strict";var QK=Qo(),zK=U().OPERATIONS_ENUM,op=class extends QK{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(zK.DELETE,n,s,t,i),this.original_records=r}};_I.exports=op});var Hc=g((kce,mI)=>{"use strict";var qce=require("path"),fI=Ye(),JK=oI(),XK=cI(),jK=lI(),ZK=dI(),zo=_t(),EI=z(),{CONFIG_PARAMS:eW}=U(),hI=re();hI.initSync();var q_=U().OPERATIONS_ENUM,{getTransactionAuditStorePath:tW}=Qe();mI.exports=rW;async function rW(e,t){if(hI.get(eW.LOGGING_AUDITLOG)===!1)return;let r=tW(e.schema,e.table),n=await fI.openEnvironment(r,e.table,!0),s=nW(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){fI.initializeDBIs(n,zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,zo.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),EI.isEmpty(s.user_name)||n.dbis[zo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[zo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(rW,"writeTransaction");function nW(e,t){let r=EI.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===q_.INSERT)return new JK(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===q_.UPDATE)return new XK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===q_.UPSERT)return new jK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===q_.DELETE)return new ZK(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(nW,"createTransactionObject")});var ap=g((Yce,pI)=>{"use strict";var sW=Dc(),$ce=Lc(),xc=U(),iW=Mc(),oW=Fo().insertRecords,aW=Ye(),cW=K(),uW=F_(),{getSchemaPath:lW}=Qe(),_W=Hc();pI.exports=dW;async function dW(e){try{let{schema_table:t,attributes:r}=sW(e);iW(e,r,t.hash_attribute),e.schema!==xc.SYSTEM_SCHEMA_NAME&&(r.includes(xc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(xc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(xc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(xc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await uW(e.hdb_auth_header,t,r),s=lW(e.schema,e.table),i=await aW.openEnvironment(s,e.table),o=await oW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await _W(e,o)}catch(c){cW.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(dW,"lmdbCreateRecords")});var gI=g((Wce,TI)=>{"use strict";var SI=U(),fW=ap(),EW=Lc(),hW=require("fs-extra"),{getSchemaPath:mW}=Qe();TI.exports=pW;async function pW(e){let t=[{name:e.schema,createddate:Date.now()}],r=new EW(SI.SYSTEM_SCHEMA_NAME,SI.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await fW(r),await hW.mkdirp(mW(e.schema))}a(pW,"lmdbCreateSchema")});var AI=g((zce,RI)=>{"use strict";var cp=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}};RI.exports=cp});var NI=g((eue,yI)=>{"use strict";var OI=Ye(),up=Dr(),lp=Nr().LMDB_ERRORS_ENUM,SW=_t(),bI=K(),Xce=z(),TW=require("lmdb"),gW=AI(),RW=U(),{OVERFLOW_MARKER:jce,MAX_SEARCH_KEY_LENGTH:Zce}=SW,AW=RW.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function OW(e,t,r,n){if(up.validateEnv(e),t===void 0)throw new Error(lp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(lp.IDS_REQUIRED):new Error(lp.IDS_MUST_BE_ITERABLE);try{let s=OI.listDBIs(e);OI.initializeDBIs(e,t,s);let i=new gW,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||n&&h[AW]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,TW.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let T=s[S];if(!h.hasOwnProperty(T)||T===t)continue;let b=e.dbis[T],R=h[T];if(R!=null)try{let L=up.getIndexedValues(R);if(L)for(let H=0,P=L.length;H<P;H++)b.remove(L[H],o)}catch{bI.warn(`cannot delete from attribute: ${T}, ${R}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){bI.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=up.getNextMonotonicTime(),i}catch(s){throw s}}a(OW,"deleteRecords");yI.exports={deleteRecords:OW}});var Gc=g((rue,wI)=>{"use strict";var Jo=z(),bW=NI(),yW=Ye(),{getSchemaPath:NW}=Qe(),IW=Hc(),wW=K();wI.exports=CW;async function CW(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Jo.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Jo.isEmptyOrZeroLength(e.hash_values)&&!Jo.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][n];Jo.isEmpty(u)||e.hash_values.push(u)}}if(Jo.isEmptyOrZeroLength(e.hash_values))return II([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Jo.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=NW(e.schema,e.table),i=await yW.openEnvironment(s,e.table),o=await bW.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await IW(e,o)}catch(c){wW.error(`unable to write transaction due to ${c.message}`)}return II(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(CW,"lmdbDeleteRecords");function II(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(II,"createDeleteResponse")});var dp=g((iue,CI)=>{"use strict";var DW=U(),sue=Dr();function _p(e,t){let r=Object.create(null);if(t.length===1&&DW.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(_p,"parseRow");function LW(e,t,r,n){let s=_p(r,e);n.push(s)}a(LW,"searchAll");function MW(e,t,r,n){let s=_p(r,e);n[t]=s}a(MW,"searchAllToMap");function UW(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(UW,"iterateDBI");function Qi(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(Qi,"pushResults");function PW(e,t,r,n,s,i){t.toString().endsWith(e)&&Qi(t,r,n,s,i)}a(PW,"endsWith");function vW(e,t,r,n,s,i){t.toString().includes(e)&&Qi(t,r,n,s,i)}a(vW,"contains");function BW(e,t,r,n,s,i){t>e&&Qi(t,r,n,s,i)}a(BW,"greaterThanCompare");function HW(e,t,r,n,s,i){t>=e&&Qi(t,r,n,s,i)}a(HW,"greaterThanEqualCompare");function xW(e,t,r,n,s,i){t<e&&Qi(t,r,n,s,i)}a(xW,"lessThanCompare");function GW(e,t,r,n,s,i){t<=e&&Qi(t,r,n,s,i)}a(GW,"lessThanEqualCompare");CI.exports={parseRow:_p,searchAll:LW,searchAllToMap:MW,iterateDBI:UW,endsWith:PW,contains:vW,greaterThanCompare:BW,greaterThanEqualCompare:HW,lessThanCompare:xW,lessThanEqualCompare:GW,pushResults:Qi}});var Xo=g((lue,BI)=>{"use strict";var ri=Ye(),aue=K(),Br=Dr(),k_=_t(),ct=Nr().LMDB_ERRORS_ENUM,cue=z(),FW=U(),V_=dp(),{parseRow:qW}=V_,uue=require("lmdb"),{OVERFLOW_MARKER:DI,MAX_SEARCH_KEY_LENGTH:kW}=k_;function LI(e,t,r,n=!1,s=void 0,i=void 0){return zi(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(LI,"iterateFullIndex");function Fc(e,t,r,n,s,i=!1,o=void 0,c=void 0,u=!1,_=!1){return zi(e,t,r,(l,d,f,E)=>{let b={transaction:l,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(b.values=!1,d.getRange(b).map(R=>({value:R}))):d.getRange(b)})}a(Fc,"iterateRangeBetween");function zi(e,t,r,n){let s=e.database||e,i=ri.openDBI(s,r);i[k_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ri.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(zi,"setupTransaction");function MI(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(DI)){if(!s)if(r)s=ri.openDBI(e,r);else{let u=ri.listDBIs(e);for(let _=0,l=u.length;_<l&&(s=ri.openDBI(e,u[_]),!s[k_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(MI,"getOverflowCheck");function VW(e,t,r,n=!1,s=void 0,i=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(ct.HASH_ATTRIBUTE_REQUIRED);return zi(e,t,t,(o,c,u)=>($_(r),r=qc(u,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>qW(_.value,r))))}a(VW,"searchAll");function $W(e,t,r,n=!1,s=void 0,i=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(ct.HASH_ATTRIBUTE_REQUIRED);$_(r),r=qc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of LI(e,t,t,n,s,i))o.set(c,V_.parseRow(u,r));return o}a($W,"searchAllToMap");function YW(e,t,r=!1,n=void 0,s=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(ct.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=LI(e,void 0,t,r,n,s),c=o.transaction,u=MI(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(YW,"iterateDBI");function KW(e,t){if(Br.validateEnv(e),t===void 0)throw new Error(ct.HASH_ATTRIBUTE_REQUIRED);return ri.statDBI(e,t).entryCount}a(KW,"countAll");function WW(e,t,r,n,s=!1,i=void 0,o=void 0){return ni(e,r,n),zi(e,t,r,(c,u,_,l)=>(n=Br.convertKeyValueToWrite(n),l===r?u.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:u.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(WW,"equals");function QW(e,t,r){return ni(e,t,r),ri.openDBI(e,t).getValuesCount(r)}a(QW,"count");function zW(e,t,r,n,s=!1,i=void 0,o=void 0){return ni(e,r,n),zi(e,null,r,(c,u)=>{n=Br.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let l;if(s===!0){let d;for(let f of u.getKeys({transaction:c,start:n}))if(!f.startsWith(n)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(n))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(zW,"startsWith");function JW(e,t,r,n,s=!1,i=void 0,o=void 0){return UI(e,t,r,n,s,i,o,!0)}a(JW,"endsWith");function UI(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ni(e,r,n),zi(e,null,r,(u,_,l,d)=>{let f=MI(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:s?!1:void 0,reverse:s}).flatMap(E=>{let h=E.toString();return h.endsWith(DI)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(n):S.includes(n))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(n):h.includes(n))?_[k_.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(UI,"contains");function XW(e,t,r,n,s=!1,i=void 0,o=void 0){ni(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Fc(e,t,r,n,u,s,i,o,!0,!1)}a(XW,"greaterThan");function jW(e,t,r,n,s=!1,i=void 0,o=void 0){ni(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Fc(e,t,r,n,u,s,i,o,!1,!1)}a(jW,"greaterThanEqual");function ZW(e,t,r,n,s=!1,i=void 0,o=void 0){ni(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Fc(e,t,r,u,n,s,i,o,!1,!0)}a(ZW,"lessThan");function eQ(e,t,r,n,s=!1,i=void 0,o=void 0){ni(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Fc(e,t,r,u,n,s,i,o,!1,!1)}a(eQ,"lessThanEqual");function tQ(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Br.validateEnv(e),r===void 0)throw new Error(ct.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(ct.START_VALUE_REQUIRED);if(s===void 0)throw new Error(ct.END_VALUE_REQUIRED);if(n=Br.convertKeyValueToWrite(n),s=Br.convertKeyValueToWrite(s),n>s)throw new Error(ct.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Fc(e,t,r,n,s,i,o,c)}a(tQ,"between");function rQ(e,t,r,n){Br.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ct.HASH_ATTRIBUTE_REQUIRED);if($_(r),r=qc(s,r),n===void 0)throw new Error(ct.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=V_.parseRow(c,r)),o}a(rQ,"searchByHash");function nQ(e,t,r){Br.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(ct.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ct.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(nQ,"checkHashExists");function sQ(e,t,r,n,s=[]){return vI(e,t,r,n,s),PI(e,t,r,n,s).map(i=>i[1])}a(sQ,"batchSearchByHash");function iQ(e,t,r,n,s=[]){vI(e,t,r,n,s);let i=new Map;for(let[o,c]of PI(e,t,r,n,s))i.set(o,c);return i}a(iQ,"batchSearchByHashToMap");function PI(e,t,r,n,s=[]){return zi(e,t,t,(i,o,c)=>{r=qc(c,r);let u=r.length<3;return n.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,V_.parseRow(l,r)];s.push(_)}).filter(_=>_)})}a(PI,"batchHashSearch");function vI(e,t,r,n,s){if(Br.validateEnv(e),t===void 0)throw new Error(ct.HASH_ATTRIBUTE_REQUIRED);if($_(r),n==null)throw new Error(ct.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(ct.IDS_MUST_BE_ITERABLE)}a(vI,"initializeBatchSearchByHash");function $_(e){if(!Array.isArray(e))throw e===void 0?new Error(ct.FETCH_ATTRIBUTES_REQUIRED):new Error(ct.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a($_,"validateFetchAttributes");function ni(e,t,r){if(Br.validateEnv(e),t===void 0)throw new Error(ct.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ct.SEARCH_VALUE_REQUIRED);if(r?.length>kW)throw new Error(ct.SEARCH_VALUE_TOO_LARGE)}a(ni,"validateComparisonFunctions");function qc(e,t){return t.length===1&&FW.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ri.listDBIs(e)),t}a(qc,"setGetWholeRowAttributes");BI.exports={searchAll:VW,searchAllToMap:$W,count:QW,countAll:KW,equals:WW,startsWith:zW,endsWith:JW,contains:UI,searchByHash:rQ,setGetWholeRowAttributes:qc,batchSearchByHash:sQ,batchSearchByHashToMap:iQ,checkHashExists:nQ,iterateDBI:YW,greaterThan:XW,greaterThanEqual:jW,lessThan:ZW,lessThanEqual:eQ,between:tQ}});var jo=g((due,qI)=>{var HI=require("lodash"),xI=je(),fe=require("joi"),oQ=z(),{hdb_schema_table:kc,checkValidTable:GI,hdb_table:FI,hdb_database:Y_}=Qn(),{handleHDBError:aQ,hdb_errors:cQ}=ne(),{getDatabases:uQ}=(Ae(),se(Fe)),{HTTP_STATUS_CODES:lQ}=cQ,_Q=fe.object({database:Y_,schema:Y_,table:FI,search_attribute:kc,search_value:fe.any().required(),get_attributes:fe.array().min(1).items(fe.alternatives(kc,fe.object())).optional(),desc:fe.bool(),limit:fe.number().integer().min(1),offset:fe.number().integer().min(0)}),dQ=fe.object({database:Y_,schema:Y_,table:FI,operator:fe.string().valid("and","or").default("and").lowercase(),offset:fe.number().integer().min(0),limit:fe.number().integer().min(1),get_attributes:fe.array().min(1).items(fe.alternatives(kc,fe.object())).optional(),sort:fe.object({attribute:fe.alternatives(kc,fe.array().min(1)),descending:fe.bool().optional()}).optional(),conditions:fe.array().min(1).items(fe.alternatives(fe.object({operator:fe.string().valid("and","or").default("and").lowercase(),conditions:fe.array()}),fe.object({search_attribute:fe.alternatives(kc,fe.array().min(1)),search_type:fe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:fe.when("search_type",{switch:[{is:"equals",then:fe.any()},{is:"between",then:fe.array().items(fe.alternatives([fe.string(),fe.number()])).length(2)}],otherwise:fe.alternatives(fe.string(),fe.number())}).required()}))).required()});qI.exports=function(e,t){let r=null;switch(t){case"value":r=xI.validateBySchema(e,_Q);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(GI("database",e.schema)),i(GI("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=xI.validateBySchema(e,dQ);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=oQ.checkGlobalSchemaTable(e.schema,e.table);if(s)return aQ(new Error,s,lQ.NOT_FOUND);let o=uQ()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let u=a(l=>{for(let d=0,f=l.conditions.length;d<f;d++){let E=l.conditions[d];E.conditions?u(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=HI.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!HI.some(o,d=>d===l||d.attribute===l||d.attribute===l.attribute));if(_&&_.length>0){let l=_.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var fp=g((Eue,kI)=>{"use strict";var fQ=Ye(),EQ=jo(),{getSchemaPath:hQ}=Qe();kI.exports=mQ;function mQ(e){let t=EQ(e,"hashes");if(t)throw t;let r=hQ(e.schema,e.table);return fQ.openEnvironment(r,e.table)}a(mQ,"initialize")});var Ep=g((mue,VI)=>{"use strict";var pQ=Xo(),SQ=fp();VI.exports=TQ;async function TQ(e){let t=await SQ(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return pQ.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(TQ,"lmdbGetDataByHash")});var Zo=g((Sue,$I)=>{"use strict";var hp=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};$I.exports=hp});var KI=g((Rue,YI)=>{"use strict";var gue=Zo(),gQ=Xo(),RQ=fp();YI.exports=AQ;async function AQ(e){let t=await RQ(e),r=global.hdb_schema[e.schema][e.table];return gQ.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(AQ,"lmdbSearchByHash")});var jn=g((Oue,WI)=>{"use strict";var mp=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};WI.exports=mp});var K_=g((yue,ZI)=>{"use strict";var Qt=Xo(),OQ=Ye(),bQ=z(),Ee=_t(),Ji=U(),yQ=xi(),QI=Nr().LMDB_ERRORS_ENUM,{getSchemaPath:NQ}=Qe(),Rs=Ji.SEARCH_WILDCARDS;async function IQ(e,t,r){let n;e.schema===Ji.SYSTEM_SCHEMA_NAME?n=yQ[e.table]:n=global.hdb_schema[e.schema][e.table];let s=jI(e,n.hash_attribute,r,t);return JI(e,s,n.hash_attribute,r)}a(IQ,"prepSearch");async function JI(e,t,r,n){let s=NQ(e.schema,e.table),i=await OQ.openEnvironment(s,e.table),o=XI(i,e,t,r),c=o.transaction||i;if([Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Ee.SEARCH_TYPES.SEARCH_ALL,Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(wQ(e,r)===!1){let l=e.search_attribute;if(l===r)return n?zI(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return n?zI(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return n===!0?Qt.batchSearchByHashToMap(c,r,e.get_attributes,_):Qt.batchSearchByHash(c,r,e.get_attributes,_)}a(JI,"executeSearch");function XI(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case Ee.SEARCH_TYPES.EQUALS:s=Qt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.CONTAINS:s=Qt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.ENDS_WITH:case Ee.SEARCH_TYPES._ENDS_WITH:s=Qt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.STARTS_WITH:case Ee.SEARCH_TYPES._STARTS_WITH:s=Qt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Qt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Qt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.SEARCH_ALL:return Qt.searchAll(e,n,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Qt.searchAllToMap(e,n,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.BETWEEN:s=Qt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN:case Ee.SEARCH_TYPES._GREATER_THAN:s=Qt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN_EQUAL:case Ee.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Qt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN:case Ee.SEARCH_TYPES._LESS_THAN:s=Qt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN_EQUAL:case Ee.SEARCH_TYPES._LESS_THAN_EQUAL:s=Qt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return s}a(XI,"searchByType");function zI(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(zI,"createMapFromIterable");function wQ(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(wQ,"checkToFetchMore");function jI(e,t,r,n){if(bQ.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),Rs.indexOf(s)>-1)return r===!0?Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ee.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Rs[0])<0&&s.indexOf(Rs[1])<0)return c===!0?r===!0?Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Ee.SEARCH_TYPES.EQUALS;if(Rs.indexOf(i)>=0&&Rs.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Ee.SEARCH_TYPES.CONTAINS;if(Rs.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Ee.SEARCH_TYPES.ENDS_WITH;if(Rs.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Ee.SEARCH_TYPES.STARTS_WITH;if(s.includes(Rs[0])||s.includes(Rs[1]))return Ee.SEARCH_TYPES.EQUALS;throw new Error(QI.UNKNOWN_SEARCH_TYPE)}else switch(n){case Ji.VALUE_SEARCH_COMPARATORS.BETWEEN:return Ee.SEARCH_TYPES.BETWEEN;case Ji.VALUE_SEARCH_COMPARATORS.GREATER:return Ee.SEARCH_TYPES.GREATER_THAN;case Ji.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Ee.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ji.VALUE_SEARCH_COMPARATORS.LESS:return Ee.SEARCH_TYPES.LESS_THAN;case Ji.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Ee.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(QI.UNKNOWN_SEARCH_TYPE)}}a(jI,"createSearchTypeFromSearchObject");ZI.exports={executeSearch:JI,createSearchTypeFromSearchObject:jI,prepSearch:IQ,searchByType:XI}});var tw=g((wue,ew)=>{"use strict";var Iue=jn(),CQ=jo(),DQ=z(),LQ=U(),MQ=K_();ew.exports=UQ;function UQ(e,t){if(!DQ.isEmpty(t)&&LQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=CQ(e,"value");if(n)throw n;return MQ.prepSearch(e,t,!0)}a(UQ,"lmdbGetDataByValue")});var Vc=g((Lue,rw)=>{"use strict";var Due=jn(),PQ=jo(),vQ=z(),BQ=U(),HQ=K_();rw.exports=xQ;async function xQ(e,t){if(!vQ.isEmpty(t)&&BQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=PQ(e,"value");if(n)throw n;return HQ.prepSearch(e,t,!1)}a(xQ,"lmdbSearchByValue")});var sw=g((Pue,nw)=>{"use strict";var Uue=_t(),pp=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}},Sp=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},Tp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};nw.exports={SearchByConditionsObject:pp,SearchCondition:Sp,SortAttribute:Tp}});var uw=g((xue,cw)=>{"use strict";var Bue=sw().SearchByConditionsObject,GQ=jn(),FQ=jo(),gp=Xo(),W_=_t(),{Resource:Hue}=(bn(),se(Rp)),aw=K_(),qQ=dp(),kQ=require("lodash"),{getSchemaPath:VQ}=Qe(),iw=Ye(),{handleHDBError:$Q,hdb_errors:YQ}=ne(),{HTTP_STATUS_CODES:KQ}=YQ,WQ=1e8;cw.exports=QQ;async function QQ(e){let t=FQ(e,"conditions");if(t)throw $Q(t,t.message,KQ.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=VQ(e.schema,e.table),n=await iw.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)iw.openDBI(n,_.search_attribute);let i=kQ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===W_.SEARCH_TYPES.EQUALS?_.estimated_count=gp.count(n,_.search_attribute,_.search_value):l===W_.SEARCH_TYPES.CONTAINS||l===W_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=WQ}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await ow(o,e,i[0],s.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],l=i.slice(1).map(aw.filterByType),d=l.length,f=gp.setGetWholeRowAttributes(n,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(E=>qQ.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await ow(o,e,f,s.hash_attribute);c=c.concat(E)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=gp.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(QQ,"lmdbSearchByConditions");async function ow(e,t,r,n){let s=new GQ(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===W_.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,aw.searchByType(e,s,i,n).map(o=>o.value)}a(ow,"executeConditionSearch")});var $c=g((Fue,lw)=>{"use strict";var zQ=U().OPERATIONS_ENUM,Ap=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=zQ.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};lw.exports=Ap});var Op=g((kue,Sw)=>{"use strict";var Ew=jn(),hw=$c(),mw=Vc(),pw=Gc(),ur=U(),_w=z(),dw=Ye(),{getTransactionAuditStorePath:JQ,getSchemaPath:XQ}=Qe(),fw=K();Sw.exports=jQ;async function jQ(e){try{if(_w.isEmpty(global.hdb_schema[e.schema])||_w.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await ZQ(e),await ez(e);let t=XQ(e.schema,e.table);try{await dw.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")fw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=JQ(e.schema,e.table);await dw.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")fw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(jQ,"lmdbDropTable");async function ZQ(e){let t=new Ew(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await mw(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 hw(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await pw(s)}a(ZQ,"deleteAttributesFromSystem");async function ez(e){let t=new Ew(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await mw(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 hw(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await pw(s)}catch(i){throw i}}a(ez,"dropTableFromSystem")});var gw=g(($ue,Tw)=>{"use strict";var tz=require("fs-extra"),rz=jn(),nz=Zo(),sz=$c(),iz=Op(),oz=Gc(),az=Ep(),cz=Vc(),As=U(),{getSchemaPath:uz}=Qe(),{handleHDBError:lz,hdb_errors:_z}=ne(),{HDB_ERROR_MSGS:dz,HTTP_STATUS_CODES:fz}=_z;Tw.exports=Ez;async function Ez(e){let t;try{t=await hz(e.schema);let r=new rz(As.SYSTEM_SCHEMA_NAME,As.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,As.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[As.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await cz(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await iz(c)}catch(u){if(u.message!=="invalid environment")throw u}}let s=new sz(As.SYSTEM_SCHEMA_NAME,As.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await oz(s);let i=uz(t);await tz.remove(i)}catch(r){throw r}}a(Ez,"lmdbDropSchema");async function hz(e){let t=new nz(As.SYSTEM_SCHEMA_NAME,As.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[As.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await az(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw lz(new Error,dz.SCHEMA_NOT_FOUND(e),fz.NOT_FOUND,void 0,void 0,!0);return n}a(hz,"validateDropSchema")});var yp=g((Kue,Rw)=>{"use strict";var bp=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};Rw.exports=bp});var Ow=g((zue,Aw)=>{"use strict";var mz=require("fs-extra"),Q_=Ye(),{getTransactionAuditStorePath:pz}=Qe(),Np=_t(),Que=yp();Aw.exports=Sz;async function Sz(e){let t;try{let r=pz(e.schema,e.table);await mz.mkdirp(r),t=await Q_.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{Q_.createDBI(t,Np.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Q_.createDBI(t,Np.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Q_.createDBI(t,Np.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(Sz,"createTransactionsAuditEnvironment")});var Iw=g((Xue,Nw)=>{"use strict";var Ip=U(),bw=Ye(),Tz=Fo(),{getSystemSchemaPath:gz,getSchemaPath:Rz}=Qe(),Az=xi(),Oz=T_(),wp=S_(),bz=K(),yz=Ow(),Dp=Az.hdb_table,yw=[];for(let e=0;e<Dp.attributes.length;e++)yw.push(Dp.attributes[e].attribute);Nw.exports=Nz;async function Nz(e,t){let r=Rz(t.schema,t.table),n=new wp(t.schema,t.table,Ip.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new wp(t.schema,t.table,Ip.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new wp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await bw.createEnvironment(r,t.table),e!==void 0){let o=await bw.openEnvironment(gz(),Ip.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Tz.insertRecords(o,Dp.hash_attribute,yw,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Cp(n),await Cp(s),await Cp(i)}await yz(t)}catch(o){throw o}}a(Nz,"lmdbCreateTable");async function Cp(e){try{await Oz(e)}catch(t){bz.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Cp,"createAttribute")});var Cw=g((Zue,ww)=>{"use strict";var Iz=Dc(),wz=Mc(),Cz=F_(),Yc=U(),Dz=Fo().updateRecords,Lz=Ye(),{getSchemaPath:Mz}=Qe(),Uz=Hc(),Pz=K();ww.exports=vz;async function vz(e){try{let{schema_table:t,attributes:r}=Iz(e);wz(e,r,t.hash_attribute),e.schema!==Yc.SYSTEM_SCHEMA_NAME&&(r.includes(Yc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Yc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Yc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Yc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Cz(e.hdb_auth_header,t,r),s=Mz(e.schema,e.table),i=await Lz.openEnvironment(s,e.table),o=await Dz(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Uz(e,o)}catch(c){Pz.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(vz,"lmdbUpdateRecords")});var Lw=g((tle,Dw)=>{"use strict";var Bz=U().OPERATIONS_ENUM,Lp=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Bz.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Dw.exports=Lp});var Uw=g((sle,Mw)=>{"use strict";var nle=Lw(),Hz=Dc(),xz=Mc(),Gz=F_(),Kc=U(),Fz=Fo().upsertRecords,qz=Ye(),{getSchemaPath:kz}=Qe(),Vz=Hc(),$z=K(),{handleHDBError:Yz,hdb_errors:Kz}=ne();Mw.exports=Wz;async function Wz(e){let t;try{t=Hz(e)}catch(u){throw Yz(u,u.message,Kz.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;xz(e,n,r.hash_attribute),e.schema!==Kc.SYSTEM_SCHEMA_NAME&&(n.includes(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Gz(e.hdb_auth_header,r,n),i=kz(e.schema,e.table),o=await qz.openEnvironment(i,e.table),c=await Fz(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await Vz(e,c)}catch(u){$z.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(Wz,"lmdbUpsertRecords")});var vw=g((ole,Pw)=>{"use strict";var Mp=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};Pw.exports=Mp});var Hw=g((cle,Bw)=>{"use strict";var Up=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}};Bw.exports=Up});var Fw=g((_le,Gw)=>{"use strict";var Pp=Ye(),{getTransactionAuditStorePath:Qz}=Qe(),lle=vw(),Wc=_t(),zz=z(),xw=Hw(),Jz=require("util").promisify,Xz=Jz(setTimeout),jz=1e4,Zz=100;Gw.exports=e2;async function e2(e){let t=Qz(e.schema,e.table),r=await Pp.openEnvironment(t,e.table,!0),n=Pp.listDBIs(r);Pp.initializeDBIs(r,Wc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new xw;do s=await t2(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 Xz(Zz);while(s.transactions_deleted>0);return i}a(e2,"deleteAuditLogsBefore");async function t2(e,t){let r=new xw;try{let n=e.dbis[Wc.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[Wc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];zz.isEmpty(c)||(s=e.dbis[Wc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)s=e.dbis[Wc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>jz)break}return await s,r}catch(n){throw n}}a(t2,"deleteTransactions")});var kw=g((fle,qw)=>{"use strict";var vp=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};qw.exports=vp});var $w=g((mle,Vw)=>{"use strict";var r2=jn(),n2=$c(),hle=kw(),Zn=U(),s2=z(),Bp=Ye(),i2=xi(),o2=Vc(),a2=Gc(),{getSchemaPath:c2}=Qe();Vw.exports=u2;async function u2(e,t=!0){let r;e.schema===Zn.SYSTEM_SCHEMA_NAME?r=i2[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await _2(e),s=c2(e.schema,e.table),i=await Bp.openEnvironment(s,e.table);return t===!0&&await l2(e,i,r.hash_attribute),Bp.dropDBI(i,e.attribute),n}a(u2,"lmdbDropAttribute");async function l2(e,t,r){let n=Bp.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:u}of n.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);s=t.dbis[r].put(o,_,u)}await s}a(l2,"removeAttributeFromAllObjects");async function _2(e){let t=new r2(Zn.SYSTEM_SCHEMA_NAME,Zn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Zn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Zn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Zn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await o2(t)).filter(o=>o[Zn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(s2.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Zn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new n2(Zn.SYSTEM_SCHEMA_NAME,Zn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return a2(i)}a(_2,"dropAttributeFromSystem")});var Jw=g((Tle,zw)=>{"use strict";var Hp=Ye(),ea=_t(),Sle=Dr(),xp=U(),Yw=z(),{getTransactionAuditStorePath:d2}=Qe(),f2=Xo(),z_=Qo(),E2=K();zw.exports=h2;async function h2(e){let t=d2(e.schema,e.table),r=await Hp.openEnvironment(t,e.table,!0),n=Hp.listDBIs(r);Hp.initializeDBIs(r,ea.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case xp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Kw(r,e.search_values);case xp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,p2(r,e.search_values,s);case xp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return m2(r,e.search_values);default:return Kw(r)}}a(h2,"readAuditLog");function Kw(e,t=[0,Date.now()]){Yw.isEmpty(t[0])&&(t[0]=0),Yw.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ea.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 z_,s))}a(Kw,"searchTransactionsByTimestamp");function m2(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[ea.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,Qw(e,i))}return Object.fromEntries(r)}a(m2,"searchTransactionsByUsername");function p2(e,t,r){let n=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=f2.equals(e,ea.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ea.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);n.has(f)?n.get(f).push(_.toString()):n.set(f,[_.toString()])}}let s=Array.from(n.keys()),i=Qw(e,s),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=n.get(_);Ww(u,"records",r,l,o),Ww(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(p2,"searchTransactionsByHashValues");function Ww(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(n.indexOf(u)>=0)if(s.has(u)){let _=s.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new z_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new z_(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(u,[_])}}}a(Ww,"loopRecords");function Qw(e,t){let r=[];try{let n=e.dbis[ea.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 z_,i);r.push(o)}}catch(i){E2.warn(i)}return r}catch(n){throw n}}a(Qw,"batchSearchTransactions")});var jw=g((Ole,Xw)=>{"use strict";var{getSchemaPath:Rle}=Qe(),Ale=Ye(),{database:S2}=(Ae(),se(Fe));Xw.exports={writeTransaction:T2};async function T2(e,t,r){return S2({database:e,table:t}).transaction(r)}a(T2,"writeTransaction")});var rC=g((yle,tC)=>{"use strict";var{getSchemaPath:Zw}=Qe(),eC=Ye();tC.exports={flush:g2,resetReadTxn:R2};async function g2(e,t){return(await eC.openEnvironment(Zw(e,t),t.toString())).flushed}a(g2,"flush");async function R2(e,t){try{(await eC.openEnvironment(Zw(e,t),t.toString())).resetReadTxn()}catch{}}a(R2,"resetReadTxn")});var oC=g((Ile,iC)=>{"use strict";var{Readable:A2}=require("stream"),{getDatabases:O2}=(Ae(),se(Fe)),{readSync:b2,openSync:y2,createReadStream:nC}=require("fs"),{open:N2}=require("lmdb"),sC=c_(),I2=l_(),{AUDIT_STORE_OPTIONS:w2}=(Bi(),se(aC)),{INTERNAL_DBIS_NAME:C2,AUDIT_STORE_NAME:D2}=_t();iC.exports=M2;var Gp=32768,L2=100;async function M2(e){let t=e.database||e.schema||"data",r=O2()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let l=_.dbisDB,d=N2({noSync:!0,maxDbs:I2.MAX_DBS}),f,E=d.openDB(C2,new sC(!1)),h=l.useReadTransaction(),p=0,S=a(async function(b,R){R.encoding="binary",R.encoder=void 0;let L=d.openDB(b,R),H=l.openDB(b,R);for(let{key:P,version:k,value:B}of H.getRange({transaction:h,versions:H.useVersions}))f=L.put(P,B,k),p++%L2===0&&(await new Promise(J=>setTimeout(J,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:b,value:R}of l.getRange({transaction:h,start:!1}))if(s.some(L=>b.startsWith?.(L+"/"))){E.put(b,R);let[,L]=b.split("/"),H=!L,P=new sC(!H,H);await S(b,P)}e.include_audit&&await S(D2,Object.assign({},w2)),await f;let T=nC(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=y2(o.path);return o.transaction(()=>{let _=Buffer.alloc(Gp);b2(c,_,0,Gp),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=nC(null,{fd:c,start:Gp}),f=new A2.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(M2,"getBackup")});var lC=g((Cle,uC)=>{"use strict";var U2=K(),{handleHDBError:P2}=ne(),v2=Fb(),B2=T_(),H2=ap(),x2=gI(),G2=Gc(),F2=Ep(),q2=KI(),k2=tw(),V2=Vc(),$2=uw(),Y2=gw(),K2=Iw(),W2=Cw(),Q2=Uw(),z2=Fw(),J2=Op(),X2=$w(),j2=Jw(),Z2=jw(),cC=rC(),eJ=oC(),Fp=class extends v2{static{a(this,"LMDBBridge")}async searchByConditions(t){return $2(t)}async getDataByHash(t){return await F2(t)}async searchByHash(t){return await q2(t)}async getDataByValue(t,r){return await k2(t,r)}async searchByValue(t){return await V2(t)}async createSchema(t){return await x2(t)}async dropSchema(t){return await Y2(t)}async createTable(t,r){return await K2(t,r)}async dropTable(t){return await J2(t)}async createAttribute(t){return await B2(t)}async createRecords(t){return await H2(t)}async updateRecords(t){return await W2(t)}async upsertRecords(t){try{return await Q2(t)}catch(r){throw P2(r,null,null,U2.ERR,r)}}async deleteRecords(t){return await G2(t)}async dropAttribute(t){return await X2(t)}async deleteAuditLogsBefore(t){return await z2(t)}async readAuditLog(t){return await j2(t)}writeTransaction(t,r,n){return Z2.writeTransaction(t,r,n)}flush(t,r){return cC.flush(t,r)}resetReadTxn(t,r){return cC.resetReadTxn(t,r)}getBackup(t){return eJ(t)}};uC.exports=Fp});function iJ(){sJ=setInterval(function(){for(let e of qp)if(e.stale){let t=e[Oe]?.url;fC.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},nJ).unref()}var kp,dC,fC,tJ,qp,rJ,Qc,_C,Xi,J_,nJ,sJ,Vp=Re(()=>{kp=x(Dr()),dC=x(ne()),fC=x(K());bn();xo();tJ=100,qp=new Set,rJ=25e3,Xi=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;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.readTxnsUsed=1,o_(()=>{this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0)}),qp.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),o_(()=>{this.readTxn.use()}),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(qp.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(Qc&&performance.now()-_C>rJ)throw new dC.ServerError("Outstanding write transactions have too long of queue, please try again later",503)}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,kp.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length)try{let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{try{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let T=S();E?E.push?E.push(T):E=[E,T]:E=T}}E&&await(E.push?Promise.all(E):E)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(l){throw this.abort(),l}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,n)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){n>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);s=s||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<tJ>>n?u():s=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),s)return Qc||(Qc=s,_C=performance.now(),Qc.then(()=>{Qc=null})),s.then(l=>l?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=n+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},J_=class extends Xi{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,kp.getNextMonotonicTime)())}getReadTxn(){}},nJ=3e4;a(iJ,"startMonitoringTxns");iJ()});function ze(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 Xi;e.timestamp&&(n.timestamp=e.timestamp),n[Oe]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let u=n.commit({letItLinger:r?.letItLinger});return u.then?u.then(()=>c):c}function o(c){throw n.abort({}),c}}var EC,ji=Re(()=>{EC=require("../../index");bn();Vp();a(ze,"transaction");(0,EC._assignPackageExport)("transaction",ze);ze.commit=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};ze.abort=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var OC={};$e(OC,{ResourceBridge:()=>Kp});function Wp({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 mC(e,t){let r=es(e),n=Wp(e,r);if(!r)throw new Cn.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},o;ze(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:s,select:n},i);return l=l&&j_(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function es(e){let t=e.database||e.schema||aJ,r=Dn()[t];if(!r)throw(0,Cn.handleHDBError)(new Error,oJ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function pC(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*SC(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(u)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[u]})}n&&(yield n)}var TC,X_,Cn,gC,RC,Ln,$p,Yp,AC,oJ,aJ,cJ,uJ,hC,Kp,bC=Re(()=>{"use strict";TC=x(lC()),X_=x(jo()),Cn=x(ne());Ae();gC=x(Dc()),RC=x(Mc()),Ln=x(U()),$p=x(gs()),Yp=x(wn()),AC=x(z());ji();Z_();({HDB_ERROR_MSGS:oJ}=Cn.hdb_errors),aJ="data",cJ=1e4,uJ=10,Kp=class extends TC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),hC=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,X_.default)(t,"conditions");if(r)throw(0,Cn.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=es(t);if(!n)throw new Cn.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:Wp(t,n),sort:t.sort,allowFullScan:!0})}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 Cn.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}]}at({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await es(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=es(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,u)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,u),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){es(t).dropTable()}createSchema(t){return zc({database:t.schema,table:null}),$p.signalSchemaChange(new Yp.SchemaEventMsg(process.pid,Ln.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Qp(t.schema),$p.signalSchemaChange(new Yp.SchemaEventMsg(process.pid,Ln.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,hC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,gC.default)(t);(0,RC.default)(t,n,r.primaryKey);let s,i=Dn()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return ze(o,async c=>{if(!i.schemaDefined){s=[];for(let l of n)i.attributes.find(f=>f.name==l)||s.push(l);s.length>0&&await i.addAttributes(s.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=j_(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=Dn()[t.schema][t.table],n={user:t.hdb_user};return ze(n,async s=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,n)?o.push(u):c.push(u);return pC(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Dn()[t.schema][t.table];if(!r.createdTimeProperty)throw new Cn.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:Ln.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,AC.async_set_timeout)(uJ),u=[],s=!0},"chunkDelete");for await(let l of n)u.push(l[r.primaryKey]),c++,c%cJ===0&&await _();return u.length>0&&await _(),s?pC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,X_.default)(t,"hashes");if(r)throw r;return mC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of mC(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Ln.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,X_.default)(t,"value");if(n)throw n;let s=es(t);if(!s)throw new Cn.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===Ln.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,select:Wp(t,s)})}async getDataByValue(t,r){let n=new Map,s=es(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){es({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return es(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=es(t),n={};switch(t.search_type){case Ln.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case Ln.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of SC(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return SC(r,t.search_values?.[0],t.search_values?.[1])}}};a(Wp,"getSelect");a(mC,"getRecords");a(es,"getTable");a(pC,"createDeleteResponse");a(SC,"groupRecordsInHistory")});var In=g((Yle,yC)=>{"use strict";var{ResourceBridge:lJ}=(bC(),se(OC)),_J=re();_J.initSync();var ed;function dJ(){return ed||(ed=new lJ,ed)}a(dJ,"getBridge");yC.exports=dJ()});var CC=g((Wle,wC)=>{"use strict";var NC=require("lodash"),Jc=require("mathjs"),fJ=require("jsonata"),IC=z();wC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?NC.uniqWith(e,NC.isEqual):e,searchJSON:EJ,mad:Xc.bind(null,Jc.mad),mean:Xc.bind(null,Jc.mean),mode:Xc.bind(null,Jc.mode),prod:Xc.bind(null,Jc.prod),median:Xc.bind(null,Jc.median)};function Xc(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(Xc,"aggregateFunction");function EJ(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(IC.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),IC.isEmpty(this.__ala__.res[r])){let n=fJ(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(EJ,"searchJSON")});var LC=g((zle,DC)=>{"use strict";var ft=require("moment"),zp="YYYY-MM-DDTHH:mm:ss.SSSZZ";ft.suppressDeprecationWarnings=!0;DC.exports={current_date:()=>ft().utc().format("YYYY-MM-DD"),current_time:()=>ft().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return ft(e).utc().format("YYYY");case"month":return ft(e).utc().format("MM");case"day":return ft(e).utc().format("DD");case"hour":return ft(e).utc().format("HH");case"minute":return ft(e).utc().format("mm");case"second":return ft(e).utc().format("ss");case"millisecond":return ft(e).utc().format("SSS");default:break}},date:e=>ft(e).utc().format(zp),date_format:(e,t)=>ft(e).utc().format(t),date_add:(e,t,r)=>ft(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>ft(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=ft(e).utc(),s=ft(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>ft().utc().valueOf(),get_server_time:()=>ft().format(zp),offset_utc:(e,t)=>ft(e).utc().utcOffset(t).format(zp)}});var vC=g((Jle,PC)=>{"use strict";var hJ=require("@turf/area"),mJ=require("@turf/length"),pJ=require("@turf/circle"),SJ=require("@turf/difference"),TJ=require("@turf/distance"),gJ=require("@turf/boolean-contains"),RJ=require("@turf/boolean-equal"),AJ=require("@turf/boolean-disjoint"),OJ=require("@turf/helpers"),MC=U(),me=z(),Os=K();PC.exports={geoArea:bJ,geoLength:yJ,geoCircle:NJ,geoDifference:IJ,geoDistance:UC,geoNear:wJ,geoContains:CJ,geoEqual:DJ,geoCrosses:LJ,geoConvert:MJ};function bJ(e){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return hJ.default(e)}catch(t){return Os.trace(t,e),NaN}}a(bJ,"geoArea");function yJ(e,t){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return mJ.default(e,{units:t||"kilometers"})}catch(r){return Os.trace(r,e),NaN}}a(yJ,"geoLength");function NJ(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return pJ.default(e,t,{units:r||"kilometers"})}catch(n){return Os.trace(n,e,t),NaN}}a(NJ,"geoCircle");function IJ(e,t){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return SJ(e,t)}catch(r){return Os.trace(r,e,t),NaN}}a(IJ,"geoDifference");function UC(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return TJ.default(e,t,{units:r||"kilometers"})}catch(n){return Os.trace(n,e,t),NaN}}a(UC,"geoDistance");function wJ(e,t,r,n){if(me.isEmpty(e)||me.isEmpty(t))return!1;if(me.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return UC(e,t,n)<=r}catch(s){return Os.trace(s,e,t),!1}}a(wJ,"geoNear");function CJ(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return gJ.default(e,t)}catch(r){return Os.trace(r,e,t),!1}}a(CJ,"geoContains");function DJ(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return RJ.default(e,t)}catch(r){return Os.trace(r,e,t),!1}}a(DJ,"geoEqual");function LJ(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return!AJ.default(e,t)}catch(r){return Os.trace(r,e,t),!1}}a(LJ,"geoCrosses");function MJ(e,t,r){if(me.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(me.isEmpty(t))throw new Error("geo_type is required");if(me.isEmpty(MC.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(MC.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=me.autoCastJSON(e)),OJ[t](e,r)}a(MJ,"geoConvert")});var td=g((jle,BC)=>{var Zi=CC(),Hr=LC(),ts=vC();BC.exports=e=>{e.aggr.mad=e.aggr.MAD=Zi.mad,e.aggr.mean=e.aggr.MEAN=Zi.mean,e.aggr.mode=e.aggr.MODE=Zi.mode,e.aggr.prod=e.aggr.PROD=Zi.prod,e.aggr.median=e.aggr.MEDIAN=Zi.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Zi.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Zi.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Hr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Hr.current_time,e.fn.extract=e.fn.EXTRACT=Hr.extract,e.fn.date=e.fn.DATE=Hr.date,e.fn.date_format=e.fn.DATE_FORMAT=Hr.date_format,e.fn.date_add=e.fn.DATE_ADD=Hr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Hr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Hr.date_diff,e.fn.now=e.fn.NOW=Hr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Hr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Hr.get_server_time,e.fn.getdate=e.fn.GETDATE=Hr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Hr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=ts.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=ts.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=ts.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=ts.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=ts.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=ts.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=ts.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=ts.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=ts.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=ts.geoNear}});var FC=g((Zle,GC)=>{"use strict";var jc=require("lodash"),lr=require("alasql");lr.options.cache=!1;var UJ=td(),HC=require("clone"),rd=require("recursive-iterator"),le=K(),we=z(),ta=In(),PJ=U(),{hdb_errors:vJ}=ne(),{getDatabases:xC}=(Ae(),se(Fe)),BJ="IS NULL",Mn="There was a problem performing this search. Please check the logs and try again.";UJ(lr);var Jp=class{static{a(this,"SQLSearch")}constructor(t,r){if(we.isEmpty(t))throw le.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(),we.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!we.isEmptyOrZeroLength(n))return le.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw le.error("Error thrown from checkEmptySQL in SQLSearch class method search."),le.error(n),new Error(Mn)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw le.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),le.error(n),new Error(Mn)}if(Object.keys(this.data).length===0)return le.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw le.error("Error thrown from processJoins in SQLSearch class method search."),le.error(n),new Error(Mn)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw le.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),le.error(n),new Error(Mn)}try{return t=await this._finalSQL(),t}catch(n){throw le.error("Error thrown from finalSQL in SQLSearch class method search."),le.error(n),new Error(Mn)}}_getColumns(){let t=new rd(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(HC(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=jc.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=xC()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(we.isEmpty(this.statement.where)){le.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new rd(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!we.isEmpty(r)&&r.right)if(we.isNotEmptyAndHasValue(r.right.value)){let n=we.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new lr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=we.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new lr.yy.LogicValue({value:i}):n instanceof lr.yy.StringValue&&we.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new lr.yy.NumValue({value:i}))});if(t){le.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new rd(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(!we.isEmpty(PJ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(we.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(we.isEmptyOrZeroLength(r.left.columnid)||we.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(we.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"=":!we.isEmpty(r.right.value)||!we.isEmpty(r.left.value)?n.add(we.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)n.add(u[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(we.isEmptyOrZeroLength(this.all_table_attributes)&&we.isEmptyOrZeroLength(this.statement.from)&&we.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&&jc.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(we.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);we.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(we.isEmptyOrZeroLength(this.all_table_attributes)&&!we.isEmptyOrZeroLength(this.columns.columns))return t;if(we.isEmptyOrZeroLength(this.all_table_attributes)&&we.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await lr.promise(r)}catch(r){throw le.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),le.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(HC(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(we.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(BJ)>-1&&this.tables.forEach(s=>{let i={columnid:xC()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=jc.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},u=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(u=!0),!we.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!we.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await ta.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(l){throw le.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),le.error(l),new Error(Mn)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await ta.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]):(this.data[i].__merged_data[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,E))}))}catch(l){throw le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),le.error(l),new Error(Mn)}else if(!we.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!we.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await ta.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...n[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]):(this.data[i].__merged_data[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,p))}}catch(l){throw le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),le.error(l),new Error(Mn)}else try{c.search_attribute=s.attribute,c.search_value="*";let l=await ta.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]),this._setMergedHashAttribute(i,d))}catch(l){throw le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),le.error(l),new Error(Mn)}}}_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 lr.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 lr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new lr.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 lr.yy.FuncValue:new lr.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(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,p=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${p}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${p}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"";u=u.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,s);f=await lr.promise(h,t),t=null}catch(E){throw le.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),le.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let p=f[E];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),p=jc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,T=p.length;S<T;S++){let b=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[b]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new rd(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=jc.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 le.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),le.error(i),new Error(Mn)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},u=await ta.getDataByHash(c),_=s.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let p=s.columns[h],S=E[p]===void 0?null:E[p];this.data[n].__merged_data[f].push(S)}}}}catch(r){throw le.error("Error thrown from getDataByHash function in SQLSearch class method getData."),le.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===u}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();le.trace(`Final SQL: ${s}`),n=await lr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),le.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw le.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),le.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 le.error(vJ.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),le.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=s[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;n=n.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(u,_)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await ta.getDataByValue(i);for(let[c,u]of o)this.data[s].__merged_data[c]||(u[n.attribute]===void 0&&(u[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=u[n.attribute]??null}catch(o){throw le.error("There was an error when processing this SQL operation. Check your logs"),le.error(o),new Error(Mn)}}return Object.values(Object.values(this.data)[0].__merged_data)}};GC.exports=Jp});var Ur=g((t_e,qC)=>{"use strict";var HJ=xb();qC.exports={searchByConditions:GJ,searchByHash:FJ,searchByValue:qJ,search:kJ};var Xp=In(),{transformReq:jp}=z(),xJ=FC();async function GJ(e){return jp(e),Xp.searchByConditions(e)}a(GJ,"searchByConditions");async function FJ(e){jp(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Xp.searchByHash(e))r&&t.push(r);return t}a(FJ,"searchByHash");async function qJ(e){jp(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Xp.searchByValue(e))t.push(r);return t}a(qJ,"searchByValue");function kJ(e,t){try{let r=new HJ(e);r.validate(),new xJ(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(kJ,"search")});var nd=g((n_e,kC)=>{"use strict";var VJ=In();kC.exports={writeTransaction:$J};function $J(e,t,r){return VJ.writeTransaction(e,t,r)}a($J,"writeTransaction")});var KC=g((o_e,YC)=>{"use strict";var YJ=Ur(),KJ=js(),VC=K(),WJ=rn(),i_e=nd(),QJ=require("clone"),eS=require("alasql"),zJ=td(),$C=require("util"),JJ=$C.promisify(KJ.getTableSchema),XJ=$C.promisify(YJ.search),jJ=U(),Zp=z();zJ(eS);YC.exports={update:e4};var ZJ="There was a problem performing this update. Please check the logs and try again.";async function e4({statement:e,hdb_user:t}){let r=await JJ(e.table.databaseid,e.table.tableid),n=t4(e.columns);Zp.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=QJ(s),c=Zp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=eS.parse(u).statements[0],l=await XJ(_),d=r4(n,l);return n4(o,d,t)}a(e4,"update");function t4(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=eS.compile(`SELECT ${r.expression.toString()} AS [${jJ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw VC.error(t),new Error(ZJ)}}a(t4,"createUpdateRecord");function r4(e,t){return Zp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(r4,"buildUpdateRecords");async function n4(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await WJ.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){VC.error(`Error delete new_attributes from update response: ${i}`)}return s}a(n4,"updateRecords")});var QC=g((l_e,WC)=>{var s4=require("alasql"),i4=Ur(),o4=K(),a4=In(),rS=require("util"),tS=z(),c4=U(),u4=js(),c_e=nd(),u_e=rn(),l4="record",_4="successfully deleted",d4=rS.callbackify(m4),f4=rS.promisify(i4.search),E4=rS.promisify(u4.getTableSchema);WC.exports={convertDelete:d4};function h4(e){return`${e.deleted_hashes.length} ${l4}${e.deleted_hashes.length===1?"":"s"} ${_4}`}a(h4,"generateReturnMessage");async function m4({statement:e,hdb_user:t}){let r=await E4(e.table.databaseid,e.table.tableid);tS.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=tS.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=s4.parse(o).statements[0],u={operation:c4.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await f4(c);let _=await a4.deleteRecords(u);return tS.isEmptyOrZeroLength(_.message)&&(_.message=h4(_)),delete _.txn_time,_}catch(_){throw o4.error(_),_.hdb_code?_.message:_}}a(m4,"convertDelete")});var ZC=g((d_e,jC)=>{"use strict";var p4=Fi(),{hdb_errors:zC}=ne(),{getDatabases:JC}=(Ae(),se(Fe));jC.exports={checkSchemaExists:XC,checkSchemaTableExists:S4,schema_describe:p4};async function XC(e){if(!JC()[e])return zC.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(XC,"checkSchemaExists");async function S4(e,t){let r=await XC(e);if(r)return r;if(!JC()[e][t])return zC.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(S4,"checkSchemaTableExists")});var Zc=g((E_e,T4)=>{T4.exports={name:"harperdb",version:"4.3.0-beta.8",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.6","nats-server":"2.10.10"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/abort-controller":"3.374.0","@aws-sdk/client-s3":"3.477.0","@aws-sdk/lib-storage":"3.477.0","@endo/static-module-record":"^1.0.0","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.11.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.1",fastify:"~4.25.1","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.10.0-beta.4",lodash:"4.17.21",mathjs:"11.11.2",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.19.0",needle:"3.2.0","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.3.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.0.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.20","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.15.1",yaml:"2.3.4"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.2",chai:"4.3.7","chai-integer":"0.1.0",esbuild:"^0.19.1",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.22.11","newman-reporter-teamcity":"0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.3.3","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var su={};$e(su,{addAnalyticsListener:()=>nu,recordAction:()=>xr,recordActionBinary:()=>sn,setAnalyticsEnabled:()=>g4});function g4(e){cD=e}function xr(e,t,r,n,s){if(!cD)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=od.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},od.set(i,o)}sd||R4()}function sn(e,t,r,n,s){xr(!!e,t,r,n,s)}function nu(e){_D.push(e)}function R4(){sd=performance.now(),setTimeout(async()=>{let e=performance.now()-sd;sd=0;let t=[],r={time:Date.now(),period:e,threadId:eo.threadId,metrics:t};for(let[s,i]of od){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of dD){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await fD()}let n=process.memoryUsage();t.push({metric:"memory",threadId:eo.threadId,byThread:!0,...n});for(let s of _D)s(t);od=new Map,eo.parentPort?eo.parentPort.postMessage({type:lD,report:r}):mD({report:r})},uD).unref()}async function A4(e,t=6e4){let r=iS(),n=ED(),s=new Promise(p=>{let S=performance.now();setImmediate(()=>{let T=performance.now();T-S>5e3&&(0,eu.warn)("Unusually high event queue latency on the main thread of "+Math.round(T-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let T=performance.now();T-S>5e3&&(0,eu.warn)("Unusually high task queue latency on the main thread of "+Math.round(T-S)+"ms"),p(T-S)})}),i;for(let p of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(p.value?.time){i=p.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,u=new Map,_=[],l;for(let{key:p,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(p>o+t)break}else o=p;l=p;let{metrics:T,threadId:b}=S;for(let R of T||[]){let{path:L,method:H,type:P,metric:k,count:B,total:J,distribution:Q,threads:X,...Te}=R;B||(B=1);let ce=k+(L?"-"+L:"");H!==void 0&&(ce+="-"+H),P!==void 0&&(ce+="-"+P);let de=c.get(ce);if(de){if(de.threads){let Be=de.threads[b];if(Be)de=Be;else{de.threads[b]=Object.assign({},Te);continue}}de.count||(de.count=1);let Le=de.count;for(let Be in Te){let Ct=Te[Be];typeof Ct=="number"&&(de[Be]=(de[Be]*Le+Ct*B)/(Le+B))}de.count+=B,J>=0&&(de.total+=J,de.ratio=de.total/de.count)}else de=Object.assign({period:t},R),delete de.distribution,c.set(ce,de),de.byThread&&(de.threads=[],de.threads[b]=Object.assign({},Te),_.push(de));if(Q){Q=Q.map(Be=>typeof Be=="number"?{value:Be,count:1}:Be);let Le=u.get(ce);Le?Le.push(...Q):u.set(ce,Q)}}await fD()}for(let p of _){let{path:S,method:T,type:b,metric:R,count:L,total:H,distribution:P,threads:k,...B}=p;k=k.filter(J=>J);for(let J in B){if(typeof p[J]!="number")continue;let Q=0;for(let X of k){let Te=X[J];typeof Te=="number"&&(Q+=Te)}p[J]=Q}p.count=k.length,delete p.threads,delete p.byThread}for(let[p,S]of u){let T=c.get(p);S.sort((Be,Ct)=>Be.value>Ct.value?1:-1);let b=T.count-1,R=[],L=0,H=0,P;for(let Be of dD){let Ct=b*Be;for(;L<Ct;)P=S[H++],L+=P.count,H===1&&L--;let Ll=S[H>1?H-2:0];P||(P=S[0]),R.push(P.value-(P.value-Ll.value)*(L-Ct)/P.count)}let[k,B,J,Q,X,Te,ce,de,Le]=R;Object.assign(T,{p1:k,p10:B,p25:J,median:Q,p75:X,p90:Te,p95:ce,p99:de,p999:Le})}let d;for(let[p,S]of c)S.id=(0,id.getNextMonotonicTime)(),S.time=l,n.primaryStore.put(S.id,S,{append:!0}).then(T=>{T||n.primaryStore.put(S.id,S)}),d=!0;let f=Date.now(),{idle:E,active:h}=performance.eventLoopUtilization();if(d||h*10>E){let p=(0,id.getNextMonotonicTime)(),S={id:p,metric:"main-thread-utilization",idle:E-eD,active:h-tD,taskQueueLatency:await s,time:f,...process.memoryUsage()};n.primaryStore.put(p,S,{append:!0}).then(T=>{T||n.primaryStore.put(p,S)})}eD=E,tD=h}async function rD(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function iS(){return nD||(nD=at({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function ED(){return sD||(sD=at({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function y4(){hD=!0;let e=(0,ru.get)(sS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await A4(uD,e),await rD(iS(),O4),await rD(ED(),b4)},Math.min(e/2,2147483647)).unref()}function mD(e,t){let r=e.report;r.threadId=t?.threadId||eo.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(iD+=n.mean*n.count);r.totalBytesProcessed=iD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(oD.get(t))}),oD.set(t,t.performance.eventLoopUtilization())),r.id=(0,id.getNextMonotonicTime)(),iS().primaryStore.put(r.id,r),hD||y4(),N4&&(pD=w4(r))}async function w4(e){if(await pD,!si){let r=(0,tu.dirname)((0,eu.getLogFilePath)());try{si=await(0,nS.open)((0,tu.join)(r,"analytics.log"),"r+")}catch{si=await(0,nS.open)((0,tu.join)(r,"analytics.log"),"w+")}}let t=(await si.stat()).size;if(t>I4){let r=Buffer.alloc(t);await si.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await si.write(r,{position:0}),await si.truncate(r.length),t=r.length}await si.write(JSON.stringify(e)+`
8
- `,t)}var eo,aD,eu,tu,nS,id,ru,sS,od,cD,sd,uD,lD,_D,dD,eD,tD,fD,O4,b4,nD,sD,hD,iD,oD,N4,pD,si,I4,bs=Re(()=>{eo=require("worker_threads"),aD=x(et());Ae();eu=x(K()),tu=require("path"),nS=require("fs/promises"),id=x(Dr()),ru=x(re()),sS=x(U());ir();(0,ru.initSync)();od=new Map,cD=(0,ru.get)(sS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(g4,"setAnalyticsEnabled");a(xr,"recordAction");Ze.recordAnalytics=xr;a(sn,"recordActionBinary");sd=0,uD=1e3,lD="analytics-report",_D=[];a(nu,"addAnalyticsListener");dD=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(R4,"sendAnalytics");a(A4,"aggregation");eD=0,tD=0,fD=a(()=>new Promise(setImmediate),"rest");a(rD,"cleanup");O4=36e5,b4=31536e6;a(iS,"getRawAnalyticsTable");a(ED,"getAnalyticsTable");(0,aD.setChildListenerByType)(lD,mD);a(y4,"startScheduledTasks");iD=0,oD=new Map,N4=!1;a(mD,"recordAnalytics");I4=1e6;a(w4,"logAnalytics")});var _S=g((N_e,ID)=>{"use strict";var{decode:C4}=require("msgpackr"),{isMainThread:b_e,parentPort:D4,threadId:y_e}=require("worker_threads"),iu=bt(),ra=rt(),cS=U(),zt=K(),aS=re(),TD=U(),{onMessageByType:L4}=et(),gD=Ts(),{recordAction:M4,recordActionBinary:U4}=(bs(),se(su)),{publishToStream:P4}=iu,{ConsumerEvents:v4}=require("nats"),B4=Ur(),{promisify:H4}=require("util"),RD=H4(setTimeout),ud=1e4,ld,cd,x4,G4,AD,ou=new Map,na=new Map;ID.exports={initialize:uS,ingestConsumer:lS,setSubscription:F4,setIgnoreOrigin:V4,getDatabaseSubscriptions:k4,updateConsumer:OD};async function uS(){L4(cS.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await OD(n)}),AD=!0,zt.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await iu.getNATSReferences();ld=e,cd=e.info.server_name,x4=t,G4=r}a(uS,"initialize");async function OD(e){if(e.status==="start"){let{js:t,jsm:r}=await bD(e.node_domain_name);lS(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=ou.get(e.stream_name+e.node_domain_name);t&&(zt.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),ou.set(e.stream_name+e.node_domain_name,"close")),na.get(e.node_domain_name)==="failed"&&na.set(e.node_domain_name,"close")}}a(OD,"updateConsumer");var _d=new Map;function F4(e,t,r){let n=_d.get(e);n||_d.set(e,n=new Map),n.set(t,r),AD||uS().then(q4)}a(F4,"setSubscription");async function q4(){let e=await B4.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+ra.SERVER_SUFFIX.LEAF,{js:n,jsm:s}=await bD(r);if(s){for(let i of t.subscriptions)if(i.subscribe===!0){let{schema:o,table:c}=i,u=gD.createNatsTableStreamName(o,c);lS(u,n,s,r)}}}}a(q4,"accessConsumers");async function bD(e){let t,r,n=1;for(;!r;)try{t=await ld.jetstream({domain:e,timeout:6e4}),r=await ld.jetstreamManager({domain:e,timeout:6e4})}catch(s){if(na.get(e)==="close")break;na.set(e,"failed"),n%10===1&&zt.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<ud?n++*100:ud;await RD(i)}return{js:t,jsm:r}}a(bD,"connectToRemoteJS");function k4(){return _d}a(k4,"getDatabaseSubscriptions");var yD;function V4(e){yD=e}a(V4,"setIgnoreOrigin");var ND=100,SD=new Array(ND),ad=0;async function lS(e,t,r,n){let{connection:s}=await iu.getNATSReferences();ld=s,cd=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,cd),zt.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(na.get(n)==="close")break;o%10===1&&zt.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(zt.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await iu.createConsumer(r,e,cd,new Date(Date.now()).toISOString()));let l=o++*100<ud?o++*100:ud;await RD(l)}let c=!1,u;for(D4?.on("message",async _=>{let{type:l}=_;l===TD.ITC_EVENT_TYPES.SHUTDOWN&&(c=!0,u&&u.close?.()&&u.close())});!c;){if(ou.get(e+n)==="close"||na.get(n)==="close"){ou.delete(e+n),c=!0;continue}u=await i.consume({max_messages:aS.get(cS.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100}),ou.set(e+n,u);let _=!1;(async()=>{for await(let l of await u.status())if(l.type===v4.HeartbeatsMissed){let d=l.data;zt.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${u.consumer.stream}`),d===2&&(zt.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${u.consumer.stream}`),u.stop(),_=!0)}})();try{for await(let l of u)await SD[ad],SD[ad]=$4(l).catch(d=>{zt.error(d)}),++ad>=ND&&(ad=0)}catch(l){l.message==="consumer deleted"?(zt.notify("Nats consumer deleted, closing messages for node:",n,"stream:",u.consumer.stream),await u.close(),c=!0):zt.error("Error consuming clustering ingest, restarting consumer",l)}iu.clearClientCache(),!c&&_&&await uS()}}a(lS,"ingestConsumer");async function $4(e){let t=C4(e.data);M4(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),zt.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=aS.get(cS.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(ra.MSG_HEADERS.TRANSACTED_NODES)&&r.values(ra.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(ra.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!yD),U4(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(ra.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;zt.trace("processing message:",o,c,_,(l?"records: "+l.map(L=>L?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),zt.trace(`messageProcessor nats msg id: ${e.headers.get(ra.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let p=new Promise(L=>h=L),{timestamp:S,user:T,node_name:b}=f||{},R=_d.get(c)?.get(_);if(!R)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,R.send(t);else if(l.length===1&&!u)R.send({type:oS(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:S,table:_,onCommit:h,user:T,nodeName:b});else{let L=l.map((H,P)=>({type:oS(o),value:H,expiresAt:E,id:d?.[P],table:_}));for(;u;)L.push({type:oS(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;R.send({type:"transaction",writes:L,table:_,timestamp:S,onCommit:h,user:T,nodeName:b})}aS.get(TD.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&P4(e.subject.split(".").slice(0,-1).join("."),gD.createNatsTableStreamName(c,_),e.headers,e.data),await p}catch(o){zt.error(o)}e.ack()}a($4,"messageProcessor");function oS(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(oS,"convertOperation")});var bt=g((U_e,$D)=>{"use strict";var Mt=re();Mt.initSync();var Y4=require("fs-extra"),K4=require("semver"),uu=require("path"),{monotonicFactory:W4}=require("ulidx"),CD=W4(),Q4=require("util"),DD=require("child_process"),z4=Q4.promisify(DD.exec),J4=DD.spawn,qt=rt(),Ce=U(),dd=z(),Un=K(),fd=Ts(),X4=nd(),au=Cr(),{broadcast:j4,onMessageByType:Z4,getWorkerIndex:e3}=et(),{isMainThread:LD}=require("worker_threads"),{Encoder:t3,decode:hS}=require("msgpackr"),MD=new t3,{isEmpty:so}=dd,UD=nn(),w_e=48*36e11;LD&&Z4(Ce.ITC_EVENT_TYPES.RESTART,()=>{_r=void 0,no=void 0});var{connect:r3,StorageType:n3,RetentionPolicy:s3,AckPolicy:mS,DeliverPolicy:pS,DiscardPolicy:i3,NatsConnection:C_e,JetStreamManager:D_e,JetStreamClient:L_e,StringCodec:M_e,JSONCodec:o3,createInbox:SS,headers:a3,ErrorCode:wD}=require("nats"),{PACKAGE_ROOT:c3}=U(),u3=Zc(),{recordAction:l3}=(bs(),se(su)),PD=o3(),_3="clustering",d3=u3.engines[qt.NATS_SERVER_NAME],f3=uu.join(c3,"dependencies"),ES=uu.join(f3,`${process.platform}-${process.arch}`,qt.NATS_BINARY_NAME),dS,fS,cu,to,ro;$D.exports={runCommand:vD,checkNATSServerInstalled:E3,createConnection:TS,getConnection:Ed,getJetStreamManager:lu,getJetStream:HD,getNATSReferences:Pn,getServerList:m3,createLocalStream:gS,listStreams:xD,deleteLocalStream:p3,getServerConfig:_u,listRemoteStreams:S3,viewStream:T3,viewStreamIterator:g3,publishToStream:R3,request:b3,reloadNATS:RS,reloadNATSHub:y3,reloadNATSLeaf:N3,extractServerName:O3,requestErrorHandler:I3,createLocalTableStream:kD,createTableStreams:D3,purgeTableStream:VD,purgeSchemaTableStreams:L3,getStreamInfo:M3,updateLocalStreams:P3,closeConnection:h3,getJsmServerName:hd,addNatsMsgHeader:GD,clearClientCache:BD,updateRemoteConsumer:w3,createConsumer:FD,updateConsumerIterator:C3};async function vD(e,t=void 0){let{stdout:r,stderr:n}=await z4(e,{cwd:t});if(n)throw new Error(n.replace(`
7
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw At.error(i),new Error(`Error reading HarperDB config file at ${r}`)}nV(n,r),yh(n);let s=n.toJSON();if(zk.config=s,Ot=Bo(s),Ot.logging_rotation_rotate)for(let i in qO)Ot[i]&&At.error(`Config ${qO[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);At.trace(Xk)}}a(bh,"initConfig");function nV(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Rn.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Rn.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Rn.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),n&&(At.trace("Updating config file with missing config params"),or.writeFileSync(t,String(e)))}a(nV,"checkForUpdatedConfig");function yh(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t?.http?.threads&&(t.threads=t?.http?.threads);let r=Vk(t);if(r.error)throw Kl.CONFIG_VALIDATION(r.error.message);typeof r.value.threads=="object"?e.setIn(["threads","count"],r.value.threads.count):e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],r.value?.operationsApi?.network?.domainSocket)}a(yh,"validateConfig");function sV(e,t){Ot===void 0&&(Ot={});let r=An[e.toLowerCase()];if(r===void 0){At.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ot[r.toLowerCase()]=t}a(sV,"updateConfigObject");function KO(e,t,r=void 0,n=!1,s=!1,i=!1){Ot===void 0&&bh();let o=YO(An.hdb_root),c=Rn.join(o,wr.HDB_CONFIG_FILE),u=Qs(c),_;if(r===void 0&&e.toLowerCase()===Ir.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=An[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=Oh(f,t);u.setIn([...E],h)}else for(let f in r){let E=An[f.toLowerCase()];if(E===Ir.HTTP_SECUREPORT&&r[f]===Ot[Ir.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===Ir.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===Ot[Ir.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===Ir.DATABASES){_=r[f];continue}if(E?.startsWith("threads_")){let h=u.getIn(["threads"]);h>=0&&(u.deleteIn(["threads"]),u.setIn(["threads","count"],h))}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=wr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=Oh(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof u.getIn(h.slice(0,-1))=="boolean"&&u.deleteIn(h.slice(0,-1)),u.setIn([...h],S)}catch(T){At.error(T)}}}_&&$O(u,_),yh(u);let l=u.getIn(["rootPath"]),d=Rn.join(l,wr.HDB_CONFIG_FILE);n===!0&&iV(c,l),or.writeFileSync(d,String(u)),s&&(Ot=Bo(u.toJSON())),At.trace(`Config parameter: ${e} updated with value: ${t}`)}a(KO,"updateConfigValue");function iV(e,t){try{let r=Rn.join(t,"backup",`${wr.HDB_CONFIG_FILE}.bak`);or.copySync(e,r),At.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){At.error(jk),At.error(r)}}a(iV,"backupConfigFile");var oV=["databases"];function Bo(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),Ql=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])&&!oV.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!Ir[u.toUpperCase()]&&An[u]&&(s[An[u].toLowerCase()]=o[c]),s[u]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Bo,"flattenConfig");function Oh(e,t){if(e===Ir.CLUSTERING_NODENAME||e===Ir.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(Yk(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Dt.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 Dt.autoCast(t)}a(Oh,"castConfigValue");function aV(){let e=Dt.getPropsFilePath(),t=Mi(e);return Qs(t).toJSON()}a(aV,"getConfiguration");async function cV(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return KO(void 0,void 0,s,!0),eV}catch(i){throw typeof i=="string"||i instanceof String?Wk(i,i,Qk.BAD_REQUEST,void 0,void 0,!0):i}}a(cV,"setConfiguration");function Nh(){let e=Dt.getPropsFilePath();try{or.accessSync(e,or.constants.F_OK|or.constants.R_OK)}catch(n){if(!Dt.noBootFile())throw At.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Mi(e);return Qs(t).toJSON()}a(Nh,"readConfigFile");function Qs(e){return $k.parseDocument(or.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Qs,"parseYamlDoc");function uV(){let e=Nh(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Dt.isEmptyOrZeroLength(t)?[]:t;let r=FO(t);if(r)throw Kl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Dt.isEmptyOrZeroLength(n)?[]:n;let s=FO(n);if(s)throw Kl.CONFIG_VALIDATION(s.message);if(!Dt.isEmptyOrZeroLength(n)&&!Dt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Dt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Kl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(uV,"getClusteringRoutes");function WO(e){let t=kO(e);Ot={};for(let r in An){let n=t.get(r.toUpperCase());if(Dt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=An[r].toLowerCase();s===Ir.LOGGING_ROOT?Ot[s]=Rn.dirname(n):Ot[s]=n}return Ot}a(WO,"initOldConfig");function lV(e){let t=Nh();return Kk.get(t,e.replaceAll("_","."))}a(lV,"getConfigFromFile");async function _V(e,t){let r=Qs(Mi());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await or.writeFile(Mi(),String(r))}a(_V,"addConfig");function dV(e){let t=Mi(Dt.getPropsFilePath()),r=Qs(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Rn.join(n,wr.HDB_CONFIG_FILE);or.writeFileSync(s,String(r))}a(dV,"deleteConfigFromFile");function fV(){return Ql||(bh(),Ql)}a(fV,"getConfigObj")});var re=g((moe,jO)=>{"use strict";var Ih=require("fs-extra"),Ui=require("path"),zO=require("os"),EV=require("properties-reader"),lc=K(),uc=z(),ue=U(),zl=Cr(),hV="Error initializing environment manager",Jl="BOOT_PROPS_FILE_PATH",JO=!1,mV={[ue.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},ms={};jO.exports={BOOT_PROPS_FILE_PATH:Jl,getHdbBasePath:pV,setHdbBasePath:SV,get:XO,initSync:gV,setProperty:Me,initTestEnvironment:RV};function pV(){return ms[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(pV,"getHdbBasePath");function SV(e){ms[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(SV,"setHdbBasePath");function XO(e){let t=zl.getConfigValue(e);return t===void 0?ms[e]:t}a(XO,"get");function Me(e,t){mV[e]&&(ms[e]=t),zl.updateConfigObject(e,t)}a(Me,"setProperty");function TV(){let e;try{e=uc.getPropsFilePath(),Ih.accessSync(e,Ih.constants.F_OK|Ih.constants.R_OK),JO=!0;let t=EV(e);return ms[ue.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ue.HDB_SETTINGS_NAMES.INSTALL_USER),ms[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ms[Jl]=e,!0}catch{return lc.trace(`Environment manager found no properties file at ${e}`),!1}}a(TV,"doesPropFileExist");function gV(e=!1){try{(JO||TV()||uc.noBootFile())&&(zl.initConfig(e),ms[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=zl.getConfigValue(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){lc.error(hV),lc.error(t),console.error(t),process.exit(1)}}a(gV,"initSync");function RV(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Ui.join(__dirname,"../../","unitTests");ms[Jl]=Ui.join(u,"hdb_boot_properties.file"),Me(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Ui.join(u,"settings.test")),Me(ue.HDB_SETTINGS_NAMES.INSTALL_USER,zO.userInfo()?zO.userInfo().username:void 0),Me(ue.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Me(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Ui.join(u,"envDir","log")),Me(ue.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Me(ue.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Me(ue.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Me(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Ui.join(u,"envDir")),Me(ue.CONFIG_PARAMS.STORAGE_PATH,Ui.join(u,"envDir")),s&&(Me(ue.CONFIG_PARAMS.HTTP_SECUREPORT,XO(ue.CONFIG_PARAMS.HTTP_PORT)),Me(ue.CONFIG_PARAMS.HTTP_PORT,null)),Me(ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Me(ue.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Me(ue.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,uc.isEmpty(i)?!1:i),Me(ue.CONFIG_PARAMS.HTTP_CORS,uc.isEmpty(i)?!1:i),Me(ue.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Me(ue.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Me(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Me(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Me(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Ui.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Me(ue.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,uc.isEmpty(c)?!1:c),o&&(Me("CORS_ACCESSLIST",o),Me(ue.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Me(ue.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Me(ue.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Me(ue.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Me(ue.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Me(ue.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Me(ue.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Jl}. Please check your boot props and settings files`;lc.fatal(r),lc.error(t)}}a(RV,"initTestEnvironment")});var Qe=g((Soe,ib)=>{"use strict";var hc=U(),AV=z(),ar=re(),mc=require("path"),OV=require("minimist"),ZO=require("fs-extra"),eb=require("lodash");ar.initSync();var{CONFIG_PARAMS:zs,DATABASES_PARAM_CONFIG:_c,SYSTEM_SCHEMA_NAME:Xl}=hc,dc,fc,Ec;function tb(){if(dc!==void 0)return dc;if(ar.getHdbBasePath()!==void 0)return dc=ar.get(zs.STORAGE_PATH)||mc.join(ar.getHdbBasePath(),hc.DATABASES_DIR_NAME),dc}a(tb,"getBaseSchemaPath");function rb(){if(fc!==void 0)return fc;if(ar.getHdbBasePath()!==void 0)return fc=sb(Xl),fc}a(rb,"getSystemSchemaPath");function nb(){if(Ec!==void 0)return Ec;if(ar.getHdbBasePath()!==void 0)return Ec=ar.get(hc.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||mc.join(ar.getHdbBasePath(),hc.TRANSACTIONS_DIR_NAME),Ec}a(nb,"getTransactionAuditStoreBasePath");function bV(e,t){let r=ar.get(zs.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||mc.join(nb(),e.toString())}a(bV,"getTransactionAuditStorePath");function sb(e,t){e=e.toString(),t=t&&t.toString();let r=ar.get(hc.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||mc.join(tb(),e)}a(sb,"getSchemaPath");function yV(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,OV(process.argv));let n=r[zs.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!AV.isObject(n))throw o;i=n}for(let o of i){let c=o[Xl];if(!c)continue;let u=ar.get(zs.DATABASES);u=u??{};let _=c?.tables?.[t]?.[_c.PATH];if(_)return eb.set(u,[Xl,_c.TABLES,t,_c.PATH],_),ar.setProperty(zs.DATABASES,u),_;let l=c?.[_c.PATH];if(l)return eb.set(u,[Xl,_c.PATH],l),ar.setProperty(zs.DATABASES,u),l}}let s=r[zs.STORAGE_PATH.toUpperCase()];if(s){if(!ZO.pathExistsSync(s))throw new Error(s+" does not exist");let i=mc.join(s,e);return ZO.mkdirsSync(i),ar.setProperty(zs.STORAGE_PATH,s),i}return rb()}a(yV,"initSystemSchemaPaths");function NV(){dc=void 0,fc=void 0,Ec=void 0}a(NV,"resetPaths");ib.exports={getBaseSchemaPath:tb,getSystemSchemaPath:rb,getTransactionAuditStorePath:bV,getTransactionAuditStoreBasePath:nb,getSchemaPath:sb,initSystemSchemaPaths:yV,resetPaths:NV}});var Dr=g((Aoe,lb)=>{"use strict";var IV=Nr().LMDB_ERRORS_ENUM,goe=require("lmdb"),wV=_t(),Roe=require("buffer").Buffer,{OVERFLOW_MARKER:ob,MAX_SEARCH_KEY_LENGTH:jl}=wV,ab=["number","string","symbol","boolean","bigint"];function CV(e){if(e=e?.primaryStore||e,!e)throw new Error(IV.ENV_REQUIRED)}a(CV,"validateEnv");function DV(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(DV,"stringifyData");function LV(e){return e instanceof Date?e.valueOf():e}a(LV,"convertKeyValueToWrite");function MV(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(ab.includes(typeof e))return e.length>jl?[e.slice(0,jl)+ob]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(ab.includes(typeof i))i.length>jl?r.push(i.slice(0,jl)+ob):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(MV,"getIndexedValues");var Zl=0,cb=0;function ub(){cb=Date.now()-performance.now()}a(ub,"adjustStartTime");ub();var UV=6e4;setInterval(ub,UV).unref();function PV(){let e=performance.now()+cb;return e>Zl?(Zl=e,e):(Zl+=488e-6,Zl)}a(PV,"getNextMonotonicTime");lb.exports={validateEnv:CV,stringifyData:DV,convertKeyValueToWrite:LV,getNextMonotonicTime:PV,getIndexedValues:MV}});var _b,On,wh,pc=Re(()=>{_b=require("events"),On=class extends _b.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new wh;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(){return this.queue?.shift()}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)}},wh=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 Lh={};$e(Lh,{loadGQLSchema:()=>HV,start:()=>Dh,startOnMainThread:()=>BV});function Dh({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),s)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let H=function(P){if(P.kind==="NonNullType"){let J=H(P.type);return J.nullable=!1,J}if(P.kind==="ListType")return{type:"array",elements:H(P.type)};let B={type:P.name?.value};return Object.defineProperty(B,"location",{value:P.loc.startToken}),B};a(H,"getProperty");let T=S.name.value,b=[],R={table:null,database:null,properties:b};f.set(T,R);for(let P of S.directives){if(P.name.value==="table"){for(let k of P.arguments)R[k.name.value]=k.value.value;R.schema&&(R.database=R.schema),R.table||(R.table=T),R.audit&&(R.audit=R.audit!=="false"),R.attributes=R.properties,E.push(R)}if(P.name.value==="sealed"&&(R.sealed=!0),P.name.value==="export"){R.export=!0;for(let k of P.arguments)k.name.value==="name"&&(R.export={name:k.value.value})}}let L=!1;for(let P of S.fields){let k=H(P.type);k.name=P.name.value,b.push(k);for(let B of P.directives)if(B.name.value==="primaryKey")L?console.warn("Can not define two attributes as a primary key"):(k.isPrimaryKey=!0,L=!0);else if(B.name.value==="indexed")k.indexed=!0;else if(B.name.value==="relationship"){let J={};for(let Q of B.arguments)J[Q.name.value]=Q.value.value;k.relationship=J}else if(B.name.value==="createdTime")k.assignCreatedTime=!0;else if(B.name.value==="updatedTime")k.assignUpdatedTime=!0;else if(B.name.value==="expiresAt")k.expiresAt=!0;else if(B.name.value==="allow"){let J=k.authorizedRoles=[];for(let Q of B.arguments)Q.name.value==="role"&&J.push(Q.value.value)}}R.type=T,T==="Query"&&(h=R)}function p(S){let T=f.get(S.type);T?(Object.defineProperty(S,"properties",{value:T.properties}),Object.defineProperty(S,"definition",{value:T})):S.type==="array"?p(S.elements):vV.includes(S.type)||(0,db.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(p,"connectPropertyType");for(let S of f.values())for(let T of S.properties)p(T);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,Ch.dirname)(n),S.tableClass):i.set((0,Ch.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var Ch,db,vV,BV,HV,fb=Re(()=>{Ch=require("path");Ae();db=x(et()),vV=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(Dh,"start");BV=Dh,HV=Dh({ensureTable:at}).handleFile});async function e_(e){return xV?(Sc||(Sc=GV(qV)),(await(await Sc).import(e)).namespace):import(e)}async function GV(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Sc=new Compartment({console,Math,Date,fetch:FV,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,hb.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Gt,tables:Lr,databases:tt})}};let n=await(0,Eb.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Sc}function FV(e,t){let r=typeof e=="string"||e.url;if(new URL(r).protocol!="https")throw new Error("Only https is allowed in fetch");return fetch(e,t)}function qV(){return{Resource:Gt,tables:Lr}}var Eb,hb,xV,Sc,Mh=Re(()=>{bn();Ae();Eb=require("fs/promises"),hb=require("path"),xV=!1;a(e_,"secureImport");a(GV,"getCompartment");a(FV,"secureOnlyFetch");a(qV,"getGlobalVars")});var Ph={};$e(Ph,{handleFile:()=>kV});async function kV(e,t,r,n){let s=new Map,i=(0,mb.pathToFileURL)(r).toString(),o=await e_(i);u(o.default)&&n.set((0,Uh.dirname)(t),o.default),c(o,(0,Uh.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?n.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),s}var mb,Uh,pb=Re(()=>{mb=require("url");Mh();Uh=require("path");a(kV,"handleFile")});var Bh={};$e(Bh,{start:()=>VV});function VV({resources:e}){e.set("login",vh),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var vh,Sb=Re(()=>{bn();a(VV,"start");vh=class extends Gt{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var yb={};$e(yb,{parse:()=>xh,streamAsJSON:()=>Tc,stringify:()=>Pi});function Tc(e){return new Hh({value:e})}function Tb(e){return console.error(e),JSON.stringify(e.toString())}function gb(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Pi(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===Ob)return bb(e);if(t.resolution)return t.resolution.then(()=>Pi(e));throw t}}function bb(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+=bb(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Pi(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function xh(e){return KV.test(e)?$V.parse(e):JSON.parse(e)}var Rb,Ab,$V,YV,Ob,Hh,KV,Gh=Re(()=>{Rb=require("stream"),Ab=x(require("json-bigint-fixes")),$V=(0,Ab.default)({useNativeBigInt:!0}),YV=1e4,Ob={};BigInt.prototype.toJSON=function(){throw Ob};a(Tc,"streamAsJSON");Hh=class extends Rb.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),Tb)}catch(s){yield Tb(s)}else yield Pi(t)}else yield Pi(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);gb(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>YV?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 gb(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(Tb,"handleError");a(gb,"when");a(Pi,"stringify");a(bb,"jsStringify");KV=/-?\d{16,}/;a(xh,"parse")});var xb=g((xoe,Hb)=>{"use strict";var Fh=require("recursive-iterator"),WV=require("alasql"),qh=require("clone"),Nb=z(),{handleHDBError:Ib,hdb_errors:QV}=ne(),{HDB_ERROR_MSGS:wb,HTTP_STATUS_CODES:Cb}=QV,{getDatabases:zV}=(Ae(),se(Fe)),JV=["DISTINCT_ARRAY"],Db=Symbol("validateTables"),kh=Symbol("validateTable"),Hoe=Symbol("getAllColumns"),Lb=Symbol("validateAllColumns"),t_=Symbol("findColumn"),Mb=Symbol("validateOrderBy"),gc=Symbol("validateSegment"),Vh=Symbol("validateColumn"),Ub=Symbol("setColumnsForTable"),Pb=Symbol("checkColumnsForAsterisk"),vb=Symbol("validateGroupBy"),Bb=Symbol("hasColumns"),$h=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Db](),this[Pb](),this[Lb]()}[Db](){if(this[Bb]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[kh](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[kh](t.table)})}}[Bb](){let t=!1,r=new Fh(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[kh](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=zV();if(!r[t.databaseid])throw Ib(new Error,wb.SCHEMA_NOT_FOUND(t.databaseid),Cb.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Ib(new Error,wb.TABLE_NOT_FOUND(t.databaseid,t.tableid),Cb.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=qh(s);i.table=qh(t),this.attributes.push(i)})}[t_](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)}[Pb](){let t=new Fh(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[Ub](r.tableid)}[Ub](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new WV.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Lb](){this[gc](this.statement.columns,!1),this[gc](this.statement.joins,!1),this[gc](this.statement.where,!1),this[vb](this.statement.group,!1),this[gc](this.statement.order,!0)}[gc](t,r){if(!t)return;let n=new Fh(t),s=[];for(let{node:i,path:o}of n)!Nb.isEmpty(i)&&!Nb.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Mb](i):s.push(this[Vh](i)));return s}[vb](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&JV.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=qh(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[t_](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[t_](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`}[Mb](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[Vh](t)}[Vh](t){let r=this[t_](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]}};Hb.exports=$h});var Fb=g((Foe,Gb)=>{"use strict";var Yh=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")}};Gb.exports=Yh});var kb=g((koe,qb)=>{"use strict";var Kh=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};qb.exports=Kh});var Kb={};$e(Kb,{HAS_EXPIRATION:()=>em,LAST_TIMESTAMP_PLACEHOLDER:()=>Oc,LOCAL_TIMESTAMP:()=>XV,METADATA:()=>Rc,NO_TIMESTAMP:()=>Qh,PENDING_LOCAL_TIME:()=>tm,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>Zh,RecordEncoder:()=>Xh,TIMESTAMP_ASSIGN_LAST:()=>ZV,TIMESTAMP_ASSIGN_NEW:()=>$b,TIMESTAMP_ASSIGN_PREVIOUS:()=>Yb,TIMESTAMP_PLACEHOLDER:()=>r_,TIMESTAMP_RECORD_PREVIOUS:()=>zh,fromResource:()=>o_,getUpdateRecord:()=>rm,handleLocalTimeForGets:()=>a_});function t$(){return Ac[0]=Ac[0]^64,jV.getFloat64(0)}function o_(e){jh=!0;try{return e()}finally{jh=!1}}function a_(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),u=c?.value,_=u?.[Rc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[Rc]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let u=c.value,_=u[Rc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){if(this.timerTracked||(this.timerTracked=!0,vi.push(new WeakRef(this))),!jh)try{throw new Error("Read transaction used outside of resource")}catch(u){this.readStack=u.stack}o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<vi.length;u++){let _=vi[u].deref();(!_||_.isDone||_.isCommitted)&&vi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function rm(e,t,r){return function(n,s,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?Ho=i?.localTime?zh|Yb:Qh:Ho=u?i?.localTime?zh|16384:$b|16384:Qh,l>0&&(c|=em),s_=c,Jh=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Ho>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(n,s,h);if(u){let T=_?.user?.username;if(E&&(n_=e.encoder.encode(E)),f&&i?.localTime){let b=i?.localTime,R=r.get(b);if(R){let L=Lt(R).previousLocalTime;return r.put(b,i_(o,t,n,L,T,d,n_),{ifVersion:p}),S}}r.put(Oc,i_(o,t,n,i?.localTime?1:0,T,d,n_),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var Vb,Wh,r_,Oc,Zh,XV,Rc,Ac,jV,Qh,$b,ZV,Yb,zh,em,tm,e$,n_,Ho,s_,Jh,Xh,Yoe,jh,vi,xo=Re(()=>{Vb=require("msgpackr");Bi();Wh=x(K()),r_=new Uint8Array([1,1,1,1,4,64,0,0]),Oc=new Uint8Array([1,1,1,1,1,0,0,0]),Zh=new Uint8Array([1,1,1,1,3,64,0,0]),XV=Symbol("local-timestamp"),Rc=Symbol("metadata"),Ac=new Uint8Array(8),jV=new DataView(Ac.buffer,0,8),Qh=0,$b=0,ZV=1,Yb=3,zh=4,em=16,tm=1,Ho=0,s_=-1,Jh=0,Xh=class extends Vb.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(Ho||s_>=0){let i=0,o=Ho;o&&(i+=8,Ho=0);let c=s_,u=Jh;c>=0&&(i+=2,s_=-1,u&&(i+=8,Jh=0));let _=e$=r.call(this,n,s|2048|i);n_=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(r_[4]=o,r_[5]=o>>8,_.set(r_,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,n,s)}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,u;if(i===2){if(t.copy)t.copy(Ac,0,c),c+=8;else for(let d=0;d<8;d++)Ac[d]=t[c++];u=t$(),i=t[c]}let _;i<32&&(o=i,c+=2,o&em&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,s),s-c);return{localTime:u,value:l,[Rc]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(t$,"getTimestamp");Yoe=Map.prototype.get;a(o_,"fromResource");a(a_,"handleLocalTimeForGets");vi=[];setInterval(()=>{for(let e=0;e<vi.length;e++){let t=vi[e].deref();!t||t.isDone||t.isCommitted?vi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Wh.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Wh.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(rm,"getUpdateRecord")});var c_=g((Woe,Wb)=>{"use strict";var sm=re(),im=U(),{RecordEncoder:r$}=(xo(),se(Kb));sm.initSync();var n$=sm.get(im.CONFIG_PARAMS.STORAGE_COMPRESSION),s$=sm.get(im.CONFIG_PARAMS.STORAGE_CACHING)!==!1,i$=im.UPDATES_PROPERTY,nm=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=n$&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=s$&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:r$},this.alwaysLazyProperty=n=>n===i$)}};Wb.exports=nm});var l_=g((zoe,zb)=>{"use strict";var Go=re(),bc=U();Go.initSync();var o$=Go.get(bc.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Go.get(bc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Go.get(bc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Qb=Go.get(bc.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),a$=Go.get(bc.CONFIG_PARAMS.STORAGE_NOREADAHEAD),u_=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=o$,this.noFSAccess=!0,Qb!==void 0&&(this.overlappingSync=Qb),this.noReadAhead=a$}};zb.exports=u_;u_.MAX_DBS=1e4});var Ye=g((Xoe,iy)=>{"use strict";var am=require("lmdb"),yn=require("fs-extra"),Mr=require("path"),__=Dr(),jb=K(),cr=Nr().LMDB_ERRORS_ENUM,d_=kb(),cm=c_(),Zb=l_(),Js=_t(),Jb=U(),{table:c$,resetDatabases:u$}=(Ae(),se(Fe)),Xb=re(),Nn=Js.INTERNAL_DBIS_NAME,ey=Js.DBI_DEFINITION_NAME,l$="data.mdb",_$="lock.mdb",yc=".mdb",d$="-lock",om=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=tn(t,r),this.key_type=this.dbi[Js.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Js.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new am.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function f_(e,t){if(e===void 0)throw new Error(cr.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(cr.ENV_NAME_REQUIRED)}a(f_,"pathEnvNameValidation");async function um(e,t,r=!0){try{await yn.access(e)}catch(n){throw n.code==="ENOENT"?new Error(cr.INVALID_BASE_PATH):n}try{let n=Mr.join(e,t+yc);return await yn.access(n,yn.constants.R_OK|yn.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await yn.access(Mr.join(e,t,l$),yn.constants.R_OK|yn.constants.F_OK),Mr.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(cr.INVALID_ENVIRONMENT)}else throw new Error(cr.INVALID_ENVIRONMENT);throw n}}a(um,"validateEnvironmentPath");function E_(e,t){if(__.validateEnv(e),t===void 0)throw new Error(cr.DBI_NAME_REQUIRED)}a(E_,"validateEnvDBIName");async function f$(e,t,r=!1,n=!1){f_(e,t);let s=Mr.basename(e);t=t.toString();let i=Xb.get(Jb.CONFIG_PARAMS.DATABASES);i||Xb.setProperty(Jb.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await um(e,t,n),ty(e,t,r)}catch(o){if(o.message===cr.INVALID_ENVIRONMENT){let c=Mr.join(e,t);await yn.mkdirp(n?c:e);let u=new Zb(n?c:c+yc,!1),_=am.open(u);_.dbis=Object.create(null);let l=new cm(!1);_.openDB(Nn,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=lm(e,t,r);return _[Js.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(f$,"createEnvironment");async function E$(e,t,r,n=!0){f_(e,t),t=t.toString();let s=Mr.join(e,t);return c$({table:t,database:Mr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(E$,"copyEnvironment");async function ty(e,t,r=!1){f_(e,t),t=t.toString();let n=lm(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 um(e,t),i=Mr.join(e,t+yc),o=s!=i,c=new Zb(s,o),u=am.open(c);u.dbis=Object.create(null);let _=ny(u);for(let l=0;l<_.length;l++)tn(u,_[l]);return u[Js.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=u,u}a(ty,"openEnvironment");async function h$(e,t,r=!1){f_(e,t),t=t.toString();let n=Mr.join(e,t+yc),s=await um(e,t);if(global.lmdb_map!==void 0){let i=lm(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await ry(o),delete global.lmdb_map[i]}}await yn.remove(s),await yn.remove(s===n?s+d$:Mr.join(Mr.dirname(s),_$))}a(h$,"deleteEnvironment");async function ry(e){__.validateEnv(e);let t=e[Js.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(ry,"closeEnvironment");function lm(e,t,r=!1){let s=`${Mr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(lm,"getCachedEnvironmentName");function m$(e){__.validateEnv(e);let t=Object.create(null),r=tn(e,Nn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Nn)try{t[n]=Object.assign(new d_,s)}catch{jb.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(m$,"listDBIDefinitions");function ny(e){__.validateEnv(e);let t=[],r=tn(e,Nn);for(let{key:n}of r.getRange({start:!1}))n!==Nn&&t.push(n);return t}a(ny,"listDBIs");function p$(e,t){let n=tn(e,Nn).getEntry(t),s=new d_;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{jb.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(p$,"getDBIDefinition");function sy(e,t,r,n=!r){if(E_(e,t),t=t.toString(),t===Nn)throw new Error(cr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return tn(e,t)}catch(s){if(s.message===cr.DBI_DOES_NOT_EXIST){let i=new cm(r,n===!0),o=e.openDB(t,i),c=new d_(r===!0,n);return o[ey]=c,tn(e,Nn).putSync(t,c),e.dbis[t]=o,o}throw s}}a(sy,"createDBI");function tn(e,t){if(E_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Nn?r=p$(e,t):r=new d_,r===void 0)throw new Error(cr.DBI_DOES_NOT_EXIST);let n;try{let s=new cm(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(cr.DBI_DOES_NOT_EXIST):s}return n[ey]=r,e.dbis[t]=n,n}a(tn,"openDBI");function S$(e,t){E_(e,t),t=t.toString();let r=tn(e,t),n=r.getStats();return r[Js.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(S$,"statDBI");async function T$(e,t){try{let r=Mr.join(e,t+yc);return(await yn.stat(r)).size}catch{throw new Error(cr.INVALID_ENVIRONMENT)}}a(T$,"environmentDataSize");function g$(e,t){if(E_(e,t),t=t.toString(),t===Nn)throw new Error(cr.CANNOT_DROP_INTERNAL_DBIS_NAME);tn(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],tn(e,Nn).removeSync(t)}a(g$,"dropDBI");function R$(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{tn(e,i)}catch(o){if(o.message===cr.DBI_DOES_NOT_EXIST)sy(e,i,i!==t,i===t),n=!0;else throw o}}n&&u$()}a(R$,"initializeDBIs");iy.exports={openDBI:tn,openEnvironment:ty,createEnvironment:f$,listDBIs:ny,listDBIDefinitions:m$,createDBI:sy,dropDBI:g$,statDBI:S$,deleteEnvironment:h$,initializeDBIs:R$,TransactionCursor:om,environmentDataSize:T$,copyEnvironment:E$,closeEnvironment:ry}});var ay=g((Zoe,oy)=>{"use strict";var _m=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};oy.exports=_m});var uy=g((tae,cy)=>{"use strict";var dm=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}};cy.exports=dm});var _y=g((nae,ly)=>{"use strict";var fm=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};ly.exports=fm});var Fo=g((cae,Ey)=>{"use strict";var A$=Ye(),O$=ay(),b$=uy(),y$=_y(),Kn=Dr(),Nc=Nr().LMDB_ERRORS_ENUM,N$=_t(),ps=U(),I$=z(),w$=require("uuid"),iae=require("lmdb"),{handleHDBError:C$,hdb_errors:D$}=ne(),{OVERFLOW_MARKER:oae,MAX_SEARCH_KEY_LENGTH:aae}=N$,dy=re();dy.initSync();var h_=dy.get(ps.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Em=ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Hi=ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function L$(e,t,r,n,s=Kn.getNextMonotonicTime()){Sm(e,t,r,n),hm(e,t,r);let i=new O$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u];fy(_,!0,s);let l=M$(e,t,r,_),d=_[t];o.push(l),c.push(d)}return mm(o,c,n,i,s)}a(L$,"insertRecords");function M$(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][ps.FUNC_VAL],n[o]=c)}let u=Kn.getIndexedValues(c),_=e.dbis[o];if(u){h_&&_.prefetch(u.map(l=>({key:l,value:s})),m_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],s)}}h_&&e.dbis[t].prefetch([s],m_),e.dbis[t].put(s,n,n[Hi])})}a(M$,"insertRecord");function U$(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(U$,"removeSkippedRecords");function fy(e,t,r){let n=r>0;(n||!Number.isInteger(e[Hi]))&&(e[Hi]=r||(r=Kn.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[Em]))&&(e[Em]=r||Kn.getNextMonotonicTime()):delete e[Em]}a(fy,"setTimestamps");function hm(e,t,r){r.indexOf(ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),A$.initializeDBIs(e,t,r)}a(hm,"initializeTransaction");async function P$(e,t,r,n,s=Kn.getNextMonotonicTime()){Sm(e,t,r,n),hm(e,t,r);let i=new b$,o=[],c=[],u=[];for(let _=0;_<n.length;_++){let l=n[_],d=l[t],f;try{f=pm(e,t,l,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return mm(c,u,n,i,s,o)}a(P$,"updateRecords");async function v$(e,t,r,n,s=Kn.getNextMonotonicTime()){try{Sm(e,t,r,n)}catch(u){throw C$(u,u.message,D$.HTTP_STATUS_CODES.BAD_REQUEST)}hm(e,t,r);let i=new y$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u],l;I$.isEmpty(_[t])?(l=w$.v4(),_[t]=l):l=_[t];let d=pm(e,t,_,l,i,!1,s);o.push(d),c.push(l)}return mm(o,c,n,i,s)}a(v$,"upsertRecords");async function mm(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Kn.getNextMonotonicTime(),U$(r,i),n}a(mm,"finalizeWrite");function pm(e,t,r,n,s,i=!1,o){let c=e.dbis[t],u=c.getEntry(n),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(fy(r,!l,o),Number.isInteger(r[Hi])&&_[Hi]>r[Hi])return!1;l&&s.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let T=_[h];if(typeof p=="function"){let R=p([[_]]);Array.isArray(R)&&(p=R[0][ps.FUNC_VAL],r[h]=p)}if(p===T)continue;let b=Kn.getIndexedValues(T);if(b){h_&&S.prefetch(b.map(R=>({key:R,value:n})),m_);for(let R=0,L=b.length;R<L;R++)S.remove(b[R],n)}if(b=Kn.getIndexedValues(p),b){h_&&S.prefetch(b.map(R=>({key:R,value:n})),m_);for(let R=0,L=b.length;R<L;R++)S.put(b[R],n)}}let E=Object.assign({},_,r);c.put(n,E,E[Hi])},"do_put");return u?d=c.ifVersion(n,u.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:pm(e,t,r,n,s,i,o))}a(pm,"updateUpsertRecord");function B$(e,t,r){if(Kn.validateEnv(e),t===void 0)throw new Error(Nc.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Nc.WRITE_ATTRIBUTES_REQUIRED):new Error(Nc.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(B$,"validateBasic");function Sm(e,t,r,n){if(B$(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Nc.RECORDS_REQUIRED):new Error(Nc.RECORDS_MUST_BE_ARRAY)}a(Sm,"validateWrite");function m_(){}a(m_,"noop");Ey.exports={insertRecords:L$,updateRecords:P$,upsertRecords:v$}});var xi=g((lae,H$)=>{H$.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},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 Qn=g((_ae,py)=>{"use strict";var my=z(),hy=U(),qo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Wn=require("joi"),Xs={schema_format:{pattern:qo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},x$=Wn.alternatives(Wn.string().min(1).max(Xs.schema_length.maximum).pattern(qo).messages({"string.pattern.base":"{:#label} "+Xs.schema_format.message}),Wn.number(),Wn.array()).required(),G$=Wn.alternatives(Wn.string().min(1).max(Xs.schema_length.maximum).pattern(qo).messages({"string.pattern.base":"{:#label} "+Xs.schema_format.message}),Wn.number()),F$=Wn.alternatives(Wn.string().min(1).max(Xs.schema_length.maximum).pattern(qo).messages({"string.pattern.base":"{:#label} "+Xs.schema_format.message}),Wn.number()).required();function q$(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Xs.schema_length.maximum?`'${e}' maximum of 250 characters`:qo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(q$,"checkValidTable");function k$(e,t){return my.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(k$,"validateSchemaExists");function V$(e,t){let r=t.state.ancestors[0].schema;return my.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(V$,"validateTableExists");function $$(e,t){return e.toLowerCase()===hy.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hy.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a($$,"validateSchemaName");py.exports={common_validators:Xs,schema_regex:qo,hdb_schema_table:x$,validateSchemaExists:k$,validateTableExists:V$,validateSchemaName:$$,checkValidTable:q$,hdb_database:G$,hdb_table:F$}});var p_=g((fae,Sy)=>{var{common_validators:zn}=Qn(),wc=je(),Ic="is required",dt={database:{presence:!1,format:zn.schema_format,length:zn.schema_length},schema:{presence:!1,format:zn.schema_format,length:zn.schema_length},table:{presence:!0,format:zn.schema_format,length:zn.schema_length},attribute:{presence:!0,format:zn.schema_format,length:zn.schema_length},hash_attribute:{presence:!0,format:zn.schema_format,length:zn.schema_length}};function Cc(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(Cc,"makeAttributesStrings");function Y$(e){return e=Cc(e),dt.table.presence=!1,dt.attribute.presence=!1,dt.hash_attribute.presence=!1,wc.validateObject(e,dt)}a(Y$,"schema_object");function K$(e){return e=Cc(e),dt.table.presence={message:Ic},dt.attribute.presence=!1,dt.hash_attribute.presence=!1,wc.validateObject(e,dt)}a(K$,"table_object");function W$(e){return e=Cc(e),dt.table.presence={message:Ic},dt.attribute.presence=!1,wc.validateObject(e,dt)}a(W$,"create_table_object");function Q$(e){return e=Cc(e),dt.table.presence={message:Ic},dt.attribute.presence={message:Ic},dt.hash_attribute.presence=!1,wc.validateObject(e,dt)}a(Q$,"attribute_object");function z$(e){return e=Cc(e),dt.table.presence={message:Ic},dt.attribute.presence=!1,dt.hash_attribute.presence=!1,wc.validateObject(e,dt)}a(z$,"describe_table");function J$(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(J$,"validateTableResidence");Sy.exports={schema_object:Y$,create_table_object:W$,table_object:K$,attribute_object:Q$,describe_table:z$,validateTableResidence:J$}});var gy=g((hae,Ty)=>{"use strict";var X$=require("uuid"),Tm=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||X$.v4(),this.schema_table=`${this.schema}.${this.table}`}};Ty.exports=Tm});var S_=g((pae,Ry)=>{"use strict";var j$=gy(),gm=class extends j${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}};Ry.exports=gm});var Oy=g((Tae,Ay)=>{"use strict";Ay.exports=e1;var Z$="inserted";function e1(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===Z$?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(e1,"returnObject")});var T_=g((Rae,wy)=>{"use strict";var t1=U(),Rm=Ye(),r1=Fo(),{getSystemSchemaPath:n1,getSchemaPath:s1}=Qe(),i1=xi(),o1=p_(),a1=S_(),c1=Oy(),{handleHDBError:by,hdb_errors:Ny}=ne(),yy=z(),{HTTP_STATUS_CODES:u1}=Ny,Am=i1.hdb_attribute,Iy=[];for(let e=0;e<Am.attributes.length;e++)Iy.push(Am.attributes[e].attribute);var l1="inserted";wy.exports=_1;async function _1(e){let t=o1.attribute_object(e);if(t)throw by(new Error,t.message,Ny.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&yy.checkGlobalSchemaTable(e.schema,e.table);if(r)throw by(new Error,r,u1.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=yy.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 a1(e.schema,e.table,e.attribute,e.id);try{let i=await Rm.openEnvironment(s1(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}`);Rm.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Rm.openEnvironment(n1(),t1.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await r1.insertRecords(o,Am.hash_attribute,Iy,[s]);return c1(l1,c,{records:[s]},u)}catch(i){throw i}}a(_1,"lmdbCreateAttribute")});var bm=g((Oae,Dy)=>{var{hdb_table:d1,hdb_database:Cy}=Qn(),f1=je(),Om=require("joi"),E1={undefined:"undefined",null:"null"},h1=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||E1[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"),m1=Om.object({database:Cy,schema:Cy,table:d1,records:Om.array().items(Om.object().custom(h1)).required()});Dy.exports=function(e){return f1.validateBySchema(e,m1)}});var Dc=g((Nae,My)=>{"use strict";var Ss=z(),Ly=K(),yae=bm(),{getDatabases:p1}=(Ae(),se(Fe)),{ClientError:Gi}=ne();My.exports=S1;function S1(e){if(Ss.isEmpty(e))throw new Gi("invalid update parameters defined.");if(Ss.isEmptyOrZeroLength(e.schema))throw new Gi("invalid schema specified.");if(Ss.isEmptyOrZeroLength(e.table))throw new Gi("invalid table specified.");if(!Array.isArray(e.records))throw new Gi("records must be an array");let t=p1()[e.schema]?.[e.table];if(Ss.isEmpty(t))throw new Gi(`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&&Ss.isEmptyOrZeroLength(o[r]))throw Ly.error("a valid hash attribute must be provided with update record:",o),new Gi("a valid hash attribute must be provided with update record, check log for more info");if(!Ss.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Ly.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Gi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Ss.isEmpty(o[r])&&o[r]!==""&&n.has(Ss.autoCast(o[r]))&&(o.skip=!0),n.add(Ss.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(S1,"insertUpdateValidate")});var Lc=g((wae,Uy)=>{"use strict";var T1=U().OPERATIONS_ENUM,ym=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=T1.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Uy.exports=ym});var Mc=g((Lae,vy)=>{"use strict";var Dae=Lc(),g_=U(),Nm=z(),Py=K(),g1=require("uuid"),{handleHDBError:R_,hdb_errors:R1}=ne(),{HDB_ERROR_MSGS:A_,HTTP_STATUS_CODES:O_}=R1;vy.exports=A1;function A1(e,t,r){for(let s=0;s<t.length;s++)O1(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];b1(i,r,e.operation)}}a(A1,"processRows");function O1(e){if(Buffer.byteLength(String(e))>g_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw R_(new Error,A_.ATTR_NAME_LENGTH_ERR(e),O_.BAD_REQUEST,void 0,void 0,!0);if(Nm.isEmptyOrZeroLength(e)||Nm.isEmpty(e.trim()))throw R_(new Error,A_.ATTR_NAME_NULLISH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}a(O1,"validateAttribute");function b1(e,t,r){if(!e.hasOwnProperty(t)||Nm.isEmptyOrZeroLength(e[t])){if(r===g_.OPERATIONS_ENUM.INSERT||r===g_.OPERATIONS_ENUM.UPSERT){e[t]=g1.v4();return}throw Py.error("Update transaction aborted due to record with no hash value:",e),R_(new Error,A_.RECORD_MISSING_HASH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>g_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Py.error(e),R_(new Error,A_.HASH_VAL_LENGTH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}a(b1,"validateHash")});var Hy=g((Uae,By)=>{"use strict";var Im=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};By.exports=Im});var Fy=g((vae,Gy)=>{"use strict";var wm=Ye(),y1=K(),xy=Nr().LMDB_ERRORS_ENUM;Gy.exports=N1;async function N1(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 wm.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==xy.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await wm.closeEnvironment(global.lmdb_map[n]),await wm.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==xy.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){y1.error(t)}}a(N1,"cleanLMDBMap")});var Ts=g((Hae,$y)=>{"use strict";var Uc=require("crypto"),I1=re(),{CONFIG_PARAMS:w1}=U(),ky="aes-256-cbc",C1=32,D1=16,Cm=64,Vy=32,L1=Cm+Vy,qy=new Map;$y.exports={encrypt:M1,decrypt:U1,createNatsTableStreamName:P1};function M1(e){let t=Uc.randomBytes(C1),r=Uc.randomBytes(D1),n=Uc.createCipheriv(ky,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(M1,"encrypt");function U1(e){let t=e.substr(0,Cm),r=e.substr(Cm,Vy),n=e.substr(L1,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Uc.createDecipheriv(ky,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(U1,"decrypt");function P1(e,t){let r=I1.get(w1.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=qy.get(r);return n||(n=Uc.createHash("md5").update(r).digest("hex"),qy.set(r,n)),n}a(P1,"createNatsTableStreamName")});var Fi=g((Fae,Ky)=>{"use strict";var Gae=Ur(),b_=K(),Yy=p_(),v1=Ts(),y_=z(),{handleHDBError:N_,hdb_errors:B1}=ne(),{HDB_ERROR_MSGS:I_,HTTP_STATUS_CODES:Dm}=B1,H1=re();H1.initSync();var{getDatabases:Lm}=(Ae(),se(Fe));Ky.exports={describeAll:x1,describeTable:w_,describeSchema:G1};async function x1(e){try{let t=y_.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=Lm(),i={},o={},c=[],u=e?.exact_count;for(let l in s){i[l]=!0,!t&&!n&&(o[l]=e.hdb_user.role.permission[l].describe);let d=s[l];for(let f in d)try{let E;if(t||n)E=await w_({schema:l,table:f,exact_count:u});else if(r&&r[l].describe&&r[l].tables[f].describe){let h=r[l].tables[f].attribute_permissions;E=await w_({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){b_.error(E)}}let _={};for(let l in c)t||n?(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||n?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return b_.error("Got an error in describeAll"),b_.error(t),N_(new Error,I_.DESCRIBE_ALL_ERR)}}a(x1,"describeAll");async function w_(e,t){y_.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=Yy.describe_table(e);if(i)throw i;let c=Lm()[r];if(!c)throw N_(new Error,I_.SCHEMA_NOT_FOUND(e.schema),Dm.NOT_FOUND);let u=c[n];if(!u)throw N_(new Error,I_.TABLE_NOT_FOUND(e.schema,e.table),Dm.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let l=[];if(s){let f={};s.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l};d.clustering_stream_name=v1.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){b_.warn(`unable to stat table dbi due to ${f}`)}return d}a(w_,"descTable");async function G1(e){y_.transformReq(e);let t=Yy.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=Lm()[n];if(!i)throw N_(new Error,I_.SCHEMA_NOT_FOUND(e.schema),Dm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),y_.isEmpty(u)||u.describe){let _=await w_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(G1,"describeSchema")});var js=g(($ae,Xy)=>{var F1=xi(),{callbackify:Qy,promisify:q1}=require("util"),{getDatabases:zy}=(Ae(),se(Fe));Xy.exports={setSchemaDataToGlobal:Wy,getTableSchema:k1,getSystemSchema:V1,setSchemaDataToGlobalAsync:q1(Wy)};var Jy=Fi(),kae=Qy(Jy.describeAll),Vae=Qy(Jy.describeTable);function Wy(e){global.hdb_schema=zy(),e&&e()}a(Wy,"setSchemaDataToGlobal");function k1(e,t,r){let n=zy()[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(k1,"getTableSchema");function V1(){return F1}a(V1,"getSystemSchema")});var rn=g((Kae,tN)=>{"use strict";var D_=bm(),Ft=z(),$1=require("util"),L_=In(),Y1=js(),jy=K(),{handleHDBError:qi,hdb_errors:K1}=ne(),{HTTP_STATUS_CODES:ki}=K1,W1=$1.promisify(Y1.getTableSchema),Q1="updated",Zy="inserted",eN="upserted";tN.exports={insert:J1,update:X1,upsert:j1,validation:z1,flush:Z1};async function z1(e){if(Ft.isEmpty(e))throw new Error("invalid update parameters defined.");if(Ft.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Ft.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await W1(e.schema,e.table),r=D_(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&&Ft.isEmptyOrZeroLength(c[n]))throw jy.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(!Ft.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw jy.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Ft.isEmpty(c[n])&&c[n]!==""&&s.has(Ft.autoCast(c[n]))&&(c.skip=!0),s.add(Ft.autoCast(c[n]));for(let u in c)i[u]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(z1,"validation");async function J1(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=D_(e);if(t)throw qi(new Error,t.message,ki.BAD_REQUEST);Ft.transformReq(e);let r=Ft.checkSchemaTableExist(e.schema,e.table);if(r)throw qi(new Error,r,ki.BAD_REQUEST);let n=await L_.createRecords(e);return C_(Zy,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(J1,"insertData");async function X1(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=D_(e);if(t)throw qi(new Error,t.message,ki.BAD_REQUEST);Ft.transformReq(e);let r=Ft.checkSchemaTableExist(e.schema,e.table);if(r)throw qi(new Error,r,ki.BAD_REQUEST);let n=await L_.updateRecords(e);return Ft.isEmpty(n.existing_rows)?C_(Q1,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):C_(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(X1,"updateData");async function j1(e){if(e.operation!=="upsert")throw qi(new Error,"invalid operation, must be upsert",ki.INTERNAL_SERVER_ERROR);let t=D_(e);if(t)throw qi(new Error,t.message,ki.BAD_REQUEST);Ft.transformReq(e);let r=Ft.checkSchemaTableExist(e.schema,e.table);if(r)throw qi(new Error,r,ki.BAD_REQUEST);let n=await L_.upsertRecords(e);return C_(eN,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(j1,"upsertData");function C_(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===Zy?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===eN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(C_,"returnObject");function Z1(e){return Ft.transformReq(e),L_.flush(e.schema,e.table)}a(Z1,"flush")});var Um=g((Qae,sN)=>{var eY=je(),Mm=require("joi"),{hdb_table:tY,hdb_database:rN}=Qn(),nN={schema:rN,database:rN,table:tY},rY={date:Mm.date().iso().required()},nY={timestamp:Mm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};sN.exports=function(e,t){let r=t==="timestamp"?{...nN,...nY}:{...nN,...rY},n=Mm.object(r);return eY.validateBySchema(e,n)}});var aN=g((zae,oN)=>{var sY=je(),Pm=require("joi"),{hdb_table:iY,hdb_database:iN}=Qn(),oY=Pm.object({schema:iN,database:iN,table:iY,hash_values:Pm.array().required(),ids:Pm.array()});oN.exports=function(e){return sY.validateBySchema(e,oY)}});var uN=g((Jae,cN)=>{"use strict";var vm=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}},Bm=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}},Hm=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};cN.exports={InsertObject:vm,NoSQLSeachObject:Bm,DeleteResponseObject:Hm}});var Yi=g((jae,EN)=>{"use strict";var _N=Um(),aY=aN(),Vi=z(),lN=require("moment"),dN=K(),{promisify:cY,callbackify:uY}=require("util"),$i=U(),lY=js(),xm=cY(lY.getTableSchema),Gm=In(),{DeleteResponseObject:_Y}=uN(),{handleHDBError:Zs,hdb_errors:dY}=ne(),{HDB_ERROR_MSGS:M_,HTTP_STATUS_CODES:ei}=dY,fY="records successfully deleted",EY=uY(fN);EN.exports={delete:EY,deleteRecord:fN,deleteFilesBefore:hY,deleteAuditLogsBefore:mY};async function hY(e){let t=_N(e,"date");if(t)throw Zs(t,t.message,ei.BAD_REQUEST,void 0,void 0,!0);if(Vi.transformReq(e),!lN(e.date,lN.ISO_8601).isValid())throw Zs(new Error,M_.INVALID_DATE,ei.BAD_REQUEST,$i.LOG_LEVELS.ERROR,M_.INVALID_DATE,!0);let n=Vi.checkSchemaTableExist(e.schema,e.table);if(n)throw Zs(new Error,n,ei.NOT_FOUND,$i.LOG_LEVELS.ERROR,n,!0);let s=await Gm.deleteRecordsBefore(e);if(await xm(e.schema,e.table),dN.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(hY,"deleteFilesBefore");async function mY(e){let t=_N(e,"timestamp");if(t)throw Zs(t,t.message,ei.BAD_REQUEST,void 0,void 0,!0);if(Vi.transformReq(e),isNaN(e.timestamp))throw Zs(new Error,M_.INVALID_VALUE("Timestamp"),ei.BAD_REQUEST,$i.LOG_LEVELS.ERROR,M_.INVALID_VALUE("Timestamp"),!0);let r=Vi.checkSchemaTableExist(e.schema,e.table);if(r)throw Zs(new Error,r,ei.NOT_FOUND,$i.LOG_LEVELS.ERROR,r,!0);let n=await Gm.deleteAuditLogsBefore(e);return await xm(e.schema,e.table),dN.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(mY,"deleteAuditLogsBefore");async function fN(e){e.ids&&(e.hash_values=e.ids);let t=aY(e);if(t)throw Zs(t,t.message,ei.BAD_REQUEST,void 0,void 0,!0);Vi.transformReq(e);let r=Vi.checkSchemaTableExist(e.schema,e.table);if(r)throw Zs(new Error,r,ei.NOT_FOUND,$i.LOG_LEVELS.ERROR,r,!0);try{await xm(e.schema,e.table);let n=await Gm.deleteRecords(e);return Vi.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${fY}`),n}catch(n){if(n.message===$i.SEARCH_NOT_FOUND_MESSAGE){let s=new _Y;return s.message=$i.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(fN,"deleteRecord")});var U_=g((ece,pN)=>{var pY=require("crypto"),hN=9;function SY(e){let t=gY(hN),r=mN(e+t);return t+r}a(SY,"createHash");function TY(e,t){let r=e?.substr(0,hN),n=r+mN(t+r);return e===n}a(TY,"validateHash");function gY(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(gY,"generateSalt");function mN(e){return pY.createHash("md5").update(e).digest("hex")}a(mN,"md5");pN.exports={hash:SY,validate:TY}});var TN=g((rce,SN)=>{var Fm=je(),Kt={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function RY(e){return Kt.password.presence=!0,Kt.username.presence=!0,Kt.role.presence=!0,Kt.active.presence=!0,Fm.validateObject(e,Kt)}a(RY,"addUserValidation");function AY(e){return Kt.password.presence=!1,Kt.username.presence=!0,Kt.role.presence=!1,Kt.active.presence=!1,Fm.validateObject(e,Kt)}a(AY,"alterUserValidation");function OY(e){return Kt.password.presence=!1,Kt.username.presence=!0,Kt.role.presence=!1,Kt.active.presence=!1,Fm.validateObject(e,Kt)}a(OY,"dropUserValidation");SN.exports={addUserValidation:RY,alterUserValidation:AY,dropUserValidation:OY}});var rt=g((ice,RN)=>{"use strict";var{platform:sce}=require("os"),bY="nats-server.zip",qm="nats-server",yY=process.platform==="win32"?`${qm}.exe`:qm,NY=/^[^\s.,*>]+$/,gN="__request__",IY=a(e=>`${e}.${gN}`,"REQUEST_SUBJECT"),wY={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},CY={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},DY={HUB:"hub.pid",LEAF:"leaf.pid"},LY={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},MY={SUCCESS:"success",ERROR:"error"},UY={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},PY={TXN:"txn",MSGID:"msgid"},ko={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},vY={[ko.ERR]:1,[ko.WRN]:2,[ko.INF]:3,[ko.DBG]:4,[ko.TRC]:5},BY={debug:"-D",trace:"-DVV"};RN.exports={NATS_SERVER_ZIP:bY,NATS_SERVER_NAME:qm,NATS_BINARY_NAME:yY,PID_FILES:DY,NATS_CONFIG_FILES:CY,SERVER_SUFFIX:LY,NATS_TERM_CONSTRAINTS_RX:NY,REQUEST_SUFFIX:gN,UPDATE_REMOTE_RESPONSE_STATUSES:MY,CLUSTER_STATUS_STATUSES:UY,REQUEST_SUBJECT:IY,SUBJECT_PREFIXES:PY,MSG_HEADERS:wY,LOG_LEVELS:ko,LOG_LEVEL_FLAGS:BY,LOG_LEVEL_HIERARCHY:vY}});var ON=g((ace,AN)=>{"use strict";var P_=U(),v_=class{static{a(this,"BaseLicense")}constructor(t=0,r=P_.RAM_ALLOCATION_ENUM.DEFAULT,n=P_.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},km=class extends v_{static{a(this,"ExtendedLicense")}constructor(t=0,r=P_.RAM_ALLOCATION_ENUM.DEFAULT,n=P_.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};AN.exports={BaseLicense:v_,ExtendedLicense:km}});var Ki=g((uce,CN)=>{"use strict";var $o=require("fs-extra"),yN=U_(),NN=require("crypto"),HY=require("moment"),xY=require("uuid").v4,Wt=K(),$m=require("path"),GY=z(),ti=U(),{totalmem:bN}=require("os"),FY=ON().ExtendedLicense,Vo="invalid license key format",qY="061183",kY="mofi25",VY="aes-256-cbc",$Y=16,YY=32,IN=re();IN.initSync();var Vm;CN.exports={validateLicense:wN,generateFingerPrint:WY,licenseSearch:Wm,getLicense:JY,checkMemoryLimit:XY};function Ym(){return $m.join(IN.getHdbBasePath(),ti.LICENSE_KEY_DIR_NAME,ti.LICENSE_FILE_NAME)}a(Ym,"getLicenseDirPath");function KY(){let e=Ym();return $m.join(e,ti.LICENSE_FILE_NAME)}a(KY,"getLicenseFilePath");function Km(){let e=Ym();return $m.join(e,ti.REG_KEY_FILE_NAME)}a(Km,"getFingerPrintFilePath");async function WY(){let e=Km();try{return await $o.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await QY();throw Wt.error(`Error writing fingerprint file to ${e}`),Wt.error(t),new Error("There was an error generating the fingerprint")}}a(WY,"generateFingerPrint");async function QY(){let e=xY(),t=yN.hash(e),r=Km();try{await $o.mkdirp(Ym()),await $o.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Wt.error(`Error writing fingerprint file to ${r}`),Wt.error(n),new Error("There was an error generating the fingerprint")}return t}a(QY,"writeFingerprint");function wN(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:ti.RAM_ALLOCATION_ENUM.DEFAULT,version:ti.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Wt.error("empty license key passed to validate."),r;let n=Km(),s=!1;try{s=$o.statSync(n)}catch(i){Wt.error(i)}if(s){let i;try{i=$o.readFileSync(n,"utf8")}catch{Wt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(kY),c=o[1];c=Buffer.concat([Buffer.from(c)],$Y);let u=Buffer.concat([Buffer.from(i)],YY),_=NN.createDecipheriv(VY,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=zY(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Vo),Wt.error(Vo),new Error(Vo)}let d;if(isNaN(l))try{d=JSON.parse(l),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(Vo),Wt.error(Vo),new Error(Vo)}else r.exp_date=l;r.exp_date<HY().valueOf()&&(r.valid_date=!1),yN.validate(o[1],`${qY}${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||Wt.error("Invalid licence"),r}a(wN,"validateLicense");function zY(e,t){try{let r=NN.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Wt.warn("Check old license failed")}}a(zY,"checkOldLicense");function Wm(){let e=new FY,t=[];try{t=$o.readFileSync(KY(),"utf-8").split(ti.NEW_LINE)}catch(r){r.code==="ENOENT"?Wt.info("no license file found"):Wt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(GY.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=wN(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){Wt.error("There was an error parsing the license string."),Wt.error(s),e.ram_allocation=ti.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Vm=e,e}a(Wm,"licenseSearch");async function JY(){return Vm||await Wm(),Vm}a(JY,"getLicense");function XY(){let e=Wm().ram_allocation,t=process.constrainedMemory?.()||bN();if(t=Math.round(Math.min(t,bN())/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(XY,"checkMemoryLimit")});var nn=g((Ece,YN)=>{"use strict";var UN="username is required",PN="nothing to update, must supply active, role or password to update",vN="password cannot be an empty string",BN="If role is specified, it cannot be empty.",HN="active must be true or false";YN.exports={addUser:oK,alterUser:aK,dropUser:uK,getSuperUser:fK,userInfo:lK,listUsers:H_,listUsersExternal:_K,setUsersToGlobal:Ko,findAndValidateUser:VN,getClusterUser:EK,USERNAME_REQUIRED:UN,ALTERUSER_NOTHING_TO_UPDATE:PN,EMPTY_PASSWORD:vN,EMPTY_ROLE:BN,ACTIVE_BOOLEAN:HN};var xN=rn(),jY=Yi(),Jm=U_(),GN=TN(),FN=Ur(),Xm=gs(),Pr=z(),qN=require("validate.js"),Se=K(),{promisify:ZY}=require("util"),jm=Ts(),DN=U(),LN=rt(),eK=Cr(),_ce=re(),dce=Ki(),tK=xi(),{table:fce}=(Ae(),se(Fe)),{handleHDBError:Jn,hdb_errors:rK}=ne(),{HTTP_STATUS_CODES:Xn,AUTHENTICATION_ERROR_MSGS:Qm,HDB_ERROR_MSGS:Yo}=rK,{UserEventMsg:Zm}=wn(),zm=require("lodash"),{server:ep}=(ir(),se(Li)),nK=K();ep.getUser=(e,t)=>VN(e,t,t!=null);var kN={username:!0,active:!0,role:!0,password:!0},MN=new Map,B_=FN.searchByValue,sK=FN.searchByHash,iK=ZY(jY.delete);async function oK(e){let t=qN.cleanAttributes(e,kN),r=GN.addUserValidation(t);if(r)throw Jn(new Error,r.message,Xn.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 B_(n),s=s&&Array.from(s)}catch(u){throw Se.error("There was an error searching for a role in add user"),Se.error(u),u}if(!s||s.length<1)throw Jn(new Error,Yo.ROLE_NAME_NOT_FOUND(t.role),Xn.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Jn(new Error,Yo.DUP_ROLES_FOUND(t.role),Xn.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=jm.encrypt(t.password)),t.password=Jm.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await xN.insert(i)}catch(u){throw Se.error("There was an error searching for a user."),Se.error(u),u}Se.debug(o);try{await Ko()}catch(u){throw Se.error("Got an error setting users to global"),Se.error(u),u}if(o.skipped_hashes.length===1)throw Jn(new Error,Yo.USER_ALREADY_EXISTS(t.username),Xn.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],Xm.signalUserChange(new Zm(process.pid)),`${c.username} successfully added`}a(oK,"addUser");async function aK(e){let t=qN.cleanAttributes(e,kN);if(Pr.isEmptyOrZeroLength(t.username))throw new Error(UN);if(Pr.isEmptyOrZeroLength(t.password)&&Pr.isEmptyOrZeroLength(t.role)&&Pr.isEmptyOrZeroLength(t.active))throw new Error(PN);if(!Pr.isEmpty(t.password)&&Pr.isEmptyOrZeroLength(t.password.trim()))throw new Error(vN);if(!Pr.isEmpty(t.active)&&!Pr.isBoolean(t.active))throw new Error(HN);let r=cK(t.username);if(!Pr.isEmpty(t.password)&&!Pr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=jm.encrypt(t.password)),t.password=Jm.hash(t.password)),t.role==="")throw new Error(BN);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 B_(i)||[])}catch(c){throw Se.error("Got an error searching for a role."),Se.error(c),c}if(!o||o.length===0){let c=Yo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Se.error(c),Jn(new Error,c,Xn.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Yo.ALTER_USER_DUP_ROLES(t.role);throw Se.error(c),Jn(new Error,c,Xn.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 xN.update(n)}catch(i){throw Se.error("Error during update."),Se.error(i),i}try{await Ko()}catch(i){throw Se.error("Got an error setting users to global"),Se.error(i),i}return Xm.signalUserChange(new Zm(process.pid)),s}a(aK,"alterUser");function cK(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(cK,"isClusterUser");async function uK(e){try{let t=GN.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Pr.isEmpty(global.hdb_users.get(e.username)))throw Jn(new Error,Yo.USER_NOT_EXIST(e.username),Xn.NOT_FOUND,void 0,void 0,!0);let n;try{n=await iK(r)}catch(s){throw Se.error("Got an error deleting a user."),Se.error(s),s}Se.debug(n);try{await Ko()}catch(s){throw Se.error("Got an error setting users to global."),Se.error(s),s}return Xm.signalUserChange(new Zm(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(uK,"dropUser");async function lK(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=zm.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await sK(r)}catch(s){throw Se.error("Got an error searching for a role."),Se.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Se.error(r),r}return t}a(lK,"userInfo");async function _K(){let e;try{e=await H_()}catch(t){throw Se.error("Got an error listing users."),Se.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(_K,"listUsersExternal");async function H_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await B_(e)}catch(o){throw Se.error("Got an error searching for roles."),Se.error(o),o}let r={};for(let o of t)r[o.id]=zm.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 B_(n)}catch(o){throw Se.error("Got an error searching for users."),Se.error(o),o}let i=new Map;for(let o of s)o=zm.cloneDeep(o),o.role=r[o.role],dK(o.role),i.set(o.username,o);return i}catch(e){throw Se.error("got an error listing users"),Se.error(e),Pr.errorizeMessage(e)}return null}a(H_,"listUsers");function dK(e){try{if(!e){Se.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(tK)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Se.error("Got an error trying to set system permissions."),Se.error(t)}}a(dK,"appendSystemTablesToRole");async function Ko(){try{let e=await H_();global.hdb_users=e}catch(e){throw Se.error(e),e}}a(Ko,"setUsersToGlobal");async function VN(e,t,r=!0){global.hdb_users||await Ko();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Jn(new Error,Qm.GENERIC_AUTH_FAIL,Xn.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Jn(new Error,Qm.USER_INACTIVE,Xn.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(MN.get(t)===n.password)return s;if(Jm.validate(n.password,t))MN.set(t,n.password);else throw Jn(new Error,Qm.GENERIC_AUTH_FAIL,Xn.UNAUTHORIZED,void 0,void 0,!0)}return s}a(VN,"findAndValidateUser");async function fK(){global.hdb_users||await Ko();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(fK,"getSuperUser");async function EK(){let e=await H_(),t=eK.getConfigFromFile(DN.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Pr.isEmpty(r)&&r?.role?.role===DN.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=jm.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+LN.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+LN.SERVER_SUFFIX.ADMIN,r}a(EK,"getClusterUser");var $N=[];ep.invalidateUser=function(e){for(let t of $N)try{t(e)}catch(r){nK.error("Error invalidating user",r)}};ep.onInvalidatedUser=function(e){$N.push(e)}});var vc=g((Sce,zN)=>{"use strict";var Wi=K(),vr=U(),hK=Fy(),mce=js(),pce=Fi(),mK=nn(),{validateEvent:KN}=wn(),Pc=In(),pK=require("process"),{resetDatabases:SK}=(Ae(),se(Fe)),TK={[vr.ITC_EVENT_TYPES.SCHEMA]:gK,[vr.ITC_EVENT_TYPES.USER]:QN};async function gK(e){let t=KN(e);if(t){Wi.error(t);return}Wi.trace("ITC schemaHandler received schema event:",e),await hK(e.message),await RK(e.message)}a(gK,"schemaHandler");async function RK(e){try{Pc.resetReadTxn(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Pc.resetReadTxn(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Pc.resetReadTxn(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=SK();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Wi.error(t)}}a(RK,"syncSchemaMetadata");var WN=[];async function QN(e){try{try{Pc.resetReadTxn(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Pc.resetReadTxn(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Wi.warn(r)}let t=KN(e);if(t){Wi.error(t);return}Wi.trace(`ITC userHandler ${vr.HDB_ITC_CLIENT_PREFIX}${pK.pid} received user event:`,e),await mK.setUsersToGlobal();for(let r of WN)r()}catch(t){Wi.error(t)}}a(QN,"userHandler");QN.addListener=function(e){WN.push(e)};zN.exports=TK});var wn=g((bce,XN)=>{"use strict";var gce=K(),tp=z(),AK=U(),{ITC_ERRORS:Bc}=Nr(),{parentPort:Rce,threadId:OK,isMainThread:bK,workerData:Ace}=require("worker_threads"),{onMessageFromWorkers:yK,broadcast:Oce,broadcastWithAcknowledgement:NK}=et();XN.exports={sendItcEvent:IK,validateEvent:JN,SchemaEventMsg:wK,UserEventMsg:CK};var x_;yK(async(e,t)=>{x_=x_||vc(),JN(e),x_[e.type]&&await x_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function IK(e){return!bK&&e.message&&(e.message.originator=OK),NK(e)}a(IK,"sendItcEvent");function JN(e){if(typeof e!="object")return Bc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||tp.isEmpty(e.type))return Bc.MISSING_TYPE;if(!e.hasOwnProperty("message")||tp.isEmpty(e.message))return Bc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||tp.isEmpty(e.message.originator))return Bc.MISSING_ORIGIN;if(AK.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Bc.INVALID_EVENT(e.type)}a(JN,"validateEvent");function wK(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(wK,"SchemaEventMsg");function CK(e){this.originator=e}a(CK,"UserEventMsg")});var gs=g((Ice,tI)=>{"use strict";var jN=U(),Nce=z(),G_=K(),ZN=Hy(),Wo,{sendItcEvent:eI}=wn();function DK(e){try{G_.trace("signalSchemaChange called with message:",e),Wo=Wo||vc();let t=new ZN(jN.ITC_EVENT_TYPES.SCHEMA,e);return Wo.schema(t),eI(t)}catch(t){G_.error(t)}}a(DK,"signalSchemaChange");function LK(e){try{G_.trace("signalUserChange called with message:",e),Wo=Wo||vc();let t=new ZN(jN.ITC_EVENT_TYPES.USER,e);return Wo.user(t),eI(t)}catch(t){G_.error(t)}}a(LK,"signalUserChange");tI.exports={signalSchemaChange:DK,signalUserChange:LK}});var F_=g((Cce,nI)=>{"use strict";var rI=z(),MK=U(),UK=K(),PK=T_(),vK=S_(),BK=gs(),{SchemaEventMsg:HK}=wn(),xK="already exists in";nI.exports=GK;async function GK(e,t,r){if(rI.isEmptyOrZeroLength(r))return r;let n=[];rI.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 FK(e,t.schema,t.name,i)})),s}a(GK,"lmdbCheckForNewAttributes");async function FK(e,t,r,n){let s=new vK(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await qK(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(xK))UK.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(FK,"createNewAttribute");async function qK(e){let t;return t=await PK(e),BK.signalSchemaChange(new HK(process.pid,MK.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(qK,"createAttribute")});var Qo=g((Lce,sI)=>{"use strict";var rp=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}};sI.exports=rp});var oI=g((Uce,iI)=>{"use strict";var kK=Qo(),VK=U().OPERATIONS_ENUM,np=class extends kK{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(VK.INSERT,r,n,s,i),this.records=t}};iI.exports=np});var cI=g((vce,aI)=>{"use strict";var $K=Qo(),YK=U().OPERATIONS_ENUM,sp=class extends $K{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(YK.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};aI.exports=sp});var lI=g((Hce,uI)=>{"use strict";var KK=Qo(),WK=U().OPERATIONS_ENUM,ip=class extends KK{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(WK.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};uI.exports=ip});var dI=g((Gce,_I)=>{"use strict";var QK=Qo(),zK=U().OPERATIONS_ENUM,op=class extends QK{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(zK.DELETE,n,s,t,i),this.original_records=r}};_I.exports=op});var Hc=g((kce,mI)=>{"use strict";var qce=require("path"),fI=Ye(),JK=oI(),XK=cI(),jK=lI(),ZK=dI(),zo=_t(),EI=z(),{CONFIG_PARAMS:eW}=U(),hI=re();hI.initSync();var q_=U().OPERATIONS_ENUM,{getTransactionAuditStorePath:tW}=Qe();mI.exports=rW;async function rW(e,t){if(hI.get(eW.LOGGING_AUDITLOG)===!1)return;let r=tW(e.schema,e.table),n=await fI.openEnvironment(r,e.table,!0),s=nW(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){fI.initializeDBIs(n,zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,zo.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),EI.isEmpty(s.user_name)||n.dbis[zo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[zo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(rW,"writeTransaction");function nW(e,t){let r=EI.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===q_.INSERT)return new JK(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===q_.UPDATE)return new XK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===q_.UPSERT)return new jK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===q_.DELETE)return new ZK(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(nW,"createTransactionObject")});var ap=g((Yce,pI)=>{"use strict";var sW=Dc(),$ce=Lc(),xc=U(),iW=Mc(),oW=Fo().insertRecords,aW=Ye(),cW=K(),uW=F_(),{getSchemaPath:lW}=Qe(),_W=Hc();pI.exports=dW;async function dW(e){try{let{schema_table:t,attributes:r}=sW(e);iW(e,r,t.hash_attribute),e.schema!==xc.SYSTEM_SCHEMA_NAME&&(r.includes(xc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(xc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(xc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(xc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await uW(e.hdb_auth_header,t,r),s=lW(e.schema,e.table),i=await aW.openEnvironment(s,e.table),o=await oW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await _W(e,o)}catch(c){cW.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(dW,"lmdbCreateRecords")});var gI=g((Wce,TI)=>{"use strict";var SI=U(),fW=ap(),EW=Lc(),hW=require("fs-extra"),{getSchemaPath:mW}=Qe();TI.exports=pW;async function pW(e){let t=[{name:e.schema,createddate:Date.now()}],r=new EW(SI.SYSTEM_SCHEMA_NAME,SI.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await fW(r),await hW.mkdirp(mW(e.schema))}a(pW,"lmdbCreateSchema")});var AI=g((zce,RI)=>{"use strict";var cp=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}};RI.exports=cp});var NI=g((eue,yI)=>{"use strict";var OI=Ye(),up=Dr(),lp=Nr().LMDB_ERRORS_ENUM,SW=_t(),bI=K(),Xce=z(),TW=require("lmdb"),gW=AI(),RW=U(),{OVERFLOW_MARKER:jce,MAX_SEARCH_KEY_LENGTH:Zce}=SW,AW=RW.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function OW(e,t,r,n){if(up.validateEnv(e),t===void 0)throw new Error(lp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(lp.IDS_REQUIRED):new Error(lp.IDS_MUST_BE_ITERABLE);try{let s=OI.listDBIs(e);OI.initializeDBIs(e,t,s);let i=new gW,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||n&&h[AW]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,TW.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let T=s[S];if(!h.hasOwnProperty(T)||T===t)continue;let b=e.dbis[T],R=h[T];if(R!=null)try{let L=up.getIndexedValues(R);if(L)for(let H=0,P=L.length;H<P;H++)b.remove(L[H],o)}catch{bI.warn(`cannot delete from attribute: ${T}, ${R}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){bI.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=up.getNextMonotonicTime(),i}catch(s){throw s}}a(OW,"deleteRecords");yI.exports={deleteRecords:OW}});var Gc=g((rue,wI)=>{"use strict";var Jo=z(),bW=NI(),yW=Ye(),{getSchemaPath:NW}=Qe(),IW=Hc(),wW=K();wI.exports=CW;async function CW(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Jo.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Jo.isEmptyOrZeroLength(e.hash_values)&&!Jo.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][n];Jo.isEmpty(u)||e.hash_values.push(u)}}if(Jo.isEmptyOrZeroLength(e.hash_values))return II([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Jo.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=NW(e.schema,e.table),i=await yW.openEnvironment(s,e.table),o=await bW.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await IW(e,o)}catch(c){wW.error(`unable to write transaction due to ${c.message}`)}return II(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(CW,"lmdbDeleteRecords");function II(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(II,"createDeleteResponse")});var dp=g((iue,CI)=>{"use strict";var DW=U(),sue=Dr();function _p(e,t){let r=Object.create(null);if(t.length===1&&DW.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(_p,"parseRow");function LW(e,t,r,n){let s=_p(r,e);n.push(s)}a(LW,"searchAll");function MW(e,t,r,n){let s=_p(r,e);n[t]=s}a(MW,"searchAllToMap");function UW(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(UW,"iterateDBI");function Qi(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(Qi,"pushResults");function PW(e,t,r,n,s,i){t.toString().endsWith(e)&&Qi(t,r,n,s,i)}a(PW,"endsWith");function vW(e,t,r,n,s,i){t.toString().includes(e)&&Qi(t,r,n,s,i)}a(vW,"contains");function BW(e,t,r,n,s,i){t>e&&Qi(t,r,n,s,i)}a(BW,"greaterThanCompare");function HW(e,t,r,n,s,i){t>=e&&Qi(t,r,n,s,i)}a(HW,"greaterThanEqualCompare");function xW(e,t,r,n,s,i){t<e&&Qi(t,r,n,s,i)}a(xW,"lessThanCompare");function GW(e,t,r,n,s,i){t<=e&&Qi(t,r,n,s,i)}a(GW,"lessThanEqualCompare");CI.exports={parseRow:_p,searchAll:LW,searchAllToMap:MW,iterateDBI:UW,endsWith:PW,contains:vW,greaterThanCompare:BW,greaterThanEqualCompare:HW,lessThanCompare:xW,lessThanEqualCompare:GW,pushResults:Qi}});var Xo=g((lue,BI)=>{"use strict";var ri=Ye(),aue=K(),Br=Dr(),k_=_t(),ct=Nr().LMDB_ERRORS_ENUM,cue=z(),FW=U(),V_=dp(),{parseRow:qW}=V_,uue=require("lmdb"),{OVERFLOW_MARKER:DI,MAX_SEARCH_KEY_LENGTH:kW}=k_;function LI(e,t,r,n=!1,s=void 0,i=void 0){return zi(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(LI,"iterateFullIndex");function Fc(e,t,r,n,s,i=!1,o=void 0,c=void 0,u=!1,_=!1){return zi(e,t,r,(l,d,f,E)=>{let b={transaction:l,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(b.values=!1,d.getRange(b).map(R=>({value:R}))):d.getRange(b)})}a(Fc,"iterateRangeBetween");function zi(e,t,r,n){let s=e.database||e,i=ri.openDBI(s,r);i[k_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ri.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(zi,"setupTransaction");function MI(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(DI)){if(!s)if(r)s=ri.openDBI(e,r);else{let u=ri.listDBIs(e);for(let _=0,l=u.length;_<l&&(s=ri.openDBI(e,u[_]),!s[k_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(MI,"getOverflowCheck");function VW(e,t,r,n=!1,s=void 0,i=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(ct.HASH_ATTRIBUTE_REQUIRED);return zi(e,t,t,(o,c,u)=>($_(r),r=qc(u,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>qW(_.value,r))))}a(VW,"searchAll");function $W(e,t,r,n=!1,s=void 0,i=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(ct.HASH_ATTRIBUTE_REQUIRED);$_(r),r=qc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of LI(e,t,t,n,s,i))o.set(c,V_.parseRow(u,r));return o}a($W,"searchAllToMap");function YW(e,t,r=!1,n=void 0,s=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(ct.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=LI(e,void 0,t,r,n,s),c=o.transaction,u=MI(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(YW,"iterateDBI");function KW(e,t){if(Br.validateEnv(e),t===void 0)throw new Error(ct.HASH_ATTRIBUTE_REQUIRED);return ri.statDBI(e,t).entryCount}a(KW,"countAll");function WW(e,t,r,n,s=!1,i=void 0,o=void 0){return ni(e,r,n),zi(e,t,r,(c,u,_,l)=>(n=Br.convertKeyValueToWrite(n),l===r?u.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:u.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(WW,"equals");function QW(e,t,r){return ni(e,t,r),ri.openDBI(e,t).getValuesCount(r)}a(QW,"count");function zW(e,t,r,n,s=!1,i=void 0,o=void 0){return ni(e,r,n),zi(e,null,r,(c,u)=>{n=Br.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let l;if(s===!0){let d;for(let f of u.getKeys({transaction:c,start:n}))if(!f.startsWith(n)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(n))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(zW,"startsWith");function JW(e,t,r,n,s=!1,i=void 0,o=void 0){return UI(e,t,r,n,s,i,o,!0)}a(JW,"endsWith");function UI(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ni(e,r,n),zi(e,null,r,(u,_,l,d)=>{let f=MI(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:s?!1:void 0,reverse:s}).flatMap(E=>{let h=E.toString();return h.endsWith(DI)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(n):S.includes(n))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(n):h.includes(n))?_[k_.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(UI,"contains");function XW(e,t,r,n,s=!1,i=void 0,o=void 0){ni(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Fc(e,t,r,n,u,s,i,o,!0,!1)}a(XW,"greaterThan");function jW(e,t,r,n,s=!1,i=void 0,o=void 0){ni(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Fc(e,t,r,n,u,s,i,o,!1,!1)}a(jW,"greaterThanEqual");function ZW(e,t,r,n,s=!1,i=void 0,o=void 0){ni(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Fc(e,t,r,u,n,s,i,o,!1,!0)}a(ZW,"lessThan");function eQ(e,t,r,n,s=!1,i=void 0,o=void 0){ni(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Fc(e,t,r,u,n,s,i,o,!1,!1)}a(eQ,"lessThanEqual");function tQ(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Br.validateEnv(e),r===void 0)throw new Error(ct.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(ct.START_VALUE_REQUIRED);if(s===void 0)throw new Error(ct.END_VALUE_REQUIRED);if(n=Br.convertKeyValueToWrite(n),s=Br.convertKeyValueToWrite(s),n>s)throw new Error(ct.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Fc(e,t,r,n,s,i,o,c)}a(tQ,"between");function rQ(e,t,r,n){Br.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ct.HASH_ATTRIBUTE_REQUIRED);if($_(r),r=qc(s,r),n===void 0)throw new Error(ct.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=V_.parseRow(c,r)),o}a(rQ,"searchByHash");function nQ(e,t,r){Br.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(ct.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ct.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(nQ,"checkHashExists");function sQ(e,t,r,n,s=[]){return vI(e,t,r,n,s),PI(e,t,r,n,s).map(i=>i[1])}a(sQ,"batchSearchByHash");function iQ(e,t,r,n,s=[]){vI(e,t,r,n,s);let i=new Map;for(let[o,c]of PI(e,t,r,n,s))i.set(o,c);return i}a(iQ,"batchSearchByHashToMap");function PI(e,t,r,n,s=[]){return zi(e,t,t,(i,o,c)=>{r=qc(c,r);let u=r.length<3;return n.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,V_.parseRow(l,r)];s.push(_)}).filter(_=>_)})}a(PI,"batchHashSearch");function vI(e,t,r,n,s){if(Br.validateEnv(e),t===void 0)throw new Error(ct.HASH_ATTRIBUTE_REQUIRED);if($_(r),n==null)throw new Error(ct.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(ct.IDS_MUST_BE_ITERABLE)}a(vI,"initializeBatchSearchByHash");function $_(e){if(!Array.isArray(e))throw e===void 0?new Error(ct.FETCH_ATTRIBUTES_REQUIRED):new Error(ct.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a($_,"validateFetchAttributes");function ni(e,t,r){if(Br.validateEnv(e),t===void 0)throw new Error(ct.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ct.SEARCH_VALUE_REQUIRED);if(r?.length>kW)throw new Error(ct.SEARCH_VALUE_TOO_LARGE)}a(ni,"validateComparisonFunctions");function qc(e,t){return t.length===1&&FW.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ri.listDBIs(e)),t}a(qc,"setGetWholeRowAttributes");BI.exports={searchAll:VW,searchAllToMap:$W,count:QW,countAll:KW,equals:WW,startsWith:zW,endsWith:JW,contains:UI,searchByHash:rQ,setGetWholeRowAttributes:qc,batchSearchByHash:sQ,batchSearchByHashToMap:iQ,checkHashExists:nQ,iterateDBI:YW,greaterThan:XW,greaterThanEqual:jW,lessThan:ZW,lessThanEqual:eQ,between:tQ}});var jo=g((due,qI)=>{var HI=require("lodash"),xI=je(),fe=require("joi"),oQ=z(),{hdb_schema_table:kc,checkValidTable:GI,hdb_table:FI,hdb_database:Y_}=Qn(),{handleHDBError:aQ,hdb_errors:cQ}=ne(),{getDatabases:uQ}=(Ae(),se(Fe)),{HTTP_STATUS_CODES:lQ}=cQ,_Q=fe.object({database:Y_,schema:Y_,table:FI,search_attribute:kc,search_value:fe.any().required(),get_attributes:fe.array().min(1).items(fe.alternatives(kc,fe.object())).optional(),desc:fe.bool(),limit:fe.number().integer().min(1),offset:fe.number().integer().min(0)}),dQ=fe.object({database:Y_,schema:Y_,table:FI,operator:fe.string().valid("and","or").default("and").lowercase(),offset:fe.number().integer().min(0),limit:fe.number().integer().min(1),get_attributes:fe.array().min(1).items(fe.alternatives(kc,fe.object())).optional(),sort:fe.object({attribute:fe.alternatives(kc,fe.array().min(1)),descending:fe.bool().optional()}).optional(),conditions:fe.array().min(1).items(fe.alternatives(fe.object({operator:fe.string().valid("and","or").default("and").lowercase(),conditions:fe.array()}),fe.object({search_attribute:fe.alternatives(kc,fe.array().min(1)),search_type:fe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:fe.when("search_type",{switch:[{is:"equals",then:fe.any()},{is:"between",then:fe.array().items(fe.alternatives([fe.string(),fe.number()])).length(2)}],otherwise:fe.alternatives(fe.string(),fe.number())}).required()}))).required()});qI.exports=function(e,t){let r=null;switch(t){case"value":r=xI.validateBySchema(e,_Q);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(GI("database",e.schema)),i(GI("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=xI.validateBySchema(e,dQ);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=oQ.checkGlobalSchemaTable(e.schema,e.table);if(s)return aQ(new Error,s,lQ.NOT_FOUND);let o=uQ()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let u=a(l=>{for(let d=0,f=l.conditions.length;d<f;d++){let E=l.conditions[d];E.conditions?u(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=HI.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!HI.some(o,d=>d===l||d.attribute===l||d.attribute===l.attribute));if(_&&_.length>0){let l=_.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var fp=g((Eue,kI)=>{"use strict";var fQ=Ye(),EQ=jo(),{getSchemaPath:hQ}=Qe();kI.exports=mQ;function mQ(e){let t=EQ(e,"hashes");if(t)throw t;let r=hQ(e.schema,e.table);return fQ.openEnvironment(r,e.table)}a(mQ,"initialize")});var Ep=g((mue,VI)=>{"use strict";var pQ=Xo(),SQ=fp();VI.exports=TQ;async function TQ(e){let t=await SQ(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return pQ.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(TQ,"lmdbGetDataByHash")});var Zo=g((Sue,$I)=>{"use strict";var hp=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};$I.exports=hp});var KI=g((Rue,YI)=>{"use strict";var gue=Zo(),gQ=Xo(),RQ=fp();YI.exports=AQ;async function AQ(e){let t=await RQ(e),r=global.hdb_schema[e.schema][e.table];return gQ.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(AQ,"lmdbSearchByHash")});var jn=g((Oue,WI)=>{"use strict";var mp=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};WI.exports=mp});var K_=g((yue,ZI)=>{"use strict";var Qt=Xo(),OQ=Ye(),bQ=z(),Ee=_t(),Ji=U(),yQ=xi(),QI=Nr().LMDB_ERRORS_ENUM,{getSchemaPath:NQ}=Qe(),Rs=Ji.SEARCH_WILDCARDS;async function IQ(e,t,r){let n;e.schema===Ji.SYSTEM_SCHEMA_NAME?n=yQ[e.table]:n=global.hdb_schema[e.schema][e.table];let s=jI(e,n.hash_attribute,r,t);return JI(e,s,n.hash_attribute,r)}a(IQ,"prepSearch");async function JI(e,t,r,n){let s=NQ(e.schema,e.table),i=await OQ.openEnvironment(s,e.table),o=XI(i,e,t,r),c=o.transaction||i;if([Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Ee.SEARCH_TYPES.SEARCH_ALL,Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(wQ(e,r)===!1){let l=e.search_attribute;if(l===r)return n?zI(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return n?zI(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return n===!0?Qt.batchSearchByHashToMap(c,r,e.get_attributes,_):Qt.batchSearchByHash(c,r,e.get_attributes,_)}a(JI,"executeSearch");function XI(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case Ee.SEARCH_TYPES.EQUALS:s=Qt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.CONTAINS:s=Qt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.ENDS_WITH:case Ee.SEARCH_TYPES._ENDS_WITH:s=Qt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.STARTS_WITH:case Ee.SEARCH_TYPES._STARTS_WITH:s=Qt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Qt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Qt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.SEARCH_ALL:return Qt.searchAll(e,n,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Qt.searchAllToMap(e,n,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.BETWEEN:s=Qt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN:case Ee.SEARCH_TYPES._GREATER_THAN:s=Qt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN_EQUAL:case Ee.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Qt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN:case Ee.SEARCH_TYPES._LESS_THAN:s=Qt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN_EQUAL:case Ee.SEARCH_TYPES._LESS_THAN_EQUAL:s=Qt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return s}a(XI,"searchByType");function zI(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(zI,"createMapFromIterable");function wQ(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(wQ,"checkToFetchMore");function jI(e,t,r,n){if(bQ.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),Rs.indexOf(s)>-1)return r===!0?Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ee.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Rs[0])<0&&s.indexOf(Rs[1])<0)return c===!0?r===!0?Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Ee.SEARCH_TYPES.EQUALS;if(Rs.indexOf(i)>=0&&Rs.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Ee.SEARCH_TYPES.CONTAINS;if(Rs.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Ee.SEARCH_TYPES.ENDS_WITH;if(Rs.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Ee.SEARCH_TYPES.STARTS_WITH;if(s.includes(Rs[0])||s.includes(Rs[1]))return Ee.SEARCH_TYPES.EQUALS;throw new Error(QI.UNKNOWN_SEARCH_TYPE)}else switch(n){case Ji.VALUE_SEARCH_COMPARATORS.BETWEEN:return Ee.SEARCH_TYPES.BETWEEN;case Ji.VALUE_SEARCH_COMPARATORS.GREATER:return Ee.SEARCH_TYPES.GREATER_THAN;case Ji.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Ee.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ji.VALUE_SEARCH_COMPARATORS.LESS:return Ee.SEARCH_TYPES.LESS_THAN;case Ji.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Ee.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(QI.UNKNOWN_SEARCH_TYPE)}}a(jI,"createSearchTypeFromSearchObject");ZI.exports={executeSearch:JI,createSearchTypeFromSearchObject:jI,prepSearch:IQ,searchByType:XI}});var tw=g((wue,ew)=>{"use strict";var Iue=jn(),CQ=jo(),DQ=z(),LQ=U(),MQ=K_();ew.exports=UQ;function UQ(e,t){if(!DQ.isEmpty(t)&&LQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=CQ(e,"value");if(n)throw n;return MQ.prepSearch(e,t,!0)}a(UQ,"lmdbGetDataByValue")});var Vc=g((Lue,rw)=>{"use strict";var Due=jn(),PQ=jo(),vQ=z(),BQ=U(),HQ=K_();rw.exports=xQ;async function xQ(e,t){if(!vQ.isEmpty(t)&&BQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=PQ(e,"value");if(n)throw n;return HQ.prepSearch(e,t,!1)}a(xQ,"lmdbSearchByValue")});var sw=g((Pue,nw)=>{"use strict";var Uue=_t(),pp=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}},Sp=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},Tp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};nw.exports={SearchByConditionsObject:pp,SearchCondition:Sp,SortAttribute:Tp}});var uw=g((xue,cw)=>{"use strict";var Bue=sw().SearchByConditionsObject,GQ=jn(),FQ=jo(),gp=Xo(),W_=_t(),{Resource:Hue}=(bn(),se(Rp)),aw=K_(),qQ=dp(),kQ=require("lodash"),{getSchemaPath:VQ}=Qe(),iw=Ye(),{handleHDBError:$Q,hdb_errors:YQ}=ne(),{HTTP_STATUS_CODES:KQ}=YQ,WQ=1e8;cw.exports=QQ;async function QQ(e){let t=FQ(e,"conditions");if(t)throw $Q(t,t.message,KQ.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=VQ(e.schema,e.table),n=await iw.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)iw.openDBI(n,_.search_attribute);let i=kQ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===W_.SEARCH_TYPES.EQUALS?_.estimated_count=gp.count(n,_.search_attribute,_.search_value):l===W_.SEARCH_TYPES.CONTAINS||l===W_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=WQ}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await ow(o,e,i[0],s.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],l=i.slice(1).map(aw.filterByType),d=l.length,f=gp.setGetWholeRowAttributes(n,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(E=>qQ.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await ow(o,e,f,s.hash_attribute);c=c.concat(E)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=gp.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(QQ,"lmdbSearchByConditions");async function ow(e,t,r,n){let s=new GQ(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===W_.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,aw.searchByType(e,s,i,n).map(o=>o.value)}a(ow,"executeConditionSearch")});var $c=g((Fue,lw)=>{"use strict";var zQ=U().OPERATIONS_ENUM,Ap=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=zQ.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};lw.exports=Ap});var Op=g((kue,Sw)=>{"use strict";var Ew=jn(),hw=$c(),mw=Vc(),pw=Gc(),ur=U(),_w=z(),dw=Ye(),{getTransactionAuditStorePath:JQ,getSchemaPath:XQ}=Qe(),fw=K();Sw.exports=jQ;async function jQ(e){try{if(_w.isEmpty(global.hdb_schema[e.schema])||_w.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await ZQ(e),await ez(e);let t=XQ(e.schema,e.table);try{await dw.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")fw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=JQ(e.schema,e.table);await dw.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")fw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(jQ,"lmdbDropTable");async function ZQ(e){let t=new Ew(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await mw(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 hw(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await pw(s)}a(ZQ,"deleteAttributesFromSystem");async function ez(e){let t=new Ew(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await mw(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 hw(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await pw(s)}catch(i){throw i}}a(ez,"dropTableFromSystem")});var gw=g(($ue,Tw)=>{"use strict";var tz=require("fs-extra"),rz=jn(),nz=Zo(),sz=$c(),iz=Op(),oz=Gc(),az=Ep(),cz=Vc(),As=U(),{getSchemaPath:uz}=Qe(),{handleHDBError:lz,hdb_errors:_z}=ne(),{HDB_ERROR_MSGS:dz,HTTP_STATUS_CODES:fz}=_z;Tw.exports=Ez;async function Ez(e){let t;try{t=await hz(e.schema);let r=new rz(As.SYSTEM_SCHEMA_NAME,As.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,As.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[As.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await cz(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await iz(c)}catch(u){if(u.message!=="invalid environment")throw u}}let s=new sz(As.SYSTEM_SCHEMA_NAME,As.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await oz(s);let i=uz(t);await tz.remove(i)}catch(r){throw r}}a(Ez,"lmdbDropSchema");async function hz(e){let t=new nz(As.SYSTEM_SCHEMA_NAME,As.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[As.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await az(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw lz(new Error,dz.SCHEMA_NOT_FOUND(e),fz.NOT_FOUND,void 0,void 0,!0);return n}a(hz,"validateDropSchema")});var yp=g((Kue,Rw)=>{"use strict";var bp=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};Rw.exports=bp});var Ow=g((zue,Aw)=>{"use strict";var mz=require("fs-extra"),Q_=Ye(),{getTransactionAuditStorePath:pz}=Qe(),Np=_t(),Que=yp();Aw.exports=Sz;async function Sz(e){let t;try{let r=pz(e.schema,e.table);await mz.mkdirp(r),t=await Q_.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{Q_.createDBI(t,Np.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Q_.createDBI(t,Np.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Q_.createDBI(t,Np.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(Sz,"createTransactionsAuditEnvironment")});var Iw=g((Xue,Nw)=>{"use strict";var Ip=U(),bw=Ye(),Tz=Fo(),{getSystemSchemaPath:gz,getSchemaPath:Rz}=Qe(),Az=xi(),Oz=T_(),wp=S_(),bz=K(),yz=Ow(),Dp=Az.hdb_table,yw=[];for(let e=0;e<Dp.attributes.length;e++)yw.push(Dp.attributes[e].attribute);Nw.exports=Nz;async function Nz(e,t){let r=Rz(t.schema,t.table),n=new wp(t.schema,t.table,Ip.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new wp(t.schema,t.table,Ip.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new wp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await bw.createEnvironment(r,t.table),e!==void 0){let o=await bw.openEnvironment(gz(),Ip.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Tz.insertRecords(o,Dp.hash_attribute,yw,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Cp(n),await Cp(s),await Cp(i)}await yz(t)}catch(o){throw o}}a(Nz,"lmdbCreateTable");async function Cp(e){try{await Oz(e)}catch(t){bz.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Cp,"createAttribute")});var Cw=g((Zue,ww)=>{"use strict";var Iz=Dc(),wz=Mc(),Cz=F_(),Yc=U(),Dz=Fo().updateRecords,Lz=Ye(),{getSchemaPath:Mz}=Qe(),Uz=Hc(),Pz=K();ww.exports=vz;async function vz(e){try{let{schema_table:t,attributes:r}=Iz(e);wz(e,r,t.hash_attribute),e.schema!==Yc.SYSTEM_SCHEMA_NAME&&(r.includes(Yc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Yc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Yc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Yc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Cz(e.hdb_auth_header,t,r),s=Mz(e.schema,e.table),i=await Lz.openEnvironment(s,e.table),o=await Dz(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Uz(e,o)}catch(c){Pz.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(vz,"lmdbUpdateRecords")});var Lw=g((tle,Dw)=>{"use strict";var Bz=U().OPERATIONS_ENUM,Lp=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Bz.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Dw.exports=Lp});var Uw=g((sle,Mw)=>{"use strict";var nle=Lw(),Hz=Dc(),xz=Mc(),Gz=F_(),Kc=U(),Fz=Fo().upsertRecords,qz=Ye(),{getSchemaPath:kz}=Qe(),Vz=Hc(),$z=K(),{handleHDBError:Yz,hdb_errors:Kz}=ne();Mw.exports=Wz;async function Wz(e){let t;try{t=Hz(e)}catch(u){throw Yz(u,u.message,Kz.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;xz(e,n,r.hash_attribute),e.schema!==Kc.SYSTEM_SCHEMA_NAME&&(n.includes(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Gz(e.hdb_auth_header,r,n),i=kz(e.schema,e.table),o=await qz.openEnvironment(i,e.table),c=await Fz(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await Vz(e,c)}catch(u){$z.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(Wz,"lmdbUpsertRecords")});var vw=g((ole,Pw)=>{"use strict";var Mp=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};Pw.exports=Mp});var Hw=g((cle,Bw)=>{"use strict";var Up=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}};Bw.exports=Up});var Fw=g((_le,Gw)=>{"use strict";var Pp=Ye(),{getTransactionAuditStorePath:Qz}=Qe(),lle=vw(),Wc=_t(),zz=z(),xw=Hw(),Jz=require("util").promisify,Xz=Jz(setTimeout),jz=1e4,Zz=100;Gw.exports=e2;async function e2(e){let t=Qz(e.schema,e.table),r=await Pp.openEnvironment(t,e.table,!0),n=Pp.listDBIs(r);Pp.initializeDBIs(r,Wc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new xw;do s=await t2(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 Xz(Zz);while(s.transactions_deleted>0);return i}a(e2,"deleteAuditLogsBefore");async function t2(e,t){let r=new xw;try{let n=e.dbis[Wc.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[Wc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];zz.isEmpty(c)||(s=e.dbis[Wc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)s=e.dbis[Wc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>jz)break}return await s,r}catch(n){throw n}}a(t2,"deleteTransactions")});var kw=g((fle,qw)=>{"use strict";var vp=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};qw.exports=vp});var $w=g((mle,Vw)=>{"use strict";var r2=jn(),n2=$c(),hle=kw(),Zn=U(),s2=z(),Bp=Ye(),i2=xi(),o2=Vc(),a2=Gc(),{getSchemaPath:c2}=Qe();Vw.exports=u2;async function u2(e,t=!0){let r;e.schema===Zn.SYSTEM_SCHEMA_NAME?r=i2[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await _2(e),s=c2(e.schema,e.table),i=await Bp.openEnvironment(s,e.table);return t===!0&&await l2(e,i,r.hash_attribute),Bp.dropDBI(i,e.attribute),n}a(u2,"lmdbDropAttribute");async function l2(e,t,r){let n=Bp.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:u}of n.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);s=t.dbis[r].put(o,_,u)}await s}a(l2,"removeAttributeFromAllObjects");async function _2(e){let t=new r2(Zn.SYSTEM_SCHEMA_NAME,Zn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Zn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Zn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Zn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await o2(t)).filter(o=>o[Zn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(s2.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Zn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new n2(Zn.SYSTEM_SCHEMA_NAME,Zn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return a2(i)}a(_2,"dropAttributeFromSystem")});var Jw=g((Tle,zw)=>{"use strict";var Hp=Ye(),ea=_t(),Sle=Dr(),xp=U(),Yw=z(),{getTransactionAuditStorePath:d2}=Qe(),f2=Xo(),z_=Qo(),E2=K();zw.exports=h2;async function h2(e){let t=d2(e.schema,e.table),r=await Hp.openEnvironment(t,e.table,!0),n=Hp.listDBIs(r);Hp.initializeDBIs(r,ea.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case xp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Kw(r,e.search_values);case xp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,p2(r,e.search_values,s);case xp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return m2(r,e.search_values);default:return Kw(r)}}a(h2,"readAuditLog");function Kw(e,t=[0,Date.now()]){Yw.isEmpty(t[0])&&(t[0]=0),Yw.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ea.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 z_,s))}a(Kw,"searchTransactionsByTimestamp");function m2(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[ea.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,Qw(e,i))}return Object.fromEntries(r)}a(m2,"searchTransactionsByUsername");function p2(e,t,r){let n=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=f2.equals(e,ea.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ea.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);n.has(f)?n.get(f).push(_.toString()):n.set(f,[_.toString()])}}let s=Array.from(n.keys()),i=Qw(e,s),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=n.get(_);Ww(u,"records",r,l,o),Ww(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(p2,"searchTransactionsByHashValues");function Ww(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(n.indexOf(u)>=0)if(s.has(u)){let _=s.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new z_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new z_(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(u,[_])}}}a(Ww,"loopRecords");function Qw(e,t){let r=[];try{let n=e.dbis[ea.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 z_,i);r.push(o)}}catch(i){E2.warn(i)}return r}catch(n){throw n}}a(Qw,"batchSearchTransactions")});var jw=g((Ole,Xw)=>{"use strict";var{getSchemaPath:Rle}=Qe(),Ale=Ye(),{database:S2}=(Ae(),se(Fe));Xw.exports={writeTransaction:T2};async function T2(e,t,r){return S2({database:e,table:t}).transaction(r)}a(T2,"writeTransaction")});var rC=g((yle,tC)=>{"use strict";var{getSchemaPath:Zw}=Qe(),eC=Ye();tC.exports={flush:g2,resetReadTxn:R2};async function g2(e,t){return(await eC.openEnvironment(Zw(e,t),t.toString())).flushed}a(g2,"flush");async function R2(e,t){try{(await eC.openEnvironment(Zw(e,t),t.toString())).resetReadTxn()}catch{}}a(R2,"resetReadTxn")});var oC=g((Ile,iC)=>{"use strict";var{Readable:A2}=require("stream"),{getDatabases:O2}=(Ae(),se(Fe)),{readSync:b2,openSync:y2,createReadStream:nC}=require("fs"),{open:N2}=require("lmdb"),sC=c_(),I2=l_(),{AUDIT_STORE_OPTIONS:w2}=(Bi(),se(aC)),{INTERNAL_DBIS_NAME:C2,AUDIT_STORE_NAME:D2}=_t();iC.exports=M2;var Gp=32768,L2=100;async function M2(e){let t=e.database||e.schema||"data",r=O2()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let l=_.dbisDB,d=N2({noSync:!0,maxDbs:I2.MAX_DBS}),f,E=d.openDB(C2,new sC(!1)),h=l.useReadTransaction(),p=0,S=a(async function(b,R){R.encoding="binary",R.encoder=void 0;let L=d.openDB(b,R),H=l.openDB(b,R);for(let{key:P,version:k,value:B}of H.getRange({transaction:h,versions:H.useVersions}))f=L.put(P,B,k),p++%L2===0&&(await new Promise(J=>setTimeout(J,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:b,value:R}of l.getRange({transaction:h,start:!1}))if(s.some(L=>b.startsWith?.(L+"/"))){E.put(b,R);let[,L]=b.split("/"),H=!L,P=new sC(!H,H);await S(b,P)}e.include_audit&&await S(D2,Object.assign({},w2)),await f;let T=nC(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=y2(o.path);return o.transaction(()=>{let _=Buffer.alloc(Gp);b2(c,_,0,Gp),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=nC(null,{fd:c,start:Gp}),f=new A2.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(M2,"getBackup")});var lC=g((Cle,uC)=>{"use strict";var U2=K(),{handleHDBError:P2}=ne(),v2=Fb(),B2=T_(),H2=ap(),x2=gI(),G2=Gc(),F2=Ep(),q2=KI(),k2=tw(),V2=Vc(),$2=uw(),Y2=gw(),K2=Iw(),W2=Cw(),Q2=Uw(),z2=Fw(),J2=Op(),X2=$w(),j2=Jw(),Z2=jw(),cC=rC(),eJ=oC(),Fp=class extends v2{static{a(this,"LMDBBridge")}async searchByConditions(t){return $2(t)}async getDataByHash(t){return await F2(t)}async searchByHash(t){return await q2(t)}async getDataByValue(t,r){return await k2(t,r)}async searchByValue(t){return await V2(t)}async createSchema(t){return await x2(t)}async dropSchema(t){return await Y2(t)}async createTable(t,r){return await K2(t,r)}async dropTable(t){return await J2(t)}async createAttribute(t){return await B2(t)}async createRecords(t){return await H2(t)}async updateRecords(t){return await W2(t)}async upsertRecords(t){try{return await Q2(t)}catch(r){throw P2(r,null,null,U2.ERR,r)}}async deleteRecords(t){return await G2(t)}async dropAttribute(t){return await X2(t)}async deleteAuditLogsBefore(t){return await z2(t)}async readAuditLog(t){return await j2(t)}writeTransaction(t,r,n){return Z2.writeTransaction(t,r,n)}flush(t,r){return cC.flush(t,r)}resetReadTxn(t,r){return cC.resetReadTxn(t,r)}getBackup(t){return eJ(t)}};uC.exports=Fp});function iJ(){sJ=setInterval(function(){for(let e of qp)if(e.stale){let t=e[Oe]?.url;fC.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},nJ).unref()}var kp,dC,fC,tJ,qp,rJ,Qc,_C,Xi,J_,nJ,sJ,Vp=Re(()=>{kp=x(Dr()),dC=x(ne()),fC=x(K());bn();xo();tJ=100,qp=new Set,rJ=25e3,Xi=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;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.readTxnsUsed=1,o_(()=>{this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0)}),qp.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),o_(()=>{this.readTxn.use()}),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(qp.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(Qc&&performance.now()-_C>rJ)throw new dC.ServerError("Outstanding write transactions have too long of queue, please try again later",503)}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,kp.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length)try{let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{try{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let T=S();E?E.push?E.push(T):E=[E,T]:E=T}}E&&await(E.push?Promise.all(E):E)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(l){throw this.abort(),l}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,n)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){n>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);s=s||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<tJ>>n?u():s=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),s)return Qc||(Qc=s,_C=performance.now(),Qc.then(()=>{Qc=null})),s.then(l=>l?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=n+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},J_=class extends Xi{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,kp.getNextMonotonicTime)())}getReadTxn(){}},nJ=3e4;a(iJ,"startMonitoringTxns");iJ()});function ze(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 Xi;e.timestamp&&(n.timestamp=e.timestamp),n[Oe]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let u=n.commit({letItLinger:r?.letItLinger});return u.then?u.then(()=>c):c}function o(c){throw n.abort({}),c}}var EC,ji=Re(()=>{EC=require("../../index");bn();Vp();a(ze,"transaction");(0,EC._assignPackageExport)("transaction",ze);ze.commit=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};ze.abort=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var OC={};$e(OC,{ResourceBridge:()=>Kp});function Wp({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 mC(e,t){let r=es(e),n=Wp(e,r);if(!r)throw new Cn.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},o;ze(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:s,select:n},i);return l=l&&j_(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function es(e){let t=e.database||e.schema||aJ,r=Dn()[t];if(!r)throw(0,Cn.handleHDBError)(new Error,oJ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function pC(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*SC(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(u)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[u]})}n&&(yield n)}var TC,X_,Cn,gC,RC,Ln,$p,Yp,AC,oJ,aJ,cJ,uJ,hC,Kp,bC=Re(()=>{"use strict";TC=x(lC()),X_=x(jo()),Cn=x(ne());Ae();gC=x(Dc()),RC=x(Mc()),Ln=x(U()),$p=x(gs()),Yp=x(wn()),AC=x(z());ji();Z_();({HDB_ERROR_MSGS:oJ}=Cn.hdb_errors),aJ="data",cJ=1e4,uJ=10,Kp=class extends TC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),hC=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,X_.default)(t,"conditions");if(r)throw(0,Cn.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=es(t);if(!n)throw new Cn.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:Wp(t,n),sort:t.sort,allowFullScan:!0})}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 Cn.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}]}at({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await es(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=es(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,u)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,u),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){es(t).dropTable()}createSchema(t){return zc({database:t.schema,table:null}),$p.signalSchemaChange(new Yp.SchemaEventMsg(process.pid,Ln.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Qp(t.schema),$p.signalSchemaChange(new Yp.SchemaEventMsg(process.pid,Ln.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,hC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,gC.default)(t);(0,RC.default)(t,n,r.primaryKey);let s,i=Dn()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return ze(o,async c=>{if(!i.schemaDefined){s=[];for(let l of n)i.attributes.find(f=>f.name==l)||s.push(l);s.length>0&&await i.addAttributes(s.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=j_(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=Dn()[t.schema][t.table],n={user:t.hdb_user};return ze(n,async s=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,n)?o.push(u):c.push(u);return pC(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Dn()[t.schema][t.table];if(!r.createdTimeProperty)throw new Cn.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:Ln.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,AC.async_set_timeout)(uJ),u=[],s=!0},"chunkDelete");for await(let l of n)u.push(l[r.primaryKey]),c++,c%cJ===0&&await _();return u.length>0&&await _(),s?pC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,X_.default)(t,"hashes");if(r)throw r;return mC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of mC(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Ln.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,X_.default)(t,"value");if(n)throw n;let s=es(t);if(!s)throw new Cn.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===Ln.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,select:Wp(t,s)})}async getDataByValue(t,r){let n=new Map,s=es(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){es({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return es(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=es(t),n={};switch(t.search_type){case Ln.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case Ln.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of SC(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return SC(r,t.search_values?.[0],t.search_values?.[1])}}};a(Wp,"getSelect");a(mC,"getRecords");a(es,"getTable");a(pC,"createDeleteResponse");a(SC,"groupRecordsInHistory")});var In=g((Yle,yC)=>{"use strict";var{ResourceBridge:lJ}=(bC(),se(OC)),_J=re();_J.initSync();var ed;function dJ(){return ed||(ed=new lJ,ed)}a(dJ,"getBridge");yC.exports=dJ()});var CC=g((Wle,wC)=>{"use strict";var NC=require("lodash"),Jc=require("mathjs"),fJ=require("jsonata"),IC=z();wC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?NC.uniqWith(e,NC.isEqual):e,searchJSON:EJ,mad:Xc.bind(null,Jc.mad),mean:Xc.bind(null,Jc.mean),mode:Xc.bind(null,Jc.mode),prod:Xc.bind(null,Jc.prod),median:Xc.bind(null,Jc.median)};function Xc(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(Xc,"aggregateFunction");function EJ(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(IC.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),IC.isEmpty(this.__ala__.res[r])){let n=fJ(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(EJ,"searchJSON")});var LC=g((zle,DC)=>{"use strict";var ft=require("moment"),zp="YYYY-MM-DDTHH:mm:ss.SSSZZ";ft.suppressDeprecationWarnings=!0;DC.exports={current_date:()=>ft().utc().format("YYYY-MM-DD"),current_time:()=>ft().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return ft(e).utc().format("YYYY");case"month":return ft(e).utc().format("MM");case"day":return ft(e).utc().format("DD");case"hour":return ft(e).utc().format("HH");case"minute":return ft(e).utc().format("mm");case"second":return ft(e).utc().format("ss");case"millisecond":return ft(e).utc().format("SSS");default:break}},date:e=>ft(e).utc().format(zp),date_format:(e,t)=>ft(e).utc().format(t),date_add:(e,t,r)=>ft(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>ft(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=ft(e).utc(),s=ft(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>ft().utc().valueOf(),get_server_time:()=>ft().format(zp),offset_utc:(e,t)=>ft(e).utc().utcOffset(t).format(zp)}});var vC=g((Jle,PC)=>{"use strict";var hJ=require("@turf/area"),mJ=require("@turf/length"),pJ=require("@turf/circle"),SJ=require("@turf/difference"),TJ=require("@turf/distance"),gJ=require("@turf/boolean-contains"),RJ=require("@turf/boolean-equal"),AJ=require("@turf/boolean-disjoint"),OJ=require("@turf/helpers"),MC=U(),me=z(),Os=K();PC.exports={geoArea:bJ,geoLength:yJ,geoCircle:NJ,geoDifference:IJ,geoDistance:UC,geoNear:wJ,geoContains:CJ,geoEqual:DJ,geoCrosses:LJ,geoConvert:MJ};function bJ(e){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return hJ.default(e)}catch(t){return Os.trace(t,e),NaN}}a(bJ,"geoArea");function yJ(e,t){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return mJ.default(e,{units:t||"kilometers"})}catch(r){return Os.trace(r,e),NaN}}a(yJ,"geoLength");function NJ(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return pJ.default(e,t,{units:r||"kilometers"})}catch(n){return Os.trace(n,e,t),NaN}}a(NJ,"geoCircle");function IJ(e,t){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return SJ(e,t)}catch(r){return Os.trace(r,e,t),NaN}}a(IJ,"geoDifference");function UC(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return TJ.default(e,t,{units:r||"kilometers"})}catch(n){return Os.trace(n,e,t),NaN}}a(UC,"geoDistance");function wJ(e,t,r,n){if(me.isEmpty(e)||me.isEmpty(t))return!1;if(me.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return UC(e,t,n)<=r}catch(s){return Os.trace(s,e,t),!1}}a(wJ,"geoNear");function CJ(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return gJ.default(e,t)}catch(r){return Os.trace(r,e,t),!1}}a(CJ,"geoContains");function DJ(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return RJ.default(e,t)}catch(r){return Os.trace(r,e,t),!1}}a(DJ,"geoEqual");function LJ(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return!AJ.default(e,t)}catch(r){return Os.trace(r,e,t),!1}}a(LJ,"geoCrosses");function MJ(e,t,r){if(me.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(me.isEmpty(t))throw new Error("geo_type is required");if(me.isEmpty(MC.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(MC.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=me.autoCastJSON(e)),OJ[t](e,r)}a(MJ,"geoConvert")});var td=g((jle,BC)=>{var Zi=CC(),Hr=LC(),ts=vC();BC.exports=e=>{e.aggr.mad=e.aggr.MAD=Zi.mad,e.aggr.mean=e.aggr.MEAN=Zi.mean,e.aggr.mode=e.aggr.MODE=Zi.mode,e.aggr.prod=e.aggr.PROD=Zi.prod,e.aggr.median=e.aggr.MEDIAN=Zi.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Zi.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Zi.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Hr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Hr.current_time,e.fn.extract=e.fn.EXTRACT=Hr.extract,e.fn.date=e.fn.DATE=Hr.date,e.fn.date_format=e.fn.DATE_FORMAT=Hr.date_format,e.fn.date_add=e.fn.DATE_ADD=Hr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Hr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Hr.date_diff,e.fn.now=e.fn.NOW=Hr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Hr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Hr.get_server_time,e.fn.getdate=e.fn.GETDATE=Hr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Hr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=ts.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=ts.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=ts.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=ts.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=ts.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=ts.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=ts.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=ts.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=ts.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=ts.geoNear}});var FC=g((Zle,GC)=>{"use strict";var jc=require("lodash"),lr=require("alasql");lr.options.cache=!1;var UJ=td(),HC=require("clone"),rd=require("recursive-iterator"),le=K(),we=z(),ta=In(),PJ=U(),{hdb_errors:vJ}=ne(),{getDatabases:xC}=(Ae(),se(Fe)),BJ="IS NULL",Mn="There was a problem performing this search. Please check the logs and try again.";UJ(lr);var Jp=class{static{a(this,"SQLSearch")}constructor(t,r){if(we.isEmpty(t))throw le.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(),we.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!we.isEmptyOrZeroLength(n))return le.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw le.error("Error thrown from checkEmptySQL in SQLSearch class method search."),le.error(n),new Error(Mn)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw le.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),le.error(n),new Error(Mn)}if(Object.keys(this.data).length===0)return le.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw le.error("Error thrown from processJoins in SQLSearch class method search."),le.error(n),new Error(Mn)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw le.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),le.error(n),new Error(Mn)}try{return t=await this._finalSQL(),t}catch(n){throw le.error("Error thrown from finalSQL in SQLSearch class method search."),le.error(n),new Error(Mn)}}_getColumns(){let t=new rd(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(HC(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=jc.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=xC()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(we.isEmpty(this.statement.where)){le.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new rd(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!we.isEmpty(r)&&r.right)if(we.isNotEmptyAndHasValue(r.right.value)){let n=we.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new lr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=we.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new lr.yy.LogicValue({value:i}):n instanceof lr.yy.StringValue&&we.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new lr.yy.NumValue({value:i}))});if(t){le.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new rd(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(!we.isEmpty(PJ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(we.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(we.isEmptyOrZeroLength(r.left.columnid)||we.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(we.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"=":!we.isEmpty(r.right.value)||!we.isEmpty(r.left.value)?n.add(we.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)n.add(u[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(we.isEmptyOrZeroLength(this.all_table_attributes)&&we.isEmptyOrZeroLength(this.statement.from)&&we.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&&jc.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(we.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);we.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(we.isEmptyOrZeroLength(this.all_table_attributes)&&!we.isEmptyOrZeroLength(this.columns.columns))return t;if(we.isEmptyOrZeroLength(this.all_table_attributes)&&we.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await lr.promise(r)}catch(r){throw le.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),le.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(HC(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(we.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(BJ)>-1&&this.tables.forEach(s=>{let i={columnid:xC()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=jc.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},u=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(u=!0),!we.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!we.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await ta.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(l){throw le.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),le.error(l),new Error(Mn)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await ta.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]):(this.data[i].__merged_data[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,E))}))}catch(l){throw le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),le.error(l),new Error(Mn)}else if(!we.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!we.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await ta.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...n[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]):(this.data[i].__merged_data[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,p))}}catch(l){throw le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),le.error(l),new Error(Mn)}else try{c.search_attribute=s.attribute,c.search_value="*";let l=await ta.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]),this._setMergedHashAttribute(i,d))}catch(l){throw le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),le.error(l),new Error(Mn)}}}_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 lr.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 lr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new lr.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 lr.yy.FuncValue:new lr.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(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,p=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${p}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${p}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"";u=u.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,s);f=await lr.promise(h,t),t=null}catch(E){throw le.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),le.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let p=f[E];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),p=jc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,T=p.length;S<T;S++){let b=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[b]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new rd(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=jc.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 le.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),le.error(i),new Error(Mn)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},u=await ta.getDataByHash(c),_=s.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let p=s.columns[h],S=E[p]===void 0?null:E[p];this.data[n].__merged_data[f].push(S)}}}}catch(r){throw le.error("Error thrown from getDataByHash function in SQLSearch class method getData."),le.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===u}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();le.trace(`Final SQL: ${s}`),n=await lr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),le.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw le.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),le.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 le.error(vJ.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),le.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=s[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;n=n.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(u,_)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await ta.getDataByValue(i);for(let[c,u]of o)this.data[s].__merged_data[c]||(u[n.attribute]===void 0&&(u[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=u[n.attribute]??null}catch(o){throw le.error("There was an error when processing this SQL operation. Check your logs"),le.error(o),new Error(Mn)}}return Object.values(Object.values(this.data)[0].__merged_data)}};GC.exports=Jp});var Ur=g((t_e,qC)=>{"use strict";var HJ=xb();qC.exports={searchByConditions:GJ,searchByHash:FJ,searchByValue:qJ,search:kJ};var Xp=In(),{transformReq:jp}=z(),xJ=FC();async function GJ(e){return jp(e),Xp.searchByConditions(e)}a(GJ,"searchByConditions");async function FJ(e){jp(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Xp.searchByHash(e))r&&t.push(r);return t}a(FJ,"searchByHash");async function qJ(e){jp(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Xp.searchByValue(e))t.push(r);return t}a(qJ,"searchByValue");function kJ(e,t){try{let r=new HJ(e);r.validate(),new xJ(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(kJ,"search")});var nd=g((n_e,kC)=>{"use strict";var VJ=In();kC.exports={writeTransaction:$J};function $J(e,t,r){return VJ.writeTransaction(e,t,r)}a($J,"writeTransaction")});var KC=g((o_e,YC)=>{"use strict";var YJ=Ur(),KJ=js(),VC=K(),WJ=rn(),i_e=nd(),QJ=require("clone"),eS=require("alasql"),zJ=td(),$C=require("util"),JJ=$C.promisify(KJ.getTableSchema),XJ=$C.promisify(YJ.search),jJ=U(),Zp=z();zJ(eS);YC.exports={update:e4};var ZJ="There was a problem performing this update. Please check the logs and try again.";async function e4({statement:e,hdb_user:t}){let r=await JJ(e.table.databaseid,e.table.tableid),n=t4(e.columns);Zp.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=QJ(s),c=Zp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=eS.parse(u).statements[0],l=await XJ(_),d=r4(n,l);return n4(o,d,t)}a(e4,"update");function t4(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=eS.compile(`SELECT ${r.expression.toString()} AS [${jJ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw VC.error(t),new Error(ZJ)}}a(t4,"createUpdateRecord");function r4(e,t){return Zp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(r4,"buildUpdateRecords");async function n4(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await WJ.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){VC.error(`Error delete new_attributes from update response: ${i}`)}return s}a(n4,"updateRecords")});var QC=g((l_e,WC)=>{var s4=require("alasql"),i4=Ur(),o4=K(),a4=In(),rS=require("util"),tS=z(),c4=U(),u4=js(),c_e=nd(),u_e=rn(),l4="record",_4="successfully deleted",d4=rS.callbackify(m4),f4=rS.promisify(i4.search),E4=rS.promisify(u4.getTableSchema);WC.exports={convertDelete:d4};function h4(e){return`${e.deleted_hashes.length} ${l4}${e.deleted_hashes.length===1?"":"s"} ${_4}`}a(h4,"generateReturnMessage");async function m4({statement:e,hdb_user:t}){let r=await E4(e.table.databaseid,e.table.tableid);tS.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=tS.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=s4.parse(o).statements[0],u={operation:c4.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await f4(c);let _=await a4.deleteRecords(u);return tS.isEmptyOrZeroLength(_.message)&&(_.message=h4(_)),delete _.txn_time,_}catch(_){throw o4.error(_),_.hdb_code?_.message:_}}a(m4,"convertDelete")});var ZC=g((d_e,jC)=>{"use strict";var p4=Fi(),{hdb_errors:zC}=ne(),{getDatabases:JC}=(Ae(),se(Fe));jC.exports={checkSchemaExists:XC,checkSchemaTableExists:S4,schema_describe:p4};async function XC(e){if(!JC()[e])return zC.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(XC,"checkSchemaExists");async function S4(e,t){let r=await XC(e);if(r)return r;if(!JC()[e][t])return zC.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(S4,"checkSchemaTableExists")});var Zc=g((E_e,T4)=>{T4.exports={name:"harperdb",version:"4.3.0-beta.9",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/abort-controller":"3.374.0","@aws-sdk/client-s3":"3.477.0","@aws-sdk/lib-storage":"3.477.0","@endo/static-module-record":"^1.0.0","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.11.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.1",fastify:"~4.25.1","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.10.0-beta.5",lodash:"4.17.21",mathjs:"11.11.2",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.19.0",needle:"3.2.0","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.3.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.0.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.20","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.15.1",yaml:"2.3.4"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.2",chai:"4.3.7","chai-integer":"0.1.0",esbuild:"^0.19.1",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.22.11","newman-reporter-teamcity":"0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.3.3","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var su={};$e(su,{addAnalyticsListener:()=>nu,recordAction:()=>xr,recordActionBinary:()=>sn,setAnalyticsEnabled:()=>g4});function g4(e){cD=e}function xr(e,t,r,n,s){if(!cD)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=od.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},od.set(i,o)}sd||R4()}function sn(e,t,r,n,s){xr(!!e,t,r,n,s)}function nu(e){_D.push(e)}function R4(){sd=performance.now(),setTimeout(async()=>{let e=performance.now()-sd;sd=0;let t=[],r={time:Date.now(),period:e,threadId:eo.threadId,metrics:t};for(let[s,i]of od){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of dD){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await fD()}let n=process.memoryUsage();t.push({metric:"memory",threadId:eo.threadId,byThread:!0,...n});for(let s of _D)s(t);od=new Map,eo.parentPort?eo.parentPort.postMessage({type:lD,report:r}):mD({report:r})},uD).unref()}async function A4(e,t=6e4){let r=iS(),n=ED(),s=new Promise(p=>{let S=performance.now();setImmediate(()=>{let T=performance.now();T-S>5e3&&(0,eu.warn)("Unusually high event queue latency on the main thread of "+Math.round(T-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let T=performance.now();T-S>5e3&&(0,eu.warn)("Unusually high task queue latency on the main thread of "+Math.round(T-S)+"ms"),p(T-S)})}),i;for(let p of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(p.value?.time){i=p.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,u=new Map,_=[],l;for(let{key:p,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(p>o+t)break}else o=p;l=p;let{metrics:T,threadId:b}=S;for(let R of T||[]){let{path:L,method:H,type:P,metric:k,count:B,total:J,distribution:Q,threads:X,...Te}=R;B||(B=1);let ce=k+(L?"-"+L:"");H!==void 0&&(ce+="-"+H),P!==void 0&&(ce+="-"+P);let de=c.get(ce);if(de){if(de.threads){let Be=de.threads[b];if(Be)de=Be;else{de.threads[b]=Object.assign({},Te);continue}}de.count||(de.count=1);let Le=de.count;for(let Be in Te){let Ct=Te[Be];typeof Ct=="number"&&(de[Be]=(de[Be]*Le+Ct*B)/(Le+B))}de.count+=B,J>=0&&(de.total+=J,de.ratio=de.total/de.count)}else de=Object.assign({period:t},R),delete de.distribution,c.set(ce,de),de.byThread&&(de.threads=[],de.threads[b]=Object.assign({},Te),_.push(de));if(Q){Q=Q.map(Be=>typeof Be=="number"?{value:Be,count:1}:Be);let Le=u.get(ce);Le?Le.push(...Q):u.set(ce,Q)}}await fD()}for(let p of _){let{path:S,method:T,type:b,metric:R,count:L,total:H,distribution:P,threads:k,...B}=p;k=k.filter(J=>J);for(let J in B){if(typeof p[J]!="number")continue;let Q=0;for(let X of k){let Te=X[J];typeof Te=="number"&&(Q+=Te)}p[J]=Q}p.count=k.length,delete p.threads,delete p.byThread}for(let[p,S]of u){let T=c.get(p);S.sort((Be,Ct)=>Be.value>Ct.value?1:-1);let b=T.count-1,R=[],L=0,H=0,P;for(let Be of dD){let Ct=b*Be;for(;L<Ct;)P=S[H++],L+=P.count,H===1&&L--;let Ll=S[H>1?H-2:0];P||(P=S[0]),R.push(P.value-(P.value-Ll.value)*(L-Ct)/P.count)}let[k,B,J,Q,X,Te,ce,de,Le]=R;Object.assign(T,{p1:k,p10:B,p25:J,median:Q,p75:X,p90:Te,p95:ce,p99:de,p999:Le})}let d;for(let[p,S]of c)S.id=(0,id.getNextMonotonicTime)(),S.time=l,n.primaryStore.put(S.id,S,{append:!0}).then(T=>{T||n.primaryStore.put(S.id,S)}),d=!0;let f=Date.now(),{idle:E,active:h}=performance.eventLoopUtilization();if(d||h*10>E){let p=(0,id.getNextMonotonicTime)(),S={id:p,metric:"main-thread-utilization",idle:E-eD,active:h-tD,taskQueueLatency:await s,time:f,...process.memoryUsage()};n.primaryStore.put(p,S,{append:!0}).then(T=>{T||n.primaryStore.put(p,S)})}eD=E,tD=h}async function rD(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function iS(){return nD||(nD=at({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function ED(){return sD||(sD=at({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function y4(){hD=!0;let e=(0,ru.get)(sS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await A4(uD,e),await rD(iS(),O4),await rD(ED(),b4)},Math.min(e/2,2147483647)).unref()}function mD(e,t){let r=e.report;r.threadId=t?.threadId||eo.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(iD+=n.mean*n.count);r.totalBytesProcessed=iD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(oD.get(t))}),oD.set(t,t.performance.eventLoopUtilization())),r.id=(0,id.getNextMonotonicTime)(),iS().primaryStore.put(r.id,r),hD||y4(),N4&&(pD=w4(r))}async function w4(e){if(await pD,!si){let r=(0,tu.dirname)((0,eu.getLogFilePath)());try{si=await(0,nS.open)((0,tu.join)(r,"analytics.log"),"r+")}catch{si=await(0,nS.open)((0,tu.join)(r,"analytics.log"),"w+")}}let t=(await si.stat()).size;if(t>I4){let r=Buffer.alloc(t);await si.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await si.write(r,{position:0}),await si.truncate(r.length),t=r.length}await si.write(JSON.stringify(e)+`
8
+ `,t)}var eo,aD,eu,tu,nS,id,ru,sS,od,cD,sd,uD,lD,_D,dD,eD,tD,fD,O4,b4,nD,sD,hD,iD,oD,N4,pD,si,I4,bs=Re(()=>{eo=require("worker_threads"),aD=x(et());Ae();eu=x(K()),tu=require("path"),nS=require("fs/promises"),id=x(Dr()),ru=x(re()),sS=x(U());ir();(0,ru.initSync)();od=new Map,cD=(0,ru.get)(sS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(g4,"setAnalyticsEnabled");a(xr,"recordAction");Ze.recordAnalytics=xr;a(sn,"recordActionBinary");sd=0,uD=1e3,lD="analytics-report",_D=[];a(nu,"addAnalyticsListener");dD=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(R4,"sendAnalytics");a(A4,"aggregation");eD=0,tD=0,fD=a(()=>new Promise(setImmediate),"rest");a(rD,"cleanup");O4=36e5,b4=31536e6;a(iS,"getRawAnalyticsTable");a(ED,"getAnalyticsTable");(0,aD.setChildListenerByType)(lD,mD);a(y4,"startScheduledTasks");iD=0,oD=new Map,N4=!1;a(mD,"recordAnalytics");I4=1e6;a(w4,"logAnalytics")});var _S=g((N_e,ID)=>{"use strict";var{decode:C4}=require("msgpackr"),{isMainThread:b_e,parentPort:D4,threadId:y_e}=require("worker_threads"),iu=bt(),ra=rt(),cS=U(),zt=K(),aS=re(),TD=U(),{onMessageByType:L4}=et(),gD=Ts(),{recordAction:M4,recordActionBinary:U4}=(bs(),se(su)),{publishToStream:P4}=iu,{ConsumerEvents:v4}=require("nats"),B4=Ur(),{promisify:H4}=require("util"),RD=H4(setTimeout),ud=1e4,ld,cd,x4,G4,AD,ou=new Map,na=new Map;ID.exports={initialize:uS,ingestConsumer:lS,setSubscription:F4,setIgnoreOrigin:V4,getDatabaseSubscriptions:k4,updateConsumer:OD};async function uS(){L4(cS.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await OD(n)}),AD=!0,zt.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await iu.getNATSReferences();ld=e,cd=e.info.server_name,x4=t,G4=r}a(uS,"initialize");async function OD(e){if(e.status==="start"){let{js:t,jsm:r}=await bD(e.node_domain_name);lS(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=ou.get(e.stream_name+e.node_domain_name);t&&(zt.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),ou.set(e.stream_name+e.node_domain_name,"close")),na.get(e.node_domain_name)==="failed"&&na.set(e.node_domain_name,"close")}}a(OD,"updateConsumer");var _d=new Map;function F4(e,t,r){let n=_d.get(e);n||_d.set(e,n=new Map),n.set(t,r),AD||uS().then(q4)}a(F4,"setSubscription");async function q4(){let e=await B4.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+ra.SERVER_SUFFIX.LEAF,{js:n,jsm:s}=await bD(r);if(s){for(let i of t.subscriptions)if(i.subscribe===!0){let{schema:o,table:c}=i,u=gD.createNatsTableStreamName(o,c);lS(u,n,s,r)}}}}a(q4,"accessConsumers");async function bD(e){let t,r,n=1;for(;!r;)try{t=await ld.jetstream({domain:e,timeout:6e4}),r=await ld.jetstreamManager({domain:e,timeout:6e4})}catch(s){if(na.get(e)==="close")break;na.set(e,"failed"),n%10===1&&zt.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<ud?n++*100:ud;await RD(i)}return{js:t,jsm:r}}a(bD,"connectToRemoteJS");function k4(){return _d}a(k4,"getDatabaseSubscriptions");var yD;function V4(e){yD=e}a(V4,"setIgnoreOrigin");var ND=100,SD=new Array(ND),ad=0;async function lS(e,t,r,n){let{connection:s}=await iu.getNATSReferences();ld=s,cd=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,cd),zt.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(na.get(n)==="close")break;o%10===1&&zt.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(zt.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await iu.createConsumer(r,e,cd,new Date(Date.now()).toISOString()));let l=o++*100<ud?o++*100:ud;await RD(l)}let c=!1,u;for(D4?.on("message",async _=>{let{type:l}=_;l===TD.ITC_EVENT_TYPES.SHUTDOWN&&(c=!0,u&&u.close?.()&&u.close())});!c;){if(ou.get(e+n)==="close"||na.get(n)==="close"){ou.delete(e+n),c=!0;continue}u=await i.consume({max_messages:aS.get(cS.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100}),ou.set(e+n,u);let _=!1;(async()=>{for await(let l of await u.status())if(l.type===v4.HeartbeatsMissed){let d=l.data;zt.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${u.consumer.stream}`),d===2&&(zt.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${u.consumer.stream}`),u.stop(),_=!0)}})();try{for await(let l of u)await SD[ad],SD[ad]=$4(l).catch(d=>{zt.error(d)}),++ad>=ND&&(ad=0)}catch(l){l.message==="consumer deleted"?(zt.notify("Nats consumer deleted, closing messages for node:",n,"stream:",u.consumer.stream),await u.close(),c=!0):zt.error("Error consuming clustering ingest, restarting consumer",l)}iu.clearClientCache(),!c&&_&&await uS()}}a(lS,"ingestConsumer");async function $4(e){let t=C4(e.data);M4(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),zt.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=aS.get(cS.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(ra.MSG_HEADERS.TRANSACTED_NODES)&&r.values(ra.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(ra.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!yD),U4(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(ra.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;zt.trace("processing message:",o,c,_,(l?"records: "+l.map(L=>L?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),zt.trace(`messageProcessor nats msg id: ${e.headers.get(ra.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let p=new Promise(L=>h=L),{timestamp:S,user:T,node_name:b}=f||{},R=_d.get(c)?.get(_);if(!R)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,t.onCommit=h,R.send(t);else if(l.length===1&&!u)R.send({type:oS(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:S,table:_,onCommit:h,user:T,nodeName:b});else{let L=l.map((H,P)=>({type:oS(o),value:H,expiresAt:E,id:d?.[P],table:_}));for(;u;)L.push({type:oS(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;R.send({type:"transaction",writes:L,table:_,timestamp:S,onCommit:h,user:T,nodeName:b})}aS.get(TD.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&P4(e.subject.split(".").slice(0,-1).join("."),gD.createNatsTableStreamName(c,_),e.headers,e.data),await p}catch(o){zt.error(o)}e.ack()}a($4,"messageProcessor");function oS(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(oS,"convertOperation")});var bt=g((U_e,$D)=>{"use strict";var Mt=re();Mt.initSync();var Y4=require("fs-extra"),K4=require("semver"),uu=require("path"),{monotonicFactory:W4}=require("ulidx"),CD=W4(),Q4=require("util"),DD=require("child_process"),z4=Q4.promisify(DD.exec),J4=DD.spawn,qt=rt(),Ce=U(),dd=z(),Un=K(),fd=Ts(),X4=nd(),au=Cr(),{broadcast:j4,onMessageByType:Z4,getWorkerIndex:e3}=et(),{isMainThread:LD}=require("worker_threads"),{Encoder:t3,decode:hS}=require("msgpackr"),MD=new t3,{isEmpty:so}=dd,UD=nn(),w_e=48*36e11;LD&&Z4(Ce.ITC_EVENT_TYPES.RESTART,()=>{_r=void 0,no=void 0});var{connect:r3,StorageType:n3,RetentionPolicy:s3,AckPolicy:mS,DeliverPolicy:pS,DiscardPolicy:i3,NatsConnection:C_e,JetStreamManager:D_e,JetStreamClient:L_e,StringCodec:M_e,JSONCodec:o3,createInbox:SS,headers:a3,ErrorCode:wD}=require("nats"),{PACKAGE_ROOT:c3}=U(),u3=Zc(),{recordAction:l3}=(bs(),se(su)),PD=o3(),_3="clustering",d3=u3.engines[qt.NATS_SERVER_NAME],f3=uu.join(c3,"dependencies"),ES=uu.join(f3,`${process.platform}-${process.arch}`,qt.NATS_BINARY_NAME),dS,fS,cu,to,ro;$D.exports={runCommand:vD,checkNATSServerInstalled:E3,createConnection:TS,getConnection:Ed,getJetStreamManager:lu,getJetStream:HD,getNATSReferences:Pn,getServerList:m3,createLocalStream:gS,listStreams:xD,deleteLocalStream:p3,getServerConfig:_u,listRemoteStreams:S3,viewStream:T3,viewStreamIterator:g3,publishToStream:R3,request:b3,reloadNATS:RS,reloadNATSHub:y3,reloadNATSLeaf:N3,extractServerName:O3,requestErrorHandler:I3,createLocalTableStream:kD,createTableStreams:D3,purgeTableStream:VD,purgeSchemaTableStreams:L3,getStreamInfo:M3,updateLocalStreams:P3,closeConnection:h3,getJsmServerName:hd,addNatsMsgHeader:GD,clearClientCache:BD,updateRemoteConsumer:w3,createConsumer:FD,updateConsumerIterator:C3};async function vD(e,t=void 0){let{stdout:r,stderr:n}=await z4(e,{cwd:t});if(n)throw new Error(n.replace(`
9
9
  `,""));return r.replace(`
10
10
  `,"")}a(vD,"runCommand");async function E3(){try{await Y4.access(ES)}catch{return!1}let e=await vD(`${ES} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return K4.eq(t,d3)}a(E3,"checkNATSServerInstalled");async function TS(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await UD.getClusterUser();if(so(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Un.trace("create nats connection called");let i=await r3({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Un.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Un.error("Error with Nats client connection, connection closed",o),BD()}),i}a(TS,"createConnection");function BD(){_r=void 0,to=void 0,ro=void 0,no=void 0}a(BD,"clearClientCache");async function h3(){_r&&(await _r.drain(),_r=void 0,to=void 0,ro=void 0,no=void 0)}a(h3,"closeConnection");var _r,no;async function Ed(){return no||(no=TS(Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),_r=await no),_r||no}a(Ed,"getConnection");async function lu(){if(to)return to;so(_r)&&await Ed();let{domain:e}=_u(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(so(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return to=await _r.jetstreamManager({domain:e,timeout:6e4}),to}a(lu,"getJetStreamManager");async function HD(){if(ro)return ro;so(_r)&&await Ed();let{domain:e}=_u(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(so(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ro=_r.jetstream({domain:e,timeout:6e4}),ro}a(HD,"getJetStream");async function Pn(){let e=_r||await Ed(),t=to||await lu(),r=ro||await HD();return{connection:e,jsm:t,js:r}}a(Pn,"getNATSReferences");async function m3(e){let t=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await UD.getClusterUser(),s=await TS(t,r,n),i=SS(),o=s.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=PD.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await dd.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(m3,"getServerList");async function gS(e,t){let{jsm:r}=await Pn(),n=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:n3.File,retention:s3.Limits,subjects:t,discard:i3.Old,max_msgs:s,max_bytes:i,max_age:n})}a(gS,"createLocalStream");async function xD(){let{jsm:e}=await Pn(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(xD,"listStreams");async function p3(e){let{jsm:t}=await Pn();await t.streams.delete(e)}a(p3,"deleteLocalStream");async function S3(e){let{connection:t}=await Pn(),r=[],n=SS(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(PD.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(S3,"listRemoteStreams");async function T3(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Pn(),i=CD(),o={durable_name:i,ack_policy:mS.Explicit};t&&(o.deliver_policy=pS.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=hS(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(qt.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(T3,"viewStream");async function*g3(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Pn(),i=CD(),o={durable_name:i,ack_policy:mS.Explicit};t&&(o.deliver_policy=pS.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=hS(_.data);l[0]||(l=[l]);for(let d of l){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(qt.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(g3,"viewStreamIterator");async function R3(e,t,r,n){Un.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=GD(n,r);let{js:s}=await Pn(),i=await hd(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:MD.encode(n);try{Un.trace(`publishToStream publishing to subject: ${o}`),l3(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return qD(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Un.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await gS(t,[o]),await s.publish(o,c,{headers:r})}else throw u}});throw u}}a(R3,"publishToStream");function GD(e,t){t===void 0&&(t=a3());let r=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(qt.MSG_HEADERS.ORIGIN)&&r&&t.append(qt.MSG_HEADERS.ORIGIN,r),t}a(GD,"addNatsMsgHeader");function _u(e){e=e.toLowerCase();let t=uu.join(Mt.get(Ce.CONFIG_PARAMS.ROOTPATH),_3);if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return so(fS)&&(fS={port:au.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:au.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+qt.SERVER_SUFFIX.HUB,config_file:qt.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:uu.join(t,qt.PID_FILES.HUB),hdb_nats_path:t}),fS;if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return so(dS)&&(dS={port:au.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:au.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+qt.SERVER_SUFFIX.LEAF,config_file:qt.NATS_CONFIG_FILES.LEAF_SERVER,domain:au.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+qt.SERVER_SUFFIX.LEAF,pid_file_path:uu.join(t,qt.PID_FILES.LEAF),hdb_nats_path:t}),dS;Un.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(_u,"getServerConfig");async function FD(e,t,r,n){try{await e.consumers.add(t,{ack_policy:mS.Explicit,durable_name:r,deliver_policy:pS.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(FD,"createConsumer");async function A3(e,t,r){await e.consumers.delete(t,r)}a(A3,"removeConsumer");function O3(e){return e.split(".")[1]}a(O3,"extractServerName");async function b3(e,t,r=6e4,n=SS()){if(!dd.isObject(t))throw new Error("data param must be an object");let s=MD.encode(t),{connection:i}=await Pn(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return hS(c.data)}a(b3,"request");function RS(e){return new Promise(async(t,r)=>{let n=J4(ES,["--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(RS,"reloadNATS");async function y3(){let{pid_file_path:e}=_u(Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await RS(e)}a(y3,"reloadNATSHub");async function N3(){let{pid_file_path:e}=_u(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await RS(e)}a(N3,"reloadNATSLeaf");function I3(e,t,r){let n;switch(e.code){case wD.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case wD.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(I3,"requestErrorHandler");async function w3(e,t){let r=t+qt.SERVER_SUFFIX.LEAF,{connection:n}=await Pn(),{jsm:s}=await B3(r),{schema:i,table:o}=e,c=fd.createNatsTableStreamName(i,o),u=e.start_time?e.start_time:new Date(Date.now()).toISOString();await qD(async()=>{if(e.subscribe===!0)await FD(s,c,n.info.server_name,u);else try{await A3(s,c,n.info.server_name)}catch(_){Un.trace(_)}})}a(w3,"updateRemoteConsumer");async function C3(e,t,r,n){let s=fd.createNatsTableStreamName(e,t),i=r+qt.SERVER_SUFFIX.LEAF,o={type:Ce.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!LD&&e3()<Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=_S();await c(o)}await j4(o),n==="stop"&&await dd.async_set_timeout(1e3)}a(C3,"updateConsumerIterator");function qD(e){return X4.writeTransaction(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(qD,"exclusiveLock");async function kD(e,t){let r=fd.createNatsTableStreamName(e,t),n=await hd(),s=U3(e,t,n);await gS(r,[s])}a(kD,"createLocalTableStream");async function D3(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await kD(n,s)}}a(D3,"createTableStreams");async function VD(e,t){if(Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=fd.createNatsTableStreamName(e,t),{jsm:n}=await Pn();await n.streams.purge(r)}catch(r){if(r.message==="stream not found")Un.warn(r);else throw r}}a(VD,"purgeTableStream");async function L3(e,t){if(Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await VD(e,t[r])}a(L3,"purgeSchemaTableStreams");async function M3(e){return(await lu()).streams.info(e)}a(M3,"getStreamInfo");function U3(e,t,r){return`${qt.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(U3,"createSubjectName");async function hd(){if(cu)return cu;if(cu=(await lu())?.nc?.info?.server_name,cu===void 0)throw new Error("Unable to get jetstream manager server name");return cu}a(hd,"getJsmServerName");async function P3(){let e=await lu(),t=await hd(),r=await xD();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=v3(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Un.trace(`Updating stream subject name from: ${i} to: ${l}`),s.subjects[0]=l,await e.streams.update(s.name,s)}}a(P3,"updateLocalStreams");function v3(e){let{config:t}=e,r=!1,n=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(v3,"updateStreamLimits");async function B3(e){let t,r;try{t=await _r.jetstream({domain:e,timeout:6e4}),r=await _r.jetstreamManager({domain:e,timeout:6e4})}catch(n){throw Un.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(B3,"connectToRemoteJS")});var Td=g((B_e,QD)=>{"use strict";var sa=p_(),ia=ZC(),H3=K(),x3=require("uuid").v4,v_e=require("clone"),pd=gs(),oa=U(),G3=require("util"),ii=In(),{handleHDBError:dr,hdb_errors:F3}=ne(),{HDB_ERROR_MSGS:md,HTTP_STATUS_CODES:fr}=F3,{SchemaEventMsg:Sd}=wn(),YD=bt(),{getDatabases:q3}=(Ae(),se(Fe)),{transformReq:aa}=z();QD.exports={createSchema:k3,createSchemaStructure:KD,createTable:V3,createTableStructure:WD,createAttribute:Q3,dropSchema:$3,dropTable:Y3,dropAttribute:K3,getBackup:z3};async function k3(e){let t=await KD(e);return pd.signalSchemaChange(new Sd(process.pid,e.operation,e.schema)),t}a(k3,"createSchema");async function KD(e){let t=sa.schema_object(e);if(t)throw dr(t,t.message,fr.BAD_REQUEST,void 0,void 0,!0);if(aa(e),!await ia.checkSchemaExists(e.schema))throw dr(new Error,md.SCHEMA_EXISTS_ERR(e.schema),fr.BAD_REQUEST,oa.LOG_LEVELS.ERROR,md.SCHEMA_EXISTS_ERR(e.schema),!0);return await ii.createSchema(e),`database '${e.schema}' successfully created`}a(KD,"createSchemaStructure");async function V3(e){return aa(e),e.hash_attribute=e.primary_key??e.hash_attribute,await WD(e)}a(V3,"createTable");async function WD(e){let t=sa.create_table_object(e);if(t)throw dr(t,t.message,fr.BAD_REQUEST,void 0,void 0,!0);if(sa.validateTableResidence(e.residence),!await ia.checkSchemaTableExists(e.schema,e.table))throw dr(new Error,md.TABLE_EXISTS_ERR(e.schema,e.table),fr.BAD_REQUEST,oa.LOG_LEVELS.ERROR,md.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:x3(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ii.createTable(n,e);else throw dr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",fr.BAD_REQUEST);else await ii.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(WD,"createTableStructure");async function $3(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=sa.schema_object(e),n=t??r;if(n)throw dr(n,n.message,fr.BAD_REQUEST,void 0,void 0,!0);aa(e);let s=await ia.checkSchemaExists(e.schema);if(s)throw dr(new Error,s,fr.NOT_FOUND,oa.LOG_LEVELS.ERROR,s,!0);let i=await ia.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await ii.dropSchema(e),pd.signalSchemaChange(new Sd(process.pid,e.operation,e.schema)),await YD.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a($3,"dropSchema");async function Y3(e){let t=sa.table_object(e);if(t)throw dr(t,t.message,fr.BAD_REQUEST,void 0,void 0,!0);aa(e);let r=await ia.checkSchemaTableExists(e.schema,e.table);if(r)throw dr(new Error,r,fr.NOT_FOUND,oa.LOG_LEVELS.ERROR,r,!0);return await ii.dropTable(e),await YD.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(Y3,"dropTable");async function K3(e){let t=sa.attribute_object(e);if(t)throw dr(t,t.message,fr.BAD_REQUEST,void 0,void 0,!0);aa(e);let r=await ia.checkSchemaTableExists(e.schema,e.table);if(r)throw dr(new Error,r,fr.NOT_FOUND,oa.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw dr(new Error,"You cannot drop a hash attribute",fr.BAD_REQUEST,void 0,void 0,!0);if(oa.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw dr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,fr.BAD_REQUEST,void 0,void 0,!0);try{return await ii.dropAttribute(e),W3(e),pd.signalSchemaChange(new Sd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw H3.error(`Got an error deleting attribute ${G3.inspect(e)}.`),n}}a(K3,"dropAttribute");function W3(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(W3,"dropAttributeFromGlobal");async function Q3(e){aa(e);let t=q3()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw dr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,fr.BAD_REQUEST,void 0,void 0,!0);return await ii.createAttribute(e),pd.signalSchemaChange(new Sd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(Q3,"createAttribute");function z3(e){return ii.getBackup(e)}a(z3,"getBackup")});var JD=g((x_e,zD)=>{"use strict";var{OPERATIONS_ENUM:J3}=U(),AS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=J3.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};zD.exports=AS});var OS=g((q_e,tL)=>{"use strict";var X3=In(),F_e=JD(),gd=z(),Rd=U(),j3=re(),{handleHDBError:XD,hdb_errors:Z3}=ne(),{HDB_ERROR_MSGS:jD,HTTP_STATUS_CODES:ZD}=Z3,eX=Object.values(Rd.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),eL="To use this operation audit log must be enabled in harperdb-config.yaml";tL.exports=tX;async function tX(e){if(gd.isEmpty(e.schema))throw new Error(jD.SCHEMA_REQUIRED_ERR);if(gd.isEmpty(e.table))throw new Error(jD.TABLE_REQUIRED_ERR);if(!j3.get(Rd.CONFIG_PARAMS.LOGGING_AUDITLOG))throw XD(new Error,eL,ZD.BAD_REQUEST,Rd.LOG_LEVELS.ERROR,eL,!0);let t=gd.checkSchemaTableExist(e.schema,e.table);if(t)throw XD(new Error,t,ZD.NOT_FOUND,Rd.LOG_LEVELS.ERROR,t,!0);if(!gd.isEmpty(e.search_type)&&eX.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await X3.readAuditLog(e)}a(tX,"readAuditLog")});var nL=g((V_e,rL)=>{"use strict";var{OPERATIONS_ENUM:rX}=U(),bS=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=rX.GET_BACKUP,this.schema=t,this.table=r}};rL.exports=bS});var oL=g((W_e,iL)=>{"use strict";var nX=In(),Y_e=nL(),yS=z(),sX=U(),K_e=re(),{handleHDBError:iX,hdb_errors:oX}=ne(),{HDB_ERROR_MSGS:sL,HTTP_STATUS_CODES:aX}=oX;iL.exports=cX;async function cX(e){if(yS.isEmpty(e.schema))throw new Error(sL.SCHEMA_REQUIRED_ERR);if(yS.isEmpty(e.table))throw new Error(sL.TABLE_REQUIRED_ERR);let t=yS.checkSchemaTableExist(e.schema,e.table);if(t)throw iX(new Error,t,aX.NOT_FOUND,sX.LOG_LEVELS.ERROR,t,!0);return await nX.getBackup(read_audit_log_object)}a(cX,"getBackup")});var dL=g((z_e,_L)=>{var oi=require("validate.js"),cL=je(),ca=U(),{handleHDBError:uX,hdb_errors:lX}=ne(),{HDB_ERROR_MSGS:ut,HTTP_STATUS_CODES:_X}=lX,NS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),dX={STRUCTURE_USER:"structure_user"},aL=Object.values(ca.ROLE_TYPES_ENUM),fX="attribute_permissions",EX="attribute_name",{PERMS_CRUD_ENUM:ua}=ca,hX=[fX,...Object.values(ua)],uL=[ua.READ,ua.INSERT,ua.UPDATE],mX=[EX,...uL];function pX(e){let t=NS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,lL(e,t)}a(pX,"addRoleValidation");function SX(e){let t=NS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,lL(e,t)}a(SX,"alterRoleValidation");function TX(e){let t=NS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,cL.validateObject(e,t)}a(TX,"dropRoleValidation");var gX=["operation","role","id","permission","hdb_user","hdb_auth_header"];function lL(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)gX.includes(n[o])||s.push(n[o]);s.length>0&&Et(ut.INVALID_ROLE_JSON_KEYS(s),r);let i=cL.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Et(o,r)}),e.permission){let o=RX(e);o&&Et(o,r),aL.forEach(c=>{e.permission[c]&&!oi.isBoolean(e.permission[c])&&Et(ut.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(aL.indexOf(o)<0){if(o===dX.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||Et(ut.SCHEMA_NOT_FOUND(d),r)}continue}Et(ut.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Et(ut.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){Et(ut.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{hX.includes(l)||Et(ut.INVALID_PERM_KEY(l),r,o,u)}),Object.values(ua).forEach(l=>{oi.isDefined(_[l])?oi.isBoolean(_[l])||Et(ut.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):Et(ut.TABLE_PERM_MISSING(l),r,o,u)}),oi.isDefined(_.attribute_permissions)){if(!oi.isArray(_.attribute_permissions)){Et(ut.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{Et(ut.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(p=>{!mX.includes(p)&&p!==ua.DELETE&&Et(ut.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!oi.isDefined(E.attribute_name)){Et(ut.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){Et(ut.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}uL.forEach(p=>{oi.isDefined(E[p])?oi.isBoolean(E[p])||Et(ut.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):Et(ut.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;Et(ut.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return AX(r)}a(lL,"customValidate");_L.exports={addRoleValidation:pX,alterRoleValidation:SX,dropRoleValidation:TX};function RX(e){let{operation:t,permission:r}=e;if(t===ca.OPERATIONS_ENUM.ADD_ROLE||t===ca.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return ut.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?ca.ROLE_TYPES_ENUM.SUPER_USER:ca.ROLE_TYPES_ENUM.CLUSTER_USER;return ut.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(RX,"validateNoSUPerms");function AX(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:ut.ROLE_PERMS_ERROR,...e};return uX(new Error,n,_X.BAD_REQUEST)}else return null}a(AX,"generateRolePermResponse");function Et(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(Et,"addPermError")});var MS=g((X_e,mL)=>{"use strict";var fL=rn(),EL=Ur(),OX=Yi(),wS=dL(),CS=gs(),bX=require("uuid").v4,yX=require("util"),Ad=U(),NX=z(),DS=EL.searchByValue,IX=EL.searchByHash,wX=yX.promisify(OX.delete),CX=jn(),DX=Zo(),{hdb_errors:LX,handleHDBError:io}=ne(),{HDB_ERROR_MSGS:hL,HTTP_STATUS_CODES:du}=LX,{UserEventMsg:LS}=wn();mL.exports={addRole:MX,alterRole:UX,dropRole:PX,listRoles:vX};function IS(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(IS,"scrubRoleDetails");async function MX(e){let t=wS.addRoleValidation(e);if(t)throw t;e=IS(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await DS(r)||[])}catch(i){throw io(i)}if(n&&n.length>0)throw io(new Error,hL.ROLE_ALREADY_EXISTS(e.role),du.CONFLICT,void 0,void 0,!0);e.id||(e.id=bX());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await fL.insert(s),CS.signalUserChange(new LS(process.pid)),e=IS(e),e}a(MX,"addRole");async function UX(e){let t=wS.alterRoleValidation(e);if(t)throw t;e=IS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await fL.update(r)}catch(s){throw io(s)}if(n&&n?.message==="updated 0 of 1 records")throw io(new Error,"Invalid role id",du.BAD_REQUEST,void 0,void 0,!0);return await CS.signalUserChange(new LS(process.pid)),e}a(UX,"alterRole");async function PX(e){let t=wS.dropRoleValidation(e);if(t)throw io(new Error,t,du.BAD_REQUEST,void 0,void 0,!0);let r=new DX(Ad.SYSTEM_SCHEMA_NAME,Ad.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await IX(r));if(n.length===0)throw io(new Error,hL.ROLE_NOT_FOUND,du.NOT_FOUND,void 0,void 0,!0);let s=new CX(Ad.SYSTEM_SCHEMA_NAME,Ad.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await DS(s)),o=!1;if(NX.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw io(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,du.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await wX(c),CS.signalUserChange(new LS(process.pid)),`${n[0].role} successfully deleted`}a(PX,"dropRole");async function vX(){return DS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(vX,"listRoles")});var gL=g((Z_e,TL)=>{"use strict";var BX=re(),ai=require("joi"),HX=je(),pL=require("moment"),xX=require("fs-extra"),US=require("path"),GX=require("lodash"),fu=U(),{LOG_LEVELS:oo}=U(),FX="YYYY-MM-DD hh:mm:ss",qX=US.resolve(__dirname,"../logs");TL.exports=function(e){return HX.validateBySchema(e,kX)};var kX=ai.object({from:ai.custom(SL),until:ai.custom(SL),level:ai.valid(oo.NOTIFY,oo.FATAL,oo.ERROR,oo.WARN,oo.INFO,oo.DEBUG,oo.TRACE),order:ai.valid("asc","desc"),limit:ai.number().min(1),start:ai.number().min(0),log_name:ai.custom(VX)});function SL(e,t){if(pL(e,pL.ISO_8601).format(FX)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(SL,"validateDatetime");function VX(e,t){if(GX.invert(fu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=BX.get(fu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?fu.LOG_NAMES.HDB:e,i=s===fu.LOG_NAMES.INSTALL?US.join(qX,fu.LOG_NAMES.INSTALL):US.join(n,s);return xX.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(VX,"validateReadLogPath")});var vS=g((tde,AL)=>{"use strict";var Od=U(),$X=K(),YX=re(),KX=gL(),PS=require("path"),RL=require("fs-extra"),{once:WX}=require("events"),{handleHDBError:QX,hdb_errors:zX}=ne(),{PACKAGE_ROOT:JX}=U(),XX=PS.join(JX,"logs"),jX=1e3,ZX=200;AL.exports=ej;async function ej(e){let t=KX(e);if(t)throw QX(t,t.message,zX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=YX.get(Od.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?Od.LOG_NAMES.HDB:e.log_name,s=n===Od.LOG_NAMES.INSTALL?PS.join(XX,Od.LOG_NAMES.INSTALL):PS.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?jX:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!u&&!l&&(p=Math.max(RL.statSync(s).size-(h+5)*ZX,0));let S=RL.createReadStream(s,{start:p});S.on("error",P=>{$X.error(P)});let T=0,b=[],R="",L;S.on("data",P=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;P=R+P;let B=0,J;for(;(J=k.exec(P))&&!S.destroyed;){L&&(L.message=P.slice(B,J.index),H(L));let[Q,X,Te]=J,ce=Te.split("] ["),de=ce[0],Le=ce[1];ce.splice(0,2),L={timestamp:X,thread:de,level:Le,tags:ce,message:""},B=J.index+Q.length}R=P.slice(B)}),S.on("end",P=>{S.destroyed||L&&(L.message=R.trim(),H(L))}),S.resume();function H(P){let k,B,J;switch(!0){case(i&&c&&_):k=new Date(P.timestamp),B=new Date(u),J=new Date(l),P.level===o&&k>=B&&k<=J&&T<E?T++:P.level===o&&k>=B&&k<=J&&(ci(P,f,b),T++,T===h&&S.destroy());break;case(i&&c):k=new Date(P.timestamp),B=new Date(u),P.level===o&&k>=B&&T<E?T++:P.level===o&&k>=B&&(ci(P,f,b),T++,T===h&&S.destroy());break;case(i&&_):k=new Date(P.timestamp),J=new Date(l),P.level===o&&k<=J&&T<E?T++:P.level===o&&k<=J&&(ci(P,f,b),T++,T===h&&S.destroy());break;case(c&&_):k=new Date(P.timestamp),B=new Date(u),J=new Date(l),k>=B&&k<=J&&T<E?T++:k>=B&&k<=J&&(ci(P,f,b),T++,T===h&&S.destroy());break;case i:P.level===o&&T<E?T++:P.level===o&&(ci(P,f,b),T++,T===h&&S.destroy());break;case c:k=new Date(P.timestamp),B=new Date(u),k>=B&&T<E?T++:k>=B&&T>=E&&(ci(P,f,b),T++,T===h&&S.destroy());break;case _:k=new Date(P.timestamp),J=new Date(l),k<=J&&T<E?T++:k<=J&&T>=E&&(ci(P,f,b),T++,T===h&&S.destroy());break;default:T<E?T++:(ci(P,f,b),T++,T===h&&S.destroy())}}return a(H,"onLogMessage"),await WX(S,"close"),b}a(ej,"readLog");function ci(e,t,r){t==="desc"?tj(e,r):t==="asc"?rj(e,r):r.push(e)}a(ci,"pushLineToResult");function tj(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(tj,"insertDescending");function rj(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(rj,"insertAscending")});var bd=g((ode,NL)=>{"use strict";var BS=require("joi"),{string:Eu,boolean:OL,date:nj}=BS.types(),sj=je(),{validateSchemaExists:nde,validateTableExists:sde,validateSchemaName:ide}=Qn(),ij=U(),oj=rt(),bL=re();bL.initSync();var aj=Eu.invalid(bL.get(ij.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(oj.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),yL={operation:Eu.valid("add_node","update_node","set_node_replication"),node_name:aj,subscriptions:BS.array().items({table:Eu.optional(),schema:Eu.optional(),database:Eu.optional(),subscribe:OL.required(),publish:OL.required().custom(uj),start_time:nj.iso()}).min(1).required()};function cj(e){return sj.validateBySchema(e,BS.object(yL))}a(cj,"addUpdateNodeValidator");function uj(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(uj,"checkForFalsy");NL.exports={addUpdateNodeValidator:cj,validation_schema:yL}});var wL=g((cde,IL)=>{var lj=je(),_j={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};IL.exports=function(e){return lj.validateObject(e,_j)}});var xS=g((ude,CL)=>{"use strict";var dj=U().OPERATIONS_ENUM,HS=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=dj.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};CL.exports=HS});var LL=g((_de,DL)=>{"use strict";var fj={OPERATION:"operation",REFRESH:"refresh"},GS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},FS=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};DL.exports={JWTTokens:GS,TOKEN_TYPE_ENUM:fj,JWTRSAKeys:FS}});var pu=g((fde,vL)=>{"use strict";var mu=require("jsonwebtoken"),qS=require("fs-extra"),kS=z(),on=U(),{handleHDBError:Er,hdb_errors:Ej}=ne(),{HTTP_STATUS_CODES:hr,AUTHENTICATION_ERROR_MSGS:mr}=Ej,hu=K(),ML=U_(),YS=nn(),hj=rn().update,mj=xS(),pj=gs(),{UserEventMsg:Sj}=wn(),ui=re();ui.initSync();var VS=require("path"),{JWTTokens:Tj,JWTRSAKeys:gj,TOKEN_TYPE_ENUM:yd}=LL(),Rj=ui.get(on.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?ui.get(on.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",Aj=ui.get(on.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?ui.get(on.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Nd="RS256",$S;vL.exports={createTokens:Oj,validateOperationToken:yj,refreshOperationToken:bj,validateRefreshToken:PL};async function Oj(e){if(kS.isEmpty(e)||typeof e!="object")throw Er(new Error,mr.INVALID_AUTH_OBJECT,hr.BAD_REQUEST,void 0,void 0,!0);if(kS.isEmpty(e.username))throw Er(new Error,mr.USERNAME_REQUIRED,hr.BAD_REQUEST,void 0,void 0,!0);if(kS.isEmpty(e.password))throw Er(new Error,mr.PASSWORD_REQUIRED,hr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await YS.findAndValidateUser(e.username,e.password),!t)throw Er(new Error,mr.INVALID_CREDENTIALS,hr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw hu.error(f),Er(new Error,mr.INVALID_CREDENTIALS,hr.UNAUTHORIZED,void 0,void 0,!0)}let r=await Id(),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 UL(i,r.private_key,r.passphrase),c=await mu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:Aj,algorithm:Nd,subject:yd.REFRESH}),u=ML.hash(c),_=new mj(on.SYSTEM_SCHEMA_NAME,on.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await hj(_)}catch(f){hu.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw Er(new Error,mr.REFRESH_TOKEN_SAVE_FAILED,hr.INTERNAL_SERVER_ERROR);return pj.signalUserChange(new Sj(process.pid)),new Tj(o,c)}a(Oj,"createTokens");async function UL(e,t,r){return await mu.sign(e,{key:t,passphrase:r},{expiresIn:Rj,algorithm:Nd,subject:yd.OPERATION})}a(UL,"signOperationToken");async function Id(){if($S===void 0)try{let e=VS.join(ui.getHdbBasePath(),on.LICENSE_KEY_DIR_NAME,on.JWT_ENUM.JWT_PASSPHRASE_NAME),t=VS.join(ui.getHdbBasePath(),on.LICENSE_KEY_DIR_NAME,on.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=VS.join(ui.getHdbBasePath(),on.LICENSE_KEY_DIR_NAME,on.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await qS.readFile(e)).toString(),s=(await qS.readFile(t)).toString(),i=(await qS.readFile(r)).toString();$S=new gj(i,s,n)}catch(e){throw hu.error(e),Er(new Error,mr.NO_ENCRYPTION_KEYS,hr.INTERNAL_SERVER_ERROR)}return $S}a(Id,"getJWTRSAKeys");async function bj(e){if(!e)throw Er(new Error,mr.INVALID_BODY,hr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Er(new Error,mr.REFRESH_TOKEN_REQUIRED,hr.BAD_REQUEST,void 0,void 0,!0);await PL(e.refresh_token);let t=await Id(),r=await mu.decode(e.refresh_token);return{operation_token:await UL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(bj,"refreshOperationToken");async function yj(e){try{let t=await Id(),r=await mu.verify(e,t.public_key,{algorithms:Nd,subject:yd.OPERATION});return await YS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw hu.warn(t),t.name&&t.name==="TokenExpiredError"?Er(new Error,mr.TOKEN_EXPIRED,hr.FORBIDDEN):Er(new Error,mr.INVALID_TOKEN,hr.UNAUTHORIZED)}}a(yj,"validateOperationToken");async function PL(e){let t;try{let r=await Id(),n=await mu.verify(e,r.public_key,{algorithms:Nd,subject:yd.REFRESH});t=await YS.findAndValidateUser(n.username,void 0,!1)}catch(r){throw hu.warn(r),r.name&&r.name==="TokenExpiredError"?Er(new Error,mr.TOKEN_EXPIRED,hr.FORBIDDEN):Er(new Error,mr.INVALID_TOKEN,hr.UNAUTHORIZED)}if(!ML.validate(t.refresh_token,e))throw Er(new Error,mr.INVALID_TOKEN,hr.UNAUTHORIZED);return t}a(PL,"validateRefreshToken")});var KS=g((mde,xL)=>{"use strict";var Nj=wL(),la=require("passport"),Ij=require("passport-local").Strategy,wj=require("passport-http").BasicStrategy,Cj=require("util"),Dj=nn(),HL=Cj.callbackify(Dj.findAndValidateUser),hde=Nr(),Lj=U(),BL=pu();la.use(new Ij(function(e,t,r){HL(e,t,r)}));la.use(new wj(function(e,t,r){HL(e,t,r)}));la.serializeUser(function(e,t){t(null,e)});la.deserializeUser(function(e,t){t(null,e)});function Mj(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":la.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Lj.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?BL.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):BL.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:la.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(Mj,"authorize");function Uj(e,t){let r=Nj(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(Uj,"checkPermissions");xL.exports={authorize:Mj,checkPermissions:Uj}});var _a=g((Sde,GL)=>{"use strict";var WS=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},QS=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};GL.exports={Node:WS,NodeSubscription:QS}});var qL=g((gde,FL)=>{"use strict";var Pj=U().OPERATIONS_ENUM,zS=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Pj.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};FL.exports=zS});var Su=g((Ade,kL)=>{"use strict";var JS=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},XS=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};kL.exports={RemotePayloadObject:JS,RemotePayloadSubscription:XS}});var $L=g((bde,VL)=>{"use strict";var jS=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};VL.exports=jS});var WL=g((Cde,KL)=>{"use strict";var vj=$L(),Nde=_t(),YL=Ye(),Bj=K(),{getSchemaPath:Ide,getTransactionAuditStorePath:wde}=Qe(),{getDatabases:Hj}=(Ae(),se(Fe));KL.exports=xj;async function xj(e){let t=new vj;try{let r=Hj()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await YL.environmentDataSize(schema_path,e.name),o=await YL.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=n.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=s.entryCount}catch(r){Bj.warn(`unable to stat table dbi due to ${r}`)}return t}a(xj,"lmdbGetTableSize")});var zL=g((Lde,QL)=>{"use strict";var ZS=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};QL.exports=ZS});var da=g((Bde,eM)=>{"use strict";var Gj=require("fs-extra"),Fj=require("path"),Jt=require("systeminformation"),li=K(),JL=bt(),Ude=rt(),Cd=U(),qj=WL(),ZL=Fi(),{getThreadInfo:XL}=et(),uT=re();uT.initSync();var kj=zL(),{openEnvironment:Pde}=Ye(),{getSchemaPath:vde}=Qe(),{database:Vj}=(Ae(),se(Fe)),wd;eM.exports={getHDBProcessInfo:nT,getNetworkInfo:iT,getDiskInfo:sT,getMemoryInfo:rT,getCPUInfo:tT,getTimeInfo:eT,getSystemInformation:oT,systemInformation:$j,getTableSize:aT,getMetrics:cT};function eT(){return Jt.time()}a(eT,"getTimeInfo");async function tT(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Jt.cpu();l.cpu_speed=await Jt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:T,...b}=await Jt.currentLoad();return b.cpus=[],T.forEach(R=>{let{raw_load:L,raw_load_idle:H,raw_load_irq:P,raw_load_nice:k,raw_load_system:B,raw_load_user:J,...Q}=R;b.cpus.push(Q)}),l.current_load=b,l}catch(e){return li.error(`error in getCPUInfo: ${e}`),{}}}a(tT,"getCPUInfo");async function rT(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Jt.mem();return Object.assign(s,process.memoryUsage())}catch(e){return li.error(`error in getMemoryInfo: ${e}`),{}}}a(rT,"getMemoryInfo");async function nT(){let e={core:[],clustering:[]};try{let t=await Jt.processes(),r;try{r=Number.parseInt(await Gj.readFile(Fj.join(uT.get(Cd.CONFIG_PARAMS.ROOTPATH),Cd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Cd.NODE_ERROR_CODES.ENOENT)li.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return li.error(`error in getHDBProcessInfo: ${t}`),e}}a(nT,"getHDBProcessInfo");async function sT(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Jt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Jt.fsStats();return e.read_write=_,e.size=await Jt.fsSize(),e}catch(t){return li.error(`error in getDiskInfo: ${t}`),e}}a(sT,"getDiskInfo");async function iT(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Jt.networkInterfaceDefault(),e.latency=await Jt.inetChecksite("google.com"),(await Jt.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=n;e.interfaces.push(f)}),(await Jt.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return li.error(`error in getNetworkInfo: ${t}`),e}}a(iT,"getNetworkInfo");async function oT(){if(wd!==void 0)return wd;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Jt.osInfo();e=c;let u=await Jt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,wd=e,wd}catch(t){return li.error(`error in getSystemInformation: ${t}`),e}}a(oT,"getSystemInformation");async function aT(){let e=[],t=await ZL.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await qj(n));return e}a(aT,"getTableSize");async function cT(){let e=await ZL.describeAll(),t={};for(let r in e){let n=t[r]={};for(let s in e[r])try{let i=Vj({database:r,table:s}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[u,_,l]=c.trim().split(" ");return{pid:u,thread:_,txnid:l}}),n[s]=o}catch(i){li.notify(`Error getting stats for table ${s}: ${i}`)}}return t}a(cT,"getMetrics");async function jL(){if(uT.get(Cd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await JL.getNATSReferences(),t=await JL.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(jL,"getNatsStreamInfo");async function $j(e){let t=new kj;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await oT(),t.time=eT(),t.cpu=await tT(),t.memory=await rT(),t.disk=await sT(),t.network=await iT(),t.harperdb_processes=await nT(),t.table_size=await aT(),t.metrics=await cT(),t.threads=await XL(),t.replication=await jL(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await oT();break;case"time":t.time=eT();break;case"cpu":t.cpu=await tT();break;case"memory":t.memory=await rT();break;case"disk":t.disk=await sT();break;case"network":t.network=await iT();break;case"harperdb_processes":t.harperdb_processes=await nT();break;case"table_size":t.table_size=await aT();break;case"database_metrics":case"metrics":t.metrics=await cT();break;case"threads":t.threads=await XL();break;case"replication":t.replication=await jL();break;default:break}return t}a($j,"systemInformation")});var Ld=g((xde,tM)=>{"use strict";tM.exports={version:Yj,printVersion:Kj};var Dd=Zc();function Yj(){if(Dd)return Dd.version}a(Yj,"version");function Kj(){Dd&&console.log(`HarperDB Version ${Dd.version}`)}a(Kj,"printVersion")});var ys=g((kde,iM)=>{"use strict";var Wj=rn(),lT=z(),Qj=require("util"),ao=U(),rM=re();rM.initSync();var zj=KS(),nM=Ur(),{Node:Fde,NodeSubscription:qde}=_a(),Jj=Zo(),Xj=qL(),{RemotePayloadObject:jj,RemotePayloadSubscription:Zj}=Su(),{handleHDBError:eZ,hdb_errors:tZ}=ne(),{HTTP_STATUS_CODES:rZ,HDB_ERROR_MSGS:nZ}=tZ,sZ=jn(),iZ=da(),oZ=Ld(),{getDatabases:aZ}=(Ae(),se(Fe)),cZ=Qj.promisify(zj.authorize),uZ=nM.searchByHash,lZ=nM.searchByValue;iM.exports={authHeaderToUser:_Z,isEmpty:dZ,getNodeRecord:fZ,upsertNodeRecord:EZ,buildNodePayloads:hZ,checkClusteringEnabled:mZ,getAllNodeRecords:pZ,getSystemInfo:SZ,reverseSubscription:sM};async function _Z(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await cZ(t,null),e}a(_Z,"authHeaderToUser");function dZ(e){return e==null}a(dZ,"isEmpty");async function fZ(e){let t=new Jj(ao.SYSTEM_SCHEMA_NAME,ao.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return uZ(t)}a(fZ,"getNodeRecord");async function EZ(e){let t=new Xj(ao.SYSTEM_SCHEMA_NAME,ao.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Wj.upsert(t)}a(EZ,"upsertNodeRecord");function sM(e){if(lT.isEmpty(e.subscribe)||lT.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(sM,"reverseSubscription");function hZ(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=lT.getTableHashAttribute(u,_),{subscribe:d,publish:f}=sM(c),E=aZ()[u]?.[_],h=new Zj(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new jj(r,t,s,n)}a(hZ,"buildNodePayloads");function mZ(){if(!rM.get(ao.CONFIG_PARAMS.CLUSTERING_ENABLED))throw eZ(new Error,nZ.CLUSTERING_NOT_ENABLED,rZ.BAD_REQUEST,void 0,void 0,!0)}a(mZ,"checkClusteringEnabled");async function pZ(){let e=new sZ(ao.SYSTEM_SCHEMA_NAME,ao.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await lZ(e))}a(pZ,"getAllNodeRecords");async function SZ(){let e=await iZ.getSystemInformation();return{hdb_version:oZ.version(),node_version:e.node_version,platform:e.platform}}a(SZ,"getSystemInfo")});var _T=g(($de,fM)=>{"use strict";var Md=bt(),oM=z(),aM=rt(),cM=U(),Ud=K(),uM=Td(),TZ=yp(),{RemotePayloadObject:gZ}=Su(),{handleHDBError:lM,hdb_errors:RZ}=ne(),{HTTP_STATUS_CODES:_M}=RZ,{NodeSubscription:dM}=_a();fM.exports=AZ;async function AZ(e,t){let r;try{r=await Md.request(`${t}.${aM.REQUEST_SUFFIX}`,new gZ(cM.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Ud.trace("Response from remote describe all request:",r)}catch(o){Ud.error(`addNode received error from describe all request to remote node: ${o}`);let c=Md.requestErrorHandler(o,"add_node",t);throw lM(new Error,c,_M.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===aM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw lM(new Error,o,_M.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,u=o.database??o.schema??"data";if(u===cM.SYSTEM_SCHEMA_NAME){await Md.createLocalTableStream(u,c);let h=new dM(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=oM.doesSchemaExist(u),l=n[u]!==void 0,d=c?oM.doesTableExist(u,c):!0,f=c?n?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!f){s.push(o);continue}if(!_&&l&&(Ud.trace(`addNode creating schema: ${u}`),await uM.createSchema({operation:"create_schema",schema:u})),!d&&f){Ud.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(n[u][c].attributes)}`);let h=new TZ(u,c,n[u][c].hash_attribute);n[u][c].attributes&&(h.attributes=n[u][c].attributes),await uM.createTable(h)}await Md.createLocalTableStream(u,c);let E=new dM(u,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(AZ,"reviewSubscriptions")});var Hd=g((Kde,mM)=>{"use strict";var{handleHDBError:Pd,hdb_errors:OZ}=ne(),{HTTP_STATUS_CODES:vd}=OZ,{addUpdateNodeValidator:bZ}=bd(),Bd=K(),hM=U(),EM=rt(),yZ=z(),Tu=bt(),gu=ys(),NZ=re(),IZ=_T(),{Node:wZ,NodeSubscription:CZ}=_a(),{broadcast:DZ}=et(),LZ="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",MZ="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",UZ=NZ.get(hM.CONFIG_PARAMS.CLUSTERING_NODENAME);mM.exports=PZ;async function PZ(e,t=!1){Bd.trace("addNode called with:",e),gu.checkClusteringEnabled();let r=bZ(e);if(r)throw Pd(r,r.message,vd.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await gu.getNodeRecord(n);if(!yZ.isEmptyOrZeroLength(d))throw Pd(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,vd.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await IZ(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=LZ,o;let c=gu.buildNodePayloads(s,UZ,hM.OPERATIONS_ENUM.ADD_NODE,await gu.getSystemInfo()),u=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];s[d].start_time===void 0&&delete s[d].start_time,u.push(new CZ(E.schema,E.table,E.publish,E.subscribe))}Bd.trace("addNode sending remote payload:",c);let _;try{_=await Tu.request(`${n}.${EM.REQUEST_SUFFIX}`,c)}catch(d){Bd.error(`addNode received error from request: ${d}`);for(let E=0,h=s.length;E<h;E++){let p=s[E];p.publish=!1,p.subscribe=!1,await Tu.updateRemoteConsumer(p,n)}let f=Tu.requestErrorHandler(d,"add_node",n);throw Pd(new Error,f,vd.INTERNAL_SERVER_ERROR,"error",f)}if(_.status===EM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw Pd(new Error,d,vd.INTERNAL_SERVER_ERROR,"error",d)}Bd.trace(_);for(let d=0,f=s.length;d<f;d++){let E=s[d];await Tu.updateRemoteConsumer(E,n),E.subscribe===!0&&await Tu.updateConsumerIterator(E.schema,E.table,n,"start")}let l=new wZ(n,u,_.system_info);return await gu.upsertNodeRecord(l),DZ({type:"nats_update"}),i.length>0?o.message=MZ:o.message=`Successfully added '${n}' to manifest`,o}a(PZ,"addNode")});var ET=g((zde,TM)=>{"use strict";var{handleHDBError:dT,hdb_errors:vZ}=ne(),{HTTP_STATUS_CODES:fT}=vZ,{addUpdateNodeValidator:BZ}=bd(),Ru=K(),SM=U(),pM=rt(),Qde=z(),Au=bt(),Ou=ys(),HZ=re(),{cloneDeep:xZ}=require("lodash"),GZ=_T(),{Node:FZ,NodeSubscription:qZ}=_a(),{broadcast:kZ}=et(),VZ="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",$Z="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",YZ=HZ.get(SM.CONFIG_PARAMS.CLUSTERING_NODENAME);TM.exports=KZ;async function KZ(e){Ru.trace("updateNode called with:",e),Ou.checkClusteringEnabled();let t=BZ(e);if(t)throw dT(t,t.message,fT.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Ou.getNodeRecord(r);s.length>0&&(n=xZ(s));let{added:i,skipped:o}=await GZ(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=VZ,c;let u=Ou.buildNodePayloads(i,YZ,SM.OPERATIONS_ENUM.UPDATE_NODE,await Ou.getSystemInfo());for(let l=0,d=i.length;l<d;l++){let f=i[l];Ru.trace(`updateNode updating work stream for node: ${r} subscription:`,f),i[l].start_time===void 0&&delete i[l].start_time}Ru.trace("updateNode sending remote payload:",u);let _;try{_=await Au.request(`${r}.${pM.REQUEST_SUFFIX}`,u)}catch(l){Ru.error(`updateNode received error from request: ${l}`);let d=Au.requestErrorHandler(l,"update_node",r);throw dT(new Error,d,fT.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===pM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw dT(new Error,l,fT.INTERNAL_SERVER_ERROR,"error",l)}Ru.trace(_);for(let l=0,d=i.length;l<d;l++){let f=i[l];await Au.updateRemoteConsumer(f,r),f.subscribe===!0?await Au.updateConsumerIterator(f.schema,f.table,r,"start"):await Au.updateConsumerIterator(f.schema,f.table,r,"stop")}return n||(n=[new FZ(r,[],_.system_info)]),await WZ(n[0],i,_.system_info),o.length>0?c.message=$Z:c.message=`Successfully updated '${r}'`,c}a(KZ,"updateNode");async function WZ(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=n.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new qZ(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Ou.upsertNodeRecord(n),kZ({type:"nats_update"})}a(WZ,"updateNodeTable")});var bM=g((Xde,OM)=>{"use strict";var AM=require("joi"),{string:gM}=AM.types(),QZ=je(),RM=U(),zZ=re(),JZ=rt();OM.exports=XZ;function XZ(e){let t=gM.invalid(zZ.get(RM.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(JZ.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=AM.object({operation:gM.valid(RM.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return QZ.validateBySchema(e,r)}a(XZ,"removeNodeValidator")});var Gd=g((Zde,CM)=>{"use strict";var{handleHDBError:yM,hdb_errors:jZ}=ne(),{HTTP_STATUS_CODES:NM}=jZ,ZZ=bM(),bu=K(),IM=ys(),e5=z(),xd=U(),wM=rt(),hT=bt(),t5=re(),{RemotePayloadObject:r5}=Su(),{NodeSubscription:n5}=_a(),s5=$c(),i5=Yi(),{broadcast:o5}=et(),a5=t5.get(xd.CONFIG_PARAMS.CLUSTERING_NODENAME);CM.exports=c5;async function c5(e){bu.trace("removeNode called with:",e),IM.checkClusteringEnabled();let t=ZZ(e);if(t)throw yM(t,t.message,NM.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await IM.getNodeRecord(r);if(e5.isEmptyOrZeroLength(n))throw yM(new Error,`Node '${r}' was not found.`,NM.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new r5(xd.OPERATIONS_ENUM.REMOVE_NODE,a5,[]),i,o=!1;for(let u=0,_=n.subscriptions.length;u<_;u++){let l=n.subscriptions[u];l.subscribe===!0&&await hT.updateConsumerIterator(l.schema,l.table,r,"stop");try{await hT.updateRemoteConsumer(new n5(l.schema,l.table,!1,!1),r)}catch(d){bu.error(d)}}try{i=await hT.request(`${r}.${wM.REQUEST_SUFFIX}`,s),bu.trace("Remove node reply from remote node:",r,i)}catch(u){bu.error("removeNode received error from request:",u),o=!0}let c=new s5(xd.SYSTEM_SCHEMA_NAME,xd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await i5.deleteRecord(c),o5({type:"nats_update"}),i?.status===wM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(bu.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(c5,"removeNode")});var MM=g((tfe,LM)=>{"use strict";var DM=require("joi"),{string:u5,array:l5}=DM.types(),_5=je(),d5=bd();LM.exports=f5;function f5(e){let t=DM.object({operation:u5.valid("configure_cluster").required(),connections:l5.items(d5.validation_schema).required()});return _5.validateBySchema(e,t)}a(f5,"configureClusterValidator")});var mT=g((nfe,HM)=>{"use strict";var E5=U(),Fd=K(),h5=z(),m5=Gd(),p5=Hd(),UM=ys(),S5=MM(),{handleHDBError:PM,hdb_errors:T5}=ne(),{HTTP_STATUS_CODES:vM}=T5,g5="Configure cluster complete.",R5="Failed to configure the cluster. Check the logs for more details.",A5="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";HM.exports=O5;async function O5(e){Fd.trace("configure cluster called with:",e),UM.checkClusteringEnabled();let t=S5(e);if(t)throw PM(t,t.message,vM.BAD_REQUEST,void 0,void 0,!0);let r=await UM.getAllNodeRecords(),n=[];for(let f=0,E=r.length;f<E;f++)n.push(BM(m5,{operation:E5.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let s=await Promise.allSettled(n);Fd.trace("All results from configure_cluster remove node:",s);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(BM(p5,E,E.node_name))}let c=await Promise.allSettled(i);Fd.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=s.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(Fd.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(h5.isEmptyOrZeroLength(u))return{message:g5,connections:_};if(l)return{message:A5,failed_nodes:u,connections:_};throw PM(new Error,R5,vM.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(O5,"configureCluster");async function BM(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){throw{node_name:r,error:n}}}a(BM,"functionWrapper")});var GM=g((ife,xM)=>{"use strict";var qd=require("joi"),b5=je(),{validateSchemaExists:y5,validateTableExists:N5,validateSchemaName:I5}=Qn(),w5=qd.object({operation:qd.string().valid("purge_stream"),schema:qd.string().custom(y5).custom(I5).required(),table:qd.string().custom(N5).required()});function C5(e){return b5.validateBySchema(e,w5)}a(C5,"purgeStreamValidator");xM.exports=C5});var pT=g((afe,FM)=>{"use strict";var{handleHDBError:D5,hdb_errors:L5}=ne(),{HTTP_STATUS_CODES:M5}=L5,U5=GM(),P5=bt(),v5=ys();FM.exports=B5;async function B5(e){if(e.purge_ingest!==!0){let s=U5(e);if(s)throw D5(s,s.message,M5.BAD_REQUEST,void 0,void 0,!0)}v5.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:n}=e;return await P5.purgeTableStream(t,r,n),n?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(B5,"purgeStream")});var gT=g((ufe,KM)=>{"use strict";var TT=ys(),H5=bt(),VM=re(),kd=U(),co=rt(),x5=z(),ST=K(),{RemotePayloadObject:G5}=Su(),{ErrorCode:qM}=require("nats"),kM=VM.get(kd.CONFIG_PARAMS.CLUSTERING_ENABLED),$M=VM.get(kd.CONFIG_PARAMS.CLUSTERING_NODENAME);KM.exports={clusterStatus:F5,buildNodeStatus:YM};async function F5(){let e={node_name:$M,is_enabled:kM,connections:[]};if(!kM)return e;let t=await TT.getAllNodeRecords();if(x5.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(YM(t[n],e.connections));return await Promise.allSettled(r),e}a(F5,"clusterStatus");async function YM(e,t){let r=e.name,n=new G5(kd.OPERATIONS_ENUM.CLUSTER_STATUS,$M,void 0,await TT.getSystemInfo()),s,i,o=co.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();s=await H5.request(co.REQUEST_SUBJECT(r),n),i=Date.now()-u,s.status===co.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=co.CLUSTER_STATUS_STATUSES.CLOSED,ST.error(`Error getting node status from ${r} `,s))}catch(u){ST.warn(`Error getting node status from ${r}`,u),u.code===qM.NoResponders?o=co.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===qM.Timeout?o=co.CLUSTER_STATUS_STATUSES.TIMEOUT:o=co.CLUSTER_STATUS_STATUSES.CLOSED}let c=new q5(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let u={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==kd.PRE_4_0_0_VERSION&&await TT.upsertNodeRecord(u)}catch(u){ST.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(YM,"buildNodeStatus");function q5(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(q5,"NodeStatusObject")});var AT=g((_fe,WM)=>{"use strict";var{handleHDBError:k5,hdb_errors:V5}=ne(),{HTTP_STATUS_CODES:$5}=V5,Y5=bt(),K5=ys(),RT=z(),Vd=require("joi"),W5=je(),Q5=2e3,z5=Vd.object({timeout:Vd.number().min(1),connected_nodes:Vd.boolean(),routes:Vd.boolean()});WM.exports=J5;async function J5(e){K5.checkClusteringEnabled();let t=W5.validateBySchema(e,z5);if(t)throw k5(t,t.message,$5.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||RT.autoCastBoolean(n),o=s===void 0||RT.autoCastBoolean(s),c={nodes:[]},u=await Y5.getServerList(r??Q5),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:RT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(J5,"clusterNetwork")});var XM=g((ffe,JM)=>{"use strict";var OT=require("joi"),QM=je(),{route_constraints:zM}=Ah();JM.exports={setRoutesValidator:X5,deleteRoutesValidator:j5};function X5(e){let t=OT.object({server:OT.valid("hub","leaf").required(),routes:zM.required()});return QM.validateBySchema(e,t)}a(X5,"setRoutesValidator");function j5(e){let t=OT.object({routes:zM.required()});return QM.validateBySchema(e,t)}a(j5,"deleteRoutesValidator")});var yT=g((hfe,tU)=>{"use strict";var uo=Cr(),bT=z(),$d=U(),jM=XM(),{handleHDBError:ZM,hdb_errors:Z5}=ne(),{HTTP_STATUS_CODES:eU}=Z5,e8="cluster routes successfully set",t8="cluster routes successfully deleted";tU.exports={setRoutes:r8,getRoutes:n8,deleteRoutes:s8};function r8(e){let t=jM.setRoutesValidator(e);if(t)throw ZM(t,t.message,eU.BAD_REQUEST,void 0,void 0,!0);let r=uo.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=bT.autoCast(_.port);let l=n.some(f=>f.host===_.host&&f.port===_.port),d=s.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?uo.updateConfigValue($d.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):uo.updateConfigValue($d.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:e8,set:o,skipped:i}}a(r8,"setRoutes");function n8(){let e=uo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(n8,"getRoutes");function s8(e){let t=jM.deleteRoutesValidator(e);if(t)throw ZM(t,t.message,eU.BAD_REQUEST,void 0,void 0,!0);let r=uo.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],f=!1;for(let E=0,h=n.length;E<h;E++){let p=n[E];if(d.host===p.host&&d.port===p.port){n.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=s.length;h<p;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(n=bT.isEmptyOrZeroLength(n)?null:n,uo.updateConfigValue($d.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),u&&(s=bT.isEmptyOrZeroLength(s)?null:s,uo.updateConfigValue($d.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:t8,deleted:i,skipped:o}}a(s8,"deleteRoutes")});var nU=g((pfe,rU)=>{"use strict";var yu=require("alasql"),lo=require("recursive-iterator"),vn=K(),i8=z(),Nu=U(),NT=class{static{a(this,"sql_statement_bucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,a8(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(s=>Nu.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!Nu.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Nu.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=o8(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!Nu.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new yu.yy.Column({columnid:_});s.tableid&&(l.tableid=s.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function o8(e){return e.filter(t=>t[Nu.PERMS_CRUD_ENUM.READ])}a(o8,"filterReadRestrictedAttrs");function a8(e,t,r,n,s){c8(e,t,r,n,s)}a(a8,"interpretAST");function Iu(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(Iu,"addSchemaTableToMap");function c8(e,t,r,n,s){if(!e){vn.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof yu.yy.Insert?d8(e,t,r):e instanceof yu.yy.Select?u8(e,t,r,n,s):e instanceof yu.yy.Update?l8(e,t,r):e instanceof yu.yy.Delete?_8(e,t,r):vn.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(c8,"getRecordAttributesAST");function u8(e,t,r,n,s){if(!e){vn.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(i8.isEmptyOrZeroLength(i)){vn.error("No schema specified");return}e.from.forEach(c=>{Iu(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Iu(c.table,t,r,n,s)});let o=new lo(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{vn.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new lo(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{vn.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new lo(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=s.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{vn.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new lo(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{vn.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(u8,"getSelectAttributes");function l8(e,t,r){if(!e){vn.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new lo(e.columns),s=e.table.databaseid;Iu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&IT(e.table.tableid,s,i.columnid,t,r)}a(l8,"getUpdateAttributes");function _8(e,t,r){if(!e){vn.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new lo(e.where),s=e.table.databaseid;Iu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&IT(e.table.tableid,s,i.columnid,t,r)}a(_8,"getDeleteAttributes");function d8(e,t,r){if(!e){vn.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new lo(e.columns),s=e.into.databaseid;Iu(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&IT(e.into.tableid,s,i.columnid,t,r)}a(d8,"getInsertAttributes");function IT(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(IT,"pushAttribute");rU.exports=NT});var DT=g((Tfe,aU)=>{var Yd=Ki(),sU=require("chalk"),Gr=K(),iU=require("prompt"),{promisify:f8}=require("util"),wT=U(),E8=require("fs-extra"),h8=require("path"),m8=z(),p8=Ld(),oU=re();oU.initSync();var S8=require("moment"),T8=f8(iU.get),g8=h8.join(oU.getHdbBasePath(),wT.LICENSE_KEY_DIR_NAME,wT.LICENSE_FILE_NAME,wT.LICENSE_FILE_NAME);aU.exports={getFingerprint:A8,setLicense:R8,parseLicense:CT,register:O8,getRegistrationInfo:y8};async function R8(e){if(e&&e.key&&e.company){try{Gr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await CT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Gr.error(r),Gr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(R8,"setLicense");async function A8(){let e={};try{e=await Yd.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Gr.error(r),Gr.error(t),new Error(r)}return e}a(A8,"getFingerprint");async function CT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Gr.info("Validating license input...");let r=Yd.validateLicense(e,t);if(Gr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Gr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Gr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Gr.info("writing license to disk"),await E8.writeFile(g8,JSON.stringify({license_key:e,company:t}))}catch(n){throw Gr.error("Failed to write License"),n}return"Registration successful."}a(CT,"parseLicense");async function O8(){let e=await b8();return CT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(O8,"register");async function b8(){let e=await Yd.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:sU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:sU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{iU.start()}catch(n){Gr.error(n)}let r;try{r=await T8(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(b8,"promptForRegistration");async function y8(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Yd.getLicense()}catch(r){throw Gr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(m8.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=p8.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=S8.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(y8,"getRegistrationInfo")});var uU=g((Rfe,cU)=>{"use strict";var N8=rt(),LT=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+N8.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};cU.exports=LT});var dU=g((Ofe,_U)=>{"use strict";var lU=rt(),MT=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+lU.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+lU.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:l,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};_U.exports=MT});var EU=g((yfe,fU)=>{"use strict";var UT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};fU.exports=UT});var mU=g((Ife,hU)=>{"use strict";var I8=rt(),PT=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+I8.SERVER_SUFFIX.ADMIN,this.password=r}};hU.exports=PT});var HT=g((Cfe,TU)=>{"use strict";var fa=require("path"),Qd=require("fs-extra"),w8=uU(),C8=dU(),D8=EU(),L8=mU(),vT=nn(),ha=z(),pr=Cr(),Wd=U(),wu=rt(),{CONFIG_PARAMS:lt}=Wd,Cu=K(),Du=re(),pU=Ts(),BT=bt(),Ea="clustering",M8=1e4,SU=5;TU.exports={generateNatsConfig:P8,removeNatsConfig:v8,getHubConfigPath:U8};function U8(){let e=Du.get(lt.ROOTPATH);return fa.join(e,Ea,wu.NATS_CONFIG_FILES.HUB_SERVER)}a(U8,"getHubConfigPath");async function P8(e=!1,t=void 0){Du.initSync();let r=Du.get(lt.ROOTPATH),n=fa.join(r,Ea,wu.PID_FILES.HUB),s=fa.join(r,Ea,wu.PID_FILES.LEAF),i=pr.getConfigFromFile(lt.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=fa.join(r,Ea,wu.NATS_CONFIG_FILES.HUB_SERVER),c=fa.join(r,Ea,wu.NATS_CONFIG_FILES.LEAF_SERVER),u=pr.getConfigFromFile(lt.CLUSTERING_TLS_CERTIFICATE),_=pr.getConfigFromFile(lt.CLUSTERING_TLS_PRIVATEKEY),l=pr.getConfigFromFile(lt.CLUSTERING_TLS_CERT_AUTH),d=pr.getConfigFromFile(lt.CLUSTERING_TLS_INSECURE),f=pr.getConfigFromFile(lt.CLUSTERING_TLS_VERIFY),E=pr.getConfigFromFile(lt.CLUSTERING_NODENAME),h=pr.getConfigFromFile(lt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await BT.checkNATSServerInstalled()||zd("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await vT.listUsers(),S=pr.getConfigFromFile(lt.CLUSTERING_USER),T=await vT.getClusterUser();(ha.isEmpty(T)||T.active!==!0)&&zd(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Kd(lt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Kd(lt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Kd(lt.CLUSTERING_HUBSERVER_NETWORK_PORT),await Kd(lt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let b=[],R=[];for(let[Q,X]of p.entries())X.role.role===Wd.ROLE_TYPES_ENUM.CLUSTER_USER&&X.active&&(b.push(new L8(X.username,pU.decrypt(X.hash))),R.push(new D8(X.username,pU.decrypt(X.hash))));let L=[],{hub_routes:H}=pr.getClusteringRoutes();if(!ha.isEmptyOrZeroLength(H))for(let Q of H)L.push(`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@${Q.host}:${Q.port}`);let P=new w8(pr.getConfigFromFile(lt.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,u,_,l,d,f,h,pr.getConfigFromFile(lt.CLUSTERING_HUBSERVER_CLUSTER_NAME),pr.getConfigFromFile(lt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),L,b,R);l==null&&(delete P.tls.ca_file,delete P.leafnodes.tls.ca_file),t=ha.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Wd.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Qd.writeJson(o,P),Cu.trace(`Hub server config written to ${o}`));let k=`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,B=`tls://${T.uri_encoded_name}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,J=new C8(pr.getConfigFromFile(lt.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[k],[B],b,R,u,_,l,d);l==null&&delete J.tls.ca_file,(t===void 0||t===Wd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Qd.writeJson(c,J),Cu.trace(`Leaf server config written to ${c}`))}a(P8,"generateNatsConfig");async function Kd(e){let t=Du.get(e);return ha.isEmpty(t)&&zd(`port undefined for '${e}'`),await ha.isPortTaken(t)&&zd(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(Kd,"isPortAvailable");function zd(e){let t=`Error generating clustering config: ${e}`;Cu.error(t),console.error(t),process.exit(1)}a(zd,"generateNatsConfigError");async function v8(e){let{port:t,config_file:r}=BT.getServerConfig(e),{username:n,decrypt_hash:s}=await vT.getClusterUser(),i=0,o=2e3;for(;i<SU;){try{let _=await BT.createConnection(t,n,s,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Cu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=SU)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);await ha.async_set_timeout(o*(i*2))}let c="0".repeat(M8),u=fa.join(Du.get(lt.ROOTPATH),Ea,r);await Qd.writeFile(u,c),await Qd.remove(u),Cu.notify(e,"started.")}a(v8,"removeNatsConfig")});var ef=g((Mfe,NU)=>{"use strict";var B8=require("minimist"),{isMainThread:GT,parentPort:AU}=require("worker_threads"),nt=U(),{PROCESS_DESCRIPTORS_VALIDATE:Lu}=nt,rs=K(),FT=z(),Xd=HT(),Jd=bt(),Lfe=rt(),OU=Cr(),ns=kT(),gU=da(),H8=_h(),{restartWorkers:jd,onMessageByType:x8}=et(),{handleHDBError:G8,hdb_errors:F8}=ne(),{HTTP_STATUS_CODES:q8}=F8,Zd=re();Zd.initSync();var Mu=`Restarting HarperDB. This may take up to ${nt.RESTART_TIMEOUT_MS/1e3} seconds.`,k8="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",RU="Clustering is not enabled so cannot be restarted",V8="Invalid service",ma,an;NU.exports={restart:bU,restartService:qT};GT&&x8(nt.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?qT({service:e.workerType}):bU({operation:"restart"})});async function bU(e){an=Object.keys(e).length===0,ma=await ns.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR);let t=B8(process.argv);if(t.service){await qT(t);return}if(an&&!ma){console.error(k8);return}if(an&&console.log(Mu),ma){ns.enterPM2Mode(),rs.notify(Mu);let r=H8(Object.keys(nt.CONFIG_PARAM_MAP),!0);return FT.isEmptyOrZeroLength(Object.keys(r))||OU.updateConfigValue(void 0,void 0,r,!0,!0),$8(),Mu}return GT?(rs.notify(Mu),setTimeout(()=>{jd()},50)):AU.postMessage({type:nt.ITC_EVENT_TYPES.RESTART}),Mu}a(bU,"restart");async function qT(e){let{service:t}=e;if(nt.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw G8(new Error,V8,q8.BAD_REQUEST,void 0,void 0,!0);if(ma=await ns.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR),!GT)return AU.postMessage({type:nt.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Lu.clustering:if(!Zd.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=RU;break}an&&console.log("Restarting clustering"),rs.notify("Restarting clustering"),await yU();break;case Lu.clustering_config:case Lu["clustering config"]:if(!Zd.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=RU;break}an&&console.log("Restarting clustering_config"),rs.notify("Restarting clustering_config"),await ns.reloadClustering();break;case"custom_functions":case"custom functions":case Lu.harperdb:case Lu.http_workers:if(an&&!ma){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}an&&console.log("Restarting http_workers"),rs.notify("Restarting http_workers"),an?await ns.restart(nt.HDB_PROC_DESCRIPTOR):setTimeout(()=>{jd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(rs.error(r),an&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(qT,"restartService");async function $8(){await yU(),await ns.restart(nt.HDB_PROC_DESCRIPTOR),await FT.async_set_timeout(2e3),Zd.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await xT(),an&&(await Jd.closeConnection(),process.exit(0))}a($8,"restartPM2Mode");async function yU(){if(!OU.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await gU.getHDBProcessInfo()).clustering.length===0)rs.trace("Clustering not running, restart will start clustering services"),await Xd.generateNatsConfig(!0),await ns.startClusteringProcesses(),await ns.startClusteringThreads(),await xT(),an&&await Jd.closeConnection();else{await Xd.generateNatsConfig(!0),ma?(rs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await ns.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ns.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await gU.getHDBProcessInfo()).clustering.forEach(s=>{rs.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await FT.async_set_timeout(3e3),await xT(),await Jd.updateLocalStreams(),an&&await Jd.closeConnection(),rs.trace("Restart clustering restarting ingest and reply service threads");let t=jd(nt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=jd(nt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(yU,"restartClustering");async function xT(){await Xd.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Xd.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(xT,"removeNatsConfig")});var HU=g((vfe,BU)=>{"use strict";var Pfe=require("lodash"),Sr=U(),{handleHDBError:IU,hdb_errors:Y8}=ne(),{HDB_ERROR_MSGS:K8,HTTP_STATUS_CODES:W8}=Y8,VT=K();BU.exports={getRolePermissions:z8};var _o=Object.create(null),Q8=a(e=>({key:e,perms:{}}),"perms_template_obj"),LU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),MU=a((e=!1,t=!1,r=!1,n=!1)=>({[Sr.PERMS_CRUD_ENUM.READ]:e,[Sr.PERMS_CRUD_ENUM.INSERT]:t,[Sr.PERMS_CRUD_ENUM.UPDATE]:r,[Sr.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),$T=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...MU(t,r,n,s)}),"table_perms_template"),wU=a((e,t=MU())=>({attribute_name:e,describe:vU(t),[Uu]:t[Uu],[YT]:t[YT],[KT]:t[KT]}),"attr_perms_template"),CU=a((e,t=!1)=>({attribute_name:e,describe:t,[Uu]:t}),"timestamp_attr_perms_template"),{READ:Uu,INSERT:YT,UPDATE:KT}=Sr.PERMS_CRUD_ENUM,UU=Object.values(Sr.PERMS_CRUD_ENUM),PU=[Uu,YT,KT];function z8(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[Sr.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(_o[t]&&_o[t].key===n)return _o[t].perms;let s=J8(e,r);return _o[t]?_o[t].key=n:_o[t]=Q8(n),_o[t].perms=s,s}catch(r){if(!e[Sr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Sr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Sr.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw VT.error(n),VT.debug(r),IU(new Error,K8.OUTDATED_PERMS_TRANSLATION_ERROR,W8.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
11
11
  ${r.stack}`;throw VT.error(n),IU(new Error)}}}a(z8,"getRolePermissions");function J8(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Sr.SYSTEM_SCHEMA_NAME]=n[Sr.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=X8(t[i]);return}r[i]=LU(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],u=t[i][o],_=j8(c,u);r[i].describe||UU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=$T()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=$T()})}),r}a(J8,"translateRolePermissions");function X8(e){let t=LU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=$T(!0,!0,!0,!0,!0)}),t}a(X8,"createStructureUserPermissions");function j8(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return Sr.TIME_STAMP_NAMES.includes(d)&&(f=CU(d,l[Uu])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=wU(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=vU(l),s.attribute_permissions.push(l),c||Z8(l,u)}else if(_!==o){let l;Sr.TIME_STAMP_NAMES.includes(_)?l=CU(_):l=wU(_),s.attribute_permissions.push(l)}}),c||s.attribute_permissions.push(u),s.describe=DU(s),s}else return e.describe=DU(e),e}a(j8,"getTableAttrPerms");function DU(e){return UU.filter(t=>e[t]).length>0}a(DU,"getSchemaTableDescribePerm");function vU(e){return PU.filter(t=>e[t]).length>0}a(vU,"getAttributeDescribePerm");function Z8(e,t){PU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(Z8,"checkForHashPerms")});var xU={};$e(xU,{Resources:()=>tf,keyArrayToString:()=>pa,resetResources:()=>e6,resources:()=>_i});function e6(){return _i=new tf}function pa(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var tf,_i,Pu=Re(()=>{ji();tf=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,type:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let l=this.get(c.slice(0,_));l&&(l.hasSubPaths=!0),_+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),u=this.get(c);if(u){if(u.relativeURL=t.slice(n),!u.hasSubPaths)return u;s=u}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),s?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(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 ze(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(e6,"resetResources");a(pa,"keyArrayToString")});var GU={};$e(GU,{Headers:()=>di,appendHeader:()=>WT});function WT(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var di,vu=Re(()=>{di=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(WT,"appendHeader")});var Bu={};$e(Bu,{authentication:()=>WU,bypassAuth:()=>a6,login:()=>u6,logout:()=>l6,start:()=>c6});function a6(){KU=!0}async function WU(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?s6?n6:[]:r6?t6:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new di([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return rf&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),rf&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(rf){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.indexOf(E);if(h>=0){let p=s.indexOf(";",h),S=s.indexOf("=",h);u=s.slice(S+1,p===-1?s.length:p),_=await qU.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new Sa.AuthAuditLog(E,h,Ut.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=p,u&&(S.session_id=u),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===Ut.AUTH_AUDIT_STATUS.SUCCESS?FU.notify(S):FU.error(S)},"authAuditLog");if(e.mtlsConfig&&e.authorized){let E=e.mtlsConfig.user;E!==null?((E===void 0||E==="Common Name"||E==="CN")&&(E=e.peerCertificate.subject.CN),e.user=await Ze.getUser(E,null,null),l(E,Ut.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,Sa.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=fo.get(n),!d){let[E,h]=n.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await Ze.getUser(p,S,e):null;break;case"Bearer":try{d=await(0,nf.validateOperationToken)(h)}catch(T){if(T.message==="invalid token")try{return await(0,nf.validateRefreshToken)(h),c({status:-1})}catch{throw T}}break}}catch(T){return o6&&(fo.get(h)||(fo.set(h,h),l(p,Ut.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:fi({error:T.message},e)})}fo.set(n,d),i6&&l(d.username,Ut.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await Ze.getUser(_.user,null,e):(KU&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,VU.getSuperUser)());rf&&(e.session.update=function(E){if(!u){u=(0,$U.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=u,qU.put(E)},e.login=async function(E,h){e.user=await Ze.getUser(E,h,e),e.session.update({user:e.user.username})},(d&&!_||_?.user?.username!==d?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let f=await t(e);return f&&(f.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&_i.loginPath?(f.status=302,f.headers.set("Location",_i.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new di);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function c6({server:e,port:t}){e.request(WU,{port:t||"all"}),kU||(kU=!0,setInterval(()=>{fo=new Map},cn.get(Ut.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),YU.user.addListener(()=>{fo=new Map}))}async function u6(e){if(!e.baseRequest?.login)throw new Error("No session for login");return e.baseResponse.headers.set=(t,r)=>{e.fastifyResponse.header(t,r)},await e.baseRequest.login(e.username,e.password),"Login successful"}async function l6(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var VU,nf,$U,cn,Ut,Sa,YU,FU,t6,r6,n6,s6,qU,rf,KU,i6,o6,fo,kU,sf=Re(()=>{VU=x(nn());ir();Pu();nf=x(pu());Ae();$U=require("uuid"),cn=x(re()),Ut=x(U()),Sa=x(K()),YU=x(vc());vu();Ta();FU=(0,Sa.loggerWithTag)("auth-event");cn.initSync();t6=cn.get(Ut.CONFIG_PARAMS.HTTP_CORSACCESSLIST),r6=cn.get(Ut.CONFIG_PARAMS.HTTP_CORS),n6=cn.get(Ut.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),s6=cn.get(Ut.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),qU=at({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),rf=cn.get(Ut.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,KU=cn.get(Ut.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,i6=cn.get(Ut.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,o6=cn.get(Ut.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,fo=new Map;Ze.onInvalidatedUser(()=>{fo=new Map});a(a6,"bypassAuth");a(WU,"authentication");a(c6,"start");a(u6,"login");a(l6,"logout")});var eP=g((Kfe,ZU)=>{"use strict";var Ne=require("joi"),QU=require("fs-extra"),zU=require("path"),Is=je(),JU=re(),XU=U(),jU=K(),{hdb_errors:_6}=ne(),{HDB_ERROR_MSGS:Xt}=_6,Ns=/^[a-zA-Z0-9-_]+$/;ZU.exports={getDropCustomFunctionValidator:f6,setCustomFunctionValidator:E6,addComponentValidator:S6,dropCustomFunctionProjectValidator:T6,packageComponentValidator:g6,deployComponentValidator:R6,setComponentFileValidator:h6,getComponentFileValidator:p6,dropComponentFileValidator:m6};function of(e,t,r){try{let n=JU.get(XU.CONFIG_PARAMS.COMPONENTSROOT),s=zU.join(n,t);return QU.existsSync(s)?e?t:r.message(Xt.PROJECT_EXISTS):e?r.message(Xt.NO_PROJECT):t}catch(n){return jU.error(n),r.message(Xt.VALIDATION_ERR)}}a(of,"checkProjectExists");function Hu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Hu,"checkFilePath");function d6(e,t,r,n){try{let s=JU.get(XU.CONFIG_PARAMS.COMPONENTSROOT),i=zU.join(s,e,t,r+".js");return QU.existsSync(i)?r:n.message(Xt.NO_FILE)}catch(s){return jU.error(s),n.message(Xt.VALIDATION_ERR)}}a(d6,"checkFileExists");function f6(e){let t=Ne.object({project:Ne.string().pattern(Ns).custom(of.bind(null,!0)).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().pattern(Ns).custom(d6.bind(null,e.project,e.type)).custom(Hu).required().messages({"string.pattern.base":Xt.BAD_FILE_NAME})});return Is.validateBySchema(e,t)}a(f6,"getDropCustomFunctionValidator");function E6(e){let t=Ne.object({project:Ne.string().pattern(Ns).custom(of.bind(null,!0)).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().custom(Hu).required(),function_content:Ne.string().required()});return Is.validateBySchema(e,t)}a(E6,"setCustomFunctionValidator");function h6(e){let t=Ne.object({project:Ne.string().pattern(Ns).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),file:Ne.string().custom(Hu).required(),payload:Ne.string().allow("").optional(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Is.validateBySchema(e,t)}a(h6,"setComponentFileValidator");function m6(e){let t=Ne.object({project:Ne.string().pattern(Ns).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),file:Ne.string().custom(Hu).optional()});return Is.validateBySchema(e,t)}a(m6,"dropComponentFileValidator");function p6(e){let t=Ne.object({project:Ne.string().required(),file:Ne.string().custom(Hu).required(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Is.validateBySchema(e,t)}a(p6,"getComponentFileValidator");function S6(e){let t=Ne.object({project:Ne.string().pattern(Ns).custom(of.bind(null,!1)).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME})});return Is.validateBySchema(e,t)}a(S6,"addComponentValidator");function T6(e){let t=Ne.object({project:Ne.string().pattern(Ns).custom(of.bind(null,!0)).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME})});return Is.validateBySchema(e,t)}a(T6,"dropCustomFunctionProjectValidator");function g6(e){let t=Ne.object({project:Ne.string().pattern(Ns).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),skip_node_modules:Ne.boolean()});return Is.validateBySchema(e,t)}a(g6,"packageComponentValidator");function R6(e){let t=Ne.object({project:Ne.string().pattern(Ns).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),payload:Ne.string().optional().messages({"string.pattern.base":Xt.BAD_PACKAGE}),package:Ne.string().optional()});return Is.validateBySchema(e,t)}a(R6,"deployComponentValidator")});var lf=g((Qfe,aP)=>{"use strict";var af=require("joi"),cf=require("path"),tP=require("fs-extra"),{exec:A6}=require("child_process"),O6=require("util"),rP=O6.promisify(A6),xu=U(),{handleHDBError:ga,hdb_errors:b6}=ne(),{HTTP_STATUS_CODES:Ra}=b6,Gu=re(),y6=je(),Aa=K();Gu.initSync();var QT=Gu.get(xu.CONFIG_PARAMS.COMPONENTSROOT),nP="npm install --omit=dev --json",N6=`${nP} --dry-run`;aP.exports={installModules:D6,auditModules:L6,installAllRootModules:I6,uninstallRootModule:w6,linkHarperdb:C6};async function I6(e=!1){await uf(),await Fu(e?"npm install --ignore-scripts":"npm install",Gu.get(xu.CONFIG_PARAMS.ROOTPATH))}a(I6,"installAllRootModules");async function w6(e){await Fu(`npm uninstall ${e}`,Gu.get(xu.CONFIG_PARAMS.ROOTPATH))}a(w6,"uninstallRootModule");async function C6(){await uf(),await Fu(`npm link ${xu.PACKAGE_ROOT}`,Gu.get(xu.CONFIG_PARAMS.ROOTPATH))}a(C6,"linkHarperdb");async function Fu(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await rP(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`