cojson-storage-sqlite
Advanced tools
Comparing version
# cojson-storage-sqlite | ||
## 0.13.28 | ||
### Patch Changes | ||
- Updated dependencies [e7ccb2c] | ||
- cojson@0.13.28 | ||
- cojson-storage@0.13.28 | ||
## 0.13.27 | ||
@@ -4,0 +12,0 @@ |
@@ -5,3 +5,3 @@ import { randomUUID } from "node:crypto"; | ||
import { join } from "node:path"; | ||
import { LocalNode } from "cojson"; | ||
import { LocalNode, cojsonInternals } from "cojson"; | ||
import { SyncManager } from "cojson-storage"; | ||
@@ -246,2 +246,50 @@ import { WasmCrypto } from "cojson/crypto/WasmCrypto"; | ||
}); | ||
test("should recover missing dependencies from storage", async () => { | ||
const agentSecret = Crypto.newRandomAgentSecret(); | ||
const account = LocalNode.internalCreateAccount({ | ||
crypto: Crypto, | ||
}); | ||
const node1 = account.core.node; | ||
const serverNode = new LocalNode(agentSecret, Crypto.newRandomSessionID(Crypto.getAgentID(agentSecret)), Crypto); | ||
const [serverPeer, clientPeer] = cojsonInternals.connectedPeers(node1.agentSecret, serverNode.agentSecret, { | ||
peer1role: "server", | ||
peer2role: "client", | ||
}); | ||
node1.syncManager.addPeer(serverPeer); | ||
serverNode.syncManager.addPeer(clientPeer); | ||
const handleSyncMessage = SyncManager.prototype.handleSyncMessage; | ||
const mock = vi | ||
.spyOn(SyncManager.prototype, "handleSyncMessage") | ||
.mockImplementation(function (msg) { | ||
if (msg.action === "content" && | ||
[group.core.id, account.core.id].includes(msg.id)) { | ||
return Promise.resolve(); | ||
} | ||
return handleSyncMessage.call(this, msg); | ||
}); | ||
const { peer, dbPath } = await createSQLiteStorage(); | ||
node1.syncManager.addPeer(peer); | ||
const group = node1.createGroup(); | ||
group.addMember("everyone", "writer"); | ||
const map = group.createMap(); | ||
map.set("0", 0); | ||
mock.mockReset(); | ||
await new Promise((resolve) => setTimeout(resolve, 200)); | ||
const node2 = new LocalNode(Crypto.newRandomAgentSecret(), Crypto.newRandomSessionID(Crypto.getAgentID(agentSecret)), Crypto); | ||
const [serverPeer2, clientPeer2] = cojsonInternals.connectedPeers(node1.agentSecret, serverNode.agentSecret, { | ||
peer1role: "server", | ||
peer2role: "client", | ||
}); | ||
node2.syncManager.addPeer(serverPeer2); | ||
serverNode.syncManager.addPeer(clientPeer2); | ||
const { peer: peer2 } = await createSQLiteStorage(dbPath); | ||
node2.syncManager.addPeer(peer2); | ||
const map2 = await node2.load(map.id); | ||
if (map2 === "unavailable") { | ||
throw new Error("Map is unavailable"); | ||
} | ||
expect(map2.toJSON()).toEqual({ | ||
"0": 0, | ||
}); | ||
}); | ||
//# sourceMappingURL=sqlite.test.js.map |
{ | ||
"name": "cojson-storage-sqlite", | ||
"type": "module", | ||
"version": "0.13.27", | ||
"version": "0.13.28", | ||
"main": "dist/index.js", | ||
@@ -10,4 +10,4 @@ "types": "dist/index.d.ts", | ||
"better-sqlite3": "^11.7.0", | ||
"cojson": "0.13.27", | ||
"cojson-storage": "0.13.27" | ||
"cojson": "0.13.28", | ||
"cojson-storage": "0.13.28" | ||
}, | ||
@@ -14,0 +14,0 @@ "devDependencies": { |
@@ -5,3 +5,3 @@ import { randomUUID } from "node:crypto"; | ||
import { join } from "node:path"; | ||
import { LocalNode } from "cojson"; | ||
import { LocalNode, cojsonInternals } from "cojson"; | ||
import { SyncManager } from "cojson-storage"; | ||
@@ -407,1 +407,90 @@ import { WasmCrypto } from "cojson/crypto/WasmCrypto"; | ||
}); | ||
test("should recover missing dependencies from storage", async () => { | ||
const agentSecret = Crypto.newRandomAgentSecret(); | ||
const account = LocalNode.internalCreateAccount({ | ||
crypto: Crypto, | ||
}); | ||
const node1 = account.core.node; | ||
const serverNode = new LocalNode( | ||
agentSecret, | ||
Crypto.newRandomSessionID(Crypto.getAgentID(agentSecret)), | ||
Crypto, | ||
); | ||
const [serverPeer, clientPeer] = cojsonInternals.connectedPeers( | ||
node1.agentSecret, | ||
serverNode.agentSecret, | ||
{ | ||
peer1role: "server", | ||
peer2role: "client", | ||
}, | ||
); | ||
node1.syncManager.addPeer(serverPeer); | ||
serverNode.syncManager.addPeer(clientPeer); | ||
const handleSyncMessage = SyncManager.prototype.handleSyncMessage; | ||
const mock = vi | ||
.spyOn(SyncManager.prototype, "handleSyncMessage") | ||
.mockImplementation(function (this: SyncManager, msg) { | ||
if ( | ||
msg.action === "content" && | ||
[group.core.id, account.core.id].includes(msg.id) | ||
) { | ||
return Promise.resolve(); | ||
} | ||
return handleSyncMessage.call(this, msg); | ||
}); | ||
const { peer, dbPath } = await createSQLiteStorage(); | ||
node1.syncManager.addPeer(peer); | ||
const group = node1.createGroup(); | ||
group.addMember("everyone", "writer"); | ||
const map = group.createMap(); | ||
map.set("0", 0); | ||
mock.mockReset(); | ||
await new Promise((resolve) => setTimeout(resolve, 200)); | ||
const node2 = new LocalNode( | ||
Crypto.newRandomAgentSecret(), | ||
Crypto.newRandomSessionID(Crypto.getAgentID(agentSecret)), | ||
Crypto, | ||
); | ||
const [serverPeer2, clientPeer2] = cojsonInternals.connectedPeers( | ||
node1.agentSecret, | ||
serverNode.agentSecret, | ||
{ | ||
peer1role: "server", | ||
peer2role: "client", | ||
}, | ||
); | ||
node2.syncManager.addPeer(serverPeer2); | ||
serverNode.syncManager.addPeer(clientPeer2); | ||
const { peer: peer2 } = await createSQLiteStorage(dbPath); | ||
node2.syncManager.addPeer(peer2); | ||
const map2 = await node2.load(map.id); | ||
if (map2 === "unavailable") { | ||
throw new Error("Map is unavailable"); | ||
} | ||
expect(map2.toJSON()).toEqual({ | ||
"0": 0, | ||
}); | ||
}); |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
93336
7.57%1419
8.74%34
-2.86%+ Added
+ Added
- Removed
- Removed
Updated
Updated