@ibgib/core-gib 0.1.58 → 0.1.60

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 (96) hide show
  1. package/CHANGELOG.md +9 -1
  2. package/dist/sync/sync-peer/sync-peer-http-receiver/sync-peer-http-receiver-v1.d.mts.map +1 -1
  3. package/dist/sync/sync-peer/sync-peer-http-receiver/sync-peer-http-receiver-v1.mjs +6 -2
  4. package/dist/sync/sync-peer/sync-peer-http-receiver/sync-peer-http-receiver-v1.mjs.map +1 -1
  5. package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-types.d.mts +1 -1
  6. package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.d.mts +1 -1
  7. package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.d.mts.map +1 -1
  8. package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.mjs +7 -11
  9. package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.mjs.map +1 -1
  10. package/dist/sync/sync-peer/sync-peer-types.d.mts +24 -1
  11. package/dist/sync/sync-peer/sync-peer-types.d.mts.map +1 -1
  12. package/dist/sync/sync-peer/sync-peer-v1.d.mts +15 -4
  13. package/dist/sync/sync-peer/sync-peer-v1.d.mts.map +1 -1
  14. package/dist/sync/sync-peer/sync-peer-v1.mjs +120 -25
  15. package/dist/sync/sync-peer/sync-peer-v1.mjs.map +1 -1
  16. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-constants.d.mts +46 -0
  17. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-constants.d.mts.map +1 -0
  18. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-constants.mjs +45 -0
  19. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-constants.mjs.map +1 -0
  20. package/dist/sync/sync-peer/{sync-peer-websocket-receiver → sync-peer-websocket/sync-peer-websocket-receiver}/sync-peer-websocket-receiver-types.d.mts +2 -2
  21. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-receiver/sync-peer-websocket-receiver-types.d.mts.map +1 -0
  22. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-receiver/sync-peer-websocket-receiver-types.mjs.map +1 -0
  23. package/dist/sync/sync-peer/{sync-peer-websocket-receiver → sync-peer-websocket/sync-peer-websocket-receiver}/sync-peer-websocket-receiver-v1.d.mts +11 -8
  24. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-receiver/sync-peer-websocket-receiver-v1.d.mts.map +1 -0
  25. package/dist/sync/sync-peer/{sync-peer-websocket-receiver → sync-peer-websocket/sync-peer-websocket-receiver}/sync-peer-websocket-receiver-v1.mjs +115 -61
  26. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-receiver/sync-peer-websocket-receiver-v1.mjs.map +1 -0
  27. package/dist/sync/sync-peer/{sync-peer-websocket-receiver → sync-peer-websocket/sync-peer-websocket-receiver}/sync-websocket-peer-helpers.d.mts +3 -3
  28. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-receiver/sync-websocket-peer-helpers.d.mts.map +1 -0
  29. package/dist/sync/sync-peer/{sync-peer-websocket-receiver → sync-peer-websocket/sync-peer-websocket-receiver}/sync-websocket-peer-helpers.mjs +6 -6
  30. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-receiver/sync-websocket-peer-helpers.mjs.map +1 -0
  31. package/dist/sync/sync-peer/{sync-peer-websocket-sender → sync-peer-websocket/sync-peer-websocket-sender}/sync-peer-websocket-sender-types.d.mts +1 -1
  32. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-sender/sync-peer-websocket-sender-types.d.mts.map +1 -0
  33. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-sender/sync-peer-websocket-sender-types.mjs.map +1 -0
  34. package/dist/sync/sync-peer/{sync-peer-websocket-sender → sync-peer-websocket/sync-peer-websocket-sender}/sync-peer-websocket-sender-v1.d.mts +22 -4
  35. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-sender/sync-peer-websocket-sender-v1.d.mts.map +1 -0
  36. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-sender/sync-peer-websocket-sender-v1.mjs +447 -0
  37. package/dist/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-sender/sync-peer-websocket-sender-v1.mjs.map +1 -0
  38. package/dist/sync/sync-saga-context/sync-saga-context-helpers.d.mts +22 -5
  39. package/dist/sync/sync-saga-context/sync-saga-context-helpers.d.mts.map +1 -1
  40. package/dist/sync/sync-saga-context/sync-saga-context-helpers.mjs +263 -28
  41. package/dist/sync/sync-saga-context/sync-saga-context-helpers.mjs.map +1 -1
  42. package/dist/sync/sync-saga-context/sync-saga-context-types.d.mts +13 -0
  43. package/dist/sync/sync-saga-context/sync-saga-context-types.d.mts.map +1 -1
  44. package/dist/sync/sync-saga-coordinator.d.mts +12 -1
  45. package/dist/sync/sync-saga-coordinator.d.mts.map +1 -1
  46. package/dist/sync/sync-saga-coordinator.mjs +106 -12
  47. package/dist/sync/sync-saga-coordinator.mjs.map +1 -1
  48. package/dist/sync/sync-types.d.mts +24 -0
  49. package/dist/sync/sync-types.d.mts.map +1 -1
  50. package/dist/sync/sync-types.mjs +0 -1
  51. package/dist/sync/sync-types.mjs.map +1 -1
  52. package/dist/sync/sync-withid.connect.respec.mjs +3 -3
  53. package/dist/sync/sync-withid.connect.respec.mjs.map +1 -1
  54. package/dist/sync/sync-withid.pingpong.respec.d.mts +11 -0
  55. package/dist/sync/sync-withid.pingpong.respec.d.mts.map +1 -0
  56. package/dist/sync/sync-withid.pingpong.respec.mjs +199 -0
  57. package/dist/sync/sync-withid.pingpong.respec.mjs.map +1 -0
  58. package/dist/witness/space/inner-space/inner-space-v1.d.mts.map +1 -1
  59. package/dist/witness/space/inner-space/inner-space-v1.mjs +1 -1
  60. package/dist/witness/space/inner-space/inner-space-v1.mjs.map +1 -1
  61. package/package.json +1 -1
  62. package/src/sync/docs/security-3b.md +92 -0
  63. package/src/sync/docs/security.md +107 -39
  64. package/src/sync/sync-peer/sync-peer-http-receiver/sync-peer-http-receiver-v1.mts +6 -2
  65. package/src/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-types.mts +1 -1
  66. package/src/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.mts +11 -14
  67. package/src/sync/sync-peer/sync-peer-types.mts +28 -1
  68. package/src/sync/sync-peer/sync-peer-v1.mts +127 -35
  69. package/src/sync/sync-peer/sync-peer-websocket/README.md +42 -0
  70. package/src/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-constants.mts +68 -0
  71. package/src/sync/sync-peer/{sync-peer-websocket-receiver → sync-peer-websocket/sync-peer-websocket-receiver}/sync-peer-websocket-receiver-types.mts +2 -2
  72. package/src/sync/sync-peer/{sync-peer-websocket-receiver → sync-peer-websocket/sync-peer-websocket-receiver}/sync-peer-websocket-receiver-v1.mts +128 -71
  73. package/src/sync/sync-peer/{sync-peer-websocket-receiver → sync-peer-websocket/sync-peer-websocket-receiver}/sync-websocket-peer-helpers.mts +8 -8
  74. package/src/sync/sync-peer/{sync-peer-websocket-sender → sync-peer-websocket/sync-peer-websocket-sender}/sync-peer-websocket-sender-types.mts +1 -1
  75. package/src/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-sender/sync-peer-websocket-sender-v1.mts +509 -0
  76. package/src/sync/sync-saga-context/sync-saga-context-helpers.mts +267 -36
  77. package/src/sync/sync-saga-context/sync-saga-context-types.mts +14 -0
  78. package/src/sync/sync-saga-coordinator.mts +148 -8
  79. package/src/sync/sync-types.mts +28 -4
  80. package/src/sync/sync-withid.connect.respec.mts +3 -3
  81. package/src/sync/sync-withid.pingpong.respec.mts +234 -0
  82. package/src/witness/space/inner-space/inner-space-v1.mts +4 -5
  83. package/dist/sync/sync-peer/sync-peer-websocket-receiver/sync-peer-websocket-receiver-types.d.mts.map +0 -1
  84. package/dist/sync/sync-peer/sync-peer-websocket-receiver/sync-peer-websocket-receiver-types.mjs.map +0 -1
  85. package/dist/sync/sync-peer/sync-peer-websocket-receiver/sync-peer-websocket-receiver-v1.d.mts.map +0 -1
  86. package/dist/sync/sync-peer/sync-peer-websocket-receiver/sync-peer-websocket-receiver-v1.mjs.map +0 -1
  87. package/dist/sync/sync-peer/sync-peer-websocket-receiver/sync-websocket-peer-helpers.d.mts.map +0 -1
  88. package/dist/sync/sync-peer/sync-peer-websocket-receiver/sync-websocket-peer-helpers.mjs.map +0 -1
  89. package/dist/sync/sync-peer/sync-peer-websocket-sender/sync-peer-websocket-sender-types.d.mts.map +0 -1
  90. package/dist/sync/sync-peer/sync-peer-websocket-sender/sync-peer-websocket-sender-types.mjs.map +0 -1
  91. package/dist/sync/sync-peer/sync-peer-websocket-sender/sync-peer-websocket-sender-v1.d.mts.map +0 -1
  92. package/dist/sync/sync-peer/sync-peer-websocket-sender/sync-peer-websocket-sender-v1.mjs +0 -282
  93. package/dist/sync/sync-peer/sync-peer-websocket-sender/sync-peer-websocket-sender-v1.mjs.map +0 -1
  94. package/src/sync/sync-peer/sync-peer-websocket-sender/sync-peer-websocket-sender-v1.mts +0 -321
  95. /package/dist/sync/sync-peer/{sync-peer-websocket-receiver → sync-peer-websocket/sync-peer-websocket-receiver}/sync-peer-websocket-receiver-types.mjs +0 -0
  96. /package/dist/sync/sync-peer/{sync-peer-websocket-sender → sync-peer-websocket/sync-peer-websocket-sender}/sync-peer-websocket-sender-types.mjs +0 -0
@@ -2,7 +2,7 @@
2
2
  * @module sync-peer-websocket-sender-types
3
3
  */
4
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';
5
+ import { SyncPeerData_V1, SyncPeerRel8ns_V1, InitializeSyncPeerOpts, ConnectSyncPeerOpts } from '../../sync-peer-types.mjs';
6
6
  /**
7
7
  * Data for the SyncPeerWebSocketSender witness.
8
8
  */
@@ -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 @@
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":""}
@@ -1,9 +1,10 @@
1
1
  /**
2
2
  * @module sync-peer-websocket-sender-v1
3
3
  */
4
- import { KeystoneIbGib_V1 } from '../../../keystone/keystone-types.mjs';
5
- import { SyncPeer_V1 } from '../sync-peer-v1.mjs';
6
- import { SyncSagaContextIbGib_V1 } from '../../sync-saga-context/sync-saga-context-types.mjs';
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';
7
8
  import { ConnectSyncPeerWebSocketSenderOpts, InitializeSyncPeerWebSocketSenderOpts, SyncPeerWebSocketSenderData_V1, SyncPeerWebSocketSenderRel8ns_V1, SyncPeerWebSocketSenderIbGib_V1 } from './sync-peer-websocket-sender-types.mjs';
8
9
  /**
9
10
  * WebSocket Sender Peer implementation running in browser/native environment.
@@ -17,6 +18,8 @@ export declare class SyncPeerWebSocketSender_V1 extends SyncPeer_V1<ConnectSyncP
17
18
  protected ws?: WebSocket;
18
19
  protected activeResolve?: (value: SyncSagaContextIbGib_V1 | undefined) => void;
19
20
  protected activeReject?: (reason: any) => void;
21
+ protected pendingPayloadsToSend: IbGib_V1[];
22
+ protected handshakeMessageListener?: (event: MessageEvent) => Promise<void>;
20
23
  constructor(initialData: SyncPeerWebSocketSenderData_V1, initialRel8ns?: SyncPeerWebSocketSenderRel8ns_V1);
21
24
  protected preConnectCheck(opts: ConnectSyncPeerWebSocketSenderOpts): Promise<void>;
22
25
  /**
@@ -30,10 +33,25 @@ export declare class SyncPeerWebSocketSender_V1 extends SyncPeer_V1<ConnectSyncP
30
33
  * Establishes the stateful WebSocket connection and performs the multi-turn cryptographic challenge connect.
31
34
  */
32
35
  protected connectImpl(opts: ConnectSyncPeerWebSocketSenderOpts): Promise<void>;
36
+ /**
37
+ * Cleanly closes the socket and removes the handshake message listener.
38
+ *
39
+ * LOGS AND SWALLOWS ERRORS, DOES NOT THROW
40
+ */
41
+ disconnect(): void;
33
42
  /**
34
43
  * Handles synchronizing messages and evolved context frames during active transaction turns.
35
44
  */
36
- protected handleRuntimeMessage(event: MessageEvent): void;
45
+ protected handleRuntimeMessage(event: MessageEvent): Promise<void>;
46
+ protected handleHandshakeAuthChallengeInit(ws: WebSocket, targetSAddr: string): Promise<void>;
47
+ protected handleHandshakeAuthChallenge(ws: WebSocket, msg: any, sessionS: KeystoneIbGib_V1, sessionSecret: string): Promise<void>;
48
+ protected handleHandshakeAuthOk(ws: WebSocket, resolve: () => void): void;
49
+ protected handleHandshakeAuthFail(msg: any, reject: (err: Error) => void): void;
50
+ protected handleHandshakeSyncError(msg: any, reject: (err: Error) => void): void;
51
+ protected handleRuntimeSyncFrameResponse(msg: any): Promise<void>;
52
+ protected handleRuntimeSyncFrameAuthenticated(): void;
53
+ protected handleRuntimeDomainPayload(msg: any): void;
54
+ protected handleRuntimeSyncError(msg: any): void;
37
55
  /**
38
56
  * Serializes the transaction context and payload down the active WebSocket connection.
39
57
  */
@@ -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":"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"}
@@ -0,0 +1,447 @@
1
+ /**
2
+ * @module sync-peer-websocket-sender-v1
3
+ */
4
+ import { extractErrorMsg } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
5
+ import { getIbGibAddr } from '@ibgib/ts-gib/dist/helper.mjs';
6
+ import { KeystoneStrategyFactory } from '../../../../keystone/strategy/keystone-strategy-factory.mjs';
7
+ import { deriveSessionSecret } from '../../../sync-helpers.mjs';
8
+ import { SyncPeer_V1 } from '../../sync-peer-v1.mjs';
9
+ import { validateContextAndSagaFrame } from '../../../sync-saga-context/sync-saga-context-helpers.mjs';
10
+ import { GLOBAL_LOG_A_LOT } from '../../../../core-constants.mjs';
11
+ import { SESSION_KEYSTONE_POLICY, getConnectChallenge } from '../sync-peer-websocket-receiver/sync-websocket-peer-helpers.mjs';
12
+ import { SyncWebSocketMsgType, isSyncWebSocketMsgType, SYNC_WEB_SOCKET_MSG_TYPE_VALID_VALUES } from '../sync-peer-websocket-constants.mjs';
13
+ import { toDto } from '../../../../common/other/ibgib-helper.mjs';
14
+ import { putInSpace, registerNewIbGib } from '../../../../witness/space/space-helper.mjs';
15
+ /**
16
+ * helper in creating compile-time safety that we're handling all message types.
17
+ */
18
+ function assertUnreachable(x) {
19
+ throw new Error(`Unhandled message type: ${x} (E: e928a3f82cd7469a98ef1bc248a3f826)`);
20
+ }
21
+ const logalot = GLOBAL_LOG_A_LOT || true;
22
+ /**
23
+ * WebSocket Sender Peer implementation running in browser/native environment.
24
+ */
25
+ export class SyncPeerWebSocketSender_V1 extends SyncPeer_V1 {
26
+ lc = `[${SyncPeerWebSocketSender_V1.name}]`;
27
+ get classname() {
28
+ return SyncPeerWebSocketSender_V1.name;
29
+ }
30
+ get isSocketOpen() {
31
+ return this.ws !== undefined && this.ws.readyState === WebSocket.OPEN;
32
+ }
33
+ ws;
34
+ activeResolve;
35
+ activeReject;
36
+ pendingPayloadsToSend = [];
37
+ handshakeMessageListener;
38
+ constructor(initialData, initialRel8ns) {
39
+ super(initialData, initialRel8ns);
40
+ }
41
+ async preConnectCheck(opts) {
42
+ const lc = `${this.lc}[${this.preConnectCheck.name}]`;
43
+ if (!this.data?.wsUrl) {
44
+ throw new Error(`Missing wsUrl in peer data (E: a3b2c1d0e9f8e7d6c5b4a3f2e1d0c910)`);
45
+ }
46
+ if (!this.data?.httpEvolveUrl) {
47
+ throw new Error(`Missing httpEvolveUrl in peer data (E: a3b2c1d0e9f8e7d6c5b4a3f2e1d0c911)`);
48
+ }
49
+ }
50
+ /**
51
+ * Submits the evolved master identity (I1) and new session keystone (S) to the server's HTTP registry.
52
+ */
53
+ async postEstablishToReceiver({ newSenderIdentity, sessionIdentity, }) {
54
+ const lc = `${this.lc}[${this.postEstablishToReceiver.name}]`;
55
+ try {
56
+ if (logalot) {
57
+ console.log(`${lc} posting evolved keystones to ${this.data.httpEvolveUrl}...`);
58
+ }
59
+ if (!this.data) {
60
+ throw new Error(`(UNEXPECTED) this.data falsy? (E: d642e8a9af18b532c87c6f581aa53b26)`);
61
+ }
62
+ if (!this.data.httpEvolveUrl) {
63
+ throw new Error(`(UNEXPECTED) this.data.httpEvolveUrl falsy? (E: 8589ddbb155914d85c09658881da2c26)`);
64
+ }
65
+ const response = await fetch(this.data.httpEvolveUrl, {
66
+ method: 'PUT',
67
+ headers: {
68
+ 'Content-Type': 'application/json',
69
+ },
70
+ body: JSON.stringify({
71
+ keystoneIbGib: newSenderIdentity,
72
+ relatedIbGibs: [sessionIdentity]
73
+ }),
74
+ });
75
+ if (!response.ok) {
76
+ const data = await response.json().catch(() => ({}));
77
+ const errorMsg = data.message || data.error || 'Unknown error';
78
+ throw new Error(`HTTP ${response.status} evolution post rejected. errorMsg: ${errorMsg} (E: e8a478291b88d05c68cf6b385684b826)`);
79
+ }
80
+ if (logalot) {
81
+ console.log(`${lc} evolve post accepted by server.`);
82
+ }
83
+ }
84
+ catch (error) {
85
+ console.error(`${lc} establish post failed: ${extractErrorMsg(error)}`);
86
+ throw error;
87
+ }
88
+ }
89
+ /**
90
+ * Establishes the stateful WebSocket connection and performs the multi-turn cryptographic challenge connect.
91
+ */
92
+ async connectImpl(opts) {
93
+ const lc = `${this.lc}[${this.connectImpl.name}]`;
94
+ try {
95
+ if (logalot) {
96
+ console.log(`${lc} starting...`);
97
+ }
98
+ const { senderIdentity, fnSenderSecret, sagaId, localMetaspace, localSpace } = this.opts;
99
+ if (!senderIdentity || !fnSenderSecret || !sagaId) {
100
+ throw new Error(`Missing identity parameters in peer options (E: ed49b6711ac82efcdb42b8a28c5b6826)`);
101
+ }
102
+ // 1. Solve upfront pre-filter solution
103
+ const senderSecret = await fnSenderSecret();
104
+ const sessionSecret = await deriveSessionSecret({ senderSecret, sagaId });
105
+ // Fetch session identity S that establishSessionIdentity just created
106
+ const sAddr_tjp = getIbGibAddr({ ibGib: senderIdentity }); // wait, S's past contains I
107
+ // Actually, we can get the S keystone that was returned by establishSessionIdentity.
108
+ // Let's resolve S from the sender localSpace using its target claim or the targetAddrs
109
+ const sAddr = getIbGibAddr({ ibGib: senderIdentity.rel8ns?.past ? senderIdentity : senderIdentity }); // stub: get the actual generated S
110
+ // To make sure we have the exact session identity S, we can query localSpace.
111
+ // Since we know the sagaId, we can walk or locate it.
112
+ // But wait, the coordinator calls establishSessionIdentity first, which returns the created S keystone!
113
+ // Let's store a reference to the sessionIdentity S on this class during establish, or lookup from localSpace.
114
+ // Wait, does the coordinator let the peer store S? No, but let's query the latest keystone in localSpace.
115
+ const senderIdentityLatestAddr = await localMetaspace.getLatestAddr({ ibGib: senderIdentity, space: localSpace });
116
+ if (!senderIdentityLatestAddr) {
117
+ throw new Error(`senderIdentityLatestAddr falsy. we should have a latest addr that is different than the sender identity at this point (done in the peer establish phase) (E: 225607318bef485d7821f82de97b6826)`);
118
+ }
119
+ const resGet = await localMetaspace.get({ addrs: [senderIdentityLatestAddr], space: localSpace });
120
+ const I_tip = resGet.ibGibs?.[0];
121
+ // const targetSAddr = I_tip?.rel8ns?.past?.[0] ?? I_tip?.data?.proofs?.[0]?.claim?.target;
122
+ const targetSAddr = I_tip.data.proofs.at(0)?.claim.target;
123
+ if (!targetSAddr) {
124
+ throw new Error(`Could not locate session keystone target from identity (E: 5ec4882f7e5e4c33fbd00ab8b3166726)`);
125
+ }
126
+ const resGetS = await localMetaspace.get({ addrs: [targetSAddr], space: localSpace });
127
+ const sessionS = resGetS.ibGibs?.[0];
128
+ if (!sessionS) {
129
+ throw new Error(`Session keystone not found in local space: ${targetSAddr} (E: 9ba818e6622808bb4ae749be31f80b26)`);
130
+ }
131
+ // Solve dynamic upfront picket-fence challenge
132
+ const connectPool = (sessionS.data?.challengePools ?? [])
133
+ .find(p => p.id === SESSION_KEYSTONE_POLICY.CONNECT_POOL.ID);
134
+ if (!connectPool) {
135
+ throw new Error(`Session keystone missing connect pool (E: f50968afca04b6d38ec19824ea201826)`);
136
+ }
137
+ const { challengeId } = getConnectChallenge(sessionS);
138
+ const strategy = KeystoneStrategyFactory.create({ config: connectPool.config });
139
+ const poolSecret = await strategy.derivePoolSecret({ masterSecret: sessionSecret });
140
+ const solution = await strategy.generateSolution({
141
+ poolSecret,
142
+ poolId: SESSION_KEYSTONE_POLICY.CONNECT_POOL.ID,
143
+ challengeId
144
+ });
145
+ // 2. Open WebSocket connection
146
+ const wsUrl = `${this.data.wsUrl}?sAddr=${encodeURIComponent(targetSAddr)}&solution=${encodeURIComponent(solution.value)}`;
147
+ if (logalot) {
148
+ console.log(`${lc} connecting to WebSocket: ${wsUrl}`);
149
+ }
150
+ const ws = new WebSocket(wsUrl);
151
+ this.ws = ws;
152
+ return new Promise((resolve, reject) => {
153
+ let isResolved = false;
154
+ ws.addEventListener('open', () => {
155
+ if (logalot) {
156
+ console.log(`${lc} WebSocket opened. Awaiting challenge...`);
157
+ }
158
+ });
159
+ this.handshakeMessageListener = async (ev) => {
160
+ try {
161
+ const msg = JSON.parse(ev.data);
162
+ if (logalot) {
163
+ console.log(`${lc} received handshake frame: ${msg.type}`);
164
+ }
165
+ const msgType = msg.type;
166
+ if (!isSyncWebSocketMsgType(msgType)) {
167
+ const validTypes = SYNC_WEB_SOCKET_MSG_TYPE_VALID_VALUES.join(', ');
168
+ throw new Error(`Unknown message type '${msgType}' received during connection handshake. Valid types are: ${validTypes} (E: e983271bc84f46928e4695be2409826)`);
169
+ }
170
+ switch (msgType) {
171
+ case SyncWebSocketMsgType.auth_challenge_init:
172
+ await this.handleHandshakeAuthChallengeInit(ws, targetSAddr);
173
+ break;
174
+ case SyncWebSocketMsgType.auth_challenge:
175
+ await this.handleHandshakeAuthChallenge(ws, msg, sessionS, sessionSecret);
176
+ break;
177
+ case SyncWebSocketMsgType.auth_ok:
178
+ isResolved = true;
179
+ this.handleHandshakeAuthOk(ws, resolve);
180
+ break;
181
+ case SyncWebSocketMsgType.auth_fail:
182
+ this.handleHandshakeAuthFail(msg, reject);
183
+ break;
184
+ case SyncWebSocketMsgType.sync_error:
185
+ this.handleHandshakeSyncError(msg, reject);
186
+ break;
187
+ // Protocol violations / unexpected messages during connection handshake
188
+ case SyncWebSocketMsgType.auth_init:
189
+ case SyncWebSocketMsgType.auth_proof:
190
+ case SyncWebSocketMsgType.sync_frame:
191
+ case SyncWebSocketMsgType.sync_frame_response:
192
+ case SyncWebSocketMsgType.sync_frame_authenticated:
193
+ case SyncWebSocketMsgType.sync_frame_response_authenticated:
194
+ case SyncWebSocketMsgType.domain_payload:
195
+ throw new Error(`Unexpected message type '${msgType}' during connection handshake (E: e3f80c68ab2a46c2b1858c8a1e2f8926)`);
196
+ default:
197
+ assertUnreachable(msgType);
198
+ }
199
+ }
200
+ catch (error) {
201
+ console.error(`${lc} ${extractErrorMsg(error)}`);
202
+ reject(error);
203
+ }
204
+ };
205
+ ws.addEventListener('message', this.handshakeMessageListener);
206
+ ws.addEventListener('close', (event) => {
207
+ if (!isResolved) {
208
+ this.disconnect();
209
+ reject(new Error(`WebSocket closed before connect completed (code: ${event.code})`));
210
+ }
211
+ });
212
+ ws.addEventListener('error', (err) => {
213
+ if (!isResolved) {
214
+ this.disconnect();
215
+ reject(new Error(`WebSocket connection error`));
216
+ }
217
+ });
218
+ });
219
+ }
220
+ catch (error) {
221
+ console.error(`${lc} connect failed: ${extractErrorMsg(error)}`);
222
+ throw error;
223
+ }
224
+ }
225
+ /**
226
+ * Cleanly closes the socket and removes the handshake message listener.
227
+ *
228
+ * LOGS AND SWALLOWS ERRORS, DOES NOT THROW
229
+ */
230
+ disconnect() {
231
+ const lc = `${this.lc}[${this.disconnect.name}]`;
232
+ try {
233
+ if (logalot) {
234
+ console.log(`${lc} starting... (I: 35c4b85fca0c6e9d042f5ff87cde3826)`);
235
+ }
236
+ if (this.ws) {
237
+ if (this.handshakeMessageListener) {
238
+ this.ws.removeEventListener('message', this.handshakeMessageListener);
239
+ this.handshakeMessageListener = undefined;
240
+ }
241
+ try {
242
+ this.ws.close();
243
+ }
244
+ catch (error) {
245
+ console.error(`${lc} failed to close websocket: ${extractErrorMsg(error)}`);
246
+ }
247
+ this.ws = undefined;
248
+ }
249
+ }
250
+ catch (error) {
251
+ console.error(`${lc} ${extractErrorMsg(error)}`);
252
+ // throw error; // disconnect does NOT rethrow
253
+ }
254
+ finally {
255
+ if (logalot) {
256
+ console.log(`${lc} complete.`);
257
+ }
258
+ }
259
+ }
260
+ /**
261
+ * Handles synchronizing messages and evolved context frames during active transaction turns.
262
+ */
263
+ async handleRuntimeMessage(event) {
264
+ const lc = `${this.lc}[${this.handleRuntimeMessage.name}]`;
265
+ try {
266
+ const msg = JSON.parse(event.data);
267
+ if (logalot) {
268
+ console.log(`${lc} received runtime frame: ${msg.type}`);
269
+ }
270
+ const msgType = msg.type;
271
+ if (!isSyncWebSocketMsgType(msgType)) {
272
+ const validTypes = SYNC_WEB_SOCKET_MSG_TYPE_VALID_VALUES.join(', ');
273
+ throw new Error(`Unknown message type '${msgType}' received during active sync saga loop. Valid types are: ${validTypes} (E: e23a8d10b74d47fb90518f8e3f4b826)`);
274
+ }
275
+ switch (msgType) {
276
+ case SyncWebSocketMsgType.sync_frame_response:
277
+ await this.handleRuntimeSyncFrameResponse(msg);
278
+ break;
279
+ case SyncWebSocketMsgType.sync_frame_authenticated:
280
+ this.handleRuntimeSyncFrameAuthenticated();
281
+ break;
282
+ case SyncWebSocketMsgType.domain_payload:
283
+ this.handleRuntimeDomainPayload(msg);
284
+ break;
285
+ case SyncWebSocketMsgType.sync_error:
286
+ this.handleRuntimeSyncError(msg);
287
+ break;
288
+ // Handshake messages / unexpected messages during active sync saga loop
289
+ case SyncWebSocketMsgType.auth_challenge_init:
290
+ case SyncWebSocketMsgType.auth_init:
291
+ case SyncWebSocketMsgType.auth_challenge:
292
+ case SyncWebSocketMsgType.auth_proof:
293
+ case SyncWebSocketMsgType.auth_ok:
294
+ case SyncWebSocketMsgType.auth_fail:
295
+ case SyncWebSocketMsgType.sync_frame:
296
+ case SyncWebSocketMsgType.sync_frame_response_authenticated:
297
+ throw new Error(`Unexpected message type '${msgType}' during active sync saga loop (E: e982b12cf92c448bbad0e84b7263c826)`);
298
+ default:
299
+ assertUnreachable(msgType);
300
+ }
301
+ }
302
+ catch (error) {
303
+ console.error(`${lc} failed parsing/handling runtime frame: ${extractErrorMsg(error)}`);
304
+ this.disconnect();
305
+ if (this.activeReject) {
306
+ const reject = this.activeReject;
307
+ this.activeResolve = undefined;
308
+ this.activeReject = undefined;
309
+ reject(error);
310
+ }
311
+ }
312
+ }
313
+ async handleHandshakeAuthChallengeInit(ws, targetSAddr) {
314
+ ws.send(JSON.stringify({
315
+ type: SyncWebSocketMsgType.auth_init,
316
+ sAddr: targetSAddr
317
+ }));
318
+ }
319
+ async handleHandshakeAuthChallenge(ws, msg, sessionS, sessionSecret) {
320
+ const { challengeUuid, demandedIds } = msg;
321
+ if (logalot) {
322
+ console.log(`${this.lc} solving demanded challenges: ${demandedIds.join(', ')}`);
323
+ }
324
+ const proofFrame = await this.signContextConnect({
325
+ challengeUuid,
326
+ demandedIds
327
+ });
328
+ if (!proofFrame) {
329
+ throw new Error(`Failed to sign connect challenge proof (E: e9807f28ae9248bbadd0a7f1a8e9826)`);
330
+ }
331
+ ws.send(JSON.stringify({
332
+ type: SyncWebSocketMsgType.auth_proof,
333
+ proofFrame
334
+ }));
335
+ }
336
+ handleHandshakeAuthOk(ws, resolve) {
337
+ if (logalot) {
338
+ console.log(`${this.lc} WebSocket connect SUCCESS!`);
339
+ }
340
+ if (this.handshakeMessageListener) {
341
+ ws.removeEventListener('message', this.handshakeMessageListener);
342
+ this.handshakeMessageListener = undefined;
343
+ }
344
+ ws.addEventListener('message', (event) => this.handleRuntimeMessage(event));
345
+ resolve();
346
+ }
347
+ handleHandshakeAuthFail(msg, reject) {
348
+ this.disconnect();
349
+ reject(new Error(`Handshake auth failed: ${msg.message || 'Unknown fail reason'} (E: f380b271a2be498db257bc8209fa8926)`));
350
+ }
351
+ handleHandshakeSyncError(msg, reject) {
352
+ this.disconnect();
353
+ reject(new Error(`Handshake sync error: ${msg.message || msg.error || 'Unknown sync error'} (E: f9208a01fe434cbbad83f210ea8f3426)`));
354
+ }
355
+ async handleRuntimeSyncFrameResponse(msg) {
356
+ const responseContext = msg.context;
357
+ const validationErrors = await validateContextAndSagaFrame({ context: responseContext });
358
+ if (validationErrors.length > 0) {
359
+ throw new Error(`Invalid response context received: ${validationErrors.join(', ')} (E: d7b5a283cf4c43ba8659c803800cf826)`);
360
+ }
361
+ // Put response control ibgibs into durable space immediately
362
+ const allControlIbGibs = [
363
+ toDto({ ibGib: responseContext }),
364
+ responseContext.sagaFrame,
365
+ responseContext.sagaFrameMsg
366
+ ];
367
+ if (responseContext.signedSessionIdentity) {
368
+ allControlIbGibs.push(responseContext.signedSessionIdentity);
369
+ }
370
+ const { localSpace } = this.opts;
371
+ for (const ibGib of allControlIbGibs) {
372
+ await putInSpace({ space: localSpace, ibGibs: [ibGib] });
373
+ await registerNewIbGib({ space: localSpace, ibGib });
374
+ }
375
+ const expectedPayloadAddrs = responseContext.data?.['@payloadAddrsDomain'] || [];
376
+ if (expectedPayloadAddrs.length > 0) {
377
+ this.ws.send(JSON.stringify({
378
+ type: SyncWebSocketMsgType.sync_frame_response_authenticated,
379
+ contextAddr: getIbGibAddr({ ibGib: responseContext })
380
+ }));
381
+ }
382
+ if (this.activeResolve) {
383
+ const resolve = this.activeResolve;
384
+ this.activeResolve = undefined;
385
+ this.activeReject = undefined;
386
+ resolve(responseContext);
387
+ }
388
+ }
389
+ handleRuntimeSyncFrameAuthenticated() {
390
+ const payloads = this.pendingPayloadsToSend || [];
391
+ this.pendingPayloadsToSend = [];
392
+ for (const ibGib of payloads) {
393
+ this.ws.send(JSON.stringify({
394
+ type: SyncWebSocketMsgType.domain_payload,
395
+ ibGib
396
+ }));
397
+ }
398
+ }
399
+ handleRuntimeDomainPayload(msg) {
400
+ const payload = msg.ibGib;
401
+ this.payloadIbGibsDomainReceived$.next(payload);
402
+ }
403
+ handleRuntimeSyncError(msg) {
404
+ const errorDetail = msg.message || msg.error || 'Unknown sync runtime error';
405
+ const error = new Error(`Sync runtime error from receiver: ${errorDetail} (E: e983bc1c828d447fa0581da2b8004f26)`);
406
+ if (this.activeReject) {
407
+ const reject = this.activeReject;
408
+ this.activeResolve = undefined;
409
+ this.activeReject = undefined;
410
+ reject(error);
411
+ }
412
+ else {
413
+ throw error;
414
+ }
415
+ }
416
+ /**
417
+ * Serializes the transaction context and payload down the active WebSocket connection.
418
+ */
419
+ async sendContextRequest(context) {
420
+ const lc = `${this.lc}[${this.sendContextRequest.name}]`;
421
+ try {
422
+ if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
423
+ throw new Error(`WebSocket is not connected or open (E: a3b2c1d0e9f8e7d6c5b4a3f2e1d0c915)`);
424
+ }
425
+ // 1. Separate payloads to send later
426
+ const domainPayloads = context.payloadIbGibsDomain ?? [];
427
+ this.pendingPayloadsToSend = [...domainPayloads];
428
+ // 2. Clone context without payloads for transport
429
+ const contextToSend = { ...context };
430
+ delete contextToSend.payloadIbGibsDomain;
431
+ // 3. Transmit the synchronizing transaction context
432
+ return new Promise((resolve, reject) => {
433
+ this.activeResolve = resolve;
434
+ this.activeReject = reject;
435
+ this.ws.send(JSON.stringify({
436
+ type: SyncWebSocketMsgType.sync_frame,
437
+ context: contextToSend
438
+ }));
439
+ });
440
+ }
441
+ catch (error) {
442
+ console.error(`${lc} sendContextRequest failed: ${extractErrorMsg(error)}`);
443
+ throw error;
444
+ }
445
+ }
446
+ }
447
+ //# sourceMappingURL=sync-peer-websocket-sender-v1.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-peer-websocket-sender-v1.mjs","sourceRoot":"","sources":["../../../../../src/sync/sync-peer/sync-peer-websocket/sync-peer-websocket-sender/sync-peer-websocket-sender-v1.mts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { Ib } from '@ibgib/ts-gib/dist/types.mjs';
5
5
  import { SyncSagaContextData_V1, SyncSagaContextIbGib_V1, SyncSagaContextIb_V1 } from './sync-saga-context-types.mjs';
6
- import { SyncSagaFrameDependencyGraph } from '../sync-types.mjs';
6
+ import { IbGibSpaceAny } from '../../witness/space/space-base-v1.mjs';
7
7
  /**
8
8
  * Constructs the standard 'ib' string for a Sync Saga Context stone.
9
9
  */
@@ -42,12 +42,29 @@ export declare function validateContextAndSagaFrame({ context, }: {
42
42
  export declare function validateContextDomainPayloadIbGibs({ context }: {
43
43
  context: SyncSagaContextIbGib_V1;
44
44
  }): Promise<string[]>;
45
- export declare function authenticateContext({}: {}): Promise<string[]>;
46
45
  /**
47
- * move to sync-peer-helpers.mts as a pure function?
46
+ * "Intrinsically": This authenticates assuming we have already established that
47
+ * this context is a valid continuation of previous sync contexts/saga state. It
48
+ * does not check that the session identity contained on this context is a valid
49
+ * continuation.
50
+ *
51
+ * ## notes
52
+ *
53
+ * Say an attacker tries to hijack a legit sync process by capturing previous
54
+ * context(s). Then the attacker just either creates its own sessionIdentity
55
+ *
56
+ * ## implementation notes
57
+ *
58
+ * This is a HUGE function right now, because there are just a lot of things to
59
+ * check. I'm basically going through and just taking every assumption that I
60
+ * can think of and encoding it.
61
+ *
62
+ * We will need to refactor this at some point to neaten it up, but we should
63
+ * not remove sections without EXTREMELY good reasoning, as this would reduce
64
+ * security.
48
65
  */
49
- export declare function authorizeContext({ context, fullSagaHistory }: {
66
+ export declare function authenticateContextIntrinsically({ context, space, }: {
50
67
  context: SyncSagaContextIbGib_V1;
51
- fullSagaHistory: SyncSagaFrameDependencyGraph[];
68
+ space: IbGibSpaceAny;
52
69
  }): Promise<string[]>;
53
70
  //# sourceMappingURL=sync-saga-context-helpers.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync-saga-context-helpers.d.mts","sourceRoot":"","sources":["../../../src/sync/sync-saga-context/sync-saga-context-helpers.mts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,EAAE,EAAE,MAAM,8BAA8B,CAAC;AAMlD,OAAO,EACH,sBAAsB,EAAE,uBAAuB,EAAE,oBAAoB,EAExE,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAgB,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AAM/E;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,EACvC,IAAI,GACP,EAAE;IACC,IAAI,EAAE,sBAAsB,CAAC;CAChC,GAAG,OAAO,CAAC,EAAE,CAAC,CAkBd;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,EACzC,EAAE,GACL,EAAE;IACC,EAAE,EAAE,EAAE,CAAC;CACV,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAkChC;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,uBAAuB,CAgB3E;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,2BAA2B,CAAC,EAC9C,OAAO,GACV,EAAE;IACC,OAAO,EAAE,uBAAuB,CAAC;CACpC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAyCpB;AAED;;;;;;GAMG;AACH,wBAAsB,kCAAkC,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,uBAAuB,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAY7H;AAED,wBAAsB,mBAAmB,CAAC,EACzC,IAAA,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAYpB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,EACnC,OAAO,EACP,eAAe,EAClB,EAAE;IACC,OAAO,EAAE,uBAAuB,CAAC;IACjC,eAAe,EAAE,4BAA4B,EAAE,CAAC;CACnD,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAcpB"}
1
+ {"version":3,"file":"sync-saga-context-helpers.d.mts","sourceRoot":"","sources":["../../../src/sync/sync-saga-context/sync-saga-context-helpers.mts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,EAAE,EAAG,MAAM,8BAA8B,CAAC;AAMnD,OAAO,EACH,sBAAsB,EAAE,uBAAuB,EAAE,oBAAoB,EACxE,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAWtE;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,EACvC,IAAI,GACP,EAAE;IACC,IAAI,EAAE,sBAAsB,CAAC;CAChC,GAAG,OAAO,CAAC,EAAE,CAAC,CAkBd;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,EACzC,EAAE,GACL,EAAE;IACC,EAAE,EAAE,EAAE,CAAC;CACV,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAkChC;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,uBAAuB,CAgB3E;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,2BAA2B,CAAC,EAC9C,OAAO,GACV,EAAE;IACC,OAAO,EAAE,uBAAuB,CAAC;CACpC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA6DpB;AAED;;;;;;GAMG;AACH,wBAAsB,kCAAkC,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,uBAAuB,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAY7H;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,gCAAgC,CAAC,EACnD,OAAO,EACP,KAAK,GAER,EAAE;IACC,OAAO,EAAE,uBAAuB,CAAC;IACjC,KAAK,EAAE,aAAa,CAAC;CAKxB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAyNpB"}