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

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 (444) 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/components/Logger.js +3 -0
  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 +16 -9
  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/RocksIndexStore.d.ts +3 -3
  145. package/dist/resources/RocksTransactionLogStore.d.ts +6 -3
  146. package/dist/resources/Table.d.ts +15 -6
  147. package/dist/resources/Table.js +4 -1
  148. package/dist/resources/Table.js.map +1 -1
  149. package/dist/resources/analytics/read.js +32 -22
  150. package/dist/resources/analytics/read.js.map +1 -1
  151. package/dist/resources/analytics/write.js +3 -6
  152. package/dist/resources/analytics/write.js.map +1 -1
  153. package/dist/resources/auditStore.d.ts +3 -3
  154. package/dist/resources/blob.d.ts +25 -2
  155. package/dist/resources/databases.d.ts +12 -2
  156. package/dist/resources/databases.js +22 -19
  157. package/dist/resources/databases.js.map +1 -1
  158. package/dist/resources/search.js +11 -5
  159. package/dist/resources/search.js.map +1 -1
  160. package/dist/resources/transaction.d.ts +2 -1
  161. package/dist/security/auth.js +1 -1
  162. package/dist/security/auth.js.map +1 -1
  163. package/dist/security/cryptoHash.d.ts +2 -2
  164. package/dist/security/jsLoader.js +243 -66
  165. package/dist/security/jsLoader.js.map +1 -1
  166. package/dist/security/keys.js +4 -5
  167. package/dist/security/keys.js.map +1 -1
  168. package/dist/security/user.js +3 -3
  169. package/dist/security/user.js.map +1 -1
  170. package/dist/server/REST.js +16 -2
  171. package/dist/server/REST.js.map +1 -1
  172. package/dist/server/Server.d.ts +2 -1
  173. package/dist/server/Server.js.map +1 -1
  174. package/dist/server/fastifyRoutes/plugins/hdbCore.d.ts +6 -1
  175. package/dist/server/fastifyRoutes.js +2 -0
  176. package/dist/server/fastifyRoutes.js.map +1 -1
  177. package/dist/server/http.js +12 -6
  178. package/dist/server/http.js.map +1 -1
  179. package/dist/server/jobs/JobObject.d.ts +3 -3
  180. package/dist/server/loadRootComponents.js +1 -0
  181. package/dist/server/loadRootComponents.js.map +1 -1
  182. package/dist/server/operationsServer.js +3 -1
  183. package/dist/server/operationsServer.js.map +1 -1
  184. package/dist/server/serverHelpers/JSONStream.d.ts +3 -3
  185. package/dist/server/serverHelpers/Request.d.ts +5 -5
  186. package/dist/server/serverHelpers/requestTimePlugin.d.ts +1 -1
  187. package/dist/server/threads/manageThreads.d.ts +2 -2
  188. package/dist/server/threads/manageThreads.js +50 -35
  189. package/dist/server/threads/manageThreads.js.map +1 -1
  190. package/dist/server/threads/socketRouter.d.ts +1 -1
  191. package/dist/sqlTranslator/deleteTranslator.d.ts +1 -1
  192. package/dist/utility/AWS/AWSConnector.d.ts +3 -2
  193. package/dist/utility/common_utils.d.ts +3 -3
  194. package/dist/utility/environment/systemInformation.d.ts +1 -0
  195. package/dist/utility/functions/date/dateFunctions.d.ts +11 -11
  196. package/dist/utility/globalSchema.d.ts +1 -1
  197. package/dist/utility/hdbTerms.d.ts +3 -0
  198. package/dist/utility/hdbTerms.js +3 -0
  199. package/dist/utility/hdbTerms.js.map +1 -1
  200. package/dist/utility/installation.d.ts +2 -4
  201. package/dist/utility/installation.js.map +1 -1
  202. package/dist/utility/lmdb/commonUtility.d.ts +1 -0
  203. package/dist/utility/lmdb/deleteUtility.d.ts +1 -0
  204. package/dist/utility/lmdb/environmentUtility.d.ts +1 -0
  205. package/dist/utility/lmdb/searchUtility.d.ts +2 -1
  206. package/dist/utility/lmdb/writeUtility.d.ts +1 -0
  207. package/dist/utility/logging/harper_logger.d.ts +6 -6
  208. package/dist/utility/processManagement/processManagement.d.ts +1 -1
  209. package/dist/utility/processManagement/servicesConfig.d.ts +12 -6
  210. package/dist/validation/common_validators.d.ts +4 -3
  211. package/dist/validation/configValidator.d.ts +3 -2
  212. package/index.d.ts +56 -0
  213. package/index.js +41 -0
  214. package/json/systemSchema.json +373 -0
  215. package/launchServiceScripts/launchHarperDB.js +3 -0
  216. package/launchServiceScripts/utility/checkNodeVersion.js +15 -0
  217. package/package.json +21 -3
  218. package/resources/DatabaseTransaction.ts +378 -0
  219. package/resources/ErrorResource.ts +57 -0
  220. package/resources/IterableEventQueue.ts +94 -0
  221. package/resources/LMDBTransaction.ts +349 -0
  222. package/resources/RecordEncoder.ts +702 -0
  223. package/resources/RequestTarget.ts +134 -0
  224. package/resources/Resource.ts +789 -0
  225. package/resources/ResourceInterface.ts +221 -0
  226. package/resources/ResourceInterfaceV2.ts +53 -0
  227. package/resources/ResourceV2.ts +67 -0
  228. package/resources/Resources.ts +162 -0
  229. package/resources/RocksIndexStore.ts +70 -0
  230. package/resources/RocksTransactionLogStore.ts +352 -0
  231. package/resources/Table.ts +4527 -0
  232. package/resources/analytics/hostnames.ts +72 -0
  233. package/resources/analytics/metadata.ts +10 -0
  234. package/resources/analytics/read.ts +252 -0
  235. package/resources/analytics/write.ts +803 -0
  236. package/resources/auditStore.ts +556 -0
  237. package/resources/blob.ts +1268 -0
  238. package/resources/crdt.ts +125 -0
  239. package/resources/dataLoader.ts +527 -0
  240. package/resources/databases.ts +1290 -0
  241. package/resources/graphql.ts +221 -0
  242. package/resources/indexes/HierarchicalNavigableSmallWorld.ts +638 -0
  243. package/resources/indexes/customIndexes.ts +7 -0
  244. package/resources/indexes/vector.ts +38 -0
  245. package/resources/jsResource.ts +86 -0
  246. package/resources/loadEnv.ts +22 -0
  247. package/resources/login.ts +18 -0
  248. package/resources/openApi.ts +409 -0
  249. package/resources/registrationDeprecated.ts +8 -0
  250. package/resources/replayLogs.ts +136 -0
  251. package/resources/roles.ts +98 -0
  252. package/resources/search.ts +1301 -0
  253. package/resources/tracked.ts +584 -0
  254. package/resources/transaction.ts +89 -0
  255. package/resources/transactionBroadcast.ts +258 -0
  256. package/security/auth.ts +376 -0
  257. package/security/certificateVerification/certificateVerificationSource.ts +84 -0
  258. package/security/certificateVerification/configValidation.ts +107 -0
  259. package/security/certificateVerification/crlVerification.ts +623 -0
  260. package/security/certificateVerification/index.ts +121 -0
  261. package/security/certificateVerification/ocspVerification.ts +148 -0
  262. package/security/certificateVerification/pkijs-ed25519-patch.ts +188 -0
  263. package/security/certificateVerification/types.ts +128 -0
  264. package/security/certificateVerification/verificationConfig.ts +138 -0
  265. package/security/certificateVerification/verificationUtils.ts +447 -0
  266. package/security/cryptoHash.js +42 -0
  267. package/security/data_objects/PermissionAttributeResponseObject.js +15 -0
  268. package/security/data_objects/PermissionResponseObject.js +115 -0
  269. package/security/data_objects/PermissionTableResponseObject.js +20 -0
  270. package/security/fastifyAuth.js +169 -0
  271. package/security/impersonation.ts +160 -0
  272. package/security/jsLoader.ts +716 -0
  273. package/security/keys.js +948 -0
  274. package/security/permissionsTranslator.js +300 -0
  275. package/security/role.js +218 -0
  276. package/security/tokenAuthentication.ts +228 -0
  277. package/security/user.ts +449 -0
  278. package/server/DurableSubscriptionsSession.ts +503 -0
  279. package/server/REST.ts +407 -0
  280. package/server/Server.ts +89 -0
  281. package/server/fastifyRoutes/helpers/getCORSOptions.js +36 -0
  282. package/server/fastifyRoutes/helpers/getHeaderTimeoutConfig.js +15 -0
  283. package/server/fastifyRoutes/helpers/getServerOptions.js +33 -0
  284. package/server/fastifyRoutes/plugins/hdbCore.js +39 -0
  285. package/server/fastifyRoutes.ts +205 -0
  286. package/server/graphqlQuerying.ts +700 -0
  287. package/server/http.ts +640 -0
  288. package/server/itc/serverHandlers.js +161 -0
  289. package/server/itc/utility/ITCEventObject.js +10 -0
  290. package/server/jobs/JobObject.js +24 -0
  291. package/server/jobs/jobProcess.js +69 -0
  292. package/server/jobs/jobRunner.js +162 -0
  293. package/server/jobs/jobs.js +304 -0
  294. package/server/loadRootComponents.js +44 -0
  295. package/server/mqtt.ts +485 -0
  296. package/server/nodeName.ts +75 -0
  297. package/server/operationsServer.ts +313 -0
  298. package/server/serverHelpers/Headers.ts +108 -0
  299. package/server/serverHelpers/JSONStream.ts +269 -0
  300. package/server/serverHelpers/OperationFunctionObject.ts +13 -0
  301. package/server/serverHelpers/Request.ts +158 -0
  302. package/server/serverHelpers/contentTypes.ts +637 -0
  303. package/server/serverHelpers/requestTimePlugin.js +57 -0
  304. package/server/serverHelpers/serverHandlers.js +148 -0
  305. package/server/serverHelpers/serverUtilities.ts +473 -0
  306. package/server/serverRegistry.ts +8 -0
  307. package/server/static.ts +187 -0
  308. package/server/status/definitions.ts +37 -0
  309. package/server/status/index.ts +125 -0
  310. package/server/storageReclamation.ts +93 -0
  311. package/server/threads/itc.js +89 -0
  312. package/server/threads/manageThreads.js +594 -0
  313. package/server/threads/socketRouter.ts +360 -0
  314. package/server/threads/threadServer.js +279 -0
  315. package/server/throttle.ts +73 -0
  316. package/sqlTranslator/SelectValidator.js +330 -0
  317. package/sqlTranslator/alasqlFunctionImporter.js +62 -0
  318. package/sqlTranslator/deleteTranslator.js +67 -0
  319. package/sqlTranslator/index.js +242 -0
  320. package/sqlTranslator/sql_statement_bucket.js +472 -0
  321. package/static/defaultConfig.yaml +3 -0
  322. package/studio/web/HDBDogOnly.svg +78 -0
  323. package/studio/web/assets/PPRadioGrotesk-Bold-DDaUYG8E.woff +0 -0
  324. package/studio/web/assets/fa-brands-400-CEJbCg16.woff +0 -0
  325. package/studio/web/assets/fa-brands-400-CSYNqBb_.ttf +0 -0
  326. package/studio/web/assets/fa-brands-400-DnkPfk3o.eot +0 -0
  327. package/studio/web/assets/fa-brands-400-UxlILjvJ.woff2 +0 -0
  328. package/studio/web/assets/fa-brands-400-cH1MgKbP.svg +3717 -0
  329. package/studio/web/assets/fa-regular-400-BhTwtT8w.eot +0 -0
  330. package/studio/web/assets/fa-regular-400-D1vz6WBx.ttf +0 -0
  331. package/studio/web/assets/fa-regular-400-DFnMcJPd.woff +0 -0
  332. package/studio/web/assets/fa-regular-400-DGzu1beS.woff2 +0 -0
  333. package/studio/web/assets/fa-regular-400-gwj8Pxq-.svg +801 -0
  334. package/studio/web/assets/fa-solid-900-B4ZZ7kfP.svg +5034 -0
  335. package/studio/web/assets/fa-solid-900-B6Axprfb.eot +0 -0
  336. package/studio/web/assets/fa-solid-900-BUswJgRo.woff2 +0 -0
  337. package/studio/web/assets/fa-solid-900-DOXgCApm.woff +0 -0
  338. package/studio/web/assets/fa-solid-900-mxuxnBEa.ttf +0 -0
  339. package/studio/web/assets/index-BTgXJX9d.js +235 -0
  340. package/studio/web/assets/index-BTgXJX9d.js.map +1 -0
  341. package/studio/web/assets/index-C-GXfcup.js +37 -0
  342. package/studio/web/assets/index-C-GXfcup.js.map +1 -0
  343. package/studio/web/assets/index-PFlNdimM.js +2 -0
  344. package/studio/web/assets/index-PFlNdimM.js.map +1 -0
  345. package/studio/web/assets/index-Y2g_iFpU.css +1 -0
  346. package/studio/web/assets/index-jiPwkrsB.css +1 -0
  347. package/studio/web/assets/index.lazy-C3TJZJ4o.js +266 -0
  348. package/studio/web/assets/index.lazy-C3TJZJ4o.js.map +1 -0
  349. package/studio/web/assets/profiler-DotzgiCJ.js +2 -0
  350. package/studio/web/assets/profiler-DotzgiCJ.js.map +1 -0
  351. package/studio/web/assets/react-redux-VxUEx_mU.js +6 -0
  352. package/studio/web/assets/react-redux-VxUEx_mU.js.map +1 -0
  353. package/studio/web/assets/startRecording-B_9J9Csd.js +3 -0
  354. package/studio/web/assets/startRecording-B_9J9Csd.js.map +1 -0
  355. package/studio/web/fabric-signup-background.webp +0 -0
  356. package/studio/web/fabric-signup-text.png +0 -0
  357. package/studio/web/favicon_purple.png +0 -0
  358. package/studio/web/github-icon.svg +15 -0
  359. package/studio/web/harper-fabric_black.png +0 -0
  360. package/studio/web/harper-fabric_white.png +0 -0
  361. package/studio/web/harper-studio_white.png +0 -0
  362. package/studio/web/index.html +16 -0
  363. package/studio/web/running.css +148 -0
  364. package/studio/web/running.html +147 -0
  365. package/studio/web/running.js +111 -0
  366. package/upgrade/UpgradeObjects.js +13 -0
  367. package/upgrade/directives/directivesController.js +90 -0
  368. package/upgrade/directivesManager.js +139 -0
  369. package/upgrade/upgradePrompt.js +124 -0
  370. package/upgrade/upgradeUtilities.js +28 -0
  371. package/utility/AWS/AWSConnector.js +29 -0
  372. package/utility/OperationFunctionCaller.js +63 -0
  373. package/utility/assignCmdEnvVariables.js +62 -0
  374. package/utility/common_utils.js +867 -0
  375. package/utility/environment/environmentManager.js +208 -0
  376. package/utility/environment/systemInformation.js +355 -0
  377. package/utility/errors/commonErrors.js +267 -0
  378. package/utility/errors/hdbError.js +146 -0
  379. package/utility/functions/date/dateFunctions.js +65 -0
  380. package/utility/functions/geo.js +355 -0
  381. package/utility/functions/sql/alaSQLExtension.js +104 -0
  382. package/utility/globalSchema.js +35 -0
  383. package/utility/hdbTerms.ts +819 -0
  384. package/utility/install/checkJWTTokensExist.js +62 -0
  385. package/utility/install/harperdb.conf +15 -0
  386. package/utility/install/harperdb.service +14 -0
  387. package/utility/install/installer.js +635 -0
  388. package/utility/installation.ts +30 -0
  389. package/utility/lmdb/DBIDefinition.js +20 -0
  390. package/utility/lmdb/DeleteRecordsResponseObject.js +25 -0
  391. package/utility/lmdb/InsertRecordsResponseObject.js +22 -0
  392. package/utility/lmdb/OpenDBIObject.js +31 -0
  393. package/utility/lmdb/OpenEnvironmentObject.js +41 -0
  394. package/utility/lmdb/UpdateRecordsResponseObject.js +25 -0
  395. package/utility/lmdb/UpsertRecordsResponseObject.js +22 -0
  396. package/utility/lmdb/cleanLMDBMap.js +65 -0
  397. package/utility/lmdb/commonUtility.js +119 -0
  398. package/utility/lmdb/deleteUtility.js +128 -0
  399. package/utility/lmdb/environmentUtility.js +477 -0
  400. package/utility/lmdb/searchCursorFunctions.js +187 -0
  401. package/utility/lmdb/searchUtility.js +918 -0
  402. package/utility/lmdb/terms.js +57 -0
  403. package/utility/lmdb/writeUtility.js +407 -0
  404. package/utility/logging/harper_logger.js +876 -0
  405. package/utility/logging/logRotator.js +157 -0
  406. package/utility/logging/logger.ts +24 -0
  407. package/utility/logging/readLog.js +355 -0
  408. package/utility/logging/transactionLog.js +57 -0
  409. package/utility/mount_hdb.js +59 -0
  410. package/utility/npmUtilities.js +102 -0
  411. package/utility/operationPermissions.ts +112 -0
  412. package/utility/operation_authorization.js +836 -0
  413. package/utility/packageUtils.js +55 -0
  414. package/utility/password.ts +99 -0
  415. package/utility/processManagement/processManagement.js +187 -0
  416. package/utility/processManagement/servicesConfig.js +56 -0
  417. package/utility/scripts/restartHdb.js +24 -0
  418. package/utility/scripts/user_data.sh +13 -0
  419. package/utility/signalling.js +36 -0
  420. package/utility/terms/certificates.js +81 -0
  421. package/utility/when.ts +20 -0
  422. package/v1.d.ts +39 -0
  423. package/v1.js +41 -0
  424. package/v2.d.ts +39 -0
  425. package/v2.js +41 -0
  426. package/validation/bulkDeleteValidator.js +24 -0
  427. package/validation/check_permissions.js +19 -0
  428. package/validation/common_validators.js +95 -0
  429. package/validation/configValidator.js +331 -0
  430. package/validation/deleteValidator.js +15 -0
  431. package/validation/fileLoadValidator.js +153 -0
  432. package/validation/insertValidator.js +40 -0
  433. package/validation/installValidator.js +37 -0
  434. package/validation/readLogValidator.js +64 -0
  435. package/validation/role_validation.js +320 -0
  436. package/validation/schemaMetadataValidator.js +42 -0
  437. package/validation/searchValidator.js +166 -0
  438. package/validation/statusValidator.ts +66 -0
  439. package/validation/transactionLogValidator.js +33 -0
  440. package/validation/user_validation.js +55 -0
  441. package/validation/validationWrapper.js +105 -0
  442. package/dist/resources/analytics/profile.d.ts +0 -2
  443. package/dist/resources/analytics/profile.js +0 -144
  444. package/dist/resources/analytics/profile.js.map +0 -1
@@ -0,0 +1,378 @@
1
+ import { Transaction as LMDBTransaction } from 'lmdb';
2
+ import { getNextMonotonicTime } from '../utility/lmdb/commonUtility.js';
3
+ import { ServerError } from '../utility/errors/hdbError.js';
4
+ import * as harperLogger from '../utility/logging/harper_logger.js';
5
+ import type { Context, Id } from './ResourceInterface.ts';
6
+ import * as envMngr from '../utility/environment/environmentManager.js';
7
+ import { CONFIG_PARAMS } from '../utility/hdbTerms.ts';
8
+ import { convertToMS } from '../utility/common_utils.js';
9
+ import { when } from '../utility/when.ts';
10
+ import { Transaction as RocksTransaction, type Store as RocksStore } from '@harperfast/rocksdb-js';
11
+ import type { RootDatabaseKind } from './databases.ts';
12
+ import type { Entry } from './RecordEncoder.ts';
13
+
14
+ const trackedTxns = new Set<DatabaseTransaction>();
15
+ const MAX_OUTSTANDING_TXN_DURATION = convertToMS(envMngr.get(CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME)) || 45000; // Allow write transactions to be queued for up to 25 seconds before we start rejecting them
16
+ const DEBUG_LONG_TXNS = envMngr.get(CONFIG_PARAMS.STORAGE_DEBUGLONGTRANSACTIONS);
17
+ export const TRANSACTION_STATE = {
18
+ CLOSED: 0, // the transaction has been committed or aborted and can no longer be used for writes (if read txn is active, it can be used for reads)
19
+ OPEN: 1, // the transaction is open and can be used for reads and writes
20
+ LINGERING: 2, // the transaction has completed a read, but can be used for immediate writes
21
+ };
22
+ let outstandingCommit, outstandingCommitStart;
23
+ let confirmReplication;
24
+ export function replicationConfirmation(callback) {
25
+ confirmReplication = callback;
26
+ }
27
+ let txnExpiration = envMngr.get(CONFIG_PARAMS.STORAGE_MAXTRANSACTIONOPENTIME) ?? 30000;
28
+
29
+ class StartedTransaction extends Error {}
30
+
31
+ type MaybePromise<T> = T | Promise<T>;
32
+
33
+ export type CommitOptions = {
34
+ doneWriting?: boolean;
35
+ timestamp?: number;
36
+ retries?: number;
37
+ flush?: boolean;
38
+ };
39
+
40
+ type ReadTransaction = (LMDBTransaction | RocksTransaction) & {
41
+ openTimer?: number;
42
+ retryRisk?: number;
43
+ };
44
+
45
+ export type TransactionWrite = {
46
+ key: Id;
47
+ store: RootDatabaseKind;
48
+ invalidated?: boolean;
49
+ entry?: Partial<Entry>;
50
+ before?: () => void | Promise<void>;
51
+ beforeIntermediate?: () => void | Promise<void>;
52
+ commit?: (txnTime: number, existingEntry: Entry, retry: boolean, transaction: RocksTransaction) => void;
53
+ validate?: (txnTime: number) => void;
54
+ fullUpdate?: boolean;
55
+ saved?: boolean;
56
+ deferSave?: boolean;
57
+ };
58
+
59
+ type RocksTransactionWithRetry = RocksTransaction & { isRetry?: boolean };
60
+
61
+ export class DatabaseTransaction implements Transaction {
62
+ #context: Context;
63
+ writes: TransactionWrite[] = []; // the set of writes to commit if the conditions are met
64
+ completions: Promise<void>[] = []; // the set of outstanding async operations to complete
65
+ db: RootDatabaseKind;
66
+ transaction: RocksTransactionWithRetry;
67
+ readTxn: ReadTransaction;
68
+ readTxnRefCount: number;
69
+ readTxnsUsed: number;
70
+ timeout: number;
71
+ validated = 0;
72
+ timestamp = 0;
73
+ retries = 0;
74
+ declare next: DatabaseTransaction;
75
+ declare stale: boolean;
76
+ declare startedFrom?: {
77
+ resourceName: string;
78
+ method: string;
79
+ };
80
+ declare stackTraces?: StartedTransaction[];
81
+ overloadChecked: boolean;
82
+ open = TRANSACTION_STATE.OPEN;
83
+ replicatedConfirmation: number;
84
+
85
+ getReadTxn(): ReadTransaction {
86
+ this.readTxnRefCount = (this.readTxnRefCount || 0) + 1;
87
+ this.timeout = txnExpiration; // reset the timeout
88
+ if (this.transaction) {
89
+ if (this.transaction.openTimer) this.transaction.openTimer = 0;
90
+ return this.transaction;
91
+ }
92
+ if (this.open !== TRANSACTION_STATE.OPEN) return; // can not start a new read transaction as there is no future commit that will take place, just have to allow the read to latest database state
93
+
94
+ this.transaction = new RocksTransaction(this.db.store);
95
+ if (this.timestamp) {
96
+ this.transaction.setTimestamp(this.timestamp);
97
+ }
98
+
99
+ this.readTxnsUsed = 1;
100
+ if (DEBUG_LONG_TXNS) {
101
+ this.stackTraces = [new StartedTransaction()];
102
+ }
103
+ if (this.transaction.openTimer) this.transaction.openTimer = 0;
104
+ trackedTxns.add(this);
105
+ return this.transaction;
106
+ }
107
+
108
+ useReadTxn() {
109
+ const readTxn = this.getReadTxn();
110
+ if (DEBUG_LONG_TXNS) this.stackTraces.push(new StartedTransaction());
111
+ this.readTxnsUsed++;
112
+ return readTxn;
113
+ }
114
+
115
+ doneReadTxn() {
116
+ if (!this.transaction) return;
117
+ if (--this.readTxnsUsed === 0) {
118
+ trackedTxns.delete(this);
119
+ this.transaction?.abort();
120
+ this.transaction = null;
121
+ }
122
+ }
123
+
124
+ disregardReadTxn(): void {
125
+ if (--this.readTxnRefCount === 0 && this.readTxnsUsed === 1) {
126
+ this.doneReadTxn();
127
+ }
128
+ }
129
+
130
+ checkOverloaded() {
131
+ if (
132
+ outstandingCommit &&
133
+ !this.overloadChecked &&
134
+ performance.now() - outstandingCommitStart > MAX_OUTSTANDING_TXN_DURATION
135
+ ) {
136
+ throw new ServerError('Outstanding write transactions have too long of queue, please try again later', 503);
137
+ }
138
+ this.overloadChecked = true; // only check this once, don't interrupt ongoing transactions that have already made writes
139
+ }
140
+
141
+ addWrite(operation: TransactionWrite) {
142
+ if (this.open === TRANSACTION_STATE.CLOSED) {
143
+ throw new Error('Can not use a transaction that is no longer open');
144
+ }
145
+ this.writes.push(operation);
146
+ if (!operation.deferSave) {
147
+ // Setting saved to false means to defer saving
148
+ this.save(operation);
149
+ }
150
+ return operation;
151
+ }
152
+
153
+ save(operation: TransactionWrite, reloadEntry = false) {
154
+ let txnTime = this.timestamp;
155
+ if (!this.transaction) {
156
+ this.transaction = new RocksTransaction(this.db.store as RocksStore);
157
+ if (txnTime) {
158
+ this.transaction.setTimestamp(txnTime);
159
+ }
160
+ }
161
+ if (this.retries > 0) {
162
+ // this is marks the rocks transaction as a retry so we don't write the transaction log again
163
+ this.transaction.isRetry = true;
164
+ }
165
+ if (!txnTime) txnTime = this.timestamp = this.transaction.getTimestamp();
166
+ if (reloadEntry || operation.entry === undefined) {
167
+ operation.entry = operation.store.getEntry(operation.key, { transaction: this.transaction });
168
+ }
169
+ operation.saved = true;
170
+ // immediately execute in this transaction
171
+ if (operation.validate?.(txnTime) === false) return;
172
+ let result: Promise<void> = operation.before?.() as Promise<void>;
173
+ if (result?.then) this.completions.push(result);
174
+ result = operation.beforeIntermediate?.() as Promise<void>;
175
+ if (result?.then) this.completions.push(result);
176
+ operation.commit(txnTime, operation.entry, this.retries > 0, this.transaction);
177
+ }
178
+
179
+ /**
180
+ * Resolves with information on the timestamp and success of the commit
181
+ */
182
+ commit(options: CommitOptions = {}): MaybePromise<CommitResolution> {
183
+ for (let i = 0; i < this.writes.length; i++) {
184
+ let operation = this.writes[i];
185
+ if (this.retries === 0 && operation.saved) continue;
186
+ this.save(operation, i < this.validated);
187
+ }
188
+ this.validated = this.writes.length;
189
+ return when(this.completions.length > 0 ? Promise.all(this.completions) : null, () => {
190
+ let commitResolution: MaybePromise<void>;
191
+ if (--this.readTxnsUsed > 0) {
192
+ // we still have outstanding iterators using the transaction, we can't just commit/abort it, we will still
193
+ // need to use it
194
+ commitResolution =
195
+ this.writes.length > 0
196
+ ? this.transaction?.commit({ renewAfterCommit: true /* Try to use RocksDB's CommitAndTryCreateSnapshot */ })
197
+ : // don't abort, we still have outstanding reads to complete
198
+ null;
199
+ } else {
200
+ // no more reads need to be performed, just commit/abort based if there are any writes
201
+ trackedTxns.delete(this);
202
+ if (this.transaction) {
203
+ if (this.writes.length > 0) {
204
+ commitResolution = this.transaction.commit();
205
+ } else {
206
+ commitResolution = this.transaction.abort();
207
+ this.transaction = null; // immediately clear transaction, no need to wait
208
+ }
209
+ }
210
+ }
211
+
212
+ if (commitResolution) {
213
+ if (!outstandingCommit) {
214
+ outstandingCommit = commitResolution;
215
+ outstandingCommitStart = performance.now();
216
+ outstandingCommit.finally(() => {
217
+ outstandingCommit = null;
218
+ });
219
+ }
220
+ const completions = [];
221
+ return commitResolution.then(
222
+ () => {
223
+ this.transaction.onCommit?.();
224
+ this.transaction = null; // the native transaction is done (reset if needed)
225
+ if (this.next) {
226
+ completions.push(this.next.commit(options));
227
+ }
228
+ if (options?.flush) {
229
+ completions.push(this.writes[0].store.flushed);
230
+ }
231
+ if (this.replicatedConfirmation) {
232
+ // if we want to wait for replication confirmation, we need to track the transaction times
233
+ // and when replication notifications come in, we count the number of confirms until we reach the desired number
234
+ const databaseName = this.writes[0].store.rootStore.databaseName;
235
+ const lastWrite = this.writes[this.writes.length - 1];
236
+ if (confirmReplication && lastWrite) {
237
+ completions.push(
238
+ confirmReplication(
239
+ databaseName,
240
+ lastWrite.store.getEntry(lastWrite.key).version,
241
+ this.replicatedConfirmation
242
+ )
243
+ );
244
+ }
245
+ }
246
+ // now reset transactions tracking; this transaction be reused and committed again
247
+ this.writes = [];
248
+ if (this.#context?.resourceCache) this.#context.resourceCache = null;
249
+ this.next = null;
250
+ let txnTime = this.timestamp;
251
+ this.timestamp = 0; // reset the timestamp as well
252
+ return Promise.all(completions).then(() => {
253
+ return {
254
+ txnTime,
255
+ };
256
+ });
257
+ },
258
+ (error) => {
259
+ if (error.code === 'ERR_BUSY') {
260
+ // if the transaction failed due to concurrent changes, we need to retry. First record this as an increased risk of contention/retry
261
+ // for future transactions
262
+ this.retries++;
263
+ return this.commit(options); // try again
264
+ } else throw error;
265
+ }
266
+ );
267
+ }
268
+ const txnResolution: CommitResolution = {
269
+ txnTime: this.timestamp,
270
+ };
271
+ if (this.next) {
272
+ // now run any other transactions
273
+ options.timestamp = this.timestamp;
274
+ const nextResolution = this.next?.commit(options);
275
+ if (nextResolution?.then)
276
+ return nextResolution?.then((nextResolution) => ({
277
+ txnTime: this.timestamp,
278
+ next: nextResolution,
279
+ }));
280
+ txnResolution.next = nextResolution;
281
+ }
282
+ return txnResolution;
283
+ });
284
+ }
285
+ abort(): void {
286
+ while (this.readTxnsUsed > 0) this.doneReadTxn(); // release the read snapshot when we abort, we assume we don't need it
287
+ this.open = TRANSACTION_STATE.CLOSED;
288
+ // reset the transaction
289
+ this.writes = [];
290
+ if (this.#context?.resourceCache) this.#context.resourceCache = null;
291
+ }
292
+ directCommitSync(): void {
293
+ trackedTxns.delete(this);
294
+ this.transaction?.commitSync();
295
+ }
296
+ getContext() {
297
+ return this.#context;
298
+ }
299
+ setContext(context) {
300
+ this.#context = context;
301
+ }
302
+ }
303
+ export interface CommitResolution {
304
+ txnTime: number;
305
+ next?: CommitResolution;
306
+ }
307
+ export interface Transaction {
308
+ commit(options): MaybePromise<CommitResolution>;
309
+ abort?(): any;
310
+ }
311
+
312
+ export class ImmediateTransaction extends DatabaseTransaction {
313
+ isCommitting = false;
314
+ constructor(db: RootDatabaseKind) {
315
+ super();
316
+ this.db = db;
317
+ }
318
+ save(transaction: ImmediateTransaction) {
319
+ if (this.isCommitting) {
320
+ // if we are in the commit, do the save and force a reload so we get a read within the transaction
321
+ super.save(transaction, true);
322
+ } else {
323
+ this.isCommitting = true;
324
+ return when(this.commit(), () => {
325
+ this.isCommitting = false;
326
+ });
327
+ }
328
+ }
329
+
330
+ get timestamp() {
331
+ return this._timestamp || (this._timestamp = getNextMonotonicTime());
332
+ }
333
+ getReadTxn() {
334
+ return; // no transaction means read latest
335
+ }
336
+ }
337
+
338
+ let timer;
339
+
340
+ function startMonitoringTxns() {
341
+ timer = setInterval(function () {
342
+ for (const txn of trackedTxns) {
343
+ if (txn.timeout <= 0) {
344
+ const url = txn.getContext()?.url;
345
+ harperLogger.error(
346
+ `Transaction was open too long and has been committed, from table: ${
347
+ txn.db?.name + (url ? ' path: ' + url : '')
348
+ }`,
349
+ ...(txn.startedFrom ? [`was started from ${txn.startedFrom.resourceName}.${txn.startedFrom.method}`] : []),
350
+ ...(DEBUG_LONG_TXNS ? ['starting stack trace', txn.stackTraces] : [])
351
+ );
352
+ // reset the transaction
353
+ try {
354
+ const result = txn.commit();
355
+ if (result?.then) {
356
+ result.catch((error) => {
357
+ harperLogger.debug?.(`Error committing timed out transaction: ${error.message}`);
358
+ });
359
+ }
360
+ } catch (error) {
361
+ harperLogger.debug?.(`Error committing timed out transaction: ${error.message}`);
362
+ }
363
+ txn.timeout = txnExpiration;
364
+ } else {
365
+ txn.timeout -= txnExpiration;
366
+ }
367
+ }
368
+ }, txnExpiration).unref();
369
+ }
370
+
371
+ startMonitoringTxns();
372
+
373
+ export function setTxnExpiration(ms) {
374
+ clearInterval(timer);
375
+ txnExpiration = ms;
376
+ startMonitoringTxns();
377
+ return trackedTxns;
378
+ }
@@ -0,0 +1,57 @@
1
+ import { Resource } from './Resource.ts';
2
+ import type { Context } from './ResourceInterface.ts';
3
+ /**
4
+ * ErrorResource is a Resource that throws an error on any request, communicating to the client when attempts are made
5
+ * to access endpoints/resources that had an internal error in their configuration or setup. This helps ensure that
6
+ * if there is a problem with a resource, it is immediately apparent and can be fixed.
7
+ */
8
+ export class ErrorResource implements Resource {
9
+ error: Error;
10
+ constructor(error: Error) {
11
+ this.error = error;
12
+ }
13
+ isError = true;
14
+ allowRead(): never {
15
+ throw this.error;
16
+ }
17
+ allowUpdate(): never {
18
+ throw this.error;
19
+ }
20
+ allowCreate(): never {
21
+ throw this.error;
22
+ }
23
+ allowDelete(): never {
24
+ throw this.error;
25
+ }
26
+ getId(): never {
27
+ throw this.error;
28
+ }
29
+ getContext(): Context {
30
+ throw this.error;
31
+ }
32
+ get(): never {
33
+ throw this.error;
34
+ }
35
+ post(): never {
36
+ throw this.error;
37
+ }
38
+ put(): never {
39
+ throw this.error;
40
+ }
41
+ delete(): never {
42
+ throw this.error;
43
+ }
44
+ connect(): never {
45
+ throw this.error;
46
+ }
47
+ getResource() {
48
+ // all child paths resolve back to reporting this error
49
+ return this;
50
+ }
51
+ publish(): never {
52
+ throw this.error;
53
+ }
54
+ subscribe(): never {
55
+ throw this.error;
56
+ }
57
+ }
@@ -0,0 +1,94 @@
1
+ import { EventEmitter } from 'events';
2
+
3
+ export class IterableEventQueue<Event extends object = any> extends EventEmitter {
4
+ resolveNext: null | ((args: { value: Event }) => void) = null;
5
+ queue: any[];
6
+ hasDataListeners: boolean;
7
+ drainCloseListener: boolean;
8
+ currentDrainResolver: null | ((draining: boolean) => void) = null;
9
+ [Symbol.asyncIterator](): AsyncIterator<Event> {
10
+ const iterator = new EventQueueIterator<Event>();
11
+ iterator.queue = this;
12
+ // @ts-expect-error The EventQueueIterator is acceptable as an AsyncIterator
13
+ return iterator;
14
+ }
15
+ push(message: Event) {
16
+ this.send(message);
17
+ }
18
+ send(message: Event) {
19
+ if (this.resolveNext) {
20
+ this.resolveNext({ value: message });
21
+ this.resolveNext = null;
22
+ } else if (this.hasDataListeners) {
23
+ this.emit('data', message);
24
+ } else {
25
+ if (!this.queue) this.queue = [];
26
+ this.queue.push(message);
27
+ }
28
+ }
29
+ getNextMessage() {
30
+ const message = this.queue?.shift();
31
+ if (!message) this.emit('drained');
32
+ return message;
33
+ }
34
+
35
+ /**
36
+ * Wait for the queue to be drained, resolving to true to continue or false if the queue was closed before draining.
37
+ */
38
+ waitForDrain(): Promise<boolean> {
39
+ return new Promise((resolve) => {
40
+ if (!this.queue || this.queue.length === 0) resolve(true);
41
+ else {
42
+ this.once('drained', () => resolve(true));
43
+ this.currentDrainResolver = resolve;
44
+ if (!this.drainCloseListener) {
45
+ this.drainCloseListener = true;
46
+ this.on('close', () => {
47
+ this.currentDrainResolver?.(false);
48
+ });
49
+ }
50
+ }
51
+ });
52
+ }
53
+ on(eventName: 'data' | string, listener: ((data: Event) => void) | any) {
54
+ if (eventName === 'data' && !this.hasDataListeners) {
55
+ this.hasDataListeners = true;
56
+ while (this.queue?.length > 0) listener(this.queue.shift());
57
+ }
58
+ return super.on(eventName, listener);
59
+ }
60
+ }
61
+
62
+ class EventQueueIterator<Event extends object = any> implements AsyncIterator<Event> {
63
+ queue: IterableEventQueue<Event>;
64
+ push(message: Event) {
65
+ this.queue.send(message);
66
+ }
67
+ // @ts-expect-error TypeScript is wrong, the JS engine accepts MaybePromise<...>
68
+ next(): { value: Event } | Promise<{ value: Event }> {
69
+ const message = this.queue.getNextMessage();
70
+ if (message) {
71
+ return {
72
+ value: message,
73
+ };
74
+ } else {
75
+ return new Promise((resolve) => (this.queue.resolveNext = resolve));
76
+ }
77
+ }
78
+ // @ts-expect-error TypeScript is wrong, the JS engine accepts MaybePromise<...>
79
+ return(value: Event): { value: Event; done: true } {
80
+ this.queue.emit('close');
81
+ return {
82
+ value,
83
+ done: true,
84
+ };
85
+ }
86
+ // @ts-expect-error TypeScript is wrong, the JS engine accepts MaybePromise<...>
87
+ throw(error) {
88
+ this.queue.emit('close', error);
89
+ return {
90
+ done: true,
91
+ value: undefined,
92
+ };
93
+ }
94
+ }