cojson 0.18.26 → 0.18.28

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 (161) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +17 -0
  3. package/dist/PeerKnownStates.d.ts +4 -3
  4. package/dist/PeerKnownStates.d.ts.map +1 -1
  5. package/dist/PeerKnownStates.js +27 -18
  6. package/dist/PeerKnownStates.js.map +1 -1
  7. package/dist/PeerState.d.ts +3 -2
  8. package/dist/PeerState.d.ts.map +1 -1
  9. package/dist/PeerState.js.map +1 -1
  10. package/dist/SyncStateManager.d.ts +2 -2
  11. package/dist/SyncStateManager.d.ts.map +1 -1
  12. package/dist/SyncStateManager.js +2 -10
  13. package/dist/SyncStateManager.js.map +1 -1
  14. package/dist/coValueContentMessage.d.ts +1 -1
  15. package/dist/coValueContentMessage.d.ts.map +1 -1
  16. package/dist/coValueContentMessage.js +1 -1
  17. package/dist/coValueContentMessage.js.map +1 -1
  18. package/dist/coValueCore/SessionMap.d.ts +6 -3
  19. package/dist/coValueCore/SessionMap.d.ts.map +1 -1
  20. package/dist/coValueCore/SessionMap.js +41 -8
  21. package/dist/coValueCore/SessionMap.js.map +1 -1
  22. package/dist/coValueCore/branching.d.ts +5 -4
  23. package/dist/coValueCore/branching.d.ts.map +1 -1
  24. package/dist/coValueCore/branching.js +22 -4
  25. package/dist/coValueCore/branching.js.map +1 -1
  26. package/dist/coValueCore/coValueCore.d.ts +29 -25
  27. package/dist/coValueCore/coValueCore.d.ts.map +1 -1
  28. package/dist/coValueCore/coValueCore.js +163 -126
  29. package/dist/coValueCore/coValueCore.js.map +1 -1
  30. package/dist/coValueCore/decryptTransactionChangesAndMeta.d.ts +3 -0
  31. package/dist/coValueCore/decryptTransactionChangesAndMeta.d.ts.map +1 -0
  32. package/dist/coValueCore/decryptTransactionChangesAndMeta.js +34 -0
  33. package/dist/coValueCore/decryptTransactionChangesAndMeta.js.map +1 -0
  34. package/dist/coValueCore/verifiedState.d.ts +12 -6
  35. package/dist/coValueCore/verifiedState.d.ts.map +1 -1
  36. package/dist/coValueCore/verifiedState.js +28 -56
  37. package/dist/coValueCore/verifiedState.js.map +1 -1
  38. package/dist/coValues/coMap.d.ts.map +1 -1
  39. package/dist/coValues/coMap.js.map +1 -1
  40. package/dist/coValues/coStream.d.ts.map +1 -1
  41. package/dist/coValues/coStream.js.map +1 -1
  42. package/dist/exports.d.ts +3 -2
  43. package/dist/exports.d.ts.map +1 -1
  44. package/dist/exports.js +2 -1
  45. package/dist/exports.js.map +1 -1
  46. package/dist/knownState.d.ts +58 -2
  47. package/dist/knownState.d.ts.map +1 -1
  48. package/dist/knownState.js +79 -5
  49. package/dist/knownState.js.map +1 -1
  50. package/dist/localNode.js +1 -1
  51. package/dist/localNode.js.map +1 -1
  52. package/dist/permissions.d.ts.map +1 -1
  53. package/dist/permissions.js +18 -20
  54. package/dist/permissions.js.map +1 -1
  55. package/dist/storage/knownState.d.ts +1 -1
  56. package/dist/storage/knownState.d.ts.map +1 -1
  57. package/dist/storage/knownState.js +2 -3
  58. package/dist/storage/knownState.js.map +1 -1
  59. package/dist/storage/storageAsync.d.ts +2 -1
  60. package/dist/storage/storageAsync.d.ts.map +1 -1
  61. package/dist/storage/storageAsync.js +5 -6
  62. package/dist/storage/storageAsync.js.map +1 -1
  63. package/dist/storage/storageSync.d.ts +2 -1
  64. package/dist/storage/storageSync.d.ts.map +1 -1
  65. package/dist/storage/storageSync.js +5 -5
  66. package/dist/storage/storageSync.js.map +1 -1
  67. package/dist/storage/types.d.ts +2 -1
  68. package/dist/storage/types.d.ts.map +1 -1
  69. package/dist/sync.d.ts +2 -12
  70. package/dist/sync.d.ts.map +1 -1
  71. package/dist/sync.js +9 -38
  72. package/dist/sync.js.map +1 -1
  73. package/dist/tests/PeerKnownStates.test.js +1 -1
  74. package/dist/tests/PeerKnownStates.test.js.map +1 -1
  75. package/dist/tests/PeerState.test.js +19 -0
  76. package/dist/tests/PeerState.test.js.map +1 -1
  77. package/dist/tests/PureJSCrypto.test.js.map +1 -1
  78. package/dist/tests/StorageApiAsync.test.js +1 -1
  79. package/dist/tests/StorageApiAsync.test.js.map +1 -1
  80. package/dist/tests/StorageApiSync.test.js +1 -2
  81. package/dist/tests/StorageApiSync.test.js.map +1 -1
  82. package/dist/tests/StoreQueue.test.js.map +1 -1
  83. package/dist/tests/SyncStateManager.test.js +1 -1
  84. package/dist/tests/SyncStateManager.test.js.map +1 -1
  85. package/dist/tests/branching.test.js +237 -28
  86. package/dist/tests/branching.test.js.map +1 -1
  87. package/dist/tests/coValueContentMessage.test.js +1 -1
  88. package/dist/tests/coValueContentMessage.test.js.map +1 -1
  89. package/dist/tests/coValueCore.loadFromStorage.test.d.ts +2 -0
  90. package/dist/tests/coValueCore.loadFromStorage.test.d.ts.map +1 -0
  91. package/dist/tests/coValueCore.loadFromStorage.test.js +395 -0
  92. package/dist/tests/coValueCore.loadFromStorage.test.js.map +1 -0
  93. package/dist/tests/coValueCore.loadingState.test.d.ts +2 -0
  94. package/dist/tests/coValueCore.loadingState.test.d.ts.map +1 -0
  95. package/dist/tests/{coValueCoreLoadingState.test.js → coValueCore.loadingState.test.js} +4 -12
  96. package/dist/tests/coValueCore.loadingState.test.js.map +1 -0
  97. package/dist/tests/coValueCore.test.js +30 -5
  98. package/dist/tests/coValueCore.test.js.map +1 -1
  99. package/dist/tests/knownState.test.d.ts +2 -0
  100. package/dist/tests/knownState.test.d.ts.map +1 -0
  101. package/dist/tests/knownState.test.js +510 -0
  102. package/dist/tests/knownState.test.js.map +1 -0
  103. package/dist/tests/messagesTestUtils.d.ts.map +1 -1
  104. package/dist/tests/messagesTestUtils.js.map +1 -1
  105. package/dist/tests/priority.test.js.map +1 -1
  106. package/dist/tests/sync.mesh.test.js +4 -34
  107. package/dist/tests/sync.mesh.test.js.map +1 -1
  108. package/dist/tests/sync.storage.test.js.map +1 -1
  109. package/dist/tests/sync.upload.test.js.map +1 -1
  110. package/dist/tests/testUtils.d.ts +7 -1
  111. package/dist/tests/testUtils.d.ts.map +1 -1
  112. package/dist/tests/testUtils.js +12 -0
  113. package/dist/tests/testUtils.js.map +1 -1
  114. package/package.json +3 -3
  115. package/src/PeerKnownStates.ts +36 -22
  116. package/src/PeerState.ts +2 -1
  117. package/src/SyncStateManager.ts +4 -17
  118. package/src/coValueContentMessage.ts +2 -1
  119. package/src/coValueCore/SessionMap.ts +66 -11
  120. package/src/coValueCore/branching.ts +37 -13
  121. package/src/coValueCore/coValueCore.ts +224 -177
  122. package/src/coValueCore/decryptTransactionChangesAndMeta.ts +56 -0
  123. package/src/coValueCore/verifiedState.ts +32 -64
  124. package/src/coValues/coMap.ts +1 -5
  125. package/src/coValues/coStream.ts +1 -5
  126. package/src/exports.ts +2 -2
  127. package/src/knownState.ts +118 -12
  128. package/src/localNode.ts +1 -1
  129. package/src/permissions.ts +21 -22
  130. package/src/storage/knownState.ts +9 -3
  131. package/src/storage/storageAsync.ts +15 -7
  132. package/src/storage/storageSync.ts +16 -8
  133. package/src/storage/types.ts +2 -1
  134. package/src/sync.ts +14 -60
  135. package/src/tests/PeerKnownStates.test.ts +1 -1
  136. package/src/tests/PeerState.test.ts +29 -3
  137. package/src/tests/PureJSCrypto.test.ts +0 -1
  138. package/src/tests/StorageApiAsync.test.ts +3 -6
  139. package/src/tests/StorageApiSync.test.ts +2 -6
  140. package/src/tests/StoreQueue.test.ts +3 -2
  141. package/src/tests/SyncStateManager.test.ts +1 -1
  142. package/src/tests/branching.test.ts +392 -45
  143. package/src/tests/coValueContentMessage.test.ts +2 -2
  144. package/src/tests/coValueCore.loadFromStorage.test.ts +540 -0
  145. package/src/tests/{coValueCoreLoadingState.test.ts → coValueCore.loadingState.test.ts} +3 -16
  146. package/src/tests/coValueCore.test.ts +40 -5
  147. package/src/tests/knownState.test.ts +665 -0
  148. package/src/tests/messagesTestUtils.ts +2 -1
  149. package/src/tests/priority.test.ts +0 -2
  150. package/src/tests/sync.mesh.test.ts +11 -38
  151. package/src/tests/sync.storage.test.ts +0 -1
  152. package/src/tests/sync.upload.test.ts +0 -1
  153. package/src/tests/testUtils.ts +22 -2
  154. package/dist/coValueCore/decodeTransactionChangesAndMeta.d.ts +0 -3
  155. package/dist/coValueCore/decodeTransactionChangesAndMeta.d.ts.map +0 -1
  156. package/dist/coValueCore/decodeTransactionChangesAndMeta.js +0 -59
  157. package/dist/coValueCore/decodeTransactionChangesAndMeta.js.map +0 -1
  158. package/dist/tests/coValueCoreLoadingState.test.d.ts +0 -2
  159. package/dist/tests/coValueCoreLoadingState.test.d.ts.map +0 -1
  160. package/dist/tests/coValueCoreLoadingState.test.js.map +0 -1
  161. package/src/coValueCore/decodeTransactionChangesAndMeta.ts +0 -81
@@ -7,30 +7,39 @@ import { CryptoProvider, Hash, KeyID, KeySecret, Signature, SignerID } from "../
7
7
  import { AgentID, RawCoID, SessionID, TransactionID } from "../ids.js";
8
8
  import { JsonObject, JsonValue } from "../jsonValue.js";
9
9
  import { LocalNode, ResolveAccountAgentError } from "../localNode.js";
10
- import { CoValueKnownState, NewContentMessage, PeerID } from "../sync.js";
10
+ import { NewContentMessage, PeerID } from "../sync.js";
11
11
  import { CoValueHeader, Transaction, VerifiedState } from "./verifiedState.js";
12
12
  import { MergeCommit, BranchPointerCommit, BranchStartCommit } from "./branching.js";
13
13
  import { type RawAccountID } from "../coValues/account.js";
14
+ import { CoValueKnownState, KnownStateSessions } from "../knownState.js";
14
15
  export declare function idforHeader(header: CoValueHeader, crypto: CryptoProvider): RawCoID;
15
- export type VerifiedTransaction = {
16
+ export declare class VerifiedTransaction {
16
17
  author: RawAccountID | AgentID;
17
- txID: TransactionID;
18
+ currentTxID: TransactionID;
19
+ sourceTxID: TransactionID | undefined;
18
20
  tx: Transaction;
19
- madeAt: number;
20
- isValidated: boolean;
21
+ currentMadeAt: number;
22
+ sourceTxMadeAt: number | undefined;
21
23
  changes: JsonValue[] | undefined;
22
24
  meta: JsonObject | undefined;
23
25
  isValid: boolean;
24
- hasInvalidChanges: boolean;
25
- hasInvalidMeta: boolean;
26
+ isValidated: boolean;
27
+ isDecrypted: boolean;
26
28
  hasMetaBeenParsed: boolean;
27
29
  previous: VerifiedTransaction | undefined;
28
- };
29
- export type DecryptedTransaction = {
30
- txID: TransactionID;
30
+ constructor(sessionID: SessionID, txIndex: number, tx: Transaction, branchId: RawCoID | undefined, parsingCache: {
31
+ changes: JsonValue[];
32
+ meta: JsonObject | undefined;
33
+ } | undefined, previous: VerifiedTransaction | undefined);
34
+ get txID(): TransactionID;
35
+ get madeAt(): number;
36
+ isValidTransactionWithChanges(): this is {
37
+ changes: JsonValue[];
38
+ isValid: true;
39
+ };
40
+ }
41
+ export type DecryptedTransaction = Omit<VerifiedTransaction, "changes"> & {
31
42
  changes: JsonValue[];
32
- madeAt: number;
33
- tx: Transaction;
34
43
  };
35
44
  export type AvailableCoValueCore = CoValueCore & {
36
45
  verified: VerifiedState;
@@ -53,27 +62,21 @@ export declare class CoValueCore {
53
62
  * In this case, it acts as a centralised entry to keep track of peer loading
54
63
  * state and to subscribe to its content when it does become available. */
55
64
  get verified(): VerifiedState | null;
56
- private readonly peers;
65
+ private readonly loadingStatuses;
57
66
  private _cachedContent?;
58
67
  readonly listeners: Set<(core: CoValueCore, unsub: () => void) => void>;
59
68
  private counter;
60
- private constructor();
61
- static fromID(id: RawCoID, node: LocalNode): CoValueCore;
62
- static fromHeader(header: CoValueHeader, node: LocalNode): AvailableCoValueCore;
69
+ constructor(id: RawCoID, node: LocalNode);
63
70
  get loadingState(): "unavailable" | "available" | "unknown" | "loading";
64
71
  hasMissingDependencies(): boolean;
65
72
  isAvailable(): this is AvailableCoValueCore;
66
73
  hasVerifiedContent(): this is AvailableCoValueCore;
67
74
  isErroredInPeer(peerId: PeerID): boolean;
75
+ waitFor(callback: (value: CoValueCore) => boolean): Promise<CoValueCore>;
68
76
  waitForAvailableOrUnavailable(): Promise<CoValueCore>;
69
77
  waitForAvailable(): Promise<CoValueCore>;
70
78
  waitForFullStreaming(): Promise<CoValueCore>;
71
- getStateForPeer(peerId: PeerID): {
72
- type: "unknown" | "pending" | "available" | "unavailable";
73
- } | {
74
- type: "errored";
75
- error: TryAddTransactionsError;
76
- } | undefined;
79
+ getLoadingStateForPeer(peerId: PeerID): "unavailable" | "available" | "unknown" | "pending" | "errored";
77
80
  private updateCounter;
78
81
  unmount(garbageCollectGroups?: boolean): boolean;
79
82
  markNotFoundInPeer(peerId: PeerID): void;
@@ -90,7 +93,7 @@ export declare class CoValueCore {
90
93
  */
91
94
  addNewContentToQueue(msg: NewContentMessage, from: PeerState | "storage" | "import"): void;
92
95
  addDependencyFromHeader(header: CoValueHeader): void;
93
- provideHeader(header: CoValueHeader, streamingKnownState?: CoValueKnownState["sessions"], skipVerify?: boolean): boolean;
96
+ provideHeader(header: CoValueHeader, streamingKnownState?: KnownStateSessions, skipVerify?: boolean): boolean;
94
97
  markErrored(peerId: PeerID, error: TryAddTransactionsError): void;
95
98
  markPending(peerId: PeerID): void;
96
99
  groupInvalidationSubscription?: () => void;
@@ -172,13 +175,14 @@ export declare class CoValueCore {
172
175
  ignorePrivateTransactions: boolean;
173
176
  knownTransactions?: Set<Transaction>;
174
177
  }): DecryptedTransaction[];
175
- compareTransactions(a: Pick<DecryptedTransaction, "madeAt" | "txID">, b: Pick<DecryptedTransaction, "madeAt" | "txID">): number;
178
+ compareTransactions(a: Pick<VerifiedTransaction, "madeAt" | "txID">, b: Pick<VerifiedTransaction, "madeAt" | "txID">): number;
176
179
  getCurrentReadKey(): {
177
180
  secret: KeySecret | undefined;
178
181
  id: KeyID;
179
182
  };
180
183
  readKeyCache: Map<`key_z${string}`, `keySecret_z${string}`>;
181
184
  getReadKey(keyID: KeyID): KeySecret | undefined;
185
+ safeGetGroup(): RawGroup | undefined;
182
186
  getGroup(): RawGroup;
183
187
  getTx(txID: TransactionID): Transaction | undefined;
184
188
  getDependedOnCoValues(): Set<RawCoID>;
@@ -188,7 +192,7 @@ export declare class CoValueCore {
188
192
  load(peers: PeerState[]): void;
189
193
  loadFromStorage(done?: (found: boolean) => void): void;
190
194
  loadFromPeers(peers: PeerState[]): void;
191
- internalLoadFromPeer(peer: PeerState): Promise<void> | undefined;
195
+ internalLoadFromPeer(peer: PeerState): void;
192
196
  }
193
197
  export type InvalidHashError = {
194
198
  type: "InvalidHash";
@@ -1 +1 @@
1
- {"version":3,"file":"coValueCore.d.ts","sourceRoot":"","sources":["../../src/coValueCore/coValueCore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"coValueCore.d.ts","sourceRoot":"","sources":["../../src/coValueCore/coValueCore.ts"],"names":[],"mappings":"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"}
@@ -17,19 +17,75 @@ import { validateTxSizeLimitInBytes } from "../coValueContentMessage.js";
17
17
  import { coreToCoValue } from "../coreToCoValue.js";
18
18
  import { logger } from "../logger.js";
19
19
  import { determineValidTransactions } from "../permissions.js";
20
- import { emptyKnownState, } from "../sync.js";
21
20
  import { accountOrAgentIDfromSessionID } from "../typeUtils/accountOrAgentIDfromSessionID.js";
22
21
  import { expectGroup } from "../typeUtils/expectGroup.js";
23
22
  import { getDependenciesFromContentMessage, getDependenciesFromGroupRawTransactions, getDependenciesFromHeader, } from "./utils.js";
24
23
  import { VerifiedState } from "./verifiedState.js";
25
24
  import { SessionMap } from "./SessionMap.js";
26
25
  import { createBranch, getBranchId, getBranchOwnerId, getBranchSource, mergeBranch, } from "./branching.js";
27
- import { decodeTransactionChangesAndMeta } from "./decodeTransactionChangesAndMeta.js";
28
- import { combineKnownStateSessions } from "../knownState.js";
26
+ import { decryptTransactionChangesAndMeta } from "./decryptTransactionChangesAndMeta.js";
27
+ import { combineKnownStateSessions, emptyKnownState, } from "../knownState.js";
28
+ import { safeParseJSON } from "../jsonStringify.js";
29
29
  export function idforHeader(header, crypto) {
30
30
  const hash = crypto.shortHash(header);
31
31
  return `co_z${hash.slice("shortHash_z".length)}`;
32
32
  }
33
+ export class VerifiedTransaction {
34
+ constructor(sessionID, txIndex, tx, branchId, parsingCache, previous) {
35
+ // Whether the transaction is valid, as per membership rules
36
+ this.isValid = false;
37
+ // Whether the transaction has been validated, used to track if determinedValidTransactions needs to check this
38
+ this.isValidated = false;
39
+ // True if the transaction has been decrypted
40
+ this.isDecrypted = false;
41
+ // True if the meta information has been parsed and loaded in the CoValueCore
42
+ this.hasMetaBeenParsed = false;
43
+ this.author = accountOrAgentIDfromSessionID(sessionID);
44
+ const txID = branchId
45
+ ? {
46
+ sessionID,
47
+ txIndex,
48
+ branch: branchId,
49
+ }
50
+ : {
51
+ sessionID,
52
+ txIndex,
53
+ };
54
+ this.currentTxID = txID;
55
+ this.sourceTxID = undefined;
56
+ this.tx = tx;
57
+ this.currentMadeAt = tx.madeAt;
58
+ this.sourceTxMadeAt = undefined;
59
+ this.isValidated = false;
60
+ this.previous = previous;
61
+ if (parsingCache) {
62
+ this.changes = parsingCache.changes;
63
+ this.meta = parsingCache.meta;
64
+ }
65
+ else {
66
+ // Decoding the trusting transactions here because they might be useful in the permissions checks
67
+ if (this.tx.privacy === "trusting") {
68
+ this.changes = safeParseJSON(this.tx.changes);
69
+ if (this.tx.meta) {
70
+ this.meta = safeParseJSON(this.tx.meta);
71
+ }
72
+ }
73
+ }
74
+ }
75
+ // The TxID that refers to the current position in the session map
76
+ // If this is a merged transaction, the txID is the TxID of the merged transaction
77
+ get txID() {
78
+ return this.sourceTxID ?? this.currentTxID;
79
+ }
80
+ // The madeAt that refers to the time when the transaction was made
81
+ // If this is a merged transaction, the madeAt is the time when the transaction has been made in the branch
82
+ get madeAt() {
83
+ return this.sourceTxMadeAt ?? this.currentMadeAt;
84
+ }
85
+ isValidTransactionWithChanges() {
86
+ return Boolean(this.isValid && this.changes);
87
+ }
88
+ }
33
89
  export class CoValueCore {
34
90
  /** Holds the fundamental syncable content of a CoValue,
35
91
  * consisting of the header (verified by hash -> RawCoID)
@@ -45,8 +101,8 @@ export class CoValueCore {
45
101
  get verified() {
46
102
  return this._verified;
47
103
  }
48
- constructor(init, node) {
49
- this.peers = new Map();
104
+ constructor(id, node) {
105
+ this.loadingStatuses = new Map();
50
106
  this.listeners = new Set();
51
107
  this.missingDependencies = new Set();
52
108
  this.newContentQueue = [];
@@ -65,14 +121,8 @@ export class CoValueCore {
65
121
  this.dependencies = new Set();
66
122
  this.readKeyCache = new Map();
67
123
  this.crypto = node.crypto;
68
- if ("header" in init) {
69
- this.id = idforHeader(init.header, node.crypto);
70
- this._verified = new VerifiedState(this.id, node.crypto, init.header);
71
- }
72
- else {
73
- this.id = init.id;
74
- this._verified = null;
75
- }
124
+ this.id = id;
125
+ this._verified = null;
76
126
  this.node = node;
77
127
  this.counter = metrics
78
128
  .getMeter("cojson")
@@ -83,20 +133,14 @@ export class CoValueCore {
83
133
  });
84
134
  this.updateCounter(null);
85
135
  }
86
- static fromID(id, node) {
87
- return new CoValueCore({ id }, node);
88
- }
89
- static fromHeader(header, node) {
90
- return new CoValueCore({ header }, node);
91
- }
92
136
  get loadingState() {
93
137
  if (this.verified) {
94
138
  return "available";
95
139
  }
96
- else if (this.peers.size === 0) {
140
+ else if (this.loadingStatuses.size === 0) {
97
141
  return "unknown";
98
142
  }
99
- for (const peer of this.peers.values()) {
143
+ for (const peer of this.loadingStatuses.values()) {
100
144
  if (peer.type === "pending") {
101
145
  return "loading";
102
146
  }
@@ -116,46 +160,29 @@ export class CoValueCore {
116
160
  return !!this.verified;
117
161
  }
118
162
  isErroredInPeer(peerId) {
119
- return this.peers.get(peerId)?.type === "errored";
163
+ return this.getLoadingStateForPeer(peerId) === "errored";
120
164
  }
121
- waitForAvailableOrUnavailable() {
165
+ waitFor(callback) {
122
166
  return new Promise((resolve) => {
123
- const listener = (core) => {
124
- if (core.isAvailable() || core.loadingState === "unavailable") {
167
+ this.subscribe((core, unsubscribe) => {
168
+ if (callback(core)) {
169
+ unsubscribe();
125
170
  resolve(core);
126
- this.listeners.delete(listener);
127
171
  }
128
- };
129
- this.listeners.add(listener);
130
- listener(this);
172
+ }, true);
131
173
  });
132
174
  }
175
+ waitForAvailableOrUnavailable() {
176
+ return this.waitFor((core) => core.isAvailable() || core.loadingState === "unavailable");
177
+ }
133
178
  waitForAvailable() {
134
- return new Promise((resolve) => {
135
- const listener = (core) => {
136
- if (core.isAvailable()) {
137
- resolve(core);
138
- this.listeners.delete(listener);
139
- }
140
- };
141
- this.listeners.add(listener);
142
- listener(this);
143
- });
179
+ return this.waitFor((core) => core.isAvailable());
144
180
  }
145
181
  waitForFullStreaming() {
146
- return new Promise((resolve) => {
147
- const listener = (core) => {
148
- if (core.isAvailable() && !core.verified.isStreaming()) {
149
- resolve(core);
150
- this.listeners.delete(listener);
151
- }
152
- };
153
- this.listeners.add(listener);
154
- listener(this);
155
- });
182
+ return this.waitFor((core) => core.isAvailable() && !core.verified.isStreaming());
156
183
  }
157
- getStateForPeer(peerId) {
158
- return this.peers.get(peerId);
184
+ getLoadingStateForPeer(peerId) {
185
+ return this.loadingStatuses.get(peerId)?.type ?? "unknown";
159
186
  }
160
187
  updateCounter(previousState) {
161
188
  const newState = this.loadingState;
@@ -184,12 +211,12 @@ export class CoValueCore {
184
211
  }
185
212
  markNotFoundInPeer(peerId) {
186
213
  const previousState = this.loadingState;
187
- this.peers.set(peerId, { type: "unavailable" });
214
+ this.loadingStatuses.set(peerId, { type: "unavailable" });
188
215
  this.updateCounter(previousState);
189
216
  this.scheduleNotifyUpdate();
190
217
  }
191
218
  markFoundInPeer(peerId, previousState) {
192
- this.peers.set(peerId, { type: "available" });
219
+ this.loadingStatuses.set(peerId, { type: "available" });
193
220
  this.updateCounter(previousState);
194
221
  this.scheduleNotifyUpdate();
195
222
  }
@@ -255,18 +282,18 @@ export class CoValueCore {
255
282
  if (this._verified?.sessions.size) {
256
283
  throw new Error("CoValueCore: provideHeader called on coValue with verified sessions present!");
257
284
  }
258
- this._verified = new VerifiedState(this.id, this.node.crypto, header, new SessionMap(this.id, this.node.crypto), streamingKnownState);
285
+ this._verified = new VerifiedState(this.id, this.node.crypto, header, new SessionMap(this.id, this.node.crypto, streamingKnownState));
259
286
  return true;
260
287
  }
261
288
  markErrored(peerId, error) {
262
289
  const previousState = this.loadingState;
263
- this.peers.set(peerId, { type: "errored", error });
290
+ this.loadingStatuses.set(peerId, { type: "errored", error });
264
291
  this.updateCounter(previousState);
265
292
  this.scheduleNotifyUpdate();
266
293
  }
267
294
  markPending(peerId) {
268
295
  const previousState = this.loadingState;
269
- this.peers.set(peerId, { type: "pending" });
296
+ this.loadingStatuses.set(peerId, { type: "pending" });
270
297
  this.updateCounter(previousState);
271
298
  this.scheduleNotifyUpdate();
272
299
  }
@@ -518,34 +545,11 @@ export class CoValueCore {
518
545
  if (!tx) {
519
546
  continue;
520
547
  }
521
- const txID = isBranched
522
- ? {
523
- sessionID,
524
- txIndex,
525
- branch: this.id,
526
- }
527
- : {
528
- sessionID,
529
- txIndex,
530
- };
531
548
  const cache = this.parsingCache.get(tx);
532
549
  if (cache) {
533
550
  this.parsingCache.delete(tx);
534
551
  }
535
- const verifiedTransaction = {
536
- author: accountOrAgentIDfromSessionID(sessionID),
537
- txID,
538
- madeAt: tx.madeAt,
539
- isValidated: false,
540
- isValid: false,
541
- changes: cache?.changes,
542
- meta: cache?.meta,
543
- hasInvalidChanges: false,
544
- hasInvalidMeta: false,
545
- hasMetaBeenParsed: false,
546
- tx,
547
- previous: this.lastVerifiedTransactionBySessionID[sessionID],
548
- };
552
+ const verifiedTransaction = new VerifiedTransaction(sessionID, txIndex, tx, isBranched ? this.id : undefined, cache, this.lastVerifiedTransactionBySessionID[sessionID]);
549
553
  if (verifiedTransaction.madeAt > this.latestTxMadeAt) {
550
554
  this.latestTxMadeAt = verifiedTransaction.madeAt;
551
555
  }
@@ -603,19 +607,30 @@ export class CoValueCore {
603
607
  if ("mi" in transaction.meta) {
604
608
  const meta = transaction.meta;
605
609
  // Check if the transaction is a merge commit
606
- const previousTransaction = transaction.previous?.txID;
607
- const sessionID = meta.s ?? previousTransaction?.sessionID;
610
+ const previousTransaction = transaction.previous;
611
+ const sessionID = meta.s ?? previousTransaction?.txID.sessionID;
612
+ if (meta.t) {
613
+ transaction.sourceTxMadeAt = transaction.currentMadeAt - meta.t;
614
+ }
615
+ else if (previousTransaction) {
616
+ transaction.sourceTxMadeAt = previousTransaction.madeAt;
617
+ }
618
+ // Check against tampering of the meta.t value to write transaction after the access revocation
619
+ if (transaction.sourceTxMadeAt &&
620
+ transaction.sourceTxMadeAt > transaction.currentMadeAt) {
621
+ transaction.isValid = false;
622
+ }
608
623
  if (sessionID) {
609
- transaction.txID = {
624
+ transaction.sourceTxID = {
610
625
  sessionID,
611
626
  txIndex: meta.mi,
612
- branch: meta.b ?? previousTransaction?.branch,
627
+ branch: meta.b ?? previousTransaction?.txID.branch,
613
628
  };
614
629
  }
615
630
  else {
616
631
  logger.error("Merge commit without session ID", {
617
632
  txID: transaction.txID,
618
- prev: previousTransaction ?? null,
633
+ prevTxID: previousTransaction?.txID ?? null,
619
634
  });
620
635
  }
621
636
  }
@@ -633,7 +648,9 @@ export class CoValueCore {
633
648
  this.loadVerifiedTransactionsFromLogs();
634
649
  this.determineValidTransactions();
635
650
  for (const transaction of this.verifiedTransactions) {
636
- decodeTransactionChangesAndMeta(this, transaction, ignorePrivateTransactions);
651
+ if (!ignorePrivateTransactions) {
652
+ decryptTransactionChangesAndMeta(this, transaction);
653
+ }
637
654
  this.parseMetaInformation(transaction);
638
655
  }
639
656
  }
@@ -648,14 +665,15 @@ export class CoValueCore {
648
665
  const matchingTransactions = [];
649
666
  const source = getBranchSource(this);
650
667
  for (const transaction of this.verifiedTransactions) {
651
- if (!isValidTransactionWithChanges(transaction)) {
668
+ if (!transaction.isValidTransactionWithChanges()) {
652
669
  continue;
653
670
  }
654
671
  if (options?.knownTransactions?.has(transaction.tx)) {
655
672
  continue;
656
673
  }
657
674
  options?.knownTransactions?.add(transaction.tx);
658
- const { txID } = transaction;
675
+ // Using the currentTxID to filter the transactions, because the TxID is modified by the merge meta
676
+ const txID = transaction.currentTxID;
659
677
  const from = options?.from?.[txID.sessionID] ?? -1;
660
678
  // Load the to filter index. Sessions that are not in the to filter will be skipped
661
679
  const to = options?.to ? (options.to[txID.sessionID] ?? -1) : Infinity;
@@ -793,17 +811,24 @@ export class CoValueCore {
793
811
  throw new Error("Only groups or values owned by groups have read secrets");
794
812
  }
795
813
  }
796
- getGroup() {
814
+ safeGetGroup() {
797
815
  if (!this.verified) {
798
816
  throw new Error("CoValueCore: getGroup called on coValue without verified state");
799
817
  }
800
818
  if (this.verified.header.ruleset.type !== "ownedByGroup") {
801
- throw new Error("Only values owned by groups have groups");
819
+ return undefined;
802
820
  }
803
821
  return expectGroup(this.node
804
822
  .expectCoValueLoaded(this.verified.header.ruleset.group)
805
823
  .getCurrentContent());
806
824
  }
825
+ getGroup() {
826
+ const group = this.safeGetGroup();
827
+ if (!group) {
828
+ throw new Error("Only values owned by groups have groups");
829
+ }
830
+ return group;
831
+ }
807
832
  getTx(txID) {
808
833
  return this.verified?.sessions.get(txID.sessionID)?.transactions[txID.txIndex];
809
834
  }
@@ -827,9 +852,29 @@ export class CoValueCore {
827
852
  done?.(false);
828
853
  return;
829
854
  }
830
- const currentState = this.peers.get("storage");
831
- if (currentState && currentState.type !== "unknown") {
832
- done?.(currentState.type === "available");
855
+ const currentState = this.getLoadingStateForPeer("storage");
856
+ if (currentState === "pending") {
857
+ if (!done) {
858
+ // We don't need to notify the result to anyone, so we can return early
859
+ return;
860
+ }
861
+ // Loading the value
862
+ this.subscribe((state, unsubscribe) => {
863
+ const updatedState = state.getLoadingStateForPeer("storage");
864
+ if (updatedState === "available" || state.isAvailable()) {
865
+ unsubscribe();
866
+ done(true);
867
+ }
868
+ else if (updatedState === "errored" ||
869
+ updatedState === "unavailable") {
870
+ unsubscribe();
871
+ done(false);
872
+ }
873
+ });
874
+ return;
875
+ }
876
+ if (currentState !== "unknown") {
877
+ done?.(currentState === "available");
833
878
  return;
834
879
  }
835
880
  this.markPending("storage");
@@ -847,7 +892,7 @@ export class CoValueCore {
847
892
  return;
848
893
  }
849
894
  for (const peer of peers) {
850
- const currentState = this.peers.get(peer.id)?.type ?? "unknown";
895
+ const currentState = this.getLoadingStateForPeer(peer.id);
851
896
  if (currentState === "unknown" || currentState === "unavailable") {
852
897
  this.markPending(peer.id);
853
898
  this.internalLoadFromPeer(peer);
@@ -870,39 +915,31 @@ export class CoValueCore {
870
915
  });
871
916
  peer.trackLoadRequestSent(this.id);
872
917
  }
873
- return new Promise((resolve) => {
874
- const markNotFound = () => {
875
- if (this.peers.get(peer.id)?.type === "pending") {
876
- logger.warn("Timeout waiting for peer to load coValue", {
877
- id: this.id,
878
- peerID: peer.id,
879
- });
880
- this.markNotFoundInPeer(peer.id);
881
- }
882
- };
883
- const timeout = setTimeout(markNotFound, CO_VALUE_LOADING_CONFIG.TIMEOUT);
884
- const removeCloseListener = peer.persistent
885
- ? undefined
886
- : peer.addCloseListener(markNotFound);
887
- const listener = (state) => {
888
- const peerState = state.peers.get(peer.id);
889
- if (state.isAvailable() || // might have become available from another peer e.g. through handleNewContent
890
- peerState?.type === "available" ||
891
- peerState?.type === "errored" ||
892
- peerState?.type === "unavailable") {
893
- this.listeners.delete(listener);
894
- removeCloseListener?.();
895
- clearTimeout(timeout);
896
- resolve();
897
- }
898
- };
899
- this.listeners.add(listener);
900
- listener(this);
901
- });
918
+ const markNotFound = () => {
919
+ if (this.getLoadingStateForPeer(peer.id) === "pending") {
920
+ logger.warn("Timeout waiting for peer to load coValue", {
921
+ id: this.id,
922
+ peerID: peer.id,
923
+ });
924
+ this.markNotFoundInPeer(peer.id);
925
+ }
926
+ };
927
+ const timeout = setTimeout(markNotFound, CO_VALUE_LOADING_CONFIG.TIMEOUT);
928
+ const removeCloseListener = peer.persistent
929
+ ? undefined
930
+ : peer.addCloseListener(markNotFound);
931
+ this.subscribe((state, unsubscribe) => {
932
+ const peerState = state.getLoadingStateForPeer(peer.id);
933
+ if (state.isAvailable() || // might have become available from another peer e.g. through handleNewContent
934
+ peerState === "available" ||
935
+ peerState === "errored" ||
936
+ peerState === "unavailable") {
937
+ unsubscribe();
938
+ removeCloseListener?.();
939
+ clearTimeout(timeout);
940
+ }
941
+ }, true);
902
942
  }
903
943
  }
904
944
  _CoValueCore_isNotificationScheduled = new WeakMap(), _CoValueCore_batchedUpdates = new WeakMap(), _CoValueCore_isNotifyUpdatePaused = new WeakMap();
905
- function isValidTransactionWithChanges(transaction) {
906
- return Boolean(transaction.isValid && transaction.changes);
907
- }
908
945
  //# sourceMappingURL=coValueCore.js.map