@harperfast/harper 5.1.28 → 5.1.29

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 (241) hide show
  1. package/dist/resources/RocksTransactionLogStore.d.ts +4 -2
  2. package/dist/resources/RocksTransactionLogStore.js +12 -6
  3. package/dist/resources/RocksTransactionLogStore.js.map +1 -1
  4. package/dist/resources/Table.js +66 -16
  5. package/dist/resources/Table.js.map +1 -1
  6. package/dist/resources/replayLogs.js +25 -21
  7. package/dist/resources/replayLogs.js.map +1 -1
  8. package/dist/security/user.js +5 -1
  9. package/dist/security/user.js.map +1 -1
  10. package/dist/utility/coalesceRefresh.d.ts +6 -0
  11. package/dist/utility/coalesceRefresh.js +42 -0
  12. package/dist/utility/coalesceRefresh.js.map +1 -0
  13. package/npm-shrinkwrap.json +2 -2
  14. package/package.json +1 -1
  15. package/resources/DESIGN.md +5 -0
  16. package/resources/RocksTransactionLogStore.ts +12 -6
  17. package/resources/Table.ts +65 -19
  18. package/resources/replayLogs.ts +25 -22
  19. package/security/user.ts +6 -1
  20. package/studio/web/404.html +79 -0
  21. package/studio/web/assets/{Chat-BIhh6lPA.js → Chat-CSSJ_LuP.js} +274 -247
  22. package/studio/web/assets/FloatingChat-C-5i9pB-.js +23 -0
  23. package/studio/web/assets/_basePickBy-QJXUw_pr.js +1 -0
  24. package/studio/web/assets/_baseUniq-DR4vVjyC.js +1 -0
  25. package/studio/web/assets/{abnfDiagram-VCTEODGH-B0BebmD2.js → abnfDiagram-O67JEVCF-DpPZWMOf.js} +1 -1
  26. package/studio/web/assets/{alertDialog-CQyAJJhl.js → alertDialog-UrbiMgQt.js} +1 -1
  27. package/studio/web/assets/{apiToken-Bm3xlmj1.js → apiToken-_BwddeaY.js} +1 -1
  28. package/studio/web/assets/applications-EoXf0cg8.js +296 -0
  29. package/studio/web/assets/architecture-7GRP2DOG-11l4Ny1l.js +1 -0
  30. package/studio/web/assets/architectureDiagram-NJMV4G6O-OmgLraID.js +36 -0
  31. package/studio/web/assets/authStore-5jSS5pTW.js +3 -0
  32. package/studio/web/assets/{blockDiagram-I7D4REHJ-BqguiadH.js → blockDiagram-BEXU5L5S-Cv7CD3Ai.js} +15 -4
  33. package/studio/web/assets/{button-BIsUKRZq.js → button-MFP9n8Ck.js} +1 -1
  34. package/studio/web/assets/c4Diagram-YGBWAQC7-Ds1vKYnN.js +38 -0
  35. package/studio/web/assets/channel-BDtouPd6.js +1 -0
  36. package/studio/web/assets/chevron-up-CFe8x5Bp.js +1 -0
  37. package/studio/web/assets/chunk-3FUC2YCW-DpnBPH8B.js +2 -0
  38. package/studio/web/assets/{chunk-GVQU2GXP-sbwVIQ8i.js → chunk-5DYCD2WN-LLLCQSzg.js} +1 -1
  39. package/studio/web/assets/{chunk-PWAF6VOD-1z1THyS5.js → chunk-742MDFTN-BL8J_pIO.js} +1 -1
  40. package/studio/web/assets/chunk-7INBJB4K-C-hJHiiK.js +62 -0
  41. package/studio/web/assets/chunk-7M6MHVWA-C6ZqkFbA.js +213 -0
  42. package/studio/web/assets/chunk-7PRAP22T-CUXM8BG6.js +1 -0
  43. package/studio/web/assets/chunk-DUW6YSOI-Dgx8z5s3.js +1 -0
  44. package/studio/web/assets/{chunk-FOHPRMQF-DHwB1DNv.js → chunk-FOHPRMQF-DzxwRta7.js} +9 -9
  45. package/studio/web/assets/{chunk-SVP7TREG-jtdAHw0S.js → chunk-GTNCS2PH-DJ2BFvS1.js} +1 -1
  46. package/studio/web/assets/{chunk-F27PBJKO-BVA5EPhV.js → chunk-GWA4HPMP-C42bSqLL.js} +1 -1
  47. package/studio/web/assets/chunk-J5ZVWO5B-oDCd-gWO.js +1 -0
  48. package/studio/web/assets/chunk-MBY4JIJT-C-5jz6Lo.js +72 -0
  49. package/studio/web/assets/chunk-NETBCI7D-D-bzlN4r.js +1 -0
  50. package/studio/web/assets/chunk-O7XYJQB3-ep14zA23.js +128 -0
  51. package/studio/web/assets/chunk-UA2S7LBM-BMRWRHED.js +1 -0
  52. package/studio/web/assets/{chunk-POPQ4Y6H-ClWhhkwW.js → chunk-WEXAMYUT-DdLYVdX1.js} +1 -1
  53. package/studio/web/assets/{chunk-XXDRQBXY-BoGZu3HH.js → chunk-XXDRQBXY-CbPh2l8S.js} +1 -1
  54. package/studio/web/assets/{chunk-OSK3NFVY-ByciRftO.js → chunk-Z7XXMR3K-BmKEDjcP.js} +3 -3
  55. package/studio/web/assets/{chunk-75Z2AOVW-QGQD6th2.js → chunk-ZIGJFQKS-DLZgdNxA.js} +2 -2
  56. package/studio/web/assets/classDiagram-v2-NBCMYWYE-DOI5vgKT.js +217 -0
  57. package/studio/web/assets/cose-bilkent-JH36ORCC-BSOszL11.js +1 -0
  58. package/studio/web/assets/createLucideIcon-bziYxJli.js +1 -0
  59. package/studio/web/assets/{css.worker-BD9HbRGW.js → css.worker-l1psR_wG.js} +13 -10
  60. package/studio/web/assets/{cssMode-MynFOVgt.js → cssMode-lBlR-7LH.js} +1 -1
  61. package/studio/web/assets/cynefin-OW5HDTMX-BSW-DB7S.js +1 -0
  62. package/studio/web/assets/cynefinDiagram-VND7K2PF-CbAHEwxt.js +62 -0
  63. package/studio/web/assets/cytoscape.esm-BZkf-uXn.js +321 -0
  64. package/studio/web/assets/dagre-6A5THRUB-Csxewgs4.js +4 -0
  65. package/studio/web/assets/diagram-22UHCM2B-a0rt8tY4.js +200 -0
  66. package/studio/web/assets/{diagram-VX7I27RA-DccVJet6.js → diagram-3UASUU5V-lEj2SVNh.js} +2 -2
  67. package/studio/web/assets/{diagram-VSXAHHWV-fhEdmkwM.js → diagram-ATOU4E4O-HcrAeB-q.js} +3 -3
  68. package/studio/web/assets/{diagram-S7CK7UJ4-aoCVTtcy.js → diagram-CDSNMT55-CYxiuyEx.js} +3 -3
  69. package/studio/web/assets/{diagram-Z3DM3KII-D-RyJJb7.js → diagram-MLGK6HIB-ChbCJTgJ.js} +1 -1
  70. package/studio/web/assets/diagram-MPIPVDR6-DaX9Y-N3.js +41 -0
  71. package/studio/web/assets/dialog-DTepachC.js +1 -0
  72. package/studio/web/assets/{dist-kYfyPZP9.js → dist-BRuBKNNy.js} +1 -1
  73. package/studio/web/assets/{dist-DP8UjMB_.js → dist-Cz2Y6-6G.js} +2 -2
  74. package/studio/web/assets/download-CtostjYn.js +1 -0
  75. package/studio/web/assets/{ebnfDiagram-PWID7BFC-DJGpIpz_.js → ebnfDiagram-ZINNZB2B-CwAsENB1.js} +1 -1
  76. package/studio/web/assets/{editor-jknmnxwj.js → editor-DD13jWk4.js} +1 -1
  77. package/studio/web/assets/editor.worker-CkkvdXvO.js +33 -0
  78. package/studio/web/assets/elk-276RUBZZ-Hexg9E4D.js +27 -0
  79. package/studio/web/assets/{erDiagram-RLTQ6QDP-CIfNlgkC.js → erDiagram-OPXOYQCR-CeC-wwO1.js} +15 -15
  80. package/studio/web/assets/eventmodeling-NTZA5JFV-CFb03e0o.js +1 -0
  81. package/studio/web/assets/flowDiagram-KWPJA3E3-Cidi00_Y.js +1 -0
  82. package/studio/web/assets/{ganttDiagram-EL5Y4UJY-BxToTzzD.js → ganttDiagram-FUAMR5RP-C2_Hhl1-.js} +2 -2
  83. package/studio/web/assets/{getAnalytics-GHK8ORfM.js → getAnalytics-CjthMQqF.js} +1 -1
  84. package/studio/web/assets/gitGraph-4MIJSDKK-xIk5Vuew.js +1 -0
  85. package/studio/web/assets/{gitGraphDiagram-WWUBYQGX-Dwntd4-x.js → gitGraphDiagram-X574FWY7-CMxJ34up.js} +4 -4
  86. package/studio/web/assets/graphlib-C9Tl7QrK.js +1 -0
  87. package/studio/web/assets/{html-DaHwrdOR.js → html-D-yZFVDJ.js} +1 -1
  88. package/studio/web/assets/{html.worker-DsMmVtuG.js → html.worker-DdwM4IrA.js} +12 -9
  89. package/studio/web/assets/{htmlMode-BWafOr4c.js → htmlMode-CcX-hDcn.js} +1 -1
  90. package/studio/web/assets/index-BiEuS38J.js +824 -0
  91. package/studio/web/assets/index-CPoDzQTe.css +1 -0
  92. package/studio/web/assets/index.lazy-BmFnCdF7.js +2 -0
  93. package/studio/web/assets/info-A6RAGUB7-o49TEbj-.js +1 -0
  94. package/studio/web/assets/infoDiagram-VRGFBTTK-Cjhh7yzZ.js +2 -0
  95. package/studio/web/assets/{ishikawaDiagram-5VMMS53U-D9Xh2r6X.js → ishikawaDiagram-OU5B5YK6-C63aXRmh.js} +2 -2
  96. package/studio/web/assets/{javascript-kE730gZ6.js → javascript-C_Qb7VgS.js} +1 -1
  97. package/studio/web/assets/{journeyDiagram-3NMN7TZE-CokIi6ll.js → journeyDiagram-ZHPQQLJL-D_o0P5Mu.js} +3 -3
  98. package/studio/web/assets/json.worker-CSi2hF-a.js +65 -0
  99. package/studio/web/assets/{jsonMode-DGY_qxYM.js → jsonMode-Bu06LimW.js} +1 -1
  100. package/studio/web/assets/{kanban-definition-UXKFOSKX-CukSFJfX.js → kanban-definition-PNTS6WVX-CTI9SSxY.js} +7 -7
  101. package/studio/web/assets/{katex-CXMH3UgJ.js → katex-ZlcWpGUi.js} +2 -2
  102. package/studio/web/assets/languageServices-Ca1R1u3j.js +1 -0
  103. package/studio/web/assets/linear-Ds1AeO4V.js +1 -0
  104. package/studio/web/assets/{lspLanguageFeatures-Boj14uZM.js → lspLanguageFeatures-DlK675B0.js} +2 -2
  105. package/studio/web/assets/{mermaid-parser.core-BlEsOWNO.js → mermaid-parser.core-C2lcH_jP.js} +3 -3
  106. package/studio/web/assets/mermaid.core-BG5bjfIG.js +44 -0
  107. package/studio/web/assets/{mindmap-definition-YA3MSWOX-IprMc_0j.js → mindmap-definition-NLK3R4M7-BK7ho6JD.js} +24 -24
  108. package/studio/web/assets/{notifications-zOnSw341.js → notifications-ByFMWGKr.js} +1 -1
  109. package/studio/web/assets/{notifications-BDbm_lvI.js → notifications-Dlp-DUlc.js} +1 -1
  110. package/studio/web/assets/packet-AYTQ26CC-BHPy6KBV.js +1 -0
  111. package/studio/web/assets/{pegDiagram-XKGWAZYB-BNuPDLZY.js → pegDiagram-GJSIUBJH-DzjwG3jO.js} +1 -1
  112. package/studio/web/assets/pie-WAS4IAKB-D0cP-DTU.js +1 -0
  113. package/studio/web/assets/{pieDiagram-E7YTZNPT-DqNb6Ht2.js → pieDiagram-5QR66LMP-C_hOP9Lv.js} +2 -2
  114. package/studio/web/assets/profile-CGlJ4T3_.js +1 -0
  115. package/studio/web/assets/{quadrantDiagram-AXDQQJYC-BGH9E2YR.js → quadrantDiagram-O4NWA36T-CZW8PbV1.js} +3 -3
  116. package/studio/web/assets/radar-RG4KPBEZ-C8fk0U81.js +1 -0
  117. package/studio/web/assets/railroad-74A4TZTK-B60FWm17.js +1 -0
  118. package/studio/web/assets/railroad-abnf-HS5TGJTU-CLMVZvH0.js +1 -0
  119. package/studio/web/assets/railroad-ebnf-LZEXJU2U--tlwFoVB.js +1 -0
  120. package/studio/web/assets/railroad-peg-WCYAUIDC-Dpuslblm.js +1 -0
  121. package/studio/web/assets/{railroadDiagram-O6MQD6OU-DGTPh2KZ.js → railroadDiagram-XR7U4H2S-DyyNmgbU.js} +1 -1
  122. package/studio/web/assets/regions-DTTjgYbw.js +1 -0
  123. package/studio/web/assets/{register-DGCNqzDG.js → register-BEBUrRqE.js} +39 -39
  124. package/studio/web/assets/{requirementDiagram-BXWQKSXE-BJnO6uLz.js → requirementDiagram-PLB6GJNP-C4H-mLKu.js} +11 -11
  125. package/studio/web/assets/{rolldown-runtime-hePW80VL.js → rolldown-runtime-Dd_uD5pT.js} +1 -1
  126. package/studio/web/assets/sankeyDiagram-IPEJSGJF-DHDyga4c.js +40 -0
  127. package/studio/web/assets/sequenceDiagram-PO4LG4MO-CdNcHXRI.js +169 -0
  128. package/studio/web/assets/setComponentFile-C28rPBf4.js +1 -0
  129. package/studio/web/assets/{setup-CJD-AstF.js → setup-6gEOddyI.js} +2 -2
  130. package/studio/web/assets/sizeCapture-INFHLROL-3uHXrFqA.js +1 -0
  131. package/studio/web/assets/{src-CMc7m_Ut.js → src-D0vMJQRr.js} +1 -1
  132. package/studio/web/assets/stateDiagram-v2-GCMORJYK-CpKuXq15.js +291 -0
  133. package/studio/web/assets/status-1KvBgL5x.js +61 -0
  134. package/studio/web/assets/swimlanes-2SLR337P-NRHa2D8I.js +1 -0
  135. package/studio/web/assets/swimlanesDiagram-TC7HE7FX-BBk4t4hO.js +8 -0
  136. package/studio/web/assets/{tabs-BrHu7gJi.js → tabs-CnQ_zenf.js} +1 -1
  137. package/studio/web/assets/{time-Cclkb7kQ.js → time-Ci1v4fvT.js} +1 -1
  138. package/studio/web/assets/timeline-definition-EJHVYXUP-D39Y-xpq.js +120 -0
  139. package/studio/web/assets/toggleHighContrast-CXlv5tpg.js +49 -0
  140. package/studio/web/assets/treeView-Q6P3EWNA-CRWR9OqD.js +1 -0
  141. package/studio/web/assets/treemap-WGGIJYW6-ZfXyJgLO.js +1 -0
  142. package/studio/web/assets/{ts.worker-DpaaFKhy.js → ts.worker-DDMUrpqh.js} +118 -115
  143. package/studio/web/assets/{tsMode-Ddtr4T5l.js → tsMode-BHepKavV.js} +5 -5
  144. package/studio/web/assets/{typescript-CuuFJT10.js → typescript-C9CHPLmr.js} +1 -1
  145. package/studio/web/assets/{useEntityRestURL-wGLNBXcp.js → useEntityRestURL-BNUVRoP4.js} +1 -1
  146. package/studio/web/assets/useLocalStorage-BYoZF60G.js +1 -0
  147. package/studio/web/assets/usecaseDiagram-POWQR4AR-jf-zIDZ_.js +328 -0
  148. package/studio/web/assets/vendor-core-BdkdbUek.js +63 -0
  149. package/studio/web/assets/vendor-datadog-fCQhBHGk.js +6 -0
  150. package/studio/web/assets/vendor-react-izWchTRL.js +9 -0
  151. package/studio/web/assets/vendor-tanstack-CQ1aRjVa.js +2 -0
  152. package/studio/web/assets/vendor-ui-aE1tHcW7.js +41 -0
  153. package/studio/web/assets/vennDiagram-UO4OBE2U-BKYAZUh_.js +34 -0
  154. package/studio/web/assets/wardley-WFR3VGLG-BO7f36ci.js +1 -0
  155. package/studio/web/assets/{wardleyDiagram-VM6X3IG4-CjrkKWUR.js → wardleyDiagram-VNRHLVJA-Djb0JDQc.js} +3 -3
  156. package/studio/web/assets/{workers-C-wPapNO.js → workers-B0sIl4Uq.js} +1 -1
  157. package/studio/web/assets/x-vYntCxm4.js +1 -0
  158. package/studio/web/assets/{xml-CtVKlhci.js → xml-BX3ACYE-.js} +1 -1
  159. package/studio/web/assets/{xychartDiagram-S5SC5T6Z-Biok4GYV.js → xychartDiagram-PMCCYNJV-BQh9ubvb.js} +3 -3
  160. package/studio/web/assets/{yaml-BdDN85tZ.js → yaml-CTtQqCZf.js} +1 -1
  161. package/studio/web/assets/yaml.worker-DAK2o_H1.js +479 -0
  162. package/studio/web/auth/fabric-globe-dark.png +0 -0
  163. package/studio/web/auth/fabric-globe-light.png +0 -0
  164. package/studio/web/auth/fabric-platform-dark.png +0 -0
  165. package/studio/web/auth/fabric-platform-light.png +0 -0
  166. package/studio/web/index.html +15 -15
  167. package/utility/coalesceRefresh.ts +37 -0
  168. package/studio/web/assets/FloatingChat-BvQCMiaX.js +0 -23
  169. package/studio/web/assets/applications-uoeOXmdL.js +0 -296
  170. package/studio/web/assets/architecture-7GRP2DOG-LB-MLAAb.js +0 -1
  171. package/studio/web/assets/architectureDiagram-5GKGNRK7-7SW3GD-K.js +0 -36
  172. package/studio/web/assets/authStore-C3Nfubqr.js +0 -3
  173. package/studio/web/assets/c4Diagram-7LVT6UL2-LBNf8t_X.js +0 -38
  174. package/studio/web/assets/channel-yictG-U-.js +0 -1
  175. package/studio/web/assets/chevron-up-DtKGqDn3.js +0 -1
  176. package/studio/web/assets/chunk-4HAMMTFA-DWtTut21.js +0 -62
  177. package/studio/web/assets/chunk-DU6HZSFF-Chq20Ba5.js +0 -127
  178. package/studio/web/assets/chunk-GMAD6QVW-BeS7S07A.js +0 -72
  179. package/studio/web/assets/chunk-IMKFNOWR-Bnh3tAVd.js +0 -231
  180. package/studio/web/assets/chunk-L3NEJ4N5-COfUyKII.js +0 -1
  181. package/studio/web/assets/chunk-P2QGCYS3-CP1VhG_c.js +0 -1
  182. package/studio/web/assets/chunk-SHT3W25Y-LpQkMsah.js +0 -168
  183. package/studio/web/assets/chunk-TICWLB2K-VOwzetX-.js +0 -206
  184. package/studio/web/assets/classDiagram-ZZMXUADV-VaEwSy_g.js +0 -1
  185. package/studio/web/assets/classDiagram-v2-VYDZK3BY-VaEwSy_g.js +0 -1
  186. package/studio/web/assets/cose-bilkent-JH36ORCC-Cuuf67Bh.js +0 -1
  187. package/studio/web/assets/createLucideIcon-CzW9508A.js +0 -1
  188. package/studio/web/assets/cynefin-OW5HDTMX-BbdbCvub.js +0 -1
  189. package/studio/web/assets/cynefinDiagram-5FMLGOSQ-TP-aIqbt.js +0 -62
  190. package/studio/web/assets/cytoscape.esm-C2x7inlt.js +0 -321
  191. package/studio/web/assets/dagre-GXQ25YYZ-DShnGpGo.js +0 -4
  192. package/studio/web/assets/dagre-PrKaheQc.js +0 -1
  193. package/studio/web/assets/diagram-UQ7AKVKN-DglXtQ6x.js +0 -41
  194. package/studio/web/assets/dialog-Cn2uWgD4.js +0 -1
  195. package/studio/web/assets/download-B5T5r7ss.js +0 -1
  196. package/studio/web/assets/editor.worker-DwcOiOeP.js +0 -30
  197. package/studio/web/assets/eventmodeling-NTZA5JFV-CLxnp2CR.js +0 -1
  198. package/studio/web/assets/flowDiagram-HODETNUW-BIbhmz9f.js +0 -1
  199. package/studio/web/assets/gitGraph-4MIJSDKK-D2s2w8lE.js +0 -1
  200. package/studio/web/assets/graphlib-DS17s2tU.js +0 -1
  201. package/studio/web/assets/index-7RMEgVG1.css +0 -1
  202. package/studio/web/assets/index-CjzDY6gS.js +0 -824
  203. package/studio/web/assets/index.lazy-Bn4Z3ETY.js +0 -2
  204. package/studio/web/assets/info-A6RAGUB7-DYjkvb0C.js +0 -1
  205. package/studio/web/assets/infoDiagram-27XIBGKW-Bnp1FJE5.js +0 -2
  206. package/studio/web/assets/json.worker-fO_hOLCP.js +0 -62
  207. package/studio/web/assets/languageServices-D-WcJy5a.js +0 -1
  208. package/studio/web/assets/linear-Cnt8506Q.js +0 -1
  209. package/studio/web/assets/mermaid.core-BlkGaMIH.js +0 -44
  210. package/studio/web/assets/packet-AYTQ26CC-Bi3V04Zi.js +0 -1
  211. package/studio/web/assets/pie-WAS4IAKB-_6DoDbng.js +0 -1
  212. package/studio/web/assets/profile-BHG4gzjx.js +0 -1
  213. package/studio/web/assets/radar-RG4KPBEZ-DDdVczcL.js +0 -1
  214. package/studio/web/assets/railroad-74A4TZTK-BJUP4Jds.js +0 -1
  215. package/studio/web/assets/railroad-abnf-HS5TGJTU-Bm3L1L0h.js +0 -1
  216. package/studio/web/assets/railroad-ebnf-LZEXJU2U-CKzLGlkw.js +0 -1
  217. package/studio/web/assets/railroad-peg-WCYAUIDC-S8xLjslx.js +0 -1
  218. package/studio/web/assets/regions-D-8IXyGt.js +0 -1
  219. package/studio/web/assets/sankeyDiagram-P5KCCOFB-0vSOdymH.js +0 -40
  220. package/studio/web/assets/sequenceDiagram-WJ2MYXX4-hETizDWE.js +0 -162
  221. package/studio/web/assets/setComponentFile-BHRE_zTQ.js +0 -1
  222. package/studio/web/assets/sizeCapture-INFHLROL-B0uUizjq.js +0 -1
  223. package/studio/web/assets/stateDiagram-D77RDMKH-CdYQ_KtC.js +0 -1
  224. package/studio/web/assets/stateDiagram-v2-MP3YSRHH-CdKuzQMT.js +0 -1
  225. package/studio/web/assets/status-BXHseYrN.js +0 -61
  226. package/studio/web/assets/swimlanes-42K2YHIH-B8cHIpU4.js +0 -1
  227. package/studio/web/assets/swimlanesDiagram-VR7AAH4N-DmOSJwaH.js +0 -8
  228. package/studio/web/assets/timeline-definition-24CTP7MA-BJWYSXqF.js +0 -120
  229. package/studio/web/assets/toggleHighContrast-B3vnXhGn.js +0 -49
  230. package/studio/web/assets/treeView-Q6P3EWNA-qxe_v6CQ.js +0 -1
  231. package/studio/web/assets/treemap-WGGIJYW6-dDo97XXF.js +0 -1
  232. package/studio/web/assets/useLocalStorage-BqMR3D8_.js +0 -1
  233. package/studio/web/assets/vendor-core-c2JRRJpV.js +0 -58
  234. package/studio/web/assets/vendor-datadog-CLUcJXOo.js +0 -6
  235. package/studio/web/assets/vendor-react-CJV_K1u4.js +0 -9
  236. package/studio/web/assets/vendor-tanstack-DxzraizX.js +0 -1
  237. package/studio/web/assets/vendor-ui-BUjK0h8a.js +0 -41
  238. package/studio/web/assets/vennDiagram-4TSXK5OY-A3i-lCdl.js +0 -34
  239. package/studio/web/assets/wardley-WFR3VGLG-B0ik-_6g.js +0 -1
  240. package/studio/web/assets/x-DIzaLEdK.js +0 -1
  241. package/studio/web/assets/yaml.worker-BDL8_iuk.js +0 -454
@@ -98,6 +98,7 @@ function replayLogs(rootStore, tables) {
98
98
  // replay all the logs
99
99
  let transaction;
100
100
  let lastTimestamp = 0;
101
+ let openCommitEnded = false;
101
102
  let writes = 0;
102
103
  let skipped = 0;
103
104
  // Track forward progress so a backlog of unwritable entries can't grind the boot thread
@@ -118,8 +119,25 @@ function replayLogs(rootStore, tables) {
118
119
  logger.fatal(`Aborting transaction-log replay in ${rootStore.databaseName} database: ${noProgressRun} consecutive audit entries with no successful write (${skipped} skipped as unrecoverable, ${writes} replayed so far). This backlog is making no forward progress and was blocking startup (harper#1266) — typically a peer transaction log whose values reference unresolvable shared structures (harper#1163), or a backlog for a dropped table. Continuing boot without replaying the remainder; shed or relocate the oversized/undecodable peer transaction log(s), or re-clone this node, to recover the unreplayed data.`);
119
120
  break;
120
121
  }
121
- const { type, tableId, nodeId, recordId, version, residencyId, expiresAt, originatingOperation, username, extendedType, } = auditRecord;
122
+ const { type, tableId, nodeId, recordId, version, residencyId, expiresAt, originatingOperation, username, extendedType, endTxn, } = auditRecord;
122
123
  try {
124
+ // A replay transaction is one native commit ("Boot replay transactions" in DESIGN.md).
125
+ if (transaction && (openCommitEnded || lastTimestamp !== version)) {
126
+ const ending = transaction;
127
+ transaction = undefined;
128
+ try {
129
+ ending.directCommitSync();
130
+ }
131
+ catch (error) {
132
+ logger.error('Error committing replay transaction', error);
133
+ }
134
+ // The wall-clock budget (harper#1316) is checked only here, between native commits with
135
+ // nothing staged, so aborting never tears a commit in half.
136
+ if ((0, replayLogsGuards_ts_1.shouldAbortSlowReplay)(performance.now() - replayStartTime, replayTimeoutMs)) {
137
+ logger.fatal(`Aborting transaction-log replay in ${rootStore.databaseName} database: replay has exceeded the wall-clock time limit (${writes} written, ${skipped} skipped). The transaction log contains a pathologically deep out-of-order write history that is too expensive to reconcile during boot (harper#1316). Re-clone this node from a healthy leader to recover the unreplayed data.`);
138
+ break;
139
+ }
140
+ }
123
141
  if ((0, replayLogsGuards_ts_1.classifyAuditEntryForReplay)(extendedType, tableId, true) === 'corrupt-header') {
124
142
  skipped++;
125
143
  noProgressRun++;
@@ -172,27 +190,9 @@ function replayLogs(rootStore, tables) {
172
190
  warnedReplayHappening = true;
173
191
  console.warn('Harper was not properly shutdown, replaying transaction logs to synchronize database');
174
192
  }
175
- if (lastTimestamp !== version) {
193
+ if (!transaction) {
176
194
  lastTimestamp = version;
177
- try {
178
- // commit the last transaction since we are starting a new one
179
- transaction?.directCommitSync();
180
- }
181
- catch (error) {
182
- logger.error('Error committing replay transaction', error);
183
- }
184
- // Abort if replay has exceeded the total wall-clock budget even while making progress
185
- // (harper#1316, facet a). shouldAbortStalledReplay resets its counters on every write,
186
- // so a slow-but-progressing replay (deep out-of-order audit chain walk per entry) can
187
- // peg the boot thread indefinitely without tripping it. Checked only here, at a version
188
- // boundary: the prior version's transaction was just committed in full and the new one
189
- // is not yet staged, so aborting never tears a same-version (same source-transaction)
190
- // write batch in half. Re-clone to recover the unreplayed remainder.
191
- if ((0, replayLogsGuards_ts_1.shouldAbortSlowReplay)(performance.now() - replayStartTime, replayTimeoutMs)) {
192
- logger.fatal(`Aborting transaction-log replay in ${rootStore.databaseName} database: replay has exceeded the wall-clock time limit (${writes} written, ${skipped} skipped). The transaction log contains a pathologically deep out-of-order write history that is too expensive to reconcile during boot (harper#1316). Re-clone this node from a healthy leader to recover the unreplayed data.`);
193
- transaction = undefined; // already committed above; nothing staged for the new version
194
- break;
195
- }
195
+ openCommitEnded = false;
196
196
  transaction = new DatabaseTransaction_ts_1.DatabaseTransaction();
197
197
  transaction.db = primaryStore;
198
198
  transaction.timestamp = version;
@@ -281,6 +281,10 @@ function replayLogs(rootStore, tables) {
281
281
  version,
282
282
  });
283
283
  }
284
+ finally {
285
+ if (endTxn)
286
+ openCommitEnded = true;
287
+ }
284
288
  }
285
289
  try {
286
290
  transaction?.directCommitSync();
@@ -1 +1 @@
1
- {"version":3,"file":"replayLogs.js","sourceRoot":"","sources":["../../resources/replayLogs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"replayLogs.js","sourceRoot":"","sources":["../../resources/replayLogs.ts"],"names":[],"mappings":"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"}
@@ -80,6 +80,7 @@ const password = __importStar(require("../utility/password.js"));
80
80
  const Server_ts_1 = require("../server/Server.js");
81
81
  const terms = __importStar(require("../utility/hdbTerms.js"));
82
82
  const operationPermissions_ts_1 = require("../utility/operationPermissions.js");
83
+ const coalesceRefresh_ts_1 = require("../utility/coalesceRefresh.js");
83
84
  Server_ts_1.server.getUser = (username, password) => {
84
85
  return findAndValidateUser(username, password, password != null);
85
86
  };
@@ -302,11 +303,14 @@ function cacheExpandedOperationsPerms(userRole) {
302
303
  return;
303
304
  userRole.permission._expandedOperations = (0, operationPermissions_ts_1.expandOperationsPerms)(userRole.permission.operations);
304
305
  }
306
+ const refreshUsersWithRolesCache = (0, coalesceRefresh_ts_1.coalesceRefresh)(async () => {
307
+ usersWithRolesMap = await listUsers();
308
+ });
305
309
  async function setUsersWithRolesCache(cache = undefined) {
306
310
  if (cache)
307
311
  usersWithRolesMap = cache;
308
312
  else
309
- usersWithRolesMap = await listUsers();
313
+ await refreshUsersWithRolesCache();
310
314
  }
311
315
  async function getUsersWithRolesCache() {
312
316
  if (!usersWithRolesMap)
@@ -1 +1 @@
1
- {"version":3,"file":"user.js","sourceRoot":"","sources":["../../security/user.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../../security/user.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Wraps `refresh` so at most one run is in flight. Calls made while one runs share a single trailing
3
+ * run that starts once it settles, so each caller resolves after a run that started after its call.
4
+ * Joining the in-flight run instead could resolve a caller with state read before its own write.
5
+ */
6
+ export declare function coalesceRefresh(refresh: () => Promise<void>): () => Promise<void>;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.coalesceRefresh = coalesceRefresh;
4
+ /**
5
+ * Wraps `refresh` so at most one run is in flight. Calls made while one runs share a single trailing
6
+ * run that starts once it settles, so each caller resolves after a run that started after its call.
7
+ * Joining the in-flight run instead could resolve a caller with state read before its own write.
8
+ */
9
+ function coalesceRefresh(refresh) {
10
+ let running;
11
+ let queued;
12
+ const start = () => {
13
+ // Deferred so `running` is set before `refresh` runs: a call from inside it must queue, not overlap
14
+ const run = (running = Promise.resolve().then(refresh));
15
+ run.then(settle, settle);
16
+ return run;
17
+ };
18
+ // Hands off to the queued run in the same step that clears `running`, so no caller can start a
19
+ // second concurrent run in between.
20
+ const settle = () => {
21
+ running = undefined;
22
+ const next = queued;
23
+ if (next) {
24
+ queued = undefined;
25
+ start().then(next.resolve, next.reject);
26
+ }
27
+ };
28
+ return () => {
29
+ if (!running)
30
+ return start();
31
+ if (!queued) {
32
+ let resolve, reject;
33
+ const promise = new Promise((yes, no) => {
34
+ resolve = yes;
35
+ reject = no;
36
+ });
37
+ queued = { promise, resolve, reject };
38
+ }
39
+ return queued.promise;
40
+ };
41
+ }
42
+ //# sourceMappingURL=coalesceRefresh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coalesceRefresh.js","sourceRoot":"","sources":["../../utility/coalesceRefresh.ts"],"names":[],"mappings":";;AAKA,0CA+BC;AApCD;;;;GAIG;AACH,SAAgB,eAAe,CAAC,OAA4B;IAC3D,IAAI,OAAkC,CAAC;IACvC,IAAI,MAAqG,CAAC;IAC1G,MAAM,KAAK,GAAG,GAAkB,EAAE;QACjC,oGAAoG;QACpG,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACxD,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACzB,OAAO,GAAG,CAAC;IACZ,CAAC,CAAC;IACF,+FAA+F;IAC/F,oCAAoC;IACpC,MAAM,MAAM,GAAG,GAAG,EAAE;QACnB,OAAO,GAAG,SAAS,CAAC;QACpB,MAAM,IAAI,GAAG,MAAM,CAAC;QACpB,IAAI,IAAI,EAAE,CAAC;YACV,MAAM,GAAG,SAAS,CAAC;YACnB,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC;IACF,CAAC,CAAC;IACF,OAAO,GAAG,EAAE;QACX,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,IAAI,OAAmB,EAAE,MAAgC,CAAC;YAC1D,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE;gBAC7C,OAAO,GAAG,GAAG,CAAC;gBACd,MAAM,GAAG,EAAE,CAAC;YACb,CAAC,CAAC,CAAC;YACH,MAAM,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QACvC,CAAC;QACD,OAAO,MAAM,CAAC,OAAO,CAAC;IACvB,CAAC,CAAC;AACH,CAAC"}
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "harper",
3
- "version": "5.1.28",
3
+ "version": "5.1.29",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "harper",
9
- "version": "5.1.28",
9
+ "version": "5.1.29",
10
10
  "license": "Apache-2.0",
11
11
  "dependencies": {
12
12
  "@aws-sdk/client-s3": "^3.1012.0",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@harperfast/harper",
3
3
  "description": "Harper is an open-source Node.js performance platform that unifies database, cache, application, and messaging layers into one in-memory process.",
4
- "version": "5.1.28",
4
+ "version": "5.1.29",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://harper.fast",
7
7
  "bugs": {
@@ -86,6 +86,7 @@ One giant `makeTable()` factory that returns a `TableResource extends Resource`
86
86
  | How are residencies enforced (replication)? | `Table.ts → #section: lifecycle-admin` (residency block: `getResidencyRecord`, `setResidency`, `setResidencyById`, `getResidency`) |
87
87
  | How is the RecordObject prototype applied? | `RecordEncoder.ts` (see `../DESIGN.md`) |
88
88
  | Where is the per-request transaction stored? | `transaction.ts` + `contextStorage` (AsyncLocalStorage) |
89
+ | How does boot replay delimit its transactions? | `replayLogs.ts` (see "Boot replay transactions" below) |
89
90
  | How does a URL path map to a Resource? | `Resources.ts → getMatch` (exact/prefix fast path) then `matchParamRoute` (parameterised routes); see "Path routing" below |
90
91
 
91
92
  ---
@@ -125,6 +126,10 @@ Tests: `../unitTests/resources/paramRoutes.test.js` (unit) and `../integrationTe
125
126
 
126
127
  ---
127
128
 
129
+ ## Boot replay transactions (`replayLogs.ts`)
130
+
131
+ After an unclean shutdown `replayLogs` re-applies the unflushed transaction log inside `DatabaseTransaction`s marked `isReplay` (never re-logged). **A replay transaction is one native commit, never more**: it ends at the commit's last entry (the `endTxn` flag `RocksTransactionLogStore.getRange` sets on every yielded audit record) or at a change of log key, and the marker is recorded even for an entry replay skips, so a commit whose last entry is unrecoverable still closes. A log key alone is not a commit: a replication receiver commits every re-delivery of a source transaction under the origin's key, and grouping by key once staged millions of same-key commits into one transaction until the main thread ran out of heap (harper#2161). Memory during replay is bounded by the largest single native commit. The wall-clock abort (harper#1316) runs only at that boundary, with nothing staged. Accepted limits on this line: a torn tail (a final commit with no `endTxn`) is still committed as before, and an entry without the flag falls back to the log-key rule. `unitTests/resources/replayCommitBoundaries.test.js` pins the boundaries.
132
+
128
133
  ## Conventions
129
134
 
130
135
  - **Never** remove `transactional()` from a static method on `Resource` — it owns transaction context lifetime.
@@ -67,7 +67,7 @@ export class RocksTransactionLogStore extends EventEmitter {
67
67
  // do not record transaction entries on retry
68
68
  return;
69
69
  }
70
- const log = this.logById(options.nodeId) ?? this.logById(options.viaNodeId) ?? this.log;
70
+ const log = this.logFor(options.nodeId, options.viaNodeId);
71
71
  let entryBinary: Uint8Array;
72
72
  if (auditRecord instanceof Uint8Array) entryBinary = auditRecord;
73
73
  else {
@@ -140,6 +140,10 @@ export class RocksTransactionLogStore extends EventEmitter {
140
140
  log.addEntry(entryBinary, options.transaction.id);
141
141
  }
142
142
 
143
+ /** A lookup of a write's entry must read the log its write was filed in. */
144
+ logFor(nodeId?: number, viaNodeId?: number) {
145
+ return this.logById(nodeId) ?? this.logById(viaNodeId) ?? this.log;
146
+ }
143
147
  logById(nodeId: number) {
144
148
  return nodeId > -1 ? (this.nodeLogs?.[nodeId] ?? this.loadLogs()[nodeId]) : undefined;
145
149
  }
@@ -151,18 +155,20 @@ export class RocksTransactionLogStore extends EventEmitter {
151
155
  this.put(suggestedKey, value, options);
152
156
  }
153
157
  }
154
- get(key: any, tableId: number, recordId: any, nodeId: number) {
155
- return this.getSync(key, tableId, recordId, nodeId);
158
+ get(key: any, tableId: number, recordId: any, nodeId?: number, viaNodeId?: number) {
159
+ return this.getSync(key, tableId, recordId, nodeId, viaNodeId);
156
160
  }
157
- getSync(key: any, tableId: number, recordId: any, nodeId: number) {
161
+ getSync(key: any, tableId: number, recordId: any, nodeId?: number, viaNodeId?: number) {
158
162
  if (typeof key === 'number') {
159
163
  if (typeof tableId !== 'number') throw new Error('tableId must be a number');
160
164
  if (recordId === undefined) {
161
165
  throw new Error('recordId must be provided');
162
166
  }
163
167
  // this a request for a transaction log entry by a timestamp
164
- for (const entry of this.getRange({ start: key, exactStart: true, log: nodeId })) {
165
- if (entry.recordId === recordId && entry.tableId === tableId) {
168
+ const log = nodeId === undefined ? undefined : this.logFor(nodeId, viaNodeId ?? nodeId).name;
169
+ for (const entry of this.getRange({ start: key, exactStart: true, log })) {
170
+ // a relay log holds several origins' entries, and (version, nodeId) identifies one
171
+ if (entry.recordId === recordId && entry.tableId === tableId && !(nodeId > 0 && entry.nodeId !== nodeId)) {
166
172
  return entry;
167
173
  }
168
174
  if (entry.version !== key) return; // no longer in this transaction
@@ -105,6 +105,8 @@ type MaybePromise<T> = T | Promise<T>;
105
105
 
106
106
  const NULL_WITH_TIMESTAMP = new Uint8Array(9);
107
107
  NULL_WITH_TIMESTAMP[8] = 0xc0; // null
108
+ const sourceWriteTypes = new Set(['put', 'patch', 'delete', 'publish', 'message', 'invalidate', 'relocate']);
109
+ const USER_ROLE_WRITE = Symbol('userRoleWrite');
108
110
  const UNCACHEABLE_TIMESTAMP = Infinity; // we use this when dynamic content is accessed that we can't safely cache, and this prevents earlier timestamps from change the "last" modification
109
111
  const RECORD_PRUNING_INTERVAL = 60000; // one minute
110
112
  // RocksDB-only: number of eviction/tombstone removals coalesced into a single transaction commit.
@@ -141,6 +143,7 @@ function isFrozenRecordObject(value: any): boolean {
141
143
  );
142
144
  }
143
145
  export const INVALIDATED = 1;
146
+ const MIXED_WRITES = Symbol('mixed writes');
144
147
  export const EVICTED = 8; // note that 2 is reserved for timestamps
145
148
  const TEST_WRITE_KEY_BUFFER = Buffer.allocUnsafeSlow(8192);
146
149
  const MAX_KEY_BYTES = 1978;
@@ -380,18 +383,14 @@ export function makeTable(options) {
380
383
  // as they come in, and directly writing them to this table. We use the notification option to ensure
381
384
  // that we don't re-broadcast these as "requested" changes back to the source.
382
385
  (async () => {
383
- let userRoleUpdate = false;
384
386
  let lastSequenceId;
387
+ // A failed commit is reported by the apply loop, which awaits it
388
+ const signalUserChangeOnCommit = (committed: Promise<unknown>) =>
389
+ committed.then(() => signalling.signalUserChange(new UserEventMsg(process.pid)), noop);
385
390
  // perform the write of an individual write event
386
391
  const writeUpdate = async (event, context) => {
387
392
  const value = event.value;
388
393
  const Table = event.table ? databases[databaseName][event.table] : TableResource;
389
- if (
390
- databaseName === SYSTEM_SCHEMA_NAME &&
391
- (event.table === SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME || event.table === SYSTEM_TABLE_NAMES.USER_TABLE_NAME)
392
- ) {
393
- userRoleUpdate = true;
394
- }
395
394
  if (event.id === undefined) {
396
395
  event.id = value[Table.primaryKey];
397
396
  if (event.id === undefined) throw new Error('Replication message without an id ' + JSON.stringify(event));
@@ -412,6 +411,17 @@ export function makeTable(options) {
412
411
  async: true,
413
412
  };
414
413
  const id = event.id;
414
+ // Marked before any await, so a transaction's first write is seen where transaction() returns
415
+ if (
416
+ databaseName === SYSTEM_SCHEMA_NAME &&
417
+ (event.table === SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME ||
418
+ event.table === SYSTEM_TABLE_NAMES.USER_TABLE_NAME) &&
419
+ sourceWriteTypes.has(event.type) &&
420
+ !context[USER_ROLE_WRITE]
421
+ ) {
422
+ context[USER_ROLE_WRITE] = true;
423
+ if (context.committed) signalUserChangeOnCommit(context.committed);
424
+ }
415
425
  const resource: TableResource = await Table.getResource(id, context, options);
416
426
  if (event.finished) await event.finished;
417
427
  switch (event.type) {
@@ -638,11 +648,7 @@ export function makeTable(options) {
638
648
  }
639
649
  });
640
650
  if (txnInProgress) txnInProgress.committed = commitResolution;
641
- if (userRoleUpdate && commitResolution && !(commitResolution as any).waitingForUserChange) {
642
- // if the user role changed, asynchronously signal the user change (but don't block this function)
643
- commitResolution.then(() => signalling.signalUserChange(new UserEventMsg(process.pid)));
644
- (commitResolution as any).waitingForUserChange = true; // only need to send one signal per transaction
645
- }
651
+ if (commitResolution && event[USER_ROLE_WRITE]) signalUserChangeOnCommit(commitResolution);
646
652
 
647
653
  if (event.onCommit) {
648
654
  if (txnInProgress) {
@@ -2058,7 +2064,10 @@ export function makeTable(options) {
2058
2064
  // getRange yields ascending by audit-log key, so the first entry is the oldest retained.
2059
2065
  // Mirror replicationConnection's retention check and the cleanup key basis (localTime ??
2060
2066
  // version). Fall back to the nominal time-based purge floor when the log is empty/unavailable.
2061
- for (const entry of auditStore.getRange({ start: 1, log: options?.nodeId })) {
2067
+ for (const entry of auditStore.getRange({
2068
+ start: 1,
2069
+ log: auditStore.logFor(options?.nodeId, options?.viaNodeId).name,
2070
+ })) {
2062
2071
  oldestRetainedAuditTime = entry.localTime ?? entry.version;
2063
2072
  break;
2064
2073
  }
@@ -2082,7 +2091,7 @@ export function makeTable(options) {
2082
2091
  // A recommit of the same transaction survived that skip only because the old write batch
2083
2092
  // still carried the put; a fresh-transaction replay (ERR_TRY_AGAIN) would drop the write.
2084
2093
  if (isRocksDB && !stagedOwnAuditEntry && dedupVersionCouldBeRetained(txnTime)) {
2085
- const priorAudit = auditStore.get(txnTime, tableId, id, options?.nodeId);
2094
+ const priorAudit = auditStore.get(txnTime, tableId, id, options?.nodeId, options?.viaNodeId);
2086
2095
  if (
2087
2096
  priorAudit &&
2088
2097
  priorAudit.version === txnTime &&
@@ -2146,7 +2155,7 @@ export function makeTable(options) {
2146
2155
  const isReDeliveredDuplicate = () => {
2147
2156
  if (stagedOwnAuditEntry) return false;
2148
2157
  if (!dedupVersionCouldBeRetained(txnTime)) return false; // pre-retention version — skip the end-of-log scan (best-effort; see above)
2149
- const duplicate = auditStore.get(txnTime, tableId, id, options?.nodeId);
2158
+ const duplicate = auditStore.get(txnTime, tableId, id, options?.nodeId, options?.viaNodeId);
2150
2159
  return (
2151
2160
  duplicate &&
2152
2161
  duplicate.version === txnTime &&
@@ -2536,11 +2545,13 @@ export function makeTable(options) {
2536
2545
  const transaction = txnForContext(context);
2537
2546
  checkValidId(id);
2538
2547
  const entry = this.#entry ?? primaryStore.getEntry(id, { transaction: transaction.getReadTxn() });
2539
-
2540
- transaction.addWrite({
2548
+ const sourceTransaction = transaction;
2549
+ const write = {
2541
2550
  key: id,
2542
2551
  store: primaryStore,
2543
2552
  entry,
2553
+ deleteNodeId: options?.nodeId ?? null,
2554
+ redelivered: false,
2544
2555
  nodeName: (context as any)?.nodeName,
2545
2556
  before:
2546
2557
  (this.constructor as any).source?.delete && !(context as any)?.source
@@ -2553,9 +2564,25 @@ export function makeTable(options) {
2553
2564
  context.lastModified = existingEntry.version;
2554
2565
  TableResource._updateResource(this, existingEntry);
2555
2566
  }
2556
- if (precedesExistingVersion(txnTime, existingEntry, options?.nodeId) < 0) {
2567
+ const precedesExisting = precedesExistingVersion(txnTime, existingEntry, options?.nodeId);
2568
+ if (precedesExisting < 0) {
2557
2569
  return;
2558
2570
  } // a newer record exists locally
2571
+ // A delete re-delivered onto the removal it already made (same version and origin) must not write
2572
+ // again: the audit entry it would append is forwarded and re-logged by every peer. Each write sees
2573
+ // the entry from before the transaction, so this holds only when every write to the key in the
2574
+ // transaction is this origin's delete. A retry round reads back this write's own staged removal, so
2575
+ // it repeats the first round's decision instead.
2576
+ const redelivered = retry
2577
+ ? write.redelivered
2578
+ : precedesExisting === 0 &&
2579
+ existingEntry?.version === txnTime &&
2580
+ (existingEntry.nodeId ?? 0) === (options?.nodeId ?? getThisNodeId(auditStore) ?? 0) &&
2581
+ existingRecord == null &&
2582
+ !(existingEntry.metadataFlags & INVALIDATED) &&
2583
+ onlyDeletesFrom(sourceTransaction, id, write.deleteNodeId);
2584
+ write.redelivered = redelivered;
2585
+ if (redelivered) return;
2559
2586
  updateIndices(id, existingRecord, null, transaction && { transaction });
2560
2587
  if (audit || trackDeletes) {
2561
2588
  updateRecord(
@@ -2579,7 +2606,8 @@ export function makeTable(options) {
2579
2606
  removeEntry(primaryStore, existingEntry);
2580
2607
  }
2581
2608
  },
2582
- } as any);
2609
+ } as any;
2610
+ transaction.addWrite(write);
2583
2611
  return true;
2584
2612
  }
2585
2613
 
@@ -4747,6 +4775,24 @@ export function makeTable(options) {
4747
4775
  return ids;
4748
4776
  }
4749
4777
 
4778
+ /**
4779
+ * Whether every write to `key` in the transaction is a delete from origin `deleteNodeId`. The index of
4780
+ * the transaction's writes is extended as writes are added, so a transaction's checks cost O(writes).
4781
+ */
4782
+ function onlyDeletesFrom(transaction: any, key: Id, deleteNodeId: number | null): boolean {
4783
+ const writes = transaction.writes;
4784
+ let index = transaction.deleteOriginsByKey;
4785
+ if (index?.writes !== writes) transaction.deleteOriginsByKey = index = { writes, scanned: 0, origins: new Map() };
4786
+ for (; index.scanned < writes.length; index.scanned++) {
4787
+ const other = writes[index.scanned];
4788
+ if (!other || other.store !== primaryStore) continue;
4789
+ const origin = other.deleteNodeId === undefined ? MIXED_WRITES : other.deleteNodeId;
4790
+ const prior = index.origins.get(other.key);
4791
+ index.origins.set(other.key, prior === undefined || prior === origin ? origin : MIXED_WRITES);
4792
+ }
4793
+ return index.origins.get(key) === deleteNodeId;
4794
+ }
4795
+
4750
4796
  function precedesExistingVersion(txnTime: number, existingEntry: Partial<Entry>, nodeId?: number): number {
4751
4797
  if (nodeId === undefined) {
4752
4798
  nodeId = getThisNodeId(auditStore);
@@ -75,8 +75,9 @@ export function replayLogs(rootStore: RocksDatabase, tables: any): Promise<void>
75
75
  tableById.set(table.tableId, table);
76
76
  }
77
77
  // replay all the logs
78
- let transaction: DatabaseTransaction;
78
+ let transaction: DatabaseTransaction | undefined;
79
79
  let lastTimestamp = 0;
80
+ let openCommitEnded = false;
80
81
  let writes = 0;
81
82
  let skipped = 0;
82
83
  // Track forward progress so a backlog of unwritable entries can't grind the boot thread
@@ -110,8 +111,27 @@ export function replayLogs(rootStore: RocksDatabase, tables: any): Promise<void>
110
111
  originatingOperation,
111
112
  username,
112
113
  extendedType,
114
+ endTxn,
113
115
  } = auditRecord;
114
116
  try {
117
+ // A replay transaction is one native commit ("Boot replay transactions" in DESIGN.md).
118
+ if (transaction && (openCommitEnded || lastTimestamp !== version)) {
119
+ const ending = transaction;
120
+ transaction = undefined;
121
+ try {
122
+ ending.directCommitSync();
123
+ } catch (error) {
124
+ logger.error('Error committing replay transaction', error);
125
+ }
126
+ // The wall-clock budget (harper#1316) is checked only here, between native commits with
127
+ // nothing staged, so aborting never tears a commit in half.
128
+ if (shouldAbortSlowReplay(performance.now() - replayStartTime, replayTimeoutMs)) {
129
+ logger.fatal(
130
+ `Aborting transaction-log replay in ${(rootStore as any).databaseName} database: replay has exceeded the wall-clock time limit (${writes} written, ${skipped} skipped). The transaction log contains a pathologically deep out-of-order write history that is too expensive to reconcile during boot (harper#1316). Re-clone this node from a healthy leader to recover the unreplayed data.`
131
+ );
132
+ break;
133
+ }
134
+ }
115
135
  if (classifyAuditEntryForReplay(extendedType, tableId, true) === 'corrupt-header') {
116
136
  skipped++;
117
137
  noProgressRun++;
@@ -165,28 +185,9 @@ export function replayLogs(rootStore: RocksDatabase, tables: any): Promise<void>
165
185
  warnedReplayHappening = true;
166
186
  console.warn('Harper was not properly shutdown, replaying transaction logs to synchronize database');
167
187
  }
168
- if (lastTimestamp !== version) {
188
+ if (!transaction) {
169
189
  lastTimestamp = version;
170
- try {
171
- // commit the last transaction since we are starting a new one
172
- transaction?.directCommitSync();
173
- } catch (error) {
174
- logger.error('Error committing replay transaction', error);
175
- }
176
- // Abort if replay has exceeded the total wall-clock budget even while making progress
177
- // (harper#1316, facet a). shouldAbortStalledReplay resets its counters on every write,
178
- // so a slow-but-progressing replay (deep out-of-order audit chain walk per entry) can
179
- // peg the boot thread indefinitely without tripping it. Checked only here, at a version
180
- // boundary: the prior version's transaction was just committed in full and the new one
181
- // is not yet staged, so aborting never tears a same-version (same source-transaction)
182
- // write batch in half. Re-clone to recover the unreplayed remainder.
183
- if (shouldAbortSlowReplay(performance.now() - replayStartTime, replayTimeoutMs)) {
184
- logger.fatal(
185
- `Aborting transaction-log replay in ${(rootStore as any).databaseName} database: replay has exceeded the wall-clock time limit (${writes} written, ${skipped} skipped). The transaction log contains a pathologically deep out-of-order write history that is too expensive to reconcile during boot (harper#1316). Re-clone this node from a healthy leader to recover the unreplayed data.`
186
- );
187
- transaction = undefined as any; // already committed above; nothing staged for the new version
188
- break;
189
- }
190
+ openCommitEnded = false;
190
191
  transaction = new DatabaseTransaction();
191
192
  transaction.db = primaryStore;
192
193
  transaction.timestamp = version;
@@ -280,6 +281,8 @@ export function replayLogs(rootStore: RocksDatabase, tables: any): Promise<void>
280
281
  logger.error(`Error writing from replay of log`, err, {
281
282
  version,
282
283
  });
284
+ } finally {
285
+ if (endTxn) openCommitEnded = true;
283
286
  }
284
287
  }
285
288
  try {
package/security/user.ts CHANGED
@@ -105,6 +105,7 @@ import * as password from '../utility/password.ts';
105
105
  import { server } from '../server/Server.ts';
106
106
  import * as terms from '../utility/hdbTerms.ts';
107
107
  import { expandOperationsPerms } from '../utility/operationPermissions.ts';
108
+ import { coalesceRefresh } from '../utility/coalesceRefresh.ts';
108
109
 
109
110
  server.getUser = (username: string, password?: string | null): Promise<User> => {
110
111
  return findAndValidateUser(username, password, password != null);
@@ -371,9 +372,13 @@ function cacheExpandedOperationsPerms(userRole: UserRole) {
371
372
  userRole.permission._expandedOperations = expandOperationsPerms(userRole.permission.operations);
372
373
  }
373
374
 
375
+ const refreshUsersWithRolesCache = coalesceRefresh(async () => {
376
+ usersWithRolesMap = await listUsers();
377
+ });
378
+
374
379
  async function setUsersWithRolesCache(cache = undefined) {
375
380
  if (cache) usersWithRolesMap = cache;
376
- else usersWithRolesMap = await listUsers();
381
+ else await refreshUsersWithRolesCache();
377
382
  }
378
383
 
379
384
  async function getUsersWithRolesCache() {