@ibgib/core-gib 0.1.53 → 0.1.55

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 (189) hide show
  1. package/CHANGELOG.md +16 -2
  2. package/README.md +12 -15
  3. package/dist/keystone/aggregate-details.respec.d.mts +2 -0
  4. package/dist/keystone/aggregate-details.respec.d.mts.map +1 -0
  5. package/dist/keystone/aggregate-details.respec.mjs +118 -0
  6. package/dist/keystone/aggregate-details.respec.mjs.map +1 -0
  7. package/dist/keystone/keystone-constants.d.mts +5 -0
  8. package/dist/keystone/keystone-constants.d.mts.map +1 -1
  9. package/dist/keystone/keystone-constants.mjs +6 -1
  10. package/dist/keystone/keystone-constants.mjs.map +1 -1
  11. package/dist/keystone/keystone-helpers.d.mts +7 -1
  12. package/dist/keystone/keystone-helpers.d.mts.map +1 -1
  13. package/dist/keystone/keystone-helpers.mjs +5 -2
  14. package/dist/keystone/keystone-helpers.mjs.map +1 -1
  15. package/dist/keystone/keystone-service-v1.d.mts +51 -0
  16. package/dist/keystone/keystone-service-v1.d.mts.map +1 -1
  17. package/dist/keystone/keystone-service-v1.mjs +176 -9
  18. package/dist/keystone/keystone-service-v1.mjs.map +1 -1
  19. package/dist/keystone/keystone-service-v1.respec.mjs +40 -98
  20. package/dist/keystone/keystone-service-v1.respec.mjs.map +1 -1
  21. package/dist/keystone/keystone-types.d.mts +5 -0
  22. package/dist/keystone/keystone-types.d.mts.map +1 -1
  23. package/dist/sync/graft-info/graft-info-helpers.respec.mjs +8 -8
  24. package/dist/sync/graft-info/graft-info-helpers.respec.mjs.map +1 -1
  25. package/dist/sync/sync-conflict-adv-multitimelines.respec.mjs +26 -30
  26. package/dist/sync/sync-conflict-adv-multitimelines.respec.mjs.map +1 -1
  27. package/dist/sync/sync-conflict-basic-divergence.respec.mjs +7 -8
  28. package/dist/sync/sync-conflict-basic-divergence.respec.mjs.map +1 -1
  29. package/dist/sync/sync-conflict-basic-multitimelines.respec.mjs +10 -11
  30. package/dist/sync/sync-conflict-basic-multitimelines.respec.mjs.map +1 -1
  31. package/dist/sync/sync-conflict-text-merge.respec.mjs +30 -33
  32. package/dist/sync/sync-conflict-text-merge.respec.mjs.map +1 -1
  33. package/dist/sync/sync-constants.d.mts +1 -56
  34. package/dist/sync/sync-constants.d.mts.map +1 -1
  35. package/dist/sync/sync-constants.mjs +2 -59
  36. package/dist/sync/sync-constants.mjs.map +1 -1
  37. package/dist/sync/sync-helpers.d.mts +0 -1
  38. package/dist/sync/sync-helpers.d.mts.map +1 -1
  39. package/dist/sync/sync-helpers.mjs +1 -6
  40. package/dist/sync/sync-helpers.mjs.map +1 -1
  41. package/dist/sync/sync-innerspace-constants.respec.mjs +5 -9
  42. package/dist/sync/sync-innerspace-constants.respec.mjs.map +1 -1
  43. package/dist/sync/sync-innerspace-deep-updates.respec.mjs +6 -7
  44. package/dist/sync/sync-innerspace-deep-updates.respec.mjs.map +1 -1
  45. package/dist/sync/sync-innerspace-dest-ahead-withid.respec.mjs +22 -22
  46. package/dist/sync/sync-innerspace-dest-ahead-withid.respec.mjs.map +1 -1
  47. package/dist/sync/sync-innerspace-dest-ahead.respec.mjs +8 -9
  48. package/dist/sync/sync-innerspace-dest-ahead.respec.mjs.map +1 -1
  49. package/dist/sync/sync-innerspace-multiple-timelines.respec.mjs +6 -7
  50. package/dist/sync/sync-innerspace-multiple-timelines.respec.mjs.map +1 -1
  51. package/dist/sync/sync-innerspace-partial-update.respec.mjs +7 -8
  52. package/dist/sync/sync-innerspace-partial-update.respec.mjs.map +1 -1
  53. package/dist/sync/sync-innerspace.respec.mjs +8 -11
  54. package/dist/sync/sync-innerspace.respec.mjs.map +1 -1
  55. package/dist/sync/sync-peer/sync-peer-http-receiver/sync-http-node-adapter.mjs +10 -5
  56. package/dist/sync/sync-peer/sync-peer-http-receiver/sync-http-node-adapter.mjs.map +1 -1
  57. package/dist/sync/sync-peer/sync-peer-http-receiver/sync-peer-http-receiver-types.d.mts +3 -1
  58. package/dist/sync/sync-peer/sync-peer-http-receiver/sync-peer-http-receiver-types.d.mts.map +1 -1
  59. package/dist/sync/sync-peer/sync-peer-http-receiver/sync-peer-http-receiver-v1.d.mts +4 -2
  60. package/dist/sync/sync-peer/sync-peer-http-receiver/sync-peer-http-receiver-v1.d.mts.map +1 -1
  61. package/dist/sync/sync-peer/sync-peer-http-receiver/sync-peer-http-receiver-v1.mjs +37 -6
  62. package/dist/sync/sync-peer/sync-peer-http-receiver/sync-peer-http-receiver-v1.mjs.map +1 -1
  63. package/dist/sync/sync-peer/sync-peer-http-sender/sync-peer-http-sender-types.d.mts +3 -1
  64. package/dist/sync/sync-peer/sync-peer-http-sender/sync-peer-http-sender-types.d.mts.map +1 -1
  65. package/dist/sync/sync-peer/sync-peer-http-sender/sync-peer-http-sender-v1.d.mts +4 -2
  66. package/dist/sync/sync-peer/sync-peer-http-sender/sync-peer-http-sender-v1.d.mts.map +1 -1
  67. package/dist/sync/sync-peer/sync-peer-http-sender/sync-peer-http-sender-v1.mjs +37 -0
  68. package/dist/sync/sync-peer/sync-peer-http-sender/sync-peer-http-sender-v1.mjs.map +1 -1
  69. package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-types.d.mts +7 -1
  70. package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-types.d.mts.map +1 -1
  71. package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.d.mts +10 -2
  72. package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.d.mts.map +1 -1
  73. package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.mjs +50 -38
  74. package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.mjs.map +1 -1
  75. package/dist/sync/sync-peer/sync-peer-types.d.mts +21 -5
  76. package/dist/sync/sync-peer/sync-peer-types.d.mts.map +1 -1
  77. package/dist/sync/sync-peer/sync-peer-v1.d.mts +30 -5
  78. package/dist/sync/sync-peer/sync-peer-v1.d.mts.map +1 -1
  79. package/dist/sync/sync-peer/sync-peer-v1.mjs +41 -25
  80. package/dist/sync/sync-peer/sync-peer-v1.mjs.map +1 -1
  81. package/dist/sync/sync-saga-context/sync-saga-context-helpers.d.mts +2 -11
  82. package/dist/sync/sync-saga-context/sync-saga-context-helpers.d.mts.map +1 -1
  83. package/dist/sync/sync-saga-context/sync-saga-context-helpers.mjs +7 -51
  84. package/dist/sync/sync-saga-context/sync-saga-context-helpers.mjs.map +1 -1
  85. package/dist/sync/sync-saga-context/sync-saga-context-types.d.mts +1 -47
  86. package/dist/sync/sync-saga-context/sync-saga-context-types.d.mts.map +1 -1
  87. package/dist/sync/sync-saga-coordinator.d.mts +6 -58
  88. package/dist/sync/sync-saga-coordinator.d.mts.map +1 -1
  89. package/dist/sync/sync-saga-coordinator.mjs +23 -425
  90. package/dist/sync/sync-saga-coordinator.mjs.map +1 -1
  91. package/dist/sync/sync-saga-message/sync-saga-message-types.d.mts +2 -2
  92. package/dist/sync/sync-saga-message/sync-saga-message-types.d.mts.map +1 -1
  93. package/dist/sync/sync-types.d.mts +2 -19
  94. package/dist/sync/sync-types.d.mts.map +1 -1
  95. package/dist/sync/sync-types.mjs.map +1 -1
  96. package/dist/test/mock-space.mjs +1 -1
  97. package/dist/test/mock-space.mjs.map +1 -1
  98. package/dist/test-helpers.d.mts +0 -6
  99. package/dist/test-helpers.d.mts.map +1 -1
  100. package/dist/test-helpers.mjs +2 -25
  101. package/dist/test-helpers.mjs.map +1 -1
  102. package/package.json +10 -34
  103. package/src/keystone/aggregate-details.respec.mts +137 -0
  104. package/src/keystone/docs/architecture.md +16 -0
  105. package/src/keystone/keystone-constants.mts +6 -1
  106. package/src/keystone/keystone-helpers.mts +9 -1
  107. package/src/keystone/keystone-service-v1.mts +216 -8
  108. package/src/keystone/keystone-service-v1.respec.mts +39 -103
  109. package/src/keystone/keystone-types.mts +6 -0
  110. package/src/sync/README.md +18 -0
  111. package/src/sync/docs/architecture.md +21 -0
  112. package/src/sync/graft-info/graft-info-helpers.respec.mts +7 -7
  113. package/src/sync/sync-conflict-adv-multitimelines.respec.mts +25 -29
  114. package/src/sync/sync-conflict-basic-divergence.respec.mts +6 -7
  115. package/src/sync/sync-conflict-basic-multitimelines.respec.mts +9 -10
  116. package/src/sync/sync-conflict-text-merge.respec.mts +29 -32
  117. package/src/sync/sync-constants.mts +2 -62
  118. package/src/sync/sync-helpers.mts +1 -8
  119. package/src/sync/sync-id-testlog.txt +421 -0
  120. package/src/sync/sync-innerspace-constants.respec.mts +4 -8
  121. package/src/sync/sync-innerspace-deep-updates.respec.mts +5 -6
  122. package/src/sync/sync-innerspace-dest-ahead-withid.respec.mts +23 -25
  123. package/src/sync/sync-innerspace-dest-ahead.respec.mts +7 -8
  124. package/src/sync/sync-innerspace-multiple-timelines.respec.mts +5 -6
  125. package/src/sync/sync-innerspace-partial-update.respec.mts +6 -7
  126. package/src/sync/sync-innerspace.respec.mts +7 -10
  127. package/src/sync/sync-peer/sync-peer-http-receiver/sync-http-node-adapter.mts +5 -5
  128. package/src/sync/sync-peer/sync-peer-http-receiver/sync-peer-http-receiver-types.mts +5 -1
  129. package/src/sync/sync-peer/sync-peer-http-receiver/sync-peer-http-receiver-v1.mts +30 -9
  130. package/src/sync/sync-peer/sync-peer-http-sender/sync-peer-http-sender-types.mts +3 -1
  131. package/src/sync/sync-peer/sync-peer-http-sender/sync-peer-http-sender-v1.mts +29 -2
  132. package/src/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-types.mts +7 -1
  133. package/src/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.mts +51 -38
  134. package/src/sync/sync-peer/sync-peer-types.mts +23 -6
  135. package/src/sync/sync-peer/sync-peer-v1.mts +68 -28
  136. package/src/sync/sync-saga-context/sync-saga-context-helpers.mts +6 -66
  137. package/src/sync/sync-saga-context/sync-saga-context-types.mts +1 -48
  138. package/src/sync/sync-saga-coordinator.mts +12 -552
  139. package/src/sync/sync-saga-message/sync-saga-message-types.mts +2 -3
  140. package/src/sync/sync-types.mts +2 -22
  141. package/src/sync/unused-identity-backup.mts.md +311 -0
  142. package/src/test/mock-space.mts +1 -1
  143. package/src/test-helpers.mts +1 -26
  144. package/test_output.log +0 -0
  145. package/test_output_utf8.txt +398 -0
  146. package/.vscode/core-gib-snippets.code-snippets +0 -293
  147. package/.vscode/launch.json +0 -40
  148. package/.vscode/settings.json +0 -58
  149. package/.vscode/tasks.json +0 -37
  150. package/dist/sync/sync-peer/sync-peer-http.respec.d.mts +0 -2
  151. package/dist/sync/sync-peer/sync-peer-http.respec.d.mts.map +0 -1
  152. package/dist/sync/sync-peer/sync-peer-http.respec.mjs +0 -340
  153. package/dist/sync/sync-peer/sync-peer-http.respec.mjs.map +0 -1
  154. package/dist/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-helper.d.mts +0 -42
  155. package/dist/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-helper.d.mts.map +0 -1
  156. package/dist/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-helper.mjs +0 -312
  157. package/dist/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-helper.mjs.map +0 -1
  158. package/dist/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-types.d.mts +0 -84
  159. package/dist/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-types.d.mts.map +0 -1
  160. package/dist/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-types.mjs +0 -65
  161. package/dist/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-types.mjs.map +0 -1
  162. package/dist/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-v1.d.mts +0 -73
  163. package/dist/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-v1.d.mts.map +0 -1
  164. package/dist/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-v1.mjs +0 -667
  165. package/dist/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-v1.mjs.map +0 -1
  166. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_createAndInit.node-filesystem-space-v1.respec.d.mts +0 -2
  167. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_createAndInit.node-filesystem-space-v1.respec.d.mts.map +0 -1
  168. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_createAndInit.node-filesystem-space-v1.respec.mjs +0 -67
  169. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_createAndInit.node-filesystem-space-v1.respec.mjs.map +0 -1
  170. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_persistTransformResult.node-filesystem-space-v1.respec.d.mts +0 -2
  171. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_persistTransformResult.node-filesystem-space-v1.respec.d.mts.map +0 -1
  172. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_persistTransformResult.node-filesystem-space-v1.respec.mjs +0 -67
  173. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_persistTransformResult.node-filesystem-space-v1.respec.mjs.map +0 -1
  174. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_putGetDelete.node-filesystem-space-v1.respec.d.mts +0 -2
  175. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_putGetDelete.node-filesystem-space-v1.respec.d.mts.map +0 -1
  176. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_putGetDelete.node-filesystem-space-v1.respec.mjs +0 -68
  177. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_putGetDelete.node-filesystem-space-v1.respec.mjs.map +0 -1
  178. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_registerNewIbGib_GetLatest.node-filesystem-space-v1.respec.d.mts +0 -2
  179. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_registerNewIbGib_GetLatest.node-filesystem-space-v1.respec.d.mts.map +0 -1
  180. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_registerNewIbGib_GetLatest.node-filesystem-space-v1.respec.mjs +0 -69
  181. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_registerNewIbGib_GetLatest.node-filesystem-space-v1.respec.mjs.map +0 -1
  182. package/src/sync/sync-peer/sync-peer-http.respec.mts +0 -396
  183. package/src/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-helper.mts +0 -298
  184. package/src/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-types.mts +0 -150
  185. package/src/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-v1.mts +0 -666
  186. package/src/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_createAndInit.node-filesystem-space-v1.respec.mts +0 -87
  187. package/src/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_persistTransformResult.node-filesystem-space-v1.respec.mts +0 -88
  188. package/src/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_putGetDelete.node-filesystem-space-v1.respec.mts +0 -88
  189. package/src/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_registerNewIbGib_GetLatest.node-filesystem-space-v1.respec.mts +0 -90
@@ -1 +1 @@
1
- {"version":3,"file":"test-helpers.mjs","sourceRoot":"","sources":["../src/test-helpers.mts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,iDAAiD,CAAC;AAE3F,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAExE,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAkB,YAAY,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC7F,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAK5F,MAAM,OAAO,GAAG,gBAAgB,CAAC;AAEjC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAmC,EAC1E,EAAE,EACF,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,WAAW,GAOd;IACG,MAAM,EAAE,GAAG,IAAI,qBAAqB,CAAC,IAAI,GAAG,CAAC;IAC7C,IAAI,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,oDAAoD,CAAC,CAAC;QAAC,CAAC;QAExF,IAAI,CAAC,EAAE,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QAAC,CAAC;QAElF,+DAA+D;QAC/D,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC;QAElC,IAAI,IAAI,EAAE,CAAC;YACP,IAAI,CAAC,IAAI,EAAE,CAAC;gBAAC,IAAI,GAAG,EAAW,CAAC;YAAC,CAAC;YAClC,IAAI,CAAC,IAAI,GAAG,MAAM,OAAO,EAAE,CAAC;QAChC,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC;YACjC,iBAAiB,EAAE,IAAI;YACvB,EAAE;YACF,IAAI;YACJ,MAAM;YACN,IAAI;SACP,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjD,MAAM,KAAK,CAAC;IAChB,CAAC;YAAS,CAAC;QACP,IAAI,OAAO,EAAE,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAAC,CAAC;IACpD,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAmC,EACjF,EAAE,EACF,IAAI,EACJ,KAAK,GAKR;IACG,MAAM,EAAE,GAAG,IAAI,4BAA4B,CAAC,IAAI,GAAG,CAAC;IACpD,IAAI,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,oDAAoD,CAAC,CAAC;QAAC,CAAC;QAExF,8DAA8D;QAC9D,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC;QAClC,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAEvD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAQ;YAC5C,WAAW;YACX,EAAE;YACF,IAAI;YACJ,MAAM,EAAE,SAAS;YACjB,gDAAgD;YAChD,GAAG,EAAE,IAAI;YACT,QAAQ,EAAE,IAAI;YACd,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;SACvC,CAAC,CAAC;QAEH,gEAAgE;QAChE,MAAM,sBAAsB,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9D,MAAM,gBAAgB,CAAC;YACnB,KAAK,EAAE,MAAM,CAAC,QAAQ;YACtB,KAAK;YACL;;;eAGG;YACH,WAAW,EAAE,SAAS;SACzB,CAAC,CAAC;QAEH,uEAAuE;QACvE,4CAA4C;QAE5C,OAAO,MAAM,CAAC,QAA2B,CAAC;IAC9C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjD,MAAM,KAAK,CAAC;IAChB,CAAC;YAAS,CAAC;QACP,IAAI,OAAO,EAAE,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAAC,CAAC;IACpD,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B;IAC9C,MAAM,mBAAoB,SAAQ,kBAAkB;QAChD,KAAK,CAAC,WAAW;YACb,0BAA0B;YAC1B,oFAAoF;YACpF,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC;gBAClC,WAAW,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;gBACrD,EAAE,EAAE,UAAU;gBACd,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,OAAO,EAAE,EAAE;gBAC/B,GAAG,EAAE,IAAI;aACZ,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,QAAQ,CAAC;QACxB,CAAC;QACD,oDAAoD;QACpD,KAAK,CAAC,IAAI,CAAC,IAAS,IAAkB,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,kBAAkB,CAAC,CAAC;QACtF,KAAK,CAAC,MAAM,CAAC,IAAS,IAAkB,OAAO,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC;KACvE;IACD,OAAO,IAAI,mBAAmB,EAAmC,CAAC;AACtE,CAAC;AA+BD;;GAEG;AACH,MAAM,qBAAqB,GAAG,UAAU,CAAC;AACzC;;GAEG;AACH,MAAM,uBAAuB,GAAG,UAAU,CAAC;AAE3C;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,EAAU;IAClC,MAAM,EAAE,GAAG,IAAI,WAAW,CAAC,IAAI,GAAG,CAAC;IACnC,IAAI,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,oDAAoD,CAAC,CAAC;QAAC,CAAC;QAExF,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE5B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,wCAAwC;YACxC,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;YAC1F,WAAW;YACX,sBAAsB;YACtB,kBAAkB;YAClB,uBAAuB;YACvB,oBAAoB;YACpB,yBAAyB;YACzB,gDAAgD;YAChD,KAAK;QACT,CAAC;QAED,MAAM,CACF,IAAI,EAAE,oBAAoB;QAC1B,MAAM,EACN,QAAQ,EACR,6BAA6B,EAChC,GAAG,KAAK,CAAC;QAEV,wDAAwD;QAExD,+BAA+B;QAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QAAC,CAAC;QACnG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,uBAAuB,MAAM,2CAA2C,qBAAqB,CAAC,MAAM,wCAAwC,CAAC,CAAC;QAAC,CAAC;QAC3M,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;QAAC,CAAC;QACvG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,6CAA6C,uBAAuB,CAAC,MAAM,wCAAwC,CAAC,CAAC;QAAC,CAAC;QACvN,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;QAEnE,OAAO;YACH,IAAI;YACJ,MAAM;YACN,WAAW;YACX,QAAQ;YACR,aAAa;YACb,6BAA6B;SAChC,CAAA;IAEL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjD,MAAM,KAAK,CAAC;IAChB,CAAC;YAAS,CAAC;QACP,IAAI,OAAO,EAAE,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAAC,CAAC;IACpD,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,EAClB,IAAI,EACJ,6BAA6B,GAUhC;IACG,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC;IACpC,IAAI,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,oDAAoD,CAAC,CAAC;QAAC,CAAC;QACxF,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QAElF,IAAI,EAAE,GAAG;YACL,IAAI;YACJ,IAAI;YACJ,IAAI;SACP,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEZ,IAAI,6BAA6B,EAAE,CAAC;YAChC,EAAE,IAAI,GAAG,GAAG,6BAA6B,CAAC;QAC9C,CAAC;QAED,OAAO,EAAE,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjD,MAAM,KAAK,CAAC;IAChB,CAAC;YAAS,CAAC;QACP,IAAI,OAAO,EAAE,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAAC,CAAC;IACpD,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,eAAe;IAChB,EAAE,GAAG,IAAI,eAAe,CAAC,IAAI,GAAG,CAAC;IACjC,SAAS,CAAmB;IAC5B,WAAW,CAAgB;IAC3B,SAAS,CAAgB;IACzB,WAAW,GAAG,CAAC,CAAC;IAChB,WAAW,GAAG,CAAC,CAAC;IAChB,MAAM,GAAgB,EAAE,CAAC;IACjC,IAAY,YAAY;QACpB,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;YACrB,SAAS,CAAC;IAClB,CAAC;IAAA,CAAC;IAEF,YACI,SAA2B,EAC3B,WAA0B,EAC1B,SAAwB;QAExB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,EAAE,IAAI,EAAE,WAAW,EAA0C;QAClE,MAAM,KAAK,GAAc,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,WAAW;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,IAAY;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,KAAK;QACD,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACrB,CAAC;IAED;;OAEG;IACK,QAAQ,CAAC,QAA2B;QACxC,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;IACrE,CAAC;IAGD;;;OAGG;IACK,cAAc,CAAC,EACnB,SAAS,EACT,6BAA6B,GAIhC;QACG,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC;QACrD,IAAI,CAAC;YACD,IAAI,OAAO,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,oDAAoD,CAAC,CAAC;YAAC,CAAC;YAExF,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;YAEtF,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;gBAAC,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;YAAC,CAAC;YAE3H,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAC9C,MAAM,cAAc,GAAG,WAAW,KAAK,kBAAkB,CAAC;YAE1D;;eAEG;YACH,MAAM,UAAU,GAAG,cAAc,CAAC,CAAC;gBAC/B,GAAG,MAAM,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChC,MAAM,CAAC;YACX;;eAEG;YACH,MAAM,YAAY,GAAG,GAAG,QAAQ,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;YAExD,IAAI,6BAA6B,IAAI,6BAA6B,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/E,MAAM,IAAI,KAAK,CAAC,sIAAsI,CAAC,CAAC;YAC5J,CAAC;YAED,IAAI,MAAM,GAAG,GAAG,IAAI,IAAI,UAAU,IAAI,YAAY,EAAE,CAAC;YACrD,IAAI,6BAA6B,EAAE,CAAC;gBAChC,MAAM,IAAI,GAAG,GAAG,6BAA6B,CAAC;YAClD,CAAC;YAED,OAAO,MAAM,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjD,MAAM,KAAK,CAAC;QAChB,CAAC;gBAAS,CAAC;YACP,IAAI,OAAO,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAAC,CAAC;QACpD,CAAC;IACL,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,MAAM,CAAmC,EAC3C,IAAI,EACJ,IAAI,EACJ,EAAE,EAAE,QAAQ,EACZ,IAAI,EACJ,6BAA6B,GAOhC;QACG,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,UAAU,CAAC;QAEhC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,0CAA0C,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEtC,MAAM,QAAQ,GAAG,MAAM,4BAA4B,CAAQ;YACvD,EAAE,EAAE,YAAY,CAAC,EAAE,IAAI,EAAE,6BAA6B,EAAE,CAAC;YACzD,IAAI;YACJ,KAAK;SACR,CAAC,CAAC;QAEH,MAAM,MAAM,GAAiB;YACzB,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,YAAY,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;YACvC,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,SAAS;SAC3D,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAErC,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,KAAK,CAAC,IAAI,CAAmC,EACzC,KAAK,EACL,QAAQ,EACR,EAAE,EAAE,QAAQ,EACZ,QAAQ,EACR,IAAI,EACJ,6BAA6B,GAQhC;QACG,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,QAAQ,CAAC;QAE9B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,0CAA0C,CAAC,CAAC;QACrE,CAAC;QAED,kBAAkB;QAClB,IAAI,WAA4B,CAAC;QACjC,IAAI,KAAoB,CAAC;QAEzB,IAAI,QAAQ,EAAE,CAAC;YACX,WAAW,GAAG,QAAQ,CAAC,KAAwB,CAAC;YAChD,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC3B,CAAC;aAAM,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC3B,WAAW,GAAG,KAAK,CAAC;YACpB,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,+CAA+C,CAAC,CAAC;QAC1E,CAAC;QAED,wCAAwC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC;YAC/B,SAAS,EAAE,WAAW,CAAC,EAAE;YACzB,6BAA6B;SAChC,CAAC,CAAC;QAEH,0BAA0B;QAC1B,MAAM,gBAAgB,GAAmB,EAAE,CAAC;QAE5C,IAAI,QAAQ,EAAE,CAAC;YACX,IAAI,SAAiB,CAAC;YACtB,IAAI,UAAkB,CAAC;YAEvB,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC/B,yCAAyC;gBACzC,SAAS,GAAG,QAAQ,CAAC;gBACrB,UAAU,GAAG,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACJ,gCAAgC;gBAChC,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC;gBAC1B,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC;gBAC5B,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,0BAA0B;YAClD,CAAC;YAEA,gBAAwB,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC;QACtD,CAAC;QAED,mBAAmB;QACnB,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC;YACpC,QAAQ,EAAE,WAAW;YACrB,QAAQ,EAAE;gBACN,MAAM,EAAE,MAAM;gBACd,gBAAgB;aACnB;YACD,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK;SACR,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAiB;YAC3B,IAAI,EAAE,MAAM;YACZ,EAAE,EAAE,MAAM;YACV,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;YACrF,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9G,CAAC;QAEF,MAAM,MAAM,GAAiB;YACzB,KAAK,EAAE,YAAY;YACnB,IAAI,EAAE,YAAY,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;YAC3C,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,CAAC,QAAQ,CAAC;YACjB,IAAI,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,MAAM,EAAE;SACtD,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAErC,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,IAAI,CAAC,EACP,QAAQ,EACR,KAAK,EACL,EAAE,EAAE,QAAQ,EACZ,YAAY,EACZ,SAAS,EACT,IAAI;IACJ,iCAAiC;MASpC;QACG,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,QAAQ,CAAC;QAE9B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,0CAA0C,CAAC,CAAC;QACrE,CAAC;QAED,kBAAkB;QAClB,IAAI,WAAqB,CAAC;QAC1B,IAAI,KAAoB,CAAC;QAEzB,IAAI,QAAQ,EAAE,CAAC;YACX,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC7B,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC3B,CAAC;aAAM,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC3B,WAAW,GAAG,KAAK,CAAC;YACpB,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,+CAA+C,CAAC,CAAC;QAC1E,CAAC;QAED,wCAAwC;QACxC,sEAAsE;QACtE,mEAAmE;QACnE,QAAQ;QACR,kGAAkG;QAElG,mBAAmB;QACnB,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC;YACxC,QAAQ,EAAE,WAAW;YACrB,UAAU,EAAE,CAAC;oBACT,SAAS;oBACT,MAAM,EAAE,YAAY;iBACvB,CAAC;YACF,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK;SACR,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAiB;YAC3B,IAAI,EAAE,MAAM;YACZ,EAAE,EAAE,WAAW,CAAC,EAAE;YAClB,SAAS;YACT,WAAW,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;SACjE,CAAC;QAEF,MAAM,MAAM,GAAiB;YACzB,KAAK,EAAE,YAAY;YACnB,IAAI,EAAE,YAAY,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;YAC3C,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,CAAC,QAAQ,CAAC;YACjB,IAAI,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,aAAa,WAAW,CAAC,EAAE,EAAE;SACvE,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAErC,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ"}
1
+ {"version":3,"file":"test-helpers.mjs","sourceRoot":"","sources":["../src/test-helpers.mts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibgib/core-gib",
3
- "version": "0.1.53",
3
+ "version": "0.1.55",
4
4
  "description": "ibgib core functionality, including base architecture for witnesses, spaces, apps, robbots, etc., as well as shared utility functions. Node v19+ needed for heavily-used isomorphic webcrypto hashing consumed in both node and browsers.",
5
5
  "funding": {
6
6
  "type": "individual",
@@ -8,37 +8,13 @@
8
8
  },
9
9
  "main": "dist/index.mjs",
10
10
  "scripts": {
11
- "clean": "node ../../node_modules/@ibgib/helper-gib/tools/clean.js ./dist",
12
- "build": "npm run clean && tsc -b tsconfig.json --force",
13
- "build:test": "npm run clean && tsc -b tsconfig.test.json --force",
14
- "build:test:noclean": "tsc -b tsconfig.test.json --force",
15
- "build:link": "npm uninstall --global @ibgib/core-gib && npm ls --global --link=true && npm link",
16
- "prebuild:link": "npm run build && npm ls --global --link=true",
17
- "postbuild:link": "npm ls --global --link=true",
18
- "man:build:link": "echo 'builds and relinks this package AFTER first removing the global package. Otherwise will get a permission denied error after build when attempting to use the ibgib cmd from commandline.'",
19
- "test": "npm run test:both",
20
- "test:agent": "npm run build:test && npm run test:node:nobuild",
21
- "test:debug": "npm run build:test && node --inspect-brk dist/respec-gib.node.mjs",
22
- "test:debug:nobuild": "node --inspect-brk dist/respec-gib.node.mjs",
23
- "test:both": "npm run build:test && npm run test:node:nobuild && npm run test:browser:nobuild",
24
- "man:test:both": "use this if you want to test in both node and browser contexts",
25
- "pretest:node": "npm run build:test",
26
- "test:node": "node dist/respec-gib.node.mjs --inspect",
27
- "man:test:node": "use this if you want to build+test in node",
28
- "test:node:nobuild": "node dist/respec-gib.node.mjs --inspect",
29
- "man:test:node:nobuild": "use this if you want to test in node but its already built",
30
- "test:browser": "npm run build:test && echo \"not implemented yet\"",
31
- "man:test:browser": "use this if you want to build+test only the browser context",
32
- "test:browser:nobuild": "echo \"not implemented yet\"",
33
- "man:test:browser:nobuild": "use this if you want to test only the browser context but its already built",
34
- "test:browser:serve": "npm run build:test && echo \"not implemented yet\"",
35
- "man:test:browser:serve": "use this if you want to build+test in the browser and don't want the browser to close when your done. (i.e. you're debugging)",
36
- "test:browser:serve:nobuild": "\"not implemented yet\"",
37
- "man:test:browser:serve:nobuild": "use this if you are troubleshooting existing dist output and don't want to overwrite those files. (and you're debugging in the browser)",
11
+ "//_orchestration": "~~ ORCHESTRATION (handled by @ibgib/build-gib) ~~",
12
+ "//_publish": "~~ PUBLISH ~~",
38
13
  "pack": "npm pack --pack-destination=\"./published\"",
39
- "prepare:publish": "npm run clean && npm version patch && npm run build && npm run pack",
40
- "man:prepare:publish": "use this to patch > build > pack for publishing to npm repo",
41
- "relink": "npm link @ibgib/helper-gib @ibgib/ts-gib"
14
+ "test:node:nobuild": "node dist/respec-gib.node.mjs --inspect",
15
+ "build:test": "tsc -p tsconfig.test.json",
16
+ "prepare:publish": "npm version patch && node ../../build/dist/concrete-build/build-core-gib.mjs --prod && npm run pack",
17
+ "man:prepare:publish": "use this to patch > build > pack for publishing to npm repo"
42
18
  },
43
19
  "type": "module",
44
20
  "keywords": [
@@ -50,9 +26,9 @@
50
26
  "author": "William Raiford",
51
27
  "license": "ISC",
52
28
  "dependencies": {
53
- "@ibgib/encrypt-gib": "^0.2.36",
54
- "@ibgib/helper-gib": "^0.0.35",
55
- "@ibgib/ts-gib": "^0.5.31"
29
+ "@ibgib/encrypt-gib": "^0.2.37",
30
+ "@ibgib/helper-gib": "^0.0.36",
31
+ "@ibgib/ts-gib": "^0.5.32"
56
32
  },
57
33
  "devDependencies": {},
58
34
  "engines": {
@@ -0,0 +1,137 @@
1
+ import { respecfully, iReckon, ifWeMight, ifWe } from '@ibgib/helper-gib/dist/respec-gib/respec-gib.mjs';
2
+ import { KeystoneService_V1 } from './keystone-service-v1.mjs';
3
+ import { createStandardPoolConfig } from './keystone-config-builder.mjs';
4
+ import { POOL_ID_DEFAULT, KEYSTONE_CHECKPOINT_FREQUENCY } from './keystone-constants.mjs';
5
+ import { KeystoneData_V1, KeystoneIbGib_V1, KeystoneClaim } from './keystone-types.mjs';
6
+
7
+ const sir = `[${import.meta.url}]`;
8
+
9
+ class MockMetaspace {
10
+ public storage = new Map<string, any>();
11
+ async get(args: { addr: string }) {
12
+ const ibGib = this.storage.get(args.addr);
13
+ return { success: !!ibGib, ibGibs: ibGib ? [ibGib] : [] };
14
+ }
15
+ async put(args: { ibGib: any }) {
16
+ this.storage.set(`${args.ibGib.ib}^${args.ibGib.gib}`, args.ibGib);
17
+ }
18
+ async registerNewIbGib(args: { ibGib: any }) {
19
+ await this.put(args);
20
+ }
21
+ async getLocalUserSpace() { return new MockSpace(); }
22
+ }
23
+
24
+ class MockSpace {
25
+ async put() { }
26
+ async witness() { return { data: { success: true } }; }
27
+ }
28
+
29
+ await respecfully(sir, 'Keystone State Aggregation', async () => {
30
+ const service = new KeystoneService_V1();
31
+ const metaspace = new MockMetaspace() as any;
32
+ const space = new MockSpace() as any;
33
+ const masterSecret = "AliceSecret";
34
+ const config = createStandardPoolConfig({ id: POOL_ID_DEFAULT, salt: POOL_ID_DEFAULT, size: 1000 });
35
+
36
+ await ifWe(sir, 'aggregates frameDetails correctly across multiple evolutions', async () => {
37
+ // 1. Genesis with some details
38
+ const genesis = await service.genesis({
39
+ masterSecret,
40
+ configs: [config],
41
+ metaspace,
42
+ space,
43
+ frameDetails: { profile: { name: 'Alice' } }
44
+ });
45
+
46
+ // 2. Evolve with more details
47
+ const claim: Partial<KeystoneClaim> = { target: "comment 1^gib", verb: "post" };
48
+ const frame2 = await service.sign({
49
+ latestKeystone: genesis,
50
+ masterSecret,
51
+ claim,
52
+ metaspace,
53
+ space,
54
+ frameDetails: { profile: { email: 'alice@example.com' }, lastLogin: '2026-05-01' }
55
+ });
56
+
57
+ // 3. Evolve again (no new details)
58
+ const frame3 = await service.sign({
59
+ latestKeystone: frame2,
60
+ masterSecret,
61
+ claim: { ...claim, target: "comment 2^gib" },
62
+ metaspace,
63
+ space
64
+ });
65
+
66
+ // 4. Verify aggregation
67
+ const aggregated = await service.getAggregateDetails({
68
+ latestKeystone: frame3,
69
+ metaspace,
70
+ space
71
+ });
72
+
73
+ iReckon(sir, aggregated.profile.name).willEqual('Alice');
74
+ iReckon(sir, aggregated.profile.email).willEqual('alice@example.com');
75
+ iReckon(sir, aggregated.lastLogin).willEqual('2026-05-01');
76
+ });
77
+
78
+ await ifWe(sir, 'generates a checkpoint and uses it for aggregation', async () => {
79
+ // We will force a checkpoint by evolving KEYSTONE_CHECKPOINT_FREQUENCY times.
80
+ // For testing, we might want to lower the frequency, but let's stick to the constant
81
+ // and just do a loop if it's not too large. 50 is fine for a test.
82
+
83
+ let current = await service.genesis({
84
+ masterSecret,
85
+ configs: [config],
86
+ metaspace,
87
+ space,
88
+ frameDetails: { initial: true }
89
+ });
90
+
91
+ const totalEvolutions = KEYSTONE_CHECKPOINT_FREQUENCY;
92
+ console.log(`[test] Performing ${totalEvolutions} evolutions to trigger checkpoint...`);
93
+
94
+ for (let i = 1; i <= totalEvolutions; i++) {
95
+ current = await service.sign({
96
+ latestKeystone: current,
97
+ masterSecret,
98
+ claim: { target: `item_${i}^gib`, verb: "update" },
99
+ metaspace,
100
+ space,
101
+ frameDetails: { [`step_${i}`]: true }
102
+ });
103
+ }
104
+
105
+ // The latest frame should now have a checkpointDetails
106
+ iReckon(sir, current.data.checkpointDetails).asTo('checkpoint exists').isGonnaBeTruthy();
107
+ iReckon(sir, current.data.n).willEqual(totalEvolutions);
108
+
109
+ // Aggregation should work and be fast (it stops at the checkpoint)
110
+ // We can verify it has all the steps
111
+ const aggregated = await service.getAggregateDetails({
112
+ latestKeystone: current,
113
+ metaspace,
114
+ space
115
+ });
116
+
117
+ iReckon(sir, aggregated.initial).isGonnaBeTrue();
118
+ iReckon(sir, aggregated[`step_${totalEvolutions}`]).isGonnaBeTrue();
119
+ iReckon(sir, aggregated[`step_1`]).isGonnaBeTrue();
120
+
121
+ // Verify that it actually used the checkpoint (white-box-ish)
122
+ // If we clear the previous frames from storage, getAggregateDetails should still work
123
+ // if it only goes back to the checkpoint.
124
+ // Wait, current IS the checkpoint. So it should stop immediately.
125
+
126
+ metaspace.storage.clear();
127
+ // Re-put ONLY the latest (which has the checkpoint)
128
+ await metaspace.put({ ibGib: current });
129
+
130
+ const aggregatedFromCheckpoint = await service.getAggregateDetails({
131
+ latestKeystone: current,
132
+ metaspace,
133
+ space
134
+ });
135
+ iReckon(sir, aggregatedFromCheckpoint.initial).isGonnaBeTrue();
136
+ });
137
+ });
@@ -84,3 +84,19 @@ Re-runs the Policy Engine to ensure the correct challenges were solved and verif
84
84
 
85
85
  ### 5.4 Revoke
86
86
  Consumes **ALL** challenges in the revocation pool ("Scorched Earth"). The identity can no longer evolve.
87
+
88
+ ## 6. State Management & Aggregation
89
+
90
+ ### 6.1 Incremental State (`frameDetails`)
91
+ To maintain the efficiency of the DAG, most Keystone frames only store the *diff* or "frame details" specific to that evolution (e.g., updating a profile field or adding a pool).
92
+
93
+ ### 6.2 Aggregation (`getAggregateDetails`)
94
+ The full state of a Keystone identity is reconstructed by walking back through the `past` relationship array and merging all `frameDetails` encountered.
95
+
96
+ > [!IMPORTANT]
97
+ > **Timeline Ordering**: The `past` relationship array is ordered with the **Genesis frame at index 0** and subsequent evolutions appended to the end. Therefore, the immediate ancestor is always found at `past.at(-1)`.
98
+
99
+ ### 6.3 Checkpoints (`checkpointDetails`)
100
+ To avoid O(N) walk-back performance for long-lived identities, the `KeystoneService_V1` automatically generates a **Checkpoint** every $N$ evolutions (configured via `KEYSTONE_CHECKPOINT_FREQUENCY`).
101
+
102
+ A Checkpoint stores the *full aggregated state* at that point in time. When the aggregation walker encounters a frame with `checkpointDetails`, it merges those details and **stops**, effectively capping the walk-back length.
@@ -92,5 +92,10 @@ export const KEYSTONE_CONFIG_DEFAULT_SEQUENTIAL_HIGHSECURITY = 5;
92
92
  export const KEYSTONE_CONFIG_DEFAULT_RANDOM_HIGHSECURITY = 5;
93
93
  export const KEYSTONE_CONFIG_DEFAULT_BINDING_HIGHSECURITY = 16;
94
94
  export const KEYSTONE_CONFIG_DEFAULT_REPLENISH_STRATEGY_HIGHSECURITY = KeystoneReplenishStrategy.replaceAll;
95
- export const KEYSTONE_CONFIG_DEFAULT_HASH_ALGORITHM_HIGHSECURITY = HashAlgorithm.sha_256;
95
+ export const KEYSTONE_CONFIG_DEFAULT_HASH_ALGORITHM_HIGHSECURITY = HashAlgorithm.sha_512;
96
96
  export const KEYSTONE_CONFIG_DEFAULT_HASH_ROUNDS_HIGHSECURITY = 10;
97
+ /**
98
+ * the checkpointing mechanism will do a checkpoint every [this number] of
99
+ * keystone frame evolutions.
100
+ */
101
+ export const KEYSTONE_CHECKPOINT_FREQUENCY = 50;
@@ -25,6 +25,7 @@ import { getDependencyGraph } from "../common/other/graph-helper.mjs";
25
25
  import { getIbGibsFromCache_fallbackToSpaces, getTimelinesGroupedByTjp, splitPerTjpAndOrDna } from "../common/other/ibgib-helper.mjs";
26
26
  import { IbGib_V1, IbGibData_V1, IbGibRel8ns_V1 } from "@ibgib/ts-gib/dist/V1/types.mjs";
27
27
  import { getLatestAddrs } from "../witness/space/space-helper.mjs";
28
+ import { FlatIbGibGraph } from "../common/other/graph-types.mjs";
28
29
 
29
30
  const logalot = GLOBAL_LOG_A_LOT;
30
31
 
@@ -861,6 +862,7 @@ export async function evolvePersistAndRegisterKeystone({
861
862
  if (prevData.proofs) { dataToRemove.proofs = []; }
862
863
  if (prevData.challengePools) { dataToRemove.challengePools = []; }
863
864
  if (prevData.frameDetails) { dataToRemove.frameDetails = {}; }
865
+ if (prevData.checkpointDetails) { dataToRemove.checkpointDetails = {}; }
864
866
  if (Object.keys(dataToRemove).length === 0) { dataToRemove = undefined; }
865
867
 
866
868
  const resMut8 = await mut8({
@@ -965,11 +967,17 @@ export async function createKeystoneIbGibImpl({
965
967
 
966
968
  export async function validateKeystoneGraph({
967
969
  keystoneIbGib,
970
+ dependencyGraph,
968
971
  getLatest,
969
972
  invalidIfMoreRecentKeystoneFoundInSpace,
970
973
  space,
971
974
  }: {
972
975
  keystoneIbGib: KeystoneIbGib_V1,
976
+ /**
977
+ * set this if you already have a reference to the graph. It is the caller's
978
+ * responsibility to enforce {@link getLatest}.
979
+ */
980
+ dependencyGraph?: FlatIbGibGraph,
973
981
  /**
974
982
  * if true, then this will get the latest keystone known in the incoming
975
983
  * {@link keystoneIbGib} timeline, as found in {@link space}.
@@ -1025,7 +1033,7 @@ export async function validateKeystoneGraph({
1025
1033
  }
1026
1034
  }
1027
1035
 
1028
- const dependencyGraph = await getDependencyGraph({
1036
+ dependencyGraph ??= await getDependencyGraph({
1029
1037
  ibGib: keystoneIbGib,
1030
1038
  space,
1031
1039
  });
@@ -1,4 +1,4 @@
1
- import { extractErrorMsg, } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
1
+ import { extractErrorMsg, mergeMapsOrArrays_Naive } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
2
2
  import { getIbGibAddr } from '@ibgib/ts-gib/dist/helper.mjs';
3
3
 
4
4
  import { GLOBAL_LOG_A_LOT } from '../core-constants.mjs';
@@ -7,16 +7,18 @@ import {
7
7
  KeystoneChallengePool, KeystoneReplenishStrategy, KeystoneRevocationInfo,
8
8
  } from './keystone-types.mjs';
9
9
  import { KeystoneStrategyFactory } from './strategy/keystone-strategy-factory.mjs';
10
- import { POOL_ID_REVOKE, KEYSTONE_VERB_REVOKE, KEYSTONE_VERB_MANAGE } from './keystone-constants.mjs';
10
+ import { POOL_ID_REVOKE, KEYSTONE_VERB_REVOKE, KEYSTONE_VERB_MANAGE, KEYSTONE_CHECKPOINT_FREQUENCY } from './keystone-constants.mjs';
11
11
  import {
12
12
  addToBindingMap, createKeystoneIbGibImpl, evolvePersistAndRegisterKeystone,
13
13
  generateOpaqueChallengeId, resolveTargetPool, selectChallengeIds,
14
14
  solveAndReplenish, validateKeystoneTransition,
15
+ validateGenesisKeystone, validateKeystoneGraph
15
16
  } from './keystone-helpers.mjs';
16
17
  import { IbGibSpaceAny } from '../witness/space/space-base-v1.mjs';
17
18
  import { MetaspaceService } from '../witness/space/metaspace/metaspace-types.mjs';
19
+ import { FlatIbGibGraph } from '../common/other/graph-types.mjs';
18
20
 
19
- const logalot = GLOBAL_LOG_A_LOT || true;
21
+ const logalot = GLOBAL_LOG_A_LOT;
20
22
 
21
23
  /**
22
24
  * Facade for managing Keystone Identities.
@@ -63,7 +65,7 @@ export class KeystoneService_V1 {
63
65
  });
64
66
 
65
67
  const solution = await strategy.generateSolution({
66
- poolSecret, poolId: config.salt, challengeId,
68
+ poolSecret, poolId: config.id, challengeId,
67
69
  });
68
70
  const challenge = await strategy.generateChallenge({ solution });
69
71
  challenges[challengeId] = challenge;
@@ -73,7 +75,7 @@ export class KeystoneService_V1 {
73
75
  }
74
76
 
75
77
  challengePools.push({
76
- id: config.salt,
78
+ id: config.id,
77
79
  config,
78
80
  challenges,
79
81
  bindingMap
@@ -153,7 +155,7 @@ export class KeystoneService_V1 {
153
155
  verb: claim.verb
154
156
  });
155
157
 
156
- if (logalot) { console.log(`${lc} Selected pool: ${pool.id} (size: ${Object.keys(pool.challenges).length}) (I: genuuid)`); }
158
+ if (logalot) { console.log(`${lc} Selected pool: ${pool.id} (size: ${Object.keys(pool.challenges).length}) (I: 6b26d6f4aad18380f2b3a0989b592826)`); }
157
159
 
158
160
  // 2. Calculate Costs (Select IDs)
159
161
  const idsToSolve = selectChallengeIds({
@@ -175,11 +177,27 @@ export class KeystoneService_V1 {
175
177
  });
176
178
 
177
179
  // 4. Construct New Data
180
+ const n = (prevData.n ?? 0) + 1;
181
+ let checkpointDetails: any | undefined;
182
+ if (n % KEYSTONE_CHECKPOINT_FREQUENCY === 0) {
183
+ // Generate a temporary view of the keystone as it would be in this frame
184
+ // to calculate the aggregated state.
185
+ const currentFrameView: KeystoneIbGib_V1 = {
186
+ ...latestKeystone,
187
+ data: { ...prevData, frameDetails }
188
+ };
189
+ checkpointDetails = await this.getAggregateDetails({
190
+ latestKeystone: currentFrameView,
191
+ metaspace,
192
+ space
193
+ });
194
+ }
195
+
178
196
  const newData: KeystoneData_V1 = {
179
197
  challengePools: nextPools,
180
198
  proofs: [proof],
181
199
  frameDetails,
182
- // Revocation info is undefined for a standard sign operation
200
+ checkpointDetails,
183
201
  };
184
202
 
185
203
  // 5. Commit (Evolve, Persist, Register)
@@ -223,6 +241,106 @@ export class KeystoneService_V1 {
223
241
  return errors;
224
242
  }
225
243
 
244
+ /**
245
+ * Validates a genesis keystone.
246
+ *
247
+ * @returns Array of validation error strings. Empty array means Valid.
248
+ */
249
+ async validateGenesisKeystone({
250
+ keystoneIbGib,
251
+ }: {
252
+ keystoneIbGib: KeystoneIbGib_V1;
253
+ }): Promise<string[]> {
254
+ return await validateGenesisKeystone({ keystoneIbGib });
255
+ }
256
+
257
+ /**
258
+ * Retrieves the latest keystone frame for the given address.
259
+ *
260
+ * Uses `metaspace.getLatestAddr` to find the actual tip instead of trusting
261
+ * an incoming payload's `past` rel8n.
262
+ *
263
+ * @see `ibgib-get-pattern` SKILL.md
264
+ */
265
+ async getLatestKeystone({
266
+ addr,
267
+ metaspace,
268
+ space,
269
+ }: {
270
+ addr: string;
271
+ metaspace: MetaspaceService;
272
+ space: IbGibSpaceAny;
273
+ }): Promise<KeystoneIbGib_V1> {
274
+ const lc = `${this.lc}[${this.getLatestKeystone.name}]`;
275
+ try {
276
+ if (logalot) { console.log(`${lc} starting...`); }
277
+
278
+ const latestAddr = await metaspace.getLatestAddr({ tjpAddr: addr, space });
279
+ if (!latestAddr) {
280
+ throw new Error(`could not find latest addr for ${addr}`);
281
+ }
282
+
283
+ const resGet = await metaspace.get({ addr: latestAddr, space });
284
+ if (resGet.success && resGet.ibGibs && resGet.ibGibs.length > 0) {
285
+ return resGet.ibGibs[0] as KeystoneIbGib_V1;
286
+ } else {
287
+ const resIbGib = resGet.rawResultIbGib as any;
288
+ const addrsNotFound = resIbGib?.data?.addrsNotFound ?? 'unknown';
289
+ throw new Error(`couldn't find latest keystone at ${latestAddr}. addrsNotFound: ${addrsNotFound}? resGet.errorMsg: ${resGet.errorMsg}`);
290
+ }
291
+ } catch (error) {
292
+ console.error(`${lc} ${extractErrorMsg(error)}`);
293
+ throw error;
294
+ } finally {
295
+ if (logalot) { console.log(`${lc} complete.`); }
296
+ }
297
+ }
298
+
299
+ /**
300
+ * Validates an entire keystone graph from tip to genesis.
301
+ *
302
+ * @returns Array of validation error strings. Empty array means Valid.
303
+ */
304
+ async validateKeystoneGraph({
305
+ keystoneIbGib,
306
+ dependencyGraph,
307
+ getLatest,
308
+ invalidIfMoreRecentKeystoneFoundInSpace,
309
+ space,
310
+ }: {
311
+ keystoneIbGib: KeystoneIbGib_V1,
312
+ /**
313
+ * set this if you already have a reference to the graph. It is the caller's
314
+ * responsibility to enforce {@link getLatest}.
315
+ */
316
+ dependencyGraph?: FlatIbGibGraph,
317
+ /**
318
+ * if true, then this will get the latest keystone known in the incoming
319
+ * {@link keystoneIbGib} timeline, as found in {@link space}.
320
+ */
321
+ getLatest: boolean,
322
+ invalidIfMoreRecentKeystoneFoundInSpace: boolean,
323
+ space: IbGibSpaceAny,
324
+ }): Promise<string[]> {
325
+ const lc = `${this.lc}[${this.validateKeystoneGraph.name}]`;
326
+ try {
327
+ if (logalot) { console.log(`${lc} starting... (I: 01c5cd455038c270cbf1effc1704af26)`); }
328
+
329
+ return await validateKeystoneGraph({
330
+ keystoneIbGib,
331
+ dependencyGraph,
332
+ getLatest,
333
+ invalidIfMoreRecentKeystoneFoundInSpace,
334
+ space
335
+ });
336
+ } catch (error) {
337
+ console.error(`${lc} ${extractErrorMsg(error)}`);
338
+ throw error;
339
+ } finally {
340
+ if (logalot) { console.log(`${lc} complete.`); }
341
+ }
342
+ }
343
+
226
344
  /**
227
345
  * Permanently revokes the Identity.
228
346
  *
@@ -296,11 +414,26 @@ export class KeystoneService_V1 {
296
414
  const revocationInfo: KeystoneRevocationInfo = { reason, proof };
297
415
 
298
416
  // 6. Construct New Data
417
+ const n = (prevData.n ?? 0) + 1;
418
+ let checkpointDetails: any | undefined;
419
+ if (n % KEYSTONE_CHECKPOINT_FREQUENCY === 0) {
420
+ const currentFrameView: KeystoneIbGib_V1 = {
421
+ ...latestKeystone,
422
+ data: { ...prevData, frameDetails, revocationInfo }
423
+ };
424
+ checkpointDetails = await this.getAggregateDetails({
425
+ latestKeystone: currentFrameView,
426
+ metaspace,
427
+ space
428
+ });
429
+ }
430
+
299
431
  const newData: KeystoneData_V1 = {
300
432
  challengePools: nextPools,
301
433
  proofs: [proof],
302
434
  revocationInfo,
303
- frameDetails
435
+ frameDetails,
436
+ checkpointDetails,
304
437
  };
305
438
 
306
439
  // 7. Commit
@@ -409,9 +542,24 @@ export class KeystoneService_V1 {
409
542
  const finalPools = [...replenishedExistingPools, ...newPools];
410
543
 
411
544
  // 6. Construct New Data
545
+ const n = (prevData.n ?? 0) + 1;
546
+ let checkpointDetails: any | undefined;
547
+ if (n % KEYSTONE_CHECKPOINT_FREQUENCY === 0) {
548
+ const currentFrameView: KeystoneIbGib_V1 = {
549
+ ...latestKeystone,
550
+ data: { ...prevData, challengePools: finalPools }
551
+ };
552
+ checkpointDetails = await this.getAggregateDetails({
553
+ latestKeystone: currentFrameView,
554
+ metaspace,
555
+ space
556
+ });
557
+ }
558
+
412
559
  const newData: KeystoneData_V1 = {
413
560
  challengePools: finalPools,
414
561
  proofs: [proof], // The proof authorizes the structure change
562
+ checkpointDetails,
415
563
  };
416
564
 
417
565
  // 7. Commit
@@ -430,4 +578,64 @@ export class KeystoneService_V1 {
430
578
  if (logalot) { console.log(`${lc} complete.`); }
431
579
  }
432
580
  }
581
+
582
+ /**
583
+ * Consolidates the state of a Keystone identity across its history.
584
+ * Walks back until it hits a checkpoint or genesis.
585
+ */
586
+ async getAggregateDetails({
587
+ latestKeystone,
588
+ metaspace,
589
+ space,
590
+ }: {
591
+ latestKeystone: KeystoneIbGib_V1;
592
+ metaspace: MetaspaceService;
593
+ space?: IbGibSpaceAny;
594
+ }): Promise<any> {
595
+ const lc = `${this.lc}[${this.getAggregateDetails.name}]`;
596
+ try {
597
+ let aggregated: any = {};
598
+ let current = latestKeystone;
599
+
600
+ while (current) {
601
+ const data = current.data!;
602
+
603
+ // 1. If we hit a checkpoint, merge it and STOP.
604
+ if (data.checkpointDetails) {
605
+ aggregated = mergeMapsOrArrays_Naive({
606
+ dominant: aggregated,
607
+ recessive: data.checkpointDetails
608
+ });
609
+ break;
610
+ }
611
+
612
+ // 2. Merge this frame's details
613
+ if (data.frameDetails) {
614
+ aggregated = mergeMapsOrArrays_Naive({
615
+ dominant: aggregated,
616
+ recessive: data.frameDetails
617
+ });
618
+ }
619
+
620
+ // 3. Genesis check (n=0)
621
+ if (data.n === 0) { break; }
622
+
623
+ // 4. Walk back
624
+ const past = current.rel8ns?.past;
625
+ const prevAddr = (past && past.length > 0) ? past[past.length - 1] : undefined;
626
+ if (!prevAddr) { break; }
627
+
628
+ const res = await metaspace.get({ addr: prevAddr, space });
629
+ if (!res.success || !res.ibGibs || res.ibGibs.length === 0) {
630
+ throw new Error(`Could not find previous keystone frame at ${prevAddr} (E: e3d069b22e11e550e58844889ddb5325)`);
631
+ }
632
+ current = res.ibGibs[0] as KeystoneIbGib_V1;
633
+ }
634
+
635
+ return aggregated;
636
+ } catch (error) {
637
+ console.error(`${lc} ${extractErrorMsg(error)}`);
638
+ throw error;
639
+ }
640
+ }
433
641
  }