harperdb 4.4.19 → 4.4.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +1 -1
- package/bin/lite.js +1 -1
- package/launchServiceScripts/launchInstallNATSServer.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +2 -2
- package/launchServiceScripts/launchNatsReplyService.js +1 -1
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +1 -1
- package/npm-shrinkwrap.json +33 -33
- package/package.json +2 -2
- package/server/jobs/jobProcess.js +1 -1
- package/server/threads/threadServer.js +1 -1
- package/studio/build-local/asset-manifest.json +2 -2
- package/studio/build-local/index.html +1 -1
- package/studio/build-local/static/js/{main.b641de5c.js → main.12321ebb.js} +2 -2
- package/utility/scripts/restartHdb.js +1 -1
- /package/studio/build-local/static/js/{main.b641de5c.js.LICENSE.txt → main.12321ebb.js.LICENSE.txt} +0 -0
|
@@ -8,7 +8,7 @@ Caused by:`));else if(typeof u=="object")try{n+=JSON.stringify(u)}catch{n+="Obje
|
|
|
8
8
|
`).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:HQ.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(GQ,"findPs")});var Ht=N((Dge,bC)=>{"use strict";var qQ="__dbis__",$Q="__txns__",VQ="__environment_name__",KQ="__dbi_defintion__",YQ={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"},WQ=["__createdtime__","__updatedtime__"],jQ="\uFFFF",yC={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},zQ=Object.values(yC);bC.exports={AUDIT_STORE_NAME:$Q,INTERNAL_DBIS_NAME:qQ,DBI_DEFINITION_NAME:KQ,SEARCH_TYPES:YQ,TIMESTAMP_NAMES:WQ,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:VQ,TRANSACTIONS_DBI_NAMES_ENUM:yC,TRANSACTIONS_DBIS:zQ,OVERFLOW_MARKER:jQ}});var Pn=N((Pge,MC)=>{"use strict";var OC=M(),NC=Ht(),IC={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},wC=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),CC={500:wC("There was an error processing your request."),400:"Invalid request"},QQ=CC[IC.INTERNAL_SERVER_ERROR],JQ={OP_NOT_SUPPORTED_FOR_FS:a(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:a(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:a(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:a(e=>`${e} not found.`,"NOT_FOUND")},XQ={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},ZQ={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:a(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:a(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:a(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:a((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:a(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},e2={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 ${NC.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${NC.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"},t2={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${OC.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,"ATTR_NAME_LENGTH_ERR"),ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${OC.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"},DC={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"},r2={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:a(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:a(e=>`Operation '${e}' not found`,"OP_NOT_FOUND"),SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:a((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:a(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},n2={ATTR_PERM_MISSING:a((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:a((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_BOOLEAN"),ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:a(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:a(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:a(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:a(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:a(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:a(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:a(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:a((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:a(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:a(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:a(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:a(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:a(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},s2={ATTR_NOT_FOUND:a((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:a((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:a(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:a(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:a(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:a((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:a((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},i2={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},o2={ALTER_USER_DUP_ROLES:a(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:a(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:a(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:a(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:a(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:a(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},PC={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:a(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},LC={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:a(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},a2={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set fastifyRoutes enabled to true in hdb/harperdb-config.yaml file.",BAD_SSH_KEY_NAME:"SSH key name can only contain alphanumeric, dash and underscore characters"},c2={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},l2={...DC,...ZQ,...JQ,...r2,...n2,...s2,...i2,...o2,...t2,...PC,...LC,...a2,...c2,...XQ};MC.exports={CHECK_LOGS_WRAPPER:wC,HDB_ERROR_MSGS:l2,DEFAULT_ERROR_MSGS:CC,DEFAULT_ERROR_RESP:QQ,HTTP_STATUS_CODES:IC,LMDB_ERRORS_ENUM:e2,AUTHENTICATION_ERROR_MSGS:DC,VALIDATION_ERROR_MSGS:PC,ITC_ERRORS:LC}});var _e=N((Mge,BC)=>{"use strict";var Cl=Pn(),u2=W(),d2=M(),oh=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,UC),this.statusCode=n||Cl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Cl.DEFAULT_ERROR_MSGS[n]?Cl.DEFAULT_ERROR_MSGS[n]:Cl.DEFAULT_ERROR_MSGS[Cl.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&&u2[s](i)}},Tg=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}},gg=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function UC(e,t,r,n=d2.LOG_LEVELS.ERROR,s=null,i=!1){if(vC(e))return e;let o=new oh(e,t,r,n,s);return i&&delete o.stack,o}a(UC,"handleHDBError");function vC(e){return e.__proto__.constructor.name===oh.name}a(vC,"isHDBError");BC.exports={isHDBError:vC,handleHDBError:UC,ClientError:Tg,ServerError:gg,hdb_errors:Cl}});var Ag=N(HC=>{"use strict";var _2={cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
|
|
9
9
|
`),key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
|
|
10
10
|
`)},f2="certificate.pem",E2="privateKey.pem",h2="caCertificate.pem",p2="natsCertificate.pem",m2="natsCaCertificate.pem",Rt={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},S2={tls_certificate:Rt.SERVER,tls_certificateAuthority:Rt.CA,customFunctions_tls_certificate:Rt.SERVER,customFunctions_tls_certificateAuthority:Rt.CA,operationsApi_tls_certificate:Rt["OPERATIONS-API"],operationsApi_tls_certificateAuthority:Rt["OPERATIONS-CA"]},T2={[Rt.SERVER]:2,[Rt.DEFAULT]:1},g2={[Rt["OPERATIONS-API"]]:3,[Rt.SERVER]:2,[Rt.DEFAULT]:1},A2={[Rt["OPERATIONS-API"]]:3,[Rt.SERVER]:2,[Rt.DEFAULT]:1},R2={[Rt["OPERATIONS-CA"]]:3,[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1},y2={[Rt["OPERATIONS-CA"]]:3,[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1},b2={[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1};Object.assign(HC,{CERTIFICATE_PEM_NAME:f2,PRIVATEKEY_PEM_NAME:E2,CA_PEM_NAME:h2,CERT_NAME:Rt,CERT_CONFIG_NAME_MAP:S2,CERT_PREFERENCE_APP:T2,CERT_PREFERENCE_OPS:g2,CERT_PREFERENCE_REP:A2,CA_CERT_PREFERENCE_REP:R2,CA_CERT_PREFERENCE_OPS:y2,CA_CERT_PREFERENCE_APP:b2,CERTIFICATE_VALUES:_2,NATS_CERTIFICATE_PEM_NAME:p2,NATS_CA_PEM_NAME:m2})});var Tt=N((Bge,xC)=>{"use strict";var nn=require("validate.js");nn.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||nn.validators.type.checks[t](e)?null:` must be a '${t}' value`};nn.validators.type.checks={Object:a(function(e){return nn.isObject(e)&&!nn.isArray(e)},"Object"),Array:nn.isArray,Integer:nn.isInteger,Number:nn.isNumber,String:nn.isString,Date:nn.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};nn.validators.hasValidFileExt=function(e,t){return nn.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};xC.exports={validateObject:O2,validateObjectAsync:N2,validateBySchema:I2};function O2(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=nn(e,t,{format:"flat"});return r?new Error(r):null}a(O2,"validateObject");async function N2(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await nn.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(N2,"validateObjectAsync");function I2(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(I2,"validateBySchema")});var yg=N((kge,VC)=>{"use strict";var qC=require("fs-extra"),me=require("joi"),w2=require("os"),{boolean:He,string:It,number:tr,array:Qa}=me.types(),{totalmem:kC}=require("os"),za=require("path"),C2=W(),Rg=te(),xge=Ag(),FC=M(),D2=Tt(),GC="log",P2="components",L2="Invalid logging.rotation.maxSize unit. Available units are G, M or K",M2="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",U2="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",v2="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",B2="rootPath config parameter is undefined",sn=me.alternatives([tr.min(0),It]).optional().empty(null),ah=me.alternatives([Qa.items(It,{host:It.required(),port:sn},{hostname:It.required(),port:sn}).empty(null),Qa.items(It)]),hi,$C=!1;VC.exports={configValidator:H2,routesValidator:$2,route_constraints:ah};function H2(e,t=!1){if($C=t,hi=e.rootPath,Rg.isEmpty(hi))throw B2;let r=He.optional(),n=tr.min(0).max(1e3).empty(null).default(q2),s=It.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Gd),i=It.optional().empty(null),o=It.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=me.string().empty(null).default(Gd),l=me.custom(k2).empty(null).default(Gd),u=e.clustering?.enabled,d=me.object({certificate:i,certificateAuthority:i,privateKey:i}),_;return u===!0?_=me.object({enabled:r,hubServer:me.object({cluster:me.object({name:me.required().empty(null),network:me.object({port:sn,routes:ah}).required()}).required(),leafNodes:me.object({network:me.object({port:sn}).required()}).required(),network:me.object({port:sn}).required()}).required(),leafServer:me.object({network:me.object({port:sn,routes:ah}).required(),streams:me.object({maxAge:tr.min(120).allow(null).optional(),maxBytes:tr.min(1).allow(null).optional(),maxMsgs:tr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:me.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:He.optional(),databaseLevel:He.optional(),tls:me.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:He.required(),verify:He.optional()}),user:It.optional().empty(null)}).optional():_=me.object({enabled:r,tls:me.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:He.optional()})}).optional(),me.object({authentication:me.alternatives(me.object({authorizeLocal:He,cacheTTL:tr.required(),enableSessions:He}),He).optional(),analytics:me.object({aggregatePeriod:tr}),replication:me.object({hostname:me.alternatives(It,tr).optional().empty(null),url:It.optional().empty(null),port:sn,securePort:sn,routes:Qa.optional().empty(null),databases:me.alternatives(It,Qa),enableRootCAs:He.optional(),copyTablesToCatchUp:He.optional()}).optional(),componentsRoot:s.optional(),clustering:_,localStudio:me.object({enabled:r}).required(),logging:me.object({auditAuthEvents:me.object({logFailed:He,logSuccessful:He}),file:He.required(),level:me.valid("notify","fatal","error","warn","info","debug","trace"),rotation:me.object({enabled:He.optional(),compress:He.optional(),interval:It.custom(G2).optional().empty(null),maxSize:It.custom(F2).optional().empty(null),path:It.optional().empty(null).default(Gd)}).required(),root:s,stdStreams:He.required(),auditLog:He.required()}).required(),operationsApi:me.object({network:me.object({cors:He.optional(),corsAccessList:Qa.optional(),headersTimeout:tr.min(1).optional(),keepAliveTimeout:tr.min(1).optional(),port:sn,domainSocket:me.optional().empty("hdb/operations-server").default(Gd),securePort:sn,timeout:tr.min(1).optional()}).optional(),tls:me.alternatives([me.array().items(d),d])}).required(),rootPath:It.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:me.object({network:me.object({port:sn,securePort:sn,mtls:me.alternatives([He.optional(),me.object({user:It.optional(),certificateAuthority:i,required:He.optional()})])}).required(),webSocket:He.optional(),requireAuthentication:He.optional()}),http:me.object({compressionThreshold:tr.optional(),cors:He.optional(),corsAccessList:Qa.optional(),headersTimeout:tr.min(1).optional(),port:sn,securePort:sn,maxHeaderSize:tr.optional(),mtls:me.alternatives([He.optional(),me.object({user:It.optional(),certificateAuthority:i,required:He.optional()})]),threadRange:me.alternatives([Qa.optional(),It.optional()])}).required(),threads:me.alternatives(n.optional(),me.object({count:n.optional(),debug:me.alternatives(He.optional(),me.object({startingPort:tr.min(1).optional(),host:It.optional(),waitForDebugger:He.optional()})),maxHeapMemory:tr.min(0).optional()})),storage:me.object({writeAsync:He.required(),overlappingSync:He.optional(),caching:He.optional(),compression:me.alternatives([He.optional(),me.object({dictionary:It.optional(),threshold:tr.optional()})]),compactOnStart:He.optional(),compactOnStartKeepBackup:He.optional(),noReadAhead:He.optional(),path:l,prefetchWrites:He.optional(),maxFreeSpaceToLoad:tr.optional(),maxFreeSpaceToRetain:tr.optional()}).required(),ignoreScripts:He.optional(),tls:me.alternatives([me.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(H2,"configValidator");function x2(e){return $C||qC.existsSync(e)?null:`Specified path ${e} does not exist.`}a(x2,"doesPathExist");function k2(e,t){me.assert(e,It.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=x2(e);if(r)return t.message(r)}a(k2,"validatePath");function F2(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(L2);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(U2):e}a(F2,"validateRotationMaxSize");function G2(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(M2);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(v2):e}a(G2,"validateRotationInterval");function q2(e,t){let r=t.state.path.join("."),n=w2.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||kC();return i=Math.round(Math.min(i,kC())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),C2.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(q2,"setDefaultThreads");function Gd(e,t){let r=t.state.path.join(".");if(!Rg.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Rg.isEmpty(hi))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return za.join(hi,P2);case"logging.root":return za.join(hi,GC);case"clustering.leafServer.streams.path":return za.join(hi,"clustering","leaf");case"storage.path":let n=za.join(hi,FC.LEGACY_DATABASES_DIR_NAME);return qC.existsSync(n)?n:za.join(hi,FC.DATABASES_DIR_NAME);case"logging.rotation.path":return za.join(hi,GC);case"operationsApi.network.domainSocket":return r==null?null:za.join(hi,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Gd,"setDefaultRoot");function $2(e){let t=me.object({routes:ah});return D2.validateBySchema({routes:e},t)}a($2,"routesValidator")});var Ja={};je(Ja,{server:()=>it});var KC,it,qr=Ie(()=>{KC=L(_i()),it={};(0,KC._assignPackageExport)("server",it)});var wt=N(tD=>{"use strict";var on=M(),hr=te(),pr=W(),{configValidator:V2,routesValidator:YC}=yg(),$r=require("fs-extra"),jC=require("yaml"),Mn=require("path"),K2=require("is-number"),zC=require("properties-reader"),Y2=require("lodash"),{handleHDBError:W2}=_e(),{HTTP_STATUS_CODES:j2,HDB_ERROR_MSGS:Dl}=Pn(),{server:z2}=(qr(),oe(Ja)),{DATABASES_PARAM_CONFIG:qd,CONFIG_PARAMS:Ln,CONFIG_PARAM_MAP:ks}=on,Q2="Unable to get config value because config is uninitialized",J2="Config successfully initialized",X2="Error backing up config file",Z2="Empty parameter sent to getConfigValue",QC=Mn.join(on.PACKAGE_ROOT,"config","yaml",on.HDB_DEFAULT_CONFIG_FILE),e4=Mn.join(on.PACKAGE_ROOT,"config","yaml","defaultNatsConfig.yaml"),t4="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",WC={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"},ch,jt,lh;Object.assign(tD,{createConfigFile:r4,getDefaultConfig:n4,getConfigValue:XC,initConfig:uh,flattenConfig:Pl,updateConfigValue:ZC,updateConfigObject:i4,getConfiguration:c4,setConfiguration:l4,readConfigFile:Ig,getClusteringRoutes:u4,initOldConfig:eD,getConfigFromFile:d4,getConfigFilePath:Xa,addConfig:_4,deleteConfigFromFile:f4,getConfigObj:E4,resolvePath:bg,getFlatConfigObj:h4});function bg(e){if(e?.startsWith("~/"))return Mn.join(hr.getHomeDir(),e.slice(1));let t=se();return Mn.resolve(t.getHdbBasePath(),e)}a(bg,"resolvePath");function r4(e,t=!1){let r=$o(QC);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=jC.parseDocument($r.readFileSync(e4,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}ch=Pl(r.toJSON());let n;for(let c in e){let l=ks[c.toLowerCase()];if(l===Ln.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(u=>({[u]:e[c][u]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let u=l.split("_"),d=Og(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{r.setIn([...u],d)}catch(_){pr.error(_)}}}n&&JC(r,n),Ng(r,t);let s=r.toJSON();jt=Pl(s);let i=r.getIn(["rootPath"]),o=Mn.join(i,on.HDB_CONFIG_FILE);$r.createFileSync(o),$r.writeFileSync(o,String(r)),pr.trace(`Config file written to ${o}`)}a(r4,"createConfigFile");function JC(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!hr.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(qd.TABLES))for(let i in n[s][qd.TABLES])for(let o in n[s][qd.TABLES][i]){let c=n[s][qd.TABLES][i][o],l=[Ln.DATABASES,s,qd.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[Ln.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){pr.error("Error parsing schemas CLI/env config arguments",n)}}a(JC,"setSchemasConfig");function n4(e){if(ch===void 0){let r=$o(QC);ch=Pl(r.toJSON())}let t=ks[e.toLowerCase()];if(t!==void 0)return ch[t.toLowerCase()]}a(n4,"getDefaultConfig");function XC(e){if(e==null){pr.info(Z2);return}if(jt===void 0){pr.trace(Q2);return}let t=ks[e.toLowerCase()];if(t!==void 0)return jt[t.toLowerCase()]}a(XC,"getConfigValue");function Xa(e=hr.getPropsFilePath()){let t=hr.getEnvCliRootPath();if(t)return bg(Mn.join(t,on.HDB_CONFIG_FILE));let r=zC(e);return bg(r.get(on.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(Xa,"getConfigFilePath");function uh(e=!1){if(jt===void 0||e){let t;if(!hr.noBootFile()){t=hr.getPropsFilePath();try{$r.accessSync(t,$r.constants.F_OK|$r.constants.R_OK)}catch(i){throw pr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Xa(t),n;if(r.includes("config/settings.js"))try{eD(r);return}catch(i){if(i.code!==on.NODE_ERROR_CODES.ENOENT)throw i}try{n=$o(r)}catch(i){if(i.code===on.NODE_ERROR_CODES.ENOENT){pr.trace(`HarperDB config file not found at ${r}.
|
|
11
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw pr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}s4(n,r),Ng(n);let s=n.toJSON();if(z2.config=s,jt=Pl(s),jt.logging_rotation_rotate)for(let i in WC)jt[i]&&pr.error(`Config ${WC[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);pr.trace(J2)}}a(uh,"initConfig");function s4(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Mn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Mn.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(pr.trace("Updating config file with missing config params"),$r.writeFileSync(t,String(e)))}a(s4,"checkForUpdatedConfig");function Ng(e,t=!1){let r=e.toJSON();if(r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads),r.http?.port&&r.http?.port===r.http?.securePort)throw Dl.CONFIG_VALIDATION("http.port and http.securePort cannot be the same value");if(r.operationsApi?.network?.port&&r.operationsApi?.network?.port===r.operationsApi?.network?.securePort)throw Dl.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=V2(r,t);if(n.error)throw Dl.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}a(Ng,"validateConfig");function i4(e,t){jt===void 0&&(jt={});let r=ks[e.toLowerCase()];if(r===void 0){pr.trace(`Unable to update config object because config param '${e}' does not exist`);return}jt[r.toLowerCase()]=t}a(i4,"updateConfigObject");function ZC(e,t,r=void 0,n=!1,s=!1,i=!1){jt===void 0&&uh();let o=XC(ks.hdb_root),c=Mn.join(o,on.HDB_CONFIG_FILE),l=$o(c),u;if(r===void 0&&e.toLowerCase()===Ln.DATABASES)u=t;else if(r===void 0){let E;if(i)E=e;else if(E=ks[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=Og(E,t);l.setIn([...f],h)}else for(let E in r){let f=ks[E.toLowerCase()];if(f===Ln.HTTP_SECUREPORT&&r[E]===jt[Ln.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),f===Ln.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===jt[Ln.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),f===Ln.DATABASES){u=r[E];continue}if(f?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),T=on.LEGACY_CONFIG_PARAMS[E.toUpperCase()];T&&T.startsWith("customFunctions")&&l.hasIn(T.split("_"))&&(f=T,h=T.split("_"));let m=Og(f,r[E]);f==="rootPath"&&m?.endsWith("/")&&(m=m.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],m)}catch(g){pr.error(g)}}}u&&JC(l,u),Ng(l);let d=l.getIn(["rootPath"]),_=Mn.join(d,on.HDB_CONFIG_FILE);n===!0&&o4(c,d),$r.writeFileSync(_,String(l)),s&&(jt=Pl(l.toJSON())),pr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(ZC,"updateConfigValue");function o4(e,t){try{let r=Mn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${on.HDB_CONFIG_FILE}.bak`);$r.copySync(e,r),pr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){pr.error(X2),pr.error(r)}}a(o4,"backupConfigFile");var a4=["databases"];function Pl(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network={...e.http,...e.operationsApi.network}),e?.operationsApi&&(e.operationsApi.tls={...e.tls,...e.operationsApi.tls}),lh=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])&&!a4.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!Ln[l.toUpperCase()]&&ks[l]&&(s[ks[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Pl,"flattenConfig");function Og(e,t){if(e===Ln.CLUSTERING_NODENAME||e===Ln.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(K2(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||hr.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return hr.autoCast(t)}a(Og,"castConfigValue");function c4(){let e=hr.getPropsFilePath(),t=Xa(e);return $o(t).toJSON()}a(c4,"getConfiguration");async function l4(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return ZC(void 0,void 0,s,!0),t4}catch(i){throw typeof i=="string"||i instanceof String?W2(i,i,j2.BAD_REQUEST,void 0,void 0,!0):i}}a(l4,"setConfiguration");function Ig(){let e=hr.getPropsFilePath();try{$r.accessSync(e,$r.constants.F_OK|$r.constants.R_OK)}catch(n){if(!hr.noBootFile())throw pr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Xa(e);return $o(t).toJSON()}a(Ig,"readConfigFile");function $o(e){return jC.parseDocument($r.readFileSync(e,"utf8"),{simpleKeys:!0})}a($o,"parseYamlDoc");function u4(){let e=Ig(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=hr.isEmptyOrZeroLength(t)?[]:t;let r=YC(t);if(r)throw Dl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=hr.isEmptyOrZeroLength(n)?[]:n;let s=YC(n);if(s)throw Dl.CONFIG_VALIDATION(s.message);if(!hr.isEmptyOrZeroLength(n)&&!hr.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!hr.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Dl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(u4,"getClusteringRoutes");function eD(e){let t=zC(e);jt={};for(let r in ks){let n=t.get(r.toUpperCase());if(hr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ks[r].toLowerCase();s===Ln.LOGGING_ROOT?jt[s]=Mn.dirname(n):jt[s]=n}return jt}a(eD,"initOldConfig");function d4(e){let t=Ig();return Y2.get(t,e.replaceAll("_","."))}a(d4,"getConfigFromFile");async function _4(e,t){let r=$o(Xa());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await $r.writeFile(Xa(),String(r))}a(_4,"addConfig");function f4(e){let t=Xa(hr.getPropsFilePath()),r=$o(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Mn.join(n,on.HDB_CONFIG_FILE);$r.writeFileSync(s,String(r))}a(f4,"deleteConfigFromFile");function E4(){return lh||(uh(),lh)}a(E4,"getConfigObj");function h4(){return jt||uh(),jt}a(h4,"getFlatConfigObj")});var se=N((oD,aD)=>{"use strict";var wg=require("fs-extra"),Za=require("path"),rD=require("os"),p4=require("properties-reader"),Vd=W(),$d=te(),De=M(),dh=wt(),m4="Error initializing environment manager",_h="BOOT_PROPS_FILE_PATH",nD=!1,S4={[De.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[De.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[De.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},ji={};Object.assign(oD,aD.exports={BOOT_PROPS_FILE_PATH:_h,getHdbBasePath:T4,setHdbBasePath:g4,get:sD,initSync:R4,setProperty:Qe,initTestEnvironment:b4,setCloneVar:y4});function T4(){return ji[De.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(T4,"getHdbBasePath");function g4(e){ji[De.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(g4,"setHdbBasePath");function sD(e){let t=dh.getConfigValue(e);return t===void 0?ji[e]:t}a(sD,"get");function Qe(e,t){S4[e]&&(ji[e]=t),dh.updateConfigObject(e,t)}a(Qe,"setProperty");function A4(){let e;try{e=$d.getPropsFilePath(),wg.accessSync(e,wg.constants.F_OK|wg.constants.R_OK),nD=!0;let t=p4(e);return ji[De.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(De.HDB_SETTINGS_NAMES.INSTALL_USER),ji[De.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(De.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ji[_h]=e,!0}catch{return Vd.trace(`Environment manager found no properties file at ${e}`),!1}}a(A4,"doesPropFileExist");function R4(e=!1){try{((nD||A4()||$d.noBootFile())&&!iD||e)&&(dh.initConfig(e),ji[De.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=dh.getConfigValue(De.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Vd.error(m4),Vd.error(t),console.error(t),process.exit(1)}}a(R4,"initSync");var iD=!1;function y4(e){iD=e}a(y4,"setCloneVar");function b4(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,l=Za.join(__dirname,"../../","unitTests");ji[_h]=Za.join(l,"hdb_boot_properties.file"),Qe(De.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Za.join(l,"settings.test")),Qe(De.HDB_SETTINGS_NAMES.INSTALL_USER,rD.userInfo()?rD.userInfo().username:void 0),Qe(De.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Qe(De.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Za.join(l,"envDir","log")),Qe(De.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Qe(De.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Qe(De.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Qe(De.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Za.join(l,"envDir")),Qe(De.CONFIG_PARAMS.STORAGE_PATH,Za.join(l,"envDir")),s&&(Qe(De.CONFIG_PARAMS.HTTP_SECUREPORT,sD(De.CONFIG_PARAMS.HTTP_PORT)),Qe(De.CONFIG_PARAMS.HTTP_PORT,null)),Qe(De.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Qe(De.CONFIG_PARAMS.HTTP_PORT,9926),Qe(De.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Qe(De.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),Qe(De.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,$d.isEmpty(i)?!1:i),Qe(De.CONFIG_PARAMS.HTTP_CORS,$d.isEmpty(i)?!1:i),Qe(De.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Qe(De.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Qe(De.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Qe(De.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Qe(De.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Za.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Qe(De.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,$d.isEmpty(c)?!1:c),o&&(Qe("CORS_ACCESSLIST",o),Qe(De.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Qe(De.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Qe(De.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Qe(De.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Qe(De.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Qe(De.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Qe(De.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${_h}. Please check your boot props and settings files`;Vd.fatal(r),Vd.error(t)}}a(b4,"initTestEnvironment")});var gt=N((Vge,ED)=>{"use strict";var zd=M(),O4=te(),an=se(),Qd=require("path"),N4=require("minimist"),cD=require("fs-extra"),lD=require("lodash");an.initSync();var{CONFIG_PARAMS:Vo,DATABASES_PARAM_CONFIG:Kd,SYSTEM_SCHEMA_NAME:fh}=zd,Yd,Wd,jd;function uD(){if(Yd!==void 0)return Yd;if(an.getHdbBasePath()!==void 0)return Yd=an.get(Vo.STORAGE_PATH)||Qd.join(an.getHdbBasePath(),zd.DATABASES_DIR_NAME),Yd}a(uD,"getBaseSchemaPath");function dD(){if(Wd!==void 0)return Wd;if(an.getHdbBasePath()!==void 0)return Wd=fD(fh),Wd}a(dD,"getSystemSchemaPath");function _D(){if(jd!==void 0)return jd;if(an.getHdbBasePath()!==void 0)return jd=an.get(zd.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Qd.join(an.getHdbBasePath(),zd.TRANSACTIONS_DIR_NAME),jd}a(_D,"getTransactionAuditStoreBasePath");function I4(e,t){let r=an.get(Vo.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Qd.join(_D(),e.toString())}a(I4,"getTransactionAuditStorePath");function fD(e,t){e=e.toString(),t=t&&t.toString();let r=an.get(zd.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Qd.join(uD(),e)}a(fD,"getSchemaPath");function w4(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,N4(process.argv));let n=r[Vo.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!O4.isObject(n))throw o;i=n}for(let o of i){let c=o[fh];if(!c)continue;let l=an.get(Vo.DATABASES);l=l??{};let u=c?.tables?.[t]?.[Kd.PATH];if(u)return lD.set(l,[fh,Kd.TABLES,t,Kd.PATH],u),an.setProperty(Vo.DATABASES,l),u;let d=c?.[Kd.PATH];if(d)return lD.set(l,[fh,Kd.PATH],d),an.setProperty(Vo.DATABASES,l),d}}let s=r[Vo.STORAGE_PATH.toUpperCase()];if(s){if(!cD.pathExistsSync(s))throw new Error(s+" does not exist");let i=Qd.join(s,e);return cD.mkdirsSync(i),an.setProperty(Vo.STORAGE_PATH,s),i}return dD()}a(w4,"initSystemSchemaPaths");function C4(){Yd=void 0,Wd=void 0,jd=void 0}a(C4,"resetPaths");ED.exports={getBaseSchemaPath:uD,getSystemSchemaPath:dD,getTransactionAuditStorePath:I4,getTransactionAuditStoreBasePath:_D,getSchemaPath:fD,initSystemSchemaPaths:w4,resetPaths:C4}});var cn=N((jge,TD)=>{"use strict";var D4=Pn().LMDB_ERRORS_ENUM,Yge=require("lmdb"),P4=Ht(),Wge=require("buffer").Buffer,{OVERFLOW_MARKER:hD,MAX_SEARCH_KEY_LENGTH:Eh}=P4,pD=["number","string","symbol","boolean","bigint"];function L4(e){if(e=e?.primaryStore||e,!e)throw new Error(D4.ENV_REQUIRED)}a(L4,"validateEnv");function M4(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(M4,"stringifyData");function U4(e){return e instanceof Date?e.valueOf():e}a(U4,"convertKeyValueToWrite");function v4(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(pD.includes(typeof e))return e.length>Eh?[e.slice(0,Eh)+hD]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(pD.includes(typeof i))i.length>Eh?r.push(i.slice(0,Eh)+hD):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(v4,"getIndexedValues");var hh=0,mD=0;function SD(){mD=Date.now()-performance.now()}a(SD,"adjustStartTime");SD();var B4=6e4;setInterval(SD,B4).unref();function H4(){let e=performance.now()+mD;return e>hh?(hh=e,e):(hh+=488e-6,hh)}a(H4,"getNextMonotonicTime");TD.exports={validateEnv:L4,stringifyData:M4,convertKeyValueToWrite:U4,getNextMonotonicTime:H4,getIndexedValues:v4}});var Jd=N((Qge,gD)=>{"use strict";var x4=M().OPERATIONS_ENUM,Cg=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=x4.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};gD.exports=Cg});var Xd=N((Zge,bD)=>{"use strict";var Xge=Jd(),ph=M(),Dg=te(),AD=W(),k4=require("uuid"),{handleHDBError:mh,hdb_errors:F4}=_e(),{HDB_ERROR_MSGS:Sh,HTTP_STATUS_CODES:Th}=F4;bD.exports=RD;function RD(e,t,r){for(let s=0;s<t.length;s++)yD(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];G4(i,r,e.operation)}}a(RD,"processRows");RD.validateAttribute=yD;function yD(e){if(Buffer.byteLength(String(e))>ph.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw mh(new Error,Sh.ATTR_NAME_LENGTH_ERR(e),Th.BAD_REQUEST,void 0,void 0,!0);if(Dg.isEmptyOrZeroLength(e)||Dg.isEmpty(e.trim()))throw mh(new Error,Sh.ATTR_NAME_NULLISH_ERR,Th.BAD_REQUEST,void 0,void 0,!0)}a(yD,"validateAttribute");function G4(e,t,r){if(!e.hasOwnProperty(t)||Dg.isEmptyOrZeroLength(e[t])){if(r===ph.OPERATIONS_ENUM.INSERT||r===ph.OPERATIONS_ENUM.UPSERT){e[t]=k4.v4();return}throw AD.error("Update transaction aborted due to record with no hash value:",e),mh(new Error,Sh.RECORD_MISSING_HASH_ERR,Th.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>ph.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw AD.error(e),mh(new Error,Sh.HASH_VAL_LENGTH_ERR,Th.BAD_REQUEST,void 0,void 0,!0)}a(G4,"validateHash")});var OD,Un,Pg,Ll=Ie(()=>{OD=require("events"),Un=class extends OD.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new Pg;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){let t=this.queue?.shift();return t||this.emit("drained"),t}waitForDrain(){return new Promise(t=>{!this.queue||this.queue.length===0?t(!0):(this.once("drained",()=>t(!0)),this.currentDrainResolver=t,this.drainCloseListener||(this.drainCloseListener=!0,this.on("close",()=>{this.currentDrainResolver?.(!1)})))})}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},Pg=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 Ug={};je(Ug,{loadGQLSchema:()=>V4,start:()=>Mg,startOnMainThread:()=>$4});function Mg({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),_=o(new c(r.toString(),s)),E=new Map,f=[],h;for(let g of _.definitions)switch(g.kind){case l.OBJECT_TYPE_DEFINITION:let H=function(Y){if(Y.kind==="NonNullType"){let Q=H(Y.type);return Q.nullable=!1,Q}if(Y.kind==="ListType")return{type:"array",elements:H(Y.type)};let ne={type:Y.name?.value};return Object.defineProperty(ne,"location",{value:Y.loc.startToken}),ne};a(H,"getProperty");let S=g.name.value,y=[],I={table:null,database:null,properties:y};E.set(S,I);for(let Y of g.directives){if(Y.name.value==="table"){for(let ne of Y.arguments)I[ne.name.value]=ne.value.value;I.schema&&(I.database=I.schema),I.table||(I.table=S),I.audit&&(I.audit=I.audit!=="false"),I.attributes=I.properties,f.push(I)}if(Y.name.value==="sealed"&&(I.sealed=!0),Y.name.value==="splitSegments"&&(I.splitSegments=!0),Y.name.value==="replicate"&&(I.replicate=!0),Y.name.value==="export"){I.export=!0;for(let ne of Y.arguments)typeof I.export!="object"&&(I.export={}),I.export[ne.name.value]=ne.value.value}}let U=!1,X={};for(let Y of g.fields){let V=H(Y.type);V.name=Y.name.value,y.push(V),X[V.name]=void 0;for(let ne of Y.directives){let Q=ne.name.value;if(Q==="primaryKey")U?console.warn("Can not define two attributes as a primary key at",ne.loc):(V.isPrimaryKey=!0,U=!0);else if(Q==="indexed")V.indexed=!0;else if(Q==="computed"){for(let de of ne.arguments||[])if(de.name.value==="from"){let j=de.value.value;V.computed={from:m(j,de,X)},V.version==null&&(V.version=j)}else de.name.value==="version"&&(V.version=de.value.value);V.computed=V.computed||!0}else if(Q==="relationship"){let de={};for(let j of ne.arguments)de[j.name.value]=j.value.value;V.relationship=de}else if(Q==="createdTime")V.assignCreatedTime=!0;else if(Q==="updatedTime")V.assignUpdatedTime=!0;else if(Q==="expiresAt")V.expiresAt=!0;else if(Q==="allow"){let de=V.authorizedRoles=[];for(let j of ne.arguments)j.name.value==="role"&&de.push(j.value.value)}else server.knownGraphQLDirectives.includes(Q)&&console.warn(`@${Q} is an unknown directive, at`,ne.loc)}}I.type=S,S==="Query"&&(h=I)}function T(g){let S=E.get(g.type);S?(Object.defineProperty(g,"properties",{value:S.properties}),Object.defineProperty(g,"definition",{value:S})):g.type==="array"?T(g.elements):q4.includes(g.type)||(0,ID.getWorkerIndex)()===0&&console.error(`The type ${g.type} is unknown at line ${g.location.line}, column ${g.location.column}, in ${s}`)}a(T,"connectPropertyType");for(let g of E.values())for(let S of g.properties)T(S);for(let g of f)g.tableClass=e(g),g.export&&(g.export.name===""?i.set((0,Lg.dirname)(n),g.tableClass):i.set((0,Lg.dirname)(n)+"/"+(g.export.name||g.type),g.tableClass,g.export));function m(g,S,y){return new ND.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${g}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(y)}a(m,"createComputedFrom")}}var Lg,ND,ID,q4,$4,V4,wD=Ie(()=>{Lg=require("path"),ND=require("node:vm");Pe();ID=L(dt()),q4=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);a(Mg,"start");$4=Mg,V4=Mg({ensureTable:Et}).handleFile});var vD={};je(vD,{parse:()=>Bg,streamAsJSON:()=>Zd,stringify:()=>ec});function Zd(e){return new vg({value:e})}function CD(e){return console.error(e),JSON.stringify(e.toString())}function DD(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function ec(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===MD)return UD(e);if(t.resolution)return t.resolution.then(()=>ec(e));throw t}}function UD(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+=UD(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+ec(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function Bg(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),W4.test(e)?K4.parse(e):JSON.parse(e)):null}var PD,LD,K4,Y4,MD,vg,W4,Hg=Ie(()=>{PD=require("stream"),LD=L(require("json-bigint-fixes")),K4=(0,LD.default)({useNativeBigInt:!0}),Y4=1e4,MD={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw MD};a(Zd,"streamAsJSON");vg=class extends PD.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;){try{o=i.next(),o.then&&(yield o.then(c=>(o=c,""),c=>(o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")}}if(o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),CD)}catch(s){yield CD(s)}else yield ec(t)}else yield ec(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);DD(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>Y4?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 DD(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(CD,"handleError");a(DD,"when");a(ec,"stringify");a(UD,"jsStringify");W4=/[[,:]\s*-?\d{16,}/;a(Bg,"parse")});var jD=N((aAe,WD)=>{"use strict";var xg=require("recursive-iterator"),j4=require("alasql"),kg=require("clone"),BD=te(),{handleHDBError:HD,hdb_errors:z4}=_e(),{HDB_ERROR_MSGS:xD,HTTP_STATUS_CODES:kD}=z4,{getDatabases:Q4}=(Pe(),oe(lt)),J4=["DISTINCT_ARRAY"],FD=Symbol("validateTables"),Fg=Symbol("validateTable"),oAe=Symbol("getAllColumns"),GD=Symbol("validateAllColumns"),gh=Symbol("findColumn"),qD=Symbol("validateOrderBy"),e_=Symbol("validateSegment"),Gg=Symbol("validateColumn"),$D=Symbol("setColumnsForTable"),VD=Symbol("checkColumnsForAsterisk"),KD=Symbol("validateGroupBy"),YD=Symbol("hasColumns"),qg=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[FD](),this[VD](),this[GD]()}[FD](){if(this[YD]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Fg](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Fg](t.table)})}}[YD](){let t=!1,r=new xg(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Fg](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=Q4();if(!r[t.databaseid])throw HD(new Error,xD.SCHEMA_NOT_FOUND(t.databaseid),kD.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw HD(new Error,xD.TABLE_NOT_FOUND(t.databaseid,t.tableid),kD.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=kg(s);i.table=kg(t),this.attributes.push(i)})}[gh](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)}[VD](){let t=new xg(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[$D](r.tableid)}[$D](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new j4.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[GD](){this[e_](this.statement.columns,!1),this[e_](this.statement.joins,!1),this[e_](this.statement.where,!1),this[KD](this.statement.group,!1),this[e_](this.statement.order,!0)}[e_](t,r){if(!t)return;let n=new xg(t),s=[];for(let{node:i,path:o}of n)!BD.isEmpty(i)&&!BD.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[qD](i):s.push(this[Gg](i)));return s}[KD](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&J4.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=kg(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[gh](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[gh](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`}[qD](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[Gg](t)}[Gg](t){let r=this[gh](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]}};WD.exports=qg});var QD=N((lAe,zD)=>{"use strict";var $g=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")}};zD.exports=$g});var XD=N((dAe,JD)=>{"use strict";var Vg=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};JD.exports=Vg});var rP={};je(rP,{HAS_EXPIRATION:()=>yh,HAS_RESIDENCY_ID:()=>Xg,HAS_STRUCTURE_UPDATE:()=>bh,LAST_TIMESTAMP_PLACEHOLDER:()=>s_,LOCAL_TIMESTAMP:()=>X4,METADATA:()=>t_,NO_TIMESTAMP:()=>Yg,PENDING_LOCAL_TIME:()=>Zg,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>Jg,RecordEncoder:()=>Qg,TIMESTAMP_ASSIGN_LAST:()=>eJ,TIMESTAMP_ASSIGN_NEW:()=>eP,TIMESTAMP_ASSIGN_PREVIOUS:()=>tP,TIMESTAMP_PLACEHOLDER:()=>Ah,TIMESTAMP_RECORD_PREVIOUS:()=>Wg,getUpdateRecord:()=>eA,handleLocalTimeForGets:()=>Oh});function rJ(){return n_[0]=n_[0]^64,Z4.getFloat64(0)}function Oh(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),l=c?.value,u=l?.[t_];return u>=0&&(c.metadataFlags=u,c.localTime=l.localTime,c.value=l.value,c.residencyId=l.residencyId,l.expiresAt>=0&&(c.expiresAt=l.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[t_]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let l=c.value,u=l[t_];return u>=0&&(c.metadataFlags=u,c.localTime=l.localTime,c.value=l.value,c.residencyId=l.residencyId,l.expiresAt>=0&&(c.expiresAt=l.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,tc.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<tc.length;l++){let u=tc[l].deref();(!u||u.isDone||u.isCommitted)&&tc.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function eA(e,t,r){return function(n,s,i,o,c=-1,l,u,d="put",_,E){_||l==null?Ml=i?.localTime?Wg|tP:Yg:Ml=l?i?.localTime?Wg|16384:eP|16384:Yg;let f=u?.expiresAt;if(f>=0&&(c|=yh),r_=c,jg=f,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Ml>0},T,m=0;try{let g=i?.residencyId,S=u?.residencyId;S&&(zg=S,r_|=Xg,m|=rc),g!==S&&(m|=nc,g||(g=0)),c&yh&&(m|=o_),u?.originatingOperation&&(m|=i_),_&&(h.ifVersion=T=i?.version??null);let y=e.put(n,s,h);if(l){let I=u?.user?.username;if(E&&(Rh=e.encoder.encode(E)),e.encoder.hasStructureUpdate&&(m|=bh,e.encoder.hasStructureUpdate=!1),_&&i?.localTime){let U=i?.localTime,H=r.get(U);if(H){let X=xt(H).previousLocalTime;return r.put(U,Ul(o,t,n,X,u?.nodeId??server.replication.getThisNodeId(r)??0,I,d,Rh,m,S,g,f),{ifVersion:T}),y}}r.put(s_,Ul(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,I,d,Rh,m,S,g,f,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:T})}return y}catch(g){throw g.message+=" id: "+n+" options: "+h,g}}}var ZD,Kg,Ah,s_,Jg,X4,t_,n_,Z4,Yg,eP,eJ,tP,Wg,yh,Xg,Zg,bh,tJ,Rh,Ml,r_,jg,zg,Qg,tc,vl=Ie(()=>{ZD=require("msgpackr");zi();Kg=L(W()),Ah=new Uint8Array([1,1,1,1,4,64,0,0]),s_=new Uint8Array([1,1,1,1,1,0,0,0]),Jg=new Uint8Array([1,1,1,1,3,64,0,0]),X4=Symbol("local-timestamp"),t_=Symbol("metadata"),n_=new Uint8Array(8),Z4=new DataView(n_.buffer,0,8),Yg=0,eP=0,eJ=1,tP=3,Wg=4,yh=16,Xg=32,Zg=1,bh=256,Ml=0,r_=-1,jg=-1,zg=0,Qg=class extends ZD.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(Ml||r_>=0){let o=0,c=Ml;c&&(o+=8,Ml=0);let l=r_,u=jg,d=zg;l>=0&&(o+=2,r_=-1,u>=0&&(o+=8,jg=-1),d&&(o+=4,zg=0));let _=tJ=r.call(this,s,i|2048|o);Rh=_.subarray((_.start||0)+o,_.end);let E=_.start||0;return c&&(Ah[4]=c,Ah[5]=c>>8,_.set(Ah,E),E+=8),l>=0&&(_[E++]=l&31,_[E++]=l>>5,u>=0&&((_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(E,u),E+=8),d&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setUint32(E,d)),_}else return r.call(this,s,i)};let n=this.saveStructures;this.saveStructures=function(s,i){let o=n.call(this,s,i);return this.hasStructureUpdate=!0,o}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(n_,0,c),c+=8;else for(let E=0;E<8;E++)n_[E]=t[c++];l=rJ(),i=t[c]}let u,d;i<32&&(o=i|t[c+1]<<5,c+=2,o&yh&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&Xg&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let _=r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c);return{localTime:l,value:_,[t_]:o,expiresAt:u,residencyId:d}}return r?.valueAsBuffer?t:super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(rJ,"getTimestamp");a(Oh,"handleLocalTimeForGets");tc=[];setInterval(()=>{for(let e=0;e<tc.length;e++){let t=tc[e].deref();!t||t.isDone||t.isCommitted?tc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Kg.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Kg.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(eA,"getUpdateRecord")});var a_=N((pAe,sP)=>{"use strict";var nP=se(),nJ=M(),{RecordEncoder:sJ}=(vl(),oe(rP)),hAe=require("fs");nP.initSync();var iJ=nP.get(nJ.CONFIG_PARAMS.STORAGE_CACHING)!==!1,tA=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=iJ&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:sJ})}};sP.exports=tA});var c_=N((SAe,iP)=>{"use strict";var vn=se(),as=M();vn.initSync();var Nh=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=vn.get(as.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||vn.get(as.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||vn.get(as.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",vn.get(as.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=vn.get(as.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),vn.get(as.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=vn.get(as.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),vn.get(as.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=vn.get(as.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),vn.get(as.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=vn.get(as.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=vn.get(as.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};iP.exports=Nh;Nh.MAX_DBS=1e4});var ht=N((gAe,hP)=>{"use strict";var nA=require("lmdb"),Fs=require("fs-extra"),Bn=require("path"),Ih=cn(),cP=W(),ln=Pn().LMDB_ERRORS_ENUM,wh=XD(),sA=a_(),lP=c_(),Ko=Ht(),oP=M(),{table:oJ,resetDatabases:aJ}=(Pe(),oe(lt)),aP=se(),Gs=Ko.INTERNAL_DBIS_NAME,uP=Ko.DBI_DEFINITION_NAME,cJ="data.mdb",lJ="lock.mdb",l_=".mdb",uJ="-lock",rA=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=cs(t,r),this.key_type=this.dbi[Ko.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ko.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new nA.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Ch(e,t){if(e===void 0)throw new Error(ln.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(ln.ENV_NAME_REQUIRED)}a(Ch,"pathEnvNameValidation");async function iA(e,t,r=!0){try{await Fs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(ln.INVALID_BASE_PATH):n}try{let n=Bn.join(e,t+l_);return await Fs.access(n,Fs.constants.R_OK|Fs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Fs.access(Bn.join(e,t,cJ),Fs.constants.R_OK|Fs.constants.F_OK),Bn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(ln.INVALID_ENVIRONMENT)}else throw new Error(ln.INVALID_ENVIRONMENT);throw n}}a(iA,"validateEnvironmentPath");function Dh(e,t){if(Ih.validateEnv(e),t===void 0)throw new Error(ln.DBI_NAME_REQUIRED)}a(Dh,"validateEnvDBIName");async function dJ(e,t,r=!1,n=!1){Ch(e,t);let s=Bn.basename(e);t=t.toString();let i=aP.get(oP.CONFIG_PARAMS.DATABASES);i||aP.setProperty(oP.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await iA(e,t,n),dP(e,t,r)}catch(o){if(o.message===ln.INVALID_ENVIRONMENT){let c=Bn.join(e,t);await Fs.mkdirp(n?c:e);let l=new lP(n?c:c+l_,!1),u=nA.open(l);u.dbis=Object.create(null);let d=new sA(!1);u.openDB(Gs,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let _=oA(e,t,r);return u[Ko.ENVIRONMENT_NAME_KEY]=_,global.lmdb_map[_]=u,u}throw o}}a(dJ,"createEnvironment");async function _J(e,t,r,n=!0){Ch(e,t),t=t.toString();let s=Bn.join(e,t);return oJ({table:t,database:Bn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(_J,"copyEnvironment");async function dP(e,t,r=!1){Ch(e,t),t=t.toString();let n=oA(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 iA(e,t),i=Bn.join(e,t+l_),o=s!=i,c=new lP(s,o),l=nA.open(c);l.dbis=Object.create(null);let u=fP(l);for(let d=0;d<u.length;d++)cs(l,u[d]);return l[Ko.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(dP,"openEnvironment");async function fJ(e,t,r=!1){Ch(e,t),t=t.toString();let n=Bn.join(e,t+l_),s=await iA(e,t);if(global.lmdb_map!==void 0){let i=oA(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await _P(o),delete global.lmdb_map[i]}}await Fs.remove(s),await Fs.remove(s===n?s+uJ:Bn.join(Bn.dirname(s),lJ))}a(fJ,"deleteEnvironment");async function _P(e){Ih.validateEnv(e);let t=e[Ko.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(_P,"closeEnvironment");function oA(e,t,r=!1){let s=`${Bn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(oA,"getCachedEnvironmentName");function EJ(e){Ih.validateEnv(e);let t=Object.create(null),r=cs(e,Gs);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Gs)try{t[n]=Object.assign(new wh,s)}catch{cP.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(EJ,"listDBIDefinitions");function fP(e){Ih.validateEnv(e);let t=[],r=cs(e,Gs);for(let{key:n}of r.getRange({start:!1}))n!==Gs&&t.push(n);return t}a(fP,"listDBIs");function hJ(e,t){let n=cs(e,Gs).getEntry(t),s=new wh;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{cP.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(hJ,"getDBIDefinition");function EP(e,t,r,n=!r){if(Dh(e,t),t=t.toString(),t===Gs)throw new Error(ln.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return cs(e,t)}catch(s){if(s.message===ln.DBI_DOES_NOT_EXIST){let i=new sA(r,n===!0),o=e.openDB(t,i),c=new wh(r===!0,n);return o[uP]=c,cs(e,Gs).putSync(t,c),e.dbis[t]=o,o}throw s}}a(EP,"createDBI");function cs(e,t){if(Dh(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Gs?r=hJ(e,t):r=new wh,r===void 0)throw new Error(ln.DBI_DOES_NOT_EXIST);let n;try{let s=new sA(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(ln.DBI_DOES_NOT_EXIST):s}return n[uP]=r,e.dbis[t]=n,n}a(cs,"openDBI");function pJ(e,t){Dh(e,t),t=t.toString();let r=cs(e,t),n=r.getStats();return r[Ko.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(pJ,"statDBI");async function mJ(e,t){try{let r=Bn.join(e,t+l_);return(await Fs.stat(r)).size}catch{throw new Error(ln.INVALID_ENVIRONMENT)}}a(mJ,"environmentDataSize");function SJ(e,t){if(Dh(e,t),t=t.toString(),t===Gs)throw new Error(ln.CANNOT_DROP_INTERNAL_DBIS_NAME);cs(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],cs(e,Gs).removeSync(t)}a(SJ,"dropDBI");function TJ(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{cs(e,i)}catch(o){if(o.message===ln.DBI_DOES_NOT_EXIST)EP(e,i,i!==t,i===t),n=!0;else throw o}}n&&aJ()}a(TJ,"initializeDBIs");hP.exports={openDBI:cs,openEnvironment:dP,createEnvironment:dJ,listDBIs:fP,listDBIDefinitions:EJ,createDBI:EP,dropDBI:SJ,statDBI:pJ,deleteEnvironment:fJ,initializeDBIs:TJ,TransactionCursor:rA,environmentDataSize:mJ,copyEnvironment:_J,closeEnvironment:_P}});var mP=N((RAe,pP)=>{"use strict";var aA=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};pP.exports=aA});var TP=N((bAe,SP)=>{"use strict";var cA=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}};SP.exports=cA});var AP=N((NAe,gP)=>{"use strict";var lA=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};gP.exports=lA});var ic=N((PAe,bP)=>{"use strict";var gJ=ht(),AJ=mP(),RJ=TP(),yJ=AP(),pi=cn(),u_=Pn().LMDB_ERRORS_ENUM,bJ=Ht(),Qi=M(),OJ=te(),NJ=require("uuid"),wAe=require("lmdb"),{handleHDBError:IJ,hdb_errors:wJ}=_e(),{OVERFLOW_MARKER:CAe,MAX_SEARCH_KEY_LENGTH:DAe}=bJ,RP=se();RP.initSync();var Ph=RP.get(Qi.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),uA=Qi.TIME_STAMP_NAMES_ENUM.CREATED_TIME,sc=Qi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function CJ(e,t,r,n,s=pi.getNextMonotonicTime()){EA(e,t,r,n),dA(e,t,r);let i=new AJ,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];yP(u,!0,s);let d=DJ(e,t,r,u),_=u[t];o.push(d),c.push(_)}return _A(o,c,n,i,s)}a(CJ,"insertRecords");function DJ(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let d=c([[{}]]);Array.isArray(d)&&(c=d[0][Qi.FUNC_VAL],n[o]=c)}let l=pi.getIndexedValues(c),u=e.dbis[o];if(l){Ph&&u.prefetch(l.map(d=>({key:d,value:s})),Lh);for(let d=0,_=l.length;d<_;d++)u.put(l[d],s)}}Ph&&e.dbis[t].prefetch([s],Lh),e.dbis[t].put(s,n,n[sc])})}a(DJ,"insertRecord");function PJ(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(PJ,"removeSkippedRecords");function yP(e,t,r){let n=r>0;(n||!Number.isInteger(e[sc]))&&(e[sc]=r||(r=pi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[uA]))&&(e[uA]=r||pi.getNextMonotonicTime()):delete e[uA]}a(yP,"setTimestamps");function dA(e,t,r){r.indexOf(Qi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Qi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Qi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Qi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),gJ.initializeDBIs(e,t,r)}a(dA,"initializeTransaction");async function LJ(e,t,r,n,s=pi.getNextMonotonicTime()){EA(e,t,r,n),dA(e,t,r);let i=new RJ,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],_=d[t],E;try{E=fA(e,t,d,_,i,!0,s)}catch{i.skipped_hashes.push(_),o.push(u);continue}c.push(E),l.push(_)}return _A(c,l,n,i,s,o)}a(LJ,"updateRecords");async function MJ(e,t,r,n,s=pi.getNextMonotonicTime()){try{EA(e,t,r,n)}catch(l){throw IJ(l,l.message,wJ.HTTP_STATUS_CODES.BAD_REQUEST)}dA(e,t,r);let i=new yJ,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;OJ.isEmpty(u[t])?(d=NJ.v4(),u[t]=d):d=u[t];let _=fA(e,t,u,d,i,!1,s);o.push(_),c.push(d)}return _A(o,c,n,i,s)}a(MJ,"upsertRecords");async function _A(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||pi.getNextMonotonicTime(),PJ(r,i),n}a(_A,"finalizeWrite");function fA(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if(yP(r,!d,o),Number.isInteger(r[sc])&&u[sc]>r[sc])return!1;d&&s.original_records.push(u);let _,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let T=r[h],m=e.dbis[h];if(m===void 0)continue;let g=u[h];if(typeof T=="function"){let y=T([[u]]);Array.isArray(y)&&(T=y[0][Qi.FUNC_VAL],r[h]=T)}if(T===g)continue;let S=pi.getIndexedValues(g);if(S){Ph&&m.prefetch(S.map(y=>({key:y,value:n})),Lh);for(let y=0,I=S.length;y<I;y++)m.remove(S[y],n)}if(S=pi.getIndexedValues(T),S){Ph&&m.prefetch(S.map(y=>({key:y,value:n})),Lh);for(let y=0,I=S.length;y<I;y++)m.put(S[y],n)}}let f={...u,...r};c.put(n,f,f[sc])},"do_put");return l?_=c.ifVersion(n,l.version,E):_=c.ifNoExists(n,E),_.then(f=>f?!0:fA(e,t,r,n,s,i,o))}a(fA,"updateUpsertRecord");function UJ(e,t,r){if(pi.validateEnv(e),t===void 0)throw new Error(u_.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(u_.WRITE_ATTRIBUTES_REQUIRED):new Error(u_.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(UJ,"validateBasic");function EA(e,t,r,n){if(UJ(e,t,r),!Array.isArray(n))throw n===void 0?new Error(u_.RECORDS_REQUIRED):new Error(u_.RECORDS_MUST_BE_ARRAY)}a(EA,"validateWrite");function Lh(){}a(Lh,"noop");bP.exports={insertRecords:CJ,updateRecords:LJ,upsertRecords:MJ}});var Ji=N((MAe,vJ)=>{vJ.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var Si=N((UAe,IP)=>{"use strict";var NP=te(),OP=M(),Bl=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,mi=require("joi"),Yo={schema_format:{pattern:Bl,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},BJ=mi.alternatives(mi.string().min(1).max(Yo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Yo.schema_format.message}),mi.number(),mi.array()).required(),HJ=mi.alternatives(mi.string().min(1).max(Yo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Yo.schema_format.message}),mi.number()),xJ=mi.alternatives(mi.string().min(1).max(Yo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Yo.schema_format.message}),mi.number()).required();function kJ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Yo.schema_length.maximum?`'${e}' maximum of 250 characters`:Bl.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(kJ,"checkValidTable");function FJ(e,t){return NP.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(FJ,"validateSchemaExists");function GJ(e,t){let r=t.state.ancestors[0].schema;return NP.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(GJ,"validateTableExists");function qJ(e,t){return e.toLowerCase()===OP.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${OP.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(qJ,"validateSchemaName");IP.exports={common_validators:Yo,schema_regex:Bl,hdb_schema_table:BJ,validateSchemaExists:FJ,validateTableExists:GJ,validateSchemaName:qJ,checkValidTable:kJ,hdb_database:HJ,hdb_table:xJ}});var Mh=N((BAe,wP)=>{var{common_validators:Ti}=Si(),__=Tt(),d_="is required",rr={database:{presence:!1,format:Ti.schema_format,length:Ti.schema_length},schema:{presence:!1,format:Ti.schema_format,length:Ti.schema_length},table:{presence:!0,format:Ti.schema_format,length:Ti.schema_length},attribute:{presence:!0,format:Ti.schema_format,length:Ti.schema_length},hash_attribute:{presence:!0,format:Ti.schema_format,length:Ti.schema_length}};function f_(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(f_,"makeAttributesStrings");function $J(e){return e=f_(e),rr.table.presence=!1,rr.attribute.presence=!1,rr.hash_attribute.presence=!1,__.validateObject(e,rr)}a($J,"schema_object");function VJ(e){return e=f_(e),rr.table.presence={message:d_},rr.attribute.presence=!1,rr.hash_attribute.presence=!1,__.validateObject(e,rr)}a(VJ,"table_object");function KJ(e){return e=f_(e),rr.table.presence={message:d_},rr.attribute.presence=!1,__.validateObject(e,rr)}a(KJ,"create_table_object");function YJ(e){return e=f_(e),rr.table.presence={message:d_},rr.attribute.presence={message:d_},rr.hash_attribute.presence=!1,__.validateObject(e,rr)}a(YJ,"attribute_object");function WJ(e){return e=f_(e),rr.table.presence={message:d_},rr.attribute.presence=!1,rr.hash_attribute.presence=!1,__.validateObject(e,rr)}a(WJ,"describe_table");function jJ(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(jJ,"validateTableResidence");wP.exports={schema_object:$J,create_table_object:KJ,table_object:VJ,attribute_object:YJ,describe_table:WJ,validateTableResidence:jJ}});var DP=N((xAe,CP)=>{"use strict";var zJ=require("uuid"),hA=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||zJ.v4(),this.schema_table=`${this.schema}.${this.table}`}};CP.exports=hA});var Uh=N((FAe,PP)=>{"use strict";var QJ=DP(),pA=class extends QJ{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}};PP.exports=pA});var MP=N((qAe,LP)=>{"use strict";LP.exports=XJ;var JJ="inserted";function XJ(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===JJ?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(XJ,"returnObject")});var vh=N((KAe,HP)=>{"use strict";var ZJ=M(),mA=ht(),e3=ic(),{getSystemSchemaPath:t3,getSchemaPath:r3}=gt(),VAe=Ji(),n3=Mh(),s3=Uh(),i3=MP(),{handleHDBError:UP,hdb_errors:BP}=_e(),vP=te(),{HTTP_STATUS_CODES:o3}=BP,a3="inserted";HP.exports=c3;async function c3(e){let t=n3.attribute_object(e);if(t)throw UP(new Error,t.message,BP.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&vP.checkGlobalSchemaTable(e.schema,e.table);if(r)throw UP(new Error,r,o3.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=vP.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 s3(e.schema,e.table,e.attribute,e.id);try{let i=await mA.openEnvironment(r3(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}`);mA.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await mA.openEnvironment(t3(),ZJ.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await e3.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return i3(a3,c,{records:[s]},l)}catch(i){throw i}}a(c3,"lmdbCreateAttribute")});var TA=N((WAe,kP)=>{var{hdb_table:l3,hdb_database:xP}=Si(),u3=Tt(),SA=require("joi"),d3={undefined:"undefined",null:"null"},_3=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||d3[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"),f3=SA.object({database:xP,schema:xP,table:l3,records:SA.array().items(SA.object().custom(_3)).required()});kP.exports=function(e){return u3.validateBySchema(e,f3)}});var E_=N((QAe,GP)=>{"use strict";var Xi=te(),FP=W(),zAe=TA(),{getDatabases:E3}=(Pe(),oe(lt)),{ClientError:oc}=_e();GP.exports=h3;function h3(e){if(Xi.isEmpty(e))throw new oc("invalid update parameters defined.");if(Xi.isEmptyOrZeroLength(e.schema))throw new oc("invalid schema specified.");if(Xi.isEmptyOrZeroLength(e.table))throw new oc("invalid table specified.");if(!Array.isArray(e.records))throw new oc("records must be an array");let t=E3()[e.schema]?.[e.table];if(Xi.isEmpty(t))throw new oc(`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&&Xi.isEmptyOrZeroLength(o[r]))throw FP.error("a valid hash attribute must be provided with update record:",o),new oc("a valid hash attribute must be provided with update record, check log for more info");if(!Xi.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw FP.error(`a valid hash value must be provided with ${e.operation} record:`,o),new oc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Xi.isEmpty(o[r])&&o[r]!==""&&n.has(Xi.autoCast(o[r]))&&(o.skip=!0),n.add(Xi.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(h3,"insertUpdateValidate")});var $P=N((XAe,qP)=>{"use strict";var gA=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};qP.exports=gA});var YP=N((eRe,KP)=>{"use strict";var AA=ht(),p3=W(),VP=Pn().LMDB_ERRORS_ENUM;KP.exports=m3;async function m3(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 AA.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==VP.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await AA.closeEnvironment(global.lmdb_map[n]),await AA.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==VP.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){p3.error(t)}}a(m3,"cleanLMDBMap")});var Zi=N((rRe,QP)=>{"use strict";var h_=require("crypto"),S3=se(),{CONFIG_PARAMS:T3}=M(),jP="aes-256-cbc",g3=32,A3=16,RA=64,zP=32,R3=RA+zP,WP=new Map;QP.exports={encrypt:y3,decrypt:b3,createNatsTableStreamName:O3};function y3(e){let t=h_.randomBytes(g3),r=h_.randomBytes(A3),n=h_.createCipheriv(jP,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(y3,"encrypt");function b3(e){let t=e.substr(0,RA),r=e.substr(RA,zP),n=e.substr(R3,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=h_.createDecipheriv(jP,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(b3,"decrypt");function O3(e,t){let r=S3.get(T3.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=WP.get(r);return n||(n=h_.createHash("md5").update(r).digest("hex"),WP.set(r,n)),n}a(O3,"createNatsTableStreamName")});var eo=N((iRe,ZP)=>{"use strict";var sRe=Vr(),p_=W(),JP=Mh(),N3=Zi(),Bh=te(),{handleHDBError:Hh,hdb_errors:I3}=_e(),{HDB_ERROR_MSGS:xh,HTTP_STATUS_CODES:yA}=I3,XP=se();XP.initSync();var{getDatabases:bA}=(Pe(),oe(lt)),w3=require("fs-extra"),C3=M();ZP.exports={describeAll:D3,describeTable:kh,describeSchema:P3};async function D3(e={}){try{let t=Bh.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=bA(),o={},c={},l=[],u=e?.exact_count;for(let _ in i){o[_]=!0,!t&&!s&&!r&&(c[_]=e.hdb_user?.role?.permission[_]?.describe);let E=i[_];for(let f in E)try{let h;if(t||s||r)h=await kh({schema:_,table:f,exact_count:u});else if(n&&n[_].describe&&n[_].tables[f].describe){let T=n[_].tables[f].attribute_permissions;h=await kh({schema:_,table:f,exact_count:u},T)}h&&l.push(h)}catch(h){p_.error(h)}}let d={};for(let _ in l)t||s||r?(d[l[_].schema]==null&&(d[l[_].schema]={}),d[l[_].schema][l[_].name]=l[_],o[l[_].schema]&&delete o[l[_].schema]):c[l[_].schema]&&(d[l[_].schema]==null&&(d[l[_].schema]={}),d[l[_].schema][l[_].name]=l[_],o[l[_].schema]&&delete o[l[_].schema]);for(let _ in o)t||s||r?d[_]={}:c[_]&&(d[_]={});return d}catch(t){return p_.error("Got an error in describeAll"),p_.error(t),Hh(new Error,xh.DESCRIBE_ALL_ERR)}}a(D3,"describeAll");async function kh(e,t){Bh.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=JP.describe_table(e);if(i)throw i;let c=bA()[r];if(!c)throw Hh(new Error,xh.SCHEMA_NOT_FOUND(e.schema),yA.NOT_FOUND);let l=c[n];if(!l)throw Hh(new Error,xh.TABLE_NOT_FOUND(e.schema,e.table),yA.NOT_FOUND);function u(f){d.push({attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(h=>({type:h.type,name:h.name})):void 0})}a(u,"pushAtt");let d=[];if(s){let f={};s.forEach(h=>{h.describe&&(f[h.attribute_name]=!0)}),l.attributes.forEach(h=>{f[h.name]&&u(h)})}else l.attributes?.forEach(f=>u(f));let _;try{_=(await w3.stat(l.primaryStore.env.path)).size}catch(f){p_.warn("unable to get database size",f)}let E={schema:r,name:l.tableName,hash_attribute:l.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:_};l.replicate!==void 0&&(E.replicate=l.replicate),l.expirationMS!==void 0&&(E.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(E.sealed=l.sealed),l.sources?.length>0&&(E.sources=l.sources.map(f=>f.name).filter(f=>f&&f!=="NATSReplicator"&&f!=="Replicator")),XP.get(C3.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(E.clustering_stream_name=N3.createNatsTableStreamName(E.schema,E.name));try{let f=l.getRecordCount({exactCount:e.exact_count==="true"});E.record_count=f.recordCount,E.table_size=l.getSize(),E.db_audit_size=l.getAuditSize(),E.estimated_record_range=f.estimatedRange;let h=l.auditStore;if(h)for(let T of h.getKeys({reverse:!0,limit:1}))E.last_updated_record=T[0];if(!E.last_updated_record&&l.indices.__updatedtime__)for(let T of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))E.last_updated_record=T}catch(f){p_.warn(`unable to stat table dbi due to ${f}`)}return E}a(kh,"descTable");async function P3(e){Bh.transformReq(e);let t=JP.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=bA()[n];if(!i)throw Hh(new Error,xh.SCHEMA_NOT_FOUND(e.schema),yA.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Bh.isEmpty(l)||l.describe){let u=await kh({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(P3,"describeSchema")});var ls=N((lRe,sL)=>{var L3=Ji(),{callbackify:tL,promisify:M3}=require("util"),{getDatabases:rL}=(Pe(),oe(lt));sL.exports={setSchemaDataToGlobal:eL,getTableSchema:U3,getSystemSchema:v3,setSchemaDataToGlobalAsync:M3(eL)};var nL=eo(),aRe=tL(nL.describeAll),cRe=tL(nL.describeTable);function eL(e){global.hdb_schema=rL(),e&&e()}a(eL,"setSchemaDataToGlobal");function U3(e,t,r){let n=rL()[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(U3,"getTableSchema");function v3(){return L3}a(v3,"getSystemSchema")});var un=N((dRe,cL)=>{"use strict";var Gh=TA(),Cr=te(),B3=require("util"),qh=Hn(),H3=ls(),iL=W(),{handleHDBError:ac,hdb_errors:x3}=_e(),{HTTP_STATUS_CODES:cc}=x3,k3=B3.promisify(H3.getTableSchema),F3="updated",oL="inserted",aL="upserted";cL.exports={insert:q3,update:$3,upsert:V3,validation:G3,flush:K3};async function G3(e){if(Cr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Cr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Cr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await k3(e.schema,e.table),r=Gh(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Cr.isEmptyOrZeroLength(c[n]))throw iL.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Cr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw iL.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Cr.isEmpty(c[n])&&c[n]!==""&&s.has(Cr.autoCast(c[n]))&&(c.skip=!0),s.add(Cr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(G3,"validation");async function q3(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Gh(e);if(t)throw ac(new Error,t.message,cc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw ac(new Error,r,cc.BAD_REQUEST);let n=await qh.createRecords(e);return Fh(oL,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(q3,"insertData");async function $3(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Gh(e);if(t)throw ac(new Error,t.message,cc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw ac(new Error,r,cc.BAD_REQUEST);let n=await qh.updateRecords(e);return Cr.isEmpty(n.existing_rows)?Fh(F3,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Fh(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a($3,"updateData");async function V3(e){if(e.operation!=="upsert")throw ac(new Error,"invalid operation, must be upsert",cc.INTERNAL_SERVER_ERROR);let t=Gh(e);if(t)throw ac(new Error,t.message,cc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw ac(new Error,r,cc.BAD_REQUEST);let n=await qh.upsertRecords(e);return Fh(aL,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(V3,"upsertData");function Fh(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===oL?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===aL?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Fh,"returnObject");function K3(e){return Cr.transformReq(e),qh.flush(e.schema,e.table)}a(K3,"flush")});var NA=N((fRe,dL)=>{var Y3=Tt(),OA=require("joi"),{hdb_table:W3,hdb_database:lL}=Si(),uL={schema:lL,database:lL,table:W3},j3={date:OA.date().iso().required()},z3={timestamp:OA.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};dL.exports=function(e,t){let r=t==="timestamp"?{...uL,...z3}:{...uL,...j3},n=OA.object(r);return Y3.validateBySchema(e,n)}});var EL=N((ERe,fL)=>{var Q3=Tt(),IA=require("joi"),{hdb_table:J3,hdb_database:_L}=Si(),X3=IA.object({schema:_L,database:_L,table:J3,hash_values:IA.array().required(),ids:IA.array()});fL.exports=function(e){return Q3.validateBySchema(e,X3)}});var PA=N((hRe,hL)=>{"use strict";var wA=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}},CA=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}},DA=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};hL.exports={InsertObject:wA,NoSQLSeachObject:CA,DeleteResponseObject:DA}});var dc=N((mRe,gL)=>{"use strict";var mL=NA(),Z3=EL(),lc=te(),pL=require("moment"),SL=W(),{promisify:eX,callbackify:tX}=require("util"),uc=M(),rX=ls(),LA=eX(rX.getTableSchema),MA=Hn(),{DeleteResponseObject:nX}=PA(),{handleHDBError:Wo,hdb_errors:sX}=_e(),{HDB_ERROR_MSGS:$h,HTTP_STATUS_CODES:jo}=sX,iX="records successfully deleted",oX=tX(TL);gL.exports={delete:oX,deleteRecord:TL,deleteFilesBefore:aX,deleteAuditLogsBefore:cX};async function aX(e){let t=mL(e,"date");if(t)throw Wo(t,t.message,jo.BAD_REQUEST,void 0,void 0,!0);if(lc.transformReq(e),!pL(e.date,pL.ISO_8601).isValid())throw Wo(new Error,$h.INVALID_DATE,jo.BAD_REQUEST,uc.LOG_LEVELS.ERROR,$h.INVALID_DATE,!0);let n=lc.checkSchemaTableExist(e.schema,e.table);if(n)throw Wo(new Error,n,jo.NOT_FOUND,uc.LOG_LEVELS.ERROR,n,!0);let s=await MA.deleteRecordsBefore(e);if(await LA(e.schema,e.table),SL.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(aX,"deleteFilesBefore");async function cX(e){let t=mL(e,"timestamp");if(t)throw Wo(t,t.message,jo.BAD_REQUEST,void 0,void 0,!0);if(lc.transformReq(e),isNaN(e.timestamp))throw Wo(new Error,$h.INVALID_VALUE("Timestamp"),jo.BAD_REQUEST,uc.LOG_LEVELS.ERROR,$h.INVALID_VALUE("Timestamp"),!0);let r=lc.checkSchemaTableExist(e.schema,e.table);if(r)throw Wo(new Error,r,jo.NOT_FOUND,uc.LOG_LEVELS.ERROR,r,!0);let n=await MA.deleteAuditLogsBefore(e);return await LA(e.schema,e.table),SL.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(cX,"deleteAuditLogsBefore");async function TL(e){e.ids&&(e.hash_values=e.ids);let t=Z3(e);if(t)throw Wo(t,t.message,jo.BAD_REQUEST,void 0,void 0,!0);lc.transformReq(e);let r=lc.checkSchemaTableExist(e.schema,e.table);if(r)throw Wo(new Error,r,jo.NOT_FOUND,uc.LOG_LEVELS.ERROR,r,!0);try{await LA(e.schema,e.table);let n=await MA.deleteRecords(e);return lc.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${iX}`),n}catch(n){if(n.message===uc.SEARCH_NOT_FOUND_MESSAGE){let s=new nX;return s.message=uc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(TL,"deleteRecord")});var Vh=N((TRe,yL)=>{var lX=require("crypto"),AL=9;function uX(e){let t=_X(AL),r=RL(e+t);return t+r}a(uX,"createHash");function dX(e,t){let r=e?.substr(0,AL),n=r+RL(t+r);return e===n}a(dX,"validateHash");function _X(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(_X,"generateSalt");function RL(e){return lX.createHash("md5").update(e).digest("hex")}a(RL,"md5");yL.exports={hash:uX,validate:dX}});var OL=N((ARe,bL)=>{var UA=Tt(),Kr={username:{presence:!0,exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function fX(e){return Kr.password.presence=!0,Kr.username.presence=!0,Kr.role.presence=!0,Kr.active.presence=!0,UA.validateObject(e,Kr)}a(fX,"addUserValidation");function EX(e){return Kr.password.presence=!1,Kr.username.presence=!0,Kr.role.presence=!1,Kr.active.presence=!1,UA.validateObject(e,Kr)}a(EX,"alterUserValidation");function hX(e){return Kr.password.presence=!1,Kr.username.presence=!0,Kr.role.presence=!1,Kr.active.presence=!1,UA.validateObject(e,Kr)}a(hX,"dropUserValidation");bL.exports={addUserValidation:fX,alterUserValidation:EX,dropUserValidation:hX}});var Ct=N((bRe,IL)=>{"use strict";var{platform:yRe}=require("os"),pX="nats-server.zip",vA="nats-server",mX=process.platform==="win32"?`${vA}.exe`:vA,SX=/^[^\s.,*>]+$/,NL="__request__",TX=a(e=>`${e}.${NL}`,"REQUEST_SUBJECT"),gX={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},AX={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},RX={HUB:"hub.pid",LEAF:"leaf.pid"},yX={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},bX={SUCCESS:"success",ERROR:"error"},OX={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},NX={TXN:"txn",MSGID:"msgid"},Hl={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},IX={[Hl.ERR]:1,[Hl.WRN]:2,[Hl.INF]:3,[Hl.DBG]:4,[Hl.TRC]:5},wX={debug:"-D",trace:"-DVV"};IL.exports={NATS_SERVER_ZIP:pX,NATS_SERVER_NAME:vA,NATS_BINARY_NAME:mX,PID_FILES:RX,NATS_CONFIG_FILES:AX,SERVER_SUFFIX:yX,NATS_TERM_CONSTRAINTS_RX:SX,REQUEST_SUFFIX:NL,UPDATE_REMOTE_RESPONSE_STATUSES:bX,CLUSTER_STATUS_STATUSES:OX,REQUEST_SUBJECT:TX,SUBJECT_PREFIXES:NX,MSG_HEADERS:gX,LOG_LEVELS:Hl,LOG_LEVEL_FLAGS:wX,LOG_LEVEL_HIERARCHY:IX}});var CL=N((NRe,wL)=>{"use strict";var Kh=M(),Yh=class{static{a(this,"BaseLicense")}constructor(t=0,r=Kh.RAM_ALLOCATION_ENUM.DEFAULT,n=Kh.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},BA=class extends Yh{static{a(this,"ExtendedLicense")}constructor(t=0,r=Kh.RAM_ALLOCATION_ENUM.DEFAULT,n=Kh.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};wL.exports={BaseLicense:Yh,ExtendedLicense:BA}});var _c=N((wRe,BL)=>{"use strict";var kl=require("fs-extra"),PL=Vh(),LL=require("crypto"),CX=require("moment"),DX=require("uuid").v4,Yr=W(),xA=require("path"),PX=te(),zo=M(),{totalmem:DL}=require("os"),LX=CL().ExtendedLicense,xl="invalid license key format",MX="061183",UX="mofi25",vX="aes-256-cbc",BX=16,HX=32,ML=se(),{resolvePath:UL}=wt();ML.initSync();var HA;BL.exports={validateLicense:vL,generateFingerPrint:kX,licenseSearch:GA,getLicense:qX,checkMemoryLimit:$X};function kA(){return xA.join(ML.getHdbBasePath(),zo.LICENSE_KEY_DIR_NAME,zo.LICENSE_FILE_NAME)}a(kA,"getLicenseDirPath");function xX(){let e=kA();return UL(xA.join(e,zo.LICENSE_FILE_NAME))}a(xX,"getLicenseFilePath");function FA(){let e=kA();return UL(xA.join(e,zo.REG_KEY_FILE_NAME))}a(FA,"getFingerPrintFilePath");async function kX(){let e=FA();try{return await kl.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await FX();throw Yr.error(`Error writing fingerprint file to ${e}`),Yr.error(t),new Error("There was an error generating the fingerprint")}}a(kX,"generateFingerPrint");async function FX(){let e=DX(),t=PL.hash(e),r=FA();try{await kl.mkdirp(kA()),await kl.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Yr.error(`Error writing fingerprint file to ${r}`),Yr.error(n),new Error("There was an error generating the fingerprint")}return t}a(FX,"writeFingerprint");function vL(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:zo.RAM_ALLOCATION_ENUM.DEFAULT,version:zo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Yr.error("empty license key passed to validate."),r;let n=FA(),s=!1;try{s=kl.statSync(n)}catch(i){Yr.error(i)}if(s){let i;try{i=kl.readFileSync(n,"utf8")}catch{Yr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(UX),c=o[1];c=Buffer.concat([Buffer.from(c)],BX);let l=Buffer.concat([Buffer.from(i)],HX),u=LL.createDecipheriv(vX,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let d=null;try{d=u.update(o[0],"hex","utf8"),d.trim(),d+=u.final("utf8")}catch{let f=GX(o[0],i);if(f)d=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(xl),Yr.error(xl),new Error(xl)}let _;if(isNaN(d))try{_=JSON.parse(d),r.version=_.version,r.exp_date=_.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),_.ram_allocation&&(r.ram_allocation=_.ram_allocation)}catch{throw console.error(xl),Yr.error(xl),new Error(xl)}else r.exp_date=d;r.exp_date<CX().valueOf()&&(r.valid_date=!1),PL.validate(o[1],`${MX}${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||Yr.error("Invalid licence"),r}a(vL,"validateLicense");function GX(e,t){try{let r=LL.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Yr.warn("Check old license failed")}}a(GX,"checkOldLicense");function GA(){let e=new LX,t=[];try{t=kl.readFileSync(xX(),"utf-8").split(zo.NEW_LINE)}catch(r){r.code==="ENOENT"?Yr.debug("no license file found"):Yr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(PX.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=vL(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){Yr.error("There was an error parsing the license string."),Yr.error(s),e.ram_allocation=zo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return HA=e,e}a(GA,"licenseSearch");async function qX(){return HA||await GA(),HA}a(qX,"getLicense");function $X(){let e=GA().ram_allocation,t=process.constrainedMemory?.()||DL();if(t=Math.round(Math.min(t,DL())/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($X,"checkMemoryLimit")});var dn=N((MRe,XL)=>{"use strict";var FL="username is required",GL="nothing to update, must supply active, role or password to update",qL="password cannot be an empty string",$L="If role is specified, it cannot be empty.",VL="active must be true or false";XL.exports={addUser:XX,alterUser:ZX,dropUser:tZ,getSuperUser:iZ,userInfo:rZ,listUsers:jh,listUsersExternal:nZ,setUsersToGlobal:Gl,findAndValidateUser:QL,getClusterUser:oZ,USERNAME_REQUIRED:FL,ALTERUSER_NOTHING_TO_UPDATE:GL,EMPTY_PASSWORD:qL,EMPTY_ROLE:$L,ACTIVE_BOOLEAN:VL};var KL=un(),VX=dc(),VA=Vh(),YL=OL(),WL=Vr(),KA=to(),xn=te(),jL=require("validate.js"),Ke=W(),{promisify:KX}=require("util"),YA=Zi(),HL=M(),xL=Ct(),YX=wt(),DRe=se(),PRe=_c(),WX=Ji(),{table:LRe}=(Pe(),oe(lt)),{handleHDBError:gi,hdb_errors:jX}=_e(),{HTTP_STATUS_CODES:Ai,AUTHENTICATION_ERROR_MSGS:qA,HDB_ERROR_MSGS:Fl}=jX,{UserEventMsg:WA}=qs(),$A=require("lodash"),{server:jA}=(qr(),oe(Ja)),zX=W();jA.getUser=(e,t)=>QL(e,t,t!=null);var zL={username:!0,active:!0,role:!0,password:!0},kL=new Map,Wh=WL.searchByValue,QX=WL.searchByHash,JX=KX(VX.delete);async function XX(e){let t=jL.cleanAttributes(e,zL),r=YL.addUserValidation(t);if(r)throw gi(new Error,r.message,Ai.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 Wh(n),s=s&&Array.from(s)}catch(l){throw Ke.error("There was an error searching for a role in add user"),Ke.error(l),l}if(!s||s.length<1)throw gi(new Error,Fl.ROLE_NAME_NOT_FOUND(t.role),Ai.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw gi(new Error,Fl.DUP_ROLES_FOUND(t.role),Ai.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=YA.encrypt(t.password)),t.password=VA.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await KL.insert(i)}catch(l){throw Ke.error("There was an error searching for a user."),Ke.error(l),l}Ke.debug(o);try{await Gl()}catch(l){throw Ke.error("Got an error setting users to global"),Ke.error(l),l}if(o.skipped_hashes.length===1)throw gi(new Error,Fl.USER_ALREADY_EXISTS(t.username),Ai.CONFLICT,void 0,void 0,!0);let c={...t};return c.role=s[0],KA.signalUserChange(new WA(process.pid)),`${c.username} successfully added`}a(XX,"addUser");async function ZX(e){let t=jL.cleanAttributes(e,zL);if(xn.isEmptyOrZeroLength(t.username))throw new Error(FL);if(xn.isEmptyOrZeroLength(t.password)&&xn.isEmptyOrZeroLength(t.role)&&xn.isEmptyOrZeroLength(t.active))throw new Error(GL);if(!xn.isEmpty(t.password)&&xn.isEmptyOrZeroLength(t.password.trim()))throw new Error(qL);if(!xn.isEmpty(t.active)&&!xn.isBoolean(t.active))throw new Error(VL);let r=eZ(t.username);if(!xn.isEmpty(t.password)&&!xn.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=YA.encrypt(t.password)),t.password=VA.hash(t.password)),t.role==="")throw new Error($L);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 Wh(i)||[])}catch(c){throw Ke.error("Got an error searching for a role."),Ke.error(c),c}if(!o||o.length===0){let c=Fl.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ke.error(c),gi(new Error,c,Ai.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Fl.ALTER_USER_DUP_ROLES(t.role);throw Ke.error(c),gi(new Error,c,Ai.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 KL.update(n)}catch(i){throw Ke.error("Error during update."),Ke.error(i),i}try{await Gl()}catch(i){throw Ke.error("Got an error setting users to global"),Ke.error(i),i}return KA.signalUserChange(new WA(process.pid)),s}a(ZX,"alterUser");function eZ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(eZ,"isClusterUser");async function tZ(e){try{let t=YL.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(xn.isEmpty(global.hdb_users.get(e.username)))throw gi(new Error,Fl.USER_NOT_EXIST(e.username),Ai.NOT_FOUND,void 0,void 0,!0);let n;try{n=await JX(r)}catch(s){throw Ke.error("Got an error deleting a user."),Ke.error(s),s}Ke.debug(n);try{await Gl()}catch(s){throw Ke.error("Got an error setting users to global."),Ke.error(s),s}return KA.signalUserChange(new WA(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(tZ,"dropUser");async function rZ(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=$A.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await QX(r)}catch(s){throw Ke.error("Got an error searching for a role."),Ke.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ke.error(r),r}return t}a(rZ,"userInfo");async function nZ(){let e;try{e=await jh()}catch(t){throw Ke.error("Got an error listing users."),Ke.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(nZ,"listUsersExternal");async function jh(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Wh(e)}catch(o){throw Ke.error("Got an error searching for roles."),Ke.error(o),o}let r={};for(let o of t)r[o.id]=$A.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 Wh(n)}catch(o){throw Ke.error("Got an error searching for users."),Ke.error(o),o}let i=new Map;for(let o of s)o=$A.cloneDeep(o),o.role=r[o.role],sZ(o.role),i.set(o.username,o);return i}catch(e){throw Ke.error("got an error listing users"),Ke.error(e),xn.errorizeMessage(e)}return null}a(jh,"listUsers");function sZ(e){try{if(!e){Ke.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(WX)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ke.error("Got an error trying to set system permissions."),Ke.error(t)}}a(sZ,"appendSystemTablesToRole");async function Gl(){try{let e=await jh();global.hdb_users=e}catch(e){throw Ke.error(e),e}}a(Gl,"setUsersToGlobal");async function QL(e,t,r=!0){global.hdb_users||await Gl();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw gi(new Error,qA.GENERIC_AUTH_FAIL,Ai.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw gi(new Error,qA.USER_INACTIVE,Ai.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(kL.get(t)===n.password)return s;if(VA.validate(n.password,t))kL.set(t,n.password);else throw gi(new Error,qA.GENERIC_AUTH_FAIL,Ai.UNAUTHORIZED,void 0,void 0,!0)}return s}a(QL,"findAndValidateUser");async function iZ(){global.hdb_users||await Gl();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(iZ,"getSuperUser");async function oZ(){let e=await jh(),t=YX.getConfigFromFile(HL.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!xn.isEmpty(r)&&r?.role?.role===HL.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=YA.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+xL.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+xL.SERVER_SUFFIX.ADMIN,r}a(oZ,"getClusterUser");var JL=[];jA.invalidateUser=function(e){for(let t of JL)try{t(e)}catch(r){zX.error("Error invalidating user",r)}};jA.onInvalidatedUser=function(e){JL.push(e)}});var S_=N((HRe,rM)=>{"use strict";var fc=W(),kn=M(),aZ=YP(),vRe=ls(),BRe=eo(),cZ=dn(),{validateEvent:ZL}=qs(),m_=Hn(),lZ=require("process"),{resetDatabases:uZ}=(Pe(),oe(lt)),dZ={[kn.ITC_EVENT_TYPES.SCHEMA]:_Z,[kn.ITC_EVENT_TYPES.USER]:tM};async function _Z(e){let t=ZL(e);if(t){fc.error(t);return}fc.trace("ITC schemaHandler received schema event:",e),await aZ(e.message),await fZ(e.message)}a(_Z,"schemaHandler");async function fZ(e){try{m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=uZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){fc.error(t)}}a(fZ,"syncSchemaMetadata");var eM=[];async function tM(e){try{try{m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){fc.warn(r)}let t=ZL(e);if(t){fc.error(t);return}fc.trace(`ITC userHandler ${kn.HDB_ITC_CLIENT_PREFIX}${lZ.pid} received user event:`,e),await cZ.setUsersToGlobal();for(let r of eM)r()}catch(t){fc.error(t)}}a(tM,"userHandler");tM.addListener=function(e){eM.push(e)};rM.exports=dZ});var qs=N(($Re,sM)=>{"use strict";var kRe=W(),zA=te(),EZ=M(),{ITC_ERRORS:T_}=Pn(),{parentPort:FRe,threadId:hZ,isMainThread:pZ,workerData:GRe}=require("worker_threads"),{onMessageFromWorkers:mZ,broadcast:qRe,broadcastWithAcknowledgement:SZ}=dt();sM.exports={sendItcEvent:TZ,validateEvent:nM,SchemaEventMsg:gZ,UserEventMsg:AZ};var zh;mZ(async(e,t)=>{zh=zh||S_(),nM(e),zh[e.type]&&await zh[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function TZ(e){return!pZ&&e.message&&(e.message.originator=hZ),SZ(e)}a(TZ,"sendItcEvent");function nM(e){if(typeof e!="object")return T_.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||zA.isEmpty(e.type))return T_.MISSING_TYPE;if(!e.hasOwnProperty("message")||zA.isEmpty(e.message))return T_.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||zA.isEmpty(e.message.originator))return T_.MISSING_ORIGIN;if(EZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return T_.INVALID_EVENT(e.type)}a(nM,"validateEvent");function gZ(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(gZ,"SchemaEventMsg");function AZ(e){this.originator=e}a(AZ,"UserEventMsg")});var to=N((YRe,cM)=>{"use strict";var iM=M(),KRe=te(),Qh=W(),oM=$P(),ql,{sendItcEvent:aM}=qs();function RZ(e){try{Qh.info("signalSchemaChange called with message:",e),ql=ql||S_();let t=new oM(iM.ITC_EVENT_TYPES.SCHEMA,e);return ql.schema(t),aM(t)}catch(t){Qh.error(t)}}a(RZ,"signalSchemaChange");function yZ(e){try{Qh.trace("signalUserChange called with message:",e),ql=ql||S_();let t=new oM(iM.ITC_EVENT_TYPES.USER,e);return ql.user(t),aM(t)}catch(t){Qh.error(t)}}a(yZ,"signalUserChange");cM.exports={signalSchemaChange:RZ,signalUserChange:yZ}});var Jh=N((jRe,uM)=>{"use strict";var lM=te(),bZ=M(),OZ=W(),NZ=vh(),IZ=Uh(),wZ=to(),{SchemaEventMsg:CZ}=qs(),DZ="already exists in";uM.exports=PZ;async function PZ(e,t,r){if(lM.isEmptyOrZeroLength(r))return r;let n=[];lM.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 LZ(e,t.schema,t.name,i)})),s}a(PZ,"lmdbCheckForNewAttributes");async function LZ(e,t,r,n){let s=new IZ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await MZ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(DZ))OZ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(LZ,"createNewAttribute");async function MZ(e){let t;return t=await NZ(e),wZ.signalSchemaChange(new CZ(process.pid,bZ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(MZ,"createAttribute")});var $l=N((QRe,dM)=>{"use strict";var QA=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}};dM.exports=QA});var fM=N((XRe,_M)=>{"use strict";var UZ=$l(),vZ=M().OPERATIONS_ENUM,JA=class extends UZ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(vZ.INSERT,r,n,s,i),this.records=t}};_M.exports=JA});var hM=N((eye,EM)=>{"use strict";var BZ=$l(),HZ=M().OPERATIONS_ENUM,XA=class extends BZ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(HZ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};EM.exports=XA});var mM=N((rye,pM)=>{"use strict";var xZ=$l(),kZ=M().OPERATIONS_ENUM,ZA=class extends xZ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(kZ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};pM.exports=ZA});var TM=N((sye,SM)=>{"use strict";var FZ=$l(),GZ=M().OPERATIONS_ENUM,eR=class extends FZ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(GZ.DELETE,n,s,t,i),this.original_records=r}};SM.exports=eR});var g_=N((aye,yM)=>{"use strict";var oye=require("path"),gM=ht(),qZ=fM(),$Z=hM(),VZ=mM(),KZ=TM(),Vl=Ht(),AM=te(),{CONFIG_PARAMS:YZ}=M(),RM=se();RM.initSync();var Xh=M().OPERATIONS_ENUM,{getTransactionAuditStorePath:WZ}=gt();yM.exports=jZ;async function jZ(e,t){if(RM.get(YZ.LOGGING_AUDITLOG)===!1)return;let r=WZ(e.schema,e.table),n=await gM.openEnvironment(r,e.table,!0),s=zZ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){gM.initializeDBIs(n,Vl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Vl.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Vl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Vl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),AM.isEmpty(s.user_name)||n.dbis[Vl.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Vl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(jZ,"writeTransaction");function zZ(e,t){let r=AM.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Xh.INSERT)return new qZ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Xh.UPDATE)return new $Z(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Xh.UPSERT)return new VZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Xh.DELETE)return new KZ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(zZ,"createTransactionObject")});var tR=N((uye,bM)=>{"use strict";var QZ=E_(),lye=Jd(),A_=M(),JZ=Xd(),XZ=ic().insertRecords,ZZ=ht(),e5=W(),t5=Jh(),{getSchemaPath:r5}=gt(),n5=g_();bM.exports=s5;async function s5(e){try{let{schema_table:t,attributes:r}=QZ(e);JZ(e,r,t.hash_attribute),e.schema!==A_.SYSTEM_SCHEMA_NAME&&(r.includes(A_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(A_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(A_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(A_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await t5(e.hdb_auth_header,t,r),s=r5(e.schema,e.table),i=await ZZ.openEnvironment(s,e.table),o=await XZ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await n5(e,o)}catch(c){e5.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(s5,"lmdbCreateRecords")});var IM=N((_ye,NM)=>{"use strict";var OM=M(),i5=tR(),o5=Jd(),a5=require("fs-extra"),{getSchemaPath:c5}=gt();NM.exports=l5;async function l5(e){let t=[{name:e.schema,createddate:Date.now()}],r=new o5(OM.SYSTEM_SCHEMA_NAME,OM.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await i5(r),await a5.mkdirp(c5(e.schema))}a(l5,"lmdbCreateSchema")});var CM=N((Eye,wM)=>{"use strict";var rR=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}};wM.exports=rR});var MM=N((Tye,LM)=>{"use strict";var DM=ht(),nR=cn(),sR=Pn().LMDB_ERRORS_ENUM,u5=Ht(),PM=W(),pye=te(),d5=require("lmdb"),_5=CM(),f5=M(),{OVERFLOW_MARKER:mye,MAX_SEARCH_KEY_LENGTH:Sye}=u5,E5=f5.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function h5(e,t,r,n){if(nR.validateEnv(e),t===void 0)throw new Error(sR.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(sR.IDS_REQUIRED):new Error(sR.IDS_MUST_BE_ITERABLE);try{let s=DM.listDBIs(e);DM.initializeDBIs(e,t,s);let i=new _5,o,c=[],l=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||n&&h[E5]>n){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,d5.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let m=0;m<s.length;m++){let g=s[m];if(!h.hasOwnProperty(g)||g===t)continue;let S=e.dbis[g],y=h[g];if(y!=null)try{let I=nR.getIndexedValues(y);if(I)for(let U=0,H=I.length;U<H;U++)S.remove(I[U],o)}catch{PM.warn(`cannot delete from attribute: ${g}, ${y}:${o}`)}}});c.push(T),l.push(o),i.original_records.push(h)}catch(h){PM.warn(h),i.skipped.push(o)}let u=[],d=await Promise.all(c);for(let E=0,f=d.length;E<f;E++)d[E]===!0?i.deleted.push(l[E]):(i.skipped.push(l[E]),u.push(E));let _=0;for(let E=0;E<u.length;E++){let f=u[E];i.original_records.splice(f-_,1),_++}return i.txn_time=nR.getNextMonotonicTime(),i}catch(s){throw s}}a(h5,"deleteRecords");LM.exports={deleteRecords:h5}});var R_=N((Aye,vM)=>{"use strict";var Kl=te(),p5=MM(),m5=ht(),{getSchemaPath:S5}=gt(),T5=g_(),g5=W();vM.exports=A5;async function A5(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Kl.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Kl.isEmptyOrZeroLength(e.hash_values)&&!Kl.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Kl.isEmpty(l)||e.hash_values.push(l)}}if(Kl.isEmptyOrZeroLength(e.hash_values))return UM([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Kl.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=S5(e.schema,e.table),i=await m5.openEnvironment(s,e.table),o=await p5.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await T5(e,o)}catch(c){g5.error(`unable to write transaction due to ${c.message}`)}return UM(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(A5,"lmdbDeleteRecords");function UM(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(UM,"createDeleteResponse")});var oR=N((bye,BM)=>{"use strict";var R5=M(),yye=cn();function iR(e,t){let r=Object.create(null);if(t.length===1&&R5.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(iR,"parseRow");function y5(e,t,r,n){let s=iR(r,e);n.push(s)}a(y5,"searchAll");function b5(e,t,r,n){let s=iR(r,e);n[t]=s}a(b5,"searchAllToMap");function O5(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(O5,"iterateDBI");function Ec(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(Ec,"pushResults");function N5(e,t,r,n,s,i){t.toString().endsWith(e)&&Ec(t,r,n,s,i)}a(N5,"endsWith");function I5(e,t,r,n,s,i){t.toString().includes(e)&&Ec(t,r,n,s,i)}a(I5,"contains");function w5(e,t,r,n,s,i){t>e&&Ec(t,r,n,s,i)}a(w5,"greaterThanCompare");function C5(e,t,r,n,s,i){t>=e&&Ec(t,r,n,s,i)}a(C5,"greaterThanEqualCompare");function D5(e,t,r,n,s,i){t<e&&Ec(t,r,n,s,i)}a(D5,"lessThanCompare");function P5(e,t,r,n,s,i){t<=e&&Ec(t,r,n,s,i)}a(P5,"lessThanEqualCompare");BM.exports={parseRow:iR,searchAll:y5,searchAllToMap:b5,iterateDBI:O5,endsWith:N5,contains:I5,greaterThanCompare:w5,greaterThanEqualCompare:C5,lessThanCompare:D5,lessThanEqualCompare:P5,pushResults:Ec}});var Yl=N((Cye,$M)=>{"use strict";var Qo=ht(),Nye=W(),Fn=cn(),Zh=Ht(),zt=Pn().LMDB_ERRORS_ENUM,Iye=te(),L5=M(),ep=oR(),{parseRow:M5}=ep,wye=require("lmdb"),{OVERFLOW_MARKER:HM,MAX_SEARCH_KEY_LENGTH:U5}=Zh;function xM(e,t,r,n=!1,s=void 0,i=void 0){return hc(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(xM,"iterateFullIndex");function y_(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return hc(e,t,r,(d,_,E,f)=>{let S={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return f===r?(S.values=!1,_.getRange(S).map(y=>({value:y}))):_.getRange(S)})}a(y_,"iterateRangeBetween");function hc(e,t,r,n){let s=e.database||e,i=Qo.openDBI(s,r);i[Zh.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Qo.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(hc,"setupTransaction");function kM(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(HM)){if(!s)if(r)s=Qo.openDBI(e,r);else{let l=Qo.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Qo.openDBI(e,l[u]),!s[Zh.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(kM,"getOverflowCheck");function v5(e,t,r,n=!1,s=void 0,i=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return hc(e,t,t,(o,c,l)=>(tp(r),r=b_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>M5(u.value,r))))}a(v5,"searchAll");function B5(e,t,r,n=!1,s=void 0,i=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);tp(r),r=b_(e.database||e,r);let o=new Map;for(let{key:c,value:l}of xM(e,t,t,n,s,i))o.set(c,ep.parseRow(l,r));return o}a(B5,"searchAllToMap");function H5(e,t,r=!1,n=void 0,s=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=xM(e,void 0,t,r,n,s),c=o.transaction,l=kM(c.database,c,void 0,t);for(let{key:u,value:d}of o){let _=l(u,d);i[_]===void 0&&(i[_]=[]),i[_].push(d)}return i}a(H5,"iterateDBI");function x5(e,t){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return Qo.statDBI(e,t).entryCount}a(x5,"countAll");function k5(e,t,r,n,s=!1,i=void 0,o=void 0){return Jo(e,r,n),hc(e,t,r,(c,l,u,d)=>(n=Fn.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(_=>({key:n,value:_}))))}a(k5,"equals");function F5(e,t,r){return Jo(e,t,r),Qo.openDBI(e,t).getValuesCount(r)}a(F5,"count");function G5(e,t,r,n,s=!1,i=void 0,o=void 0){return Jo(e,r,n),hc(e,null,r,(c,l)=>{n=Fn.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let _;for(let E of l.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){_=E;break}return _!==void 0&&(Number.isInteger(o)?o++:i++),d=l.getRange({transaction:c,start:_,end:void 0,reverse:s,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==_){if(f.toString().startsWith(n))return E;if(u===!0)return d.DONE}}),d.filter(E=>E)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(_=>{if(_.key.toString().startsWith(n))return _;if(u===!0)return d.DONE}),u?d:d.filter(_=>_)})}a(G5,"startsWith");function q5(e,t,r,n,s=!1,i=void 0,o=void 0){return FM(e,t,r,n,s,i,o,!0)}a(q5,"endsWith");function FM(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Jo(e,r,n),hc(e,null,r,(l,u,d,_)=>{let E=kM(d,l,_,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(HM)?u.getValues(f,{transaction:l}).map(T=>{let m=E(f,T);if(c?m.endsWith(n):m.includes(n))return{key:m,value:T}}).filter(T=>T):(c?h.endsWith(n):h.includes(n))?u[Zh.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:u.getValues(f,{transaction:l}).map(T=>({key:f,value:T})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(FM,"contains");function $5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),y_(e,t,r,n,l,s,i,o,!0,!1)}a($5,"greaterThan");function V5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),y_(e,t,r,n,l,s,i,o,!1,!1)}a(V5,"greaterThanEqual");function K5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),y_(e,t,r,l,n,s,i,o,!1,!0)}a(K5,"lessThan");function Y5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),y_(e,t,r,l,n,s,i,o,!1,!1)}a(Y5,"lessThanEqual");function W5(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Fn.validateEnv(e),r===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(zt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(zt.END_VALUE_REQUIRED);if(n=Fn.convertKeyValueToWrite(n),s=Fn.convertKeyValueToWrite(s),n>s)throw new Error(zt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return y_(e,t,r,n,s,i,o,c)}a(W5,"between");function j5(e,t,r,n){Fn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(tp(r),r=b_(s,r),n===void 0)throw new Error(zt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=ep.parseRow(c,r)),o}a(j5,"searchByHash");function z5(e,t,r){Fn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(zt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(z5,"checkHashExists");function Q5(e,t,r,n,s=[]){return qM(e,t,r,n,s),GM(e,t,r,n,s).map(i=>i[1])}a(Q5,"batchSearchByHash");function J5(e,t,r,n,s=[]){qM(e,t,r,n,s);let i=new Map;for(let[o,c]of GM(e,t,r,n,s))i.set(o,c);return i}a(J5,"batchSearchByHashToMap");function GM(e,t,r,n,s=[]){return hc(e,t,t,(i,o,c)=>{r=b_(c,r);let l=r.length<3;return n.map(u=>{let d=c.dbis[t].get(u,{transaction:i,lazy:l});if(d)return[u,ep.parseRow(d,r)];s.push(u)}).filter(u=>u)})}a(GM,"batchHashSearch");function qM(e,t,r,n,s){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(tp(r),n==null)throw new Error(zt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(zt.IDS_MUST_BE_ITERABLE)}a(qM,"initializeBatchSearchByHash");function tp(e){if(!Array.isArray(e))throw e===void 0?new Error(zt.FETCH_ATTRIBUTES_REQUIRED):new Error(zt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(tp,"validateFetchAttributes");function Jo(e,t,r){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(zt.SEARCH_VALUE_REQUIRED);if(r?.length>U5)throw new Error(zt.SEARCH_VALUE_TOO_LARGE)}a(Jo,"validateComparisonFunctions");function b_(e,t){return t.length===1&&L5.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Qo.listDBIs(e)),t}a(b_,"setGetWholeRowAttributes");$M.exports={searchAll:v5,searchAllToMap:B5,count:F5,countAll:x5,equals:k5,startsWith:G5,endsWith:q5,contains:FM,searchByHash:j5,setGetWholeRowAttributes:b_,batchSearchByHash:Q5,batchSearchByHashToMap:J5,checkHashExists:z5,iterateDBI:H5,greaterThan:$5,greaterThanEqual:V5,lessThan:K5,lessThanEqual:Y5,between:W5}});var Wl=N((Pye,jM)=>{var VM=require("lodash"),KM=Tt(),xe=require("joi"),X5=te(),{hdb_schema_table:O_,checkValidTable:YM,hdb_table:WM,hdb_database:rp}=Si(),{handleHDBError:Z5,hdb_errors:e8}=_e(),{getDatabases:t8}=(Pe(),oe(lt)),{HTTP_STATUS_CODES:r8}=e8,n8=xe.object({database:rp,schema:rp,table:WM,search_attribute:O_,search_value:xe.any().required(),get_attributes:xe.array().min(1).items(xe.alternatives(O_,xe.object())).optional(),desc:xe.bool(),limit:xe.number().integer().min(1),offset:xe.number().integer().min(0)}),s8=xe.object({database:rp,schema:rp,table:WM,operator:xe.string().valid("and","or").default("and").lowercase(),offset:xe.number().integer().min(0),limit:xe.number().integer().min(1),get_attributes:xe.array().min(1).items(xe.alternatives(O_,xe.object())).optional(),sort:xe.object({attribute:xe.alternatives(O_,xe.array().min(1)),descending:xe.bool().optional()}).optional(),conditions:xe.array().min(1).items(xe.alternatives(xe.object({operator:xe.string().valid("and","or").default("and").lowercase(),conditions:xe.array()}),xe.object({search_attribute:xe.alternatives(O_,xe.array().min(1)),search_type:xe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:xe.when("search_type",{switch:[{is:"equals",then:xe.any()},{is:"between",then:xe.array().items(xe.alternatives([xe.string(),xe.number()])).length(2)}],otherwise:xe.alternatives(xe.string(),xe.number())}).required()}))).required()});jM.exports=function(e,t){let r=null;switch(t){case"value":r=KM.validateBySchema(e,n8);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(YM("database",e.schema)),i(YM("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=KM.validateBySchema(e,s8);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=X5.checkGlobalSchemaTable(e.schema,e.table);if(s)return Z5(new Error,s,r8.NOT_FOUND);let o=t8()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(d=>{for(let _=0,E=d.conditions.length;_<E;_++){let f=d.conditions[_];f.conditions?l(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=VM.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!VM.some(o,_=>_===d||_.attribute===d||_.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var aR=N((Mye,zM)=>{"use strict";var i8=ht(),o8=Wl(),{getSchemaPath:a8}=gt();zM.exports=c8;function c8(e){let t=o8(e,"hashes");if(t)throw t;let r=a8(e.schema,e.table);return i8.openEnvironment(r,e.table)}a(c8,"initialize")});var cR=N((vye,QM)=>{"use strict";var l8=Yl(),u8=aR();QM.exports=d8;async function d8(e){let t=await u8(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return l8.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(d8,"lmdbGetDataByHash")});var jl=N((Hye,JM)=>{"use strict";var lR=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};JM.exports=lR});var ZM=N((Fye,XM)=>{"use strict";var kye=jl(),_8=Yl(),f8=aR();XM.exports=E8;async function E8(e){let t=await f8(e),r=global.hdb_schema[e.schema][e.table];return _8.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(E8,"lmdbSearchByHash")});var $s=N((qye,eU)=>{"use strict";var uR=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};eU.exports=uR});var np=N((Vye,oU)=>{"use strict";var Wr=Yl(),h8=ht(),p8=te(),ke=Ht(),pc=M(),m8=Ji(),tU=Pn().LMDB_ERRORS_ENUM,{getSchemaPath:S8}=gt(),ro=pc.SEARCH_WILDCARDS;async function T8(e,t,r){let n;e.schema===pc.SYSTEM_SCHEMA_NAME?n=m8[e.table]:n=global.hdb_schema[e.schema][e.table];let s=iU(e,n.hash_attribute,r,t);return nU(e,s,n.hash_attribute,r)}a(T8,"prepSearch");async function nU(e,t,r,n){let s=S8(e.schema,e.table),i=await h8.openEnvironment(s,e.table),o=sU(i,e,t,r),c=o.transaction||i;if([ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ke.SEARCH_TYPES.SEARCH_ALL,ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(g8(e,r)===!1){let d=e.search_attribute;if(d===r)return n?rU(o,()=>!0):o.map(E=>({[r]:E.key}));let _=a(E=>({[r]:E.value,[d]:E.key}),"toObject");return n?rU(o,_):o.map(_)}let u=e.search_attribute===r?o.map(d=>d.key):o.map(d=>d.value);return n===!0?Wr.batchSearchByHashToMap(c,r,e.get_attributes,u):Wr.batchSearchByHash(c,r,e.get_attributes,u)}a(nU,"executeSearch");function sU(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case ke.SEARCH_TYPES.EQUALS:s=Wr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.CONTAINS:s=Wr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.ENDS_WITH:case ke.SEARCH_TYPES._ENDS_WITH:s=Wr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.STARTS_WITH:case ke.SEARCH_TYPES._STARTS_WITH:s=Wr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Wr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Wr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.SEARCH_ALL:return Wr.searchAll(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Wr.searchAllToMap(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.BETWEEN:s=Wr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case ke.SEARCH_TYPES.GREATER_THAN:case ke.SEARCH_TYPES._GREATER_THAN:s=Wr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.GREATER_THAN_EQUAL:case ke.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Wr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.LESS_THAN:case ke.SEARCH_TYPES._LESS_THAN:s=Wr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.LESS_THAN_EQUAL:case ke.SEARCH_TYPES._LESS_THAN_EQUAL:s=Wr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(sU,"searchByType");function rU(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(rU,"createMapFromIterable");function g8(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(g8,"checkToFetchMore");function iU(e,t,r,n){if(p8.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),ro.indexOf(s)>-1)return r===!0?ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ke.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(ro[0])<0&&s.indexOf(ro[1])<0)return c===!0?r===!0?ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ke.SEARCH_TYPES.EQUALS;if(ro.indexOf(i)>=0&&ro.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ke.SEARCH_TYPES.CONTAINS;if(ro.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ke.SEARCH_TYPES.ENDS_WITH;if(ro.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ke.SEARCH_TYPES.STARTS_WITH;if(s.includes(ro[0])||s.includes(ro[1]))return ke.SEARCH_TYPES.EQUALS;throw new Error(tU.UNKNOWN_SEARCH_TYPE)}else switch(n){case pc.VALUE_SEARCH_COMPARATORS.BETWEEN:return ke.SEARCH_TYPES.BETWEEN;case pc.VALUE_SEARCH_COMPARATORS.GREATER:return ke.SEARCH_TYPES.GREATER_THAN;case pc.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ke.SEARCH_TYPES.GREATER_THAN_EQUAL;case pc.VALUE_SEARCH_COMPARATORS.LESS:return ke.SEARCH_TYPES.LESS_THAN;case pc.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ke.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(tU.UNKNOWN_SEARCH_TYPE)}}a(iU,"createSearchTypeFromSearchObject");oU.exports={executeSearch:nU,createSearchTypeFromSearchObject:iU,prepSearch:T8,searchByType:sU}});var cU=N((Wye,aU)=>{"use strict";var Yye=$s(),A8=Wl(),R8=te(),y8=M(),b8=np();aU.exports=O8;function O8(e,t){if(!R8.isEmpty(t)&&y8.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=A8(e,"value");if(n)throw n;return b8.prepSearch(e,t,!0)}a(O8,"lmdbGetDataByValue")});var N_=N((Qye,lU)=>{"use strict";var zye=$s(),N8=Wl(),I8=te(),w8=M(),C8=np();lU.exports=D8;async function D8(e,t){if(!I8.isEmpty(t)&&w8.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=N8(e,"value");if(n)throw n;return C8.prepSearch(e,t,!1)}a(D8,"lmdbSearchByValue")});var dU=N((Zye,uU)=>{"use strict";var Xye=Ht(),dR=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}},_R=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},fR=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};uU.exports={SearchByConditionsObject:dR,SearchCondition:_R,SortAttribute:fR}});var pU=N((nbe,hU)=>{"use strict";var tbe=dU().SearchByConditionsObject,P8=$s(),L8=Wl(),ER=Yl(),sp=Ht(),{Resource:rbe}=(Vs(),oe(hR)),EU=np(),M8=oR(),U8=require("lodash"),{getSchemaPath:v8}=gt(),_U=ht(),{handleHDBError:B8,hdb_errors:H8}=_e(),{HTTP_STATUS_CODES:x8}=H8,k8=1e8;hU.exports=F8;async function F8(e){let t=L8(e,"conditions");if(t)throw B8(t,t.message,x8.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=v8(e.schema,e.table),n=await _U.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)_U.openDBI(n,u.search_attribute);let i=U8.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.search_type;d===sp.SEARCH_TYPES.EQUALS?u.estimated_count=ER.count(n,u.search_attribute,u.search_value):d===sp.SEARCH_TYPES.CONTAINS||d===sp.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=k8}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await fU(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(EU.filterByType),_=d.length,E=ER.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(f=>u.get(f,{transaction:o,lazy:!0})),_>0&&(l=l.filter(f=>{for(let h=0;h<_;h++)if(!d[h](f))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(f=>M8.parseRow(f,E))}else{for(let _=1;_<i.length;_++){let E=i[_],f=await fU(o,e,E,s.hash_attribute);c=c.concat(f)}let u=new Set,d=e.offset||0;c=c.filter(_=>u.has(_)?!1:(u.add(_),!0)).slice(d,e.limit&&e.limit+d),l=ER.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(F8,"lmdbSearchByConditions");async function fU(e,t,r,n){let s=new P8(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===sp.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,EU.searchByType(e,s,i,n).map(o=>o.value)}a(fU,"executeConditionSearch")});var I_=N((ibe,mU)=>{"use strict";var G8=M().OPERATIONS_ENUM,pR=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=G8.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};mU.exports=pR});var mR=N((abe,OU)=>{"use strict";var AU=$s(),RU=I_(),yU=N_(),bU=R_(),_n=M(),SU=te(),TU=ht(),{getTransactionAuditStorePath:q8,getSchemaPath:$8}=gt(),gU=W();OU.exports=V8;async function V8(e){try{if(SU.isEmpty(global.hdb_schema[e.schema])||SU.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await K8(e),await Y8(e);let t=$8(e.schema,e.table);try{await TU.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")gU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=q8(e.schema,e.table);await TU.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")gU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(V8,"lmdbDropTable");async function K8(e){let t=new AU(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await yU(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 RU(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await bU(s)}a(K8,"deleteAttributesFromSystem");async function Y8(e){let t=new AU(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await yU(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 RU(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await bU(s)}catch(i){throw i}}a(Y8,"dropTableFromSystem")});var IU=N((lbe,NU)=>{"use strict";var W8=require("fs-extra"),j8=$s(),z8=jl(),Q8=I_(),J8=mR(),X8=R_(),Z8=cR(),e6=N_(),no=M(),{getSchemaPath:t6}=gt(),{handleHDBError:r6,hdb_errors:n6}=_e(),{HDB_ERROR_MSGS:s6,HTTP_STATUS_CODES:i6}=n6;NU.exports=o6;async function o6(e){let t;try{t=await a6(e.schema);let r=new j8(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await e6(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await J8(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new Q8(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await X8(s);let i=t6(t);await W8.remove(i)}catch(r){throw r}}a(o6,"lmdbDropSchema");async function a6(e){let t=new z8(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await Z8(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw r6(new Error,s6.SCHEMA_NOT_FOUND(e),i6.NOT_FOUND,void 0,void 0,!0);return n}a(a6,"validateDropSchema")});var w_=N((dbe,wU)=>{"use strict";var SR=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};wU.exports=SR});var gR=N((Ebe,CU)=>{"use strict";var c6=require("fs-extra"),ip=ht(),{getTransactionAuditStorePath:l6}=gt(),TR=Ht(),fbe=w_();CU.exports=u6;async function u6(e){let t;try{let r=l6(e.schema,e.table);await c6.mkdirp(r),t=await ip.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{ip.createDBI(t,TR.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),ip.createDBI(t,TR.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),ip.createDBI(t,TR.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(u6,"createTransactionsAuditEnvironment")});var LU=N((mbe,PU)=>{"use strict";var AR=M(),DU=ht(),d6=ic(),{getSystemSchemaPath:_6,getSchemaPath:f6}=gt(),pbe=Ji(),E6=vh(),RR=Uh(),h6=W(),p6=gR();PU.exports=m6;async function m6(e,t){let r=f6(t.schema,t.table),n=new RR(t.schema,t.table,AR.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new RR(t.schema,t.table,AR.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new RR(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await DU.createEnvironment(r,t.table),e!==void 0){let o=await DU.openEnvironment(_6(),AR.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await d6.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_table_attributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await yR(n),await yR(s),await yR(i)}await p6(t)}catch(o){throw o}}a(m6,"lmdbCreateTable");async function yR(e){try{await E6(e)}catch(t){h6.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(yR,"createAttribute")});var UU=N((Tbe,MU)=>{"use strict";var S6=E_(),T6=Xd(),g6=Jh(),C_=M(),A6=ic().updateRecords,R6=ht(),{getSchemaPath:y6}=gt(),b6=g_(),O6=W();MU.exports=N6;async function N6(e){try{let{schema_table:t,attributes:r}=S6(e);T6(e,r,t.hash_attribute),e.schema!==C_.SYSTEM_SCHEMA_NAME&&(r.includes(C_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(C_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(C_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(C_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await g6(e.hdb_auth_header,t,r),s=y6(e.schema,e.table),i=await R6.openEnvironment(s,e.table),o=await A6(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await b6(e,o)}catch(c){O6.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(N6,"lmdbUpdateRecords")});var BU=N((Abe,vU)=>{"use strict";var I6=M().OPERATIONS_ENUM,bR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=I6.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};vU.exports=bR});var xU=N((bbe,HU)=>{"use strict";var ybe=BU(),w6=E_(),C6=Xd(),D6=Jh(),D_=M(),P6=ic().upsertRecords,L6=ht(),{getSchemaPath:M6}=gt(),U6=g_(),v6=W(),{handleHDBError:B6,hdb_errors:H6}=_e();HU.exports=x6;async function x6(e){let t;try{t=w6(e)}catch(l){throw B6(l,l.message,H6.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;C6(e,n,r.hash_attribute),e.schema!==D_.SYSTEM_SCHEMA_NAME&&(n.includes(D_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(D_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(D_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(D_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await D6(e.hdb_auth_header,r,n),i=M6(e.schema,e.table),o=await L6.openEnvironment(i,e.table),c=await P6(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await U6(e,c)}catch(l){v6.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(x6,"lmdbUpsertRecords")});var FU=N((Nbe,kU)=>{"use strict";var OR=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};kU.exports=OR});var qU=N((wbe,GU)=>{"use strict";var NR=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}};GU.exports=NR});var KU=N((Pbe,VU)=>{"use strict";var IR=ht(),{getTransactionAuditStorePath:k6}=gt(),Dbe=FU(),P_=Ht(),F6=te(),$U=qU(),G6=require("util").promisify,q6=G6(setTimeout),$6=1e4,V6=100;VU.exports=K6;async function K6(e){let t=k6(e.schema,e.table),r=await IR.openEnvironment(t,e.table,!0),n=IR.listDBIs(r);IR.initializeDBIs(r,P_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new $U;do s=await Y6(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 q6(V6);while(s.transactions_deleted>0);return i}a(K6,"deleteAuditLogsBefore");async function Y6(e,t){let r=new $U;try{let n=e.dbis[P_.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[P_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];F6.isEmpty(c)||(s=e.dbis[P_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[P_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>$6)break}return await s,r}catch(n){throw n}}a(Y6,"deleteTransactions")});var WU=N((Mbe,YU)=>{"use strict";var wR=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};YU.exports=wR});var zU=N((Bbe,jU)=>{"use strict";var W6=$s(),j6=I_(),vbe=WU(),Ri=M(),z6=te(),CR=ht(),Q6=Ji(),J6=N_(),X6=R_(),{getSchemaPath:Z6}=gt();jU.exports=e9;async function e9(e,t=!0){let r;e.schema===Ri.SYSTEM_SCHEMA_NAME?r=Q6[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await r9(e),s=Z6(e.schema,e.table),i=await CR.openEnvironment(s,e.table);return t===!0&&await t9(e,i,r.hash_attribute),CR.dropDBI(i,e.attribute),n}a(e9,"lmdbDropAttribute");async function t9(e,t,r){let n=CR.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(o,u,l)}await s}a(t9,"removeAttributeFromAllObjects");async function r9(e){let t=new W6(Ri.SYSTEM_SCHEMA_NAME,Ri.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ri.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ri.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Ri.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await J6(t)).filter(o=>o[Ri.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(z6.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Ri.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new j6(Ri.SYSTEM_SCHEMA_NAME,Ri.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return X6(i)}a(r9,"dropAttributeFromSystem")});var tv=N((kbe,ev)=>{"use strict";var DR=ht(),zl=Ht(),xbe=cn(),PR=M(),QU=te(),{getTransactionAuditStorePath:n9}=gt(),s9=Yl(),op=$l(),i9=W();ev.exports=o9;async function o9(e){let t=n9(e.schema,e.table),r=await DR.openEnvironment(t,e.table,!0),n=DR.listDBIs(r);DR.initializeDBIs(r,zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case PR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return JU(r,e.search_values);case PR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,c9(r,e.search_values,s);case PR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return a9(r,e.search_values);default:return JU(r)}}a(o9,"readAuditLog");function JU(e,t=[0,Date.now()]){QU.isEmpty(t[0])&&(t[0]=0),QU.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new op,s))}a(JU,"searchTransactionsByTimestamp");function a9(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[zl.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,ZU(e,i))}return Object.fromEntries(r)}a(a9,"searchTransactionsByUsername");function c9(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=s9.equals(e,zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,zl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:_}of d){let E=Number(_);n.has(E)?n.get(E).push(u.toString()):n.set(E,[u.toString()])}}let s=Array.from(n.keys()),i=ZU(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);XU(l,"records",r,d,o),XU(l,"original_records",r,d,o)}return Object.fromEntries(o)}a(c9,"searchTransactionsByHashValues");function XU(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let _=new op(e.operation,e.user_name,i,void 0);_[t]=[c],u.push(_)}}else{let u=new op(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(XU,"loopRecords");function ZU(e,t){let r=[];try{let n=e.dbis[zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new op,i);r.push(o)}}catch(i){i9.warn(i)}return r}catch(n){throw n}}a(ZU,"batchSearchTransactions")});var nv=N(($be,rv)=>{"use strict";var{getSchemaPath:Gbe}=gt(),qbe=ht(),{database:l9}=(Pe(),oe(lt));rv.exports={writeTransaction:u9};async function u9(e,t,r){return l9({database:e,table:t}).transaction(r)}a(u9,"writeTransaction")});var av=N((Kbe,ov)=>{"use strict";var{getSchemaPath:sv}=gt(),iv=ht();ov.exports={flush:d9,resetReadTxn:_9};async function d9(e,t){return(await iv.openEnvironment(sv(e,t),t.toString())).flushed}a(d9,"flush");async function _9(e,t){try{(await iv.openEnvironment(sv(e,t),t.toString())).resetReadTxn()}catch{}}a(_9,"resetReadTxn")});var dv=N((Wbe,uv)=>{"use strict";var{Readable:f9}=require("stream"),{getDatabases:E9}=(Pe(),oe(lt)),{readSync:h9,openSync:p9,createReadStream:cv}=require("fs"),{open:m9}=require("lmdb"),lv=a_(),S9=c_(),{AUDIT_STORE_OPTIONS:T9}=(zi(),oe(_v)),{INTERNAL_DBIS_NAME:g9,AUDIT_STORE_NAME:A9}=Ht();uv.exports=y9;var LR=32768,R9=100;async function y9(e){let t=e.database||e.schema||"data",r=E9()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let d=u.dbisDB,_=m9({noSync:!0,maxDbs:S9.MAX_DBS}),E,f=_.openDB(g9,new lv(!1)),h=d.useReadTransaction(),T=0,m=a(async function(S,y){y.encoding="binary",y.encoder=void 0;let I=_.openDB(S,y),U=d.openDB(S,y);for(let{key:H,version:X,value:Y}of U.getRange({start:null,transaction:h,versions:U.useVersions}))E=I.put(H,Y,X),T++%R9===0&&(await new Promise(V=>setTimeout(V,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:y}of d.getRange({transaction:h,start:!1}))if(s.some(I=>S.startsWith?.(I+"/"))){f.put(S,y);let[,I]=S.split("/"),U=!I,H=new lv(!U,U);await m(S,H)}e.include_audit&&await m(A9,{...T9}),await E;let g=cv(_.path);return g.headers=l(),g.on("close",()=>{h.done(),_.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=p9(o.path);return o.transaction(()=>{let u=Buffer.alloc(LR);h9(c,u,0,LR),o.resetReadTxn();let d=o.useReadTransaction();d.renew();let _=cv(null,{fd:c,start:LR}),E=new f9.from(async function*(){yield u;for await(let f of _)d.openTimer&&(d.openTimer=0),yield f;d.done()}());return E.headers=l(),E});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}a(y9,"getBackup")});var hv=N((zbe,Ev)=>{"use strict";var b9=W(),{handleHDBError:O9}=_e(),N9=QD(),I9=vh(),w9=tR(),C9=IM(),D9=R_(),P9=cR(),L9=ZM(),M9=cU(),U9=N_(),v9=pU(),B9=IU(),H9=LU(),x9=UU(),k9=xU(),F9=KU(),G9=mR(),q9=zU(),$9=tv(),V9=nv(),fv=av(),K9=dv(),MR=class extends N9{static{a(this,"LMDBBridge")}async searchByConditions(t){return v9(t)}async getDataByHash(t){return await P9(t)}async searchByHash(t){return await L9(t)}async getDataByValue(t,r){return await M9(t,r)}async searchByValue(t){return await U9(t)}async createSchema(t){return await C9(t)}async dropSchema(t){return await B9(t)}async createTable(t,r){return await H9(t,r)}async dropTable(t){return await G9(t)}async createAttribute(t){return await I9(t)}async createRecords(t){return await w9(t)}async updateRecords(t){return await x9(t)}async upsertRecords(t){try{return await k9(t)}catch(r){throw O9(r,null,null,b9.ERR,r)}}async deleteRecords(t){return await D9(t)}async dropAttribute(t){return await q9(t)}async deleteAuditLogsBefore(t){return await F9(t)}async readAuditLog(t){return await $9(t)}writeTransaction(t,r,n){return V9.writeTransaction(t,r,n)}flush(t,r){return fv.flush(t,r)}resetReadTxn(t,r){return fv.resetReadTxn(t,r)}getBackup(t){return K9(t)}};Ev.exports=MR});function yv(e){vR=e}function z9(){j9=setInterval(function(){for(let e of UR)if(e.stale){let t=e[Fe]?.url;Tv.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},W9).unref()}var BR,Sv,Tv,gv,Av,Rv,pv,UR,Y9,L_,mv,vR,mc,ap,W9,j9,cp=Ie(()=>{BR=L(cn()),Sv=L(_e()),Tv=L(W());Vs();gv=L(se()),Av=L(M()),Rv=L(te()),pv=100,UR=new Set,Y9=(0,Rv.convertToMS)(gv.get(Av.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3;a(yv,"replicationConfirmation");mc=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),UR.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(UR.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(L_&&!this.overloadChecked&&performance.now()-mv>Y9)throw new Sv.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp||(0,BR.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let _=this.validated;this.validated=this.writes.length;for(let f=_;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let E;for(let f=_;f<this.validated;f++){let h=this.writes[f];h&&(h.before||h.beforeIntermediate)&&(E=!0)}if(E)return(async()=>{try{for(let f=0;f<2;f++){let h;for(let T=_;T<this.validated;T++){let m=this.writes[T];if(!m)continue;let g=m[f===0?"before":"beforeIntermediate"];if(g){let S=g();h?h.push?h.push(S):h=[h,S]:h=S}}h&&await(h.push?Promise.all(h):h)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(_){throw this.abort(),_}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(_=>_);let c=a(_=>{_.commit(r,_.entry,n)},"doWrite"),l=a(()=>{let _=this.writes[o++];if(_)if(_.key){n>0&&(_.entry=_.store.getEntry(_.key));let E=_.store.ifVersion(_.key,_.entry?.version??null,l);s=s||E}else l();else for(let E of this.writes)c(E)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<pv>>n?l():s=this.writes[0].store.transaction(()=>{for(let _ of this.writes)_.entry=_.store.getEntry(_.key),c(_);return!0})),s)return L_||(L_=s,mv=performance.now(),L_.then(()=>{L_=null})),s.then(_=>{if(_){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let E=this.writes[0].store.rootStore.databaseName,f=this.writes[this.writes.length-1];vR&&f&&i.push(vR(E,f.store.getEntry(f.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+pv/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let d={txnTime:r};if(this.next){let _=this.next?.commit(t);if(_?.then)return _?.then(E=>({txnTime:r,next:E}));d.next=_}return d}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},ap=class extends mc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,BR.getNextMonotonicTime)())}getReadTxn(){}},W9=3e4;a(z9,"startMonitoringTxns");z9()});function Dt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new mc;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n[Fe]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({letItLinger:r?.letItLinger});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var bv,Sc=Ie(()=>{bv=L(_i());Vs();cp();a(Dt,"transaction");(0,bv._assignPackageExport)("transaction",Dt);Dt.commit=function(e){let t=(e[Fe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Dt.abort=function(e){let t=(e[Fe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var Lv={};je(Lv,{ResourceBridge:()=>kR});function FR({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 Nv(e,t){let r=yi(e),n=FR(e,r);if(!r)throw new Ks.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},o;Dt(i,()=>new Promise(u=>o=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&up(d)}catch(_){d={message:_.toString()}}return t?{value:{key:u,value:d}}:{value:d}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function yi(e){let t=e.database||e.schema||J9,r=ut()[t];if(!r)throw(0,Ks.handleHDBError)(new Error,Q9.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Iv(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*wv(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var Cv,lp,Ks,Dv,Ys,HR,xR,Pv,Q9,J9,X9,Z9,Ov,kR,Mv=Ie(()=>{"use strict";Cv=L(hv()),lp=L(Wl()),Ks=L(_e());Pe();Dv=L(E_()),Ys=L(M()),HR=L(to()),xR=L(qs()),Pv=L(te());Sc();dp();({HDB_ERROR_MSGS:Q9}=Ks.hdb_errors),J9="data",X9=1e4,Z9=10,kR=class extends Cv.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Ov=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,lp.default)(t,"conditions");if(r)throw(0,Ks.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=yi(t);if(!n)throw new Ks.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:FR(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Ks.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}]}Et({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await yi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=yi(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(u=>{if(!u){let{value:d,version:_}=r.primaryStore.getEntry(o);return i(o,d,_)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){yi(t).dropTable()}createSchema(t){return Ql({database:t.schema,table:null}),HR.signalSchemaChange(new xR.SchemaEventMsg(process.pid,Ys.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await GR(t.schema),HR.signalSchemaChange(new xR.SchemaEventMsg(process.pid,Ys.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,Ov.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,Dv.default)(t),s,i=ut()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(o.replicateTo=t.replicateTo),t.replicatedConfirmation&&(o.replicatedConfirmation=t.replicatedConfirmation),Dt(o,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(E=>E.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let _=d[i.primaryKey],E=_!=null&&await i.get(_,o);if(t.requires_existing&&!E||t.requires_no_existing&&E){u.push(d[i.primaryKey]);continue}E&&(E=up(E));for(let f in d)if(Object.prototype.hasOwnProperty.call(d,f)){let h=d[f];if(typeof h=="function")try{let T=h([[E]]);Array.isArray(T)&&(h=T[0].func_val,d[f]=h)}catch(T){throw T.message+="Trying to set key "+f+" on object"+JSON.stringify(d),T}}if(E)for(let f in E)Object.prototype.hasOwnProperty.call(d,f)||(d[f]=E[f]);await(_==null?i.create(d,o):i.put(d,o)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=ut()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),Dt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return Iv(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=ut()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ks.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:Ys.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),o.push(...d.skipped_hashes),await(0,Pv.async_set_timeout)(Z9),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%X9===0&&await u();return l.length>0&&await u(),s?Iv(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,lp.default)(t,"hashes");if(r)throw r;return Nv(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Nv(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Ys.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,lp.default)(t,"value");if(n)throw n;let s=yi(t);if(!s)throw new Ks.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===Ys.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:FR(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=yi(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){yi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return yi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=yi(t),n={};switch(t.search_type){case Ys.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.operation??o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case Ys.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of wv(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return wv(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(FR,"getSelect");a(Nv,"getRecords");a(yi,"getTable");a(Iv,"createDeleteResponse");a(wv,"groupRecordsInHistory")});var Hn=N((uOe,Uv)=>{"use strict";var{ResourceBridge:e7}=(Mv(),oe(Lv)),t7=se();t7.initSync();var _p;function r7(){return _p||(_p=new e7,_p)}a(r7,"getBridge");Uv.exports=r7()});var xv=N((_Oe,Hv)=>{"use strict";var vv=require("lodash"),M_=require("mathjs"),n7=require("jsonata"),Bv=te();Hv.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?vv.uniqWith(e,vv.isEqual):e,"distinct_array"),searchJSON:s7,mad:U_.bind(null,M_.mad),mean:U_.bind(null,M_.mean),mode:U_.bind(null,M_.mode),prod:U_.bind(null,M_.prod),median:U_.bind(null,M_.median)};function U_(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(U_,"aggregateFunction");function s7(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(Bv.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Bv.isEmpty(this.__ala__.res[r])){let n=n7(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(s7,"searchJSON")});var Fv=N((EOe,kv)=>{"use strict";var nr=require("moment"),qR="YYYY-MM-DDTHH:mm:ss.SSSZZ";nr.suppressDeprecationWarnings=!0;kv.exports={current_date:a(()=>nr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>nr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return nr(e).utc().format("YYYY");case"month":return nr(e).utc().format("MM");case"day":return nr(e).utc().format("DD");case"hour":return nr(e).utc().format("HH");case"minute":return nr(e).utc().format("mm");case"second":return nr(e).utc().format("ss");case"millisecond":return nr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>nr(e).utc().format(qR),"date"),date_format:a((e,t)=>nr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>nr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>nr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=nr(e).utc(),s=nr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>nr().utc().valueOf(),"now"),get_server_time:a(()=>nr().format(qR),"get_server_time"),offset_utc:a((e,t)=>nr(e).utc().utcOffset(t).format(qR),"offset_utc")}});var Vv=N((pOe,$v)=>{"use strict";var i7=require("@turf/area"),o7=require("@turf/length"),a7=require("@turf/circle"),c7=require("@turf/difference"),l7=require("@turf/distance"),u7=require("@turf/boolean-contains"),d7=require("@turf/boolean-equal"),_7=require("@turf/boolean-disjoint"),f7=require("@turf/helpers"),Gv=M(),$e=te(),so=W();$v.exports={geoArea:E7,geoLength:h7,geoCircle:p7,geoDifference:m7,geoDistance:qv,geoNear:S7,geoContains:T7,geoEqual:g7,geoCrosses:A7,geoConvert:R7};function E7(e){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return i7.default(e)}catch(t){return so.trace(t,e),NaN}}a(E7,"geoArea");function h7(e,t){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return o7.default(e,{units:t||"kilometers"})}catch(r){return so.trace(r,e),NaN}}a(h7,"geoLength");function p7(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return a7.default(e,t,{units:r||"kilometers"})}catch(n){return so.trace(n,e,t),NaN}}a(p7,"geoCircle");function m7(e,t){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return c7(e,t)}catch(r){return so.trace(r,e,t),NaN}}a(m7,"geoDifference");function qv(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return l7.default(e,t,{units:r||"kilometers"})}catch(n){return so.trace(n,e,t),NaN}}a(qv,"geoDistance");function S7(e,t,r,n){if($e.isEmpty(e)||$e.isEmpty(t))return!1;if($e.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return qv(e,t,n)<=r}catch(s){return so.trace(s,e,t),!1}}a(S7,"geoNear");function T7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return u7.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(T7,"geoContains");function g7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return d7.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(g7,"geoEqual");function A7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return!_7.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(A7,"geoCrosses");function R7(e,t,r){if($e.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if($e.isEmpty(t))throw new Error("geo_type is required");if($e.isEmpty(Gv.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Gv.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=$e.autoCastJSON(e)),f7[t](e,r)}a(R7,"geoConvert")});var fp=N((SOe,Kv)=>{var Tc=xv(),Gn=Fv(),bi=Vv();Kv.exports=e=>{e.aggr.mad=e.aggr.MAD=Tc.mad,e.aggr.mean=e.aggr.MEAN=Tc.mean,e.aggr.mode=e.aggr.MODE=Tc.mode,e.aggr.prod=e.aggr.PROD=Tc.prod,e.aggr.median=e.aggr.MEDIAN=Tc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Tc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Tc.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Gn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Gn.current_time,e.fn.extract=e.fn.EXTRACT=Gn.extract,e.fn.date=e.fn.DATE=Gn.date,e.fn.date_format=e.fn.DATE_FORMAT=Gn.date_format,e.fn.date_add=e.fn.DATE_ADD=Gn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Gn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Gn.date_diff,e.fn.now=e.fn.NOW=Gn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Gn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Gn.get_server_time,e.fn.getdate=e.fn.GETDATE=Gn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Gn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=bi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=bi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=bi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=bi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=bi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=bi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=bi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=bi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=bi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=bi.geoNear}});var zv=N((TOe,jv)=>{"use strict";var v_=require("lodash"),fn=require("alasql");fn.options.cache=!1;var y7=fp(),Yv=require("clone"),Ep=require("recursive-iterator"),Ue=W(),et=te(),Jl=Hn(),b7=M(),{hdb_errors:O7}=_e(),{getDatabases:Wv}=(Pe(),oe(lt)),N7="IS NULL",Ws="There was a problem performing this search. Please check the logs and try again.";y7(fn);var $R=class{static{a(this,"SQLSearch")}constructor(t,r){if(et.isEmpty(t))throw Ue.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),et.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!et.isEmptyOrZeroLength(n))return Ue.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ue.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ue.error(n),new Error(Ws)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ue.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ue.error(n),new Error(Ws)}if(Object.keys(this.data).length===0)return Ue.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ue.error("Error thrown from processJoins in SQLSearch class method search."),Ue.error(n),new Error(Ws)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ue.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ue.error(n),new Error(Ws)}try{return t=await this._finalSQL(),t}catch(n){throw Ue.error("Error thrown from finalSQL in SQLSearch class method search."),Ue.error(n),new Error(Ws)}}_getColumns(){let t=new Ep(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(Yv(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=v_.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=Wv()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(et.isEmpty(this.statement.where)){Ue.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Ep(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!et.isEmpty(r)&&r.right)if(et.isNotEmptyAndHasValue(r.right.value)){let n=et.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new fn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=et.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new fn.yy.LogicValue({value:i}):n instanceof fn.yy.StringValue&&et.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new fn.yy.NumValue({value:i}))});if(t){Ue.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Ep(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!et.isEmpty(b7.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(et.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(et.isEmptyOrZeroLength(r.left.columnid)||et.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(et.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!et.isEmpty(r.right.value)||!et.isEmpty(r.left.value)?n.add(et.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(et.isEmptyOrZeroLength(this.all_table_attributes)&&et.isEmptyOrZeroLength(this.statement.from)&&et.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&v_.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(et.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);et.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(et.isEmptyOrZeroLength(this.all_table_attributes)&&!et.isEmptyOrZeroLength(this.columns.columns))return t;if(et.isEmptyOrZeroLength(this.all_table_attributes)&&et.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await fn.promise(r)}catch(r){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ue.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(Yv(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(et.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(N7)>-1&&this.tables.forEach(s=>{let i={columnid:Wv()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=v_.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!et.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!et.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await Jl.getDataByHash(c);for(let _ of c.hash_values)d.get(_)&&!this.data[i].__merged_data[_]&&(this.data[i].__merged_data[_]=[...n[i]],this._setMergedHashAttribute(i,_))}catch(d){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(d),new Error(Ws)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let _={...c};_.search_value=d;let E=await Jl.getDataByValue(_);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]):(this.data[i].__merged_data[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,f))}))}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(d),new Error(Ws)}else if(!et.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!et.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let _=0,E=d.length;_<E;_++){let f=d[_];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await Jl.getDataByValue(c,f.operation);if(l)for(let[T]of h)this.data[i].__merged_data[T]||(this.data[i].__merged_data[T]=[...n[i]],this._setMergedHashAttribute(i,T));else for(let[T,m]of h)this.data[i].__merged_data[T]?this._updateMergedAttribute(i,T,s.attribute,m[s.attribute]):(this.data[i].__merged_data[T]=[...n[i]],this._updateMergedAttribute(i,T,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,T))}}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ue.error(d),new Error(Ws)}else try{c.search_attribute=s.attribute,c.search_value="*";let d=await Jl.getDataByValue(c);if(l)for(let[_]of d)this.data[i].__merged_data[_]||(this.data[i].__merged_data[_]=[...n[i]],this._setMergedHashAttribute(i,_));else for(let[_,E]of d)this.data[i].__merged_data[_]?this._updateMergedAttribute(i,_,s.attribute,E[s.attribute]):(this.data[i].__merged_data[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,E[s.attribute]),this._setMergedHashAttribute(i,_))}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ue.error(d),new Error(Ws)}}}_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 fn.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 fn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new fn.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 fn.yy.FuncValue:new fn.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,T=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${T}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${T}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let d="",_="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",_=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${_}`,h=this._convertColumnsToIndexes(f,s);E=await fn.promise(h,t),t=null}catch(f){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ue.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let T=E[f];o.forEach(m=>{T[m.key]!==null&&T[m.key]!==void 0&&m.keys.add(T[m.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),T=v_.difference(h,[...f.keys].map(m=>m.toString()));for(let m=0,g=T.length;m<g;m++){let S=T[m];delete this.data[`${f.schema}_${f.table}`].__merged_data[S]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Ep(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=v_.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw Ue.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ue.error(i),new Error(Ws)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let d in i)o.push(i[d][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await Jl.getDataByHash(c),u=s.columns.length;for(let d=0,_=o.length;d<_;d++){let E=o[d],f=l.get(E);for(let h=0;h<u;h++){let T=s.columns[h],m=f[T]===void 0?null:f[T];this.data[n].__merged_data[E].push(m)}}}}catch(r){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ue.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();Ue.trace(`Final SQL: ${s}`),n=await fn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ue.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ue.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return Ue.error(O7.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ue.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await Jl.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]={...r[s]}),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw Ue.error("There was an error when processing this SQL operation. Check your logs"),Ue.error(o),new Error(Ws)}}return Object.values(Object.values(this.data)[0].__merged_data)}};jv.exports=$R});var Vr=N((AOe,Qv)=>{"use strict";var I7=jD();Qv.exports={searchByConditions:C7,searchByHash:D7,searchByValue:P7,search:L7};var VR=Hn(),{transformReq:KR}=te(),w7=zv();async function C7(e){return KR(e),VR.searchByConditions(e)}a(C7,"searchByConditions");async function D7(e){KR(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of VR.searchByHash(e))r&&t.push(r);return t}a(D7,"searchByHash");async function P7(e){KR(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of VR.searchByValue(e))t.push(r);return t}a(P7,"searchByValue");function L7(e,t){try{let r=new I7(e);r.validate(),new w7(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(L7,"search")});var hp=N((yOe,Jv)=>{"use strict";var M7=Hn();Jv.exports={writeTransaction:U7};function U7(e,t,r){return M7.writeTransaction(e,t,r)}a(U7,"writeTransaction")});var t0=N((NOe,e0)=>{"use strict";var v7=Vr(),B7=ls(),Xv=W(),H7=un(),OOe=hp(),x7=require("clone"),WR=require("alasql"),k7=fp(),Zv=require("util"),F7=Zv.promisify(B7.getTableSchema),G7=Zv.promisify(v7.search),q7=M(),YR=te();k7(WR);e0.exports={update:V7};var $7="There was a problem performing this update. Please check the logs and try again.";async function V7({statement:e,hdb_user:t}){let r=await F7(e.table.databaseid,e.table.tableid),n=K7(e.columns);YR.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=x7(s),c=YR.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=WR.parse(l).statements[0],d=await G7(u),_=Y7(n,d);return W7(o,_,t)}a(V7,"update");function K7(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=WR.compile(`SELECT ${r.expression.toString()} AS [${q7.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Xv.error(t),new Error($7)}}a(K7,"createUpdateRecord");function Y7(e,t){return YR.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Y7,"buildUpdateRecords");async function W7(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await H7.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){Xv.error(`Error delete new_attributes from update response: ${i}`)}return s}a(W7,"updateRecords")});var n0=N((DOe,r0)=>{var j7=require("alasql"),z7=Vr(),Q7=W(),J7=Hn(),zR=require("util"),jR=te(),X7=M(),Z7=ls(),wOe=hp(),COe=un(),eee="record",tee="successfully deleted",ree=zR.callbackify(oee),nee=zR.promisify(z7.search),see=zR.promisify(Z7.getTableSchema);r0.exports={convertDelete:ree};function iee(e){return`${e.deleted_hashes.length} ${eee}${e.deleted_hashes.length===1?"":"s"} ${tee}`}a(iee,"generateReturnMessage");async function oee({statement:e,hdb_user:t}){let r=await see(e.table.databaseid,e.table.tableid);jR.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=jR.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=j7.parse(o).statements[0],l={operation:X7.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await nee(c);let u=await J7.deleteRecords(l);return jR.isEmptyOrZeroLength(u.message)&&(u.message=iee(u)),delete u.txn_time,u}catch(u){throw Q7.error(u),u.hdb_code?u.message:u}}a(oee,"convertDelete")});var c0=N((LOe,a0)=>{"use strict";var aee=eo(),{hdb_errors:s0}=_e(),{getDatabases:i0}=(Pe(),oe(lt));a0.exports={checkSchemaExists:o0,checkSchemaTableExists:cee,schema_describe:aee};async function o0(e){if(!i0()[e])return s0.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(o0,"checkSchemaExists");async function cee(e,t){let r=await o0(e);if(r)return r;if(!i0()[e][t])return s0.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(cee,"checkSchemaTableExists")});var Xl=N((UOe,lee)=>{lee.exports={name:"harperdb",version:"4.4.19",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","enterprise","Fastify","NATS","HarperDB","Harper","clustering","replication","REST","WebSockets","decentralized","server-sent events","document store"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:replication && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc --no-clean --reporter=lcovonly npm run test:security && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:replication && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && npm run test:security && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","test:security":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/security/**/*.js' --config '../unitTests/.mocharc.json'","test:replication":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/replication/**/*.js' --config '../unitTests/.mocharc.json'","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test",format:"prettier .","format:fix":"npm run format -- --write",lint:"eslint .","lint:fix":"npm run lint -- --fix"},dependencies:{"@aws-sdk/client-s3":"3.717.0","@aws-sdk/lib-storage":"3.717.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.10.0","@fastify/compress":"~6.5.0","@fastify/cors":"~9.0.1","@fastify/static":"~7.0.4","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.6.0",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.29.0","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.10.0","gunzip-maybe":"1.4.2","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.2.5",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",moment:"2.30.1","mqtt-packet":"~9.0.0",msgpackr:"1.11.2",nats:"2.19.0",needle:"3.3.1","node-forge":"^1.3.1","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.3",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^1.1.0","serve-static":"2.1.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.24.5","tar-fs":"3.0.6",ulidx:"0.5.0",uuid:"10.0.0","validate.js":"0.13.1",ws:"8.18.0",yaml:"2.7.0"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"20.14.8","@typescript-eslint/eslint-plugin":"^7.18.0","@typescript-eslint/parser":"^7.18.0",axios:"1.7.5",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.24.2",eslint:"^8.57.1","eslint-config-prettier":"^9.1.0","eslint-plugin-sonarjs":"^3.0.1",eventsource:"^2.0.2","graphql-http":"^1.22.3","hook-std":"3.0.0","intercept-stdout":"0.1.2",mkcert:"1.5.1",mocha:"^11.0.1","mocha-teamcity-reporter":"^4.2.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"6.1.3","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"3.3.3",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.7.2",undici:"^6.19.8","why-is-node-still-running":"^1.0.0"},overrides:{alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","segfault-handler":"^1.3.0","utf-8-validate":"^5.0.10"}}});var F_={};je(F_,{addAnalyticsListener:()=>k_,recordAction:()=>mr,recordActionBinary:()=>qn,setAnalyticsEnabled:()=>uee});function uee(e){m0=e}function mr(e,t,r,n,s){if(!m0)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=Sp.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let u=c;o.values=c=new Float32Array(l*2),c.set(u),c.index=l+1}c[l]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},Sp.set(i,o)}pp||dee()}function qn(e,t,r,n,s){mr(!!e,t,r,n,s)}function k_(e){g0.push(e)}function dee(){pp=performance.now(),setTimeout(async()=>{let e=performance.now()-pp;pp=0;let t=[],r={time:Date.now(),period:e,threadId:gc.threadId,metrics:t};for(let[s,i]of Sp){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],d;for(let _ of A0){let E=Math.floor(c*_),f=o[E-1];if(E>l){let h=E-l;if(f===d){let T=u[u.length-1];typeof T=="number"?u[u.length-1]={value:T,count:1+h}:T.count+=h}else u.push(h>1?{value:f,count:h}:f),d=f;l=E}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await R0()}let n=process.memoryUsage();t.push({metric:"memory",threadId:gc.threadId,byThread:!0,...n});for(let s of g0)s(t);Sp=new Map,gc.parentPort?gc.parentPort.postMessage({type:T0,report:r}):O0({report:r})},S0).unref()}async function _ee(e,t=6e4){let r=XR(),n=y0(),s=new Promise(T=>{let m=performance.now();setImmediate(()=>{let g=performance.now();g-m>5e3&&(0,B_.warn)("Unusually high event queue latency on the main thread of "+Math.round(g-m)+"ms"),m=performance.now()}),n.primaryStore.prefetch([1],()=>{let g=performance.now();g-m>5e3&&(0,B_.warn)("Unusually high task queue latency on the main thread of "+Math.round(g-m)+"ms"),T(g-m)})}),i;for(let T of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(T.value?.time){i=T.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],d;for(let{key:T,value:m}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!m)continue;if(o){if(T>o+t)break}else o=T;d=T;let{metrics:g,threadId:S}=m;for(let y of g||[]){let{path:I,method:U,type:H,metric:X,count:Y,total:V,distribution:ne,threads:Q,...de}=y;Y||(Y=1);let j=X+(I?"-"+I:"");U!==void 0&&(j+="-"+U),H!==void 0&&(j+="-"+H);let ae=c.get(j);if(ae){if(ae.threads){let Ne=ae.threads[S];if(Ne)ae=Ne;else{ae.threads[S]={...de};continue}}ae.count||(ae.count=1);let Oe=ae.count;for(let Ne in de){let Me=de[Ne];typeof Me=="number"&&(ae[Ne]=(ae[Ne]*Oe+Me*Y)/(Oe+Y))}ae.count+=Y,V>=0&&(ae.total+=V,ae.ratio=ae.total/ae.count)}else ae={period:t,...y},delete ae.distribution,c.set(j,ae),ae.byThread&&(ae.threads=[],ae.threads[S]={...de},u.push(ae));if(ne){ne=ne.map(Ne=>typeof Ne=="number"?{value:Ne,count:1}:Ne);let Oe=l.get(j);Oe?Oe.push(...ne):l.set(j,ne)}}await R0()}for(let T of u){let{path:m,method:g,type:S,metric:y,count:I,total:U,distribution:H,threads:X,...Y}=T;X=X.filter(V=>V);for(let V in Y){if(typeof T[V]!="number")continue;let ne=0;for(let Q of X){let de=Q[V];typeof de=="number"&&(ne+=de)}T[V]=ne}T.count=X.length,delete T.threads,delete T.byThread}for(let[T,m]of l){let g=c.get(T);m.sort((Ne,Me)=>Ne.value>Me.value?1:-1);let S=g.count-1,y=[],I=0,U=0,H;for(let Ne of A0){let Me=S*Ne;for(;I<Me;)H=m[U++],I+=H.count,U===1&&I--;let Gr=m[U>1?U-2:0];H||(H=m[0]),y.push(H.value-(H.value-Gr.value)*(I-Me)/H.count)}let[X,Y,V,ne,Q,de,j,ae,Oe]=y;Object.assign(g,{p1:X,p10:Y,p25:V,median:ne,p75:Q,p90:de,p95:j,p99:ae,p999:Oe})}let _;for(let[T,m]of c)m.id=(0,mp.getNextMonotonicTime)(),m.time=d,n.primaryStore.put(m.id,m,{append:!0}).then(g=>{g||n.primaryStore.put(m.id,m)}),_=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(_||h*10>f){let T=(0,mp.getNextMonotonicTime)(),m={id:T,metric:"main-thread-utilization",idle:f-l0,active:h-u0,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(T,m,{append:!0}).then(g=>{g||n.primaryStore.put(T,m)})}l0=f,u0=h}async function d0(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function XR(){return _0||(_0=Et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function y0(){return f0||(f0=Et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function hee(){b0=!0;let e=(0,x_.get)(JR.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await _ee(S0,e),await d0(XR(),fee),await d0(y0(),Eee)},Math.min(e/2,2147483647)).unref()}function O0(e,t){let r=e.report;r.threadId=t?.threadId||gc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(E0+=n.mean*n.count);r.totalBytesProcessed=E0,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(h0.get(t))}),h0.set(t,t.performance.eventLoopUtilization())),r.id=(0,mp.getNextMonotonicTime)(),XR().primaryStore.put(r.id,r),b0||hee(),pee&&(N0=See(r))}async function See(e){if(await N0,!Xo){let r=(0,H_.dirname)((0,B_.getLogFilePath)());try{Xo=await(0,QR.open)((0,H_.join)(r,"analytics.log"),"r+")}catch{Xo=await(0,QR.open)((0,H_.join)(r,"analytics.log"),"w+")}}let t=(await Xo.stat()).size;if(t>mee){let r=Buffer.alloc(t);await Xo.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Xo.write(r,{position:0}),await Xo.truncate(r.length),t=r.length}await Xo.write(JSON.stringify(e)+`
|
|
11
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw pr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}s4(n,r),Ng(n);let s=n.toJSON();if(z2.config=s,jt=Pl(s),jt.logging_rotation_rotate)for(let i in WC)jt[i]&&pr.error(`Config ${WC[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);pr.trace(J2)}}a(uh,"initConfig");function s4(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Mn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Mn.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(pr.trace("Updating config file with missing config params"),$r.writeFileSync(t,String(e)))}a(s4,"checkForUpdatedConfig");function Ng(e,t=!1){let r=e.toJSON();if(r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads),r.http?.port&&r.http?.port===r.http?.securePort)throw Dl.CONFIG_VALIDATION("http.port and http.securePort cannot be the same value");if(r.operationsApi?.network?.port&&r.operationsApi?.network?.port===r.operationsApi?.network?.securePort)throw Dl.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=V2(r,t);if(n.error)throw Dl.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}a(Ng,"validateConfig");function i4(e,t){jt===void 0&&(jt={});let r=ks[e.toLowerCase()];if(r===void 0){pr.trace(`Unable to update config object because config param '${e}' does not exist`);return}jt[r.toLowerCase()]=t}a(i4,"updateConfigObject");function ZC(e,t,r=void 0,n=!1,s=!1,i=!1){jt===void 0&&uh();let o=XC(ks.hdb_root),c=Mn.join(o,on.HDB_CONFIG_FILE),l=$o(c),u;if(r===void 0&&e.toLowerCase()===Ln.DATABASES)u=t;else if(r===void 0){let E;if(i)E=e;else if(E=ks[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=Og(E,t);l.setIn([...f],h)}else for(let E in r){let f=ks[E.toLowerCase()];if(f===Ln.HTTP_SECUREPORT&&r[E]===jt[Ln.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),f===Ln.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===jt[Ln.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),f===Ln.DATABASES){u=r[E];continue}if(f?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),T=on.LEGACY_CONFIG_PARAMS[E.toUpperCase()];T&&T.startsWith("customFunctions")&&l.hasIn(T.split("_"))&&(f=T,h=T.split("_"));let m=Og(f,r[E]);f==="rootPath"&&m?.endsWith("/")&&(m=m.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],m)}catch(g){pr.error(g)}}}u&&JC(l,u),Ng(l);let d=l.getIn(["rootPath"]),_=Mn.join(d,on.HDB_CONFIG_FILE);n===!0&&o4(c,d),$r.writeFileSync(_,String(l)),s&&(jt=Pl(l.toJSON())),pr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(ZC,"updateConfigValue");function o4(e,t){try{let r=Mn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${on.HDB_CONFIG_FILE}.bak`);$r.copySync(e,r),pr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){pr.error(X2),pr.error(r)}}a(o4,"backupConfigFile");var a4=["databases"];function Pl(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network={...e.http,...e.operationsApi.network}),e?.operationsApi&&(e.operationsApi.tls={...e.tls,...e.operationsApi.tls}),lh=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])&&!a4.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!Ln[l.toUpperCase()]&&ks[l]&&(s[ks[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Pl,"flattenConfig");function Og(e,t){if(e===Ln.CLUSTERING_NODENAME||e===Ln.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(K2(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||hr.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return hr.autoCast(t)}a(Og,"castConfigValue");function c4(){let e=hr.getPropsFilePath(),t=Xa(e);return $o(t).toJSON()}a(c4,"getConfiguration");async function l4(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return ZC(void 0,void 0,s,!0),t4}catch(i){throw typeof i=="string"||i instanceof String?W2(i,i,j2.BAD_REQUEST,void 0,void 0,!0):i}}a(l4,"setConfiguration");function Ig(){let e=hr.getPropsFilePath();try{$r.accessSync(e,$r.constants.F_OK|$r.constants.R_OK)}catch(n){if(!hr.noBootFile())throw pr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Xa(e);return $o(t).toJSON()}a(Ig,"readConfigFile");function $o(e){return jC.parseDocument($r.readFileSync(e,"utf8"),{simpleKeys:!0})}a($o,"parseYamlDoc");function u4(){let e=Ig(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=hr.isEmptyOrZeroLength(t)?[]:t;let r=YC(t);if(r)throw Dl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=hr.isEmptyOrZeroLength(n)?[]:n;let s=YC(n);if(s)throw Dl.CONFIG_VALIDATION(s.message);if(!hr.isEmptyOrZeroLength(n)&&!hr.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!hr.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Dl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(u4,"getClusteringRoutes");function eD(e){let t=zC(e);jt={};for(let r in ks){let n=t.get(r.toUpperCase());if(hr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ks[r].toLowerCase();s===Ln.LOGGING_ROOT?jt[s]=Mn.dirname(n):jt[s]=n}return jt}a(eD,"initOldConfig");function d4(e){let t=Ig();return Y2.get(t,e.replaceAll("_","."))}a(d4,"getConfigFromFile");async function _4(e,t){let r=$o(Xa());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await $r.writeFile(Xa(),String(r))}a(_4,"addConfig");function f4(e){let t=Xa(hr.getPropsFilePath()),r=$o(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Mn.join(n,on.HDB_CONFIG_FILE);$r.writeFileSync(s,String(r))}a(f4,"deleteConfigFromFile");function E4(){return lh||(uh(),lh)}a(E4,"getConfigObj");function h4(){return jt||uh(),jt}a(h4,"getFlatConfigObj")});var se=N((oD,aD)=>{"use strict";var wg=require("fs-extra"),Za=require("path"),rD=require("os"),p4=require("properties-reader"),Vd=W(),$d=te(),De=M(),dh=wt(),m4="Error initializing environment manager",_h="BOOT_PROPS_FILE_PATH",nD=!1,S4={[De.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[De.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[De.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},ji={};Object.assign(oD,aD.exports={BOOT_PROPS_FILE_PATH:_h,getHdbBasePath:T4,setHdbBasePath:g4,get:sD,initSync:R4,setProperty:Qe,initTestEnvironment:b4,setCloneVar:y4});function T4(){return ji[De.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(T4,"getHdbBasePath");function g4(e){ji[De.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(g4,"setHdbBasePath");function sD(e){let t=dh.getConfigValue(e);return t===void 0?ji[e]:t}a(sD,"get");function Qe(e,t){S4[e]&&(ji[e]=t),dh.updateConfigObject(e,t)}a(Qe,"setProperty");function A4(){let e;try{e=$d.getPropsFilePath(),wg.accessSync(e,wg.constants.F_OK|wg.constants.R_OK),nD=!0;let t=p4(e);return ji[De.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(De.HDB_SETTINGS_NAMES.INSTALL_USER),ji[De.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(De.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ji[_h]=e,!0}catch{return Vd.trace(`Environment manager found no properties file at ${e}`),!1}}a(A4,"doesPropFileExist");function R4(e=!1){try{((nD||A4()||$d.noBootFile())&&!iD||e)&&(dh.initConfig(e),ji[De.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=dh.getConfigValue(De.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Vd.error(m4),Vd.error(t),console.error(t),process.exit(1)}}a(R4,"initSync");var iD=!1;function y4(e){iD=e}a(y4,"setCloneVar");function b4(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,l=Za.join(__dirname,"../../","unitTests");ji[_h]=Za.join(l,"hdb_boot_properties.file"),Qe(De.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Za.join(l,"settings.test")),Qe(De.HDB_SETTINGS_NAMES.INSTALL_USER,rD.userInfo()?rD.userInfo().username:void 0),Qe(De.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Qe(De.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Za.join(l,"envDir","log")),Qe(De.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Qe(De.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Qe(De.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Qe(De.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Za.join(l,"envDir")),Qe(De.CONFIG_PARAMS.STORAGE_PATH,Za.join(l,"envDir")),s&&(Qe(De.CONFIG_PARAMS.HTTP_SECUREPORT,sD(De.CONFIG_PARAMS.HTTP_PORT)),Qe(De.CONFIG_PARAMS.HTTP_PORT,null)),Qe(De.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Qe(De.CONFIG_PARAMS.HTTP_PORT,9926),Qe(De.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Qe(De.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),Qe(De.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,$d.isEmpty(i)?!1:i),Qe(De.CONFIG_PARAMS.HTTP_CORS,$d.isEmpty(i)?!1:i),Qe(De.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Qe(De.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Qe(De.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Qe(De.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Qe(De.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Za.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Qe(De.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,$d.isEmpty(c)?!1:c),o&&(Qe("CORS_ACCESSLIST",o),Qe(De.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Qe(De.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Qe(De.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Qe(De.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Qe(De.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Qe(De.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Qe(De.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${_h}. Please check your boot props and settings files`;Vd.fatal(r),Vd.error(t)}}a(b4,"initTestEnvironment")});var gt=N((Vge,ED)=>{"use strict";var zd=M(),O4=te(),an=se(),Qd=require("path"),N4=require("minimist"),cD=require("fs-extra"),lD=require("lodash");an.initSync();var{CONFIG_PARAMS:Vo,DATABASES_PARAM_CONFIG:Kd,SYSTEM_SCHEMA_NAME:fh}=zd,Yd,Wd,jd;function uD(){if(Yd!==void 0)return Yd;if(an.getHdbBasePath()!==void 0)return Yd=an.get(Vo.STORAGE_PATH)||Qd.join(an.getHdbBasePath(),zd.DATABASES_DIR_NAME),Yd}a(uD,"getBaseSchemaPath");function dD(){if(Wd!==void 0)return Wd;if(an.getHdbBasePath()!==void 0)return Wd=fD(fh),Wd}a(dD,"getSystemSchemaPath");function _D(){if(jd!==void 0)return jd;if(an.getHdbBasePath()!==void 0)return jd=an.get(zd.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Qd.join(an.getHdbBasePath(),zd.TRANSACTIONS_DIR_NAME),jd}a(_D,"getTransactionAuditStoreBasePath");function I4(e,t){let r=an.get(Vo.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Qd.join(_D(),e.toString())}a(I4,"getTransactionAuditStorePath");function fD(e,t){e=e.toString(),t=t&&t.toString();let r=an.get(zd.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Qd.join(uD(),e)}a(fD,"getSchemaPath");function w4(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,N4(process.argv));let n=r[Vo.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!O4.isObject(n))throw o;i=n}for(let o of i){let c=o[fh];if(!c)continue;let l=an.get(Vo.DATABASES);l=l??{};let u=c?.tables?.[t]?.[Kd.PATH];if(u)return lD.set(l,[fh,Kd.TABLES,t,Kd.PATH],u),an.setProperty(Vo.DATABASES,l),u;let d=c?.[Kd.PATH];if(d)return lD.set(l,[fh,Kd.PATH],d),an.setProperty(Vo.DATABASES,l),d}}let s=r[Vo.STORAGE_PATH.toUpperCase()];if(s){if(!cD.pathExistsSync(s))throw new Error(s+" does not exist");let i=Qd.join(s,e);return cD.mkdirsSync(i),an.setProperty(Vo.STORAGE_PATH,s),i}return dD()}a(w4,"initSystemSchemaPaths");function C4(){Yd=void 0,Wd=void 0,jd=void 0}a(C4,"resetPaths");ED.exports={getBaseSchemaPath:uD,getSystemSchemaPath:dD,getTransactionAuditStorePath:I4,getTransactionAuditStoreBasePath:_D,getSchemaPath:fD,initSystemSchemaPaths:w4,resetPaths:C4}});var cn=N((jge,TD)=>{"use strict";var D4=Pn().LMDB_ERRORS_ENUM,Yge=require("lmdb"),P4=Ht(),Wge=require("buffer").Buffer,{OVERFLOW_MARKER:hD,MAX_SEARCH_KEY_LENGTH:Eh}=P4,pD=["number","string","symbol","boolean","bigint"];function L4(e){if(e=e?.primaryStore||e,!e)throw new Error(D4.ENV_REQUIRED)}a(L4,"validateEnv");function M4(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(M4,"stringifyData");function U4(e){return e instanceof Date?e.valueOf():e}a(U4,"convertKeyValueToWrite");function v4(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(pD.includes(typeof e))return e.length>Eh?[e.slice(0,Eh)+hD]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(pD.includes(typeof i))i.length>Eh?r.push(i.slice(0,Eh)+hD):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(v4,"getIndexedValues");var hh=0,mD=0;function SD(){mD=Date.now()-performance.now()}a(SD,"adjustStartTime");SD();var B4=6e4;setInterval(SD,B4).unref();function H4(){let e=performance.now()+mD;return e>hh?(hh=e,e):(hh+=488e-6,hh)}a(H4,"getNextMonotonicTime");TD.exports={validateEnv:L4,stringifyData:M4,convertKeyValueToWrite:U4,getNextMonotonicTime:H4,getIndexedValues:v4}});var Jd=N((Qge,gD)=>{"use strict";var x4=M().OPERATIONS_ENUM,Cg=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=x4.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};gD.exports=Cg});var Xd=N((Zge,bD)=>{"use strict";var Xge=Jd(),ph=M(),Dg=te(),AD=W(),k4=require("uuid"),{handleHDBError:mh,hdb_errors:F4}=_e(),{HDB_ERROR_MSGS:Sh,HTTP_STATUS_CODES:Th}=F4;bD.exports=RD;function RD(e,t,r){for(let s=0;s<t.length;s++)yD(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];G4(i,r,e.operation)}}a(RD,"processRows");RD.validateAttribute=yD;function yD(e){if(Buffer.byteLength(String(e))>ph.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw mh(new Error,Sh.ATTR_NAME_LENGTH_ERR(e),Th.BAD_REQUEST,void 0,void 0,!0);if(Dg.isEmptyOrZeroLength(e)||Dg.isEmpty(e.trim()))throw mh(new Error,Sh.ATTR_NAME_NULLISH_ERR,Th.BAD_REQUEST,void 0,void 0,!0)}a(yD,"validateAttribute");function G4(e,t,r){if(!e.hasOwnProperty(t)||Dg.isEmptyOrZeroLength(e[t])){if(r===ph.OPERATIONS_ENUM.INSERT||r===ph.OPERATIONS_ENUM.UPSERT){e[t]=k4.v4();return}throw AD.error("Update transaction aborted due to record with no hash value:",e),mh(new Error,Sh.RECORD_MISSING_HASH_ERR,Th.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>ph.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw AD.error(e),mh(new Error,Sh.HASH_VAL_LENGTH_ERR,Th.BAD_REQUEST,void 0,void 0,!0)}a(G4,"validateHash")});var OD,Un,Pg,Ll=Ie(()=>{OD=require("events"),Un=class extends OD.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new Pg;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){let t=this.queue?.shift();return t||this.emit("drained"),t}waitForDrain(){return new Promise(t=>{!this.queue||this.queue.length===0?t(!0):(this.once("drained",()=>t(!0)),this.currentDrainResolver=t,this.drainCloseListener||(this.drainCloseListener=!0,this.on("close",()=>{this.currentDrainResolver?.(!1)})))})}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},Pg=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 Ug={};je(Ug,{loadGQLSchema:()=>V4,start:()=>Mg,startOnMainThread:()=>$4});function Mg({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),_=o(new c(r.toString(),s)),E=new Map,f=[],h;for(let g of _.definitions)switch(g.kind){case l.OBJECT_TYPE_DEFINITION:let H=function(Y){if(Y.kind==="NonNullType"){let Q=H(Y.type);return Q.nullable=!1,Q}if(Y.kind==="ListType")return{type:"array",elements:H(Y.type)};let ne={type:Y.name?.value};return Object.defineProperty(ne,"location",{value:Y.loc.startToken}),ne};a(H,"getProperty");let S=g.name.value,y=[],I={table:null,database:null,properties:y};E.set(S,I);for(let Y of g.directives){if(Y.name.value==="table"){for(let ne of Y.arguments)I[ne.name.value]=ne.value.value;I.schema&&(I.database=I.schema),I.table||(I.table=S),I.audit&&(I.audit=I.audit!=="false"),I.attributes=I.properties,f.push(I)}if(Y.name.value==="sealed"&&(I.sealed=!0),Y.name.value==="splitSegments"&&(I.splitSegments=!0),Y.name.value==="replicate"&&(I.replicate=!0),Y.name.value==="export"){I.export=!0;for(let ne of Y.arguments)typeof I.export!="object"&&(I.export={}),I.export[ne.name.value]=ne.value.value}}let U=!1,X={};for(let Y of g.fields){let V=H(Y.type);V.name=Y.name.value,y.push(V),X[V.name]=void 0;for(let ne of Y.directives){let Q=ne.name.value;if(Q==="primaryKey")U?console.warn("Can not define two attributes as a primary key at",ne.loc):(V.isPrimaryKey=!0,U=!0);else if(Q==="indexed")V.indexed=!0;else if(Q==="computed"){for(let de of ne.arguments||[])if(de.name.value==="from"){let j=de.value.value;V.computed={from:m(j,de,X)},V.version==null&&(V.version=j)}else de.name.value==="version"&&(V.version=de.value.value);V.computed=V.computed||!0}else if(Q==="relationship"){let de={};for(let j of ne.arguments)de[j.name.value]=j.value.value;V.relationship=de}else if(Q==="createdTime")V.assignCreatedTime=!0;else if(Q==="updatedTime")V.assignUpdatedTime=!0;else if(Q==="expiresAt")V.expiresAt=!0;else if(Q==="allow"){let de=V.authorizedRoles=[];for(let j of ne.arguments)j.name.value==="role"&&de.push(j.value.value)}else server.knownGraphQLDirectives.includes(Q)&&console.warn(`@${Q} is an unknown directive, at`,ne.loc)}}I.type=S,S==="Query"&&(h=I)}function T(g){let S=E.get(g.type);S?(Object.defineProperty(g,"properties",{value:S.properties}),Object.defineProperty(g,"definition",{value:S})):g.type==="array"?T(g.elements):q4.includes(g.type)||(0,ID.getWorkerIndex)()===0&&console.error(`The type ${g.type} is unknown at line ${g.location.line}, column ${g.location.column}, in ${s}`)}a(T,"connectPropertyType");for(let g of E.values())for(let S of g.properties)T(S);for(let g of f)g.tableClass=e(g),g.export&&(g.export.name===""?i.set((0,Lg.dirname)(n),g.tableClass):i.set((0,Lg.dirname)(n)+"/"+(g.export.name||g.type),g.tableClass,g.export));function m(g,S,y){return new ND.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${g}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(y)}a(m,"createComputedFrom")}}var Lg,ND,ID,q4,$4,V4,wD=Ie(()=>{Lg=require("path"),ND=require("node:vm");Pe();ID=L(dt()),q4=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);a(Mg,"start");$4=Mg,V4=Mg({ensureTable:Et}).handleFile});var vD={};je(vD,{parse:()=>Bg,streamAsJSON:()=>Zd,stringify:()=>ec});function Zd(e){return new vg({value:e})}function CD(e){return console.error(e),JSON.stringify(e.toString())}function DD(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function ec(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===MD)return UD(e);if(t.resolution)return t.resolution.then(()=>ec(e));throw t}}function UD(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+=UD(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+ec(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function Bg(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),W4.test(e)?K4.parse(e):JSON.parse(e)):null}var PD,LD,K4,Y4,MD,vg,W4,Hg=Ie(()=>{PD=require("stream"),LD=L(require("json-bigint-fixes")),K4=(0,LD.default)({useNativeBigInt:!0}),Y4=1e4,MD={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw MD};a(Zd,"streamAsJSON");vg=class extends PD.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;){try{o=i.next(),o.then&&(yield o.then(c=>(o=c,""),c=>(o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")}}if(o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),CD)}catch(s){yield CD(s)}else yield ec(t)}else yield ec(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);DD(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>Y4?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 DD(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(CD,"handleError");a(DD,"when");a(ec,"stringify");a(UD,"jsStringify");W4=/[[,:]\s*-?\d{16,}/;a(Bg,"parse")});var jD=N((aAe,WD)=>{"use strict";var xg=require("recursive-iterator"),j4=require("alasql"),kg=require("clone"),BD=te(),{handleHDBError:HD,hdb_errors:z4}=_e(),{HDB_ERROR_MSGS:xD,HTTP_STATUS_CODES:kD}=z4,{getDatabases:Q4}=(Pe(),oe(lt)),J4=["DISTINCT_ARRAY"],FD=Symbol("validateTables"),Fg=Symbol("validateTable"),oAe=Symbol("getAllColumns"),GD=Symbol("validateAllColumns"),gh=Symbol("findColumn"),qD=Symbol("validateOrderBy"),e_=Symbol("validateSegment"),Gg=Symbol("validateColumn"),$D=Symbol("setColumnsForTable"),VD=Symbol("checkColumnsForAsterisk"),KD=Symbol("validateGroupBy"),YD=Symbol("hasColumns"),qg=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[FD](),this[VD](),this[GD]()}[FD](){if(this[YD]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Fg](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Fg](t.table)})}}[YD](){let t=!1,r=new xg(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Fg](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=Q4();if(!r[t.databaseid])throw HD(new Error,xD.SCHEMA_NOT_FOUND(t.databaseid),kD.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw HD(new Error,xD.TABLE_NOT_FOUND(t.databaseid,t.tableid),kD.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=kg(s);i.table=kg(t),this.attributes.push(i)})}[gh](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)}[VD](){let t=new xg(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[$D](r.tableid)}[$D](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new j4.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[GD](){this[e_](this.statement.columns,!1),this[e_](this.statement.joins,!1),this[e_](this.statement.where,!1),this[KD](this.statement.group,!1),this[e_](this.statement.order,!0)}[e_](t,r){if(!t)return;let n=new xg(t),s=[];for(let{node:i,path:o}of n)!BD.isEmpty(i)&&!BD.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[qD](i):s.push(this[Gg](i)));return s}[KD](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&J4.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=kg(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[gh](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[gh](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`}[qD](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[Gg](t)}[Gg](t){let r=this[gh](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]}};WD.exports=qg});var QD=N((lAe,zD)=>{"use strict";var $g=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")}};zD.exports=$g});var XD=N((dAe,JD)=>{"use strict";var Vg=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};JD.exports=Vg});var rP={};je(rP,{HAS_EXPIRATION:()=>yh,HAS_RESIDENCY_ID:()=>Xg,HAS_STRUCTURE_UPDATE:()=>bh,LAST_TIMESTAMP_PLACEHOLDER:()=>s_,LOCAL_TIMESTAMP:()=>X4,METADATA:()=>t_,NO_TIMESTAMP:()=>Yg,PENDING_LOCAL_TIME:()=>Zg,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>Jg,RecordEncoder:()=>Qg,TIMESTAMP_ASSIGN_LAST:()=>eJ,TIMESTAMP_ASSIGN_NEW:()=>eP,TIMESTAMP_ASSIGN_PREVIOUS:()=>tP,TIMESTAMP_PLACEHOLDER:()=>Ah,TIMESTAMP_RECORD_PREVIOUS:()=>Wg,getUpdateRecord:()=>eA,handleLocalTimeForGets:()=>Oh});function rJ(){return n_[0]=n_[0]^64,Z4.getFloat64(0)}function Oh(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),l=c?.value,u=l?.[t_];return u>=0&&(c.metadataFlags=u,c.localTime=l.localTime,c.value=l.value,c.residencyId=l.residencyId,l.expiresAt>=0&&(c.expiresAt=l.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[t_]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let l=c.value,u=l[t_];return u>=0&&(c.metadataFlags=u,c.localTime=l.localTime,c.value=l.value,c.residencyId=l.residencyId,l.expiresAt>=0&&(c.expiresAt=l.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,tc.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<tc.length;l++){let u=tc[l].deref();(!u||u.isDone||u.isCommitted)&&tc.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function eA(e,t,r){return function(n,s,i,o,c=-1,l,u,d="put",_,E){_||l==null?Ml=i?.localTime?Wg|tP:Yg:Ml=l?i?.localTime?Wg|16384:eP|16384:Yg;let f=u?.expiresAt;if(f>=0&&(c|=yh),r_=c,jg=f,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Ml>0},T,m=0;try{let g=i?.residencyId,S=u?.residencyId;S&&(zg=S,r_|=Xg,m|=rc),g!==S&&(m|=nc,g||(g=0)),c&yh&&(m|=o_),u?.originatingOperation&&(m|=i_),_&&(h.ifVersion=T=i?.version??null);let y=e.put(n,s,h);if(l){let I=u?.user?.username;if(E&&(Rh=e.encoder.encode(E)),e.encoder.hasStructureUpdate&&(m|=bh,e.encoder.hasStructureUpdate=!1),_&&i?.localTime){let U=i?.localTime,H=r.get(U);if(H){let X=xt(H).previousLocalTime;return r.put(U,Ul(o,t,n,X,u?.nodeId??server.replication.getThisNodeId(r)??0,I,d,Rh,m,S,g,f),{ifVersion:T}),y}}r.put(s_,Ul(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,I,d,Rh,m,S,g,f,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:T})}return y}catch(g){throw g.message+=" id: "+n+" options: "+h,g}}}var ZD,Kg,Ah,s_,Jg,X4,t_,n_,Z4,Yg,eP,eJ,tP,Wg,yh,Xg,Zg,bh,tJ,Rh,Ml,r_,jg,zg,Qg,tc,vl=Ie(()=>{ZD=require("msgpackr");zi();Kg=L(W()),Ah=new Uint8Array([1,1,1,1,4,64,0,0]),s_=new Uint8Array([1,1,1,1,1,0,0,0]),Jg=new Uint8Array([1,1,1,1,3,64,0,0]),X4=Symbol("local-timestamp"),t_=Symbol("metadata"),n_=new Uint8Array(8),Z4=new DataView(n_.buffer,0,8),Yg=0,eP=0,eJ=1,tP=3,Wg=4,yh=16,Xg=32,Zg=1,bh=256,Ml=0,r_=-1,jg=-1,zg=0,Qg=class extends ZD.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(Ml||r_>=0){let o=0,c=Ml;c&&(o+=8,Ml=0);let l=r_,u=jg,d=zg;l>=0&&(o+=2,r_=-1,u>=0&&(o+=8,jg=-1),d&&(o+=4,zg=0));let _=tJ=r.call(this,s,i|2048|o);Rh=_.subarray((_.start||0)+o,_.end);let E=_.start||0;return c&&(Ah[4]=c,Ah[5]=c>>8,_.set(Ah,E),E+=8),l>=0&&(_[E++]=l&31,_[E++]=l>>5,u>=0&&((_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(E,u),E+=8),d&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setUint32(E,d)),_}else return r.call(this,s,i)};let n=this.saveStructures;this.saveStructures=function(s,i){let o=n.call(this,s,i);return this.hasStructureUpdate=!0,o}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(n_,0,c),c+=8;else for(let E=0;E<8;E++)n_[E]=t[c++];l=rJ(),i=t[c]}let u,d;i<32&&(o=i|t[c+1]<<5,c+=2,o&yh&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&Xg&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let _=r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c);return{localTime:l,value:_,[t_]:o,expiresAt:u,residencyId:d}}return r?.valueAsBuffer?t:super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(rJ,"getTimestamp");a(Oh,"handleLocalTimeForGets");tc=[];setInterval(()=>{for(let e=0;e<tc.length;e++){let t=tc[e].deref();!t||t.isDone||t.isCommitted?tc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Kg.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Kg.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(eA,"getUpdateRecord")});var a_=N((pAe,sP)=>{"use strict";var nP=se(),nJ=M(),{RecordEncoder:sJ}=(vl(),oe(rP)),hAe=require("fs");nP.initSync();var iJ=nP.get(nJ.CONFIG_PARAMS.STORAGE_CACHING)!==!1,tA=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=iJ&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:sJ})}};sP.exports=tA});var c_=N((SAe,iP)=>{"use strict";var vn=se(),as=M();vn.initSync();var Nh=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=vn.get(as.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||vn.get(as.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||vn.get(as.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",vn.get(as.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=vn.get(as.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),vn.get(as.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=vn.get(as.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),vn.get(as.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=vn.get(as.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),vn.get(as.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=vn.get(as.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=vn.get(as.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};iP.exports=Nh;Nh.MAX_DBS=1e4});var ht=N((gAe,hP)=>{"use strict";var nA=require("lmdb"),Fs=require("fs-extra"),Bn=require("path"),Ih=cn(),cP=W(),ln=Pn().LMDB_ERRORS_ENUM,wh=XD(),sA=a_(),lP=c_(),Ko=Ht(),oP=M(),{table:oJ,resetDatabases:aJ}=(Pe(),oe(lt)),aP=se(),Gs=Ko.INTERNAL_DBIS_NAME,uP=Ko.DBI_DEFINITION_NAME,cJ="data.mdb",lJ="lock.mdb",l_=".mdb",uJ="-lock",rA=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=cs(t,r),this.key_type=this.dbi[Ko.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ko.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new nA.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Ch(e,t){if(e===void 0)throw new Error(ln.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(ln.ENV_NAME_REQUIRED)}a(Ch,"pathEnvNameValidation");async function iA(e,t,r=!0){try{await Fs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(ln.INVALID_BASE_PATH):n}try{let n=Bn.join(e,t+l_);return await Fs.access(n,Fs.constants.R_OK|Fs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Fs.access(Bn.join(e,t,cJ),Fs.constants.R_OK|Fs.constants.F_OK),Bn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(ln.INVALID_ENVIRONMENT)}else throw new Error(ln.INVALID_ENVIRONMENT);throw n}}a(iA,"validateEnvironmentPath");function Dh(e,t){if(Ih.validateEnv(e),t===void 0)throw new Error(ln.DBI_NAME_REQUIRED)}a(Dh,"validateEnvDBIName");async function dJ(e,t,r=!1,n=!1){Ch(e,t);let s=Bn.basename(e);t=t.toString();let i=aP.get(oP.CONFIG_PARAMS.DATABASES);i||aP.setProperty(oP.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await iA(e,t,n),dP(e,t,r)}catch(o){if(o.message===ln.INVALID_ENVIRONMENT){let c=Bn.join(e,t);await Fs.mkdirp(n?c:e);let l=new lP(n?c:c+l_,!1),u=nA.open(l);u.dbis=Object.create(null);let d=new sA(!1);u.openDB(Gs,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let _=oA(e,t,r);return u[Ko.ENVIRONMENT_NAME_KEY]=_,global.lmdb_map[_]=u,u}throw o}}a(dJ,"createEnvironment");async function _J(e,t,r,n=!0){Ch(e,t),t=t.toString();let s=Bn.join(e,t);return oJ({table:t,database:Bn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(_J,"copyEnvironment");async function dP(e,t,r=!1){Ch(e,t),t=t.toString();let n=oA(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 iA(e,t),i=Bn.join(e,t+l_),o=s!=i,c=new lP(s,o),l=nA.open(c);l.dbis=Object.create(null);let u=fP(l);for(let d=0;d<u.length;d++)cs(l,u[d]);return l[Ko.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(dP,"openEnvironment");async function fJ(e,t,r=!1){Ch(e,t),t=t.toString();let n=Bn.join(e,t+l_),s=await iA(e,t);if(global.lmdb_map!==void 0){let i=oA(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await _P(o),delete global.lmdb_map[i]}}await Fs.remove(s),await Fs.remove(s===n?s+uJ:Bn.join(Bn.dirname(s),lJ))}a(fJ,"deleteEnvironment");async function _P(e){Ih.validateEnv(e);let t=e[Ko.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(_P,"closeEnvironment");function oA(e,t,r=!1){let s=`${Bn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(oA,"getCachedEnvironmentName");function EJ(e){Ih.validateEnv(e);let t=Object.create(null),r=cs(e,Gs);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Gs)try{t[n]=Object.assign(new wh,s)}catch{cP.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(EJ,"listDBIDefinitions");function fP(e){Ih.validateEnv(e);let t=[],r=cs(e,Gs);for(let{key:n}of r.getRange({start:!1}))n!==Gs&&t.push(n);return t}a(fP,"listDBIs");function hJ(e,t){let n=cs(e,Gs).getEntry(t),s=new wh;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{cP.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(hJ,"getDBIDefinition");function EP(e,t,r,n=!r){if(Dh(e,t),t=t.toString(),t===Gs)throw new Error(ln.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return cs(e,t)}catch(s){if(s.message===ln.DBI_DOES_NOT_EXIST){let i=new sA(r,n===!0),o=e.openDB(t,i),c=new wh(r===!0,n);return o[uP]=c,cs(e,Gs).putSync(t,c),e.dbis[t]=o,o}throw s}}a(EP,"createDBI");function cs(e,t){if(Dh(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Gs?r=hJ(e,t):r=new wh,r===void 0)throw new Error(ln.DBI_DOES_NOT_EXIST);let n;try{let s=new sA(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(ln.DBI_DOES_NOT_EXIST):s}return n[uP]=r,e.dbis[t]=n,n}a(cs,"openDBI");function pJ(e,t){Dh(e,t),t=t.toString();let r=cs(e,t),n=r.getStats();return r[Ko.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(pJ,"statDBI");async function mJ(e,t){try{let r=Bn.join(e,t+l_);return(await Fs.stat(r)).size}catch{throw new Error(ln.INVALID_ENVIRONMENT)}}a(mJ,"environmentDataSize");function SJ(e,t){if(Dh(e,t),t=t.toString(),t===Gs)throw new Error(ln.CANNOT_DROP_INTERNAL_DBIS_NAME);cs(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],cs(e,Gs).removeSync(t)}a(SJ,"dropDBI");function TJ(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{cs(e,i)}catch(o){if(o.message===ln.DBI_DOES_NOT_EXIST)EP(e,i,i!==t,i===t),n=!0;else throw o}}n&&aJ()}a(TJ,"initializeDBIs");hP.exports={openDBI:cs,openEnvironment:dP,createEnvironment:dJ,listDBIs:fP,listDBIDefinitions:EJ,createDBI:EP,dropDBI:SJ,statDBI:pJ,deleteEnvironment:fJ,initializeDBIs:TJ,TransactionCursor:rA,environmentDataSize:mJ,copyEnvironment:_J,closeEnvironment:_P}});var mP=N((RAe,pP)=>{"use strict";var aA=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};pP.exports=aA});var TP=N((bAe,SP)=>{"use strict";var cA=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}};SP.exports=cA});var AP=N((NAe,gP)=>{"use strict";var lA=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};gP.exports=lA});var ic=N((PAe,bP)=>{"use strict";var gJ=ht(),AJ=mP(),RJ=TP(),yJ=AP(),pi=cn(),u_=Pn().LMDB_ERRORS_ENUM,bJ=Ht(),Qi=M(),OJ=te(),NJ=require("uuid"),wAe=require("lmdb"),{handleHDBError:IJ,hdb_errors:wJ}=_e(),{OVERFLOW_MARKER:CAe,MAX_SEARCH_KEY_LENGTH:DAe}=bJ,RP=se();RP.initSync();var Ph=RP.get(Qi.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),uA=Qi.TIME_STAMP_NAMES_ENUM.CREATED_TIME,sc=Qi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function CJ(e,t,r,n,s=pi.getNextMonotonicTime()){EA(e,t,r,n),dA(e,t,r);let i=new AJ,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];yP(u,!0,s);let d=DJ(e,t,r,u),_=u[t];o.push(d),c.push(_)}return _A(o,c,n,i,s)}a(CJ,"insertRecords");function DJ(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let d=c([[{}]]);Array.isArray(d)&&(c=d[0][Qi.FUNC_VAL],n[o]=c)}let l=pi.getIndexedValues(c),u=e.dbis[o];if(l){Ph&&u.prefetch(l.map(d=>({key:d,value:s})),Lh);for(let d=0,_=l.length;d<_;d++)u.put(l[d],s)}}Ph&&e.dbis[t].prefetch([s],Lh),e.dbis[t].put(s,n,n[sc])})}a(DJ,"insertRecord");function PJ(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(PJ,"removeSkippedRecords");function yP(e,t,r){let n=r>0;(n||!Number.isInteger(e[sc]))&&(e[sc]=r||(r=pi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[uA]))&&(e[uA]=r||pi.getNextMonotonicTime()):delete e[uA]}a(yP,"setTimestamps");function dA(e,t,r){r.indexOf(Qi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Qi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Qi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Qi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),gJ.initializeDBIs(e,t,r)}a(dA,"initializeTransaction");async function LJ(e,t,r,n,s=pi.getNextMonotonicTime()){EA(e,t,r,n),dA(e,t,r);let i=new RJ,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],_=d[t],E;try{E=fA(e,t,d,_,i,!0,s)}catch{i.skipped_hashes.push(_),o.push(u);continue}c.push(E),l.push(_)}return _A(c,l,n,i,s,o)}a(LJ,"updateRecords");async function MJ(e,t,r,n,s=pi.getNextMonotonicTime()){try{EA(e,t,r,n)}catch(l){throw IJ(l,l.message,wJ.HTTP_STATUS_CODES.BAD_REQUEST)}dA(e,t,r);let i=new yJ,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;OJ.isEmpty(u[t])?(d=NJ.v4(),u[t]=d):d=u[t];let _=fA(e,t,u,d,i,!1,s);o.push(_),c.push(d)}return _A(o,c,n,i,s)}a(MJ,"upsertRecords");async function _A(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||pi.getNextMonotonicTime(),PJ(r,i),n}a(_A,"finalizeWrite");function fA(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if(yP(r,!d,o),Number.isInteger(r[sc])&&u[sc]>r[sc])return!1;d&&s.original_records.push(u);let _,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let T=r[h],m=e.dbis[h];if(m===void 0)continue;let g=u[h];if(typeof T=="function"){let y=T([[u]]);Array.isArray(y)&&(T=y[0][Qi.FUNC_VAL],r[h]=T)}if(T===g)continue;let S=pi.getIndexedValues(g);if(S){Ph&&m.prefetch(S.map(y=>({key:y,value:n})),Lh);for(let y=0,I=S.length;y<I;y++)m.remove(S[y],n)}if(S=pi.getIndexedValues(T),S){Ph&&m.prefetch(S.map(y=>({key:y,value:n})),Lh);for(let y=0,I=S.length;y<I;y++)m.put(S[y],n)}}let f={...u,...r};c.put(n,f,f[sc])},"do_put");return l?_=c.ifVersion(n,l.version,E):_=c.ifNoExists(n,E),_.then(f=>f?!0:fA(e,t,r,n,s,i,o))}a(fA,"updateUpsertRecord");function UJ(e,t,r){if(pi.validateEnv(e),t===void 0)throw new Error(u_.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(u_.WRITE_ATTRIBUTES_REQUIRED):new Error(u_.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(UJ,"validateBasic");function EA(e,t,r,n){if(UJ(e,t,r),!Array.isArray(n))throw n===void 0?new Error(u_.RECORDS_REQUIRED):new Error(u_.RECORDS_MUST_BE_ARRAY)}a(EA,"validateWrite");function Lh(){}a(Lh,"noop");bP.exports={insertRecords:CJ,updateRecords:LJ,upsertRecords:MJ}});var Ji=N((MAe,vJ)=>{vJ.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var Si=N((UAe,IP)=>{"use strict";var NP=te(),OP=M(),Bl=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,mi=require("joi"),Yo={schema_format:{pattern:Bl,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},BJ=mi.alternatives(mi.string().min(1).max(Yo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Yo.schema_format.message}),mi.number(),mi.array()).required(),HJ=mi.alternatives(mi.string().min(1).max(Yo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Yo.schema_format.message}),mi.number()),xJ=mi.alternatives(mi.string().min(1).max(Yo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Yo.schema_format.message}),mi.number()).required();function kJ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Yo.schema_length.maximum?`'${e}' maximum of 250 characters`:Bl.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(kJ,"checkValidTable");function FJ(e,t){return NP.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(FJ,"validateSchemaExists");function GJ(e,t){let r=t.state.ancestors[0].schema;return NP.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(GJ,"validateTableExists");function qJ(e,t){return e.toLowerCase()===OP.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${OP.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(qJ,"validateSchemaName");IP.exports={common_validators:Yo,schema_regex:Bl,hdb_schema_table:BJ,validateSchemaExists:FJ,validateTableExists:GJ,validateSchemaName:qJ,checkValidTable:kJ,hdb_database:HJ,hdb_table:xJ}});var Mh=N((BAe,wP)=>{var{common_validators:Ti}=Si(),__=Tt(),d_="is required",rr={database:{presence:!1,format:Ti.schema_format,length:Ti.schema_length},schema:{presence:!1,format:Ti.schema_format,length:Ti.schema_length},table:{presence:!0,format:Ti.schema_format,length:Ti.schema_length},attribute:{presence:!0,format:Ti.schema_format,length:Ti.schema_length},hash_attribute:{presence:!0,format:Ti.schema_format,length:Ti.schema_length}};function f_(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(f_,"makeAttributesStrings");function $J(e){return e=f_(e),rr.table.presence=!1,rr.attribute.presence=!1,rr.hash_attribute.presence=!1,__.validateObject(e,rr)}a($J,"schema_object");function VJ(e){return e=f_(e),rr.table.presence={message:d_},rr.attribute.presence=!1,rr.hash_attribute.presence=!1,__.validateObject(e,rr)}a(VJ,"table_object");function KJ(e){return e=f_(e),rr.table.presence={message:d_},rr.attribute.presence=!1,__.validateObject(e,rr)}a(KJ,"create_table_object");function YJ(e){return e=f_(e),rr.table.presence={message:d_},rr.attribute.presence={message:d_},rr.hash_attribute.presence=!1,__.validateObject(e,rr)}a(YJ,"attribute_object");function WJ(e){return e=f_(e),rr.table.presence={message:d_},rr.attribute.presence=!1,rr.hash_attribute.presence=!1,__.validateObject(e,rr)}a(WJ,"describe_table");function jJ(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(jJ,"validateTableResidence");wP.exports={schema_object:$J,create_table_object:KJ,table_object:VJ,attribute_object:YJ,describe_table:WJ,validateTableResidence:jJ}});var DP=N((xAe,CP)=>{"use strict";var zJ=require("uuid"),hA=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||zJ.v4(),this.schema_table=`${this.schema}.${this.table}`}};CP.exports=hA});var Uh=N((FAe,PP)=>{"use strict";var QJ=DP(),pA=class extends QJ{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}};PP.exports=pA});var MP=N((qAe,LP)=>{"use strict";LP.exports=XJ;var JJ="inserted";function XJ(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===JJ?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(XJ,"returnObject")});var vh=N((KAe,HP)=>{"use strict";var ZJ=M(),mA=ht(),e3=ic(),{getSystemSchemaPath:t3,getSchemaPath:r3}=gt(),VAe=Ji(),n3=Mh(),s3=Uh(),i3=MP(),{handleHDBError:UP,hdb_errors:BP}=_e(),vP=te(),{HTTP_STATUS_CODES:o3}=BP,a3="inserted";HP.exports=c3;async function c3(e){let t=n3.attribute_object(e);if(t)throw UP(new Error,t.message,BP.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&vP.checkGlobalSchemaTable(e.schema,e.table);if(r)throw UP(new Error,r,o3.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=vP.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 s3(e.schema,e.table,e.attribute,e.id);try{let i=await mA.openEnvironment(r3(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}`);mA.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await mA.openEnvironment(t3(),ZJ.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await e3.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return i3(a3,c,{records:[s]},l)}catch(i){throw i}}a(c3,"lmdbCreateAttribute")});var TA=N((WAe,kP)=>{var{hdb_table:l3,hdb_database:xP}=Si(),u3=Tt(),SA=require("joi"),d3={undefined:"undefined",null:"null"},_3=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||d3[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"),f3=SA.object({database:xP,schema:xP,table:l3,records:SA.array().items(SA.object().custom(_3)).required()});kP.exports=function(e){return u3.validateBySchema(e,f3)}});var E_=N((QAe,GP)=>{"use strict";var Xi=te(),FP=W(),zAe=TA(),{getDatabases:E3}=(Pe(),oe(lt)),{ClientError:oc}=_e();GP.exports=h3;function h3(e){if(Xi.isEmpty(e))throw new oc("invalid update parameters defined.");if(Xi.isEmptyOrZeroLength(e.schema))throw new oc("invalid schema specified.");if(Xi.isEmptyOrZeroLength(e.table))throw new oc("invalid table specified.");if(!Array.isArray(e.records))throw new oc("records must be an array");let t=E3()[e.schema]?.[e.table];if(Xi.isEmpty(t))throw new oc(`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&&Xi.isEmptyOrZeroLength(o[r]))throw FP.error("a valid hash attribute must be provided with update record:",o),new oc("a valid hash attribute must be provided with update record, check log for more info");if(!Xi.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw FP.error(`a valid hash value must be provided with ${e.operation} record:`,o),new oc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Xi.isEmpty(o[r])&&o[r]!==""&&n.has(Xi.autoCast(o[r]))&&(o.skip=!0),n.add(Xi.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(h3,"insertUpdateValidate")});var $P=N((XAe,qP)=>{"use strict";var gA=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};qP.exports=gA});var YP=N((eRe,KP)=>{"use strict";var AA=ht(),p3=W(),VP=Pn().LMDB_ERRORS_ENUM;KP.exports=m3;async function m3(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 AA.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==VP.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await AA.closeEnvironment(global.lmdb_map[n]),await AA.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==VP.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){p3.error(t)}}a(m3,"cleanLMDBMap")});var Zi=N((rRe,QP)=>{"use strict";var h_=require("crypto"),S3=se(),{CONFIG_PARAMS:T3}=M(),jP="aes-256-cbc",g3=32,A3=16,RA=64,zP=32,R3=RA+zP,WP=new Map;QP.exports={encrypt:y3,decrypt:b3,createNatsTableStreamName:O3};function y3(e){let t=h_.randomBytes(g3),r=h_.randomBytes(A3),n=h_.createCipheriv(jP,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(y3,"encrypt");function b3(e){let t=e.substr(0,RA),r=e.substr(RA,zP),n=e.substr(R3,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=h_.createDecipheriv(jP,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(b3,"decrypt");function O3(e,t){let r=S3.get(T3.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=WP.get(r);return n||(n=h_.createHash("md5").update(r).digest("hex"),WP.set(r,n)),n}a(O3,"createNatsTableStreamName")});var eo=N((iRe,ZP)=>{"use strict";var sRe=Vr(),p_=W(),JP=Mh(),N3=Zi(),Bh=te(),{handleHDBError:Hh,hdb_errors:I3}=_e(),{HDB_ERROR_MSGS:xh,HTTP_STATUS_CODES:yA}=I3,XP=se();XP.initSync();var{getDatabases:bA}=(Pe(),oe(lt)),w3=require("fs-extra"),C3=M();ZP.exports={describeAll:D3,describeTable:kh,describeSchema:P3};async function D3(e={}){try{let t=Bh.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=bA(),o={},c={},l=[],u=e?.exact_count;for(let _ in i){o[_]=!0,!t&&!s&&!r&&(c[_]=e.hdb_user?.role?.permission[_]?.describe);let E=i[_];for(let f in E)try{let h;if(t||s||r)h=await kh({schema:_,table:f,exact_count:u});else if(n&&n[_].describe&&n[_].tables[f].describe){let T=n[_].tables[f].attribute_permissions;h=await kh({schema:_,table:f,exact_count:u},T)}h&&l.push(h)}catch(h){p_.error(h)}}let d={};for(let _ in l)t||s||r?(d[l[_].schema]==null&&(d[l[_].schema]={}),d[l[_].schema][l[_].name]=l[_],o[l[_].schema]&&delete o[l[_].schema]):c[l[_].schema]&&(d[l[_].schema]==null&&(d[l[_].schema]={}),d[l[_].schema][l[_].name]=l[_],o[l[_].schema]&&delete o[l[_].schema]);for(let _ in o)t||s||r?d[_]={}:c[_]&&(d[_]={});return d}catch(t){return p_.error("Got an error in describeAll"),p_.error(t),Hh(new Error,xh.DESCRIBE_ALL_ERR)}}a(D3,"describeAll");async function kh(e,t){Bh.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=JP.describe_table(e);if(i)throw i;let c=bA()[r];if(!c)throw Hh(new Error,xh.SCHEMA_NOT_FOUND(e.schema),yA.NOT_FOUND);let l=c[n];if(!l)throw Hh(new Error,xh.TABLE_NOT_FOUND(e.schema,e.table),yA.NOT_FOUND);function u(f){d.push({attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(h=>({type:h.type,name:h.name})):void 0})}a(u,"pushAtt");let d=[];if(s){let f={};s.forEach(h=>{h.describe&&(f[h.attribute_name]=!0)}),l.attributes.forEach(h=>{f[h.name]&&u(h)})}else l.attributes?.forEach(f=>u(f));let _;try{_=(await w3.stat(l.primaryStore.env.path)).size}catch(f){p_.warn("unable to get database size",f)}let E={schema:r,name:l.tableName,hash_attribute:l.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:_};l.replicate!==void 0&&(E.replicate=l.replicate),l.expirationMS!==void 0&&(E.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(E.sealed=l.sealed),l.sources?.length>0&&(E.sources=l.sources.map(f=>f.name).filter(f=>f&&f!=="NATSReplicator"&&f!=="Replicator")),XP.get(C3.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(E.clustering_stream_name=N3.createNatsTableStreamName(E.schema,E.name));try{let f=l.getRecordCount({exactCount:e.exact_count==="true"});E.record_count=f.recordCount,E.table_size=l.getSize(),E.db_audit_size=l.getAuditSize(),E.estimated_record_range=f.estimatedRange;let h=l.auditStore;if(h)for(let T of h.getKeys({reverse:!0,limit:1}))E.last_updated_record=T[0];if(!E.last_updated_record&&l.indices.__updatedtime__)for(let T of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))E.last_updated_record=T}catch(f){p_.warn(`unable to stat table dbi due to ${f}`)}return E}a(kh,"descTable");async function P3(e){Bh.transformReq(e);let t=JP.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=bA()[n];if(!i)throw Hh(new Error,xh.SCHEMA_NOT_FOUND(e.schema),yA.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Bh.isEmpty(l)||l.describe){let u=await kh({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(P3,"describeSchema")});var ls=N((lRe,sL)=>{var L3=Ji(),{callbackify:tL,promisify:M3}=require("util"),{getDatabases:rL}=(Pe(),oe(lt));sL.exports={setSchemaDataToGlobal:eL,getTableSchema:U3,getSystemSchema:v3,setSchemaDataToGlobalAsync:M3(eL)};var nL=eo(),aRe=tL(nL.describeAll),cRe=tL(nL.describeTable);function eL(e){global.hdb_schema=rL(),e&&e()}a(eL,"setSchemaDataToGlobal");function U3(e,t,r){let n=rL()[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(U3,"getTableSchema");function v3(){return L3}a(v3,"getSystemSchema")});var un=N((dRe,cL)=>{"use strict";var Gh=TA(),Cr=te(),B3=require("util"),qh=Hn(),H3=ls(),iL=W(),{handleHDBError:ac,hdb_errors:x3}=_e(),{HTTP_STATUS_CODES:cc}=x3,k3=B3.promisify(H3.getTableSchema),F3="updated",oL="inserted",aL="upserted";cL.exports={insert:q3,update:$3,upsert:V3,validation:G3,flush:K3};async function G3(e){if(Cr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Cr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Cr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await k3(e.schema,e.table),r=Gh(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Cr.isEmptyOrZeroLength(c[n]))throw iL.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Cr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw iL.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Cr.isEmpty(c[n])&&c[n]!==""&&s.has(Cr.autoCast(c[n]))&&(c.skip=!0),s.add(Cr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(G3,"validation");async function q3(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Gh(e);if(t)throw ac(new Error,t.message,cc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw ac(new Error,r,cc.BAD_REQUEST);let n=await qh.createRecords(e);return Fh(oL,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(q3,"insertData");async function $3(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Gh(e);if(t)throw ac(new Error,t.message,cc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw ac(new Error,r,cc.BAD_REQUEST);let n=await qh.updateRecords(e);return Cr.isEmpty(n.existing_rows)?Fh(F3,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Fh(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a($3,"updateData");async function V3(e){if(e.operation!=="upsert")throw ac(new Error,"invalid operation, must be upsert",cc.INTERNAL_SERVER_ERROR);let t=Gh(e);if(t)throw ac(new Error,t.message,cc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw ac(new Error,r,cc.BAD_REQUEST);let n=await qh.upsertRecords(e);return Fh(aL,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(V3,"upsertData");function Fh(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===oL?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===aL?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Fh,"returnObject");function K3(e){return Cr.transformReq(e),qh.flush(e.schema,e.table)}a(K3,"flush")});var NA=N((fRe,dL)=>{var Y3=Tt(),OA=require("joi"),{hdb_table:W3,hdb_database:lL}=Si(),uL={schema:lL,database:lL,table:W3},j3={date:OA.date().iso().required()},z3={timestamp:OA.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};dL.exports=function(e,t){let r=t==="timestamp"?{...uL,...z3}:{...uL,...j3},n=OA.object(r);return Y3.validateBySchema(e,n)}});var EL=N((ERe,fL)=>{var Q3=Tt(),IA=require("joi"),{hdb_table:J3,hdb_database:_L}=Si(),X3=IA.object({schema:_L,database:_L,table:J3,hash_values:IA.array().required(),ids:IA.array()});fL.exports=function(e){return Q3.validateBySchema(e,X3)}});var PA=N((hRe,hL)=>{"use strict";var wA=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}},CA=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}},DA=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};hL.exports={InsertObject:wA,NoSQLSeachObject:CA,DeleteResponseObject:DA}});var dc=N((mRe,gL)=>{"use strict";var mL=NA(),Z3=EL(),lc=te(),pL=require("moment"),SL=W(),{promisify:eX,callbackify:tX}=require("util"),uc=M(),rX=ls(),LA=eX(rX.getTableSchema),MA=Hn(),{DeleteResponseObject:nX}=PA(),{handleHDBError:Wo,hdb_errors:sX}=_e(),{HDB_ERROR_MSGS:$h,HTTP_STATUS_CODES:jo}=sX,iX="records successfully deleted",oX=tX(TL);gL.exports={delete:oX,deleteRecord:TL,deleteFilesBefore:aX,deleteAuditLogsBefore:cX};async function aX(e){let t=mL(e,"date");if(t)throw Wo(t,t.message,jo.BAD_REQUEST,void 0,void 0,!0);if(lc.transformReq(e),!pL(e.date,pL.ISO_8601).isValid())throw Wo(new Error,$h.INVALID_DATE,jo.BAD_REQUEST,uc.LOG_LEVELS.ERROR,$h.INVALID_DATE,!0);let n=lc.checkSchemaTableExist(e.schema,e.table);if(n)throw Wo(new Error,n,jo.NOT_FOUND,uc.LOG_LEVELS.ERROR,n,!0);let s=await MA.deleteRecordsBefore(e);if(await LA(e.schema,e.table),SL.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(aX,"deleteFilesBefore");async function cX(e){let t=mL(e,"timestamp");if(t)throw Wo(t,t.message,jo.BAD_REQUEST,void 0,void 0,!0);if(lc.transformReq(e),isNaN(e.timestamp))throw Wo(new Error,$h.INVALID_VALUE("Timestamp"),jo.BAD_REQUEST,uc.LOG_LEVELS.ERROR,$h.INVALID_VALUE("Timestamp"),!0);let r=lc.checkSchemaTableExist(e.schema,e.table);if(r)throw Wo(new Error,r,jo.NOT_FOUND,uc.LOG_LEVELS.ERROR,r,!0);let n=await MA.deleteAuditLogsBefore(e);return await LA(e.schema,e.table),SL.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(cX,"deleteAuditLogsBefore");async function TL(e){e.ids&&(e.hash_values=e.ids);let t=Z3(e);if(t)throw Wo(t,t.message,jo.BAD_REQUEST,void 0,void 0,!0);lc.transformReq(e);let r=lc.checkSchemaTableExist(e.schema,e.table);if(r)throw Wo(new Error,r,jo.NOT_FOUND,uc.LOG_LEVELS.ERROR,r,!0);try{await LA(e.schema,e.table);let n=await MA.deleteRecords(e);return lc.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${iX}`),n}catch(n){if(n.message===uc.SEARCH_NOT_FOUND_MESSAGE){let s=new nX;return s.message=uc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(TL,"deleteRecord")});var Vh=N((TRe,yL)=>{var lX=require("crypto"),AL=9;function uX(e){let t=_X(AL),r=RL(e+t);return t+r}a(uX,"createHash");function dX(e,t){let r=e?.substr(0,AL),n=r+RL(t+r);return e===n}a(dX,"validateHash");function _X(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(_X,"generateSalt");function RL(e){return lX.createHash("md5").update(e).digest("hex")}a(RL,"md5");yL.exports={hash:uX,validate:dX}});var OL=N((ARe,bL)=>{var UA=Tt(),Kr={username:{presence:!0,exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function fX(e){return Kr.password.presence=!0,Kr.username.presence=!0,Kr.role.presence=!0,Kr.active.presence=!0,UA.validateObject(e,Kr)}a(fX,"addUserValidation");function EX(e){return Kr.password.presence=!1,Kr.username.presence=!0,Kr.role.presence=!1,Kr.active.presence=!1,UA.validateObject(e,Kr)}a(EX,"alterUserValidation");function hX(e){return Kr.password.presence=!1,Kr.username.presence=!0,Kr.role.presence=!1,Kr.active.presence=!1,UA.validateObject(e,Kr)}a(hX,"dropUserValidation");bL.exports={addUserValidation:fX,alterUserValidation:EX,dropUserValidation:hX}});var Ct=N((bRe,IL)=>{"use strict";var{platform:yRe}=require("os"),pX="nats-server.zip",vA="nats-server",mX=process.platform==="win32"?`${vA}.exe`:vA,SX=/^[^\s.,*>]+$/,NL="__request__",TX=a(e=>`${e}.${NL}`,"REQUEST_SUBJECT"),gX={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},AX={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},RX={HUB:"hub.pid",LEAF:"leaf.pid"},yX={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},bX={SUCCESS:"success",ERROR:"error"},OX={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},NX={TXN:"txn",MSGID:"msgid"},Hl={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},IX={[Hl.ERR]:1,[Hl.WRN]:2,[Hl.INF]:3,[Hl.DBG]:4,[Hl.TRC]:5},wX={debug:"-D",trace:"-DVV"};IL.exports={NATS_SERVER_ZIP:pX,NATS_SERVER_NAME:vA,NATS_BINARY_NAME:mX,PID_FILES:RX,NATS_CONFIG_FILES:AX,SERVER_SUFFIX:yX,NATS_TERM_CONSTRAINTS_RX:SX,REQUEST_SUFFIX:NL,UPDATE_REMOTE_RESPONSE_STATUSES:bX,CLUSTER_STATUS_STATUSES:OX,REQUEST_SUBJECT:TX,SUBJECT_PREFIXES:NX,MSG_HEADERS:gX,LOG_LEVELS:Hl,LOG_LEVEL_FLAGS:wX,LOG_LEVEL_HIERARCHY:IX}});var CL=N((NRe,wL)=>{"use strict";var Kh=M(),Yh=class{static{a(this,"BaseLicense")}constructor(t=0,r=Kh.RAM_ALLOCATION_ENUM.DEFAULT,n=Kh.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},BA=class extends Yh{static{a(this,"ExtendedLicense")}constructor(t=0,r=Kh.RAM_ALLOCATION_ENUM.DEFAULT,n=Kh.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};wL.exports={BaseLicense:Yh,ExtendedLicense:BA}});var _c=N((wRe,BL)=>{"use strict";var kl=require("fs-extra"),PL=Vh(),LL=require("crypto"),CX=require("moment"),DX=require("uuid").v4,Yr=W(),xA=require("path"),PX=te(),zo=M(),{totalmem:DL}=require("os"),LX=CL().ExtendedLicense,xl="invalid license key format",MX="061183",UX="mofi25",vX="aes-256-cbc",BX=16,HX=32,ML=se(),{resolvePath:UL}=wt();ML.initSync();var HA;BL.exports={validateLicense:vL,generateFingerPrint:kX,licenseSearch:GA,getLicense:qX,checkMemoryLimit:$X};function kA(){return xA.join(ML.getHdbBasePath(),zo.LICENSE_KEY_DIR_NAME,zo.LICENSE_FILE_NAME)}a(kA,"getLicenseDirPath");function xX(){let e=kA();return UL(xA.join(e,zo.LICENSE_FILE_NAME))}a(xX,"getLicenseFilePath");function FA(){let e=kA();return UL(xA.join(e,zo.REG_KEY_FILE_NAME))}a(FA,"getFingerPrintFilePath");async function kX(){let e=FA();try{return await kl.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await FX();throw Yr.error(`Error writing fingerprint file to ${e}`),Yr.error(t),new Error("There was an error generating the fingerprint")}}a(kX,"generateFingerPrint");async function FX(){let e=DX(),t=PL.hash(e),r=FA();try{await kl.mkdirp(kA()),await kl.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Yr.error(`Error writing fingerprint file to ${r}`),Yr.error(n),new Error("There was an error generating the fingerprint")}return t}a(FX,"writeFingerprint");function vL(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:zo.RAM_ALLOCATION_ENUM.DEFAULT,version:zo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Yr.error("empty license key passed to validate."),r;let n=FA(),s=!1;try{s=kl.statSync(n)}catch(i){Yr.error(i)}if(s){let i;try{i=kl.readFileSync(n,"utf8")}catch{Yr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(UX),c=o[1];c=Buffer.concat([Buffer.from(c)],BX);let l=Buffer.concat([Buffer.from(i)],HX),u=LL.createDecipheriv(vX,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let d=null;try{d=u.update(o[0],"hex","utf8"),d.trim(),d+=u.final("utf8")}catch{let f=GX(o[0],i);if(f)d=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(xl),Yr.error(xl),new Error(xl)}let _;if(isNaN(d))try{_=JSON.parse(d),r.version=_.version,r.exp_date=_.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),_.ram_allocation&&(r.ram_allocation=_.ram_allocation)}catch{throw console.error(xl),Yr.error(xl),new Error(xl)}else r.exp_date=d;r.exp_date<CX().valueOf()&&(r.valid_date=!1),PL.validate(o[1],`${MX}${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||Yr.error("Invalid licence"),r}a(vL,"validateLicense");function GX(e,t){try{let r=LL.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Yr.warn("Check old license failed")}}a(GX,"checkOldLicense");function GA(){let e=new LX,t=[];try{t=kl.readFileSync(xX(),"utf-8").split(zo.NEW_LINE)}catch(r){r.code==="ENOENT"?Yr.debug("no license file found"):Yr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(PX.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=vL(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){Yr.error("There was an error parsing the license string."),Yr.error(s),e.ram_allocation=zo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return HA=e,e}a(GA,"licenseSearch");async function qX(){return HA||await GA(),HA}a(qX,"getLicense");function $X(){let e=GA().ram_allocation,t=process.constrainedMemory?.()||DL();if(t=Math.round(Math.min(t,DL())/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($X,"checkMemoryLimit")});var dn=N((MRe,XL)=>{"use strict";var FL="username is required",GL="nothing to update, must supply active, role or password to update",qL="password cannot be an empty string",$L="If role is specified, it cannot be empty.",VL="active must be true or false";XL.exports={addUser:XX,alterUser:ZX,dropUser:tZ,getSuperUser:iZ,userInfo:rZ,listUsers:jh,listUsersExternal:nZ,setUsersToGlobal:Gl,findAndValidateUser:QL,getClusterUser:oZ,USERNAME_REQUIRED:FL,ALTERUSER_NOTHING_TO_UPDATE:GL,EMPTY_PASSWORD:qL,EMPTY_ROLE:$L,ACTIVE_BOOLEAN:VL};var KL=un(),VX=dc(),VA=Vh(),YL=OL(),WL=Vr(),KA=to(),xn=te(),jL=require("validate.js"),Ke=W(),{promisify:KX}=require("util"),YA=Zi(),HL=M(),xL=Ct(),YX=wt(),DRe=se(),PRe=_c(),WX=Ji(),{table:LRe}=(Pe(),oe(lt)),{handleHDBError:gi,hdb_errors:jX}=_e(),{HTTP_STATUS_CODES:Ai,AUTHENTICATION_ERROR_MSGS:qA,HDB_ERROR_MSGS:Fl}=jX,{UserEventMsg:WA}=qs(),$A=require("lodash"),{server:jA}=(qr(),oe(Ja)),zX=W();jA.getUser=(e,t)=>QL(e,t,t!=null);var zL={username:!0,active:!0,role:!0,password:!0},kL=new Map,Wh=WL.searchByValue,QX=WL.searchByHash,JX=KX(VX.delete);async function XX(e){let t=jL.cleanAttributes(e,zL),r=YL.addUserValidation(t);if(r)throw gi(new Error,r.message,Ai.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 Wh(n),s=s&&Array.from(s)}catch(l){throw Ke.error("There was an error searching for a role in add user"),Ke.error(l),l}if(!s||s.length<1)throw gi(new Error,Fl.ROLE_NAME_NOT_FOUND(t.role),Ai.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw gi(new Error,Fl.DUP_ROLES_FOUND(t.role),Ai.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=YA.encrypt(t.password)),t.password=VA.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await KL.insert(i)}catch(l){throw Ke.error("There was an error searching for a user."),Ke.error(l),l}Ke.debug(o);try{await Gl()}catch(l){throw Ke.error("Got an error setting users to global"),Ke.error(l),l}if(o.skipped_hashes.length===1)throw gi(new Error,Fl.USER_ALREADY_EXISTS(t.username),Ai.CONFLICT,void 0,void 0,!0);let c={...t};return c.role=s[0],KA.signalUserChange(new WA(process.pid)),`${c.username} successfully added`}a(XX,"addUser");async function ZX(e){let t=jL.cleanAttributes(e,zL);if(xn.isEmptyOrZeroLength(t.username))throw new Error(FL);if(xn.isEmptyOrZeroLength(t.password)&&xn.isEmptyOrZeroLength(t.role)&&xn.isEmptyOrZeroLength(t.active))throw new Error(GL);if(!xn.isEmpty(t.password)&&xn.isEmptyOrZeroLength(t.password.trim()))throw new Error(qL);if(!xn.isEmpty(t.active)&&!xn.isBoolean(t.active))throw new Error(VL);let r=eZ(t.username);if(!xn.isEmpty(t.password)&&!xn.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=YA.encrypt(t.password)),t.password=VA.hash(t.password)),t.role==="")throw new Error($L);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 Wh(i)||[])}catch(c){throw Ke.error("Got an error searching for a role."),Ke.error(c),c}if(!o||o.length===0){let c=Fl.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ke.error(c),gi(new Error,c,Ai.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Fl.ALTER_USER_DUP_ROLES(t.role);throw Ke.error(c),gi(new Error,c,Ai.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 KL.update(n)}catch(i){throw Ke.error("Error during update."),Ke.error(i),i}try{await Gl()}catch(i){throw Ke.error("Got an error setting users to global"),Ke.error(i),i}return KA.signalUserChange(new WA(process.pid)),s}a(ZX,"alterUser");function eZ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(eZ,"isClusterUser");async function tZ(e){try{let t=YL.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(xn.isEmpty(global.hdb_users.get(e.username)))throw gi(new Error,Fl.USER_NOT_EXIST(e.username),Ai.NOT_FOUND,void 0,void 0,!0);let n;try{n=await JX(r)}catch(s){throw Ke.error("Got an error deleting a user."),Ke.error(s),s}Ke.debug(n);try{await Gl()}catch(s){throw Ke.error("Got an error setting users to global."),Ke.error(s),s}return KA.signalUserChange(new WA(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(tZ,"dropUser");async function rZ(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=$A.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await QX(r)}catch(s){throw Ke.error("Got an error searching for a role."),Ke.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ke.error(r),r}return t}a(rZ,"userInfo");async function nZ(){let e;try{e=await jh()}catch(t){throw Ke.error("Got an error listing users."),Ke.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(nZ,"listUsersExternal");async function jh(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Wh(e)}catch(o){throw Ke.error("Got an error searching for roles."),Ke.error(o),o}let r={};for(let o of t)r[o.id]=$A.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 Wh(n)}catch(o){throw Ke.error("Got an error searching for users."),Ke.error(o),o}let i=new Map;for(let o of s)o=$A.cloneDeep(o),o.role=r[o.role],sZ(o.role),i.set(o.username,o);return i}catch(e){throw Ke.error("got an error listing users"),Ke.error(e),xn.errorizeMessage(e)}return null}a(jh,"listUsers");function sZ(e){try{if(!e){Ke.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(WX)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ke.error("Got an error trying to set system permissions."),Ke.error(t)}}a(sZ,"appendSystemTablesToRole");async function Gl(){try{let e=await jh();global.hdb_users=e}catch(e){throw Ke.error(e),e}}a(Gl,"setUsersToGlobal");async function QL(e,t,r=!0){global.hdb_users||await Gl();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw gi(new Error,qA.GENERIC_AUTH_FAIL,Ai.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw gi(new Error,qA.USER_INACTIVE,Ai.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(kL.get(t)===n.password)return s;if(VA.validate(n.password,t))kL.set(t,n.password);else throw gi(new Error,qA.GENERIC_AUTH_FAIL,Ai.UNAUTHORIZED,void 0,void 0,!0)}return s}a(QL,"findAndValidateUser");async function iZ(){global.hdb_users||await Gl();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(iZ,"getSuperUser");async function oZ(){let e=await jh(),t=YX.getConfigFromFile(HL.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!xn.isEmpty(r)&&r?.role?.role===HL.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=YA.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+xL.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+xL.SERVER_SUFFIX.ADMIN,r}a(oZ,"getClusterUser");var JL=[];jA.invalidateUser=function(e){for(let t of JL)try{t(e)}catch(r){zX.error("Error invalidating user",r)}};jA.onInvalidatedUser=function(e){JL.push(e)}});var S_=N((HRe,rM)=>{"use strict";var fc=W(),kn=M(),aZ=YP(),vRe=ls(),BRe=eo(),cZ=dn(),{validateEvent:ZL}=qs(),m_=Hn(),lZ=require("process"),{resetDatabases:uZ}=(Pe(),oe(lt)),dZ={[kn.ITC_EVENT_TYPES.SCHEMA]:_Z,[kn.ITC_EVENT_TYPES.USER]:tM};async function _Z(e){let t=ZL(e);if(t){fc.error(t);return}fc.trace("ITC schemaHandler received schema event:",e),await aZ(e.message),await fZ(e.message)}a(_Z,"schemaHandler");async function fZ(e){try{m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=uZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){fc.error(t)}}a(fZ,"syncSchemaMetadata");var eM=[];async function tM(e){try{try{m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){fc.warn(r)}let t=ZL(e);if(t){fc.error(t);return}fc.trace(`ITC userHandler ${kn.HDB_ITC_CLIENT_PREFIX}${lZ.pid} received user event:`,e),await cZ.setUsersToGlobal();for(let r of eM)r()}catch(t){fc.error(t)}}a(tM,"userHandler");tM.addListener=function(e){eM.push(e)};rM.exports=dZ});var qs=N(($Re,sM)=>{"use strict";var kRe=W(),zA=te(),EZ=M(),{ITC_ERRORS:T_}=Pn(),{parentPort:FRe,threadId:hZ,isMainThread:pZ,workerData:GRe}=require("worker_threads"),{onMessageFromWorkers:mZ,broadcast:qRe,broadcastWithAcknowledgement:SZ}=dt();sM.exports={sendItcEvent:TZ,validateEvent:nM,SchemaEventMsg:gZ,UserEventMsg:AZ};var zh;mZ(async(e,t)=>{zh=zh||S_(),nM(e),zh[e.type]&&await zh[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function TZ(e){return!pZ&&e.message&&(e.message.originator=hZ),SZ(e)}a(TZ,"sendItcEvent");function nM(e){if(typeof e!="object")return T_.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||zA.isEmpty(e.type))return T_.MISSING_TYPE;if(!e.hasOwnProperty("message")||zA.isEmpty(e.message))return T_.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||zA.isEmpty(e.message.originator))return T_.MISSING_ORIGIN;if(EZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return T_.INVALID_EVENT(e.type)}a(nM,"validateEvent");function gZ(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(gZ,"SchemaEventMsg");function AZ(e){this.originator=e}a(AZ,"UserEventMsg")});var to=N((YRe,cM)=>{"use strict";var iM=M(),KRe=te(),Qh=W(),oM=$P(),ql,{sendItcEvent:aM}=qs();function RZ(e){try{Qh.info("signalSchemaChange called with message:",e),ql=ql||S_();let t=new oM(iM.ITC_EVENT_TYPES.SCHEMA,e);return ql.schema(t),aM(t)}catch(t){Qh.error(t)}}a(RZ,"signalSchemaChange");function yZ(e){try{Qh.trace("signalUserChange called with message:",e),ql=ql||S_();let t=new oM(iM.ITC_EVENT_TYPES.USER,e);return ql.user(t),aM(t)}catch(t){Qh.error(t)}}a(yZ,"signalUserChange");cM.exports={signalSchemaChange:RZ,signalUserChange:yZ}});var Jh=N((jRe,uM)=>{"use strict";var lM=te(),bZ=M(),OZ=W(),NZ=vh(),IZ=Uh(),wZ=to(),{SchemaEventMsg:CZ}=qs(),DZ="already exists in";uM.exports=PZ;async function PZ(e,t,r){if(lM.isEmptyOrZeroLength(r))return r;let n=[];lM.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 LZ(e,t.schema,t.name,i)})),s}a(PZ,"lmdbCheckForNewAttributes");async function LZ(e,t,r,n){let s=new IZ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await MZ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(DZ))OZ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(LZ,"createNewAttribute");async function MZ(e){let t;return t=await NZ(e),wZ.signalSchemaChange(new CZ(process.pid,bZ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(MZ,"createAttribute")});var $l=N((QRe,dM)=>{"use strict";var QA=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}};dM.exports=QA});var fM=N((XRe,_M)=>{"use strict";var UZ=$l(),vZ=M().OPERATIONS_ENUM,JA=class extends UZ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(vZ.INSERT,r,n,s,i),this.records=t}};_M.exports=JA});var hM=N((eye,EM)=>{"use strict";var BZ=$l(),HZ=M().OPERATIONS_ENUM,XA=class extends BZ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(HZ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};EM.exports=XA});var mM=N((rye,pM)=>{"use strict";var xZ=$l(),kZ=M().OPERATIONS_ENUM,ZA=class extends xZ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(kZ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};pM.exports=ZA});var TM=N((sye,SM)=>{"use strict";var FZ=$l(),GZ=M().OPERATIONS_ENUM,eR=class extends FZ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(GZ.DELETE,n,s,t,i),this.original_records=r}};SM.exports=eR});var g_=N((aye,yM)=>{"use strict";var oye=require("path"),gM=ht(),qZ=fM(),$Z=hM(),VZ=mM(),KZ=TM(),Vl=Ht(),AM=te(),{CONFIG_PARAMS:YZ}=M(),RM=se();RM.initSync();var Xh=M().OPERATIONS_ENUM,{getTransactionAuditStorePath:WZ}=gt();yM.exports=jZ;async function jZ(e,t){if(RM.get(YZ.LOGGING_AUDITLOG)===!1)return;let r=WZ(e.schema,e.table),n=await gM.openEnvironment(r,e.table,!0),s=zZ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){gM.initializeDBIs(n,Vl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Vl.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Vl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Vl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),AM.isEmpty(s.user_name)||n.dbis[Vl.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Vl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(jZ,"writeTransaction");function zZ(e,t){let r=AM.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Xh.INSERT)return new qZ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Xh.UPDATE)return new $Z(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Xh.UPSERT)return new VZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Xh.DELETE)return new KZ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(zZ,"createTransactionObject")});var tR=N((uye,bM)=>{"use strict";var QZ=E_(),lye=Jd(),A_=M(),JZ=Xd(),XZ=ic().insertRecords,ZZ=ht(),e5=W(),t5=Jh(),{getSchemaPath:r5}=gt(),n5=g_();bM.exports=s5;async function s5(e){try{let{schema_table:t,attributes:r}=QZ(e);JZ(e,r,t.hash_attribute),e.schema!==A_.SYSTEM_SCHEMA_NAME&&(r.includes(A_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(A_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(A_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(A_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await t5(e.hdb_auth_header,t,r),s=r5(e.schema,e.table),i=await ZZ.openEnvironment(s,e.table),o=await XZ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await n5(e,o)}catch(c){e5.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(s5,"lmdbCreateRecords")});var IM=N((_ye,NM)=>{"use strict";var OM=M(),i5=tR(),o5=Jd(),a5=require("fs-extra"),{getSchemaPath:c5}=gt();NM.exports=l5;async function l5(e){let t=[{name:e.schema,createddate:Date.now()}],r=new o5(OM.SYSTEM_SCHEMA_NAME,OM.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await i5(r),await a5.mkdirp(c5(e.schema))}a(l5,"lmdbCreateSchema")});var CM=N((Eye,wM)=>{"use strict";var rR=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}};wM.exports=rR});var MM=N((Tye,LM)=>{"use strict";var DM=ht(),nR=cn(),sR=Pn().LMDB_ERRORS_ENUM,u5=Ht(),PM=W(),pye=te(),d5=require("lmdb"),_5=CM(),f5=M(),{OVERFLOW_MARKER:mye,MAX_SEARCH_KEY_LENGTH:Sye}=u5,E5=f5.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function h5(e,t,r,n){if(nR.validateEnv(e),t===void 0)throw new Error(sR.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(sR.IDS_REQUIRED):new Error(sR.IDS_MUST_BE_ITERABLE);try{let s=DM.listDBIs(e);DM.initializeDBIs(e,t,s);let i=new _5,o,c=[],l=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||n&&h[E5]>n){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,d5.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let m=0;m<s.length;m++){let g=s[m];if(!h.hasOwnProperty(g)||g===t)continue;let S=e.dbis[g],y=h[g];if(y!=null)try{let I=nR.getIndexedValues(y);if(I)for(let U=0,H=I.length;U<H;U++)S.remove(I[U],o)}catch{PM.warn(`cannot delete from attribute: ${g}, ${y}:${o}`)}}});c.push(T),l.push(o),i.original_records.push(h)}catch(h){PM.warn(h),i.skipped.push(o)}let u=[],d=await Promise.all(c);for(let E=0,f=d.length;E<f;E++)d[E]===!0?i.deleted.push(l[E]):(i.skipped.push(l[E]),u.push(E));let _=0;for(let E=0;E<u.length;E++){let f=u[E];i.original_records.splice(f-_,1),_++}return i.txn_time=nR.getNextMonotonicTime(),i}catch(s){throw s}}a(h5,"deleteRecords");LM.exports={deleteRecords:h5}});var R_=N((Aye,vM)=>{"use strict";var Kl=te(),p5=MM(),m5=ht(),{getSchemaPath:S5}=gt(),T5=g_(),g5=W();vM.exports=A5;async function A5(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Kl.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Kl.isEmptyOrZeroLength(e.hash_values)&&!Kl.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Kl.isEmpty(l)||e.hash_values.push(l)}}if(Kl.isEmptyOrZeroLength(e.hash_values))return UM([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Kl.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=S5(e.schema,e.table),i=await m5.openEnvironment(s,e.table),o=await p5.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await T5(e,o)}catch(c){g5.error(`unable to write transaction due to ${c.message}`)}return UM(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(A5,"lmdbDeleteRecords");function UM(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(UM,"createDeleteResponse")});var oR=N((bye,BM)=>{"use strict";var R5=M(),yye=cn();function iR(e,t){let r=Object.create(null);if(t.length===1&&R5.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(iR,"parseRow");function y5(e,t,r,n){let s=iR(r,e);n.push(s)}a(y5,"searchAll");function b5(e,t,r,n){let s=iR(r,e);n[t]=s}a(b5,"searchAllToMap");function O5(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(O5,"iterateDBI");function Ec(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(Ec,"pushResults");function N5(e,t,r,n,s,i){t.toString().endsWith(e)&&Ec(t,r,n,s,i)}a(N5,"endsWith");function I5(e,t,r,n,s,i){t.toString().includes(e)&&Ec(t,r,n,s,i)}a(I5,"contains");function w5(e,t,r,n,s,i){t>e&&Ec(t,r,n,s,i)}a(w5,"greaterThanCompare");function C5(e,t,r,n,s,i){t>=e&&Ec(t,r,n,s,i)}a(C5,"greaterThanEqualCompare");function D5(e,t,r,n,s,i){t<e&&Ec(t,r,n,s,i)}a(D5,"lessThanCompare");function P5(e,t,r,n,s,i){t<=e&&Ec(t,r,n,s,i)}a(P5,"lessThanEqualCompare");BM.exports={parseRow:iR,searchAll:y5,searchAllToMap:b5,iterateDBI:O5,endsWith:N5,contains:I5,greaterThanCompare:w5,greaterThanEqualCompare:C5,lessThanCompare:D5,lessThanEqualCompare:P5,pushResults:Ec}});var Yl=N((Cye,$M)=>{"use strict";var Qo=ht(),Nye=W(),Fn=cn(),Zh=Ht(),zt=Pn().LMDB_ERRORS_ENUM,Iye=te(),L5=M(),ep=oR(),{parseRow:M5}=ep,wye=require("lmdb"),{OVERFLOW_MARKER:HM,MAX_SEARCH_KEY_LENGTH:U5}=Zh;function xM(e,t,r,n=!1,s=void 0,i=void 0){return hc(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(xM,"iterateFullIndex");function y_(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return hc(e,t,r,(d,_,E,f)=>{let S={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return f===r?(S.values=!1,_.getRange(S).map(y=>({value:y}))):_.getRange(S)})}a(y_,"iterateRangeBetween");function hc(e,t,r,n){let s=e.database||e,i=Qo.openDBI(s,r);i[Zh.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Qo.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(hc,"setupTransaction");function kM(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(HM)){if(!s)if(r)s=Qo.openDBI(e,r);else{let l=Qo.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Qo.openDBI(e,l[u]),!s[Zh.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(kM,"getOverflowCheck");function v5(e,t,r,n=!1,s=void 0,i=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return hc(e,t,t,(o,c,l)=>(tp(r),r=b_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>M5(u.value,r))))}a(v5,"searchAll");function B5(e,t,r,n=!1,s=void 0,i=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);tp(r),r=b_(e.database||e,r);let o=new Map;for(let{key:c,value:l}of xM(e,t,t,n,s,i))o.set(c,ep.parseRow(l,r));return o}a(B5,"searchAllToMap");function H5(e,t,r=!1,n=void 0,s=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=xM(e,void 0,t,r,n,s),c=o.transaction,l=kM(c.database,c,void 0,t);for(let{key:u,value:d}of o){let _=l(u,d);i[_]===void 0&&(i[_]=[]),i[_].push(d)}return i}a(H5,"iterateDBI");function x5(e,t){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return Qo.statDBI(e,t).entryCount}a(x5,"countAll");function k5(e,t,r,n,s=!1,i=void 0,o=void 0){return Jo(e,r,n),hc(e,t,r,(c,l,u,d)=>(n=Fn.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(_=>({key:n,value:_}))))}a(k5,"equals");function F5(e,t,r){return Jo(e,t,r),Qo.openDBI(e,t).getValuesCount(r)}a(F5,"count");function G5(e,t,r,n,s=!1,i=void 0,o=void 0){return Jo(e,r,n),hc(e,null,r,(c,l)=>{n=Fn.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let _;for(let E of l.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){_=E;break}return _!==void 0&&(Number.isInteger(o)?o++:i++),d=l.getRange({transaction:c,start:_,end:void 0,reverse:s,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==_){if(f.toString().startsWith(n))return E;if(u===!0)return d.DONE}}),d.filter(E=>E)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(_=>{if(_.key.toString().startsWith(n))return _;if(u===!0)return d.DONE}),u?d:d.filter(_=>_)})}a(G5,"startsWith");function q5(e,t,r,n,s=!1,i=void 0,o=void 0){return FM(e,t,r,n,s,i,o,!0)}a(q5,"endsWith");function FM(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Jo(e,r,n),hc(e,null,r,(l,u,d,_)=>{let E=kM(d,l,_,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(HM)?u.getValues(f,{transaction:l}).map(T=>{let m=E(f,T);if(c?m.endsWith(n):m.includes(n))return{key:m,value:T}}).filter(T=>T):(c?h.endsWith(n):h.includes(n))?u[Zh.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:u.getValues(f,{transaction:l}).map(T=>({key:f,value:T})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(FM,"contains");function $5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),y_(e,t,r,n,l,s,i,o,!0,!1)}a($5,"greaterThan");function V5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),y_(e,t,r,n,l,s,i,o,!1,!1)}a(V5,"greaterThanEqual");function K5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),y_(e,t,r,l,n,s,i,o,!1,!0)}a(K5,"lessThan");function Y5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),y_(e,t,r,l,n,s,i,o,!1,!1)}a(Y5,"lessThanEqual");function W5(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Fn.validateEnv(e),r===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(zt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(zt.END_VALUE_REQUIRED);if(n=Fn.convertKeyValueToWrite(n),s=Fn.convertKeyValueToWrite(s),n>s)throw new Error(zt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return y_(e,t,r,n,s,i,o,c)}a(W5,"between");function j5(e,t,r,n){Fn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(tp(r),r=b_(s,r),n===void 0)throw new Error(zt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=ep.parseRow(c,r)),o}a(j5,"searchByHash");function z5(e,t,r){Fn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(zt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(z5,"checkHashExists");function Q5(e,t,r,n,s=[]){return qM(e,t,r,n,s),GM(e,t,r,n,s).map(i=>i[1])}a(Q5,"batchSearchByHash");function J5(e,t,r,n,s=[]){qM(e,t,r,n,s);let i=new Map;for(let[o,c]of GM(e,t,r,n,s))i.set(o,c);return i}a(J5,"batchSearchByHashToMap");function GM(e,t,r,n,s=[]){return hc(e,t,t,(i,o,c)=>{r=b_(c,r);let l=r.length<3;return n.map(u=>{let d=c.dbis[t].get(u,{transaction:i,lazy:l});if(d)return[u,ep.parseRow(d,r)];s.push(u)}).filter(u=>u)})}a(GM,"batchHashSearch");function qM(e,t,r,n,s){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(tp(r),n==null)throw new Error(zt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(zt.IDS_MUST_BE_ITERABLE)}a(qM,"initializeBatchSearchByHash");function tp(e){if(!Array.isArray(e))throw e===void 0?new Error(zt.FETCH_ATTRIBUTES_REQUIRED):new Error(zt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(tp,"validateFetchAttributes");function Jo(e,t,r){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(zt.SEARCH_VALUE_REQUIRED);if(r?.length>U5)throw new Error(zt.SEARCH_VALUE_TOO_LARGE)}a(Jo,"validateComparisonFunctions");function b_(e,t){return t.length===1&&L5.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Qo.listDBIs(e)),t}a(b_,"setGetWholeRowAttributes");$M.exports={searchAll:v5,searchAllToMap:B5,count:F5,countAll:x5,equals:k5,startsWith:G5,endsWith:q5,contains:FM,searchByHash:j5,setGetWholeRowAttributes:b_,batchSearchByHash:Q5,batchSearchByHashToMap:J5,checkHashExists:z5,iterateDBI:H5,greaterThan:$5,greaterThanEqual:V5,lessThan:K5,lessThanEqual:Y5,between:W5}});var Wl=N((Pye,jM)=>{var VM=require("lodash"),KM=Tt(),xe=require("joi"),X5=te(),{hdb_schema_table:O_,checkValidTable:YM,hdb_table:WM,hdb_database:rp}=Si(),{handleHDBError:Z5,hdb_errors:e6}=_e(),{getDatabases:t6}=(Pe(),oe(lt)),{HTTP_STATUS_CODES:r6}=e6,n6=xe.object({database:rp,schema:rp,table:WM,search_attribute:O_,search_value:xe.any().required(),get_attributes:xe.array().min(1).items(xe.alternatives(O_,xe.object())).optional(),desc:xe.bool(),limit:xe.number().integer().min(1),offset:xe.number().integer().min(0)}),s6=xe.object({database:rp,schema:rp,table:WM,operator:xe.string().valid("and","or").default("and").lowercase(),offset:xe.number().integer().min(0),limit:xe.number().integer().min(1),get_attributes:xe.array().min(1).items(xe.alternatives(O_,xe.object())).optional(),sort:xe.object({attribute:xe.alternatives(O_,xe.array().min(1)),descending:xe.bool().optional()}).optional(),conditions:xe.array().min(1).items(xe.alternatives(xe.object({operator:xe.string().valid("and","or").default("and").lowercase(),conditions:xe.array()}),xe.object({search_attribute:xe.alternatives(O_,xe.array().min(1)),search_type:xe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:xe.when("search_type",{switch:[{is:"equals",then:xe.any()},{is:"between",then:xe.array().items(xe.alternatives([xe.string(),xe.number()])).length(2)}],otherwise:xe.alternatives(xe.string(),xe.number())}).required()}))).required()});jM.exports=function(e,t){let r=null;switch(t){case"value":r=KM.validateBySchema(e,n6);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(YM("database",e.schema)),i(YM("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=KM.validateBySchema(e,s6);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=X5.checkGlobalSchemaTable(e.schema,e.table);if(s)return Z5(new Error,s,r6.NOT_FOUND);let o=t6()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(d=>{for(let _=0,E=d.conditions.length;_<E;_++){let f=d.conditions[_];f.conditions?l(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=VM.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!VM.some(o,_=>_===d||_.attribute===d||_.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var aR=N((Mye,zM)=>{"use strict";var i6=ht(),o6=Wl(),{getSchemaPath:a6}=gt();zM.exports=c6;function c6(e){let t=o6(e,"hashes");if(t)throw t;let r=a6(e.schema,e.table);return i6.openEnvironment(r,e.table)}a(c6,"initialize")});var cR=N((vye,QM)=>{"use strict";var l6=Yl(),u6=aR();QM.exports=d6;async function d6(e){let t=await u6(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return l6.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(d6,"lmdbGetDataByHash")});var jl=N((Hye,JM)=>{"use strict";var lR=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};JM.exports=lR});var ZM=N((Fye,XM)=>{"use strict";var kye=jl(),_6=Yl(),f6=aR();XM.exports=E6;async function E6(e){let t=await f6(e),r=global.hdb_schema[e.schema][e.table];return _6.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(E6,"lmdbSearchByHash")});var $s=N((qye,eU)=>{"use strict";var uR=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};eU.exports=uR});var np=N((Vye,oU)=>{"use strict";var Wr=Yl(),h6=ht(),p6=te(),ke=Ht(),pc=M(),m6=Ji(),tU=Pn().LMDB_ERRORS_ENUM,{getSchemaPath:S6}=gt(),ro=pc.SEARCH_WILDCARDS;async function T6(e,t,r){let n;e.schema===pc.SYSTEM_SCHEMA_NAME?n=m6[e.table]:n=global.hdb_schema[e.schema][e.table];let s=iU(e,n.hash_attribute,r,t);return nU(e,s,n.hash_attribute,r)}a(T6,"prepSearch");async function nU(e,t,r,n){let s=S6(e.schema,e.table),i=await h6.openEnvironment(s,e.table),o=sU(i,e,t,r),c=o.transaction||i;if([ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ke.SEARCH_TYPES.SEARCH_ALL,ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(g6(e,r)===!1){let d=e.search_attribute;if(d===r)return n?rU(o,()=>!0):o.map(E=>({[r]:E.key}));let _=a(E=>({[r]:E.value,[d]:E.key}),"toObject");return n?rU(o,_):o.map(_)}let u=e.search_attribute===r?o.map(d=>d.key):o.map(d=>d.value);return n===!0?Wr.batchSearchByHashToMap(c,r,e.get_attributes,u):Wr.batchSearchByHash(c,r,e.get_attributes,u)}a(nU,"executeSearch");function sU(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case ke.SEARCH_TYPES.EQUALS:s=Wr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.CONTAINS:s=Wr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.ENDS_WITH:case ke.SEARCH_TYPES._ENDS_WITH:s=Wr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.STARTS_WITH:case ke.SEARCH_TYPES._STARTS_WITH:s=Wr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Wr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Wr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.SEARCH_ALL:return Wr.searchAll(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Wr.searchAllToMap(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.BETWEEN:s=Wr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case ke.SEARCH_TYPES.GREATER_THAN:case ke.SEARCH_TYPES._GREATER_THAN:s=Wr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.GREATER_THAN_EQUAL:case ke.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Wr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.LESS_THAN:case ke.SEARCH_TYPES._LESS_THAN:s=Wr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.LESS_THAN_EQUAL:case ke.SEARCH_TYPES._LESS_THAN_EQUAL:s=Wr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(sU,"searchByType");function rU(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(rU,"createMapFromIterable");function g6(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(g6,"checkToFetchMore");function iU(e,t,r,n){if(p6.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),ro.indexOf(s)>-1)return r===!0?ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ke.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(ro[0])<0&&s.indexOf(ro[1])<0)return c===!0?r===!0?ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ke.SEARCH_TYPES.EQUALS;if(ro.indexOf(i)>=0&&ro.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ke.SEARCH_TYPES.CONTAINS;if(ro.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ke.SEARCH_TYPES.ENDS_WITH;if(ro.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ke.SEARCH_TYPES.STARTS_WITH;if(s.includes(ro[0])||s.includes(ro[1]))return ke.SEARCH_TYPES.EQUALS;throw new Error(tU.UNKNOWN_SEARCH_TYPE)}else switch(n){case pc.VALUE_SEARCH_COMPARATORS.BETWEEN:return ke.SEARCH_TYPES.BETWEEN;case pc.VALUE_SEARCH_COMPARATORS.GREATER:return ke.SEARCH_TYPES.GREATER_THAN;case pc.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ke.SEARCH_TYPES.GREATER_THAN_EQUAL;case pc.VALUE_SEARCH_COMPARATORS.LESS:return ke.SEARCH_TYPES.LESS_THAN;case pc.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ke.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(tU.UNKNOWN_SEARCH_TYPE)}}a(iU,"createSearchTypeFromSearchObject");oU.exports={executeSearch:nU,createSearchTypeFromSearchObject:iU,prepSearch:T6,searchByType:sU}});var cU=N((Wye,aU)=>{"use strict";var Yye=$s(),A6=Wl(),R6=te(),y6=M(),b6=np();aU.exports=O6;function O6(e,t){if(!R6.isEmpty(t)&&y6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=A6(e,"value");if(n)throw n;return b6.prepSearch(e,t,!0)}a(O6,"lmdbGetDataByValue")});var N_=N((Qye,lU)=>{"use strict";var zye=$s(),N6=Wl(),I6=te(),w6=M(),C6=np();lU.exports=D6;async function D6(e,t){if(!I6.isEmpty(t)&&w6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=N6(e,"value");if(n)throw n;return C6.prepSearch(e,t,!1)}a(D6,"lmdbSearchByValue")});var dU=N((Zye,uU)=>{"use strict";var Xye=Ht(),dR=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}},_R=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},fR=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};uU.exports={SearchByConditionsObject:dR,SearchCondition:_R,SortAttribute:fR}});var pU=N((nbe,hU)=>{"use strict";var tbe=dU().SearchByConditionsObject,P6=$s(),L6=Wl(),ER=Yl(),sp=Ht(),{Resource:rbe}=(Vs(),oe(hR)),EU=np(),M6=oR(),U6=require("lodash"),{getSchemaPath:v6}=gt(),_U=ht(),{handleHDBError:B6,hdb_errors:H6}=_e(),{HTTP_STATUS_CODES:x6}=H6,k6=1e8;hU.exports=F6;async function F6(e){let t=L6(e,"conditions");if(t)throw B6(t,t.message,x6.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=v6(e.schema,e.table),n=await _U.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)_U.openDBI(n,u.search_attribute);let i=U6.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.search_type;d===sp.SEARCH_TYPES.EQUALS?u.estimated_count=ER.count(n,u.search_attribute,u.search_value):d===sp.SEARCH_TYPES.CONTAINS||d===sp.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=k6}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await fU(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(EU.filterByType),_=d.length,E=ER.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(f=>u.get(f,{transaction:o,lazy:!0})),_>0&&(l=l.filter(f=>{for(let h=0;h<_;h++)if(!d[h](f))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(f=>M6.parseRow(f,E))}else{for(let _=1;_<i.length;_++){let E=i[_],f=await fU(o,e,E,s.hash_attribute);c=c.concat(f)}let u=new Set,d=e.offset||0;c=c.filter(_=>u.has(_)?!1:(u.add(_),!0)).slice(d,e.limit&&e.limit+d),l=ER.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(F6,"lmdbSearchByConditions");async function fU(e,t,r,n){let s=new P6(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===sp.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,EU.searchByType(e,s,i,n).map(o=>o.value)}a(fU,"executeConditionSearch")});var I_=N((ibe,mU)=>{"use strict";var G6=M().OPERATIONS_ENUM,pR=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=G6.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};mU.exports=pR});var mR=N((abe,OU)=>{"use strict";var AU=$s(),RU=I_(),yU=N_(),bU=R_(),_n=M(),SU=te(),TU=ht(),{getTransactionAuditStorePath:q6,getSchemaPath:$6}=gt(),gU=W();OU.exports=V6;async function V6(e){try{if(SU.isEmpty(global.hdb_schema[e.schema])||SU.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await K6(e),await Y6(e);let t=$6(e.schema,e.table);try{await TU.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")gU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=q6(e.schema,e.table);await TU.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")gU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(V6,"lmdbDropTable");async function K6(e){let t=new AU(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await yU(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 RU(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await bU(s)}a(K6,"deleteAttributesFromSystem");async function Y6(e){let t=new AU(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await yU(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 RU(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await bU(s)}catch(i){throw i}}a(Y6,"dropTableFromSystem")});var IU=N((lbe,NU)=>{"use strict";var W6=require("fs-extra"),j6=$s(),z6=jl(),Q6=I_(),J6=mR(),X6=R_(),Z6=cR(),e8=N_(),no=M(),{getSchemaPath:t8}=gt(),{handleHDBError:r8,hdb_errors:n8}=_e(),{HDB_ERROR_MSGS:s8,HTTP_STATUS_CODES:i8}=n8;NU.exports=o8;async function o8(e){let t;try{t=await a8(e.schema);let r=new j6(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await e8(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await J6(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new Q6(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await X6(s);let i=t8(t);await W6.remove(i)}catch(r){throw r}}a(o8,"lmdbDropSchema");async function a8(e){let t=new z6(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await Z6(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw r8(new Error,s8.SCHEMA_NOT_FOUND(e),i8.NOT_FOUND,void 0,void 0,!0);return n}a(a8,"validateDropSchema")});var w_=N((dbe,wU)=>{"use strict";var SR=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};wU.exports=SR});var gR=N((Ebe,CU)=>{"use strict";var c8=require("fs-extra"),ip=ht(),{getTransactionAuditStorePath:l8}=gt(),TR=Ht(),fbe=w_();CU.exports=u8;async function u8(e){let t;try{let r=l8(e.schema,e.table);await c8.mkdirp(r),t=await ip.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{ip.createDBI(t,TR.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),ip.createDBI(t,TR.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),ip.createDBI(t,TR.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(u8,"createTransactionsAuditEnvironment")});var LU=N((mbe,PU)=>{"use strict";var AR=M(),DU=ht(),d8=ic(),{getSystemSchemaPath:_8,getSchemaPath:f8}=gt(),pbe=Ji(),E8=vh(),RR=Uh(),h8=W(),p8=gR();PU.exports=m8;async function m8(e,t){let r=f8(t.schema,t.table),n=new RR(t.schema,t.table,AR.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new RR(t.schema,t.table,AR.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new RR(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await DU.createEnvironment(r,t.table),e!==void 0){let o=await DU.openEnvironment(_8(),AR.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await d8.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_table_attributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await yR(n),await yR(s),await yR(i)}await p8(t)}catch(o){throw o}}a(m8,"lmdbCreateTable");async function yR(e){try{await E8(e)}catch(t){h8.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(yR,"createAttribute")});var UU=N((Tbe,MU)=>{"use strict";var S8=E_(),T8=Xd(),g8=Jh(),C_=M(),A8=ic().updateRecords,R8=ht(),{getSchemaPath:y8}=gt(),b8=g_(),O8=W();MU.exports=N8;async function N8(e){try{let{schema_table:t,attributes:r}=S8(e);T8(e,r,t.hash_attribute),e.schema!==C_.SYSTEM_SCHEMA_NAME&&(r.includes(C_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(C_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(C_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(C_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await g8(e.hdb_auth_header,t,r),s=y8(e.schema,e.table),i=await R8.openEnvironment(s,e.table),o=await A8(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await b8(e,o)}catch(c){O8.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(N8,"lmdbUpdateRecords")});var BU=N((Abe,vU)=>{"use strict";var I8=M().OPERATIONS_ENUM,bR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=I8.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};vU.exports=bR});var xU=N((bbe,HU)=>{"use strict";var ybe=BU(),w8=E_(),C8=Xd(),D8=Jh(),D_=M(),P8=ic().upsertRecords,L8=ht(),{getSchemaPath:M8}=gt(),U8=g_(),v8=W(),{handleHDBError:B8,hdb_errors:H8}=_e();HU.exports=x8;async function x8(e){let t;try{t=w8(e)}catch(l){throw B8(l,l.message,H8.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;C8(e,n,r.hash_attribute),e.schema!==D_.SYSTEM_SCHEMA_NAME&&(n.includes(D_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(D_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(D_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(D_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await D8(e.hdb_auth_header,r,n),i=M8(e.schema,e.table),o=await L8.openEnvironment(i,e.table),c=await P8(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await U8(e,c)}catch(l){v8.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(x8,"lmdbUpsertRecords")});var FU=N((Nbe,kU)=>{"use strict";var OR=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};kU.exports=OR});var qU=N((wbe,GU)=>{"use strict";var NR=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}};GU.exports=NR});var KU=N((Pbe,VU)=>{"use strict";var IR=ht(),{getTransactionAuditStorePath:k8}=gt(),Dbe=FU(),P_=Ht(),F8=te(),$U=qU(),G8=require("util").promisify,q8=G8(setTimeout),$8=1e4,V8=100;VU.exports=K8;async function K8(e){let t=k8(e.schema,e.table),r=await IR.openEnvironment(t,e.table,!0),n=IR.listDBIs(r);IR.initializeDBIs(r,P_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new $U;do s=await Y8(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 q8(V8);while(s.transactions_deleted>0);return i}a(K8,"deleteAuditLogsBefore");async function Y8(e,t){let r=new $U;try{let n=e.dbis[P_.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[P_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];F8.isEmpty(c)||(s=e.dbis[P_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[P_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>$8)break}return await s,r}catch(n){throw n}}a(Y8,"deleteTransactions")});var WU=N((Mbe,YU)=>{"use strict";var wR=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};YU.exports=wR});var zU=N((Bbe,jU)=>{"use strict";var W8=$s(),j8=I_(),vbe=WU(),Ri=M(),z8=te(),CR=ht(),Q8=Ji(),J8=N_(),X8=R_(),{getSchemaPath:Z8}=gt();jU.exports=e9;async function e9(e,t=!0){let r;e.schema===Ri.SYSTEM_SCHEMA_NAME?r=Q8[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await r9(e),s=Z8(e.schema,e.table),i=await CR.openEnvironment(s,e.table);return t===!0&&await t9(e,i,r.hash_attribute),CR.dropDBI(i,e.attribute),n}a(e9,"lmdbDropAttribute");async function t9(e,t,r){let n=CR.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(o,u,l)}await s}a(t9,"removeAttributeFromAllObjects");async function r9(e){let t=new W8(Ri.SYSTEM_SCHEMA_NAME,Ri.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ri.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ri.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Ri.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await J8(t)).filter(o=>o[Ri.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(z8.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Ri.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new j8(Ri.SYSTEM_SCHEMA_NAME,Ri.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return X8(i)}a(r9,"dropAttributeFromSystem")});var tv=N((kbe,ev)=>{"use strict";var DR=ht(),zl=Ht(),xbe=cn(),PR=M(),QU=te(),{getTransactionAuditStorePath:n9}=gt(),s9=Yl(),op=$l(),i9=W();ev.exports=o9;async function o9(e){let t=n9(e.schema,e.table),r=await DR.openEnvironment(t,e.table,!0),n=DR.listDBIs(r);DR.initializeDBIs(r,zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case PR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return JU(r,e.search_values);case PR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,c9(r,e.search_values,s);case PR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return a9(r,e.search_values);default:return JU(r)}}a(o9,"readAuditLog");function JU(e,t=[0,Date.now()]){QU.isEmpty(t[0])&&(t[0]=0),QU.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new op,s))}a(JU,"searchTransactionsByTimestamp");function a9(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[zl.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,ZU(e,i))}return Object.fromEntries(r)}a(a9,"searchTransactionsByUsername");function c9(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=s9.equals(e,zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,zl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:_}of d){let E=Number(_);n.has(E)?n.get(E).push(u.toString()):n.set(E,[u.toString()])}}let s=Array.from(n.keys()),i=ZU(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);XU(l,"records",r,d,o),XU(l,"original_records",r,d,o)}return Object.fromEntries(o)}a(c9,"searchTransactionsByHashValues");function XU(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let _=new op(e.operation,e.user_name,i,void 0);_[t]=[c],u.push(_)}}else{let u=new op(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(XU,"loopRecords");function ZU(e,t){let r=[];try{let n=e.dbis[zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new op,i);r.push(o)}}catch(i){i9.warn(i)}return r}catch(n){throw n}}a(ZU,"batchSearchTransactions")});var nv=N(($be,rv)=>{"use strict";var{getSchemaPath:Gbe}=gt(),qbe=ht(),{database:l9}=(Pe(),oe(lt));rv.exports={writeTransaction:u9};async function u9(e,t,r){return l9({database:e,table:t}).transaction(r)}a(u9,"writeTransaction")});var av=N((Kbe,ov)=>{"use strict";var{getSchemaPath:sv}=gt(),iv=ht();ov.exports={flush:d9,resetReadTxn:_9};async function d9(e,t){return(await iv.openEnvironment(sv(e,t),t.toString())).flushed}a(d9,"flush");async function _9(e,t){try{(await iv.openEnvironment(sv(e,t),t.toString())).resetReadTxn()}catch{}}a(_9,"resetReadTxn")});var dv=N((Wbe,uv)=>{"use strict";var{Readable:f9}=require("stream"),{getDatabases:E9}=(Pe(),oe(lt)),{readSync:h9,openSync:p9,createReadStream:cv}=require("fs"),{open:m9}=require("lmdb"),lv=a_(),S9=c_(),{AUDIT_STORE_OPTIONS:T9}=(zi(),oe(_v)),{INTERNAL_DBIS_NAME:g9,AUDIT_STORE_NAME:A9}=Ht();uv.exports=y9;var LR=32768,R9=100;async function y9(e){let t=e.database||e.schema||"data",r=E9()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let d=u.dbisDB,_=m9({noSync:!0,maxDbs:S9.MAX_DBS}),E,f=_.openDB(g9,new lv(!1)),h=d.useReadTransaction(),T=0,m=a(async function(S,y){y.encoding="binary",y.encoder=void 0;let I=_.openDB(S,y),U=d.openDB(S,y);for(let{key:H,version:X,value:Y}of U.getRange({start:null,transaction:h,versions:U.useVersions}))E=I.put(H,Y,X),T++%R9===0&&(await new Promise(V=>setTimeout(V,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:y}of d.getRange({transaction:h,start:!1}))if(s.some(I=>S.startsWith?.(I+"/"))){f.put(S,y);let[,I]=S.split("/"),U=!I,H=new lv(!U,U);await m(S,H)}e.include_audit&&await m(A9,{...T9}),await E;let g=cv(_.path);return g.headers=l(),g.on("close",()=>{h.done(),_.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=p9(o.path);return o.transaction(()=>{let u=Buffer.alloc(LR);h9(c,u,0,LR),o.resetReadTxn();let d=o.useReadTransaction();d.renew();let _=cv(null,{fd:c,start:LR}),E=new f9.from(async function*(){yield u;for await(let f of _)d.openTimer&&(d.openTimer=0),yield f;d.done()}());return E.headers=l(),E});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}a(y9,"getBackup")});var hv=N((zbe,Ev)=>{"use strict";var b9=W(),{handleHDBError:O9}=_e(),N9=QD(),I9=vh(),w9=tR(),C9=IM(),D9=R_(),P9=cR(),L9=ZM(),M9=cU(),U9=N_(),v9=pU(),B9=IU(),H9=LU(),x9=UU(),k9=xU(),F9=KU(),G9=mR(),q9=zU(),$9=tv(),V9=nv(),fv=av(),K9=dv(),MR=class extends N9{static{a(this,"LMDBBridge")}async searchByConditions(t){return v9(t)}async getDataByHash(t){return await P9(t)}async searchByHash(t){return await L9(t)}async getDataByValue(t,r){return await M9(t,r)}async searchByValue(t){return await U9(t)}async createSchema(t){return await C9(t)}async dropSchema(t){return await B9(t)}async createTable(t,r){return await H9(t,r)}async dropTable(t){return await G9(t)}async createAttribute(t){return await I9(t)}async createRecords(t){return await w9(t)}async updateRecords(t){return await x9(t)}async upsertRecords(t){try{return await k9(t)}catch(r){throw O9(r,null,null,b9.ERR,r)}}async deleteRecords(t){return await D9(t)}async dropAttribute(t){return await q9(t)}async deleteAuditLogsBefore(t){return await F9(t)}async readAuditLog(t){return await $9(t)}writeTransaction(t,r,n){return V9.writeTransaction(t,r,n)}flush(t,r){return fv.flush(t,r)}resetReadTxn(t,r){return fv.resetReadTxn(t,r)}getBackup(t){return K9(t)}};Ev.exports=MR});function yv(e){vR=e}function z9(){j9=setInterval(function(){for(let e of UR)if(e.stale){let t=e[Fe]?.url;Tv.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},W9).unref()}var BR,Sv,Tv,gv,Av,Rv,pv,UR,Y9,L_,mv,vR,mc,ap,W9,j9,cp=Ie(()=>{BR=L(cn()),Sv=L(_e()),Tv=L(W());Vs();gv=L(se()),Av=L(M()),Rv=L(te()),pv=100,UR=new Set,Y9=(0,Rv.convertToMS)(gv.get(Av.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3;a(yv,"replicationConfirmation");mc=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),UR.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(UR.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(L_&&!this.overloadChecked&&performance.now()-mv>Y9)throw new Sv.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp||(0,BR.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let _=this.validated;this.validated=this.writes.length;for(let f=_;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let E;for(let f=_;f<this.validated;f++){let h=this.writes[f];h&&(h.before||h.beforeIntermediate)&&(E=!0)}if(E)return(async()=>{try{for(let f=0;f<2;f++){let h;for(let T=_;T<this.validated;T++){let m=this.writes[T];if(!m)continue;let g=m[f===0?"before":"beforeIntermediate"];if(g){let S=g();h?h.push?h.push(S):h=[h,S]:h=S}}h&&await(h.push?Promise.all(h):h)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(_){throw this.abort(),_}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(_=>_);let c=a(_=>{_.commit(r,_.entry,n)},"doWrite"),l=a(()=>{let _=this.writes[o++];if(_)if(_.key){n>0&&(_.entry=_.store.getEntry(_.key));let E=_.store.ifVersion(_.key,_.entry?.version??null,l);s=s||E}else l();else for(let E of this.writes)c(E)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<pv>>n?l():s=this.writes[0].store.transaction(()=>{for(let _ of this.writes)_.entry=_.store.getEntry(_.key),c(_);return!0})),s)return L_||(L_=s,mv=performance.now(),L_.then(()=>{L_=null})),s.then(_=>{if(_){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let E=this.writes[0].store.rootStore.databaseName,f=this.writes[this.writes.length-1];vR&&f&&i.push(vR(E,f.store.getEntry(f.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+pv/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let d={txnTime:r};if(this.next){let _=this.next?.commit(t);if(_?.then)return _?.then(E=>({txnTime:r,next:E}));d.next=_}return d}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},ap=class extends mc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,BR.getNextMonotonicTime)())}getReadTxn(){}},W9=3e4;a(z9,"startMonitoringTxns");z9()});function Dt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new mc;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n[Fe]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({letItLinger:r?.letItLinger});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var bv,Sc=Ie(()=>{bv=L(_i());Vs();cp();a(Dt,"transaction");(0,bv._assignPackageExport)("transaction",Dt);Dt.commit=function(e){let t=(e[Fe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Dt.abort=function(e){let t=(e[Fe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var Lv={};je(Lv,{ResourceBridge:()=>kR});function FR({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 Nv(e,t){let r=yi(e),n=FR(e,r);if(!r)throw new Ks.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},o;Dt(i,()=>new Promise(u=>o=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&up(d)}catch(_){d={message:_.toString()}}return t?{value:{key:u,value:d}}:{value:d}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function yi(e){let t=e.database||e.schema||J9,r=ut()[t];if(!r)throw(0,Ks.handleHDBError)(new Error,Q9.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Iv(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*wv(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var Cv,lp,Ks,Dv,Ys,HR,xR,Pv,Q9,J9,X9,Z9,Ov,kR,Mv=Ie(()=>{"use strict";Cv=L(hv()),lp=L(Wl()),Ks=L(_e());Pe();Dv=L(E_()),Ys=L(M()),HR=L(to()),xR=L(qs()),Pv=L(te());Sc();dp();({HDB_ERROR_MSGS:Q9}=Ks.hdb_errors),J9="data",X9=1e4,Z9=10,kR=class extends Cv.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Ov=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,lp.default)(t,"conditions");if(r)throw(0,Ks.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=yi(t);if(!n)throw new Ks.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:FR(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Ks.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}]}Et({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await yi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=yi(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(u=>{if(!u){let{value:d,version:_}=r.primaryStore.getEntry(o);return i(o,d,_)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){yi(t).dropTable()}createSchema(t){return Ql({database:t.schema,table:null}),HR.signalSchemaChange(new xR.SchemaEventMsg(process.pid,Ys.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await GR(t.schema),HR.signalSchemaChange(new xR.SchemaEventMsg(process.pid,Ys.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,Ov.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,Dv.default)(t),s,i=ut()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(o.replicateTo=t.replicateTo),t.replicatedConfirmation&&(o.replicatedConfirmation=t.replicatedConfirmation),Dt(o,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(E=>E.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let _=d[i.primaryKey],E=_!=null&&await i.get(_,o);if(t.requires_existing&&!E||t.requires_no_existing&&E){u.push(d[i.primaryKey]);continue}E&&(E=up(E));for(let f in d)if(Object.prototype.hasOwnProperty.call(d,f)){let h=d[f];if(typeof h=="function")try{let T=h([[E]]);Array.isArray(T)&&(h=T[0].func_val,d[f]=h)}catch(T){throw T.message+="Trying to set key "+f+" on object"+JSON.stringify(d),T}}if(E)for(let f in E)Object.prototype.hasOwnProperty.call(d,f)||(d[f]=E[f]);await(_==null?i.create(d,o):i.put(d,o)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=ut()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),Dt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return Iv(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=ut()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ks.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:Ys.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),o.push(...d.skipped_hashes),await(0,Pv.async_set_timeout)(Z9),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%X9===0&&await u();return l.length>0&&await u(),s?Iv(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,lp.default)(t,"hashes");if(r)throw r;return Nv(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Nv(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Ys.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,lp.default)(t,"value");if(n)throw n;let s=yi(t);if(!s)throw new Ks.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===Ys.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:FR(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=yi(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){yi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return yi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=yi(t),n={};switch(t.search_type){case Ys.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.operation??o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case Ys.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of wv(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return wv(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(FR,"getSelect");a(Nv,"getRecords");a(yi,"getTable");a(Iv,"createDeleteResponse");a(wv,"groupRecordsInHistory")});var Hn=N((uOe,Uv)=>{"use strict";var{ResourceBridge:e7}=(Mv(),oe(Lv)),t7=se();t7.initSync();var _p;function r7(){return _p||(_p=new e7,_p)}a(r7,"getBridge");Uv.exports=r7()});var xv=N((_Oe,Hv)=>{"use strict";var vv=require("lodash"),M_=require("mathjs"),n7=require("jsonata"),Bv=te();Hv.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?vv.uniqWith(e,vv.isEqual):e,"distinct_array"),searchJSON:s7,mad:U_.bind(null,M_.mad),mean:U_.bind(null,M_.mean),mode:U_.bind(null,M_.mode),prod:U_.bind(null,M_.prod),median:U_.bind(null,M_.median)};function U_(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(U_,"aggregateFunction");function s7(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(Bv.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Bv.isEmpty(this.__ala__.res[r])){let n=n7(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(s7,"searchJSON")});var Fv=N((EOe,kv)=>{"use strict";var nr=require("moment"),qR="YYYY-MM-DDTHH:mm:ss.SSSZZ";nr.suppressDeprecationWarnings=!0;kv.exports={current_date:a(()=>nr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>nr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return nr(e).utc().format("YYYY");case"month":return nr(e).utc().format("MM");case"day":return nr(e).utc().format("DD");case"hour":return nr(e).utc().format("HH");case"minute":return nr(e).utc().format("mm");case"second":return nr(e).utc().format("ss");case"millisecond":return nr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>nr(e).utc().format(qR),"date"),date_format:a((e,t)=>nr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>nr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>nr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=nr(e).utc(),s=nr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>nr().utc().valueOf(),"now"),get_server_time:a(()=>nr().format(qR),"get_server_time"),offset_utc:a((e,t)=>nr(e).utc().utcOffset(t).format(qR),"offset_utc")}});var Vv=N((pOe,$v)=>{"use strict";var i7=require("@turf/area"),o7=require("@turf/length"),a7=require("@turf/circle"),c7=require("@turf/difference"),l7=require("@turf/distance"),u7=require("@turf/boolean-contains"),d7=require("@turf/boolean-equal"),_7=require("@turf/boolean-disjoint"),f7=require("@turf/helpers"),Gv=M(),$e=te(),so=W();$v.exports={geoArea:E7,geoLength:h7,geoCircle:p7,geoDifference:m7,geoDistance:qv,geoNear:S7,geoContains:T7,geoEqual:g7,geoCrosses:A7,geoConvert:R7};function E7(e){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return i7.default(e)}catch(t){return so.trace(t,e),NaN}}a(E7,"geoArea");function h7(e,t){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return o7.default(e,{units:t||"kilometers"})}catch(r){return so.trace(r,e),NaN}}a(h7,"geoLength");function p7(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return a7.default(e,t,{units:r||"kilometers"})}catch(n){return so.trace(n,e,t),NaN}}a(p7,"geoCircle");function m7(e,t){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return c7(e,t)}catch(r){return so.trace(r,e,t),NaN}}a(m7,"geoDifference");function qv(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return l7.default(e,t,{units:r||"kilometers"})}catch(n){return so.trace(n,e,t),NaN}}a(qv,"geoDistance");function S7(e,t,r,n){if($e.isEmpty(e)||$e.isEmpty(t))return!1;if($e.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return qv(e,t,n)<=r}catch(s){return so.trace(s,e,t),!1}}a(S7,"geoNear");function T7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return u7.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(T7,"geoContains");function g7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return d7.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(g7,"geoEqual");function A7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return!_7.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(A7,"geoCrosses");function R7(e,t,r){if($e.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if($e.isEmpty(t))throw new Error("geo_type is required");if($e.isEmpty(Gv.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Gv.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=$e.autoCastJSON(e)),f7[t](e,r)}a(R7,"geoConvert")});var fp=N((SOe,Kv)=>{var Tc=xv(),Gn=Fv(),bi=Vv();Kv.exports=e=>{e.aggr.mad=e.aggr.MAD=Tc.mad,e.aggr.mean=e.aggr.MEAN=Tc.mean,e.aggr.mode=e.aggr.MODE=Tc.mode,e.aggr.prod=e.aggr.PROD=Tc.prod,e.aggr.median=e.aggr.MEDIAN=Tc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Tc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Tc.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Gn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Gn.current_time,e.fn.extract=e.fn.EXTRACT=Gn.extract,e.fn.date=e.fn.DATE=Gn.date,e.fn.date_format=e.fn.DATE_FORMAT=Gn.date_format,e.fn.date_add=e.fn.DATE_ADD=Gn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Gn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Gn.date_diff,e.fn.now=e.fn.NOW=Gn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Gn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Gn.get_server_time,e.fn.getdate=e.fn.GETDATE=Gn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Gn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=bi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=bi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=bi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=bi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=bi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=bi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=bi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=bi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=bi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=bi.geoNear}});var zv=N((TOe,jv)=>{"use strict";var v_=require("lodash"),fn=require("alasql");fn.options.cache=!1;var y7=fp(),Yv=require("clone"),Ep=require("recursive-iterator"),Ue=W(),et=te(),Jl=Hn(),b7=M(),{hdb_errors:O7}=_e(),{getDatabases:Wv}=(Pe(),oe(lt)),N7="IS NULL",Ws="There was a problem performing this search. Please check the logs and try again.";y7(fn);var $R=class{static{a(this,"SQLSearch")}constructor(t,r){if(et.isEmpty(t))throw Ue.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),et.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!et.isEmptyOrZeroLength(n))return Ue.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ue.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ue.error(n),new Error(Ws)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ue.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ue.error(n),new Error(Ws)}if(Object.keys(this.data).length===0)return Ue.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ue.error("Error thrown from processJoins in SQLSearch class method search."),Ue.error(n),new Error(Ws)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ue.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ue.error(n),new Error(Ws)}try{return t=await this._finalSQL(),t}catch(n){throw Ue.error("Error thrown from finalSQL in SQLSearch class method search."),Ue.error(n),new Error(Ws)}}_getColumns(){let t=new Ep(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(Yv(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=v_.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=Wv()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(et.isEmpty(this.statement.where)){Ue.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Ep(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!et.isEmpty(r)&&r.right)if(et.isNotEmptyAndHasValue(r.right.value)){let n=et.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new fn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=et.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new fn.yy.LogicValue({value:i}):n instanceof fn.yy.StringValue&&et.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new fn.yy.NumValue({value:i}))});if(t){Ue.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Ep(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!et.isEmpty(b7.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(et.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(et.isEmptyOrZeroLength(r.left.columnid)||et.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(et.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!et.isEmpty(r.right.value)||!et.isEmpty(r.left.value)?n.add(et.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(et.isEmptyOrZeroLength(this.all_table_attributes)&&et.isEmptyOrZeroLength(this.statement.from)&&et.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&v_.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(et.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);et.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(et.isEmptyOrZeroLength(this.all_table_attributes)&&!et.isEmptyOrZeroLength(this.columns.columns))return t;if(et.isEmptyOrZeroLength(this.all_table_attributes)&&et.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await fn.promise(r)}catch(r){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ue.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(Yv(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(et.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(N7)>-1&&this.tables.forEach(s=>{let i={columnid:Wv()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=v_.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!et.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!et.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await Jl.getDataByHash(c);for(let _ of c.hash_values)d.get(_)&&!this.data[i].__merged_data[_]&&(this.data[i].__merged_data[_]=[...n[i]],this._setMergedHashAttribute(i,_))}catch(d){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(d),new Error(Ws)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let _={...c};_.search_value=d;let E=await Jl.getDataByValue(_);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]):(this.data[i].__merged_data[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,f))}))}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(d),new Error(Ws)}else if(!et.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!et.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let _=0,E=d.length;_<E;_++){let f=d[_];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await Jl.getDataByValue(c,f.operation);if(l)for(let[T]of h)this.data[i].__merged_data[T]||(this.data[i].__merged_data[T]=[...n[i]],this._setMergedHashAttribute(i,T));else for(let[T,m]of h)this.data[i].__merged_data[T]?this._updateMergedAttribute(i,T,s.attribute,m[s.attribute]):(this.data[i].__merged_data[T]=[...n[i]],this._updateMergedAttribute(i,T,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,T))}}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ue.error(d),new Error(Ws)}else try{c.search_attribute=s.attribute,c.search_value="*";let d=await Jl.getDataByValue(c);if(l)for(let[_]of d)this.data[i].__merged_data[_]||(this.data[i].__merged_data[_]=[...n[i]],this._setMergedHashAttribute(i,_));else for(let[_,E]of d)this.data[i].__merged_data[_]?this._updateMergedAttribute(i,_,s.attribute,E[s.attribute]):(this.data[i].__merged_data[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,E[s.attribute]),this._setMergedHashAttribute(i,_))}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ue.error(d),new Error(Ws)}}}_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 fn.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 fn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new fn.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 fn.yy.FuncValue:new fn.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,T=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${T}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${T}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let d="",_="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",_=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${_}`,h=this._convertColumnsToIndexes(f,s);E=await fn.promise(h,t),t=null}catch(f){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ue.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let T=E[f];o.forEach(m=>{T[m.key]!==null&&T[m.key]!==void 0&&m.keys.add(T[m.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),T=v_.difference(h,[...f.keys].map(m=>m.toString()));for(let m=0,g=T.length;m<g;m++){let S=T[m];delete this.data[`${f.schema}_${f.table}`].__merged_data[S]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Ep(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=v_.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw Ue.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ue.error(i),new Error(Ws)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let d in i)o.push(i[d][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await Jl.getDataByHash(c),u=s.columns.length;for(let d=0,_=o.length;d<_;d++){let E=o[d],f=l.get(E);for(let h=0;h<u;h++){let T=s.columns[h],m=f[T]===void 0?null:f[T];this.data[n].__merged_data[E].push(m)}}}}catch(r){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ue.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();Ue.trace(`Final SQL: ${s}`),n=await fn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ue.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ue.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return Ue.error(O7.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ue.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await Jl.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]={...r[s]}),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw Ue.error("There was an error when processing this SQL operation. Check your logs"),Ue.error(o),new Error(Ws)}}return Object.values(Object.values(this.data)[0].__merged_data)}};jv.exports=$R});var Vr=N((AOe,Qv)=>{"use strict";var I7=jD();Qv.exports={searchByConditions:C7,searchByHash:D7,searchByValue:P7,search:L7};var VR=Hn(),{transformReq:KR}=te(),w7=zv();async function C7(e){return KR(e),VR.searchByConditions(e)}a(C7,"searchByConditions");async function D7(e){KR(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of VR.searchByHash(e))r&&t.push(r);return t}a(D7,"searchByHash");async function P7(e){KR(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of VR.searchByValue(e))t.push(r);return t}a(P7,"searchByValue");function L7(e,t){try{let r=new I7(e);r.validate(),new w7(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(L7,"search")});var hp=N((yOe,Jv)=>{"use strict";var M7=Hn();Jv.exports={writeTransaction:U7};function U7(e,t,r){return M7.writeTransaction(e,t,r)}a(U7,"writeTransaction")});var t0=N((NOe,e0)=>{"use strict";var v7=Vr(),B7=ls(),Xv=W(),H7=un(),OOe=hp(),x7=require("clone"),WR=require("alasql"),k7=fp(),Zv=require("util"),F7=Zv.promisify(B7.getTableSchema),G7=Zv.promisify(v7.search),q7=M(),YR=te();k7(WR);e0.exports={update:V7};var $7="There was a problem performing this update. Please check the logs and try again.";async function V7({statement:e,hdb_user:t}){let r=await F7(e.table.databaseid,e.table.tableid),n=K7(e.columns);YR.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=x7(s),c=YR.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=WR.parse(l).statements[0],d=await G7(u),_=Y7(n,d);return W7(o,_,t)}a(V7,"update");function K7(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=WR.compile(`SELECT ${r.expression.toString()} AS [${q7.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Xv.error(t),new Error($7)}}a(K7,"createUpdateRecord");function Y7(e,t){return YR.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Y7,"buildUpdateRecords");async function W7(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await H7.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){Xv.error(`Error delete new_attributes from update response: ${i}`)}return s}a(W7,"updateRecords")});var n0=N((DOe,r0)=>{var j7=require("alasql"),z7=Vr(),Q7=W(),J7=Hn(),zR=require("util"),jR=te(),X7=M(),Z7=ls(),wOe=hp(),COe=un(),eee="record",tee="successfully deleted",ree=zR.callbackify(oee),nee=zR.promisify(z7.search),see=zR.promisify(Z7.getTableSchema);r0.exports={convertDelete:ree};function iee(e){return`${e.deleted_hashes.length} ${eee}${e.deleted_hashes.length===1?"":"s"} ${tee}`}a(iee,"generateReturnMessage");async function oee({statement:e,hdb_user:t}){let r=await see(e.table.databaseid,e.table.tableid);jR.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=jR.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=j7.parse(o).statements[0],l={operation:X7.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await nee(c);let u=await J7.deleteRecords(l);return jR.isEmptyOrZeroLength(u.message)&&(u.message=iee(u)),delete u.txn_time,u}catch(u){throw Q7.error(u),u.hdb_code?u.message:u}}a(oee,"convertDelete")});var c0=N((LOe,a0)=>{"use strict";var aee=eo(),{hdb_errors:s0}=_e(),{getDatabases:i0}=(Pe(),oe(lt));a0.exports={checkSchemaExists:o0,checkSchemaTableExists:cee,schema_describe:aee};async function o0(e){if(!i0()[e])return s0.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(o0,"checkSchemaExists");async function cee(e,t){let r=await o0(e);if(r)return r;if(!i0()[e][t])return s0.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(cee,"checkSchemaTableExists")});var Xl=N((UOe,lee)=>{lee.exports={name:"harperdb",version:"4.4.20",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","enterprise","Fastify","NATS","HarperDB","Harper","clustering","replication","REST","WebSockets","decentralized","server-sent events","document store"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:replication && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc --no-clean --reporter=lcovonly npm run test:security && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:replication && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && npm run test:security && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","test:security":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/security/**/*.js' --config '../unitTests/.mocharc.json'","test:replication":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/replication/**/*.js' --config '../unitTests/.mocharc.json'","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test",format:"prettier .","format:fix":"npm run format -- --write",lint:"eslint .","lint:fix":"npm run lint -- --fix"},dependencies:{"@aws-sdk/client-s3":"3.717.0","@aws-sdk/lib-storage":"3.717.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.10.0","@fastify/compress":"~6.5.0","@fastify/cors":"~9.0.1","@fastify/static":"~7.0.4","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.6.0",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.29.0","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.10.0","gunzip-maybe":"1.4.2","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.2.6",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",moment:"2.30.1","mqtt-packet":"~9.0.0",msgpackr:"1.11.2",nats:"2.19.0",needle:"3.3.1","node-forge":"^1.3.1","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.3",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^1.1.0","serve-static":"2.1.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.24.5","tar-fs":"3.0.6",ulidx:"0.5.0",uuid:"10.0.0","validate.js":"0.13.1",ws:"8.18.0",yaml:"2.7.0"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"20.14.8","@typescript-eslint/eslint-plugin":"^7.18.0","@typescript-eslint/parser":"^7.18.0",axios:"1.7.5",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.24.2",eslint:"^8.57.1","eslint-config-prettier":"^9.1.0","eslint-plugin-sonarjs":"^3.0.1",eventsource:"^2.0.2","graphql-http":"^1.22.3","hook-std":"3.0.0","intercept-stdout":"0.1.2",mkcert:"1.5.1",mocha:"^11.0.1","mocha-teamcity-reporter":"^4.2.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"6.1.3","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"3.3.3",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.7.2",undici:"^6.19.8","why-is-node-still-running":"^1.0.0"},overrides:{alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","segfault-handler":"^1.3.0","utf-8-validate":"^5.0.10"}}});var F_={};je(F_,{addAnalyticsListener:()=>k_,recordAction:()=>mr,recordActionBinary:()=>qn,setAnalyticsEnabled:()=>uee});function uee(e){m0=e}function mr(e,t,r,n,s){if(!m0)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=Sp.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let u=c;o.values=c=new Float32Array(l*2),c.set(u),c.index=l+1}c[l]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},Sp.set(i,o)}pp||dee()}function qn(e,t,r,n,s){mr(!!e,t,r,n,s)}function k_(e){g0.push(e)}function dee(){pp=performance.now(),setTimeout(async()=>{let e=performance.now()-pp;pp=0;let t=[],r={time:Date.now(),period:e,threadId:gc.threadId,metrics:t};for(let[s,i]of Sp){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],d;for(let _ of A0){let E=Math.floor(c*_),f=o[E-1];if(E>l){let h=E-l;if(f===d){let T=u[u.length-1];typeof T=="number"?u[u.length-1]={value:T,count:1+h}:T.count+=h}else u.push(h>1?{value:f,count:h}:f),d=f;l=E}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await R0()}let n=process.memoryUsage();t.push({metric:"memory",threadId:gc.threadId,byThread:!0,...n});for(let s of g0)s(t);Sp=new Map,gc.parentPort?gc.parentPort.postMessage({type:T0,report:r}):O0({report:r})},S0).unref()}async function _ee(e,t=6e4){let r=XR(),n=y0(),s=new Promise(T=>{let m=performance.now();setImmediate(()=>{let g=performance.now();g-m>5e3&&(0,B_.warn)("Unusually high event queue latency on the main thread of "+Math.round(g-m)+"ms"),m=performance.now()}),n.primaryStore.prefetch([1],()=>{let g=performance.now();g-m>5e3&&(0,B_.warn)("Unusually high task queue latency on the main thread of "+Math.round(g-m)+"ms"),T(g-m)})}),i;for(let T of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(T.value?.time){i=T.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],d;for(let{key:T,value:m}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!m)continue;if(o){if(T>o+t)break}else o=T;d=T;let{metrics:g,threadId:S}=m;for(let y of g||[]){let{path:I,method:U,type:H,metric:X,count:Y,total:V,distribution:ne,threads:Q,...de}=y;Y||(Y=1);let j=X+(I?"-"+I:"");U!==void 0&&(j+="-"+U),H!==void 0&&(j+="-"+H);let ae=c.get(j);if(ae){if(ae.threads){let Ne=ae.threads[S];if(Ne)ae=Ne;else{ae.threads[S]={...de};continue}}ae.count||(ae.count=1);let Oe=ae.count;for(let Ne in de){let Me=de[Ne];typeof Me=="number"&&(ae[Ne]=(ae[Ne]*Oe+Me*Y)/(Oe+Y))}ae.count+=Y,V>=0&&(ae.total+=V,ae.ratio=ae.total/ae.count)}else ae={period:t,...y},delete ae.distribution,c.set(j,ae),ae.byThread&&(ae.threads=[],ae.threads[S]={...de},u.push(ae));if(ne){ne=ne.map(Ne=>typeof Ne=="number"?{value:Ne,count:1}:Ne);let Oe=l.get(j);Oe?Oe.push(...ne):l.set(j,ne)}}await R0()}for(let T of u){let{path:m,method:g,type:S,metric:y,count:I,total:U,distribution:H,threads:X,...Y}=T;X=X.filter(V=>V);for(let V in Y){if(typeof T[V]!="number")continue;let ne=0;for(let Q of X){let de=Q[V];typeof de=="number"&&(ne+=de)}T[V]=ne}T.count=X.length,delete T.threads,delete T.byThread}for(let[T,m]of l){let g=c.get(T);m.sort((Ne,Me)=>Ne.value>Me.value?1:-1);let S=g.count-1,y=[],I=0,U=0,H;for(let Ne of A0){let Me=S*Ne;for(;I<Me;)H=m[U++],I+=H.count,U===1&&I--;let Gr=m[U>1?U-2:0];H||(H=m[0]),y.push(H.value-(H.value-Gr.value)*(I-Me)/H.count)}let[X,Y,V,ne,Q,de,j,ae,Oe]=y;Object.assign(g,{p1:X,p10:Y,p25:V,median:ne,p75:Q,p90:de,p95:j,p99:ae,p999:Oe})}let _;for(let[T,m]of c)m.id=(0,mp.getNextMonotonicTime)(),m.time=d,n.primaryStore.put(m.id,m,{append:!0}).then(g=>{g||n.primaryStore.put(m.id,m)}),_=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(_||h*10>f){let T=(0,mp.getNextMonotonicTime)(),m={id:T,metric:"main-thread-utilization",idle:f-l0,active:h-u0,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(T,m,{append:!0}).then(g=>{g||n.primaryStore.put(T,m)})}l0=f,u0=h}async function d0(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function XR(){return _0||(_0=Et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function y0(){return f0||(f0=Et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function hee(){b0=!0;let e=(0,x_.get)(JR.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await _ee(S0,e),await d0(XR(),fee),await d0(y0(),Eee)},Math.min(e/2,2147483647)).unref()}function O0(e,t){let r=e.report;r.threadId=t?.threadId||gc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(E0+=n.mean*n.count);r.totalBytesProcessed=E0,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(h0.get(t))}),h0.set(t,t.performance.eventLoopUtilization())),r.id=(0,mp.getNextMonotonicTime)(),XR().primaryStore.put(r.id,r),b0||hee(),pee&&(N0=See(r))}async function See(e){if(await N0,!Xo){let r=(0,H_.dirname)((0,B_.getLogFilePath)());try{Xo=await(0,QR.open)((0,H_.join)(r,"analytics.log"),"r+")}catch{Xo=await(0,QR.open)((0,H_.join)(r,"analytics.log"),"w+")}}let t=(await Xo.stat()).size;if(t>mee){let r=Buffer.alloc(t);await Xo.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Xo.write(r,{position:0}),await Xo.truncate(r.length),t=r.length}await Xo.write(JSON.stringify(e)+`
|
|
12
12
|
`,t)}var gc,p0,B_,H_,QR,mp,x_,JR,Sp,m0,pp,S0,T0,g0,A0,l0,u0,R0,fee,Eee,_0,f0,b0,E0,h0,pee,N0,Xo,mee,Oi=Ie(()=>{gc=require("worker_threads"),p0=L(dt());Pe();B_=L(W()),H_=require("path"),QR=require("fs/promises"),mp=L(cn()),x_=L(se()),JR=L(M());qr();(0,x_.initSync)();Sp=new Map,m0=(0,x_.get)(JR.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(uee,"setAnalyticsEnabled");a(mr,"recordAction");it.recordAnalytics=mr;a(qn,"recordActionBinary");pp=0,S0=1e3,T0="analytics-report",g0=[];a(k_,"addAnalyticsListener");A0=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(dee,"sendAnalytics");a(_ee,"aggregation");l0=0,u0=0,R0=a(()=>new Promise(setImmediate),"rest");a(d0,"cleanup");fee=36e5,Eee=31536e6;a(XR,"getRawAnalyticsTable");a(y0,"getAnalyticsTable");(0,p0.setChildListenerByType)(T0,O0);a(hee,"startScheduledTasks");E0=0,h0=new Map,pee=!1;a(O0,"recordAnalytics");mee=1e6;a(See,"logAnalytics")});var ny=N((WOe,x0)=>{"use strict";var{decode:Tee}=require("msgpackr"),{isMainThread:VOe,parentPort:KOe,threadId:YOe}=require("worker_threads"),Ap=sr(),Zl=Ct(),ty=M(),jr=W(),ey=se(),gee=M(),{onMessageByType:Aee}=dt(),D0=Zi(),{recordAction:I0,recordActionBinary:Ree}=(Oi(),oe(F_)),{publishToStream:yee}=Ap,{ConsumerEvents:w0}=require("nats"),bee=Vr(),{promisify:Oee}=require("util"),P0=Oee(setTimeout),Rp=1e4,yp,gp,Nee,Iee,L0,G_=new Map,eu=new Map;x0.exports={initialize:M0,ingestConsumer:ry,setSubscription:wee,setIgnoreOrigin:Pee,getDatabaseSubscriptions:Dee,updateConsumer:U0};async function M0(){Aee(ty.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await U0(n)}),L0=!0,jr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await Ap.getNATSReferences();yp=e,gp=e.info.server_name,Nee=t,Iee=r}a(M0,"initialize");async function U0(e){if(e.status==="start"){let{js:t,jsm:r}=await v0(e.node_domain_name);ry(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=G_.get(e.stream_name+e.node_domain_name);t&&(jr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),G_.set(e.stream_name+e.node_domain_name,"close")),eu.get(e.node_domain_name)==="failed"&&eu.set(e.node_domain_name,"close")}}a(U0,"updateConsumer");var bp=new Map;function wee(e,t,r){let n=bp.get(e);n||bp.set(e,n=new Map),n.set(t,r),L0||M0().then(Cee)}a(wee,"setSubscription");async function Cee(){let e=await bee.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Zl.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await v0(r),!n))break;let{schema:o,table:c}=i,l=D0.createNatsTableStreamName(o,c);ry(l,n,s,r)}}}a(Cee,"accessConsumers");async function v0(e){let t,r,n=1;for(;!r;)try{t=await yp.jetstream({domain:e}),r=await yp.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(eu.get(e)==="close")break;eu.set(e,"failed"),n%10===1&&jr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<Rp?n++*100:Rp;await P0(i)}return{js:t,jsm:r}}a(v0,"connectToRemoteJS");function Dee(){return bp}a(Dee,"getDatabaseSubscriptions");var B0;function Pee(e){B0=e}a(Pee,"setIgnoreOrigin");var H0=100,C0=new Array(H0),Tp=0;async function ry(e,t,r,n){let{connection:s}=await Ap.getNATSReferences();yp=s,gp=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,gp),jr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(eu.get(n)==="close")break;o%10===1&&jr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(jr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await Ap.createConsumer(r,e,gp,new Date(Date.now()).toISOString()));let d=o++*100<Rp?o++*100:Rp;await P0(d)}let c=!1,l;for(;!c;){if(G_.get(e+n)==="close"||eu.get(n)==="close"){G_.delete(e+n),c=!0;continue}l=await i.consume({max_messages:ey.get(ty.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),G_.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===w0.ConsumerDeleted&&(await l.close(),c=!0),d.type===w0.HeartbeatsMissed){let _=d.data;jr.trace(`${_} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),_===100&&(jr.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let d of l)await C0[Tp],C0[Tp]=Lee(d).catch(_=>{jr.error(_)}),++Tp>=H0&&(Tp=0)}catch(d){d.message==="consumer deleted"?(jr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):jr.error("Error consuming clustering ingest, restarting consumer",d)}}}a(ry,"ingestConsumer");async function Lee(e){let t=Tee(e.data);I0(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),jr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=ey.get(ty.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Zl.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Zl.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Zl.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!B0),Ree(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Zl.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:d,hash_values:_,__origin:E,expiresAt:f}=t;jr.trace("processing message:",o,c,u,(d?"records: "+d.map(U=>U?.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),jr.trace(`messageProcessor nats msg id: ${e.headers.get(Zl.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=_);let T=new Promise(U=>h=U),{timestamp:m,user:g,node_name:S}=E||{},y=bp.get(c)?.get(u);if(!y)throw new Error(`Missing table for replication message: ${u}`);if(o==="define_schema")t.type=o,t.onCommit=h,y.send(t);else if(d.length===1&&!l)y.send({type:ZR(o),value:d[0],id:_?.[0],expiresAt:f,timestamp:m,table:u,onCommit:h,user:g,nodeName:S});else{let U=d.map((H,X)=>({type:ZR(o),value:H,expiresAt:f,id:_?.[X],table:u}));for(;l;)U.push({type:ZR(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;y.send({type:"transaction",writes:U,table:u,timestamp:m,onCommit:h,user:g,nodeName:S})}ey.get(gee.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&yee(e.subject.split(".").slice(0,-1).join("."),D0.createNatsTableStreamName(c,u),e.headers,e.data),await T;let I=Date.now()-m;m&&I0(I,"replication-latency",e.subject,o,"ingest")}catch(o){jr.error(o)}e.ack()}a(Lee,"messageProcessor");function ZR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(ZR,"convertOperation")});var sr=N((eNe,tB)=>{"use strict";var br=se();br.initSync();var Mee=require("fs-extra"),Uee=require("semver"),V_=require("path"),{monotonicFactory:vee}=require("ulidx"),F0=vee(),Bee=require("util"),G0=require("child_process"),Hee=Bee.promisify(G0.exec),xee=G0.spawn,Dr=Ct(),Je=M(),Op=te(),js=W(),Np=Zi(),kee=hp(),q_=wt(),{broadcast:Fee,onMessageByType:Gee,getWorkerIndex:qee}=dt(),{isMainThread:q0}=require("worker_threads"),{Encoder:$ee,decode:ay}=require("msgpackr"),$0=new $ee,{isEmpty:bc}=Op,V0=dn(),zOe=48*36e11;q0&&Gee(Je.ITC_EVENT_TYPES.RESTART,()=>{zr=void 0,yc=void 0});var{connect:Vee,StorageType:Kee,RetentionPolicy:Yee,AckPolicy:cy,DeliverPolicy:ly,DiscardPolicy:Wee,NatsConnection:QOe,JetStreamManager:JOe,JetStreamClient:XOe,StringCodec:ZOe,JSONCodec:jee,createInbox:uy,headers:zee,ErrorCode:k0}=require("nats"),{PACKAGE_ROOT:Qee}=M(),Jee=Xl(),{recordAction:Xee}=(Oi(),oe(F_)),K0=jee(),Zee="clustering",ete=Jee.engines[Dr.NATS_SERVER_NAME],tte=V_.join(Qee,"dependencies"),oy=V_.join(tte,`${process.platform}-${process.arch}`,Dr.NATS_BINARY_NAME),sy,iy,$_,Ac,Rc;tB.exports={runCommand:Y0,checkNATSServerInstalled:rte,createConnection:dy,getConnection:K_,getJetStreamManager:Y_,getJetStream:j0,getNATSReferences:Ni,getServerList:ste,createLocalStream:_y,listStreams:z0,deleteLocalStream:ite,getServerConfig:tu,listRemoteStreams:ote,viewStream:ate,viewStreamIterator:cte,publishToStream:lte,request:_te,reloadNATS:fy,reloadNATSHub:fte,reloadNATSLeaf:Ete,extractServerName:dte,requestErrorHandler:hte,createLocalTableStream:Z0,createTableStreams:Ste,purgeTableStream:eB,purgeSchemaTableStreams:Tte,getStreamInfo:gte,updateLocalStreams:Rte,closeConnection:nte,getJsmServerName:Ip,addNatsMsgHeader:Q0,clearClientCache:W0,updateRemoteConsumer:pte,createConsumer:J0,updateConsumerIterator:mte};async function Y0(e,t=void 0){let{stdout:r,stderr:n}=await Hee(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
13
13
|
`,""));return r.replace(`
|
|
14
14
|
`,"")}a(Y0,"runCommand");async function rte(){try{await Mee.access(oy)}catch{return!1}let e=await Y0(`${oy} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Uee.eq(t,ete)}a(rte,"checkNATSServerInstalled");async function dy(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await V0.getClusterUser();if(bc(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}js.trace("create nats connection called");let i=await Vee({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:br.get(Je.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:br.get(Je.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:br.get(Je.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),js.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&js.error("Error with Nats client connection, connection closed",o),i===zr&&W0()}),i}a(dy,"createConnection");function W0(){zr=void 0,Ac=void 0,Rc=void 0,yc=void 0}a(W0,"clearClientCache");async function nte(){zr&&(await zr.drain(),zr=void 0,Ac=void 0,Rc=void 0,yc=void 0)}a(nte,"closeConnection");var zr,yc;async function K_(){return yc||(yc=dy(br.get(Je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),zr=await yc),zr||yc}a(K_,"getConnection");async function Y_(){if(Ac)return Ac;bc(zr)&&await K_();let{domain:e}=tu(Je.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(bc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ac=await zr.jetstreamManager({domain:e,timeout:6e4}),Ac}a(Y_,"getJetStreamManager");async function j0(){if(Rc)return Rc;bc(zr)&&await K_();let{domain:e}=tu(Je.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(bc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Rc=zr.jetstream({domain:e,timeout:6e4}),Rc}a(j0,"getJetStream");async function Ni(){let e=zr||await K_(),t=Ac||await Y_(),r=Rc||await j0();return{connection:e,jsm:t,js:r}}a(Ni,"getNATSReferences");async function ste(e){let t=br.get(Je.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await V0.getClusterUser(),s=await dy(t,r,n),i=uy(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of o){let _=K0.decode(d.data);_.response_time=Date.now()-l,c.push(_)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await Op.async_set_timeout(e),await o.drain(),await s.close(),await u,c}a(ste,"getServerList");async function _y(e,t){let{jsm:r}=await Ni(),n=br.get(Je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=br.get(Je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=br.get(Je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Kee.File,retention:Yee.Limits,subjects:t,discard:Wee.Old,max_msgs:s,max_bytes:i,max_age:n})}a(_y,"createLocalStream");async function z0(){let{jsm:e}=await Ni(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(z0,"listStreams");async function ite(e){let{jsm:t}=await Ni();await t.streams.delete(e)}a(ite,"deleteLocalStream");async function ote(e){let{connection:t}=await Ni(),r=[],n=uy(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(K0.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(ote,"listRemoteStreams");async function ate(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Ni(),i=F0(),o={durable_name:i,ack_policy:cy.Explicit};t&&(o.deliver_policy=ly.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let _=ay(d.data),E={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:_};if(d.headers&&(E.origin=d.headers.get(Dr.MSG_HEADERS.ORIGIN)),u.push(E),d.ack(),d.info.pending===0)break}return await c.delete(),u}a(ate,"viewStream");async function*cte(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Ni(),i=F0(),o={durable_name:i,ack_policy:cy.Explicit};t&&(o.deliver_policy=ly.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let d=ay(u.data);d[0]||(d=[d]);for(let _ of d){let E={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:_};u.headers&&(E.origin=u.headers.get(Dr.MSG_HEADERS.ORIGIN)),yield E}if(u.ack(),u.info.pending===0)break}await c.delete()}a(cte,"viewStreamIterator");async function lte(e,t,r,n){js.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=Q0(n,r);let{js:s}=await Ni(),i=await Ip(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:$0.encode(n);try{js.trace(`publishToStream publishing to subject: ${o}`),Xee(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return X0(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){js.trace(`publishToStream creating stream: ${t}`);let d=o.split(".");d[2]="*",await _y(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(lte,"publishToStream");function Q0(e,t){t===void 0&&(t=zee());let r=br.get(Je.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Dr.MSG_HEADERS.ORIGIN)&&r&&t.append(Dr.MSG_HEADERS.ORIGIN,r),t}a(Q0,"addNatsMsgHeader");function tu(e){e=e.toLowerCase();let t=V_.join(br.get(Je.CONFIG_PARAMS.ROOTPATH),Zee);if(e===Je.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return bc(iy)&&(iy={port:q_.getConfigFromFile(Je.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:q_.getConfigFromFile(Je.CONFIG_PARAMS.CLUSTERING_NODENAME)+Dr.SERVER_SUFFIX.HUB,config_file:Dr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:V_.join(t,Dr.PID_FILES.HUB),hdb_nats_path:t}),iy;if(e===Je.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return bc(sy)&&(sy={port:q_.getConfigFromFile(Je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:q_.getConfigFromFile(Je.CONFIG_PARAMS.CLUSTERING_NODENAME)+Dr.SERVER_SUFFIX.LEAF,config_file:Dr.NATS_CONFIG_FILES.LEAF_SERVER,domain:q_.getConfigFromFile(Je.CONFIG_PARAMS.CLUSTERING_NODENAME)+Dr.SERVER_SUFFIX.LEAF,pid_file_path:V_.join(t,Dr.PID_FILES.LEAF),hdb_nats_path:t}),sy;js.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(tu,"getServerConfig");async function J0(e,t,r,n){try{await e.consumers.add(t,{ack_policy:cy.Explicit,durable_name:r,deliver_policy:ly.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(J0,"createConsumer");async function ute(e,t,r){await e.consumers.delete(t,r)}a(ute,"removeConsumer");function dte(e){return e.split(".")[1]}a(dte,"extractServerName");async function _te(e,t,r=6e4,n=uy()){if(!Op.isObject(t))throw new Error("data param must be an object");let s=$0.encode(t),{connection:i}=await Ni(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return ay(c.data)}a(_te,"request");function fy(e){return new Promise(async(t,r)=>{let n=xee(oy,["--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(fy,"reloadNATS");async function fte(){let{pid_file_path:e}=tu(Je.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await fy(e)}a(fte,"reloadNATSHub");async function Ete(){let{pid_file_path:e}=tu(Je.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await fy(e)}a(Ete,"reloadNATSLeaf");function hte(e,t,r){let n;switch(e.code){case k0.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case k0.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(hte,"requestErrorHandler");async function pte(e,t){let r=t+Dr.SERVER_SUFFIX.LEAF,{connection:n}=await Ni(),{jsm:s}=await bte(r),{schema:i,table:o}=e,c=Np.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await X0(async()=>{if(e.subscribe===!0)await J0(s,c,n.info.server_name,l);else try{await ute(s,c,n.info.server_name)}catch(u){js.trace(u)}})}a(pte,"updateRemoteConsumer");async function mte(e,t,r,n){let s=Np.createNatsTableStreamName(e,t),i=r+Dr.SERVER_SUFFIX.LEAF,o={type:Je.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!q0&&qee()<br.get(Je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=ny();await c(o)}await Fee(o),n==="stop"&&await Op.async_set_timeout(1e3)}a(mte,"updateConsumerIterator");function X0(e){return kee.writeTransaction(Je.SYSTEM_SCHEMA_NAME,Je.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(X0,"exclusiveLock");async function Z0(e,t){let r=Np.createNatsTableStreamName(e,t),n=await Ip(),s=Ate(e,t,n);await _y(r,[s])}a(Z0,"createLocalTableStream");async function Ste(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await Z0(n,s)}}a(Ste,"createTableStreams");async function eB(e,t,r=void 0){if(br.get(Je.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=Np.createNatsTableStreamName(e,t),{domain:s}=tu(Je.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await K_()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")js.warn(n);else throw n}}a(eB,"purgeTableStream");async function Tte(e,t){if(br.get(Je.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await eB(e,t[r])}a(Tte,"purgeSchemaTableStreams");async function gte(e){return(await Y_()).streams.info(e)}a(gte,"getStreamInfo");function Ate(e,t,r){return`${Dr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Ate,"createSubjectName");async function Ip(){if($_)return $_;if($_=(await Y_())?.nc?.info?.server_name,$_===void 0)throw new Error("Unable to get jetstream manager server name");return $_}a(Ip,"getJsmServerName");async function Rte(){let e=await Y_(),t=await Ip(),r=await z0();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=yte(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");js.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}a(Rte,"updateLocalStreams");function yte(e){let{config:t}=e,r=!1,n=br.get(Je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=br.get(Je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=br.get(Je.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(yte,"updateStreamLimits");async function bte(e){let t,r;try{t=await zr.jetstream({domain:e}),r=await zr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw js.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(bte,"connectToRemoteJS")});var Oc=N(Cp=>{var wp=W();for(let e of["trace","debug","info","warn","error","fatal","notify"])wp.logsAtLevel(e)&&(Cp[e]=wp[e]);Cp.loggerWithTag=e=>wp.loggerWithTag(e,!0);Cp.setLogLevel=wp.setLogLevel});function Ey(e){let t=e.get(Dp),r=t?(0,ru.unpack)(t):null;r||(r={remoteNameToId:{}});let n=ot(),s=!1;r.nodeName=ot();let i=r.remoteNameToId;if(i[n]!==0){let o=0,c;for(let l in i){let u=i[l];u===0?c=l:u>o&&(o=u)}if(c){o++,i[c]=o;let l=[Symbol.for("seq"),o];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:j_(e)??1,nodes:[]})})}i[n]=0,e.putSync(Dp,(0,ru.pack)(r))}return r}function W_(e){return Ey(e).remoteNameToId}function nB(e,t,r){let n=Ey(r),s=n.remoteNameToId,i=new Map,o=!1;for(let c in t){let l=t[c],u=s[c];if(u==null){let d=0;for(let _ in s){let E=s[_];E>d&&(d=E)}u=d+1,s[c]=u,o=!0}i.set(l,u)}return o&&r.putSync(Dp,(0,ru.pack)(n)),i}function Pp(e,t){let r=Ey(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let o in n){let c=n[o];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(Dp,(0,ru.pack)(r))}return rB.info?.("The remote node name map",e,n,s),s}var rB,ru,Dp,hy=Ie(()=>{rB=L(Oc());us();ru=require("msgpackr"),Dp=Symbol.for("remote-ids");a(Ey,"getIdMappingRecord");a(W_,"exportIdMapping");a(nB,"remoteToLocalNodeId");a(Pp,"getIdOfRemoteNode")});var Zo,py=Ie(()=>{Zo=class{constructor(t){this.error=t}static{a(this,"ErrorResource")}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var oB={};je(oB,{Resources:()=>Lp,keyArrayToString:()=>nu,resetResources:()=>Ote,resources:()=>Ii});function Ote(){return Ii=new Lp}function nu(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var sB,iB,Lp,Ii,su=Ie(()=>{Sc();py();sB=L(W()),iB=L(_e()),Lp=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s){let c=new iB.ServerError(`Conflicting paths for ${t}`);sB.default.error(c),i.Resource=new Zo(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),l=this.get(c);if(!l&&c.indexOf(".")>-1){let u=c.split(".");l=this.get(u[0])}if(l&&(!r||l.exportTypes?.[r]!==!1)){if(l.relativeURL=t.slice(n),!l.hasSubPaths)return l;s=l}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),!s&&o.indexOf(".")>-1&&(s=this.get(o.split(".")[0])),s&&(!r||s.exportTypes?.[r]!==!1)?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(!r||s.exportTypes?.[r]!==!1)&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return Dt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(Ote,"resetResources");a(nu,"keyArrayToString")});function Ty(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=cB,Nte(e.primaryStore,e.auditStore)):(c=aB,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{lB(aB[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[o];u||(u=l[o]=new Map,u.envs=l,u.tableId=o,u.store=e.primaryStore),t=nu(t);let d=new Sy(r);d.startTime=n;let _=u.get(t);return _?_.push(d):(u.set(t,_=[d]),_.tables=u,_.key=t),d.subscriptions=_,d}function lB(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),uB(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=xt(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=nu(c),u=0;do{let d=o.get(l);if(d){for(let E of d)if(!(u>0&&!(E.includeDescendants&&!(E.onlyChildren&&u>1)))){if(E.startTime>=n){(0,my.info)("omitting",c,E.startTime,n);continue}try{let f;E.supportsTransactions&&E.txnInProgress!==i.version&&(f=!0,E.txnInProgress||(r?r.push(E):r=[E]),E.txnInProgress=i.version),E.listener(c,i,n,f)}catch(f){console.error(f),(0,my.info)(f)}}}if(l==null)break;let _=l.lastIndexOf?.("/",l.length-2);_>-1?l=l.slice(0,_):l=null,u++}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function Nte(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let l=cB[s];if(!l)return;let u=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{lB(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function uB(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function dB(e){return e.nextTransaction||(Ty({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),uB(e)),e.nextTransaction}var my,aB,cB,Sy,gy=Ie(()=>{my=L(W());Ll();su();zi();aB=Object.create(null),cB=Object.create(null);a(Ty,"addSubscription");Sy=class extends Un{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(lB,"notifyFromTransactionData");a(Nte,"listenToCommits");a(uB,"nextTransaction");a(dB,"whenNextTransaction")});var mB={};je(mB,{commits_awaiting_replication:()=>au,getHDBNodeTable:()=>Sr,iterateRoutes:()=>Q_,shouldReplicateToNode:()=>z_,subscribeToNodeUpdates:()=>cu});function Sr(){return _B||(_B=Et({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function cu(e){Sr().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;pB.debug?.("adding node",n,"on node",ot()," on process",process.pid),server.nodes=server.nodes.filter(s=>s.name!==n),r.type==="put"&&n!==ot()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r)),(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function z_(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&Sr().primaryStore.get(ot())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function Ite(){cu(e=>{ea({},(t,r)=>{let n=e.name,s=fB.get(n);if(s||fB.set(n,s=new Map),s.has(r))return;let i;for(let o in t)if(i=t[o].auditStore,i)break;if(i){let o=new Float64Array(i.getUserSharedBuffer(["replicated",r,n],new ArrayBuffer(8),{callback:a(()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:d}of au.get(r)||[])u>l&&u<=c&&d();o.lastTime=c},"callback")}));o.lastTime=0,s.set(r,o)}})})}function*Q_(e){for(let t of e.routes||[]){let r=t.url,n;if(typeof t=="string"?t.includes("://")?r=t:n=t:n=t.hostname??t.host,n&&!r){let s=iu.default.get(ou.CONFIG_PARAMS.REPLICATION_SECUREPORT)??(!iu.default.get(ou.CONFIG_PARAMS.REPLICATION_PORT)&&iu.default.get(ou.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||iu.default.get(ou.CONFIG_PARAMS.REPLICATION_PORT)||iu.default.get(ou.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){EB.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,start_time:t.startTime}}}var EB,hB,iu,ou,pB,_B,fB,au,lu=Ie(()=>{Pe();us();cp();EB=require("worker_threads"),hB=L(_e()),iu=L(se()),ou=L(M()),pB=L(Oc());server.nodes=[];a(Sr,"getHDBNodeTable");a(cu,"subscribeToNodeUpdates");a(z_,"shouldReplicateToNode");fB=new Map;yv((e,t,r)=>{if(r>server.nodes.length)throw new hB.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);au||(au=new Map,Ite());let n=au.get(e);return n||(n=[],au.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(Ite,"startSubscriptionToReplications");a(Q_,"iterateRoutes")});var RB={};je(RB,{connectedToNode:()=>Nc,disconnectedFromNode:()=>_u,ensureNode:()=>oo,requestClusterStatus:()=>AB,startOnMainThread:()=>Ry});async function Ry(e){let t=0,r=ut();for(let i of Object.getOwnPropertyNames(r)){let o=r[i];for(let c in o){let l=o[c];if(l.auditStore){Mp.set(i,j_(l.auditStore));break}}}wi.whenThreadsStarted.then(async()=>{let i=[];for await(let o of r.system.hdb_nodes.search([]))i.push(o);for(let o of Q_(e))try{let c=!o.subscriptions;if(c){let u=ot();Sr().primaryStore.get(u)===void 0&&await oo(u,{name:u,url:e.url??ta(),replicates:!0})}let l=o.trusted!==!1;if(c&&o.replicates==null&&(o.replicates=!0),i.find(u=>u.url===o.url))continue;s(o)}catch(c){console.error(c)}cu(s)});let n;function s(i,o=i?.name){let c=ot()&&o===ot()||ta()&&i?.url===ta();if(c){let _=!!i?.replicates;if(n!==void 0&&n!==_)for(let E of Sr().search([]))E.replicates&&E.name!==o&&s(E,E.name);n=_}if(_t.trace("Setting up node replication for",i),!i){for(let[_,E]of io){let f;for(let[h,{worker:T,nodes:m}]of E){let g=m[0];if(g&&g.name==o){f=!0;for(let[S,{worker:y}]of E)E.delete(S),_t.warn("Node was deleted, unsubscribing from node",o,S,_),y?.postMessage({type:"unsubscribe-from-node",node:o,database:S,url:_});break}}if(f){io.get(_).iterator.remove(),io.delete(_);return}}return}if(c)return;if(!i.url){_t.info(`Node ${i.name} is missing url`);return}let l=io.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(_t.info(`Added node ${i.name} at ${i.url} for process ${ot()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[_,E]of uu)if(i.url===E.url){uu.delete(_);break}uu.set(i.name,i)}let u=ut();if(l||(l=new Map,io.set(i.url,l)),l.iterator=ea(e,(_,E,f)=>{f?d(E,!0):d(E,!1)}),i.subscriptions)for(let _ of i.subscriptions){let E=_.database||_.schema;u[E]||(_t.warn(`Database ${E} not found for node ${i.name}, making a subscription anyway`),d(E,!1))}function d(_,E){_t.trace("Setting up replication for database",_,"on node",i.name);let f=l.get(_),h,T=[{replicateByDefault:E,...i}];Mp.has(_)&&(T.push({replicateByDefault:E,name:ot(),start_time:Mp.get(_),end_time:Date.now(),replicates:!0}),Mp.delete(_));let m=z_(i,_),g=wi.workers.filter(S=>S.name==="http");if(f?(h=f.worker,f.nodes=T):m&&(t=t%g.length,h=g[t++],l.set(_,{worker:h,nodes:T,url:i.url}),h?.on("exit",()=>{l.get(_)?.worker===h&&(l.delete(_),d(_,E))})),m)setTimeout(()=>{let S={type:"subscribe-to-node",database:_,nodes:T};h?h.postMessage(S):du(S)},wte);else{_t.info("Node no longer should be used, unsubscribing from node",i.replicates,!!u[_],Sr().primaryStore.get(ot())?.replicates),Sr().primaryStore.get(ot())?.replicates||(n=!1);let S={type:"unsubscribe-from-node",database:_,url:i.url,name:i.name};h?h.postMessage(S):vp(S)}}a(d,"onDatabase")}a(s,"onNodeUpdate"),_u=a(function(i){try{_t.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let o=Array.from(uu.keys()),c=o.sort(),l=c.indexOf(i.name||zs(i.url));if(l===-1){_t.warn("Disconnected node not found in node map",i.name,o);return}let u=io.get(i.url),d=u?.get(i.database);if(!d){_t.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished)return;let _=d.nodes[0];if(!(_.replicates===!0||_.replicates?.sends||_.subscriptions?.length))return;let E=(l+1)%c.length;for(;l!==E;){let f=c[E],h=uu.get(f);u=io.get(h.url);let T=u?.get(i.database);if(!T){E=(E+1)%c.length;continue}let{worker:m,nodes:g}=T,S=!1;for(let y of d.nodes){if(g.some(I=>I.name===y.name)){_t.info(`Disconnected node is already failing over to ${f} for ${i.database}`);continue}g.push(y),S=!0}if(!S){_t.info(`Disconnected node ${i.name} has no nodes to fail over to ${f}`);return}d.redirectingTo=T,_t.info(`Failing over ${i.database} from ${i.name} to ${f}`),m?m.postMessage({type:"subscribe-to-node",database:i.database,nodes:g}):du({database:i.database,nodes:g});return}_t.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(o){_t.error("Error failing over node",o)}},"disconnectedFromNode"),Nc=a(function(i){let o=io.get(i.url),c=o?.get(i.database);if(!c){_t.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,o);return}if(c.connected=!0,c.latency=i.latency,c.catchingUpFrom=i.lastSendTime,c.redirectingTo){let{worker:l,nodes:u}=c.redirectingTo,d=u.find(_=>_.name===i.name);c.redirectingTo=null,d&&(u.splice(u.indexOf(d),1),l?l.postMessage({type:"subscribe-to-node",database:i.database,nodes:u}):du({database:i.database,nodes:u}))}},"connectedToNode"),(0,wi.onMessageByType)("disconnected-from-node",_u),(0,wi.onMessageByType)("connected-to-node",Nc),(0,wi.onMessageByType)("request-cluster-status",AB)}function AB(e,t){let r=[];for(let[n,s]of uu)try{let i=io.get(s.url);_t.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:d,nodes:_,latency:E,catchingUpFrom:f}]of i)o.push({database:l,connected:d,latency:E,catching_up_from:f?new Date(f).toISOString():"up-to-date",thread_id:u?.threadId,nodes:_.map(h=>h.name)});let c=(0,Ay.cloneDeep)(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){_t.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function oo(e,t){let r=Sr();e=e??zs(t.url),t.name=e;try{if(t.ca){let s=new gB.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subject_alt_name:s.subjectAltName,serial_number:s.serialNumber,valid_from:s.validFrom,valid_to:s.validTo}}}catch(s){_t.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(_t.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.put(t);else{t.replicates&&!SB.default.get(TB.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=(0,Ay.cloneDeep)(n[s]);for(let c of t[s]){let l=!1;for(let u of o)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...o,...i];break}_t.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var wi,Up,_t,Ay,SB,TB,gB,wte,io,_u,Nc,uu,Mp,J_=Ie(()=>{Pe();wi=L(dt());us();Up=require("worker_threads");lu();_t=L(W()),Ay=require("lodash"),SB=L(se()),TB=L(M()),gB=require("crypto"),wte=200,io=new Map,uu=new Map,Mp=new Map;a(Ry,"startOnMainThread");a(AB,"requestClusterStatus");Up.parentPort&&(_u=a(e=>{Up.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Nc=a(e=>{Up.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,wi.onMessageByType)("subscribe-to-node",e=>{du(e)}),(0,wi.onMessageByType)("unsubscribe-from-node",e=>{vp(e)}));a(oo,"ensureNode")});var Bp=N((wNe,yB)=>{"use strict";var Cte=M().OPERATIONS_ENUM,yy=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=Cte.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};yB.exports=yy});var OB=N((DNe,bB)=>{"use strict";var Dte={OPERATION:"operation",REFRESH:"refresh"},by=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Oy=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};bB.exports={JWTTokens:by,TOKEN_TYPE_ENUM:Dte,JWTRSAKeys:Oy}});var fu=N((LNe,CB)=>{"use strict";var Z_=require("jsonwebtoken"),Ny=require("fs-extra"),Iy=te(),ds=M(),{handleHDBError:En,hdb_errors:Pte}=_e(),{HTTP_STATUS_CODES:hn,AUTHENTICATION_ERROR_MSGS:pn}=Pte,X_=W(),NB=Vh(),Dy=dn(),Lte=un().update,Mte=Bp(),Ute=to(),{UserEventMsg:vte}=qs(),ra=se();ra.initSync();var wy=require("path"),{JWTTokens:Bte,JWTRSAKeys:Hte,TOKEN_TYPE_ENUM:Hp}=OB(),xte=ra.get(ds.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?ra.get(ds.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",kte=ra.get(ds.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?ra.get(ds.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",xp="RS256",Cy;CB.exports={createTokens:Fte,validateOperationToken:qte,refreshOperationToken:Gte,validateRefreshToken:wB,getJWTRSAKeys:ef};async function Fte(e){if(Iy.isEmpty(e)||typeof e!="object")throw En(new Error,pn.INVALID_AUTH_OBJECT,hn.BAD_REQUEST,void 0,void 0,!0);if(Iy.isEmpty(e.username))throw En(new Error,pn.USERNAME_REQUIRED,hn.BAD_REQUEST,void 0,void 0,!0);if(Iy.isEmpty(e.password))throw En(new Error,pn.PASSWORD_REQUIRED,hn.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Dy.findAndValidateUser(e.username,e.password),!t)throw En(new Error,pn.INVALID_CREDENTIALS,hn.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw X_.error(E),En(new Error,pn.INVALID_CREDENTIALS,hn.UNAUTHORIZED,void 0,void 0,!0)}let r=await ef(),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 IB(i,r.private_key,r.passphrase),c=await Z_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:kte,algorithm:xp,subject:Hp.REFRESH}),l=NB.hash(c),u=new Mte(ds.SYSTEM_SCHEMA_NAME,ds.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),d,_;try{d=await Lte(u)}catch(E){X_.error(E),_=E}if(_!==void 0||d.skipped_hashes.length>0)throw En(new Error,pn.REFRESH_TOKEN_SAVE_FAILED,hn.INTERNAL_SERVER_ERROR);return Ute.signalUserChange(new vte(process.pid)),new Bte(o,c)}a(Fte,"createTokens");async function IB(e,t,r){return await Z_.sign(e,{key:t,passphrase:r},{expiresIn:xte,algorithm:xp,subject:Hp.OPERATION})}a(IB,"signOperationToken");async function ef(){if(Cy===void 0)try{let e=wy.join(ra.getHdbBasePath(),ds.LICENSE_KEY_DIR_NAME,ds.JWT_ENUM.JWT_PASSPHRASE_NAME),t=wy.join(ra.getHdbBasePath(),ds.LICENSE_KEY_DIR_NAME,ds.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=wy.join(ra.getHdbBasePath(),ds.LICENSE_KEY_DIR_NAME,ds.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await Ny.readFile(e)).toString(),s=(await Ny.readFile(t)).toString(),i=(await Ny.readFile(r)).toString();Cy=new Hte(i,s,n)}catch(e){throw X_.error(e),En(new Error,pn.NO_ENCRYPTION_KEYS,hn.INTERNAL_SERVER_ERROR)}return Cy}a(ef,"getJWTRSAKeys");async function Gte(e){if(!e)throw En(new Error,pn.INVALID_BODY,hn.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw En(new Error,pn.REFRESH_TOKEN_REQUIRED,hn.BAD_REQUEST,void 0,void 0,!0);await wB(e.refresh_token);let t=await ef(),r=await Z_.decode(e.refresh_token);return{operation_token:await IB({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(Gte,"refreshOperationToken");async function qte(e){try{let t=await ef(),r=await Z_.verify(e,t.public_key,{algorithms:xp,subject:Hp.OPERATION});return await Dy.findAndValidateUser(r.username,void 0,!1)}catch(t){throw X_.warn(t),t.name&&t.name==="TokenExpiredError"?En(new Error,pn.TOKEN_EXPIRED,hn.FORBIDDEN):En(new Error,pn.INVALID_TOKEN,hn.UNAUTHORIZED)}}a(qte,"validateOperationToken");async function wB(e){let t;try{let r=await ef(),n=await Z_.verify(e,r.public_key,{algorithms:xp,subject:Hp.REFRESH});t=await Dy.findAndValidateUser(n.username,void 0,!1)}catch(r){throw X_.warn(r),r.name&&r.name==="TokenExpiredError"?En(new Error,pn.TOKEN_EXPIRED,hn.FORBIDDEN):En(new Error,pn.INVALID_TOKEN,hn.UNAUTHORIZED)}if(!NB.validate(t.refresh_token,e))throw En(new Error,pn.INVALID_TOKEN,hn.UNAUTHORIZED);return t}a(wB,"validateRefreshToken")});var Xs=N(eH=>{"use strict";var ir=require("path"),mn=require("fs-extra"),Eu=require("node-forge"),BB=require("net"),{generateKeyPair:Ly,X509Certificate:ao,createPrivateKey:HB}=require("crypto"),$te=require("util");Ly=$te.promisify(Ly);var yt=Eu.pki,Qs=require("joi"),{v4:xB}=require("uuid"),{validateBySchema:By}=Tt(),pt=W(),_s=se(),Es=M(),{CONFIG_PARAMS:hu}=Es,Js=Ag(),{ClientError:sa}=_e(),wc=require("node:tls"),{relative:kB,join:Vte}=require("node:path"),{CERT_PREFERENCE_APP:UNe,CERTIFICATE_VALUES:DB}=Js,Kte=ja(),My=wt(),PB=parseInt(process.version.slice(1))<20,{table:Yte,getDatabases:Wte,databases:Py}=(Pe(),oe(lt)),{getJWTRSAKeys:LB}=fu();Object.assign(eH,{generateKeys:ky,updateConfigCert:WB,createCsr:tre,signCertificate:rre,setCertTable:pu,loadCertificates:VB,reviewSelfSignedCert:Gy,createTLSSelector:QB,listCertificates:XB,addCertificate:cre,removeCertificate:ure,createNatsCerts:ire,generateCertsKeys:sre,getReplicationCert:rf,getReplicationCertAuth:ere,renewSelfSigned:ore,hostnamesFromCert:ZB,getKey:dre});var{urlToNodeName:FB,getThisNodeUrl:jte,getThisNodeName:Fp,clearThisNodeName:zte}=(us(),oe(aa)),{readFileSync:Qte,watchFile:Jte,statSync:GB}=require("node:fs"),vNe=se(),{getTicketKeys:Xte,onMessageFromWorkers:Zte}=dt(),na=W(),{isMainThread:qB}=require("worker_threads"),{TLSSocket:$B,createSecureContext:BNe}=require("node:tls"),Hy=3650,tf=["127.0.0.1","localhost","::1"],xy=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];Zte(async e=>{e.type===Es.ITC_EVENT_TYPES.RESTART&&(_s.initSync(!0),await Gy())});var Pr;function oa(){return Pr||(Pr=Wte().system.hdb_certificate,Pr||(Pr=Yte({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),Pr}a(oa,"getCertTable");async function rf(){let e=QB("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(Fp());if(!r)return;let n=new ao(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(rf,"getReplicationCert");async function ere(){oa();let e=(await rf()).options.cert,r=new ao(e).issuer.match(/CN=(.*)/)?.[1];return Pr.get(r)}a(ere,"getReplicationCertAuth");var MB,ia=new Map;function VB(){if(MB)return;MB=!0;let e=[{configKey:hu.TLS},{configKey:hu.OPERATIONSAPI_TLS}];oa();let t=ir.dirname(My.getConfigFilePath()),r;for(let{configKey:n}of e){let s=My.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&kB(Vte(t,"keys"),o);c&&UB(o,l=>{ia.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&qB){let d;UB(u,_=>{if(DB.cert===_)return;let E=i.hostname??i.hostnames??i.host??i.hosts;E&&!Array.isArray(E)&&(E=[E]);let f=jB(u),h=new ao(f),T;try{T=qy(h)}catch(y){pt.error("error extracting common name from certificate",y);return}if(T==null){pt.error("error extracting common name from certificate");return}if(h.checkIssued(new ao(DB.cert)))return;let m=Pr.primaryStore.get(T),g=GB(u).mtimeMs,S=!m||m.is_self_signed?1:m.file_timestamp??m.__updatedtime__;if(m&&g<=S){g<S&&pt.info(`Certificate ${T} at ${u} is older (${new Date(g)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=Pr.put({name:T,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:f,private_key_name:c,is_authority:l,hostnames:E,file_timestamp:g,details:{issuer:h.issuer.replace(/\n/g," "),subject:h.subject.replace(/\n/g," "),subject_alt_name:h.subjectAltName,serial_number:h.serialNumber,valid_from:h.validFrom,valid_to:h.validTo}})},l?"certificate authority":"certificate")}}}}}return r}a(VB,"loadCertificates");function UB(e,t,r){let n,s=a((i,o)=>{try{let c=i.mtimeMs;c&&c!==n&&(o&&qB&&pt.warn(`Reloading ${r}:`,e),n=c,t(jB(e)))}catch(c){pt.error(`Error loading ${r}:`,e,c)}},"loadFile");mn.existsSync(e)?s(GB(e)):pt.error(`${r} file not found:`,e),Jte(e,{persistent:!1},s)}a(UB,"loadAndWatch");function Uy(){let e=jte();if(e==null){let t=tf[0];return pt.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return FB(e)}a(Uy,"getHost");function kp(){let e=Fp();if(e==null){let t=tf[0];return pt.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(kp,"getCommonName");async function tre(){let e=await rf(),t=yt.certificateFromPem(e.options.cert),r=yt.privateKeyFromPem(e.options.key);pt.info("Creating CSR with cert named:",e.name);let n=yt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:kp()},...xy];pt.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:KB()}];return pt.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Eu.pki.certificationRequestToPem(n)}a(tre,"createCsr");function KB(){let e=tf.includes(kp())?tf:[...tf,kp()];return e.includes(Uy())||e.push(Uy()),[{name:"basicConstraints",cA:!1,critical:!0},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0,critical:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"nsCertType",client:!0,server:!0},{name:"subjectAltName",altNames:e.map(t=>BB.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(KB,"certExtensions");async function rre(e){let t={},r=ir.join(_s.getHdbBasePath(),Es.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;oa();for await(let d of Pr.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(ia.has(d.private_key_name)){n=ia.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await mn.exists(ir.join(r,d.private_key_name))){n=mn.readFile(ir.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await vy();s=d.ca,n=d.private_key}n=yt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=yt.certificateFromPem(s.certificate);pt.info("Signing CSR with cert named",s.name);let o=yt.certificationRequestFromPem(e.csr);try{o.verify()}catch(d){return pt.error(d),new Error("Error verifying CSR: "+d.message)}let c=Eu.pki.createCertificate();c.serialNumber=Math.random().toString().slice(2,10),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+Hy),pt.info("sign cert setting validity:",c.validity),pt.info("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),pt.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;pt.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,Eu.md.sha256.create()),t.certificate=yt.certificateToPem(c)}else pt.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(rre,"signCertificate");async function nre(e,t){await pu({name:Fp(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await pu({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:yt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(nre,"createCertificateTable");async function pu(e){let t=new ao(e.certificate);e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},oa(),await Pr.patch(e)}a(pu,"setCertTable");async function ky(){let e=await Ly("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{public_key:yt.publicKeyFromPem(e.publicKey),private_key:yt.privateKeyFromPem(e.privateKey)}}a(ky,"generateKeys");async function Fy(e,t,r){let n=yt.createCertificate();if(!t){let o=await rf();t=yt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+Hy);let i=[{name:"commonName",value:kp()},...xy];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(KB()),n.sign(e,Eu.md.sha256.create()),yt.certificateToPem(n)}a(Fy,"generateCertificates");async function vy(){let e=await XB(),t;for(let r of e){if(!r.is_authority)continue;let n=await JB(r.private_key_name);if(r.private_key_name&&n&&new ao(r.certificate).checkPrivateKey(HB(n))){pt.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;pt.trace("No CA found with matching private key")}a(vy,"getCertAuthority");async function YB(e,t,r=!0){let n=yt.createCertificate();n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+Hy);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${_s.get(hu.REPLICATION_HOSTNAME)??FB(_s.get(hu.REPLICATION_URL))??xB().split("-")[0]}`},...xy];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,Eu.md.sha256.create());let o=ir.join(_s.getHdbBasePath(),Es.LICENSE_KEY_DIR_NAME),c=ir.join(o,Js.PRIVATEKEY_PEM_NAME);return r&&await mn.writeFile(c,yt.privateKeyToPem(e)),n}a(YB,"generateCertAuthority");async function sre(){let{private_key:e,public_key:t}=await ky(),r=await YB(e,t),n=await Fy(e,t,r);await nre(n,r),WB()}a(sre,"generateCertsKeys");async function ire(){let e=await Fy(yt.privateKeyFromPem(Js.CERTIFICATE_VALUES.key),void 0,yt.certificateFromPem(Js.CERTIFICATE_VALUES.cert)),t=ir.join(_s.getHdbBasePath(),Es.LICENSE_KEY_DIR_NAME),r=ir.join(t,Js.NATS_CERTIFICATE_PEM_NAME);await mn.exists(r)||await mn.writeFile(r,e);let n=ir.join(t,Js.NATS_CA_PEM_NAME);await mn.exists(n)||await mn.writeFile(n,Js.CERTIFICATE_VALUES.cert)}a(ire,"createNatsCerts");async function ore(){oa();for await(let e of Pr.search([{attribute:"is_self_signed",value:!0}]))await Pr.delete(e.name);await Gy()}a(ore,"renewSelfSigned");async function Gy(){zte(),await VB(),oa();let e=await vy();if(!e){pt.notify("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=_s.get(hu.TLS_PRIVATEKEY),n=ir.join(_s.getHdbBasePath(),Es.LICENSE_KEY_DIR_NAME),s,i=kB(n,r);try{s=yt.privateKeyFromPem(await mn.readFile(r))}catch(c){pt.warn("Unable to parse the TLS key",r,"A new key will be generated and used to create Certificate Authority",c),{private_key:s}=await ky(),await mn.exists(ir.join(n,Js.PRIVATEKEY_PEM_NAME))&&(i=`privateKey${xB().split("-")[0]}.pem`),await mn.writeFile(ir.join(n,i),yt.privateKeyToPem(s))}let o=await YB(s,yt.setRsaPublicKey(s.n,s.e),!1);await pu({name:o.subject.getField("CN").value,uses:["https"],certificate:yt.certificateToPem(o),private_key_name:i,is_authority:!0,is_self_signed:!0})}if(!await rf()){let r=Fp();pt.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await vy();let n=yt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await Fy(yt.privateKeyFromPem(e.private_key),s,n);await pu({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(Gy,"reviewSelfSignedCert");function WB(){let e=Kte(Object.keys(Es.CONFIG_PARAM_MAP),!0),t=ir.join(_s.getHdbBasePath(),Es.LICENSE_KEY_DIR_NAME),r=ir.join(t,Js.PRIVATEKEY_PEM_NAME),n=ir.join(t,Js.NATS_CERTIFICATE_PEM_NAME),s=ir.join(t,Js.NATS_CA_PEM_NAME),i=Es.CONFIG_PARAMS,o={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(o[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(o[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,o[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,o[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),My.updateConfigValue(void 0,void 0,o,!1,!0)}a(WB,"updateConfigCert");function jB(e){return e.startsWith("-----BEGIN")?e:Qte(e,"utf8")}a(jB,"readPEM");var vB=wc.createSecureContext;wc.createSecureContext=function(e){if(!e.cert||!e.key)return vB(e);let t={...e};delete t.key,delete t.cert;let r=vB(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var zB=wc.Server;wc.Server=function(e,t){return e.ALPNCallback&&(e.ALPNProtocols=null),zB.call(this,e,t)};wc.Server.prototype=zB.prototype;var are=$B.prototype._init;$B.prototype._init=function(e,t){are.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,o)=>{this.sni_context=o?.context||o,this.certCbDone()})}};var Ic=new Map;function QB(e,t){let r=new Map,n,s=!1;return i.initialize=o=>i.ready?i.ready:(o&&(o.secureContexts=r,o.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),Ic.clear();let d=0;for await(let _ of Py.system.hdb_certificate.search([])){let E=_.certificate,f=new ao(E);_.is_authority&&(f.asString=E,Ic.set(f.subject,E))}for await(let _ of Py.system.hdb_certificate.search([]))try{if(_.is_authority)continue;let E=e==="operations-api",f=_.is_self_signed?1:2;E&&_.uses?.includes?.("operations")&&(f+=1);let h=await JB(_.private_key_name),T=_.certificate,m=new ao(T);if(Ic.has(m.issuer)&&(T+=`
|