@ibgib/core-gib 0.1.54 → 0.1.57

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 (190) hide show
  1. package/CHANGELOG.md +11 -3
  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 +2 -87
  111. package/src/sync/docs/architecture.md +26 -5
  112. package/src/sync/docs/security.md +176 -0
  113. package/src/sync/graft-info/graft-info-helpers.respec.mts +7 -7
  114. package/src/sync/sync-conflict-adv-multitimelines.respec.mts +25 -29
  115. package/src/sync/sync-conflict-basic-divergence.respec.mts +6 -7
  116. package/src/sync/sync-conflict-basic-multitimelines.respec.mts +9 -10
  117. package/src/sync/sync-conflict-text-merge.respec.mts +29 -32
  118. package/src/sync/sync-constants.mts +2 -62
  119. package/src/sync/sync-helpers.mts +1 -8
  120. package/src/sync/sync-id-testlog.txt +421 -0
  121. package/src/sync/sync-innerspace-constants.respec.mts +4 -8
  122. package/src/sync/sync-innerspace-deep-updates.respec.mts +5 -6
  123. package/src/sync/sync-innerspace-dest-ahead-withid.respec.mts +23 -25
  124. package/src/sync/sync-innerspace-dest-ahead.respec.mts +7 -8
  125. package/src/sync/sync-innerspace-multiple-timelines.respec.mts +5 -6
  126. package/src/sync/sync-innerspace-partial-update.respec.mts +6 -7
  127. package/src/sync/sync-innerspace.respec.mts +7 -10
  128. package/src/sync/sync-peer/sync-peer-http-receiver/sync-http-node-adapter.mts +5 -5
  129. package/src/sync/sync-peer/sync-peer-http-receiver/sync-peer-http-receiver-types.mts +5 -1
  130. package/src/sync/sync-peer/sync-peer-http-receiver/sync-peer-http-receiver-v1.mts +30 -9
  131. package/src/sync/sync-peer/sync-peer-http-sender/sync-peer-http-sender-types.mts +3 -1
  132. package/src/sync/sync-peer/sync-peer-http-sender/sync-peer-http-sender-v1.mts +29 -2
  133. package/src/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-types.mts +7 -1
  134. package/src/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.mts +51 -38
  135. package/src/sync/sync-peer/sync-peer-types.mts +23 -6
  136. package/src/sync/sync-peer/sync-peer-v1.mts +68 -28
  137. package/src/sync/sync-saga-context/sync-saga-context-helpers.mts +6 -66
  138. package/src/sync/sync-saga-context/sync-saga-context-types.mts +1 -48
  139. package/src/sync/sync-saga-coordinator.mts +12 -552
  140. package/src/sync/sync-saga-message/sync-saga-message-types.mts +2 -3
  141. package/src/sync/sync-types.mts +2 -22
  142. package/src/sync/unused-identity-backup.mts.md +311 -0
  143. package/src/test/mock-space.mts +1 -1
  144. package/src/test-helpers.mts +1 -26
  145. package/test_output.log +0 -0
  146. package/test_output_utf8.txt +398 -0
  147. package/.vscode/core-gib-snippets.code-snippets +0 -293
  148. package/.vscode/launch.json +0 -40
  149. package/.vscode/settings.json +0 -58
  150. package/.vscode/tasks.json +0 -37
  151. package/dist/sync/sync-peer/sync-peer-http.respec.d.mts +0 -2
  152. package/dist/sync/sync-peer/sync-peer-http.respec.d.mts.map +0 -1
  153. package/dist/sync/sync-peer/sync-peer-http.respec.mjs +0 -340
  154. package/dist/sync/sync-peer/sync-peer-http.respec.mjs.map +0 -1
  155. package/dist/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-helper.d.mts +0 -42
  156. package/dist/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-helper.d.mts.map +0 -1
  157. package/dist/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-helper.mjs +0 -312
  158. package/dist/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-helper.mjs.map +0 -1
  159. package/dist/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-types.d.mts +0 -84
  160. package/dist/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-types.d.mts.map +0 -1
  161. package/dist/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-types.mjs +0 -65
  162. package/dist/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-types.mjs.map +0 -1
  163. package/dist/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-v1.d.mts +0 -73
  164. package/dist/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-v1.d.mts.map +0 -1
  165. package/dist/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-v1.mjs +0 -667
  166. package/dist/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-v1.mjs.map +0 -1
  167. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_createAndInit.node-filesystem-space-v1.respec.d.mts +0 -2
  168. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_createAndInit.node-filesystem-space-v1.respec.d.mts.map +0 -1
  169. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_createAndInit.node-filesystem-space-v1.respec.mjs +0 -67
  170. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_createAndInit.node-filesystem-space-v1.respec.mjs.map +0 -1
  171. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_persistTransformResult.node-filesystem-space-v1.respec.d.mts +0 -2
  172. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_persistTransformResult.node-filesystem-space-v1.respec.d.mts.map +0 -1
  173. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_persistTransformResult.node-filesystem-space-v1.respec.mjs +0 -67
  174. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_persistTransformResult.node-filesystem-space-v1.respec.mjs.map +0 -1
  175. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_putGetDelete.node-filesystem-space-v1.respec.d.mts +0 -2
  176. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_putGetDelete.node-filesystem-space-v1.respec.d.mts.map +0 -1
  177. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_putGetDelete.node-filesystem-space-v1.respec.mjs +0 -68
  178. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_putGetDelete.node-filesystem-space-v1.respec.mjs.map +0 -1
  179. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_registerNewIbGib_GetLatest.node-filesystem-space-v1.respec.d.mts +0 -2
  180. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_registerNewIbGib_GetLatest.node-filesystem-space-v1.respec.d.mts.map +0 -1
  181. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_registerNewIbGib_GetLatest.node-filesystem-space-v1.respec.mjs +0 -69
  182. package/dist/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_registerNewIbGib_GetLatest.node-filesystem-space-v1.respec.mjs.map +0 -1
  183. package/src/sync/sync-peer/sync-peer-http.respec.mts +0 -396
  184. package/src/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-helper.mts +0 -298
  185. package/src/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-types.mts +0 -150
  186. package/src/witness/space/filesystem-space/node-filesystem-space/node-filesystem-space-v1.mts +0 -666
  187. package/src/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_createAndInit.node-filesystem-space-v1.respec.mts +0 -87
  188. package/src/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_persistTransformResult.node-filesystem-space-v1.respec.mts +0 -88
  189. package/src/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_putGetDelete.node-filesystem-space-v1.respec.mts +0 -88
  190. package/src/witness/space/filesystem-space/node-filesystem-space/respec/testSpace_registerNewIbGib_GetLatest.node-filesystem-space-v1.respec.mts +0 -90
@@ -1,11 +1,11 @@
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
  import { GLOBAL_LOG_A_LOT } from '../core-constants.mjs';
4
4
  import { KeystoneReplenishStrategy, } from './keystone-types.mjs';
5
5
  import { KeystoneStrategyFactory } from './strategy/keystone-strategy-factory.mjs';
6
- import { POOL_ID_REVOKE, KEYSTONE_VERB_REVOKE, KEYSTONE_VERB_MANAGE } from './keystone-constants.mjs';
7
- import { addToBindingMap, createKeystoneIbGibImpl, evolvePersistAndRegisterKeystone, generateOpaqueChallengeId, resolveTargetPool, selectChallengeIds, solveAndReplenish, validateKeystoneTransition, } from './keystone-helpers.mjs';
8
- const logalot = GLOBAL_LOG_A_LOT || true;
6
+ import { POOL_ID_REVOKE, KEYSTONE_VERB_REVOKE, KEYSTONE_VERB_MANAGE, KEYSTONE_CHECKPOINT_FREQUENCY } from './keystone-constants.mjs';
7
+ import { addToBindingMap, createKeystoneIbGibImpl, evolvePersistAndRegisterKeystone, generateOpaqueChallengeId, resolveTargetPool, selectChallengeIds, solveAndReplenish, validateKeystoneTransition, validateGenesisKeystone, validateKeystoneGraph } from './keystone-helpers.mjs';
8
+ const logalot = GLOBAL_LOG_A_LOT;
9
9
  /**
10
10
  * Facade for managing Keystone Identities.
11
11
  *
@@ -35,7 +35,7 @@ export class KeystoneService_V1 {
35
35
  salt: config.salt, timestamp, index: i
36
36
  });
37
37
  const solution = await strategy.generateSolution({
38
- poolSecret, poolId: config.salt, challengeId,
38
+ poolSecret, poolId: config.id, challengeId,
39
39
  });
40
40
  const challenge = await strategy.generateChallenge({ solution });
41
41
  challenges[challengeId] = challenge;
@@ -43,7 +43,7 @@ export class KeystoneService_V1 {
43
43
  addToBindingMap(bindingMap, challengeId);
44
44
  }
45
45
  challengePools.push({
46
- id: config.salt,
46
+ id: config.id,
47
47
  config,
48
48
  challenges,
49
49
  bindingMap
@@ -96,7 +96,7 @@ export class KeystoneService_V1 {
96
96
  verb: claim.verb
97
97
  });
98
98
  if (logalot) {
99
- console.log(`${lc} Selected pool: ${pool.id} (size: ${Object.keys(pool.challenges).length}) (I: genuuid)`);
99
+ console.log(`${lc} Selected pool: ${pool.id} (size: ${Object.keys(pool.challenges).length}) (I: 6b26d6f4aad18380f2b3a0989b592826)`);
100
100
  }
101
101
  // 2. Calculate Costs (Select IDs)
102
102
  const idsToSolve = selectChallengeIds({
@@ -116,11 +116,26 @@ export class KeystoneService_V1 {
116
116
  requiredChallengeIds
117
117
  });
118
118
  // 4. Construct New Data
119
+ const n = (prevData.n ?? 0) + 1;
120
+ let checkpointDetails;
121
+ if (n % KEYSTONE_CHECKPOINT_FREQUENCY === 0) {
122
+ // Generate a temporary view of the keystone as it would be in this frame
123
+ // to calculate the aggregated state.
124
+ const currentFrameView = {
125
+ ...latestKeystone,
126
+ data: { ...prevData, frameDetails }
127
+ };
128
+ checkpointDetails = await this.getAggregateDetails({
129
+ latestKeystone: currentFrameView,
130
+ metaspace,
131
+ space
132
+ });
133
+ }
119
134
  const newData = {
120
135
  challengePools: nextPools,
121
136
  proofs: [proof],
122
137
  frameDetails,
123
- // Revocation info is undefined for a standard sign operation
138
+ checkpointDetails,
124
139
  };
125
140
  // 5. Commit (Evolve, Persist, Register)
126
141
  const resKeystone = await evolvePersistAndRegisterKeystone({
@@ -158,6 +173,81 @@ export class KeystoneService_V1 {
158
173
  const errors = await validateKeystoneTransition({ currentIbGib, prevIbGib });
159
174
  return errors;
160
175
  }
176
+ /**
177
+ * Validates a genesis keystone.
178
+ *
179
+ * @returns Array of validation error strings. Empty array means Valid.
180
+ */
181
+ async validateGenesisKeystone({ keystoneIbGib, }) {
182
+ return await validateGenesisKeystone({ keystoneIbGib });
183
+ }
184
+ /**
185
+ * Retrieves the latest keystone frame for the given address.
186
+ *
187
+ * Uses `metaspace.getLatestAddr` to find the actual tip instead of trusting
188
+ * an incoming payload's `past` rel8n.
189
+ *
190
+ * @see `ibgib-get-pattern` SKILL.md
191
+ */
192
+ async getLatestKeystone({ addr, metaspace, space, }) {
193
+ const lc = `${this.lc}[${this.getLatestKeystone.name}]`;
194
+ try {
195
+ if (logalot) {
196
+ console.log(`${lc} starting...`);
197
+ }
198
+ const latestAddr = await metaspace.getLatestAddr({ tjpAddr: addr, space });
199
+ if (!latestAddr) {
200
+ throw new Error(`could not find latest addr for ${addr}`);
201
+ }
202
+ const resGet = await metaspace.get({ addr: latestAddr, space });
203
+ if (resGet.success && resGet.ibGibs && resGet.ibGibs.length > 0) {
204
+ return resGet.ibGibs[0];
205
+ }
206
+ else {
207
+ const resIbGib = resGet.rawResultIbGib;
208
+ const addrsNotFound = resIbGib?.data?.addrsNotFound ?? 'unknown';
209
+ throw new Error(`couldn't find latest keystone at ${latestAddr}. addrsNotFound: ${addrsNotFound}? resGet.errorMsg: ${resGet.errorMsg}`);
210
+ }
211
+ }
212
+ catch (error) {
213
+ console.error(`${lc} ${extractErrorMsg(error)}`);
214
+ throw error;
215
+ }
216
+ finally {
217
+ if (logalot) {
218
+ console.log(`${lc} complete.`);
219
+ }
220
+ }
221
+ }
222
+ /**
223
+ * Validates an entire keystone graph from tip to genesis.
224
+ *
225
+ * @returns Array of validation error strings. Empty array means Valid.
226
+ */
227
+ async validateKeystoneGraph({ keystoneIbGib, dependencyGraph, getLatest, invalidIfMoreRecentKeystoneFoundInSpace, space, }) {
228
+ const lc = `${this.lc}[${this.validateKeystoneGraph.name}]`;
229
+ try {
230
+ if (logalot) {
231
+ console.log(`${lc} starting... (I: 01c5cd455038c270cbf1effc1704af26)`);
232
+ }
233
+ return await validateKeystoneGraph({
234
+ keystoneIbGib,
235
+ dependencyGraph,
236
+ getLatest,
237
+ invalidIfMoreRecentKeystoneFoundInSpace,
238
+ space
239
+ });
240
+ }
241
+ catch (error) {
242
+ console.error(`${lc} ${extractErrorMsg(error)}`);
243
+ throw error;
244
+ }
245
+ finally {
246
+ if (logalot) {
247
+ console.log(`${lc} complete.`);
248
+ }
249
+ }
250
+ }
161
251
  /**
162
252
  * Permanently revokes the Identity.
163
253
  *
@@ -213,11 +303,25 @@ export class KeystoneService_V1 {
213
303
  // 5. Construct Revocation Info
214
304
  const revocationInfo = { reason, proof };
215
305
  // 6. Construct New Data
306
+ const n = (prevData.n ?? 0) + 1;
307
+ let checkpointDetails;
308
+ if (n % KEYSTONE_CHECKPOINT_FREQUENCY === 0) {
309
+ const currentFrameView = {
310
+ ...latestKeystone,
311
+ data: { ...prevData, frameDetails, revocationInfo }
312
+ };
313
+ checkpointDetails = await this.getAggregateDetails({
314
+ latestKeystone: currentFrameView,
315
+ metaspace,
316
+ space
317
+ });
318
+ }
216
319
  const newData = {
217
320
  challengePools: nextPools,
218
321
  proofs: [proof],
219
322
  revocationInfo,
220
- frameDetails
323
+ frameDetails,
324
+ checkpointDetails,
221
325
  };
222
326
  // 7. Commit
223
327
  const newKeystone = await evolvePersistAndRegisterKeystone({
@@ -304,9 +408,23 @@ export class KeystoneService_V1 {
304
408
  }
305
409
  const finalPools = [...replenishedExistingPools, ...newPools];
306
410
  // 6. Construct New Data
411
+ const n = (prevData.n ?? 0) + 1;
412
+ let checkpointDetails;
413
+ if (n % KEYSTONE_CHECKPOINT_FREQUENCY === 0) {
414
+ const currentFrameView = {
415
+ ...latestKeystone,
416
+ data: { ...prevData, challengePools: finalPools }
417
+ };
418
+ checkpointDetails = await this.getAggregateDetails({
419
+ latestKeystone: currentFrameView,
420
+ metaspace,
421
+ space
422
+ });
423
+ }
307
424
  const newData = {
308
425
  challengePools: finalPools,
309
426
  proofs: [proof], // The proof authorizes the structure change
427
+ checkpointDetails,
310
428
  };
311
429
  // 7. Commit
312
430
  const newKeystone = await evolvePersistAndRegisterKeystone({
@@ -327,5 +445,54 @@ export class KeystoneService_V1 {
327
445
  }
328
446
  }
329
447
  }
448
+ /**
449
+ * Consolidates the state of a Keystone identity across its history.
450
+ * Walks back until it hits a checkpoint or genesis.
451
+ */
452
+ async getAggregateDetails({ latestKeystone, metaspace, space, }) {
453
+ const lc = `${this.lc}[${this.getAggregateDetails.name}]`;
454
+ try {
455
+ let aggregated = {};
456
+ let current = latestKeystone;
457
+ while (current) {
458
+ const data = current.data;
459
+ // 1. If we hit a checkpoint, merge it and STOP.
460
+ if (data.checkpointDetails) {
461
+ aggregated = mergeMapsOrArrays_Naive({
462
+ dominant: aggregated,
463
+ recessive: data.checkpointDetails
464
+ });
465
+ break;
466
+ }
467
+ // 2. Merge this frame's details
468
+ if (data.frameDetails) {
469
+ aggregated = mergeMapsOrArrays_Naive({
470
+ dominant: aggregated,
471
+ recessive: data.frameDetails
472
+ });
473
+ }
474
+ // 3. Genesis check (n=0)
475
+ if (data.n === 0) {
476
+ break;
477
+ }
478
+ // 4. Walk back
479
+ const past = current.rel8ns?.past;
480
+ const prevAddr = (past && past.length > 0) ? past[past.length - 1] : undefined;
481
+ if (!prevAddr) {
482
+ break;
483
+ }
484
+ const res = await metaspace.get({ addr: prevAddr, space });
485
+ if (!res.success || !res.ibGibs || res.ibGibs.length === 0) {
486
+ throw new Error(`Could not find previous keystone frame at ${prevAddr} (E: e3d069b22e11e550e58844889ddb5325)`);
487
+ }
488
+ current = res.ibGibs[0];
489
+ }
490
+ return aggregated;
491
+ }
492
+ catch (error) {
493
+ console.error(`${lc} ${extractErrorMsg(error)}`);
494
+ throw error;
495
+ }
496
+ }
330
497
  }
331
498
  //# sourceMappingURL=keystone-service-v1.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"keystone-service-v1.mjs","sourceRoot":"","sources":["../../src/keystone/keystone-service-v1.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keystone-service-v1.mjs","sourceRoot":"","sources":["../../src/keystone/keystone-service-v1.mts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { respecfully, iReckon, ifWe, firstOfAll } from '@ibgib/helper-gib/dist/respec-gib/respec-gib.mjs';
2
2
  const maam = `[${import.meta.url}]`, sir = maam;
3
- import { clone, hash } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
3
+ import { clone, hash, getUUID } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
4
4
  import { getIbGibAddr } from '@ibgib/ts-gib/dist/helper.mjs';
5
5
  import { GLOBAL_LOG_A_LOT } from '../core-constants.mjs';
6
6
  import { KeystoneStrategyFactory } from './strategy/keystone-strategy-factory.mjs';
@@ -9,75 +9,6 @@ import { POOL_ID_DEFAULT, POOL_ID_REVOKE, KEYSTONE_VERB_REVOKE, KEYSTONE_VERB_MA
9
9
  import { KeystoneService_V1 } from './keystone-service-v1.mjs';
10
10
  import { addToBindingMap } from './keystone-helpers.mjs';
11
11
  const logalot = GLOBAL_LOG_A_LOT;
12
- // /**
13
- // * not sure where to put this, but we probably will want to reuse this in the
14
- // * future (assuming it works)
15
- // * @returns metaspace service reference
16
- // */
17
- // async function getNewInitializedInMemoryMetaspaceForTesting({
18
- // defaultSpaceName,
19
- // }: {
20
- // defaultSpaceName: string,
21
- // }): Promise<MetaspaceService> {
22
- // const lc = `[${getNewInitializedInMemoryMetaspaceForTesting.name}]`;
23
- // try {
24
- // if (logalot) { console.log(`${lc} starting... (I: 766d7596addcb73f4820586469233b25)`); }
25
- // let metaspace = new Metaspace_Innerspace(/*cacheSvc*/undefined);
26
- // if (logalot) { console.log(`${lc} creating metaspace complete. initializing... (I: 61b74d62e8832c9fa853e4b8c4c2d825)`); }
27
- // getGibInfo()
28
- // await metaspace.initialize({
29
- // spaceName: defaultSpaceName,
30
- // /**
31
- // * passing in undefined will use the defaults. probably will need to
32
- // * adjust this for testing purposes, but let's see what happens with
33
- // * this first.
34
- // */
35
- // metaspaceFactory: {
36
- // fnDtoToSpace: async () => {
37
- // if (!currentSpace) { currentSpace = new IbGibTestSpace(); }
38
- // return currentSpace;
39
- // },
40
- // fnZeroSpaceFactory: () => {
41
- // if (!currentZeroSpace) { currentZeroSpace = new IbGibTestSpace(); }
42
- // return currentZeroSpace;
43
- // },
44
- // fnDefaultLocalSpaceFactory: async () => {
45
- // if (!currentSpace) { currentSpace = new IbGibTestSpace(); }
46
- // return currentSpace;
47
- // },
48
- // // export type DtoToSpaceFunction = (spaceDto: IbGib_V1) => Promise<IbGibSpaceAny>;
49
- // // export type ZeroSpaceFactoryFunction = () => IbGibSpaceAny;
50
- // // export type LocalSpaceFactoryFunction = (opts: CreateLocalSpaceOptions) => Promise<IbGibSpaceAny | undefined>;
51
- // },
52
- // getFnAlert: () => { return async ({ title, msg }) => console.log(title, msg) },
53
- // getFnPrompt: () => {
54
- // return async ({ title, msg }) => {
55
- // // if this is needed, we might set up some way for testing
56
- // // to prepare either a queue of prompts or some kind of map or getter
57
- // // and put it on the metaspace itself
58
- // throw new Error(`not implemented (E: c7ef688a02f8cb74487260f9274ac825)`);
59
- // // promptForText({ title, msg, confirm: false });
60
- // }
61
- // },
62
- // getFnPromptPassword: () => {
63
- // return async () => {
64
- // // similar to getFnPrompt, if we need a _different_
65
- // // password, we might set up some way for testing to prepare
66
- // // either a queue of passwords or some kind of map or getter
67
- // // and put it on the metaspace itself
68
- // return 'password';
69
- // // promptForSecret({ confirm: true })
70
- // }
71
- // },
72
- // });
73
- // return metaspace;
74
- // } catch (error) {
75
- // console.error(`${lc} ${extractErrorMsg(error)}`);
76
- // throw error;
77
- // } finally {
78
- // if (logalot) { console.log(`${lc} complete.`); }
79
- // }
80
- // }
81
12
  /**
82
13
  * A simple in-memory map acting as a Space.
83
14
  * Pure Storage. No Indexing logic.
@@ -102,9 +33,10 @@ class MockIbGibSpace {
102
33
  const addrs = arg.data.ibGibAddrs || [];
103
34
  const ibGibs = [];
104
35
  for (const addr of addrs) {
105
- const ig = await this.get({ addr });
106
- if (ig)
107
- ibGibs.push(ig);
36
+ const x = await this.get({ addr });
37
+ if (x) {
38
+ ibGibs.push(x);
39
+ }
108
40
  }
109
41
  return { ibGibs };
110
42
  }
@@ -167,12 +99,13 @@ class MockMetaspaceService {
167
99
  await respecfully(sir, 'Suite A: Strategy Vectors (HashRevealV1)', async () => {
168
100
  // Setup generic variables
169
101
  const masterSecret = "TestSecret_12345";
170
- const salt = "TestPool";
102
+ const poolId = "TestPool";
171
103
  let config;
172
104
  firstOfAll(sir, async () => {
173
105
  // Use our standard builder to get a valid config object
106
+ const salt = (await getUUID()).substring(0, 16);
174
107
  config = createStandardPoolConfig({
175
- id: salt,
108
+ id: poolId,
176
109
  salt,
177
110
  });
178
111
  });
@@ -206,7 +139,7 @@ await respecfully(sir, 'Suite A: Strategy Vectors (HashRevealV1)', async () => {
206
139
  const poolSecret = await strategy.derivePoolSecret({ masterSecret });
207
140
  const challengeId = "a3ff7843552870fc28bef2b"; // arbitrary random challengeId
208
141
  // 1. Generate Solution
209
- const solution = await strategy.generateSolution({ poolSecret, poolId: salt, challengeId });
142
+ const solution = await strategy.generateSolution({ poolSecret, poolId: config.id, challengeId });
210
143
  iReckon(sir, solution.value).asTo('solution value exists').isGonnaBeTruthy();
211
144
  iReckon(sir, solution.challengeId).asTo('id matches').willEqual(challengeId);
212
145
  // 2. Generate Public Challenge from Solution
@@ -221,7 +154,7 @@ await respecfully(sir, 'Suite A: Strategy Vectors (HashRevealV1)', async () => {
221
154
  const poolSecret = await strategy.derivePoolSecret({ masterSecret });
222
155
  const challengeId = "8c994f3ed598f150e25513"; // arbitrary random challengeId
223
156
  // Generate real pair
224
- const solution = await strategy.generateSolution({ poolSecret, poolId: salt, challengeId });
157
+ const solution = await strategy.generateSolution({ poolSecret, poolId: config.id, challengeId });
225
158
  const challenge = await strategy.generateChallenge({ solution });
226
159
  // Tamper with solution value
227
160
  const badSolution = { ...solution, value: "hacked_value" };
@@ -233,10 +166,10 @@ await respecfully(sir, 'Suite A: Strategy Vectors (HashRevealV1)', async () => {
233
166
  const poolSecret = await strategy.derivePoolSecret({ masterSecret });
234
167
  // Generate pair A
235
168
  const challengeId_A = "416c38cfd6ee63dbf8d4e5ef36"; // arbitrary random challengeId
236
- const solutionA = await strategy.generateSolution({ poolSecret, poolId: salt, challengeId: challengeId_A });
169
+ const solutionA = await strategy.generateSolution({ poolSecret, poolId: config.id, challengeId: challengeId_A });
237
170
  // Generate pair B
238
171
  const challengeId_B = "c487ef6b7878fae798c3"; // arbitrary random challengeId
239
- const solutionB = await strategy.generateSolution({ poolSecret, poolId: salt, challengeId: challengeId_B });
172
+ const solutionB = await strategy.generateSolution({ poolSecret, poolId: config.id, challengeId: challengeId_B });
240
173
  const challengeB = await strategy.generateChallenge({ solution: solutionB });
241
174
  // Check A against B
242
175
  const isValid = await strategy.validateSolution({ solution: solutionA, challenge: challengeB });
@@ -260,9 +193,10 @@ await respecfully(sir, 'Suite B: Service Lifecycle', async () => {
260
193
  });
261
194
  await respecfully(sir, 'Genesis', async () => {
262
195
  await ifWe(sir, 'creates a valid genesis frame and persists it', async () => {
196
+ const salt = (await getUUID()).substring(0, 16);
263
197
  const config = createStandardPoolConfig({
264
198
  id: POOL_ID_DEFAULT,
265
- salt: POOL_ID_DEFAULT,
199
+ salt,
266
200
  });
267
201
  genesisKeystone = await service.genesis({
268
202
  masterSecret,
@@ -334,9 +268,10 @@ await respecfully(sir, 'Suite C: Security Vectors', async () => {
334
268
  mockSpace = new MockIbGibSpace();
335
269
  mockMetaspace = new MockMetaspaceService(mockSpace);
336
270
  // Setup Alice's Identity
271
+ const salt = (await getUUID()).substring(0, 16);
337
272
  const config = createStandardPoolConfig({
338
273
  id: POOL_ID_DEFAULT,
339
- salt: POOL_ID_DEFAULT,
274
+ salt,
340
275
  targetBinding: 0,
341
276
  size: 10,
342
277
  });
@@ -424,13 +359,15 @@ await respecfully(sir, 'Suite D: Revocation', async () => {
424
359
  mockSpace = new MockIbGibSpace();
425
360
  mockMetaspace = new MockMetaspaceService(mockSpace);
426
361
  // Setup Identity WITH a Revocation Pool
362
+ const stdSalt = (await getUUID()).substring(0, 16);
363
+ const revokeSalt = (await getUUID()).substring(0, 16);
427
364
  const stdConfig = createStandardPoolConfig({
428
365
  id: POOL_ID_DEFAULT,
429
- salt: POOL_ID_DEFAULT,
366
+ salt: stdSalt,
430
367
  });
431
368
  const revokeConfig = createRevocationPoolConfig({
432
369
  id: POOL_ID_REVOKE,
433
- salt: POOL_ID_REVOKE,
370
+ salt: revokeSalt,
434
371
  }); // Special Config
435
372
  genesisKeystone = await service.genesis({
436
373
  masterSecret,
@@ -488,7 +425,8 @@ await respecfully(sir, 'Suite E: Structural Evolution (addPools)', async () => {
488
425
  let aliceKeystone;
489
426
  // Helper to generate a "Foreign" pool (e.g. from Bob)
490
427
  const createForeignPool = async (id, verbs = []) => {
491
- const config = createStandardPoolConfig({ id, salt: id });
428
+ const salt = (await getUUID()).substring(0, 16);
429
+ const config = createStandardPoolConfig({ id, salt });
492
430
  config.allowedVerbs = verbs;
493
431
  // We use the factory manually here to simulate Bob doing this offline
494
432
  const strategy = KeystoneStrategyFactory.create({ config });
@@ -519,7 +457,8 @@ await respecfully(sir, 'Suite E: Structural Evolution (addPools)', async () => {
519
457
  mockSpace = new MockIbGibSpace();
520
458
  mockMetaspace = new MockMetaspaceService(mockSpace);
521
459
  // Alice Genesis: Standard pool (allows all verbs, including 'manage')
522
- const config = createStandardPoolConfig({ id: POOL_ID_DEFAULT, salt: POOL_ID_DEFAULT });
460
+ const salt = (await getUUID()).substring(0, 16);
461
+ const config = createStandardPoolConfig({ id: POOL_ID_DEFAULT, salt });
523
462
  aliceKeystone = await service.genesis({
524
463
  masterSecret: aliceSecret,
525
464
  configs: [config],
@@ -622,7 +561,8 @@ await respecfully(sir, 'Suite E: Structural Evolution (addPools)', async () => {
622
561
  let aliceKeystone;
623
562
  // Helper to simulate Bob creating a pool "offline" to give to Alice
624
563
  const createForeignPool = async (id, verbs = []) => {
625
- const config = createStandardPoolConfig({ id, salt: id });
564
+ const salt = (await getUUID()).substring(0, 16);
565
+ const config = createStandardPoolConfig({ id, salt });
626
566
  config.allowedVerbs = verbs;
627
567
  // We use the factory manually here to simulate Bob doing this on his own machine
628
568
  const strategy = KeystoneStrategyFactory.create({ config });
@@ -653,9 +593,10 @@ await respecfully(sir, 'Suite E: Structural Evolution (addPools)', async () => {
653
593
  mockSpace = new MockIbGibSpace();
654
594
  mockMetaspace = new MockMetaspaceService(mockSpace);
655
595
  // Alice Genesis: Standard pool (allows all verbs, including 'manage')
596
+ const salt = (await getUUID()).substring(0, 16);
656
597
  const config = createStandardPoolConfig({
657
598
  id: POOL_ID_DEFAULT,
658
- salt: POOL_ID_DEFAULT,
599
+ salt,
659
600
  });
660
601
  aliceKeystone = await service.genesis({
661
602
  masterSecret: aliceSecret,
@@ -753,22 +694,23 @@ await respecfully(sir, 'Suite E: Structural Evolution (addPools)', async () => {
753
694
  await respecfully(sir, 'Suite F: Deep Inspection', async () => {
754
695
  const service = new KeystoneService_V1();
755
696
  const aliceSecret = "Alice_Deep_Inspect";
756
- const salt = "granularity_pool";
697
+ const poolId = "granularity_pool";
757
698
  let mockSpace;
758
699
  let mockMetaspace;
759
700
  let genesisKeystone;
760
701
  let signedKeystone;
761
- // We use a specific hybrid config to test exact selection logic
762
- const hybridConfig = createStandardPoolConfig({
763
- id: salt,
764
- salt,
765
- // 2 FIFO + 2 Random = 4 Total per sign
766
- sequential: 2, random: 2, targetBinding: 0,
767
- size: 20, // Small enough to track, large enough to be random
768
- });
702
+ let hybridConfig;
769
703
  firstOfAll(sir, async () => {
770
704
  mockSpace = new MockIbGibSpace();
771
705
  mockMetaspace = new MockMetaspaceService(mockSpace);
706
+ const salt = (await getUUID()).substring(0, 16);
707
+ hybridConfig = createStandardPoolConfig({
708
+ id: poolId,
709
+ salt,
710
+ // 2 FIFO + 2 Random = 4 Total per sign
711
+ sequential: 2, random: 2, targetBinding: 0,
712
+ size: 20, // Small enough to track, large enough to be random
713
+ });
772
714
  genesisKeystone = await service.genesis({
773
715
  masterSecret: aliceSecret,
774
716
  configs: [hybridConfig],
@@ -793,7 +735,7 @@ await respecfully(sir, 'Suite F: Deep Inspection', async () => {
793
735
  });
794
736
  await ifWe(sir, 'verifies the math manually (White-box Crypto Check)', async () => {
795
737
  const proof = signedKeystone.data.proofs[0];
796
- const poolSnapshot = genesisKeystone.data.challengePools.find(p => p.id === salt);
738
+ const poolSnapshot = genesisKeystone.data.challengePools.find(p => p.id === poolId);
797
739
  // We iterate every solution in the proof and MANUALLY verify the hash relationship
798
740
  // bypassing the Service's validation logic to ensure the raw math holds up.
799
741
  for (const solution of proof.solutions) {
@@ -816,7 +758,7 @@ await respecfully(sir, 'Suite F: Deep Inspection', async () => {
816
758
  });
817
759
  await ifWe(sir, 'verifies FIFO logic (Deterministic Selection)', async () => {
818
760
  const proof = signedKeystone.data.proofs[0];
819
- const poolSnapshot = genesisKeystone.data.challengePools.find(p => p.id === salt);
761
+ const poolSnapshot = genesisKeystone.data.challengePools.find(p => p.id === poolId);
820
762
  // The first N keys in the pool should be the FIFO targets.
821
763
  // Assumption: Object.keys returns insertion order (Standard in modern JS engines)
822
764
  const allIds = Object.keys(poolSnapshot.challenges);