harperdb 4.3.0-beta.13 → 4.3.0-beta.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +2 -2
- package/bin/lite.js +2 -2
- package/launchServiceScripts/launchInstallNATSServer.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +1 -1
- package/launchServiceScripts/launchNatsReplyService.js +2 -2
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +2 -2
- package/npm-shrinkwrap.json +261 -265
- package/package.json +1 -1
- package/server/jobs/jobProcess.js +2 -2
- package/server/threads/threadServer.js +2 -2
- package/studio/build-local/asset-manifest.json +2 -2
- package/studio/build-local/index.html +1 -1
- package/studio/build-local/static/js/{main.34ed8ac1.js → main.199e99ce.js} +2 -2
- package/utility/scripts/restartHdb.js +2 -2
- /package/studio/build-local/static/js/{main.34ed8ac1.js.LICENSE.txt → main.199e99ce.js.LICENSE.txt} +0 -0
|
@@ -4,10 +4,10 @@
|
|
|
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 ft=g((ooe,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 Ir=g((aoe,IO)=>{"use strict";var TO=U(),gO=ft(),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((uoe,DO)=>{"use strict";var xo=Ir(),pk=K(),Sk=U(),Yl=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,wO),this.statusCode=n||xo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(xo.DEFAULT_ERROR_MSGS[n]?xo.DEFAULT_ERROR_MSGS[n]:xo.DEFAULT_ERROR_MSGS[xo.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)}},Oh=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}},bh=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 Yl(e,t,r,n,s);return i&&delete o.stack,o}a(wO,"handleHDBError");function CO(e){return e.__proto__.constructor.name===Yl.name}a(CO,"isHDBError");DO.exports={isHDBError:CO,handleHDBError:wO,ClientError:Oh,ServerError:bh,hdb_errors:xo}});var MO=g((_oe,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 Ze=g((doe,UO)=>{"use strict";var ir=require("validate.js");ir.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||ir.validators.type.checks[t](e)?null:` must be a '${t}' value`};ir.validators.type.checks={Object:function(e){return ir.isObject(e)&&!ir.isArray(e)},Array:ir.isArray,Integer:ir.isInteger,Number:ir.isNumber,String:ir.isString,Date:ir.isDate,Boolean:function(e){return typeof e=="boolean"}};ir.validators.hasValidFileExt=function(e,t){return ir.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=ir(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 ir.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 Nh=g((hoe,xO)=>{"use strict";var HO=require("fs-extra"),ie=require("joi"),Nk=require("os"),{boolean:ye,string:Qt,number:Je,array:yh}=ie.types(),{totalmem:PO}=require("os"),Li=require("path"),Ik=K(),Kl=Q(),Eoe=MO(),vO=U(),wk=Ze(),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",Mi=Je.min(0).required(),Wl=yh.items({host:Qt.required(),port:Mi}).empty(null),Wn;xO.exports={configValidator:Bk,routesValidator:kk,route_constraints:Wl};function Bk(e){if(Wn=e.rootPath,Kl.isEmpty(Wn))throw Pk;let t=ye.required(),r=Je.min(0).max(1e3).empty(null).default(qk),n=Qt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(cc),s=Qt.optional().empty(null),i=Qt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ie.string().empty(null).default(cc),c=ie.custom(xk).empty(null).default(cc),u=e.clustering?.enabled;if(Kl.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:Mi,routes:Wl}).required()}).required(),leafNodes:ie.object({network:ie.object({port:Mi}).required()}).required(),network:ie.object({port:Mi}).required()}).required(),leafServer:ie.object({network:ie.object({port:Mi,routes:Wl}).required(),streams:ie.object({maxAge:Je.min(120).allow(null).optional(),maxBytes:Je.min(1).allow(null).optional(),maxMsgs:Je.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:Qt.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:Je.required(),enableSessions:ye}),analytics:ie.object({aggregatePeriod:Je}),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:Qt.custom(Fk).optional().empty(null),maxSize:Qt.custom(Gk).optional().empty(null),path:Qt.optional().empty(null).default(cc)}).required(),root:n,stdStreams:ye.required(),auditLog:ye.required()}).required(),operationsApi:ie.object({network:ie.object({cors:ye.optional(),corsAccessList:yh.optional(),headersTimeout:Je.min(1).optional(),keepAliveTimeout:Je.min(1).optional(),port:Je.optional().empty(null),domainSocket:ie.optional().empty("hdb/operations-server").default(cc),securePort:Je.optional().empty(null),timeout:Je.min(1).optional()}).optional(),tls:ie.object({certificate:s,certificateAuthority:s,privateKey:s})}).required(),rootPath:Qt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ie.object({network:ie.object({port:Mi,securePort:Mi,mtls:ie.alternatives([ye.optional(),ie.object({user:Qt.optional(),certificateAuthority:s,required:ye.optional()})])}).required(),webSocket:ye.optional(),requireAuthentication:ye.optional()}),http:ie.object({compressionThreshold:Je.optional(),cors:ye.optional(),corsAccessList:yh.optional(),headersTimeout:Je.min(1).optional(),port:Je.min(0).optional().empty(null),securePort:Je.min(0).optional().empty(null),maxHeaderSize:Je.optional(),mtls:ie.alternatives([ye.optional(),ie.object({user:Qt.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:Je.min(1).optional(),host:Qt.optional(),waitForDebugger:ye.optional()})),maxHeapMemory:Je.min(0).optional()})),storage:ie.object({writeAsync:ye.required(),overlappingSync:ye.optional(),caching:ye.optional(),compression:ie.alternatives([ye.optional(),ie.object({dictionary:Qt.optional(),threshold:Je.optional()})]),noReadAhead:ye.optional(),path:c,prefetchWrites:ye.optional(),maxFreeSpaceToLoad:Je.optional(),maxFreeSpaceToRetain:Je.optional()}).required(),ignoreScripts:ye.optional(),tls:ie.object({certificate:s.optional(),certificateAuthority:s.optional(),privateKey:s.optional(),ciphers:Qt.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,Qt.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 cc(e,t){let r=t.state.path.join(".");if(!Kl.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Kl.isEmpty(Wn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Li.join(Wn,Ck);case"logging.root":return Li.join(Wn,BO);case"clustering.leafServer.streams.path":return Li.join(Wn,"clustering","leaf");case"storage.path":let n=Li.join(Wn,vO.LEGACY_DATABASES_DIR_NAME);return HO.existsSync(n)?n:Li.join(Wn,vO.DATABASES_DIR_NAME);case"logging.rotation.path":return Li.join(Wn,BO);case"operationsApi.network.domainSocket":return r==null?null:Li.join(Wn,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(cc,"setDefaultRoot");function kk(e){let t=ie.object({routes:Wl});return wk.validateBySchema({routes:e},t)}a(kk,"routesValidator")});var Ui={};$e(Ui,{server:()=>et});var GO,et,or=Re(()=>{GO=require("../../index"),et={};(0,GO._assignPackageExport)("server",et)});var Dr=g((Soe,QO)=>{"use strict";var Cr=U(),Lt=Q(),bt=K(),{configValidator:Vk,routesValidator:FO}=Nh(),ar=require("fs-extra"),$k=require("yaml"),On=require("path"),Yk=require("is-number"),kO=require("properties-reader"),Kk=require("lodash"),{handleHDBError:Wk}=ne(),{HTTP_STATUS_CODES:Qk,HDB_ERROR_MSGS:Ql}=Ir(),poe=require("minimist"),{server:zk}=(or(),se(Ui)),{DATABASES_PARAM_CONFIG:uc,CONFIG_PARAMS:wr,CONFIG_PARAM_MAP:bn}=Cr,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=On.join(Cr.PACKAGE_ROOT,"config","yaml",Cr.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"},zl,yt,Jl;QO.exports={createConfigFile:tV,getDefaultConfig:rV,getConfigValue:YO,initConfig:wh,flattenConfig:Go,updateConfigValue:KO,updateConfigObject:sV,getConfiguration:aV,setConfiguration:cV,readConfigFile:Dh,getClusteringRoutes:uV,initOldConfig:WO,getConfigFromFile:lV,getConfigFilePath:Pi,addConfig:_V,deleteConfigFromFile:dV,getConfigObj:fV};function tV(e){let t=Xs(VO);zl=Go(t.toJSON());let r;for(let o in e){let c=bn[o.toLowerCase()];if(c===wr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=Ih(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){bt.error(l)}}}r&&$O(t,r),Ch(t);let n=t.toJSON();yt=Go(n);let s=t.getIn(["rootPath"]),i=On.join(s,Cr.HDB_CONFIG_FILE);ar.createFileSync(i),ar.writeFileSync(i,String(t)),bt.trace(`Config file written to ${i}`)}a(tV,"createConfigFile");function $O(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Lt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(uc.TABLES))for(let i in n[s][uc.TABLES])for(let o in n[s][uc.TABLES][i]){let c=n[s][uc.TABLES][i][o],u=[wr.DATABASES,s,uc.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=[wr.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){bt.error("Error parsing schemas CLI/env config arguments",n)}}a($O,"setSchemasConfig");function rV(e){if(zl===void 0){let r=Xs(VO);zl=Go(r.toJSON())}let t=bn[e.toLowerCase()];if(t!==void 0)return zl[t.toLowerCase()]}a(rV,"getDefaultConfig");function YO(e){if(e==null){bt.error(Zk);return}if(yt===void 0){bt.trace(Jk);return}let t=bn[e.toLowerCase()];if(t!==void 0)return yt[t.toLowerCase()]}a(YO,"getConfigValue");function Pi(e=Lt.getPropsFilePath()){let t=Lt.getEnvCliRootPath();return t?On.join(t,Cr.HDB_CONFIG_FILE):kO(e).get(Cr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Pi,"getConfigFilePath");function wh(e=!1){if(yt===void 0||e){let t;if(!Lt.noBootFile()){t=Lt.getPropsFilePath();try{ar.accessSync(t,ar.constants.F_OK|ar.constants.R_OK)}catch(i){throw bt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Pi(t),n;if(r.includes("config/settings.js"))try{WO(r);return}catch(i){if(i.code!==Cr.NODE_ERROR_CODES.ENOENT)throw i}try{n=Xs(r)}catch(i){if(i.code===Cr.NODE_ERROR_CODES.ENOENT){bt.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 bt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}nV(n,r),Ch(n);let s=n.toJSON();if(zk.config=s,yt=Go(s),yt.logging_rotation_rotate)for(let i in qO)yt[i]&&bt.error(`Config ${qO[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);bt.trace(Xk)}}a(wh,"initConfig");function nV(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],On.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],On.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],On.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),n&&(bt.trace("Updating config file with missing config params"),ar.writeFileSync(t,String(e)))}a(nV,"checkForUpdatedConfig");function Ch(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 Ql.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(Ch,"validateConfig");function sV(e,t){yt===void 0&&(yt={});let r=bn[e.toLowerCase()];if(r===void 0){bt.trace(`Unable to update config object because config param '${e}' does not exist`);return}yt[r.toLowerCase()]=t}a(sV,"updateConfigObject");function KO(e,t,r=void 0,n=!1,s=!1,i=!1){yt===void 0&&wh();let o=YO(bn.hdb_root),c=On.join(o,Cr.HDB_CONFIG_FILE),u=Xs(c),_;if(r===void 0&&e.toLowerCase()===wr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=bn[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=Ih(f,t);u.setIn([...E],h)}else for(let f in r){let E=bn[f.toLowerCase()];if(E===wr.HTTP_SECUREPORT&&r[f]===yt[wr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===wr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===yt[wr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===wr.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=Cr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=Ih(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){bt.error(T)}}}_&&$O(u,_),Ch(u);let l=u.getIn(["rootPath"]),d=On.join(l,Cr.HDB_CONFIG_FILE);n===!0&&iV(c,l),ar.writeFileSync(d,String(u)),s&&(yt=Go(u.toJSON())),bt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(KO,"updateConfigValue");function iV(e,t){try{let r=On.join(t,"backup",`${Cr.HDB_CONFIG_FILE}.bak`);ar.copySync(e,r),bt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){bt.error(jk),bt.error(r)}}a(iV,"backupConfigFile");var oV=["databases"];function Go(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)),Jl=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;!wr[u.toUpperCase()]&&bn[u]&&(s[bn[u].toLowerCase()]=o[c]),s[u]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Go,"flattenConfig");function Ih(e,t){if(e===wr.CLUSTERING_NODENAME||e===wr.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)||Lt.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 Lt.autoCast(t)}a(Ih,"castConfigValue");function aV(){let e=Lt.getPropsFilePath(),t=Pi(e);return Xs(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 Dh(){let e=Lt.getPropsFilePath();try{ar.accessSync(e,ar.constants.F_OK|ar.constants.R_OK)}catch(n){if(!Lt.noBootFile())throw bt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Pi(e);return Xs(t).toJSON()}a(Dh,"readConfigFile");function Xs(e){return $k.parseDocument(ar.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Xs,"parseYamlDoc");function uV(){let e=Dh(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Lt.isEmptyOrZeroLength(t)?[]:t;let r=FO(t);if(r)throw Ql.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Lt.isEmptyOrZeroLength(n)?[]:n;let s=FO(n);if(s)throw Ql.CONFIG_VALIDATION(s.message);if(!Lt.isEmptyOrZeroLength(n)&&!Lt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Lt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Ql.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(uV,"getClusteringRoutes");function WO(e){let t=kO(e);yt={};for(let r in bn){let n=t.get(r.toUpperCase());if(Lt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=bn[r].toLowerCase();s===wr.LOGGING_ROOT?yt[s]=On.dirname(n):yt[s]=n}return yt}a(WO,"initOldConfig");function lV(e){let t=Dh();return Kk.get(t,e.replaceAll("_","."))}a(lV,"getConfigFromFile");async function _V(e,t){let r=Xs(Pi());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await ar.writeFile(Pi(),String(r))}a(_V,"addConfig");function dV(e){let t=Pi(Lt.getPropsFilePath()),r=Xs(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=On.join(n,Cr.HDB_CONFIG_FILE);ar.writeFileSync(s,String(r))}a(dV,"deleteConfigFromFile");function fV(){return Jl||(wh(),Jl)}a(fV,"getConfigObj")});var re=g((goe,jO)=>{"use strict";var Lh=require("fs-extra"),vi=require("path"),zO=require("os"),EV=require("properties-reader"),_c=K(),lc=Q(),ue=U(),Xl=Dr(),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},Ss={};jO.exports={BOOT_PROPS_FILE_PATH:jl,getHdbBasePath:pV,setHdbBasePath:SV,get:XO,initSync:gV,setProperty:Me,initTestEnvironment:RV};function pV(){return Ss[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(pV,"getHdbBasePath");function SV(e){Ss[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(SV,"setHdbBasePath");function XO(e){let t=Xl.getConfigValue(e);return t===void 0?Ss[e]:t}a(XO,"get");function Me(e,t){mV[e]&&(Ss[e]=t),Xl.updateConfigObject(e,t)}a(Me,"setProperty");function TV(){let e;try{e=lc.getPropsFilePath(),Lh.accessSync(e,Lh.constants.F_OK|Lh.constants.R_OK),JO=!0;let t=EV(e);return Ss[ue.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ue.HDB_SETTINGS_NAMES.INSTALL_USER),Ss[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ss[jl]=e,!0}catch{return _c.trace(`Environment manager found no properties file at ${e}`),!1}}a(TV,"doesPropFileExist");function gV(e=!1){try{(JO||TV()||lc.noBootFile())&&(Xl.initConfig(e),Ss[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Xl.getConfigValue(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){_c.error(hV),_c.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=vi.join(__dirname,"../../","unitTests");Ss[jl]=vi.join(u,"hdb_boot_properties.file"),Me(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,vi.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,vi.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,vi.join(u,"envDir")),Me(ue.CONFIG_PARAMS.STORAGE_PATH,vi.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,lc.isEmpty(i)?!1:i),Me(ue.CONFIG_PARAMS.HTTP_CORS,lc.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,vi.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Me(ue.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,lc.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`;_c.fatal(r),_c.error(t)}}a(RV,"initTestEnvironment")});var Qe=g((Aoe,ib)=>{"use strict";var mc=U(),AV=Q(),cr=re(),pc=require("path"),OV=require("minimist"),ZO=require("fs-extra"),eb=require("lodash");cr.initSync();var{CONFIG_PARAMS:js,DATABASES_PARAM_CONFIG:dc,SYSTEM_SCHEMA_NAME:Zl}=mc,fc,Ec,hc;function tb(){if(fc!==void 0)return fc;if(cr.getHdbBasePath()!==void 0)return fc=cr.get(js.STORAGE_PATH)||pc.join(cr.getHdbBasePath(),mc.DATABASES_DIR_NAME),fc}a(tb,"getBaseSchemaPath");function rb(){if(Ec!==void 0)return Ec;if(cr.getHdbBasePath()!==void 0)return Ec=sb(Zl),Ec}a(rb,"getSystemSchemaPath");function nb(){if(hc!==void 0)return hc;if(cr.getHdbBasePath()!==void 0)return hc=cr.get(mc.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||pc.join(cr.getHdbBasePath(),mc.TRANSACTIONS_DIR_NAME),hc}a(nb,"getTransactionAuditStoreBasePath");function bV(e,t){let r=cr.get(js.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||pc.join(nb(),e.toString())}a(bV,"getTransactionAuditStorePath");function sb(e,t){e=e.toString(),t=t&&t.toString();let r=cr.get(mc.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||pc.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[js.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[Zl];if(!c)continue;let u=cr.get(js.DATABASES);u=u??{};let _=c?.tables?.[t]?.[dc.PATH];if(_)return eb.set(u,[Zl,dc.TABLES,t,dc.PATH],_),cr.setProperty(js.DATABASES,u),_;let l=c?.[dc.PATH];if(l)return eb.set(u,[Zl,dc.PATH],l),cr.setProperty(js.DATABASES,u),l}}let s=r[js.STORAGE_PATH.toUpperCase()];if(s){if(!ZO.pathExistsSync(s))throw new Error(s+" does not exist");let i=pc.join(s,e);return ZO.mkdirsSync(i),cr.setProperty(js.STORAGE_PATH,s),i}return rb()}a(yV,"initSystemSchemaPaths");function NV(){fc=void 0,Ec=void 0,hc=void 0}a(NV,"resetPaths");ib.exports={getBaseSchemaPath:tb,getSystemSchemaPath:rb,getTransactionAuditStorePath:bV,getTransactionAuditStoreBasePath:nb,getSchemaPath:sb,initSystemSchemaPaths:yV,resetPaths:NV}});var Lr=g((Noe,lb)=>{"use strict";var IV=Ir().LMDB_ERRORS_ENUM,boe=require("lmdb"),wV=ft(),yoe=require("buffer").Buffer,{OVERFLOW_MARKER:ob,MAX_SEARCH_KEY_LENGTH:e_}=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>e_?[e.slice(0,e_)+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>e_?r.push(i.slice(0,e_)+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 t_=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>t_?(t_=e,e):(t_+=488e-6,t_)}a(PV,"getNextMonotonicTime");lb.exports={validateEnv:CV,stringifyData:DV,convertKeyValueToWrite:LV,getNextMonotonicTime:PV,getIndexedValues:MV}});var _b,yn,Mh,Sc=Re(()=>{_b=require("events"),yn=class extends _b.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new Mh;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)}},Mh=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 vh={};$e(vh,{loadGQLSchema:()=>HV,start:()=>Ph,startOnMainThread:()=>BV});function Ph({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 X=H(P.type);return X.nullable=!1,X}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 X={};for(let z of B.arguments)X[z.name.value]=z.value.value;k.relationship=X}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 X=k.authorizedRoles=[];for(let z of B.arguments)z.name.value==="role"&&X.push(z.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,Uh.dirname)(n),S.tableClass):i.set((0,Uh.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var Uh,db,vV,BV,HV,fb=Re(()=>{Uh=require("path");Ae();db=x(tt()),vV=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(Ph,"start");BV=Ph,HV=Ph({ensureTable:ct}).handleFile});async function r_(e){return xV?(Tc||(Tc=GV(qV)),(await(await Tc).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"}),Tc=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:qt,tables:Mr,databases:rt})}};let n=await(0,Eb.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Tc}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:qt,tables:Mr}}var Eb,hb,xV,Tc,Bh=Re(()=>{Nn();Ae();Eb=require("fs/promises"),hb=require("path"),xV=!1;a(r_,"secureImport");a(GV,"getCompartment");a(FV,"secureOnlyFetch");a(qV,"getGlobalVars")});var xh={};$e(xh,{handleFile:()=>kV});async function kV(e,t,r,n){let s=new Map,i=(0,mb.pathToFileURL)(r).toString(),o=await r_(i);u(o.default)&&n.set((0,Hh.dirname)(t),o.default),c(o,(0,Hh.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,Hh,pb=Re(()=>{mb=require("url");Bh();Hh=require("path");a(kV,"handleFile")});var Fh={};$e(Fh,{start:()=>VV});function VV({resources:e}){e.set("login",Gh),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Gh,Sb=Re(()=>{Nn();a(VV,"start");Gh=class extends qt{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:()=>kh,streamAsJSON:()=>gc,stringify:()=>Bi});function gc(e){return new qh({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 Bi(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===Ob)return bb(e);if(t.resolution)return t.resolution.then(()=>Bi(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)+":"+Bi(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function kh(e){return KV.test(e)?$V.parse(e):JSON.parse(e)}var Rb,Ab,$V,YV,Ob,qh,KV,Vh=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(gc,"streamAsJSON");qh=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 Bi(t)}else yield Bi(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(Bi,"stringify");a(bb,"jsStringify");KV=/-?\d{16,}/;a(kh,"parse")});var xb=g((koe,Hb)=>{"use strict";var $h=require("recursive-iterator"),WV=require("alasql"),Yh=require("clone"),Nb=Q(),{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"),qoe=Symbol("getAllColumns"),Lb=Symbol("validateAllColumns"),n_=Symbol("findColumn"),Mb=Symbol("validateOrderBy"),Rc=Symbol("validateSegment"),Wh=Symbol("validateColumn"),Ub=Symbol("setColumnsForTable"),Pb=Symbol("checkColumnsForAsterisk"),vb=Symbol("validateGroupBy"),Bb=Symbol("hasColumns"),Qh=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 $h(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=Yh(s);i.table=Yh(t),this.attributes.push(i)})}[n_](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 $h(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[Rc](this.statement.columns,!1),this[Rc](this.statement.joins,!1),this[Rc](this.statement.where,!1),this[vb](this.statement.group,!1),this[Rc](this.statement.order,!0)}[Rc](t,r){if(!t)return;let n=new $h(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[Wh](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=Yh(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[n_](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[n_](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[Wh](t)}[Wh](t){let r=this[n_](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=Qh});var Fb=g(($oe,Gb)=>{"use strict";var zh=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=zh});var kb=g((Koe,qb)=>{"use strict";var Jh=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};qb.exports=Jh});var Kb={};$e(Kb,{HAS_EXPIRATION:()=>nm,LAST_TIMESTAMP_PLACEHOLDER:()=>bc,LOCAL_TIMESTAMP:()=>XV,METADATA:()=>Ac,NO_TIMESTAMP:()=>jh,PENDING_LOCAL_TIME:()=>sm,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>rm,RecordEncoder:()=>tm,TIMESTAMP_ASSIGN_LAST:()=>ZV,TIMESTAMP_ASSIGN_NEW:()=>$b,TIMESTAMP_ASSIGN_PREVIOUS:()=>Yb,TIMESTAMP_PLACEHOLDER:()=>s_,TIMESTAMP_RECORD_PREVIOUS:()=>Zh,getUpdateRecord:()=>im,handleLocalTimeForGets:()=>c_});function t$(){return Oc[0]=Oc[0]^64,jV.getFloat64(0)}function c_(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?.[Ac];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?.[Ac]>=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[Ac];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Hi.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Hi.length;u++){let _=Hi[u].deref();(!_||_.isDone||_.isCommitted)&&Hi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function im(e,t,r){return function(n,s,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?Fo=i?.localTime?Zh|Yb:jh:Fo=u?i?.localTime?Zh|16384:$b|16384:jh,l>0&&(c|=nm),o_=c,em=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Fo>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&&(i_=e.encoder.encode(E)),f&&i?.localTime){let b=i?.localTime,R=r.get(b);if(R){let L=Mt(R).previousLocalTime;return r.put(b,a_(o,t,n,L,T,d,i_),{ifVersion:p}),S}}r.put(bc,a_(o,t,n,i?.localTime?1:0,T,d,i_),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var Vb,Xh,s_,bc,rm,XV,Ac,Oc,jV,jh,$b,ZV,Yb,Zh,nm,sm,e$,i_,Fo,o_,em,tm,Hi,yc=Re(()=>{Vb=require("msgpackr");xi();Xh=x(K()),s_=new Uint8Array([1,1,1,1,4,64,0,0]),bc=new Uint8Array([1,1,1,1,1,0,0,0]),rm=new Uint8Array([1,1,1,1,3,64,0,0]),XV=Symbol("local-timestamp"),Ac=Symbol("metadata"),Oc=new Uint8Array(8),jV=new DataView(Oc.buffer,0,8),jh=0,$b=0,ZV=1,Yb=3,Zh=4,nm=16,sm=1,Fo=0,o_=-1,em=0,tm=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(Fo||o_>=0){let i=0,o=Fo;o&&(i+=8,Fo=0);let c=o_,u=em;c>=0&&(i+=2,o_=-1,u&&(i+=8,em=0));let _=e$=r.call(this,n,s|2048|i);i_=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(s_[4]=o,s_[5]=o>>8,_.set(s_,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(Oc,0,c),c+=8;else for(let d=0;d<8;d++)Oc[d]=t[c++];u=t$(),i=t[c]}let _;i<32&&(o=i,c+=2,o&nm&&(_=(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,[Ac]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(t$,"getTimestamp");a(c_,"handleLocalTimeForGets");Hi=[];setInterval(()=>{for(let e=0;e<Hi.length;e++){let t=Hi[e].deref();!t||t.isDone||t.isCommitted?Hi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Xh.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Xh.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(im,"getUpdateRecord")});var u_=g((Xoe,Qb)=>{"use strict";var Wb=re(),r$=U(),{RecordEncoder:n$}=(yc(),se(Kb)),Joe=require("fs");Wb.initSync();var s$=Wb.get(r$.CONFIG_PARAMS.STORAGE_CACHING)!==!1,om=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=s$&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:n$})}};Qb.exports=om});var __=g((Zoe,zb)=>{"use strict";var Ur=re(),nn=U();Ur.initSync();var l_=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=Ur.get(nn.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Ur.get(nn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Ur.get(nn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Ur.get(nn.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Ur.get(nn.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Ur.get(nn.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Ur.get(nn.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Ur.get(nn.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Ur.get(nn.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Ur.get(nn.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Ur.get(nn.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Ur.get(nn.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};zb.exports=l_;l_.MAX_DBS=1e4});var Ye=g((tae,iy)=>{"use strict";var cm=require("lmdb"),In=require("fs-extra"),Pr=require("path"),d_=Lr(),jb=K(),ur=Ir().LMDB_ERRORS_ENUM,f_=kb(),um=u_(),Zb=__(),Zs=ft(),Jb=U(),{table:i$,resetDatabases:o$}=(Ae(),se(Fe)),Xb=re(),wn=Zs.INTERNAL_DBIS_NAME,ey=Zs.DBI_DEFINITION_NAME,a$="data.mdb",c$="lock.mdb",Nc=".mdb",u$="-lock",am=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=sn(t,r),this.key_type=this.dbi[Zs.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Zs.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new cm.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function E_(e,t){if(e===void 0)throw new Error(ur.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(ur.ENV_NAME_REQUIRED)}a(E_,"pathEnvNameValidation");async function lm(e,t,r=!0){try{await In.access(e)}catch(n){throw n.code==="ENOENT"?new Error(ur.INVALID_BASE_PATH):n}try{let n=Pr.join(e,t+Nc);return await In.access(n,In.constants.R_OK|In.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await In.access(Pr.join(e,t,a$),In.constants.R_OK|In.constants.F_OK),Pr.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(ur.INVALID_ENVIRONMENT)}else throw new Error(ur.INVALID_ENVIRONMENT);throw n}}a(lm,"validateEnvironmentPath");function h_(e,t){if(d_.validateEnv(e),t===void 0)throw new Error(ur.DBI_NAME_REQUIRED)}a(h_,"validateEnvDBIName");async function l$(e,t,r=!1,n=!1){E_(e,t);let s=Pr.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 lm(e,t,n),ty(e,t,r)}catch(o){if(o.message===ur.INVALID_ENVIRONMENT){let c=Pr.join(e,t);await In.mkdirp(n?c:e);let u=new Zb(n?c:c+Nc,!1),_=cm.open(u);_.dbis=Object.create(null);let l=new um(!1);_.openDB(wn,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=_m(e,t,r);return _[Zs.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(l$,"createEnvironment");async function _$(e,t,r,n=!0){E_(e,t),t=t.toString();let s=Pr.join(e,t);return i$({table:t,database:Pr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(_$,"copyEnvironment");async function ty(e,t,r=!1){E_(e,t),t=t.toString();let n=_m(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 lm(e,t),i=Pr.join(e,t+Nc),o=s!=i,c=new Zb(s,o),u=cm.open(c);u.dbis=Object.create(null);let _=ny(u);for(let l=0;l<_.length;l++)sn(u,_[l]);return u[Zs.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=u,u}a(ty,"openEnvironment");async function d$(e,t,r=!1){E_(e,t),t=t.toString();let n=Pr.join(e,t+Nc),s=await lm(e,t);if(global.lmdb_map!==void 0){let i=_m(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await ry(o),delete global.lmdb_map[i]}}await In.remove(s),await In.remove(s===n?s+u$:Pr.join(Pr.dirname(s),c$))}a(d$,"deleteEnvironment");async function ry(e){d_.validateEnv(e);let t=e[Zs.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(ry,"closeEnvironment");function _m(e,t,r=!1){let s=`${Pr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(_m,"getCachedEnvironmentName");function f$(e){d_.validateEnv(e);let t=Object.create(null),r=sn(e,wn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==wn)try{t[n]=Object.assign(new f_,s)}catch{jb.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(f$,"listDBIDefinitions");function ny(e){d_.validateEnv(e);let t=[],r=sn(e,wn);for(let{key:n}of r.getRange({start:!1}))n!==wn&&t.push(n);return t}a(ny,"listDBIs");function E$(e,t){let n=sn(e,wn).getEntry(t),s=new f_;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(E$,"getDBIDefinition");function sy(e,t,r,n=!r){if(h_(e,t),t=t.toString(),t===wn)throw new Error(ur.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return sn(e,t)}catch(s){if(s.message===ur.DBI_DOES_NOT_EXIST){let i=new um(r,n===!0),o=e.openDB(t,i),c=new f_(r===!0,n);return o[ey]=c,sn(e,wn).putSync(t,c),e.dbis[t]=o,o}throw s}}a(sy,"createDBI");function sn(e,t){if(h_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==wn?r=E$(e,t):r=new f_,r===void 0)throw new Error(ur.DBI_DOES_NOT_EXIST);let n;try{let s=new um(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(ur.DBI_DOES_NOT_EXIST):s}return n[ey]=r,e.dbis[t]=n,n}a(sn,"openDBI");function h$(e,t){h_(e,t),t=t.toString();let r=sn(e,t),n=r.getStats();return r[Zs.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(h$,"statDBI");async function m$(e,t){try{let r=Pr.join(e,t+Nc);return(await In.stat(r)).size}catch{throw new Error(ur.INVALID_ENVIRONMENT)}}a(m$,"environmentDataSize");function p$(e,t){if(h_(e,t),t=t.toString(),t===wn)throw new Error(ur.CANNOT_DROP_INTERNAL_DBIS_NAME);sn(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],sn(e,wn).removeSync(t)}a(p$,"dropDBI");function S$(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{sn(e,i)}catch(o){if(o.message===ur.DBI_DOES_NOT_EXIST)sy(e,i,i!==t,i===t),n=!0;else throw o}}n&&o$()}a(S$,"initializeDBIs");iy.exports={openDBI:sn,openEnvironment:ty,createEnvironment:l$,listDBIs:ny,listDBIDefinitions:f$,createDBI:sy,dropDBI:p$,statDBI:h$,deleteEnvironment:d$,initializeDBIs:S$,TransactionCursor:am,environmentDataSize:m$,copyEnvironment:_$,closeEnvironment:ry}});var ay=g((nae,oy)=>{"use strict";var dm=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=dm});var uy=g((iae,cy)=>{"use strict";var fm=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=fm});var _y=g((aae,ly)=>{"use strict";var Em=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=Em});var qo=g((dae,Ey)=>{"use strict";var T$=Ye(),g$=ay(),R$=uy(),A$=_y(),Qn=Lr(),Ic=Ir().LMDB_ERRORS_ENUM,O$=ft(),Ts=U(),b$=Q(),y$=require("uuid"),uae=require("lmdb"),{handleHDBError:N$,hdb_errors:I$}=ne(),{OVERFLOW_MARKER:lae,MAX_SEARCH_KEY_LENGTH:_ae}=O$,dy=re();dy.initSync();var m_=dy.get(Ts.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),hm=Ts.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Gi=Ts.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function w$(e,t,r,n,s=Qn.getNextMonotonicTime()){Tm(e,t,r,n),mm(e,t,r);let i=new g$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u];fy(_,!0,s);let l=C$(e,t,r,_),d=_[t];o.push(l),c.push(d)}return pm(o,c,n,i,s)}a(w$,"insertRecords");function C$(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][Ts.FUNC_VAL],n[o]=c)}let u=Qn.getIndexedValues(c),_=e.dbis[o];if(u){m_&&_.prefetch(u.map(l=>({key:l,value:s})),p_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],s)}}m_&&e.dbis[t].prefetch([s],p_),e.dbis[t].put(s,n,n[Gi])})}a(C$,"insertRecord");function D$(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(D$,"removeSkippedRecords");function fy(e,t,r){let n=r>0;(n||!Number.isInteger(e[Gi]))&&(e[Gi]=r||(r=Qn.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[hm]))&&(e[hm]=r||Qn.getNextMonotonicTime()):delete e[hm]}a(fy,"setTimestamps");function mm(e,t,r){r.indexOf(Ts.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Ts.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Ts.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Ts.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),T$.initializeDBIs(e,t,r)}a(mm,"initializeTransaction");async function L$(e,t,r,n,s=Qn.getNextMonotonicTime()){Tm(e,t,r,n),mm(e,t,r);let i=new R$,o=[],c=[],u=[];for(let _=0;_<n.length;_++){let l=n[_],d=l[t],f;try{f=Sm(e,t,l,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return pm(c,u,n,i,s,o)}a(L$,"updateRecords");async function M$(e,t,r,n,s=Qn.getNextMonotonicTime()){try{Tm(e,t,r,n)}catch(u){throw N$(u,u.message,I$.HTTP_STATUS_CODES.BAD_REQUEST)}mm(e,t,r);let i=new A$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u],l;b$.isEmpty(_[t])?(l=y$.v4(),_[t]=l):l=_[t];let d=Sm(e,t,_,l,i,!1,s);o.push(d),c.push(l)}return pm(o,c,n,i,s)}a(M$,"upsertRecords");async function pm(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||Qn.getNextMonotonicTime(),D$(r,i),n}a(pm,"finalizeWrite");function Sm(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[Gi])&&_[Gi]>r[Gi])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][Ts.FUNC_VAL],r[h]=p)}if(p===T)continue;let b=Qn.getIndexedValues(T);if(b){m_&&S.prefetch(b.map(R=>({key:R,value:n})),p_);for(let R=0,L=b.length;R<L;R++)S.remove(b[R],n)}if(b=Qn.getIndexedValues(p),b){m_&&S.prefetch(b.map(R=>({key:R,value:n})),p_);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[Gi])},"do_put");return u?d=c.ifVersion(n,u.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:Sm(e,t,r,n,s,i,o))}a(Sm,"updateUpsertRecord");function U$(e,t,r){if(Qn.validateEnv(e),t===void 0)throw new Error(Ic.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ic.WRITE_ATTRIBUTES_REQUIRED):new Error(Ic.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(U$,"validateBasic");function Tm(e,t,r,n){if(U$(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Ic.RECORDS_REQUIRED):new Error(Ic.RECORDS_MUST_BE_ARRAY)}a(Tm,"validateWrite");function p_(){}a(p_,"noop");Ey.exports={insertRecords:w$,updateRecords:L$,upsertRecords:M$}});var Fi=g((Eae,P$)=>{P$.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 Jn=g((hae,py)=>{"use strict";var my=Q(),hy=U(),ko=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,zn=require("joi"),ei={schema_format:{pattern:ko,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},v$=zn.alternatives(zn.string().min(1).max(ei.schema_length.maximum).pattern(ko).messages({"string.pattern.base":"{:#label} "+ei.schema_format.message}),zn.number(),zn.array()).required(),B$=zn.alternatives(zn.string().min(1).max(ei.schema_length.maximum).pattern(ko).messages({"string.pattern.base":"{:#label} "+ei.schema_format.message}),zn.number()),H$=zn.alternatives(zn.string().min(1).max(ei.schema_length.maximum).pattern(ko).messages({"string.pattern.base":"{:#label} "+ei.schema_format.message}),zn.number()).required();function x$(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>ei.schema_length.maximum?`'${e}' maximum of 250 characters`:ko.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(x$,"checkValidTable");function G$(e,t){return my.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(G$,"validateSchemaExists");function F$(e,t){let r=t.state.ancestors[0].schema;return my.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(F$,"validateTableExists");function q$(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(q$,"validateSchemaName");py.exports={common_validators:ei,schema_regex:ko,hdb_schema_table:v$,validateSchemaExists:G$,validateTableExists:F$,validateSchemaName:q$,checkValidTable:x$,hdb_database:B$,hdb_table:H$}});var S_=g((pae,Sy)=>{var{common_validators:Xn}=Jn(),Cc=Ze(),wc="is required",Et={database:{presence:!1,format:Xn.schema_format,length:Xn.schema_length},schema:{presence:!1,format:Xn.schema_format,length:Xn.schema_length},table:{presence:!0,format:Xn.schema_format,length:Xn.schema_length},attribute:{presence:!0,format:Xn.schema_format,length:Xn.schema_length},hash_attribute:{presence:!0,format:Xn.schema_format,length:Xn.schema_length}};function Dc(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(Dc,"makeAttributesStrings");function k$(e){return e=Dc(e),Et.table.presence=!1,Et.attribute.presence=!1,Et.hash_attribute.presence=!1,Cc.validateObject(e,Et)}a(k$,"schema_object");function V$(e){return e=Dc(e),Et.table.presence={message:wc},Et.attribute.presence=!1,Et.hash_attribute.presence=!1,Cc.validateObject(e,Et)}a(V$,"table_object");function $$(e){return e=Dc(e),Et.table.presence={message:wc},Et.attribute.presence=!1,Cc.validateObject(e,Et)}a($$,"create_table_object");function Y$(e){return e=Dc(e),Et.table.presence={message:wc},Et.attribute.presence={message:wc},Et.hash_attribute.presence=!1,Cc.validateObject(e,Et)}a(Y$,"attribute_object");function K$(e){return e=Dc(e),Et.table.presence={message:wc},Et.attribute.presence=!1,Et.hash_attribute.presence=!1,Cc.validateObject(e,Et)}a(K$,"describe_table");function W$(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(W$,"validateTableResidence");Sy.exports={schema_object:k$,create_table_object:$$,table_object:V$,attribute_object:Y$,describe_table:K$,validateTableResidence:W$}});var gy=g((Tae,Ty)=>{"use strict";var Q$=require("uuid"),gm=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||Q$.v4(),this.schema_table=`${this.schema}.${this.table}`}};Ty.exports=gm});var T_=g((Rae,Ry)=>{"use strict";var z$=gy(),Rm=class extends z${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=Rm});var Oy=g((Oae,Ay)=>{"use strict";Ay.exports=X$;var J$="inserted";function X$(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===J$?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(X$,"returnObject")});var g_=g((yae,wy)=>{"use strict";var j$=U(),Am=Ye(),Z$=qo(),{getSystemSchemaPath:e1,getSchemaPath:t1}=Qe(),r1=Fi(),n1=S_(),s1=T_(),i1=Oy(),{handleHDBError:by,hdb_errors:Ny}=ne(),yy=Q(),{HTTP_STATUS_CODES:o1}=Ny,Om=r1.hdb_attribute,Iy=[];for(let e=0;e<Om.attributes.length;e++)Iy.push(Om.attributes[e].attribute);var a1="inserted";wy.exports=c1;async function c1(e){let t=n1.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,o1.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 s1(e.schema,e.table,e.attribute,e.id);try{let i=await Am.openEnvironment(t1(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}`);Am.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Am.openEnvironment(e1(),j$.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Z$.insertRecords(o,Om.hash_attribute,Iy,[s]);return i1(a1,c,{records:[s]},u)}catch(i){throw i}}a(c1,"lmdbCreateAttribute")});var ym=g((Iae,Dy)=>{var{hdb_table:u1,hdb_database:Cy}=Jn(),l1=Ze(),bm=require("joi"),_1={undefined:"undefined",null:"null"},d1=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||_1[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"),f1=bm.object({database:Cy,schema:Cy,table:u1,records:bm.array().items(bm.object().custom(d1)).required()});Dy.exports=function(e){return l1.validateBySchema(e,f1)}});var Lc=g((Dae,My)=>{"use strict";var gs=Q(),Ly=K(),Cae=ym(),{getDatabases:E1}=(Ae(),se(Fe)),{ClientError:qi}=ne();My.exports=h1;function h1(e){if(gs.isEmpty(e))throw new qi("invalid update parameters defined.");if(gs.isEmptyOrZeroLength(e.schema))throw new qi("invalid schema specified.");if(gs.isEmptyOrZeroLength(e.table))throw new qi("invalid table specified.");if(!Array.isArray(e.records))throw new qi("records must be an array");let t=E1()[e.schema]?.[e.table];if(gs.isEmpty(t))throw new qi(`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&&gs.isEmptyOrZeroLength(o[r]))throw Ly.error("a valid hash attribute must be provided with update record:",o),new qi("a valid hash attribute must be provided with update record, check log for more info");if(!gs.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 qi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!gs.isEmpty(o[r])&&o[r]!==""&&n.has(gs.autoCast(o[r]))&&(o.skip=!0),n.add(gs.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(h1,"insertUpdateValidate")});var Mc=g((Mae,Uy)=>{"use strict";var m1=U().OPERATIONS_ENUM,Nm=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=m1.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Uy.exports=Nm});var Uc=g((vae,vy)=>{"use strict";var Pae=Mc(),R_=U(),Im=Q(),Py=K(),p1=require("uuid"),{handleHDBError:A_,hdb_errors:S1}=ne(),{HDB_ERROR_MSGS:O_,HTTP_STATUS_CODES:b_}=S1;vy.exports=T1;function T1(e,t,r){for(let s=0;s<t.length;s++)g1(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];R1(i,r,e.operation)}}a(T1,"processRows");function g1(e){if(Buffer.byteLength(String(e))>R_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw A_(new Error,O_.ATTR_NAME_LENGTH_ERR(e),b_.BAD_REQUEST,void 0,void 0,!0);if(Im.isEmptyOrZeroLength(e)||Im.isEmpty(e.trim()))throw A_(new Error,O_.ATTR_NAME_NULLISH_ERR,b_.BAD_REQUEST,void 0,void 0,!0)}a(g1,"validateAttribute");function R1(e,t,r){if(!e.hasOwnProperty(t)||Im.isEmptyOrZeroLength(e[t])){if(r===R_.OPERATIONS_ENUM.INSERT||r===R_.OPERATIONS_ENUM.UPSERT){e[t]=p1.v4();return}throw Py.error("Update transaction aborted due to record with no hash value:",e),A_(new Error,O_.RECORD_MISSING_HASH_ERR,b_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>R_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Py.error(e),A_(new Error,O_.HASH_VAL_LENGTH_ERR,b_.BAD_REQUEST,void 0,void 0,!0)}a(R1,"validateHash")});var Hy=g((Hae,By)=>{"use strict";var wm=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};By.exports=wm});var Fy=g((Gae,Gy)=>{"use strict";var Cm=Ye(),A1=K(),xy=Ir().LMDB_ERRORS_ENUM;Gy.exports=O1;async function O1(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 Cm.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 Cm.closeEnvironment(global.lmdb_map[n]),await Cm.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){A1.error(t)}}a(O1,"cleanLMDBMap")});var Rs=g((qae,$y)=>{"use strict";var Pc=require("crypto"),b1=re(),{CONFIG_PARAMS:y1}=U(),ky="aes-256-cbc",N1=32,I1=16,Dm=64,Vy=32,w1=Dm+Vy,qy=new Map;$y.exports={encrypt:C1,decrypt:D1,createNatsTableStreamName:L1};function C1(e){let t=Pc.randomBytes(N1),r=Pc.randomBytes(I1),n=Pc.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(C1,"encrypt");function D1(e){let t=e.substr(0,Dm),r=e.substr(Dm,Vy),n=e.substr(w1,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Pc.createDecipheriv(ky,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(D1,"decrypt");function L1(e,t){let r=b1.get(y1.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=qy.get(r);return n||(n=Pc.createHash("md5").update(r).digest("hex"),qy.set(r,n)),n}a(L1,"createNatsTableStreamName")});var ki=g(($ae,Ky)=>{"use strict";var Vae=vr(),y_=K(),Yy=S_(),M1=Rs(),N_=Q(),{handleHDBError:I_,hdb_errors:U1}=ne(),{HDB_ERROR_MSGS:w_,HTTP_STATUS_CODES:Lm}=U1,P1=re();P1.initSync();var{getDatabases:Mm}=(Ae(),se(Fe));Ky.exports={describeAll:v1,describeTable:C_,describeSchema:B1};async function v1(e){try{let t=N_.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=Mm(),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 C_({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 C_({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){y_.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 y_.error("Got an error in describeAll"),y_.error(t),I_(new Error,w_.DESCRIBE_ALL_ERR)}}a(v1,"describeAll");async function C_(e,t){N_.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=Mm()[r];if(!c)throw I_(new Error,w_.SCHEMA_NOT_FOUND(e.schema),Lm.NOT_FOUND);let u=c[n];if(!u)throw I_(new Error,w_.TABLE_NOT_FOUND(e.schema,e.table),Lm.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=M1.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){y_.warn(`unable to stat table dbi due to ${f}`)}return d}a(C_,"descTable");async function B1(e){N_.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=Mm()[n];if(!i)throw I_(new Error,w_.SCHEMA_NOT_FOUND(e.schema),Lm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),N_.isEmpty(u)||u.describe){let _=await C_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(B1,"describeSchema")});var As=g((Qae,Xy)=>{var H1=Fi(),{callbackify:Qy,promisify:x1}=require("util"),{getDatabases:zy}=(Ae(),se(Fe));Xy.exports={setSchemaDataToGlobal:Wy,getTableSchema:G1,getSystemSchema:F1,setSchemaDataToGlobalAsync:x1(Wy)};var Jy=ki(),Kae=Qy(Jy.describeAll),Wae=Qy(Jy.describeTable);function Wy(e){global.hdb_schema=zy(),e&&e()}a(Wy,"setSchemaDataToGlobal");function G1(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(G1,"getTableSchema");function F1(){return H1}a(F1,"getSystemSchema")});var on=g((Jae,tN)=>{"use strict";var L_=ym(),kt=Q(),q1=require("util"),M_=Cn(),k1=As(),jy=K(),{handleHDBError:Vi,hdb_errors:V1}=ne(),{HTTP_STATUS_CODES:$i}=V1,$1=q1.promisify(k1.getTableSchema),Y1="updated",Zy="inserted",eN="upserted";tN.exports={insert:W1,update:Q1,upsert:z1,validation:K1,flush:J1};async function K1(e){if(kt.isEmpty(e))throw new Error("invalid update parameters defined.");if(kt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(kt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await $1(e.schema,e.table),r=L_(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&&kt.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(!kt.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`);!kt.isEmpty(c[n])&&c[n]!==""&&s.has(kt.autoCast(c[n]))&&(c.skip=!0),s.add(kt.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(K1,"validation");async function W1(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=L_(e);if(t)throw Vi(new Error,t.message,$i.BAD_REQUEST);kt.transformReq(e);let r=kt.checkSchemaTableExist(e.schema,e.table);if(r)throw Vi(new Error,r,$i.BAD_REQUEST);let n=await M_.createRecords(e);return D_(Zy,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(W1,"insertData");async function Q1(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=L_(e);if(t)throw Vi(new Error,t.message,$i.BAD_REQUEST);kt.transformReq(e);let r=kt.checkSchemaTableExist(e.schema,e.table);if(r)throw Vi(new Error,r,$i.BAD_REQUEST);let n=await M_.updateRecords(e);return kt.isEmpty(n.existing_rows)?D_(Y1,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):D_(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(Q1,"updateData");async function z1(e){if(e.operation!=="upsert")throw Vi(new Error,"invalid operation, must be upsert",$i.INTERNAL_SERVER_ERROR);let t=L_(e);if(t)throw Vi(new Error,t.message,$i.BAD_REQUEST);kt.transformReq(e);let r=kt.checkSchemaTableExist(e.schema,e.table);if(r)throw Vi(new Error,r,$i.BAD_REQUEST);let n=await M_.upsertRecords(e);return D_(eN,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(z1,"upsertData");function D_(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(D_,"returnObject");function J1(e){return kt.transformReq(e),M_.flush(e.schema,e.table)}a(J1,"flush")});var Pm=g((jae,sN)=>{var X1=Ze(),Um=require("joi"),{hdb_table:j1,hdb_database:rN}=Jn(),nN={schema:rN,database:rN,table:j1},Z1={date:Um.date().iso().required()},eY={timestamp:Um.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};sN.exports=function(e,t){let r=t==="timestamp"?{...nN,...eY}:{...nN,...Z1},n=Um.object(r);return X1.validateBySchema(e,n)}});var aN=g((Zae,oN)=>{var tY=Ze(),vm=require("joi"),{hdb_table:rY,hdb_database:iN}=Jn(),nY=vm.object({schema:iN,database:iN,table:rY,hash_values:vm.array().required(),ids:vm.array()});oN.exports=function(e){return tY.validateBySchema(e,nY)}});var uN=g((ece,cN)=>{"use strict";var Bm=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}},Hm=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}},xm=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};cN.exports={InsertObject:Bm,NoSQLSeachObject:Hm,DeleteResponseObject:xm}});var Wi=g((rce,EN)=>{"use strict";var _N=Pm(),sY=aN(),Yi=Q(),lN=require("moment"),dN=K(),{promisify:iY,callbackify:oY}=require("util"),Ki=U(),aY=As(),Gm=iY(aY.getTableSchema),Fm=Cn(),{DeleteResponseObject:cY}=uN(),{handleHDBError:ti,hdb_errors:uY}=ne(),{HDB_ERROR_MSGS:U_,HTTP_STATUS_CODES:ri}=uY,lY="records successfully deleted",_Y=oY(fN);EN.exports={delete:_Y,deleteRecord:fN,deleteFilesBefore:dY,deleteAuditLogsBefore:fY};async function dY(e){let t=_N(e,"date");if(t)throw ti(t,t.message,ri.BAD_REQUEST,void 0,void 0,!0);if(Yi.transformReq(e),!lN(e.date,lN.ISO_8601).isValid())throw ti(new Error,U_.INVALID_DATE,ri.BAD_REQUEST,Ki.LOG_LEVELS.ERROR,U_.INVALID_DATE,!0);let n=Yi.checkSchemaTableExist(e.schema,e.table);if(n)throw ti(new Error,n,ri.NOT_FOUND,Ki.LOG_LEVELS.ERROR,n,!0);let s=await Fm.deleteRecordsBefore(e);if(await Gm(e.schema,e.table),dN.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(dY,"deleteFilesBefore");async function fY(e){let t=_N(e,"timestamp");if(t)throw ti(t,t.message,ri.BAD_REQUEST,void 0,void 0,!0);if(Yi.transformReq(e),isNaN(e.timestamp))throw ti(new Error,U_.INVALID_VALUE("Timestamp"),ri.BAD_REQUEST,Ki.LOG_LEVELS.ERROR,U_.INVALID_VALUE("Timestamp"),!0);let r=Yi.checkSchemaTableExist(e.schema,e.table);if(r)throw ti(new Error,r,ri.NOT_FOUND,Ki.LOG_LEVELS.ERROR,r,!0);let n=await Fm.deleteAuditLogsBefore(e);return await Gm(e.schema,e.table),dN.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(fY,"deleteAuditLogsBefore");async function fN(e){e.ids&&(e.hash_values=e.ids);let t=sY(e);if(t)throw ti(t,t.message,ri.BAD_REQUEST,void 0,void 0,!0);Yi.transformReq(e);let r=Yi.checkSchemaTableExist(e.schema,e.table);if(r)throw ti(new Error,r,ri.NOT_FOUND,Ki.LOG_LEVELS.ERROR,r,!0);try{await Gm(e.schema,e.table);let n=await Fm.deleteRecords(e);return Yi.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${lY}`),n}catch(n){if(n.message===Ki.SEARCH_NOT_FOUND_MESSAGE){let s=new cY;return s.message=Ki.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(fN,"deleteRecord")});var P_=g((sce,pN)=>{var EY=require("crypto"),hN=9;function hY(e){let t=pY(hN),r=mN(e+t);return t+r}a(hY,"createHash");function mY(e,t){let r=e?.substr(0,hN),n=r+mN(t+r);return e===n}a(mY,"validateHash");function pY(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(pY,"generateSalt");function mN(e){return EY.createHash("md5").update(e).digest("hex")}a(mN,"md5");pN.exports={hash:hY,validate:mY}});var TN=g((oce,SN)=>{var qm=Ze(),zt={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function SY(e){return zt.password.presence=!0,zt.username.presence=!0,zt.role.presence=!0,zt.active.presence=!0,qm.validateObject(e,zt)}a(SY,"addUserValidation");function TY(e){return zt.password.presence=!1,zt.username.presence=!0,zt.role.presence=!1,zt.active.presence=!1,qm.validateObject(e,zt)}a(TY,"alterUserValidation");function gY(e){return zt.password.presence=!1,zt.username.presence=!0,zt.role.presence=!1,zt.active.presence=!1,qm.validateObject(e,zt)}a(gY,"dropUserValidation");SN.exports={addUserValidation:SY,alterUserValidation:TY,dropUserValidation:gY}});var nt=g((uce,RN)=>{"use strict";var{platform:cce}=require("os"),RY="nats-server.zip",km="nats-server",AY=process.platform==="win32"?`${km}.exe`:km,OY=/^[^\s.,*>]+$/,gN="__request__",bY=a(e=>`${e}.${gN}`,"REQUEST_SUBJECT"),yY={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},NY={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},IY={HUB:"hub.pid",LEAF:"leaf.pid"},wY={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},CY={SUCCESS:"success",ERROR:"error"},DY={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},LY={TXN:"txn",MSGID:"msgid"},Vo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},MY={[Vo.ERR]:1,[Vo.WRN]:2,[Vo.INF]:3,[Vo.DBG]:4,[Vo.TRC]:5},UY={debug:"-D",trace:"-DVV"};RN.exports={NATS_SERVER_ZIP:RY,NATS_SERVER_NAME:km,NATS_BINARY_NAME:AY,PID_FILES:IY,NATS_CONFIG_FILES:NY,SERVER_SUFFIX:wY,NATS_TERM_CONSTRAINTS_RX:OY,REQUEST_SUFFIX:gN,UPDATE_REMOTE_RESPONSE_STATUSES:CY,CLUSTER_STATUS_STATUSES:DY,REQUEST_SUBJECT:bY,SUBJECT_PREFIXES:LY,MSG_HEADERS:yY,LOG_LEVELS:Vo,LOG_LEVEL_FLAGS:UY,LOG_LEVEL_HIERARCHY:MY}});var ON=g((_ce,AN)=>{"use strict";var v_=U(),B_=class{static{a(this,"BaseLicense")}constructor(t=0,r=v_.RAM_ALLOCATION_ENUM.DEFAULT,n=v_.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},Vm=class extends B_{static{a(this,"ExtendedLicense")}constructor(t=0,r=v_.RAM_ALLOCATION_ENUM.DEFAULT,n=v_.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};AN.exports={BaseLicense:B_,ExtendedLicense:Vm}});var Qi=g((fce,CN)=>{"use strict";var Yo=require("fs-extra"),yN=P_(),NN=require("crypto"),PY=require("moment"),vY=require("uuid").v4,Jt=K(),Ym=require("path"),BY=Q(),ni=U(),{totalmem:bN}=require("os"),HY=ON().ExtendedLicense,$o="invalid license key format",xY="061183",GY="mofi25",FY="aes-256-cbc",qY=16,kY=32,IN=re();IN.initSync();var $m;CN.exports={validateLicense:wN,generateFingerPrint:$Y,licenseSearch:Qm,getLicense:WY,checkMemoryLimit:QY};function Km(){return Ym.join(IN.getHdbBasePath(),ni.LICENSE_KEY_DIR_NAME,ni.LICENSE_FILE_NAME)}a(Km,"getLicenseDirPath");function VY(){let e=Km();return Ym.join(e,ni.LICENSE_FILE_NAME)}a(VY,"getLicenseFilePath");function Wm(){let e=Km();return Ym.join(e,ni.REG_KEY_FILE_NAME)}a(Wm,"getFingerPrintFilePath");async function $Y(){let e=Wm();try{return await Yo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await YY();throw Jt.error(`Error writing fingerprint file to ${e}`),Jt.error(t),new Error("There was an error generating the fingerprint")}}a($Y,"generateFingerPrint");async function YY(){let e=vY(),t=yN.hash(e),r=Wm();try{await Yo.mkdirp(Km()),await Yo.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Jt.error(`Error writing fingerprint file to ${r}`),Jt.error(n),new Error("There was an error generating the fingerprint")}return t}a(YY,"writeFingerprint");function wN(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:ni.RAM_ALLOCATION_ENUM.DEFAULT,version:ni.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Jt.error("empty license key passed to validate."),r;let n=Wm(),s=!1;try{s=Yo.statSync(n)}catch(i){Jt.error(i)}if(s){let i;try{i=Yo.readFileSync(n,"utf8")}catch{Jt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(GY),c=o[1];c=Buffer.concat([Buffer.from(c)],qY);let u=Buffer.concat([Buffer.from(i)],kY),_=NN.createDecipheriv(FY,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=KY(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error($o),Jt.error($o),new Error($o)}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($o),Jt.error($o),new Error($o)}else r.exp_date=l;r.exp_date<PY().valueOf()&&(r.valid_date=!1),yN.validate(o[1],`${xY}${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||Jt.error("Invalid licence"),r}a(wN,"validateLicense");function KY(e,t){try{let r=NN.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Jt.warn("Check old license failed")}}a(KY,"checkOldLicense");function Qm(){let e=new HY,t=[];try{t=Yo.readFileSync(VY(),"utf-8").split(ni.NEW_LINE)}catch(r){r.code==="ENOENT"?Jt.info("no license file found"):Jt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(BY.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){Jt.error("There was an error parsing the license string."),Jt.error(s),e.ram_allocation=ni.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return $m=e,e}a(Qm,"licenseSearch");async function WY(){return $m||await Qm(),$m}a(WY,"getLicense");function QY(){let e=Qm().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(QY,"checkMemoryLimit")});var Hr=g((Sce,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:nK,alterUser:sK,dropUser:oK,getSuperUser:lK,userInfo:aK,listUsers:x_,listUsersExternal:cK,setUsersToGlobal:Wo,findAndValidateUser:VN,getClusterUser:_K,USERNAME_REQUIRED:UN,ALTERUSER_NOTHING_TO_UPDATE:PN,EMPTY_PASSWORD:vN,EMPTY_ROLE:BN,ACTIVE_BOOLEAN:HN};var xN=on(),zY=Wi(),Xm=P_(),GN=TN(),FN=vr(),jm=Os(),Br=Q(),qN=require("validate.js"),Te=K(),{promisify:JY}=require("util"),Zm=Rs(),DN=U(),LN=nt(),XY=Dr(),hce=re(),mce=Qi(),jY=Fi(),{table:pce}=(Ae(),se(Fe)),{handleHDBError:jn,hdb_errors:ZY}=ne(),{HTTP_STATUS_CODES:Zn,AUTHENTICATION_ERROR_MSGS:zm,HDB_ERROR_MSGS:Ko}=ZY,{UserEventMsg:ep}=Dn(),Jm=require("lodash"),{server:tp}=(or(),se(Ui)),eK=K();tp.getUser=(e,t)=>VN(e,t,t!=null);var kN={username:!0,active:!0,role:!0,password:!0},MN=new Map,H_=FN.searchByValue,tK=FN.searchByHash,rK=JY(zY.delete);async function nK(e){let t=qN.cleanAttributes(e,kN),r=GN.addUserValidation(t);if(r)throw jn(new Error,r.message,Zn.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 H_(n),s=s&&Array.from(s)}catch(u){throw Te.error("There was an error searching for a role in add user"),Te.error(u),u}if(!s||s.length<1)throw jn(new Error,Ko.ROLE_NAME_NOT_FOUND(t.role),Zn.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw jn(new Error,Ko.DUP_ROLES_FOUND(t.role),Zn.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=Zm.encrypt(t.password)),t.password=Xm.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 Te.error("There was an error searching for a user."),Te.error(u),u}Te.debug(o);try{await Wo()}catch(u){throw Te.error("Got an error setting users to global"),Te.error(u),u}if(o.skipped_hashes.length===1)throw jn(new Error,Ko.USER_ALREADY_EXISTS(t.username),Zn.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],jm.signalUserChange(new ep(process.pid)),`${c.username} successfully added`}a(nK,"addUser");async function sK(e){let t=qN.cleanAttributes(e,kN);if(Br.isEmptyOrZeroLength(t.username))throw new Error(UN);if(Br.isEmptyOrZeroLength(t.password)&&Br.isEmptyOrZeroLength(t.role)&&Br.isEmptyOrZeroLength(t.active))throw new Error(PN);if(!Br.isEmpty(t.password)&&Br.isEmptyOrZeroLength(t.password.trim()))throw new Error(vN);if(!Br.isEmpty(t.active)&&!Br.isBoolean(t.active))throw new Error(HN);let r=iK(t.username);if(!Br.isEmpty(t.password)&&!Br.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Zm.encrypt(t.password)),t.password=Xm.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 H_(i)||[])}catch(c){throw Te.error("Got an error searching for a role."),Te.error(c),c}if(!o||o.length===0){let c=Ko.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Te.error(c),jn(new Error,c,Zn.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Ko.ALTER_USER_DUP_ROLES(t.role);throw Te.error(c),jn(new Error,c,Zn.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 Te.error("Error during update."),Te.error(i),i}try{await Wo()}catch(i){throw Te.error("Got an error setting users to global"),Te.error(i),i}return jm.signalUserChange(new ep(process.pid)),s}a(sK,"alterUser");function iK(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(iK,"isClusterUser");async function oK(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(Br.isEmpty(global.hdb_users.get(e.username)))throw jn(new Error,Ko.USER_NOT_EXIST(e.username),Zn.NOT_FOUND,void 0,void 0,!0);let n;try{n=await rK(r)}catch(s){throw Te.error("Got an error deleting a user."),Te.error(s),s}Te.debug(n);try{await Wo()}catch(s){throw Te.error("Got an error setting users to global."),Te.error(s),s}return jm.signalUserChange(new ep(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(oK,"dropUser");async function aK(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Jm.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await tK(r)}catch(s){throw Te.error("Got an error searching for a role."),Te.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Te.error(r),r}return t}a(aK,"userInfo");async function cK(){let e;try{e=await x_()}catch(t){throw Te.error("Got an error listing users."),Te.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(cK,"listUsersExternal");async function x_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await H_(e)}catch(o){throw Te.error("Got an error searching for roles."),Te.error(o),o}let r={};for(let o of t)r[o.id]=Jm.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 H_(n)}catch(o){throw Te.error("Got an error searching for users."),Te.error(o),o}let i=new Map;for(let o of s)o=Jm.cloneDeep(o),o.role=r[o.role],uK(o.role),i.set(o.username,o);return i}catch(e){throw Te.error("got an error listing users"),Te.error(e),Br.errorizeMessage(e)}return null}a(x_,"listUsers");function uK(e){try{if(!e){Te.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(jY)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Te.error("Got an error trying to set system permissions."),Te.error(t)}}a(uK,"appendSystemTablesToRole");async function Wo(){try{let e=await x_();global.hdb_users=e}catch(e){throw Te.error(e),e}}a(Wo,"setUsersToGlobal");async function VN(e,t,r=!0){global.hdb_users||await Wo();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw jn(new Error,zm.GENERIC_AUTH_FAIL,Zn.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw jn(new Error,zm.USER_INACTIVE,Zn.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(Xm.validate(n.password,t))MN.set(t,n.password);else throw jn(new Error,zm.GENERIC_AUTH_FAIL,Zn.UNAUTHORIZED,void 0,void 0,!0)}return s}a(VN,"findAndValidateUser");async function lK(){global.hdb_users||await Wo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(lK,"getSuperUser");async function _K(){let e=await x_(),t=XY.getConfigFromFile(DN.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Br.isEmpty(r)&&r?.role?.role===DN.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Zm.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(_K,"getClusterUser");var $N=[];tp.invalidateUser=function(e){for(let t of $N)try{t(e)}catch(r){eK.error("Error invalidating user",r)}};tp.onInvalidatedUser=function(e){$N.push(e)}});var Bc=g((Ace,zN)=>{"use strict";var zi=K(),xr=U(),dK=Fy(),gce=As(),Rce=ki(),fK=Hr(),{validateEvent:KN}=Dn(),vc=Cn(),EK=require("process"),{resetDatabases:hK}=(Ae(),se(Fe)),mK={[xr.ITC_EVENT_TYPES.SCHEMA]:pK,[xr.ITC_EVENT_TYPES.USER]:QN};async function pK(e){let t=KN(e);if(t){zi.error(t);return}zi.trace("ITC schemaHandler received schema event:",e),await dK(e.message),await SK(e.message)}a(pK,"schemaHandler");async function SK(e){try{vc.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),vc.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),vc.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=hK();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){zi.error(t)}}a(SK,"syncSchemaMetadata");var WN=[];async function QN(e){try{try{vc.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),vc.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){zi.warn(r)}let t=KN(e);if(t){zi.error(t);return}zi.trace(`ITC userHandler ${xr.HDB_ITC_CLIENT_PREFIX}${EK.pid} received user event:`,e),await fK.setUsersToGlobal();for(let r of WN)r()}catch(t){zi.error(t)}}a(QN,"userHandler");QN.addListener=function(e){WN.push(e)};zN.exports=mK});var Dn=g((wce,XN)=>{"use strict";var bce=K(),rp=Q(),TK=U(),{ITC_ERRORS:Hc}=Ir(),{parentPort:yce,threadId:gK,isMainThread:RK,workerData:Nce}=require("worker_threads"),{onMessageFromWorkers:AK,broadcast:Ice,broadcastWithAcknowledgement:OK}=tt();XN.exports={sendItcEvent:bK,validateEvent:JN,SchemaEventMsg:yK,UserEventMsg:NK};var G_;AK(async(e,t)=>{G_=G_||Bc(),JN(e),G_[e.type]&&await G_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function bK(e){return!RK&&e.message&&(e.message.originator=gK),OK(e)}a(bK,"sendItcEvent");function JN(e){if(typeof e!="object")return Hc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||rp.isEmpty(e.type))return Hc.MISSING_TYPE;if(!e.hasOwnProperty("message")||rp.isEmpty(e.message))return Hc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||rp.isEmpty(e.message.originator))return Hc.MISSING_ORIGIN;if(TK.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Hc.INVALID_EVENT(e.type)}a(JN,"validateEvent");function yK(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(yK,"SchemaEventMsg");function NK(e){this.originator=e}a(NK,"UserEventMsg")});var Os=g((Lce,tI)=>{"use strict";var jN=U(),Dce=Q(),F_=K(),ZN=Hy(),Qo,{sendItcEvent:eI}=Dn();function IK(e){try{F_.trace("signalSchemaChange called with message:",e),Qo=Qo||Bc();let t=new ZN(jN.ITC_EVENT_TYPES.SCHEMA,e);return Qo.schema(t),eI(t)}catch(t){F_.error(t)}}a(IK,"signalSchemaChange");function wK(e){try{F_.trace("signalUserChange called with message:",e),Qo=Qo||Bc();let t=new ZN(jN.ITC_EVENT_TYPES.USER,e);return Qo.user(t),eI(t)}catch(t){F_.error(t)}}a(wK,"signalUserChange");tI.exports={signalSchemaChange:IK,signalUserChange:wK}});var q_=g((Uce,nI)=>{"use strict";var rI=Q(),CK=U(),DK=K(),LK=g_(),MK=T_(),UK=Os(),{SchemaEventMsg:PK}=Dn(),vK="already exists in";nI.exports=BK;async function BK(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 HK(e,t.schema,t.name,i)})),s}a(BK,"lmdbCheckForNewAttributes");async function HK(e,t,r,n){let s=new MK(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await xK(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(vK))DK.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(HK,"createNewAttribute");async function xK(e){let t;return t=await LK(e),UK.signalSchemaChange(new PK(process.pid,CK.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(xK,"createAttribute")});var zo=g((vce,sI)=>{"use strict";var np=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=np});var oI=g((Hce,iI)=>{"use strict";var GK=zo(),FK=U().OPERATIONS_ENUM,sp=class extends GK{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(FK.INSERT,r,n,s,i),this.records=t}};iI.exports=sp});var cI=g((Gce,aI)=>{"use strict";var qK=zo(),kK=U().OPERATIONS_ENUM,ip=class extends qK{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(kK.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};aI.exports=ip});var lI=g((qce,uI)=>{"use strict";var VK=zo(),$K=U().OPERATIONS_ENUM,op=class extends VK{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super($K.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};uI.exports=op});var dI=g((Vce,_I)=>{"use strict";var YK=zo(),KK=U().OPERATIONS_ENUM,ap=class extends YK{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(KK.DELETE,n,s,t,i),this.original_records=r}};_I.exports=ap});var xc=g((Kce,mI)=>{"use strict";var Yce=require("path"),fI=Ye(),WK=oI(),QK=cI(),zK=lI(),JK=dI(),Jo=ft(),EI=Q(),{CONFIG_PARAMS:XK}=U(),hI=re();hI.initSync();var k_=U().OPERATIONS_ENUM,{getTransactionAuditStorePath:jK}=Qe();mI.exports=ZK;async function ZK(e,t){if(hI.get(XK.LOGGING_AUDITLOG)===!1)return;let r=jK(e.schema,e.table),n=await fI.openEnvironment(r,e.table,!0),s=eW(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){fI.initializeDBIs(n,Jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Jo.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),EI.isEmpty(s.user_name)||n.dbis[Jo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Jo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(ZK,"writeTransaction");function eW(e,t){let r=EI.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===k_.INSERT)return new WK(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===k_.UPDATE)return new QK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===k_.UPSERT)return new zK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===k_.DELETE)return new JK(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(eW,"createTransactionObject")});var cp=g((zce,pI)=>{"use strict";var tW=Lc(),Qce=Mc(),Gc=U(),rW=Uc(),nW=qo().insertRecords,sW=Ye(),iW=K(),oW=q_(),{getSchemaPath:aW}=Qe(),cW=xc();pI.exports=uW;async function uW(e){try{let{schema_table:t,attributes:r}=tW(e);rW(e,r,t.hash_attribute),e.schema!==Gc.SYSTEM_SCHEMA_NAME&&(r.includes(Gc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Gc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Gc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Gc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await oW(e.hdb_auth_header,t,r),s=aW(e.schema,e.table),i=await sW.openEnvironment(s,e.table),o=await nW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await cW(e,o)}catch(c){iW.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(uW,"lmdbCreateRecords")});var gI=g((Xce,TI)=>{"use strict";var SI=U(),lW=cp(),_W=Mc(),dW=require("fs-extra"),{getSchemaPath:fW}=Qe();TI.exports=EW;async function EW(e){let t=[{name:e.schema,createddate:Date.now()}],r=new _W(SI.SYSTEM_SCHEMA_NAME,SI.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await lW(r),await dW.mkdirp(fW(e.schema))}a(EW,"lmdbCreateSchema")});var AI=g((Zce,RI)=>{"use strict";var up=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=up});var NI=g((sue,yI)=>{"use strict";var OI=Ye(),lp=Lr(),_p=Ir().LMDB_ERRORS_ENUM,hW=ft(),bI=K(),tue=Q(),mW=require("lmdb"),pW=AI(),SW=U(),{OVERFLOW_MARKER:rue,MAX_SEARCH_KEY_LENGTH:nue}=hW,TW=SW.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function gW(e,t,r,n){if(lp.validateEnv(e),t===void 0)throw new Error(_p.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(_p.IDS_REQUIRED):new Error(_p.IDS_MUST_BE_ITERABLE);try{let s=OI.listDBIs(e);OI.initializeDBIs(e,t,s);let i=new pW,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[TW]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,mW.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=lp.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=lp.getNextMonotonicTime(),i}catch(s){throw s}}a(gW,"deleteRecords");yI.exports={deleteRecords:gW}});var Fc=g((oue,wI)=>{"use strict";var Xo=Q(),RW=NI(),AW=Ye(),{getSchemaPath:OW}=Qe(),bW=xc(),yW=K();wI.exports=NW;async function NW(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Xo.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Xo.isEmptyOrZeroLength(e.hash_values)&&!Xo.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][n];Xo.isEmpty(u)||e.hash_values.push(u)}}if(Xo.isEmptyOrZeroLength(e.hash_values))return II([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Xo.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=OW(e.schema,e.table),i=await AW.openEnvironment(s,e.table),o=await RW.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await bW(e,o)}catch(c){yW.error(`unable to write transaction due to ${c.message}`)}return II(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(NW,"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 fp=g((uue,CI)=>{"use strict";var IW=U(),cue=Lr();function dp(e,t){let r=Object.create(null);if(t.length===1&&IW.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(dp,"parseRow");function wW(e,t,r,n){let s=dp(r,e);n.push(s)}a(wW,"searchAll");function CW(e,t,r,n){let s=dp(r,e);n[t]=s}a(CW,"searchAllToMap");function DW(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(DW,"iterateDBI");function Ji(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(Ji,"pushResults");function LW(e,t,r,n,s,i){t.toString().endsWith(e)&&Ji(t,r,n,s,i)}a(LW,"endsWith");function MW(e,t,r,n,s,i){t.toString().includes(e)&&Ji(t,r,n,s,i)}a(MW,"contains");function UW(e,t,r,n,s,i){t>e&&Ji(t,r,n,s,i)}a(UW,"greaterThanCompare");function PW(e,t,r,n,s,i){t>=e&&Ji(t,r,n,s,i)}a(PW,"greaterThanEqualCompare");function vW(e,t,r,n,s,i){t<e&&Ji(t,r,n,s,i)}a(vW,"lessThanCompare");function BW(e,t,r,n,s,i){t<=e&&Ji(t,r,n,s,i)}a(BW,"lessThanEqualCompare");CI.exports={parseRow:dp,searchAll:wW,searchAllToMap:CW,iterateDBI:DW,endsWith:LW,contains:MW,greaterThanCompare:UW,greaterThanEqualCompare:PW,lessThanCompare:vW,lessThanEqualCompare:BW,pushResults:Ji}});var jo=g((Eue,BI)=>{"use strict";var si=Ye(),_ue=K(),Gr=Lr(),V_=ft(),ut=Ir().LMDB_ERRORS_ENUM,due=Q(),HW=U(),$_=fp(),{parseRow:xW}=$_,fue=require("lmdb"),{OVERFLOW_MARKER:DI,MAX_SEARCH_KEY_LENGTH:GW}=V_;function LI(e,t,r,n=!1,s=void 0,i=void 0){return Xi(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 qc(e,t,r,n,s,i=!1,o=void 0,c=void 0,u=!1,_=!1){return Xi(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(qc,"iterateRangeBetween");function Xi(e,t,r,n){let s=e.database||e,i=si.openDBI(s,r);i[V_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&si.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(Xi,"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=si.openDBI(e,r);else{let u=si.listDBIs(e);for(let _=0,l=u.length;_<l&&(s=si.openDBI(e,u[_]),!s[V_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(MI,"getOverflowCheck");function FW(e,t,r,n=!1,s=void 0,i=void 0){if(Gr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);return Xi(e,t,t,(o,c,u)=>(Y_(r),r=kc(u,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>xW(_.value,r))))}a(FW,"searchAll");function qW(e,t,r,n=!1,s=void 0,i=void 0){if(Gr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);Y_(r),r=kc(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,$_.parseRow(u,r));return o}a(qW,"searchAllToMap");function kW(e,t,r=!1,n=void 0,s=void 0){if(Gr.validateEnv(e),t===void 0)throw new Error(ut.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(kW,"iterateDBI");function VW(e,t){if(Gr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);return si.statDBI(e,t).entryCount}a(VW,"countAll");function $W(e,t,r,n,s=!1,i=void 0,o=void 0){return ii(e,r,n),Xi(e,t,r,(c,u,_,l)=>(n=Gr.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($W,"equals");function YW(e,t,r){return ii(e,t,r),si.openDBI(e,t).getValuesCount(r)}a(YW,"count");function KW(e,t,r,n,s=!1,i=void 0,o=void 0){return ii(e,r,n),Xi(e,null,r,(c,u)=>{n=Gr.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(KW,"startsWith");function WW(e,t,r,n,s=!1,i=void 0,o=void 0){return UI(e,t,r,n,s,i,o,!0)}a(WW,"endsWith");function UI(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ii(e,r,n),Xi(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))?_[V_.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 QW(e,t,r,n,s=!1,i=void 0,o=void 0){ii(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),qc(e,t,r,n,u,s,i,o,!0,!1)}a(QW,"greaterThan");function zW(e,t,r,n,s=!1,i=void 0,o=void 0){ii(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),qc(e,t,r,n,u,s,i,o,!1,!1)}a(zW,"greaterThanEqual");function JW(e,t,r,n,s=!1,i=void 0,o=void 0){ii(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),qc(e,t,r,u,n,s,i,o,!1,!0)}a(JW,"lessThan");function XW(e,t,r,n,s=!1,i=void 0,o=void 0){ii(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),qc(e,t,r,u,n,s,i,o,!1,!1)}a(XW,"lessThanEqual");function jW(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Gr.validateEnv(e),r===void 0)throw new Error(ut.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(ut.START_VALUE_REQUIRED);if(s===void 0)throw new Error(ut.END_VALUE_REQUIRED);if(n=Gr.convertKeyValueToWrite(n),s=Gr.convertKeyValueToWrite(s),n>s)throw new Error(ut.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return qc(e,t,r,n,s,i,o,c)}a(jW,"between");function ZW(e,t,r,n){Gr.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(Y_(r),r=kc(s,r),n===void 0)throw new Error(ut.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=$_.parseRow(c,r)),o}a(ZW,"searchByHash");function eQ(e,t,r){Gr.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ut.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(eQ,"checkHashExists");function tQ(e,t,r,n,s=[]){return vI(e,t,r,n,s),PI(e,t,r,n,s).map(i=>i[1])}a(tQ,"batchSearchByHash");function rQ(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(rQ,"batchSearchByHashToMap");function PI(e,t,r,n,s=[]){return Xi(e,t,t,(i,o,c)=>{r=kc(c,r);let u=r.length<3;return n.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,$_.parseRow(l,r)];s.push(_)}).filter(_=>_)})}a(PI,"batchHashSearch");function vI(e,t,r,n,s){if(Gr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(Y_(r),n==null)throw new Error(ut.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(ut.IDS_MUST_BE_ITERABLE)}a(vI,"initializeBatchSearchByHash");function Y_(e){if(!Array.isArray(e))throw e===void 0?new Error(ut.FETCH_ATTRIBUTES_REQUIRED):new Error(ut.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Y_,"validateFetchAttributes");function ii(e,t,r){if(Gr.validateEnv(e),t===void 0)throw new Error(ut.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ut.SEARCH_VALUE_REQUIRED);if(r?.length>GW)throw new Error(ut.SEARCH_VALUE_TOO_LARGE)}a(ii,"validateComparisonFunctions");function kc(e,t){return t.length===1&&HW.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=si.listDBIs(e)),t}a(kc,"setGetWholeRowAttributes");BI.exports={searchAll:FW,searchAllToMap:qW,count:YW,countAll:VW,equals:$W,startsWith:KW,endsWith:WW,contains:UI,searchByHash:ZW,setGetWholeRowAttributes:kc,batchSearchByHash:tQ,batchSearchByHashToMap:rQ,checkHashExists:eQ,iterateDBI:kW,greaterThan:QW,greaterThanEqual:zW,lessThan:JW,lessThanEqual:XW,between:jW}});var Zo=g((mue,qI)=>{var HI=require("lodash"),xI=Ze(),Ee=require("joi"),nQ=Q(),{hdb_schema_table:Vc,checkValidTable:GI,hdb_table:FI,hdb_database:K_}=Jn(),{handleHDBError:sQ,hdb_errors:iQ}=ne(),{getDatabases:oQ}=(Ae(),se(Fe)),{HTTP_STATUS_CODES:aQ}=iQ,cQ=Ee.object({database:K_,schema:K_,table:FI,search_attribute:Vc,search_value:Ee.any().required(),get_attributes:Ee.array().min(1).items(Ee.alternatives(Vc,Ee.object())).optional(),desc:Ee.bool(),limit:Ee.number().integer().min(1),offset:Ee.number().integer().min(0)}),uQ=Ee.object({database:K_,schema:K_,table:FI,operator:Ee.string().valid("and","or").default("and").lowercase(),offset:Ee.number().integer().min(0),limit:Ee.number().integer().min(1),get_attributes:Ee.array().min(1).items(Ee.alternatives(Vc,Ee.object())).optional(),sort:Ee.object({attribute:Ee.alternatives(Vc,Ee.array().min(1)),descending:Ee.bool().optional()}).optional(),conditions:Ee.array().min(1).items(Ee.alternatives(Ee.object({operator:Ee.string().valid("and","or").default("and").lowercase(),conditions:Ee.array()}),Ee.object({search_attribute:Ee.alternatives(Vc,Ee.array().min(1)),search_type:Ee.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:Ee.when("search_type",{switch:[{is:"equals",then:Ee.any()},{is:"between",then:Ee.array().items(Ee.alternatives([Ee.string(),Ee.number()])).length(2)}],otherwise:Ee.alternatives(Ee.string(),Ee.number())}).required()}))).required()});qI.exports=function(e,t){let r=null;switch(t){case"value":r=xI.validateBySchema(e,cQ);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,uQ);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=nQ.checkGlobalSchemaTable(e.schema,e.table);if(s)return sQ(new Error,s,aQ.NOT_FOUND);let o=oQ()[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)&&!l.name&&!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 Ep=g((Sue,kI)=>{"use strict";var lQ=Ye(),_Q=Zo(),{getSchemaPath:dQ}=Qe();kI.exports=fQ;function fQ(e){let t=_Q(e,"hashes");if(t)throw t;let r=dQ(e.schema,e.table);return lQ.openEnvironment(r,e.table)}a(fQ,"initialize")});var hp=g((gue,VI)=>{"use strict";var EQ=jo(),hQ=Ep();VI.exports=mQ;async function mQ(e){let t=await hQ(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return EQ.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(mQ,"lmdbGetDataByHash")});var ea=g((Aue,$I)=>{"use strict";var mp=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=mp});var KI=g((yue,YI)=>{"use strict";var bue=ea(),pQ=jo(),SQ=Ep();YI.exports=TQ;async function TQ(e){let t=await SQ(e),r=global.hdb_schema[e.schema][e.table];return pQ.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(TQ,"lmdbSearchByHash")});var es=g((Iue,WI)=>{"use strict";var pp=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=pp});var W_=g((Cue,ZI)=>{"use strict";var Xt=jo(),gQ=Ye(),RQ=Q(),he=ft(),ji=U(),AQ=Fi(),QI=Ir().LMDB_ERRORS_ENUM,{getSchemaPath:OQ}=Qe(),bs=ji.SEARCH_WILDCARDS;async function bQ(e,t,r){let n;e.schema===ji.SYSTEM_SCHEMA_NAME?n=AQ[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(bQ,"prepSearch");async function JI(e,t,r,n){let s=OQ(e.schema,e.table),i=await gQ.openEnvironment(s,e.table),o=XI(i,e,t,r),c=o.transaction||i;if([he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,he.SEARCH_TYPES.SEARCH_ALL,he.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(yQ(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?Xt.batchSearchByHashToMap(c,r,e.get_attributes,_):Xt.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 he.SEARCH_TYPES.EQUALS:s=Xt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.CONTAINS:s=Xt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.ENDS_WITH:case he.SEARCH_TYPES._ENDS_WITH:s=Xt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.STARTS_WITH:case he.SEARCH_TYPES._STARTS_WITH:s=Xt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Xt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Xt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case he.SEARCH_TYPES.SEARCH_ALL:return Xt.searchAll(e,n,t.get_attributes,o,c,u);case he.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Xt.searchAllToMap(e,n,t.get_attributes,o,c,u);case he.SEARCH_TYPES.BETWEEN:s=Xt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case he.SEARCH_TYPES.GREATER_THAN:case he.SEARCH_TYPES._GREATER_THAN:s=Xt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.GREATER_THAN_EQUAL:case he.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Xt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.LESS_THAN:case he.SEARCH_TYPES._LESS_THAN:s=Xt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.LESS_THAN_EQUAL:case he.SEARCH_TYPES._LESS_THAN_EQUAL:s=Xt.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 yQ(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(yQ,"checkToFetchMore");function jI(e,t,r,n){if(RQ.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),bs.indexOf(s)>-1)return r===!0?he.SEARCH_TYPES.SEARCH_ALL_TO_MAP:he.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(bs[0])<0&&s.indexOf(bs[1])<0)return c===!0?r===!0?he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:he.SEARCH_TYPES.EQUALS;if(bs.indexOf(i)>=0&&bs.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),he.SEARCH_TYPES.CONTAINS;if(bs.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),he.SEARCH_TYPES.ENDS_WITH;if(bs.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),he.SEARCH_TYPES.STARTS_WITH;if(s.includes(bs[0])||s.includes(bs[1]))return he.SEARCH_TYPES.EQUALS;throw new Error(QI.UNKNOWN_SEARCH_TYPE)}else switch(n){case ji.VALUE_SEARCH_COMPARATORS.BETWEEN:return he.SEARCH_TYPES.BETWEEN;case ji.VALUE_SEARCH_COMPARATORS.GREATER:return he.SEARCH_TYPES.GREATER_THAN;case ji.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return he.SEARCH_TYPES.GREATER_THAN_EQUAL;case ji.VALUE_SEARCH_COMPARATORS.LESS:return he.SEARCH_TYPES.LESS_THAN;case ji.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return he.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(QI.UNKNOWN_SEARCH_TYPE)}}a(jI,"createSearchTypeFromSearchObject");ZI.exports={executeSearch:JI,createSearchTypeFromSearchObject:jI,prepSearch:bQ,searchByType:XI}});var tw=g((Mue,ew)=>{"use strict";var Lue=es(),NQ=Zo(),IQ=Q(),wQ=U(),CQ=W_();ew.exports=DQ;function DQ(e,t){if(!IQ.isEmpty(t)&&wQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=NQ(e,"value");if(n)throw n;return CQ.prepSearch(e,t,!0)}a(DQ,"lmdbGetDataByValue")});var $c=g((vue,rw)=>{"use strict";var Pue=es(),LQ=Zo(),MQ=Q(),UQ=U(),PQ=W_();rw.exports=vQ;async function vQ(e,t){if(!MQ.isEmpty(t)&&UQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=LQ(e,"value");if(n)throw n;return PQ.prepSearch(e,t,!1)}a(vQ,"lmdbSearchByValue")});var sw=g((xue,nw)=>{"use strict";var Hue=ft(),Sp=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}},Tp=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},gp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};nw.exports={SearchByConditionsObject:Sp,SearchCondition:Tp,SortAttribute:gp}});var uw=g((kue,cw)=>{"use strict";var Fue=sw().SearchByConditionsObject,BQ=es(),HQ=Zo(),Rp=jo(),Q_=ft(),{Resource:que}=(Nn(),se(Ap)),aw=W_(),xQ=fp(),GQ=require("lodash"),{getSchemaPath:FQ}=Qe(),iw=Ye(),{handleHDBError:qQ,hdb_errors:kQ}=ne(),{HTTP_STATUS_CODES:VQ}=kQ,$Q=1e8;cw.exports=YQ;async function YQ(e){let t=HQ(e,"conditions");if(t)throw qQ(t,t.message,VQ.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=FQ(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=GQ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===Q_.SEARCH_TYPES.EQUALS?_.estimated_count=Rp.count(n,_.search_attribute,_.search_value):l===Q_.SEARCH_TYPES.CONTAINS||l===Q_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=$Q}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=Rp.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=>xQ.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=Rp.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(YQ,"lmdbSearchByConditions");async function ow(e,t,r,n){let s=new BQ(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===Q_.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 Yc=g(($ue,lw)=>{"use strict";var KQ=U().OPERATIONS_ENUM,Op=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=KQ.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};lw.exports=Op});var bp=g((Kue,Sw)=>{"use strict";var Ew=es(),hw=Yc(),mw=$c(),pw=Fc(),lr=U(),_w=Q(),dw=Ye(),{getTransactionAuditStorePath:WQ,getSchemaPath:QQ}=Qe(),fw=K();Sw.exports=zQ;async function zQ(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 JQ(e),await XQ(e);let t=QQ(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=WQ(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(zQ,"lmdbDropTable");async function JQ(e){let t=new Ew(lr.SYSTEM_SCHEMA_NAME,lr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,lr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[lr.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(lr.SYSTEM_SCHEMA_NAME,lr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await pw(s)}a(JQ,"deleteAttributesFromSystem");async function XQ(e){let t=new Ew(lr.SYSTEM_SCHEMA_NAME,lr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,lr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[lr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,lr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,lr.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(lr.SYSTEM_SCHEMA_NAME,lr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await pw(s)}catch(i){throw i}}a(XQ,"dropTableFromSystem")});var gw=g((Que,Tw)=>{"use strict";var jQ=require("fs-extra"),ZQ=es(),ez=ea(),tz=Yc(),rz=bp(),nz=Fc(),sz=hp(),iz=$c(),ys=U(),{getSchemaPath:oz}=Qe(),{handleHDBError:az,hdb_errors:cz}=ne(),{HDB_ERROR_MSGS:uz,HTTP_STATUS_CODES:lz}=cz;Tw.exports=_z;async function _z(e){let t;try{t=await dz(e.schema);let r=new ZQ(ys.SYSTEM_SCHEMA_NAME,ys.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ys.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ys.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await iz(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await rz(c)}catch(u){if(u.message!=="invalid environment")throw u}}let s=new tz(ys.SYSTEM_SCHEMA_NAME,ys.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await nz(s);let i=oz(t);await jQ.remove(i)}catch(r){throw r}}a(_z,"lmdbDropSchema");async function dz(e){let t=new ez(ys.SYSTEM_SCHEMA_NAME,ys.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ys.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await sz(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw az(new Error,uz.SCHEMA_NOT_FOUND(e),lz.NOT_FOUND,void 0,void 0,!0);return n}a(dz,"validateDropSchema")});var Np=g((Jue,Rw)=>{"use strict";var yp=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};Rw.exports=yp});var Ow=g((Zue,Aw)=>{"use strict";var fz=require("fs-extra"),z_=Ye(),{getTransactionAuditStorePath:Ez}=Qe(),Ip=ft(),jue=Np();Aw.exports=hz;async function hz(e){let t;try{let r=Ez(e.schema,e.table);await fz.mkdirp(r),t=await z_.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{z_.createDBI(t,Ip.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),z_.createDBI(t,Ip.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),z_.createDBI(t,Ip.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(hz,"createTransactionsAuditEnvironment")});var Iw=g((tle,Nw)=>{"use strict";var wp=U(),bw=Ye(),mz=qo(),{getSystemSchemaPath:pz,getSchemaPath:Sz}=Qe(),Tz=Fi(),gz=g_(),Cp=T_(),Rz=K(),Az=Ow(),Lp=Tz.hdb_table,yw=[];for(let e=0;e<Lp.attributes.length;e++)yw.push(Lp.attributes[e].attribute);Nw.exports=Oz;async function Oz(e,t){let r=Sz(t.schema,t.table),n=new Cp(t.schema,t.table,wp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Cp(t.schema,t.table,wp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Cp(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(pz(),wp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await mz.insertRecords(o,Lp.hash_attribute,yw,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Dp(n),await Dp(s),await Dp(i)}await Az(t)}catch(o){throw o}}a(Oz,"lmdbCreateTable");async function Dp(e){try{await gz(e)}catch(t){Rz.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Dp,"createAttribute")});var Cw=g((nle,ww)=>{"use strict";var bz=Lc(),yz=Uc(),Nz=q_(),Kc=U(),Iz=qo().updateRecords,wz=Ye(),{getSchemaPath:Cz}=Qe(),Dz=xc(),Lz=K();ww.exports=Mz;async function Mz(e){try{let{schema_table:t,attributes:r}=bz(e);yz(e,r,t.hash_attribute),e.schema!==Kc.SYSTEM_SCHEMA_NAME&&(r.includes(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Nz(e.hdb_auth_header,t,r),s=Cz(e.schema,e.table),i=await wz.openEnvironment(s,e.table),o=await Iz(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Dz(e,o)}catch(c){Lz.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(Mz,"lmdbUpdateRecords")});var Lw=g((ile,Dw)=>{"use strict";var Uz=U().OPERATIONS_ENUM,Mp=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Uz.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Dw.exports=Mp});var Uw=g((cle,Mw)=>{"use strict";var ale=Lw(),Pz=Lc(),vz=Uc(),Bz=q_(),Wc=U(),Hz=qo().upsertRecords,xz=Ye(),{getSchemaPath:Gz}=Qe(),Fz=xc(),qz=K(),{handleHDBError:kz,hdb_errors:Vz}=ne();Mw.exports=$z;async function $z(e){let t;try{t=Pz(e)}catch(u){throw kz(u,u.message,Vz.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;vz(e,n,r.hash_attribute),e.schema!==Wc.SYSTEM_SCHEMA_NAME&&(n.includes(Wc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Wc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Wc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Wc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Bz(e.hdb_auth_header,r,n),i=Gz(e.schema,e.table),o=await xz.openEnvironment(i,e.table),c=await Hz(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await Fz(e,c)}catch(u){qz.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($z,"lmdbUpsertRecords")});var vw=g((lle,Pw)=>{"use strict";var Up=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};Pw.exports=Up});var Hw=g((dle,Bw)=>{"use strict";var Pp=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=Pp});var Fw=g((hle,Gw)=>{"use strict";var vp=Ye(),{getTransactionAuditStorePath:Yz}=Qe(),Ele=vw(),Qc=ft(),Kz=Q(),xw=Hw(),Wz=require("util").promisify,Qz=Wz(setTimeout),zz=1e4,Jz=100;Gw.exports=Xz;async function Xz(e){let t=Yz(e.schema,e.table),r=await vp.openEnvironment(t,e.table,!0),n=vp.listDBIs(r);vp.initializeDBIs(r,Qc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new xw;do s=await jz(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 Qz(Jz);while(s.transactions_deleted>0);return i}a(Xz,"deleteAuditLogsBefore");async function jz(e,t){let r=new xw;try{let n=e.dbis[Qc.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[Qc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Kz.isEmpty(c)||(s=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)s=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>zz)break}return await s,r}catch(n){throw n}}a(jz,"deleteTransactions")});var kw=g((ple,qw)=>{"use strict";var Bp=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};qw.exports=Bp});var $w=g((gle,Vw)=>{"use strict";var Zz=es(),eJ=Yc(),Tle=kw(),ts=U(),tJ=Q(),Hp=Ye(),rJ=Fi(),nJ=$c(),sJ=Fc(),{getSchemaPath:iJ}=Qe();Vw.exports=oJ;async function oJ(e,t=!0){let r;e.schema===ts.SYSTEM_SCHEMA_NAME?r=rJ[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await cJ(e),s=iJ(e.schema,e.table),i=await Hp.openEnvironment(s,e.table);return t===!0&&await aJ(e,i,r.hash_attribute),Hp.dropDBI(i,e.attribute),n}a(oJ,"lmdbDropAttribute");async function aJ(e,t,r){let n=Hp.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(aJ,"removeAttributeFromAllObjects");async function cJ(e){let t=new Zz(ts.SYSTEM_SCHEMA_NAME,ts.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ts.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ts.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ts.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await nJ(t)).filter(o=>o[ts.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(tJ.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[ts.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new eJ(ts.SYSTEM_SCHEMA_NAME,ts.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return sJ(i)}a(cJ,"dropAttributeFromSystem")});var Jw=g((Ole,zw)=>{"use strict";var xp=Ye(),ta=ft(),Ale=Lr(),Gp=U(),Yw=Q(),{getTransactionAuditStorePath:uJ}=Qe(),lJ=jo(),J_=zo(),_J=K();zw.exports=dJ;async function dJ(e){let t=uJ(e.schema,e.table),r=await xp.openEnvironment(t,e.table,!0),n=xp.listDBIs(r);xp.initializeDBIs(r,ta.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Gp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Kw(r,e.search_values);case Gp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,EJ(r,e.search_values,s);case Gp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return fJ(r,e.search_values);default:return Kw(r)}}a(dJ,"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[ta.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 J_,s))}a(Kw,"searchTransactionsByTimestamp");function fJ(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[ta.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,Qw(e,i))}return Object.fromEntries(r)}a(fJ,"searchTransactionsByUsername");function EJ(e,t,r){let n=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=lJ.equals(e,ta.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ta.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(EJ,"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 J_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new J_(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[ta.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 J_,i);r.push(o)}}catch(i){_J.warn(i)}return r}catch(n){throw n}}a(Qw,"batchSearchTransactions")});var jw=g((Ile,Xw)=>{"use strict";var{getSchemaPath:yle}=Qe(),Nle=Ye(),{database:hJ}=(Ae(),se(Fe));Xw.exports={writeTransaction:mJ};async function mJ(e,t,r){return hJ({database:e,table:t}).transaction(r)}a(mJ,"writeTransaction")});var rC=g((Cle,tC)=>{"use strict";var{getSchemaPath:Zw}=Qe(),eC=Ye();tC.exports={flush:pJ,resetReadTxn:SJ};async function pJ(e,t){return(await eC.openEnvironment(Zw(e,t),t.toString())).flushed}a(pJ,"flush");async function SJ(e,t){try{(await eC.openEnvironment(Zw(e,t),t.toString())).resetReadTxn()}catch{}}a(SJ,"resetReadTxn")});var oC=g((Lle,iC)=>{"use strict";var{Readable:TJ}=require("stream"),{getDatabases:gJ}=(Ae(),se(Fe)),{readSync:RJ,openSync:AJ,createReadStream:nC}=require("fs"),{open:OJ}=require("lmdb"),sC=u_(),bJ=__(),{AUDIT_STORE_OPTIONS:yJ}=(xi(),se(aC)),{INTERNAL_DBIS_NAME:NJ,AUDIT_STORE_NAME:IJ}=ft();iC.exports=CJ;var Fp=32768,wJ=100;async function CJ(e){let t=e.database||e.schema||"data",r=gJ()[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=OJ({noSync:!0,maxDbs:bJ.MAX_DBS}),f,E=d.openDB(NJ,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++%wJ===0&&(await new Promise(X=>setTimeout(X,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(IJ,Object.assign({},yJ)),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=AJ(o.path);return o.transaction(()=>{let _=Buffer.alloc(Fp);RJ(c,_,0,Fp),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=nC(null,{fd:c,start:Fp}),f=new TJ.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(CJ,"getBackup")});var lC=g((Ule,uC)=>{"use strict";var DJ=K(),{handleHDBError:LJ}=ne(),MJ=Fb(),UJ=g_(),PJ=cp(),vJ=gI(),BJ=Fc(),HJ=hp(),xJ=KI(),GJ=tw(),FJ=$c(),qJ=uw(),kJ=gw(),VJ=Iw(),$J=Cw(),YJ=Uw(),KJ=Fw(),WJ=bp(),QJ=$w(),zJ=Jw(),JJ=jw(),cC=rC(),XJ=oC(),qp=class extends MJ{static{a(this,"LMDBBridge")}async searchByConditions(t){return qJ(t)}async getDataByHash(t){return await HJ(t)}async searchByHash(t){return await xJ(t)}async getDataByValue(t,r){return await GJ(t,r)}async searchByValue(t){return await FJ(t)}async createSchema(t){return await vJ(t)}async dropSchema(t){return await kJ(t)}async createTable(t,r){return await VJ(t,r)}async dropTable(t){return await WJ(t)}async createAttribute(t){return await UJ(t)}async createRecords(t){return await PJ(t)}async updateRecords(t){return await $J(t)}async upsertRecords(t){try{return await YJ(t)}catch(r){throw LJ(r,null,null,DJ.ERR,r)}}async deleteRecords(t){return await BJ(t)}async dropAttribute(t){return await QJ(t)}async deleteAuditLogsBefore(t){return await KJ(t)}async readAuditLog(t){return await zJ(t)}writeTransaction(t,r,n){return JJ.writeTransaction(t,r,n)}flush(t,r){return cC.flush(t,r)}resetReadTxn(t,r){return cC.resetReadTxn(t,r)}getBackup(t){return XJ(t)}};uC.exports=qp});function r2(){t2=setInterval(function(){for(let e of kp)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},e2).unref()}var Vp,dC,fC,jJ,kp,ZJ,zc,_C,Zi,X_,e2,t2,$p=Re(()=>{Vp=x(Lr()),dC=x(ne()),fC=x(K());Nn();jJ=100,kp=new Set,ZJ=25e3,Zi=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,this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0),kp.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(kp.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(zc&&performance.now()-_C>ZJ)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,Vp.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<jJ>>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 zc||(zc=s,_C=performance.now(),zc.then(()=>{zc=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=[]}},X_=class extends Zi{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Vp.getNextMonotonicTime)())}getReadTxn(){}},e2=3e4;a(r2,"startMonitoringTxns");r2()});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 Zi;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,eo=Re(()=>{EC=require("../../index");Nn();$p();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:()=>Wp});function Qp({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=rs(e),n=Qp(e,r);if(!r)throw new Ln.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&&Z_(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 rs(e){let t=e.database||e.schema||s2,r=Mn()[t];if(!r)throw(0,Ln.handleHDBError)(new Error,n2.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,j_,Ln,gC,RC,Un,Yp,Kp,AC,n2,s2,i2,o2,hC,Wp,bC=Re(()=>{"use strict";TC=x(lC()),j_=x(Zo()),Ln=x(ne());Ae();gC=x(Lc()),RC=x(Uc()),Un=x(U()),Yp=x(Os()),Kp=x(Dn()),AC=x(Q());eo();ed();({HDB_ERROR_MSGS:n2}=Ln.hdb_errors),s2="data",i2=1e4,o2=10,Wp=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,j_.default)(t,"conditions");if(r)throw(0,Ln.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=rs(t);if(!n)throw new Ln.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:Qp(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 Ln.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}]}ct({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await rs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=rs(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){rs(t).dropTable()}createSchema(t){return Jc({database:t.schema,table:null}),Yp.signalSchemaChange(new Kp.SchemaEventMsg(process.pid,Un.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await zp(t.schema),Yp.signalSchemaChange(new Kp.SchemaEventMsg(process.pid,Un.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=Mn()[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=Z_(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=Mn()[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=Mn()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ln.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:Un.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)(o2),u=[],s=!0},"chunkDelete");for await(let l of n)u.push(l[r.primaryKey]),c++,c%i2===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,j_.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&&Un.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,j_.default)(t,"value");if(n)throw n;let s=rs(t);if(!s)throw new Ln.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===Un.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:Qp(t,s)})}async getDataByValue(t,r){let n=new Map,s=rs(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){rs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return rs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=rs(t),n={};switch(t.search_type){case Un.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 Un.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(Qp,"getSelect");a(mC,"getRecords");a(rs,"getTable");a(pC,"createDeleteResponse");a(SC,"groupRecordsInHistory")});var Cn=g((Qle,yC)=>{"use strict";var{ResourceBridge:a2}=(bC(),se(OC)),c2=re();c2.initSync();var td;function u2(){return td||(td=new a2,td)}a(u2,"getBridge");yC.exports=u2()});var CC=g((Jle,wC)=>{"use strict";var NC=require("lodash"),Xc=require("mathjs"),l2=require("jsonata"),IC=Q();wC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?NC.uniqWith(e,NC.isEqual):e,searchJSON:_2,mad:jc.bind(null,Xc.mad),mean:jc.bind(null,Xc.mean),mode:jc.bind(null,Xc.mode),prod:jc.bind(null,Xc.prod),median:jc.bind(null,Xc.median)};function jc(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(jc,"aggregateFunction");function _2(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=l2(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(_2,"searchJSON")});var LC=g((jle,DC)=>{"use strict";var ht=require("moment"),Jp="YYYY-MM-DDTHH:mm:ss.SSSZZ";ht.suppressDeprecationWarnings=!0;DC.exports={current_date:()=>ht().utc().format("YYYY-MM-DD"),current_time:()=>ht().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return ht(e).utc().format("YYYY");case"month":return ht(e).utc().format("MM");case"day":return ht(e).utc().format("DD");case"hour":return ht(e).utc().format("HH");case"minute":return ht(e).utc().format("mm");case"second":return ht(e).utc().format("ss");case"millisecond":return ht(e).utc().format("SSS");default:break}},date:e=>ht(e).utc().format(Jp),date_format:(e,t)=>ht(e).utc().format(t),date_add:(e,t,r)=>ht(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>ht(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=ht(e).utc(),s=ht(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>ht().utc().valueOf(),get_server_time:()=>ht().format(Jp),offset_utc:(e,t)=>ht(e).utc().utcOffset(t).format(Jp)}});var vC=g((Zle,PC)=>{"use strict";var d2=require("@turf/area"),f2=require("@turf/length"),E2=require("@turf/circle"),h2=require("@turf/difference"),m2=require("@turf/distance"),p2=require("@turf/boolean-contains"),S2=require("@turf/boolean-equal"),T2=require("@turf/boolean-disjoint"),g2=require("@turf/helpers"),MC=U(),pe=Q(),Ns=K();PC.exports={geoArea:R2,geoLength:A2,geoCircle:O2,geoDifference:b2,geoDistance:UC,geoNear:y2,geoContains:N2,geoEqual:I2,geoCrosses:w2,geoConvert:C2};function R2(e){if(pe.isEmpty(e))return NaN;typeof e=="string"&&(e=pe.autoCastJSON(e));try{return d2.default(e)}catch(t){return Ns.trace(t,e),NaN}}a(R2,"geoArea");function A2(e,t){if(pe.isEmpty(e))return NaN;typeof e=="string"&&(e=pe.autoCastJSON(e));try{return f2.default(e,{units:t||"kilometers"})}catch(r){return Ns.trace(r,e),NaN}}a(A2,"geoLength");function O2(e,t,r){if(pe.isEmpty(e))return NaN;if(pe.isEmpty(t))return NaN;typeof e=="string"&&(e=pe.autoCastJSON(e));try{return E2.default(e,t,{units:r||"kilometers"})}catch(n){return Ns.trace(n,e,t),NaN}}a(O2,"geoCircle");function b2(e,t){if(pe.isEmpty(e))return NaN;if(pe.isEmpty(t))return NaN;typeof e=="string"&&(e=pe.autoCastJSON(e)),typeof t=="string"&&(t=pe.autoCastJSON(t));try{return h2(e,t)}catch(r){return Ns.trace(r,e,t),NaN}}a(b2,"geoDifference");function UC(e,t,r){if(pe.isEmpty(e))return NaN;if(pe.isEmpty(t))return NaN;typeof e=="string"&&(e=pe.autoCastJSON(e)),typeof t=="string"&&(t=pe.autoCastJSON(t));try{return m2.default(e,t,{units:r||"kilometers"})}catch(n){return Ns.trace(n,e,t),NaN}}a(UC,"geoDistance");function y2(e,t,r,n){if(pe.isEmpty(e)||pe.isEmpty(t))return!1;if(pe.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=pe.autoCastJSON(e)),typeof t=="string"&&(t=pe.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return UC(e,t,n)<=r}catch(s){return Ns.trace(s,e,t),!1}}a(y2,"geoNear");function N2(e,t){if(pe.isEmpty(e)||pe.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=pe.autoCastJSON(e)),typeof t=="string"&&(t=pe.autoCastJSON(t));try{return p2.default(e,t)}catch(r){return Ns.trace(r,e,t),!1}}a(N2,"geoContains");function I2(e,t){if(pe.isEmpty(e)||pe.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=pe.autoCastJSON(e)),typeof t=="string"&&(t=pe.autoCastJSON(t));try{return S2.default(e,t)}catch(r){return Ns.trace(r,e,t),!1}}a(I2,"geoEqual");function w2(e,t){if(pe.isEmpty(e)||pe.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=pe.autoCastJSON(e)),typeof t=="string"&&(t=pe.autoCastJSON(t));try{return!T2.default(e,t)}catch(r){return Ns.trace(r,e,t),!1}}a(w2,"geoCrosses");function C2(e,t,r){if(pe.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(pe.isEmpty(t))throw new Error("geo_type is required");if(pe.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=pe.autoCastJSON(e)),g2[t](e,r)}a(C2,"geoConvert")});var rd=g((t_e,BC)=>{var to=CC(),Fr=LC(),ns=vC();BC.exports=e=>{e.aggr.mad=e.aggr.MAD=to.mad,e.aggr.mean=e.aggr.MEAN=to.mean,e.aggr.mode=e.aggr.MODE=to.mode,e.aggr.prod=e.aggr.PROD=to.prod,e.aggr.median=e.aggr.MEDIAN=to.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=to.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=to.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Fr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Fr.current_time,e.fn.extract=e.fn.EXTRACT=Fr.extract,e.fn.date=e.fn.DATE=Fr.date,e.fn.date_format=e.fn.DATE_FORMAT=Fr.date_format,e.fn.date_add=e.fn.DATE_ADD=Fr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Fr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Fr.date_diff,e.fn.now=e.fn.NOW=Fr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Fr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Fr.get_server_time,e.fn.getdate=e.fn.GETDATE=Fr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Fr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=ns.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=ns.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=ns.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=ns.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=ns.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=ns.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=ns.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=ns.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=ns.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=ns.geoNear}});var FC=g((r_e,GC)=>{"use strict";var Zc=require("lodash"),_r=require("alasql");_r.options.cache=!1;var D2=rd(),HC=require("clone"),nd=require("recursive-iterator"),le=K(),Ce=Q(),ra=Cn(),L2=U(),{hdb_errors:M2}=ne(),{getDatabases:xC}=(Ae(),se(Fe)),U2="IS NULL",Pn="There was a problem performing this search. Please check the logs and try again.";D2(_r);var Xp=class{static{a(this,"SQLSearch")}constructor(t,r){if(Ce.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(),Ce.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Ce.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(Pn)}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(Pn)}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(Pn)}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(Pn)}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(Pn)}}_getColumns(){let t=new nd(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=Zc.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(Ce.isEmpty(this.statement.where)){le.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new nd(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Ce.isEmpty(r)&&r.right)if(Ce.isNotEmptyAndHasValue(r.right.value)){let n=Ce.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new _r.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Ce.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new _r.yy.LogicValue({value:i}):n instanceof _r.yy.StringValue&&Ce.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new _r.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 nd(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(!Ce.isEmpty(L2.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Ce.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Ce.isEmptyOrZeroLength(r.left.columnid)||Ce.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(Ce.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"=":!Ce.isEmpty(r.right.value)||!Ce.isEmpty(r.left.value)?n.add(Ce.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(Ce.isEmptyOrZeroLength(this.all_table_attributes)&&Ce.isEmptyOrZeroLength(this.statement.from)&&Ce.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&&Zc.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(Ce.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Ce.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(Ce.isEmptyOrZeroLength(this.all_table_attributes)&&!Ce.isEmptyOrZeroLength(this.columns.columns))return t;if(Ce.isEmptyOrZeroLength(this.all_table_attributes)&&Ce.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await _r.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(Ce.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(U2)>-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=Zc.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),!Ce.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Ce.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await ra.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(Pn)}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 ra.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(Pn)}else if(!Ce.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Ce.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 ra.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(Pn)}else try{c.search_attribute=s.attribute,c.search_value="*";let l=await ra.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(Pn)}}}_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 _r.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 _r.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new _r.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 _r.yy.FuncValue:new _r.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 _r.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=Zc.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 nd(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=Zc.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(Pn)}}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 ra.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 _r.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(M2.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 ra.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(Pn)}}return Object.values(Object.values(this.data)[0].__merged_data)}};GC.exports=Xp});var vr=g((s_e,qC)=>{"use strict";var P2=xb();qC.exports={searchByConditions:B2,searchByHash:H2,searchByValue:x2,search:G2};var jp=Cn(),{transformReq:Zp}=Q(),v2=FC();async function B2(e){return Zp(e),jp.searchByConditions(e)}a(B2,"searchByConditions");async function H2(e){Zp(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of jp.searchByHash(e))r&&t.push(r);return t}a(H2,"searchByHash");async function x2(e){Zp(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of jp.searchByValue(e))t.push(r);return t}a(x2,"searchByValue");function G2(e,t){try{let r=new P2(e);r.validate(),new v2(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(G2,"search")});var sd=g((o_e,kC)=>{"use strict";var F2=Cn();kC.exports={writeTransaction:q2};function q2(e,t,r){return F2.writeTransaction(e,t,r)}a(q2,"writeTransaction")});var KC=g((u_e,YC)=>{"use strict";var k2=vr(),V2=As(),VC=K(),$2=on(),c_e=sd(),Y2=require("clone"),tS=require("alasql"),K2=rd(),$C=require("util"),W2=$C.promisify(V2.getTableSchema),Q2=$C.promisify(k2.search),z2=U(),eS=Q();K2(tS);YC.exports={update:X2};var J2="There was a problem performing this update. Please check the logs and try again.";async function X2({statement:e,hdb_user:t}){let r=await W2(e.table.databaseid,e.table.tableid),n=j2(e.columns);eS.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=Y2(s),c=eS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=tS.parse(u).statements[0],l=await Q2(_),d=Z2(n,l);return e4(o,d,t)}a(X2,"update");function j2(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=tS.compile(`SELECT ${r.expression.toString()} AS [${z2.FUNC_VAL}] FROM ?`)}),t}catch(t){throw VC.error(t),new Error(J2)}}a(j2,"createUpdateRecord");function Z2(e,t){return eS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Z2,"buildUpdateRecords");async function e4(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await $2.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(e4,"updateRecords")});var QC=g((f_e,WC)=>{var t4=require("alasql"),r4=vr(),n4=K(),s4=Cn(),nS=require("util"),rS=Q(),i4=U(),o4=As(),__e=sd(),d_e=on(),a4="record",c4="successfully deleted",u4=nS.callbackify(f4),l4=nS.promisify(r4.search),_4=nS.promisify(o4.getTableSchema);WC.exports={convertDelete:u4};function d4(e){return`${e.deleted_hashes.length} ${a4}${e.deleted_hashes.length===1?"":"s"} ${c4}`}a(d4,"generateReturnMessage");async function f4({statement:e,hdb_user:t}){let r=await _4(e.table.databaseid,e.table.tableid);rS.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=rS.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=t4.parse(o).statements[0],u={operation:i4.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await l4(c);let _=await s4.deleteRecords(u);return rS.isEmptyOrZeroLength(_.message)&&(_.message=d4(_)),delete _.txn_time,_}catch(_){throw n4.error(_),_.hdb_code?_.message:_}}a(f4,"convertDelete")});var ZC=g((h_e,jC)=>{"use strict";var E4=ki(),{hdb_errors:zC}=ne(),{getDatabases:JC}=(Ae(),se(Fe));jC.exports={checkSchemaExists:XC,checkSchemaTableExists:h4,schema_describe:E4};async function XC(e){if(!JC()[e])return zC.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(XC,"checkSchemaExists");async function h4(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(h4,"checkSchemaTableExists")});var eu=g((p_e,m4)=>{m4.exports={name:"harperdb",version:"4.3.0-beta.13",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:"3.0.0-beta.10",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 iu={};$e(iu,{addAnalyticsListener:()=>su,recordAction:()=>qr,recordActionBinary:()=>an,setAnalyticsEnabled:()=>p4});function p4(e){cD=e}function qr(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=ad.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},ad.set(i,o)}id||S4()}function an(e,t,r,n,s){qr(!!e,t,r,n,s)}function su(e){_D.push(e)}function S4(){id=performance.now(),setTimeout(async()=>{let e=performance.now()-id;id=0;let t=[],r={time:Date.now(),period:e,threadId:ro.threadId,metrics:t};for(let[s,i]of ad){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:ro.threadId,byThread:!0,...n});for(let s of _D)s(t);ad=new Map,ro.parentPort?ro.parentPort.postMessage({type:lD,report:r}):mD({report:r})},uD).unref()}async function T4(e,t=6e4){let r=oS(),n=ED(),s=new Promise(p=>{let S=performance.now();setImmediate(()=>{let T=performance.now();T-S>5e3&&(0,tu.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,tu.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:X,distribution:z,threads:J,...de}=R;B||(B=1);let ce=k+(L?"-"+L:"");H!==void 0&&(ce+="-"+H),P!==void 0&&(ce+="-"+P);let fe=c.get(ce);if(fe){if(fe.threads){let Be=fe.threads[b];if(Be)fe=Be;else{fe.threads[b]=Object.assign({},de);continue}}fe.count||(fe.count=1);let Le=fe.count;for(let Be in de){let Dt=de[Be];typeof Dt=="number"&&(fe[Be]=(fe[Be]*Le+Dt*B)/(Le+B))}fe.count+=B,X>=0&&(fe.total+=X,fe.ratio=fe.total/fe.count)}else fe=Object.assign({period:t},R),delete fe.distribution,c.set(ce,fe),fe.byThread&&(fe.threads=[],fe.threads[b]=Object.assign({},de),_.push(fe));if(z){z=z.map(Be=>typeof Be=="number"?{value:Be,count:1}:Be);let Le=u.get(ce);Le?Le.push(...z):u.set(ce,z)}}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(X=>X);for(let X in B){if(typeof p[X]!="number")continue;let z=0;for(let J of k){let de=J[X];typeof de=="number"&&(z+=de)}p[X]=z}p.count=k.length,delete p.threads,delete p.byThread}for(let[p,S]of u){let T=c.get(p);S.sort((Be,Dt)=>Be.value>Dt.value?1:-1);let b=T.count-1,R=[],L=0,H=0,P;for(let Be of dD){let Dt=b*Be;for(;L<Dt;)P=S[H++],L+=P.count,H===1&&L--;let Ul=S[H>1?H-2:0];P||(P=S[0]),R.push(P.value-(P.value-Ul.value)*(L-Dt)/P.count)}let[k,B,X,z,J,de,ce,fe,Le]=R;Object.assign(T,{p1:k,p10:B,p25:X,median:z,p75:J,p90:de,p95:ce,p99:fe,p999:Le})}let d;for(let[p,S]of c)S.id=(0,od.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,od.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 oS(){return nD||(nD=ct({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function ED(){return sD||(sD=ct({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function A4(){hD=!0;let e=(0,nu.get)(iS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await T4(uD,e),await rD(oS(),g4),await rD(ED(),R4)},Math.min(e/2,2147483647)).unref()}function mD(e,t){let r=e.report;r.threadId=t?.threadId||ro.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,od.getNextMonotonicTime)(),oS().primaryStore.put(r.id,r),hD||A4(),O4&&(pD=y4(r))}async function y4(e){if(await pD,!oi){let r=(0,ru.dirname)((0,tu.getLogFilePath)());try{oi=await(0,sS.open)((0,ru.join)(r,"analytics.log"),"r+")}catch{oi=await(0,sS.open)((0,ru.join)(r,"analytics.log"),"w+")}}let t=(await oi.stat()).size;if(t>b4){let r=Buffer.alloc(t);await oi.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await oi.write(r,{position:0}),await oi.truncate(r.length),t=r.length}await oi.write(JSON.stringify(e)+`
|
|
7
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw bt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}nV(n,r),Ch(n);let s=n.toJSON();if(zk.config=s,yt=Go(s),yt.logging_rotation_rotate)for(let i in qO)yt[i]&&bt.error(`Config ${qO[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);bt.trace(Xk)}}a(wh,"initConfig");function nV(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],On.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],On.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],On.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),n&&(bt.trace("Updating config file with missing config params"),ar.writeFileSync(t,String(e)))}a(nV,"checkForUpdatedConfig");function Ch(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 Ql.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(Ch,"validateConfig");function sV(e,t){yt===void 0&&(yt={});let r=bn[e.toLowerCase()];if(r===void 0){bt.trace(`Unable to update config object because config param '${e}' does not exist`);return}yt[r.toLowerCase()]=t}a(sV,"updateConfigObject");function KO(e,t,r=void 0,n=!1,s=!1,i=!1){yt===void 0&&wh();let o=YO(bn.hdb_root),c=On.join(o,Cr.HDB_CONFIG_FILE),u=Xs(c),_;if(r===void 0&&e.toLowerCase()===wr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=bn[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=Ih(f,t);u.setIn([...E],h)}else for(let f in r){let E=bn[f.toLowerCase()];if(E===wr.HTTP_SECUREPORT&&r[f]===yt[wr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===wr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===yt[wr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===wr.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=Cr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=Ih(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){bt.error(T)}}}_&&$O(u,_),Ch(u);let l=u.getIn(["rootPath"]),d=On.join(l,Cr.HDB_CONFIG_FILE);n===!0&&iV(c,l),ar.writeFileSync(d,String(u)),s&&(yt=Go(u.toJSON())),bt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(KO,"updateConfigValue");function iV(e,t){try{let r=On.join(t,"backup",`${Cr.HDB_CONFIG_FILE}.bak`);ar.copySync(e,r),bt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){bt.error(jk),bt.error(r)}}a(iV,"backupConfigFile");var oV=["databases"];function Go(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)),Jl=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;!wr[u.toUpperCase()]&&bn[u]&&(s[bn[u].toLowerCase()]=o[c]),s[u]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Go,"flattenConfig");function Ih(e,t){if(e===wr.CLUSTERING_NODENAME||e===wr.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)||Lt.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 Lt.autoCast(t)}a(Ih,"castConfigValue");function aV(){let e=Lt.getPropsFilePath(),t=Pi(e);return Xs(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 Dh(){let e=Lt.getPropsFilePath();try{ar.accessSync(e,ar.constants.F_OK|ar.constants.R_OK)}catch(n){if(!Lt.noBootFile())throw bt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Pi(e);return Xs(t).toJSON()}a(Dh,"readConfigFile");function Xs(e){return $k.parseDocument(ar.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Xs,"parseYamlDoc");function uV(){let e=Dh(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Lt.isEmptyOrZeroLength(t)?[]:t;let r=FO(t);if(r)throw Ql.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Lt.isEmptyOrZeroLength(n)?[]:n;let s=FO(n);if(s)throw Ql.CONFIG_VALIDATION(s.message);if(!Lt.isEmptyOrZeroLength(n)&&!Lt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Lt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Ql.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(uV,"getClusteringRoutes");function WO(e){let t=kO(e);yt={};for(let r in bn){let n=t.get(r.toUpperCase());if(Lt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=bn[r].toLowerCase();s===wr.LOGGING_ROOT?yt[s]=On.dirname(n):yt[s]=n}return yt}a(WO,"initOldConfig");function lV(e){let t=Dh();return Kk.get(t,e.replaceAll("_","."))}a(lV,"getConfigFromFile");async function _V(e,t){let r=Xs(Pi());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await ar.writeFile(Pi(),String(r))}a(_V,"addConfig");function dV(e){let t=Pi(Lt.getPropsFilePath()),r=Xs(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=On.join(n,Cr.HDB_CONFIG_FILE);ar.writeFileSync(s,String(r))}a(dV,"deleteConfigFromFile");function fV(){return Jl||(wh(),Jl)}a(fV,"getConfigObj")});var re=g((goe,jO)=>{"use strict";var Lh=require("fs-extra"),vi=require("path"),zO=require("os"),EV=require("properties-reader"),_c=K(),lc=Q(),ue=U(),Xl=Dr(),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},Ss={};jO.exports={BOOT_PROPS_FILE_PATH:jl,getHdbBasePath:pV,setHdbBasePath:SV,get:XO,initSync:gV,setProperty:Me,initTestEnvironment:RV};function pV(){return Ss[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(pV,"getHdbBasePath");function SV(e){Ss[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(SV,"setHdbBasePath");function XO(e){let t=Xl.getConfigValue(e);return t===void 0?Ss[e]:t}a(XO,"get");function Me(e,t){mV[e]&&(Ss[e]=t),Xl.updateConfigObject(e,t)}a(Me,"setProperty");function TV(){let e;try{e=lc.getPropsFilePath(),Lh.accessSync(e,Lh.constants.F_OK|Lh.constants.R_OK),JO=!0;let t=EV(e);return Ss[ue.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ue.HDB_SETTINGS_NAMES.INSTALL_USER),Ss[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ss[jl]=e,!0}catch{return _c.trace(`Environment manager found no properties file at ${e}`),!1}}a(TV,"doesPropFileExist");function gV(e=!1){try{(JO||TV()||lc.noBootFile())&&(Xl.initConfig(e),Ss[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Xl.getConfigValue(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){_c.error(hV),_c.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=vi.join(__dirname,"../../","unitTests");Ss[jl]=vi.join(u,"hdb_boot_properties.file"),Me(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,vi.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,vi.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,vi.join(u,"envDir")),Me(ue.CONFIG_PARAMS.STORAGE_PATH,vi.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,lc.isEmpty(i)?!1:i),Me(ue.CONFIG_PARAMS.HTTP_CORS,lc.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,vi.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Me(ue.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,lc.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`;_c.fatal(r),_c.error(t)}}a(RV,"initTestEnvironment")});var Qe=g((Aoe,ib)=>{"use strict";var mc=U(),AV=Q(),cr=re(),pc=require("path"),OV=require("minimist"),ZO=require("fs-extra"),eb=require("lodash");cr.initSync();var{CONFIG_PARAMS:js,DATABASES_PARAM_CONFIG:dc,SYSTEM_SCHEMA_NAME:Zl}=mc,fc,Ec,hc;function tb(){if(fc!==void 0)return fc;if(cr.getHdbBasePath()!==void 0)return fc=cr.get(js.STORAGE_PATH)||pc.join(cr.getHdbBasePath(),mc.DATABASES_DIR_NAME),fc}a(tb,"getBaseSchemaPath");function rb(){if(Ec!==void 0)return Ec;if(cr.getHdbBasePath()!==void 0)return Ec=sb(Zl),Ec}a(rb,"getSystemSchemaPath");function nb(){if(hc!==void 0)return hc;if(cr.getHdbBasePath()!==void 0)return hc=cr.get(mc.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||pc.join(cr.getHdbBasePath(),mc.TRANSACTIONS_DIR_NAME),hc}a(nb,"getTransactionAuditStoreBasePath");function bV(e,t){let r=cr.get(js.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||pc.join(nb(),e.toString())}a(bV,"getTransactionAuditStorePath");function sb(e,t){e=e.toString(),t=t&&t.toString();let r=cr.get(mc.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||pc.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[js.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[Zl];if(!c)continue;let u=cr.get(js.DATABASES);u=u??{};let _=c?.tables?.[t]?.[dc.PATH];if(_)return eb.set(u,[Zl,dc.TABLES,t,dc.PATH],_),cr.setProperty(js.DATABASES,u),_;let l=c?.[dc.PATH];if(l)return eb.set(u,[Zl,dc.PATH],l),cr.setProperty(js.DATABASES,u),l}}let s=r[js.STORAGE_PATH.toUpperCase()];if(s){if(!ZO.pathExistsSync(s))throw new Error(s+" does not exist");let i=pc.join(s,e);return ZO.mkdirsSync(i),cr.setProperty(js.STORAGE_PATH,s),i}return rb()}a(yV,"initSystemSchemaPaths");function NV(){fc=void 0,Ec=void 0,hc=void 0}a(NV,"resetPaths");ib.exports={getBaseSchemaPath:tb,getSystemSchemaPath:rb,getTransactionAuditStorePath:bV,getTransactionAuditStoreBasePath:nb,getSchemaPath:sb,initSystemSchemaPaths:yV,resetPaths:NV}});var Lr=g((Noe,lb)=>{"use strict";var IV=Ir().LMDB_ERRORS_ENUM,boe=require("lmdb"),wV=ft(),yoe=require("buffer").Buffer,{OVERFLOW_MARKER:ob,MAX_SEARCH_KEY_LENGTH:e_}=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>e_?[e.slice(0,e_)+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>e_?r.push(i.slice(0,e_)+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 t_=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>t_?(t_=e,e):(t_+=488e-6,t_)}a(PV,"getNextMonotonicTime");lb.exports={validateEnv:CV,stringifyData:DV,convertKeyValueToWrite:LV,getNextMonotonicTime:PV,getIndexedValues:MV}});var _b,yn,Mh,Sc=Re(()=>{_b=require("events"),yn=class extends _b.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new Mh;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)}},Mh=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 vh={};$e(vh,{loadGQLSchema:()=>HV,start:()=>Ph,startOnMainThread:()=>BV});function Ph({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 X=H(P.type);return X.nullable=!1,X}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 X={};for(let z of B.arguments)X[z.name.value]=z.value.value;k.relationship=X}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 X=k.authorizedRoles=[];for(let z of B.arguments)z.name.value==="role"&&X.push(z.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,Uh.dirname)(n),S.tableClass):i.set((0,Uh.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var Uh,db,vV,BV,HV,fb=Re(()=>{Uh=require("path");Ae();db=x(tt()),vV=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(Ph,"start");BV=Ph,HV=Ph({ensureTable:ct}).handleFile});async function r_(e){return xV?(Tc||(Tc=GV(qV)),(await(await Tc).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"}),Tc=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:qt,tables:Mr,databases:rt})}};let n=await(0,Eb.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Tc}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:qt,tables:Mr}}var Eb,hb,xV,Tc,Bh=Re(()=>{Nn();Ae();Eb=require("fs/promises"),hb=require("path"),xV=!1;a(r_,"secureImport");a(GV,"getCompartment");a(FV,"secureOnlyFetch");a(qV,"getGlobalVars")});var xh={};$e(xh,{handleFile:()=>kV});async function kV(e,t,r,n){let s=new Map,i=(0,mb.pathToFileURL)(r).toString(),o=await r_(i);u(o.default)&&n.set((0,Hh.dirname)(t),o.default),c(o,(0,Hh.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,Hh,pb=Re(()=>{mb=require("url");Bh();Hh=require("path");a(kV,"handleFile")});var Fh={};$e(Fh,{start:()=>VV});function VV({resources:e}){e.set("login",Gh),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Gh,Sb=Re(()=>{Nn();a(VV,"start");Gh=class extends qt{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:()=>kh,streamAsJSON:()=>gc,stringify:()=>Bi});function gc(e){return new qh({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 Bi(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===Ob)return bb(e);if(t.resolution)return t.resolution.then(()=>Bi(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)+":"+Bi(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function kh(e){return KV.test(e)?$V.parse(e):JSON.parse(e)}var Rb,Ab,$V,YV,Ob,qh,KV,Vh=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(gc,"streamAsJSON");qh=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 Bi(t)}else yield Bi(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(Bi,"stringify");a(bb,"jsStringify");KV=/-?\d{16,}/;a(kh,"parse")});var xb=g((koe,Hb)=>{"use strict";var $h=require("recursive-iterator"),WV=require("alasql"),Yh=require("clone"),Nb=Q(),{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"),qoe=Symbol("getAllColumns"),Lb=Symbol("validateAllColumns"),n_=Symbol("findColumn"),Mb=Symbol("validateOrderBy"),Rc=Symbol("validateSegment"),Wh=Symbol("validateColumn"),Ub=Symbol("setColumnsForTable"),Pb=Symbol("checkColumnsForAsterisk"),vb=Symbol("validateGroupBy"),Bb=Symbol("hasColumns"),Qh=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 $h(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=Yh(s);i.table=Yh(t),this.attributes.push(i)})}[n_](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 $h(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[Rc](this.statement.columns,!1),this[Rc](this.statement.joins,!1),this[Rc](this.statement.where,!1),this[vb](this.statement.group,!1),this[Rc](this.statement.order,!0)}[Rc](t,r){if(!t)return;let n=new $h(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[Wh](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=Yh(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[n_](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[n_](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[Wh](t)}[Wh](t){let r=this[n_](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=Qh});var Fb=g(($oe,Gb)=>{"use strict";var zh=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=zh});var kb=g((Koe,qb)=>{"use strict";var Jh=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};qb.exports=Jh});var Kb={};$e(Kb,{HAS_EXPIRATION:()=>nm,LAST_TIMESTAMP_PLACEHOLDER:()=>bc,LOCAL_TIMESTAMP:()=>XV,METADATA:()=>Ac,NO_TIMESTAMP:()=>jh,PENDING_LOCAL_TIME:()=>sm,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>rm,RecordEncoder:()=>tm,TIMESTAMP_ASSIGN_LAST:()=>ZV,TIMESTAMP_ASSIGN_NEW:()=>$b,TIMESTAMP_ASSIGN_PREVIOUS:()=>Yb,TIMESTAMP_PLACEHOLDER:()=>s_,TIMESTAMP_RECORD_PREVIOUS:()=>Zh,getUpdateRecord:()=>im,handleLocalTimeForGets:()=>c_});function t$(){return Oc[0]=Oc[0]^64,jV.getFloat64(0)}function c_(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?.[Ac];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?.[Ac]>=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[Ac];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Hi.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Hi.length;u++){let _=Hi[u].deref();(!_||_.isDone||_.isCommitted)&&Hi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function im(e,t,r){return function(n,s,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?Fo=i?.localTime?Zh|Yb:jh:Fo=u?i?.localTime?Zh|16384:$b|16384:jh,l>0&&(c|=nm),o_=c,em=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Fo>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&&(i_=e.encoder.encode(E)),f&&i?.localTime){let b=i?.localTime,R=r.get(b);if(R){let L=Mt(R).previousLocalTime;return r.put(b,a_(o,t,n,L,T,d,i_),{ifVersion:p}),S}}r.put(bc,a_(o,t,n,i?.localTime?1:0,T,d,i_),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var Vb,Xh,s_,bc,rm,XV,Ac,Oc,jV,jh,$b,ZV,Yb,Zh,nm,sm,e$,i_,Fo,o_,em,tm,Hi,yc=Re(()=>{Vb=require("msgpackr");xi();Xh=x(K()),s_=new Uint8Array([1,1,1,1,4,64,0,0]),bc=new Uint8Array([1,1,1,1,1,0,0,0]),rm=new Uint8Array([1,1,1,1,3,64,0,0]),XV=Symbol("local-timestamp"),Ac=Symbol("metadata"),Oc=new Uint8Array(8),jV=new DataView(Oc.buffer,0,8),jh=0,$b=0,ZV=1,Yb=3,Zh=4,nm=16,sm=1,Fo=0,o_=-1,em=0,tm=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(Fo||o_>=0){let i=0,o=Fo;o&&(i+=8,Fo=0);let c=o_,u=em;c>=0&&(i+=2,o_=-1,u&&(i+=8,em=0));let _=e$=r.call(this,n,s|2048|i);i_=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(s_[4]=o,s_[5]=o>>8,_.set(s_,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(Oc,0,c),c+=8;else for(let d=0;d<8;d++)Oc[d]=t[c++];u=t$(),i=t[c]}let _;i<32&&(o=i,c+=2,o&nm&&(_=(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,[Ac]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(t$,"getTimestamp");a(c_,"handleLocalTimeForGets");Hi=[];setInterval(()=>{for(let e=0;e<Hi.length;e++){let t=Hi[e].deref();!t||t.isDone||t.isCommitted?Hi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Xh.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Xh.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(im,"getUpdateRecord")});var u_=g((Xoe,Qb)=>{"use strict";var Wb=re(),r$=U(),{RecordEncoder:n$}=(yc(),se(Kb)),Joe=require("fs");Wb.initSync();var s$=Wb.get(r$.CONFIG_PARAMS.STORAGE_CACHING)!==!1,om=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=s$&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:n$})}};Qb.exports=om});var __=g((Zoe,zb)=>{"use strict";var Ur=re(),nn=U();Ur.initSync();var l_=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=Ur.get(nn.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Ur.get(nn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Ur.get(nn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Ur.get(nn.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Ur.get(nn.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Ur.get(nn.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Ur.get(nn.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Ur.get(nn.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Ur.get(nn.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Ur.get(nn.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Ur.get(nn.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Ur.get(nn.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};zb.exports=l_;l_.MAX_DBS=1e4});var Ye=g((tae,iy)=>{"use strict";var cm=require("lmdb"),In=require("fs-extra"),Pr=require("path"),d_=Lr(),jb=K(),ur=Ir().LMDB_ERRORS_ENUM,f_=kb(),um=u_(),Zb=__(),Zs=ft(),Jb=U(),{table:i$,resetDatabases:o$}=(Ae(),se(Fe)),Xb=re(),wn=Zs.INTERNAL_DBIS_NAME,ey=Zs.DBI_DEFINITION_NAME,a$="data.mdb",c$="lock.mdb",Nc=".mdb",u$="-lock",am=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=sn(t,r),this.key_type=this.dbi[Zs.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Zs.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new cm.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function E_(e,t){if(e===void 0)throw new Error(ur.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(ur.ENV_NAME_REQUIRED)}a(E_,"pathEnvNameValidation");async function lm(e,t,r=!0){try{await In.access(e)}catch(n){throw n.code==="ENOENT"?new Error(ur.INVALID_BASE_PATH):n}try{let n=Pr.join(e,t+Nc);return await In.access(n,In.constants.R_OK|In.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await In.access(Pr.join(e,t,a$),In.constants.R_OK|In.constants.F_OK),Pr.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(ur.INVALID_ENVIRONMENT)}else throw new Error(ur.INVALID_ENVIRONMENT);throw n}}a(lm,"validateEnvironmentPath");function h_(e,t){if(d_.validateEnv(e),t===void 0)throw new Error(ur.DBI_NAME_REQUIRED)}a(h_,"validateEnvDBIName");async function l$(e,t,r=!1,n=!1){E_(e,t);let s=Pr.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 lm(e,t,n),ty(e,t,r)}catch(o){if(o.message===ur.INVALID_ENVIRONMENT){let c=Pr.join(e,t);await In.mkdirp(n?c:e);let u=new Zb(n?c:c+Nc,!1),_=cm.open(u);_.dbis=Object.create(null);let l=new um(!1);_.openDB(wn,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=_m(e,t,r);return _[Zs.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(l$,"createEnvironment");async function _$(e,t,r,n=!0){E_(e,t),t=t.toString();let s=Pr.join(e,t);return i$({table:t,database:Pr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(_$,"copyEnvironment");async function ty(e,t,r=!1){E_(e,t),t=t.toString();let n=_m(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 lm(e,t),i=Pr.join(e,t+Nc),o=s!=i,c=new Zb(s,o),u=cm.open(c);u.dbis=Object.create(null);let _=ny(u);for(let l=0;l<_.length;l++)sn(u,_[l]);return u[Zs.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=u,u}a(ty,"openEnvironment");async function d$(e,t,r=!1){E_(e,t),t=t.toString();let n=Pr.join(e,t+Nc),s=await lm(e,t);if(global.lmdb_map!==void 0){let i=_m(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await ry(o),delete global.lmdb_map[i]}}await In.remove(s),await In.remove(s===n?s+u$:Pr.join(Pr.dirname(s),c$))}a(d$,"deleteEnvironment");async function ry(e){d_.validateEnv(e);let t=e[Zs.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(ry,"closeEnvironment");function _m(e,t,r=!1){let s=`${Pr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(_m,"getCachedEnvironmentName");function f$(e){d_.validateEnv(e);let t=Object.create(null),r=sn(e,wn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==wn)try{t[n]=Object.assign(new f_,s)}catch{jb.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(f$,"listDBIDefinitions");function ny(e){d_.validateEnv(e);let t=[],r=sn(e,wn);for(let{key:n}of r.getRange({start:!1}))n!==wn&&t.push(n);return t}a(ny,"listDBIs");function E$(e,t){let n=sn(e,wn).getEntry(t),s=new f_;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(E$,"getDBIDefinition");function sy(e,t,r,n=!r){if(h_(e,t),t=t.toString(),t===wn)throw new Error(ur.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return sn(e,t)}catch(s){if(s.message===ur.DBI_DOES_NOT_EXIST){let i=new um(r,n===!0),o=e.openDB(t,i),c=new f_(r===!0,n);return o[ey]=c,sn(e,wn).putSync(t,c),e.dbis[t]=o,o}throw s}}a(sy,"createDBI");function sn(e,t){if(h_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==wn?r=E$(e,t):r=new f_,r===void 0)throw new Error(ur.DBI_DOES_NOT_EXIST);let n;try{let s=new um(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(ur.DBI_DOES_NOT_EXIST):s}return n[ey]=r,e.dbis[t]=n,n}a(sn,"openDBI");function h$(e,t){h_(e,t),t=t.toString();let r=sn(e,t),n=r.getStats();return r[Zs.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(h$,"statDBI");async function m$(e,t){try{let r=Pr.join(e,t+Nc);return(await In.stat(r)).size}catch{throw new Error(ur.INVALID_ENVIRONMENT)}}a(m$,"environmentDataSize");function p$(e,t){if(h_(e,t),t=t.toString(),t===wn)throw new Error(ur.CANNOT_DROP_INTERNAL_DBIS_NAME);sn(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],sn(e,wn).removeSync(t)}a(p$,"dropDBI");function S$(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{sn(e,i)}catch(o){if(o.message===ur.DBI_DOES_NOT_EXIST)sy(e,i,i!==t,i===t),n=!0;else throw o}}n&&o$()}a(S$,"initializeDBIs");iy.exports={openDBI:sn,openEnvironment:ty,createEnvironment:l$,listDBIs:ny,listDBIDefinitions:f$,createDBI:sy,dropDBI:p$,statDBI:h$,deleteEnvironment:d$,initializeDBIs:S$,TransactionCursor:am,environmentDataSize:m$,copyEnvironment:_$,closeEnvironment:ry}});var ay=g((nae,oy)=>{"use strict";var dm=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=dm});var uy=g((iae,cy)=>{"use strict";var fm=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=fm});var _y=g((aae,ly)=>{"use strict";var Em=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=Em});var qo=g((dae,Ey)=>{"use strict";var T$=Ye(),g$=ay(),R$=uy(),A$=_y(),Qn=Lr(),Ic=Ir().LMDB_ERRORS_ENUM,O$=ft(),Ts=U(),b$=Q(),y$=require("uuid"),uae=require("lmdb"),{handleHDBError:N$,hdb_errors:I$}=ne(),{OVERFLOW_MARKER:lae,MAX_SEARCH_KEY_LENGTH:_ae}=O$,dy=re();dy.initSync();var m_=dy.get(Ts.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),hm=Ts.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Gi=Ts.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function w$(e,t,r,n,s=Qn.getNextMonotonicTime()){Tm(e,t,r,n),mm(e,t,r);let i=new g$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u];fy(_,!0,s);let l=C$(e,t,r,_),d=_[t];o.push(l),c.push(d)}return pm(o,c,n,i,s)}a(w$,"insertRecords");function C$(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][Ts.FUNC_VAL],n[o]=c)}let u=Qn.getIndexedValues(c),_=e.dbis[o];if(u){m_&&_.prefetch(u.map(l=>({key:l,value:s})),p_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],s)}}m_&&e.dbis[t].prefetch([s],p_),e.dbis[t].put(s,n,n[Gi])})}a(C$,"insertRecord");function D$(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(D$,"removeSkippedRecords");function fy(e,t,r){let n=r>0;(n||!Number.isInteger(e[Gi]))&&(e[Gi]=r||(r=Qn.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[hm]))&&(e[hm]=r||Qn.getNextMonotonicTime()):delete e[hm]}a(fy,"setTimestamps");function mm(e,t,r){r.indexOf(Ts.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Ts.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Ts.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Ts.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),T$.initializeDBIs(e,t,r)}a(mm,"initializeTransaction");async function L$(e,t,r,n,s=Qn.getNextMonotonicTime()){Tm(e,t,r,n),mm(e,t,r);let i=new R$,o=[],c=[],u=[];for(let _=0;_<n.length;_++){let l=n[_],d=l[t],f;try{f=Sm(e,t,l,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return pm(c,u,n,i,s,o)}a(L$,"updateRecords");async function M$(e,t,r,n,s=Qn.getNextMonotonicTime()){try{Tm(e,t,r,n)}catch(u){throw N$(u,u.message,I$.HTTP_STATUS_CODES.BAD_REQUEST)}mm(e,t,r);let i=new A$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u],l;b$.isEmpty(_[t])?(l=y$.v4(),_[t]=l):l=_[t];let d=Sm(e,t,_,l,i,!1,s);o.push(d),c.push(l)}return pm(o,c,n,i,s)}a(M$,"upsertRecords");async function pm(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||Qn.getNextMonotonicTime(),D$(r,i),n}a(pm,"finalizeWrite");function Sm(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[Gi])&&_[Gi]>r[Gi])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][Ts.FUNC_VAL],r[h]=p)}if(p===T)continue;let b=Qn.getIndexedValues(T);if(b){m_&&S.prefetch(b.map(R=>({key:R,value:n})),p_);for(let R=0,L=b.length;R<L;R++)S.remove(b[R],n)}if(b=Qn.getIndexedValues(p),b){m_&&S.prefetch(b.map(R=>({key:R,value:n})),p_);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[Gi])},"do_put");return u?d=c.ifVersion(n,u.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:Sm(e,t,r,n,s,i,o))}a(Sm,"updateUpsertRecord");function U$(e,t,r){if(Qn.validateEnv(e),t===void 0)throw new Error(Ic.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ic.WRITE_ATTRIBUTES_REQUIRED):new Error(Ic.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(U$,"validateBasic");function Tm(e,t,r,n){if(U$(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Ic.RECORDS_REQUIRED):new Error(Ic.RECORDS_MUST_BE_ARRAY)}a(Tm,"validateWrite");function p_(){}a(p_,"noop");Ey.exports={insertRecords:w$,updateRecords:L$,upsertRecords:M$}});var Fi=g((Eae,P$)=>{P$.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 Jn=g((hae,py)=>{"use strict";var my=Q(),hy=U(),ko=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,zn=require("joi"),ei={schema_format:{pattern:ko,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},v$=zn.alternatives(zn.string().min(1).max(ei.schema_length.maximum).pattern(ko).messages({"string.pattern.base":"{:#label} "+ei.schema_format.message}),zn.number(),zn.array()).required(),B$=zn.alternatives(zn.string().min(1).max(ei.schema_length.maximum).pattern(ko).messages({"string.pattern.base":"{:#label} "+ei.schema_format.message}),zn.number()),H$=zn.alternatives(zn.string().min(1).max(ei.schema_length.maximum).pattern(ko).messages({"string.pattern.base":"{:#label} "+ei.schema_format.message}),zn.number()).required();function x$(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>ei.schema_length.maximum?`'${e}' maximum of 250 characters`:ko.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(x$,"checkValidTable");function G$(e,t){return my.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(G$,"validateSchemaExists");function F$(e,t){let r=t.state.ancestors[0].schema;return my.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(F$,"validateTableExists");function q$(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(q$,"validateSchemaName");py.exports={common_validators:ei,schema_regex:ko,hdb_schema_table:v$,validateSchemaExists:G$,validateTableExists:F$,validateSchemaName:q$,checkValidTable:x$,hdb_database:B$,hdb_table:H$}});var S_=g((pae,Sy)=>{var{common_validators:Xn}=Jn(),Cc=Ze(),wc="is required",Et={database:{presence:!1,format:Xn.schema_format,length:Xn.schema_length},schema:{presence:!1,format:Xn.schema_format,length:Xn.schema_length},table:{presence:!0,format:Xn.schema_format,length:Xn.schema_length},attribute:{presence:!0,format:Xn.schema_format,length:Xn.schema_length},hash_attribute:{presence:!0,format:Xn.schema_format,length:Xn.schema_length}};function Dc(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(Dc,"makeAttributesStrings");function k$(e){return e=Dc(e),Et.table.presence=!1,Et.attribute.presence=!1,Et.hash_attribute.presence=!1,Cc.validateObject(e,Et)}a(k$,"schema_object");function V$(e){return e=Dc(e),Et.table.presence={message:wc},Et.attribute.presence=!1,Et.hash_attribute.presence=!1,Cc.validateObject(e,Et)}a(V$,"table_object");function $$(e){return e=Dc(e),Et.table.presence={message:wc},Et.attribute.presence=!1,Cc.validateObject(e,Et)}a($$,"create_table_object");function Y$(e){return e=Dc(e),Et.table.presence={message:wc},Et.attribute.presence={message:wc},Et.hash_attribute.presence=!1,Cc.validateObject(e,Et)}a(Y$,"attribute_object");function K$(e){return e=Dc(e),Et.table.presence={message:wc},Et.attribute.presence=!1,Et.hash_attribute.presence=!1,Cc.validateObject(e,Et)}a(K$,"describe_table");function W$(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(W$,"validateTableResidence");Sy.exports={schema_object:k$,create_table_object:$$,table_object:V$,attribute_object:Y$,describe_table:K$,validateTableResidence:W$}});var gy=g((Tae,Ty)=>{"use strict";var Q$=require("uuid"),gm=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||Q$.v4(),this.schema_table=`${this.schema}.${this.table}`}};Ty.exports=gm});var T_=g((Rae,Ry)=>{"use strict";var z$=gy(),Rm=class extends z${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=Rm});var Oy=g((Oae,Ay)=>{"use strict";Ay.exports=X$;var J$="inserted";function X$(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===J$?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(X$,"returnObject")});var g_=g((yae,wy)=>{"use strict";var j$=U(),Am=Ye(),Z$=qo(),{getSystemSchemaPath:e1,getSchemaPath:t1}=Qe(),r1=Fi(),n1=S_(),s1=T_(),i1=Oy(),{handleHDBError:by,hdb_errors:Ny}=ne(),yy=Q(),{HTTP_STATUS_CODES:o1}=Ny,Om=r1.hdb_attribute,Iy=[];for(let e=0;e<Om.attributes.length;e++)Iy.push(Om.attributes[e].attribute);var a1="inserted";wy.exports=c1;async function c1(e){let t=n1.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,o1.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 s1(e.schema,e.table,e.attribute,e.id);try{let i=await Am.openEnvironment(t1(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}`);Am.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Am.openEnvironment(e1(),j$.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Z$.insertRecords(o,Om.hash_attribute,Iy,[s]);return i1(a1,c,{records:[s]},u)}catch(i){throw i}}a(c1,"lmdbCreateAttribute")});var ym=g((Iae,Dy)=>{var{hdb_table:u1,hdb_database:Cy}=Jn(),l1=Ze(),bm=require("joi"),_1={undefined:"undefined",null:"null"},d1=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||_1[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"),f1=bm.object({database:Cy,schema:Cy,table:u1,records:bm.array().items(bm.object().custom(d1)).required()});Dy.exports=function(e){return l1.validateBySchema(e,f1)}});var Lc=g((Dae,My)=>{"use strict";var gs=Q(),Ly=K(),Cae=ym(),{getDatabases:E1}=(Ae(),se(Fe)),{ClientError:qi}=ne();My.exports=h1;function h1(e){if(gs.isEmpty(e))throw new qi("invalid update parameters defined.");if(gs.isEmptyOrZeroLength(e.schema))throw new qi("invalid schema specified.");if(gs.isEmptyOrZeroLength(e.table))throw new qi("invalid table specified.");if(!Array.isArray(e.records))throw new qi("records must be an array");let t=E1()[e.schema]?.[e.table];if(gs.isEmpty(t))throw new qi(`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&&gs.isEmptyOrZeroLength(o[r]))throw Ly.error("a valid hash attribute must be provided with update record:",o),new qi("a valid hash attribute must be provided with update record, check log for more info");if(!gs.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 qi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!gs.isEmpty(o[r])&&o[r]!==""&&n.has(gs.autoCast(o[r]))&&(o.skip=!0),n.add(gs.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(h1,"insertUpdateValidate")});var Mc=g((Mae,Uy)=>{"use strict";var m1=U().OPERATIONS_ENUM,Nm=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=m1.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Uy.exports=Nm});var Uc=g((vae,vy)=>{"use strict";var Pae=Mc(),R_=U(),Im=Q(),Py=K(),p1=require("uuid"),{handleHDBError:A_,hdb_errors:S1}=ne(),{HDB_ERROR_MSGS:O_,HTTP_STATUS_CODES:b_}=S1;vy.exports=T1;function T1(e,t,r){for(let s=0;s<t.length;s++)g1(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];R1(i,r,e.operation)}}a(T1,"processRows");function g1(e){if(Buffer.byteLength(String(e))>R_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw A_(new Error,O_.ATTR_NAME_LENGTH_ERR(e),b_.BAD_REQUEST,void 0,void 0,!0);if(Im.isEmptyOrZeroLength(e)||Im.isEmpty(e.trim()))throw A_(new Error,O_.ATTR_NAME_NULLISH_ERR,b_.BAD_REQUEST,void 0,void 0,!0)}a(g1,"validateAttribute");function R1(e,t,r){if(!e.hasOwnProperty(t)||Im.isEmptyOrZeroLength(e[t])){if(r===R_.OPERATIONS_ENUM.INSERT||r===R_.OPERATIONS_ENUM.UPSERT){e[t]=p1.v4();return}throw Py.error("Update transaction aborted due to record with no hash value:",e),A_(new Error,O_.RECORD_MISSING_HASH_ERR,b_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>R_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Py.error(e),A_(new Error,O_.HASH_VAL_LENGTH_ERR,b_.BAD_REQUEST,void 0,void 0,!0)}a(R1,"validateHash")});var Hy=g((Hae,By)=>{"use strict";var wm=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};By.exports=wm});var Fy=g((Gae,Gy)=>{"use strict";var Cm=Ye(),A1=K(),xy=Ir().LMDB_ERRORS_ENUM;Gy.exports=O1;async function O1(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 Cm.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 Cm.closeEnvironment(global.lmdb_map[n]),await Cm.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){A1.error(t)}}a(O1,"cleanLMDBMap")});var Rs=g((qae,$y)=>{"use strict";var Pc=require("crypto"),b1=re(),{CONFIG_PARAMS:y1}=U(),ky="aes-256-cbc",N1=32,I1=16,Dm=64,Vy=32,w1=Dm+Vy,qy=new Map;$y.exports={encrypt:C1,decrypt:D1,createNatsTableStreamName:L1};function C1(e){let t=Pc.randomBytes(N1),r=Pc.randomBytes(I1),n=Pc.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(C1,"encrypt");function D1(e){let t=e.substr(0,Dm),r=e.substr(Dm,Vy),n=e.substr(w1,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Pc.createDecipheriv(ky,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(D1,"decrypt");function L1(e,t){let r=b1.get(y1.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=qy.get(r);return n||(n=Pc.createHash("md5").update(r).digest("hex"),qy.set(r,n)),n}a(L1,"createNatsTableStreamName")});var ki=g(($ae,Ky)=>{"use strict";var Vae=vr(),y_=K(),Yy=S_(),M1=Rs(),N_=Q(),{handleHDBError:I_,hdb_errors:U1}=ne(),{HDB_ERROR_MSGS:w_,HTTP_STATUS_CODES:Lm}=U1,P1=re();P1.initSync();var{getDatabases:Mm}=(Ae(),se(Fe));Ky.exports={describeAll:v1,describeTable:C_,describeSchema:B1};async function v1(e){try{let t=N_.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=Mm(),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 C_({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 C_({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){y_.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 y_.error("Got an error in describeAll"),y_.error(t),I_(new Error,w_.DESCRIBE_ALL_ERR)}}a(v1,"describeAll");async function C_(e,t){N_.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=Mm()[r];if(!c)throw I_(new Error,w_.SCHEMA_NOT_FOUND(e.schema),Lm.NOT_FOUND);let u=c[n];if(!u)throw I_(new Error,w_.TABLE_NOT_FOUND(e.schema,e.table),Lm.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=M1.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){y_.warn(`unable to stat table dbi due to ${f}`)}return d}a(C_,"descTable");async function B1(e){N_.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=Mm()[n];if(!i)throw I_(new Error,w_.SCHEMA_NOT_FOUND(e.schema),Lm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),N_.isEmpty(u)||u.describe){let _=await C_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(B1,"describeSchema")});var As=g((Qae,Xy)=>{var H1=Fi(),{callbackify:Qy,promisify:x1}=require("util"),{getDatabases:zy}=(Ae(),se(Fe));Xy.exports={setSchemaDataToGlobal:Wy,getTableSchema:G1,getSystemSchema:F1,setSchemaDataToGlobalAsync:x1(Wy)};var Jy=ki(),Kae=Qy(Jy.describeAll),Wae=Qy(Jy.describeTable);function Wy(e){global.hdb_schema=zy(),e&&e()}a(Wy,"setSchemaDataToGlobal");function G1(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(G1,"getTableSchema");function F1(){return H1}a(F1,"getSystemSchema")});var on=g((Jae,tN)=>{"use strict";var L_=ym(),kt=Q(),q1=require("util"),M_=Cn(),k1=As(),jy=K(),{handleHDBError:Vi,hdb_errors:V1}=ne(),{HTTP_STATUS_CODES:$i}=V1,$1=q1.promisify(k1.getTableSchema),Y1="updated",Zy="inserted",eN="upserted";tN.exports={insert:W1,update:Q1,upsert:z1,validation:K1,flush:J1};async function K1(e){if(kt.isEmpty(e))throw new Error("invalid update parameters defined.");if(kt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(kt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await $1(e.schema,e.table),r=L_(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&&kt.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(!kt.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`);!kt.isEmpty(c[n])&&c[n]!==""&&s.has(kt.autoCast(c[n]))&&(c.skip=!0),s.add(kt.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(K1,"validation");async function W1(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=L_(e);if(t)throw Vi(new Error,t.message,$i.BAD_REQUEST);kt.transformReq(e);let r=kt.checkSchemaTableExist(e.schema,e.table);if(r)throw Vi(new Error,r,$i.BAD_REQUEST);let n=await M_.createRecords(e);return D_(Zy,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(W1,"insertData");async function Q1(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=L_(e);if(t)throw Vi(new Error,t.message,$i.BAD_REQUEST);kt.transformReq(e);let r=kt.checkSchemaTableExist(e.schema,e.table);if(r)throw Vi(new Error,r,$i.BAD_REQUEST);let n=await M_.updateRecords(e);return kt.isEmpty(n.existing_rows)?D_(Y1,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):D_(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(Q1,"updateData");async function z1(e){if(e.operation!=="upsert")throw Vi(new Error,"invalid operation, must be upsert",$i.INTERNAL_SERVER_ERROR);let t=L_(e);if(t)throw Vi(new Error,t.message,$i.BAD_REQUEST);kt.transformReq(e);let r=kt.checkSchemaTableExist(e.schema,e.table);if(r)throw Vi(new Error,r,$i.BAD_REQUEST);let n=await M_.upsertRecords(e);return D_(eN,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(z1,"upsertData");function D_(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(D_,"returnObject");function J1(e){return kt.transformReq(e),M_.flush(e.schema,e.table)}a(J1,"flush")});var Pm=g((jae,sN)=>{var X1=Ze(),Um=require("joi"),{hdb_table:j1,hdb_database:rN}=Jn(),nN={schema:rN,database:rN,table:j1},Z1={date:Um.date().iso().required()},eY={timestamp:Um.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};sN.exports=function(e,t){let r=t==="timestamp"?{...nN,...eY}:{...nN,...Z1},n=Um.object(r);return X1.validateBySchema(e,n)}});var aN=g((Zae,oN)=>{var tY=Ze(),vm=require("joi"),{hdb_table:rY,hdb_database:iN}=Jn(),nY=vm.object({schema:iN,database:iN,table:rY,hash_values:vm.array().required(),ids:vm.array()});oN.exports=function(e){return tY.validateBySchema(e,nY)}});var uN=g((ece,cN)=>{"use strict";var Bm=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}},Hm=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}},xm=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};cN.exports={InsertObject:Bm,NoSQLSeachObject:Hm,DeleteResponseObject:xm}});var Wi=g((rce,EN)=>{"use strict";var _N=Pm(),sY=aN(),Yi=Q(),lN=require("moment"),dN=K(),{promisify:iY,callbackify:oY}=require("util"),Ki=U(),aY=As(),Gm=iY(aY.getTableSchema),Fm=Cn(),{DeleteResponseObject:cY}=uN(),{handleHDBError:ti,hdb_errors:uY}=ne(),{HDB_ERROR_MSGS:U_,HTTP_STATUS_CODES:ri}=uY,lY="records successfully deleted",_Y=oY(fN);EN.exports={delete:_Y,deleteRecord:fN,deleteFilesBefore:dY,deleteAuditLogsBefore:fY};async function dY(e){let t=_N(e,"date");if(t)throw ti(t,t.message,ri.BAD_REQUEST,void 0,void 0,!0);if(Yi.transformReq(e),!lN(e.date,lN.ISO_8601).isValid())throw ti(new Error,U_.INVALID_DATE,ri.BAD_REQUEST,Ki.LOG_LEVELS.ERROR,U_.INVALID_DATE,!0);let n=Yi.checkSchemaTableExist(e.schema,e.table);if(n)throw ti(new Error,n,ri.NOT_FOUND,Ki.LOG_LEVELS.ERROR,n,!0);let s=await Fm.deleteRecordsBefore(e);if(await Gm(e.schema,e.table),dN.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(dY,"deleteFilesBefore");async function fY(e){let t=_N(e,"timestamp");if(t)throw ti(t,t.message,ri.BAD_REQUEST,void 0,void 0,!0);if(Yi.transformReq(e),isNaN(e.timestamp))throw ti(new Error,U_.INVALID_VALUE("Timestamp"),ri.BAD_REQUEST,Ki.LOG_LEVELS.ERROR,U_.INVALID_VALUE("Timestamp"),!0);let r=Yi.checkSchemaTableExist(e.schema,e.table);if(r)throw ti(new Error,r,ri.NOT_FOUND,Ki.LOG_LEVELS.ERROR,r,!0);let n=await Fm.deleteAuditLogsBefore(e);return await Gm(e.schema,e.table),dN.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(fY,"deleteAuditLogsBefore");async function fN(e){e.ids&&(e.hash_values=e.ids);let t=sY(e);if(t)throw ti(t,t.message,ri.BAD_REQUEST,void 0,void 0,!0);Yi.transformReq(e);let r=Yi.checkSchemaTableExist(e.schema,e.table);if(r)throw ti(new Error,r,ri.NOT_FOUND,Ki.LOG_LEVELS.ERROR,r,!0);try{await Gm(e.schema,e.table);let n=await Fm.deleteRecords(e);return Yi.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${lY}`),n}catch(n){if(n.message===Ki.SEARCH_NOT_FOUND_MESSAGE){let s=new cY;return s.message=Ki.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(fN,"deleteRecord")});var P_=g((sce,pN)=>{var EY=require("crypto"),hN=9;function hY(e){let t=pY(hN),r=mN(e+t);return t+r}a(hY,"createHash");function mY(e,t){let r=e?.substr(0,hN),n=r+mN(t+r);return e===n}a(mY,"validateHash");function pY(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(pY,"generateSalt");function mN(e){return EY.createHash("md5").update(e).digest("hex")}a(mN,"md5");pN.exports={hash:hY,validate:mY}});var TN=g((oce,SN)=>{var qm=Ze(),zt={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function SY(e){return zt.password.presence=!0,zt.username.presence=!0,zt.role.presence=!0,zt.active.presence=!0,qm.validateObject(e,zt)}a(SY,"addUserValidation");function TY(e){return zt.password.presence=!1,zt.username.presence=!0,zt.role.presence=!1,zt.active.presence=!1,qm.validateObject(e,zt)}a(TY,"alterUserValidation");function gY(e){return zt.password.presence=!1,zt.username.presence=!0,zt.role.presence=!1,zt.active.presence=!1,qm.validateObject(e,zt)}a(gY,"dropUserValidation");SN.exports={addUserValidation:SY,alterUserValidation:TY,dropUserValidation:gY}});var nt=g((uce,RN)=>{"use strict";var{platform:cce}=require("os"),RY="nats-server.zip",km="nats-server",AY=process.platform==="win32"?`${km}.exe`:km,OY=/^[^\s.,*>]+$/,gN="__request__",bY=a(e=>`${e}.${gN}`,"REQUEST_SUBJECT"),yY={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},NY={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},IY={HUB:"hub.pid",LEAF:"leaf.pid"},wY={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},CY={SUCCESS:"success",ERROR:"error"},DY={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},LY={TXN:"txn",MSGID:"msgid"},Vo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},MY={[Vo.ERR]:1,[Vo.WRN]:2,[Vo.INF]:3,[Vo.DBG]:4,[Vo.TRC]:5},UY={debug:"-D",trace:"-DVV"};RN.exports={NATS_SERVER_ZIP:RY,NATS_SERVER_NAME:km,NATS_BINARY_NAME:AY,PID_FILES:IY,NATS_CONFIG_FILES:NY,SERVER_SUFFIX:wY,NATS_TERM_CONSTRAINTS_RX:OY,REQUEST_SUFFIX:gN,UPDATE_REMOTE_RESPONSE_STATUSES:CY,CLUSTER_STATUS_STATUSES:DY,REQUEST_SUBJECT:bY,SUBJECT_PREFIXES:LY,MSG_HEADERS:yY,LOG_LEVELS:Vo,LOG_LEVEL_FLAGS:UY,LOG_LEVEL_HIERARCHY:MY}});var ON=g((_ce,AN)=>{"use strict";var v_=U(),B_=class{static{a(this,"BaseLicense")}constructor(t=0,r=v_.RAM_ALLOCATION_ENUM.DEFAULT,n=v_.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},Vm=class extends B_{static{a(this,"ExtendedLicense")}constructor(t=0,r=v_.RAM_ALLOCATION_ENUM.DEFAULT,n=v_.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};AN.exports={BaseLicense:B_,ExtendedLicense:Vm}});var Qi=g((fce,CN)=>{"use strict";var Yo=require("fs-extra"),yN=P_(),NN=require("crypto"),PY=require("moment"),vY=require("uuid").v4,Jt=K(),Ym=require("path"),BY=Q(),ni=U(),{totalmem:bN}=require("os"),HY=ON().ExtendedLicense,$o="invalid license key format",xY="061183",GY="mofi25",FY="aes-256-cbc",qY=16,kY=32,IN=re();IN.initSync();var $m;CN.exports={validateLicense:wN,generateFingerPrint:$Y,licenseSearch:Qm,getLicense:WY,checkMemoryLimit:QY};function Km(){return Ym.join(IN.getHdbBasePath(),ni.LICENSE_KEY_DIR_NAME,ni.LICENSE_FILE_NAME)}a(Km,"getLicenseDirPath");function VY(){let e=Km();return Ym.join(e,ni.LICENSE_FILE_NAME)}a(VY,"getLicenseFilePath");function Wm(){let e=Km();return Ym.join(e,ni.REG_KEY_FILE_NAME)}a(Wm,"getFingerPrintFilePath");async function $Y(){let e=Wm();try{return await Yo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await YY();throw Jt.error(`Error writing fingerprint file to ${e}`),Jt.error(t),new Error("There was an error generating the fingerprint")}}a($Y,"generateFingerPrint");async function YY(){let e=vY(),t=yN.hash(e),r=Wm();try{await Yo.mkdirp(Km()),await Yo.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Jt.error(`Error writing fingerprint file to ${r}`),Jt.error(n),new Error("There was an error generating the fingerprint")}return t}a(YY,"writeFingerprint");function wN(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:ni.RAM_ALLOCATION_ENUM.DEFAULT,version:ni.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Jt.error("empty license key passed to validate."),r;let n=Wm(),s=!1;try{s=Yo.statSync(n)}catch(i){Jt.error(i)}if(s){let i;try{i=Yo.readFileSync(n,"utf8")}catch{Jt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(GY),c=o[1];c=Buffer.concat([Buffer.from(c)],qY);let u=Buffer.concat([Buffer.from(i)],kY),_=NN.createDecipheriv(FY,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=KY(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error($o),Jt.error($o),new Error($o)}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($o),Jt.error($o),new Error($o)}else r.exp_date=l;r.exp_date<PY().valueOf()&&(r.valid_date=!1),yN.validate(o[1],`${xY}${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||Jt.error("Invalid licence"),r}a(wN,"validateLicense");function KY(e,t){try{let r=NN.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Jt.warn("Check old license failed")}}a(KY,"checkOldLicense");function Qm(){let e=new HY,t=[];try{t=Yo.readFileSync(VY(),"utf-8").split(ni.NEW_LINE)}catch(r){r.code==="ENOENT"?Jt.info("no license file found"):Jt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(BY.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){Jt.error("There was an error parsing the license string."),Jt.error(s),e.ram_allocation=ni.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return $m=e,e}a(Qm,"licenseSearch");async function WY(){return $m||await Qm(),$m}a(WY,"getLicense");function QY(){let e=Qm().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(QY,"checkMemoryLimit")});var Hr=g((Sce,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:nK,alterUser:sK,dropUser:oK,getSuperUser:lK,userInfo:aK,listUsers:x_,listUsersExternal:cK,setUsersToGlobal:Wo,findAndValidateUser:VN,getClusterUser:_K,USERNAME_REQUIRED:UN,ALTERUSER_NOTHING_TO_UPDATE:PN,EMPTY_PASSWORD:vN,EMPTY_ROLE:BN,ACTIVE_BOOLEAN:HN};var xN=on(),zY=Wi(),Xm=P_(),GN=TN(),FN=vr(),jm=Os(),Br=Q(),qN=require("validate.js"),Te=K(),{promisify:JY}=require("util"),Zm=Rs(),DN=U(),LN=nt(),XY=Dr(),hce=re(),mce=Qi(),jY=Fi(),{table:pce}=(Ae(),se(Fe)),{handleHDBError:jn,hdb_errors:ZY}=ne(),{HTTP_STATUS_CODES:Zn,AUTHENTICATION_ERROR_MSGS:zm,HDB_ERROR_MSGS:Ko}=ZY,{UserEventMsg:ep}=Dn(),Jm=require("lodash"),{server:tp}=(or(),se(Ui)),eK=K();tp.getUser=(e,t)=>VN(e,t,t!=null);var kN={username:!0,active:!0,role:!0,password:!0},MN=new Map,H_=FN.searchByValue,tK=FN.searchByHash,rK=JY(zY.delete);async function nK(e){let t=qN.cleanAttributes(e,kN),r=GN.addUserValidation(t);if(r)throw jn(new Error,r.message,Zn.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 H_(n),s=s&&Array.from(s)}catch(u){throw Te.error("There was an error searching for a role in add user"),Te.error(u),u}if(!s||s.length<1)throw jn(new Error,Ko.ROLE_NAME_NOT_FOUND(t.role),Zn.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw jn(new Error,Ko.DUP_ROLES_FOUND(t.role),Zn.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=Zm.encrypt(t.password)),t.password=Xm.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 Te.error("There was an error searching for a user."),Te.error(u),u}Te.debug(o);try{await Wo()}catch(u){throw Te.error("Got an error setting users to global"),Te.error(u),u}if(o.skipped_hashes.length===1)throw jn(new Error,Ko.USER_ALREADY_EXISTS(t.username),Zn.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],jm.signalUserChange(new ep(process.pid)),`${c.username} successfully added`}a(nK,"addUser");async function sK(e){let t=qN.cleanAttributes(e,kN);if(Br.isEmptyOrZeroLength(t.username))throw new Error(UN);if(Br.isEmptyOrZeroLength(t.password)&&Br.isEmptyOrZeroLength(t.role)&&Br.isEmptyOrZeroLength(t.active))throw new Error(PN);if(!Br.isEmpty(t.password)&&Br.isEmptyOrZeroLength(t.password.trim()))throw new Error(vN);if(!Br.isEmpty(t.active)&&!Br.isBoolean(t.active))throw new Error(HN);let r=iK(t.username);if(!Br.isEmpty(t.password)&&!Br.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Zm.encrypt(t.password)),t.password=Xm.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 H_(i)||[])}catch(c){throw Te.error("Got an error searching for a role."),Te.error(c),c}if(!o||o.length===0){let c=Ko.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Te.error(c),jn(new Error,c,Zn.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Ko.ALTER_USER_DUP_ROLES(t.role);throw Te.error(c),jn(new Error,c,Zn.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 Te.error("Error during update."),Te.error(i),i}try{await Wo()}catch(i){throw Te.error("Got an error setting users to global"),Te.error(i),i}return jm.signalUserChange(new ep(process.pid)),s}a(sK,"alterUser");function iK(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(iK,"isClusterUser");async function oK(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(Br.isEmpty(global.hdb_users.get(e.username)))throw jn(new Error,Ko.USER_NOT_EXIST(e.username),Zn.NOT_FOUND,void 0,void 0,!0);let n;try{n=await rK(r)}catch(s){throw Te.error("Got an error deleting a user."),Te.error(s),s}Te.debug(n);try{await Wo()}catch(s){throw Te.error("Got an error setting users to global."),Te.error(s),s}return jm.signalUserChange(new ep(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(oK,"dropUser");async function aK(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Jm.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await tK(r)}catch(s){throw Te.error("Got an error searching for a role."),Te.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Te.error(r),r}return t}a(aK,"userInfo");async function cK(){let e;try{e=await x_()}catch(t){throw Te.error("Got an error listing users."),Te.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(cK,"listUsersExternal");async function x_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await H_(e)}catch(o){throw Te.error("Got an error searching for roles."),Te.error(o),o}let r={};for(let o of t)r[o.id]=Jm.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 H_(n)}catch(o){throw Te.error("Got an error searching for users."),Te.error(o),o}let i=new Map;for(let o of s)o=Jm.cloneDeep(o),o.role=r[o.role],uK(o.role),i.set(o.username,o);return i}catch(e){throw Te.error("got an error listing users"),Te.error(e),Br.errorizeMessage(e)}return null}a(x_,"listUsers");function uK(e){try{if(!e){Te.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(jY)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Te.error("Got an error trying to set system permissions."),Te.error(t)}}a(uK,"appendSystemTablesToRole");async function Wo(){try{let e=await x_();global.hdb_users=e}catch(e){throw Te.error(e),e}}a(Wo,"setUsersToGlobal");async function VN(e,t,r=!0){global.hdb_users||await Wo();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw jn(new Error,zm.GENERIC_AUTH_FAIL,Zn.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw jn(new Error,zm.USER_INACTIVE,Zn.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(Xm.validate(n.password,t))MN.set(t,n.password);else throw jn(new Error,zm.GENERIC_AUTH_FAIL,Zn.UNAUTHORIZED,void 0,void 0,!0)}return s}a(VN,"findAndValidateUser");async function lK(){global.hdb_users||await Wo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(lK,"getSuperUser");async function _K(){let e=await x_(),t=XY.getConfigFromFile(DN.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Br.isEmpty(r)&&r?.role?.role===DN.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Zm.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(_K,"getClusterUser");var $N=[];tp.invalidateUser=function(e){for(let t of $N)try{t(e)}catch(r){eK.error("Error invalidating user",r)}};tp.onInvalidatedUser=function(e){$N.push(e)}});var Bc=g((Ace,zN)=>{"use strict";var zi=K(),xr=U(),dK=Fy(),gce=As(),Rce=ki(),fK=Hr(),{validateEvent:KN}=Dn(),vc=Cn(),EK=require("process"),{resetDatabases:hK}=(Ae(),se(Fe)),mK={[xr.ITC_EVENT_TYPES.SCHEMA]:pK,[xr.ITC_EVENT_TYPES.USER]:QN};async function pK(e){let t=KN(e);if(t){zi.error(t);return}zi.trace("ITC schemaHandler received schema event:",e),await dK(e.message),await SK(e.message)}a(pK,"schemaHandler");async function SK(e){try{vc.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),vc.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),vc.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=hK();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){zi.error(t)}}a(SK,"syncSchemaMetadata");var WN=[];async function QN(e){try{try{vc.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),vc.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){zi.warn(r)}let t=KN(e);if(t){zi.error(t);return}zi.trace(`ITC userHandler ${xr.HDB_ITC_CLIENT_PREFIX}${EK.pid} received user event:`,e),await fK.setUsersToGlobal();for(let r of WN)r()}catch(t){zi.error(t)}}a(QN,"userHandler");QN.addListener=function(e){WN.push(e)};zN.exports=mK});var Dn=g((wce,XN)=>{"use strict";var bce=K(),rp=Q(),TK=U(),{ITC_ERRORS:Hc}=Ir(),{parentPort:yce,threadId:gK,isMainThread:RK,workerData:Nce}=require("worker_threads"),{onMessageFromWorkers:AK,broadcast:Ice,broadcastWithAcknowledgement:OK}=tt();XN.exports={sendItcEvent:bK,validateEvent:JN,SchemaEventMsg:yK,UserEventMsg:NK};var G_;AK(async(e,t)=>{G_=G_||Bc(),JN(e),G_[e.type]&&await G_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function bK(e){return!RK&&e.message&&(e.message.originator=gK),OK(e)}a(bK,"sendItcEvent");function JN(e){if(typeof e!="object")return Hc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||rp.isEmpty(e.type))return Hc.MISSING_TYPE;if(!e.hasOwnProperty("message")||rp.isEmpty(e.message))return Hc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||rp.isEmpty(e.message.originator))return Hc.MISSING_ORIGIN;if(TK.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Hc.INVALID_EVENT(e.type)}a(JN,"validateEvent");function yK(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(yK,"SchemaEventMsg");function NK(e){this.originator=e}a(NK,"UserEventMsg")});var Os=g((Lce,tI)=>{"use strict";var jN=U(),Dce=Q(),F_=K(),ZN=Hy(),Qo,{sendItcEvent:eI}=Dn();function IK(e){try{F_.trace("signalSchemaChange called with message:",e),Qo=Qo||Bc();let t=new ZN(jN.ITC_EVENT_TYPES.SCHEMA,e);return Qo.schema(t),eI(t)}catch(t){F_.error(t)}}a(IK,"signalSchemaChange");function wK(e){try{F_.trace("signalUserChange called with message:",e),Qo=Qo||Bc();let t=new ZN(jN.ITC_EVENT_TYPES.USER,e);return Qo.user(t),eI(t)}catch(t){F_.error(t)}}a(wK,"signalUserChange");tI.exports={signalSchemaChange:IK,signalUserChange:wK}});var q_=g((Uce,nI)=>{"use strict";var rI=Q(),CK=U(),DK=K(),LK=g_(),MK=T_(),UK=Os(),{SchemaEventMsg:PK}=Dn(),vK="already exists in";nI.exports=BK;async function BK(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 HK(e,t.schema,t.name,i)})),s}a(BK,"lmdbCheckForNewAttributes");async function HK(e,t,r,n){let s=new MK(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await xK(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(vK))DK.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(HK,"createNewAttribute");async function xK(e){let t;return t=await LK(e),UK.signalSchemaChange(new PK(process.pid,CK.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(xK,"createAttribute")});var zo=g((vce,sI)=>{"use strict";var np=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=np});var oI=g((Hce,iI)=>{"use strict";var GK=zo(),FK=U().OPERATIONS_ENUM,sp=class extends GK{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(FK.INSERT,r,n,s,i),this.records=t}};iI.exports=sp});var cI=g((Gce,aI)=>{"use strict";var qK=zo(),kK=U().OPERATIONS_ENUM,ip=class extends qK{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(kK.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};aI.exports=ip});var lI=g((qce,uI)=>{"use strict";var VK=zo(),$K=U().OPERATIONS_ENUM,op=class extends VK{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super($K.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};uI.exports=op});var dI=g((Vce,_I)=>{"use strict";var YK=zo(),KK=U().OPERATIONS_ENUM,ap=class extends YK{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(KK.DELETE,n,s,t,i),this.original_records=r}};_I.exports=ap});var xc=g((Kce,mI)=>{"use strict";var Yce=require("path"),fI=Ye(),WK=oI(),QK=cI(),zK=lI(),JK=dI(),Jo=ft(),EI=Q(),{CONFIG_PARAMS:XK}=U(),hI=re();hI.initSync();var k_=U().OPERATIONS_ENUM,{getTransactionAuditStorePath:jK}=Qe();mI.exports=ZK;async function ZK(e,t){if(hI.get(XK.LOGGING_AUDITLOG)===!1)return;let r=jK(e.schema,e.table),n=await fI.openEnvironment(r,e.table,!0),s=eW(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){fI.initializeDBIs(n,Jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Jo.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),EI.isEmpty(s.user_name)||n.dbis[Jo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Jo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(ZK,"writeTransaction");function eW(e,t){let r=EI.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===k_.INSERT)return new WK(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===k_.UPDATE)return new QK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===k_.UPSERT)return new zK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===k_.DELETE)return new JK(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(eW,"createTransactionObject")});var cp=g((zce,pI)=>{"use strict";var tW=Lc(),Qce=Mc(),Gc=U(),rW=Uc(),nW=qo().insertRecords,sW=Ye(),iW=K(),oW=q_(),{getSchemaPath:aW}=Qe(),cW=xc();pI.exports=uW;async function uW(e){try{let{schema_table:t,attributes:r}=tW(e);rW(e,r,t.hash_attribute),e.schema!==Gc.SYSTEM_SCHEMA_NAME&&(r.includes(Gc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Gc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Gc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Gc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await oW(e.hdb_auth_header,t,r),s=aW(e.schema,e.table),i=await sW.openEnvironment(s,e.table),o=await nW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await cW(e,o)}catch(c){iW.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(uW,"lmdbCreateRecords")});var gI=g((Xce,TI)=>{"use strict";var SI=U(),lW=cp(),_W=Mc(),dW=require("fs-extra"),{getSchemaPath:fW}=Qe();TI.exports=EW;async function EW(e){let t=[{name:e.schema,createddate:Date.now()}],r=new _W(SI.SYSTEM_SCHEMA_NAME,SI.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await lW(r),await dW.mkdirp(fW(e.schema))}a(EW,"lmdbCreateSchema")});var AI=g((Zce,RI)=>{"use strict";var up=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=up});var NI=g((sue,yI)=>{"use strict";var OI=Ye(),lp=Lr(),_p=Ir().LMDB_ERRORS_ENUM,hW=ft(),bI=K(),tue=Q(),mW=require("lmdb"),pW=AI(),SW=U(),{OVERFLOW_MARKER:rue,MAX_SEARCH_KEY_LENGTH:nue}=hW,TW=SW.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function gW(e,t,r,n){if(lp.validateEnv(e),t===void 0)throw new Error(_p.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(_p.IDS_REQUIRED):new Error(_p.IDS_MUST_BE_ITERABLE);try{let s=OI.listDBIs(e);OI.initializeDBIs(e,t,s);let i=new pW,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[TW]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,mW.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=lp.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=lp.getNextMonotonicTime(),i}catch(s){throw s}}a(gW,"deleteRecords");yI.exports={deleteRecords:gW}});var Fc=g((oue,wI)=>{"use strict";var Xo=Q(),RW=NI(),AW=Ye(),{getSchemaPath:OW}=Qe(),bW=xc(),yW=K();wI.exports=NW;async function NW(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Xo.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Xo.isEmptyOrZeroLength(e.hash_values)&&!Xo.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][n];Xo.isEmpty(u)||e.hash_values.push(u)}}if(Xo.isEmptyOrZeroLength(e.hash_values))return II([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Xo.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=OW(e.schema,e.table),i=await AW.openEnvironment(s,e.table),o=await RW.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await bW(e,o)}catch(c){yW.error(`unable to write transaction due to ${c.message}`)}return II(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(NW,"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 fp=g((uue,CI)=>{"use strict";var IW=U(),cue=Lr();function dp(e,t){let r=Object.create(null);if(t.length===1&&IW.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(dp,"parseRow");function wW(e,t,r,n){let s=dp(r,e);n.push(s)}a(wW,"searchAll");function CW(e,t,r,n){let s=dp(r,e);n[t]=s}a(CW,"searchAllToMap");function DW(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(DW,"iterateDBI");function Ji(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(Ji,"pushResults");function LW(e,t,r,n,s,i){t.toString().endsWith(e)&&Ji(t,r,n,s,i)}a(LW,"endsWith");function MW(e,t,r,n,s,i){t.toString().includes(e)&&Ji(t,r,n,s,i)}a(MW,"contains");function UW(e,t,r,n,s,i){t>e&&Ji(t,r,n,s,i)}a(UW,"greaterThanCompare");function PW(e,t,r,n,s,i){t>=e&&Ji(t,r,n,s,i)}a(PW,"greaterThanEqualCompare");function vW(e,t,r,n,s,i){t<e&&Ji(t,r,n,s,i)}a(vW,"lessThanCompare");function BW(e,t,r,n,s,i){t<=e&&Ji(t,r,n,s,i)}a(BW,"lessThanEqualCompare");CI.exports={parseRow:dp,searchAll:wW,searchAllToMap:CW,iterateDBI:DW,endsWith:LW,contains:MW,greaterThanCompare:UW,greaterThanEqualCompare:PW,lessThanCompare:vW,lessThanEqualCompare:BW,pushResults:Ji}});var jo=g((Eue,BI)=>{"use strict";var si=Ye(),_ue=K(),Gr=Lr(),V_=ft(),ut=Ir().LMDB_ERRORS_ENUM,due=Q(),HW=U(),$_=fp(),{parseRow:xW}=$_,fue=require("lmdb"),{OVERFLOW_MARKER:DI,MAX_SEARCH_KEY_LENGTH:GW}=V_;function LI(e,t,r,n=!1,s=void 0,i=void 0){return Xi(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 qc(e,t,r,n,s,i=!1,o=void 0,c=void 0,u=!1,_=!1){return Xi(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(qc,"iterateRangeBetween");function Xi(e,t,r,n){let s=e.database||e,i=si.openDBI(s,r);i[V_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&si.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(Xi,"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=si.openDBI(e,r);else{let u=si.listDBIs(e);for(let _=0,l=u.length;_<l&&(s=si.openDBI(e,u[_]),!s[V_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(MI,"getOverflowCheck");function FW(e,t,r,n=!1,s=void 0,i=void 0){if(Gr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);return Xi(e,t,t,(o,c,u)=>(Y_(r),r=kc(u,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>xW(_.value,r))))}a(FW,"searchAll");function qW(e,t,r,n=!1,s=void 0,i=void 0){if(Gr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);Y_(r),r=kc(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,$_.parseRow(u,r));return o}a(qW,"searchAllToMap");function kW(e,t,r=!1,n=void 0,s=void 0){if(Gr.validateEnv(e),t===void 0)throw new Error(ut.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(kW,"iterateDBI");function VW(e,t){if(Gr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);return si.statDBI(e,t).entryCount}a(VW,"countAll");function $W(e,t,r,n,s=!1,i=void 0,o=void 0){return ii(e,r,n),Xi(e,t,r,(c,u,_,l)=>(n=Gr.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($W,"equals");function YW(e,t,r){return ii(e,t,r),si.openDBI(e,t).getValuesCount(r)}a(YW,"count");function KW(e,t,r,n,s=!1,i=void 0,o=void 0){return ii(e,r,n),Xi(e,null,r,(c,u)=>{n=Gr.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(KW,"startsWith");function WW(e,t,r,n,s=!1,i=void 0,o=void 0){return UI(e,t,r,n,s,i,o,!0)}a(WW,"endsWith");function UI(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ii(e,r,n),Xi(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))?_[V_.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 QW(e,t,r,n,s=!1,i=void 0,o=void 0){ii(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),qc(e,t,r,n,u,s,i,o,!0,!1)}a(QW,"greaterThan");function zW(e,t,r,n,s=!1,i=void 0,o=void 0){ii(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),qc(e,t,r,n,u,s,i,o,!1,!1)}a(zW,"greaterThanEqual");function JW(e,t,r,n,s=!1,i=void 0,o=void 0){ii(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),qc(e,t,r,u,n,s,i,o,!1,!0)}a(JW,"lessThan");function XW(e,t,r,n,s=!1,i=void 0,o=void 0){ii(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),qc(e,t,r,u,n,s,i,o,!1,!1)}a(XW,"lessThanEqual");function jW(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Gr.validateEnv(e),r===void 0)throw new Error(ut.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(ut.START_VALUE_REQUIRED);if(s===void 0)throw new Error(ut.END_VALUE_REQUIRED);if(n=Gr.convertKeyValueToWrite(n),s=Gr.convertKeyValueToWrite(s),n>s)throw new Error(ut.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return qc(e,t,r,n,s,i,o,c)}a(jW,"between");function ZW(e,t,r,n){Gr.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(Y_(r),r=kc(s,r),n===void 0)throw new Error(ut.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=$_.parseRow(c,r)),o}a(ZW,"searchByHash");function eQ(e,t,r){Gr.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ut.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(eQ,"checkHashExists");function tQ(e,t,r,n,s=[]){return vI(e,t,r,n,s),PI(e,t,r,n,s).map(i=>i[1])}a(tQ,"batchSearchByHash");function rQ(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(rQ,"batchSearchByHashToMap");function PI(e,t,r,n,s=[]){return Xi(e,t,t,(i,o,c)=>{r=kc(c,r);let u=r.length<3;return n.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,$_.parseRow(l,r)];s.push(_)}).filter(_=>_)})}a(PI,"batchHashSearch");function vI(e,t,r,n,s){if(Gr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(Y_(r),n==null)throw new Error(ut.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(ut.IDS_MUST_BE_ITERABLE)}a(vI,"initializeBatchSearchByHash");function Y_(e){if(!Array.isArray(e))throw e===void 0?new Error(ut.FETCH_ATTRIBUTES_REQUIRED):new Error(ut.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Y_,"validateFetchAttributes");function ii(e,t,r){if(Gr.validateEnv(e),t===void 0)throw new Error(ut.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ut.SEARCH_VALUE_REQUIRED);if(r?.length>GW)throw new Error(ut.SEARCH_VALUE_TOO_LARGE)}a(ii,"validateComparisonFunctions");function kc(e,t){return t.length===1&&HW.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=si.listDBIs(e)),t}a(kc,"setGetWholeRowAttributes");BI.exports={searchAll:FW,searchAllToMap:qW,count:YW,countAll:VW,equals:$W,startsWith:KW,endsWith:WW,contains:UI,searchByHash:ZW,setGetWholeRowAttributes:kc,batchSearchByHash:tQ,batchSearchByHashToMap:rQ,checkHashExists:eQ,iterateDBI:kW,greaterThan:QW,greaterThanEqual:zW,lessThan:JW,lessThanEqual:XW,between:jW}});var Zo=g((mue,qI)=>{var HI=require("lodash"),xI=Ze(),Ee=require("joi"),nQ=Q(),{hdb_schema_table:Vc,checkValidTable:GI,hdb_table:FI,hdb_database:K_}=Jn(),{handleHDBError:sQ,hdb_errors:iQ}=ne(),{getDatabases:oQ}=(Ae(),se(Fe)),{HTTP_STATUS_CODES:aQ}=iQ,cQ=Ee.object({database:K_,schema:K_,table:FI,search_attribute:Vc,search_value:Ee.any().required(),get_attributes:Ee.array().min(1).items(Ee.alternatives(Vc,Ee.object())).optional(),desc:Ee.bool(),limit:Ee.number().integer().min(1),offset:Ee.number().integer().min(0)}),uQ=Ee.object({database:K_,schema:K_,table:FI,operator:Ee.string().valid("and","or").default("and").lowercase(),offset:Ee.number().integer().min(0),limit:Ee.number().integer().min(1),get_attributes:Ee.array().min(1).items(Ee.alternatives(Vc,Ee.object())).optional(),sort:Ee.object({attribute:Ee.alternatives(Vc,Ee.array().min(1)),descending:Ee.bool().optional()}).optional(),conditions:Ee.array().min(1).items(Ee.alternatives(Ee.object({operator:Ee.string().valid("and","or").default("and").lowercase(),conditions:Ee.array()}),Ee.object({search_attribute:Ee.alternatives(Vc,Ee.array().min(1)),search_type:Ee.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:Ee.when("search_type",{switch:[{is:"equals",then:Ee.any()},{is:"between",then:Ee.array().items(Ee.alternatives([Ee.string(),Ee.number()])).length(2)}],otherwise:Ee.alternatives(Ee.string(),Ee.number())}).required()}))).required()});qI.exports=function(e,t){let r=null;switch(t){case"value":r=xI.validateBySchema(e,cQ);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,uQ);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=nQ.checkGlobalSchemaTable(e.schema,e.table);if(s)return sQ(new Error,s,aQ.NOT_FOUND);let o=oQ()[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)&&!l.name&&!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 Ep=g((Sue,kI)=>{"use strict";var lQ=Ye(),_Q=Zo(),{getSchemaPath:dQ}=Qe();kI.exports=fQ;function fQ(e){let t=_Q(e,"hashes");if(t)throw t;let r=dQ(e.schema,e.table);return lQ.openEnvironment(r,e.table)}a(fQ,"initialize")});var hp=g((gue,VI)=>{"use strict";var EQ=jo(),hQ=Ep();VI.exports=mQ;async function mQ(e){let t=await hQ(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return EQ.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(mQ,"lmdbGetDataByHash")});var ea=g((Aue,$I)=>{"use strict";var mp=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=mp});var KI=g((yue,YI)=>{"use strict";var bue=ea(),pQ=jo(),SQ=Ep();YI.exports=TQ;async function TQ(e){let t=await SQ(e),r=global.hdb_schema[e.schema][e.table];return pQ.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(TQ,"lmdbSearchByHash")});var es=g((Iue,WI)=>{"use strict";var pp=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=pp});var W_=g((Cue,ZI)=>{"use strict";var Xt=jo(),gQ=Ye(),RQ=Q(),he=ft(),ji=U(),AQ=Fi(),QI=Ir().LMDB_ERRORS_ENUM,{getSchemaPath:OQ}=Qe(),bs=ji.SEARCH_WILDCARDS;async function bQ(e,t,r){let n;e.schema===ji.SYSTEM_SCHEMA_NAME?n=AQ[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(bQ,"prepSearch");async function JI(e,t,r,n){let s=OQ(e.schema,e.table),i=await gQ.openEnvironment(s,e.table),o=XI(i,e,t,r),c=o.transaction||i;if([he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,he.SEARCH_TYPES.SEARCH_ALL,he.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(yQ(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?Xt.batchSearchByHashToMap(c,r,e.get_attributes,_):Xt.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 he.SEARCH_TYPES.EQUALS:s=Xt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.CONTAINS:s=Xt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.ENDS_WITH:case he.SEARCH_TYPES._ENDS_WITH:s=Xt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.STARTS_WITH:case he.SEARCH_TYPES._STARTS_WITH:s=Xt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Xt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Xt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case he.SEARCH_TYPES.SEARCH_ALL:return Xt.searchAll(e,n,t.get_attributes,o,c,u);case he.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Xt.searchAllToMap(e,n,t.get_attributes,o,c,u);case he.SEARCH_TYPES.BETWEEN:s=Xt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case he.SEARCH_TYPES.GREATER_THAN:case he.SEARCH_TYPES._GREATER_THAN:s=Xt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.GREATER_THAN_EQUAL:case he.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Xt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.LESS_THAN:case he.SEARCH_TYPES._LESS_THAN:s=Xt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.LESS_THAN_EQUAL:case he.SEARCH_TYPES._LESS_THAN_EQUAL:s=Xt.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 yQ(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(yQ,"checkToFetchMore");function jI(e,t,r,n){if(RQ.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),bs.indexOf(s)>-1)return r===!0?he.SEARCH_TYPES.SEARCH_ALL_TO_MAP:he.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(bs[0])<0&&s.indexOf(bs[1])<0)return c===!0?r===!0?he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:he.SEARCH_TYPES.EQUALS;if(bs.indexOf(i)>=0&&bs.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),he.SEARCH_TYPES.CONTAINS;if(bs.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),he.SEARCH_TYPES.ENDS_WITH;if(bs.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),he.SEARCH_TYPES.STARTS_WITH;if(s.includes(bs[0])||s.includes(bs[1]))return he.SEARCH_TYPES.EQUALS;throw new Error(QI.UNKNOWN_SEARCH_TYPE)}else switch(n){case ji.VALUE_SEARCH_COMPARATORS.BETWEEN:return he.SEARCH_TYPES.BETWEEN;case ji.VALUE_SEARCH_COMPARATORS.GREATER:return he.SEARCH_TYPES.GREATER_THAN;case ji.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return he.SEARCH_TYPES.GREATER_THAN_EQUAL;case ji.VALUE_SEARCH_COMPARATORS.LESS:return he.SEARCH_TYPES.LESS_THAN;case ji.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return he.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(QI.UNKNOWN_SEARCH_TYPE)}}a(jI,"createSearchTypeFromSearchObject");ZI.exports={executeSearch:JI,createSearchTypeFromSearchObject:jI,prepSearch:bQ,searchByType:XI}});var tw=g((Mue,ew)=>{"use strict";var Lue=es(),NQ=Zo(),IQ=Q(),wQ=U(),CQ=W_();ew.exports=DQ;function DQ(e,t){if(!IQ.isEmpty(t)&&wQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=NQ(e,"value");if(n)throw n;return CQ.prepSearch(e,t,!0)}a(DQ,"lmdbGetDataByValue")});var $c=g((vue,rw)=>{"use strict";var Pue=es(),LQ=Zo(),MQ=Q(),UQ=U(),PQ=W_();rw.exports=vQ;async function vQ(e,t){if(!MQ.isEmpty(t)&&UQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=LQ(e,"value");if(n)throw n;return PQ.prepSearch(e,t,!1)}a(vQ,"lmdbSearchByValue")});var sw=g((xue,nw)=>{"use strict";var Hue=ft(),Sp=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}},Tp=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},gp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};nw.exports={SearchByConditionsObject:Sp,SearchCondition:Tp,SortAttribute:gp}});var uw=g((kue,cw)=>{"use strict";var Fue=sw().SearchByConditionsObject,BQ=es(),HQ=Zo(),Rp=jo(),Q_=ft(),{Resource:que}=(Nn(),se(Ap)),aw=W_(),xQ=fp(),GQ=require("lodash"),{getSchemaPath:FQ}=Qe(),iw=Ye(),{handleHDBError:qQ,hdb_errors:kQ}=ne(),{HTTP_STATUS_CODES:VQ}=kQ,$Q=1e8;cw.exports=YQ;async function YQ(e){let t=HQ(e,"conditions");if(t)throw qQ(t,t.message,VQ.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=FQ(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=GQ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===Q_.SEARCH_TYPES.EQUALS?_.estimated_count=Rp.count(n,_.search_attribute,_.search_value):l===Q_.SEARCH_TYPES.CONTAINS||l===Q_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=$Q}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=Rp.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=>xQ.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=Rp.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(YQ,"lmdbSearchByConditions");async function ow(e,t,r,n){let s=new BQ(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===Q_.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 Yc=g(($ue,lw)=>{"use strict";var KQ=U().OPERATIONS_ENUM,Op=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=KQ.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};lw.exports=Op});var bp=g((Kue,Sw)=>{"use strict";var Ew=es(),hw=Yc(),mw=$c(),pw=Fc(),lr=U(),_w=Q(),dw=Ye(),{getTransactionAuditStorePath:WQ,getSchemaPath:QQ}=Qe(),fw=K();Sw.exports=zQ;async function zQ(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 JQ(e),await XQ(e);let t=QQ(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=WQ(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(zQ,"lmdbDropTable");async function JQ(e){let t=new Ew(lr.SYSTEM_SCHEMA_NAME,lr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,lr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[lr.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(lr.SYSTEM_SCHEMA_NAME,lr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await pw(s)}a(JQ,"deleteAttributesFromSystem");async function XQ(e){let t=new Ew(lr.SYSTEM_SCHEMA_NAME,lr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,lr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[lr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,lr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,lr.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(lr.SYSTEM_SCHEMA_NAME,lr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await pw(s)}catch(i){throw i}}a(XQ,"dropTableFromSystem")});var gw=g((Que,Tw)=>{"use strict";var jQ=require("fs-extra"),ZQ=es(),ez=ea(),tz=Yc(),rz=bp(),nz=Fc(),sz=hp(),iz=$c(),ys=U(),{getSchemaPath:oz}=Qe(),{handleHDBError:az,hdb_errors:cz}=ne(),{HDB_ERROR_MSGS:uz,HTTP_STATUS_CODES:lz}=cz;Tw.exports=_z;async function _z(e){let t;try{t=await dz(e.schema);let r=new ZQ(ys.SYSTEM_SCHEMA_NAME,ys.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ys.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ys.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await iz(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await rz(c)}catch(u){if(u.message!=="invalid environment")throw u}}let s=new tz(ys.SYSTEM_SCHEMA_NAME,ys.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await nz(s);let i=oz(t);await jQ.remove(i)}catch(r){throw r}}a(_z,"lmdbDropSchema");async function dz(e){let t=new ez(ys.SYSTEM_SCHEMA_NAME,ys.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ys.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await sz(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw az(new Error,uz.SCHEMA_NOT_FOUND(e),lz.NOT_FOUND,void 0,void 0,!0);return n}a(dz,"validateDropSchema")});var Np=g((Jue,Rw)=>{"use strict";var yp=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};Rw.exports=yp});var Ow=g((Zue,Aw)=>{"use strict";var fz=require("fs-extra"),z_=Ye(),{getTransactionAuditStorePath:Ez}=Qe(),Ip=ft(),jue=Np();Aw.exports=hz;async function hz(e){let t;try{let r=Ez(e.schema,e.table);await fz.mkdirp(r),t=await z_.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{z_.createDBI(t,Ip.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),z_.createDBI(t,Ip.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),z_.createDBI(t,Ip.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(hz,"createTransactionsAuditEnvironment")});var Iw=g((tle,Nw)=>{"use strict";var wp=U(),bw=Ye(),mz=qo(),{getSystemSchemaPath:pz,getSchemaPath:Sz}=Qe(),Tz=Fi(),gz=g_(),Cp=T_(),Rz=K(),Az=Ow(),Lp=Tz.hdb_table,yw=[];for(let e=0;e<Lp.attributes.length;e++)yw.push(Lp.attributes[e].attribute);Nw.exports=Oz;async function Oz(e,t){let r=Sz(t.schema,t.table),n=new Cp(t.schema,t.table,wp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Cp(t.schema,t.table,wp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Cp(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(pz(),wp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await mz.insertRecords(o,Lp.hash_attribute,yw,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Dp(n),await Dp(s),await Dp(i)}await Az(t)}catch(o){throw o}}a(Oz,"lmdbCreateTable");async function Dp(e){try{await gz(e)}catch(t){Rz.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Dp,"createAttribute")});var Cw=g((nle,ww)=>{"use strict";var bz=Lc(),yz=Uc(),Nz=q_(),Kc=U(),Iz=qo().updateRecords,wz=Ye(),{getSchemaPath:Cz}=Qe(),Dz=xc(),Lz=K();ww.exports=Mz;async function Mz(e){try{let{schema_table:t,attributes:r}=bz(e);yz(e,r,t.hash_attribute),e.schema!==Kc.SYSTEM_SCHEMA_NAME&&(r.includes(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Nz(e.hdb_auth_header,t,r),s=Cz(e.schema,e.table),i=await wz.openEnvironment(s,e.table),o=await Iz(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Dz(e,o)}catch(c){Lz.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(Mz,"lmdbUpdateRecords")});var Lw=g((ile,Dw)=>{"use strict";var Uz=U().OPERATIONS_ENUM,Mp=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Uz.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Dw.exports=Mp});var Uw=g((cle,Mw)=>{"use strict";var ale=Lw(),Pz=Lc(),vz=Uc(),Bz=q_(),Wc=U(),Hz=qo().upsertRecords,xz=Ye(),{getSchemaPath:Gz}=Qe(),Fz=xc(),qz=K(),{handleHDBError:kz,hdb_errors:Vz}=ne();Mw.exports=$z;async function $z(e){let t;try{t=Pz(e)}catch(u){throw kz(u,u.message,Vz.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;vz(e,n,r.hash_attribute),e.schema!==Wc.SYSTEM_SCHEMA_NAME&&(n.includes(Wc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Wc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Wc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Wc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Bz(e.hdb_auth_header,r,n),i=Gz(e.schema,e.table),o=await xz.openEnvironment(i,e.table),c=await Hz(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await Fz(e,c)}catch(u){qz.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($z,"lmdbUpsertRecords")});var vw=g((lle,Pw)=>{"use strict";var Up=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};Pw.exports=Up});var Hw=g((dle,Bw)=>{"use strict";var Pp=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=Pp});var Fw=g((hle,Gw)=>{"use strict";var vp=Ye(),{getTransactionAuditStorePath:Yz}=Qe(),Ele=vw(),Qc=ft(),Kz=Q(),xw=Hw(),Wz=require("util").promisify,Qz=Wz(setTimeout),zz=1e4,Jz=100;Gw.exports=Xz;async function Xz(e){let t=Yz(e.schema,e.table),r=await vp.openEnvironment(t,e.table,!0),n=vp.listDBIs(r);vp.initializeDBIs(r,Qc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new xw;do s=await jz(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 Qz(Jz);while(s.transactions_deleted>0);return i}a(Xz,"deleteAuditLogsBefore");async function jz(e,t){let r=new xw;try{let n=e.dbis[Qc.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[Qc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Kz.isEmpty(c)||(s=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)s=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>zz)break}return await s,r}catch(n){throw n}}a(jz,"deleteTransactions")});var kw=g((ple,qw)=>{"use strict";var Bp=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};qw.exports=Bp});var $w=g((gle,Vw)=>{"use strict";var Zz=es(),eJ=Yc(),Tle=kw(),ts=U(),tJ=Q(),Hp=Ye(),rJ=Fi(),nJ=$c(),sJ=Fc(),{getSchemaPath:iJ}=Qe();Vw.exports=oJ;async function oJ(e,t=!0){let r;e.schema===ts.SYSTEM_SCHEMA_NAME?r=rJ[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await cJ(e),s=iJ(e.schema,e.table),i=await Hp.openEnvironment(s,e.table);return t===!0&&await aJ(e,i,r.hash_attribute),Hp.dropDBI(i,e.attribute),n}a(oJ,"lmdbDropAttribute");async function aJ(e,t,r){let n=Hp.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(aJ,"removeAttributeFromAllObjects");async function cJ(e){let t=new Zz(ts.SYSTEM_SCHEMA_NAME,ts.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ts.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ts.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ts.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await nJ(t)).filter(o=>o[ts.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(tJ.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[ts.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new eJ(ts.SYSTEM_SCHEMA_NAME,ts.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return sJ(i)}a(cJ,"dropAttributeFromSystem")});var Jw=g((Ole,zw)=>{"use strict";var xp=Ye(),ta=ft(),Ale=Lr(),Gp=U(),Yw=Q(),{getTransactionAuditStorePath:uJ}=Qe(),lJ=jo(),J_=zo(),_J=K();zw.exports=dJ;async function dJ(e){let t=uJ(e.schema,e.table),r=await xp.openEnvironment(t,e.table,!0),n=xp.listDBIs(r);xp.initializeDBIs(r,ta.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Gp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Kw(r,e.search_values);case Gp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,EJ(r,e.search_values,s);case Gp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return fJ(r,e.search_values);default:return Kw(r)}}a(dJ,"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[ta.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 J_,s))}a(Kw,"searchTransactionsByTimestamp");function fJ(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[ta.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,Qw(e,i))}return Object.fromEntries(r)}a(fJ,"searchTransactionsByUsername");function EJ(e,t,r){let n=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=lJ.equals(e,ta.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ta.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(EJ,"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 J_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new J_(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[ta.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 J_,i);r.push(o)}}catch(i){_J.warn(i)}return r}catch(n){throw n}}a(Qw,"batchSearchTransactions")});var jw=g((Ile,Xw)=>{"use strict";var{getSchemaPath:yle}=Qe(),Nle=Ye(),{database:hJ}=(Ae(),se(Fe));Xw.exports={writeTransaction:mJ};async function mJ(e,t,r){return hJ({database:e,table:t}).transaction(r)}a(mJ,"writeTransaction")});var rC=g((Cle,tC)=>{"use strict";var{getSchemaPath:Zw}=Qe(),eC=Ye();tC.exports={flush:pJ,resetReadTxn:SJ};async function pJ(e,t){return(await eC.openEnvironment(Zw(e,t),t.toString())).flushed}a(pJ,"flush");async function SJ(e,t){try{(await eC.openEnvironment(Zw(e,t),t.toString())).resetReadTxn()}catch{}}a(SJ,"resetReadTxn")});var oC=g((Lle,iC)=>{"use strict";var{Readable:TJ}=require("stream"),{getDatabases:gJ}=(Ae(),se(Fe)),{readSync:RJ,openSync:AJ,createReadStream:nC}=require("fs"),{open:OJ}=require("lmdb"),sC=u_(),bJ=__(),{AUDIT_STORE_OPTIONS:yJ}=(xi(),se(aC)),{INTERNAL_DBIS_NAME:NJ,AUDIT_STORE_NAME:IJ}=ft();iC.exports=CJ;var Fp=32768,wJ=100;async function CJ(e){let t=e.database||e.schema||"data",r=gJ()[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=OJ({noSync:!0,maxDbs:bJ.MAX_DBS}),f,E=d.openDB(NJ,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++%wJ===0&&(await new Promise(X=>setTimeout(X,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(IJ,Object.assign({},yJ)),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=AJ(o.path);return o.transaction(()=>{let _=Buffer.alloc(Fp);RJ(c,_,0,Fp),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=nC(null,{fd:c,start:Fp}),f=new TJ.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(CJ,"getBackup")});var lC=g((Ule,uC)=>{"use strict";var DJ=K(),{handleHDBError:LJ}=ne(),MJ=Fb(),UJ=g_(),PJ=cp(),vJ=gI(),BJ=Fc(),HJ=hp(),xJ=KI(),GJ=tw(),FJ=$c(),qJ=uw(),kJ=gw(),VJ=Iw(),$J=Cw(),YJ=Uw(),KJ=Fw(),WJ=bp(),QJ=$w(),zJ=Jw(),JJ=jw(),cC=rC(),XJ=oC(),qp=class extends MJ{static{a(this,"LMDBBridge")}async searchByConditions(t){return qJ(t)}async getDataByHash(t){return await HJ(t)}async searchByHash(t){return await xJ(t)}async getDataByValue(t,r){return await GJ(t,r)}async searchByValue(t){return await FJ(t)}async createSchema(t){return await vJ(t)}async dropSchema(t){return await kJ(t)}async createTable(t,r){return await VJ(t,r)}async dropTable(t){return await WJ(t)}async createAttribute(t){return await UJ(t)}async createRecords(t){return await PJ(t)}async updateRecords(t){return await $J(t)}async upsertRecords(t){try{return await YJ(t)}catch(r){throw LJ(r,null,null,DJ.ERR,r)}}async deleteRecords(t){return await BJ(t)}async dropAttribute(t){return await QJ(t)}async deleteAuditLogsBefore(t){return await KJ(t)}async readAuditLog(t){return await zJ(t)}writeTransaction(t,r,n){return JJ.writeTransaction(t,r,n)}flush(t,r){return cC.flush(t,r)}resetReadTxn(t,r){return cC.resetReadTxn(t,r)}getBackup(t){return XJ(t)}};uC.exports=qp});function r2(){t2=setInterval(function(){for(let e of kp)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},e2).unref()}var Vp,dC,fC,jJ,kp,ZJ,zc,_C,Zi,X_,e2,t2,$p=Re(()=>{Vp=x(Lr()),dC=x(ne()),fC=x(K());Nn();jJ=100,kp=new Set,ZJ=25e3,Zi=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,this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0),kp.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(kp.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(zc&&performance.now()-_C>ZJ)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,Vp.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<jJ>>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 zc||(zc=s,_C=performance.now(),zc.then(()=>{zc=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=[]}},X_=class extends Zi{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Vp.getNextMonotonicTime)())}getReadTxn(){}},e2=3e4;a(r2,"startMonitoringTxns");r2()});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 Zi;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,eo=Re(()=>{EC=require("../../index");Nn();$p();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:()=>Wp});function Qp({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=rs(e),n=Qp(e,r);if(!r)throw new Ln.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&&Z_(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 rs(e){let t=e.database||e.schema||s2,r=Mn()[t];if(!r)throw(0,Ln.handleHDBError)(new Error,n2.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,j_,Ln,gC,RC,Un,Yp,Kp,AC,n2,s2,i2,o2,hC,Wp,bC=Re(()=>{"use strict";TC=x(lC()),j_=x(Zo()),Ln=x(ne());Ae();gC=x(Lc()),RC=x(Uc()),Un=x(U()),Yp=x(Os()),Kp=x(Dn()),AC=x(Q());eo();ed();({HDB_ERROR_MSGS:n2}=Ln.hdb_errors),s2="data",i2=1e4,o2=10,Wp=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,j_.default)(t,"conditions");if(r)throw(0,Ln.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=rs(t);if(!n)throw new Ln.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:Qp(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 Ln.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}]}ct({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await rs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=rs(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){rs(t).dropTable()}createSchema(t){return Jc({database:t.schema,table:null}),Yp.signalSchemaChange(new Kp.SchemaEventMsg(process.pid,Un.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await zp(t.schema),Yp.signalSchemaChange(new Kp.SchemaEventMsg(process.pid,Un.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=Mn()[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=Z_(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=Mn()[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=Mn()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ln.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:Un.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)(o2),u=[],s=!0},"chunkDelete");for await(let l of n)u.push(l[r.primaryKey]),c++,c%i2===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,j_.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&&Un.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,j_.default)(t,"value");if(n)throw n;let s=rs(t);if(!s)throw new Ln.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===Un.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:Qp(t,s)})}async getDataByValue(t,r){let n=new Map,s=rs(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){rs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return rs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=rs(t),n={};switch(t.search_type){case Un.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 Un.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(Qp,"getSelect");a(mC,"getRecords");a(rs,"getTable");a(pC,"createDeleteResponse");a(SC,"groupRecordsInHistory")});var Cn=g((Qle,yC)=>{"use strict";var{ResourceBridge:a2}=(bC(),se(OC)),c2=re();c2.initSync();var td;function u2(){return td||(td=new a2,td)}a(u2,"getBridge");yC.exports=u2()});var CC=g((Jle,wC)=>{"use strict";var NC=require("lodash"),Xc=require("mathjs"),l2=require("jsonata"),IC=Q();wC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?NC.uniqWith(e,NC.isEqual):e,searchJSON:_2,mad:jc.bind(null,Xc.mad),mean:jc.bind(null,Xc.mean),mode:jc.bind(null,Xc.mode),prod:jc.bind(null,Xc.prod),median:jc.bind(null,Xc.median)};function jc(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(jc,"aggregateFunction");function _2(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=l2(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(_2,"searchJSON")});var LC=g((jle,DC)=>{"use strict";var ht=require("moment"),Jp="YYYY-MM-DDTHH:mm:ss.SSSZZ";ht.suppressDeprecationWarnings=!0;DC.exports={current_date:()=>ht().utc().format("YYYY-MM-DD"),current_time:()=>ht().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return ht(e).utc().format("YYYY");case"month":return ht(e).utc().format("MM");case"day":return ht(e).utc().format("DD");case"hour":return ht(e).utc().format("HH");case"minute":return ht(e).utc().format("mm");case"second":return ht(e).utc().format("ss");case"millisecond":return ht(e).utc().format("SSS");default:break}},date:e=>ht(e).utc().format(Jp),date_format:(e,t)=>ht(e).utc().format(t),date_add:(e,t,r)=>ht(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>ht(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=ht(e).utc(),s=ht(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>ht().utc().valueOf(),get_server_time:()=>ht().format(Jp),offset_utc:(e,t)=>ht(e).utc().utcOffset(t).format(Jp)}});var vC=g((Zle,PC)=>{"use strict";var d2=require("@turf/area"),f2=require("@turf/length"),E2=require("@turf/circle"),h2=require("@turf/difference"),m2=require("@turf/distance"),p2=require("@turf/boolean-contains"),S2=require("@turf/boolean-equal"),T2=require("@turf/boolean-disjoint"),g2=require("@turf/helpers"),MC=U(),pe=Q(),Ns=K();PC.exports={geoArea:R2,geoLength:A2,geoCircle:O2,geoDifference:b2,geoDistance:UC,geoNear:y2,geoContains:N2,geoEqual:I2,geoCrosses:w2,geoConvert:C2};function R2(e){if(pe.isEmpty(e))return NaN;typeof e=="string"&&(e=pe.autoCastJSON(e));try{return d2.default(e)}catch(t){return Ns.trace(t,e),NaN}}a(R2,"geoArea");function A2(e,t){if(pe.isEmpty(e))return NaN;typeof e=="string"&&(e=pe.autoCastJSON(e));try{return f2.default(e,{units:t||"kilometers"})}catch(r){return Ns.trace(r,e),NaN}}a(A2,"geoLength");function O2(e,t,r){if(pe.isEmpty(e))return NaN;if(pe.isEmpty(t))return NaN;typeof e=="string"&&(e=pe.autoCastJSON(e));try{return E2.default(e,t,{units:r||"kilometers"})}catch(n){return Ns.trace(n,e,t),NaN}}a(O2,"geoCircle");function b2(e,t){if(pe.isEmpty(e))return NaN;if(pe.isEmpty(t))return NaN;typeof e=="string"&&(e=pe.autoCastJSON(e)),typeof t=="string"&&(t=pe.autoCastJSON(t));try{return h2(e,t)}catch(r){return Ns.trace(r,e,t),NaN}}a(b2,"geoDifference");function UC(e,t,r){if(pe.isEmpty(e))return NaN;if(pe.isEmpty(t))return NaN;typeof e=="string"&&(e=pe.autoCastJSON(e)),typeof t=="string"&&(t=pe.autoCastJSON(t));try{return m2.default(e,t,{units:r||"kilometers"})}catch(n){return Ns.trace(n,e,t),NaN}}a(UC,"geoDistance");function y2(e,t,r,n){if(pe.isEmpty(e)||pe.isEmpty(t))return!1;if(pe.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=pe.autoCastJSON(e)),typeof t=="string"&&(t=pe.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return UC(e,t,n)<=r}catch(s){return Ns.trace(s,e,t),!1}}a(y2,"geoNear");function N2(e,t){if(pe.isEmpty(e)||pe.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=pe.autoCastJSON(e)),typeof t=="string"&&(t=pe.autoCastJSON(t));try{return p2.default(e,t)}catch(r){return Ns.trace(r,e,t),!1}}a(N2,"geoContains");function I2(e,t){if(pe.isEmpty(e)||pe.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=pe.autoCastJSON(e)),typeof t=="string"&&(t=pe.autoCastJSON(t));try{return S2.default(e,t)}catch(r){return Ns.trace(r,e,t),!1}}a(I2,"geoEqual");function w2(e,t){if(pe.isEmpty(e)||pe.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=pe.autoCastJSON(e)),typeof t=="string"&&(t=pe.autoCastJSON(t));try{return!T2.default(e,t)}catch(r){return Ns.trace(r,e,t),!1}}a(w2,"geoCrosses");function C2(e,t,r){if(pe.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(pe.isEmpty(t))throw new Error("geo_type is required");if(pe.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=pe.autoCastJSON(e)),g2[t](e,r)}a(C2,"geoConvert")});var rd=g((t_e,BC)=>{var to=CC(),Fr=LC(),ns=vC();BC.exports=e=>{e.aggr.mad=e.aggr.MAD=to.mad,e.aggr.mean=e.aggr.MEAN=to.mean,e.aggr.mode=e.aggr.MODE=to.mode,e.aggr.prod=e.aggr.PROD=to.prod,e.aggr.median=e.aggr.MEDIAN=to.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=to.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=to.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Fr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Fr.current_time,e.fn.extract=e.fn.EXTRACT=Fr.extract,e.fn.date=e.fn.DATE=Fr.date,e.fn.date_format=e.fn.DATE_FORMAT=Fr.date_format,e.fn.date_add=e.fn.DATE_ADD=Fr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Fr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Fr.date_diff,e.fn.now=e.fn.NOW=Fr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Fr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Fr.get_server_time,e.fn.getdate=e.fn.GETDATE=Fr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Fr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=ns.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=ns.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=ns.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=ns.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=ns.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=ns.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=ns.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=ns.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=ns.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=ns.geoNear}});var FC=g((r_e,GC)=>{"use strict";var Zc=require("lodash"),_r=require("alasql");_r.options.cache=!1;var D2=rd(),HC=require("clone"),nd=require("recursive-iterator"),le=K(),Ce=Q(),ra=Cn(),L2=U(),{hdb_errors:M2}=ne(),{getDatabases:xC}=(Ae(),se(Fe)),U2="IS NULL",Pn="There was a problem performing this search. Please check the logs and try again.";D2(_r);var Xp=class{static{a(this,"SQLSearch")}constructor(t,r){if(Ce.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(),Ce.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Ce.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(Pn)}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(Pn)}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(Pn)}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(Pn)}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(Pn)}}_getColumns(){let t=new nd(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=Zc.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(Ce.isEmpty(this.statement.where)){le.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new nd(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Ce.isEmpty(r)&&r.right)if(Ce.isNotEmptyAndHasValue(r.right.value)){let n=Ce.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new _r.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Ce.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new _r.yy.LogicValue({value:i}):n instanceof _r.yy.StringValue&&Ce.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new _r.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 nd(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(!Ce.isEmpty(L2.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Ce.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Ce.isEmptyOrZeroLength(r.left.columnid)||Ce.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(Ce.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"=":!Ce.isEmpty(r.right.value)||!Ce.isEmpty(r.left.value)?n.add(Ce.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(Ce.isEmptyOrZeroLength(this.all_table_attributes)&&Ce.isEmptyOrZeroLength(this.statement.from)&&Ce.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&&Zc.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(Ce.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Ce.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(Ce.isEmptyOrZeroLength(this.all_table_attributes)&&!Ce.isEmptyOrZeroLength(this.columns.columns))return t;if(Ce.isEmptyOrZeroLength(this.all_table_attributes)&&Ce.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await _r.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(Ce.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(U2)>-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=Zc.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),!Ce.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Ce.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await ra.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(Pn)}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 ra.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(Pn)}else if(!Ce.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Ce.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 ra.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(Pn)}else try{c.search_attribute=s.attribute,c.search_value="*";let l=await ra.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(Pn)}}}_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 _r.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 _r.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new _r.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 _r.yy.FuncValue:new _r.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 _r.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=Zc.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 nd(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=Zc.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(Pn)}}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 ra.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 _r.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(M2.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 ra.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(Pn)}}return Object.values(Object.values(this.data)[0].__merged_data)}};GC.exports=Xp});var vr=g((s_e,qC)=>{"use strict";var P2=xb();qC.exports={searchByConditions:B2,searchByHash:H2,searchByValue:x2,search:G2};var jp=Cn(),{transformReq:Zp}=Q(),v2=FC();async function B2(e){return Zp(e),jp.searchByConditions(e)}a(B2,"searchByConditions");async function H2(e){Zp(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of jp.searchByHash(e))r&&t.push(r);return t}a(H2,"searchByHash");async function x2(e){Zp(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of jp.searchByValue(e))t.push(r);return t}a(x2,"searchByValue");function G2(e,t){try{let r=new P2(e);r.validate(),new v2(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(G2,"search")});var sd=g((o_e,kC)=>{"use strict";var F2=Cn();kC.exports={writeTransaction:q2};function q2(e,t,r){return F2.writeTransaction(e,t,r)}a(q2,"writeTransaction")});var KC=g((u_e,YC)=>{"use strict";var k2=vr(),V2=As(),VC=K(),$2=on(),c_e=sd(),Y2=require("clone"),tS=require("alasql"),K2=rd(),$C=require("util"),W2=$C.promisify(V2.getTableSchema),Q2=$C.promisify(k2.search),z2=U(),eS=Q();K2(tS);YC.exports={update:X2};var J2="There was a problem performing this update. Please check the logs and try again.";async function X2({statement:e,hdb_user:t}){let r=await W2(e.table.databaseid,e.table.tableid),n=j2(e.columns);eS.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=Y2(s),c=eS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=tS.parse(u).statements[0],l=await Q2(_),d=Z2(n,l);return e4(o,d,t)}a(X2,"update");function j2(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=tS.compile(`SELECT ${r.expression.toString()} AS [${z2.FUNC_VAL}] FROM ?`)}),t}catch(t){throw VC.error(t),new Error(J2)}}a(j2,"createUpdateRecord");function Z2(e,t){return eS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Z2,"buildUpdateRecords");async function e4(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await $2.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(e4,"updateRecords")});var QC=g((f_e,WC)=>{var t4=require("alasql"),r4=vr(),n4=K(),s4=Cn(),nS=require("util"),rS=Q(),i4=U(),o4=As(),__e=sd(),d_e=on(),a4="record",c4="successfully deleted",u4=nS.callbackify(f4),l4=nS.promisify(r4.search),_4=nS.promisify(o4.getTableSchema);WC.exports={convertDelete:u4};function d4(e){return`${e.deleted_hashes.length} ${a4}${e.deleted_hashes.length===1?"":"s"} ${c4}`}a(d4,"generateReturnMessage");async function f4({statement:e,hdb_user:t}){let r=await _4(e.table.databaseid,e.table.tableid);rS.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=rS.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=t4.parse(o).statements[0],u={operation:i4.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await l4(c);let _=await s4.deleteRecords(u);return rS.isEmptyOrZeroLength(_.message)&&(_.message=d4(_)),delete _.txn_time,_}catch(_){throw n4.error(_),_.hdb_code?_.message:_}}a(f4,"convertDelete")});var ZC=g((h_e,jC)=>{"use strict";var E4=ki(),{hdb_errors:zC}=ne(),{getDatabases:JC}=(Ae(),se(Fe));jC.exports={checkSchemaExists:XC,checkSchemaTableExists:h4,schema_describe:E4};async function XC(e){if(!JC()[e])return zC.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(XC,"checkSchemaExists");async function h4(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(h4,"checkSchemaTableExists")});var eu=g((p_e,m4)=>{m4.exports={name:"harperdb",version:"4.3.0-beta.14",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:"3.0.0-beta.10",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 iu={};$e(iu,{addAnalyticsListener:()=>su,recordAction:()=>qr,recordActionBinary:()=>an,setAnalyticsEnabled:()=>p4});function p4(e){cD=e}function qr(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=ad.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},ad.set(i,o)}id||S4()}function an(e,t,r,n,s){qr(!!e,t,r,n,s)}function su(e){_D.push(e)}function S4(){id=performance.now(),setTimeout(async()=>{let e=performance.now()-id;id=0;let t=[],r={time:Date.now(),period:e,threadId:ro.threadId,metrics:t};for(let[s,i]of ad){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:ro.threadId,byThread:!0,...n});for(let s of _D)s(t);ad=new Map,ro.parentPort?ro.parentPort.postMessage({type:lD,report:r}):mD({report:r})},uD).unref()}async function T4(e,t=6e4){let r=oS(),n=ED(),s=new Promise(p=>{let S=performance.now();setImmediate(()=>{let T=performance.now();T-S>5e3&&(0,tu.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,tu.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:X,distribution:z,threads:J,...de}=R;B||(B=1);let ce=k+(L?"-"+L:"");H!==void 0&&(ce+="-"+H),P!==void 0&&(ce+="-"+P);let fe=c.get(ce);if(fe){if(fe.threads){let Be=fe.threads[b];if(Be)fe=Be;else{fe.threads[b]=Object.assign({},de);continue}}fe.count||(fe.count=1);let Le=fe.count;for(let Be in de){let Dt=de[Be];typeof Dt=="number"&&(fe[Be]=(fe[Be]*Le+Dt*B)/(Le+B))}fe.count+=B,X>=0&&(fe.total+=X,fe.ratio=fe.total/fe.count)}else fe=Object.assign({period:t},R),delete fe.distribution,c.set(ce,fe),fe.byThread&&(fe.threads=[],fe.threads[b]=Object.assign({},de),_.push(fe));if(z){z=z.map(Be=>typeof Be=="number"?{value:Be,count:1}:Be);let Le=u.get(ce);Le?Le.push(...z):u.set(ce,z)}}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(X=>X);for(let X in B){if(typeof p[X]!="number")continue;let z=0;for(let J of k){let de=J[X];typeof de=="number"&&(z+=de)}p[X]=z}p.count=k.length,delete p.threads,delete p.byThread}for(let[p,S]of u){let T=c.get(p);S.sort((Be,Dt)=>Be.value>Dt.value?1:-1);let b=T.count-1,R=[],L=0,H=0,P;for(let Be of dD){let Dt=b*Be;for(;L<Dt;)P=S[H++],L+=P.count,H===1&&L--;let Ul=S[H>1?H-2:0];P||(P=S[0]),R.push(P.value-(P.value-Ul.value)*(L-Dt)/P.count)}let[k,B,X,z,J,de,ce,fe,Le]=R;Object.assign(T,{p1:k,p10:B,p25:X,median:z,p75:J,p90:de,p95:ce,p99:fe,p999:Le})}let d;for(let[p,S]of c)S.id=(0,od.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,od.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 oS(){return nD||(nD=ct({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function ED(){return sD||(sD=ct({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function A4(){hD=!0;let e=(0,nu.get)(iS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await T4(uD,e),await rD(oS(),g4),await rD(ED(),R4)},Math.min(e/2,2147483647)).unref()}function mD(e,t){let r=e.report;r.threadId=t?.threadId||ro.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,od.getNextMonotonicTime)(),oS().primaryStore.put(r.id,r),hD||A4(),O4&&(pD=y4(r))}async function y4(e){if(await pD,!oi){let r=(0,ru.dirname)((0,tu.getLogFilePath)());try{oi=await(0,sS.open)((0,ru.join)(r,"analytics.log"),"r+")}catch{oi=await(0,sS.open)((0,ru.join)(r,"analytics.log"),"w+")}}let t=(await oi.stat()).size;if(t>b4){let r=Buffer.alloc(t);await oi.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await oi.write(r,{position:0}),await oi.truncate(r.length),t=r.length}await oi.write(JSON.stringify(e)+`
|
|
8
8
|
`,t)}var ro,aD,tu,ru,sS,od,nu,iS,ad,cD,id,uD,lD,_D,dD,eD,tD,fD,g4,R4,nD,sD,hD,iD,oD,O4,pD,oi,b4,Is=Re(()=>{ro=require("worker_threads"),aD=x(tt());Ae();tu=x(K()),ru=require("path"),sS=require("fs/promises"),od=x(Lr()),nu=x(re()),iS=x(U());or();(0,nu.initSync)();ad=new Map,cD=(0,nu.get)(iS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(p4,"setAnalyticsEnabled");a(qr,"recordAction");et.recordAnalytics=qr;a(an,"recordActionBinary");id=0,uD=1e3,lD="analytics-report",_D=[];a(su,"addAnalyticsListener");dD=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(S4,"sendAnalytics");a(T4,"aggregation");eD=0,tD=0,fD=a(()=>new Promise(setImmediate),"rest");a(rD,"cleanup");g4=36e5,R4=31536e6;a(oS,"getRawAnalyticsTable");a(ED,"getAnalyticsTable");(0,aD.setChildListenerByType)(lD,mD);a(A4,"startScheduledTasks");iD=0,oD=new Map,O4=!1;a(mD,"recordAnalytics");b4=1e6;a(y4,"logAnalytics")});var dS=g((D_e,ND)=>{"use strict";var{decode:N4}=require("msgpackr"),{isMainThread:I_e,parentPort:w_e,threadId:C_e}=require("worker_threads"),ou=mt(),na=nt(),uS=U(),jt=K(),cS=re(),I4=U(),{onMessageByType:w4}=tt(),TD=Rs(),{recordAction:C4,recordActionBinary:D4}=(Is(),se(iu)),{publishToStream:L4}=ou,{ConsumerEvents:M4}=require("nats"),U4=vr(),{promisify:P4}=require("util"),gD=P4(setTimeout),ld=1e4,_d,ud,v4,B4,RD,au=new Map,sa=new Map;ND.exports={initialize:lS,ingestConsumer:_S,setSubscription:H4,setIgnoreOrigin:F4,getDatabaseSubscriptions:G4,updateConsumer:AD};async function lS(){w4(uS.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await AD(n)}),RD=!0,jt.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await ou.getNATSReferences();_d=e,ud=e.info.server_name,v4=t,B4=r}a(lS,"initialize");async function AD(e){if(e.status==="start"){let{js:t,jsm:r}=await OD(e.node_domain_name);_S(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=au.get(e.stream_name+e.node_domain_name);t&&(jt.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),au.set(e.stream_name+e.node_domain_name,"close")),sa.get(e.node_domain_name)==="failed"&&sa.set(e.node_domain_name,"close")}}a(AD,"updateConsumer");var dd=new Map;function H4(e,t,r){let n=dd.get(e);n||dd.set(e,n=new Map),n.set(t,r),RD||lS().then(x4)}a(H4,"setSubscription");async function x4(){let e=await U4.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+na.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions)if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await OD(r),!n))break;let{schema:o,table:c}=i,u=TD.createNatsTableStreamName(o,c);_S(u,n,s,r)}}}a(x4,"accessConsumers");async function OD(e){let t,r,n=1;for(;!r;)try{t=await _d.jetstream({domain:e}),r=await _d.jetstreamManager({domain:e})}catch(s){if(sa.get(e)==="close")break;sa.set(e,"failed"),n%10===1&&jt.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<ld?n++*100:ld;await gD(i)}return{js:t,jsm:r}}a(OD,"connectToRemoteJS");function G4(){return dd}a(G4,"getDatabaseSubscriptions");var bD;function F4(e){bD=e}a(F4,"setIgnoreOrigin");var yD=100,SD=new Array(yD),cd=0;async function _S(e,t,r,n){let{connection:s}=await ou.getNATSReferences();_d=s,ud=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,ud),jt.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(sa.get(n)==="close")break;o%10===1&&jt.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(jt.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await ou.createConsumer(r,e,ud,new Date(Date.now()).toISOString()));let l=o++*100<ld?o++*100:ld;await gD(l)}let c=!1,u;for(;!c;){if(au.get(e+n)==="close"||sa.get(n)==="close"){au.delete(e+n),c=!0;continue}u=await i.consume({max_messages:cS.get(uS.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100}),au.set(e+n,u);let _=!1;(async()=>{for await(let l of await u.status())if(l.type===M4.HeartbeatsMissed){let d=l.data;jt.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${u.consumer.stream}`),d===2&&(jt.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[cd],SD[cd]=q4(l).catch(d=>{jt.error(d)}),++cd>=yD&&(cd=0)}catch(l){l.message==="consumer deleted"?(jt.notify("Nats consumer deleted, closing messages for node:",n,"stream:",u.consumer.stream),await u.close(),c=!0):jt.error("Error consuming clustering ingest, restarting consumer",l)}ou.clearClientCache(),!c&&_&&await lS()}}a(_S,"ingestConsumer");async function q4(e){let t=N4(e.data);C4(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),jt.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=cS.get(uS.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(na.MSG_HEADERS.TRANSACTED_NODES)&&r.values(na.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(na.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!bD),D4(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(na.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;jt.trace("processing message:",o,c,_,(l?"records: "+l.map(L=>L?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),jt.trace(`messageProcessor nats msg id: ${e.headers.get(na.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=dd.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:aS(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:aS(o),value:H,expiresAt:E,id:d?.[P],table:_}));for(;u;)L.push({type:aS(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})}cS.get(I4.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&L4(e.subject.split(".").slice(0,-1).join("."),TD.createNatsTableStreamName(c,_),e.headers,e.data),await p}catch(o){jt.error(o)}e.ack()}a(q4,"messageProcessor");function aS(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(aS,"convertOperation")});var mt=g((H_e,VD)=>{"use strict";var Ut=re();Ut.initSync();var k4=require("fs-extra"),V4=require("semver"),lu=require("path"),{monotonicFactory:$4}=require("ulidx"),wD=$4(),Y4=require("util"),CD=require("child_process"),K4=Y4.promisify(CD.exec),W4=CD.spawn,Vt=nt(),De=U(),fd=Q(),vn=K(),Ed=Rs(),Q4=sd(),cu=Dr(),{broadcast:z4,onMessageByType:J4,getWorkerIndex:X4}=tt(),{isMainThread:DD}=require("worker_threads"),{Encoder:j4,decode:mS}=require("msgpackr"),LD=new j4,{isEmpty:oo}=fd,MD=Hr(),M_e=48*36e11;DD&&J4(De.ITC_EVENT_TYPES.RESTART,()=>{dr=void 0,io=void 0});var{connect:Z4,StorageType:e3,RetentionPolicy:t3,AckPolicy:pS,DeliverPolicy:SS,DiscardPolicy:r3,NatsConnection:U_e,JetStreamManager:P_e,JetStreamClient:v_e,StringCodec:B_e,JSONCodec:n3,createInbox:TS,headers:s3,ErrorCode:ID}=require("nats"),{PACKAGE_ROOT:i3}=U(),o3=eu(),{recordAction:a3}=(Is(),se(iu)),UD=n3(),c3="clustering",u3=o3.engines[Vt.NATS_SERVER_NAME],l3=lu.join(i3,"dependencies"),hS=lu.join(l3,`${process.platform}-${process.arch}`,Vt.NATS_BINARY_NAME),fS,ES,uu,no,so;VD.exports={runCommand:PD,checkNATSServerInstalled:_3,createConnection:gS,getConnection:hd,getJetStreamManager:_u,getJetStream:BD,getNATSReferences:Bn,getServerList:f3,createLocalStream:RS,listStreams:HD,deleteLocalStream:E3,getServerConfig:du,listRemoteStreams:h3,viewStream:m3,viewStreamIterator:p3,publishToStream:S3,request:R3,reloadNATS:AS,reloadNATSHub:A3,reloadNATSLeaf:O3,extractServerName:g3,requestErrorHandler:b3,createLocalTableStream:qD,createTableStreams:I3,purgeTableStream:kD,purgeSchemaTableStreams:w3,getStreamInfo:C3,updateLocalStreams:L3,closeConnection:d3,getJsmServerName:md,addNatsMsgHeader:xD,clearClientCache:vD,updateRemoteConsumer:y3,createConsumer:GD,updateConsumerIterator:N3};async function PD(e,t=void 0){let{stdout:r,stderr:n}=await K4(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
9
9
|
`,""));return r.replace(`
|
|
10
|
-
`,"")}a(PD,"runCommand");async function _3(){try{await k4.access(hS)}catch{return!1}let e=await PD(`${hS} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return V4.eq(t,u3)}a(_3,"checkNATSServerInstalled");async function gS(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await MD.getClusterUser();if(oo(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}vn.trace("create nats connection called");let i=await Z4({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Ut.get(De.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Ut.get(De.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Ut.get(De.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),vn.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&vn.error("Error with Nats client connection, connection closed",o),vD()}),i}a(gS,"createConnection");function vD(){dr=void 0,no=void 0,so=void 0,io=void 0}a(vD,"clearClientCache");async function d3(){dr&&(await dr.drain(),dr=void 0,no=void 0,so=void 0,io=void 0)}a(d3,"closeConnection");var dr,io;async function hd(){return io||(io=gS(Ut.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),dr=await io),dr||io}a(hd,"getConnection");async function _u(){if(no)return no;oo(dr)&&await hd();let{domain:e}=du(De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(oo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return no=await dr.jetstreamManager({domain:e,timeout:6e4}),no}a(_u,"getJetStreamManager");async function BD(){if(so)return so;oo(dr)&&await hd();let{domain:e}=du(De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(oo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return so=dr.jetstream({domain:e,timeout:6e4}),so}a(BD,"getJetStream");async function Bn(){let e=dr||await hd(),t=no||await _u(),r=so||await BD();return{connection:e,jsm:t,js:r}}a(Bn,"getNATSReferences");async function f3(e){let t=Ut.get(De.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await MD.getClusterUser(),s=await gS(t,r,n),i=TS(),o=s.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=UD.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 fd.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(f3,"getServerList");async function RS(e,t){let{jsm:r}=await Bn(),n=Ut.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Ut.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Ut.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:e3.File,retention:t3.Limits,subjects:t,discard:r3.Old,max_msgs:s,max_bytes:i,max_age:n})}a(RS,"createLocalStream");async function HD(){let{jsm:e}=await Bn(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(HD,"listStreams");async function E3(e){let{jsm:t}=await Bn();await t.streams.delete(e)}a(E3,"deleteLocalStream");async function h3(e){let{connection:t}=await Bn(),r=[],n=TS(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(UD.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(h3,"listRemoteStreams");async function m3(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Bn(),i=wD(),o={durable_name:i,ack_policy:pS.Explicit};t&&(o.deliver_policy=SS.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=mS(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(Vt.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(m3,"viewStream");async function*p3(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Bn(),i=wD(),o={durable_name:i,ack_policy:pS.Explicit};t&&(o.deliver_policy=SS.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=mS(_.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(Vt.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(p3,"viewStreamIterator");async function S3(e,t,r,n){vn.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=xD(n,r);let{js:s}=await Bn(),i=await md(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:LD.encode(n);try{vn.trace(`publishToStream publishing to subject: ${o}`),a3(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 FD(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){vn.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await RS(t,[o]),await s.publish(o,c,{headers:r})}else throw u}});throw u}}a(S3,"publishToStream");function xD(e,t){t===void 0&&(t=s3());let r=Ut.get(De.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Vt.MSG_HEADERS.ORIGIN)&&r&&t.append(Vt.MSG_HEADERS.ORIGIN,r),t}a(xD,"addNatsMsgHeader");function du(e){e=e.toLowerCase();let t=lu.join(Ut.get(De.CONFIG_PARAMS.ROOTPATH),c3);if(e===De.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return oo(ES)&&(ES={port:cu.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:cu.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_NODENAME)+Vt.SERVER_SUFFIX.HUB,config_file:Vt.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:lu.join(t,Vt.PID_FILES.HUB),hdb_nats_path:t}),ES;if(e===De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return oo(fS)&&(fS={port:cu.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:cu.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_NODENAME)+Vt.SERVER_SUFFIX.LEAF,config_file:Vt.NATS_CONFIG_FILES.LEAF_SERVER,domain:cu.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_NODENAME)+Vt.SERVER_SUFFIX.LEAF,pid_file_path:lu.join(t,Vt.PID_FILES.LEAF),hdb_nats_path:t}),fS;vn.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(du,"getServerConfig");async function GD(e,t,r,n){try{await e.consumers.add(t,{ack_policy:pS.Explicit,durable_name:r,deliver_policy:SS.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(GD,"createConsumer");async function T3(e,t,r){await e.consumers.delete(t,r)}a(T3,"removeConsumer");function g3(e){return e.split(".")[1]}a(g3,"extractServerName");async function R3(e,t,r=6e4,n=TS()){if(!fd.isObject(t))throw new Error("data param must be an object");let s=LD.encode(t),{connection:i}=await Bn(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return mS(c.data)}a(R3,"request");function AS(e){return new Promise(async(t,r)=>{let n=W4(hS,["--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(AS,"reloadNATS");async function A3(){let{pid_file_path:e}=du(De.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await AS(e)}a(A3,"reloadNATSHub");async function O3(){let{pid_file_path:e}=du(De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await AS(e)}a(O3,"reloadNATSLeaf");function b3(e,t,r){let n;switch(e.code){case ID.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case ID.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(b3,"requestErrorHandler");async function y3(e,t){let r=t+Vt.SERVER_SUFFIX.LEAF,{connection:n}=await Bn(),{jsm:s}=await U3(r),{schema:i,table:o}=e,c=Ed.createNatsTableStreamName(i,o),u=e.start_time?e.start_time:new Date(Date.now()).toISOString();await FD(async()=>{if(e.subscribe===!0)await GD(s,c,n.info.server_name,u);else try{await T3(s,c,n.info.server_name)}catch(_){vn.trace(_)}})}a(y3,"updateRemoteConsumer");async function N3(e,t,r,n){let s=Ed.createNatsTableStreamName(e,t),i=r+Vt.SERVER_SUFFIX.LEAF,o={type:De.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!DD&&X4()<Ut.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=dS();await c(o)}await z4(o),n==="stop"&&await fd.async_set_timeout(1e3)}a(N3,"updateConsumerIterator");function FD(e){return Q4.writeTransaction(De.SYSTEM_SCHEMA_NAME,De.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(FD,"exclusiveLock");async function qD(e,t){let r=Ed.createNatsTableStreamName(e,t),n=await md(),s=D3(e,t,n);await RS(r,[s])}a(qD,"createLocalTableStream");async function I3(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await qD(n,s)}}a(I3,"createTableStreams");async function kD(e,t){if(Ut.get(De.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Ed.createNatsTableStreamName(e,t),{jsm:n}=await Bn();await n.streams.purge(r)}catch(r){if(r.message==="stream not found")vn.warn(r);else throw r}}a(kD,"purgeTableStream");async function w3(e,t){if(Ut.get(De.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await kD(e,t[r])}a(w3,"purgeSchemaTableStreams");async function C3(e){return(await _u()).streams.info(e)}a(C3,"getStreamInfo");function D3(e,t,r){return`${Vt.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(D3,"createSubjectName");async function md(){if(uu)return uu;if(uu=(await _u())?.nc?.info?.server_name,uu===void 0)throw new Error("Unable to get jetstream manager server name");return uu}a(md,"getJsmServerName");async function L3(){let e=await _u(),t=await md(),r=await HD();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=M3(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(".");vn.trace(`Updating stream subject name from: ${i} to: ${l}`),s.subjects[0]=l,await e.streams.update(s.name,s)}}a(L3,"updateLocalStreams");function M3(e){let{config:t}=e,r=!1,n=Ut.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Ut.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Ut.get(De.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(M3,"updateStreamLimits");async function U3(e){let t,r;try{t=await dr.jetstream({domain:e}),r=await dr.jetstreamManager({domain:e})}catch(n){throw vn.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(U3,"connectToRemoteJS")});var gd=g((F_e,WD)=>{"use strict";var ia=S_(),oa=ZC(),P3=K(),v3=require("uuid").v4,G_e=require("clone"),Sd=Os(),aa=U(),B3=require("util"),ai=Cn(),{handleHDBError:fr,hdb_errors:H3}=ne(),{HDB_ERROR_MSGS:pd,HTTP_STATUS_CODES:Er}=H3,{SchemaEventMsg:Td}=Dn(),$D=mt(),{getDatabases:x3}=(Ae(),se(Fe)),{transformReq:ca}=Q();WD.exports={createSchema:G3,createSchemaStructure:YD,createTable:F3,createTableStructure:KD,createAttribute:Y3,dropSchema:q3,dropTable:k3,dropAttribute:V3,getBackup:K3};async function G3(e){let t=await YD(e);return Sd.signalSchemaChange(new Td(process.pid,e.operation,e.schema)),t}a(G3,"createSchema");async function YD(e){let t=ia.schema_object(e);if(t)throw fr(t,t.message,Er.BAD_REQUEST,void 0,void 0,!0);if(ca(e),!await oa.checkSchemaExists(e.schema))throw fr(new Error,pd.SCHEMA_EXISTS_ERR(e.schema),Er.BAD_REQUEST,aa.LOG_LEVELS.ERROR,pd.SCHEMA_EXISTS_ERR(e.schema),!0);return await ai.createSchema(e),`database '${e.schema}' successfully created`}a(YD,"createSchemaStructure");async function F3(e){return ca(e),e.hash_attribute=e.primary_key??e.hash_attribute,await KD(e)}a(F3,"createTable");async function KD(e){let t=ia.create_table_object(e);if(t)throw fr(t,t.message,Er.BAD_REQUEST,void 0,void 0,!0);if(ia.validateTableResidence(e.residence),!await oa.checkSchemaTableExists(e.schema,e.table))throw fr(new Error,pd.TABLE_EXISTS_ERR(e.schema,e.table),Er.BAD_REQUEST,aa.LOG_LEVELS.ERROR,pd.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:v3(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ai.createTable(n,e);else throw fr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Er.BAD_REQUEST);else await ai.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(KD,"createTableStructure");async function q3(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=ia.schema_object(e),n=t??r;if(n)throw fr(n,n.message,Er.BAD_REQUEST,void 0,void 0,!0);ca(e);let s=await oa.checkSchemaExists(e.schema);if(s)throw fr(new Error,s,Er.NOT_FOUND,aa.LOG_LEVELS.ERROR,s,!0);let i=await oa.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await ai.dropSchema(e),Sd.signalSchemaChange(new Td(process.pid,e.operation,e.schema)),await $D.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(q3,"dropSchema");async function k3(e){let t=ia.table_object(e);if(t)throw fr(t,t.message,Er.BAD_REQUEST,void 0,void 0,!0);ca(e);let r=await oa.checkSchemaTableExists(e.schema,e.table);if(r)throw fr(new Error,r,Er.NOT_FOUND,aa.LOG_LEVELS.ERROR,r,!0);return await ai.dropTable(e),await $D.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(k3,"dropTable");async function V3(e){let t=ia.attribute_object(e);if(t)throw fr(t,t.message,Er.BAD_REQUEST,void 0,void 0,!0);ca(e);let r=await oa.checkSchemaTableExists(e.schema,e.table);if(r)throw fr(new Error,r,Er.NOT_FOUND,aa.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw fr(new Error,"You cannot drop a hash attribute",Er.BAD_REQUEST,void 0,void 0,!0);if(aa.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw fr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Er.BAD_REQUEST,void 0,void 0,!0);try{return await ai.dropAttribute(e),$3(e),Sd.signalSchemaChange(new Td(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw P3.error(`Got an error deleting attribute ${B3.inspect(e)}.`),n}}a(V3,"dropAttribute");function $3(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($3,"dropAttributeFromGlobal");async function Y3(e){ca(e);let t=x3()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw fr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Er.BAD_REQUEST,void 0,void 0,!0);return await ai.createAttribute(e),Sd.signalSchemaChange(new Td(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(Y3,"createAttribute");function K3(e){return ai.getBackup(e)}a(K3,"getBackup")});var zD=g((k_e,QD)=>{"use strict";var{OPERATIONS_ENUM:W3}=U(),OS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=W3.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};QD.exports=OS});var bS=g((Y_e,eL)=>{"use strict";var Q3=Cn(),$_e=zD(),Rd=Q(),Ad=U(),z3=re(),{handleHDBError:JD,hdb_errors:J3}=ne(),{HDB_ERROR_MSGS:XD,HTTP_STATUS_CODES:jD}=J3,X3=Object.values(Ad.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),ZD="To use this operation audit log must be enabled in harperdb-config.yaml";eL.exports=j3;async function j3(e){if(Rd.isEmpty(e.schema))throw new Error(XD.SCHEMA_REQUIRED_ERR);if(Rd.isEmpty(e.table))throw new Error(XD.TABLE_REQUIRED_ERR);if(!z3.get(Ad.CONFIG_PARAMS.LOGGING_AUDITLOG))throw JD(new Error,ZD,jD.BAD_REQUEST,Ad.LOG_LEVELS.ERROR,ZD,!0);let t=Rd.checkSchemaTableExist(e.schema,e.table);if(t)throw JD(new Error,t,jD.NOT_FOUND,Ad.LOG_LEVELS.ERROR,t,!0);if(!Rd.isEmpty(e.search_type)&&X3.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await Q3.readAuditLog(e)}a(j3,"readAuditLog")});var rL=g((W_e,tL)=>{"use strict";var{OPERATIONS_ENUM:Z3}=U(),yS=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Z3.GET_BACKUP,this.schema=t,this.table=r}};tL.exports=yS});var iL=g((X_e,sL)=>{"use strict";var eX=Cn(),z_e=rL(),NS=Q(),tX=U(),J_e=re(),{handleHDBError:rX,hdb_errors:nX}=ne(),{HDB_ERROR_MSGS:nL,HTTP_STATUS_CODES:sX}=nX;sL.exports=iX;async function iX(e){if(NS.isEmpty(e.schema))throw new Error(nL.SCHEMA_REQUIRED_ERR);if(NS.isEmpty(e.table))throw new Error(nL.TABLE_REQUIRED_ERR);let t=NS.checkSchemaTableExist(e.schema,e.table);if(t)throw rX(new Error,t,sX.NOT_FOUND,tX.LOG_LEVELS.ERROR,t,!0);return await eX.getBackup(read_audit_log_object)}a(iX,"getBackup")});var _L=g((Z_e,lL)=>{var ci=require("validate.js"),aL=Ze(),ua=U(),{handleHDBError:oX,hdb_errors:aX}=ne(),{HDB_ERROR_MSGS:lt,HTTP_STATUS_CODES:cX}=aX,IS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),uX={STRUCTURE_USER:"structure_user"},oL=Object.values(ua.ROLE_TYPES_ENUM),lX="attribute_permissions",_X="attribute_name",{PERMS_CRUD_ENUM:la}=ua,dX=[lX,...Object.values(la)],cL=[la.READ,la.INSERT,la.UPDATE],fX=[_X,...cL];function EX(e){let t=IS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,uL(e,t)}a(EX,"addRoleValidation");function hX(e){let t=IS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,uL(e,t)}a(hX,"alterRoleValidation");function mX(e){let t=IS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,aL.validateObject(e,t)}a(mX,"dropRoleValidation");var pX=["operation","role","id","permission","hdb_user","hdb_auth_header"];function uL(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)pX.includes(n[o])||s.push(n[o]);s.length>0&&pt(lt.INVALID_ROLE_JSON_KEYS(s),r);let i=aL.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{pt(o,r)}),e.permission){let o=SX(e);o&&pt(o,r),oL.forEach(c=>{e.permission[c]&&!ci.isBoolean(e.permission[c])&&pt(lt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(oL.indexOf(o)<0){if(o===uX.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]||pt(lt.SCHEMA_NOT_FOUND(d),r)}continue}pt(lt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){pt(lt.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]){pt(lt.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{dX.includes(l)||pt(lt.INVALID_PERM_KEY(l),r,o,u)}),Object.values(la).forEach(l=>{ci.isDefined(_[l])?ci.isBoolean(_[l])||pt(lt.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):pt(lt.TABLE_PERM_MISSING(l),r,o,u)}),ci.isDefined(_.attribute_permissions)){if(!ci.isArray(_.attribute_permissions)){pt(lt.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{pt(lt.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=>{!fX.includes(p)&&p!==la.DELETE&&pt(lt.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!ci.isDefined(E.attribute_name)){pt(lt.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){pt(lt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}cL.forEach(p=>{ci.isDefined(E[p])?ci.isBoolean(E[p])||pt(lt.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):pt(lt.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}`;pt(lt.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return TX(r)}a(uL,"customValidate");lL.exports={addRoleValidation:EX,alterRoleValidation:hX,dropRoleValidation:mX};function SX(e){let{operation:t,permission:r}=e;if(t===ua.OPERATIONS_ENUM.ADD_ROLE||t===ua.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 lt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?ua.ROLE_TYPES_ENUM.SUPER_USER:ua.ROLE_TYPES_ENUM.CLUSTER_USER;return lt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(SX,"validateNoSUPerms");function TX(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:lt.ROLE_PERMS_ERROR,...e};return oX(new Error,n,cX.BAD_REQUEST)}else return null}a(TX,"generateRolePermResponse");function pt(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(pt,"addPermError")});var US=g((tde,hL)=>{"use strict";var dL=on(),fL=vr(),gX=Wi(),CS=_L(),DS=Os(),RX=require("uuid").v4,AX=require("util"),Od=U(),OX=Q(),LS=fL.searchByValue,bX=fL.searchByHash,yX=AX.promisify(gX.delete),NX=es(),IX=ea(),{hdb_errors:wX,handleHDBError:ao}=ne(),{HDB_ERROR_MSGS:EL,HTTP_STATUS_CODES:fu}=wX,{UserEventMsg:MS}=Dn();hL.exports={addRole:CX,alterRole:DX,dropRole:LX,listRoles:MX};function wS(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(wS,"scrubRoleDetails");async function CX(e){let t=CS.addRoleValidation(e);if(t)throw t;e=wS(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 LS(r)||[])}catch(i){throw ao(i)}if(n&&n.length>0)throw ao(new Error,EL.ROLE_ALREADY_EXISTS(e.role),fu.CONFLICT,void 0,void 0,!0);e.id||(e.id=RX());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await dL.insert(s),DS.signalUserChange(new MS(process.pid)),e=wS(e),e}a(CX,"addRole");async function DX(e){let t=CS.alterRoleValidation(e);if(t)throw t;e=wS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await dL.update(r)}catch(s){throw ao(s)}if(n&&n?.message==="updated 0 of 1 records")throw ao(new Error,"Invalid role id",fu.BAD_REQUEST,void 0,void 0,!0);return await DS.signalUserChange(new MS(process.pid)),e}a(DX,"alterRole");async function LX(e){let t=CS.dropRoleValidation(e);if(t)throw ao(new Error,t,fu.BAD_REQUEST,void 0,void 0,!0);let r=new IX(Od.SYSTEM_SCHEMA_NAME,Od.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await bX(r));if(n.length===0)throw ao(new Error,EL.ROLE_NOT_FOUND,fu.NOT_FOUND,void 0,void 0,!0);let s=new NX(Od.SYSTEM_SCHEMA_NAME,Od.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await LS(s)),o=!1;if(OX.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw ao(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,fu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await yX(c),DS.signalUserChange(new MS(process.pid)),`${n[0].role} successfully deleted`}a(LX,"dropRole");async function MX(){return LS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(MX,"listRoles")});var TL=g((nde,SL)=>{"use strict";var UX=re(),ui=require("joi"),PX=Ze(),mL=require("moment"),vX=require("fs-extra"),PS=require("path"),BX=require("lodash"),Eu=U(),{LOG_LEVELS:co}=U(),HX="YYYY-MM-DD hh:mm:ss",xX=PS.resolve(__dirname,"../logs");SL.exports=function(e){return PX.validateBySchema(e,GX)};var GX=ui.object({from:ui.custom(pL),until:ui.custom(pL),level:ui.valid(co.NOTIFY,co.FATAL,co.ERROR,co.WARN,co.INFO,co.DEBUG,co.TRACE),order:ui.valid("asc","desc"),limit:ui.number().min(1),start:ui.number().min(0),log_name:ui.custom(FX)});function pL(e,t){if(mL(e,mL.ISO_8601).format(HX)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(pL,"validateDatetime");function FX(e,t){if(BX.invert(Eu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=UX.get(Eu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?Eu.LOG_NAMES.HDB:e,i=s===Eu.LOG_NAMES.INSTALL?PS.join(xX,Eu.LOG_NAMES.INSTALL):PS.join(n,s);return vX.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(FX,"validateReadLogPath")});var BS=g((ide,RL)=>{"use strict";var bd=U(),qX=K(),kX=re(),VX=TL(),vS=require("path"),gL=require("fs-extra"),{once:$X}=require("events"),{handleHDBError:YX,hdb_errors:KX}=ne(),{PACKAGE_ROOT:WX}=U(),QX=vS.join(WX,"logs"),zX=1e3,JX=200;RL.exports=XX;async function XX(e){let t=VX(e);if(t)throw YX(t,t.message,KX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=kX.get(bd.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?bd.LOG_NAMES.HDB:e.log_name,s=n===bd.LOG_NAMES.INSTALL?vS.join(QX,bd.LOG_NAMES.INSTALL):vS.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?zX: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(gL.statSync(s).size-(h+5)*JX,0));let S=gL.createReadStream(s,{start:p});S.on("error",P=>{qX.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,X;for(;(X=k.exec(P))&&!S.destroyed;){L&&(L.message=P.slice(B,X.index),H(L));let[z,J,de]=X,ce=de.split("] ["),fe=ce[0],Le=ce[1];ce.splice(0,2),L={timestamp:J,thread:fe,level:Le,tags:ce,message:""},B=X.index+z.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,X;switch(!0){case(i&&c&&_):k=new Date(P.timestamp),B=new Date(u),X=new Date(l),P.level===o&&k>=B&&k<=X&&T<E?T++:P.level===o&&k>=B&&k<=X&&(li(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&&(li(P,f,b),T++,T===h&&S.destroy());break;case(i&&_):k=new Date(P.timestamp),X=new Date(l),P.level===o&&k<=X&&T<E?T++:P.level===o&&k<=X&&(li(P,f,b),T++,T===h&&S.destroy());break;case(c&&_):k=new Date(P.timestamp),B=new Date(u),X=new Date(l),k>=B&&k<=X&&T<E?T++:k>=B&&k<=X&&(li(P,f,b),T++,T===h&&S.destroy());break;case i:P.level===o&&T<E?T++:P.level===o&&(li(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&&(li(P,f,b),T++,T===h&&S.destroy());break;case _:k=new Date(P.timestamp),X=new Date(l),k<=X&&T<E?T++:k<=X&&T>=E&&(li(P,f,b),T++,T===h&&S.destroy());break;default:T<E?T++:(li(P,f,b),T++,T===h&&S.destroy())}}return a(H,"onLogMessage"),await $X(S,"close"),b}a(XX,"readLog");function li(e,t,r){t==="desc"?jX(e,r):t==="asc"?ZX(e,r):r.push(e)}a(li,"pushLineToResult");function jX(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(jX,"insertDescending");function ZX(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(ZX,"insertAscending")});var yd=g((lde,yL)=>{"use strict";var HS=require("joi"),{string:hu,boolean:AL,date:ej}=HS.types(),tj=Ze(),{validateSchemaExists:ade,validateTableExists:cde,validateSchemaName:ude}=Jn(),rj=U(),nj=nt(),OL=re();OL.initSync();var sj=hu.invalid(OL.get(rj.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(nj.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(),bL={operation:hu.valid("add_node","update_node","set_node_replication"),node_name:sj,subscriptions:HS.array().items({table:hu.optional(),schema:hu.optional(),database:hu.optional(),subscribe:AL.required(),publish:AL.required().custom(oj),start_time:ej.iso()}).min(1).required()};function ij(e){return tj.validateBySchema(e,HS.object(bL))}a(ij,"addUpdateNodeValidator");function oj(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(oj,"checkForFalsy");yL.exports={addUpdateNodeValidator:ij,validation_schema:bL}});var IL=g((dde,NL)=>{var aj=Ze(),cj={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};NL.exports=function(e){return aj.validateObject(e,cj)}});var GS=g((fde,wL)=>{"use strict";var uj=U().OPERATIONS_ENUM,xS=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=uj.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};wL.exports=xS});var DL=g((hde,CL)=>{"use strict";var lj={OPERATION:"operation",REFRESH:"refresh"},FS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},qS=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};CL.exports={JWTTokens:FS,TOKEN_TYPE_ENUM:lj,JWTRSAKeys:qS}});var Su=g((pde,PL)=>{"use strict";var pu=require("jsonwebtoken"),kS=require("fs-extra"),VS=Q(),cn=U(),{handleHDBError:hr,hdb_errors:_j}=ne(),{HTTP_STATUS_CODES:mr,AUTHENTICATION_ERROR_MSGS:pr}=_j,mu=K(),LL=P_(),KS=Hr(),dj=on().update,fj=GS(),Ej=Os(),{UserEventMsg:hj}=Dn(),_i=re();_i.initSync();var $S=require("path"),{JWTTokens:mj,JWTRSAKeys:pj,TOKEN_TYPE_ENUM:Nd}=DL(),Sj=_i.get(cn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?_i.get(cn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",Tj=_i.get(cn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?_i.get(cn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Id="RS256",YS;PL.exports={createTokens:gj,validateOperationToken:Aj,refreshOperationToken:Rj,validateRefreshToken:UL};async function gj(e){if(VS.isEmpty(e)||typeof e!="object")throw hr(new Error,pr.INVALID_AUTH_OBJECT,mr.BAD_REQUEST,void 0,void 0,!0);if(VS.isEmpty(e.username))throw hr(new Error,pr.USERNAME_REQUIRED,mr.BAD_REQUEST,void 0,void 0,!0);if(VS.isEmpty(e.password))throw hr(new Error,pr.PASSWORD_REQUIRED,mr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await KS.findAndValidateUser(e.username,e.password),!t)throw hr(new Error,pr.INVALID_CREDENTIALS,mr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw mu.error(f),hr(new Error,pr.INVALID_CREDENTIALS,mr.UNAUTHORIZED,void 0,void 0,!0)}let r=await wd(),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 ML(i,r.private_key,r.passphrase),c=await pu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:Tj,algorithm:Id,subject:Nd.REFRESH}),u=LL.hash(c),_=new fj(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await dj(_)}catch(f){mu.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw hr(new Error,pr.REFRESH_TOKEN_SAVE_FAILED,mr.INTERNAL_SERVER_ERROR);return Ej.signalUserChange(new hj(process.pid)),new mj(o,c)}a(gj,"createTokens");async function ML(e,t,r){return await pu.sign(e,{key:t,passphrase:r},{expiresIn:Sj,algorithm:Id,subject:Nd.OPERATION})}a(ML,"signOperationToken");async function wd(){if(YS===void 0)try{let e=$S.join(_i.getHdbBasePath(),cn.LICENSE_KEY_DIR_NAME,cn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=$S.join(_i.getHdbBasePath(),cn.LICENSE_KEY_DIR_NAME,cn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=$S.join(_i.getHdbBasePath(),cn.LICENSE_KEY_DIR_NAME,cn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await kS.readFile(e)).toString(),s=(await kS.readFile(t)).toString(),i=(await kS.readFile(r)).toString();YS=new pj(i,s,n)}catch(e){throw mu.error(e),hr(new Error,pr.NO_ENCRYPTION_KEYS,mr.INTERNAL_SERVER_ERROR)}return YS}a(wd,"getJWTRSAKeys");async function Rj(e){if(!e)throw hr(new Error,pr.INVALID_BODY,mr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw hr(new Error,pr.REFRESH_TOKEN_REQUIRED,mr.BAD_REQUEST,void 0,void 0,!0);await UL(e.refresh_token);let t=await wd(),r=await pu.decode(e.refresh_token);return{operation_token:await ML({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(Rj,"refreshOperationToken");async function Aj(e){try{let t=await wd(),r=await pu.verify(e,t.public_key,{algorithms:Id,subject:Nd.OPERATION});return await KS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw mu.warn(t),t.name&&t.name==="TokenExpiredError"?hr(new Error,pr.TOKEN_EXPIRED,mr.FORBIDDEN):hr(new Error,pr.INVALID_TOKEN,mr.UNAUTHORIZED)}}a(Aj,"validateOperationToken");async function UL(e){let t;try{let r=await wd(),n=await pu.verify(e,r.public_key,{algorithms:Id,subject:Nd.REFRESH});t=await KS.findAndValidateUser(n.username,void 0,!1)}catch(r){throw mu.warn(r),r.name&&r.name==="TokenExpiredError"?hr(new Error,pr.TOKEN_EXPIRED,mr.FORBIDDEN):hr(new Error,pr.INVALID_TOKEN,mr.UNAUTHORIZED)}if(!LL.validate(t.refresh_token,e))throw hr(new Error,pr.INVALID_TOKEN,mr.UNAUTHORIZED);return t}a(UL,"validateRefreshToken")});var WS=g((gde,HL)=>{"use strict";var Oj=IL(),_a=require("passport"),bj=require("passport-local").Strategy,yj=require("passport-http").BasicStrategy,Nj=require("util"),Ij=Hr(),BL=Nj.callbackify(Ij.findAndValidateUser),Tde=Ir(),wj=U(),vL=Su();_a.use(new bj(function(e,t,r){BL(e,t,r)}));_a.use(new yj(function(e,t,r){BL(e,t,r)}));_a.serializeUser(function(e,t){t(null,e)});_a.deserializeUser(function(e,t){t(null,e)});function Cj(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":_a.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===wj.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?vL.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):vL.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:_a.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(Cj,"authorize");function Dj(e,t){let r=Oj(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(Dj,"checkPermissions");HL.exports={authorize:Cj,checkPermissions:Dj}});var da=g((Ade,xL)=>{"use strict";var QS=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},zS=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};xL.exports={Node:QS,NodeSubscription:zS}});var FL=g((bde,GL)=>{"use strict";var Lj=U().OPERATIONS_ENUM,JS=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Lj.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};GL.exports=JS});var Tu=g((Nde,qL)=>{"use strict";var XS=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},jS=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)}};qL.exports={RemotePayloadObject:XS,RemotePayloadSubscription:jS}});var VL=g((wde,kL)=>{"use strict";var ZS=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}};kL.exports=ZS});var KL=g((Ude,YL)=>{"use strict";var Mj=VL(),Dde=ft(),$L=Ye(),Uj=K(),{getSchemaPath:Lde,getTransactionAuditStorePath:Mde}=Qe(),{getDatabases:Pj}=(Ae(),se(Fe));YL.exports=vj;async function vj(e){let t=new Mj;try{let r=Pj()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await $L.environmentDataSize(schema_path,e.name),o=await $L.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){Uj.warn(`unable to stat table dbi due to ${r}`)}return t}a(vj,"lmdbGetTableSize")});var QL=g((vde,WL)=>{"use strict";var eT=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}};WL.exports=eT});var fa=g((Fde,ZL)=>{"use strict";var Bj=require("fs-extra"),Hj=require("path"),Zt=require("systeminformation"),di=K(),zL=mt(),Hde=nt(),Dd=U(),xj=KL(),jL=ki(),{getThreadInfo:JL}=tt(),lT=re();lT.initSync();var Gj=QL(),{openEnvironment:xde}=Ye(),{getSchemaPath:Gde}=Qe(),{database:Fj}=(Ae(),se(Fe)),Cd;ZL.exports={getHDBProcessInfo:sT,getNetworkInfo:oT,getDiskInfo:iT,getMemoryInfo:nT,getCPUInfo:rT,getTimeInfo:tT,getSystemInformation:aT,systemInformation:qj,getTableSize:cT,getMetrics:uT};function tT(){return Zt.time()}a(tT,"getTimeInfo");async function rT(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Zt.cpu();l.cpu_speed=await Zt.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 Zt.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:X,...z}=R;b.cpus.push(z)}),l.current_load=b,l}catch(e){return di.error(`error in getCPUInfo: ${e}`),{}}}a(rT,"getCPUInfo");async function nT(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Zt.mem();return Object.assign(s,process.memoryUsage())}catch(e){return di.error(`error in getMemoryInfo: ${e}`),{}}}a(nT,"getMemoryInfo");async function sT(){let e={core:[],clustering:[]};try{let t=await Zt.processes(),r;try{r=Number.parseInt(await Bj.readFile(Hj.join(lT.get(Dd.CONFIG_PARAMS.ROOTPATH),Dd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Dd.NODE_ERROR_CODES.ENOENT)di.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return di.error(`error in getHDBProcessInfo: ${t}`),e}}a(sT,"getHDBProcessInfo");async function iT(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Zt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Zt.fsStats();return e.read_write=_,e.size=await Zt.fsSize(),e}catch(t){return di.error(`error in getDiskInfo: ${t}`),e}}a(iT,"getDiskInfo");async function oT(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Zt.networkInterfaceDefault(),e.latency=await Zt.inetChecksite("google.com"),(await Zt.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 Zt.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return di.error(`error in getNetworkInfo: ${t}`),e}}a(oT,"getNetworkInfo");async function aT(){if(Cd!==void 0)return Cd;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Zt.osInfo();e=c;let u=await Zt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,Cd=e,Cd}catch(t){return di.error(`error in getSystemInformation: ${t}`),e}}a(aT,"getSystemInformation");async function cT(){let e=[],t=await jL.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await xj(n));return e}a(cT,"getTableSize");async function uT(){let e=await jL.describeAll(),t={};for(let r in e){let n=t[r]={};for(let s in e[r])try{let i=Fj({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){di.notify(`Error getting stats for table ${s}: ${i}`)}}return t}a(uT,"getMetrics");async function XL(){if(lT.get(Dd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await zL.getNATSReferences(),t=await zL.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(XL,"getNatsStreamInfo");async function qj(e){let t=new Gj;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await aT(),t.time=tT(),t.cpu=await rT(),t.memory=await nT(),t.disk=await iT(),t.network=await oT(),t.harperdb_processes=await sT(),t.table_size=await cT(),t.metrics=await uT(),t.threads=await JL(),t.replication=await XL(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await aT();break;case"time":t.time=tT();break;case"cpu":t.cpu=await rT();break;case"memory":t.memory=await nT();break;case"disk":t.disk=await iT();break;case"network":t.network=await oT();break;case"harperdb_processes":t.harperdb_processes=await sT();break;case"table_size":t.table_size=await cT();break;case"database_metrics":case"metrics":t.metrics=await uT();break;case"threads":t.threads=await JL();break;case"replication":t.replication=await XL();break;default:break}return t}a(qj,"systemInformation")});var Md=g((kde,eM)=>{"use strict";eM.exports={version:kj,printVersion:Vj};var Ld=eu();function kj(){if(Ld)return Ld.version}a(kj,"version");function Vj(){Ld&&console.log(`HarperDB Version ${Ld.version}`)}a(Vj,"printVersion")});var ws=g((Kde,sM)=>{"use strict";var $j=on(),_T=Q(),Yj=require("util"),uo=U(),tM=re();tM.initSync();var Kj=WS(),rM=vr(),{Node:$de,NodeSubscription:Yde}=da(),Wj=ea(),Qj=FL(),{RemotePayloadObject:zj,RemotePayloadSubscription:Jj}=Tu(),{handleHDBError:Xj,hdb_errors:jj}=ne(),{HTTP_STATUS_CODES:Zj,HDB_ERROR_MSGS:eZ}=jj,tZ=es(),rZ=fa(),nZ=Md(),{getDatabases:sZ}=(Ae(),se(Fe)),iZ=Yj.promisify(Kj.authorize),oZ=rM.searchByHash,aZ=rM.searchByValue;sM.exports={authHeaderToUser:cZ,isEmpty:uZ,getNodeRecord:lZ,upsertNodeRecord:_Z,buildNodePayloads:dZ,checkClusteringEnabled:fZ,getAllNodeRecords:EZ,getSystemInfo:hZ,reverseSubscription:nM};async function cZ(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await iZ(t,null),e}a(cZ,"authHeaderToUser");function uZ(e){return e==null}a(uZ,"isEmpty");async function lZ(e){let t=new Wj(uo.SYSTEM_SCHEMA_NAME,uo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return oZ(t)}a(lZ,"getNodeRecord");async function _Z(e){let t=new Qj(uo.SYSTEM_SCHEMA_NAME,uo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return $j.upsert(t)}a(_Z,"upsertNodeRecord");function nM(e){if(_T.isEmpty(e.subscribe)||_T.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(nM,"reverseSubscription");function dZ(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=_T.getTableHashAttribute(u,_),{subscribe:d,publish:f}=nM(c),E=sZ()[u]?.[_],h=new Jj(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new zj(r,t,s,n)}a(dZ,"buildNodePayloads");function fZ(){if(!tM.get(uo.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Xj(new Error,eZ.CLUSTERING_NOT_ENABLED,Zj.BAD_REQUEST,void 0,void 0,!0)}a(fZ,"checkClusteringEnabled");async function EZ(){let e=new tZ(uo.SYSTEM_SCHEMA_NAME,uo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await aZ(e))}a(EZ,"getAllNodeRecords");async function hZ(){let e=await rZ.getSystemInformation();return{hdb_version:nZ.version(),node_version:e.node_version,platform:e.platform}}a(hZ,"getSystemInfo")});var dT=g((Qde,dM)=>{"use strict";var Ud=mt(),iM=Q(),oM=nt(),aM=U(),Pd=K(),cM=gd(),mZ=Np(),{RemotePayloadObject:pZ}=Tu(),{handleHDBError:uM,hdb_errors:SZ}=ne(),{HTTP_STATUS_CODES:lM}=SZ,{NodeSubscription:_M}=da();dM.exports=TZ;async function TZ(e,t){let r;try{r=await Ud.request(`${t}.${oM.REQUEST_SUFFIX}`,new pZ(aM.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Pd.trace("Response from remote describe all request:",r)}catch(o){Pd.error(`addNode received error from describe all request to remote node: ${o}`);let c=Ud.requestErrorHandler(o,"add_node",t);throw uM(new Error,c,lM.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===oM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw uM(new Error,o,lM.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===aM.SYSTEM_SCHEMA_NAME){await Ud.createLocalTableStream(u,c);let h=new _M(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=iM.doesSchemaExist(u),l=n[u]!==void 0,d=c?iM.doesTableExist(u,c):!0,f=c?n?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!f){s.push(o);continue}if(!_&&l&&(Pd.trace(`addNode creating schema: ${u}`),await cM.createSchema({operation:"create_schema",schema:u})),!d&&f){Pd.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(n[u][c].attributes)}`);let h=new mZ(u,c,n[u][c].hash_attribute);n[u][c].attributes&&(h.attributes=n[u][c].attributes),await cM.createTable(h)}await Ud.createLocalTableStream(u,c);let E=new _M(u,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(TZ,"reviewSubscriptions")});var xd=g((Jde,hM)=>{"use strict";var{handleHDBError:vd,hdb_errors:gZ}=ne(),{HTTP_STATUS_CODES:Bd}=gZ,{addUpdateNodeValidator:RZ}=yd(),Hd=K(),EM=U(),fM=nt(),AZ=Q(),gu=mt(),Ru=ws(),OZ=re(),bZ=dT(),{Node:yZ,NodeSubscription:NZ}=da(),{broadcast:IZ}=tt(),wZ="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",CZ="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",DZ=OZ.get(EM.CONFIG_PARAMS.CLUSTERING_NODENAME);hM.exports=LZ;async function LZ(e,t=!1){Hd.trace("addNode called with:",e),Ru.checkClusteringEnabled();let r=RZ(e);if(r)throw vd(r,r.message,Bd.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await Ru.getNodeRecord(n);if(!AZ.isEmptyOrZeroLength(d))throw vd(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,Bd.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await bZ(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=wZ,o;let c=Ru.buildNodePayloads(s,DZ,EM.OPERATIONS_ENUM.ADD_NODE,await Ru.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 NZ(E.schema,E.table,E.publish,E.subscribe))}Hd.trace("addNode sending remote payload:",c);let _;try{_=await gu.request(`${n}.${fM.REQUEST_SUFFIX}`,c)}catch(d){Hd.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 gu.updateRemoteConsumer(p,n)}let f=gu.requestErrorHandler(d,"add_node",n);throw vd(new Error,f,Bd.INTERNAL_SERVER_ERROR,"error",f)}if(_.status===fM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw vd(new Error,d,Bd.INTERNAL_SERVER_ERROR,"error",d)}Hd.trace(_);for(let d=0,f=s.length;d<f;d++){let E=s[d];await gu.updateRemoteConsumer(E,n),E.subscribe===!0&&await gu.updateConsumerIterator(E.schema,E.table,n,"start")}let l=new yZ(n,u,_.system_info);return await Ru.upsertNodeRecord(l),IZ({type:"nats_update"}),i.length>0?o.message=CZ:o.message=`Successfully added '${n}' to manifest`,o}a(LZ,"addNode")});var hT=g((Zde,SM)=>{"use strict";var{handleHDBError:fT,hdb_errors:MZ}=ne(),{HTTP_STATUS_CODES:ET}=MZ,{addUpdateNodeValidator:UZ}=yd(),Au=K(),pM=U(),mM=nt(),jde=Q(),Ou=mt(),bu=ws(),PZ=re(),{cloneDeep:vZ}=require("lodash"),BZ=dT(),{Node:HZ,NodeSubscription:xZ}=da(),{broadcast:GZ}=tt(),FZ="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",qZ="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",kZ=PZ.get(pM.CONFIG_PARAMS.CLUSTERING_NODENAME);SM.exports=VZ;async function VZ(e){Au.trace("updateNode called with:",e),bu.checkClusteringEnabled();let t=UZ(e);if(t)throw fT(t,t.message,ET.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await bu.getNodeRecord(r);s.length>0&&(n=vZ(s));let{added:i,skipped:o}=await BZ(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=FZ,c;let u=bu.buildNodePayloads(i,kZ,pM.OPERATIONS_ENUM.UPDATE_NODE,await bu.getSystemInfo());for(let l=0,d=i.length;l<d;l++){let f=i[l];Au.trace(`updateNode updating work stream for node: ${r} subscription:`,f),i[l].start_time===void 0&&delete i[l].start_time}Au.trace("updateNode sending remote payload:",u);let _;try{_=await Ou.request(`${r}.${mM.REQUEST_SUFFIX}`,u)}catch(l){Au.error(`updateNode received error from request: ${l}`);let d=Ou.requestErrorHandler(l,"update_node",r);throw fT(new Error,d,ET.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===mM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw fT(new Error,l,ET.INTERNAL_SERVER_ERROR,"error",l)}Au.trace(_);for(let l=0,d=i.length;l<d;l++){let f=i[l];await Ou.updateRemoteConsumer(f,r),f.subscribe===!0?await Ou.updateConsumerIterator(f.schema,f.table,r,"start"):await Ou.updateConsumerIterator(f.schema,f.table,r,"stop")}return n||(n=[new HZ(r,[],_.system_info)]),await $Z(n[0],i,_.system_info),o.length>0?c.message=qZ:c.message=`Successfully updated '${r}'`,c}a(VZ,"updateNode");async function $Z(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 xZ(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await bu.upsertNodeRecord(n),GZ({type:"nats_update"})}a($Z,"updateNodeTable")});var OM=g((tfe,AM)=>{"use strict";var RM=require("joi"),{string:TM}=RM.types(),YZ=Ze(),gM=U(),KZ=re(),WZ=nt();AM.exports=QZ;function QZ(e){let t=TM.invalid(KZ.get(gM.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(WZ.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=RM.object({operation:TM.valid(gM.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return YZ.validateBySchema(e,r)}a(QZ,"removeNodeValidator")});var Fd=g((nfe,wM)=>{"use strict";var{handleHDBError:bM,hdb_errors:zZ}=ne(),{HTTP_STATUS_CODES:yM}=zZ,JZ=OM(),yu=K(),NM=ws(),XZ=Q(),Gd=U(),IM=nt(),mT=mt(),jZ=re(),{RemotePayloadObject:ZZ}=Tu(),{NodeSubscription:e5}=da(),t5=Yc(),r5=Wi(),{broadcast:n5}=tt(),s5=jZ.get(Gd.CONFIG_PARAMS.CLUSTERING_NODENAME);wM.exports=i5;async function i5(e){yu.trace("removeNode called with:",e),NM.checkClusteringEnabled();let t=JZ(e);if(t)throw bM(t,t.message,yM.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await NM.getNodeRecord(r);if(XZ.isEmptyOrZeroLength(n))throw bM(new Error,`Node '${r}' was not found.`,yM.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new ZZ(Gd.OPERATIONS_ENUM.REMOVE_NODE,s5,[]),i,o=!1;for(let u=0,_=n.subscriptions.length;u<_;u++){let l=n.subscriptions[u];l.subscribe===!0&&await mT.updateConsumerIterator(l.schema,l.table,r,"stop");try{await mT.updateRemoteConsumer(new e5(l.schema,l.table,!1,!1),r)}catch(d){yu.error(d)}}try{i=await mT.request(`${r}.${IM.REQUEST_SUFFIX}`,s),yu.trace("Remove node reply from remote node:",r,i)}catch(u){yu.error("removeNode received error from request:",u),o=!0}let c=new t5(Gd.SYSTEM_SCHEMA_NAME,Gd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await r5.deleteRecord(c),n5({type:"nats_update"}),i?.status===IM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(yu.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(i5,"removeNode")});var LM=g((ife,DM)=>{"use strict";var CM=require("joi"),{string:o5,array:a5}=CM.types(),c5=Ze(),u5=yd();DM.exports=l5;function l5(e){let t=CM.object({operation:o5.valid("configure_cluster").required(),connections:a5.items(u5.validation_schema).required()});return c5.validateBySchema(e,t)}a(l5,"configureClusterValidator")});var pT=g((afe,BM)=>{"use strict";var _5=U(),qd=K(),d5=Q(),f5=Fd(),E5=xd(),MM=ws(),h5=LM(),{handleHDBError:UM,hdb_errors:m5}=ne(),{HTTP_STATUS_CODES:PM}=m5,p5="Configure cluster complete.",S5="Failed to configure the cluster. Check the logs for more details.",T5="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";BM.exports=g5;async function g5(e){qd.trace("configure cluster called with:",e),MM.checkClusteringEnabled();let t=h5(e);if(t)throw UM(t,t.message,PM.BAD_REQUEST,void 0,void 0,!0);let r=await MM.getAllNodeRecords(),n=[];for(let f=0,E=r.length;f<E;f++)n.push(vM(f5,{operation:_5.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let s=await Promise.allSettled(n);qd.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(vM(E5,E,E.node_name))}let c=await Promise.allSettled(i);qd.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"&&(qd.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(d5.isEmptyOrZeroLength(u))return{message:p5,connections:_};if(l)return{message:T5,failed_nodes:u,connections:_};throw UM(new Error,S5,PM.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(g5,"configureCluster");async function vM(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){throw{node_name:r,error:n}}}a(vM,"functionWrapper")});var xM=g((ufe,HM)=>{"use strict";var kd=require("joi"),R5=Ze(),{validateSchemaExists:A5,validateTableExists:O5,validateSchemaName:b5}=Jn(),y5=kd.object({operation:kd.string().valid("purge_stream"),schema:kd.string().custom(A5).custom(b5).required(),table:kd.string().custom(O5).required()});function N5(e){return R5.validateBySchema(e,y5)}a(N5,"purgeStreamValidator");HM.exports=N5});var ST=g((_fe,GM)=>{"use strict";var{handleHDBError:I5,hdb_errors:w5}=ne(),{HTTP_STATUS_CODES:C5}=w5,D5=xM(),L5=mt(),M5=ws();GM.exports=U5;async function U5(e){if(e.purge_ingest!==!0){let s=D5(e);if(s)throw I5(s,s.message,C5.BAD_REQUEST,void 0,void 0,!0)}M5.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:n}=e;return await L5.purgeTableStream(t,r,n),n?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(U5,"purgeStream")});var RT=g((ffe,YM)=>{"use strict";var gT=ws(),P5=mt(),kM=re(),Vd=U(),lo=nt(),v5=Q(),TT=K(),{RemotePayloadObject:B5}=Tu(),{ErrorCode:FM}=require("nats"),qM=kM.get(Vd.CONFIG_PARAMS.CLUSTERING_ENABLED),VM=kM.get(Vd.CONFIG_PARAMS.CLUSTERING_NODENAME);YM.exports={clusterStatus:H5,buildNodeStatus:$M};async function H5(){let e={node_name:VM,is_enabled:qM,connections:[]};if(!qM)return e;let t=await gT.getAllNodeRecords();if(v5.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push($M(t[n],e.connections));return await Promise.allSettled(r),e}a(H5,"clusterStatus");async function $M(e,t){let r=e.name,n=new B5(Vd.OPERATIONS_ENUM.CLUSTER_STATUS,VM,void 0,await gT.getSystemInfo()),s,i,o=lo.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();s=await P5.request(lo.REQUEST_SUBJECT(r),n),i=Date.now()-u,s.status===lo.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=lo.CLUSTER_STATUS_STATUSES.CLOSED,TT.error(`Error getting node status from ${r} `,s))}catch(u){TT.warn(`Error getting node status from ${r}`,u),u.code===FM.NoResponders?o=lo.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===FM.Timeout?o=lo.CLUSTER_STATUS_STATUSES.TIMEOUT:o=lo.CLUSTER_STATUS_STATUSES.CLOSED}let c=new x5(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!==Vd.PRE_4_0_0_VERSION&&await gT.upsertNodeRecord(u)}catch(u){TT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a($M,"buildNodeStatus");function x5(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(x5,"NodeStatusObject")});var OT=g((hfe,KM)=>{"use strict";var{handleHDBError:G5,hdb_errors:F5}=ne(),{HTTP_STATUS_CODES:q5}=F5,k5=mt(),V5=ws(),AT=Q(),$d=require("joi"),$5=Ze(),Y5=2e3,K5=$d.object({timeout:$d.number().min(1),connected_nodes:$d.boolean(),routes:$d.boolean()});KM.exports=W5;async function W5(e){V5.checkClusteringEnabled();let t=$5.validateBySchema(e,K5);if(t)throw G5(t,t.message,q5.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||AT.autoCastBoolean(n),o=s===void 0||AT.autoCastBoolean(s),c={nodes:[]},u=await k5.getServerList(r??Y5),_={};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:AT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(W5,"clusterNetwork")});var JM=g((pfe,zM)=>{"use strict";var bT=require("joi"),WM=Ze(),{route_constraints:QM}=Nh();zM.exports={setRoutesValidator:Q5,deleteRoutesValidator:z5};function Q5(e){let t=bT.object({server:bT.valid("hub","leaf").required(),routes:QM.required()});return WM.validateBySchema(e,t)}a(Q5,"setRoutesValidator");function z5(e){let t=bT.object({routes:QM.required()});return WM.validateBySchema(e,t)}a(z5,"deleteRoutesValidator")});var NT=g((Tfe,eU)=>{"use strict";var _o=Dr(),yT=Q(),Yd=U(),XM=JM(),{handleHDBError:jM,hdb_errors:J5}=ne(),{HTTP_STATUS_CODES:ZM}=J5,X5="cluster routes successfully set",j5="cluster routes successfully deleted";eU.exports={setRoutes:Z5,getRoutes:e8,deleteRoutes:t8};function Z5(e){let t=XM.setRoutesValidator(e);if(t)throw jM(t,t.message,ZM.BAD_REQUEST,void 0,void 0,!0);let r=_o.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=yT.autoCast(_.port);let l=n.some(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"?_o.updateConfigValue(Yd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):_o.updateConfigValue(Yd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:X5,set:o,skipped:i}}a(Z5,"setRoutes");function e8(){let e=_o.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(e8,"getRoutes");function t8(e){let t=XM.deleteRoutesValidator(e);if(t)throw jM(t,t.message,ZM.BAD_REQUEST,void 0,void 0,!0);let r=_o.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=yT.isEmptyOrZeroLength(n)?null:n,_o.updateConfigValue(Yd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),u&&(s=yT.isEmptyOrZeroLength(s)?null:s,_o.updateConfigValue(Yd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:j5,deleted:i,skipped:o}}a(t8,"deleteRoutes")});var rU=g((Rfe,tU)=>{"use strict";var Nu=require("alasql"),fo=require("recursive-iterator"),Hn=K(),r8=Q(),Iu=U(),IT=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,s8(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=>Iu.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=>!Iu.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][Iu.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=n8(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(_=>!Iu.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Nu.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 n8(e){return e.filter(t=>t[Iu.PERMS_CRUD_ENUM.READ])}a(n8,"filterReadRestrictedAttrs");function s8(e,t,r,n,s){i8(e,t,r,n,s)}a(s8,"interpretAST");function wu(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(wu,"addSchemaTableToMap");function i8(e,t,r,n,s){if(!e){Hn.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Nu.yy.Insert?u8(e,t,r):e instanceof Nu.yy.Select?o8(e,t,r,n,s):e instanceof Nu.yy.Update?a8(e,t,r):e instanceof Nu.yy.Delete?c8(e,t,r):Hn.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(i8,"getRecordAttributesAST");function o8(e,t,r,n,s){if(!e){Hn.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(r8.isEmptyOrZeroLength(i)){Hn.error("No schema specified");return}e.from.forEach(c=>{wu(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),wu(c.table,t,r,n,s)});let o=new fo(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Hn.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new fo(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Hn.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new fo(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=s.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Hn.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new fo(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Hn.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(o8,"getSelectAttributes");function a8(e,t,r){if(!e){Hn.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new fo(e.columns),s=e.table.databaseid;wu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&wT(e.table.tableid,s,i.columnid,t,r)}a(a8,"getUpdateAttributes");function c8(e,t,r){if(!e){Hn.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new fo(e.where),s=e.table.databaseid;wu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&wT(e.table.tableid,s,i.columnid,t,r)}a(c8,"getDeleteAttributes");function u8(e,t,r){if(!e){Hn.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new fo(e.columns),s=e.into.databaseid;wu(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&wT(e.into.tableid,s,i.columnid,t,r)}a(u8,"getInsertAttributes");function wT(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(wT,"pushAttribute");tU.exports=IT});var LT=g((Ofe,oU)=>{var Kd=Qi(),nU=require("chalk"),kr=K(),sU=require("prompt"),{promisify:l8}=require("util"),CT=U(),_8=require("fs-extra"),d8=require("path"),f8=Q(),E8=Md(),iU=re();iU.initSync();var h8=require("moment"),m8=l8(sU.get),p8=d8.join(iU.getHdbBasePath(),CT.LICENSE_KEY_DIR_NAME,CT.LICENSE_FILE_NAME,CT.LICENSE_FILE_NAME);oU.exports={getFingerprint:T8,setLicense:S8,parseLicense:DT,register:g8,getRegistrationInfo:A8};async function S8(e){if(e&&e.key&&e.company){try{kr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await DT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw kr.error(r),kr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(S8,"setLicense");async function T8(){let e={};try{e=await Kd.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw kr.error(r),kr.error(t),new Error(r)}return e}a(T8,"getFingerprint");async function DT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");kr.info("Validating license input...");let r=Kd.validateLicense(e,t);if(kr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(kr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(kr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{kr.info("writing license to disk"),await _8.writeFile(p8,JSON.stringify({license_key:e,company:t}))}catch(n){throw kr.error("Failed to write License"),n}return"Registration successful."}a(DT,"parseLicense");async function g8(){let e=await R8();return DT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(g8,"register");async function R8(){let e=await Kd.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:nU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:nU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{sU.start()}catch(n){kr.error(n)}let r;try{r=await m8(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(R8,"promptForRegistration");async function A8(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Kd.getLicense()}catch(r){throw kr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(f8.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=E8.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=h8.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(A8,"getRegistrationInfo")});var cU=g((yfe,aU)=>{"use strict";var O8=nt(),MT=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+O8.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes: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"}};aU.exports=MT});var _U=g((Ife,lU)=>{"use strict";var uU=nt(),UT=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+uU.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+uU.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"}};lU.exports=UT});var fU=g((Cfe,dU)=>{"use strict";var PT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};dU.exports=PT});var hU=g((Lfe,EU)=>{"use strict";var b8=nt(),vT=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+b8.SERVER_SUFFIX.ADMIN,this.password=r}};EU.exports=vT});var xT=g((Ufe,SU)=>{"use strict";var Ea=require("path"),zd=require("fs-extra"),y8=cU(),N8=_U(),I8=fU(),w8=hU(),BT=Hr(),ma=Q(),Sr=Dr(),Qd=U(),Cu=nt(),{CONFIG_PARAMS:_t}=Qd,Du=K(),Lu=re(),mU=Rs(),HT=mt(),ha="clustering",C8=1e4,pU=5;SU.exports={generateNatsConfig:L8,removeNatsConfig:M8,getHubConfigPath:D8};function D8(){let e=Lu.get(_t.ROOTPATH);return Ea.join(e,ha,Cu.NATS_CONFIG_FILES.HUB_SERVER)}a(D8,"getHubConfigPath");async function L8(e=!1,t=void 0){Lu.initSync();let r=Lu.get(_t.ROOTPATH),n=Ea.join(r,ha,Cu.PID_FILES.HUB),s=Ea.join(r,ha,Cu.PID_FILES.LEAF),i=Sr.getConfigFromFile(_t.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Ea.join(r,ha,Cu.NATS_CONFIG_FILES.HUB_SERVER),c=Ea.join(r,ha,Cu.NATS_CONFIG_FILES.LEAF_SERVER),u=Sr.getConfigFromFile(_t.CLUSTERING_TLS_CERTIFICATE),_=Sr.getConfigFromFile(_t.CLUSTERING_TLS_PRIVATEKEY),l=Sr.getConfigFromFile(_t.CLUSTERING_TLS_CERT_AUTH),d=Sr.getConfigFromFile(_t.CLUSTERING_TLS_INSECURE),f=Sr.getConfigFromFile(_t.CLUSTERING_TLS_VERIFY),E=Sr.getConfigFromFile(_t.CLUSTERING_NODENAME),h=Sr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await HT.checkNATSServerInstalled()||Jd("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await BT.listUsers(),S=Sr.getConfigFromFile(_t.CLUSTERING_USER),T=await BT.getClusterUser();(ma.isEmpty(T)||T.active!==!0)&&Jd(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Wd(_t.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Wd(_t.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Wd(_t.CLUSTERING_HUBSERVER_NETWORK_PORT),await Wd(_t.CLUSTERING_LEAFSERVER_NETWORK_PORT));let b=[],R=[];for(let[z,J]of p.entries())J.role.role===Qd.ROLE_TYPES_ENUM.CLUSTER_USER&&J.active&&(b.push(new w8(J.username,mU.decrypt(J.hash))),R.push(new I8(J.username,mU.decrypt(J.hash))));let L=[],{hub_routes:H}=Sr.getClusteringRoutes();if(!ma.isEmptyOrZeroLength(H))for(let z of H)L.push(`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@${z.host}:${z.port}`);let P=new y8(Sr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,u,_,l,d,f,h,Sr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_CLUSTER_NAME),Sr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),L,b,R);l==null&&(delete P.tls.ca_file,delete P.leafnodes.tls.ca_file),t=ma.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Qd.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await zd.writeJson(o,P),Du.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}`,X=new N8(Sr.getConfigFromFile(_t.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[k],[B],b,R,u,_,l,d);l==null&&delete X.tls.ca_file,(t===void 0||t===Qd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await zd.writeJson(c,X),Du.trace(`Leaf server config written to ${c}`))}a(L8,"generateNatsConfig");async function Wd(e){let t=Lu.get(e);return ma.isEmpty(t)&&Jd(`port undefined for '${e}'`),await ma.isPortTaken(t)&&Jd(`'${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(Wd,"isPortAvailable");function Jd(e){let t=`Error generating clustering config: ${e}`;Du.error(t),console.error(t),process.exit(1)}a(Jd,"generateNatsConfigError");async function M8(e){let{port:t,config_file:r}=HT.getServerConfig(e),{username:n,decrypt_hash:s}=await BT.getClusterUser(),i=0,o=2e3;for(;i<pU;){try{let _=await HT.createConnection(t,n,s,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Du.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=pU)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 ma.async_set_timeout(o*(i*2))}let c="0".repeat(C8),u=Ea.join(Lu.get(_t.ROOTPATH),ha,r);await zd.writeFile(u,c),await zd.remove(u),Du.notify(e,"started.")}a(M8,"removeNatsConfig")});var bU=g((vfe,OU)=>{"use strict";var Vr=re(),U8=Qi(),me=U(),Mu=nt(),Cs=require("path"),{PACKAGE_ROOT:jd}=U(),TU=re(),Xd=Q(),pa="/dev/null",P8=Cs.join(jd,"launchServiceScripts"),gU=Cs.join(jd,"utility/scripts"),v8=Cs.join(gU,me.HDB_RESTART_SCRIPT),RU=Cs.resolve(jd,"dependencies",`${process.platform}-${process.arch}`,Mu.NATS_BINARY_NAME);function AU(){let t=U8.licenseSearch().ram_allocation||me.RAM_ALLOCATION_ENUM.DEFAULT,r=me.MEM_SETTING_KEY+t,n={[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Xd.noBootFile()&&(n[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Xd.getEnvCliRootPath()),{name:me.PROCESS_DESCRIPTORS.HDB,script:me.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:jd}}a(AU,"generateMainServerConfig");var B8=9930;function H8(){Vr.initSync(!0);let e=Vr.get(me.CONFIG_PARAMS.ROOTPATH),t=Cs.join(e,"clustering",Mu.NATS_CONFIG_FILES.HUB_SERVER),r=Cs.join(Vr.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=TU.get(me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Mu.LOG_LEVEL_FLAGS[Vr.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==B8?"-"+n:""),script:RU,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Vr.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=pa,i.error_file=pa),i}a(H8,"generateNatsHubServerConfig");var x8=9940;function G8(){Vr.initSync(!0);let e=Vr.get(me.CONFIG_PARAMS.ROOTPATH),t=Cs.join(e,"clustering",Mu.NATS_CONFIG_FILES.LEAF_SERVER),r=Cs.join(Vr.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=TU.get(me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Mu.LOG_LEVEL_FLAGS[Vr.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==x8?"-"+n:""),script:RU,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Vr.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=pa,i.error_file=pa),i}a(G8,"generateNatsLeafServerConfig");function F8(){Vr.initSync();let e=Cs.join(Vr.get(me.CONFIG_PARAMS.LOGGING_ROOT),me.LOG_NAMES.HDB),t={name:me.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:me.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:P8,autorestart:!1};return Vr.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=pa,t.error_file=pa),t}a(F8,"generateClusteringUpgradeV4ServiceConfig");function q8(){let e={[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.RESTART_HDB};return Xd.noBootFile()&&(e[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Xd.getEnvCliRootPath()),{...{name:me.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:gU},script:v8}}a(q8,"generateRestart");function k8(){return{apps:[AU()]}}a(k8,"generateAllServiceConfigs");OU.exports={generateAllServiceConfigs:k8,generateMainServerConfig:AU,generateRestart:q8,generateNatsHubServerConfig:H8,generateNatsLeafServerConfig:G8,generateClusteringUpgradeV4ServiceConfig:F8}});var xU=g((xfe,HU)=>{"use strict";var ve=U(),V8=Q(),Ls=xT(),Zd=mt(),Ds=nt(),fi=bU(),ef=re(),Ei=K(),$8=ws(),{startWorker:yU,onMessageFromWorkers:Y8}=tt(),K8=fa(),Hfe=require("util"),W8=require("child_process"),Q8=require("fs"),{execFile:z8}=W8,Ne;HU.exports={enterPM2Mode:J8,start:hi,stop:GT,reload:IU,restart:wU,list:FT,describe:DU,connect:Ms,kill:t6,startAllServices:r6,startService:qT,getUniqueServicesList:LU,restartAllServices:n6,isServiceRegistered:MU,reloadStopStart:UU,restartHdb:CU,deleteProcess:Z8,startClusteringProcesses:vU,startClusteringThreads:BU,isHdbRestartRunning:e6,isClusteringRunning:i6,stopClustering:s6,reloadClustering:o6};var Uu=!1;Y8(e=>{e.type==="restart"&&ef.initSync(!0)});function J8(){Uu=!0}a(J8,"enterPM2Mode");function Ms(){return Ne||(Ne=require("pm2")),new Promise((e,t)=>{Ne.connect((r,n)=>{Ei.setupConsoleLogging(),r&&t(r),e(n)})})}a(Ms,"connect");var Tr,X8=10,NU;function hi(e,t=!1){if(Uu)return j8(e);let r=z8(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Tr.indexOf(r);o>-1&&Tr.splice(o,1),!NU&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<X8&&(Q8.existsSync(Ls.getHubConfigPath())?hi(e):(await Ls.generateNatsConfig(!0),hi(e),await new Promise(c=>setTimeout(c,3e3)),await Ls.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ls.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=ef.get(ve.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&Ds.LOG_LEVEL_HIERARCHY[o]>=Ds.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Ds.LOG_LEVELS.ERR||l===Ds.LOG_LEVELS.WRN?Ei.OUTPUTS.STDERR:Ei.OUTPUTS.STDOUT;Ei.logCustomLevel(l||"info",E,n,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=Ds.LOG_LEVELS[f]}if(Ds.LOG_LEVEL_HIERARCHY[o]>=Ds.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===Ds.LOG_LEVELS.ERR||l===Ds.LOG_LEVELS.WRN?Ei.OUTPUTS.STDERR:Ei.OUTPUTS.STDOUT;Ei.logCustomLevel(l||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),Tr=[],!Tr&&!t){let i=a(()=>{NU=!0,Tr&&(Tr.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}Tr.push(r)}a(hi,"start");function j8(e){return new Promise(async(t,r)=>{try{await Ms()}catch(n){r(n)}Ne.start(e,(n,s)=>{n&&(Ne.disconnect(),r(n)),Ne.disconnect(),t(s)})})}a(j8,"startWithPM2");function GT(e){if(!Uu){for(let t of Tr||[])t.name===e&&(Tr.splice(Tr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Ms()}catch(n){r(n)}Ne.stop(e,async(n,s)=>{n&&(Ne.disconnect(),r(n)),Ne.delete(e,(i,o)=>{i&&(Ne.disconnect(),r(n)),Ne.disconnect(),t(o)})})})}a(GT,"stop");function IU(e){return new Promise(async(t,r)=>{try{await Ms()}catch(n){r(n)}Ne.reload(e,(n,s)=>{n&&(Ne.disconnect(),r(n)),Ne.disconnect(),t(s)})})}a(IU,"reload");function wU(e){if(!Uu)for(let t of Tr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Ms()}catch(n){r(n)}Ne.restart(e,(n,s)=>{Ne.disconnect(),t(s)})})}a(wU,"restart");function Z8(e){return new Promise(async(t,r)=>{try{await Ms()}catch(n){r(n)}Ne.delete(e,(n,s)=>{n&&(Ne.disconnect(),r(n)),Ne.disconnect(),t(s)})})}a(Z8,"deleteProcess");async function CU(){await hi(fi.generateRestart())}a(CU,"restartHdb");async function e6(){let e=await FT();for(let t in e)if(e[t].name===ve.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(e6,"isHdbRestartRunning");function FT(){return new Promise(async(e,t)=>{try{await Ms()}catch(r){t(r)}Ne.list((r,n)=>{r&&(Ne.disconnect(),t(r)),Ne.disconnect(),e(n)})})}a(FT,"list");function DU(e){return new Promise(async(t,r)=>{try{await Ms()}catch(n){r(n)}Ne.describe(e,(n,s)=>{n&&(Ne.disconnect(),r(n)),Ne.disconnect(),t(s)})})}a(DU,"describe");function t6(){if(!Uu){for(let e of Tr||[])e.kill();Tr=[];return}return new Promise(async(e,t)=>{try{await Ms()}catch(r){t(r)}Ne.killDaemon((r,n)=>{r&&(Ne.disconnect(),t(r)),Ne.disconnect(),e(n)})})}a(t6,"kill");async function r6(){try{await vU(),await BU(),await hi(fi.generateAllServiceConfigs())}catch(e){throw Ne?.disconnect(),e}}a(r6,"startAllServices");async function qT(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ve.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=fi.generateMainServerConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=fi.generateNatsIngestServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=fi.generateNatsReplyServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=fi.generateNatsHubServerConfig(),await hi(r,t),await Ls.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=fi.generateNatsLeafServerConfig(),await hi(r,t),await Ls.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=fi.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await hi(r)}catch(r){throw Ne?.disconnect(),r}}a(qT,"startService");async function LU(){try{let e=await FT(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw Ne?.disconnect(),e}}a(LU,"getUniqueServicesList");async function n6(e=[]){try{let t=!1,r=await LU();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===ve.PROCESS_DESCRIPTORS.HDB?t=!0:await wU(o))}t&&await UU(ve.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Ne?.disconnect(),t}}a(n6,"restartAllServices");async function MU(e){if(Tr?.find(r=>r.name===e))return!0;let t=await K8.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(MU,"isServiceRegistered");async function UU(e){let t=ef.get(ve.CONFIG_PARAMS.THREADS_COUNT)??ef.get(ve.CONFIG_PARAMS.THREADS),r=await DU(e),n=V8.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await GT(e),await qT(e)):e===ve.PROCESS_DESCRIPTORS.HDB?await CU():await IU(e)}a(UU,"reloadStopStart");var PU;async function vU(e=!1){for(let t in ve.CLUSTERING_PROCESSES){let r=ve.CLUSTERING_PROCESSES[t];await qT(r,e)}}a(vU,"startClusteringProcesses");async function BU(){PU=yU(ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Zd.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Zd.updateLocalStreams();let e=await $8.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ve.PRE_4_0_0_VERSION){Ei.info("Starting clustering upgrade 4.0.0 process"),yU(ve.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(BU,"startClusteringThreads");async function s6(){for(let e in ve.CLUSTERING_PROCESSES)if(e!==ve.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ve.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await PU.terminate();else{let t=ve.CLUSTERING_PROCESSES[e];await GT(t)}}a(s6,"stopClustering");async function i6(){for(let e in ve.CLUSTERING_PROCESSES){let t=ve.CLUSTERING_PROCESSES[e];if(await MU(t)===!1)return!1}return!0}a(i6,"isClusteringRunning");async function o6(){await Ls.generateNatsConfig(!0),await Zd.reloadNATSHub(),await Zd.reloadNATSLeaf(),await Ls.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ls.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(o6,"reloadClustering")});var of=g((qfe,YU)=>{"use strict";var a6=require("minimist"),{isMainThread:VT,parentPort:qU}=require("worker_threads"),st=U(),{PROCESS_DESCRIPTORS_VALIDATE:Pu}=st,ss=K(),$T=Q(),rf=xT(),tf=mt(),Ffe=nt(),kU=Dr(),is=xU(),GU=fa(),c6=hh(),{restartWorkers:nf,onMessageByType:u6}=tt(),{handleHDBError:l6,hdb_errors:_6}=ne(),{HTTP_STATUS_CODES:d6}=_6,sf=re();sf.initSync();var vu=`Restarting HarperDB. This may take up to ${st.RESTART_TIMEOUT_MS/1e3} seconds.`,f6="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",FU="Clustering is not enabled so cannot be restarted",E6="Invalid service",Sa,un;YU.exports={restart:VU,restartService:YT};VT&&u6(st.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?YT({service:e.workerType}):VU({operation:"restart"})});async function VU(e){un=Object.keys(e).length===0,Sa=await is.isServiceRegistered(st.HDB_PROC_DESCRIPTOR);let t=a6(process.argv);if(t.service){await YT(t);return}if(un&&!Sa){console.error(f6);return}if(un&&console.log(vu),Sa){is.enterPM2Mode(),ss.notify(vu);let r=c6(Object.keys(st.CONFIG_PARAM_MAP),!0);return $T.isEmptyOrZeroLength(Object.keys(r))||kU.updateConfigValue(void 0,void 0,r,!0,!0),h6(),vu}return VT?(ss.notify(vu),setTimeout(()=>{nf()},50)):qU.postMessage({type:st.ITC_EVENT_TYPES.RESTART}),vu}a(VU,"restart");async function YT(e){let{service:t}=e;if(st.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw l6(new Error,E6,d6.BAD_REQUEST,void 0,void 0,!0);if(Sa=await is.isServiceRegistered(st.HDB_PROC_DESCRIPTOR),!VT)return qU.postMessage({type:st.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Pu.clustering:if(!sf.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=FU;break}un&&console.log("Restarting clustering"),ss.notify("Restarting clustering"),await $U();break;case Pu.clustering_config:case Pu["clustering config"]:if(!sf.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=FU;break}un&&console.log("Restarting clustering_config"),ss.notify("Restarting clustering_config"),await is.reloadClustering();break;case"custom_functions":case"custom functions":case Pu.harperdb:case Pu.http_workers:if(un&&!Sa){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}un&&console.log("Restarting http_workers"),ss.notify("Restarting http_workers"),un?await is.restart(st.HDB_PROC_DESCRIPTOR):setTimeout(()=>{nf("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(ss.error(r),un&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(YT,"restartService");async function h6(){await $U(),await is.restart(st.HDB_PROC_DESCRIPTOR),await $T.async_set_timeout(2e3),sf.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await kT(),un&&(await tf.closeConnection(),process.exit(0))}a(h6,"restartPM2Mode");async function $U(){if(!kU.getConfigFromFile(st.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await GU.getHDBProcessInfo()).clustering.length===0)ss.trace("Clustering not running, restart will start clustering services"),await rf.generateNatsConfig(!0),await is.startClusteringProcesses(),await is.startClusteringThreads(),await kT(),un&&await tf.closeConnection();else{await rf.generateNatsConfig(!0),Sa?(ss.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await is.restart(st.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await is.restart(st.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await GU.getHDBProcessInfo()).clustering.forEach(s=>{ss.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await $T.async_set_timeout(3e3),await kT(),await tf.updateLocalStreams(),un&&await tf.closeConnection(),ss.trace("Restart clustering restarting ingest and reply service threads");let t=nf(st.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=nf(st.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a($U,"restartClustering");async function kT(){await rf.removeNatsConfig(st.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await rf.removeNatsConfig(st.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(kT,"removeNatsConfig")});var rP=g(($fe,tP)=>{"use strict";var Vfe=require("lodash"),gr=U(),{handleHDBError:KU,hdb_errors:m6}=ne(),{HDB_ERROR_MSGS:p6,HTTP_STATUS_CODES:S6}=m6,KT=K();tP.exports={getRolePermissions:g6};var Eo=Object.create(null),T6=a(e=>({key:e,perms:{}}),"perms_template_obj"),JU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),XU=a((e=!1,t=!1,r=!1,n=!1)=>({[gr.PERMS_CRUD_ENUM.READ]:e,[gr.PERMS_CRUD_ENUM.INSERT]:t,[gr.PERMS_CRUD_ENUM.UPDATE]:r,[gr.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),WT=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...XU(t,r,n,s)}),"table_perms_template"),WU=a((e,t=XU())=>({attribute_name:e,describe:eP(t),[Bu]:t[Bu],[QT]:t[QT],[zT]:t[zT]}),"attr_perms_template"),QU=a((e,t=!1)=>({attribute_name:e,describe:t,[Bu]:t}),"timestamp_attr_perms_template"),{READ:Bu,INSERT:QT,UPDATE:zT}=gr.PERMS_CRUD_ENUM,jU=Object.values(gr.PERMS_CRUD_ENUM),ZU=[Bu,QT,zT];function g6(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[gr.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(Eo[t]&&Eo[t].key===n)return Eo[t].perms;let s=R6(e,r);return Eo[t]?Eo[t].key=n:Eo[t]=T6(n),Eo[t].perms=s,s}catch(r){if(!e[gr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[gr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<gr.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 KT.error(n),KT.debug(r),KU(new Error,p6.OUTDATED_PERMS_TRANSLATION_ERROR,S6.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
|
|
10
|
+
`,"")}a(PD,"runCommand");async function _3(){try{await k4.access(hS)}catch{return!1}let e=await PD(`${hS} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return V4.eq(t,u3)}a(_3,"checkNATSServerInstalled");async function gS(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await MD.getClusterUser();if(oo(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}vn.trace("create nats connection called");let i=await Z4({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Ut.get(De.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Ut.get(De.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Ut.get(De.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),vn.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&vn.error("Error with Nats client connection, connection closed",o),vD()}),i}a(gS,"createConnection");function vD(){dr=void 0,no=void 0,so=void 0,io=void 0}a(vD,"clearClientCache");async function d3(){dr&&(await dr.drain(),dr=void 0,no=void 0,so=void 0,io=void 0)}a(d3,"closeConnection");var dr,io;async function hd(){return io||(io=gS(Ut.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),dr=await io),dr||io}a(hd,"getConnection");async function _u(){if(no)return no;oo(dr)&&await hd();let{domain:e}=du(De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(oo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return no=await dr.jetstreamManager({domain:e,timeout:6e4}),no}a(_u,"getJetStreamManager");async function BD(){if(so)return so;oo(dr)&&await hd();let{domain:e}=du(De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(oo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return so=dr.jetstream({domain:e,timeout:6e4}),so}a(BD,"getJetStream");async function Bn(){let e=dr||await hd(),t=no||await _u(),r=so||await BD();return{connection:e,jsm:t,js:r}}a(Bn,"getNATSReferences");async function f3(e){let t=Ut.get(De.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await MD.getClusterUser(),s=await gS(t,r,n),i=TS(),o=s.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=UD.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 fd.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(f3,"getServerList");async function RS(e,t){let{jsm:r}=await Bn(),n=Ut.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Ut.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Ut.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:e3.File,retention:t3.Limits,subjects:t,discard:r3.Old,max_msgs:s,max_bytes:i,max_age:n})}a(RS,"createLocalStream");async function HD(){let{jsm:e}=await Bn(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(HD,"listStreams");async function E3(e){let{jsm:t}=await Bn();await t.streams.delete(e)}a(E3,"deleteLocalStream");async function h3(e){let{connection:t}=await Bn(),r=[],n=TS(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(UD.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(h3,"listRemoteStreams");async function m3(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Bn(),i=wD(),o={durable_name:i,ack_policy:pS.Explicit};t&&(o.deliver_policy=SS.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=mS(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(Vt.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(m3,"viewStream");async function*p3(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Bn(),i=wD(),o={durable_name:i,ack_policy:pS.Explicit};t&&(o.deliver_policy=SS.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=mS(_.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(Vt.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(p3,"viewStreamIterator");async function S3(e,t,r,n){vn.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=xD(n,r);let{js:s}=await Bn(),i=await md(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:LD.encode(n);try{vn.trace(`publishToStream publishing to subject: ${o}`),a3(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 FD(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){vn.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await RS(t,[o]),await s.publish(o,c,{headers:r})}else throw u}});throw u}}a(S3,"publishToStream");function xD(e,t){t===void 0&&(t=s3());let r=Ut.get(De.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Vt.MSG_HEADERS.ORIGIN)&&r&&t.append(Vt.MSG_HEADERS.ORIGIN,r),t}a(xD,"addNatsMsgHeader");function du(e){e=e.toLowerCase();let t=lu.join(Ut.get(De.CONFIG_PARAMS.ROOTPATH),c3);if(e===De.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return oo(ES)&&(ES={port:cu.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:cu.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_NODENAME)+Vt.SERVER_SUFFIX.HUB,config_file:Vt.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:lu.join(t,Vt.PID_FILES.HUB),hdb_nats_path:t}),ES;if(e===De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return oo(fS)&&(fS={port:cu.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:cu.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_NODENAME)+Vt.SERVER_SUFFIX.LEAF,config_file:Vt.NATS_CONFIG_FILES.LEAF_SERVER,domain:cu.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_NODENAME)+Vt.SERVER_SUFFIX.LEAF,pid_file_path:lu.join(t,Vt.PID_FILES.LEAF),hdb_nats_path:t}),fS;vn.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(du,"getServerConfig");async function GD(e,t,r,n){try{await e.consumers.add(t,{ack_policy:pS.Explicit,durable_name:r,deliver_policy:SS.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(GD,"createConsumer");async function T3(e,t,r){await e.consumers.delete(t,r)}a(T3,"removeConsumer");function g3(e){return e.split(".")[1]}a(g3,"extractServerName");async function R3(e,t,r=6e4,n=TS()){if(!fd.isObject(t))throw new Error("data param must be an object");let s=LD.encode(t),{connection:i}=await Bn(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return mS(c.data)}a(R3,"request");function AS(e){return new Promise(async(t,r)=>{let n=W4(hS,["--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(AS,"reloadNATS");async function A3(){let{pid_file_path:e}=du(De.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await AS(e)}a(A3,"reloadNATSHub");async function O3(){let{pid_file_path:e}=du(De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await AS(e)}a(O3,"reloadNATSLeaf");function b3(e,t,r){let n;switch(e.code){case ID.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case ID.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(b3,"requestErrorHandler");async function y3(e,t){let r=t+Vt.SERVER_SUFFIX.LEAF,{connection:n}=await Bn(),{jsm:s}=await U3(r),{schema:i,table:o}=e,c=Ed.createNatsTableStreamName(i,o),u=e.start_time?e.start_time:new Date(Date.now()).toISOString();await FD(async()=>{if(e.subscribe===!0)await GD(s,c,n.info.server_name,u);else try{await T3(s,c,n.info.server_name)}catch(_){vn.trace(_)}})}a(y3,"updateRemoteConsumer");async function N3(e,t,r,n){let s=Ed.createNatsTableStreamName(e,t),i=r+Vt.SERVER_SUFFIX.LEAF,o={type:De.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!DD&&X4()<Ut.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=dS();await c(o)}await z4(o),n==="stop"&&await fd.async_set_timeout(1e3)}a(N3,"updateConsumerIterator");function FD(e){return Q4.writeTransaction(De.SYSTEM_SCHEMA_NAME,De.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(FD,"exclusiveLock");async function qD(e,t){let r=Ed.createNatsTableStreamName(e,t),n=await md(),s=D3(e,t,n);await RS(r,[s])}a(qD,"createLocalTableStream");async function I3(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await qD(n,s)}}a(I3,"createTableStreams");async function kD(e,t){if(Ut.get(De.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Ed.createNatsTableStreamName(e,t),{jsm:n}=await Bn();await n.streams.purge(r)}catch(r){if(r.message==="stream not found")vn.warn(r);else throw r}}a(kD,"purgeTableStream");async function w3(e,t){if(Ut.get(De.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await kD(e,t[r])}a(w3,"purgeSchemaTableStreams");async function C3(e){return(await _u()).streams.info(e)}a(C3,"getStreamInfo");function D3(e,t,r){return`${Vt.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(D3,"createSubjectName");async function md(){if(uu)return uu;if(uu=(await _u())?.nc?.info?.server_name,uu===void 0)throw new Error("Unable to get jetstream manager server name");return uu}a(md,"getJsmServerName");async function L3(){let e=await _u(),t=await md(),r=await HD();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=M3(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(".");vn.trace(`Updating stream subject name from: ${i} to: ${l}`),s.subjects[0]=l,await e.streams.update(s.name,s)}}a(L3,"updateLocalStreams");function M3(e){let{config:t}=e,r=!1,n=Ut.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Ut.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Ut.get(De.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(M3,"updateStreamLimits");async function U3(e){let t,r;try{t=await dr.jetstream({domain:e}),r=await dr.jetstreamManager({domain:e})}catch(n){throw vn.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(U3,"connectToRemoteJS")});var gd=g((F_e,WD)=>{"use strict";var ia=S_(),oa=ZC(),P3=K(),v3=require("uuid").v4,G_e=require("clone"),Sd=Os(),aa=U(),B3=require("util"),ai=Cn(),{handleHDBError:fr,hdb_errors:H3}=ne(),{HDB_ERROR_MSGS:pd,HTTP_STATUS_CODES:Er}=H3,{SchemaEventMsg:Td}=Dn(),$D=mt(),{getDatabases:x3}=(Ae(),se(Fe)),{transformReq:ca}=Q();WD.exports={createSchema:G3,createSchemaStructure:YD,createTable:F3,createTableStructure:KD,createAttribute:Y3,dropSchema:q3,dropTable:k3,dropAttribute:V3,getBackup:K3};async function G3(e){let t=await YD(e);return Sd.signalSchemaChange(new Td(process.pid,e.operation,e.schema)),t}a(G3,"createSchema");async function YD(e){let t=ia.schema_object(e);if(t)throw fr(t,t.message,Er.BAD_REQUEST,void 0,void 0,!0);if(ca(e),!await oa.checkSchemaExists(e.schema))throw fr(new Error,pd.SCHEMA_EXISTS_ERR(e.schema),Er.BAD_REQUEST,aa.LOG_LEVELS.ERROR,pd.SCHEMA_EXISTS_ERR(e.schema),!0);return await ai.createSchema(e),`database '${e.schema}' successfully created`}a(YD,"createSchemaStructure");async function F3(e){return ca(e),e.hash_attribute=e.primary_key??e.hash_attribute,await KD(e)}a(F3,"createTable");async function KD(e){let t=ia.create_table_object(e);if(t)throw fr(t,t.message,Er.BAD_REQUEST,void 0,void 0,!0);if(ia.validateTableResidence(e.residence),!await oa.checkSchemaTableExists(e.schema,e.table))throw fr(new Error,pd.TABLE_EXISTS_ERR(e.schema,e.table),Er.BAD_REQUEST,aa.LOG_LEVELS.ERROR,pd.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:v3(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ai.createTable(n,e);else throw fr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Er.BAD_REQUEST);else await ai.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(KD,"createTableStructure");async function q3(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=ia.schema_object(e),n=t??r;if(n)throw fr(n,n.message,Er.BAD_REQUEST,void 0,void 0,!0);ca(e);let s=await oa.checkSchemaExists(e.schema);if(s)throw fr(new Error,s,Er.NOT_FOUND,aa.LOG_LEVELS.ERROR,s,!0);let i=await oa.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await ai.dropSchema(e),Sd.signalSchemaChange(new Td(process.pid,e.operation,e.schema)),await $D.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(q3,"dropSchema");async function k3(e){let t=ia.table_object(e);if(t)throw fr(t,t.message,Er.BAD_REQUEST,void 0,void 0,!0);ca(e);let r=await oa.checkSchemaTableExists(e.schema,e.table);if(r)throw fr(new Error,r,Er.NOT_FOUND,aa.LOG_LEVELS.ERROR,r,!0);return await ai.dropTable(e),await $D.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(k3,"dropTable");async function V3(e){let t=ia.attribute_object(e);if(t)throw fr(t,t.message,Er.BAD_REQUEST,void 0,void 0,!0);ca(e);let r=await oa.checkSchemaTableExists(e.schema,e.table);if(r)throw fr(new Error,r,Er.NOT_FOUND,aa.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw fr(new Error,"You cannot drop a hash attribute",Er.BAD_REQUEST,void 0,void 0,!0);if(aa.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw fr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Er.BAD_REQUEST,void 0,void 0,!0);try{return await ai.dropAttribute(e),$3(e),Sd.signalSchemaChange(new Td(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw P3.error(`Got an error deleting attribute ${B3.inspect(e)}.`),n}}a(V3,"dropAttribute");function $3(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($3,"dropAttributeFromGlobal");async function Y3(e){ca(e);let t=x3()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw fr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Er.BAD_REQUEST,void 0,void 0,!0);return await ai.createAttribute(e),Sd.signalSchemaChange(new Td(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(Y3,"createAttribute");function K3(e){return ai.getBackup(e)}a(K3,"getBackup")});var zD=g((k_e,QD)=>{"use strict";var{OPERATIONS_ENUM:W3}=U(),OS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=W3.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};QD.exports=OS});var bS=g((Y_e,eL)=>{"use strict";var Q3=Cn(),$_e=zD(),Rd=Q(),Ad=U(),z3=re(),{handleHDBError:JD,hdb_errors:J3}=ne(),{HDB_ERROR_MSGS:XD,HTTP_STATUS_CODES:jD}=J3,X3=Object.values(Ad.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),ZD="To use this operation audit log must be enabled in harperdb-config.yaml";eL.exports=j3;async function j3(e){if(Rd.isEmpty(e.schema))throw new Error(XD.SCHEMA_REQUIRED_ERR);if(Rd.isEmpty(e.table))throw new Error(XD.TABLE_REQUIRED_ERR);if(!z3.get(Ad.CONFIG_PARAMS.LOGGING_AUDITLOG))throw JD(new Error,ZD,jD.BAD_REQUEST,Ad.LOG_LEVELS.ERROR,ZD,!0);let t=Rd.checkSchemaTableExist(e.schema,e.table);if(t)throw JD(new Error,t,jD.NOT_FOUND,Ad.LOG_LEVELS.ERROR,t,!0);if(!Rd.isEmpty(e.search_type)&&X3.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await Q3.readAuditLog(e)}a(j3,"readAuditLog")});var rL=g((W_e,tL)=>{"use strict";var{OPERATIONS_ENUM:Z3}=U(),yS=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Z3.GET_BACKUP,this.schema=t,this.table=r}};tL.exports=yS});var iL=g((X_e,sL)=>{"use strict";var eX=Cn(),z_e=rL(),NS=Q(),tX=U(),J_e=re(),{handleHDBError:rX,hdb_errors:nX}=ne(),{HDB_ERROR_MSGS:nL,HTTP_STATUS_CODES:sX}=nX;sL.exports=iX;async function iX(e){if(NS.isEmpty(e.schema))throw new Error(nL.SCHEMA_REQUIRED_ERR);if(NS.isEmpty(e.table))throw new Error(nL.TABLE_REQUIRED_ERR);let t=NS.checkSchemaTableExist(e.schema,e.table);if(t)throw rX(new Error,t,sX.NOT_FOUND,tX.LOG_LEVELS.ERROR,t,!0);return await eX.getBackup(read_audit_log_object)}a(iX,"getBackup")});var _L=g((Z_e,lL)=>{var ci=require("validate.js"),aL=Ze(),ua=U(),{handleHDBError:oX,hdb_errors:aX}=ne(),{HDB_ERROR_MSGS:lt,HTTP_STATUS_CODES:cX}=aX,IS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),uX={STRUCTURE_USER:"structure_user"},oL=Object.values(ua.ROLE_TYPES_ENUM),lX="attribute_permissions",_X="attribute_name",{PERMS_CRUD_ENUM:la}=ua,dX=[lX,...Object.values(la)],cL=[la.READ,la.INSERT,la.UPDATE],fX=[_X,...cL];function EX(e){let t=IS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,uL(e,t)}a(EX,"addRoleValidation");function hX(e){let t=IS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,uL(e,t)}a(hX,"alterRoleValidation");function mX(e){let t=IS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,aL.validateObject(e,t)}a(mX,"dropRoleValidation");var pX=["operation","role","id","permission","hdb_user","hdb_auth_header"];function uL(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)pX.includes(n[o])||s.push(n[o]);s.length>0&&pt(lt.INVALID_ROLE_JSON_KEYS(s),r);let i=aL.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{pt(o,r)}),e.permission){let o=SX(e);o&&pt(o,r),oL.forEach(c=>{e.permission[c]&&!ci.isBoolean(e.permission[c])&&pt(lt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(oL.indexOf(o)<0){if(o===uX.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]||pt(lt.SCHEMA_NOT_FOUND(d),r)}continue}pt(lt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){pt(lt.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]){pt(lt.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{dX.includes(l)||pt(lt.INVALID_PERM_KEY(l),r,o,u)}),Object.values(la).forEach(l=>{ci.isDefined(_[l])?ci.isBoolean(_[l])||pt(lt.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):pt(lt.TABLE_PERM_MISSING(l),r,o,u)}),ci.isDefined(_.attribute_permissions)){if(!ci.isArray(_.attribute_permissions)){pt(lt.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{pt(lt.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=>{!fX.includes(p)&&p!==la.DELETE&&pt(lt.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!ci.isDefined(E.attribute_name)){pt(lt.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){pt(lt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}cL.forEach(p=>{ci.isDefined(E[p])?ci.isBoolean(E[p])||pt(lt.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):pt(lt.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}`;pt(lt.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return TX(r)}a(uL,"customValidate");lL.exports={addRoleValidation:EX,alterRoleValidation:hX,dropRoleValidation:mX};function SX(e){let{operation:t,permission:r}=e;if(t===ua.OPERATIONS_ENUM.ADD_ROLE||t===ua.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 lt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?ua.ROLE_TYPES_ENUM.SUPER_USER:ua.ROLE_TYPES_ENUM.CLUSTER_USER;return lt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(SX,"validateNoSUPerms");function TX(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:lt.ROLE_PERMS_ERROR,...e};return oX(new Error,n,cX.BAD_REQUEST)}else return null}a(TX,"generateRolePermResponse");function pt(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(pt,"addPermError")});var US=g((tde,hL)=>{"use strict";var dL=on(),fL=vr(),gX=Wi(),CS=_L(),DS=Os(),RX=require("uuid").v4,AX=require("util"),Od=U(),OX=Q(),LS=fL.searchByValue,bX=fL.searchByHash,yX=AX.promisify(gX.delete),NX=es(),IX=ea(),{hdb_errors:wX,handleHDBError:ao}=ne(),{HDB_ERROR_MSGS:EL,HTTP_STATUS_CODES:fu}=wX,{UserEventMsg:MS}=Dn();hL.exports={addRole:CX,alterRole:DX,dropRole:LX,listRoles:MX};function wS(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(wS,"scrubRoleDetails");async function CX(e){let t=CS.addRoleValidation(e);if(t)throw t;e=wS(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 LS(r)||[])}catch(i){throw ao(i)}if(n&&n.length>0)throw ao(new Error,EL.ROLE_ALREADY_EXISTS(e.role),fu.CONFLICT,void 0,void 0,!0);e.id||(e.id=RX());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await dL.insert(s),DS.signalUserChange(new MS(process.pid)),e=wS(e),e}a(CX,"addRole");async function DX(e){let t=CS.alterRoleValidation(e);if(t)throw t;e=wS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await dL.update(r)}catch(s){throw ao(s)}if(n&&n?.message==="updated 0 of 1 records")throw ao(new Error,"Invalid role id",fu.BAD_REQUEST,void 0,void 0,!0);return await DS.signalUserChange(new MS(process.pid)),e}a(DX,"alterRole");async function LX(e){let t=CS.dropRoleValidation(e);if(t)throw ao(new Error,t,fu.BAD_REQUEST,void 0,void 0,!0);let r=new IX(Od.SYSTEM_SCHEMA_NAME,Od.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await bX(r));if(n.length===0)throw ao(new Error,EL.ROLE_NOT_FOUND,fu.NOT_FOUND,void 0,void 0,!0);let s=new NX(Od.SYSTEM_SCHEMA_NAME,Od.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await LS(s)),o=!1;if(OX.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw ao(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,fu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await yX(c),DS.signalUserChange(new MS(process.pid)),`${n[0].role} successfully deleted`}a(LX,"dropRole");async function MX(){return LS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(MX,"listRoles")});var TL=g((nde,SL)=>{"use strict";var UX=re(),ui=require("joi"),PX=Ze(),mL=require("moment"),vX=require("fs-extra"),PS=require("path"),BX=require("lodash"),Eu=U(),{LOG_LEVELS:co}=U(),HX="YYYY-MM-DD hh:mm:ss",xX=PS.resolve(__dirname,"../logs");SL.exports=function(e){return PX.validateBySchema(e,GX)};var GX=ui.object({from:ui.custom(pL),until:ui.custom(pL),level:ui.valid(co.NOTIFY,co.FATAL,co.ERROR,co.WARN,co.INFO,co.DEBUG,co.TRACE),order:ui.valid("asc","desc"),limit:ui.number().min(1),start:ui.number().min(0),log_name:ui.custom(FX)});function pL(e,t){if(mL(e,mL.ISO_8601).format(HX)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(pL,"validateDatetime");function FX(e,t){if(BX.invert(Eu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=UX.get(Eu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?Eu.LOG_NAMES.HDB:e,i=s===Eu.LOG_NAMES.INSTALL?PS.join(xX,Eu.LOG_NAMES.INSTALL):PS.join(n,s);return vX.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(FX,"validateReadLogPath")});var BS=g((ide,RL)=>{"use strict";var bd=U(),qX=K(),kX=re(),VX=TL(),vS=require("path"),gL=require("fs-extra"),{once:$X}=require("events"),{handleHDBError:YX,hdb_errors:KX}=ne(),{PACKAGE_ROOT:WX}=U(),QX=vS.join(WX,"logs"),zX=1e3,JX=200;RL.exports=XX;async function XX(e){let t=VX(e);if(t)throw YX(t,t.message,KX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=kX.get(bd.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?bd.LOG_NAMES.HDB:e.log_name,s=n===bd.LOG_NAMES.INSTALL?vS.join(QX,bd.LOG_NAMES.INSTALL):vS.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?zX: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(gL.statSync(s).size-(h+5)*JX,0));let S=gL.createReadStream(s,{start:p});S.on("error",P=>{qX.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,X;for(;(X=k.exec(P))&&!S.destroyed;){L&&(L.message=P.slice(B,X.index),H(L));let[z,J,de]=X,ce=de.split("] ["),fe=ce[0],Le=ce[1];ce.splice(0,2),L={timestamp:J,thread:fe,level:Le,tags:ce,message:""},B=X.index+z.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,X;switch(!0){case(i&&c&&_):k=new Date(P.timestamp),B=new Date(u),X=new Date(l),P.level===o&&k>=B&&k<=X&&T<E?T++:P.level===o&&k>=B&&k<=X&&(li(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&&(li(P,f,b),T++,T===h&&S.destroy());break;case(i&&_):k=new Date(P.timestamp),X=new Date(l),P.level===o&&k<=X&&T<E?T++:P.level===o&&k<=X&&(li(P,f,b),T++,T===h&&S.destroy());break;case(c&&_):k=new Date(P.timestamp),B=new Date(u),X=new Date(l),k>=B&&k<=X&&T<E?T++:k>=B&&k<=X&&(li(P,f,b),T++,T===h&&S.destroy());break;case i:P.level===o&&T<E?T++:P.level===o&&(li(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&&(li(P,f,b),T++,T===h&&S.destroy());break;case _:k=new Date(P.timestamp),X=new Date(l),k<=X&&T<E?T++:k<=X&&T>=E&&(li(P,f,b),T++,T===h&&S.destroy());break;default:T<E?T++:(li(P,f,b),T++,T===h&&S.destroy())}}return a(H,"onLogMessage"),await $X(S,"close"),b}a(XX,"readLog");function li(e,t,r){t==="desc"?jX(e,r):t==="asc"?ZX(e,r):r.push(e)}a(li,"pushLineToResult");function jX(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(jX,"insertDescending");function ZX(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(ZX,"insertAscending")});var yd=g((lde,yL)=>{"use strict";var HS=require("joi"),{string:hu,boolean:AL,date:ej}=HS.types(),tj=Ze(),{validateSchemaExists:ade,validateTableExists:cde,validateSchemaName:ude}=Jn(),rj=U(),nj=nt(),OL=re();OL.initSync();var sj=hu.invalid(OL.get(rj.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(nj.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(),bL={operation:hu.valid("add_node","update_node","set_node_replication"),node_name:sj,subscriptions:HS.array().items({table:hu.optional(),schema:hu.optional(),database:hu.optional(),subscribe:AL.required(),publish:AL.required().custom(oj),start_time:ej.iso()}).min(1).required()};function ij(e){return tj.validateBySchema(e,HS.object(bL))}a(ij,"addUpdateNodeValidator");function oj(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(oj,"checkForFalsy");yL.exports={addUpdateNodeValidator:ij,validation_schema:bL}});var IL=g((dde,NL)=>{var aj=Ze(),cj={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};NL.exports=function(e){return aj.validateObject(e,cj)}});var GS=g((fde,wL)=>{"use strict";var uj=U().OPERATIONS_ENUM,xS=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=uj.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};wL.exports=xS});var DL=g((hde,CL)=>{"use strict";var lj={OPERATION:"operation",REFRESH:"refresh"},FS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},qS=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};CL.exports={JWTTokens:FS,TOKEN_TYPE_ENUM:lj,JWTRSAKeys:qS}});var Su=g((pde,PL)=>{"use strict";var pu=require("jsonwebtoken"),kS=require("fs-extra"),VS=Q(),cn=U(),{handleHDBError:hr,hdb_errors:_j}=ne(),{HTTP_STATUS_CODES:mr,AUTHENTICATION_ERROR_MSGS:pr}=_j,mu=K(),LL=P_(),KS=Hr(),dj=on().update,fj=GS(),Ej=Os(),{UserEventMsg:hj}=Dn(),_i=re();_i.initSync();var $S=require("path"),{JWTTokens:mj,JWTRSAKeys:pj,TOKEN_TYPE_ENUM:Nd}=DL(),Sj=_i.get(cn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?_i.get(cn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",Tj=_i.get(cn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?_i.get(cn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Id="RS256",YS;PL.exports={createTokens:gj,validateOperationToken:Aj,refreshOperationToken:Rj,validateRefreshToken:UL};async function gj(e){if(VS.isEmpty(e)||typeof e!="object")throw hr(new Error,pr.INVALID_AUTH_OBJECT,mr.BAD_REQUEST,void 0,void 0,!0);if(VS.isEmpty(e.username))throw hr(new Error,pr.USERNAME_REQUIRED,mr.BAD_REQUEST,void 0,void 0,!0);if(VS.isEmpty(e.password))throw hr(new Error,pr.PASSWORD_REQUIRED,mr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await KS.findAndValidateUser(e.username,e.password),!t)throw hr(new Error,pr.INVALID_CREDENTIALS,mr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw mu.error(f),hr(new Error,pr.INVALID_CREDENTIALS,mr.UNAUTHORIZED,void 0,void 0,!0)}let r=await wd(),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 ML(i,r.private_key,r.passphrase),c=await pu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:Tj,algorithm:Id,subject:Nd.REFRESH}),u=LL.hash(c),_=new fj(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await dj(_)}catch(f){mu.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw hr(new Error,pr.REFRESH_TOKEN_SAVE_FAILED,mr.INTERNAL_SERVER_ERROR);return Ej.signalUserChange(new hj(process.pid)),new mj(o,c)}a(gj,"createTokens");async function ML(e,t,r){return await pu.sign(e,{key:t,passphrase:r},{expiresIn:Sj,algorithm:Id,subject:Nd.OPERATION})}a(ML,"signOperationToken");async function wd(){if(YS===void 0)try{let e=$S.join(_i.getHdbBasePath(),cn.LICENSE_KEY_DIR_NAME,cn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=$S.join(_i.getHdbBasePath(),cn.LICENSE_KEY_DIR_NAME,cn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=$S.join(_i.getHdbBasePath(),cn.LICENSE_KEY_DIR_NAME,cn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await kS.readFile(e)).toString(),s=(await kS.readFile(t)).toString(),i=(await kS.readFile(r)).toString();YS=new pj(i,s,n)}catch(e){throw mu.error(e),hr(new Error,pr.NO_ENCRYPTION_KEYS,mr.INTERNAL_SERVER_ERROR)}return YS}a(wd,"getJWTRSAKeys");async function Rj(e){if(!e)throw hr(new Error,pr.INVALID_BODY,mr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw hr(new Error,pr.REFRESH_TOKEN_REQUIRED,mr.BAD_REQUEST,void 0,void 0,!0);await UL(e.refresh_token);let t=await wd(),r=await pu.decode(e.refresh_token);return{operation_token:await ML({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(Rj,"refreshOperationToken");async function Aj(e){try{let t=await wd(),r=await pu.verify(e,t.public_key,{algorithms:Id,subject:Nd.OPERATION});return await KS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw mu.warn(t),t.name&&t.name==="TokenExpiredError"?hr(new Error,pr.TOKEN_EXPIRED,mr.FORBIDDEN):hr(new Error,pr.INVALID_TOKEN,mr.UNAUTHORIZED)}}a(Aj,"validateOperationToken");async function UL(e){let t;try{let r=await wd(),n=await pu.verify(e,r.public_key,{algorithms:Id,subject:Nd.REFRESH});t=await KS.findAndValidateUser(n.username,void 0,!1)}catch(r){throw mu.warn(r),r.name&&r.name==="TokenExpiredError"?hr(new Error,pr.TOKEN_EXPIRED,mr.FORBIDDEN):hr(new Error,pr.INVALID_TOKEN,mr.UNAUTHORIZED)}if(!LL.validate(t.refresh_token,e))throw hr(new Error,pr.INVALID_TOKEN,mr.UNAUTHORIZED);return t}a(UL,"validateRefreshToken")});var WS=g((gde,HL)=>{"use strict";var Oj=IL(),_a=require("passport"),bj=require("passport-local").Strategy,yj=require("passport-http").BasicStrategy,Nj=require("util"),Ij=Hr(),BL=Nj.callbackify(Ij.findAndValidateUser),Tde=Ir(),wj=U(),vL=Su();_a.use(new bj(function(e,t,r){BL(e,t,r)}));_a.use(new yj(function(e,t,r){BL(e,t,r)}));_a.serializeUser(function(e,t){t(null,e)});_a.deserializeUser(function(e,t){t(null,e)});function Cj(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":_a.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===wj.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?vL.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):vL.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:_a.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(Cj,"authorize");function Dj(e,t){let r=Oj(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(Dj,"checkPermissions");HL.exports={authorize:Cj,checkPermissions:Dj}});var da=g((Ade,xL)=>{"use strict";var QS=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},zS=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};xL.exports={Node:QS,NodeSubscription:zS}});var FL=g((bde,GL)=>{"use strict";var Lj=U().OPERATIONS_ENUM,JS=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Lj.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};GL.exports=JS});var Tu=g((Nde,qL)=>{"use strict";var XS=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},jS=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)}};qL.exports={RemotePayloadObject:XS,RemotePayloadSubscription:jS}});var VL=g((wde,kL)=>{"use strict";var ZS=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}};kL.exports=ZS});var KL=g((Ude,YL)=>{"use strict";var Mj=VL(),Dde=ft(),$L=Ye(),Uj=K(),{getSchemaPath:Lde,getTransactionAuditStorePath:Mde}=Qe(),{getDatabases:Pj}=(Ae(),se(Fe));YL.exports=vj;async function vj(e){let t=new Mj;try{let r=Pj()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await $L.environmentDataSize(schema_path,e.name),o=await $L.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){Uj.warn(`unable to stat table dbi due to ${r}`)}return t}a(vj,"lmdbGetTableSize")});var QL=g((vde,WL)=>{"use strict";var eT=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}};WL.exports=eT});var fa=g((Fde,ZL)=>{"use strict";var Bj=require("fs-extra"),Hj=require("path"),Zt=require("systeminformation"),di=K(),zL=mt(),Hde=nt(),Dd=U(),xj=KL(),jL=ki(),{getThreadInfo:JL}=tt(),lT=re();lT.initSync();var Gj=QL(),{openEnvironment:xde}=Ye(),{getSchemaPath:Gde}=Qe(),{database:Fj}=(Ae(),se(Fe)),Cd;ZL.exports={getHDBProcessInfo:sT,getNetworkInfo:oT,getDiskInfo:iT,getMemoryInfo:nT,getCPUInfo:rT,getTimeInfo:tT,getSystemInformation:aT,systemInformation:qj,getTableSize:cT,getMetrics:uT};function tT(){return Zt.time()}a(tT,"getTimeInfo");async function rT(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Zt.cpu();l.cpu_speed=await Zt.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 Zt.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:X,...z}=R;b.cpus.push(z)}),l.current_load=b,l}catch(e){return di.error(`error in getCPUInfo: ${e}`),{}}}a(rT,"getCPUInfo");async function nT(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Zt.mem();return Object.assign(s,process.memoryUsage())}catch(e){return di.error(`error in getMemoryInfo: ${e}`),{}}}a(nT,"getMemoryInfo");async function sT(){let e={core:[],clustering:[]};try{let t=await Zt.processes(),r;try{r=Number.parseInt(await Bj.readFile(Hj.join(lT.get(Dd.CONFIG_PARAMS.ROOTPATH),Dd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Dd.NODE_ERROR_CODES.ENOENT)di.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return di.error(`error in getHDBProcessInfo: ${t}`),e}}a(sT,"getHDBProcessInfo");async function iT(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Zt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Zt.fsStats();return e.read_write=_,e.size=await Zt.fsSize(),e}catch(t){return di.error(`error in getDiskInfo: ${t}`),e}}a(iT,"getDiskInfo");async function oT(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Zt.networkInterfaceDefault(),e.latency=await Zt.inetChecksite("google.com"),(await Zt.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 Zt.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return di.error(`error in getNetworkInfo: ${t}`),e}}a(oT,"getNetworkInfo");async function aT(){if(Cd!==void 0)return Cd;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Zt.osInfo();e=c;let u=await Zt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,Cd=e,Cd}catch(t){return di.error(`error in getSystemInformation: ${t}`),e}}a(aT,"getSystemInformation");async function cT(){let e=[],t=await jL.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await xj(n));return e}a(cT,"getTableSize");async function uT(){let e=await jL.describeAll(),t={};for(let r in e){let n=t[r]={};for(let s in e[r])try{let i=Fj({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){di.notify(`Error getting stats for table ${s}: ${i}`)}}return t}a(uT,"getMetrics");async function XL(){if(lT.get(Dd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await zL.getNATSReferences(),t=await zL.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(XL,"getNatsStreamInfo");async function qj(e){let t=new Gj;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await aT(),t.time=tT(),t.cpu=await rT(),t.memory=await nT(),t.disk=await iT(),t.network=await oT(),t.harperdb_processes=await sT(),t.table_size=await cT(),t.metrics=await uT(),t.threads=await JL(),t.replication=await XL(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await aT();break;case"time":t.time=tT();break;case"cpu":t.cpu=await rT();break;case"memory":t.memory=await nT();break;case"disk":t.disk=await iT();break;case"network":t.network=await oT();break;case"harperdb_processes":t.harperdb_processes=await sT();break;case"table_size":t.table_size=await cT();break;case"database_metrics":case"metrics":t.metrics=await uT();break;case"threads":t.threads=await JL();break;case"replication":t.replication=await XL();break;default:break}return t}a(qj,"systemInformation")});var Md=g((kde,eM)=>{"use strict";eM.exports={version:kj,printVersion:Vj};var Ld=eu();function kj(){if(Ld)return Ld.version}a(kj,"version");function Vj(){Ld&&console.log(`HarperDB Version ${Ld.version}`)}a(Vj,"printVersion")});var ws=g((Kde,sM)=>{"use strict";var $j=on(),_T=Q(),Yj=require("util"),uo=U(),tM=re();tM.initSync();var Kj=WS(),rM=vr(),{Node:$de,NodeSubscription:Yde}=da(),Wj=ea(),Qj=FL(),{RemotePayloadObject:zj,RemotePayloadSubscription:Jj}=Tu(),{handleHDBError:Xj,hdb_errors:jj}=ne(),{HTTP_STATUS_CODES:Zj,HDB_ERROR_MSGS:eZ}=jj,tZ=es(),rZ=fa(),nZ=Md(),{getDatabases:sZ}=(Ae(),se(Fe)),iZ=Yj.promisify(Kj.authorize),oZ=rM.searchByHash,aZ=rM.searchByValue;sM.exports={authHeaderToUser:cZ,isEmpty:uZ,getNodeRecord:lZ,upsertNodeRecord:_Z,buildNodePayloads:dZ,checkClusteringEnabled:fZ,getAllNodeRecords:EZ,getSystemInfo:hZ,reverseSubscription:nM};async function cZ(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await iZ(t,null),e}a(cZ,"authHeaderToUser");function uZ(e){return e==null}a(uZ,"isEmpty");async function lZ(e){let t=new Wj(uo.SYSTEM_SCHEMA_NAME,uo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return oZ(t)}a(lZ,"getNodeRecord");async function _Z(e){let t=new Qj(uo.SYSTEM_SCHEMA_NAME,uo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return $j.upsert(t)}a(_Z,"upsertNodeRecord");function nM(e){if(_T.isEmpty(e.subscribe)||_T.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(nM,"reverseSubscription");function dZ(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=_T.getTableHashAttribute(u,_),{subscribe:d,publish:f}=nM(c),E=sZ()[u]?.[_],h=new Jj(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new zj(r,t,s,n)}a(dZ,"buildNodePayloads");function fZ(){if(!tM.get(uo.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Xj(new Error,eZ.CLUSTERING_NOT_ENABLED,Zj.BAD_REQUEST,void 0,void 0,!0)}a(fZ,"checkClusteringEnabled");async function EZ(){let e=new tZ(uo.SYSTEM_SCHEMA_NAME,uo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await aZ(e))}a(EZ,"getAllNodeRecords");async function hZ(){let e=await rZ.getSystemInformation();return{hdb_version:nZ.version(),node_version:e.node_version,platform:e.platform}}a(hZ,"getSystemInfo")});var dT=g((Qde,dM)=>{"use strict";var Ud=mt(),iM=Q(),oM=nt(),aM=U(),Pd=K(),cM=gd(),mZ=Np(),{RemotePayloadObject:pZ}=Tu(),{handleHDBError:uM,hdb_errors:SZ}=ne(),{HTTP_STATUS_CODES:lM}=SZ,{NodeSubscription:_M}=da();dM.exports=TZ;async function TZ(e,t){let r;try{r=await Ud.request(`${t}.${oM.REQUEST_SUFFIX}`,new pZ(aM.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Pd.trace("Response from remote describe all request:",r)}catch(o){Pd.error(`addNode received error from describe all request to remote node: ${o}`);let c=Ud.requestErrorHandler(o,"add_node",t);throw uM(new Error,c,lM.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===oM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw uM(new Error,o,lM.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===aM.SYSTEM_SCHEMA_NAME){await Ud.createLocalTableStream(u,c);let h=new _M(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=iM.doesSchemaExist(u),l=n[u]!==void 0,d=c?iM.doesTableExist(u,c):!0,f=c?n?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!f){s.push(o);continue}if(!_&&l&&(Pd.trace(`addNode creating schema: ${u}`),await cM.createSchema({operation:"create_schema",schema:u})),!d&&f){Pd.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(n[u][c].attributes)}`);let h=new mZ(u,c,n[u][c].hash_attribute);n[u][c].attributes&&(h.attributes=n[u][c].attributes),await cM.createTable(h)}await Ud.createLocalTableStream(u,c);let E=new _M(u,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(TZ,"reviewSubscriptions")});var xd=g((Jde,hM)=>{"use strict";var{handleHDBError:vd,hdb_errors:gZ}=ne(),{HTTP_STATUS_CODES:Bd}=gZ,{addUpdateNodeValidator:RZ}=yd(),Hd=K(),EM=U(),fM=nt(),AZ=Q(),gu=mt(),Ru=ws(),OZ=re(),bZ=dT(),{Node:yZ,NodeSubscription:NZ}=da(),{broadcast:IZ}=tt(),wZ="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",CZ="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",DZ=OZ.get(EM.CONFIG_PARAMS.CLUSTERING_NODENAME);hM.exports=LZ;async function LZ(e,t=!1){Hd.trace("addNode called with:",e),Ru.checkClusteringEnabled();let r=RZ(e);if(r)throw vd(r,r.message,Bd.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await Ru.getNodeRecord(n);if(!AZ.isEmptyOrZeroLength(d))throw vd(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,Bd.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await bZ(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=wZ,o;let c=Ru.buildNodePayloads(s,DZ,EM.OPERATIONS_ENUM.ADD_NODE,await Ru.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 NZ(E.schema,E.table,E.publish,E.subscribe))}Hd.trace("addNode sending remote payload:",c);let _;try{_=await gu.request(`${n}.${fM.REQUEST_SUFFIX}`,c)}catch(d){Hd.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 gu.updateRemoteConsumer(p,n)}let f=gu.requestErrorHandler(d,"add_node",n);throw vd(new Error,f,Bd.INTERNAL_SERVER_ERROR,"error",f)}if(_.status===fM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw vd(new Error,d,Bd.INTERNAL_SERVER_ERROR,"error",d)}Hd.trace(_);for(let d=0,f=s.length;d<f;d++){let E=s[d];await gu.updateRemoteConsumer(E,n),E.subscribe===!0&&await gu.updateConsumerIterator(E.schema,E.table,n,"start")}let l=new yZ(n,u,_.system_info);return await Ru.upsertNodeRecord(l),IZ({type:"nats_update"}),i.length>0?o.message=CZ:o.message=`Successfully added '${n}' to manifest`,o}a(LZ,"addNode")});var hT=g((Zde,SM)=>{"use strict";var{handleHDBError:fT,hdb_errors:MZ}=ne(),{HTTP_STATUS_CODES:ET}=MZ,{addUpdateNodeValidator:UZ}=yd(),Au=K(),pM=U(),mM=nt(),jde=Q(),Ou=mt(),bu=ws(),PZ=re(),{cloneDeep:vZ}=require("lodash"),BZ=dT(),{Node:HZ,NodeSubscription:xZ}=da(),{broadcast:GZ}=tt(),FZ="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",qZ="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",kZ=PZ.get(pM.CONFIG_PARAMS.CLUSTERING_NODENAME);SM.exports=VZ;async function VZ(e){Au.trace("updateNode called with:",e),bu.checkClusteringEnabled();let t=UZ(e);if(t)throw fT(t,t.message,ET.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await bu.getNodeRecord(r);s.length>0&&(n=vZ(s));let{added:i,skipped:o}=await BZ(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=FZ,c;let u=bu.buildNodePayloads(i,kZ,pM.OPERATIONS_ENUM.UPDATE_NODE,await bu.getSystemInfo());for(let l=0,d=i.length;l<d;l++){let f=i[l];Au.trace(`updateNode updating work stream for node: ${r} subscription:`,f),i[l].start_time===void 0&&delete i[l].start_time}Au.trace("updateNode sending remote payload:",u);let _;try{_=await Ou.request(`${r}.${mM.REQUEST_SUFFIX}`,u)}catch(l){Au.error(`updateNode received error from request: ${l}`);let d=Ou.requestErrorHandler(l,"update_node",r);throw fT(new Error,d,ET.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===mM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw fT(new Error,l,ET.INTERNAL_SERVER_ERROR,"error",l)}Au.trace(_);for(let l=0,d=i.length;l<d;l++){let f=i[l];await Ou.updateRemoteConsumer(f,r),f.subscribe===!0?await Ou.updateConsumerIterator(f.schema,f.table,r,"start"):await Ou.updateConsumerIterator(f.schema,f.table,r,"stop")}return n||(n=[new HZ(r,[],_.system_info)]),await $Z(n[0],i,_.system_info),o.length>0?c.message=qZ:c.message=`Successfully updated '${r}'`,c}a(VZ,"updateNode");async function $Z(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 xZ(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await bu.upsertNodeRecord(n),GZ({type:"nats_update"})}a($Z,"updateNodeTable")});var OM=g((tfe,AM)=>{"use strict";var RM=require("joi"),{string:TM}=RM.types(),YZ=Ze(),gM=U(),KZ=re(),WZ=nt();AM.exports=QZ;function QZ(e){let t=TM.invalid(KZ.get(gM.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(WZ.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=RM.object({operation:TM.valid(gM.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return YZ.validateBySchema(e,r)}a(QZ,"removeNodeValidator")});var Fd=g((nfe,wM)=>{"use strict";var{handleHDBError:bM,hdb_errors:zZ}=ne(),{HTTP_STATUS_CODES:yM}=zZ,JZ=OM(),yu=K(),NM=ws(),XZ=Q(),Gd=U(),IM=nt(),mT=mt(),jZ=re(),{RemotePayloadObject:ZZ}=Tu(),{NodeSubscription:e5}=da(),t5=Yc(),r5=Wi(),{broadcast:n5}=tt(),s5=jZ.get(Gd.CONFIG_PARAMS.CLUSTERING_NODENAME);wM.exports=i5;async function i5(e){yu.trace("removeNode called with:",e),NM.checkClusteringEnabled();let t=JZ(e);if(t)throw bM(t,t.message,yM.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await NM.getNodeRecord(r);if(XZ.isEmptyOrZeroLength(n))throw bM(new Error,`Node '${r}' was not found.`,yM.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new ZZ(Gd.OPERATIONS_ENUM.REMOVE_NODE,s5,[]),i,o=!1;for(let u=0,_=n.subscriptions.length;u<_;u++){let l=n.subscriptions[u];l.subscribe===!0&&await mT.updateConsumerIterator(l.schema,l.table,r,"stop");try{await mT.updateRemoteConsumer(new e5(l.schema,l.table,!1,!1),r)}catch(d){yu.error(d)}}try{i=await mT.request(`${r}.${IM.REQUEST_SUFFIX}`,s),yu.trace("Remove node reply from remote node:",r,i)}catch(u){yu.error("removeNode received error from request:",u),o=!0}let c=new t5(Gd.SYSTEM_SCHEMA_NAME,Gd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await r5.deleteRecord(c),n5({type:"nats_update"}),i?.status===IM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(yu.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(i5,"removeNode")});var LM=g((ife,DM)=>{"use strict";var CM=require("joi"),{string:o5,array:a5}=CM.types(),c5=Ze(),u5=yd();DM.exports=l5;function l5(e){let t=CM.object({operation:o5.valid("configure_cluster").required(),connections:a5.items(u5.validation_schema).required()});return c5.validateBySchema(e,t)}a(l5,"configureClusterValidator")});var pT=g((afe,BM)=>{"use strict";var _5=U(),qd=K(),d5=Q(),f5=Fd(),E5=xd(),MM=ws(),h5=LM(),{handleHDBError:UM,hdb_errors:m5}=ne(),{HTTP_STATUS_CODES:PM}=m5,p5="Configure cluster complete.",S5="Failed to configure the cluster. Check the logs for more details.",T5="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";BM.exports=g5;async function g5(e){qd.trace("configure cluster called with:",e),MM.checkClusteringEnabled();let t=h5(e);if(t)throw UM(t,t.message,PM.BAD_REQUEST,void 0,void 0,!0);let r=await MM.getAllNodeRecords(),n=[];for(let f=0,E=r.length;f<E;f++)n.push(vM(f5,{operation:_5.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let s=await Promise.allSettled(n);qd.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(vM(E5,E,E.node_name))}let c=await Promise.allSettled(i);qd.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"&&(qd.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(d5.isEmptyOrZeroLength(u))return{message:p5,connections:_};if(l)return{message:T5,failed_nodes:u,connections:_};throw UM(new Error,S5,PM.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(g5,"configureCluster");async function vM(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){throw{node_name:r,error:n}}}a(vM,"functionWrapper")});var xM=g((ufe,HM)=>{"use strict";var kd=require("joi"),R5=Ze(),{validateSchemaExists:A5,validateTableExists:O5,validateSchemaName:b5}=Jn(),y5=kd.object({operation:kd.string().valid("purge_stream"),schema:kd.string().custom(A5).custom(b5).required(),table:kd.string().custom(O5).required()});function N5(e){return R5.validateBySchema(e,y5)}a(N5,"purgeStreamValidator");HM.exports=N5});var ST=g((_fe,GM)=>{"use strict";var{handleHDBError:I5,hdb_errors:w5}=ne(),{HTTP_STATUS_CODES:C5}=w5,D5=xM(),L5=mt(),M5=ws();GM.exports=U5;async function U5(e){if(e.purge_ingest!==!0){let s=D5(e);if(s)throw I5(s,s.message,C5.BAD_REQUEST,void 0,void 0,!0)}M5.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:n}=e;return await L5.purgeTableStream(t,r,n),n?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(U5,"purgeStream")});var RT=g((ffe,YM)=>{"use strict";var gT=ws(),P5=mt(),kM=re(),Vd=U(),lo=nt(),v5=Q(),TT=K(),{RemotePayloadObject:B5}=Tu(),{ErrorCode:FM}=require("nats"),qM=kM.get(Vd.CONFIG_PARAMS.CLUSTERING_ENABLED),VM=kM.get(Vd.CONFIG_PARAMS.CLUSTERING_NODENAME);YM.exports={clusterStatus:H5,buildNodeStatus:$M};async function H5(){let e={node_name:VM,is_enabled:qM,connections:[]};if(!qM)return e;let t=await gT.getAllNodeRecords();if(v5.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push($M(t[n],e.connections));return await Promise.allSettled(r),e}a(H5,"clusterStatus");async function $M(e,t){let r=e.name,n=new B5(Vd.OPERATIONS_ENUM.CLUSTER_STATUS,VM,void 0,await gT.getSystemInfo()),s,i,o=lo.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();s=await P5.request(lo.REQUEST_SUBJECT(r),n),i=Date.now()-u,s.status===lo.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=lo.CLUSTER_STATUS_STATUSES.CLOSED,TT.error(`Error getting node status from ${r} `,s))}catch(u){TT.warn(`Error getting node status from ${r}`,u),u.code===FM.NoResponders?o=lo.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===FM.Timeout?o=lo.CLUSTER_STATUS_STATUSES.TIMEOUT:o=lo.CLUSTER_STATUS_STATUSES.CLOSED}let c=new x5(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!==Vd.PRE_4_0_0_VERSION&&await gT.upsertNodeRecord(u)}catch(u){TT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a($M,"buildNodeStatus");function x5(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(x5,"NodeStatusObject")});var OT=g((hfe,KM)=>{"use strict";var{handleHDBError:G5,hdb_errors:F5}=ne(),{HTTP_STATUS_CODES:q5}=F5,k5=mt(),V5=ws(),AT=Q(),$d=require("joi"),$5=Ze(),Y5=2e3,K5=$d.object({timeout:$d.number().min(1),connected_nodes:$d.boolean(),routes:$d.boolean()});KM.exports=W5;async function W5(e){V5.checkClusteringEnabled();let t=$5.validateBySchema(e,K5);if(t)throw G5(t,t.message,q5.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||AT.autoCastBoolean(n),o=s===void 0||AT.autoCastBoolean(s),c={nodes:[]},u=await k5.getServerList(r??Y5),_={};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:AT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(W5,"clusterNetwork")});var JM=g((pfe,zM)=>{"use strict";var bT=require("joi"),WM=Ze(),{route_constraints:QM}=Nh();zM.exports={setRoutesValidator:Q5,deleteRoutesValidator:z5};function Q5(e){let t=bT.object({server:bT.valid("hub","leaf").required(),routes:QM.required()});return WM.validateBySchema(e,t)}a(Q5,"setRoutesValidator");function z5(e){let t=bT.object({routes:QM.required()});return WM.validateBySchema(e,t)}a(z5,"deleteRoutesValidator")});var NT=g((Tfe,eU)=>{"use strict";var _o=Dr(),yT=Q(),Yd=U(),XM=JM(),{handleHDBError:jM,hdb_errors:J5}=ne(),{HTTP_STATUS_CODES:ZM}=J5,X5="cluster routes successfully set",j5="cluster routes successfully deleted";eU.exports={setRoutes:Z5,getRoutes:e8,deleteRoutes:t8};function Z5(e){let t=XM.setRoutesValidator(e);if(t)throw jM(t,t.message,ZM.BAD_REQUEST,void 0,void 0,!0);let r=_o.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=yT.autoCast(_.port);let l=n.some(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"?_o.updateConfigValue(Yd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):_o.updateConfigValue(Yd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:X5,set:o,skipped:i}}a(Z5,"setRoutes");function e8(){let e=_o.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(e8,"getRoutes");function t8(e){let t=XM.deleteRoutesValidator(e);if(t)throw jM(t,t.message,ZM.BAD_REQUEST,void 0,void 0,!0);let r=_o.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=yT.isEmptyOrZeroLength(n)?null:n,_o.updateConfigValue(Yd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),u&&(s=yT.isEmptyOrZeroLength(s)?null:s,_o.updateConfigValue(Yd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:j5,deleted:i,skipped:o}}a(t8,"deleteRoutes")});var rU=g((Rfe,tU)=>{"use strict";var Nu=require("alasql"),fo=require("recursive-iterator"),Hn=K(),r8=Q(),Iu=U(),IT=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,s8(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=>Iu.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=>!Iu.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][Iu.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=n8(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(_=>!Iu.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Nu.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 n8(e){return e.filter(t=>t[Iu.PERMS_CRUD_ENUM.READ])}a(n8,"filterReadRestrictedAttrs");function s8(e,t,r,n,s){i8(e,t,r,n,s)}a(s8,"interpretAST");function wu(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(wu,"addSchemaTableToMap");function i8(e,t,r,n,s){if(!e){Hn.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Nu.yy.Insert?u8(e,t,r):e instanceof Nu.yy.Select?o8(e,t,r,n,s):e instanceof Nu.yy.Update?a8(e,t,r):e instanceof Nu.yy.Delete?c8(e,t,r):Hn.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(i8,"getRecordAttributesAST");function o8(e,t,r,n,s){if(!e){Hn.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(r8.isEmptyOrZeroLength(i)){Hn.error("No schema specified");return}e.from.forEach(c=>{wu(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),wu(c.table,t,r,n,s)});let o=new fo(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Hn.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new fo(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Hn.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new fo(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=s.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Hn.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new fo(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Hn.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(o8,"getSelectAttributes");function a8(e,t,r){if(!e){Hn.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new fo(e.columns),s=e.table.databaseid;wu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&wT(e.table.tableid,s,i.columnid,t,r)}a(a8,"getUpdateAttributes");function c8(e,t,r){if(!e){Hn.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new fo(e.where),s=e.table.databaseid;wu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&wT(e.table.tableid,s,i.columnid,t,r)}a(c8,"getDeleteAttributes");function u8(e,t,r){if(!e){Hn.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new fo(e.columns),s=e.into.databaseid;wu(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&wT(e.into.tableid,s,i.columnid,t,r)}a(u8,"getInsertAttributes");function wT(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(wT,"pushAttribute");tU.exports=IT});var LT=g((Ofe,oU)=>{var Kd=Qi(),nU=require("chalk"),kr=K(),sU=require("prompt"),{promisify:l8}=require("util"),CT=U(),_8=require("fs-extra"),d8=require("path"),f8=Q(),E8=Md(),iU=re();iU.initSync();var h8=require("moment"),m8=l8(sU.get),p8=d8.join(iU.getHdbBasePath(),CT.LICENSE_KEY_DIR_NAME,CT.LICENSE_FILE_NAME,CT.LICENSE_FILE_NAME);oU.exports={getFingerprint:T8,setLicense:S8,parseLicense:DT,register:g8,getRegistrationInfo:A8};async function S8(e){if(e&&e.key&&e.company){try{kr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await DT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw kr.error(r),kr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(S8,"setLicense");async function T8(){let e={};try{e=await Kd.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw kr.error(r),kr.error(t),new Error(r)}return e}a(T8,"getFingerprint");async function DT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");kr.info("Validating license input...");let r=Kd.validateLicense(e,t);if(kr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(kr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(kr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{kr.info("writing license to disk"),await _8.writeFile(p8,JSON.stringify({license_key:e,company:t}))}catch(n){throw kr.error("Failed to write License"),n}return"Registration successful."}a(DT,"parseLicense");async function g8(){let e=await R8();return DT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(g8,"register");async function R8(){let e=await Kd.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:nU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:nU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{sU.start()}catch(n){kr.error(n)}let r;try{r=await m8(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(R8,"promptForRegistration");async function A8(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Kd.getLicense()}catch(r){throw kr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(f8.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=E8.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=h8.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(A8,"getRegistrationInfo")});var cU=g((yfe,aU)=>{"use strict";var O8=nt(),MT=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+O8.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes: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"}};aU.exports=MT});var _U=g((Ife,lU)=>{"use strict";var uU=nt(),UT=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+uU.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+uU.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"}};lU.exports=UT});var fU=g((Cfe,dU)=>{"use strict";var PT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};dU.exports=PT});var hU=g((Lfe,EU)=>{"use strict";var b8=nt(),vT=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+b8.SERVER_SUFFIX.ADMIN,this.password=r}};EU.exports=vT});var xT=g((Ufe,SU)=>{"use strict";var Ea=require("path"),zd=require("fs-extra"),y8=cU(),N8=_U(),I8=fU(),w8=hU(),BT=Hr(),ma=Q(),Sr=Dr(),Qd=U(),Cu=nt(),{CONFIG_PARAMS:_t}=Qd,Du=K(),Lu=re(),mU=Rs(),HT=mt(),ha="clustering",C8=1e4,pU=500;SU.exports={generateNatsConfig:L8,removeNatsConfig:M8,getHubConfigPath:D8};function D8(){let e=Lu.get(_t.ROOTPATH);return Ea.join(e,ha,Cu.NATS_CONFIG_FILES.HUB_SERVER)}a(D8,"getHubConfigPath");async function L8(e=!1,t=void 0){Lu.initSync();let r=Lu.get(_t.ROOTPATH),n=Ea.join(r,ha,Cu.PID_FILES.HUB),s=Ea.join(r,ha,Cu.PID_FILES.LEAF),i=Sr.getConfigFromFile(_t.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Ea.join(r,ha,Cu.NATS_CONFIG_FILES.HUB_SERVER),c=Ea.join(r,ha,Cu.NATS_CONFIG_FILES.LEAF_SERVER),u=Sr.getConfigFromFile(_t.CLUSTERING_TLS_CERTIFICATE),_=Sr.getConfigFromFile(_t.CLUSTERING_TLS_PRIVATEKEY),l=Sr.getConfigFromFile(_t.CLUSTERING_TLS_CERT_AUTH),d=Sr.getConfigFromFile(_t.CLUSTERING_TLS_INSECURE),f=Sr.getConfigFromFile(_t.CLUSTERING_TLS_VERIFY),E=Sr.getConfigFromFile(_t.CLUSTERING_NODENAME),h=Sr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await HT.checkNATSServerInstalled()||Jd("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await BT.listUsers(),S=Sr.getConfigFromFile(_t.CLUSTERING_USER),T=await BT.getClusterUser();(ma.isEmpty(T)||T.active!==!0)&&Jd(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Wd(_t.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Wd(_t.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Wd(_t.CLUSTERING_HUBSERVER_NETWORK_PORT),await Wd(_t.CLUSTERING_LEAFSERVER_NETWORK_PORT));let b=[],R=[];for(let[z,J]of p.entries())J.role.role===Qd.ROLE_TYPES_ENUM.CLUSTER_USER&&J.active&&(b.push(new w8(J.username,mU.decrypt(J.hash))),R.push(new I8(J.username,mU.decrypt(J.hash))));let L=[],{hub_routes:H}=Sr.getClusteringRoutes();if(!ma.isEmptyOrZeroLength(H))for(let z of H)L.push(`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@${z.host}:${z.port}`);let P=new y8(Sr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,u,_,l,d,f,h,Sr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_CLUSTER_NAME),Sr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),L,b,R);l==null&&(delete P.tls.ca_file,delete P.leafnodes.tls.ca_file),t=ma.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Qd.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await zd.writeJson(o,P),Du.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}`,X=new N8(Sr.getConfigFromFile(_t.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[k],[B],b,R,u,_,l,d);l==null&&delete X.tls.ca_file,(t===void 0||t===Qd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await zd.writeJson(c,X),Du.trace(`Leaf server config written to ${c}`))}a(L8,"generateNatsConfig");async function Wd(e){let t=Lu.get(e);return ma.isEmpty(t)&&Jd(`port undefined for '${e}'`),await ma.isPortTaken(t)&&Jd(`'${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(Wd,"isPortAvailable");function Jd(e){let t=`Error generating clustering config: ${e}`;Du.error(t),console.error(t),process.exit(1)}a(Jd,"generateNatsConfigError");async function M8(e){let{port:t,config_file:r}=HT.getServerConfig(e),{username:n,decrypt_hash:s}=await BT.getClusterUser(),i=0,o=2e3;for(;i<pU;){try{let _=await HT.createConnection(t,n,s,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Du.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=pU)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 ma.async_set_timeout(o*(i*2))}let c="0".repeat(C8),u=Ea.join(Lu.get(_t.ROOTPATH),ha,r);await zd.writeFile(u,c),await zd.remove(u),Du.notify(e,"started.")}a(M8,"removeNatsConfig")});var bU=g((vfe,OU)=>{"use strict";var Vr=re(),U8=Qi(),me=U(),Mu=nt(),Cs=require("path"),{PACKAGE_ROOT:jd}=U(),TU=re(),Xd=Q(),pa="/dev/null",P8=Cs.join(jd,"launchServiceScripts"),gU=Cs.join(jd,"utility/scripts"),v8=Cs.join(gU,me.HDB_RESTART_SCRIPT),RU=Cs.resolve(jd,"dependencies",`${process.platform}-${process.arch}`,Mu.NATS_BINARY_NAME);function AU(){let t=U8.licenseSearch().ram_allocation||me.RAM_ALLOCATION_ENUM.DEFAULT,r=me.MEM_SETTING_KEY+t,n={[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Xd.noBootFile()&&(n[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Xd.getEnvCliRootPath()),{name:me.PROCESS_DESCRIPTORS.HDB,script:me.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:jd}}a(AU,"generateMainServerConfig");var B8=9930;function H8(){Vr.initSync(!0);let e=Vr.get(me.CONFIG_PARAMS.ROOTPATH),t=Cs.join(e,"clustering",Mu.NATS_CONFIG_FILES.HUB_SERVER),r=Cs.join(Vr.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=TU.get(me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Mu.LOG_LEVEL_FLAGS[Vr.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==B8?"-"+n:""),script:RU,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Vr.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=pa,i.error_file=pa),i}a(H8,"generateNatsHubServerConfig");var x8=9940;function G8(){Vr.initSync(!0);let e=Vr.get(me.CONFIG_PARAMS.ROOTPATH),t=Cs.join(e,"clustering",Mu.NATS_CONFIG_FILES.LEAF_SERVER),r=Cs.join(Vr.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=TU.get(me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Mu.LOG_LEVEL_FLAGS[Vr.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==x8?"-"+n:""),script:RU,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Vr.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=pa,i.error_file=pa),i}a(G8,"generateNatsLeafServerConfig");function F8(){Vr.initSync();let e=Cs.join(Vr.get(me.CONFIG_PARAMS.LOGGING_ROOT),me.LOG_NAMES.HDB),t={name:me.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:me.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:P8,autorestart:!1};return Vr.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=pa,t.error_file=pa),t}a(F8,"generateClusteringUpgradeV4ServiceConfig");function q8(){let e={[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.RESTART_HDB};return Xd.noBootFile()&&(e[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Xd.getEnvCliRootPath()),{...{name:me.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:gU},script:v8}}a(q8,"generateRestart");function k8(){return{apps:[AU()]}}a(k8,"generateAllServiceConfigs");OU.exports={generateAllServiceConfigs:k8,generateMainServerConfig:AU,generateRestart:q8,generateNatsHubServerConfig:H8,generateNatsLeafServerConfig:G8,generateClusteringUpgradeV4ServiceConfig:F8}});var xU=g((xfe,HU)=>{"use strict";var ve=U(),V8=Q(),Ls=xT(),Zd=mt(),Ds=nt(),fi=bU(),ef=re(),Ei=K(),$8=ws(),{startWorker:yU,onMessageFromWorkers:Y8}=tt(),K8=fa(),Hfe=require("util"),W8=require("child_process"),Q8=require("fs"),{execFile:z8}=W8,Ne;HU.exports={enterPM2Mode:J8,start:hi,stop:GT,reload:IU,restart:wU,list:FT,describe:DU,connect:Ms,kill:t6,startAllServices:r6,startService:qT,getUniqueServicesList:LU,restartAllServices:n6,isServiceRegistered:MU,reloadStopStart:UU,restartHdb:CU,deleteProcess:Z8,startClusteringProcesses:vU,startClusteringThreads:BU,isHdbRestartRunning:e6,isClusteringRunning:i6,stopClustering:s6,reloadClustering:o6};var Uu=!1;Y8(e=>{e.type==="restart"&&ef.initSync(!0)});function J8(){Uu=!0}a(J8,"enterPM2Mode");function Ms(){return Ne||(Ne=require("pm2")),new Promise((e,t)=>{Ne.connect((r,n)=>{Ei.setupConsoleLogging(),r&&t(r),e(n)})})}a(Ms,"connect");var Tr,X8=10,NU;function hi(e,t=!1){if(Uu)return j8(e);let r=z8(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Tr.indexOf(r);o>-1&&Tr.splice(o,1),!NU&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<X8&&(Q8.existsSync(Ls.getHubConfigPath())?hi(e):(await Ls.generateNatsConfig(!0),hi(e),await new Promise(c=>setTimeout(c,3e3)),await Ls.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ls.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=ef.get(ve.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&Ds.LOG_LEVEL_HIERARCHY[o]>=Ds.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Ds.LOG_LEVELS.ERR||l===Ds.LOG_LEVELS.WRN?Ei.OUTPUTS.STDERR:Ei.OUTPUTS.STDOUT;Ei.logCustomLevel(l||"info",E,n,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=Ds.LOG_LEVELS[f]}if(Ds.LOG_LEVEL_HIERARCHY[o]>=Ds.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===Ds.LOG_LEVELS.ERR||l===Ds.LOG_LEVELS.WRN?Ei.OUTPUTS.STDERR:Ei.OUTPUTS.STDOUT;Ei.logCustomLevel(l||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),Tr=[],!Tr&&!t){let i=a(()=>{NU=!0,Tr&&(Tr.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}Tr.push(r)}a(hi,"start");function j8(e){return new Promise(async(t,r)=>{try{await Ms()}catch(n){r(n)}Ne.start(e,(n,s)=>{n&&(Ne.disconnect(),r(n)),Ne.disconnect(),t(s)})})}a(j8,"startWithPM2");function GT(e){if(!Uu){for(let t of Tr||[])t.name===e&&(Tr.splice(Tr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Ms()}catch(n){r(n)}Ne.stop(e,async(n,s)=>{n&&(Ne.disconnect(),r(n)),Ne.delete(e,(i,o)=>{i&&(Ne.disconnect(),r(n)),Ne.disconnect(),t(o)})})})}a(GT,"stop");function IU(e){return new Promise(async(t,r)=>{try{await Ms()}catch(n){r(n)}Ne.reload(e,(n,s)=>{n&&(Ne.disconnect(),r(n)),Ne.disconnect(),t(s)})})}a(IU,"reload");function wU(e){if(!Uu)for(let t of Tr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Ms()}catch(n){r(n)}Ne.restart(e,(n,s)=>{Ne.disconnect(),t(s)})})}a(wU,"restart");function Z8(e){return new Promise(async(t,r)=>{try{await Ms()}catch(n){r(n)}Ne.delete(e,(n,s)=>{n&&(Ne.disconnect(),r(n)),Ne.disconnect(),t(s)})})}a(Z8,"deleteProcess");async function CU(){await hi(fi.generateRestart())}a(CU,"restartHdb");async function e6(){let e=await FT();for(let t in e)if(e[t].name===ve.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(e6,"isHdbRestartRunning");function FT(){return new Promise(async(e,t)=>{try{await Ms()}catch(r){t(r)}Ne.list((r,n)=>{r&&(Ne.disconnect(),t(r)),Ne.disconnect(),e(n)})})}a(FT,"list");function DU(e){return new Promise(async(t,r)=>{try{await Ms()}catch(n){r(n)}Ne.describe(e,(n,s)=>{n&&(Ne.disconnect(),r(n)),Ne.disconnect(),t(s)})})}a(DU,"describe");function t6(){if(!Uu){for(let e of Tr||[])e.kill();Tr=[];return}return new Promise(async(e,t)=>{try{await Ms()}catch(r){t(r)}Ne.killDaemon((r,n)=>{r&&(Ne.disconnect(),t(r)),Ne.disconnect(),e(n)})})}a(t6,"kill");async function r6(){try{await vU(),await BU(),await hi(fi.generateAllServiceConfigs())}catch(e){throw Ne?.disconnect(),e}}a(r6,"startAllServices");async function qT(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ve.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=fi.generateMainServerConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=fi.generateNatsIngestServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=fi.generateNatsReplyServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=fi.generateNatsHubServerConfig(),await hi(r,t),await Ls.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=fi.generateNatsLeafServerConfig(),await hi(r,t),await Ls.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=fi.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await hi(r)}catch(r){throw Ne?.disconnect(),r}}a(qT,"startService");async function LU(){try{let e=await FT(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw Ne?.disconnect(),e}}a(LU,"getUniqueServicesList");async function n6(e=[]){try{let t=!1,r=await LU();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===ve.PROCESS_DESCRIPTORS.HDB?t=!0:await wU(o))}t&&await UU(ve.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Ne?.disconnect(),t}}a(n6,"restartAllServices");async function MU(e){if(Tr?.find(r=>r.name===e))return!0;let t=await K8.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(MU,"isServiceRegistered");async function UU(e){let t=ef.get(ve.CONFIG_PARAMS.THREADS_COUNT)??ef.get(ve.CONFIG_PARAMS.THREADS),r=await DU(e),n=V8.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await GT(e),await qT(e)):e===ve.PROCESS_DESCRIPTORS.HDB?await CU():await IU(e)}a(UU,"reloadStopStart");var PU;async function vU(e=!1){for(let t in ve.CLUSTERING_PROCESSES){let r=ve.CLUSTERING_PROCESSES[t];await qT(r,e)}}a(vU,"startClusteringProcesses");async function BU(){PU=yU(ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Zd.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Zd.updateLocalStreams();let e=await $8.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ve.PRE_4_0_0_VERSION){Ei.info("Starting clustering upgrade 4.0.0 process"),yU(ve.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(BU,"startClusteringThreads");async function s6(){for(let e in ve.CLUSTERING_PROCESSES)if(e!==ve.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ve.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await PU.terminate();else{let t=ve.CLUSTERING_PROCESSES[e];await GT(t)}}a(s6,"stopClustering");async function i6(){for(let e in ve.CLUSTERING_PROCESSES){let t=ve.CLUSTERING_PROCESSES[e];if(await MU(t)===!1)return!1}return!0}a(i6,"isClusteringRunning");async function o6(){await Ls.generateNatsConfig(!0),await Zd.reloadNATSHub(),await Zd.reloadNATSLeaf(),await Ls.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ls.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(o6,"reloadClustering")});var of=g((qfe,YU)=>{"use strict";var a6=require("minimist"),{isMainThread:VT,parentPort:qU}=require("worker_threads"),st=U(),{PROCESS_DESCRIPTORS_VALIDATE:Pu}=st,ss=K(),$T=Q(),rf=xT(),tf=mt(),Ffe=nt(),kU=Dr(),is=xU(),GU=fa(),c6=hh(),{restartWorkers:nf,onMessageByType:u6}=tt(),{handleHDBError:l6,hdb_errors:_6}=ne(),{HTTP_STATUS_CODES:d6}=_6,sf=re();sf.initSync();var vu=`Restarting HarperDB. This may take up to ${st.RESTART_TIMEOUT_MS/1e3} seconds.`,f6="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",FU="Clustering is not enabled so cannot be restarted",E6="Invalid service",Sa,un;YU.exports={restart:VU,restartService:YT};VT&&u6(st.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?YT({service:e.workerType}):VU({operation:"restart"})});async function VU(e){un=Object.keys(e).length===0,Sa=await is.isServiceRegistered(st.HDB_PROC_DESCRIPTOR);let t=a6(process.argv);if(t.service){await YT(t);return}if(un&&!Sa){console.error(f6);return}if(un&&console.log(vu),Sa){is.enterPM2Mode(),ss.notify(vu);let r=c6(Object.keys(st.CONFIG_PARAM_MAP),!0);return $T.isEmptyOrZeroLength(Object.keys(r))||kU.updateConfigValue(void 0,void 0,r,!0,!0),h6(),vu}return VT?(ss.notify(vu),setTimeout(()=>{nf()},50)):qU.postMessage({type:st.ITC_EVENT_TYPES.RESTART}),vu}a(VU,"restart");async function YT(e){let{service:t}=e;if(st.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw l6(new Error,E6,d6.BAD_REQUEST,void 0,void 0,!0);if(Sa=await is.isServiceRegistered(st.HDB_PROC_DESCRIPTOR),!VT)return qU.postMessage({type:st.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Pu.clustering:if(!sf.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=FU;break}un&&console.log("Restarting clustering"),ss.notify("Restarting clustering"),await $U();break;case Pu.clustering_config:case Pu["clustering config"]:if(!sf.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=FU;break}un&&console.log("Restarting clustering_config"),ss.notify("Restarting clustering_config"),await is.reloadClustering();break;case"custom_functions":case"custom functions":case Pu.harperdb:case Pu.http_workers:if(un&&!Sa){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}un&&console.log("Restarting http_workers"),ss.notify("Restarting http_workers"),un?await is.restart(st.HDB_PROC_DESCRIPTOR):setTimeout(()=>{nf("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(ss.error(r),un&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(YT,"restartService");async function h6(){await $U(),await is.restart(st.HDB_PROC_DESCRIPTOR),await $T.async_set_timeout(2e3),sf.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await kT(),un&&(await tf.closeConnection(),process.exit(0))}a(h6,"restartPM2Mode");async function $U(){if(!kU.getConfigFromFile(st.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await GU.getHDBProcessInfo()).clustering.length===0)ss.trace("Clustering not running, restart will start clustering services"),await rf.generateNatsConfig(!0),await is.startClusteringProcesses(),await is.startClusteringThreads(),await kT(),un&&await tf.closeConnection();else{await rf.generateNatsConfig(!0),Sa?(ss.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await is.restart(st.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await is.restart(st.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await GU.getHDBProcessInfo()).clustering.forEach(s=>{ss.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await $T.async_set_timeout(3e3),await kT(),await tf.updateLocalStreams(),un&&await tf.closeConnection(),ss.trace("Restart clustering restarting ingest and reply service threads");let t=nf(st.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=nf(st.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a($U,"restartClustering");async function kT(){await rf.removeNatsConfig(st.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await rf.removeNatsConfig(st.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(kT,"removeNatsConfig")});var rP=g(($fe,tP)=>{"use strict";var Vfe=require("lodash"),gr=U(),{handleHDBError:KU,hdb_errors:m6}=ne(),{HDB_ERROR_MSGS:p6,HTTP_STATUS_CODES:S6}=m6,KT=K();tP.exports={getRolePermissions:g6};var Eo=Object.create(null),T6=a(e=>({key:e,perms:{}}),"perms_template_obj"),JU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),XU=a((e=!1,t=!1,r=!1,n=!1)=>({[gr.PERMS_CRUD_ENUM.READ]:e,[gr.PERMS_CRUD_ENUM.INSERT]:t,[gr.PERMS_CRUD_ENUM.UPDATE]:r,[gr.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),WT=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...XU(t,r,n,s)}),"table_perms_template"),WU=a((e,t=XU())=>({attribute_name:e,describe:eP(t),[Bu]:t[Bu],[QT]:t[QT],[zT]:t[zT]}),"attr_perms_template"),QU=a((e,t=!1)=>({attribute_name:e,describe:t,[Bu]:t}),"timestamp_attr_perms_template"),{READ:Bu,INSERT:QT,UPDATE:zT}=gr.PERMS_CRUD_ENUM,jU=Object.values(gr.PERMS_CRUD_ENUM),ZU=[Bu,QT,zT];function g6(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[gr.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(Eo[t]&&Eo[t].key===n)return Eo[t].perms;let s=R6(e,r);return Eo[t]?Eo[t].key=n:Eo[t]=T6(n),Eo[t].perms=s,s}catch(r){if(!e[gr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[gr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<gr.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 KT.error(n),KT.debug(r),KU(new Error,p6.OUTDATED_PERMS_TRANSLATION_ERROR,S6.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
|
|
11
11
|
${r.stack}`;throw KT.error(n),KU(new Error)}}}a(g6,"getRolePermissions");function R6(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[gr.SYSTEM_SCHEMA_NAME]=n[gr.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]=A6(t[i]);return}r[i]=JU(),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],_=O6(c,u);r[i].describe||jU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=WT()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=WT()})}),r}a(R6,"translateRolePermissions");function A6(e){let t=JU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=WT(!0,!0,!0,!0,!0)}),t}a(A6,"createStructureUserPermissions");function O6(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 gr.TIME_STAMP_NAMES.includes(d)&&(f=QU(d,l[Bu])),_[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=eP(l),s.attribute_permissions.push(l),c||b6(l,u)}else if(_!==o){let l;gr.TIME_STAMP_NAMES.includes(_)?l=QU(_):l=WU(_),s.attribute_permissions.push(l)}}),c||s.attribute_permissions.push(u),s.describe=zU(s),s}else return e.describe=zU(e),e}a(O6,"getTableAttrPerms");function zU(e){return jU.filter(t=>e[t]).length>0}a(zU,"getSchemaTableDescribePerm");function eP(e){return ZU.filter(t=>e[t]).length>0}a(eP,"getAttributeDescribePerm");function b6(e,t){ZU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(b6,"checkForHashPerms")});var nP={};$e(nP,{Resources:()=>af,keyArrayToString:()=>Ta,resetResources:()=>y6,resources:()=>mi});function y6(){return mi=new af}function Ta(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var af,mi,Hu=Re(()=>{eo();af=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(y6,"resetResources");a(Ta,"keyArrayToString")});var sP={};$e(sP,{Headers:()=>pi,appendHeader:()=>JT});function JT(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 pi,xu=Re(()=>{pi=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(JT,"appendHeader")});var Gu={};$e(Gu,{authentication:()=>dP,bypassAuth:()=>M6,login:()=>P6,logout:()=>v6,start:()=>U6});function M6(){_P=!0}async function dP(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?C6?w6:[]:I6?N6:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new pi([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return cf&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),cf&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(cf){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 oP.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new ga.AuthAuditLog(E,h,Pt.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===Pt.AUTH_AUDIT_STATUS.SUCCESS?iP.notify(S):iP.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 et.getUser(E,null,null),l(E,Pt.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,ga.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=ho.get(n),!d){let[E,h]=n.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await et.getUser(p,S,e):null;break;case"Bearer":try{d=await(0,uf.validateOperationToken)(h)}catch(T){if(T.message==="invalid token")try{return await(0,uf.validateRefreshToken)(h),c({status:-1})}catch{throw T}}break}}catch(T){return L6&&(ho.get(h)||(ho.set(h,h),l(p,Pt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:Si({error:T.message},e)})}ho.set(n,d),D6&&l(d.username,Pt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await et.getUser(_.user,null,e):(_P&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,cP.getSuperUser)());cf&&(e.session.update=function(E){if(!u){u=(0,uP.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,oP.put(E)},e.login=async function(E,h){e.user=await et.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")&&mi.loginPath?(f.status=302,f.headers.set("Location",mi.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 pi);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function U6({server:e,port:t}){e.request(dP,{port:t||"all"}),aP||(aP=!0,setInterval(()=>{ho=new Map},ln.get(Pt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),lP.user.addListener(()=>{ho=new Map}))}async function P6(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 v6(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var cP,uf,uP,ln,Pt,ga,lP,iP,N6,I6,w6,C6,oP,cf,_P,D6,L6,ho,aP,lf=Re(()=>{cP=x(Hr());or();Hu();uf=x(Su());Ae();uP=require("uuid"),ln=x(re()),Pt=x(U()),ga=x(K()),lP=x(Bc());xu();Ra();iP=(0,ga.loggerWithTag)("auth-event");ln.initSync();N6=ln.get(Pt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),I6=ln.get(Pt.CONFIG_PARAMS.HTTP_CORS),w6=ln.get(Pt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),C6=ln.get(Pt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),oP=ct({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),cf=ln.get(Pt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,_P=ln.get(Pt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,D6=ln.get(Pt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,L6=ln.get(Pt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,ho=new Map;et.onInvalidatedUser(()=>{ho=new Map});a(M6,"bypassAuth");a(dP,"authentication");a(U6,"start");a(P6,"login");a(v6,"logout")});var TP=g((tEe,SP)=>{"use strict";var Ie=require("joi"),fP=require("fs-extra"),EP=require("path"),Ps=Ze(),hP=re(),mP=U(),pP=K(),{hdb_errors:B6}=ne(),{HDB_ERROR_MSGS:er}=B6,Us=/^[a-zA-Z0-9-_]+$/;SP.exports={getDropCustomFunctionValidator:x6,setCustomFunctionValidator:G6,addComponentValidator:V6,dropCustomFunctionProjectValidator:$6,packageComponentValidator:Y6,deployComponentValidator:K6,setComponentFileValidator:F6,getComponentFileValidator:k6,dropComponentFileValidator:q6};function _f(e,t,r){try{let n=hP.get(mP.CONFIG_PARAMS.COMPONENTSROOT),s=EP.join(n,t);return fP.existsSync(s)?e?t:r.message(er.PROJECT_EXISTS):e?r.message(er.NO_PROJECT):t}catch(n){return pP.error(n),r.message(er.VALIDATION_ERR)}}a(_f,"checkProjectExists");function Fu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Fu,"checkFilePath");function H6(e,t,r,n){try{let s=hP.get(mP.CONFIG_PARAMS.COMPONENTSROOT),i=EP.join(s,e,t,r+".js");return fP.existsSync(i)?r:n.message(er.NO_FILE)}catch(s){return pP.error(s),n.message(er.VALIDATION_ERR)}}a(H6,"checkFileExists");function x6(e){let t=Ie.object({project:Ie.string().pattern(Us).custom(_f.bind(null,!0)).required().messages({"string.pattern.base":er.BAD_PROJECT_NAME}),type:Ie.string().valid("helpers","routes").required(),file:Ie.string().pattern(Us).custom(H6.bind(null,e.project,e.type)).custom(Fu).required().messages({"string.pattern.base":er.BAD_FILE_NAME})});return Ps.validateBySchema(e,t)}a(x6,"getDropCustomFunctionValidator");function G6(e){let t=Ie.object({project:Ie.string().pattern(Us).custom(_f.bind(null,!0)).required().messages({"string.pattern.base":er.BAD_PROJECT_NAME}),type:Ie.string().valid("helpers","routes").required(),file:Ie.string().custom(Fu).required(),function_content:Ie.string().required()});return Ps.validateBySchema(e,t)}a(G6,"setCustomFunctionValidator");function F6(e){let t=Ie.object({project:Ie.string().pattern(Us).required().messages({"string.pattern.base":er.BAD_PROJECT_NAME}),file:Ie.string().custom(Fu).required(),payload:Ie.string().allow("").optional(),encoding:Ie.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ps.validateBySchema(e,t)}a(F6,"setComponentFileValidator");function q6(e){let t=Ie.object({project:Ie.string().pattern(Us).required().messages({"string.pattern.base":er.BAD_PROJECT_NAME}),file:Ie.string().custom(Fu).optional()});return Ps.validateBySchema(e,t)}a(q6,"dropComponentFileValidator");function k6(e){let t=Ie.object({project:Ie.string().required(),file:Ie.string().custom(Fu).required(),encoding:Ie.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ps.validateBySchema(e,t)}a(k6,"getComponentFileValidator");function V6(e){let t=Ie.object({project:Ie.string().pattern(Us).custom(_f.bind(null,!1)).required().messages({"string.pattern.base":er.BAD_PROJECT_NAME})});return Ps.validateBySchema(e,t)}a(V6,"addComponentValidator");function $6(e){let t=Ie.object({project:Ie.string().pattern(Us).custom(_f.bind(null,!0)).required().messages({"string.pattern.base":er.BAD_PROJECT_NAME})});return Ps.validateBySchema(e,t)}a($6,"dropCustomFunctionProjectValidator");function Y6(e){let t=Ie.object({project:Ie.string().pattern(Us).required().messages({"string.pattern.base":er.BAD_PROJECT_NAME}),skip_node_modules:Ie.boolean()});return Ps.validateBySchema(e,t)}a(Y6,"packageComponentValidator");function K6(e){let t=Ie.object({project:Ie.string().pattern(Us).required().messages({"string.pattern.base":er.BAD_PROJECT_NAME}),payload:Ie.string().optional().messages({"string.pattern.base":er.BAD_PACKAGE}),package:Ie.string().optional()});return Ps.validateBySchema(e,t)}a(K6,"deployComponentValidator")});var hf=g((nEe,NP)=>{"use strict";var df=require("joi"),ff=require("path"),gP=require("fs-extra"),{exec:W6}=require("child_process"),Q6=require("util"),RP=Q6.promisify(W6),qu=U(),{handleHDBError:Aa,hdb_errors:z6}=ne(),{HTTP_STATUS_CODES:Oa}=z6,ku=re(),J6=Ze(),ba=K();ku.initSync();var XT=ku.get(qu.CONFIG_PARAMS.COMPONENTSROOT),AP="npm install --omit=dev --json",X6=`${AP} --dry-run`;NP.exports={installModules:t9,auditModules:r9,installAllRootModules:j6,uninstallRootModule:Z6,linkHarperdb:e9};async function j6(e=!1){await Ef(),await Vu(e?"npm install --ignore-scripts":"npm install",ku.get(qu.CONFIG_PARAMS.ROOTPATH))}a(j6,"installAllRootModules");async function Z6(e){await Vu(`npm uninstall ${e}`,ku.get(qu.CONFIG_PARAMS.ROOTPATH))}a(Z6,"uninstallRootModule");async function e9(){await Ef(),await Vu(`npm link ${qu.PACKAGE_ROOT}`,ku.get(qu.CONFIG_PARAMS.ROOTPATH))}a(e9,"linkHarperdb");async function Vu(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(`
|
|
12
12
|
`,""))}return n&&!n.includes("Debugger listening")&&ba.error("Error running NPM command:",e,n),ba.trace(r,n),r?.replace(`
|
|
13
13
|
`,"")}a(Vu,"runCommand");async function t9(e){ba.info(`starting installModules for request: ${e}`);let t=yP(e);if(t)throw Aa(t,t.message,Oa.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?X6:AP;await Ef(),await bP(r);let i={};for(let o=0,c=r.length;o<c;o++){let u=r[o];i[u]={npm_output:null,npm_error:null};let _=ff.join(XT,u),l,d=null;try{let{stdout:f,stderr:E}=await RP(s,{cwd:_});l=f?f.replace(`
|