@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,221 @@
1
+ import type { User } from '../security/user.ts';
2
+ import type { OperationFunctionName } from '../server/serverHelpers/serverUtilities.ts';
3
+ import { DatabaseTransaction } from './DatabaseTransaction.ts';
4
+ import { IterableEventQueue } from './IterableEventQueue.ts';
5
+ import type { Entry, RecordObject } from './RecordEncoder.ts';
6
+ import { RequestTarget } from './RequestTarget.ts';
7
+
8
+ export interface ResourceInterface<Record extends object = any>
9
+ extends Partial<RecordObject>, Pick<UpdatableRecord<Record>, 'addTo' | 'subtractFrom'> {
10
+ allowRead(user: User, target: RequestTarget, context: Context): boolean | Promise<boolean>;
11
+ get?(
12
+ target?: RequestTargetOrId
13
+ ):
14
+ | (Record & Partial<RecordObject>)
15
+ | Promise<Record & Partial<RecordObject>>
16
+ | AsyncIterable<Record & Partial<RecordObject>>
17
+ | Promise<AsyncIterable<Record & Partial<RecordObject>>>;
18
+ search?(target: RequestTarget): AsyncIterable<Record & Partial<RecordObject>>;
19
+
20
+ allowCreate(user: User, record: Promise<Record & RecordObject>, context: Context): boolean | Promise<boolean>;
21
+ create?(
22
+ newRecord: Partial<Record & RecordObject>,
23
+ target: RequestTargetOrId
24
+ ): void | (Record & Partial<RecordObject>) | Promise<Record & Partial<RecordObject>>;
25
+ post?(
26
+ target: RequestTargetOrId,
27
+ newRecord: Partial<Record & RecordObject>
28
+ ): void | (Record & Partial<RecordObject>) | Promise<Record & Partial<RecordObject>>;
29
+
30
+ allowUpdate(user: User, record: Promise<Record & RecordObject>, context: Context): boolean | Promise<boolean>;
31
+ put?(
32
+ record: Record & RecordObject,
33
+ target?: RequestTargetOrId
34
+ ): void | (Record & Partial<RecordObject>) | Promise<void | (Record & Partial<RecordObject>)>;
35
+ patch?(
36
+ record: Partial<Record & RecordObject>,
37
+ target: RequestTargetOrId
38
+ ): void | (Record & Partial<RecordObject>) | Promise<void | (Record & Partial<RecordObject>)>;
39
+ update?(updates: Record & RecordObject, fullUpdate: true): ResourceInterface<Record & Partial<RecordObject>>;
40
+ update?(
41
+ updates: Partial<Record & RecordObject>,
42
+ fullUpdate?: boolean
43
+ ):
44
+ | ResourceInterface<Record & Partial<RecordObject>>
45
+ | Promise<ResourceInterface<Record & Partial<RecordObject>> | UpdatableRecord<Record & Partial<RecordObject>>>;
46
+
47
+ allowDelete(user: User, target: RequestTarget, context: Context): boolean | Promise<boolean>;
48
+ delete?(target: RequestTargetOrId): boolean | Promise<boolean>;
49
+
50
+ invalidate(target: RequestTargetOrId): void | Promise<void>;
51
+
52
+ publish?(target: RequestTargetOrId, record: Record, options?: any): void;
53
+ subscribe?(request: SubscriptionRequest): AsyncIterable<Record> | Promise<AsyncIterable<Record>>;
54
+
55
+ doesExist(): boolean;
56
+ wasLoadedFromSource(): boolean | void;
57
+
58
+ getCurrentUser(): User | undefined;
59
+ }
60
+
61
+ export interface Session {
62
+ id?: any;
63
+ user?: User;
64
+ update: (updatedSession: any) => unknown;
65
+ delete: (id: any) => Promise<void>;
66
+ }
67
+
68
+ export interface Context {
69
+ /** The user making the request */
70
+ user?: User;
71
+ /** Check the username and password against the core user table to verify user identity */
72
+ login: (username: string, password: string) => Promise<string>;
73
+ /** Describes the current cookie-based session if it is present and grants the capacity to delete it. authentication.enableSessions must be turned on in the harperdb-config.yaml */
74
+ session?: Session;
75
+ /** The database transaction object */
76
+ transaction?: DatabaseTransaction;
77
+ /** If the operation that will be performed with this context should check user authorization */
78
+ authorize?: boolean;
79
+ /** The last modification time of any data that has been accessed with this context */
80
+ lastModified?: number;
81
+ /** The time at which a saved record should expire */
82
+ expiresAt?: number;
83
+ /** Indicates that caching should not be applied */
84
+ noCache?: boolean;
85
+ /** Indicates that values from the source data should be stored as a cached value */
86
+ noCacheStore?: boolean;
87
+ /** Only return values from the table, and don't use data from the source */
88
+ onlyIfCached?: boolean;
89
+ /** Allows data from a caching table to be used if there is an error retrieving data from the source */
90
+ staleIfError?: boolean;
91
+ /** Indicates any cached data must be revalidated */
92
+ mustRevalidate?: boolean;
93
+ /** An array of nodes to replicate to */
94
+ replicateTo?: string[];
95
+ replicateFrom?: boolean;
96
+ replicatedConfirmation?: number;
97
+ originatingOperation?: OperationFunctionName;
98
+ previousResidency?: string[];
99
+ loadedFromSource?: boolean;
100
+ nodeName?: string;
101
+ resourceCache?: Map<Id, any>;
102
+ _freezeRecords?: boolean; // until v5, we conditionally freeze records for back-compat
103
+ timestamp?: number;
104
+ }
105
+
106
+ export interface SourceContext<TRequestContext = Context, Record extends object = any> {
107
+ /** The original request context passed from the caching layer */
108
+ requestContext: TRequestContext;
109
+ /** The existing record, from the existing entry (if any) */
110
+ replacingRecord?: Record;
111
+ /** The existing database entry (if any) */
112
+ replacingEntry?: Entry;
113
+ /** The version/timestamp of the existing record */
114
+ replacingVersion?: number;
115
+ /** Indicates that values from the source data should NOT be stored as a cached value */
116
+ noCacheStore?: boolean;
117
+ /** Reference to the source Resource instance */
118
+ source?: ResourceInterface<Record>;
119
+ /** Shared resource cache from parent context for visibility of modifications */
120
+ resourceCache?: Map<Id, any>;
121
+ /** Database transaction for the context */
122
+ transaction?: DatabaseTransaction;
123
+ /** The time at which the cached entry should expire (ms since epoch) */
124
+ expiresAt?: number;
125
+ /** The last modification time of any data accessed with this context */
126
+ lastModified?: number;
127
+ }
128
+
129
+ export type Operator = 'and' | 'or';
130
+
131
+ export type Comparator =
132
+ | 'between'
133
+ | 'contains'
134
+ | 'ends_with'
135
+ | 'eq'
136
+ | 'equals'
137
+ | 'greater_than'
138
+ | 'greater_than_equal'
139
+ | 'less_than'
140
+ | 'less_than_equal'
141
+ | 'ne'
142
+ | 'not_equal'
143
+ | 'starts_with';
144
+
145
+ export type DirectCondition<Record extends object = any> = TypedDirectCondition<Record, keyof Record>;
146
+
147
+ interface TypedDirectCondition<Record extends object, Property extends keyof Record> {
148
+ attribute?: keyof Record | Array<keyof Record> | string | string[];
149
+ search_attribute?: keyof Record | Array<keyof Record> | string | string[];
150
+ comparator?: Comparator;
151
+ search_type?: Comparator;
152
+ value?: Record[Property];
153
+ search_value?: Record[Property];
154
+ }
155
+
156
+ interface ConditionGroup<Record extends object = any> {
157
+ conditions?: Conditions<Record>;
158
+ operator?: Operator;
159
+ }
160
+ export type Condition<Record extends object = any> = DirectCondition<Record> & ConditionGroup<Record>;
161
+ export type Conditions<Record extends object = any> = Condition<Record>[];
162
+
163
+ export interface Sort<Record extends object = any> {
164
+ attribute: keyof Record;
165
+ descending?: boolean;
166
+ next?: Sort<Record>;
167
+ }
168
+ export interface SubSelect {
169
+ name: string;
170
+ select: (string | SubSelect)[];
171
+ }
172
+ export type Select = (string | SubSelect)[];
173
+
174
+ export interface SubscriptionRequest extends RequestTarget {
175
+ /** The starting time of events to return (defaults to now) */
176
+ startTime?: number;
177
+ /** The count of previously recorded events to return */
178
+ previousCount?: number;
179
+ /** If the current record state should be omitted as the first event */
180
+ omitCurrent?: boolean;
181
+ onlyChildren?: boolean;
182
+ includeDescendants?: boolean;
183
+ supportsTransactions?: boolean;
184
+ rawEvents?: boolean;
185
+ listener?: Listener;
186
+ }
187
+
188
+ export type Query = RequestTarget; // for back-compat
189
+ export type RequestTargetOrId = RequestTarget | Id;
190
+
191
+ export type Id = number | string | (number | string | null)[] | null;
192
+
193
+ export type UpdatableRecord<Record extends object = any> = TypedUpdatableRecord<Record, keyof Record>;
194
+ interface TypedUpdatableRecord<Record extends object, Property extends keyof Record> extends RecordObject {
195
+ set(property: Property, value: Record[Property]): void;
196
+ getProperty(property: Property): Record[Property];
197
+ addTo(property: Property, value: Record[Property]): void;
198
+ subtractFrom(property: Property, value: Record[Property]): void;
199
+ }
200
+
201
+ export interface Subscription<Event extends object = any> extends IterableEventQueue<Event> {
202
+ new (listener: Listener<Event>);
203
+
204
+ listener: Listener<Event>;
205
+ subscriptions: Listener<Event>[];
206
+ startTime?: number;
207
+
208
+ end(): void;
209
+ toJSON(): { name: 'subscription' };
210
+ }
211
+
212
+ type Listener<Payload extends object = any> = (payload: ListenerPayload<Payload>) => void;
213
+
214
+ interface ListenerPayload<Payload extends object = any> {
215
+ id: Id;
216
+ localTime: number;
217
+ value: Payload;
218
+ version: number;
219
+ type: string;
220
+ beginTxn: boolean;
221
+ }
@@ -0,0 +1,162 @@
1
+ import { Resource } from './Resource.ts';
2
+ import { transaction } from './transaction.ts';
3
+ import { ErrorResource } from './ErrorResource.ts';
4
+ import logger from '../utility/logging/harper_logger.js';
5
+ import { ServerError } from '../utility/errors/hdbError.js';
6
+ import { server } from '../server/Server.ts';
7
+
8
+ interface ResourceEntry {
9
+ Resource: typeof Resource;
10
+ path: string;
11
+ exportTypes: any;
12
+ hasSubPaths: boolean;
13
+ relativeURL: string;
14
+ }
15
+
16
+ /**
17
+ * This is the global set of all resources that have been registered on this server.
18
+ */
19
+ export class Resources extends Map<string, ResourceEntry> {
20
+ isWorker = true;
21
+ loginPath?: (request) => string;
22
+
23
+ allTypes: Map<any, any> = new Map();
24
+
25
+ set(path, resource, exportTypes?: { [key: string]: boolean }, force?: boolean): void {
26
+ if (!resource) throw new Error('Must provide a resource');
27
+ if (path.startsWith('/')) path = path.replace(/^\/+/, '');
28
+ const entry = {
29
+ Resource: resource,
30
+ path,
31
+ exportTypes,
32
+ hasSubPaths: false,
33
+ relativeURL: '', // reset after each match
34
+ };
35
+ const existingEntry = super.get(path);
36
+ if (
37
+ existingEntry &&
38
+ (existingEntry.Resource.databaseName !== resource.databaseName ||
39
+ existingEntry.Resource.tableName !== resource.tableName) &&
40
+ !force
41
+ ) {
42
+ // there was a conflict in endpoint paths. We don't want this to be ignored, so we log it
43
+ // and create an error resource to make sure it is reported in any attempt to access this path.
44
+ // it was be a 500 error; clearly a server error (not client error), unfortunate that the 5xx errors
45
+ // don't provide anything more descriptive.
46
+ const error = new ServerError(`Conflicting paths for ${path}`);
47
+ logger.error(error);
48
+ entry.Resource = new ErrorResource(error);
49
+ }
50
+ super.set(path, entry);
51
+ // now mark any entries that have sub paths so we can efficiently route forward
52
+ for (const [path] of this) {
53
+ let slashIndex = 2;
54
+ while ((slashIndex = path.indexOf('/', slashIndex)) > -1) {
55
+ const parentEntry = this.get(path.slice(0, slashIndex));
56
+ if (parentEntry) parentEntry.hasSubPaths = true;
57
+ slashIndex += 2;
58
+ }
59
+ }
60
+ }
61
+
62
+ /**
63
+ * Find the best (longest) match resource path that matches the (beginning of the) provided path, in order to find
64
+ * the correct Resource to handle this URL path.
65
+ * @param path The URL Path
66
+ * @param exportType Optional request content or protocol type, allows control of which protocols can access a resource
67
+ * and future layering of resources (for defining HTML handlers
68
+ * that can further transform data from the main structured object resources).
69
+ * @return The matched Resource class. Note that the remaining path is "returned" by setting the relativeURL property
70
+ */
71
+ getMatch(url: string, exportType?: string): ResourceEntry | undefined {
72
+ let slashIndex = 2;
73
+ let prevSlashIndex = 0;
74
+ let foundEntry: ResourceEntry;
75
+
76
+ const urlLength = url.length;
77
+
78
+ while (slashIndex < urlLength) {
79
+ prevSlashIndex = slashIndex;
80
+ slashIndex = url.indexOf('/', slashIndex);
81
+
82
+ if (slashIndex === -1) {
83
+ slashIndex = urlLength;
84
+ }
85
+
86
+ const resourcePath = slashIndex === urlLength ? url : url.slice(0, slashIndex);
87
+ let entry = this.get(resourcePath);
88
+ let queryIndex = -1;
89
+ if (!entry && slashIndex === urlLength) {
90
+ // try to match the first part of the path if there's a query
91
+ queryIndex = resourcePath.indexOf('?', prevSlashIndex);
92
+ if (queryIndex !== -1) {
93
+ const pathPart = resourcePath.slice(0, queryIndex);
94
+ entry = this.get(pathPart);
95
+ }
96
+ }
97
+ if (entry && (!exportType || entry.exportTypes?.[exportType] !== false)) {
98
+ entry.relativeURL = url.slice(queryIndex !== -1 ? queryIndex : slashIndex);
99
+ if (!entry.hasSubPaths) {
100
+ return entry;
101
+ }
102
+ foundEntry = entry;
103
+ }
104
+
105
+ slashIndex += 2;
106
+ }
107
+
108
+ if (foundEntry) return foundEntry;
109
+
110
+ // try the exact path
111
+ const searchIndex = url.indexOf('?');
112
+ const path = searchIndex > -1 ? url.slice(0, searchIndex) : url;
113
+ foundEntry = this.get(path);
114
+ if (!foundEntry && path.indexOf('.') > -1) {
115
+ foundEntry = this.get(path.split('.')[0]);
116
+ }
117
+ if (foundEntry && (!exportType || foundEntry.exportTypes?.[exportType] !== false)) {
118
+ foundEntry.relativeURL = searchIndex > -1 ? url.slice(searchIndex) : '';
119
+ } else if (!foundEntry) {
120
+ // still not found, see if there is an explicit root path
121
+ foundEntry = this.get('');
122
+ if (foundEntry && (!exportType || foundEntry.exportTypes?.[exportType] !== false)) {
123
+ if (url.charAt(0) !== '/') url = '/' + url;
124
+ foundEntry.relativeURL = url;
125
+ }
126
+ }
127
+ return foundEntry;
128
+ }
129
+
130
+ getResource(path: string, resourceInfo) {
131
+ const entry = this.getMatch(path);
132
+ if (entry) {
133
+ path = entry.relativeURL;
134
+ return entry.Resource.getResource(this.pathToId(path, entry.Resource), resourceInfo);
135
+ }
136
+ }
137
+ call(path: string, request, callback: Function) {
138
+ return transaction(request, async () => {
139
+ const entry = this.getMatch(path);
140
+ if (entry) {
141
+ path = entry.relativeURL;
142
+ return callback(entry.Resource, entry.path, path);
143
+ }
144
+ });
145
+ }
146
+ // eslint-disable-next-line no-unused-vars
147
+ setRepresentation(path, type, representation) {}
148
+ }
149
+ export let resources: Resources;
150
+ export function resetResources() {
151
+ resources = new Resources();
152
+ server.resources = resources;
153
+ return resources;
154
+ }
155
+
156
+ export function keyArrayToString(key) {
157
+ if (Array.isArray(key)) {
158
+ if (key[key.length - 1] === null) return key.slice(0, -1).join('/') + '/';
159
+ else return key.join('/');
160
+ }
161
+ return key;
162
+ }
@@ -0,0 +1,70 @@
1
+ import {
2
+ DBI,
3
+ Store,
4
+ type StoreContext,
5
+ type StoreIteratorOptions,
6
+ type StorePutOptions,
7
+ type StoreRemoveOptions,
8
+ } from '@harperfast/rocksdb-js';
9
+ import { Id } from './ResourceInterface.ts';
10
+ import { MAXIMUM_KEY } from 'ordered-binary';
11
+
12
+ declare module '@harperfast/rocksdb-js' {
13
+ // eslint-disable-next-line no-unused-vars
14
+ interface DBI<T> {
15
+ getValuesCount(indexedValue: any): number;
16
+ }
17
+ }
18
+
19
+ export class RocksIndexStore extends Store {
20
+ /**
21
+ * Get all entries matching the range
22
+ * @param options
23
+ */
24
+ getRange(context: StoreContext, options: StoreIteratorOptions): Iterable<any> {
25
+ let { start, end, exclusiveStart, inclusiveEnd, reverse } = options;
26
+ if ((reverse ? !exclusiveStart : exclusiveStart) && start !== undefined) {
27
+ start = [start, MAXIMUM_KEY];
28
+ }
29
+ if ((reverse ? !inclusiveEnd : inclusiveEnd) && end !== undefined) {
30
+ end = [end, MAXIMUM_KEY];
31
+ }
32
+ const translatedOptions = { ...options, start, end };
33
+ return super.getRange(context, translatedOptions).map(({ key }) => {
34
+ return { key: key[0], value: key.length > 2 ? key.slice(1) : key[1] };
35
+ });
36
+ }
37
+
38
+ /**
39
+ * Translate a put with indexed value and primary key to an underlying put
40
+ * @param indexedValue - ignored, only used by LMDB
41
+ * @param primaryKey
42
+ * @param txnId
43
+ */
44
+ put(context: StoreContext, indexedValue: any, primaryKey: Id, options: StorePutOptions) {
45
+ return super.putSync(context, [indexedValue, primaryKey], null, options);
46
+ }
47
+
48
+ putSync(context: StoreContext, indexedValue: any, primaryKey: Id, options: StorePutOptions) {
49
+ return super.putSync(context, [indexedValue, primaryKey], null, options);
50
+ }
51
+
52
+ remove(context: StoreContext, indexedValue: any, primaryKey: Id, options?: StoreRemoveOptions) {
53
+ return super.removeSync(context, [indexedValue, primaryKey], options);
54
+ }
55
+
56
+ removeSync(context: StoreContext, indexedValue: any, primaryKey: Id, options?: StoreRemoveOptions) {
57
+ super.removeSync(context, [indexedValue, primaryKey], options);
58
+ }
59
+ }
60
+
61
+ /**
62
+ * Add `getValuesCount` to the DBI prototype which is used by the `RocksDatabase` and `Transaction`
63
+ * classes.
64
+ */
65
+ DBI.prototype.getValuesCount = function getValuesCount(indexedValue: any) {
66
+ if (this.store instanceof RocksIndexStore) {
67
+ return this.store.getCount(this._context, { start: indexedValue, end: [indexedValue, MAXIMUM_KEY] });
68
+ }
69
+ throw new Error('getValuesCount is only supported if dupSort=true');
70
+ };