@harperfast/harper-pro 5.0.30 → 5.1.0-beta.2

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 (942) hide show
  1. package/analytics/profile.ts +4 -0
  2. package/core/AGENTS.md +94 -6
  3. package/core/DESIGN.md +36 -0
  4. package/core/README.md +11 -10
  5. package/core/agent/agent.ts +203 -0
  6. package/core/agent/loop.ts +205 -0
  7. package/core/agent/operations.ts +148 -0
  8. package/core/agent/session.ts +187 -0
  9. package/core/agent/tools/fsTools.ts +276 -0
  10. package/core/agent/tools/httpFetchTool.ts +112 -0
  11. package/core/agent/tools/scheduleTool.ts +68 -0
  12. package/core/agent/toolset.ts +43 -0
  13. package/core/agent/types.ts +85 -0
  14. package/core/benchmarks/hnsw-search.js +157 -0
  15. package/core/benchmarks/ycsb/README.md +144 -0
  16. package/core/benchmarks/ycsb/analyze-profile.mts +120 -0
  17. package/core/benchmarks/ycsb/app/config.yaml +3 -0
  18. package/core/benchmarks/ycsb/app/schema.graphql +17 -0
  19. package/core/benchmarks/ycsb/harness.mts +328 -0
  20. package/core/benchmarks/ycsb/restClient.mts +120 -0
  21. package/core/benchmarks/ycsb/run-single-node.mts +97 -0
  22. package/core/benchmarks/ycsb/to-benchmark-json.mts +58 -0
  23. package/core/benchmarks/ycsb/workload.mts +499 -0
  24. package/core/benchmarks/ycsb/workload.test.mts +174 -0
  25. package/core/bin/{BinObjects.js → BinObjects.ts} +4 -5
  26. package/core/bin/cliCredentials.ts +133 -0
  27. package/core/bin/cliOperations.ts +339 -0
  28. package/core/bin/copyDb.ts +10 -10
  29. package/core/bin/deployRenderer.ts +196 -0
  30. package/core/bin/{harper.js → harper.ts} +48 -24
  31. package/core/bin/{install.js → install.ts} +3 -3
  32. package/core/bin/lite.ts +2 -0
  33. package/core/bin/login.ts +134 -0
  34. package/core/bin/logout.ts +11 -0
  35. package/core/bin/mcp/client.ts +407 -0
  36. package/core/bin/mcp/doctor.ts +189 -0
  37. package/core/bin/mcp/index.ts +80 -0
  38. package/core/bin/mcp/options.ts +122 -0
  39. package/core/bin/mcp/printConfig.ts +89 -0
  40. package/core/bin/multipartBuilder.ts +74 -0
  41. package/core/bin/{restart.js → restart.ts} +31 -32
  42. package/core/bin/{run.js → run.ts} +57 -46
  43. package/core/bin/sseConsumer.ts +126 -0
  44. package/core/bin/{status.js → status.ts} +10 -10
  45. package/core/bin/stop.ts +21 -0
  46. package/core/bin/upgrade.js +17 -24
  47. package/core/components/Application.ts +144 -18
  48. package/core/components/ApplicationScope.ts +2 -2
  49. package/core/components/ComponentV1.ts +2 -2
  50. package/core/components/EntryHandler.ts +159 -9
  51. package/core/components/OptionsWatcher.ts +75 -11
  52. package/core/components/Scope.ts +132 -18
  53. package/core/components/anthropic/index.ts +547 -0
  54. package/core/components/bedrock/index.ts +823 -0
  55. package/core/components/componentLoader.ts +64 -32
  56. package/core/components/deployLifecycle.ts +161 -0
  57. package/core/components/deploymentOperations.ts +173 -0
  58. package/core/components/deploymentRecorder.ts +427 -0
  59. package/core/components/deriveURLPath.ts +4 -4
  60. package/core/components/mcp/adapters/fastify.ts +87 -0
  61. package/core/components/mcp/adapters/harperHttp.ts +103 -0
  62. package/core/components/mcp/audit.ts +75 -0
  63. package/core/components/mcp/index.ts +134 -0
  64. package/core/components/mcp/jsonrpc.ts +134 -0
  65. package/core/components/mcp/lifecycle.ts +105 -0
  66. package/core/components/mcp/listChanged.ts +270 -0
  67. package/core/components/mcp/rateLimit.ts +217 -0
  68. package/core/components/mcp/resources.ts +607 -0
  69. package/core/components/mcp/session.ts +151 -0
  70. package/core/components/mcp/sessionRegistry.ts +140 -0
  71. package/core/components/mcp/toolRegistry.ts +294 -0
  72. package/core/components/mcp/tools/application.ts +761 -0
  73. package/core/components/mcp/tools/operations.ts +311 -0
  74. package/core/components/mcp/tools/schemas/derive.ts +356 -0
  75. package/core/components/mcp/tools/schemas/operationDescriptions.ts +241 -0
  76. package/core/components/mcp/tools/schemas/operations.ts +301 -0
  77. package/core/components/mcp/transport.ts +517 -0
  78. package/core/components/ollama/index.ts +316 -0
  79. package/core/components/openai/index.ts +563 -0
  80. package/core/components/operations.js +217 -60
  81. package/core/components/operationsValidation.js +12 -4
  82. package/core/components/packageComponent.ts +97 -29
  83. package/core/components/requestRestart.ts +17 -2
  84. package/core/components/status/crossThread.ts +14 -5
  85. package/core/components/status/errors.ts +1 -1
  86. package/core/config/RootConfigWatcher.ts +56 -2
  87. package/core/config/configUtils.js +29 -8
  88. package/core/config/harperConfigEnvVars.ts +1 -1
  89. package/core/dataLayer/{CreateAttributeObject.js → CreateAttributeObject.ts} +4 -3
  90. package/core/dataLayer/{CreateTableObject.js → CreateTableObject.ts} +2 -1
  91. package/core/dataLayer/{DataLayerObjects.js → DataLayerObjects.ts} +17 -9
  92. package/core/dataLayer/{DeleteBeforeObject.js → DeleteBeforeObject.ts} +2 -1
  93. package/core/dataLayer/{DeleteObject.js → DeleteObject.ts} +3 -2
  94. package/core/dataLayer/{DropAttributeObject.js → DropAttributeObject.ts} +2 -1
  95. package/core/dataLayer/{GetBackupObject.js → GetBackupObject.ts} +3 -2
  96. package/core/dataLayer/{InsertObject.js → InsertObject.ts} +3 -2
  97. package/core/dataLayer/{ReadAuditLogObject.js → ReadAuditLogObject.ts} +3 -2
  98. package/core/dataLayer/{SQLSearch.js → SQLSearch.ts} +97 -43
  99. package/core/dataLayer/{SearchByConditionsObject.js → SearchByConditionsObject.ts} +5 -6
  100. package/core/dataLayer/{SearchByHashObject.js → SearchByHashObject.ts} +2 -1
  101. package/core/dataLayer/{SearchObject.js → SearchObject.ts} +2 -1
  102. package/core/dataLayer/{SqlSearchObject.js → SqlSearchObject.ts} +2 -1
  103. package/core/dataLayer/{UpdateObject.js → UpdateObject.ts} +3 -2
  104. package/core/dataLayer/{UpsertObject.js → UpsertObject.ts} +3 -2
  105. package/core/dataLayer/{bulkLoad.js → bulkLoad.ts} +40 -49
  106. package/core/dataLayer/{delete.js → delete.ts} +21 -26
  107. package/core/dataLayer/{export.js → export.ts} +22 -26
  108. package/core/dataLayer/{getBackup.js → getBackup.ts} +7 -9
  109. package/core/dataLayer/harperBridge/BridgeMethods.ts +102 -0
  110. package/core/dataLayer/harperBridge/ResourceBridge.ts +27 -26
  111. package/core/dataLayer/harperBridge/TableSizeObject.ts +1 -0
  112. package/core/dataLayer/harperBridge/bridgeUtility/insertUpdateValidate.js +4 -4
  113. package/core/dataLayer/harperBridge/{harperBridge.js → harperBridge.ts} +3 -3
  114. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateAttribute.js +8 -6
  115. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateRecords.js +4 -4
  116. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateSchema.js +1 -1
  117. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateTable.js +6 -4
  118. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteAuditLogsBefore.js +5 -4
  119. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteRecords.js +4 -4
  120. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropAttribute.js +6 -5
  121. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropSchema.js +5 -4
  122. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropTable.js +5 -5
  123. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbFlush.js +1 -1
  124. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetBackup.js +3 -3
  125. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByHash.js +1 -1
  126. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByValue.js +3 -2
  127. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbReadAuditLog.js +5 -5
  128. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByConditions.js +10 -8
  129. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByHash.js +1 -1
  130. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByValue.js +4 -3
  131. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpdateRecords.js +3 -3
  132. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpsertRecords.js +6 -5
  133. package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBCreateAttributeObject.js +2 -1
  134. package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializeHashSearch.js +3 -2
  135. package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializePaths.js +2 -2
  136. package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCheckForNewAttributes.js +5 -4
  137. package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCreateTransactionsAuditEnvironment.js +6 -3
  138. package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbGetTableSize.ts +1 -1
  139. package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbProcessRows.js +4 -4
  140. package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbSearch.js +5 -5
  141. package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbWriteTransaction.js +4 -4
  142. package/core/dataLayer/{hdbInfoController.js → hdbInfoController.ts} +20 -26
  143. package/core/dataLayer/{insert.js → insert.ts} +24 -24
  144. package/core/dataLayer/{readAuditLog.js → readAuditLog.ts} +8 -10
  145. package/core/dataLayer/{schema.js → schema.ts} +32 -44
  146. package/core/dataLayer/{schemaDescribe.js → schemaDescribe.ts} +23 -26
  147. package/core/dataLayer/{search.js → search.ts} +9 -15
  148. package/core/dataLayer/{transaction.js → transaction.ts} +2 -5
  149. package/core/dataLayer/{update.js → update.ts} +19 -22
  150. package/core/index.ts +5 -0
  151. package/core/json/systemSchema.json +65 -0
  152. package/core/launchServiceScripts/utility/checkNodeVersion.js +2 -0
  153. package/core/package-lock.json +9087 -4345
  154. package/core/resources/DESIGN.md +98 -0
  155. package/core/resources/DatabaseTransaction.ts +58 -30
  156. package/core/resources/ErrorResource.ts +2 -1
  157. package/core/resources/LMDBTransaction.ts +38 -29
  158. package/core/resources/RecordEncoder.ts +41 -39
  159. package/core/resources/RequestTarget.ts +2 -0
  160. package/core/resources/Resource.ts +96 -56
  161. package/core/resources/ResourceInterface.ts +44 -21
  162. package/core/resources/Resources.ts +8 -8
  163. package/core/resources/RocksIndexStore.ts +3 -0
  164. package/core/resources/RocksTransactionLogStore.ts +13 -4
  165. package/core/resources/Table.ts +440 -223
  166. package/core/resources/analytics/metadata.ts +1 -0
  167. package/core/resources/analytics/read.ts +99 -10
  168. package/core/resources/analytics/write.ts +240 -17
  169. package/core/resources/auditStore.ts +30 -19
  170. package/core/resources/blob.ts +53 -53
  171. package/core/resources/dataLoader.ts +4 -4
  172. package/core/resources/databases.ts +208 -74
  173. package/core/resources/graphql.ts +267 -165
  174. package/core/resources/indexes/HierarchicalNavigableSmallWorld.ts +310 -65
  175. package/core/resources/indexes/vector.ts +17 -0
  176. package/core/resources/jsonSchemaTypes.ts +102 -0
  177. package/core/resources/loadEnv.ts +21 -17
  178. package/core/resources/login.ts +5 -3
  179. package/core/resources/models/Models.ts +304 -0
  180. package/core/resources/models/TestBackend.ts +83 -0
  181. package/core/resources/models/agentLoop.ts +895 -0
  182. package/core/resources/models/analyticsTable.ts +199 -0
  183. package/core/resources/models/backendHelpers.ts +116 -0
  184. package/core/resources/models/backendRegistry.ts +66 -0
  185. package/core/resources/models/bootstrap.ts +135 -0
  186. package/core/resources/models/embedHook.ts +138 -0
  187. package/core/resources/models/types.ts +296 -0
  188. package/core/resources/openApi.ts +65 -31
  189. package/core/resources/replayLogs.ts +20 -9
  190. package/core/resources/replayLogsGuards.ts +45 -0
  191. package/core/resources/roles.ts +62 -67
  192. package/core/resources/search.ts +355 -135
  193. package/core/resources/tracked.ts +18 -9
  194. package/core/resources/transaction.ts +8 -8
  195. package/core/resources/transactionBroadcast.ts +3 -3
  196. package/core/security/auth.ts +35 -26
  197. package/core/security/certificateVerification/crlVerification.ts +11 -4
  198. package/core/security/{cryptoHash.js → cryptoHash.ts} +3 -8
  199. package/core/security/data_objects/{PermissionAttributeResponseObject.js → PermissionAttributeResponseObject.ts} +4 -4
  200. package/core/security/data_objects/{PermissionResponseObject.js → PermissionResponseObject.ts} +12 -11
  201. package/core/security/data_objects/{PermissionTableResponseObject.js → PermissionTableResponseObject.ts} +6 -4
  202. package/core/security/{fastifyAuth.js → fastifyAuth.ts} +93 -20
  203. package/core/security/impersonation.ts +3 -3
  204. package/core/security/jsLoader.ts +22 -8
  205. package/core/security/{keys.js → keys.ts} +113 -121
  206. package/core/security/permissionsTranslator.js +2 -2
  207. package/core/security/{role.js → role.ts} +26 -33
  208. package/core/security/tokenAuthentication.ts +34 -7
  209. package/core/security/user.ts +26 -22
  210. package/core/server/DESIGN.md +139 -0
  211. package/core/server/DurableSubscriptionsSession.ts +67 -50
  212. package/core/server/REST.ts +120 -107
  213. package/core/server/Server.ts +31 -12
  214. package/core/server/fastifyRoutes/helpers/getCORSOptions.js +1 -1
  215. package/core/server/fastifyRoutes/helpers/getHeaderTimeoutConfig.js +1 -1
  216. package/core/server/fastifyRoutes/helpers/getServerOptions.js +1 -1
  217. package/core/server/fastifyRoutes.ts +37 -33
  218. package/core/server/graphqlQuerying.ts +6 -5
  219. package/core/server/http.ts +517 -26
  220. package/core/server/itc/serverHandlers.js +75 -14
  221. package/core/server/jobs/{JobObject.js → JobObject.ts} +13 -6
  222. package/core/server/jobs/{jobProcess.js → jobProcess.ts} +20 -16
  223. package/core/server/jobs/{jobRunner.js → jobRunner.ts} +20 -21
  224. package/core/server/jobs/{jobs.js → jobs.ts} +41 -44
  225. package/core/server/loadRootComponents.js +1 -1
  226. package/core/server/middlewareChain.ts +270 -0
  227. package/core/server/mqtt.ts +35 -26
  228. package/core/server/nodeName.ts +3 -1
  229. package/core/server/operationsServer.ts +85 -10
  230. package/core/server/serverHelpers/Headers.ts +10 -8
  231. package/core/server/serverHelpers/JSONStream.ts +15 -5
  232. package/core/server/serverHelpers/Request.ts +370 -13
  233. package/core/server/serverHelpers/contentTypes.ts +42 -11
  234. package/core/server/serverHelpers/multipartParser.ts +152 -0
  235. package/core/server/serverHelpers/progressEmitter.ts +110 -0
  236. package/core/server/serverHelpers/serverHandlers.js +43 -7
  237. package/core/server/serverHelpers/serverUtilities.ts +40 -30
  238. package/core/server/static.ts +9 -6
  239. package/core/server/status/index.ts +2 -2
  240. package/core/server/storageReclamation.ts +39 -2
  241. package/core/server/threads/itc.js +7 -4
  242. package/core/server/threads/manageThreads.js +100 -26
  243. package/core/server/threads/socketRouter.ts +12 -275
  244. package/core/server/threads/threadServer.js +345 -105
  245. package/core/server/threads/workerProcessGuard.ts +93 -0
  246. package/core/server/throttle.ts +18 -0
  247. package/core/sqlTranslator/{SelectValidator.js → SelectValidator.ts} +41 -49
  248. package/core/sqlTranslator/{alasqlFunctionImporter.js → alasqlFunctionImporter.ts} +5 -5
  249. package/core/sqlTranslator/{deleteTranslator.js → deleteTranslator.ts} +13 -18
  250. package/core/sqlTranslator/{index.js → index.ts} +30 -33
  251. package/core/sqlTranslator/{sql_statement_bucket.js → sql_statement_bucket.ts} +49 -20
  252. package/core/static/README.md +10 -9
  253. package/core/static/defaultConfig.yaml +0 -1
  254. package/core/system/000004.log +0 -0
  255. package/core/system/CURRENT +1 -0
  256. package/core/system/IDENTITY +1 -0
  257. package/core/system/LOCK +0 -0
  258. package/core/system/LOG +1351 -0
  259. package/core/system/MANIFEST-000005 +0 -0
  260. package/core/system/OPTIONS-000013 +607 -0
  261. package/core/system/OPTIONS-000015 +734 -0
  262. package/core/upgrade/{UpgradeObjects.js → UpgradeObjects.ts} +3 -6
  263. package/core/upgrade/directives/5-1-0.ts +89 -0
  264. package/core/upgrade/directives/{directivesController.js → directivesController.ts} +16 -16
  265. package/core/upgrade/{directivesManager.js → directivesManager.ts} +7 -11
  266. package/core/upgrade/{upgradePrompt.js → upgradePrompt.ts} +6 -54
  267. package/core/upgrade/{upgradeUtilities.js → upgradeUtilities.ts} +3 -7
  268. package/core/utility/{OperationFunctionCaller.js → OperationFunctionCaller.ts} +7 -7
  269. package/core/utility/{assignCmdEnvVariables.js → assignCmdEnvVariables.ts} +6 -8
  270. package/core/utility/{common_utils.js → common_utils.ts} +113 -139
  271. package/core/utility/environment/{environmentManager.js → environmentManager.ts} +34 -33
  272. package/core/utility/environment/systemInformation.ts +18 -4
  273. package/core/utility/errors/{commonErrors.js → commonErrors.ts} +9 -9
  274. package/core/utility/errors/{hdbError.js → hdbError.ts} +39 -45
  275. package/core/utility/expandEnvVar.ts +110 -0
  276. package/core/utility/functions/geo.js +2 -2
  277. package/core/utility/functions/sql/alaSQLExtension.js +1 -1
  278. package/core/utility/globalSchema.ts +30 -0
  279. package/core/utility/hdbTerms.ts +54 -1
  280. package/core/utility/install/checkJWTTokensExist.js +1 -1
  281. package/core/utility/install/{installer.js → installer.ts} +86 -62
  282. package/core/utility/installation.ts +2 -2
  283. package/core/utility/lmdb/{DBIDefinition.js → DBIDefinition.ts} +4 -1
  284. package/core/utility/lmdb/{DeleteRecordsResponseObject.js → DeleteRecordsResponseObject.ts} +2 -1
  285. package/core/utility/lmdb/{InsertRecordsResponseObject.js → InsertRecordsResponseObject.ts} +2 -1
  286. package/core/utility/lmdb/OpenDBIObject.ts +57 -0
  287. package/core/utility/lmdb/{OpenEnvironmentObject.js → OpenEnvironmentObject.ts} +19 -6
  288. package/core/utility/lmdb/{UpdateRecordsResponseObject.js → UpdateRecordsResponseObject.ts} +2 -1
  289. package/core/utility/lmdb/{UpsertRecordsResponseObject.js → UpsertRecordsResponseObject.ts} +2 -1
  290. package/core/utility/lmdb/{cleanLMDBMap.js → cleanLMDBMap.ts} +5 -5
  291. package/core/utility/lmdb/{commonUtility.js → commonUtility.ts} +13 -21
  292. package/core/utility/lmdb/{deleteUtility.js → deleteUtility.ts} +8 -12
  293. package/core/utility/lmdb/{environmentUtility.js → environmentUtility.ts} +43 -52
  294. package/core/utility/lmdb/{searchCursorFunctions.js → searchCursorFunctions.ts} +12 -26
  295. package/core/utility/lmdb/{searchUtility.js → searchUtility.ts} +75 -64
  296. package/core/utility/lmdb/{terms.js → terms.ts} +10 -23
  297. package/core/utility/lmdb/{writeUtility.js → writeUtility.ts} +37 -22
  298. package/core/utility/logging/{harper_logger.js → harper_logger.ts} +137 -90
  299. package/core/utility/logging/{logRotator.js → logRotator.ts} +15 -18
  300. package/core/utility/logging/logger.ts +1 -1
  301. package/core/utility/logging/{readLog.js → readLog.ts} +19 -19
  302. package/core/utility/logging/{transactionLog.js → transactionLog.ts} +10 -14
  303. package/core/utility/{mount_hdb.js → mount_hdb.ts} +15 -16
  304. package/core/utility/{npmUtilities.js → npmUtilities.ts} +14 -17
  305. package/core/utility/{operation_authorization.js → operation_authorization.ts} +173 -124
  306. package/core/utility/packageUtils.js +7 -16
  307. package/core/utility/password.ts +1 -1
  308. package/core/utility/processManagement/processManagement.js +2 -2
  309. package/core/utility/processManagement/servicesConfig.js +1 -1
  310. package/core/utility/{signalling.js → signalling.ts} +6 -11
  311. package/core/utility/watcherFallback.ts +74 -0
  312. package/core/validation/analyticsValidator.ts +44 -0
  313. package/core/validation/{bulkDeleteValidator.js → bulkDeleteValidator.ts} +5 -5
  314. package/core/validation/{check_permissions.js → check_permissions.ts} +3 -3
  315. package/core/validation/{common_validators.js → common_validators.ts} +12 -24
  316. package/core/validation/{configValidator.js → configValidator.ts} +114 -18
  317. package/core/validation/{deleteValidator.js → deleteValidator.ts} +5 -5
  318. package/core/validation/{fileLoadValidator.js → fileLoadValidator.ts} +12 -19
  319. package/core/validation/{insertValidator.js → insertValidator.ts} +5 -5
  320. package/core/validation/{installValidator.js → installValidator.ts} +8 -8
  321. package/core/validation/{readLogValidator.js → readLogValidator.ts} +10 -10
  322. package/core/validation/{role_validation.js → role_validation.ts} +26 -32
  323. package/core/validation/{schemaMetadataValidator.js → schemaMetadataValidator.ts} +5 -11
  324. package/core/validation/{searchValidator.js → searchValidator.ts} +12 -11
  325. package/core/validation/statusValidator.ts +1 -1
  326. package/core/validation/{transactionLogValidator.js → transactionLogValidator.ts} +4 -9
  327. package/core/validation/{user_validation.js → user_validation.ts} +4 -10
  328. package/core/validation/{validationWrapper.js → validationWrapper.ts} +3 -9
  329. package/dist/analytics/profile.js +4 -0
  330. package/dist/analytics/profile.js.map +1 -1
  331. package/dist/cloneNode/cloneNode.js +224 -12
  332. package/dist/cloneNode/cloneNode.js.map +1 -1
  333. package/dist/core/agent/agent.js +175 -0
  334. package/dist/core/agent/agent.js.map +1 -0
  335. package/dist/core/agent/loop.js +176 -0
  336. package/dist/core/agent/loop.js.map +1 -0
  337. package/dist/core/agent/operations.js +137 -0
  338. package/dist/core/agent/operations.js.map +1 -0
  339. package/dist/core/agent/session.js +182 -0
  340. package/dist/core/agent/session.js.map +1 -0
  341. package/dist/core/agent/tools/fsTools.js +286 -0
  342. package/dist/core/agent/tools/fsTools.js.map +1 -0
  343. package/dist/core/agent/tools/httpFetchTool.js +116 -0
  344. package/dist/core/agent/tools/httpFetchTool.js.map +1 -0
  345. package/dist/core/agent/tools/scheduleTool.js +54 -0
  346. package/dist/core/agent/tools/scheduleTool.js.map +1 -0
  347. package/dist/core/agent/toolset.js +33 -0
  348. package/dist/core/agent/toolset.js.map +1 -0
  349. package/dist/core/agent/types.js +10 -0
  350. package/dist/core/agent/types.js.map +1 -0
  351. package/dist/core/bin/BinObjects.js +6 -3
  352. package/dist/core/bin/BinObjects.js.map +1 -1
  353. package/dist/core/bin/cliCredentials.js +130 -0
  354. package/dist/core/bin/cliCredentials.js.map +1 -0
  355. package/dist/core/bin/cliOperations.js +254 -40
  356. package/dist/core/bin/cliOperations.js.map +1 -1
  357. package/dist/core/bin/copyDb.js +16 -16
  358. package/dist/core/bin/copyDb.js.map +1 -1
  359. package/dist/core/bin/deployRenderer.js +185 -0
  360. package/dist/core/bin/deployRenderer.js.map +1 -0
  361. package/dist/core/bin/harper.js +92 -31
  362. package/dist/core/bin/harper.js.map +1 -1
  363. package/dist/core/bin/install.js +41 -4
  364. package/dist/core/bin/install.js.map +1 -1
  365. package/dist/core/bin/lite.js +3 -4
  366. package/dist/core/bin/lite.js.map +1 -1
  367. package/dist/core/bin/login.js +123 -0
  368. package/dist/core/bin/login.js.map +1 -0
  369. package/dist/core/bin/logout.js +16 -0
  370. package/dist/core/bin/logout.js.map +1 -0
  371. package/dist/core/bin/mcp/client.js +395 -0
  372. package/dist/core/bin/mcp/client.js.map +1 -0
  373. package/dist/core/bin/mcp/doctor.js +193 -0
  374. package/dist/core/bin/mcp/doctor.js.map +1 -0
  375. package/dist/core/bin/mcp/index.js +81 -0
  376. package/dist/core/bin/mcp/index.js.map +1 -0
  377. package/dist/core/bin/mcp/options.js +113 -0
  378. package/dist/core/bin/mcp/options.js.map +1 -0
  379. package/dist/core/bin/mcp/printConfig.js +85 -0
  380. package/dist/core/bin/mcp/printConfig.js.map +1 -0
  381. package/dist/core/bin/multipartBuilder.js +55 -0
  382. package/dist/core/bin/multipartBuilder.js.map +1 -0
  383. package/dist/core/bin/restart.js +85 -48
  384. package/dist/core/bin/restart.js.map +1 -1
  385. package/dist/core/bin/run.js +123 -77
  386. package/dist/core/bin/run.js.map +1 -1
  387. package/dist/core/bin/sseConsumer.js +127 -0
  388. package/dist/core/bin/sseConsumer.js.map +1 -0
  389. package/dist/core/bin/status.js +48 -11
  390. package/dist/core/bin/status.js.map +1 -1
  391. package/dist/core/bin/stop.js +44 -7
  392. package/dist/core/bin/stop.js.map +1 -1
  393. package/dist/core/bin/upgrade.js +14 -22
  394. package/dist/core/bin/upgrade.js.map +1 -1
  395. package/dist/core/components/Application.js +134 -28
  396. package/dist/core/components/Application.js.map +1 -1
  397. package/dist/core/components/ApplicationScope.js +2 -2
  398. package/dist/core/components/ComponentV1.js +5 -5
  399. package/dist/core/components/ComponentV1.js.map +1 -1
  400. package/dist/core/components/EntryHandler.js +153 -13
  401. package/dist/core/components/EntryHandler.js.map +1 -1
  402. package/dist/core/components/OptionsWatcher.js +72 -10
  403. package/dist/core/components/OptionsWatcher.js.map +1 -1
  404. package/dist/core/components/Scope.js +112 -12
  405. package/dist/core/components/Scope.js.map +1 -1
  406. package/dist/core/components/anthropic/index.js +428 -0
  407. package/dist/core/components/anthropic/index.js.map +1 -0
  408. package/dist/core/components/bedrock/index.js +734 -0
  409. package/dist/core/components/bedrock/index.js.map +1 -0
  410. package/dist/core/components/componentLoader.js +65 -38
  411. package/dist/core/components/componentLoader.js.map +1 -1
  412. package/dist/core/components/deployLifecycle.js +156 -0
  413. package/dist/core/components/deployLifecycle.js.map +1 -0
  414. package/dist/core/components/deploymentOperations.js +185 -0
  415. package/dist/core/components/deploymentOperations.js.map +1 -0
  416. package/dist/core/components/deploymentRecorder.js +425 -0
  417. package/dist/core/components/deploymentRecorder.js.map +1 -0
  418. package/dist/core/components/deriveURLPath.js +2 -2
  419. package/dist/core/components/deriveURLPath.js.map +1 -1
  420. package/dist/core/components/mcp/adapters/fastify.js +66 -0
  421. package/dist/core/components/mcp/adapters/fastify.js.map +1 -0
  422. package/dist/core/components/mcp/adapters/harperHttp.js +78 -0
  423. package/dist/core/components/mcp/adapters/harperHttp.js.map +1 -0
  424. package/dist/core/components/mcp/audit.js +73 -0
  425. package/dist/core/components/mcp/audit.js.map +1 -0
  426. package/dist/core/components/mcp/index.js +109 -0
  427. package/dist/core/components/mcp/index.js.map +1 -0
  428. package/dist/core/components/mcp/jsonrpc.js +93 -0
  429. package/dist/core/components/mcp/jsonrpc.js.map +1 -0
  430. package/dist/core/components/mcp/lifecycle.js +79 -0
  431. package/dist/core/components/mcp/lifecycle.js.map +1 -0
  432. package/dist/core/components/mcp/listChanged.js +257 -0
  433. package/dist/core/components/mcp/listChanged.js.map +1 -0
  434. package/dist/core/components/mcp/rateLimit.js +226 -0
  435. package/dist/core/components/mcp/rateLimit.js.map +1 -0
  436. package/dist/core/components/mcp/resources.js +526 -0
  437. package/dist/core/components/mcp/resources.js.map +1 -0
  438. package/dist/core/components/mcp/session.js +170 -0
  439. package/dist/core/components/mcp/session.js.map +1 -0
  440. package/dist/core/components/mcp/sessionRegistry.js +124 -0
  441. package/dist/core/components/mcp/sessionRegistry.js.map +1 -0
  442. package/dist/core/components/mcp/toolRegistry.js +177 -0
  443. package/dist/core/components/mcp/toolRegistry.js.map +1 -0
  444. package/dist/core/components/mcp/tools/application.js +660 -0
  445. package/dist/core/components/mcp/tools/application.js.map +1 -0
  446. package/dist/core/components/mcp/tools/operations.js +331 -0
  447. package/dist/core/components/mcp/tools/operations.js.map +1 -0
  448. package/dist/core/components/mcp/tools/schemas/derive.js +291 -0
  449. package/dist/core/components/mcp/tools/schemas/derive.js.map +1 -0
  450. package/dist/core/components/mcp/tools/schemas/operationDescriptions.js +179 -0
  451. package/dist/core/components/mcp/tools/schemas/operationDescriptions.js.map +1 -0
  452. package/dist/core/components/mcp/tools/schemas/operations.js +299 -0
  453. package/dist/core/components/mcp/tools/schemas/operations.js.map +1 -0
  454. package/dist/core/components/mcp/transport.js +467 -0
  455. package/dist/core/components/mcp/transport.js.map +1 -0
  456. package/dist/core/components/ollama/index.js +239 -0
  457. package/dist/core/components/ollama/index.js.map +1 -0
  458. package/dist/core/components/openai/index.js +475 -0
  459. package/dist/core/components/openai/index.js.map +1 -0
  460. package/dist/core/components/operations.js +205 -52
  461. package/dist/core/components/operations.js.map +1 -1
  462. package/dist/core/components/operationsValidation.js +13 -4
  463. package/dist/core/components/operationsValidation.js.map +1 -1
  464. package/dist/core/components/packageComponent.js +87 -26
  465. package/dist/core/components/packageComponent.js.map +1 -1
  466. package/dist/core/components/requestRestart.js +12 -1
  467. package/dist/core/components/requestRestart.js.map +1 -1
  468. package/dist/core/components/status/crossThread.js +12 -5
  469. package/dist/core/components/status/crossThread.js.map +1 -1
  470. package/dist/core/components/status/errors.js +7 -7
  471. package/dist/core/config/RootConfigWatcher.js +52 -1
  472. package/dist/core/config/RootConfigWatcher.js.map +1 -1
  473. package/dist/core/config/configUtils.js +31 -8
  474. package/dist/core/config/configUtils.js.map +1 -1
  475. package/dist/core/config/harperConfigEnvVars.js +1 -1
  476. package/dist/core/config/harperConfigEnvVars.js.map +1 -1
  477. package/dist/core/dataLayer/CreateAttributeObject.js +4 -3
  478. package/dist/core/dataLayer/CreateAttributeObject.js.map +1 -1
  479. package/dist/core/dataLayer/CreateTableObject.js +2 -1
  480. package/dist/core/dataLayer/CreateTableObject.js.map +1 -1
  481. package/dist/core/dataLayer/DataLayerObjects.js +19 -5
  482. package/dist/core/dataLayer/DataLayerObjects.js.map +1 -1
  483. package/dist/core/dataLayer/DeleteBeforeObject.js +2 -1
  484. package/dist/core/dataLayer/DeleteBeforeObject.js.map +1 -1
  485. package/dist/core/dataLayer/DeleteObject.js +4 -3
  486. package/dist/core/dataLayer/DeleteObject.js.map +1 -1
  487. package/dist/core/dataLayer/DropAttributeObject.js +2 -1
  488. package/dist/core/dataLayer/DropAttributeObject.js.map +1 -1
  489. package/dist/core/dataLayer/GetBackupObject.js +4 -3
  490. package/dist/core/dataLayer/GetBackupObject.js.map +1 -1
  491. package/dist/core/dataLayer/InsertObject.js +4 -3
  492. package/dist/core/dataLayer/InsertObject.js.map +1 -1
  493. package/dist/core/dataLayer/ReadAuditLogObject.js +4 -3
  494. package/dist/core/dataLayer/ReadAuditLogObject.js.map +1 -1
  495. package/dist/core/dataLayer/SQLSearch.js +140 -78
  496. package/dist/core/dataLayer/SQLSearch.js.map +1 -1
  497. package/dist/core/dataLayer/SearchByConditionsObject.js +5 -7
  498. package/dist/core/dataLayer/SearchByConditionsObject.js.map +1 -1
  499. package/dist/core/dataLayer/SearchByHashObject.js +2 -1
  500. package/dist/core/dataLayer/SearchByHashObject.js.map +1 -1
  501. package/dist/core/dataLayer/SearchObject.js +2 -1
  502. package/dist/core/dataLayer/SearchObject.js.map +1 -1
  503. package/dist/core/dataLayer/SqlSearchObject.js +2 -1
  504. package/dist/core/dataLayer/SqlSearchObject.js.map +1 -1
  505. package/dist/core/dataLayer/UpdateObject.js +4 -3
  506. package/dist/core/dataLayer/UpdateObject.js.map +1 -1
  507. package/dist/core/dataLayer/UpsertObject.js +4 -3
  508. package/dist/core/dataLayer/UpsertObject.js.map +1 -1
  509. package/dist/core/dataLayer/bulkLoad.js +122 -88
  510. package/dist/core/dataLayer/bulkLoad.js.map +1 -1
  511. package/dist/core/dataLayer/delete.js +74 -39
  512. package/dist/core/dataLayer/delete.js.map +1 -1
  513. package/dist/core/dataLayer/export.js +90 -55
  514. package/dist/core/dataLayer/export.js.map +1 -1
  515. package/dist/core/dataLayer/getBackup.js +43 -11
  516. package/dist/core/dataLayer/getBackup.js.map +1 -1
  517. package/dist/core/dataLayer/harperBridge/BridgeMethods.js +41 -20
  518. package/dist/core/dataLayer/harperBridge/BridgeMethods.js.map +1 -1
  519. package/dist/core/dataLayer/harperBridge/ResourceBridge.js +26 -25
  520. package/dist/core/dataLayer/harperBridge/ResourceBridge.js.map +1 -1
  521. package/dist/core/dataLayer/harperBridge/TableSizeObject.js.map +1 -1
  522. package/dist/core/dataLayer/harperBridge/bridgeUtility/insertUpdateValidate.js +4 -4
  523. package/dist/core/dataLayer/harperBridge/harperBridge.js +38 -4
  524. package/dist/core/dataLayer/harperBridge/harperBridge.js.map +1 -1
  525. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateAttribute.js +7 -6
  526. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateAttribute.js.map +1 -1
  527. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateRecords.js +4 -4
  528. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateRecords.js.map +1 -1
  529. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateSchema.js +1 -1
  530. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateSchema.js.map +1 -1
  531. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateTable.js +5 -4
  532. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateTable.js.map +1 -1
  533. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteAuditLogsBefore.js +4 -4
  534. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteAuditLogsBefore.js.map +1 -1
  535. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteRecords.js +4 -4
  536. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropAttribute.js +5 -5
  537. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropAttribute.js.map +1 -1
  538. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropSchema.js +4 -4
  539. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropSchema.js.map +1 -1
  540. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropTable.js +5 -5
  541. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropTable.js.map +1 -1
  542. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbFlush.js +1 -1
  543. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetBackup.js +3 -3
  544. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByHash.js +1 -1
  545. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByValue.js +2 -2
  546. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByValue.js.map +1 -1
  547. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbReadAuditLog.js +5 -5
  548. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByConditions.js +8 -8
  549. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByConditions.js.map +1 -1
  550. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByHash.js +1 -1
  551. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByValue.js +3 -3
  552. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByValue.js.map +1 -1
  553. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpdateRecords.js +3 -3
  554. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpsertRecords.js +5 -5
  555. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpsertRecords.js.map +1 -1
  556. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBCreateAttributeObject.js +1 -1
  557. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBCreateAttributeObject.js.map +1 -1
  558. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializeHashSearch.js +2 -2
  559. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializeHashSearch.js.map +1 -1
  560. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializePaths.js +2 -2
  561. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCheckForNewAttributes.js +4 -4
  562. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCheckForNewAttributes.js.map +1 -1
  563. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCreateTransactionsAuditEnvironment.js +5 -3
  564. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCreateTransactionsAuditEnvironment.js.map +1 -1
  565. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbGetTableSize.js +2 -2
  566. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbProcessRows.js +4 -4
  567. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbProcessRows.js.map +1 -1
  568. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbSearch.js +5 -5
  569. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbWriteTransaction.js +4 -4
  570. package/dist/core/dataLayer/hdbInfoController.js +66 -31
  571. package/dist/core/dataLayer/hdbInfoController.js.map +1 -1
  572. package/dist/core/dataLayer/insert.js +63 -28
  573. package/dist/core/dataLayer/insert.js.map +1 -1
  574. package/dist/core/dataLayer/readAuditLog.js +45 -13
  575. package/dist/core/dataLayer/readAuditLog.js.map +1 -1
  576. package/dist/core/dataLayer/schema.js +124 -89
  577. package/dist/core/dataLayer/schema.js.map +1 -1
  578. package/dist/core/dataLayer/schemaDescribe.js +78 -41
  579. package/dist/core/dataLayer/schemaDescribe.js.map +1 -1
  580. package/dist/core/dataLayer/search.js +12 -13
  581. package/dist/core/dataLayer/search.js.map +1 -1
  582. package/dist/core/dataLayer/transaction.js +3 -4
  583. package/dist/core/dataLayer/transaction.js.map +1 -1
  584. package/dist/core/dataLayer/update.js +53 -18
  585. package/dist/core/dataLayer/update.js.map +1 -1
  586. package/dist/core/globals.js +1 -0
  587. package/dist/core/globals.js.map +1 -1
  588. package/dist/core/index.js +4 -1
  589. package/dist/core/index.js.map +1 -1
  590. package/dist/core/json/systemSchema.json +65 -0
  591. package/dist/core/launchServiceScripts/utility/checkNodeVersion.js +3 -0
  592. package/dist/core/launchServiceScripts/utility/checkNodeVersion.js.map +1 -1
  593. package/dist/core/resources/DatabaseTransaction.js +39 -15
  594. package/dist/core/resources/DatabaseTransaction.js.map +1 -1
  595. package/dist/core/resources/ErrorResource.js +3 -1
  596. package/dist/core/resources/ErrorResource.js.map +1 -1
  597. package/dist/core/resources/LMDBTransaction.js +18 -7
  598. package/dist/core/resources/LMDBTransaction.js.map +1 -1
  599. package/dist/core/resources/RecordEncoder.js +38 -38
  600. package/dist/core/resources/RecordEncoder.js.map +1 -1
  601. package/dist/core/resources/RequestTarget.js.map +1 -1
  602. package/dist/core/resources/Resource.js +43 -10
  603. package/dist/core/resources/Resource.js.map +1 -1
  604. package/dist/core/resources/ResourceInterface.js +20 -0
  605. package/dist/core/resources/ResourceInterface.js.map +1 -1
  606. package/dist/core/resources/Resources.js +7 -6
  607. package/dist/core/resources/Resources.js.map +1 -1
  608. package/dist/core/resources/RocksIndexStore.js +3 -0
  609. package/dist/core/resources/RocksIndexStore.js.map +1 -1
  610. package/dist/core/resources/RocksTransactionLogStore.js +10 -3
  611. package/dist/core/resources/RocksTransactionLogStore.js.map +1 -1
  612. package/dist/core/resources/Table.js +306 -116
  613. package/dist/core/resources/Table.js.map +1 -1
  614. package/dist/core/resources/analytics/metadata.js +1 -0
  615. package/dist/core/resources/analytics/metadata.js.map +1 -1
  616. package/dist/core/resources/analytics/read.js +69 -8
  617. package/dist/core/resources/analytics/read.js.map +1 -1
  618. package/dist/core/resources/analytics/write.js +232 -20
  619. package/dist/core/resources/analytics/write.js.map +1 -1
  620. package/dist/core/resources/auditStore.js +16 -8
  621. package/dist/core/resources/auditStore.js.map +1 -1
  622. package/dist/core/resources/blob.js +8 -8
  623. package/dist/core/resources/blob.js.map +1 -1
  624. package/dist/core/resources/dataLoader.js +13 -13
  625. package/dist/core/resources/databases.js +175 -59
  626. package/dist/core/resources/databases.js.map +1 -1
  627. package/dist/core/resources/graphql.js +267 -173
  628. package/dist/core/resources/graphql.js.map +1 -1
  629. package/dist/core/resources/indexes/HierarchicalNavigableSmallWorld.js +327 -59
  630. package/dist/core/resources/indexes/HierarchicalNavigableSmallWorld.js.map +1 -1
  631. package/dist/core/resources/indexes/vector.js +14 -0
  632. package/dist/core/resources/indexes/vector.js.map +1 -1
  633. package/dist/core/resources/jsonSchemaTypes.js +78 -0
  634. package/dist/core/resources/jsonSchemaTypes.js.map +1 -0
  635. package/dist/core/resources/loadEnv.js +21 -18
  636. package/dist/core/resources/loadEnv.js.map +1 -1
  637. package/dist/core/resources/login.js +5 -4
  638. package/dist/core/resources/login.js.map +1 -1
  639. package/dist/core/resources/models/Models.js +265 -0
  640. package/dist/core/resources/models/Models.js.map +1 -0
  641. package/dist/core/resources/models/TestBackend.js +71 -0
  642. package/dist/core/resources/models/TestBackend.js.map +1 -0
  643. package/dist/core/resources/models/agentLoop.js +746 -0
  644. package/dist/core/resources/models/agentLoop.js.map +1 -0
  645. package/dist/core/resources/models/analyticsTable.js +166 -0
  646. package/dist/core/resources/models/analyticsTable.js.map +1 -0
  647. package/dist/core/resources/models/backendHelpers.js +109 -0
  648. package/dist/core/resources/models/backendHelpers.js.map +1 -0
  649. package/dist/core/resources/models/backendRegistry.js +54 -0
  650. package/dist/core/resources/models/backendRegistry.js.map +1 -0
  651. package/dist/core/resources/models/bootstrap.js +112 -0
  652. package/dist/core/resources/models/bootstrap.js.map +1 -0
  653. package/dist/core/resources/models/embedHook.js +127 -0
  654. package/dist/core/resources/models/embedHook.js.map +1 -0
  655. package/dist/core/resources/models/types.js +11 -0
  656. package/dist/core/resources/models/types.js.map +1 -0
  657. package/dist/core/resources/openApi.js +74 -34
  658. package/dist/core/resources/openApi.js.map +1 -1
  659. package/dist/core/resources/replayLogs.js +7 -1
  660. package/dist/core/resources/replayLogs.js.map +1 -1
  661. package/dist/core/resources/replayLogsGuards.js +47 -0
  662. package/dist/core/resources/replayLogsGuards.js.map +1 -1
  663. package/dist/core/resources/roles.js +67 -71
  664. package/dist/core/resources/roles.js.map +1 -1
  665. package/dist/core/resources/search.js +349 -140
  666. package/dist/core/resources/search.js.map +1 -1
  667. package/dist/core/resources/tracked.js +23 -15
  668. package/dist/core/resources/tracked.js.map +1 -1
  669. package/dist/core/resources/transaction.js +1 -1
  670. package/dist/core/resources/transaction.js.map +1 -1
  671. package/dist/core/resources/transactionBroadcast.js.map +1 -1
  672. package/dist/core/security/auth.js +34 -25
  673. package/dist/core/security/auth.js.map +1 -1
  674. package/dist/core/security/certificateVerification/crlVerification.js +7 -1
  675. package/dist/core/security/certificateVerification/crlVerification.js.map +1 -1
  676. package/dist/core/security/cryptoHash.js +37 -5
  677. package/dist/core/security/cryptoHash.js.map +1 -1
  678. package/dist/core/security/data_objects/PermissionAttributeResponseObject.js +4 -1
  679. package/dist/core/security/data_objects/PermissionAttributeResponseObject.js.map +1 -1
  680. package/dist/core/security/data_objects/PermissionResponseObject.js +15 -8
  681. package/dist/core/security/data_objects/PermissionResponseObject.js.map +1 -1
  682. package/dist/core/security/data_objects/PermissionTableResponseObject.js +6 -1
  683. package/dist/core/security/data_objects/PermissionTableResponseObject.js.map +1 -1
  684. package/dist/core/security/fastifyAuth.js +131 -22
  685. package/dist/core/security/fastifyAuth.js.map +1 -1
  686. package/dist/core/security/impersonation.js +15 -15
  687. package/dist/core/security/jsLoader.js +18 -5
  688. package/dist/core/security/jsLoader.js.map +1 -1
  689. package/dist/core/security/keys.js +160 -114
  690. package/dist/core/security/keys.js.map +1 -1
  691. package/dist/core/security/permissionsTranslator.js +2 -2
  692. package/dist/core/security/role.js +70 -35
  693. package/dist/core/security/role.js.map +1 -1
  694. package/dist/core/security/tokenAuthentication.js +57 -27
  695. package/dist/core/security/tokenAuthentication.js.map +1 -1
  696. package/dist/core/security/user.js +74 -38
  697. package/dist/core/security/user.js.map +1 -1
  698. package/dist/core/server/DurableSubscriptionsSession.js +71 -55
  699. package/dist/core/server/DurableSubscriptionsSession.js.map +1 -1
  700. package/dist/core/server/REST.js +17 -16
  701. package/dist/core/server/REST.js.map +1 -1
  702. package/dist/core/server/Server.js +1 -1
  703. package/dist/core/server/Server.js.map +1 -1
  704. package/dist/core/server/fastifyRoutes/helpers/getCORSOptions.js +1 -1
  705. package/dist/core/server/fastifyRoutes/helpers/getHeaderTimeoutConfig.js +1 -1
  706. package/dist/core/server/fastifyRoutes/helpers/getServerOptions.js +1 -1
  707. package/dist/core/server/fastifyRoutes.js +34 -30
  708. package/dist/core/server/fastifyRoutes.js.map +1 -1
  709. package/dist/core/server/graphqlQuerying.js +8 -7
  710. package/dist/core/server/graphqlQuerying.js.map +1 -1
  711. package/dist/core/server/http.js +523 -47
  712. package/dist/core/server/http.js.map +1 -1
  713. package/dist/core/server/itc/serverHandlers.js +66 -15
  714. package/dist/core/server/itc/serverHandlers.js.map +1 -1
  715. package/dist/core/server/jobs/JobObject.js +53 -7
  716. package/dist/core/server/jobs/JobObject.js.map +1 -1
  717. package/dist/core/server/jobs/jobProcess.js +64 -24
  718. package/dist/core/server/jobs/jobProcess.js.map +1 -1
  719. package/dist/core/server/jobs/jobRunner.js +68 -30
  720. package/dist/core/server/jobs/jobRunner.js.map +1 -1
  721. package/dist/core/server/jobs/jobs.js +93 -61
  722. package/dist/core/server/jobs/jobs.js.map +1 -1
  723. package/dist/core/server/loadRootComponents.js +1 -1
  724. package/dist/core/server/middlewareChain.js +252 -0
  725. package/dist/core/server/middlewareChain.js.map +1 -0
  726. package/dist/core/server/mqtt.js +22 -17
  727. package/dist/core/server/mqtt.js.map +1 -1
  728. package/dist/core/server/nodeName.js +46 -13
  729. package/dist/core/server/nodeName.js.map +1 -1
  730. package/dist/core/server/operationsServer.js +106 -33
  731. package/dist/core/server/operationsServer.js.map +1 -1
  732. package/dist/core/server/serverHelpers/Headers.js +2 -0
  733. package/dist/core/server/serverHelpers/Headers.js.map +1 -1
  734. package/dist/core/server/serverHelpers/JSONStream.js +12 -3
  735. package/dist/core/server/serverHelpers/JSONStream.js.map +1 -1
  736. package/dist/core/server/serverHelpers/Request.js +370 -9
  737. package/dist/core/server/serverHelpers/Request.js.map +1 -1
  738. package/dist/core/server/serverHelpers/contentTypes.js +36 -7
  739. package/dist/core/server/serverHelpers/contentTypes.js.map +1 -1
  740. package/dist/core/server/serverHelpers/multipartParser.js +142 -0
  741. package/dist/core/server/serverHelpers/multipartParser.js.map +1 -0
  742. package/dist/core/server/serverHelpers/progressEmitter.js +103 -0
  743. package/dist/core/server/serverHelpers/progressEmitter.js.map +1 -0
  744. package/dist/core/server/serverHelpers/serverHandlers.js +38 -7
  745. package/dist/core/server/serverHelpers/serverHandlers.js.map +1 -1
  746. package/dist/core/server/serverHelpers/serverUtilities.js +97 -93
  747. package/dist/core/server/serverHelpers/serverUtilities.js.map +1 -1
  748. package/dist/core/server/static.js +8 -5
  749. package/dist/core/server/static.js.map +1 -1
  750. package/dist/core/server/status/index.js +3 -3
  751. package/dist/core/server/storageReclamation.js +68 -9
  752. package/dist/core/server/storageReclamation.js.map +1 -1
  753. package/dist/core/server/threads/itc.js +7 -4
  754. package/dist/core/server/threads/itc.js.map +1 -1
  755. package/dist/core/server/threads/manageThreads.js +110 -26
  756. package/dist/core/server/threads/manageThreads.js.map +1 -1
  757. package/dist/core/server/threads/socketRouter.js +8 -271
  758. package/dist/core/server/threads/socketRouter.js.map +1 -1
  759. package/dist/core/server/threads/threadServer.js +360 -118
  760. package/dist/core/server/threads/threadServer.js.map +1 -1
  761. package/dist/core/server/threads/workerProcessGuard.js +114 -0
  762. package/dist/core/server/threads/workerProcessGuard.js.map +1 -0
  763. package/dist/core/server/throttle.js +17 -0
  764. package/dist/core/server/throttle.js.map +1 -1
  765. package/dist/core/sqlTranslator/SelectValidator.js +86 -47
  766. package/dist/core/sqlTranslator/SelectValidator.js.map +1 -1
  767. package/dist/core/sqlTranslator/alasqlFunctionImporter.js +40 -3
  768. package/dist/core/sqlTranslator/alasqlFunctionImporter.js.map +1 -1
  769. package/dist/core/sqlTranslator/deleteTranslator.js +48 -14
  770. package/dist/core/sqlTranslator/deleteTranslator.js.map +1 -1
  771. package/dist/core/sqlTranslator/index.js +69 -30
  772. package/dist/core/sqlTranslator/index.js.map +1 -1
  773. package/dist/core/sqlTranslator/sql_statement_bucket.js +55 -13
  774. package/dist/core/sqlTranslator/sql_statement_bucket.js.map +1 -1
  775. package/dist/core/upgrade/UpgradeObjects.js +37 -4
  776. package/dist/core/upgrade/UpgradeObjects.js.map +1 -1
  777. package/dist/core/upgrade/directives/5-1-0.js +114 -0
  778. package/dist/core/upgrade/directives/5-1-0.js.map +1 -0
  779. package/dist/core/upgrade/directives/directivesController.js +52 -11
  780. package/dist/core/upgrade/directives/directivesController.js.map +1 -1
  781. package/dist/core/upgrade/directivesManager.js +53 -18
  782. package/dist/core/upgrade/directivesManager.js.map +1 -1
  783. package/dist/core/upgrade/upgradePrompt.js +55 -60
  784. package/dist/core/upgrade/upgradePrompt.js.map +1 -1
  785. package/dist/core/upgrade/upgradeUtilities.js +37 -5
  786. package/dist/core/upgrade/upgradeUtilities.js.map +1 -1
  787. package/dist/core/utility/OperationFunctionCaller.js +45 -10
  788. package/dist/core/utility/OperationFunctionCaller.js.map +1 -1
  789. package/dist/core/utility/assignCmdEnvVariables.js +8 -4
  790. package/dist/core/utility/assignCmdEnvVariables.js.map +1 -1
  791. package/dist/core/utility/common_utils.js +140 -79
  792. package/dist/core/utility/common_utils.js.map +1 -1
  793. package/dist/core/utility/environment/environmentManager.js +75 -29
  794. package/dist/core/utility/environment/environmentManager.js.map +1 -1
  795. package/dist/core/utility/environment/systemInformation.js +27 -16
  796. package/dist/core/utility/environment/systemInformation.js.map +1 -1
  797. package/dist/core/utility/errors/commonErrors.js +49 -18
  798. package/dist/core/utility/errors/commonErrors.js.map +1 -1
  799. package/dist/core/utility/errors/hdbError.js +65 -26
  800. package/dist/core/utility/errors/hdbError.js.map +1 -1
  801. package/dist/core/utility/expandEnvVar.js +113 -0
  802. package/dist/core/utility/expandEnvVar.js.map +1 -0
  803. package/dist/core/utility/functions/geo.js +2 -2
  804. package/dist/core/utility/functions/sql/alaSQLExtension.js +1 -1
  805. package/dist/core/utility/globalSchema.js +14 -11
  806. package/dist/core/utility/globalSchema.js.map +1 -1
  807. package/dist/core/utility/hdbTerms.js +54 -1
  808. package/dist/core/utility/hdbTerms.js.map +1 -1
  809. package/dist/core/utility/install/checkJWTTokensExist.js +1 -1
  810. package/dist/core/utility/install/installer.js +136 -73
  811. package/dist/core/utility/install/installer.js.map +1 -1
  812. package/dist/core/utility/installation.js +3 -3
  813. package/dist/core/utility/lmdb/DBIDefinition.js +5 -1
  814. package/dist/core/utility/lmdb/DBIDefinition.js.map +1 -1
  815. package/dist/core/utility/lmdb/DeleteRecordsResponseObject.js +2 -1
  816. package/dist/core/utility/lmdb/DeleteRecordsResponseObject.js.map +1 -1
  817. package/dist/core/utility/lmdb/InsertRecordsResponseObject.js +2 -1
  818. package/dist/core/utility/lmdb/InsertRecordsResponseObject.js.map +1 -1
  819. package/dist/core/utility/lmdb/OpenDBIObject.js +68 -6
  820. package/dist/core/utility/lmdb/OpenDBIObject.js.map +1 -1
  821. package/dist/core/utility/lmdb/OpenEnvironmentObject.js +52 -4
  822. package/dist/core/utility/lmdb/OpenEnvironmentObject.js.map +1 -1
  823. package/dist/core/utility/lmdb/UpdateRecordsResponseObject.js +2 -1
  824. package/dist/core/utility/lmdb/UpdateRecordsResponseObject.js.map +1 -1
  825. package/dist/core/utility/lmdb/UpsertRecordsResponseObject.js +2 -1
  826. package/dist/core/utility/lmdb/UpsertRecordsResponseObject.js.map +1 -1
  827. package/dist/core/utility/lmdb/cleanLMDBMap.js +44 -7
  828. package/dist/core/utility/lmdb/cleanLMDBMap.js.map +1 -1
  829. package/dist/core/utility/lmdb/commonUtility.js +46 -17
  830. package/dist/core/utility/lmdb/commonUtility.js.map +1 -1
  831. package/dist/core/utility/lmdb/deleteUtility.js +51 -16
  832. package/dist/core/utility/lmdb/deleteUtility.js.map +1 -1
  833. package/dist/core/utility/lmdb/environmentUtility.js +91 -51
  834. package/dist/core/utility/lmdb/environmentUtility.js.map +1 -1
  835. package/dist/core/utility/lmdb/searchCursorFunctions.js +46 -14
  836. package/dist/core/utility/lmdb/searchCursorFunctions.js.map +1 -1
  837. package/dist/core/utility/lmdb/searchUtility.js +91 -55
  838. package/dist/core/utility/lmdb/searchUtility.js.map +1 -1
  839. package/dist/core/utility/lmdb/terms.js +12 -22
  840. package/dist/core/utility/lmdb/terms.js.map +1 -1
  841. package/dist/core/utility/lmdb/writeUtility.js +61 -28
  842. package/dist/core/utility/lmdb/writeUtility.js.map +1 -1
  843. package/dist/core/utility/logging/harper_logger.js +177 -82
  844. package/dist/core/utility/logging/harper_logger.js.map +1 -1
  845. package/dist/core/utility/logging/logRotator.js +67 -32
  846. package/dist/core/utility/logging/logRotator.js.map +1 -1
  847. package/dist/core/utility/logging/logger.js +4 -4
  848. package/dist/core/utility/logging/readLog.js +54 -17
  849. package/dist/core/utility/logging/readLog.js.map +1 -1
  850. package/dist/core/utility/logging/transactionLog.js +51 -16
  851. package/dist/core/utility/logging/transactionLog.js.map +1 -1
  852. package/dist/core/utility/mount_hdb.js +54 -17
  853. package/dist/core/utility/mount_hdb.js.map +1 -1
  854. package/dist/core/utility/npmUtilities.js +54 -19
  855. package/dist/core/utility/npmUtilities.js.map +1 -1
  856. package/dist/core/utility/operation_authorization.js +135 -86
  857. package/dist/core/utility/operation_authorization.js.map +1 -1
  858. package/dist/core/utility/packageUtils.js +7 -17
  859. package/dist/core/utility/packageUtils.js.map +1 -1
  860. package/dist/core/utility/password.js +2 -2
  861. package/dist/core/utility/processManagement/processManagement.js +2 -2
  862. package/dist/core/utility/processManagement/servicesConfig.js +1 -1
  863. package/dist/core/utility/signalling.js +51 -16
  864. package/dist/core/utility/signalling.js.map +1 -1
  865. package/dist/core/utility/watcherFallback.js +73 -0
  866. package/dist/core/utility/watcherFallback.js.map +1 -0
  867. package/dist/core/validation/analyticsValidator.js +80 -0
  868. package/dist/core/validation/analyticsValidator.js.map +1 -0
  869. package/dist/core/validation/bulkDeleteValidator.js +49 -11
  870. package/dist/core/validation/bulkDeleteValidator.js.map +1 -1
  871. package/dist/core/validation/check_permissions.js +38 -3
  872. package/dist/core/validation/check_permissions.js.map +1 -1
  873. package/dist/core/validation/common_validators.js +62 -31
  874. package/dist/core/validation/common_validators.js.map +1 -1
  875. package/dist/core/validation/configValidator.js +189 -54
  876. package/dist/core/validation/configValidator.js.map +1 -1
  877. package/dist/core/validation/deleteValidator.js +49 -11
  878. package/dist/core/validation/deleteValidator.js.map +1 -1
  879. package/dist/core/validation/fileLoadValidator.js +67 -32
  880. package/dist/core/validation/fileLoadValidator.js.map +1 -1
  881. package/dist/core/validation/insertValidator.js +48 -10
  882. package/dist/core/validation/insertValidator.js.map +1 -1
  883. package/dist/core/validation/installValidator.js +47 -10
  884. package/dist/core/validation/installValidator.js.map +1 -1
  885. package/dist/core/validation/readLogValidator.js +60 -22
  886. package/dist/core/validation/readLogValidator.js.map +1 -1
  887. package/dist/core/validation/role_validation.js +55 -19
  888. package/dist/core/validation/role_validation.js.map +1 -1
  889. package/dist/core/validation/schemaMetadataValidator.js +11 -12
  890. package/dist/core/validation/schemaMetadataValidator.js.map +1 -1
  891. package/dist/core/validation/searchValidator.js +82 -43
  892. package/dist/core/validation/searchValidator.js.map +1 -1
  893. package/dist/core/validation/transactionLogValidator.js +52 -17
  894. package/dist/core/validation/transactionLogValidator.js.map +1 -1
  895. package/dist/core/validation/user_validation.js +38 -6
  896. package/dist/core/validation/user_validation.js.map +1 -1
  897. package/dist/core/validation/validationWrapper.js +4 -5
  898. package/dist/core/validation/validationWrapper.js.map +1 -1
  899. package/dist/licensing/usageLicensing.js +30 -21
  900. package/dist/licensing/usageLicensing.js.map +1 -1
  901. package/dist/replication/knownNodes.js +171 -41
  902. package/dist/replication/knownNodes.js.map +1 -1
  903. package/dist/replication/replicationConnection.js +441 -85
  904. package/dist/replication/replicationConnection.js.map +1 -1
  905. package/dist/replication/replicator.js +56 -28
  906. package/dist/replication/replicator.js.map +1 -1
  907. package/dist/replication/setNode.js +24 -4
  908. package/dist/replication/setNode.js.map +1 -1
  909. package/dist/replication/subscriptionManager.js +195 -16
  910. package/dist/replication/subscriptionManager.js.map +1 -1
  911. package/dist/security/certificate.js +41 -6
  912. package/dist/security/certificate.js.map +1 -1
  913. package/dist/security/sshKeyOperations.js +35 -2
  914. package/dist/security/sshKeyOperations.js.map +1 -1
  915. package/licensing/usageLicensing.ts +32 -37
  916. package/npm-shrinkwrap.json +9032 -4334
  917. package/package.json +17 -12
  918. package/replication/DESIGN.md +139 -0
  919. package/replication/knownNodes.ts +165 -44
  920. package/replication/replicationConnection.ts +475 -92
  921. package/replication/replicator.ts +54 -27
  922. package/replication/setNode.ts +29 -10
  923. package/replication/subscriptionManager.ts +227 -21
  924. package/security/certificate.ts +8 -4
  925. package/security/sshKeyOperations.ts +1 -1
  926. package/static/defaultConfig.yaml +1 -0
  927. package/studio/web/assets/{index-CybLScHg.js → index-Dqr9oVhe.js} +5 -5
  928. package/studio/web/assets/index-Dqr9oVhe.js.map +1 -0
  929. package/studio/web/assets/{index.lazy-DKx5-iXF.js → index.lazy-CpKcKb7M.js} +2 -2
  930. package/studio/web/assets/{index.lazy-DKx5-iXF.js.map → index.lazy-CpKcKb7M.js.map} +1 -1
  931. package/studio/web/assets/{profile-BOjes0Wl.js → profile-C1cujdsg.js} +2 -2
  932. package/studio/web/assets/{profile-BOjes0Wl.js.map → profile-C1cujdsg.js.map} +1 -1
  933. package/studio/web/assets/{status-EWKUIrjT.js → status-CTiIIQlY.js} +2 -2
  934. package/studio/web/assets/{status-EWKUIrjT.js.map → status-CTiIIQlY.js.map} +1 -1
  935. package/studio/web/index.html +1 -1
  936. package/core/bin/cliOperations.js +0 -159
  937. package/core/bin/lite.js +0 -5
  938. package/core/bin/stop.js +0 -21
  939. package/core/dataLayer/harperBridge/BridgeMethods.js +0 -85
  940. package/core/utility/globalSchema.js +0 -35
  941. package/core/utility/lmdb/OpenDBIObject.js +0 -31
  942. package/studio/web/assets/index-CybLScHg.js.map +0 -1
@@ -6,8 +6,7 @@
6
6
  */
7
7
 
8
8
  import { Encoder } from 'msgpackr';
9
- import { get as envGet } from '../utility/environment/environmentManager.js';
10
- import { CONFIG_PARAMS } from '../utility/hdbTerms.ts';
9
+ import { createStructon } from 'structon';
11
10
  import {
12
11
  HAS_PREVIOUS_RESIDENCY_ID,
13
12
  HAS_CURRENT_RESIDENCY_ID,
@@ -17,7 +16,7 @@ import {
17
16
  ACTION_32_BIT,
18
17
  HAS_ADDITIONAL_AUDIT_REFS as HAS_ADDITIONAL_AUDIT_REFS_AUDIT,
19
18
  } from './auditStore.ts';
20
- import * as harperLogger from '../utility/logging/harper_logger.js';
19
+ import * as harperLogger from '../utility/logging/harper_logger.ts';
21
20
  import './blob.ts';
22
21
  import {
23
22
  blobsWereEncoded,
@@ -31,6 +30,10 @@ import { getThisNodeId } from './nodeIdMapping.ts';
31
30
  import { recordAction } from './analytics/write.ts';
32
31
  import { RocksDatabase } from '@harperfast/rocksdb-js';
33
32
  import { when } from '../utility/when.ts';
33
+ import { CONFIG_PARAMS } from '../utility/hdbTerms.ts';
34
+ import * as envMngr from '../utility/environment/environmentManager.js';
35
+
36
+ const StructonEncoder = createStructon(Encoder) as typeof Encoder;
34
37
  export type Entry = {
35
38
  key: any;
36
39
  value: any;
@@ -42,6 +45,7 @@ export type Entry = {
42
45
  residencyId: number;
43
46
  size: number;
44
47
  deref?: () => any;
48
+ [METADATA]?: any;
45
49
  additionalAuditRefs?: Array<{ version: number; nodeId: number }>;
46
50
  };
47
51
 
@@ -82,7 +86,11 @@ let timestampNextEncoding = 0,
82
86
  additionalAuditRefsNextEncoding: Array<{ version: number; nodeId: number }> | undefined;
83
87
  // tracking metadata with a singleton works better than trying to alter response of getEntry/get and coordinating that across caching layers
84
88
  export let lastMetadata: Entry | null = null;
85
- export class RecordEncoder extends Encoder {
89
+ export class RecordEncoder extends StructonEncoder {
90
+ rootStore: any;
91
+ declare saveStructures: any;
92
+ declare getStructures: any;
93
+ declare _writeStruct: any;
86
94
  structureUpdate?: any;
87
95
  isRocksDB: boolean;
88
96
  name: string;
@@ -92,16 +100,6 @@ export class RecordEncoder extends Encoder {
92
100
  // long-lived primary store, so a wide/sparse schema (whose records vary by per-field value
93
101
  // width) can grow it unbounded and exhaust memory. Caller-overridable; default caps it.
94
102
  options.maxOwnStructures ??= 256;
95
- // When random-access fields are disabled (storage.randomAccessFields=false), write records as
96
- // classic shared structures instead of typed random-access structures. randomAccessStructure stays
97
- // on so reads still decode either form — existing typed-struct data remains readable; only new
98
- // writes change. lmdb-js does not forward non-whitelisted encoder options, so the flag is derived
99
- // from the global config here rather than passed through the store options. Read at construction
100
- // (DBI open, a cold path) so env/CLI config overrides are applied; an explicit option still wins
101
- // (e.g. rocksdb-js's option spread, or tests).
102
- if (options.readOnlyStructures === undefined && envGet(CONFIG_PARAMS.STORAGE_RANDOMACCESSFIELDS) === false) {
103
- options.readOnlyStructures = true;
104
- }
105
103
  /**
106
104
  * The base class for records that provides the read-only methods for accessing
107
105
  * metadata and will be assigned computed property getters. On its own, these instances
@@ -119,6 +117,16 @@ export class RecordEncoder extends Encoder {
119
117
 
120
118
  options.structPrototype = RecordObject.prototype;
121
119
  super(options);
120
+ // structon (the StructonEncoder base) always installs the struct write hook. For DBIs
121
+ // that don't opt into struct mode (non-primary, e.g. __dbis__), force it to bail (return
122
+ // 0) so objects are written in plain msgpackr records mode — decodable by readers without
123
+ // struct support (msgpackr v1 / Harper v4 downgrade). We make it bail rather than clear
124
+ // it so msgpackr keeps the struct-safe integer boundary: top-level integers 0x20-0x3f are
125
+ // written as uint8 rather than bare fixints, which the retained struct READ hook would
126
+ // otherwise misread as struct headers (e.g. a scalar NEXT_TABLE_ID >= 32 in __dbis__).
127
+ // The read hook stays intact so records already written in struct mode by a prior v5 still
128
+ // decode.
129
+ if (!options.randomAccessStructure) this._writeStruct = () => 0;
122
130
  const superEncode = this.encode;
123
131
  this.encode = function (record, options?) {
124
132
  // this handles our custom metadata encoding, prefixing the record with metadata, including the local
@@ -226,9 +234,9 @@ export class RecordEncoder extends Encoder {
226
234
  // We must report a non-commit as `false` (not the buggy `undefined`, which msgpackr
227
235
  // reads as success and then writes a record referencing a structure that was never
228
236
  // saved → later "Record id is not defined" on decode). Returning `false` makes msgpackr
229
- // re-pack; paired with msgpackr 1.11.14's structures-rebuild-on-save-failure fix, the
230
- // re-pack reloads the durable structures, rebuilds the transition trie, re-mints, and
231
- // re-saves — so the record always references a persisted structure.
237
+ // re-pack; paired with the msgpackr fix that marks structures uninitialized on
238
+ // save-failure, the re-pack reloads the durable structures, rebuilds the transition
239
+ // trie, re-mints, and re-saves — so the record always references a persisted structure.
232
240
  const committed = this.rootStore.transactionSync(
233
241
  (txn) => {
234
242
  const sharedStructuresKey = [Symbol.for('structures'), this.name];
@@ -283,7 +291,7 @@ export class RecordEncoder extends Encoder {
283
291
  // timestamped record (8 bytes stripped → corrupt). Callers that pass a value known to have no
284
292
  // prefix (e.g. the audit store's getValue) set options.noMetadata to skip the heuristic. Typed
285
293
  // structs start at 0x20-0x3f and never hit this, which is why it only surfaces with classic
286
- // structures (random-access fields off).
294
+ // structures (typed structures off).
287
295
  if (!options?.noMetadata && ((this.isRocksDB && nextByte === 66) || (nextByte < 32 && end > 2))) {
288
296
  // record with metadata
289
297
  // this means that the record starts with a local timestamp (that was assigned by lmdb-js).
@@ -370,7 +378,7 @@ export class RecordEncoder extends Encoder {
370
378
  additionalAuditRefs,
371
379
  size: end - start,
372
380
  value,
373
- };
381
+ } as any;
374
382
  if (this.isRocksDB) return lastMetadata;
375
383
  return value;
376
384
  } // else a normal entry
@@ -381,21 +389,6 @@ export class RecordEncoder extends Encoder {
381
389
  }
382
390
  }
383
391
  }
384
-
385
- /**
386
- * Encoder for custom-index object stores (e.g. HNSW vector graphs). These hold fixed-shape internal
387
- * nodes — numeric-keyed per-level connection arrays and quantized bins — that depend on random-access
388
- * struct encoding and are mutated in place during graph maintenance. Keep them writing typed structs
389
- * even when storage.randomAccessFields disables structs for user tables: their node shapes are
390
- * controlled, so the wide/heterogeneous OOM risk that motivates opt-out doesn't apply, and classic
391
- * (frozen) decoding would break the in-place graph mutation.
392
- */
393
- export class IndexRecordEncoder extends RecordEncoder {
394
- constructor(options) {
395
- options.readOnlyStructures = false;
396
- super(options);
397
- }
398
- }
399
392
  function getTimestamp() {
400
393
  TIMESTAMP_HOLDER[0] = TIMESTAMP_HOLDER[0] ^ 0x40; // restore the first byte, we xor to differentiate the first byte from structures
401
394
  return TIMESTAMP_VIEW.getFloat64(0);
@@ -536,6 +529,7 @@ export function handleLocalTimeForGets(store, rootStore) {
536
529
  use.call(this);
537
530
  };
538
531
  Txn.prototype.done = function () {
532
+ if (this.isDone) return;
539
533
  done.call(this);
540
534
  this.openTimer = 0; // reset so idle pool time doesn't accumulate toward the stale-open threshold
541
535
  if (this.isDone) {
@@ -554,16 +548,18 @@ export function handleLocalTimeForGets(store, rootStore) {
554
548
  return store;
555
549
  }
556
550
  const trackedTxns: WeakRef<any>[] = [];
557
- setInterval(() => {
551
+ const configValue = envMngr.get(CONFIG_PARAMS.STORAGE_MAX_READ_TRANSACTION_OPEN_TIME) ?? 300000;
552
+ let READ_TXN_TIMEOUT_TICKS = Math.round(configValue / 15000);
553
+ export function checkReadTxnTimeouts() {
558
554
  for (let i = 0; i < trackedTxns.length; i++) {
559
555
  const txn = trackedTxns[i].deref();
560
556
  if (!txn || txn.isDone || txn.isCommitted) trackedTxns.splice(i--, 1);
561
557
  else if (txn.notCurrent) {
562
558
  if (txn.openTimer) {
563
559
  if (txn.openTimer > 3) {
564
- if (txn.openTimer > 60) {
560
+ if (txn.openTimer > READ_TXN_TIMEOUT_TICKS) {
565
561
  harperLogger.error(
566
- 'Read transaction detected that has been open too long (over 15 minutes), ending transaction',
562
+ `Read transaction detected that has been open too long (over ${Math.round(READ_TXN_TIMEOUT_TICKS * 15)} seconds), ending transaction`,
567
563
  txn
568
564
  );
569
565
  trackedTxns.splice(i--, 1);
@@ -584,7 +580,12 @@ setInterval(() => {
584
580
  } else txn.openTimer = 1;
585
581
  }
586
582
  }
587
- }, 15000).unref();
583
+ }
584
+ setInterval(checkReadTxnTimeouts, 15000).unref();
585
+ export function setReadTxnExpiration(ms: number) {
586
+ READ_TXN_TIMEOUT_TICKS = Math.round(ms / 15000);
587
+ return trackedTxns;
588
+ }
588
589
  export function setNextEncoding(timestamp: number, metadata: number, expiresAt = -1, nodeId = -1, residencyId = 0) {
589
590
  timestampNextEncoding = timestamp;
590
591
  metadataInNextEncoding = metadata;
@@ -632,6 +633,7 @@ export function recordUpdater(store, tableId, auditStore) {
632
633
  version: number;
633
634
  instructedWrite?: boolean;
634
635
  ifVersion?: number;
636
+ transaction?: any;
635
637
  } = {
636
638
  version: newVersion,
637
639
  instructedWrite: timestampNextEncoding > 0,
@@ -647,7 +649,7 @@ export function recordUpdater(store, tableId, auditStore) {
647
649
  metadataInNextEncoding |= HAS_RESIDENCY_ID;
648
650
  extendedType |= HAS_CURRENT_RESIDENCY_ID;
649
651
  } else residencyIdAtNextEncoding = 0;
650
- const nodeId = options?.nodeId;
652
+ const nodeId = options?.nodeId ?? (audit ? getThisNodeId(auditStore) : undefined);
651
653
  if (nodeId >= 0) {
652
654
  nodeIdAtNextEncoding = nodeId;
653
655
  metadataInNextEncoding |= HAS_NODE_ID;
@@ -15,6 +15,8 @@ export class RequestTarget extends URLSearchParams {
15
15
  /** Request best effort and returning synchronously */
16
16
  declare syncAllowed?: boolean;
17
17
 
18
+ declare sync?: boolean;
19
+
18
20
  /** Indicates that this is a request to query for collection of records */
19
21
  isCollection?: boolean;
20
22
  // these are query parameters
@@ -1,5 +1,5 @@
1
1
  import type { User } from '../security/user.ts';
2
- import type { RecordObject } from './RecordEncoder.js';
2
+ import type { RecordObject } from './RecordEncoder.ts';
3
3
  import {
4
4
  ResourceInterface,
5
5
  SubscriptionRequest,
@@ -13,11 +13,12 @@ import { randomUUID } from 'crypto';
13
13
  import { DatabaseTransaction, type Transaction } from './DatabaseTransaction.ts';
14
14
  import { IterableEventQueue } from './IterableEventQueue.ts';
15
15
  import { _assignPackageExport } from '../globals.js';
16
- import { ClientError, AccessViolation } from '../utility/errors/hdbError.js';
16
+ import { ClientError, AccessViolation } from '../utility/errors/hdbError.ts';
17
17
  import { transaction, contextStorage } from './transaction.ts';
18
18
  import { parseQuery } from './search.ts';
19
19
  import { RequestTarget } from './RequestTarget.ts';
20
20
  import { when, promiseNormalize } from '../utility/when.ts';
21
+ import type { JsonSchemaFragment } from './jsonSchemaTypes.ts';
21
22
 
22
23
  const EXTENSION_TYPES = {
23
24
  json: 'application/json',
@@ -45,17 +46,38 @@ export class Resource<Record extends object = any> implements ResourceInterface<
45
46
  static transactions: Transaction[] & { timestamp: number };
46
47
  static directURLMapping = false;
47
48
  static loadAsInstance: boolean;
49
+ static description?: string;
50
+ static properties?: { [name: string]: JsonSchemaFragment };
51
+ static outputSchemas?: { [verb: string]: JsonSchemaFragment };
52
+ static mcp?: { annotations?: { [verb: string]: { [key: string]: unknown } } };
53
+ static hidden?: boolean;
48
54
  constructor(identifier: Id, source: any) {
49
55
  this.#id = identifier;
50
56
  const context = source?.getContext ? (source.getContext() ?? null) : undefined;
51
57
  this.#context = context !== undefined ? context : source || null;
52
58
  }
53
59
 
60
+ doesExist(): boolean {
61
+ return true; // Subclasses should override if needed
62
+ }
63
+
64
+ wasLoadedFromSource(): boolean | void {
65
+ // Subclasses should override if needed
66
+ }
67
+
68
+ addTo(_property: keyof Record, _value: Record[keyof Record]): void {
69
+ throw new Error('Not implemented');
70
+ }
71
+
72
+ subtractFrom(_property: keyof Record, _value: Record[keyof Record]): void {
73
+ throw new Error('Not implemented');
74
+ }
75
+
54
76
  /**
55
77
  * The get methods are for directly getting a resource, and called for HTTP GET requests.
56
78
  */
57
79
  static get = transactional(
58
- function (resource: Resource, query: RequestTarget, _request: Context, _data: any) {
80
+ function (resource: any, query: RequestTarget, _request: Context, _data: any) {
59
81
  const result = resource.get?.(query);
60
82
  // for the new API we always apply select in the instance method
61
83
  if (!resource.constructor.loadAsInstance) return result;
@@ -89,7 +111,7 @@ export class Resource<Record extends object = any> implements ResourceInterface<
89
111
  * Store the provided record by the provided id. If no id is provided, it is auto-generated.
90
112
  */
91
113
  static put = transactional(
92
- function (resource: Resource, query: RequestTarget, request: Context, data: any) {
114
+ function (resource: any, query: RequestTarget, request: Context, data: any) {
93
115
  if (Array.isArray(data) && resource.#isCollection && resource.constructor.loadAsInstance !== false) {
94
116
  const results = [];
95
117
  for (const element of data) {
@@ -115,7 +137,7 @@ export class Resource<Record extends object = any> implements ResourceInterface<
115
137
  );
116
138
 
117
139
  static patch = transactional(
118
- function (resource: Resource, query: RequestTarget, _request: Context, data: any) {
140
+ function (resource: any, query: RequestTarget, _request: Context, data: any) {
119
141
  // TODO: Allow array like put?
120
142
  return resource.patch
121
143
  ? resource.constructor.loadAsInstance === false
@@ -127,7 +149,7 @@ export class Resource<Record extends object = any> implements ResourceInterface<
127
149
  );
128
150
 
129
151
  static delete = transactional(
130
- function (resource: Resource, query: RequestTarget, _request: Context, _data: any) {
152
+ function (resource: any, query: RequestTarget, _request: Context, _data: any) {
131
153
  return resource.delete ? resource.delete(query) : missingMethod(resource, 'delete');
132
154
  },
133
155
  { hasContent: false, type: 'delete', method: 'delete' }
@@ -150,7 +172,7 @@ export class Resource<Record extends object = any> implements ResourceInterface<
150
172
  static create(idPrefix: Id, record: any, context: Context): Promise<Id>;
151
173
  static create(record: any, context: Context): Promise<Id>;
152
174
  static create(idPrefix: any, record: any, context?: Context): Promise<Id> {
153
- let id: Id;
175
+ let id: any;
154
176
  if (this.loadAsInstance === false) {
155
177
  if (typeof idPrefix === 'object' && idPrefix && !context) {
156
178
  // two argument form (record, context), shift the arguments
@@ -160,44 +182,45 @@ export class Resource<Record extends object = any> implements ResourceInterface<
160
182
  id.isCollection = true;
161
183
  } else id = idPrefix;
162
184
  } else {
163
- if (idPrefix == null) id = record?.[this.primaryKey] ?? this.getNewId();
185
+ const primaryKey = (this as any).primaryKey;
186
+ if (idPrefix == null) id = record?.[primaryKey] ?? this.getNewId();
164
187
  else if (Array.isArray(idPrefix) && typeof idPrefix[0] !== 'object')
165
- id = record?.[this.primaryKey] ?? [...idPrefix, this.getNewId()];
166
- else if (typeof idPrefix !== 'object') id = record?.[this.primaryKey] ?? [idPrefix, this.getNewId()];
188
+ id = record?.[primaryKey] ?? [...idPrefix, this.getNewId()];
189
+ else if (typeof idPrefix !== 'object') id = record?.[primaryKey] ?? [idPrefix, this.getNewId()];
167
190
  else {
168
191
  // two argument form, shift the arguments
169
- id = idPrefix?.[this.primaryKey] ?? this.getNewId();
192
+ id = idPrefix?.[primaryKey] ?? this.getNewId();
170
193
  context = record || {};
171
194
  record = idPrefix;
172
195
  }
173
196
  }
174
197
  if (context) {
175
- if (context.getContext) context = context.getContext();
198
+ if ((context as any).getContext) context = (context as any).getContext();
176
199
  } else {
177
200
  // try to get the context from the async context if possible
178
201
  context = contextStorage.getStore() ?? {};
179
202
  }
180
203
  return transaction(context, async () => {
181
- context.transaction.startedFrom ??= {
204
+ (context as any).transaction.startedFrom ??= {
182
205
  resourceName: this.name,
183
206
  method: 'create',
184
207
  };
185
- const resource = new this(id, context);
208
+ const resource = new (this as any)(id, context);
186
209
  const results = resource.create ? await resource.create(id, record) : missingMethod(resource, 'create');
187
- context.newLocation = id ?? results?.[this.primaryKey];
188
- context.createdResource = true;
210
+ (context as any).newLocation = id ?? results?.[(this as any).primaryKey];
211
+ (context as any).createdResource = true;
189
212
  return this.loadAsInstance === false ? results : resource;
190
213
  });
191
214
  }
192
215
  static invalidate = transactional(
193
- function (resource: Resource, query: RequestTarget, _request: Context, _data: any) {
216
+ function (resource: any, query: RequestTarget, _request: Context, _data: any) {
194
217
  return resource.invalidate ? resource.invalidate(query) : missingMethod(resource, 'invalidate');
195
218
  },
196
219
  { hasContent: false, type: 'update', method: 'invalidate' }
197
220
  );
198
221
 
199
222
  static post = transactional(
200
- function (resource: Resource, query: RequestTarget, _request: Context, data: any) {
223
+ function (resource: any, query: RequestTarget, _request: Context, data: any) {
201
224
  if (resource.#id != null) resource.update?.(); // save any changes made during post
202
225
  return resource.constructor.loadAsInstance === false ? resource.post(query, data) : resource.post(data, query);
203
226
  },
@@ -205,14 +228,14 @@ export class Resource<Record extends object = any> implements ResourceInterface<
205
228
  );
206
229
 
207
230
  static update = transactional(
208
- function (resource: Resource, query: RequestTarget, _request: Context, data: any) {
231
+ function (resource: any, query: RequestTarget, _request: Context, data: any) {
209
232
  return resource.update(query, data);
210
233
  },
211
234
  { type: 'update', method: 'update' }
212
235
  );
213
236
 
214
237
  static connect = transactional(
215
- function (resource: Resource, query: RequestTarget, _request: Context, data: any) {
238
+ function (resource: any, query: RequestTarget, _request: Context, data: any) {
216
239
  return resource.connect
217
240
  ? resource.constructor.loadAsInstance === false
218
241
  ? resource.connect(query, data)
@@ -223,14 +246,14 @@ export class Resource<Record extends object = any> implements ResourceInterface<
223
246
  );
224
247
 
225
248
  static subscribe = transactional(
226
- function (resource: Resource, query: RequestTarget, _request: Context, _data: any) {
249
+ function (resource: any, query: RequestTarget, _request: Context, _data: any) {
227
250
  return resource.subscribe ? resource.subscribe(query) : missingMethod(resource, 'subscribe');
228
251
  },
229
252
  { type: 'read', method: 'subscribe', syncAllowed: true }
230
253
  );
231
254
 
232
255
  static publish = transactional(
233
- function (resource: Resource, query: Map, _request: Context, data: any) {
256
+ function (resource: any, query: RequestTarget, _request: Context, data: any) {
234
257
  if (resource.#id != null) resource.update?.(); // save any changes made during publish
235
258
  return resource.publish
236
259
  ? resource.constructor.loadAsInstance === false
@@ -242,9 +265,9 @@ export class Resource<Record extends object = any> implements ResourceInterface<
242
265
  );
243
266
 
244
267
  static search = transactional(
245
- function (resource: Resource, query: Query, request: Context) {
268
+ function (resource: any, query: Query, request: Context) {
246
269
  const result = resource.search ? resource.search(query) : missingMethod(resource, 'search');
247
- const select = request.select;
270
+ const select = (request as any).select;
248
271
  if (select && request.hasOwnProperty('select') && result != null && !result.selectApplied) {
249
272
  const transform = transformForSelect(select, resource.constructor);
250
273
  return result.map(transform);
@@ -255,7 +278,7 @@ export class Resource<Record extends object = any> implements ResourceInterface<
255
278
  );
256
279
 
257
280
  static query = transactional(
258
- function (resource: Resource, query: Map, _request: Context, data: any) {
281
+ function (resource: any, query: RequestTarget, _request: Context, data: any) {
259
282
  return resource.search
260
283
  ? resource.constructor.loadAsInstance === false
261
284
  ? resource.search(query, data)
@@ -266,7 +289,7 @@ export class Resource<Record extends object = any> implements ResourceInterface<
266
289
  );
267
290
 
268
291
  static copy = transactional(
269
- function (resource: Resource, query: Map, _request: Context, data: any) {
292
+ function (resource: any, query: RequestTarget, _request: Context, data: any) {
270
293
  return resource.copy
271
294
  ? resource.constructor.loadAsInstance === false
272
295
  ? resource.copy(query, data)
@@ -277,7 +300,7 @@ export class Resource<Record extends object = any> implements ResourceInterface<
277
300
  );
278
301
 
279
302
  static move = transactional(
280
- function (resource: Resource, query: Map, _request: Context, data: any) {
303
+ function (resource: any, query: RequestTarget, _request: Context, data: any) {
281
304
  return resource.move
282
305
  ? resource.constructor.loadAsInstance === false
283
306
  ? resource.move(query, data)
@@ -291,14 +314,14 @@ export class Resource<Record extends object = any> implements ResourceInterface<
291
314
  target: RequestTargetOrId,
292
315
  newRecord: Partial<Record & RecordObject>
293
316
  ): Promise<Record & Partial<RecordObject>> {
294
- if (this.constructor.loadAsInstance === false) {
295
- if (target.isCollection && this.create) {
296
- newRecord = await this.create(target, newRecord);
297
- return newRecord?.[this.constructor.primaryKey];
317
+ if ((this.constructor as any).loadAsInstance === false) {
318
+ if ((target as any).isCollection && this.create) {
319
+ newRecord = (await this.create(target as any, newRecord)) as any;
320
+ return newRecord?.[(this.constructor as any).primaryKey as keyof typeof newRecord] as any;
298
321
  }
299
322
  } else {
300
323
  if (this.#isCollection) {
301
- const resource = await this.constructor.create(this.#id, target, this.#context);
324
+ const resource = await (this.constructor as any).create(this.#id, target, this.#context);
302
325
  return resource.#id;
303
326
  }
304
327
  }
@@ -327,7 +350,7 @@ export class Resource<Record extends object = any> implements ResourceInterface<
327
350
  // handle path.json, path.cbor, etc. for requesting a specific content type using just the URL
328
351
  context.requestedContentType = requestedContentType;
329
352
  path = path.slice(0, dotIndex); // remove the property from the path
330
- } else if (this.attributes?.find((attribute) => attribute.name === property)) {
353
+ } else if ((this as any).attributes?.find((attribute) => attribute.name === property)) {
331
354
  // handle path.attribute for requesting a specific attribute using just the URL
332
355
  path = path.slice(0, dotIndex); // remove the property from the path
333
356
  if (query) query.property = property;
@@ -355,13 +378,13 @@ export class Resource<Record extends object = any> implements ResourceInterface<
355
378
  ): Resource | Promise<Resource> {
356
379
  let resource;
357
380
  const id = target.id;
358
- let context = request.getContext?.();
381
+ let context = (request as any).getContext?.();
359
382
  let isCollection;
360
- if (typeof request.isCollection === 'boolean' && request.hasOwnProperty('isCollection'))
361
- isCollection = request.isCollection;
383
+ if (typeof (request as any).isCollection === 'boolean' && request.hasOwnProperty('isCollection'))
384
+ isCollection = (request as any).isCollection;
362
385
  else isCollection = options?.isCollection;
363
386
  // if it is a collection and we have a collection class defined, use it
364
- const constructor = (isCollection && this.Collection) || this;
387
+ const constructor = (isCollection && (this as any).Collection) || this;
365
388
  if (!context) context = context === undefined ? request : {};
366
389
  resource = new constructor(id, context); // outside of a transaction, just create an instance
367
390
  if (isCollection) resource.#isCollection = true;
@@ -374,16 +397,19 @@ export class Resource<Record extends object = any> implements ResourceInterface<
374
397
  * but implementors can call send with
375
398
  */
376
399
  // eslint-disable-next-line no-unused-vars
377
- subscribe(request: SubscriptionRequest): AsyncIterable<Record> {
400
+ subscribe(request: SubscriptionRequest): AsyncIterable<Record> | Promise<AsyncIterable<Record>> {
378
401
  return new IterableEventQueue();
379
402
  }
380
403
 
381
- connect(target: RequestTarget, incomingMessages: IterableEventQueue<Record>): AsyncIterable<Record> {
404
+ connect(
405
+ target: RequestTarget,
406
+ incomingMessages: IterableEventQueue<Record>
407
+ ): AsyncIterable<Record> | Promise<AsyncIterable<Record>> {
382
408
  // convert subscription to an (async) iterator
383
- const query = this.constructor.loadAsInstance === false ? target : incomingMessages;
384
- if (query?.subscribe !== false) {
409
+ const query = (this.constructor as any).loadAsInstance === false ? target : incomingMessages;
410
+ if ((query as any)?.subscribe !== false) {
385
411
  // subscribing is the default action, but can be turned off
386
- return this.subscribe?.(query);
412
+ return this.subscribe?.(query as any) as any;
387
413
  }
388
414
  return new IterableEventQueue();
389
415
  }
@@ -439,9 +465,9 @@ export class Resource<Record extends object = any> implements ResourceInterface<
439
465
  search?(target: RequestTargetOrId): AsyncIterable<Record & Partial<RecordObject>>;
440
466
 
441
467
  create?(
442
- newRecord: Partial<Record & RecordObject>,
443
- target: RequestTargetOrId
444
- ): Promise<Record & Partial<RecordObject>>;
468
+ target: RequestTargetOrId,
469
+ newRecord: Partial<Record & RecordObject>
470
+ ): void | (Record & Partial<RecordObject>) | Promise<Record & Partial<RecordObject>>;
445
471
  put?(
446
472
  record: Record & RecordObject,
447
473
  target: RequestTargetOrId
@@ -452,7 +478,9 @@ export class Resource<Record extends object = any> implements ResourceInterface<
452
478
  ): void | (Record & Partial<RecordObject>) | Promise<void | (Record & Partial<RecordObject>)>;
453
479
 
454
480
  delete?(target: RequestTargetOrId): boolean | Promise<boolean>;
455
- invalidate?(target: RequestTargetOrId): void | Promise<void>;
481
+ invalidate(_target: RequestTargetOrId): void | Promise<void> {
482
+ missingMethod(this, 'invalidate');
483
+ }
456
484
 
457
485
  publish?(target: RequestTargetOrId, record: Record, options?: any): void;
458
486
  }
@@ -473,12 +501,15 @@ export function snakeCase(camelCase: string) {
473
501
  * @returns
474
502
  */
475
503
  function transactional(
476
- action: (resource: ResourceInterface, query: RequestTarget, context: Context, data: any) => any,
504
+ action: (resource: any, query: RequestTarget, context: Context, data: any) => any,
477
505
  options: {
478
- hasContent: boolean;
506
+ hasContent?: boolean;
479
507
  type: 'read' | 'update' | 'create' | 'delete';
480
508
  async?: boolean;
481
509
  ensureLoaded?: boolean;
510
+ letItLinger?: boolean;
511
+ method?: string;
512
+ syncAllowed?: boolean;
482
513
  }
483
514
  ) {
484
515
  applyContext.reliesOnPrototype = true;
@@ -493,18 +524,23 @@ function transactional(
493
524
  if (context) {
494
525
  // if there are three arguments, it is id, data, context
495
526
  data = dataOrContext;
496
- context = context.getContext?.() || context;
527
+ context = (context as any).getContext?.() || context;
497
528
  } else if (dataOrContext) {
498
529
  // two arguments, more possibilities:
499
530
  if (
500
531
  typeof idOrQuery === 'object' &&
501
532
  idOrQuery &&
533
+ !(idOrQuery instanceof URLSearchParams) &&
502
534
  (!Array.isArray(idOrQuery) || typeof idOrQuery[0] === 'object')
503
535
  ) {
504
536
  // (data, context) form
505
537
  data = idOrQuery;
506
538
  id = data[this.primaryKey] ?? null;
507
- context = dataOrContext.getContext?.() || dataOrContext;
539
+ context = (dataOrContext as any).getContext?.() || dataOrContext;
540
+ if (context instanceof DatabaseTransaction) context = { transaction: context };
541
+ } else if (dataOrContext instanceof DatabaseTransaction) {
542
+ // (id, txn) form
543
+ context = { transaction: dataOrContext };
508
544
  } else if (dataOrContext?.transaction instanceof DatabaseTransaction) {
509
545
  // (id, context) form
510
546
  context = dataOrContext;
@@ -517,6 +553,10 @@ function transactional(
517
553
  data = idOrQuery;
518
554
  idOrQuery = undefined;
519
555
  id = data.getId?.() ?? data[this.primaryKey];
556
+ } else if (idOrQuery != null && typeof idOrQuery !== 'object') {
557
+ // single argument form, just id
558
+ id = idOrQuery;
559
+ data = undefined;
520
560
  } else {
521
561
  throw new ClientError(`Invalid argument for data, must be an object, but got ${idOrQuery}`);
522
562
  }
@@ -527,13 +567,13 @@ function transactional(
527
567
  if (context) {
528
568
  // (id, data, context), this a method that doesn't normally have a body/data, but with the three arguments, we have explicit data
529
569
  data = dataOrContext;
530
- context = context.getContext?.() || context;
570
+ context = (context as any).getContext?.() || context;
531
571
  } else if (hasContent === false) {
532
572
  // (id, context), preferred form used for methods that are explicitly without a body
533
- context = dataOrContext.getContext?.() || dataOrContext;
573
+ context = (dataOrContext as any).getContext?.() || dataOrContext;
534
574
  } else if (dataOrContext.transaction || dataOrContext.getContext) {
535
575
  // or if it looks like a context
536
- context = dataOrContext.getContext?.() || dataOrContext;
576
+ context = (dataOrContext as any).getContext?.() || dataOrContext;
537
577
  } else {
538
578
  data = dataOrContext;
539
579
  }
@@ -582,7 +622,7 @@ function transactional(
582
622
  }
583
623
  }
584
624
  } else if (id === undefined) {
585
- id = idOrQuery.id ?? null;
625
+ id = (idOrQuery as any).id ?? null;
586
626
  if (id == null) query.isCollection = true;
587
627
  }
588
628
  } else {
@@ -660,8 +700,8 @@ function transactional(
660
700
  : options.type === 'create'
661
701
  ? resource.allowCreate(context.user, data, context)
662
702
  : resource.allowDelete(context.user, query, context);
663
- if (allowed?.then) {
664
- return allowed.then((allowed) => {
703
+ if ((allowed as any)?.then) {
704
+ return (allowed as any).then((allowed) => {
665
705
  query.checkPermission = false;
666
706
  if (!allowed) {
667
707
  throw new AccessViolation(context.user);