cojson 0.20.7 → 0.20.9

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 (209) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +26 -0
  3. package/dist/SyncStateManager.d.ts.map +1 -1
  4. package/dist/SyncStateManager.js +0 -2
  5. package/dist/SyncStateManager.js.map +1 -1
  6. package/dist/base64url.d.ts +15 -0
  7. package/dist/base64url.d.ts.map +1 -1
  8. package/dist/base64url.js +101 -5
  9. package/dist/base64url.js.map +1 -1
  10. package/dist/base64url.test.js +76 -1
  11. package/dist/base64url.test.js.map +1 -1
  12. package/dist/coValue.d.ts +2 -1
  13. package/dist/coValue.d.ts.map +1 -1
  14. package/dist/coValue.js.map +1 -1
  15. package/dist/coValueCore/coValueCore.d.ts +9 -11
  16. package/dist/coValueCore/coValueCore.d.ts.map +1 -1
  17. package/dist/coValueCore/coValueCore.js +92 -65
  18. package/dist/coValueCore/coValueCore.js.map +1 -1
  19. package/dist/coValueCore/verifiedState.d.ts +38 -7
  20. package/dist/coValueCore/verifiedState.d.ts.map +1 -1
  21. package/dist/coValueCore/verifiedState.js +226 -30
  22. package/dist/coValueCore/verifiedState.js.map +1 -1
  23. package/dist/coValues/binaryCoStream.d.ts +63 -0
  24. package/dist/coValues/binaryCoStream.d.ts.map +1 -0
  25. package/dist/coValues/binaryCoStream.js +125 -0
  26. package/dist/coValues/binaryCoStream.js.map +1 -0
  27. package/dist/coValues/coList.d.ts +3 -1
  28. package/dist/coValues/coList.d.ts.map +1 -1
  29. package/dist/coValues/coList.js +15 -6
  30. package/dist/coValues/coList.js.map +1 -1
  31. package/dist/coValues/coMap.d.ts +1 -1
  32. package/dist/coValues/coMap.d.ts.map +1 -1
  33. package/dist/coValues/coMap.js +2 -2
  34. package/dist/coValues/coMap.js.map +1 -1
  35. package/dist/coValues/coStream.d.ts +0 -38
  36. package/dist/coValues/coStream.d.ts.map +1 -1
  37. package/dist/coValues/coStream.js +0 -86
  38. package/dist/coValues/coStream.js.map +1 -1
  39. package/dist/coValues/group.d.ts +44 -6
  40. package/dist/coValues/group.d.ts.map +1 -1
  41. package/dist/coValues/group.js +198 -17
  42. package/dist/coValues/group.js.map +1 -1
  43. package/dist/coreToCoValue.d.ts +2 -1
  44. package/dist/coreToCoValue.d.ts.map +1 -1
  45. package/dist/coreToCoValue.js +2 -1
  46. package/dist/coreToCoValue.js.map +1 -1
  47. package/dist/crypto/NapiCrypto.d.ts +18 -24
  48. package/dist/crypto/NapiCrypto.d.ts.map +1 -1
  49. package/dist/crypto/NapiCrypto.js +98 -60
  50. package/dist/crypto/NapiCrypto.js.map +1 -1
  51. package/dist/crypto/RNCrypto.d.ts +16 -3
  52. package/dist/crypto/RNCrypto.d.ts.map +1 -1
  53. package/dist/crypto/RNCrypto.js +117 -54
  54. package/dist/crypto/RNCrypto.js.map +1 -1
  55. package/dist/crypto/WasmCrypto.d.ts +18 -24
  56. package/dist/crypto/WasmCrypto.d.ts.map +1 -1
  57. package/dist/crypto/WasmCrypto.js +100 -61
  58. package/dist/crypto/WasmCrypto.js.map +1 -1
  59. package/dist/crypto/crypto.d.ts +55 -19
  60. package/dist/crypto/crypto.d.ts.map +1 -1
  61. package/dist/crypto/crypto.js +14 -3
  62. package/dist/crypto/crypto.js.map +1 -1
  63. package/dist/exports.d.ts +7 -3
  64. package/dist/exports.d.ts.map +1 -1
  65. package/dist/exports.js +4 -2
  66. package/dist/exports.js.map +1 -1
  67. package/dist/localNode.d.ts +3 -1
  68. package/dist/localNode.d.ts.map +1 -1
  69. package/dist/localNode.js +10 -3
  70. package/dist/localNode.js.map +1 -1
  71. package/dist/media.d.ts +1 -1
  72. package/dist/media.d.ts.map +1 -1
  73. package/dist/permissions.d.ts +2 -1
  74. package/dist/permissions.d.ts.map +1 -1
  75. package/dist/permissions.js +19 -3
  76. package/dist/permissions.js.map +1 -1
  77. package/dist/storage/sqliteAsync/client.d.ts +24 -12
  78. package/dist/storage/sqliteAsync/client.d.ts.map +1 -1
  79. package/dist/storage/sqliteAsync/client.js +70 -58
  80. package/dist/storage/sqliteAsync/client.js.map +1 -1
  81. package/dist/storage/sqliteAsync/types.d.ts +1 -1
  82. package/dist/storage/sqliteAsync/types.d.ts.map +1 -1
  83. package/dist/storage/types.d.ts +1 -0
  84. package/dist/storage/types.d.ts.map +1 -1
  85. package/dist/sync.d.ts.map +1 -1
  86. package/dist/sync.js +7 -1
  87. package/dist/sync.js.map +1 -1
  88. package/dist/tests/CojsonMessageChannel.test.js +2 -2
  89. package/dist/tests/SQLiteClientAsync.test.d.ts +2 -0
  90. package/dist/tests/SQLiteClientAsync.test.d.ts.map +1 -0
  91. package/dist/tests/SQLiteClientAsync.test.js +64 -0
  92. package/dist/tests/SQLiteClientAsync.test.js.map +1 -0
  93. package/dist/tests/StorageApiAsync.test.js +2 -8
  94. package/dist/tests/StorageApiAsync.test.js.map +1 -1
  95. package/dist/tests/SyncStateManager.test.js +2 -2
  96. package/dist/tests/WasmCrypto.test.js +1 -15
  97. package/dist/tests/WasmCrypto.test.js.map +1 -1
  98. package/dist/tests/coList.test.js +24 -5
  99. package/dist/tests/coList.test.js.map +1 -1
  100. package/dist/tests/coStream.test.js +4 -3
  101. package/dist/tests/coStream.test.js.map +1 -1
  102. package/dist/tests/coValueCore.initTransaction.test.d.ts +2 -0
  103. package/dist/tests/coValueCore.initTransaction.test.d.ts.map +1 -0
  104. package/dist/tests/coValueCore.initTransaction.test.js +438 -0
  105. package/dist/tests/coValueCore.initTransaction.test.js.map +1 -0
  106. package/dist/tests/coValueCore.test.js +11 -19
  107. package/dist/tests/coValueCore.test.js.map +1 -1
  108. package/dist/tests/crypto.test.js +83 -0
  109. package/dist/tests/crypto.test.js.map +1 -1
  110. package/dist/tests/deleteCoValue.test.js +5 -5
  111. package/dist/tests/deleteCoValue.test.js.map +1 -1
  112. package/dist/tests/group.inheritance.test.js +11 -0
  113. package/dist/tests/group.inheritance.test.js.map +1 -1
  114. package/dist/tests/group.test.js +24 -1
  115. package/dist/tests/group.test.js.map +1 -1
  116. package/dist/tests/groupSealer.test.d.ts +2 -0
  117. package/dist/tests/groupSealer.test.d.ts.map +1 -0
  118. package/dist/tests/groupSealer.test.js +913 -0
  119. package/dist/tests/groupSealer.test.js.map +1 -0
  120. package/dist/tests/setup.js +5 -0
  121. package/dist/tests/setup.js.map +1 -1
  122. package/dist/tests/sync.auth.test.js +10 -10
  123. package/dist/tests/sync.concurrentLoad.test.js +12 -12
  124. package/dist/tests/sync.deleted.test.js +8 -8
  125. package/dist/tests/sync.garbageCollection.test.js +10 -10
  126. package/dist/tests/sync.invite.test.js +12 -12
  127. package/dist/tests/sync.known.test.js +2 -2
  128. package/dist/tests/sync.load.test.js +107 -107
  129. package/dist/tests/sync.mesh.test.js +164 -46
  130. package/dist/tests/sync.mesh.test.js.map +1 -1
  131. package/dist/tests/sync.multipleServers.test.js +43 -43
  132. package/dist/tests/sync.peerReconciliation.test.js +29 -29
  133. package/dist/tests/sync.sharding.test.js +3 -3
  134. package/dist/tests/sync.storage.test.js +104 -104
  135. package/dist/tests/sync.storage.test.js.map +1 -1
  136. package/dist/tests/sync.storageAsync.test.js +56 -56
  137. package/dist/tests/sync.upload.test.js +22 -22
  138. package/dist/tests/testStorage.d.ts +2 -0
  139. package/dist/tests/testStorage.d.ts.map +1 -1
  140. package/dist/tests/testStorage.js +30 -6
  141. package/dist/tests/testStorage.js.map +1 -1
  142. package/dist/typeUtils/isCoValue.js +1 -1
  143. package/dist/typeUtils/isCoValue.js.map +1 -1
  144. package/package.json +4 -4
  145. package/src/SyncStateManager.ts +0 -2
  146. package/src/base64url.test.ts +89 -1
  147. package/src/base64url.ts +134 -6
  148. package/src/coValue.ts +2 -1
  149. package/src/coValueCore/coValueCore.ts +126 -84
  150. package/src/coValueCore/verifiedState.ts +335 -53
  151. package/src/coValues/binaryCoStream.ts +217 -0
  152. package/src/coValues/coList.ts +21 -8
  153. package/src/coValues/coMap.ts +3 -0
  154. package/src/coValues/coStream.ts +0 -170
  155. package/src/coValues/group.ts +270 -21
  156. package/src/coreToCoValue.ts +2 -1
  157. package/src/crypto/NapiCrypto.ts +198 -95
  158. package/src/crypto/RNCrypto.ts +229 -102
  159. package/src/crypto/WasmCrypto.ts +201 -95
  160. package/src/crypto/crypto.ts +118 -45
  161. package/src/exports.ts +11 -5
  162. package/src/localNode.ts +17 -1
  163. package/src/media.ts +1 -1
  164. package/src/permissions.ts +30 -7
  165. package/src/storage/sqliteAsync/client.ts +136 -115
  166. package/src/storage/sqliteAsync/types.ts +3 -1
  167. package/src/storage/types.ts +4 -0
  168. package/src/sync.ts +10 -1
  169. package/src/tests/CojsonMessageChannel.test.ts +2 -2
  170. package/src/tests/SQLiteClientAsync.test.ts +75 -0
  171. package/src/tests/StorageApiAsync.test.ts +4 -9
  172. package/src/tests/SyncStateManager.test.ts +2 -2
  173. package/src/tests/WasmCrypto.test.ts +1 -25
  174. package/src/tests/coList.test.ts +39 -5
  175. package/src/tests/coStream.test.ts +4 -5
  176. package/src/tests/coValueCore.initTransaction.test.ts +836 -0
  177. package/src/tests/coValueCore.test.ts +11 -22
  178. package/src/tests/crypto.test.ts +107 -0
  179. package/src/tests/deleteCoValue.test.ts +5 -5
  180. package/src/tests/group.inheritance.test.ts +16 -0
  181. package/src/tests/group.test.ts +29 -1
  182. package/src/tests/groupSealer.test.ts +1473 -0
  183. package/src/tests/setup.ts +6 -0
  184. package/src/tests/sync.auth.test.ts +10 -10
  185. package/src/tests/sync.concurrentLoad.test.ts +12 -12
  186. package/src/tests/sync.deleted.test.ts +8 -8
  187. package/src/tests/sync.garbageCollection.test.ts +10 -10
  188. package/src/tests/sync.invite.test.ts +12 -12
  189. package/src/tests/sync.known.test.ts +2 -2
  190. package/src/tests/sync.load.test.ts +107 -107
  191. package/src/tests/sync.mesh.test.ts +189 -46
  192. package/src/tests/sync.multipleServers.test.ts +43 -43
  193. package/src/tests/sync.peerReconciliation.test.ts +29 -29
  194. package/src/tests/sync.sharding.test.ts +3 -3
  195. package/src/tests/sync.storage.test.ts +104 -104
  196. package/src/tests/sync.storageAsync.test.ts +56 -56
  197. package/src/tests/sync.upload.test.ts +22 -22
  198. package/src/tests/testStorage.ts +39 -9
  199. package/src/typeUtils/isCoValue.ts +1 -1
  200. package/dist/coValueCore/SessionMap.d.ts +0 -55
  201. package/dist/coValueCore/SessionMap.d.ts.map +0 -1
  202. package/dist/coValueCore/SessionMap.js +0 -206
  203. package/dist/coValueCore/SessionMap.js.map +0 -1
  204. package/dist/tests/coreWasm.test.d.ts +0 -2
  205. package/dist/tests/coreWasm.test.d.ts.map +0 -1
  206. package/dist/tests/coreWasm.test.js +0 -203
  207. package/dist/tests/coreWasm.test.js.map +0 -1
  208. package/src/coValueCore/SessionMap.ts +0 -394
  209. package/src/tests/coreWasm.test.ts +0 -452
@@ -1,394 +0,0 @@
1
- import { ControlledAccountOrAgent } from "../coValues/account.js";
2
- import type {
3
- CryptoProvider,
4
- KeyID,
5
- KeySecret,
6
- SessionLogImpl,
7
- Signature,
8
- SignerID,
9
- } from "../crypto/crypto.js";
10
- import { isDeleteSessionID, RawCoID, SessionID } from "../ids.js";
11
- import { parseJSON, Stringified } from "../jsonStringify.js";
12
- import { JsonObject, JsonValue } from "../jsonValue.js";
13
- import { TryAddTransactionsError } from "./coValueCore.js";
14
- import { Transaction } from "./verifiedState.js";
15
- import { exceedsRecommendedSize } from "../coValueContentMessage.js";
16
- import {
17
- CoValueKnownState,
18
- KnownStateSessions,
19
- updateSessionCounter,
20
- cloneKnownState,
21
- combineKnownStateSessions,
22
- isKnownStateSubsetOf,
23
- getKnownStateToSend,
24
- } from "../knownState.js";
25
-
26
- export type SessionLog = {
27
- signerID?: SignerID;
28
- impl: SessionLogImpl;
29
- transactions: Transaction[];
30
- lastSignature: Signature | undefined;
31
- signatureAfter: { [txIdx: number]: Signature | undefined };
32
- txSizeSinceLastInbetweenSignature: number;
33
- sessionID: SessionID;
34
- };
35
-
36
- export class SessionMap {
37
- private isDeleted: boolean = false;
38
- sessions: Map<SessionID, SessionLog> = new Map();
39
-
40
- // Known state related properies, mutated when adding transactions to the session map
41
- knownState: CoValueKnownState;
42
- knownStateWithStreaming: CoValueKnownState | undefined;
43
- // The immutable version of the known statuses, to get a different reference when the known state is updated
44
- private immutableKnownState: CoValueKnownState | undefined;
45
- private immutableKnownStateWithStreaming: CoValueKnownState | undefined;
46
- streamingKnownState?: KnownStateSessions;
47
-
48
- constructor(
49
- private readonly id: RawCoID,
50
- private readonly crypto: CryptoProvider,
51
- streamingKnownState?: KnownStateSessions,
52
- ) {
53
- this.knownState = { id: this.id, header: true, sessions: {} };
54
- if (streamingKnownState) {
55
- this.streamingKnownState = { ...streamingKnownState };
56
- this.knownStateWithStreaming = {
57
- id: this.id,
58
- header: true,
59
- sessions: { ...streamingKnownState },
60
- };
61
- }
62
- }
63
-
64
- markAsDeleted() {
65
- this.isDeleted = true;
66
-
67
- // We reset the known state to report only the deleted session/transaction
68
- this.knownState = { id: this.id, header: true, sessions: {} };
69
-
70
- // We remove the streaming statuses, because once deleted we don't need
71
- // to wait for any streaming to be completed
72
- this.knownStateWithStreaming = undefined;
73
- this.streamingKnownState = undefined;
74
- this.invalidateKnownStateCache();
75
-
76
- for (const [sessionID, sessionLog] of this.sessions.entries()) {
77
- if (!isDeleteSessionID(sessionID)) {
78
- continue;
79
- }
80
-
81
- this.knownState.sessions[sessionID] = sessionLog.transactions.length;
82
- }
83
- }
84
-
85
- setStreamingKnownState(streamingKnownState: KnownStateSessions) {
86
- if (this.isDeleted) {
87
- return;
88
- }
89
-
90
- // if the streaming known state is a subset of the current known state, we can skip the update
91
- if (isKnownStateSubsetOf(streamingKnownState, this.knownState.sessions)) {
92
- return;
93
- }
94
-
95
- const actualStreamingKnownState = getKnownStateToSend(
96
- streamingKnownState,
97
- this.knownState.sessions,
98
- );
99
-
100
- if (this.streamingKnownState) {
101
- combineKnownStateSessions(
102
- this.streamingKnownState,
103
- actualStreamingKnownState,
104
- );
105
- } else {
106
- this.streamingKnownState = actualStreamingKnownState;
107
- }
108
-
109
- if (!this.knownStateWithStreaming) {
110
- this.knownStateWithStreaming = cloneKnownState(this.knownState);
111
- }
112
-
113
- combineKnownStateSessions(
114
- this.knownStateWithStreaming.sessions,
115
- actualStreamingKnownState,
116
- );
117
- }
118
-
119
- invalidateKnownStateCache() {
120
- this.immutableKnownState = undefined;
121
- this.immutableKnownStateWithStreaming = undefined;
122
- }
123
-
124
- getImmutableKnownState(): CoValueKnownState {
125
- if (!this.immutableKnownState) {
126
- this.immutableKnownState = cloneKnownState(this.knownState);
127
- }
128
- return this.immutableKnownState;
129
- }
130
-
131
- getImmutableKnownStateWithStreaming(): CoValueKnownState {
132
- if (!this.knownStateWithStreaming) {
133
- return this.getImmutableKnownState();
134
- }
135
-
136
- if (!this.immutableKnownStateWithStreaming) {
137
- this.immutableKnownStateWithStreaming = cloneKnownState(
138
- this.knownStateWithStreaming,
139
- );
140
- }
141
- return this.immutableKnownStateWithStreaming;
142
- }
143
-
144
- get(sessionID: SessionID): SessionLog | undefined {
145
- return this.sessions.get(sessionID);
146
- }
147
-
148
- private getOrCreateSessionLog(
149
- sessionID: SessionID,
150
- signerID?: SignerID,
151
- ): SessionLog {
152
- let sessionLog = this.sessions.get(sessionID);
153
- if (!sessionLog) {
154
- sessionLog = {
155
- signerID,
156
- impl: this.crypto.createSessionLog(this.id, sessionID, signerID),
157
- transactions: [],
158
- lastSignature: undefined,
159
- signatureAfter: {},
160
- txSizeSinceLastInbetweenSignature: 0,
161
- sessionID,
162
- };
163
- this.sessions.set(sessionID, sessionLog);
164
- }
165
-
166
- return sessionLog;
167
- }
168
-
169
- signerID: SignerID | undefined;
170
- addTransaction(
171
- sessionID: SessionID,
172
- signerID: SignerID | undefined,
173
- newTransactions: Transaction[],
174
- newSignature: Signature,
175
- skipVerify: boolean = false,
176
- ) {
177
- if (this.isDeleted && !isDeleteSessionID(sessionID)) {
178
- throw new Error("Cannot add transactions to a deleted coValue");
179
- }
180
-
181
- const sessionLog = this.getOrCreateSessionLog(sessionID, signerID);
182
-
183
- sessionLog.impl.tryAdd(newTransactions, newSignature, skipVerify);
184
-
185
- this.addTransactionsToJsLog(sessionLog, newTransactions, newSignature);
186
- }
187
-
188
- makeNewPrivateTransaction(
189
- sessionID: SessionID,
190
- signerAgent: ControlledAccountOrAgent,
191
- changes: JsonValue[],
192
- keyID: KeyID,
193
- keySecret: KeySecret,
194
- meta: JsonObject | undefined,
195
- madeAt: number,
196
- ): { signature: Signature; transaction: Transaction } {
197
- if (this.isDeleted) {
198
- throw new Error(
199
- "Cannot make new private transaction on a deleted coValue",
200
- );
201
- }
202
-
203
- const sessionLog = this.getOrCreateSessionLog(
204
- sessionID,
205
- signerAgent.currentSignerID(),
206
- );
207
-
208
- const result = sessionLog.impl.addNewPrivateTransaction(
209
- signerAgent,
210
- changes,
211
- keyID,
212
- keySecret,
213
- madeAt,
214
- meta,
215
- );
216
-
217
- this.addTransactionsToJsLog(
218
- sessionLog,
219
- [result.transaction],
220
- result.signature,
221
- );
222
-
223
- return result;
224
- }
225
-
226
- makeNewTrustingTransaction(
227
- sessionID: SessionID,
228
- signerAgent: ControlledAccountOrAgent,
229
- changes: JsonValue[],
230
- meta: JsonObject | undefined,
231
- madeAt: number,
232
- ): { signature: Signature; transaction: Transaction } {
233
- if (this.isDeleted) {
234
- throw new Error(
235
- "Cannot make new trusting transaction on a deleted coValue",
236
- );
237
- }
238
-
239
- const sessionLog = this.getOrCreateSessionLog(
240
- sessionID,
241
- signerAgent.currentSignerID(),
242
- );
243
-
244
- const result = sessionLog.impl.addNewTrustingTransaction(
245
- signerAgent,
246
- changes,
247
- madeAt,
248
- meta,
249
- );
250
-
251
- this.addTransactionsToJsLog(
252
- sessionLog,
253
- [result.transaction],
254
- result.signature,
255
- );
256
-
257
- return result;
258
- }
259
-
260
- private addTransactionsToJsLog(
261
- sessionLog: SessionLog,
262
- newTransactions: Transaction[],
263
- signature: Signature,
264
- ) {
265
- for (const tx of newTransactions) {
266
- sessionLog.transactions.push(tx);
267
- }
268
- sessionLog.lastSignature = signature;
269
-
270
- sessionLog.txSizeSinceLastInbetweenSignature += newTransactions.reduce(
271
- (sum, tx) =>
272
- sum +
273
- (tx.privacy === "private"
274
- ? tx.encryptedChanges.length
275
- : tx.changes.length),
276
- 0,
277
- );
278
-
279
- const transactionsCount = sessionLog.transactions.length;
280
-
281
- if (exceedsRecommendedSize(sessionLog.txSizeSinceLastInbetweenSignature)) {
282
- sessionLog.signatureAfter[transactionsCount - 1] = signature;
283
- sessionLog.txSizeSinceLastInbetweenSignature = 0;
284
- }
285
-
286
- // Update the known state with the new transactions count
287
- updateSessionCounter(
288
- this.knownState.sessions,
289
- sessionLog.sessionID,
290
- transactionsCount,
291
- );
292
-
293
- // Check if the updated session matched the streaming state
294
- if (
295
- this.streamingKnownState &&
296
- isKnownStateSubsetOf(this.streamingKnownState, this.knownState.sessions)
297
- ) {
298
- this.streamingKnownState = undefined;
299
- this.knownStateWithStreaming = undefined;
300
- }
301
-
302
- if (this.knownStateWithStreaming) {
303
- // Update the streaming known state with the new transactions count
304
- updateSessionCounter(
305
- this.knownStateWithStreaming.sessions,
306
- sessionLog.sessionID,
307
- transactionsCount,
308
- );
309
- }
310
-
311
- this.invalidateKnownStateCache();
312
- }
313
-
314
- decryptTransaction(
315
- sessionID: SessionID,
316
- txIndex: number,
317
- keySecret: KeySecret,
318
- ): JsonValue[] | undefined {
319
- const sessionLog = this.sessions.get(sessionID);
320
- if (!sessionLog) {
321
- return undefined;
322
- }
323
- const decrypted = sessionLog.impl.decryptNextTransactionChangesJson(
324
- txIndex,
325
- keySecret,
326
- );
327
- if (!decrypted) {
328
- return undefined;
329
- }
330
- return parseJSON(decrypted as Stringified<JsonValue[] | undefined>);
331
- }
332
-
333
- decryptTransactionMeta(
334
- sessionID: SessionID,
335
- txIndex: number,
336
- keySecret: KeySecret,
337
- ): JsonObject | undefined {
338
- const sessionLog = this.sessions.get(sessionID);
339
- if (!sessionLog?.transactions[txIndex]?.meta) {
340
- return undefined;
341
- }
342
- const decrypted = sessionLog.impl.decryptNextTransactionMetaJson(
343
- txIndex,
344
- keySecret,
345
- );
346
- if (!decrypted) {
347
- return undefined;
348
- }
349
- return parseJSON(decrypted as Stringified<JsonObject | undefined>);
350
- }
351
-
352
- get size() {
353
- return this.sessions.size;
354
- }
355
-
356
- entries() {
357
- return this.sessions.entries();
358
- }
359
-
360
- values() {
361
- return this.sessions.values();
362
- }
363
-
364
- keys() {
365
- return this.sessions.keys();
366
- }
367
-
368
- clone(): SessionMap {
369
- const clone = new SessionMap(this.id, this.crypto);
370
-
371
- for (const [sessionID, sessionLog] of this.sessions) {
372
- clone.sessions.set(sessionID, {
373
- impl: sessionLog.impl.clone(),
374
- transactions: sessionLog.transactions.slice(),
375
- lastSignature: sessionLog.lastSignature,
376
- signatureAfter: { ...sessionLog.signatureAfter },
377
- txSizeSinceLastInbetweenSignature:
378
- sessionLog.txSizeSinceLastInbetweenSignature,
379
- signerID: sessionLog.signerID,
380
- sessionID,
381
- });
382
- }
383
-
384
- clone.streamingKnownState = this.streamingKnownState
385
- ? { ...this.streamingKnownState }
386
- : undefined;
387
- clone.knownState = cloneKnownState(this.knownState);
388
- clone.knownStateWithStreaming = this.knownStateWithStreaming
389
- ? cloneKnownState(this.knownStateWithStreaming)
390
- : undefined;
391
-
392
- return clone;
393
- }
394
- }