cojson 0.13.17 → 0.13.18

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 (166) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +9 -0
  3. package/dist/PeerState.d.ts +3 -0
  4. package/dist/PeerState.d.ts.map +1 -1
  5. package/dist/PeerState.js +9 -0
  6. package/dist/PeerState.js.map +1 -1
  7. package/dist/SyncStateManager.d.ts.map +1 -1
  8. package/dist/SyncStateManager.js +2 -3
  9. package/dist/SyncStateManager.js.map +1 -1
  10. package/dist/coValue.d.ts +4 -4
  11. package/dist/coValue.d.ts.map +1 -1
  12. package/dist/coValue.js +4 -4
  13. package/dist/coValue.js.map +1 -1
  14. package/dist/coValueCore/coValueCore.d.ts +143 -0
  15. package/dist/coValueCore/coValueCore.d.ts.map +1 -0
  16. package/dist/{coValueCore.js → coValueCore/coValueCore.js} +314 -246
  17. package/dist/coValueCore/coValueCore.js.map +1 -0
  18. package/dist/coValueCore/verifiedState.d.ts +65 -0
  19. package/dist/coValueCore/verifiedState.d.ts.map +1 -0
  20. package/dist/coValueCore/verifiedState.js +210 -0
  21. package/dist/coValueCore/verifiedState.js.map +1 -0
  22. package/dist/coValues/account.d.ts +8 -10
  23. package/dist/coValues/account.d.ts.map +1 -1
  24. package/dist/coValues/account.js +12 -13
  25. package/dist/coValues/account.js.map +1 -1
  26. package/dist/coValues/coList.d.ts +3 -3
  27. package/dist/coValues/coList.d.ts.map +1 -1
  28. package/dist/coValues/coList.js +6 -3
  29. package/dist/coValues/coList.js.map +1 -1
  30. package/dist/coValues/coMap.d.ts +3 -3
  31. package/dist/coValues/coMap.d.ts.map +1 -1
  32. package/dist/coValues/coMap.js +3 -3
  33. package/dist/coValues/coMap.js.map +1 -1
  34. package/dist/coValues/coPlainText.d.ts +2 -2
  35. package/dist/coValues/coPlainText.d.ts.map +1 -1
  36. package/dist/coValues/coPlainText.js +4 -4
  37. package/dist/coValues/coPlainText.js.map +1 -1
  38. package/dist/coValues/coStream.d.ts +3 -3
  39. package/dist/coValues/coStream.d.ts.map +1 -1
  40. package/dist/coValues/coStream.js +3 -3
  41. package/dist/coValues/coStream.js.map +1 -1
  42. package/dist/coValues/group.d.ts +7 -2
  43. package/dist/coValues/group.d.ts.map +1 -1
  44. package/dist/coValues/group.js +29 -26
  45. package/dist/coValues/group.js.map +1 -1
  46. package/dist/coreToCoValue.d.ts +2 -2
  47. package/dist/coreToCoValue.d.ts.map +1 -1
  48. package/dist/coreToCoValue.js +10 -14
  49. package/dist/coreToCoValue.js.map +1 -1
  50. package/dist/exports.d.ts +6 -5
  51. package/dist/exports.d.ts.map +1 -1
  52. package/dist/exports.js +3 -4
  53. package/dist/exports.js.map +1 -1
  54. package/dist/localNode.d.ts +30 -24
  55. package/dist/localNode.d.ts.map +1 -1
  56. package/dist/localNode.js +139 -170
  57. package/dist/localNode.js.map +1 -1
  58. package/dist/permissions.d.ts +2 -1
  59. package/dist/permissions.d.ts.map +1 -1
  60. package/dist/permissions.js +15 -11
  61. package/dist/permissions.js.map +1 -1
  62. package/dist/priority.d.ts +1 -1
  63. package/dist/priority.d.ts.map +1 -1
  64. package/dist/sync.d.ts +2 -2
  65. package/dist/sync.d.ts.map +1 -1
  66. package/dist/sync.js +86 -55
  67. package/dist/sync.js.map +1 -1
  68. package/dist/tests/coList.test.js +19 -16
  69. package/dist/tests/coList.test.js.map +1 -1
  70. package/dist/tests/coMap.test.js +12 -13
  71. package/dist/tests/coMap.test.js.map +1 -1
  72. package/dist/tests/coPlainText.test.js +9 -10
  73. package/dist/tests/coPlainText.test.js.map +1 -1
  74. package/dist/tests/coStream.test.js +22 -17
  75. package/dist/tests/coStream.test.js.map +1 -1
  76. package/dist/tests/coValueCore.test.js +22 -28
  77. package/dist/tests/coValueCore.test.js.map +1 -1
  78. package/dist/tests/coValueCoreLoadingState.test.d.ts +2 -0
  79. package/dist/tests/coValueCoreLoadingState.test.d.ts.map +1 -0
  80. package/dist/tests/{coValueState.test.js → coValueCoreLoadingState.test.js} +62 -46
  81. package/dist/tests/coValueCoreLoadingState.test.js.map +1 -0
  82. package/dist/tests/group.test.js +42 -43
  83. package/dist/tests/group.test.js.map +1 -1
  84. package/dist/tests/messagesTestUtils.d.ts +2 -2
  85. package/dist/tests/messagesTestUtils.d.ts.map +1 -1
  86. package/dist/tests/messagesTestUtils.js +1 -1
  87. package/dist/tests/messagesTestUtils.js.map +1 -1
  88. package/dist/tests/permissions.test.js +224 -292
  89. package/dist/tests/permissions.test.js.map +1 -1
  90. package/dist/tests/priority.test.js +13 -14
  91. package/dist/tests/priority.test.js.map +1 -1
  92. package/dist/tests/sync.auth.test.d.ts +2 -0
  93. package/dist/tests/sync.auth.test.d.ts.map +1 -0
  94. package/dist/tests/sync.auth.test.js +141 -0
  95. package/dist/tests/sync.auth.test.js.map +1 -0
  96. package/dist/tests/sync.load.test.js +4 -4
  97. package/dist/tests/sync.load.test.js.map +1 -1
  98. package/dist/tests/sync.mesh.test.js +25 -12
  99. package/dist/tests/sync.mesh.test.js.map +1 -1
  100. package/dist/tests/sync.peerReconciliation.test.js +19 -19
  101. package/dist/tests/sync.peerReconciliation.test.js.map +1 -1
  102. package/dist/tests/sync.storage.test.js +20 -13
  103. package/dist/tests/sync.storage.test.js.map +1 -1
  104. package/dist/tests/sync.test.js +32 -39
  105. package/dist/tests/sync.test.js.map +1 -1
  106. package/dist/tests/sync.upload.test.js +126 -37
  107. package/dist/tests/sync.upload.test.js.map +1 -1
  108. package/dist/tests/testUtils.d.ts +24 -15
  109. package/dist/tests/testUtils.d.ts.map +1 -1
  110. package/dist/tests/testUtils.js +88 -61
  111. package/dist/tests/testUtils.js.map +1 -1
  112. package/dist/typeUtils/expectGroup.js +1 -1
  113. package/dist/typeUtils/expectGroup.js.map +1 -1
  114. package/package.json +1 -1
  115. package/src/PeerState.ts +11 -0
  116. package/src/SyncStateManager.ts +2 -3
  117. package/src/coValue.ts +11 -8
  118. package/src/{coValueCore.ts → coValueCore/coValueCore.ts} +469 -413
  119. package/src/coValueCore/verifiedState.ts +376 -0
  120. package/src/coValues/account.ts +20 -25
  121. package/src/coValues/coList.ts +12 -6
  122. package/src/coValues/coMap.ts +9 -6
  123. package/src/coValues/coPlainText.ts +9 -6
  124. package/src/coValues/coStream.ts +9 -6
  125. package/src/coValues/group.ts +50 -28
  126. package/src/coreToCoValue.ts +14 -15
  127. package/src/exports.ts +9 -7
  128. package/src/localNode.ts +227 -273
  129. package/src/permissions.ts +18 -12
  130. package/src/priority.ts +1 -1
  131. package/src/sync.ts +96 -63
  132. package/src/tests/coList.test.ts +21 -15
  133. package/src/tests/coMap.test.ts +12 -13
  134. package/src/tests/coPlainText.test.ts +12 -9
  135. package/src/tests/coStream.test.ts +25 -16
  136. package/src/tests/coValueCore.test.ts +30 -27
  137. package/src/tests/{coValueState.test.ts → coValueCoreLoadingState.test.ts} +67 -57
  138. package/src/tests/group.test.ts +44 -68
  139. package/src/tests/messagesTestUtils.ts +3 -8
  140. package/src/tests/permissions.test.ts +283 -449
  141. package/src/tests/priority.test.ts +17 -13
  142. package/src/tests/sync.auth.test.ts +188 -0
  143. package/src/tests/sync.load.test.ts +4 -4
  144. package/src/tests/sync.mesh.test.ts +25 -12
  145. package/src/tests/sync.peerReconciliation.test.ts +25 -25
  146. package/src/tests/sync.storage.test.ts +20 -13
  147. package/src/tests/sync.test.ts +43 -43
  148. package/src/tests/sync.upload.test.ts +157 -37
  149. package/src/tests/testUtils.ts +120 -74
  150. package/src/typeUtils/expectGroup.ts +1 -1
  151. package/dist/CoValuesStore.d.ts +0 -14
  152. package/dist/CoValuesStore.d.ts.map +0 -1
  153. package/dist/CoValuesStore.js +0 -32
  154. package/dist/CoValuesStore.js.map +0 -1
  155. package/dist/coValueCore.d.ts +0 -142
  156. package/dist/coValueCore.d.ts.map +0 -1
  157. package/dist/coValueCore.js.map +0 -1
  158. package/dist/coValueState.d.ts +0 -34
  159. package/dist/coValueState.d.ts.map +0 -1
  160. package/dist/coValueState.js +0 -190
  161. package/dist/coValueState.js.map +0 -1
  162. package/dist/tests/coValueState.test.d.ts +0 -2
  163. package/dist/tests/coValueState.test.d.ts.map +0 -1
  164. package/dist/tests/coValueState.test.js.map +0 -1
  165. package/src/CoValuesStore.ts +0 -41
  166. package/src/coValueState.ts +0 -245
@@ -1,190 +0,0 @@
1
- import { ValueType } from "@opentelemetry/api";
2
- import { metrics } from "@opentelemetry/api";
3
- import { emptyKnownState } from "./sync.js";
4
- export const CO_VALUE_LOADING_CONFIG = {
5
- MAX_RETRIES: 2,
6
- TIMEOUT: 30000,
7
- };
8
- export class CoValueState {
9
- constructor(id) {
10
- this.peers = new Map();
11
- this.core = null;
12
- this.listeners = new Set();
13
- this.id = id;
14
- this.counter = metrics
15
- .getMeter("cojson")
16
- .createUpDownCounter("jazz.covalues.loaded", {
17
- description: "The number of covalues in the system",
18
- unit: "covalue",
19
- valueType: ValueType.INT,
20
- });
21
- this.updateCounter(null);
22
- }
23
- get highLevelState() {
24
- if (this.core) {
25
- return "available";
26
- }
27
- else if (this.peers.size === 0) {
28
- return "unknown";
29
- }
30
- for (const peer of this.peers.values()) {
31
- if (peer.type === "pending") {
32
- return "loading";
33
- }
34
- else if (peer.type === "unknown") {
35
- return "unknown";
36
- }
37
- }
38
- return "unavailable";
39
- }
40
- isErroredInPeer(peerId) {
41
- return this.peers.get(peerId)?.type === "errored";
42
- }
43
- isAvailable() {
44
- return !!this.core;
45
- }
46
- addListener(listener) {
47
- this.listeners.add(listener);
48
- listener(this);
49
- }
50
- removeListener(listener) {
51
- this.listeners.delete(listener);
52
- }
53
- notifyListeners() {
54
- for (const listener of this.listeners) {
55
- listener(this);
56
- }
57
- }
58
- async getCoValue() {
59
- if (this.core) {
60
- return this.core;
61
- }
62
- if (this.highLevelState === "unavailable") {
63
- return "unavailable";
64
- }
65
- return new Promise((resolve) => {
66
- const listener = (state) => {
67
- if (state.core) {
68
- resolve(state.core);
69
- this.removeListener(listener);
70
- }
71
- else if (state.highLevelState === "unavailable") {
72
- resolve("unavailable");
73
- this.removeListener(listener);
74
- }
75
- };
76
- this.addListener(listener);
77
- });
78
- }
79
- async loadFromPeers(peers) {
80
- if (peers.length === 0) {
81
- return;
82
- }
83
- const peersToActuallyLoadFrom = [];
84
- for (const peer of peers) {
85
- const currentState = this.peers.get(peer.id);
86
- if (currentState?.type === "available" ||
87
- currentState?.type === "pending") {
88
- continue;
89
- }
90
- if (currentState?.type === "errored") {
91
- continue;
92
- }
93
- if (currentState?.type === "unavailable") {
94
- if (peer.shouldRetryUnavailableCoValues()) {
95
- this.markPending(peer.id);
96
- peersToActuallyLoadFrom.push(peer);
97
- }
98
- continue;
99
- }
100
- if (!currentState || currentState?.type === "unknown") {
101
- this.markPending(peer.id);
102
- peersToActuallyLoadFrom.push(peer);
103
- }
104
- }
105
- for (const peer of peersToActuallyLoadFrom) {
106
- if (peer.closed) {
107
- this.markNotFoundInPeer(peer.id);
108
- continue;
109
- }
110
- peer.pushOutgoingMessage({
111
- action: "load",
112
- ...(this.core ? this.core.knownState() : emptyKnownState(this.id)),
113
- });
114
- /**
115
- * Use a very long timeout for storage peers, because under pressure
116
- * they may take a long time to consume the messages queue
117
- *
118
- * TODO: Track errors on storage and do not rely on timeout
119
- */
120
- const timeoutDuration = peer.role === "storage"
121
- ? CO_VALUE_LOADING_CONFIG.TIMEOUT * 10
122
- : CO_VALUE_LOADING_CONFIG.TIMEOUT;
123
- const waitingForPeer = new Promise((resolve) => {
124
- const markNotFound = () => {
125
- if (this.peers.get(peer.id)?.type === "pending") {
126
- this.markNotFoundInPeer(peer.id);
127
- }
128
- };
129
- const timeout = setTimeout(markNotFound, timeoutDuration);
130
- const removeCloseListener = peer.addCloseListener(markNotFound);
131
- const listener = (state) => {
132
- const peerState = state.peers.get(peer.id);
133
- if (state.isAvailable() || // might have become available from another peer e.g. through handleNewContent
134
- peerState?.type === "available" ||
135
- peerState?.type === "errored" ||
136
- peerState?.type === "unavailable") {
137
- state.removeListener(listener);
138
- removeCloseListener();
139
- clearTimeout(timeout);
140
- resolve();
141
- }
142
- };
143
- this.addListener(listener);
144
- });
145
- await waitingForPeer;
146
- }
147
- }
148
- updateCounter(previousState) {
149
- const newState = this.highLevelState;
150
- if (previousState !== newState) {
151
- if (previousState) {
152
- this.counter.add(-1, { state: previousState });
153
- }
154
- this.counter.add(1, { state: newState });
155
- }
156
- }
157
- markNotFoundInPeer(peerId) {
158
- const previousState = this.highLevelState;
159
- this.peers.set(peerId, { type: "unavailable" });
160
- this.updateCounter(previousState);
161
- this.notifyListeners();
162
- }
163
- // TODO: rename to "provided"
164
- markAvailable(coValue, fromPeerId) {
165
- const previousState = this.highLevelState;
166
- this.core = coValue;
167
- this.peers.set(fromPeerId, { type: "available" });
168
- this.updateCounter(previousState);
169
- this.notifyListeners();
170
- }
171
- internalMarkMagicallyAvailable(coValue) {
172
- const previousState = this.highLevelState;
173
- this.core = coValue;
174
- this.updateCounter(previousState);
175
- this.notifyListeners();
176
- }
177
- markErrored(peerId, error) {
178
- const previousState = this.highLevelState;
179
- this.peers.set(peerId, { type: "errored", error });
180
- this.updateCounter(previousState);
181
- this.notifyListeners();
182
- }
183
- markPending(peerId) {
184
- const previousState = this.highLevelState;
185
- this.peers.set(peerId, { type: "pending" });
186
- this.updateCounter(previousState);
187
- this.notifyListeners();
188
- }
189
- }
190
- //# sourceMappingURL=coValueState.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"coValueState.js","sourceRoot":"","sources":["../src/coValueState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAiB,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAK5D,OAAO,EAAU,eAAe,EAAE,MAAM,WAAW,CAAC;AAEpD,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,WAAW,EAAE,CAAC;IACd,OAAO,EAAE,KAAM;CAChB,CAAC;AAEF,MAAM,OAAO,YAAY;IAgBvB,YAAY,EAAW;QAff,UAAK,GAAG,IAAI,GAAG,EAOpB,CAAC;QAEJ,SAAI,GAAuB,IAAI,CAAC;QAGxB,cAAS,GAAuC,IAAI,GAAG,EAAE,CAAC;QAIhE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QAEb,IAAI,CAAC,OAAO,GAAG,OAAO;aACnB,QAAQ,CAAC,QAAQ,CAAC;aAClB,mBAAmB,CAAC,sBAAsB,EAAE;YAC3C,WAAW,EAAE,sCAAsC;YACnD,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,SAAS,CAAC,GAAG;SACzB,CAAC,CAAC;QAEL,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,cAAc;QAChB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,WAAW,CAAC;QACrB,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC5B,OAAO,SAAS,CAAC;YACnB,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACnC,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,eAAe,CAAC,MAAc;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,KAAK,SAAS,CAAC;IACpD,CAAC;IAED,WAAW;QACT,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,WAAW,CAAC,QAAuC;QACjD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAED,cAAc,CAAC,QAAuC;QACpD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAEO,eAAe;QACrB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,IAAI,CAAC,IAAI,CAAC;QACnB,CAAC;QAED,IAAI,IAAI,CAAC,cAAc,KAAK,aAAa,EAAE,CAAC;YAC1C,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,OAAO,IAAI,OAAO,CAA8B,CAAC,OAAO,EAAE,EAAE;YAC1D,MAAM,QAAQ,GAAG,CAAC,KAAmB,EAAE,EAAE;gBACvC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACpB,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;gBAChC,CAAC;qBAAM,IAAI,KAAK,CAAC,cAAc,KAAK,aAAa,EAAE,CAAC;oBAClD,OAAO,CAAC,aAAa,CAAC,CAAC;oBACvB,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC,CAAC;YAEF,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,KAAkB;QACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,MAAM,uBAAuB,GAAG,EAAE,CAAC;QACnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAE7C,IACE,YAAY,EAAE,IAAI,KAAK,WAAW;gBAClC,YAAY,EAAE,IAAI,KAAK,SAAS,EAChC,CAAC;gBACD,SAAS;YACX,CAAC;YAED,IAAI,YAAY,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;gBACrC,SAAS;YACX,CAAC;YAED,IAAI,YAAY,EAAE,IAAI,KAAK,aAAa,EAAE,CAAC;gBACzC,IAAI,IAAI,CAAC,8BAA8B,EAAE,EAAE,CAAC;oBAC1C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC1B,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrC,CAAC;gBAED,SAAS;YACX,CAAC;YAED,IAAI,CAAC,YAAY,IAAI,YAAY,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;gBACtD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC1B,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,uBAAuB,EAAE,CAAC;YAC3C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACjC,SAAS;YACX,CAAC;YAED,IAAI,CAAC,mBAAmB,CAAC;gBACvB,MAAM,EAAE,MAAM;gBACd,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACnE,CAAC,CAAC;YAEH;;;;;eAKG;YACH,MAAM,eAAe,GACnB,IAAI,CAAC,IAAI,KAAK,SAAS;gBACrB,CAAC,CAAC,uBAAuB,CAAC,OAAO,GAAG,EAAE;gBACtC,CAAC,CAAC,uBAAuB,CAAC,OAAO,CAAC;YAEtC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBACnD,MAAM,YAAY,GAAG,GAAG,EAAE;oBACxB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;wBAChD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACnC,CAAC;gBACH,CAAC,CAAC;gBAEF,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;gBAC1D,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;gBAEhE,MAAM,QAAQ,GAAG,CAAC,KAAmB,EAAE,EAAE;oBACvC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC3C,IACE,KAAK,CAAC,WAAW,EAAE,IAAI,8EAA8E;wBACrG,SAAS,EAAE,IAAI,KAAK,WAAW;wBAC/B,SAAS,EAAE,IAAI,KAAK,SAAS;wBAC7B,SAAS,EAAE,IAAI,KAAK,aAAa,EACjC,CAAC;wBACD,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;wBAC/B,mBAAmB,EAAE,CAAC;wBACtB,YAAY,CAAC,OAAO,CAAC,CAAC;wBACtB,OAAO,EAAE,CAAC;oBACZ,CAAC;gBACH,CAAC,CAAC;gBAEF,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;YAEH,MAAM,cAAc,CAAC;QACvB,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,aAA4B;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC;QAErC,IAAI,aAAa,KAAK,QAAQ,EAAE,CAAC;YAC/B,IAAI,aAAa,EAAE,CAAC;gBAClB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;YACjD,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,kBAAkB,CAAC,MAAc;QAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QAClC,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,6BAA6B;IAC7B,aAAa,CAAC,OAAoB,EAAE,UAAkB;QACpD,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QAClC,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,8BAA8B,CAAC,OAAoB;QACjD,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;QACpB,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QAClC,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,WAAW,CAAC,MAAc,EAAE,KAA8B;QACxD,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QAClC,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAEO,WAAW,CAAC,MAAc;QAChC,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QAClC,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;CACF"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=coValueState.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"coValueState.test.d.ts","sourceRoot":"","sources":["../../src/tests/coValueState.test.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"coValueState.test.js","sourceRoot":"","sources":["../../src/tests/coValueState.test.ts"],"names":[],"mappings":"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"}
@@ -1,41 +0,0 @@
1
- import { CoValueCore } from "./coValueCore.js";
2
- import { CoValueState } from "./coValueState.js";
3
- import { RawCoID } from "./ids.js";
4
- import { PeerID } from "./sync.js";
5
-
6
- export class CoValuesStore {
7
- coValues = new Map<RawCoID, CoValueState>();
8
-
9
- get(id: RawCoID) {
10
- let entry = this.coValues.get(id);
11
-
12
- if (!entry) {
13
- entry = new CoValueState(id);
14
- this.coValues.set(id, entry);
15
- }
16
-
17
- return entry;
18
- }
19
-
20
- markAsAvailable(id: RawCoID, coValue: CoValueCore, fromPeerId: PeerID) {
21
- const entry = this.get(id);
22
- entry.markAvailable(coValue, fromPeerId);
23
- }
24
-
25
- internalMarkMagicallyAvailable(id: RawCoID, coValue: CoValueCore) {
26
- const entry = this.get(id);
27
- entry.internalMarkMagicallyAvailable(coValue);
28
- }
29
-
30
- getEntries() {
31
- return this.coValues.entries();
32
- }
33
-
34
- getValues() {
35
- return this.coValues.values();
36
- }
37
-
38
- getKeys() {
39
- return this.coValues.keys();
40
- }
41
- }
@@ -1,245 +0,0 @@
1
- import { ValueType } from "@opentelemetry/api";
2
- import { UpDownCounter, metrics } from "@opentelemetry/api";
3
- import { PeerState } from "./PeerState.js";
4
- import { CoValueCore, TryAddTransactionsError } from "./coValueCore.js";
5
- import { RawCoID } from "./ids.js";
6
- import { logger } from "./logger.js";
7
- import { PeerID, emptyKnownState } from "./sync.js";
8
-
9
- export const CO_VALUE_LOADING_CONFIG = {
10
- MAX_RETRIES: 2,
11
- TIMEOUT: 30_000,
12
- };
13
-
14
- export class CoValueState {
15
- private peers = new Map<
16
- PeerID,
17
- | { type: "unknown" | "pending" | "available" | "unavailable" }
18
- | {
19
- type: "errored";
20
- error: TryAddTransactionsError;
21
- }
22
- >();
23
-
24
- core: CoValueCore | null = null;
25
- id: RawCoID;
26
-
27
- private listeners: Set<(state: CoValueState) => void> = new Set();
28
- private counter: UpDownCounter;
29
-
30
- constructor(id: RawCoID) {
31
- this.id = id;
32
-
33
- this.counter = metrics
34
- .getMeter("cojson")
35
- .createUpDownCounter("jazz.covalues.loaded", {
36
- description: "The number of covalues in the system",
37
- unit: "covalue",
38
- valueType: ValueType.INT,
39
- });
40
-
41
- this.updateCounter(null);
42
- }
43
-
44
- get highLevelState() {
45
- if (this.core) {
46
- return "available";
47
- } else if (this.peers.size === 0) {
48
- return "unknown";
49
- }
50
-
51
- for (const peer of this.peers.values()) {
52
- if (peer.type === "pending") {
53
- return "loading";
54
- } else if (peer.type === "unknown") {
55
- return "unknown";
56
- }
57
- }
58
-
59
- return "unavailable";
60
- }
61
-
62
- isErroredInPeer(peerId: PeerID) {
63
- return this.peers.get(peerId)?.type === "errored";
64
- }
65
-
66
- isAvailable(): this is { type: "available"; core: CoValueCore } {
67
- return !!this.core;
68
- }
69
-
70
- addListener(listener: (state: CoValueState) => void) {
71
- this.listeners.add(listener);
72
- listener(this);
73
- }
74
-
75
- removeListener(listener: (state: CoValueState) => void) {
76
- this.listeners.delete(listener);
77
- }
78
-
79
- private notifyListeners() {
80
- for (const listener of this.listeners) {
81
- listener(this);
82
- }
83
- }
84
-
85
- async getCoValue() {
86
- if (this.core) {
87
- return this.core;
88
- }
89
-
90
- if (this.highLevelState === "unavailable") {
91
- return "unavailable";
92
- }
93
-
94
- return new Promise<CoValueCore | "unavailable">((resolve) => {
95
- const listener = (state: CoValueState) => {
96
- if (state.core) {
97
- resolve(state.core);
98
- this.removeListener(listener);
99
- } else if (state.highLevelState === "unavailable") {
100
- resolve("unavailable");
101
- this.removeListener(listener);
102
- }
103
- };
104
-
105
- this.addListener(listener);
106
- });
107
- }
108
-
109
- async loadFromPeers(peers: PeerState[]) {
110
- if (peers.length === 0) {
111
- return;
112
- }
113
-
114
- const peersToActuallyLoadFrom = [];
115
- for (const peer of peers) {
116
- const currentState = this.peers.get(peer.id);
117
-
118
- if (
119
- currentState?.type === "available" ||
120
- currentState?.type === "pending"
121
- ) {
122
- continue;
123
- }
124
-
125
- if (currentState?.type === "errored") {
126
- continue;
127
- }
128
-
129
- if (currentState?.type === "unavailable") {
130
- if (peer.shouldRetryUnavailableCoValues()) {
131
- this.markPending(peer.id);
132
- peersToActuallyLoadFrom.push(peer);
133
- }
134
-
135
- continue;
136
- }
137
-
138
- if (!currentState || currentState?.type === "unknown") {
139
- this.markPending(peer.id);
140
- peersToActuallyLoadFrom.push(peer);
141
- }
142
- }
143
-
144
- for (const peer of peersToActuallyLoadFrom) {
145
- if (peer.closed) {
146
- this.markNotFoundInPeer(peer.id);
147
- continue;
148
- }
149
-
150
- peer.pushOutgoingMessage({
151
- action: "load",
152
- ...(this.core ? this.core.knownState() : emptyKnownState(this.id)),
153
- });
154
-
155
- /**
156
- * Use a very long timeout for storage peers, because under pressure
157
- * they may take a long time to consume the messages queue
158
- *
159
- * TODO: Track errors on storage and do not rely on timeout
160
- */
161
- const timeoutDuration =
162
- peer.role === "storage"
163
- ? CO_VALUE_LOADING_CONFIG.TIMEOUT * 10
164
- : CO_VALUE_LOADING_CONFIG.TIMEOUT;
165
-
166
- const waitingForPeer = new Promise<void>((resolve) => {
167
- const markNotFound = () => {
168
- if (this.peers.get(peer.id)?.type === "pending") {
169
- this.markNotFoundInPeer(peer.id);
170
- }
171
- };
172
-
173
- const timeout = setTimeout(markNotFound, timeoutDuration);
174
- const removeCloseListener = peer.addCloseListener(markNotFound);
175
-
176
- const listener = (state: CoValueState) => {
177
- const peerState = state.peers.get(peer.id);
178
- if (
179
- state.isAvailable() || // might have become available from another peer e.g. through handleNewContent
180
- peerState?.type === "available" ||
181
- peerState?.type === "errored" ||
182
- peerState?.type === "unavailable"
183
- ) {
184
- state.removeListener(listener);
185
- removeCloseListener();
186
- clearTimeout(timeout);
187
- resolve();
188
- }
189
- };
190
-
191
- this.addListener(listener);
192
- });
193
-
194
- await waitingForPeer;
195
- }
196
- }
197
-
198
- private updateCounter(previousState: string | null) {
199
- const newState = this.highLevelState;
200
-
201
- if (previousState !== newState) {
202
- if (previousState) {
203
- this.counter.add(-1, { state: previousState });
204
- }
205
- this.counter.add(1, { state: newState });
206
- }
207
- }
208
-
209
- markNotFoundInPeer(peerId: PeerID) {
210
- const previousState = this.highLevelState;
211
- this.peers.set(peerId, { type: "unavailable" });
212
- this.updateCounter(previousState);
213
- this.notifyListeners();
214
- }
215
-
216
- // TODO: rename to "provided"
217
- markAvailable(coValue: CoValueCore, fromPeerId: PeerID) {
218
- const previousState = this.highLevelState;
219
- this.core = coValue;
220
- this.peers.set(fromPeerId, { type: "available" });
221
- this.updateCounter(previousState);
222
- this.notifyListeners();
223
- }
224
-
225
- internalMarkMagicallyAvailable(coValue: CoValueCore) {
226
- const previousState = this.highLevelState;
227
- this.core = coValue;
228
- this.updateCounter(previousState);
229
- this.notifyListeners();
230
- }
231
-
232
- markErrored(peerId: PeerID, error: TryAddTransactionsError) {
233
- const previousState = this.highLevelState;
234
- this.peers.set(peerId, { type: "errored", error });
235
- this.updateCounter(previousState);
236
- this.notifyListeners();
237
- }
238
-
239
- private markPending(peerId: PeerID) {
240
- const previousState = this.highLevelState;
241
- this.peers.set(peerId, { type: "pending" });
242
- this.updateCounter(previousState);
243
- this.notifyListeners();
244
- }
245
- }