@harperfast/harper 5.0.0-alpha.10 → 5.0.0-beta.3

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.
Files changed (446) hide show
  1. package/bin/BinObjects.js +17 -0
  2. package/bin/cliOperations.js +157 -0
  3. package/bin/copyDb.ts +280 -0
  4. package/bin/harper.js +156 -0
  5. package/bin/install.js +15 -0
  6. package/bin/lite.js +5 -0
  7. package/bin/restart.js +201 -0
  8. package/bin/run.js +409 -0
  9. package/bin/status.js +65 -0
  10. package/bin/stop.js +22 -0
  11. package/bin/upgrade.js +134 -0
  12. package/components/Application.ts +646 -0
  13. package/components/ApplicationScope.ts +49 -0
  14. package/components/Component.ts +53 -0
  15. package/components/ComponentV1.ts +342 -0
  16. package/components/DEFAULT_CONFIG.ts +18 -0
  17. package/components/EntryHandler.ts +227 -0
  18. package/components/Logger.ts +14 -0
  19. package/components/OptionsWatcher.ts +354 -0
  20. package/components/PluginModule.ts +6 -0
  21. package/components/Scope.ts +329 -0
  22. package/components/componentLoader.ts +529 -0
  23. package/components/deriveCommonPatternBase.ts +31 -0
  24. package/components/deriveGlobOptions.ts +44 -0
  25. package/components/deriveURLPath.ts +57 -0
  26. package/components/operations.js +658 -0
  27. package/components/operationsValidation.js +246 -0
  28. package/components/packageComponent.ts +39 -0
  29. package/components/requestRestart.ts +26 -0
  30. package/components/resolveBaseURLPath.ts +38 -0
  31. package/components/status/ComponentStatus.ts +110 -0
  32. package/components/status/ComponentStatusRegistry.ts +251 -0
  33. package/components/status/api.ts +153 -0
  34. package/components/status/crossThread.ts +405 -0
  35. package/components/status/errors.ts +152 -0
  36. package/components/status/index.ts +44 -0
  37. package/components/status/internal.ts +65 -0
  38. package/components/status/registry.ts +12 -0
  39. package/components/status/types.ts +96 -0
  40. package/config/RootConfigWatcher.ts +59 -0
  41. package/config/configHelpers.ts +11 -0
  42. package/config/configUtils.js +967 -0
  43. package/config/harperConfigEnvVars.ts +641 -0
  44. package/dataLayer/CreateAttributeObject.js +25 -0
  45. package/dataLayer/CreateTableObject.js +11 -0
  46. package/dataLayer/DataLayerObjects.js +43 -0
  47. package/dataLayer/DeleteBeforeObject.js +22 -0
  48. package/dataLayer/DeleteObject.js +25 -0
  49. package/dataLayer/DropAttributeObject.js +11 -0
  50. package/dataLayer/GetBackupObject.js +22 -0
  51. package/dataLayer/InsertObject.js +24 -0
  52. package/dataLayer/ReadAuditLogObject.js +24 -0
  53. package/dataLayer/SQLSearch.js +1335 -0
  54. package/dataLayer/SearchByConditionsObject.js +61 -0
  55. package/dataLayer/SearchByHashObject.js +21 -0
  56. package/dataLayer/SearchObject.js +45 -0
  57. package/dataLayer/SqlSearchObject.js +14 -0
  58. package/dataLayer/UpdateObject.js +23 -0
  59. package/dataLayer/UpsertObject.js +23 -0
  60. package/dataLayer/bulkLoad.js +813 -0
  61. package/dataLayer/dataObjects/BulkLoadObjects.js +27 -0
  62. package/dataLayer/dataObjects/UpsertObject.js +23 -0
  63. package/dataLayer/delete.js +164 -0
  64. package/dataLayer/export.js +381 -0
  65. package/dataLayer/getBackup.js +40 -0
  66. package/dataLayer/harperBridge/BridgeMethods.js +81 -0
  67. package/dataLayer/harperBridge/ResourceBridge.ts +633 -0
  68. package/dataLayer/harperBridge/bridgeUtility/insertUpdateReturnObj.js +28 -0
  69. package/dataLayer/harperBridge/bridgeUtility/insertUpdateValidate.js +88 -0
  70. package/dataLayer/harperBridge/harperBridge.js +21 -0
  71. package/dataLayer/harperBridge/lmdbBridge/LMDBBridge.js +119 -0
  72. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/DeleteAuditLogsBeforeResults.js +19 -0
  73. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateAttribute.js +112 -0
  74. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateRecords.js +67 -0
  75. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateSchema.js +31 -0
  76. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateTable.js +94 -0
  77. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteAuditLogsBefore.js +98 -0
  78. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteRecords.js +89 -0
  79. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropAttribute.js +109 -0
  80. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropSchema.js +107 -0
  81. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropTable.js +137 -0
  82. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbFlush.js +35 -0
  83. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetBackup.js +111 -0
  84. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByHash.js +28 -0
  85. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByValue.js +29 -0
  86. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbReadAuditLog.js +207 -0
  87. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByConditions.js +156 -0
  88. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByHash.js +21 -0
  89. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByValue.js +30 -0
  90. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbTransaction.js +19 -0
  91. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpdateRecords.js +64 -0
  92. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpsertRecords.js +70 -0
  93. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBCreateAttributeObject.js +22 -0
  94. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBDeleteTransactionObject.js +23 -0
  95. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBInsertTransactionObject.js +22 -0
  96. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBTransactionObject.js +23 -0
  97. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBUpdateTransactionObject.js +24 -0
  98. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBUpsertTransactionObject.js +24 -0
  99. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/TableSizeObject.js +25 -0
  100. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializeHashSearch.js +21 -0
  101. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializePaths.js +157 -0
  102. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCheckForNewAttributes.js +94 -0
  103. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCreateTransactionsAuditEnvironment.js +39 -0
  104. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbGetTableSize.js +34 -0
  105. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbProcessRows.js +100 -0
  106. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbSearch.js +371 -0
  107. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbWriteTransaction.js +109 -0
  108. package/dataLayer/hdbInfoController.js +254 -0
  109. package/dataLayer/insert.js +266 -0
  110. package/dataLayer/readAuditLog.js +59 -0
  111. package/dataLayer/schema.js +366 -0
  112. package/dataLayer/schemaDescribe.js +289 -0
  113. package/dataLayer/search.js +60 -0
  114. package/dataLayer/transaction.js +17 -0
  115. package/dataLayer/update.js +124 -0
  116. package/dist/components/Logger.d.ts +12 -0
  117. package/dist/{resources/ResourceInterfaceV2.js → components/Logger.js} +1 -1
  118. package/dist/components/Logger.js.map +1 -0
  119. package/dist/components/Scope.d.ts +14 -4
  120. package/dist/components/Scope.js +18 -10
  121. package/dist/components/Scope.js.map +1 -1
  122. package/dist/components/componentLoader.js +17 -10
  123. package/dist/components/componentLoader.js.map +1 -1
  124. package/dist/components/operations.js +2 -2
  125. package/dist/components/operations.js.map +1 -1
  126. package/dist/config/configUtils.d.ts +1 -1
  127. package/dist/config/configUtils.js +1 -1
  128. package/dist/config/configUtils.js.map +1 -1
  129. package/dist/dataLayer/CreateTableObject.d.ts +2 -2
  130. package/dist/dataLayer/CreateTableObject.js +2 -2
  131. package/dist/dataLayer/CreateTableObject.js.map +1 -1
  132. package/dist/dataLayer/delete.d.ts +1 -1
  133. package/dist/dataLayer/schema.js +6 -5
  134. package/dist/dataLayer/schema.js.map +1 -1
  135. package/dist/dataLayer/schemaDescribe.js +1 -1
  136. package/dist/dataLayer/schemaDescribe.js.map +1 -1
  137. package/dist/index.d.ts +1 -1
  138. package/dist/index.js +2 -0
  139. package/dist/index.js.map +1 -1
  140. package/dist/resources/DatabaseTransaction.d.ts +1 -1
  141. package/dist/resources/IterableEventQueue.d.ts +1 -1
  142. package/dist/resources/LMDBTransaction.d.ts +5 -1
  143. package/dist/resources/Resource.d.ts +1 -1
  144. package/dist/resources/ResourceInterface.d.ts +1 -1
  145. package/dist/resources/RocksIndexStore.d.ts +3 -3
  146. package/dist/resources/RocksTransactionLogStore.d.ts +6 -3
  147. package/dist/resources/Table.d.ts +15 -6
  148. package/dist/resources/Table.js +12 -4
  149. package/dist/resources/Table.js.map +1 -1
  150. package/dist/resources/analytics/read.js +32 -22
  151. package/dist/resources/analytics/read.js.map +1 -1
  152. package/dist/resources/analytics/write.js +3 -6
  153. package/dist/resources/analytics/write.js.map +1 -1
  154. package/dist/resources/auditStore.d.ts +3 -3
  155. package/dist/resources/blob.d.ts +25 -2
  156. package/dist/resources/databases.d.ts +12 -2
  157. package/dist/resources/databases.js +22 -19
  158. package/dist/resources/databases.js.map +1 -1
  159. package/dist/resources/search.js +11 -5
  160. package/dist/resources/search.js.map +1 -1
  161. package/dist/resources/transaction.d.ts +2 -1
  162. package/dist/security/auth.js +1 -1
  163. package/dist/security/auth.js.map +1 -1
  164. package/dist/security/cryptoHash.d.ts +2 -2
  165. package/dist/security/jsLoader.js +265 -73
  166. package/dist/security/jsLoader.js.map +1 -1
  167. package/dist/security/keys.js +11 -12
  168. package/dist/security/keys.js.map +1 -1
  169. package/dist/security/user.js +3 -3
  170. package/dist/security/user.js.map +1 -1
  171. package/dist/server/REST.js +16 -2
  172. package/dist/server/REST.js.map +1 -1
  173. package/dist/server/Server.d.ts +2 -1
  174. package/dist/server/Server.js.map +1 -1
  175. package/dist/server/fastifyRoutes/plugins/hdbCore.d.ts +6 -1
  176. package/dist/server/fastifyRoutes.js +2 -0
  177. package/dist/server/fastifyRoutes.js.map +1 -1
  178. package/dist/server/http.js +12 -6
  179. package/dist/server/http.js.map +1 -1
  180. package/dist/server/jobs/JobObject.d.ts +3 -3
  181. package/dist/server/loadRootComponents.js +1 -0
  182. package/dist/server/loadRootComponents.js.map +1 -1
  183. package/dist/server/operationsServer.js +3 -1
  184. package/dist/server/operationsServer.js.map +1 -1
  185. package/dist/server/serverHelpers/JSONStream.d.ts +3 -3
  186. package/dist/server/serverHelpers/Request.d.ts +5 -5
  187. package/dist/server/serverHelpers/requestTimePlugin.d.ts +1 -1
  188. package/dist/server/threads/manageThreads.d.ts +2 -2
  189. package/dist/server/threads/manageThreads.js +52 -35
  190. package/dist/server/threads/manageThreads.js.map +1 -1
  191. package/dist/server/threads/socketRouter.d.ts +1 -1
  192. package/dist/sqlTranslator/deleteTranslator.d.ts +1 -1
  193. package/dist/utility/AWS/AWSConnector.d.ts +3 -2
  194. package/dist/utility/common_utils.d.ts +3 -3
  195. package/dist/utility/environment/systemInformation.d.ts +1 -0
  196. package/dist/utility/functions/date/dateFunctions.d.ts +11 -11
  197. package/dist/utility/globalSchema.d.ts +1 -1
  198. package/dist/utility/hdbTerms.d.ts +3 -0
  199. package/dist/utility/hdbTerms.js +3 -0
  200. package/dist/utility/hdbTerms.js.map +1 -1
  201. package/dist/utility/installation.d.ts +2 -4
  202. package/dist/utility/installation.js.map +1 -1
  203. package/dist/utility/lmdb/commonUtility.d.ts +2 -1
  204. package/dist/utility/lmdb/commonUtility.js +20 -13
  205. package/dist/utility/lmdb/commonUtility.js.map +1 -1
  206. package/dist/utility/lmdb/deleteUtility.d.ts +1 -0
  207. package/dist/utility/lmdb/environmentUtility.d.ts +1 -0
  208. package/dist/utility/lmdb/searchUtility.d.ts +2 -1
  209. package/dist/utility/lmdb/writeUtility.d.ts +1 -0
  210. package/dist/utility/logging/harper_logger.d.ts +6 -6
  211. package/dist/utility/processManagement/processManagement.d.ts +1 -1
  212. package/dist/utility/processManagement/servicesConfig.d.ts +12 -6
  213. package/dist/validation/common_validators.d.ts +4 -3
  214. package/dist/validation/configValidator.d.ts +3 -2
  215. package/index.d.ts +56 -0
  216. package/index.js +41 -0
  217. package/json/systemSchema.json +373 -0
  218. package/launchServiceScripts/launchHarperDB.js +3 -0
  219. package/launchServiceScripts/utility/checkNodeVersion.js +15 -0
  220. package/package.json +35 -16
  221. package/resources/DatabaseTransaction.ts +378 -0
  222. package/resources/ErrorResource.ts +57 -0
  223. package/resources/IterableEventQueue.ts +94 -0
  224. package/resources/LMDBTransaction.ts +349 -0
  225. package/resources/RecordEncoder.ts +702 -0
  226. package/resources/RequestTarget.ts +134 -0
  227. package/resources/Resource.ts +789 -0
  228. package/resources/ResourceInterface.ts +221 -0
  229. package/resources/Resources.ts +162 -0
  230. package/resources/RocksIndexStore.ts +70 -0
  231. package/resources/RocksTransactionLogStore.ts +352 -0
  232. package/resources/Table.ts +4531 -0
  233. package/resources/analytics/hostnames.ts +72 -0
  234. package/resources/analytics/metadata.ts +10 -0
  235. package/resources/analytics/read.ts +252 -0
  236. package/resources/analytics/write.ts +803 -0
  237. package/resources/auditStore.ts +556 -0
  238. package/resources/blob.ts +1268 -0
  239. package/resources/crdt.ts +125 -0
  240. package/resources/dataLoader.ts +527 -0
  241. package/resources/databases.ts +1290 -0
  242. package/resources/graphql.ts +221 -0
  243. package/resources/indexes/HierarchicalNavigableSmallWorld.ts +638 -0
  244. package/resources/indexes/customIndexes.ts +7 -0
  245. package/resources/indexes/vector.ts +38 -0
  246. package/resources/jsResource.ts +86 -0
  247. package/resources/loadEnv.ts +22 -0
  248. package/resources/login.ts +18 -0
  249. package/resources/openApi.ts +409 -0
  250. package/resources/registrationDeprecated.ts +8 -0
  251. package/resources/replayLogs.ts +136 -0
  252. package/resources/roles.ts +98 -0
  253. package/resources/search.ts +1301 -0
  254. package/resources/tracked.ts +584 -0
  255. package/resources/transaction.ts +89 -0
  256. package/resources/transactionBroadcast.ts +258 -0
  257. package/security/auth.ts +376 -0
  258. package/security/certificateVerification/certificateVerificationSource.ts +84 -0
  259. package/security/certificateVerification/configValidation.ts +107 -0
  260. package/security/certificateVerification/crlVerification.ts +623 -0
  261. package/security/certificateVerification/index.ts +121 -0
  262. package/security/certificateVerification/ocspVerification.ts +148 -0
  263. package/security/certificateVerification/pkijs-ed25519-patch.ts +188 -0
  264. package/security/certificateVerification/types.ts +128 -0
  265. package/security/certificateVerification/verificationConfig.ts +138 -0
  266. package/security/certificateVerification/verificationUtils.ts +447 -0
  267. package/security/cryptoHash.js +42 -0
  268. package/security/data_objects/PermissionAttributeResponseObject.js +15 -0
  269. package/security/data_objects/PermissionResponseObject.js +115 -0
  270. package/security/data_objects/PermissionTableResponseObject.js +20 -0
  271. package/security/fastifyAuth.js +169 -0
  272. package/security/impersonation.ts +160 -0
  273. package/security/jsLoader.ts +733 -0
  274. package/security/keys.js +948 -0
  275. package/security/permissionsTranslator.js +300 -0
  276. package/security/role.js +218 -0
  277. package/security/tokenAuthentication.ts +228 -0
  278. package/security/user.ts +449 -0
  279. package/server/DurableSubscriptionsSession.ts +503 -0
  280. package/server/REST.ts +407 -0
  281. package/server/Server.ts +89 -0
  282. package/server/fastifyRoutes/helpers/getCORSOptions.js +36 -0
  283. package/server/fastifyRoutes/helpers/getHeaderTimeoutConfig.js +15 -0
  284. package/server/fastifyRoutes/helpers/getServerOptions.js +33 -0
  285. package/server/fastifyRoutes/plugins/hdbCore.js +39 -0
  286. package/server/fastifyRoutes.ts +205 -0
  287. package/server/graphqlQuerying.ts +700 -0
  288. package/server/http.ts +640 -0
  289. package/server/itc/serverHandlers.js +161 -0
  290. package/server/itc/utility/ITCEventObject.js +10 -0
  291. package/server/jobs/JobObject.js +24 -0
  292. package/server/jobs/jobProcess.js +69 -0
  293. package/server/jobs/jobRunner.js +162 -0
  294. package/server/jobs/jobs.js +304 -0
  295. package/server/loadRootComponents.js +44 -0
  296. package/server/mqtt.ts +485 -0
  297. package/server/nodeName.ts +75 -0
  298. package/server/operationsServer.ts +313 -0
  299. package/server/serverHelpers/Headers.ts +108 -0
  300. package/server/serverHelpers/JSONStream.ts +269 -0
  301. package/server/serverHelpers/OperationFunctionObject.ts +13 -0
  302. package/server/serverHelpers/Request.ts +158 -0
  303. package/server/serverHelpers/contentTypes.ts +637 -0
  304. package/server/serverHelpers/requestTimePlugin.js +57 -0
  305. package/server/serverHelpers/serverHandlers.js +148 -0
  306. package/server/serverHelpers/serverUtilities.ts +473 -0
  307. package/server/serverRegistry.ts +8 -0
  308. package/server/static.ts +187 -0
  309. package/server/status/definitions.ts +37 -0
  310. package/server/status/index.ts +125 -0
  311. package/server/storageReclamation.ts +93 -0
  312. package/server/threads/itc.js +89 -0
  313. package/server/threads/manageThreads.js +596 -0
  314. package/server/threads/socketRouter.ts +360 -0
  315. package/server/threads/threadServer.js +279 -0
  316. package/server/throttle.ts +73 -0
  317. package/sqlTranslator/SelectValidator.js +330 -0
  318. package/sqlTranslator/alasqlFunctionImporter.js +62 -0
  319. package/sqlTranslator/deleteTranslator.js +67 -0
  320. package/sqlTranslator/index.js +242 -0
  321. package/sqlTranslator/sql_statement_bucket.js +472 -0
  322. package/static/defaultConfig.yaml +3 -0
  323. package/studio/web/HDBDogOnly.svg +78 -0
  324. package/studio/web/assets/PPRadioGrotesk-Bold-DDaUYG8E.woff +0 -0
  325. package/studio/web/assets/fa-brands-400-CEJbCg16.woff +0 -0
  326. package/studio/web/assets/fa-brands-400-CSYNqBb_.ttf +0 -0
  327. package/studio/web/assets/fa-brands-400-DnkPfk3o.eot +0 -0
  328. package/studio/web/assets/fa-brands-400-UxlILjvJ.woff2 +0 -0
  329. package/studio/web/assets/fa-brands-400-cH1MgKbP.svg +3717 -0
  330. package/studio/web/assets/fa-regular-400-BhTwtT8w.eot +0 -0
  331. package/studio/web/assets/fa-regular-400-D1vz6WBx.ttf +0 -0
  332. package/studio/web/assets/fa-regular-400-DFnMcJPd.woff +0 -0
  333. package/studio/web/assets/fa-regular-400-DGzu1beS.woff2 +0 -0
  334. package/studio/web/assets/fa-regular-400-gwj8Pxq-.svg +801 -0
  335. package/studio/web/assets/fa-solid-900-B4ZZ7kfP.svg +5034 -0
  336. package/studio/web/assets/fa-solid-900-B6Axprfb.eot +0 -0
  337. package/studio/web/assets/fa-solid-900-BUswJgRo.woff2 +0 -0
  338. package/studio/web/assets/fa-solid-900-DOXgCApm.woff +0 -0
  339. package/studio/web/assets/fa-solid-900-mxuxnBEa.ttf +0 -0
  340. package/studio/web/assets/index-C1G-Jo6n.js +37 -0
  341. package/studio/web/assets/index-C1G-Jo6n.js.map +1 -0
  342. package/studio/web/assets/index-D-CahN0-.js +2 -0
  343. package/studio/web/assets/index-D-CahN0-.js.map +1 -0
  344. package/studio/web/assets/index-DxlZI0PX.js +235 -0
  345. package/studio/web/assets/index-DxlZI0PX.js.map +1 -0
  346. package/studio/web/assets/index-Y2g_iFpU.css +1 -0
  347. package/studio/web/assets/index-jiPwkrsB.css +1 -0
  348. package/studio/web/assets/index.lazy-BUXDDqq9.js +266 -0
  349. package/studio/web/assets/index.lazy-BUXDDqq9.js.map +1 -0
  350. package/studio/web/assets/profiler-CU93QiSW.js +2 -0
  351. package/studio/web/assets/profiler-CU93QiSW.js.map +1 -0
  352. package/studio/web/assets/react-redux-B8k9Ep7e.js +6 -0
  353. package/studio/web/assets/react-redux-B8k9Ep7e.js.map +1 -0
  354. package/studio/web/assets/startRecording-DFeBXGk6.js +3 -0
  355. package/studio/web/assets/startRecording-DFeBXGk6.js.map +1 -0
  356. package/studio/web/fabric-signup-background.webp +0 -0
  357. package/studio/web/fabric-signup-text.png +0 -0
  358. package/studio/web/favicon_purple.png +0 -0
  359. package/studio/web/github-icon.svg +15 -0
  360. package/studio/web/harper-fabric_black.png +0 -0
  361. package/studio/web/harper-fabric_white.png +0 -0
  362. package/studio/web/harper-studio_white.png +0 -0
  363. package/studio/web/index.html +16 -0
  364. package/studio/web/running.css +148 -0
  365. package/studio/web/running.html +147 -0
  366. package/studio/web/running.js +111 -0
  367. package/upgrade/UpgradeObjects.js +13 -0
  368. package/upgrade/directives/directivesController.js +90 -0
  369. package/upgrade/directivesManager.js +139 -0
  370. package/upgrade/upgradePrompt.js +124 -0
  371. package/upgrade/upgradeUtilities.js +28 -0
  372. package/utility/AWS/AWSConnector.js +29 -0
  373. package/utility/OperationFunctionCaller.js +63 -0
  374. package/utility/assignCmdEnvVariables.js +62 -0
  375. package/utility/common_utils.js +867 -0
  376. package/utility/environment/environmentManager.js +208 -0
  377. package/utility/environment/systemInformation.js +355 -0
  378. package/utility/errors/commonErrors.js +267 -0
  379. package/utility/errors/hdbError.js +146 -0
  380. package/utility/functions/date/dateFunctions.js +65 -0
  381. package/utility/functions/geo.js +355 -0
  382. package/utility/functions/sql/alaSQLExtension.js +104 -0
  383. package/utility/globalSchema.js +35 -0
  384. package/utility/hdbTerms.ts +819 -0
  385. package/utility/install/checkJWTTokensExist.js +62 -0
  386. package/utility/install/harperdb.conf +15 -0
  387. package/utility/install/harperdb.service +14 -0
  388. package/utility/install/installer.js +635 -0
  389. package/utility/installation.ts +30 -0
  390. package/utility/lmdb/DBIDefinition.js +20 -0
  391. package/utility/lmdb/DeleteRecordsResponseObject.js +25 -0
  392. package/utility/lmdb/InsertRecordsResponseObject.js +22 -0
  393. package/utility/lmdb/OpenDBIObject.js +31 -0
  394. package/utility/lmdb/OpenEnvironmentObject.js +41 -0
  395. package/utility/lmdb/UpdateRecordsResponseObject.js +25 -0
  396. package/utility/lmdb/UpsertRecordsResponseObject.js +22 -0
  397. package/utility/lmdb/cleanLMDBMap.js +65 -0
  398. package/utility/lmdb/commonUtility.js +130 -0
  399. package/utility/lmdb/deleteUtility.js +128 -0
  400. package/utility/lmdb/environmentUtility.js +477 -0
  401. package/utility/lmdb/searchCursorFunctions.js +187 -0
  402. package/utility/lmdb/searchUtility.js +918 -0
  403. package/utility/lmdb/terms.js +57 -0
  404. package/utility/lmdb/writeUtility.js +407 -0
  405. package/utility/logging/harper_logger.js +876 -0
  406. package/utility/logging/logRotator.js +157 -0
  407. package/utility/logging/logger.ts +24 -0
  408. package/utility/logging/readLog.js +355 -0
  409. package/utility/logging/transactionLog.js +57 -0
  410. package/utility/mount_hdb.js +59 -0
  411. package/utility/npmUtilities.js +102 -0
  412. package/utility/operationPermissions.ts +112 -0
  413. package/utility/operation_authorization.js +836 -0
  414. package/utility/packageUtils.js +55 -0
  415. package/utility/password.ts +99 -0
  416. package/utility/processManagement/processManagement.js +187 -0
  417. package/utility/processManagement/servicesConfig.js +56 -0
  418. package/utility/scripts/restartHdb.js +24 -0
  419. package/utility/scripts/user_data.sh +13 -0
  420. package/utility/signalling.js +36 -0
  421. package/utility/terms/certificates.js +81 -0
  422. package/utility/when.ts +20 -0
  423. package/validation/bulkDeleteValidator.js +24 -0
  424. package/validation/check_permissions.js +19 -0
  425. package/validation/common_validators.js +95 -0
  426. package/validation/configValidator.js +331 -0
  427. package/validation/deleteValidator.js +15 -0
  428. package/validation/fileLoadValidator.js +153 -0
  429. package/validation/insertValidator.js +40 -0
  430. package/validation/installValidator.js +37 -0
  431. package/validation/readLogValidator.js +64 -0
  432. package/validation/role_validation.js +320 -0
  433. package/validation/schemaMetadataValidator.js +42 -0
  434. package/validation/searchValidator.js +166 -0
  435. package/validation/statusValidator.ts +66 -0
  436. package/validation/transactionLogValidator.js +33 -0
  437. package/validation/user_validation.js +55 -0
  438. package/validation/validationWrapper.js +105 -0
  439. package/dist/resources/ResourceInterfaceV2.d.ts +0 -21
  440. package/dist/resources/ResourceInterfaceV2.js.map +0 -1
  441. package/dist/resources/ResourceV2.d.ts +0 -30
  442. package/dist/resources/ResourceV2.js +0 -27
  443. package/dist/resources/ResourceV2.js.map +0 -1
  444. package/dist/resources/analytics/profile.d.ts +0 -2
  445. package/dist/resources/analytics/profile.js +0 -144
  446. package/dist/resources/analytics/profile.js.map +0 -1
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Response object from lmdb delete function
5
+ * @param {Array.<string|number>} deleted
6
+ * @param {Array.<string|number>} skipped
7
+ * @param {number} txnTime
8
+ * @param {Array.<Object>} originalRecords
9
+ */
10
+ class DeleteRecordsResponseObject {
11
+ /**
12
+ * @param {Array.<string|number>} deleted
13
+ * @param {Array.<string|number>} skipped
14
+ * @param {number} txnTime
15
+ * @param {Array.<Object>} originalRecords
16
+ */
17
+ constructor(deleted = [], skipped = [], txnTime = undefined, originalRecords = []) {
18
+ this.deleted = deleted;
19
+ this.skipped = skipped;
20
+ this.txn_time = txnTime;
21
+ this.original_records = originalRecords;
22
+ }
23
+ }
24
+
25
+ module.exports = DeleteRecordsResponseObject;
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Response object from lmdb insert function
5
+ * @param {Array.<string|number>} written_hashes
6
+ * @param {Array.<string|number>} skipped_hashes
7
+ * @param {number} txnTime
8
+ */
9
+ class InsertRecordsResponseObject {
10
+ /**
11
+ * @param {Array.<string|number>} written_hashes
12
+ * @param {Array.<string|number>} skipped_hashes
13
+ * @param {number} txnTime
14
+ */
15
+ constructor(written_hashes = [], skipped_hashes = [], txnTime = undefined) {
16
+ this.written_hashes = written_hashes;
17
+ this.skipped_hashes = skipped_hashes;
18
+ this.txn_time = txnTime;
19
+ }
20
+ }
21
+
22
+ module.exports = InsertRecordsResponseObject;
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+ const envMngr = require('../environment/environmentManager.js');
3
+ const terms = require('../../utility/hdbTerms.ts');
4
+ const { RecordEncoder } = require('../../resources/RecordEncoder.ts');
5
+ envMngr.initSync();
6
+
7
+ const LMDB_CACHING = envMngr.get(terms.CONFIG_PARAMS.STORAGE_CACHING) !== false;
8
+
9
+ /**
10
+ * Defines how a DBI will be created/opened
11
+ */
12
+ class OpenDBIObject {
13
+ /**
14
+ * @param {Boolean} dupSort - if the dbi allows duplicate keys
15
+ * @param {Boolean} useVersions - if the dbi uses versions
16
+ */
17
+ constructor(dupSort, isPrimary = false) {
18
+ this.dupSort = dupSort === true;
19
+ this.encoding = dupSort ? 'ordered-binary' : 'msgpack';
20
+ this.useVersions = isPrimary;
21
+ this.sharedStructuresKey = Symbol.for('structures');
22
+ if (isPrimary) {
23
+ this.cache = LMDB_CACHING && { validated: true };
24
+ this.randomAccessStructure = true;
25
+ this.freezeData = true;
26
+ this.encoder = { Encoder: RecordEncoder };
27
+ }
28
+ }
29
+ }
30
+
31
+ exports.OpenDBIObject = OpenDBIObject;
@@ -0,0 +1,41 @@
1
+ 'use strict';
2
+ //Set initial map size to 1Gb
3
+ // eslint-disable-next-line no-magic-numbers
4
+ const MAP_SIZE = 1024 * 1024 * 1024;
5
+ //allow up to 1,000 named data bases in an environment
6
+ const MAX_DBS = 10000;
7
+ const MAX_READERS = 2048;
8
+ const envMngr = require('../environment/environmentManager.js');
9
+ const terms = require('../../utility/hdbTerms.ts');
10
+ envMngr.initSync();
11
+
12
+ class OpenEnvironmentObject {
13
+ constructor(path, readOnly = false) {
14
+ this.path = path;
15
+ this.mapSize = MAP_SIZE;
16
+ this.maxDbs = MAX_DBS;
17
+ this.maxReaders = MAX_READERS;
18
+ this.sharedStructuresKey = Symbol.for('structures');
19
+ this.readOnly = readOnly;
20
+ this.trackMetrics = true;
21
+ this.eventTurnBatching = false; // event turn batching is not needed in Harper
22
+ this.noSync =
23
+ envMngr.get(terms.CONFIG_PARAMS.STORAGE_WRITEASYNC) === true ||
24
+ envMngr.get(terms.CONFIG_PARAMS.STORAGE_WRITEASYNC) === 'true' ||
25
+ envMngr.get(terms.CONFIG_PARAMS.STORAGE_WRITEASYNC) === 'TRUE';
26
+ //this.noFSAccess = true; // we might re-enable this if we want secure JS environments
27
+ // otherwise overlappingSync uses lmdb-js default, which is enabled on linux/mac, disabled on windows
28
+ if (envMngr.get(terms.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC) !== undefined)
29
+ this.overlappingSync = envMngr.get(terms.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC);
30
+ if (envMngr.get(terms.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD))
31
+ this.maxFreeSpaceToLoad = envMngr.get(terms.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD);
32
+ if (envMngr.get(terms.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN))
33
+ this.maxFreeSpaceToRetain = envMngr.get(terms.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN);
34
+ if (envMngr.get(terms.CONFIG_PARAMS.STORAGE_PAGESIZE))
35
+ this.pageSize = envMngr.get(terms.CONFIG_PARAMS.STORAGE_PAGESIZE);
36
+ this.noReadAhead = envMngr.get(terms.CONFIG_PARAMS.STORAGE_NOREADAHEAD);
37
+ }
38
+ }
39
+
40
+ module.exports = OpenEnvironmentObject;
41
+ OpenEnvironmentObject.MAX_DBS = MAX_DBS;
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Response object from lmdb update function
5
+ * @param {Array.<string|number>} written_hashes
6
+ * @param {Array.<string|number>} skipped_hashes
7
+ * @param {number} txnTime
8
+ * @param {Array.<Object>} originalRecords
9
+ */
10
+ class UpdateRecordsResponseObject {
11
+ /**
12
+ * @param {Array.<string|number>} written_hashes
13
+ * @param {Array.<string|number>} skipped_hashes
14
+ * @param {number} txnTime
15
+ * @param {Array.<Object>} originalRecords
16
+ */
17
+ constructor(written_hashes = [], skipped_hashes = [], txnTime = undefined, originalRecords = []) {
18
+ this.written_hashes = written_hashes;
19
+ this.skipped_hashes = skipped_hashes;
20
+ this.txn_time = txnTime;
21
+ this.original_records = originalRecords;
22
+ }
23
+ }
24
+
25
+ module.exports = UpdateRecordsResponseObject;
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Response object from lmdb upsert function
5
+ * @param {Array.<string|number>} written_hashes
6
+ * @param {number} txnTime
7
+ * @param {Array.<Object>} originalRecords
8
+ */
9
+ class UpsertRecordsResponseObject {
10
+ /**
11
+ * @param {Array.<string|number>} written_hashes
12
+ * @param {number} txnTime
13
+ * @param {Array.<Object>} originalRecords
14
+ */
15
+ constructor(written_hashes = [], txnTime = undefined, originalRecords = []) {
16
+ this.written_hashes = written_hashes;
17
+ this.txn_time = txnTime;
18
+ this.original_records = originalRecords;
19
+ }
20
+ }
21
+
22
+ module.exports = UpsertRecordsResponseObject;
@@ -0,0 +1,65 @@
1
+ 'use strict';
2
+
3
+ const environmentUtility = require('./environmentUtility.js');
4
+ const harperLogger = require('../logging/harper_logger.js');
5
+ const LMDB_ERRORS = require('../errors/commonErrors.js').LMDB_ERRORS_ENUM;
6
+
7
+ module.exports = cleanLMDBMap;
8
+
9
+ /**
10
+ * this function strips away the cached environments from global when a schema item is removed
11
+ * @param msg
12
+ */
13
+ async function cleanLMDBMap(msg) {
14
+ try {
15
+ if (global.lmdb_map !== undefined && msg.operation !== undefined) {
16
+ let keys = Object.keys(global.lmdb_map);
17
+ let cachedEnvironment = undefined;
18
+
19
+ switch (msg.operation) {
20
+ case 'drop_schema':
21
+ for (let x = 0; x < keys.length; x++) {
22
+ let key = keys[x];
23
+ if (key.startsWith(`${msg.schema}.`) || key.startsWith(`txn.${msg.schema}.`)) {
24
+ try {
25
+ await environmentUtility.closeEnvironment(global.lmdb_map[key]);
26
+ } catch (err) {
27
+ if (err.message !== LMDB_ERRORS.ENV_REQUIRED) {
28
+ throw err;
29
+ }
30
+ }
31
+ }
32
+ }
33
+ break;
34
+ case 'drop_table':
35
+ // eslint-disable-next-line no-case-declarations
36
+ let schemaTableName = `${msg.schema}.${msg.table}`;
37
+ // eslint-disable-next-line no-case-declarations
38
+ let txnSchemaTableName = `txn.${schemaTableName}`;
39
+ try {
40
+ await environmentUtility.closeEnvironment(global.lmdb_map[schemaTableName]);
41
+ await environmentUtility.closeEnvironment(global.lmdb_map[txnSchemaTableName]);
42
+ } catch (err) {
43
+ if (err.message !== LMDB_ERRORS.ENV_REQUIRED) {
44
+ throw err;
45
+ }
46
+ }
47
+ break;
48
+ case 'drop_attribute':
49
+ cachedEnvironment = global.lmdb_map[`${msg.schema}.${msg.table}`];
50
+ if (
51
+ cachedEnvironment !== undefined &&
52
+ typeof cachedEnvironment.dbis === 'object' &&
53
+ cachedEnvironment.dbis[`${msg.attribute}`] !== undefined
54
+ ) {
55
+ delete cachedEnvironment.dbis[`${msg.attribute}`];
56
+ }
57
+ break;
58
+ default:
59
+ break;
60
+ }
61
+ }
62
+ } catch (e) {
63
+ harperLogger.error(e);
64
+ }
65
+ }
@@ -0,0 +1,130 @@
1
+ 'use strict';
2
+
3
+ const LMDB_ERRORS = require('../errors/commonErrors.js').LMDB_ERRORS_ENUM;
4
+ // eslint-disable-next-line no-unused-vars
5
+ const lmdb = require('lmdb');
6
+ const lmdbTerms = require('./terms.js');
7
+
8
+ const { OVERFLOW_MARKER, MAX_SEARCH_KEY_LENGTH } = lmdbTerms;
9
+ const PRIMITIVES = ['number', 'string', 'symbol', 'boolean', 'bigint'];
10
+ /**
11
+ * validates the env argument
12
+ * @param {lmdb.Transaction|lmdb.RootDatabase} env - environment object used thigh level to interact with all data in an
13
+ * environment
14
+ */
15
+ function validateEnv(env) {
16
+ env = env?.primaryStore || env;
17
+ if (!env) {
18
+ throw new Error(LMDB_ERRORS.ENV_REQUIRED);
19
+ }
20
+ }
21
+
22
+ /**
23
+ * converts raw data to it's string version
24
+ * @param rawValue
25
+ * @returns {Number|String|null}
26
+ */
27
+ function stringifyData(rawValue) {
28
+ if (rawValue === null || rawValue === undefined) {
29
+ return null;
30
+ }
31
+
32
+ let value;
33
+
34
+ try {
35
+ value = typeof rawValue === 'object' ? JSON.stringify(rawValue) : rawValue.toString();
36
+ } catch {
37
+ value = rawValue.toString();
38
+ }
39
+
40
+ return value;
41
+ }
42
+
43
+ /**
44
+ * takes a raw value and converts it to be written to LMDB. lmdb-store accepts primitives ('number', 'string', 'symbol', 'boolean', 'bigint', buffer) and array of primitives as keys.
45
+ * if it is anything else we convert to string
46
+ * @param {*} key - raw value which needs to be converted
47
+ * @returns {*}
48
+ */
49
+ function convertKeyValueToWrite(key) {
50
+ //if this is a primitive return the value
51
+ if (key instanceof Date) {
52
+ return key.valueOf();
53
+ }
54
+ return key;
55
+ }
56
+
57
+ /**
58
+ * Return all the indexable values from an attribute, ready to be indexed
59
+ */
60
+ function getIndexedValues(value, indexNulls) {
61
+ if (value === null) {
62
+ return indexNulls ? [null] : undefined;
63
+ }
64
+ if (value === undefined) {
65
+ return undefined;
66
+ }
67
+ if (PRIMITIVES.includes(typeof value)) {
68
+ if (value.length > MAX_SEARCH_KEY_LENGTH) {
69
+ return [value.slice(0, MAX_SEARCH_KEY_LENGTH) + OVERFLOW_MARKER];
70
+ }
71
+ return [value];
72
+ }
73
+ if (Array.isArray(value)) {
74
+ const values = [];
75
+ for (let i = 0, l = value.length; i < l; i++) {
76
+ let element = value[i];
77
+ if (PRIMITIVES.includes(typeof element)) {
78
+ if (element.length > MAX_SEARCH_KEY_LENGTH) {
79
+ values.push(element.slice(0, MAX_SEARCH_KEY_LENGTH) + OVERFLOW_MARKER);
80
+ } else {
81
+ values.push(element);
82
+ }
83
+ } else if (element === null && indexNulls) {
84
+ values.push(null);
85
+ } else if (element instanceof Date) {
86
+ values.push(element.getTime());
87
+ }
88
+ }
89
+ return values;
90
+ } else if (value instanceof Date) {
91
+ return [value.getTime()];
92
+ }
93
+ return undefined;
94
+ }
95
+
96
+ let lastTime = 0; // reported time used to ensure monotonic time.
97
+ let startTime = 0; // the start time of the (current time relative to performance time counter)
98
+ function adjustStartTime() {
99
+ // calculate the start time
100
+ // TODO: We may actually want to implement a gradual time shift if the clock time really changes substantially
101
+ // and for sub-millisecond updates, may want to average them so we can progressively narrow in on true time
102
+ startTime = Date.now() - performance.now();
103
+ }
104
+ adjustStartTime();
105
+ // we periodically update our start time because clock time can drift (but we still ensure monotonic time)
106
+ const TIME_ADJUSTMENT_INTERVAL = 60000;
107
+ setInterval(adjustStartTime, TIME_ADJUSTMENT_INTERVAL).unref();
108
+ /**
109
+ * A monotonic timestamp that is guaranteed to be higher than the last call to this function.
110
+ * Will use decimal microseconds as necessary to differentiate from previous calls without too much drift.
111
+ */
112
+ function getNextMonotonicTime() {
113
+ let now = performance.now() + startTime;
114
+ if (now > lastTime) {
115
+ // current time is higher than last time, can safely return it
116
+ lastTime = now;
117
+ return now;
118
+ }
119
+ // otherwise, we MUST return a higher time than last time, so we increase the time and return it.
120
+ // increment by as small of count as possible, to minimize how far we are from clock time
121
+ lastTime += 0.000488;
122
+ return lastTime;
123
+ }
124
+ module.exports = {
125
+ validateEnv,
126
+ stringifyData,
127
+ convertKeyValueToWrite,
128
+ getNextMonotonicTime,
129
+ getIndexedValues,
130
+ };
@@ -0,0 +1,128 @@
1
+ 'use strict';
2
+
3
+ const environmentUtil = require('./environmentUtility.js');
4
+ const common = require('./commonUtility.js');
5
+ const LMDB_ERRORS = require('../errors/commonErrors.js').LMDB_ERRORS_ENUM;
6
+ const log = require('../logging/harper_logger.js');
7
+ // eslint-disable-next-line no-unused-vars
8
+ const lmdb = require('lmdb');
9
+ const DeleteRecordsResponseObject = require('./DeleteRecordsResponseObject.js');
10
+ const hdbTerms = require('../hdbTerms.ts');
11
+ const UPDATED_TIME_ATTRIBUTE_NAME = hdbTerms.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;
12
+
13
+ /**
14
+ * deletes rows and their entries in all indices
15
+ * @param {lmdb.RootDatabase} env - environment object used high level to interact with all data in an environment
16
+ * @param {String} hash_attribute - name of the hash_attribute for this environment
17
+ * @param {Array.<String>} ids - list of ids to delete
18
+ * @param {number} whenDeleted - The timestamp of the deletion
19
+ * @returns {Promise<DeleteRecordsResponseObject>}
20
+ */
21
+ async function deleteRecords(env, hash_attribute, ids, whenDeleted) {
22
+ //validate
23
+ common.validateEnv(env);
24
+
25
+ if (hash_attribute === undefined) {
26
+ throw new Error(LMDB_ERRORS.HASH_ATTRIBUTE_REQUIRED);
27
+ }
28
+
29
+ if (!Array.isArray(ids)) {
30
+ if (ids === undefined) {
31
+ throw new Error(LMDB_ERRORS.IDS_REQUIRED);
32
+ }
33
+
34
+ throw new Error(LMDB_ERRORS.IDS_MUST_BE_ITERABLE);
35
+ }
36
+
37
+ try {
38
+ //open all dbis for this env
39
+ let allDbis = environmentUtil.listDBIs(env);
40
+ environmentUtil.initializeDBIs(env, hash_attribute, allDbis);
41
+ let deleted = new DeleteRecordsResponseObject();
42
+
43
+ //iterate records and process deletes
44
+ let hashValue;
45
+ let puts = [];
46
+ let keys = [];
47
+ for (let x = 0, length = ids.length; x < length; x++) {
48
+ try {
49
+ hashValue = ids[x];
50
+
51
+ //attempt to fetch the hash attribute value, this is the row.
52
+ let record = env.dbis[hash_attribute].get(hashValue);
53
+ //if it doesn't exist we skip & move to the next id
54
+ if (
55
+ !record ||
56
+ // of if the deletion timestamp is older than the current record, last-write wins
57
+ (whenDeleted && record[UPDATED_TIME_ATTRIBUTE_NAME] > whenDeleted)
58
+ ) {
59
+ deleted.skipped.push(hashValue);
60
+ continue;
61
+ }
62
+
63
+ let promise = env.dbis[hash_attribute].ifVersion(hashValue, lmdb.IF_EXISTS, () => {
64
+ //always just delete the hash_attribute entry upfront
65
+ env.dbis[hash_attribute].remove(hashValue);
66
+
67
+ //iterate & delete the non-hash attribute entries
68
+ for (let y = 0; y < allDbis.length; y++) {
69
+ let attribute = allDbis[y];
70
+ if (!record.hasOwnProperty(attribute) || attribute === hash_attribute) {
71
+ continue;
72
+ }
73
+
74
+ let dbi = env.dbis[attribute];
75
+ let value = record[attribute];
76
+ if (value !== null && value !== undefined) {
77
+ try {
78
+ let values = common.getIndexedValues(value);
79
+ if (values) {
80
+ for (let i = 0, l = values.length; i < l; i++) {
81
+ dbi.remove(values[i], hashValue);
82
+ }
83
+ }
84
+ } catch {
85
+ log.warn(`cannot delete from attribute: ${attribute}, ${value}:${hashValue}`);
86
+ }
87
+ }
88
+ }
89
+ });
90
+ puts.push(promise);
91
+ keys.push(hashValue);
92
+ deleted.original_records.push(record);
93
+ } catch (e) {
94
+ log.warn(e);
95
+ deleted.skipped.push(hashValue);
96
+ }
97
+ }
98
+
99
+ let removeIndices = [];
100
+ let putResults = await Promise.all(puts);
101
+ for (let x = 0, length = putResults.length; x < length; x++) {
102
+ if (putResults[x] === true) {
103
+ deleted.deleted.push(keys[x]);
104
+ } else {
105
+ deleted.skipped.push(keys[x]);
106
+ removeIndices.push(x);
107
+ }
108
+ }
109
+
110
+ let offset = 0;
111
+ for (let x = 0; x < removeIndices.length; x++) {
112
+ let index = removeIndices[x];
113
+ deleted.original_records.splice(index - offset, 1);
114
+ //the offset needs to increase for every index we remove
115
+ offset++;
116
+ }
117
+
118
+ deleted.txn_time = common.getNextMonotonicTime();
119
+
120
+ return deleted;
121
+ } catch (e) {
122
+ throw e;
123
+ }
124
+ }
125
+
126
+ module.exports = {
127
+ deleteRecords,
128
+ };