Shade sessions and keys now survive server crashes, container restarts, and power outages via SQLite with WAL mode. New packages: - @shade/storage-sqlite: SQLiteStorage (StorageProvider) + SqlitePrekeyStore (PrekeyStore), both using bun:sqlite with auto-created tables and WAL mode - Serialization layer in shade-core for SessionState/keys ↔ JSON/base64 Docker usage: mount volume at /data, set SHADE_DB_PATH=/data/shade-client.db Prekey server auto-detects SHADE_PREKEY_DB_PATH for SQLite persistence Includes crash recovery integration test: encrypt → close DB → reopen → conversation continues seamlessly. 129 tests, 0 failures. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
92 lines
3.1 KiB
Plaintext
92 lines
3.1 KiB
Plaintext
{
|
|
"lockfileVersion": 1,
|
|
"configVersion": 1,
|
|
"workspaces": {
|
|
"": {
|
|
"name": "shade",
|
|
"dependencies": {
|
|
"@noble/curves": "^2.0.1",
|
|
"@noble/hashes": "^2.0.1",
|
|
},
|
|
"devDependencies": {
|
|
"bun-types": "^1.3.11",
|
|
},
|
|
},
|
|
"packages/shade-core": {
|
|
"name": "@shade/core",
|
|
"version": "0.1.0",
|
|
"peerDependencies": {
|
|
"@shade/crypto-web": "workspace:*",
|
|
},
|
|
},
|
|
"packages/shade-crypto-web": {
|
|
"name": "@shade/crypto-web",
|
|
"version": "0.1.0",
|
|
"dependencies": {
|
|
"@noble/curves": "^2.0.1",
|
|
"@noble/hashes": "^2.0.1",
|
|
"@shade/core": "workspace:*",
|
|
},
|
|
},
|
|
"packages/shade-proto": {
|
|
"name": "@shade/proto",
|
|
"version": "0.1.0",
|
|
"dependencies": {
|
|
"@shade/core": "workspace:*",
|
|
},
|
|
},
|
|
"packages/shade-server": {
|
|
"name": "@shade/server",
|
|
"version": "0.1.0",
|
|
"dependencies": {
|
|
"@shade/core": "workspace:*",
|
|
"hono": "^4.12.12",
|
|
},
|
|
},
|
|
"packages/shade-storage-sqlite": {
|
|
"name": "@shade/storage-sqlite",
|
|
"version": "0.1.0",
|
|
"dependencies": {
|
|
"@shade/core": "workspace:*",
|
|
"@shade/crypto-web": "workspace:*",
|
|
"@shade/server": "workspace:*",
|
|
},
|
|
},
|
|
"packages/shade-transport": {
|
|
"name": "@shade/transport",
|
|
"version": "0.1.0",
|
|
"dependencies": {
|
|
"@shade/core": "workspace:*",
|
|
"@shade/crypto-web": "workspace:*",
|
|
"@shade/proto": "workspace:*",
|
|
"@shade/server": "workspace:*",
|
|
},
|
|
},
|
|
},
|
|
"packages": {
|
|
"@noble/curves": ["@noble/curves@2.0.1", "", { "dependencies": { "@noble/hashes": "2.0.1" } }, "sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw=="],
|
|
|
|
"@noble/hashes": ["@noble/hashes@2.0.1", "", {}, "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw=="],
|
|
|
|
"@shade/core": ["@shade/core@workspace:packages/shade-core"],
|
|
|
|
"@shade/crypto-web": ["@shade/crypto-web@workspace:packages/shade-crypto-web"],
|
|
|
|
"@shade/proto": ["@shade/proto@workspace:packages/shade-proto"],
|
|
|
|
"@shade/server": ["@shade/server@workspace:packages/shade-server"],
|
|
|
|
"@shade/storage-sqlite": ["@shade/storage-sqlite@workspace:packages/shade-storage-sqlite"],
|
|
|
|
"@shade/transport": ["@shade/transport@workspace:packages/shade-transport"],
|
|
|
|
"@types/node": ["@types/node@25.5.2", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg=="],
|
|
|
|
"bun-types": ["bun-types@1.3.11", "", { "dependencies": { "@types/node": "*" } }, "sha512-1KGPpoxQWl9f6wcZh57LvrPIInQMn2TQ7jsgxqpRzg+l0QPOFvJVH7HmvHo/AiPgwXy+/Thf6Ov3EdVn1vOabg=="],
|
|
|
|
"hono": ["hono@4.12.12", "", {}, "sha512-p1JfQMKaceuCbpJKAPKVqyqviZdS0eUxH9v82oWo1kb9xjQ5wA6iP3FNVAPDFlz5/p7d45lO+BpSk1tuSZMF4Q=="],
|
|
|
|
"undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="],
|
|
}
|
|
}
|