@ibgib/core-gib 0.1.18 → 0.1.20

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 (83) hide show
  1. package/dist/common/other/ibgib-helper.d.mts +13 -0
  2. package/dist/common/other/ibgib-helper.d.mts.map +1 -1
  3. package/dist/common/other/ibgib-helper.mjs +44 -0
  4. package/dist/common/other/ibgib-helper.mjs.map +1 -1
  5. package/dist/sync/merge-info/merge-info-constants.d.mts +2 -0
  6. package/dist/sync/merge-info/merge-info-constants.d.mts.map +1 -0
  7. package/dist/sync/merge-info/merge-info-constants.mjs +2 -0
  8. package/dist/sync/merge-info/merge-info-constants.mjs.map +1 -0
  9. package/dist/sync/merge-info/merge-info-helpers.d.mts +51 -0
  10. package/dist/sync/merge-info/merge-info-helpers.d.mts.map +1 -0
  11. package/dist/sync/merge-info/merge-info-helpers.mjs +92 -0
  12. package/dist/sync/merge-info/merge-info-helpers.mjs.map +1 -0
  13. package/dist/sync/merge-info/merge-info-helpers.respec.d.mts +2 -0
  14. package/dist/sync/merge-info/merge-info-helpers.respec.d.mts.map +1 -0
  15. package/dist/sync/merge-info/merge-info-helpers.respec.mjs +32 -0
  16. package/dist/sync/merge-info/merge-info-helpers.respec.mjs.map +1 -0
  17. package/dist/sync/merge-info/merge-info-types.d.mts +26 -0
  18. package/dist/sync/merge-info/merge-info-types.d.mts.map +1 -0
  19. package/dist/sync/merge-info/merge-info-types.mjs +2 -0
  20. package/dist/sync/merge-info/merge-info-types.mjs.map +1 -0
  21. package/dist/sync/strategies/conflict-optimistic.d.mts +37 -0
  22. package/dist/sync/strategies/conflict-optimistic.d.mts.map +1 -0
  23. package/dist/sync/strategies/conflict-optimistic.mjs +162 -0
  24. package/dist/sync/strategies/conflict-optimistic.mjs.map +1 -0
  25. package/dist/sync/sync-conflict.respec.d.mts +8 -0
  26. package/dist/sync/sync-conflict.respec.d.mts.map +1 -0
  27. package/dist/sync/sync-conflict.respec.mjs +158 -0
  28. package/dist/sync/sync-conflict.respec.mjs.map +1 -0
  29. package/dist/sync/sync-innerspace-constants.respec.d.mts +8 -0
  30. package/dist/sync/sync-innerspace-constants.respec.d.mts.map +1 -0
  31. package/dist/sync/sync-innerspace-constants.respec.mjs +116 -0
  32. package/dist/sync/sync-innerspace-constants.respec.mjs.map +1 -0
  33. package/dist/sync/sync-innerspace-deep-updates.respec.mjs +2 -3
  34. package/dist/sync/sync-innerspace-deep-updates.respec.mjs.map +1 -1
  35. package/dist/sync/sync-innerspace-dest-ahead.respec.mjs +3 -3
  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.d.mts +7 -0
  40. package/dist/sync/sync-innerspace-partial-update.respec.d.mts.map +1 -0
  41. package/dist/sync/sync-innerspace-partial-update.respec.mjs +116 -0
  42. package/dist/sync/sync-innerspace-partial-update.respec.mjs.map +1 -0
  43. package/dist/sync/sync-innerspace.respec.mjs +5 -5
  44. package/dist/sync/sync-innerspace.respec.mjs.map +1 -1
  45. package/dist/sync/sync-saga-coordinator.d.mts +23 -12
  46. package/dist/sync/sync-saga-coordinator.d.mts.map +1 -1
  47. package/dist/sync/sync-saga-coordinator.mjs +612 -95
  48. package/dist/sync/sync-saga-coordinator.mjs.map +1 -1
  49. package/dist/sync/sync-saga-message/sync-saga-message-helpers.d.mts +11 -0
  50. package/dist/sync/sync-saga-message/sync-saga-message-helpers.d.mts.map +1 -1
  51. package/dist/sync/sync-saga-message/sync-saga-message-helpers.mjs +24 -0
  52. package/dist/sync/sync-saga-message/sync-saga-message-helpers.mjs.map +1 -1
  53. package/dist/sync/sync-saga-message/sync-saga-message-types.d.mts +30 -0
  54. package/dist/sync/sync-saga-message/sync-saga-message-types.d.mts.map +1 -1
  55. package/dist/sync/sync-types.d.mts +31 -4
  56. package/dist/sync/sync-types.d.mts.map +1 -1
  57. package/dist/sync/sync-types.mjs.map +1 -1
  58. package/ibgib-foundations.md +129 -0
  59. package/package.json +1 -1
  60. package/roadmap.md +59 -0
  61. package/src/common/other/ibgib-helper.mts +52 -0
  62. package/src/keystone/README.md +13 -155
  63. package/src/keystone/docs/architecture.md +55 -0
  64. package/src/sync/README.md +37 -42
  65. package/src/sync/docs/architecture.md +69 -0
  66. package/src/sync/docs/verification.md +43 -0
  67. package/src/sync/merge-info/merge-info-constants.mts +1 -0
  68. package/src/sync/merge-info/merge-info-helpers.mts +134 -0
  69. package/src/sync/merge-info/merge-info-helpers.respec.mts +41 -0
  70. package/src/sync/merge-info/merge-info-types.mts +28 -0
  71. package/src/sync/strategies/conflict-optimistic.mts +208 -0
  72. package/src/sync/sync-conflict.respec.mts +194 -0
  73. package/src/sync/sync-innerspace-constants.respec.mts +133 -0
  74. package/src/sync/sync-innerspace-deep-updates.respec.mts +1 -2
  75. package/src/sync/sync-innerspace-dest-ahead.respec.mts +2 -2
  76. package/src/sync/sync-innerspace-multiple-timelines.respec.mts +1 -1
  77. package/src/sync/sync-innerspace-partial-update.respec.mts +150 -0
  78. package/src/sync/sync-innerspace.respec.mts +4 -4
  79. package/src/sync/sync-saga-coordinator.mts +673 -103
  80. package/src/sync/sync-saga-message/sync-saga-message-helpers.mts +41 -0
  81. package/src/sync/sync-saga-message/sync-saga-message-types.mts +28 -0
  82. package/src/sync/sync-types.mts +33 -4
  83. package/tmp.md +2 -374
@@ -0,0 +1,150 @@
1
+ /**
2
+ * @module sync-innerspace-partial-update.respec
3
+ *
4
+ * Verifies Sync Scenarios where the Destination has partial history.
5
+ */
6
+
7
+ import {
8
+ respecfully, lastOfAll, ifWe, iReckon,
9
+ ifWeMight
10
+ } from '@ibgib/helper-gib/dist/respec-gib/respec-gib.mjs';
11
+ const maam = `[${import.meta.url}]`, sir = maam;
12
+ import { delay, extractErrorMsg, pretty } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
13
+ import { getIbGibAddr } from '@ibgib/ts-gib/dist/helper.mjs';
14
+ import { getDependencyGraph } from '../common/other/graph-helper.mjs';
15
+
16
+ import { SyncSagaCoordinator } from './sync-saga-coordinator.mjs';
17
+ import { putInSpace, getFromSpace } from '../witness/space/space-helper.mjs';
18
+ import { Metaspace_Innerspace } from '../witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.mjs';
19
+ import { InnerSpace_V1 } from '../witness/space/inner-space/inner-space-v1.mjs';
20
+ import { createTimelineRootHelper, getTestKeystoneServiceHelper } from '../agent-helpers.mjs';
21
+ import { mut8Timeline } from '../timeline/timeline-api.mjs';
22
+ import { SyncPeerInnerspace_V1 } from './sync-peer/sync-peer-innerspace-v1.mjs';
23
+ import { DEFAULT_INNER_SPACE_DATA_V1 } from '../witness/space/inner-space/inner-space-types.mjs';
24
+ import { toDto } from '../common/other/ibgib-helper.mjs';
25
+
26
+ const logalot = true;
27
+ const lc = `[sync-innerspace-partial-update.respec]`;
28
+
29
+ await respecfully(sir, `Sync InnerSpaces (Partial Update)`, async () => {
30
+
31
+ let metaspace: Metaspace_Innerspace;
32
+ let sourceSpace: InnerSpace_V1;
33
+ let destSpace: InnerSpace_V1;
34
+
35
+ interface TestData {
36
+ type: string;
37
+ label?: string;
38
+ uuid?: string;
39
+ n?: number;
40
+ }
41
+
42
+ await respecfully(sir, `Sender Newer (Partial History)`, async () => {
43
+ // 1. Setup Spaces
44
+ metaspace = new Metaspace_Innerspace(undefined);
45
+ await metaspace.initialize({
46
+ getFnAlert: () => async ({ title, msg }) => { },
47
+ getFnPrompt: () => async ({ title, msg }) => { return ''; },
48
+ getFnPromptPassword: () => async (title, msg) => { return null; },
49
+ });
50
+ while (!metaspace.initialized) { await delay(10); }
51
+
52
+ const defaultLocalUserSpace = await metaspace.getLocalUserSpace({ lock: false });
53
+ await defaultLocalUserSpace!.initialized;
54
+
55
+ sourceSpace = new InnerSpace_V1({
56
+ ...DEFAULT_INNER_SPACE_DATA_V1,
57
+ name: 'source',
58
+ uuid: 'source_uuid',
59
+ description: 'source test space',
60
+ });
61
+ await sourceSpace.initialized;
62
+
63
+ destSpace = new InnerSpace_V1({
64
+ ...DEFAULT_INNER_SPACE_DATA_V1,
65
+ name: 'dest',
66
+ uuid: 'dest_uuid',
67
+ description: 'dest test space',
68
+ });
69
+ await destSpace.initialized;
70
+
71
+ // 2. See Data
72
+ // Root -> V1 (Shared) -> V2 (Source Only)
73
+
74
+ const root = await createTimelineRootHelper<TestData>({
75
+ ib: 'timeline_root_partial',
76
+ data: { type: 'root', label: 'Root' },
77
+ space: sourceSpace,
78
+ });
79
+
80
+ // V1
81
+ const v1 = await mut8Timeline<TestData>({
82
+ timeline: root,
83
+ mut8Opts: { dataToAddOrPatch: { type: 'comment', label: 'V1' } },
84
+ metaspace,
85
+ space: sourceSpace,
86
+ });
87
+
88
+ // V2 (Source Only)
89
+ const v2 = await mut8Timeline<TestData>({
90
+ timeline: v1,
91
+ mut8Opts: { dataToAddOrPatch: { type: 'comment', label: 'V2' } },
92
+ metaspace,
93
+ space: sourceSpace,
94
+ });
95
+ const addrV2 = getIbGibAddr({ ibGib: v2 });
96
+
97
+ // Transfer Root & V1 to Dest (Simulate previous sync)
98
+ await putInSpace({ space: destSpace, ibGibs: [root, v1] });
99
+
100
+ await ifWe(sir, 'verify setup', async () => {
101
+ // Verify Dest has V1
102
+ const checkV1 = await getFromSpace({ space: destSpace, addr: getIbGibAddr({ ibGib: v1 }) });
103
+ iReckon(sir, checkV1.success).asTo('Dest has V1').isGonnaBeTrue();
104
+
105
+ // Verify Dest does NOT have V2
106
+ const checkV2 = await getFromSpace({ space: destSpace, addr: addrV2 });
107
+ iReckon(sir, checkV2.success && !!checkV2.ibGibs?.length).asTo('Dest has V2').isGonnaBeFalse();
108
+ });
109
+
110
+ // 3. Setup Sync
111
+ const mockKeystone = await getTestKeystoneServiceHelper();
112
+ const senderCoordinator = new SyncSagaCoordinator(mockKeystone);
113
+ const receiverCoordinator = new SyncSagaCoordinator(mockKeystone);
114
+
115
+ const peer = new SyncPeerInnerspace_V1({
116
+ senderSpace: sourceSpace,
117
+ receiverSpace: destSpace,
118
+ receiverCoordinator: receiverCoordinator,
119
+ receiverMetaspace: metaspace,
120
+ });
121
+
122
+ // 4. Run Sync (Source Pushes V2)
123
+ console.log(`${lc} Running Sync...`);
124
+ const resSync = await senderCoordinator.sync({
125
+ peer: peer,
126
+ localSpace: sourceSpace,
127
+ metaspace: metaspace,
128
+ domainIbGibs: [v2],
129
+ useSessionIdentity: false,
130
+ });
131
+
132
+ await resSync.done;
133
+
134
+ // 5. Verify Dest (Should now have V2)
135
+ console.log(`${lc} Verifying Destination...`);
136
+
137
+ await ifWe(sir, `verify dest updated`, async () => {
138
+ // Verify Tip (V2)
139
+ const getV2 = await getFromSpace({ space: destSpace, addr: addrV2 });
140
+ iReckon(sir, getV2.success).asTo('V2 present in Dest').isGonnaBeTrue();
141
+
142
+ // Verify V2 points to V1
143
+ const v2IbGib = getV2.ibGibs![0];
144
+ const pastAddr = v2IbGib.rel8ns?.past?.at(-1);
145
+ iReckon(sir, pastAddr === getIbGibAddr({ ibGib: v1 })).asTo('V2 points to V1').isGonnaBeTrue();
146
+ });
147
+
148
+ });
149
+
150
+ });
@@ -33,7 +33,7 @@ await respecfully(sir, `Sync InnerSpaces`, async () => {
33
33
  let sourceSpace: InnerSpace_V1;
34
34
  let destSpace: InnerSpace_V1;
35
35
 
36
- await ifWeMight(sir, `Basic Push Sync (Source -> Dest)`, async () => {
36
+ await respecfully(sir, `Basic Push Sync (Source -> Dest)`, async () => {
37
37
  // 1. Setup Spaces
38
38
  metaspace = new Metaspace_Innerspace(undefined);
39
39
  await metaspace.initialize({
@@ -150,18 +150,18 @@ await respecfully(sir, `Sync InnerSpaces`, async () => {
150
150
  try {
151
151
  const getChildInDest = await getFromSpace({ space: destSpace, addr: childAddr });
152
152
 
153
- await ifWeMight(sir, `verify success getChildInDest`, async () => {
153
+ await ifWe(sir, `verify success getChildInDest`, async () => {
154
154
  iReckon(sir, getChildInDest.success).asTo('Child present in Dest').isGonnaBeTrue();
155
155
  });
156
156
 
157
- await ifWeMight(sir, `verify getChildInDest.ibGibs`, async () => {
157
+ await ifWe(sir, `verify getChildInDest.ibGibs`, async () => {
158
158
  const firstChild = getChildInDest.ibGibs?.[0];
159
159
  console.log(`${lc} firstChild: ${pretty(firstChild)}`);
160
160
  iReckon(sir, firstChild?.data?.n).asTo('Child content matches').isGonnaBe(2);
161
161
  });
162
162
 
163
163
  } catch (error) {
164
- await ifWeMight(sir, `doh`, async () => {
164
+ await ifWe(sir, `doh`, async () => {
165
165
  // hack here I'm getting tired...
166
166
  iReckon(sir, true).asTo(`error: ${extractErrorMsg(error)}`).isGonnaBeFalse();
167
167
  });