@ibgib/core-gib 0.1.21 → 0.1.22
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.
- package/dist/sync/sync-conflict.respec.mjs +24 -22
- package/dist/sync/sync-conflict.respec.mjs.map +1 -1
- package/dist/sync/sync-constants.d.mts +8 -8
- package/dist/sync/sync-constants.d.mts.map +1 -1
- package/dist/sync/sync-constants.mjs +3 -3
- package/dist/sync/sync-constants.mjs.map +1 -1
- package/dist/sync/sync-helpers.d.mts +2 -0
- package/dist/sync/sync-helpers.d.mts.map +1 -1
- package/dist/sync/sync-helpers.mjs +11 -9
- package/dist/sync/sync-helpers.mjs.map +1 -1
- package/dist/sync/sync-innerspace-constants.respec.mjs +5 -1
- package/dist/sync/sync-innerspace-constants.respec.mjs.map +1 -1
- package/dist/sync/sync-innerspace-deep-updates.respec.mjs +5 -1
- package/dist/sync/sync-innerspace-deep-updates.respec.mjs.map +1 -1
- package/dist/sync/sync-innerspace-dest-ahead.respec.mjs +8 -4
- package/dist/sync/sync-innerspace-dest-ahead.respec.mjs.map +1 -1
- package/dist/sync/sync-innerspace-multiple-timelines.respec.mjs +5 -1
- package/dist/sync/sync-innerspace-multiple-timelines.respec.mjs.map +1 -1
- package/dist/sync/sync-innerspace-partial-update.respec.mjs +5 -1
- package/dist/sync/sync-innerspace-partial-update.respec.mjs.map +1 -1
- package/dist/sync/sync-innerspace.respec.mjs +5 -1
- package/dist/sync/sync-innerspace.respec.mjs.map +1 -1
- package/dist/sync/sync-peer/sync-peer-constants.d.mts +2 -0
- package/dist/sync/sync-peer/sync-peer-constants.d.mts.map +1 -0
- package/dist/sync/sync-peer/sync-peer-constants.mjs +2 -0
- package/dist/sync/sync-peer/sync-peer-constants.mjs.map +1 -0
- package/dist/sync/sync-peer/sync-peer-helpers.d.mts +2 -0
- package/dist/sync/sync-peer/sync-peer-helpers.d.mts.map +1 -0
- package/dist/sync/sync-peer/sync-peer-helpers.mjs +2 -0
- package/dist/sync/sync-peer/sync-peer-helpers.mjs.map +1 -0
- package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-constants.d.mts +8 -0
- package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-constants.d.mts.map +1 -0
- package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-constants.mjs +8 -0
- package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-constants.mjs.map +1 -0
- package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-helpers.d.mts +18 -0
- package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-helpers.d.mts.map +1 -0
- package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-helpers.mjs +54 -0
- package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-helpers.mjs.map +1 -0
- package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-types.d.mts +80 -0
- package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-types.d.mts.map +1 -0
- package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-types.mjs +5 -0
- package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-types.mjs.map +1 -0
- package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.d.mts +43 -0
- package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.d.mts.map +1 -0
- package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.mjs +229 -0
- package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.mjs.map +1 -0
- package/dist/sync/sync-peer/sync-peer-types.d.mts +12 -0
- package/dist/sync/sync-peer/sync-peer-types.d.mts.map +1 -1
- package/dist/sync/sync-peer/sync-peer-v1.d.mts +15 -7
- package/dist/sync/sync-peer/sync-peer-v1.d.mts.map +1 -1
- package/dist/sync/sync-peer/sync-peer-v1.mjs +105 -24
- package/dist/sync/sync-peer/sync-peer-v1.mjs.map +1 -1
- package/dist/sync/sync-saga-context/sync-saga-context-helpers.d.mts +5 -8
- package/dist/sync/sync-saga-context/sync-saga-context-helpers.d.mts.map +1 -1
- package/dist/sync/sync-saga-context/sync-saga-context-helpers.mjs +34 -18
- package/dist/sync/sync-saga-context/sync-saga-context-helpers.mjs.map +1 -1
- package/dist/sync/sync-saga-context/sync-saga-context-types.d.mts +26 -22
- package/dist/sync/sync-saga-context/sync-saga-context-types.d.mts.map +1 -1
- package/dist/sync/sync-saga-context/sync-saga-context-types.mjs +1 -9
- package/dist/sync/sync-saga-context/sync-saga-context-types.mjs.map +1 -1
- package/dist/sync/sync-saga-coordinator.d.mts +23 -33
- package/dist/sync/sync-saga-coordinator.d.mts.map +1 -1
- package/dist/sync/sync-saga-coordinator.mjs +271 -163
- package/dist/sync/sync-saga-coordinator.mjs.map +1 -1
- package/dist/sync/sync-types.d.mts +15 -3
- package/dist/sync/sync-types.d.mts.map +1 -1
- package/dist/witness/light-witness-base-v1.d.mts.map +1 -1
- package/dist/witness/light-witness-base-v1.mjs +2 -0
- package/dist/witness/light-witness-base-v1.mjs.map +1 -1
- package/dist/witness/space/inner-space/inner-space-v1.mjs +1 -1
- package/dist/witness/space/inner-space/inner-space-v1.mjs.map +1 -1
- package/package.json +1 -1
- package/src/sync/README.md +31 -22
- package/src/sync/sync-conflict.respec.mts +23 -19
- package/src/sync/sync-constants.mts +4 -5
- package/src/sync/sync-helpers.mts +11 -7
- package/src/sync/sync-innerspace-constants.respec.mts +5 -1
- package/src/sync/sync-innerspace-deep-updates.respec.mts +5 -1
- package/src/sync/sync-innerspace-dest-ahead.respec.mts +7 -3
- package/src/sync/sync-innerspace-multiple-timelines.respec.mts +5 -1
- package/src/sync/sync-innerspace-partial-update.respec.mts +8 -2
- package/src/sync/sync-innerspace.respec.mts +5 -1
- package/src/sync/sync-peer/sync-peer-constants.mts +0 -0
- package/src/sync/sync-peer/sync-peer-helpers.mts +0 -0
- package/src/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-constants.mts +8 -0
- package/src/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-helpers.mts +72 -0
- package/src/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-types.mts +87 -0
- package/src/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.mts +242 -0
- package/src/sync/sync-peer/sync-peer-types.mts +13 -1
- package/src/sync/sync-peer/sync-peer-v1.mts +93 -27
- package/src/sync/sync-saga-context/sync-saga-context-helpers.mts +47 -29
- package/src/sync/sync-saga-context/sync-saga-context-types.mts +29 -30
- package/src/sync/sync-saga-coordinator.mts +280 -170
- package/src/sync/sync-types.mts +17 -3
- package/src/witness/light-witness-base-v1.mts +2 -1
- package/src/witness/space/inner-space/inner-space-v1.mts +1 -1
- package/test_output.log +0 -0
- package/tmp.md +62 -44
- package/dist/sync/sync-local-spaces.respec.d.mts +0 -2
- package/dist/sync/sync-local-spaces.respec.d.mts.map +0 -1
- package/dist/sync/sync-local-spaces.respec.mjs +0 -159
- package/dist/sync/sync-local-spaces.respec.mjs.map +0 -1
- package/dist/sync/sync-peer/sync-peer-innerspace-v1.d.mts +0 -42
- package/dist/sync/sync-peer/sync-peer-innerspace-v1.d.mts.map +0 -1
- package/dist/sync/sync-peer/sync-peer-innerspace-v1.mjs +0 -194
- package/dist/sync/sync-peer/sync-peer-innerspace-v1.mjs.map +0 -1
- package/dist/sync/sync-saga-coordinator.respec.d.mts +0 -2
- package/dist/sync/sync-saga-coordinator.respec.d.mts.map +0 -1
- package/dist/sync/sync-saga-coordinator.respec.mjs +0 -40
- package/dist/sync/sync-saga-coordinator.respec.mjs.map +0 -1
- package/src/sync/sync-local-spaces.respec.mts +0 -200
- package/src/sync/sync-peer/sync-peer-innerspace-v1.mts +0 -240
- package/src/sync/sync-saga-coordinator.respec.mts +0 -52
|
@@ -19,7 +19,7 @@ import { Metaspace_Innerspace } from '../witness/space/metaspace/metaspace-inner
|
|
|
19
19
|
import { InnerSpace_V1 } from '../witness/space/inner-space/inner-space-v1.mjs';
|
|
20
20
|
import { createTimelineRootHelper, getTestKeystoneServiceHelper } from '../agent-helpers.mjs';
|
|
21
21
|
import { mut8Timeline } from '../timeline/timeline-api.mjs';
|
|
22
|
-
import { SyncPeerInnerspace_V1 } from './sync-peer/sync-peer-innerspace-v1.mjs';
|
|
22
|
+
import { SyncPeerInnerspace_V1 } from './sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.mjs';
|
|
23
23
|
import { DEFAULT_INNER_SPACE_DATA_V1 } from '../witness/space/inner-space/inner-space-types.mjs';
|
|
24
24
|
import { getTjpAddr, toDto } from '../common/other/ibgib-helper.mjs';
|
|
25
25
|
import { SyncConflictStrategy, SyncSagaInfo } from './sync-types.mjs';
|
|
@@ -82,7 +82,10 @@ await respecfully(sir, `Sync Conflict Resolution`, async () => {
|
|
|
82
82
|
// Create V1 (Common)
|
|
83
83
|
const v1_Common = await mut8Timeline<TestData>({
|
|
84
84
|
timeline: testRoot,
|
|
85
|
-
mut8Opts: {
|
|
85
|
+
mut8Opts: {
|
|
86
|
+
mut8Ib: testRoot.ib + '_common',
|
|
87
|
+
dataToAddOrPatch: { text: 'v1_common' }
|
|
88
|
+
},
|
|
86
89
|
metaspace,
|
|
87
90
|
space: sourceSpace,
|
|
88
91
|
});
|
|
@@ -120,7 +123,10 @@ await respecfully(sir, `Sync Conflict Resolution`, async () => {
|
|
|
120
123
|
// Source: V1 -> V2a (Edit Field A)
|
|
121
124
|
const v2a = await mut8Timeline<TestData>({
|
|
122
125
|
timeline: v1_Common,
|
|
123
|
-
mut8Opts: {
|
|
126
|
+
mut8Opts: {
|
|
127
|
+
mut8Ib: testRoot.ib + '_v2a',
|
|
128
|
+
dataToAddOrPatch: { fieldA: 'source_edit' }
|
|
129
|
+
},
|
|
124
130
|
metaspace,
|
|
125
131
|
space: sourceSpace,
|
|
126
132
|
});
|
|
@@ -128,7 +134,10 @@ await respecfully(sir, `Sync Conflict Resolution`, async () => {
|
|
|
128
134
|
// Dest: V1 -> V2b (Edit Field B)
|
|
129
135
|
const v2b = await mut8Timeline<TestData>({
|
|
130
136
|
timeline: v1_Dest,
|
|
131
|
-
mut8Opts: {
|
|
137
|
+
mut8Opts: {
|
|
138
|
+
mut8Ib: testRoot.ib + '_v2b',
|
|
139
|
+
dataToAddOrPatch: { fieldB: 'dest_edit' }
|
|
140
|
+
},
|
|
132
141
|
metaspace,
|
|
133
142
|
space: destSpace,
|
|
134
143
|
});
|
|
@@ -144,30 +153,24 @@ await respecfully(sir, `Sync Conflict Resolution`, async () => {
|
|
|
144
153
|
const receiverCoordinator = new SyncSagaCoordinator(mockKeystone);
|
|
145
154
|
|
|
146
155
|
|
|
147
|
-
// Create sender's tempSpace for transactional payload transfer
|
|
148
|
-
const senderTempSpaceName = `tmp_sender_test_${Date.now()}`;
|
|
149
|
-
const senderTempSpace = await metaspace.createNewLocalSpace({
|
|
150
|
-
opts: {
|
|
151
|
-
allowCancel: false,
|
|
152
|
-
spaceName: senderTempSpaceName,
|
|
153
|
-
getFnPrompt: metaspace.getFnPrompt!,
|
|
154
|
-
}
|
|
155
|
-
});
|
|
156
|
-
if (!senderTempSpace) { throw new Error(`(UNEXPECTED) senderTempSpace falsy? (E: ef4388c87e98f0211852eefa22414f26)`); }
|
|
157
|
-
await senderTempSpace.initialized;
|
|
158
156
|
|
|
159
157
|
const peer = new SyncPeerInnerspace_V1({
|
|
160
158
|
senderSpace: sourceSpace,
|
|
161
|
-
|
|
159
|
+
// No senderTempSpace - sync() creates its own internally
|
|
162
160
|
receiverSpace: destSpace,
|
|
163
161
|
receiverCoordinator,
|
|
164
162
|
receiverMetaspace: metaspace,
|
|
163
|
+
receiverTempSpace: 0 as any, // placeholder this is wrong
|
|
164
|
+
senderTempSpace: 0 as any, // placeholder this is wrong
|
|
165
|
+
}, {
|
|
166
|
+
classname: SyncPeerInnerspace_V1.name,
|
|
165
167
|
});
|
|
166
168
|
await peer.initialized;
|
|
169
|
+
await peer.initialize();
|
|
167
170
|
|
|
168
171
|
// Verify Receiver has correct KV (Pre-Sync Check)
|
|
169
172
|
// This ensures the conflict precondition exists.
|
|
170
|
-
await
|
|
173
|
+
await ifWe(sir, 'verify receiver KV pre-sync', async () => {
|
|
171
174
|
try {
|
|
172
175
|
const destKV = await receiverCoordinator.getKnowledgeVector({
|
|
173
176
|
space: destSpace,
|
|
@@ -216,7 +219,8 @@ await respecfully(sir, `Sync Conflict Resolution`, async () => {
|
|
|
216
219
|
*/
|
|
217
220
|
const subscription = await resSync.updates$.subscribe(fnObs({
|
|
218
221
|
next: async (ctxIbGib) => {
|
|
219
|
-
console.log(`${sublc} next fired. ${
|
|
222
|
+
// console.log(`${sublc} next fired. ${JSON.stringify(ctxIbGib)}`);
|
|
223
|
+
console.log(`${sublc} next fired. (I: 72db8820f058312f5cb2a92b8f9bde26)`);
|
|
220
224
|
},
|
|
221
225
|
error: async (e: ErrorIbGib_V1) => {
|
|
222
226
|
if (e.data) {
|
|
@@ -246,7 +250,7 @@ await respecfully(sir, `Sync Conflict Resolution`, async () => {
|
|
|
246
250
|
|
|
247
251
|
const resSourceTip = await getFromSpace({ space: sourceSpace, addr: getIbGibAddr({ ibGib: v2a }) });
|
|
248
252
|
|
|
249
|
-
await
|
|
253
|
+
await ifWe(sir, `verify merge happened`, async () => {
|
|
250
254
|
// Retrieve updated KV from Source (or check what happened to v2a)
|
|
251
255
|
// Ideally, we just check the source space for the timeline tip
|
|
252
256
|
// The timeline tip for testRoot/v0 should now be NEW.
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
export const SYNC_ATOM = "sync";
|
|
2
2
|
|
|
3
3
|
export const SYNC_MSG_REL8N_NAME = "sync-msg";
|
|
4
|
-
export const SYNC_SAGA_PAYLOAD_ADDRS_REL8N_NAME = "@payloadAddrs";
|
|
5
|
-
|
|
6
4
|
/**
|
|
7
|
-
*
|
|
5
|
+
* payload addrs should be domain-only, i.e., we are not including the sync
|
|
6
|
+
* saga ibgib, or its message stone, or identity keystones.
|
|
8
7
|
*/
|
|
9
|
-
export const
|
|
8
|
+
export const SYNC_SAGA_PAYLOAD_ADDRS_DOMAIN = "@payloadAddrsDomain";
|
|
10
9
|
|
|
11
10
|
export const SYNC_STAGE_INIT = "init";
|
|
12
11
|
export const SYNC_STAGE_ACK = "ack";
|
|
@@ -27,4 +26,4 @@ export const SyncStage = {
|
|
|
27
26
|
request: SYNC_STAGE_REQUEST,
|
|
28
27
|
delta: SYNC_STAGE_DELTA,
|
|
29
28
|
commit: SYNC_STAGE_COMMIT,
|
|
30
|
-
}
|
|
29
|
+
} satisfies { [key: string]: SyncStage };
|
|
@@ -7,6 +7,7 @@ import { SYNC_ATOM, SYNC_MSG_REL8N_NAME } from "./sync-constants.mjs";
|
|
|
7
7
|
import { SyncData_V1, SyncIb_V1, SyncIbGib_V1 } from "./sync-types.mjs";
|
|
8
8
|
import { IbGibSpaceAny } from "../witness/space/space-base-v1.mjs";
|
|
9
9
|
import { getFromSpace } from "../witness/space/space-helper.mjs";
|
|
10
|
+
import { IbGibSpaceResultData, IbGibSpaceResultIbGib, IbGibSpaceResultRel8ns } from "../witness/space/space-types.mjs";
|
|
10
11
|
|
|
11
12
|
const logalot = GLOBAL_LOG_A_LOT;
|
|
12
13
|
|
|
@@ -161,6 +162,8 @@ export async function isPastFrame({
|
|
|
161
162
|
/**
|
|
162
163
|
* Gets a shallow dependency graph for a Sync Saga Frame.
|
|
163
164
|
*
|
|
165
|
+
* DOES NOT GET THE ENTIRE DEPENDENCY FRAME (INCLUDING PAST).
|
|
166
|
+
*
|
|
164
167
|
* Unlike standard `getDependencyGraph`, this does NOT traverse `ancestor` (history) or `past`.
|
|
165
168
|
* It only retrieves the *content* of the current frame:
|
|
166
169
|
* 1. The Frame itself.
|
|
@@ -181,13 +184,14 @@ export async function getSyncSagaDependencyGraph({
|
|
|
181
184
|
|
|
182
185
|
// Helper to fetch and push
|
|
183
186
|
const fetchAndPush = async (addrs: string[]) => {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
}
|
|
187
|
+
const res = await getFromSpace({ space, addrs });
|
|
188
|
+
if (res.success && res.ibGibs?.length === addrs.length) {
|
|
189
|
+
res.ibGibs!.forEach(x => result.push(x));
|
|
190
|
+
} else {
|
|
191
|
+
const resIbGib =
|
|
192
|
+
res.rawResultIbGib as IbGibSpaceResultIbGib<IbGib_V1, IbGibSpaceResultData, IbGibSpaceResultRel8ns>
|
|
193
|
+
if (!resIbGib.data) { throw new Error(`(UNEXPECTED) res.rawResultIbGib.data falsy? (E: c26c681d2f831fc537ba6f48fee36d26)`); }
|
|
194
|
+
throw new Error(`(UNEXPECTED) couldn't find addrs? addrsNotFound: ${resIbGib.data.addrsNotFound}? (E: 43b7b5a6ad982715c8f3eed69bfa0d26)`);
|
|
191
195
|
}
|
|
192
196
|
};
|
|
193
197
|
|
|
@@ -16,10 +16,10 @@ import { Factory_V1 } from '@ibgib/ts-gib/dist/V1/index.mjs';
|
|
|
16
16
|
import { SyncSagaCoordinator } from './sync-saga-coordinator.mjs';
|
|
17
17
|
import { putInSpace, getFromSpace } from '../witness/space/space-helper.mjs';
|
|
18
18
|
import { Metaspace_Innerspace } from '../witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.mjs';
|
|
19
|
-
import { SyncPeerInnerspace_V1 } from './sync-peer/sync-peer-innerspace-v1.mjs';
|
|
20
19
|
import { InnerSpace_V1 } from '../witness/space/inner-space/inner-space-v1.mjs';
|
|
21
20
|
import { DEFAULT_INNER_SPACE_DATA_V1 } from '../witness/space/inner-space/inner-space-types.mjs';
|
|
22
21
|
import { getTestKeystoneServiceHelper } from '../agent-helpers.mjs';
|
|
22
|
+
import { SyncPeerInnerspace_V1 } from './sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.mjs';
|
|
23
23
|
|
|
24
24
|
const lc = `[sync-innerspace-constants.respec]`;
|
|
25
25
|
|
|
@@ -74,6 +74,10 @@ await respecfully(sir, `Sync Constants (No TJP)`, async () => {
|
|
|
74
74
|
receiverSpace: destSpace,
|
|
75
75
|
receiverCoordinator: receiverCoordinator,
|
|
76
76
|
receiverMetaspace: metaspace,
|
|
77
|
+
receiverTempSpace: 0 as any, // placeholder this is wrong
|
|
78
|
+
senderTempSpace: 0 as any, // placeholder this is wrong
|
|
79
|
+
}, {
|
|
80
|
+
classname: SyncPeerInnerspace_V1.name,
|
|
77
81
|
});
|
|
78
82
|
|
|
79
83
|
// 4. Sync C1 (First Pass)
|
|
@@ -19,9 +19,9 @@ import { Metaspace_Innerspace } from '../witness/space/metaspace/metaspace-inner
|
|
|
19
19
|
import { InnerSpace_V1 } from '../witness/space/inner-space/inner-space-v1.mjs';
|
|
20
20
|
import { createTimelineRootHelper, getTestKeystoneServiceHelper } from '../agent-helpers.mjs';
|
|
21
21
|
import { mut8Timeline } from '../timeline/timeline-api.mjs';
|
|
22
|
-
import { SyncPeerInnerspace_V1 } from './sync-peer/sync-peer-innerspace-v1.mjs';
|
|
23
22
|
import { DEFAULT_INNER_SPACE_DATA_V1 } from '../witness/space/inner-space/inner-space-types.mjs';
|
|
24
23
|
import { toDto } from '../common/other/ibgib-helper.mjs';
|
|
24
|
+
import { SyncPeerInnerspace_V1 } from './sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.mjs';
|
|
25
25
|
|
|
26
26
|
const logalot = true;
|
|
27
27
|
const lc = `[sync-innerspace-deep-updates.respec]`;
|
|
@@ -105,6 +105,10 @@ await respecfully(sir, `Sync InnerSpaces (Deep Updates)`, async () => {
|
|
|
105
105
|
receiverSpace: destSpace,
|
|
106
106
|
receiverCoordinator: receiverCoordinator,
|
|
107
107
|
receiverMetaspace: metaspace,
|
|
108
|
+
receiverTempSpace: 0 as any,
|
|
109
|
+
senderTempSpace: 0 as any,
|
|
110
|
+
}, {
|
|
111
|
+
classname: SyncPeerInnerspace_V1.name,
|
|
108
112
|
});
|
|
109
113
|
|
|
110
114
|
// 4. Run Sync
|
|
@@ -19,9 +19,9 @@ import { Metaspace_Innerspace } from '../witness/space/metaspace/metaspace-inner
|
|
|
19
19
|
import { InnerSpace_V1 } from '../witness/space/inner-space/inner-space-v1.mjs';
|
|
20
20
|
import { createTimelineRootHelper, getTestKeystoneServiceHelper } from '../agent-helpers.mjs';
|
|
21
21
|
import { mut8Timeline } from '../timeline/timeline-api.mjs';
|
|
22
|
-
import { SyncPeerInnerspace_V1 } from './sync-peer/sync-peer-innerspace-v1.mjs';
|
|
23
22
|
import { DEFAULT_INNER_SPACE_DATA_V1 } from '../witness/space/inner-space/inner-space-types.mjs';
|
|
24
23
|
import { toDto } from '../common/other/ibgib-helper.mjs';
|
|
24
|
+
import { SyncPeerInnerspace_V1 } from './sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.mjs';
|
|
25
25
|
|
|
26
26
|
const logalot = true;
|
|
27
27
|
const lc = `[sync-innerspace-dest-ahead.respec]`;
|
|
@@ -98,7 +98,7 @@ await respecfully(sir, `Sync InnerSpaces (Dest Ahead)`, async () => {
|
|
|
98
98
|
});
|
|
99
99
|
const addrV2 = getIbGibAddr({ ibGib: v2 });
|
|
100
100
|
|
|
101
|
-
await
|
|
101
|
+
await ifWeMight(sir, 'verify setup', async () => {
|
|
102
102
|
// Ensure V2 is ONLY in Dest (it is, per `space: destSpace`)
|
|
103
103
|
// Ensure Source does NOT have V2
|
|
104
104
|
const checkV2InSource = await getFromSpace({ space: sourceSpace, addr: addrV2 });
|
|
@@ -115,6 +115,10 @@ await respecfully(sir, `Sync InnerSpaces (Dest Ahead)`, async () => {
|
|
|
115
115
|
receiverSpace: destSpace,
|
|
116
116
|
receiverCoordinator: receiverCoordinator,
|
|
117
117
|
receiverMetaspace: metaspace,
|
|
118
|
+
receiverTempSpace: 0 as any,// this is wrong just getting to build
|
|
119
|
+
senderTempSpace: 0 as any, // this is wrong just getting to build
|
|
120
|
+
}, {
|
|
121
|
+
classname: SyncPeerInnerspace_V1.name
|
|
118
122
|
});
|
|
119
123
|
|
|
120
124
|
// 4. Run Sync (Source Pushes V1)
|
|
@@ -132,7 +136,7 @@ await respecfully(sir, `Sync InnerSpaces (Dest Ahead)`, async () => {
|
|
|
132
136
|
// 5. Verify Dest (Should still have V2 as latest)
|
|
133
137
|
console.log(`${lc} Verifying Destination...`);
|
|
134
138
|
|
|
135
|
-
await
|
|
139
|
+
await ifWeMight(sir, `verify dest stays ahead`, async () => {
|
|
136
140
|
// Verify Tip (V2)
|
|
137
141
|
const getV2 = await getFromSpace({ space: destSpace, addr: addrV2 });
|
|
138
142
|
iReckon(sir, getV2.success).asTo('V2 still present in Dest').isGonnaBeTrue();
|
|
@@ -19,9 +19,9 @@ import { Metaspace_Innerspace } from '../witness/space/metaspace/metaspace-inner
|
|
|
19
19
|
import { InnerSpace_V1 } from '../witness/space/inner-space/inner-space-v1.mjs';
|
|
20
20
|
import { createTimelineRootHelper, getTestKeystoneServiceHelper } from '../agent-helpers.mjs';
|
|
21
21
|
import { mut8Timeline } from '../timeline/timeline-api.mjs';
|
|
22
|
-
import { SyncPeerInnerspace_V1 } from './sync-peer/sync-peer-innerspace-v1.mjs';
|
|
23
22
|
import { DEFAULT_INNER_SPACE_DATA_V1 } from '../witness/space/inner-space/inner-space-types.mjs';
|
|
24
23
|
import { toDto } from '../common/other/ibgib-helper.mjs';
|
|
24
|
+
import { SyncPeerInnerspace_V1 } from './sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.mjs';
|
|
25
25
|
|
|
26
26
|
const logalot = true;
|
|
27
27
|
const lc = `[sync-innerspace-multiple-timelines.respec]`;
|
|
@@ -109,6 +109,10 @@ await respecfully(sir, `Sync InnerSpaces (Multiple Timelines)`, async () => {
|
|
|
109
109
|
receiverSpace: destSpace,
|
|
110
110
|
receiverCoordinator: receiverCoordinator,
|
|
111
111
|
receiverMetaspace: metaspace,
|
|
112
|
+
receiverTempSpace: 0 as any,
|
|
113
|
+
senderTempSpace: 0 as any,
|
|
114
|
+
}, {
|
|
115
|
+
classname: SyncPeerInnerspace_V1.name,
|
|
112
116
|
});
|
|
113
117
|
|
|
114
118
|
// 4. Run Sync (Push Both)
|
|
@@ -19,9 +19,9 @@ import { Metaspace_Innerspace } from '../witness/space/metaspace/metaspace-inner
|
|
|
19
19
|
import { InnerSpace_V1 } from '../witness/space/inner-space/inner-space-v1.mjs';
|
|
20
20
|
import { createTimelineRootHelper, getTestKeystoneServiceHelper } from '../agent-helpers.mjs';
|
|
21
21
|
import { mut8Timeline } from '../timeline/timeline-api.mjs';
|
|
22
|
-
import { SyncPeerInnerspace_V1 } from './sync-peer/sync-peer-innerspace-v1.mjs';
|
|
23
22
|
import { DEFAULT_INNER_SPACE_DATA_V1 } from '../witness/space/inner-space/inner-space-types.mjs';
|
|
24
23
|
import { toDto } from '../common/other/ibgib-helper.mjs';
|
|
24
|
+
import { SyncPeerInnerspace_V1 } from './sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.mjs';
|
|
25
25
|
|
|
26
26
|
const logalot = true;
|
|
27
27
|
const lc = `[sync-innerspace-partial-update.respec]`;
|
|
@@ -117,7 +117,13 @@ await respecfully(sir, `Sync InnerSpaces (Partial Update)`, async () => {
|
|
|
117
117
|
receiverSpace: destSpace,
|
|
118
118
|
receiverCoordinator: receiverCoordinator,
|
|
119
119
|
receiverMetaspace: metaspace,
|
|
120
|
-
|
|
120
|
+
receiverTempSpace: 0 as any,
|
|
121
|
+
senderTempSpace: 0 as any,
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
classname: SyncPeerInnerspace_V1.name,
|
|
125
|
+
}
|
|
126
|
+
);
|
|
121
127
|
|
|
122
128
|
// 4. Run Sync (Source Pushes V2)
|
|
123
129
|
console.log(`${lc} Running Sync...`);
|
|
@@ -19,10 +19,10 @@ import { Metaspace_Innerspace } from '../witness/space/metaspace/metaspace-inner
|
|
|
19
19
|
import { InnerSpace_V1 } from '../witness/space/inner-space/inner-space-v1.mjs';
|
|
20
20
|
import { createTimelineRootHelper, getTestKeystoneServiceHelper } from '../agent-helpers.mjs';
|
|
21
21
|
import { mut8Timeline, } from '../timeline/timeline-api.mjs';
|
|
22
|
-
import { SyncPeerInnerspace_V1 } from './sync-peer/sync-peer-innerspace-v1.mjs';
|
|
23
22
|
import { DEFAULT_INNER_SPACE_DATA_V1 } from '../witness/space/inner-space/inner-space-types.mjs';
|
|
24
23
|
import { toDto } from '../common/other/ibgib-helper.mjs';
|
|
25
24
|
import { fnObs } from '../common/pubsub/observer/observer-helper.mjs';
|
|
25
|
+
import { SyncPeerInnerspace_V1 } from './sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.mjs';
|
|
26
26
|
|
|
27
27
|
const logalot = true;
|
|
28
28
|
const lc = `[sync-innerspace.respec]`;
|
|
@@ -108,6 +108,10 @@ await respecfully(sir, `Sync InnerSpaces`, async () => {
|
|
|
108
108
|
receiverSpace: destSpace, // "Server"
|
|
109
109
|
receiverCoordinator: receiverCoordinator,
|
|
110
110
|
receiverMetaspace: metaspace,
|
|
111
|
+
senderTempSpace: 0 as any,
|
|
112
|
+
receiverTempSpace: 0 as any,
|
|
113
|
+
}, {
|
|
114
|
+
classname: SyncPeerInnerspace_V1.name,
|
|
111
115
|
});
|
|
112
116
|
|
|
113
117
|
// 4. Run Sync
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module sync peer innerspace helpers
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { extractErrorMsg } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
|
|
6
|
+
import { Ib } from '@ibgib/ts-gib/dist/types.mjs';
|
|
7
|
+
|
|
8
|
+
import { SYNC_PEER_INNERSPACE_ATOM } from './sync-peer-innerspace-constants.mjs';
|
|
9
|
+
import { SyncPeerInnerspaceIb_V1, SyncPeerInnerspaceData_V1 } from './sync-peer-innerspace-types.mjs';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Constructs the standard 'ib' string for a Sync Peer Innerspace stone.
|
|
13
|
+
*/
|
|
14
|
+
export async function getSyncPeerInnerspaceIb({
|
|
15
|
+
data,
|
|
16
|
+
}: {
|
|
17
|
+
data: SyncPeerInnerspaceData_V1,
|
|
18
|
+
}): Promise<Ib> {
|
|
19
|
+
const lc = `[${getSyncPeerInnerspaceIb.name}]`;
|
|
20
|
+
try {
|
|
21
|
+
if (!data) { throw new Error(`data required (E: 7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d)`); }
|
|
22
|
+
|
|
23
|
+
if (!data.classname) { throw new Error(`invalid data. data.classname required. (E: 3aad38bfe23866c2d8c1ca66b03d9126)`); }
|
|
24
|
+
|
|
25
|
+
// sync_peer_innerspace
|
|
26
|
+
const ib = [
|
|
27
|
+
SYNC_PEER_INNERSPACE_ATOM,
|
|
28
|
+
data.classname,
|
|
29
|
+
].join(' ');
|
|
30
|
+
|
|
31
|
+
return ib;
|
|
32
|
+
} catch (error) {
|
|
33
|
+
console.error(`${lc} ${extractErrorMsg(error)}`);
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Parses a standard Sync Peer Innerspace 'ib' string.
|
|
40
|
+
*/
|
|
41
|
+
export async function parseSyncPeerInnerspaceIb({
|
|
42
|
+
ib,
|
|
43
|
+
}: {
|
|
44
|
+
ib: Ib,
|
|
45
|
+
}): Promise<SyncPeerInnerspaceIb_V1> {
|
|
46
|
+
const lc = `[${parseSyncPeerInnerspaceIb.name}]`;
|
|
47
|
+
try {
|
|
48
|
+
if (ib !== SYNC_PEER_INNERSPACE_ATOM) {
|
|
49
|
+
throw new Error(`Atom mismatch. Expected ${SYNC_PEER_INNERSPACE_ATOM}. Got ${ib}. (E: 8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e)`);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const pieces = ib.split(' ');
|
|
53
|
+
|
|
54
|
+
if (pieces.length !== 2) {
|
|
55
|
+
throw new Error(`invalid ib. expected 2 pieces: atom and classname (E: f9c0c8067368444bac69f5777eeaa826)`);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const [
|
|
59
|
+
atom,
|
|
60
|
+
classname
|
|
61
|
+
] = pieces;
|
|
62
|
+
|
|
63
|
+
if (atom !== SYNC_PEER_INNERSPACE_ATOM) {
|
|
64
|
+
throw new Error(`invalid ib. atom (${atom}) is expected to be ${SYNC_PEER_INNERSPACE_ATOM} (E: fda078ef3a0853629eb22e48a01a8826)`);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return { atom, classname };
|
|
68
|
+
} catch (error) {
|
|
69
|
+
console.error(`${lc} ${extractErrorMsg(error)}`);
|
|
70
|
+
throw error;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module sync peer innerspace types
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { IbGibData_V1, IbGibRel8ns_V1, IbGib_V1 } from '@ibgib/ts-gib/dist/V1/types.mjs';
|
|
6
|
+
|
|
7
|
+
import { MetaspaceService } from "../../../witness/space/metaspace/metaspace-types.mjs";
|
|
8
|
+
import { IbGibSpaceAny } from "../../../witness/space/space-base-v1.mjs";
|
|
9
|
+
import { SyncSagaCoordinator } from "../../sync-saga-coordinator.mjs";
|
|
10
|
+
import { SYNC_PEER_INNERSPACE_ATOM } from './sync-peer-innerspace-constants.mjs';
|
|
11
|
+
import { SyncPeerData_V1, SyncPeerRel8ns_V1 } from '../sync-peer-types.mjs';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Options for creating a SyncPeerInnerspace instance.
|
|
15
|
+
*/
|
|
16
|
+
export interface SyncPeerInnerspaceOptions {
|
|
17
|
+
/**
|
|
18
|
+
* sender's durable space.
|
|
19
|
+
*
|
|
20
|
+
* will store control ibgibs (context, sync saga ibgib, control msg stones)
|
|
21
|
+
* here (and in {@link senderTempSpace}) throughout the process for audit trail.
|
|
22
|
+
*/
|
|
23
|
+
senderSpace: IbGibSpaceAny;
|
|
24
|
+
/**
|
|
25
|
+
* sender's temporary space for the entire sync transaction.
|
|
26
|
+
*
|
|
27
|
+
* In addition to control ibgibs which are stored in both temp and durable
|
|
28
|
+
* spaces, this temp space will be where domain ibgibs are stored that are
|
|
29
|
+
* received/created throughout the transaction until commit.
|
|
30
|
+
*/
|
|
31
|
+
senderTempSpace: IbGibSpaceAny;
|
|
32
|
+
/**
|
|
33
|
+
* The "receiver" durable space (not temp).
|
|
34
|
+
*
|
|
35
|
+
* ## notes
|
|
36
|
+
*
|
|
37
|
+
* when syncing/merging locally, we are working with two spaces and this
|
|
38
|
+
* acts as the "remote" space even though it's technically still local.
|
|
39
|
+
*/
|
|
40
|
+
receiverSpace: IbGibSpaceAny;
|
|
41
|
+
/**
|
|
42
|
+
* Coordinator for the "receiver".
|
|
43
|
+
*
|
|
44
|
+
* @see {@link receiverSpace} notes.
|
|
45
|
+
*/
|
|
46
|
+
receiverCoordinator: SyncSagaCoordinator;
|
|
47
|
+
/**
|
|
48
|
+
* Metaspace for the "receiver".
|
|
49
|
+
*
|
|
50
|
+
* @see {@link receiverSpace} notes.
|
|
51
|
+
*/
|
|
52
|
+
receiverMetaspace: MetaspaceService;
|
|
53
|
+
/**
|
|
54
|
+
* Temporary sync transaction space for the "receiver", for storage of
|
|
55
|
+
* domain ibgibs created/received throughout the sync saga until commit.
|
|
56
|
+
*
|
|
57
|
+
* @see {@link receiverSpace} notes.
|
|
58
|
+
*/
|
|
59
|
+
receiverTempSpace: IbGibSpaceAny;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export interface SyncPeerInnerspaceIb_V1 {
|
|
63
|
+
atom: typeof SYNC_PEER_INNERSPACE_ATOM;
|
|
64
|
+
/**
|
|
65
|
+
* @see {@link SyncPeerInnerspaceData_V1.classname}
|
|
66
|
+
*/
|
|
67
|
+
classname: string;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Data payload for the Sync Peer Innerspace.
|
|
72
|
+
*/
|
|
73
|
+
export interface SyncPeerInnerspaceData_V1 extends SyncPeerData_V1 {
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Relationships for the Sync Peer Innerspace.
|
|
78
|
+
*/
|
|
79
|
+
export interface SyncPeerInnerspaceRel8ns_V1 extends SyncPeerRel8ns_V1 {
|
|
80
|
+
// Currently no specific rel8ns needed beyond base
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* The SyncPeerInnerspace ibGib.
|
|
85
|
+
*/
|
|
86
|
+
export interface SyncPeerInnerspaceIbGib_V1 extends IbGib_V1<SyncPeerInnerspaceData_V1, SyncPeerInnerspaceRel8ns_V1> {
|
|
87
|
+
}
|