@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,477 @@
1
+ 'use strict';
2
+
3
+ const lmdb = require('lmdb');
4
+ const fs = require('fs-extra');
5
+ const path = require('path');
6
+ const common = require('./commonUtility.js');
7
+ const log = require('../logging/harper_logger.js');
8
+ const LMDB_ERRORS = require('../errors/commonErrors.js').LMDB_ERRORS_ENUM;
9
+ const DBIDefinition = require('./DBIDefinition.js');
10
+ const { OpenDBIObject } = require('./OpenDBIObject.js');
11
+ const OpenEnvironmentObject = require('./OpenEnvironmentObject.js');
12
+ const lmdbTerms = require('./terms.js');
13
+ const hdbTerms = require('../hdbTerms.ts');
14
+ const { resetDatabases } = require('../../resources/databases.ts');
15
+ const envMngr = require('../environment/environmentManager.js');
16
+
17
+ const INTERNAL_DBIS_NAME = lmdbTerms.INTERNAL_DBIS_NAME;
18
+ const DBI_DEFINITION_NAME = lmdbTerms.DBI_DEFINITION_NAME;
19
+ const MDB_LEGACY_FILE_NAME = 'data.mdb';
20
+ const MDB_LEGACY_LOCK_FILE_NAME = 'lock.mdb';
21
+ const MDB_FILE_EXTENSION = '.mdb';
22
+ const MDB_LOCK_FILE_SUFFIX = '-lock';
23
+
24
+ /*** VALIDATION FUNCTIONS ***/
25
+
26
+ /**
27
+ * validates the basePath & envName exist. checks basePath is a valid path
28
+ * @param {String} basePath - top level path the environment folder and the .mdb file live under
29
+ * @param {String} envName - name of environment
30
+ */
31
+ function pathEnvNameValidation(basePath, envName) {
32
+ if (basePath === undefined) {
33
+ throw new Error(LMDB_ERRORS.BASE_PATH_REQUIRED);
34
+ }
35
+
36
+ if (envName === undefined) {
37
+ throw new Error(LMDB_ERRORS.ENV_NAME_REQUIRED);
38
+ }
39
+ }
40
+
41
+ /**
42
+ * checks the environment file exists and returns its path
43
+ * @param {String} basePath - top level path the environment folder and the .mdb file live under
44
+ * @param {String} envName - name of environment
45
+ * @returns {Promise<string>}
46
+ */
47
+ async function validateEnvironmentPath(basePath, envName, allowV3 = true) {
48
+ //verify the basePath is valid
49
+ try {
50
+ await fs.access(basePath);
51
+ } catch (e) {
52
+ if (e.code === 'ENOENT') {
53
+ throw new Error(LMDB_ERRORS.INVALID_BASE_PATH);
54
+ }
55
+ throw e;
56
+ }
57
+ try {
58
+ let standardPath = path.join(basePath, envName + MDB_FILE_EXTENSION);
59
+ await fs.access(standardPath, fs.constants.R_OK | fs.constants.F_OK);
60
+ return standardPath; // success with standard path
61
+ } catch (e) {
62
+ if (e.code === 'ENOENT') {
63
+ if (allowV3) {
64
+ try {
65
+ await fs.access(path.join(basePath, envName, MDB_LEGACY_FILE_NAME), fs.constants.R_OK | fs.constants.F_OK);
66
+ return path.join(basePath, envName);
67
+ } catch (e2) {
68
+ if (e2.code === 'ENOENT') {
69
+ throw new Error(LMDB_ERRORS.INVALID_ENVIRONMENT);
70
+ }
71
+ }
72
+ } else throw new Error(LMDB_ERRORS.INVALID_ENVIRONMENT);
73
+ }
74
+
75
+ throw e;
76
+ }
77
+ }
78
+
79
+ /**
80
+ * validates the env & dbiName variables exist
81
+ * @param {lmdb.RootDatabase} env - lmdb environment object
82
+ * @param {String} dbiName - name of the dbi (KV store)
83
+ */
84
+ function validateEnvDBIName(env, dbiName) {
85
+ common.validateEnv(env);
86
+
87
+ if (dbiName === undefined) {
88
+ throw new Error(LMDB_ERRORS.DBI_NAME_REQUIRED);
89
+ }
90
+ }
91
+
92
+ /*** ENVIRONMENT FUNCTIONS ***/
93
+
94
+ /**
95
+ * creates a new environment
96
+ * @param basePath - base path the environment will reside in
97
+ * @param envName - name of the environment
98
+ * @param {Boolean} isTxn - defines if is a transactions environment
99
+ * @returns {Promise<lmdb.RootDatabase>} - LMDB environment object
100
+ */
101
+ async function createEnvironment(basePath, envName, isTxn = false, isV3 = false) {
102
+ pathEnvNameValidation(basePath, envName);
103
+ let dbName = path.basename(basePath);
104
+
105
+ envName = envName.toString();
106
+ let schemasConfig = envMngr.get(hdbTerms.CONFIG_PARAMS.DATABASES);
107
+ if (!schemasConfig) envMngr.setProperty(hdbTerms.CONFIG_PARAMS.DATABASES, (schemasConfig = {}));
108
+ if (!schemasConfig[dbName]) schemasConfig[dbName] = {};
109
+ schemasConfig[dbName].path = basePath;
110
+ try {
111
+ await validateEnvironmentPath(basePath, envName, isV3);
112
+ //if no error is thrown the environment already exists so we return the handle to that environment
113
+ return openEnvironment(basePath, envName, isTxn);
114
+ } catch (e) {
115
+ if (e.message === LMDB_ERRORS.INVALID_ENVIRONMENT) {
116
+ let environmentPath = path.join(basePath, envName);
117
+ await fs.mkdirp(isV3 ? environmentPath : basePath);
118
+ let envInit = new OpenEnvironmentObject(isV3 ? environmentPath : environmentPath + MDB_FILE_EXTENSION, false);
119
+ let env = lmdb.open(envInit);
120
+
121
+ env.dbis = Object.create(null);
122
+ //next we create an internal dbi to track the named databases
123
+ let dbiInit = new OpenDBIObject(false);
124
+ env.openDB(INTERNAL_DBIS_NAME, dbiInit);
125
+
126
+ //add environment to global variable to cache reference to environment & named databases
127
+ if (global.lmdb_map === undefined) {
128
+ global.lmdb_map = Object.create(null);
129
+ }
130
+ let fullName = getCachedEnvironmentName(basePath, envName, isTxn);
131
+ env[lmdbTerms.ENVIRONMENT_NAME_KEY] = fullName;
132
+ global.lmdb_map[fullName] = env;
133
+
134
+ return env;
135
+ }
136
+ throw e;
137
+ }
138
+ }
139
+
140
+ /**
141
+ * opens an environment
142
+ * @returns {lmdb.RootDatabase} - lmdb environment object
143
+ * @param {String} basePath - the base pase under which the envrinment resides
144
+ * @param {String} envName - the name of the environment
145
+ * @param {Boolean} isTxn - defines if is a transactions environemnt
146
+ */
147
+ async function openEnvironment(basePath, envName, isTxn = false) {
148
+ pathEnvNameValidation(basePath, envName);
149
+ envName = envName.toString();
150
+ let fullName = getCachedEnvironmentName(basePath, envName, isTxn);
151
+
152
+ if (global.lmdb_map === undefined) {
153
+ global.lmdb_map = Object.create(null);
154
+ }
155
+
156
+ if (global.lmdb_map[fullName] !== undefined) {
157
+ return global.lmdb_map[fullName];
158
+ }
159
+ let envPath = await validateEnvironmentPath(basePath, envName);
160
+ let standardPath = path.join(basePath, envName + MDB_FILE_EXTENSION);
161
+ let readOnly = envPath != standardPath; // legacy database, only open in read only mode
162
+ let envInit = new OpenEnvironmentObject(envPath, readOnly);
163
+ let env = lmdb.open(envInit);
164
+
165
+ env.dbis = Object.create(null);
166
+
167
+ let dbis = listDBIs(env);
168
+ for (let x = 0; x < dbis.length; x++) {
169
+ openDBI(env, dbis[x]);
170
+ }
171
+ env[lmdbTerms.ENVIRONMENT_NAME_KEY] = fullName;
172
+ global.lmdb_map[fullName] = env;
173
+
174
+ return env;
175
+ }
176
+
177
+ /**
178
+ * deletes the environment from the file system & removes the reference from global
179
+ * @param {String} basePath - top level path the environment folder and the .mdb file live under
180
+ * @param {String} envName - name of environment
181
+ * @param {Boolean} isTxn - defines if is a transactions environemnt
182
+ */
183
+ async function deleteEnvironment(basePath, envName, isTxn = false) {
184
+ pathEnvNameValidation(basePath, envName);
185
+ envName = envName.toString();
186
+ let standardPath = path.join(basePath, envName + MDB_FILE_EXTENSION);
187
+ let dataPath = await validateEnvironmentPath(basePath, envName);
188
+
189
+ if (global.lmdb_map !== undefined) {
190
+ let fullName = getCachedEnvironmentName(basePath, envName, isTxn);
191
+ if (global.lmdb_map[fullName]) {
192
+ let env = global.lmdb_map[fullName];
193
+ await closeEnvironment(env);
194
+ delete global.lmdb_map[fullName];
195
+ }
196
+ }
197
+ await fs.remove(dataPath);
198
+ await fs.remove(
199
+ dataPath === standardPath
200
+ ? dataPath + MDB_LOCK_FILE_SUFFIX
201
+ : path.join(path.dirname(dataPath), MDB_LEGACY_LOCK_FILE_NAME)
202
+ ); // I suspect we may have problems with this on Windows
203
+ }
204
+
205
+ /**
206
+ * takes an environment and closes it
207
+ * @param {lmdb.RootDatabase} env
208
+ */
209
+ async function closeEnvironment(env) {
210
+ //make sure env is actually a reference to the lmdb environment class so we don't blow anything up
211
+ common.validateEnv(env);
212
+ let environmentName = env[lmdbTerms.ENVIRONMENT_NAME_KEY];
213
+ //we need to close the environment to release the file from the process
214
+ await env.close();
215
+ if (environmentName !== undefined && global.lmdb_map !== undefined) {
216
+ delete global.lmdb_map[environmentName];
217
+ }
218
+ }
219
+
220
+ /**
221
+ * creates a composite name for the environment based on the parent folder name & the environment name.
222
+ * This forces uniqueness when same environment names live under different parent folders
223
+ * @param {String} basePath
224
+ * @param {String} envName
225
+ * @param {Boolean} isTxn - defines if is a transactions environemnt
226
+ * @returns {string}
227
+ */
228
+ function getCachedEnvironmentName(basePath, envName, isTxn = false) {
229
+ let schemaName = path.basename(basePath);
230
+ let fullName = `${schemaName}.${envName}`;
231
+ if (isTxn === true) {
232
+ fullName = `txn.${fullName}`;
233
+ }
234
+ return fullName;
235
+ }
236
+
237
+ /*** DBI FUNCTIONS ***/
238
+
239
+ /**
240
+ * lists dbis in a map with their defintition as the value
241
+ * @param {lmdb.RootDatabase} env - environment object used high level to interact with all data in an environment
242
+ * @returns {{String, DBIDefinition}}
243
+ */
244
+ function listDBIDefinitions(env) {
245
+ common.validateEnv(env);
246
+
247
+ let dbis = Object.create(null);
248
+
249
+ let dbi = openDBI(env, INTERNAL_DBIS_NAME);
250
+ for (let { key, value } of dbi.getRange({ start: false })) {
251
+ if (key !== INTERNAL_DBIS_NAME) {
252
+ try {
253
+ dbis[key] = Object.assign(new DBIDefinition(), value);
254
+ } catch {
255
+ log.warn(`an internal error occurred: unable to parse DBI Definition for ${key}`);
256
+ }
257
+ }
258
+ }
259
+ return dbis;
260
+ }
261
+
262
+ /**
263
+ * lists all dbis in an environment
264
+ * @param {lmdb.RootDatabase} env - environment object used high level to interact with all data in an environment
265
+ * @returns {[String]}
266
+ */
267
+ function listDBIs(env) {
268
+ common.validateEnv(env);
269
+
270
+ let dbis = [];
271
+
272
+ let dbi = openDBI(env, INTERNAL_DBIS_NAME);
273
+
274
+ for (let { key } of dbi.getRange({ start: false })) {
275
+ if (key !== INTERNAL_DBIS_NAME) {
276
+ dbis.push(key);
277
+ }
278
+ }
279
+ return dbis;
280
+ }
281
+
282
+ /**
283
+ * fetches an individual dbi definition from the internal dbi
284
+ * @param {lmdb.RootDatabase} env
285
+ * @param dbiName
286
+ * @returns {undefined|DBIDefinition}
287
+ */
288
+ function getDBIDefinition(env, dbiName) {
289
+ let dbi = openDBI(env, INTERNAL_DBIS_NAME);
290
+
291
+ let found = dbi.getEntry(dbiName);
292
+ let dbiDefinition = new DBIDefinition();
293
+
294
+ if (found === undefined) {
295
+ return;
296
+ }
297
+
298
+ try {
299
+ dbiDefinition = Object.assign(dbiDefinition, found.value);
300
+ } catch {
301
+ log.warn(`an internal error occurred: unable to parse DBI Definition for ${found}`);
302
+ }
303
+
304
+ return dbiDefinition;
305
+ }
306
+
307
+ /**
308
+ * creates a new named database in an environment
309
+ * @param {lmdb.RootDatabase} env - environment object used high level to interact with all data in an environment
310
+ * @param {String} dbiName - name of the dbi (KV store)
311
+ * @param {Boolean} [dupSort] - optional, determines if the dbi allows duplicate keys or not
312
+ * @param {Boolean} isHashAttribute - defines if the dbi being created is the hash_attribute fro the environment / table
313
+ * @returns {*} - reference to the dbi
314
+ */
315
+ function createDBI(env, dbiName, dupSort, isHashAttribute = !dupSort) {
316
+ validateEnvDBIName(env, dbiName);
317
+ dbiName = dbiName.toString();
318
+ if (dbiName === INTERNAL_DBIS_NAME) {
319
+ throw new Error(LMDB_ERRORS.CANNOT_CREATE_INTERNAL_DBIS_NAME);
320
+ }
321
+ /*if (isHashAttribute) return; // should already be created
322
+ return env.addAttribute({ name: dbiName, indexed: true });*/
323
+
324
+ try {
325
+ //first check if the dbi exists
326
+ return openDBI(env, dbiName);
327
+ } catch (e) {
328
+ //if not create it
329
+ if (e.message === LMDB_ERRORS.DBI_DOES_NOT_EXIST) {
330
+ //we version just the hash attribute index
331
+ let dbiInit = new OpenDBIObject(dupSort, isHashAttribute === true);
332
+
333
+ let newDbi = env.openDB(dbiName, dbiInit);
334
+
335
+ let dbiDefinition = new DBIDefinition(dupSort === true, isHashAttribute);
336
+ newDbi[DBI_DEFINITION_NAME] = dbiDefinition;
337
+
338
+ let dbis = openDBI(env, INTERNAL_DBIS_NAME);
339
+ dbis.putSync(dbiName, dbiDefinition);
340
+
341
+ env.dbis[dbiName] = newDbi;
342
+
343
+ return newDbi;
344
+ }
345
+
346
+ throw e;
347
+ }
348
+ }
349
+
350
+ /**
351
+ * opens an existing named database from an environment
352
+ * @param {lmdb.RootDatabase} env - environment object used thigh level to interact with all data in an environment
353
+ * @param {String} dbiName - name of the dbi (KV store)
354
+ * @returns {lmdb.Database} - returns reference to the dbi
355
+ */
356
+ function openDBI(env, dbiName) {
357
+ validateEnvDBIName(env, dbiName);
358
+ dbiName = dbiName.toString();
359
+ if (env.dbis[dbiName] !== undefined) {
360
+ return env.dbis[dbiName];
361
+ }
362
+
363
+ let dbiDefinition;
364
+ if (dbiName !== INTERNAL_DBIS_NAME) {
365
+ dbiDefinition = getDBIDefinition(env, dbiName);
366
+ } else {
367
+ dbiDefinition = new DBIDefinition();
368
+ }
369
+ if (dbiDefinition === undefined) {
370
+ throw new Error(LMDB_ERRORS.DBI_DOES_NOT_EXIST);
371
+ }
372
+
373
+ let dbi;
374
+ try {
375
+ let dbiInit = new OpenDBIObject(dbiDefinition.dup_sort, dbiDefinition.useVersions);
376
+ dbi = env.openDB(dbiName, dbiInit);
377
+ //current version of lmdb no longer throws an error if you attempt to open a non-existent dbi, simulating old behavior
378
+ if (dbi.db === undefined) {
379
+ throw new Error('MDB_NOTFOUND');
380
+ }
381
+ } catch (e) {
382
+ if (e.message.includes('MDB_NOTFOUND') === true) {
383
+ throw new Error(LMDB_ERRORS.DBI_DOES_NOT_EXIST);
384
+ }
385
+
386
+ throw e;
387
+ }
388
+ dbi[DBI_DEFINITION_NAME] = dbiDefinition;
389
+ env.dbis[dbiName] = dbi;
390
+ return dbi;
391
+ }
392
+
393
+ /**
394
+ * gets the statistics for a named database from the environment
395
+ * @param {lmdb.RootDatabase} env - environment object used thigh level to interact with all data in an environment
396
+ * @param {String} dbiName - name of the dbi (KV store)
397
+ * @returns {void | Promise<Stats> | *} - object holding stats for the dbi
398
+ */
399
+ function statDBI(env, dbiName) {
400
+ validateEnvDBIName(env, dbiName);
401
+ dbiName = dbiName.toString();
402
+ let dbi = openDBI(env, dbiName);
403
+
404
+ let stats = dbi.getStats();
405
+ if (dbi[lmdbTerms.DBI_DEFINITION_NAME].isPrimaryKey && stats.entryCount > 0) {
406
+ stats.entryCount--;
407
+ }
408
+
409
+ return stats;
410
+ }
411
+
412
+ /**
413
+ * removes a named database from an environment
414
+ * @param {lmdb.RootDatabase} env - environment object used thigh level to interact with all data in an environment
415
+ * @param {String} dbiName - name of the dbi (KV store)
416
+ */
417
+ function dropDBI(env, dbiName) {
418
+ validateEnvDBIName(env, dbiName);
419
+ dbiName = dbiName.toString();
420
+ if (dbiName === INTERNAL_DBIS_NAME) {
421
+ throw new Error(LMDB_ERRORS.CANNOT_DROP_INTERNAL_DBIS_NAME);
422
+ }
423
+
424
+ let dbi = openDBI(env, dbiName);
425
+ dbi.dropSync();
426
+
427
+ if (env.dbis !== undefined) {
428
+ delete env.dbis[dbiName];
429
+ }
430
+
431
+ let dbis = openDBI(env, INTERNAL_DBIS_NAME);
432
+ dbis.removeSync(dbiName);
433
+ }
434
+
435
+ /**
436
+ * opens/ creates all specified attributes
437
+ * @param {lmdb.RootDatabase} env - lmdb environment object
438
+ * @param {String} hash_attribute - name of the table's hash attribute
439
+ * @param {Array.<String>} writeAttributes - list of all attributes to write to the database
440
+ */
441
+ function initializeDBIs(env, hash_attribute, writeAttributes) {
442
+ let createdAttributes;
443
+ for (let x = 0; x < writeAttributes.length; x++) {
444
+ let attribute = writeAttributes[x];
445
+
446
+ //check the internal cache to see if the dbi has been intialized
447
+ if (!env.dbis[attribute]) {
448
+ //if the dbi has not been intialized & cached attempt to open
449
+ try {
450
+ openDBI(env, attribute);
451
+ } catch (e) {
452
+ //if not opened, create it
453
+ if (e.message === LMDB_ERRORS.DBI_DOES_NOT_EXIST) {
454
+ createDBI(env, attribute, attribute !== hash_attribute, attribute === hash_attribute);
455
+ createdAttributes = true;
456
+ } else {
457
+ throw e;
458
+ }
459
+ }
460
+ }
461
+ }
462
+ if (createdAttributes) resetDatabases();
463
+ }
464
+
465
+ module.exports = {
466
+ openDBI,
467
+ openEnvironment,
468
+ createEnvironment,
469
+ listDBIs,
470
+ listDBIDefinitions,
471
+ createDBI,
472
+ dropDBI,
473
+ statDBI,
474
+ deleteEnvironment,
475
+ initializeDBIs,
476
+ closeEnvironment,
477
+ };
@@ -0,0 +1,187 @@
1
+ 'use strict';
2
+
3
+ const hdbTerms = require('../hdbTerms.ts');
4
+
5
+ function parseRow(originalObject, attributes) {
6
+ let returnObject = Object.create(null);
7
+
8
+ if (attributes.length === 1 && hdbTerms.SEARCH_WILDCARDS.indexOf(attributes[0]) >= 0) {
9
+ Object.assign(returnObject, originalObject);
10
+ } else {
11
+ for (let x = 0; x < attributes.length; x++) {
12
+ let attribute = attributes[x];
13
+ let attributeValue = originalObject[attribute];
14
+ returnObject[attribute] = attributeValue === undefined ? null : attributeValue;
15
+ }
16
+ }
17
+
18
+ return returnObject;
19
+ }
20
+
21
+ /**
22
+ * The internal iterator function for searchAll
23
+ * @param {[String]} attributes
24
+ * @param {String|Number} key
25
+ * @param {*} value
26
+ * @param {[]} results
27
+ */
28
+ function searchAll(attributes, key, value, results) {
29
+ let obj = parseRow(value, attributes);
30
+ results.push(obj);
31
+ }
32
+
33
+ /**
34
+ * The internal iterator function for searchAll
35
+ * @param {[String]} attributes
36
+ * @param {String|Number} key
37
+ * @param {*} value
38
+ * @param {Object} results
39
+ */
40
+ function searchAllToMap(attributes, key, value, results) {
41
+ let obj = parseRow(value, attributes);
42
+ results[key] = obj;
43
+ }
44
+
45
+ /**
46
+ * The internal iterator function for iterateDBI
47
+ * @param {*} key
48
+ * @param {*} value
49
+ * @param {[]} results
50
+ */
51
+ function iterateDBI(key, value, results) {
52
+ if (results[key] === undefined) {
53
+ results[key] = [];
54
+ }
55
+ results[key].push(value);
56
+ }
57
+
58
+ /**
59
+ * internal function used to add hash value to results, in the scenario of a hash_attribute dbi we just need to add the found key, otherwise we get the value
60
+ * @param {*} key
61
+ * @param {*} value
62
+ * @param {[[],[]]} results
63
+ * @param {String} hash_attribute
64
+ * @param {String} attribute
65
+ */
66
+ function pushResults(key, value, results, hash_attribute, attribute) {
67
+ let newObject = Object.create(null);
68
+ newObject[attribute] = key;
69
+ let hashValue = undefined;
70
+
71
+ if (hash_attribute === attribute) {
72
+ hashValue = key;
73
+ } else {
74
+ hashValue = value;
75
+ if (hash_attribute !== undefined) {
76
+ newObject[hash_attribute] = hashValue;
77
+ }
78
+ }
79
+ results[0].push(hashValue);
80
+ results[1].push(newObject);
81
+ }
82
+
83
+ /**
84
+ * The internal iterator function for endsWith
85
+ * @param {String} compareValue
86
+ * @param {*} found
87
+ * @param {*} value
88
+ * @param {Object} results
89
+ * @param {String} hash_attribute
90
+ * @param {String} attribute
91
+ */
92
+ function endsWith(compareValue, found, value, results, hash_attribute, attribute) {
93
+ let foundStr = found.toString();
94
+ if (foundStr.endsWith(compareValue)) {
95
+ pushResults(found, value, results, hash_attribute, attribute);
96
+ }
97
+ }
98
+
99
+ /**
100
+ * The internal iterator function for contains
101
+ * @param {*} compareValue
102
+ * @param {*} key
103
+ * @param {*} value
104
+ * @param {Object} results
105
+ * @param {String} hash_attribute
106
+ * @param {String} attribute
107
+ */
108
+ function contains(compareValue, key, value, results, hash_attribute, attribute) {
109
+ let foundStr = key.toString();
110
+ if (foundStr.includes(compareValue)) {
111
+ pushResults(key, value, results, hash_attribute, attribute);
112
+ }
113
+ }
114
+
115
+ /**
116
+ * The internal iterator function for greater than, used for string keyed dbis and a string compareValue
117
+ * @param {*} compareValue
118
+ * @param {*} key
119
+ * @param {*} value
120
+ * @param {Object} results
121
+ * @param {String} hash_attribute
122
+ * @param {String} attribute
123
+ */
124
+ function greaterThanCompare(compareValue, key, value, results, hash_attribute, attribute) {
125
+ if (key > compareValue) {
126
+ pushResults(key, value, results, hash_attribute, attribute);
127
+ }
128
+ }
129
+
130
+ /**
131
+ * The internal iterator function for greater than equal, used for string keyed dbis and a sring compareValue
132
+ * @param {*} key
133
+ * @param {*} value
134
+ * @param {[[],[]]} results
135
+ * @param {*} compareValue
136
+ * @param {String} hash_attribute
137
+ * @param {String} attribute
138
+ */
139
+ function greaterThanEqualCompare(compareValue, key, value, results, hash_attribute, attribute) {
140
+ if (key >= compareValue) {
141
+ pushResults(key, value, results, hash_attribute, attribute);
142
+ }
143
+ }
144
+
145
+ /**
146
+ * The internal iterator function for less than, used for string keyed dbis and a string compareValue
147
+ * @param {*} key
148
+ * @param {*} value
149
+ * @param {Object} results
150
+ * @param {*} compareValue
151
+ * @param {String} hash_attribute
152
+ * @param {String} attribute
153
+ */
154
+ function lessThanCompare(compareValue, key, value, results, hash_attribute, attribute) {
155
+ if (key < compareValue) {
156
+ pushResults(key, value, results, hash_attribute, attribute);
157
+ }
158
+ }
159
+
160
+ /**
161
+ * The internal iterator function for less than equal, used for string keyed dbis and a string compareValue
162
+ * @param {*} key
163
+ * @param {*} value
164
+ * @param {[[],[]]} results
165
+ * @param {*} compareValue
166
+ * @param {String} hash_attribute
167
+ * @param {String} attribute
168
+ */
169
+ function lessThanEqualCompare(compareValue, key, value, results, hash_attribute, attribute) {
170
+ if (key <= compareValue) {
171
+ pushResults(key, value, results, hash_attribute, attribute);
172
+ }
173
+ }
174
+
175
+ module.exports = {
176
+ parseRow,
177
+ searchAll,
178
+ searchAllToMap,
179
+ iterateDBI,
180
+ endsWith,
181
+ contains,
182
+ greaterThanCompare,
183
+ greaterThanEqualCompare,
184
+ lessThanCompare,
185
+ lessThanEqualCompare,
186
+ pushResults,
187
+ };