@harperfast/harper 5.2.9 → 5.3.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (668) hide show
  1. package/agent/mcpTools.ts +1 -1
  2. package/agent/session.ts +25 -14
  3. package/bin/cliOperations.ts +46 -9
  4. package/bin/copyDb.ts +282 -59
  5. package/bin/deploySetup.ts +16 -5
  6. package/bin/harper.ts +1 -1
  7. package/bin/help.ts +4 -1
  8. package/bin/lite.ts +4 -1
  9. package/bin/restart.ts +59 -3
  10. package/bin/run.ts +6 -11
  11. package/bin/upgrade.js +7 -3
  12. package/bin/workloadIdentity.ts +119 -0
  13. package/components/Application.ts +2414 -242
  14. package/components/ApplicationScope.ts +8 -0
  15. package/components/EntryHandler.ts +59 -39
  16. package/components/OptionsWatcher.ts +150 -74
  17. package/components/RuntimeModuleTracker.ts +38 -7
  18. package/components/Scope.ts +37 -15
  19. package/components/awaitRestart.ts +84 -0
  20. package/components/componentLoader.ts +340 -30
  21. package/components/componentPreparationLock.ts +16 -5
  22. package/components/mcp/adapters/harperHttp.ts +4 -0
  23. package/components/mcp/listChanged.ts +4 -0
  24. package/components/mcp/toolRegistry.ts +2 -0
  25. package/components/mcp/tools/operations.ts +9 -0
  26. package/components/mcp/tools/schemas/operationDescriptions.ts +2 -2
  27. package/components/operations.js +270 -78
  28. package/components/operationsValidation.js +49 -1
  29. package/components/status/ComponentStatusRegistry.ts +59 -0
  30. package/config/RootConfigWatcher.ts +80 -34
  31. package/config/configUtils.ts +291 -34
  32. package/config/harperConfigEnvVars.ts +170 -27
  33. package/config-root.schema.json +29 -0
  34. package/dataLayer/blobBackup.ts +160 -50
  35. package/dataLayer/delete.ts +6 -1
  36. package/dataLayer/harperBridge/ResourceBridge.ts +52 -8
  37. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/DeleteAuditLogsBeforeResults.js +3 -1
  38. package/dataLayer/hdbInfoController.ts +34 -1
  39. package/dataLayer/insert.ts +44 -1
  40. package/dataLayer/rocksdbBackup.ts +53 -10
  41. package/dataLayer/schema.ts +11 -1
  42. package/dataLayer/schemaDescribe.ts +8 -1
  43. package/dist/agent/mcpTools.js +1 -1
  44. package/dist/agent/mcpTools.js.map +1 -1
  45. package/dist/agent/session.d.ts +22 -0
  46. package/dist/agent/session.js +26 -15
  47. package/dist/agent/session.js.map +1 -1
  48. package/dist/bin/cliOperations.js +48 -9
  49. package/dist/bin/cliOperations.js.map +1 -1
  50. package/dist/bin/copyDb.d.ts +12 -1
  51. package/dist/bin/copyDb.js +248 -60
  52. package/dist/bin/copyDb.js.map +1 -1
  53. package/dist/bin/deploySetup.d.ts +2 -0
  54. package/dist/bin/deploySetup.js +11 -3
  55. package/dist/bin/deploySetup.js.map +1 -1
  56. package/dist/bin/harper.js +1 -1
  57. package/dist/bin/harper.js.map +1 -1
  58. package/dist/bin/help.js +4 -1
  59. package/dist/bin/help.js.map +1 -1
  60. package/dist/bin/lite.js +4 -1
  61. package/dist/bin/lite.js.map +1 -1
  62. package/dist/bin/restart.js +54 -5
  63. package/dist/bin/restart.js.map +1 -1
  64. package/dist/bin/run.js +4 -10
  65. package/dist/bin/run.js.map +1 -1
  66. package/dist/bin/upgrade.js +4 -3
  67. package/dist/bin/upgrade.js.map +1 -1
  68. package/dist/bin/workloadIdentity.d.ts +18 -0
  69. package/dist/bin/workloadIdentity.js +100 -0
  70. package/dist/bin/workloadIdentity.js.map +1 -0
  71. package/dist/components/Application.d.ts +139 -16
  72. package/dist/components/Application.js +2215 -267
  73. package/dist/components/Application.js.map +1 -1
  74. package/dist/components/ApplicationScope.d.ts +8 -0
  75. package/dist/components/ApplicationScope.js +7 -0
  76. package/dist/components/ApplicationScope.js.map +1 -1
  77. package/dist/components/EntryHandler.js +26 -10
  78. package/dist/components/EntryHandler.js.map +1 -1
  79. package/dist/components/OptionsWatcher.d.ts +1 -0
  80. package/dist/components/OptionsWatcher.js +141 -74
  81. package/dist/components/OptionsWatcher.js.map +1 -1
  82. package/dist/components/RuntimeModuleTracker.js +40 -6
  83. package/dist/components/RuntimeModuleTracker.js.map +1 -1
  84. package/dist/components/Scope.js +38 -13
  85. package/dist/components/Scope.js.map +1 -1
  86. package/dist/components/awaitRestart.d.ts +33 -0
  87. package/dist/components/awaitRestart.js +61 -0
  88. package/dist/components/awaitRestart.js.map +1 -0
  89. package/dist/components/componentLoader.d.ts +38 -1
  90. package/dist/components/componentLoader.js +279 -22
  91. package/dist/components/componentLoader.js.map +1 -1
  92. package/dist/components/componentPreparationLock.d.ts +5 -0
  93. package/dist/components/componentPreparationLock.js +14 -6
  94. package/dist/components/componentPreparationLock.js.map +1 -1
  95. package/dist/components/mcp/adapters/harperHttp.js +4 -0
  96. package/dist/components/mcp/adapters/harperHttp.js.map +1 -1
  97. package/dist/components/mcp/listChanged.js +5 -0
  98. package/dist/components/mcp/listChanged.js.map +1 -1
  99. package/dist/components/mcp/toolRegistry.d.ts +1 -0
  100. package/dist/components/mcp/toolRegistry.js.map +1 -1
  101. package/dist/components/mcp/tools/operations.d.ts +5 -0
  102. package/dist/components/mcp/tools/operations.js +9 -0
  103. package/dist/components/mcp/tools/operations.js.map +1 -1
  104. package/dist/components/mcp/tools/schemas/operationDescriptions.js +2 -2
  105. package/dist/components/mcp/tools/schemas/operationDescriptions.js.map +1 -1
  106. package/dist/components/operations.js +231 -77
  107. package/dist/components/operations.js.map +1 -1
  108. package/dist/components/operationsValidation.js +49 -1
  109. package/dist/components/operationsValidation.js.map +1 -1
  110. package/dist/components/status/ComponentStatusRegistry.d.ts +0 -4
  111. package/dist/components/status/ComponentStatusRegistry.js +63 -0
  112. package/dist/components/status/ComponentStatusRegistry.js.map +1 -1
  113. package/dist/config/RootConfigWatcher.d.ts +7 -1
  114. package/dist/config/RootConfigWatcher.js +64 -27
  115. package/dist/config/RootConfigWatcher.js.map +1 -1
  116. package/dist/config/configUtils.d.ts +9 -1
  117. package/dist/config/configUtils.js +254 -33
  118. package/dist/config/configUtils.js.map +1 -1
  119. package/dist/config/harperConfigEnvVars.d.ts +16 -0
  120. package/dist/config/harperConfigEnvVars.js +162 -25
  121. package/dist/config/harperConfigEnvVars.js.map +1 -1
  122. package/dist/dataLayer/blobBackup.d.ts +49 -20
  123. package/dist/dataLayer/blobBackup.js +139 -50
  124. package/dist/dataLayer/blobBackup.js.map +1 -1
  125. package/dist/dataLayer/delete.js +1 -1
  126. package/dist/dataLayer/delete.js.map +1 -1
  127. package/dist/dataLayer/harperBridge/ResourceBridge.d.ts +14 -1
  128. package/dist/dataLayer/harperBridge/ResourceBridge.js +51 -10
  129. package/dist/dataLayer/harperBridge/ResourceBridge.js.map +1 -1
  130. package/dist/dataLayer/harperBridge/lmdbBridge/lmdbMethods/DeleteAuditLogsBeforeResults.d.ts +3 -1
  131. package/dist/dataLayer/harperBridge/lmdbBridge/lmdbMethods/DeleteAuditLogsBeforeResults.js +3 -1
  132. package/dist/dataLayer/harperBridge/lmdbBridge/lmdbMethods/DeleteAuditLogsBeforeResults.js.map +1 -1
  133. package/dist/dataLayer/hdbInfoController.d.ts +10 -0
  134. package/dist/dataLayer/hdbInfoController.js +30 -1
  135. package/dist/dataLayer/hdbInfoController.js.map +1 -1
  136. package/dist/dataLayer/insert.d.ts +9 -1
  137. package/dist/dataLayer/insert.js +30 -0
  138. package/dist/dataLayer/insert.js.map +1 -1
  139. package/dist/dataLayer/rocksdbBackup.d.ts +2 -2
  140. package/dist/dataLayer/rocksdbBackup.js +45 -8
  141. package/dist/dataLayer/rocksdbBackup.js.map +1 -1
  142. package/dist/dataLayer/schema.js +8 -0
  143. package/dist/dataLayer/schema.js.map +1 -1
  144. package/dist/dataLayer/schemaDescribe.js +8 -1
  145. package/dist/dataLayer/schemaDescribe.js.map +1 -1
  146. package/dist/index.d.ts +1 -1
  147. package/dist/index.js.map +1 -1
  148. package/dist/json/systemSchema.json +52 -0
  149. package/dist/resources/DatabaseTransaction.d.ts +55 -0
  150. package/dist/resources/DatabaseTransaction.js +459 -45
  151. package/dist/resources/DatabaseTransaction.js.map +1 -1
  152. package/dist/resources/LMDBTransaction.js +22 -4
  153. package/dist/resources/LMDBTransaction.js.map +1 -1
  154. package/dist/resources/PrimaryRocksDatabase.d.ts +1 -0
  155. package/dist/resources/PrimaryRocksDatabase.js +29 -0
  156. package/dist/resources/PrimaryRocksDatabase.js.map +1 -1
  157. package/dist/resources/RecordEncoder.d.ts +20 -0
  158. package/dist/resources/RecordEncoder.js +94 -9
  159. package/dist/resources/RecordEncoder.js.map +1 -1
  160. package/dist/resources/RequestTarget.d.ts +2 -0
  161. package/dist/resources/RequestTarget.js.map +1 -1
  162. package/dist/resources/Resource.js +20 -11
  163. package/dist/resources/Resource.js.map +1 -1
  164. package/dist/resources/ResourceInterface.d.ts +20 -1
  165. package/dist/resources/ResourceInterface.js.map +1 -1
  166. package/dist/resources/RocksIndexStore.d.ts +6 -1
  167. package/dist/resources/RocksIndexStore.js +24 -9
  168. package/dist/resources/RocksIndexStore.js.map +1 -1
  169. package/dist/resources/RocksTransactionLogStore.d.ts +14 -1
  170. package/dist/resources/RocksTransactionLogStore.js +57 -17
  171. package/dist/resources/RocksTransactionLogStore.js.map +1 -1
  172. package/dist/resources/Table.d.ts +112 -8
  173. package/dist/resources/Table.js +1073 -191
  174. package/dist/resources/Table.js.map +1 -1
  175. package/dist/resources/auditStore.d.ts +11 -2
  176. package/dist/resources/auditStore.js +325 -71
  177. package/dist/resources/auditStore.js.map +1 -1
  178. package/dist/resources/blob.d.ts +129 -9
  179. package/dist/resources/blob.js +992 -114
  180. package/dist/resources/blob.js.map +1 -1
  181. package/dist/resources/branchDatabase.d.ts +48 -0
  182. package/dist/resources/branchDatabase.js +892 -0
  183. package/dist/resources/branchDatabase.js.map +1 -0
  184. package/dist/resources/crdt.js +50 -12
  185. package/dist/resources/crdt.js.map +1 -1
  186. package/dist/resources/databases.d.ts +150 -0
  187. package/dist/resources/databases.js +1200 -239
  188. package/dist/resources/databases.js.map +1 -1
  189. package/dist/resources/defineTable.d.ts +10 -2
  190. package/dist/resources/defineTable.js +9 -1
  191. package/dist/resources/defineTable.js.map +1 -1
  192. package/dist/resources/graphql.d.ts +1 -1
  193. package/dist/resources/graphql.js +50 -15
  194. package/dist/resources/graphql.js.map +1 -1
  195. package/dist/resources/indexes/HierarchicalNavigableSmallWorld.d.ts +1 -0
  196. package/dist/resources/indexes/HierarchicalNavigableSmallWorld.js +6 -2
  197. package/dist/resources/indexes/HierarchicalNavigableSmallWorld.js.map +1 -1
  198. package/dist/resources/longLivedTransactions.d.ts +71 -0
  199. package/dist/resources/longLivedTransactions.js +358 -0
  200. package/dist/resources/longLivedTransactions.js.map +1 -0
  201. package/dist/resources/models/backendRegistry.d.ts +26 -0
  202. package/dist/resources/models/backendRegistry.js +60 -2
  203. package/dist/resources/models/backendRegistry.js.map +1 -1
  204. package/dist/resources/models/bootstrap.d.ts +33 -1
  205. package/dist/resources/models/bootstrap.js +416 -31
  206. package/dist/resources/models/bootstrap.js.map +1 -1
  207. package/dist/resources/recordLock.d.ts +80 -0
  208. package/dist/resources/recordLock.js +184 -0
  209. package/dist/resources/recordLock.js.map +1 -0
  210. package/dist/resources/replayLogs.d.ts +14 -1
  211. package/dist/resources/replayLogs.js +152 -24
  212. package/dist/resources/replayLogs.js.map +1 -1
  213. package/dist/resources/replayLogsGuards.d.ts +94 -7
  214. package/dist/resources/replayLogsGuards.js +111 -7
  215. package/dist/resources/replayLogsGuards.js.map +1 -1
  216. package/dist/resources/search.js +158 -6
  217. package/dist/resources/search.js.map +1 -1
  218. package/dist/resources/transactionBroadcast.d.ts +1 -1
  219. package/dist/resources/transactionBroadcast.js +2 -2
  220. package/dist/resources/transactionBroadcast.js.map +1 -1
  221. package/dist/security/auth.js +61 -30
  222. package/dist/security/auth.js.map +1 -1
  223. package/dist/security/authn/oidc/claims.d.ts +22 -0
  224. package/dist/security/authn/oidc/claims.js +71 -0
  225. package/dist/security/authn/oidc/claims.js.map +1 -0
  226. package/dist/security/authn/oidc/identityToken.d.ts +27 -0
  227. package/dist/security/authn/oidc/identityToken.js +111 -0
  228. package/dist/security/authn/oidc/identityToken.js.map +1 -0
  229. package/dist/security/authn/oidc/jwks.d.ts +25 -0
  230. package/dist/security/authn/oidc/jwks.js +261 -0
  231. package/dist/security/authn/oidc/jwks.js.map +1 -0
  232. package/dist/security/authn/oidc/providers/generic.d.ts +13 -0
  233. package/dist/security/authn/oidc/providers/generic.js +34 -0
  234. package/dist/security/authn/oidc/providers/generic.js.map +1 -0
  235. package/dist/security/authn/oidc/providers/githubActions.d.ts +11 -0
  236. package/dist/security/authn/oidc/providers/githubActions.js +129 -0
  237. package/dist/security/authn/oidc/providers/githubActions.js.map +1 -0
  238. package/dist/security/authn/oidc/providers/index.d.ts +37 -0
  239. package/dist/security/authn/oidc/providers/index.js +24 -0
  240. package/dist/security/authn/oidc/providers/index.js.map +1 -0
  241. package/dist/security/authn/oidc/tokenExchange.d.ts +12 -0
  242. package/dist/security/authn/oidc/tokenExchange.js +306 -0
  243. package/dist/security/authn/oidc/tokenExchange.js.map +1 -0
  244. package/dist/security/authn/oidc/trustPolicyOperations.d.ts +49 -0
  245. package/dist/security/authn/oidc/trustPolicyOperations.js +358 -0
  246. package/dist/security/authn/oidc/trustPolicyOperations.js.map +1 -0
  247. package/dist/security/authn/oidc/types.d.ts +38 -0
  248. package/dist/security/authn/oidc/types.js +6 -0
  249. package/dist/security/authn/oidc/types.js.map +1 -0
  250. package/dist/security/certificateVerification/index.js +40 -11
  251. package/dist/security/certificateVerification/index.js.map +1 -1
  252. package/dist/security/certificateVerification/trustedIssuers.d.ts +24 -0
  253. package/dist/security/certificateVerification/trustedIssuers.js +79 -0
  254. package/dist/security/certificateVerification/trustedIssuers.js.map +1 -0
  255. package/dist/security/certificateVerification/types.d.ts +1 -0
  256. package/dist/security/credentialProvenance.d.ts +35 -0
  257. package/dist/security/credentialProvenance.js +51 -0
  258. package/dist/security/credentialProvenance.js.map +1 -0
  259. package/dist/security/credentialRejection.d.ts +4 -0
  260. package/dist/security/credentialRejection.js +24 -0
  261. package/dist/security/credentialRejection.js.map +1 -0
  262. package/dist/security/deferredAuthentication.d.ts +36 -0
  263. package/dist/security/deferredAuthentication.js +70 -0
  264. package/dist/security/deferredAuthentication.js.map +1 -0
  265. package/dist/security/impersonation.d.ts +21 -0
  266. package/dist/security/impersonation.js +108 -9
  267. package/dist/security/impersonation.js.map +1 -1
  268. package/dist/security/jsLoader.d.ts +6 -0
  269. package/dist/security/jsLoader.js +75 -15
  270. package/dist/security/jsLoader.js.map +1 -1
  271. package/dist/security/keys.js +301 -71
  272. package/dist/security/keys.js.map +1 -1
  273. package/dist/security/operationScope.d.ts +21 -0
  274. package/dist/security/operationScope.js +36 -0
  275. package/dist/security/operationScope.js.map +1 -0
  276. package/dist/security/permissionsTranslator.js +21 -0
  277. package/dist/security/permissionsTranslator.js.map +1 -1
  278. package/dist/security/tokenAuthentication.d.ts +19 -1
  279. package/dist/security/tokenAuthentication.js +191 -10
  280. package/dist/security/tokenAuthentication.js.map +1 -1
  281. package/dist/security/user.js +4 -3
  282. package/dist/security/user.js.map +1 -1
  283. package/dist/server/DurableSubscriptionsSession.d.ts +2 -2
  284. package/dist/server/DurableSubscriptionsSession.js +67 -10
  285. package/dist/server/DurableSubscriptionsSession.js.map +1 -1
  286. package/dist/server/REST.js +73 -0
  287. package/dist/server/REST.js.map +1 -1
  288. package/dist/server/graphqlQuerying.js +4 -0
  289. package/dist/server/graphqlQuerying.js.map +1 -1
  290. package/dist/server/http.d.ts +11 -0
  291. package/dist/server/http.js +88 -15
  292. package/dist/server/http.js.map +1 -1
  293. package/dist/server/itc/serverHandlers.js +8 -1
  294. package/dist/server/itc/serverHandlers.js.map +1 -1
  295. package/dist/server/jobs/jobProcess.js +6 -2
  296. package/dist/server/jobs/jobProcess.js.map +1 -1
  297. package/dist/server/jobs/jobs.js +4 -1
  298. package/dist/server/jobs/jobs.js.map +1 -1
  299. package/dist/server/liveSubscriptionAuth.d.ts +26 -4
  300. package/dist/server/liveSubscriptionAuth.js +105 -39
  301. package/dist/server/liveSubscriptionAuth.js.map +1 -1
  302. package/dist/server/loadRootComponents.js +49 -10
  303. package/dist/server/loadRootComponents.js.map +1 -1
  304. package/dist/server/mqtt.d.ts +2 -0
  305. package/dist/server/mqtt.js +165 -30
  306. package/dist/server/mqtt.js.map +1 -1
  307. package/dist/server/nodeName.d.ts +2 -0
  308. package/dist/server/nodeName.js +107 -23
  309. package/dist/server/nodeName.js.map +1 -1
  310. package/dist/server/serverHelpers/Headers.d.ts +25 -0
  311. package/dist/server/serverHelpers/Headers.js +139 -1
  312. package/dist/server/serverHelpers/Headers.js.map +1 -1
  313. package/dist/server/serverHelpers/contentTypes.d.ts +9 -0
  314. package/dist/server/serverHelpers/contentTypes.js +32 -25
  315. package/dist/server/serverHelpers/contentTypes.js.map +1 -1
  316. package/dist/server/serverHelpers/deployValidationState.d.ts +3 -0
  317. package/dist/server/serverHelpers/deployValidationState.js +9 -19
  318. package/dist/server/serverHelpers/deployValidationState.js.map +1 -1
  319. package/dist/server/serverHelpers/operationAuthorizationState.d.ts +12 -0
  320. package/dist/server/serverHelpers/operationAuthorizationState.js +24 -2
  321. package/dist/server/serverHelpers/operationAuthorizationState.js.map +1 -1
  322. package/dist/server/serverHelpers/registeredOperations.d.ts +5 -4
  323. package/dist/server/serverHelpers/registeredOperations.js +74 -21
  324. package/dist/server/serverHelpers/registeredOperations.js.map +1 -1
  325. package/dist/server/serverHelpers/requestSanitization.d.ts +11 -0
  326. package/dist/server/serverHelpers/requestSanitization.js +20 -0
  327. package/dist/server/serverHelpers/requestSanitization.js.map +1 -0
  328. package/dist/server/serverHelpers/serverHandlers.js +6 -3
  329. package/dist/server/serverHelpers/serverHandlers.js.map +1 -1
  330. package/dist/server/serverHelpers/serverUtilities.d.ts +18 -0
  331. package/dist/server/serverHelpers/serverUtilities.js +90 -20
  332. package/dist/server/serverHelpers/serverUtilities.js.map +1 -1
  333. package/dist/server/serverHelpers/sharedMessageEncoding.d.ts +67 -0
  334. package/dist/server/serverHelpers/sharedMessageEncoding.js +280 -0
  335. package/dist/server/serverHelpers/sharedMessageEncoding.js.map +1 -0
  336. package/dist/server/serverHelpers/uwsServer.js +19 -1
  337. package/dist/server/serverHelpers/uwsServer.js.map +1 -1
  338. package/dist/server/static.js +24 -28
  339. package/dist/server/static.js.map +1 -1
  340. package/dist/server/storageReclamation.d.ts +12 -0
  341. package/dist/server/storageReclamation.js +26 -0
  342. package/dist/server/storageReclamation.js.map +1 -1
  343. package/dist/server/threads/itc.d.ts +7 -2
  344. package/dist/server/threads/itc.js +5 -1
  345. package/dist/server/threads/itc.js.map +1 -1
  346. package/dist/server/threads/manageThreads.d.ts +26 -3
  347. package/dist/server/threads/manageThreads.js +517 -65
  348. package/dist/server/threads/manageThreads.js.map +1 -1
  349. package/dist/server/threads/socketRouter.js +89 -26
  350. package/dist/server/threads/socketRouter.js.map +1 -1
  351. package/dist/server/threads/threadHeapMemory.d.ts +2 -0
  352. package/dist/server/threads/threadHeapMemory.js +31 -0
  353. package/dist/server/threads/threadHeapMemory.js.map +1 -0
  354. package/dist/server/threads/threadServer.js +46 -15
  355. package/dist/server/threads/threadServer.js.map +1 -1
  356. package/dist/sqlEngine/config.d.ts +1 -3
  357. package/dist/sqlEngine/config.js +19 -16
  358. package/dist/sqlEngine/config.js.map +1 -1
  359. package/dist/sqlTranslator/index.d.ts +1 -1
  360. package/dist/sqlTranslator/index.js +30 -7
  361. package/dist/sqlTranslator/index.js.map +1 -1
  362. package/dist/upgrade/directives/5-3-0.d.ts +7 -0
  363. package/dist/upgrade/directives/5-3-0.js +148 -0
  364. package/dist/upgrade/directives/5-3-0.js.map +1 -0
  365. package/dist/upgrade/directives/directivesController.js +2 -1
  366. package/dist/upgrade/directives/directivesController.js.map +1 -1
  367. package/dist/utility/OperationFunctionCaller.js +2 -1
  368. package/dist/utility/OperationFunctionCaller.js.map +1 -1
  369. package/dist/utility/common_utils.d.ts +16 -0
  370. package/dist/utility/common_utils.js +32 -6
  371. package/dist/utility/common_utils.js.map +1 -1
  372. package/dist/utility/componentNames.d.ts +8 -0
  373. package/dist/utility/componentNames.js +12 -1
  374. package/dist/utility/componentNames.js.map +1 -1
  375. package/dist/utility/environment/environmentManager.js +3 -6
  376. package/dist/utility/environment/environmentManager.js.map +1 -1
  377. package/dist/utility/environment/systemInformation.d.ts +1 -0
  378. package/dist/utility/environment/systemInformation.js +1 -0
  379. package/dist/utility/environment/systemInformation.js.map +1 -1
  380. package/dist/utility/errors/commonErrors.d.ts +2 -0
  381. package/dist/utility/errors/commonErrors.js +2 -0
  382. package/dist/utility/errors/commonErrors.js.map +1 -1
  383. package/dist/utility/errors/hdbError.d.ts +17 -0
  384. package/dist/utility/errors/hdbError.js +30 -1
  385. package/dist/utility/errors/hdbError.js.map +1 -1
  386. package/dist/utility/globalSchema.d.ts +18 -0
  387. package/dist/utility/hdbTerms.d.ts +16 -0
  388. package/dist/utility/hdbTerms.js +18 -2
  389. package/dist/utility/hdbTerms.js.map +1 -1
  390. package/dist/utility/logging/harper_logger.d.ts +2 -0
  391. package/dist/utility/logging/harper_logger.js +91 -14
  392. package/dist/utility/logging/harper_logger.js.map +1 -1
  393. package/dist/utility/logging/logRotator.js +76 -49
  394. package/dist/utility/logging/logRotator.js.map +1 -1
  395. package/dist/utility/nodeIdentity.d.ts +9 -0
  396. package/dist/utility/nodeIdentity.js +58 -0
  397. package/dist/utility/nodeIdentity.js.map +1 -0
  398. package/dist/utility/npmUtilities.js +9 -7
  399. package/dist/utility/npmUtilities.js.map +1 -1
  400. package/dist/utility/operationPermissions.d.ts +3 -1
  401. package/dist/utility/operationPermissions.js +16 -1
  402. package/dist/utility/operationPermissions.js.map +1 -1
  403. package/dist/utility/operation_authorization.d.ts +10 -7
  404. package/dist/utility/operation_authorization.js +212 -41
  405. package/dist/utility/operation_authorization.js.map +1 -1
  406. package/dist/utility/watchPath.d.ts +29 -0
  407. package/dist/utility/watchPath.js +68 -0
  408. package/dist/utility/watchPath.js.map +1 -0
  409. package/dist/utility/watcherFallback.d.ts +86 -0
  410. package/dist/utility/watcherFallback.js +278 -1
  411. package/dist/utility/watcherFallback.js.map +1 -1
  412. package/dist/validation/configValidator.d.ts +12 -0
  413. package/dist/validation/configValidator.js +199 -72
  414. package/dist/validation/configValidator.js.map +1 -1
  415. package/dist/validation/installValidator.js +12 -0
  416. package/dist/validation/installValidator.js.map +1 -1
  417. package/dist/validation/validationWrapper.d.ts +11 -0
  418. package/dist/validation/validationWrapper.js +16 -3
  419. package/dist/validation/validationWrapper.js.map +1 -1
  420. package/index.ts +2 -0
  421. package/json/systemSchema.json +52 -0
  422. package/npm-shrinkwrap.json +196 -194
  423. package/package.json +7 -6
  424. package/resources/DESIGN.md +114 -52
  425. package/resources/DatabaseTransaction.ts +521 -43
  426. package/resources/LMDBTransaction.ts +26 -4
  427. package/resources/PrimaryRocksDatabase.ts +28 -1
  428. package/resources/RecordEncoder.ts +103 -8
  429. package/resources/RequestTarget.ts +2 -0
  430. package/resources/Resource.ts +17 -9
  431. package/resources/ResourceInterface.ts +23 -0
  432. package/resources/RocksIndexStore.ts +30 -9
  433. package/resources/RocksTransactionLogStore.ts +78 -21
  434. package/resources/Table.ts +1110 -159
  435. package/resources/auditStore.ts +331 -73
  436. package/resources/blob.ts +1029 -110
  437. package/resources/branchDatabase.ts +941 -0
  438. package/resources/crdt.ts +76 -12
  439. package/resources/databases.ts +1310 -252
  440. package/resources/defineTable.ts +18 -2
  441. package/resources/graphql.ts +70 -16
  442. package/resources/indexes/HierarchicalNavigableSmallWorld.ts +6 -2
  443. package/resources/longLivedTransactions.ts +360 -0
  444. package/resources/models/backendRegistry.ts +84 -2
  445. package/resources/models/bootstrap.ts +473 -28
  446. package/resources/recordLock.ts +253 -0
  447. package/resources/replayLogs.ts +147 -26
  448. package/resources/replayLogsGuards.ts +171 -8
  449. package/resources/search.ts +154 -7
  450. package/resources/transactionBroadcast.ts +3 -3
  451. package/security/auth.ts +68 -29
  452. package/security/authn/oidc/claims.ts +72 -0
  453. package/security/authn/oidc/identityToken.ts +129 -0
  454. package/security/authn/oidc/jwks.ts +260 -0
  455. package/security/authn/oidc/providers/generic.ts +40 -0
  456. package/security/authn/oidc/providers/githubActions.ts +137 -0
  457. package/security/authn/oidc/providers/index.ts +52 -0
  458. package/security/authn/oidc/tokenExchange.ts +300 -0
  459. package/security/authn/oidc/trustPolicyOperations.ts +343 -0
  460. package/security/authn/oidc/types.ts +41 -0
  461. package/security/certificateVerification/index.ts +54 -13
  462. package/security/certificateVerification/trustedIssuers.ts +76 -0
  463. package/security/certificateVerification/types.ts +1 -0
  464. package/security/credentialProvenance.ts +47 -0
  465. package/security/credentialRejection.ts +22 -0
  466. package/security/deferredAuthentication.ts +71 -0
  467. package/security/impersonation.ts +117 -12
  468. package/security/jsLoader.ts +81 -18
  469. package/security/keys.ts +298 -72
  470. package/security/operationScope.ts +33 -0
  471. package/security/permissionsTranslator.js +23 -0
  472. package/security/tokenAuthentication.ts +233 -12
  473. package/security/user.ts +4 -3
  474. package/server/DESIGN.md +183 -16
  475. package/server/DurableSubscriptionsSession.ts +71 -11
  476. package/server/REST.ts +79 -1
  477. package/server/graphqlQuerying.ts +4 -0
  478. package/server/http.ts +99 -18
  479. package/server/itc/serverHandlers.js +8 -1
  480. package/server/jobs/jobProcess.ts +8 -2
  481. package/server/jobs/jobs.ts +4 -1
  482. package/server/liveSubscriptionAuth.ts +129 -46
  483. package/server/loadRootComponents.js +50 -8
  484. package/server/mqtt.ts +179 -38
  485. package/server/nodeName.ts +103 -21
  486. package/server/serverHelpers/Headers.ts +131 -0
  487. package/server/serverHelpers/contentTypes.ts +29 -21
  488. package/server/serverHelpers/deployValidationState.ts +24 -13
  489. package/server/serverHelpers/operationAuthorizationState.ts +34 -3
  490. package/server/serverHelpers/registeredOperations.ts +79 -22
  491. package/server/serverHelpers/requestSanitization.ts +15 -0
  492. package/server/serverHelpers/serverHandlers.js +6 -3
  493. package/server/serverHelpers/serverUtilities.ts +104 -31
  494. package/server/serverHelpers/sharedMessageEncoding.ts +307 -0
  495. package/server/serverHelpers/uwsServer.ts +17 -2
  496. package/server/static.ts +23 -29
  497. package/server/storageReclamation.ts +23 -0
  498. package/server/threads/itc.js +11 -1
  499. package/server/threads/manageThreads.js +526 -56
  500. package/server/threads/socketRouter.ts +81 -26
  501. package/server/threads/threadHeapMemory.ts +26 -0
  502. package/server/threads/threadServer.js +43 -15
  503. package/sqlTranslator/index.ts +31 -8
  504. package/studio/web/assets/Chat-BnCBegQz.js +2267 -0
  505. package/studio/web/assets/FloatingChat-CoDW1ySS.js +23 -0
  506. package/studio/web/assets/{abnfDiagram-VCTEODGH-C0_BAZyO.js → abnfDiagram-VCTEODGH-B0BebmD2.js} +1 -1
  507. package/studio/web/assets/{alertDialog-DIHt7Z0r.js → alertDialog-CQyAJJhl.js} +1 -1
  508. package/studio/web/assets/{apiToken-c3Rd-w6g.js → apiToken-Bwk5BLXW.js} +1 -1
  509. package/studio/web/assets/applications-DHxGi7JH.js +296 -0
  510. package/studio/web/assets/architecture-7GRP2DOG-LB-MLAAb.js +1 -0
  511. package/studio/web/assets/{architectureDiagram-5GKGNRK7-BWzrASgm.js → architectureDiagram-5GKGNRK7-7SW3GD-K.js} +1 -1
  512. package/studio/web/assets/authStore-C3Nfubqr.js +3 -0
  513. package/studio/web/assets/{blockDiagram-NRAW4CY4-BdJX9Khj.js → blockDiagram-I7D4REHJ-BqguiadH.js} +2 -2
  514. package/studio/web/assets/{button-DhiX-njv.js → button-BIsUKRZq.js} +2 -2
  515. package/studio/web/assets/{c4Diagram-UCG6FXSJ-CI6MzGmQ.js → c4Diagram-7LVT6UL2-LBNf8t_X.js} +1 -1
  516. package/studio/web/assets/channel-yictG-U-.js +1 -0
  517. package/studio/web/assets/{chevron-up-Df2c8uoU.js → chevron-up-DtKGqDn3.js} +1 -1
  518. package/studio/web/assets/{chunk-TEH6E4GO-P87k5mNi.js → chunk-4HAMMTFA-DWtTut21.js} +1 -1
  519. package/studio/web/assets/{chunk-75Z2AOVW-BT8tVmks.js → chunk-75Z2AOVW-QGQD6th2.js} +1 -1
  520. package/studio/web/assets/{chunk-DU6HZSFF-9kAOOmI6.js → chunk-DU6HZSFF-Chq20Ba5.js} +1 -1
  521. package/studio/web/assets/{chunk-F27PBJKO-BW7ao8AY.js → chunk-F27PBJKO-BVA5EPhV.js} +1 -1
  522. package/studio/web/assets/{chunk-GMAD6QVW-BNyXpoQO.js → chunk-GMAD6QVW-BeS7S07A.js} +1 -1
  523. package/studio/web/assets/{chunk-OBVCFTLP-D4wWOqDQ.js → chunk-GVQU2GXP-sbwVIQ8i.js} +1 -1
  524. package/studio/web/assets/{chunk-G27WJ6UU-COyLMcgK.js → chunk-IMKFNOWR-Bnh3tAVd.js} +1 -1
  525. package/studio/web/assets/{chunk-JQ64N6SF-Cyz1IeLf.js → chunk-L3NEJ4N5-COfUyKII.js} +1 -1
  526. package/studio/web/assets/chunk-OSK3NFVY-ByciRftO.js +10 -0
  527. package/studio/web/assets/{chunk-P2QGCYS3-DmIFY4d7.js → chunk-P2QGCYS3-CP1VhG_c.js} +1 -1
  528. package/studio/web/assets/{chunk-POPQ4Y6H-BPrvMyKz.js → chunk-POPQ4Y6H-ClWhhkwW.js} +1 -1
  529. package/studio/web/assets/{chunk-PWAF6VOD-2zB6IW9i.js → chunk-PWAF6VOD-1z1THyS5.js} +1 -1
  530. package/studio/web/assets/{chunk-RHFEMEQ7-2FgyI8YU.js → chunk-SHT3W25Y-LpQkMsah.js} +2 -2
  531. package/studio/web/assets/{chunk-SVP7TREG-FwtbH2QC.js → chunk-SVP7TREG-jtdAHw0S.js} +1 -1
  532. package/studio/web/assets/{chunk-LCL6LL3I-HOzK_ppE.js → chunk-TICWLB2K-VOwzetX-.js} +1 -1
  533. package/studio/web/assets/classDiagram-ZZMXUADV-VaEwSy_g.js +1 -0
  534. package/studio/web/assets/classDiagram-v2-VYDZK3BY-VaEwSy_g.js +1 -0
  535. package/studio/web/assets/{createLucideIcon-BKGPfjm2.js → createLucideIcon-CzW9508A.js} +1 -1
  536. package/studio/web/assets/{cssMode-CEN2mzSA.js → cssMode-s0cWI-_M.js} +1 -1
  537. package/studio/web/assets/{cynefin-OW5HDTMX-BRkpLFQV.js → cynefin-OW5HDTMX-BbdbCvub.js} +1 -1
  538. package/studio/web/assets/{cynefinDiagram-5FMLGOSQ-CHT1DaX6.js → cynefinDiagram-5FMLGOSQ-TP-aIqbt.js} +1 -1
  539. package/studio/web/assets/{dagre-3AP2YEHR-DpUXBh63.js → dagre-GXQ25YYZ-DShnGpGo.js} +1 -1
  540. package/studio/web/assets/{diagram-S7CK7UJ4-BuymVFZT.js → diagram-S7CK7UJ4-aoCVTtcy.js} +1 -1
  541. package/studio/web/assets/{diagram-UQ7AKVKN-CyP148RM.js → diagram-UQ7AKVKN-DglXtQ6x.js} +1 -1
  542. package/studio/web/assets/{diagram-VSXAHHWV-CoCAg3M9.js → diagram-VSXAHHWV-fhEdmkwM.js} +1 -1
  543. package/studio/web/assets/{diagram-VX7I27RA-BpOqCFca.js → diagram-VX7I27RA-DccVJet6.js} +1 -1
  544. package/studio/web/assets/{diagram-Z3DM3KII-Bfpw7Vbj.js → diagram-Z3DM3KII-D-RyJJb7.js} +1 -1
  545. package/studio/web/assets/{dialog-CBf0Mr1d.js → dialog-Cn2uWgD4.js} +1 -1
  546. package/studio/web/assets/{dist-lkA3O3eM.js → dist-DP8UjMB_.js} +1 -1
  547. package/studio/web/assets/{download-BtTOBem-.js → download-B5T5r7ss.js} +1 -1
  548. package/studio/web/assets/{ebnfDiagram-PWID7BFC-DS_6aWqL.js → ebnfDiagram-PWID7BFC-DJGpIpz_.js} +1 -1
  549. package/studio/web/assets/{editor-D8oDeCTL.js → editor-DNcRHK54.js} +1 -1
  550. package/studio/web/assets/{erDiagram-SSCWMZ5O-DJNk6Fgw.js → erDiagram-RLTQ6QDP-CIfNlgkC.js} +1 -1
  551. package/studio/web/assets/eventmodeling-NTZA5JFV-CLxnp2CR.js +1 -0
  552. package/studio/web/assets/flowDiagram-HODETNUW-BIbhmz9f.js +1 -0
  553. package/studio/web/assets/{ganttDiagram-EL5Y4UJY-2pOExxMY.js → ganttDiagram-EL5Y4UJY-BxToTzzD.js} +1 -1
  554. package/studio/web/assets/{getAnalytics-D4LKGeVy.js → getAnalytics-GHK8ORfM.js} +1 -1
  555. package/studio/web/assets/{gitGraph-4MIJSDKK-CH5ZxwzF.js → gitGraph-4MIJSDKK-D2s2w8lE.js} +1 -1
  556. package/studio/web/assets/{gitGraphDiagram-WWUBYQGX-DVIsIhbO.js → gitGraphDiagram-WWUBYQGX-Dwntd4-x.js} +1 -1
  557. package/studio/web/assets/{html-u3vOg7LJ.js → html-Bdssedlg.js} +1 -1
  558. package/studio/web/assets/{htmlMode-DyO31v-P.js → htmlMode-CoDlJ3fw.js} +1 -1
  559. package/studio/web/assets/{index-Cxj2_wsl.css → index-7RMEgVG1.css} +1 -1
  560. package/studio/web/assets/index-D6sxmFLR.js +824 -0
  561. package/studio/web/assets/index.lazy-tmU5BS8s.js +2 -0
  562. package/studio/web/assets/{info-A6RAGUB7-CPQfTnaG.js → info-A6RAGUB7-DYjkvb0C.js} +1 -1
  563. package/studio/web/assets/{infoDiagram-RXCK75RN-DlwLYlwm.js → infoDiagram-27XIBGKW-Bnp1FJE5.js} +1 -1
  564. package/studio/web/assets/{ishikawaDiagram-5VMMS53U-BRXRp29U.js → ishikawaDiagram-5VMMS53U-D9Xh2r6X.js} +1 -1
  565. package/studio/web/assets/{javascript-CUvxOyTC.js → javascript-B8meVSTH.js} +1 -1
  566. package/studio/web/assets/{journeyDiagram-EYS64GPL-B0ou8k0n.js → journeyDiagram-3NMN7TZE-CokIi6ll.js} +2 -2
  567. package/studio/web/assets/{jsonMode-f_IwbF3D.js → jsonMode-DpIPd35T.js} +1 -1
  568. package/studio/web/assets/{kanban-definition-3QL26DDD-uYg7iYzp.js → kanban-definition-UXKFOSKX-CukSFJfX.js} +1 -1
  569. package/studio/web/assets/{languageServices-DXtZ6rEF.js → languageServices-C_5FMJzQ.js} +1 -1
  570. package/studio/web/assets/{lspLanguageFeatures-B4pCF1zO.js → lspLanguageFeatures-BIzNBzPK.js} +1 -1
  571. package/studio/web/assets/{mermaid-parser.core-Ck-fC8b7.js → mermaid-parser.core-BlEsOWNO.js} +3 -3
  572. package/studio/web/assets/{mermaid.core-CP8aNNYm.js → mermaid.core-BlkGaMIH.js} +5 -5
  573. package/studio/web/assets/{mindmap-definition-FBJOCRG2-CgTZ-rit.js → mindmap-definition-YA3MSWOX-IprMc_0j.js} +1 -1
  574. package/studio/web/assets/{notifications-D3tIQ4sg.js → notifications-CQf18QKb.js} +1 -1
  575. package/studio/web/assets/notifications-CvZivSbh.js +1 -0
  576. package/studio/web/assets/{packet-AYTQ26CC-DEyoPtPb.js → packet-AYTQ26CC-Bi3V04Zi.js} +1 -1
  577. package/studio/web/assets/{pegDiagram-XKGWAZYB-DrD-7sD9.js → pegDiagram-XKGWAZYB-BNuPDLZY.js} +1 -1
  578. package/studio/web/assets/{pie-WAS4IAKB-wjj-EI1d.js → pie-WAS4IAKB-_6DoDbng.js} +1 -1
  579. package/studio/web/assets/{pieDiagram-E7YTZNPT-GntqDCzv.js → pieDiagram-E7YTZNPT-DqNb6Ht2.js} +1 -1
  580. package/studio/web/assets/{profile-DZWU7MgT.js → profile-DdOwtntb.js} +1 -1
  581. package/studio/web/assets/{quadrantDiagram-AXDQQJYC-0UeqXQGd.js → quadrantDiagram-AXDQQJYC-BGH9E2YR.js} +1 -1
  582. package/studio/web/assets/{radar-RG4KPBEZ-DFSA5h7k.js → radar-RG4KPBEZ-DDdVczcL.js} +1 -1
  583. package/studio/web/assets/{railroad-74A4TZTK-CaOUG9wR.js → railroad-74A4TZTK-BJUP4Jds.js} +1 -1
  584. package/studio/web/assets/railroad-abnf-HS5TGJTU-Bm3L1L0h.js +1 -0
  585. package/studio/web/assets/railroad-ebnf-LZEXJU2U-CKzLGlkw.js +1 -0
  586. package/studio/web/assets/railroad-peg-WCYAUIDC-S8xLjslx.js +1 -0
  587. package/studio/web/assets/{railroadDiagram-O6MQD6OU-yHUELZaV.js → railroadDiagram-O6MQD6OU-DGTPh2KZ.js} +1 -1
  588. package/studio/web/assets/{regions-CkyurXzE.js → regions-n69fwagr.js} +1 -1
  589. package/studio/web/assets/{register-BUyhWjBO.js → register-PfWTCXWB.js} +3 -3
  590. package/studio/web/assets/{requirementDiagram-EFPCY7ZU-DNEGFjuW.js → requirementDiagram-BXWQKSXE-BJnO6uLz.js} +1 -1
  591. package/studio/web/assets/{sankeyDiagram-P5KCCOFB-DpyAmSVR.js → sankeyDiagram-P5KCCOFB-0vSOdymH.js} +1 -1
  592. package/studio/web/assets/{sequenceDiagram-WJ2MYXX4-TyaT7xNk.js → sequenceDiagram-WJ2MYXX4-hETizDWE.js} +1 -1
  593. package/studio/web/assets/{setComponentFile-CeyKSZAa.js → setComponentFile-Bg6O7X0S.js} +1 -1
  594. package/studio/web/assets/{setup-D2kn7cAA.js → setup-CUx_aUDl.js} +2 -2
  595. package/studio/web/assets/{stateDiagram-HBIQ2CUA-CeEdTArZ.js → stateDiagram-D77RDMKH-CdYQ_KtC.js} +1 -1
  596. package/studio/web/assets/stateDiagram-v2-MP3YSRHH-CdKuzQMT.js +1 -0
  597. package/studio/web/assets/status-D7BVKqX9.js +61 -0
  598. package/studio/web/assets/{swimlanes-XN3QIQJK-B54FmF46.js → swimlanes-42K2YHIH-B8cHIpU4.js} +1 -1
  599. package/studio/web/assets/swimlanesDiagram-VR7AAH4N-DmOSJwaH.js +8 -0
  600. package/studio/web/assets/{tabs-B_G5zscN.js → tabs-BrHu7gJi.js} +1 -1
  601. package/studio/web/assets/{timeline-definition-24CTP7MA-D-a9ujbo.js → timeline-definition-24CTP7MA-BJWYSXqF.js} +1 -1
  602. package/studio/web/assets/{toggleHighContrast-C0UW6rI2.js → toggleHighContrast-DBSyXzMr.js} +1 -1
  603. package/studio/web/assets/{treeView-Q6P3EWNA-CrW_6JnS.js → treeView-Q6P3EWNA-qxe_v6CQ.js} +1 -1
  604. package/studio/web/assets/{treemap-WGGIJYW6-BxyYLdP_.js → treemap-WGGIJYW6-dDo97XXF.js} +1 -1
  605. package/studio/web/assets/{tsMode-DBC0zmDx.js → tsMode-BByKCjBS.js} +1 -1
  606. package/studio/web/assets/{typescript-DApRQir3.js → typescript-DDLnLpw9.js} +1 -1
  607. package/studio/web/assets/{useEntityRestURL-DB6JStU1.js → useEntityRestURL-31CHGaHk.js} +1 -1
  608. package/studio/web/assets/{useLocalStorage-Dtj1QS8_.js → useLocalStorage-BqMR3D8_.js} +1 -1
  609. package/studio/web/assets/vendor-core-c2JRRJpV.js +58 -0
  610. package/studio/web/assets/vendor-datadog-CLUcJXOo.js +6 -0
  611. package/studio/web/assets/{vendor-react-Dyj4O3HE.js → vendor-react-CJV_K1u4.js} +1 -1
  612. package/studio/web/assets/vendor-tanstack-DxzraizX.js +1 -0
  613. package/studio/web/assets/{vendor-ui-vhu-UHhF.js → vendor-ui-BUjK0h8a.js} +2 -2
  614. package/studio/web/assets/{vennDiagram-4TSXK5OY-Cy7s7Mpy.js → vennDiagram-4TSXK5OY-A3i-lCdl.js} +1 -1
  615. package/studio/web/assets/{wardley-WFR3VGLG-BeBL35g2.js → wardley-WFR3VGLG-B0ik-_6g.js} +1 -1
  616. package/studio/web/assets/{wardleyDiagram-VM6X3IG4-BylmIGSg.js → wardleyDiagram-VM6X3IG4-CjrkKWUR.js} +1 -1
  617. package/studio/web/assets/{workers-C0bFIedw.js → workers-pR3jRY9D.js} +1 -1
  618. package/studio/web/assets/x-DIzaLEdK.js +1 -0
  619. package/studio/web/assets/{xml-HWd01lU-.js → xml-2iRnMhQO.js} +1 -1
  620. package/studio/web/assets/{xychartDiagram-S5SC5T6Z-CoKALMXr.js → xychartDiagram-S5SC5T6Z-Biok4GYV.js} +1 -1
  621. package/studio/web/assets/{yaml-CIH0Nt-h.js → yaml-Bf92gJpd.js} +1 -1
  622. package/studio/web/index.html +14 -14
  623. package/upgrade/directives/5-3-0.ts +132 -0
  624. package/upgrade/directives/directivesController.ts +2 -1
  625. package/utility/OperationFunctionCaller.ts +2 -1
  626. package/utility/common_utils.ts +30 -5
  627. package/utility/componentNames.ts +12 -0
  628. package/utility/environment/environmentManager.ts +3 -7
  629. package/utility/environment/systemInformation.ts +7 -0
  630. package/utility/errors/commonErrors.ts +4 -0
  631. package/utility/errors/hdbError.ts +29 -0
  632. package/utility/hdbTerms.ts +17 -0
  633. package/utility/logging/harper_logger.ts +87 -14
  634. package/utility/logging/logRotator.ts +72 -45
  635. package/utility/nodeIdentity.ts +45 -0
  636. package/utility/npmUtilities.ts +10 -8
  637. package/utility/operationPermissions.ts +18 -1
  638. package/utility/operation_authorization.ts +231 -42
  639. package/utility/watchPath.ts +63 -0
  640. package/utility/watcherFallback.ts +270 -0
  641. package/validation/configValidator.ts +209 -72
  642. package/validation/installValidator.ts +15 -0
  643. package/validation/validationWrapper.ts +18 -4
  644. package/studio/web/assets/Chat-JpO8EtUu.js +0 -2067
  645. package/studio/web/assets/FloatingChat-Bcj3xSZu.js +0 -23
  646. package/studio/web/assets/applications-ByqLRKyZ.js +0 -296
  647. package/studio/web/assets/architecture-7GRP2DOG-DNdx5tEU.js +0 -1
  648. package/studio/web/assets/authStore-qKmCZcaf.js +0 -3
  649. package/studio/web/assets/channel-DtCV8PTL.js +0 -1
  650. package/studio/web/assets/chunk-R7TYR2AO-Irip67yr.js +0 -10
  651. package/studio/web/assets/classDiagram-DTDB5LWJ-DbO_dCNE.js +0 -1
  652. package/studio/web/assets/classDiagram-v2-JRS7N3AN-DbO_dCNE.js +0 -1
  653. package/studio/web/assets/eventmodeling-NTZA5JFV-5jbe4A5P.js +0 -1
  654. package/studio/web/assets/flowDiagram-A5DVABFB-Dp9Ezlow.js +0 -1
  655. package/studio/web/assets/index-aSt5tY-L.js +0 -824
  656. package/studio/web/assets/index.lazy-B9jiPwT8.js +0 -2
  657. package/studio/web/assets/notifications-CUoYgU98.js +0 -1
  658. package/studio/web/assets/railroad-abnf-HS5TGJTU-Bc0Qi0WH.js +0 -1
  659. package/studio/web/assets/railroad-ebnf-LZEXJU2U-G8rVVZ2C.js +0 -1
  660. package/studio/web/assets/railroad-peg-WCYAUIDC-CrehKBhC.js +0 -1
  661. package/studio/web/assets/stateDiagram-v2-4QOOHH4V-D4tuw9Su.js +0 -1
  662. package/studio/web/assets/status-D7Xn5ePA.js +0 -61
  663. package/studio/web/assets/swimlanesDiagram-VK2B7HYN-XOhmNEvq.js +0 -8
  664. package/studio/web/assets/vendor-core-RCcadM3e.js +0 -73
  665. package/studio/web/assets/vendor-datadog-BRv-mOv1.js +0 -6
  666. package/studio/web/assets/vendor-tanstack-BiFWSB3W.js +0 -1
  667. package/studio/web/assets/x-B9o9hsep.js +0 -1
  668. /package/studio/web/assets/{sizeCapture-X5ZJPWSS-B0uUizjq.js → sizeCapture-INFHLROL-B0uUizjq.js} +0 -0
@@ -12,8 +12,15 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
12
12
  };
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
14
  exports.bootstrapModels = bootstrapModels;
15
+ exports.resetModelsProjection = resetModelsProjection;
16
+ exports.applyModelsConfig = applyModelsConfig;
17
+ exports.startModelsConfigHotReload = startModelsConfigHotReload;
18
+ exports.stopModelsConfigHotReload = stopModelsConfigHotReload;
15
19
  /**
16
- * YAML→registry boot bridge (#629 / #630 of #510).
20
+ * YAML→registry boot bridge (#629 / #630 of #510), plus hot reload of the
21
+ * `models` block when the root config file changes (#2344) — so an
22
+ * orchestrator can rotate a credential or re-point a baseUrl by rewriting
23
+ * harperdb-config.yaml, without a process restart.
17
24
  *
18
25
  * Reads the top-level `models` block from the root config and dispatches each
19
26
  * `models.embedding.<name>` / `models.generative.<name>` entry to the matching
@@ -36,7 +43,8 @@ exports.bootstrapModels = bootstrapModels;
36
43
  * convention from `@harperfast/oauth`'s config loader.
37
44
  *
38
45
  * Errors per entry are logged and skipped, not thrown — one misconfigured
39
- * backend should not block Harper boot.
46
+ * backend should not block Harper boot, and one bad entry in a rewritten file
47
+ * should not tear down the entries that were fine.
40
48
  */
41
49
  const harper_logger_ts_1 = __importDefault(require("../../utility/logging/harper_logger.js"));
42
50
  const expandEnvVar_ts_1 = require("../../utility/expandEnvVar.js");
@@ -49,6 +57,9 @@ const node_url_1 = require("node:url");
49
57
  const node_module_1 = require("node:module");
50
58
  const environmentManager_ts_1 = require("../../utility/environment/environmentManager.js");
51
59
  const routing_ts_1 = require("./routing.js");
60
+ const backendRegistry_ts_1 = require("./backendRegistry.js");
61
+ const RootConfigWatcher_ts_1 = require("../../config/RootConfigWatcher.js");
62
+ const configValidator_ts_1 = require("../../validation/configValidator.js");
52
63
  /**
53
64
  * Field names treated as credentials. When present in config as a literal
54
65
  * value (not a `${VAR}` placeholder), bootstrap warns the operator at boot
@@ -62,36 +73,112 @@ const FACTORIES = {
62
73
  anthropic: (args) => (0, index_ts_3.registerAnthropicBackend)({ ...args, config: args.config }),
63
74
  bedrock: (args) => (0, index_ts_4.registerBedrockBackend)({ ...args, config: args.config }),
64
75
  };
76
+ const installedSlots = new Map();
77
+ /**
78
+ * Let a config entry claim a name held by a projection-installed helper. The record is suppressed
79
+ * rather than deleted, so removing the claiming entry later restores the helper — the live
80
+ * registry then matches a restart with the same final config.
81
+ */
82
+ function claimHelperOccupant(kind, logicalName) {
83
+ for (const slot of installedSlots.values()) {
84
+ const extra = slot.extras?.find((e) => !e.suppressed && e.kind === kind && e.logicalName === logicalName);
85
+ if (extra) {
86
+ extra.suppressed = true;
87
+ return extra.backend;
88
+ }
89
+ }
90
+ return undefined;
91
+ }
92
+ /** Restore a suppressed helper once the entry that claimed its name is removed. */
93
+ function restoreSuppressedHelper(kind, logicalName) {
94
+ for (const slot of installedSlots.values()) {
95
+ const extra = slot.extras?.find((e) => e.suppressed && e.kind === kind && e.logicalName === logicalName);
96
+ if (extra && (0, backendRegistry_ts_1.replaceIfCurrent)(extra.kind, extra.logicalName, undefined, extra.backend)) {
97
+ extra.suppressed = false;
98
+ return;
99
+ }
100
+ }
101
+ }
102
+ const slotKey = (kind, logicalName) => `${kind} ${logicalName}`;
65
103
  /**
66
104
  * Populate the model registry from `rootConfig.models`. No-op if the block
67
105
  * is absent or empty. Idempotent within a process: each entry overwrites any
68
- * prior registration under the same logical name (registry uses `.set()`).
106
+ * prior registration under the same logical name.
69
107
  */
70
108
  async function bootstrapModels(rootConfig) {
71
- // Rebuild fallback groups from scratch each (re)load so a removed/changed `fallback:`
72
- // (or a removed `models:` block) doesn't leave stale routing behind (#1326).
73
- (0, routing_ts_1.clearFallbackGroups)();
74
- const block = rootConfig?.models;
75
- if (!block)
76
- return;
77
- await registerKind('embedding', block.embedding);
78
- await registerKind('generative', block.generative);
109
+ // The projection is NOT reset here: boot rides the same serialized queue as a reload, so a
110
+ // re-bootstrap in a long-lived process removes entries the new config dropped, keeps retained
111
+ // state (a malformed entry's routing), and cannot corrupt an in-flight apply's swaps.
112
+ return queueModelsApply(rootConfig?.models, true);
79
113
  }
80
- function warnOnLiteralCredentials(kind, logicalName, entry) {
81
- for (const field of CREDENTIAL_FIELDS) {
82
- const value = entry[field];
83
- if (typeof value !== 'string' || value.length === 0)
84
- continue;
85
- if ((0, expandEnvVar_ts_1.isUnresolvedEnvVarPlaceholder)(value))
86
- continue; // operator is using ${VAR} indirection
87
- harper_logger_ts_1.default.warn(`models.${kind}.${logicalName}: '${field}' is a literal value in harperdb-config.yaml; ` +
88
- `prefer \${ENV_VAR} indirection for credentials to keep them off disk`);
114
+ /** Forget everything the projection installed. Test isolation only — never part of a reload. */
115
+ function resetModelsProjection() {
116
+ installedSlots.clear();
117
+ }
118
+ /**
119
+ * Apply a `models:` block as a hot reload: changed entries are rebuilt through the same factories
120
+ * boot uses and swapped in atomically, removed entries stop serving, and programmatic
121
+ * registrations that overrode a config entry are left in place. Serialized and coalesced —
122
+ * concurrent calls settle on the latest block.
123
+ */
124
+ function applyModelsConfig(models) {
125
+ return queueModelsApply(models, false);
126
+ }
127
+ // Interleaved applies could install an older credential last; serialized + coalesced, they cannot.
128
+ // Boot and reload coalesce SEPARATELY: merging them either loses boot's overwrite contract or
129
+ // launders a raw watcher block through boot semantics, past reload validation and the missing-key
130
+ // no-op. Boot drains first; the newest reload then refines it under its own rules.
131
+ let pendingBoot;
132
+ let pendingReload;
133
+ let applyChain;
134
+ function queueModelsApply(block, isBoot) {
135
+ if (isBoot) {
136
+ pendingBoot = { block: block ?? undefined };
137
+ // A boot supersedes any reload queued before it — draining that older snapshot after the
138
+ // newer boot would refine it backwards. A reload queued after the boot still refines. The
139
+ // same applies one layer down: a watcher snapshot OBSERVED before this boot whose settle
140
+ // timer has not fired yet is also pre-boot content — boot read the same file, so dropping
141
+ // the timer loses nothing newer.
142
+ pendingReload = undefined;
143
+ clearTimeout(pendingSettle);
144
+ pendingSettle = undefined;
145
+ }
146
+ else {
147
+ pendingReload = { block };
89
148
  }
149
+ applyChain ??= (async () => {
150
+ try {
151
+ while (pendingBoot || pendingReload) {
152
+ const isBootTurn = pendingBoot !== undefined;
153
+ const next = isBootTurn ? pendingBoot : pendingReload;
154
+ if (isBootTurn)
155
+ pendingBoot = undefined;
156
+ else
157
+ pendingReload = undefined;
158
+ try {
159
+ await applyModels(next.block, isBootTurn);
160
+ }
161
+ catch (err) {
162
+ // Per-entry failures are handled inside applyModels; this catches a failure of the apply
163
+ // itself. The chain must not reject — the watcher calls fire-and-forget, so a rejection
164
+ // would be unhandled — and the loop continues so a newer pending snapshot still applies.
165
+ harper_logger_ts_1.default.error(`models: config apply failed (${err?.message ?? err})`);
166
+ }
167
+ }
168
+ }
169
+ finally {
170
+ applyChain = undefined;
171
+ }
172
+ })();
173
+ return applyChain;
90
174
  }
91
- async function registerKind(kind, entries) {
175
+ function collectKind(kind, entries, out, present) {
92
176
  if (!entries)
93
177
  return;
94
178
  for (const [logicalName, entry] of Object.entries(entries)) {
179
+ // Present even when invalid: a malformed entry keeps its previously applied backend (like a
180
+ // failed rebuild does) rather than reading as removed. Only true absence removes.
181
+ present.add(slotKey(kind, logicalName));
95
182
  if (!entry || typeof entry !== 'object') {
96
183
  // Schema validation (configValidator.ts) catches this before bootstrap
97
184
  // runs, so reaching here means config was loaded by an unusual path
@@ -103,6 +190,117 @@ async function registerKind(kind, entries) {
103
190
  harper_logger_ts_1.default.error(`models.${kind}.${logicalName}: 'backend' must be a non-empty string; skipping`);
104
191
  continue;
105
192
  }
193
+ out.push({ kind, logicalName, entry, entryJson: JSON.stringify(entry) });
194
+ }
195
+ }
196
+ function publishEntry(desiredEntry, backend, extras, isBoot) {
197
+ const { kind, logicalName, entry, entryJson } = desiredEntry;
198
+ const key = slotKey(kind, logicalName);
199
+ // Boot overwrites occupants (the documented contract); a reload replaces only what this
200
+ // projection installed — or a helper the projection installed under this name, which a config
201
+ // entry outranks — so genuine application overrides survive.
202
+ const previous = installedSlots.get(key);
203
+ let expected = isBoot ? (0, backendRegistry_ts_1.getBackend)(kind, logicalName) : previous?.backend;
204
+ // Claimed at boot too, or the parent record keeps an installable claim on a name it lost.
205
+ const claimedHelper = claimHelperOccupant(kind, logicalName);
206
+ if (!isBoot && expected === undefined && claimedHelper !== undefined)
207
+ expected = claimedHelper;
208
+ // Helpers rotate and retire with their entry even when the primary swap is lost to an
209
+ // override — a frozen helper would keep serving a revoked credential.
210
+ const installedExtras = [];
211
+ for (const extra of extras) {
212
+ const extraExpected = isBoot
213
+ ? (0, backendRegistry_ts_1.getBackend)(extra.kind, extra.logicalName)
214
+ : previous?.extras?.find((e) => e.kind === extra.kind && e.logicalName === extra.logicalName)?.backend;
215
+ if ((0, backendRegistry_ts_1.replaceIfCurrent)(extra.kind, extra.logicalName, extraExpected, extra.backend)) {
216
+ installedExtras.push(extra);
217
+ }
218
+ else {
219
+ harper_logger_ts_1.default.warn(`models.${kind}.${logicalName}: helper '${extra.logicalName}' is owned by another registration; leaving it in place`);
220
+ }
221
+ }
222
+ for (const old of previous?.extras ?? []) {
223
+ if (old.suppressed)
224
+ continue;
225
+ if (!extras.some((e) => e.kind === old.kind && e.logicalName === old.logicalName)) {
226
+ (0, backendRegistry_ts_1.removeIfCurrent)(old.kind, old.logicalName, old.backend);
227
+ }
228
+ }
229
+ const builtin = Boolean(FACTORIES[entry.backend]);
230
+ if ((0, backendRegistry_ts_1.replaceIfCurrent)(kind, logicalName, expected, backend)) {
231
+ installedSlots.set(key, {
232
+ kind,
233
+ logicalName,
234
+ backend,
235
+ entryJson,
236
+ builtin,
237
+ fallback: entry.fallback,
238
+ extras: installedExtras,
239
+ });
240
+ }
241
+ else {
242
+ // Record the ask with no installed instance, so unchanged reloads skip instead of
243
+ // re-losing this swap every apply; installed helpers stay recorded and removable.
244
+ installedSlots.set(key, {
245
+ kind,
246
+ logicalName,
247
+ entryJson,
248
+ builtin,
249
+ fallback: entry.fallback,
250
+ extras: installedExtras,
251
+ });
252
+ harper_logger_ts_1.default.warn(`models.${kind}.${logicalName}: another registration owns this entry; leaving it in place`);
253
+ }
254
+ }
255
+ async function applyModels(block, isBoot) {
256
+ if (!isBoot) {
257
+ if (block === undefined) {
258
+ // A snapshot with no `models` key is not evidence of intent: a non-atomic in-place rewrite
259
+ // can be observed as a valid YAML prefix that simply hasn't reached the block yet, and
260
+ // removing every backend on that would be catastrophic. Removal is expressed by an empty
261
+ // or shrunken block — `models: {}`. A bare `models:` key (null) is rejected by validation
262
+ // below, exactly as boot's validator rejects it, so reload cannot accept a file a restart
263
+ // would refuse.
264
+ harper_logger_ts_1.default.debug?.('models: watched config has no models block; projection left as-is');
265
+ return;
266
+ }
267
+ // Boot validates the composed config (configValidator); a reload must enforce the same
268
+ // schema, or a typo boot would reject hot-applies silently (e.g. a misspelled baseUrl
269
+ // falling back to the public endpoint).
270
+ const { error } = (0, configValidator_ts_1.validateModelsBlock)(block);
271
+ if (error) {
272
+ harper_logger_ts_1.default.error(`models: rejecting config reload (${error.message}); keeping the previous projection`);
273
+ return;
274
+ }
275
+ }
276
+ const desired = [];
277
+ const presentKeys = new Set();
278
+ collectKind('embedding', block?.embedding, desired, presentKeys);
279
+ collectKind('generative', block?.generative, desired, presentKeys);
280
+ const staged = new Map();
281
+ const failedKeys = new Set();
282
+ for (const desiredEntry of desired) {
283
+ const { kind, logicalName, entry, entryJson } = desiredEntry;
284
+ const key = slotKey(kind, logicalName);
285
+ const slot = installedSlots.get(key);
286
+ // Unchanged: skip while ANY occupant serves (rebuilding under an override would run the factory
287
+ // only to lose the swap). Boot is stricter — it must overwrite occupants, so it only skips when
288
+ // the projection's own instance is installed; an emptied registry rebuilds either way.
289
+ const installed = (0, backendRegistry_ts_1.getBackend)(kind, logicalName);
290
+ if (slot && slot.entryJson === entryJson && (isBoot ? installed === slot.backend : installed !== undefined))
291
+ continue;
292
+ // Reload runs factories for built-ins only: they are independent, pure constructors. A module
293
+ // factory may compose with other entries (wrap an earlier backend), which staged construction
294
+ // cannot honor — changing one needs a restart, exactly as before this feature. The guard covers
295
+ // the incoming backend AND a currently-installed module-backed slot: a module→built-in rewrite
296
+ // is still a change of a restart-managed entry, so it must not live-replace the module (which
297
+ // would drop its helpers with none of the disposal a restart performs).
298
+ if (!isBoot && (!FACTORIES[entry.backend] || slot?.builtin === false)) {
299
+ harper_logger_ts_1.default.warn(`models.${kind}.${logicalName}: module-backed entries require a restart to add or change; ` +
300
+ `keeping the previous projection for this entry`);
301
+ failedKeys.add(key);
302
+ continue;
303
+ }
106
304
  // Warn before expansion: literal credentials in `harperdb-config.yaml`
107
305
  // land on disk, in backups, and (depending on deployment) in replicated
108
306
  // config tables. The `${VAR}` indirection pattern from
@@ -115,22 +313,209 @@ async function registerKind(kind, entries) {
115
313
  // (env var unset) pass through unchanged — backend's required-field
116
314
  // validation catches them with a meaningful error.
117
315
  const config = (0, expandEnvVar_ts_1.expandEnvVarsDeep)(entry);
118
- const builtin = FACTORIES[entry.backend];
119
- if (builtin) {
120
- await builtin({ logicalName, kind, config });
316
+ const { backend, extras } = await (0, backendRegistry_ts_1.constructBackend)(kind, logicalName, async () => {
317
+ const builtin = FACTORIES[entry.backend];
318
+ if (builtin) {
319
+ await builtin({ logicalName, kind, config });
320
+ }
321
+ else {
322
+ // Not a built-in name: treat `backend` as a module specifier (#1471).
323
+ await registerFromModule(kind, logicalName, entry.backend, config);
324
+ }
325
+ });
326
+ if (!backend) {
327
+ harper_logger_ts_1.default.error(`models.${kind}.${logicalName}: registration installed no backend; skipping ` +
328
+ `(a factory must register before its returned promise resolves)`);
329
+ failedKeys.add(key);
330
+ continue;
121
331
  }
122
- else {
123
- // Not a built-in name: treat `backend` as a module specifier (#1471).
124
- await registerFromModule(kind, logicalName, entry.backend, config);
125
- }
126
- // Record the ordered fallback group (other logical names) for the router (#1326).
127
- if (entry.fallback?.length)
128
- (0, routing_ts_1.setFallbackGroup)(kind, logicalName, entry.fallback);
332
+ // Boot publishes each entry as it is built, in config order, so a later module factory
333
+ // observes earlier entries exactly as it always has (a wrapper resolves its base). Reload
334
+ // defers everything to one synchronous publish, so a request never sees a partial rebuild.
335
+ if (isBoot)
336
+ publishEntry(desiredEntry, backend, extras, true);
337
+ else
338
+ staged.set(key, { desiredEntry, backend, extras });
129
339
  }
130
340
  catch (err) {
341
+ failedKeys.add(key);
131
342
  harper_logger_ts_1.default.error(`models.${kind}.${logicalName}: registration failed (${err?.message ?? err})`);
132
343
  }
133
344
  }
345
+ for (const { desiredEntry, backend, extras } of staged.values()) {
346
+ publishEntry(desiredEntry, backend, extras, isBoot);
347
+ }
348
+ const desiredKeys = new Set(desired.map((d) => slotKey(d.kind, d.logicalName)));
349
+ // Module-backed slots retained across a removal are absent from both `desiredKeys` and `presentKeys`,
350
+ // so neither routing loop below would restore them after the clear; track them so their recorded
351
+ // fallback survives — else the primary keeps serving while its failover is silently dropped.
352
+ const retainedModuleKeys = new Set();
353
+ for (const [key, slot] of [...installedSlots]) {
354
+ if (presentKeys.has(key))
355
+ continue;
356
+ // Module-backed entries are restart-managed on reload in BOTH directions: refusing an added
357
+ // rename target while removing its old name would turn the rename into a bare removal.
358
+ if (!isBoot && slot.builtin === false) {
359
+ harper_logger_ts_1.default.warn(`models.${slot.kind}.${slot.logicalName}: module-backed entries require a restart to remove; keeping it`);
360
+ retainedModuleKeys.add(key);
361
+ continue;
362
+ }
363
+ if (slot.backend)
364
+ (0, backendRegistry_ts_1.removeIfCurrent)(slot.kind, slot.logicalName, slot.backend);
365
+ for (const extra of slot.extras ?? []) {
366
+ if (!extra.suppressed)
367
+ (0, backendRegistry_ts_1.removeIfCurrent)(extra.kind, extra.logicalName, extra.backend);
368
+ }
369
+ installedSlots.delete(key);
370
+ // A removed entry may have been shadowing a factory helper of the same name; put the
371
+ // helper back, so the live registry matches a restart with this final config. Not gated on
372
+ // slot.backend: the claim suppressed the helper before this entry's swap was known to win, so
373
+ // a lost swap must still release it (a no-op while the name is held or nothing is suppressed).
374
+ restoreSuppressedHelper(slot.kind, slot.logicalName);
375
+ }
376
+ // Rebuild fallback routing from scratch each apply so a removed/changed `fallback:` (or a
377
+ // removed `models:` block) doesn't leave stale routing behind (#1326).
378
+ (0, routing_ts_1.clearFallbackGroups)();
379
+ for (const { kind, logicalName, entry } of desired) {
380
+ // A failed rebuild keeps its previous backend serving, so it keeps the routing that was
381
+ // applied WITH that backend — not the new entry's group, which belongs to the build that
382
+ // did not happen.
383
+ const key = slotKey(kind, logicalName);
384
+ const group = failedKeys.has(key) ? installedSlots.get(key)?.fallback : entry.fallback;
385
+ if (group?.length && (0, backendRegistry_ts_1.getBackend)(kind, logicalName))
386
+ (0, routing_ts_1.setFallbackGroup)(kind, logicalName, group);
387
+ }
388
+ // Routing follows the name, not the instance.
389
+ for (const [key, slot] of installedSlots) {
390
+ if (desiredKeys.has(key) || !presentKeys.has(key))
391
+ continue;
392
+ if (slot.fallback?.length && (0, backendRegistry_ts_1.getBackend)(slot.kind, slot.logicalName)) {
393
+ (0, routing_ts_1.setFallbackGroup)(slot.kind, slot.logicalName, slot.fallback);
394
+ }
395
+ }
396
+ // Retained module-backed slots keep serving under their old name, so they keep the fallback group
397
+ // they were built with — a restart-managed removal must not half-apply as a silent failover loss.
398
+ for (const key of retainedModuleKeys) {
399
+ const slot = installedSlots.get(key);
400
+ if (slot?.fallback?.length && (0, backendRegistry_ts_1.getBackend)(slot.kind, slot.logicalName)) {
401
+ (0, routing_ts_1.setFallbackGroup)(slot.kind, slot.logicalName, slot.fallback);
402
+ }
403
+ }
404
+ }
405
+ // ── Hot reload wiring ─────────────────────────────────────────────────────────
406
+ let modelsConfigWatcher;
407
+ let ownsModelsConfigWatcher = false;
408
+ let modelsApplyListener;
409
+ let pendingSettle;
410
+ /**
411
+ * Watch the root config file and hot-apply `models:` changes. Follows `harper_logger`'s
412
+ * root-config-watch pattern: one watcher per worker, each worker reprojecting its own registry.
413
+ *
414
+ * The watcher sees the FILE, but `HARPER_DEFAULT_CONFIG` / `HARPER_CONFIG` / `HARPER_SET_CONFIG`
415
+ * compose with it at boot — so if any of those names `models`, the file alone is not authoritative
416
+ * for the block and hot reload stays off, preserving boot semantics unchanged. (That is also the
417
+ * compatibility gate: an orchestrator still injecting models through `HARPER_SET_CONFIG` gets
418
+ * today's restart behavior; one that writes the file instead gets live reload.)
419
+ *
420
+ * Returns whether the watch is active.
421
+ */
422
+ function startModelsConfigHotReload(options) {
423
+ if (modelsConfigWatcher)
424
+ return true;
425
+ const pinnedBy = envLayerNamingModels();
426
+ if (pinnedBy) {
427
+ harper_logger_ts_1.default.info(`models: hot reload of the config file is disabled: ${pinnedBy} also defines 'models', so the file alone is not authoritative for it`);
428
+ return false;
429
+ }
430
+ // One watcher per isolate: logging already opens one, and a second per worker doubles the
431
+ // native-watcher/FD footprint and the read+parse work on every config write. A test-supplied
432
+ // path gets a private instance, owned (and closed) by this module.
433
+ ownsModelsConfigWatcher = options?.watcher === undefined && options?.configFilePath !== undefined;
434
+ modelsConfigWatcher =
435
+ options?.watcher ??
436
+ (ownsModelsConfigWatcher ? new RootConfigWatcher_ts_1.RootConfigWatcher(options?.configFilePath) : (0, RootConfigWatcher_ts_1.getSharedRootConfigWatcher)());
437
+ // An 'error' event with no listener would take the worker down; and `ready` is an events.once
438
+ // promise that rejects on a pre-ready 'error', so it must be observed too.
439
+ modelsConfigWatcher.on('error', modelsWatcherErrorListener);
440
+ modelsConfigWatcher.ready.catch(() => { });
441
+ // 'ready' carries the file state at watch start: a rewrite that lands during the watcher's
442
+ // initial scan arrives there rather than as 'change', and an unchanged block is a no-op anyway.
443
+ // Settle window: a non-atomic in-place rewrite emits an event per write() and an early snapshot
444
+ // can be a schema-valid subset of the final file (a truncated map removes the unwritten
445
+ // entries). Applying only the last event in a quiet window adopts the completed file. The real
446
+ // contract for orchestrators remains an atomic tmp+rename.
447
+ const debounceMs = options?.debounceMs ?? 150;
448
+ const applyFromFile = (config) => {
449
+ const models = config?.models;
450
+ options?.onSnapshotObserved?.();
451
+ clearTimeout(pendingSettle);
452
+ pendingSettle = setTimeout(() => {
453
+ void queueModelsApply(models, false);
454
+ }, debounceMs);
455
+ pendingSettle.unref?.();
456
+ };
457
+ modelsConfigWatcher.on('ready', applyFromFile);
458
+ modelsConfigWatcher.on('change', applyFromFile);
459
+ modelsApplyListener = applyFromFile;
460
+ // The shared watcher's one-time 'ready' may predate this subscription (logging usually
461
+ // constructs the singleton first, and EventEmitter does not replay). A snapshot it already
462
+ // holds is applied directly, so a rewrite landing before this subscription is not invisible
463
+ // until the next write.
464
+ if (modelsConfigWatcher.config !== undefined)
465
+ applyFromFile(modelsConfigWatcher.config);
466
+ return true;
467
+ }
468
+ /** Stop watching the config file. The current projection keeps serving. */
469
+ function stopModelsConfigHotReload() {
470
+ clearTimeout(pendingSettle);
471
+ pendingSettle = undefined;
472
+ if (modelsConfigWatcher) {
473
+ if (modelsApplyListener) {
474
+ modelsConfigWatcher.off('ready', modelsApplyListener);
475
+ modelsConfigWatcher.off('change', modelsApplyListener);
476
+ }
477
+ modelsConfigWatcher.off('error', modelsWatcherErrorListener);
478
+ // The shared watcher belongs to the isolate (logging still consumes it); close only a
479
+ // private, test-supplied instance.
480
+ if (ownsModelsConfigWatcher)
481
+ modelsConfigWatcher.close();
482
+ }
483
+ modelsApplyListener = undefined;
484
+ modelsConfigWatcher = undefined;
485
+ }
486
+ function modelsWatcherErrorListener(error) {
487
+ harper_logger_ts_1.default.warn(`models: config watcher error: ${error?.message ?? error}`);
488
+ }
489
+ function envLayerNamingModels() {
490
+ for (const name of ['HARPER_SET_CONFIG', 'HARPER_CONFIG', 'HARPER_DEFAULT_CONFIG']) {
491
+ const raw = process.env[name];
492
+ if (!raw)
493
+ continue;
494
+ try {
495
+ const parsed = JSON.parse(raw);
496
+ // Dotted top-level keys ("models.embedding.default") compose into the models block too
497
+ // (harperConfigEnvVars flattens/expands them), so they pin exactly like a nested key.
498
+ if (parsed &&
499
+ typeof parsed === 'object' &&
500
+ Object.keys(parsed).some((k) => k === 'models' || k.startsWith('models.')))
501
+ return name;
502
+ }
503
+ catch {
504
+ // Malformed env config is reported by config loading itself; not this watcher's job.
505
+ }
506
+ }
507
+ return undefined;
508
+ }
509
+ function warnOnLiteralCredentials(kind, logicalName, entry) {
510
+ for (const field of CREDENTIAL_FIELDS) {
511
+ const value = entry[field];
512
+ if (typeof value !== 'string' || value.length === 0)
513
+ continue;
514
+ if ((0, expandEnvVar_ts_1.isUnresolvedEnvVarPlaceholder)(value))
515
+ continue; // operator is using ${VAR} indirection
516
+ harper_logger_ts_1.default.warn(`models.${kind}.${logicalName}: '${field}' is a literal value in harperdb-config.yaml; ` +
517
+ `prefer \${ENV_VAR} indirection for credentials to keep them off disk`);
518
+ }
134
519
  }
135
520
  /**
136
521
  * Resolve a non-built-in `backend` value as a module and invoke its factory (#1471).
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../resources/models/bootstrap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../resources/models/bootstrap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import { ClientError } from '../utility/errors/hdbError.ts';
2
+ /**
3
+ * Exclusive per-record locks (harper#483, Phase 0: one node, every worker thread).
4
+ *
5
+ * The sole authority is the rocksdb-js process-wide key lock: one `locks` map per DBDescriptor
6
+ * shared by every worker thread's handle. Nothing is written to the store or audit log. Lock and
7
+ * unlock are pure in-memory operations; the record's version and bytes are unchanged.
8
+ */
9
+ export declare const DEFAULT_LOCK_LEASE_MS = 30000;
10
+ /** Below this a generation can expire before the caller's work completes, handing back a lock already lost. */
11
+ export declare const MIN_LOCK_LEASE_MS = 100;
12
+ export declare const MAX_LOCK_LEASE_MS = 300000;
13
+ export declare const DEFAULT_LOCK_TIMEOUT_MS = 30000;
14
+ export declare const MAX_LOCK_TIMEOUT_MS = 300000;
15
+ export interface RecordLockOptions {
16
+ /** Lease in ms; the lock expires on its own if the holder never releases it (default 30 s, max 5 min) */
17
+ lease?: number;
18
+ /** How long to wait for a contended lock in ms before failing with 423 (default 30 s, max 5 min) */
19
+ timeout?: number;
20
+ /** A held lock outlives the acquiring transaction; it is released by `unlock()` or by its lease */
21
+ hold?: boolean;
22
+ }
23
+ export interface ResolvedRecordLockOptions {
24
+ lease: number;
25
+ timeout: number;
26
+ hold: boolean;
27
+ }
28
+ /**
29
+ * The handle returned by `lock()` and held by each gated write until its transaction completes.
30
+ * `release()` is synchronous: it calls `store.unlock(key)` which is ownerless and fires any
31
+ * waiting callbacks cross-thread. The `expired` flag is set in the holder thread by the lease
32
+ * timer, so a stale holder cannot accidentally call unlock after its lease already fired and
33
+ * released the key to a new holder.
34
+ */
35
+ export interface RecordLockHandle {
36
+ store: any;
37
+ key: any[];
38
+ keyId: unknown;
39
+ expiresAt: number;
40
+ hold: boolean;
41
+ released: boolean;
42
+ expired: boolean;
43
+ /** Monotonic timestamp at which tryLock succeeded; used as the base version for holder writes. */
44
+ acquiredAt: number;
45
+ /** Advance, but never lower, the version floor from the transaction that owns the actual write timestamp. */
46
+ noteHolderVersion(version: number): void;
47
+ /** Preserve a caller timestamp as a candidate floor without treating it as a committed write. */
48
+ noteCandidateFloor(version: number): void;
49
+ /** Compute a holder-write version without advancing the floor until that write commits. */
50
+ holderVersionCandidate(floor?: number): number;
51
+ /**
52
+ * Return the next version to stamp a holder write with. Starts at acquiredAt when no transaction
53
+ * version has been noted; otherwise advances by the minimum monotonic step from the recorded floor.
54
+ */
55
+ nextHolderVersion(): number;
56
+ release(): boolean;
57
+ /**
58
+ * Flip this handle to hold mode and reset its lease timer. Used during scoped→hold upgrades
59
+ * so all instances that reference this handle object remain valid (no retire + replace).
60
+ */
61
+ upgradeToHold(lease: number): void;
62
+ }
63
+ export declare function resolveLockOptions(options?: RecordLockOptions | null): ResolvedRecordLockOptions;
64
+ /**
65
+ * The 409 for a write staged through a handle that is no longer live. A lease that ran out and a
66
+ * lock that was handed back are different causes, and a caller told the wrong one debugs the wrong
67
+ * thing — a commit-released scoped handle is not a timeout.
68
+ */
69
+ export declare function lockNotHeldError(handle: Pick<RecordLockHandle, 'expired'>): ClientError;
70
+ /** The advisory key for this (table, record) pair, distinct from getFromSource's bare-id single-flight lock. */
71
+ export declare function lockAttemptKey(tableId: number, id: any): any[];
72
+ export declare function makeKeyLockHandle(store: any, key: any[], keyId: unknown, lease?: number, hold?: boolean, acquiredAt?: number): RecordLockHandle;
73
+ /**
74
+ * Acquire the native key lock for a record, looping until acquired or deadline passes. Re-entrant
75
+ * within a transaction: if the transaction already holds this key (non-expired handle in its
76
+ * recordLocks map) the existing handle is returned without a second tryLock.
77
+ */
78
+ export declare function acquireRecordKey(txn: {
79
+ recordLockFor(store: any, keyId: unknown): RecordLockHandle | undefined;
80
+ }, store: any, key: any[], keyId: unknown, waitMs: number, lease?: number, hold?: boolean): Promise<RecordLockHandle>;