@ibgib/core-gib 0.1.57 → 0.1.59

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 (162) hide show
  1. package/dist/keystone/keystone-config-builder.d.mts +12 -1
  2. package/dist/keystone/keystone-config-builder.d.mts.map +1 -1
  3. package/dist/keystone/keystone-config-builder.mjs +58 -4
  4. package/dist/keystone/keystone-config-builder.mjs.map +1 -1
  5. package/dist/keystone/keystone-constants.d.mts +40 -5
  6. package/dist/keystone/keystone-constants.d.mts.map +1 -1
  7. package/dist/keystone/keystone-constants.mjs +39 -5
  8. package/dist/keystone/keystone-constants.mjs.map +1 -1
  9. package/dist/keystone/keystone-helpers.d.mts +11 -1
  10. package/dist/keystone/keystone-helpers.d.mts.map +1 -1
  11. package/dist/keystone/keystone-helpers.mjs +37 -1
  12. package/dist/keystone/keystone-helpers.mjs.map +1 -1
  13. package/dist/keystone/keystone-policy-types.d.mts +23 -0
  14. package/dist/keystone/keystone-policy-types.d.mts.map +1 -0
  15. package/dist/keystone/keystone-policy-types.mjs +2 -0
  16. package/dist/keystone/keystone-policy-types.mjs.map +1 -0
  17. package/dist/sync/graft-info/graft-info-helpers.respec.mjs +8 -8
  18. package/dist/sync/graft-info/graft-info-helpers.respec.mjs.map +1 -1
  19. package/dist/sync/sync-conflict-adv-multitimelines.respec.mjs +22 -22
  20. package/dist/sync/sync-conflict-adv-multitimelines.respec.mjs.map +1 -1
  21. package/dist/sync/sync-conflict-basic-divergence.respec.mjs +3 -3
  22. package/dist/sync/sync-conflict-basic-divergence.respec.mjs.map +1 -1
  23. package/dist/sync/sync-conflict-basic-multitimelines.respec.mjs +6 -6
  24. package/dist/sync/sync-conflict-basic-multitimelines.respec.mjs.map +1 -1
  25. package/dist/sync/sync-conflict-text-merge.respec.mjs +26 -26
  26. package/dist/sync/sync-conflict-text-merge.respec.mjs.map +1 -1
  27. package/dist/sync/sync-helpers.d.mts +19 -0
  28. package/dist/sync/sync-helpers.d.mts.map +1 -1
  29. package/dist/sync/sync-helpers.mjs +51 -1
  30. package/dist/sync/sync-helpers.mjs.map +1 -1
  31. package/dist/sync/sync-innerspace-constants.respec.mjs +2 -2
  32. package/dist/sync/sync-innerspace-constants.respec.mjs.map +1 -1
  33. package/dist/sync/sync-innerspace-deep-updates.respec.mjs +2 -2
  34. package/dist/sync/sync-innerspace-deep-updates.respec.mjs.map +1 -1
  35. package/dist/sync/sync-innerspace-dest-ahead.respec.mjs +4 -4
  36. package/dist/sync/sync-innerspace-dest-ahead.respec.mjs.map +1 -1
  37. package/dist/sync/sync-innerspace-multiple-timelines.respec.mjs +2 -2
  38. package/dist/sync/sync-innerspace-multiple-timelines.respec.mjs.map +1 -1
  39. package/dist/sync/sync-innerspace-partial-update.respec.mjs +3 -3
  40. package/dist/sync/sync-innerspace-partial-update.respec.mjs.map +1 -1
  41. package/dist/sync/sync-innerspace.respec.mjs +4 -4
  42. package/dist/sync/sync-innerspace.respec.mjs.map +1 -1
  43. package/dist/sync/sync-peer/sync-peer-http-receiver/sync-peer-http-receiver-v1.d.mts +5 -0
  44. package/dist/sync/sync-peer/sync-peer-http-receiver/sync-peer-http-receiver-v1.d.mts.map +1 -1
  45. package/dist/sync/sync-peer/sync-peer-http-receiver/sync-peer-http-receiver-v1.mjs +24 -2
  46. package/dist/sync/sync-peer/sync-peer-http-receiver/sync-peer-http-receiver-v1.mjs.map +1 -1
  47. package/dist/sync/sync-peer/sync-peer-http-sender/sync-peer-http-sender-v1.d.mts +5 -0
  48. package/dist/sync/sync-peer/sync-peer-http-sender/sync-peer-http-sender-v1.d.mts.map +1 -1
  49. package/dist/sync/sync-peer/sync-peer-http-sender/sync-peer-http-sender-v1.mjs +21 -3
  50. package/dist/sync/sync-peer/sync-peer-http-sender/sync-peer-http-sender-v1.mjs.map +1 -1
  51. package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-types.d.mts +1 -1
  52. package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.d.mts +13 -1
  53. package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.d.mts.map +1 -1
  54. package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.mjs +40 -10
  55. package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.mjs.map +1 -1
  56. package/dist/sync/sync-peer/sync-peer-types.d.mts +81 -1
  57. package/dist/sync/sync-peer/sync-peer-types.d.mts.map +1 -1
  58. package/dist/sync/sync-peer/sync-peer-v1.d.mts +37 -3
  59. package/dist/sync/sync-peer/sync-peer-v1.d.mts.map +1 -1
  60. package/dist/sync/sync-peer/sync-peer-v1.mjs +163 -23
  61. package/dist/sync/sync-peer/sync-peer-v1.mjs.map +1 -1
  62. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-constants.d.mts +46 -0
  63. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-constants.d.mts.map +1 -0
  64. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-constants.mjs +45 -0
  65. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-constants.mjs.map +1 -0
  66. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-receiver/sync-peer-websocket-receiver-types.d.mts +30 -0
  67. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-receiver/sync-peer-websocket-receiver-types.d.mts.map +1 -0
  68. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-receiver/sync-peer-websocket-receiver-types.mjs +2 -0
  69. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-receiver/sync-peer-websocket-receiver-types.mjs.map +1 -0
  70. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-receiver/sync-peer-websocket-receiver-v1.d.mts +68 -0
  71. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-receiver/sync-peer-websocket-receiver-v1.d.mts.map +1 -0
  72. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-receiver/sync-peer-websocket-receiver-v1.mjs +324 -0
  73. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-receiver/sync-peer-websocket-receiver-v1.mjs.map +1 -0
  74. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-receiver/sync-websocket-peer-helpers.d.mts +85 -0
  75. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-receiver/sync-websocket-peer-helpers.d.mts.map +1 -0
  76. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-receiver/sync-websocket-peer-helpers.mjs +332 -0
  77. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-receiver/sync-websocket-peer-helpers.mjs.map +1 -0
  78. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-sender/sync-peer-websocket-sender-types.d.mts +29 -0
  79. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-sender/sync-peer-websocket-sender-types.d.mts.map +1 -0
  80. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-sender/sync-peer-websocket-sender-types.mjs +2 -0
  81. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-sender/sync-peer-websocket-sender-types.mjs.map +1 -0
  82. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-sender/sync-peer-websocket-sender-v1.d.mts +44 -0
  83. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-sender/sync-peer-websocket-sender-v1.d.mts.map +1 -0
  84. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-sender/sync-peer-websocket-sender-v1.mjs +303 -0
  85. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-sender/sync-peer-websocket-sender-v1.mjs.map +1 -0
  86. package/dist/sync/sync-saga-context/sync-saga-context-helpers.d.mts +22 -5
  87. package/dist/sync/sync-saga-context/sync-saga-context-helpers.d.mts.map +1 -1
  88. package/dist/sync/sync-saga-context/sync-saga-context-helpers.mjs +223 -27
  89. package/dist/sync/sync-saga-context/sync-saga-context-helpers.mjs.map +1 -1
  90. package/dist/sync/sync-saga-context/sync-saga-context-types.d.mts +9 -0
  91. package/dist/sync/sync-saga-context/sync-saga-context-types.d.mts.map +1 -1
  92. package/dist/sync/sync-saga-coordinator.d.mts +41 -2
  93. package/dist/sync/sync-saga-coordinator.d.mts.map +1 -1
  94. package/dist/sync/sync-saga-coordinator.mjs +110 -11
  95. package/dist/sync/sync-saga-coordinator.mjs.map +1 -1
  96. package/dist/sync/sync-types.d.mts +24 -0
  97. package/dist/sync/sync-types.d.mts.map +1 -1
  98. package/dist/sync/sync-types.mjs +0 -1
  99. package/dist/sync/sync-types.mjs.map +1 -1
  100. package/dist/sync/sync-withid.connect.respec.d.mts +12 -0
  101. package/dist/sync/sync-withid.connect.respec.d.mts.map +1 -0
  102. package/dist/sync/sync-withid.connect.respec.mjs +205 -0
  103. package/dist/sync/sync-withid.connect.respec.mjs.map +1 -0
  104. package/dist/sync/sync-withid.establish.respec.d.mts +19 -0
  105. package/dist/sync/sync-withid.establish.respec.d.mts.map +1 -0
  106. package/dist/sync/sync-withid.establish.respec.mjs +322 -0
  107. package/dist/sync/sync-withid.establish.respec.mjs.map +1 -0
  108. package/dist/sync/sync-withid.pingpong.respec.d.mts +11 -0
  109. package/dist/sync/sync-withid.pingpong.respec.d.mts.map +1 -0
  110. package/dist/sync/sync-withid.pingpong.respec.mjs +131 -0
  111. package/dist/sync/sync-withid.pingpong.respec.mjs.map +1 -0
  112. package/dist/witness/space/inner-space/inner-space-v1.d.mts.map +1 -1
  113. package/dist/witness/space/inner-space/inner-space-v1.mjs +1 -1
  114. package/dist/witness/space/inner-space/inner-space-v1.mjs.map +1 -1
  115. package/package.json +4 -4
  116. package/src/keystone/keystone-config-builder.mts +73 -4
  117. package/src/keystone/keystone-constants.mts +42 -6
  118. package/src/keystone/keystone-helpers.mts +44 -2
  119. package/src/keystone/keystone-policy-types.mts +25 -0
  120. package/src/keystone/keystone-policy.schema.json +51 -0
  121. package/src/keystone/keystone-service-v1.mts +3 -3
  122. package/src/sync/docs/architecture.md +20 -0
  123. package/src/sync/docs/ping_pong_plan.md +147 -0
  124. package/src/sync/docs/security.md +207 -3
  125. package/src/sync/graft-info/graft-info-helpers.respec.mts +7 -7
  126. package/src/sync/sync-conflict-adv-multitimelines.respec.mts +21 -21
  127. package/src/sync/sync-conflict-basic-divergence.respec.mts +2 -2
  128. package/src/sync/sync-conflict-basic-multitimelines.respec.mts +5 -5
  129. package/src/sync/sync-conflict-text-merge.respec.mts +25 -25
  130. package/src/sync/sync-helpers.mts +51 -1
  131. package/src/sync/sync-innerspace-constants.respec.mts +1 -1
  132. package/src/sync/sync-innerspace-deep-updates.respec.mts +1 -1
  133. package/src/sync/sync-innerspace-dest-ahead.respec.mts +3 -3
  134. package/src/sync/sync-innerspace-multiple-timelines.respec.mts +1 -1
  135. package/src/sync/sync-innerspace-partial-update.respec.mts +2 -2
  136. package/src/sync/sync-innerspace.respec.mts +3 -3
  137. package/src/sync/sync-peer/sync-peer-http-receiver/sync-peer-http-receiver-v1.mts +26 -2
  138. package/src/sync/sync-peer/sync-peer-http-sender/sync-peer-http-sender-v1.mts +23 -3
  139. package/src/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-types.mts +1 -1
  140. package/src/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.mts +47 -13
  141. package/src/sync/sync-peer/sync-peer-types.mts +87 -1
  142. package/src/sync/sync-peer/sync-peer-v1.mts +171 -32
  143. package/src/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-constants.mts +68 -0
  144. package/src/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-receiver/sync-peer-websocket-receiver-types.mts +36 -0
  145. package/src/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-receiver/sync-peer-websocket-receiver-v1.mts +385 -0
  146. package/src/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-receiver/sync-websocket-peer-helpers.mts +388 -0
  147. package/src/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-sender/sync-peer-websocket-sender-types.mts +35 -0
  148. package/src/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-sender/sync-peer-websocket-sender-v1.mts +345 -0
  149. package/src/sync/sync-saga-context/sync-saga-context-helpers.mts +223 -34
  150. package/src/sync/sync-saga-context/sync-saga-context-types.mts +9 -0
  151. package/src/sync/sync-saga-coordinator.mts +162 -6
  152. package/src/sync/sync-types.mts +28 -4
  153. package/src/sync/sync-withid.connect.respec.mts +243 -0
  154. package/src/sync/sync-withid.establish.respec.mts +361 -0
  155. package/src/sync/sync-withid.pingpong.respec.mts +161 -0
  156. package/src/sync/unused-identity-backup.mts.md +1 -1
  157. package/src/witness/space/inner-space/inner-space-v1.mts +4 -5
  158. package/dist/sync/sync-innerspace-dest-ahead-withid.respec.d.mts +0 -2
  159. package/dist/sync/sync-innerspace-dest-ahead-withid.respec.d.mts.map +0 -1
  160. package/dist/sync/sync-innerspace-dest-ahead-withid.respec.mjs +0 -310
  161. package/dist/sync/sync-innerspace-dest-ahead-withid.respec.mjs.map +0 -1
  162. package/src/sync/sync-innerspace-dest-ahead-withid.respec.mts +0 -364
@@ -0,0 +1,332 @@
1
+ /**
2
+ * @module sync-websocket-peer-helpers
3
+ *
4
+ * Reusable, isomorphic pure validation helper functions and policies for the
5
+ * WebSocket Sync Peer connect process.
6
+ */
7
+ import { HashAlgorithm, extractErrorMsg } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
8
+ import { getIbGibAddr, getIbAndGib } from '@ibgib/ts-gib/dist/helper.mjs';
9
+ import { validateIbGibAddr, validateIbGibIntrinsically } from '@ibgib/ts-gib/dist/V1/validate-helper.mjs';
10
+ import { getGibInfo } from '@ibgib/ts-gib/dist/V1/transforms/transform-helper.mjs';
11
+ import { GLOBAL_LOG_A_LOT } from '../../../../core-constants.mjs';
12
+ import { KeystoneReplenishStrategy, KeystoneChallengeType } from '../../../../keystone/keystone-types.mjs';
13
+ import { parseKeystoneIb } from '../../../../keystone/keystone-helpers.mjs';
14
+ import { KeystoneStrategyFactory } from '../../../../keystone/strategy/keystone-strategy-factory.mjs';
15
+ import { KeystoneService_V1 } from '../../../../keystone/keystone-service-v1.mjs';
16
+ import { POOL_ID_CONNECT, KEYSTONE_VERB_CONNECT } from '../../../../keystone/keystone-constants.mjs';
17
+ const logalot = GLOBAL_LOG_A_LOT;
18
+ /**
19
+ * Standard configuration defaults for the Ephemeral Session Keystone.
20
+ */
21
+ export const SESSION_KEYSTONE_POLICY = {
22
+ COMMON: {
23
+ ALGO: HashAlgorithm.sha_256,
24
+ TYPE: KeystoneChallengeType.hash_reveal_v1,
25
+ ROUNDS: 2,
26
+ REPLENISH: KeystoneReplenishStrategy.topUp,
27
+ },
28
+ CONNECT_POOL: {
29
+ ID: POOL_ID_CONNECT,
30
+ VERB: KEYSTONE_VERB_CONNECT,
31
+ SIZE: 10,
32
+ SELECT_SEQUENTIALLY: 2,
33
+ SELECT_RANDOMLY: 2,
34
+ TARGET_BINDING_CHARS: 0,
35
+ SERVER_DEMAND_COUNT: 3,
36
+ }
37
+ };
38
+ /**
39
+ * Resolves the deterministic dynamic upfront pre-filter challenge.
40
+ */
41
+ export function getConnectChallenge(keystone) {
42
+ const lc = `[${getConnectChallenge.name}]`;
43
+ try {
44
+ if (logalot) {
45
+ console.log(`${lc} starting... (I: 3c791af2f978a00a087dfdde90884826)`);
46
+ }
47
+ const connectPool = (keystone.data?.challengePools ?? []).find((p) => p.id === SESSION_KEYSTONE_POLICY.CONNECT_POOL.ID);
48
+ if (!connectPool) {
49
+ throw new Error(`Keystone missing "${SESSION_KEYSTONE_POLICY.CONNECT_POOL.ID}" pool (E: 6382e29260e4ddbac42ed18f49733526)`);
50
+ }
51
+ const challengeIds = Object.keys(connectPool.challenges).sort();
52
+ if (challengeIds.length === 0) {
53
+ throw new Error(`Connect pool has no challenges (E: 1ef62fdbda182a790835c8c796475226)`);
54
+ }
55
+ const challengeId = challengeIds[0];
56
+ const challenge = connectPool.challenges[challengeId];
57
+ return { challengeId, challenge };
58
+ }
59
+ catch (error) {
60
+ console.error(`${lc} ${extractErrorMsg(error)}`);
61
+ throw error;
62
+ }
63
+ finally {
64
+ if (logalot) {
65
+ console.log(`${lc} complete.`);
66
+ }
67
+ }
68
+ }
69
+ /**
70
+ * Validates the upfront solution against the session keystone's first connect
71
+ * challenge.
72
+ */
73
+ export async function checkConnectSolution(keystone, solutionValue) {
74
+ const lc = `[${checkConnectSolution.name}]`;
75
+ try {
76
+ if (logalot) {
77
+ console.log(`${lc} starting... (I: 166aa101e109194556e6b99575945826)`);
78
+ }
79
+ const connectPool = (keystone.data?.challengePools ?? []).find((p) => p.id === SESSION_KEYSTONE_POLICY.CONNECT_POOL.ID);
80
+ if (!connectPool) {
81
+ return false;
82
+ }
83
+ const { challengeId, challenge } = getConnectChallenge(keystone);
84
+ const strategy = KeystoneStrategyFactory.create({ config: connectPool.config });
85
+ const solution = {
86
+ type: 'hash-reveal-v1',
87
+ challengeId,
88
+ poolId: SESSION_KEYSTONE_POLICY.CONNECT_POOL.ID,
89
+ value: solutionValue
90
+ };
91
+ return await strategy.validateSolution({ solution, challenge });
92
+ }
93
+ catch (error) {
94
+ console.error(`${lc} ${extractErrorMsg(error)}`);
95
+ throw error;
96
+ }
97
+ finally {
98
+ if (logalot) {
99
+ console.log(`${lc} complete.`);
100
+ }
101
+ }
102
+ }
103
+ /**
104
+ * Validates the upfront connect parameter solutions before socket connection upgrades.
105
+ */
106
+ export async function validateUpfrontConnect({ sAddr, solution, space, metaspace, }) {
107
+ const lc = `[${validateUpfrontConnect.name}]`;
108
+ try {
109
+ if (logalot) {
110
+ console.log(`${lc} starting... (I: 7c21ecaf0b7f59347882bc18d8245826)`);
111
+ }
112
+ // 1. Initial address sanity check
113
+ const addrErrors = validateIbGibAddr({ addr: sAddr }) ?? [];
114
+ if (addrErrors.length > 0) {
115
+ throw new Error(`Invalid sAddr: ${addrErrors.join(', ')} (E: 9a80cea03308ddab721eec08ffe0e826)`);
116
+ }
117
+ const { ib } = getIbAndGib({ ibGibAddr: sAddr });
118
+ parseKeystoneIb({ ib });
119
+ // 2. Fetch session keystone from storage
120
+ const resGet = await metaspace.get({ addrs: [sAddr], space });
121
+ if (!resGet.success || !resGet.ibGibs || resGet.ibGibs.length !== 1) {
122
+ throw new Error(`Session keystone not found in space: ${sAddr} (E: d381a8269328dbe6b8a9e4f86c2a3626)`);
123
+ }
124
+ const authorizedS = resGet.ibGibs[0];
125
+ // 3. Cryptographically check dynamic solution
126
+ const isValid = await checkConnectSolution(authorizedS, solution);
127
+ if (!isValid) {
128
+ throw new Error(`Upfront connect solution verification failed (E: 67c5b17968b8829058925d8808d09826)`);
129
+ }
130
+ // 4. Resolve secure TJP
131
+ const past = authorizedS.rel8ns?.past;
132
+ const sAddr_tjp = (past && past.length > 0) ? past[0] : getIbGibAddr({ ibGib: authorizedS });
133
+ return { sAddr_tjp, authorizedS };
134
+ }
135
+ catch (error) {
136
+ console.error(`${lc} ${extractErrorMsg(error)}`);
137
+ throw error;
138
+ }
139
+ finally {
140
+ if (logalot) {
141
+ console.log(`${lc} complete.`);
142
+ }
143
+ }
144
+ }
145
+ /**
146
+ * Verifies the multi-turn evolved Keystone challenge proof frame.
147
+ */
148
+ export async function verifyConnectProof({ proofFrame, sKeystone_latest, challengeUuid, demandedIds, }) {
149
+ const lc = `[${verifyConnectProof.name}]`;
150
+ try {
151
+ if (logalot) {
152
+ console.log(`${lc} starting... (I: 4500528dabb80aeb98dabf886d6b2826)`);
153
+ }
154
+ // 1. Validate evolution structure intrinsically
155
+ const keystoneService = new KeystoneService_V1();
156
+ const validationErrors = await keystoneService.validate({
157
+ prevIbGib: sKeystone_latest,
158
+ currentIbGib: proofFrame,
159
+ });
160
+ if (validationErrors && validationErrors.length > 0) {
161
+ throw new Error(`Proof validation failed: ${validationErrors.join(', ')} (E: e70278c90dc475a2d80d0ad8bbf1a826)`);
162
+ }
163
+ // 2. Validate connect target signature
164
+ const proofs = proofFrame.data.proofs ?? [];
165
+ const proof = proofs.find(p => p.claim?.verb === SESSION_KEYSTONE_POLICY.CONNECT_POOL.VERB);
166
+ if (!proof || proof.claim?.target !== challengeUuid) {
167
+ throw new Error(`Proof target mismatch or missing connect claim (E: e897bba1bb6161b418a630c1e30c5726)`);
168
+ }
169
+ // 3. Verify client successfully solved all demanded challenges
170
+ const solvedIds = new Set(proof.solutions?.map(s => s.challengeId) ?? []);
171
+ const missingIds = demandedIds.filter(id => !solvedIds.has(id));
172
+ if (missingIds.length > 0) {
173
+ throw new Error(`Proof is missing demanded solutions: ${missingIds.join(', ')} (E: 161329081aff00f1a8e4cf9330a62326)`);
174
+ }
175
+ }
176
+ catch (error) {
177
+ console.error(`${lc} ${extractErrorMsg(error)}`);
178
+ throw error;
179
+ }
180
+ finally {
181
+ if (logalot) {
182
+ console.log(`${lc} complete.`);
183
+ }
184
+ }
185
+ }
186
+ /**
187
+ * Isomorphic pure function to intrinsically validate, persist, and register
188
+ * posted keystones. Shared between REST API and sync websocket receiver peers.
189
+ */
190
+ export async function validateAndRegisterPostKeystones({ ibGibs, metaspace, space }) {
191
+ const lc = `[${validateAndRegisterPostKeystones.name}]`;
192
+ try {
193
+ if (logalot) {
194
+ console.log(`${lc} starting... (I: aae81e3412c8c87bc8f3e227d81be826)`);
195
+ }
196
+ // 1. Intrinsic Validation
197
+ for (const ibGib of ibGibs) {
198
+ const errors = await validateIbGibIntrinsically({ ibGib });
199
+ if (errors && errors.length > 0) {
200
+ throw new Error(`Intrinsic validation failed for ${getIbGibAddr({ ibGib })}: ${errors.join(', ')} (E: 4162884c53183b58b3caaa48c26be826)`);
201
+ }
202
+ }
203
+ // 2. Keystone-specific checks & Registration
204
+ for (const ibGib of ibGibs) {
205
+ if (ibGib.ib?.startsWith('keystone')) {
206
+ // Registration handles genesis vs evolution internally via metastones
207
+ await metaspace.registerNewIbGib({
208
+ ibGib,
209
+ space
210
+ });
211
+ }
212
+ }
213
+ // 3. Persistence
214
+ await metaspace.put({ ibGibs, space });
215
+ }
216
+ catch (error) {
217
+ console.error(`${lc} ${extractErrorMsg(error)}`);
218
+ throw error;
219
+ }
220
+ finally {
221
+ if (logalot) {
222
+ console.log(`${lc} complete.`);
223
+ }
224
+ }
225
+ }
226
+ /**
227
+ * Isomorphic pure function to validate a keystone evolution transition and related S session keystones,
228
+ * and persist them to metaspace. Shared across REST API evolve handlers and future socket evolution channels.
229
+ */
230
+ export async function validateAndRegisterEvolveKeystone({ domainAddr, keystoneIbGib, relatedIbGibs = [], metaspace, space }) {
231
+ const lc = `[${validateAndRegisterEvolveKeystone.name}]`;
232
+ try {
233
+ if (logalot) {
234
+ console.log(`${lc} starting... (I: 42b826a690881cd5a8fe520cbdfad826)`);
235
+ }
236
+ const addr = getIbGibAddr({ ibGib: keystoneIbGib });
237
+ // 1. Intrinsic hash validation
238
+ const intrinsicErrors = await validateIbGibIntrinsically({ ibGib: keystoneIbGib });
239
+ if (intrinsicErrors && intrinsicErrors.length > 0) {
240
+ throw new Error(`Intrinsic keystone validation failed: ${intrinsicErrors.join(', ')} (E: 38ea984585edc6ee88d2a698c7895826)`);
241
+ }
242
+ // 2. Verify URL :domainAddr matches the keystone's tjp
243
+ const { tjpGib } = getGibInfo({ ibGibAddr: addr });
244
+ const expectedTjpGib = getGibInfo({ ibGibAddr: domainAddr }).punctiliarHash;
245
+ if (tjpGib !== expectedTjpGib) {
246
+ throw new Error(`Keystone tjpGib (${tjpGib}) does not match URL domainAddr tjpGib (${expectedTjpGib})`);
247
+ }
248
+ // 3. Load previous frame (the current tip in metaspace)
249
+ const keystoneService = new KeystoneService_V1();
250
+ let prevIbGib;
251
+ try {
252
+ prevIbGib = await keystoneService.getLatestKeystone({
253
+ addr: domainAddr,
254
+ metaspace,
255
+ space
256
+ });
257
+ }
258
+ catch (error) {
259
+ throw new Error(`Could not retrieve previous keystone tip for ${domainAddr}: ${extractErrorMsg(error)} (E: b73ed8aeb0d837d248718b487345d326)`);
260
+ }
261
+ // 4. Validate Evolution Transition
262
+ const validationErrors = await keystoneService.validate({
263
+ currentIbGib: keystoneIbGib,
264
+ prevIbGib
265
+ });
266
+ if (validationErrors && validationErrors.length > 0) {
267
+ throw new Error(`Keystone evolution validation failed: ${validationErrors.join(', ')} (E: 5212f8492ac839953842631834bcd826)`);
268
+ }
269
+ // 5. Check Single Pool Restriction
270
+ const proofs = keystoneIbGib.data?.proofs ?? [];
271
+ if (proofs.length === 0) {
272
+ throw new Error('No proofs found in evolved keystone data');
273
+ }
274
+ const poolIds = new Set();
275
+ for (const proof of proofs) {
276
+ for (const solution of proof.solutions || []) {
277
+ if (solution.poolId) {
278
+ poolIds.add(solution.poolId);
279
+ }
280
+ }
281
+ }
282
+ if (poolIds.size > 1) {
283
+ throw new Error(`Multiple pools evolved (${Array.from(poolIds).join(', ')}). Only one pool evolution allowed at a time. (E: 4a9b28ae33e8e3eb4ddbad981aa7b126)`);
284
+ }
285
+ // 6. Check that the verb is 'sync'
286
+ if (proofs.length !== 1) {
287
+ throw new Error(`evolving keystone with proofs.length !== 1? (E: 14e058a34964dcd7181395382cc60826)`);
288
+ }
289
+ const claim = proofs[0].claim;
290
+ if (!claim) {
291
+ throw new Error(`proof.claim is falsy (E: 54be88be2c975ef18e571a4286928826)`);
292
+ }
293
+ const { verb } = claim;
294
+ if (!verb) {
295
+ throw new Error(`claim.verb is falsy (E: 92cf38af58db2cd90e7132b8940fe326)`);
296
+ }
297
+ if (verb !== 'sync') {
298
+ throw new Error(`non-sync keystone evolution not yet implemented (E: eca4681b05486d1f784c0cb815ef9926)`);
299
+ }
300
+ const sAddr = claim.target;
301
+ if (!sAddr) {
302
+ throw new Error('No target address found in sync claim');
303
+ }
304
+ // Validate S^Stjp (session keystone ibgib) from relatedIbGibs
305
+ const sIbGib = relatedIbGibs.find(ibGib => getIbGibAddr({ ibGib }) === sAddr);
306
+ if (!sIbGib) {
307
+ throw new Error(`Session keystone ${sAddr} must be provided in relatedIbGibs (E: fe5a68438e288ab4e86c90d81d142826)`);
308
+ }
309
+ const sIntrinsicErrors = await validateIbGibIntrinsically({ ibGib: sIbGib });
310
+ if (sIntrinsicErrors && sIntrinsicErrors.length > 0) {
311
+ throw new Error(`Intrinsic validation failed for S^Stjp: ${sIntrinsicErrors.join(', ')} (E: 802d8350c3cccbd7184dd43866c05526)`);
312
+ }
313
+ const sGenesisErrors = await keystoneService.validateGenesisKeystone({ keystoneIbGib: sIbGib });
314
+ if (sGenesisErrors && sGenesisErrors.length > 0) {
315
+ throw new Error(`Genesis validation failed for S^Stjp: ${sGenesisErrors.join(', ')} (E: 8afdc1dbed48c000455b35585dc26826)`);
316
+ }
317
+ // Persist and Register both I and S
318
+ await metaspace.put({ ibGibs: [keystoneIbGib, sIbGib], space });
319
+ await metaspace.registerNewIbGib({ ibGib: keystoneIbGib, space });
320
+ await metaspace.registerNewIbGib({ ibGib: sIbGib, space });
321
+ }
322
+ catch (error) {
323
+ console.error(`${lc} ${extractErrorMsg(error)}`);
324
+ throw error;
325
+ }
326
+ finally {
327
+ if (logalot) {
328
+ console.log(`${lc} complete.`);
329
+ }
330
+ }
331
+ }
332
+ //# sourceMappingURL=sync-websocket-peer-helpers.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-websocket-peer-helpers.mjs","sourceRoot":"","sources":["../../../../../src/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-receiver/sync-websocket-peer-helpers.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @module sync-peer-websocket-sender-types
3
+ */
4
+ import { IbGib_V1 } from '@ibgib/ts-gib/dist/V1/types.mjs';
5
+ import { SyncPeerData_V1, SyncPeerRel8ns_V1, InitializeSyncPeerOpts, ConnectSyncPeerOpts } from '../../sync-peer-types.mjs';
6
+ /**
7
+ * Data for the SyncPeerWebSocketSender witness.
8
+ */
9
+ export interface SyncPeerWebSocketSenderData_V1 extends SyncPeerData_V1 {
10
+ /** The HTTP endpoint for posting pre-connect keystones (establish session) */
11
+ httpEvolveUrl: string;
12
+ /** The WebSocket endpoint for upgrading the sync saga connection */
13
+ wsUrl: string;
14
+ }
15
+ /**
16
+ * Relations for the SyncPeerWebSocketSender witness.
17
+ */
18
+ export interface SyncPeerWebSocketSenderRel8ns_V1 extends SyncPeerRel8ns_V1 {
19
+ }
20
+ /**
21
+ * The SyncPeerWebSocketSender witness IbGib.
22
+ */
23
+ export interface SyncPeerWebSocketSenderIbGib_V1 extends IbGib_V1<SyncPeerWebSocketSenderData_V1, SyncPeerWebSocketSenderRel8ns_V1> {
24
+ }
25
+ export interface ConnectSyncPeerWebSocketSenderOpts extends ConnectSyncPeerOpts {
26
+ }
27
+ export interface InitializeSyncPeerWebSocketSenderOpts extends InitializeSyncPeerOpts {
28
+ }
29
+ //# sourceMappingURL=sync-peer-websocket-sender-types.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-peer-websocket-sender-types.d.mts","sourceRoot":"","sources":["../../../../../src/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-sender/sync-peer-websocket-sender-types.mts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EACH,eAAe,EAAE,iBAAiB,EAClC,sBAAsB,EAAE,mBAAmB,EAC9C,MAAM,2BAA2B,CAAC;AAEnC;;GAEG;AACH,MAAM,WAAW,8BAA+B,SAAQ,eAAe;IACnE,8EAA8E;IAC9E,aAAa,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gCAAiC,SAAQ,iBAAiB;CAC1E;AAED;;GAEG;AACH,MAAM,WAAW,+BAAgC,SAAQ,QAAQ,CAAC,8BAA8B,EAAE,gCAAgC,CAAC;CAAI;AAEvI,MAAM,WAAW,kCAAmC,SAAQ,mBAAmB;CAC9E;AAED,MAAM,WAAW,qCAAsC,SAAQ,sBAAsB;CACpF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sync-peer-websocket-sender-types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-peer-websocket-sender-types.mjs","sourceRoot":"","sources":["../../../../../src/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-sender/sync-peer-websocket-sender-types.mts"],"names":[],"mappings":""}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @module sync-peer-websocket-sender-v1
3
+ */
4
+ import { IbGib_V1 } from '@ibgib/ts-gib/dist/V1/types.mjs';
5
+ import { KeystoneIbGib_V1 } from '../../../../keystone/keystone-types.mjs';
6
+ import { SyncPeer_V1 } from '../../sync-peer-v1.mjs';
7
+ import { SyncSagaContextIbGib_V1 } from '../../../sync-saga-context/sync-saga-context-types.mjs';
8
+ import { ConnectSyncPeerWebSocketSenderOpts, InitializeSyncPeerWebSocketSenderOpts, SyncPeerWebSocketSenderData_V1, SyncPeerWebSocketSenderRel8ns_V1, SyncPeerWebSocketSenderIbGib_V1 } from './sync-peer-websocket-sender-types.mjs';
9
+ /**
10
+ * WebSocket Sender Peer implementation running in browser/native environment.
11
+ */
12
+ export declare class SyncPeerWebSocketSender_V1 extends SyncPeer_V1<ConnectSyncPeerWebSocketSenderOpts, InitializeSyncPeerWebSocketSenderOpts> implements SyncPeerWebSocketSenderIbGib_V1 {
13
+ protected lc: string;
14
+ get classname(): string;
15
+ get isSocketOpen(): boolean;
16
+ data: SyncPeerWebSocketSenderData_V1 | undefined;
17
+ rel8ns: SyncPeerWebSocketSenderRel8ns_V1 | undefined;
18
+ protected ws?: WebSocket;
19
+ protected activeResolve?: (value: SyncSagaContextIbGib_V1 | undefined) => void;
20
+ protected activeReject?: (reason: any) => void;
21
+ protected pendingPayloadsToSend: IbGib_V1[];
22
+ constructor(initialData: SyncPeerWebSocketSenderData_V1, initialRel8ns?: SyncPeerWebSocketSenderRel8ns_V1);
23
+ protected preConnectCheck(opts: ConnectSyncPeerWebSocketSenderOpts): Promise<void>;
24
+ /**
25
+ * Submits the evolved master identity (I1) and new session keystone (S) to the server's HTTP registry.
26
+ */
27
+ protected postEstablishToReceiver({ newSenderIdentity, sessionIdentity, }: {
28
+ newSenderIdentity: KeystoneIbGib_V1;
29
+ sessionIdentity: KeystoneIbGib_V1;
30
+ }): Promise<void>;
31
+ /**
32
+ * Establishes the stateful WebSocket connection and performs the multi-turn cryptographic challenge connect.
33
+ */
34
+ protected connectImpl(opts: ConnectSyncPeerWebSocketSenderOpts): Promise<void>;
35
+ /**
36
+ * Handles synchronizing messages and evolved context frames during active transaction turns.
37
+ */
38
+ protected handleRuntimeMessage(event: MessageEvent): Promise<void>;
39
+ /**
40
+ * Serializes the transaction context and payload down the active WebSocket connection.
41
+ */
42
+ protected sendContextRequest(context: SyncSagaContextIbGib_V1): Promise<SyncSagaContextIbGib_V1 | undefined>;
43
+ }
44
+ //# sourceMappingURL=sync-peer-websocket-sender-v1.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-peer-websocket-sender-v1.d.mts","sourceRoot":"","sources":["../../../../../src/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-sender/sync-peer-websocket-sender-v1.mts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAI3E,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wDAAwD,CAAC;AAEjG,OAAO,EACH,kCAAkC,EAClC,qCAAqC,EACrC,8BAA8B,EAC9B,gCAAgC,EAChC,+BAA+B,EAClC,MAAM,wCAAwC,CAAC;AAShD;;GAEG;AACH,qBAAa,0BACT,SAAQ,WAAW,CAAC,kCAAkC,EAAE,qCAAqC,CAC7F,YAAW,+BAA+B;IAE1C,UAAmB,EAAE,EAAE,MAAM,CAA0C;IAEvE,IAAa,SAAS,IAAI,MAAM,CAE/B;IAED,IAAW,YAAY,IAAI,OAAO,CAEjC;IAEO,IAAI,EAAE,8BAA8B,GAAG,SAAS,CAAC;IACjD,MAAM,EAAE,gCAAgC,GAAG,SAAS,CAAC;IAE7D,SAAS,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC;IACzB,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,GAAG,SAAS,KAAK,IAAI,CAAC;IAC/E,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/C,SAAS,CAAC,qBAAqB,EAAE,QAAQ,EAAE,CAAM;gBAG7C,WAAW,EAAE,8BAA8B,EAC3C,aAAa,CAAC,EAAE,gCAAgC;cAK3B,eAAe,CAAC,IAAI,EAAE,kCAAkC,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjG;;OAEG;cACsB,uBAAuB,CAAC,EAC7C,iBAAiB,EACjB,eAAe,GAClB,EAAE;QACC,iBAAiB,EAAE,gBAAgB,CAAC;QACpC,eAAe,EAAE,gBAAgB,CAAC;KACrC,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCjB;;OAEG;cACsB,WAAW,CAAC,IAAI,EAAE,kCAAkC,GAAG,OAAO,CAAC,IAAI,CAAC;IA+I7F;;OAEG;cACa,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAiDxE;;OAEG;cACsB,kBAAkB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,GAAG,SAAS,CAAC;CA+B9H"}