bring in leveldb for the server

+1
.gitignore
··· 42 42 43 43 # pre-commit 44 44 .pre-commit-config.yaml 45 + data/*
+182 -4
package-lock.json
··· 13 13 "express": "^5.1.0", 14 14 "isomorphic-ws": "^5.0.0", 15 15 "jose": "^6.0.11", 16 + "level": "^10.0.0", 16 17 "nanoid": "^5.1.5", 17 18 "preact": "^10.26.9", 18 19 "simple-peer": "^9.11.1", ··· 34 35 "@types/confusing-browser-globals": "^1.0.3", 35 36 "@types/express": "^5.0.3", 36 37 "@types/jest": "^30.0.0", 38 + "@types/level": "^6.0.3", 37 39 "@types/node": "^24.0.1", 38 40 "@types/simple-peer": "^9.11.8", 39 41 "@types/ws": "^8.18.1", ··· 3072 3074 "tslib": "^2.4.0" 3073 3075 } 3074 3076 }, 3077 + "node_modules/@types/abstract-leveldown": { 3078 + "version": "7.2.5", 3079 + "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.5.tgz", 3080 + "integrity": "sha512-/2B0nQF4UdupuxeKTJA2+Rj1D+uDemo6P4kMwKCpbfpnzeVaWSELTsAw4Lxn3VJD6APtRrZOCuYo+4nHUQfTfg==", 3081 + "dev": true, 3082 + "license": "MIT" 3083 + }, 3075 3084 "node_modules/@types/aria-query": { 3076 3085 "version": "5.0.4", 3077 3086 "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", ··· 3160 3169 "license": "MIT", 3161 3170 "dependencies": { 3162 3171 "@types/ms": "*" 3172 + } 3173 + }, 3174 + "node_modules/@types/encoding-down": { 3175 + "version": "5.0.5", 3176 + "resolved": "https://registry.npmjs.org/@types/encoding-down/-/encoding-down-5.0.5.tgz", 3177 + "integrity": "sha512-HXlcVUJm2ITDgH34S1BjLMJhpfkXvEOEv+HS9KZweRl0LKlWNzVwFAj+N6pGExsRGsofhgqZP4ArQZJlWvBFDQ==", 3178 + "dev": true, 3179 + "license": "MIT", 3180 + "dependencies": { 3181 + "@types/abstract-leveldown": "*", 3182 + "@types/level-codec": "*" 3163 3183 } 3164 3184 }, 3165 3185 "node_modules/@types/estree": { ··· 3293 3313 "dev": true, 3294 3314 "license": "MIT" 3295 3315 }, 3316 + "node_modules/@types/level": { 3317 + "version": "6.0.3", 3318 + "resolved": "https://registry.npmjs.org/@types/level/-/level-6.0.3.tgz", 3319 + "integrity": "sha512-Wl95qkwvCZGwODK+AGALTJjeotfejR/hTNeErNmonmKCl/1moL/ZNVxHsPNIxXAUh9tIk6zEwBwx9erNVdUQOg==", 3320 + "dev": true, 3321 + "license": "MIT", 3322 + "dependencies": { 3323 + "@types/abstract-leveldown": "*", 3324 + "@types/encoding-down": "*", 3325 + "@types/levelup": "*" 3326 + } 3327 + }, 3328 + "node_modules/@types/level-codec": { 3329 + "version": "9.0.4", 3330 + "resolved": "https://registry.npmjs.org/@types/level-codec/-/level-codec-9.0.4.tgz", 3331 + "integrity": "sha512-N6v5EhpvF00Wv+1ixzqca9YD2wdK76JceSnUoiKfQh/vex+VFG852wzqohnlYf67nzKQoXeRzYd8W57fIkYCvg==", 3332 + "dev": true, 3333 + "license": "MIT" 3334 + }, 3335 + "node_modules/@types/level-errors": { 3336 + "version": "3.0.2", 3337 + "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.2.tgz", 3338 + "integrity": "sha512-gyZHbcQ2X5hNXf/9KS2qGEmgDe9EN2WDM3rJ5Ele467C0nA1sLhtmv1bZiPMDYfAYCfPWft0uQIaTvXbASSTRA==", 3339 + "dev": true, 3340 + "license": "MIT" 3341 + }, 3342 + "node_modules/@types/levelup": { 3343 + "version": "5.1.5", 3344 + "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-5.1.5.tgz", 3345 + "integrity": "sha512-Sm0jSj+LoncQ8BuZZJBjYitY5r9/V/Xd//vRjfgbQLWcQg2/iCm0HQqIOZ1KBE7QdNyAqMIG97mE3+t1GR0TIw==", 3346 + "dev": true, 3347 + "license": "MIT", 3348 + "dependencies": { 3349 + "@types/abstract-leveldown": "*", 3350 + "@types/level-errors": "*", 3351 + "@types/node": "*" 3352 + } 3353 + }, 3296 3354 "node_modules/@types/mdast": { 3297 3355 "version": "4.0.4", 3298 3356 "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", ··· 3985 4043 "node": ">=6.5" 3986 4044 } 3987 4045 }, 4046 + "node_modules/abstract-level": { 4047 + "version": "3.1.1", 4048 + "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-3.1.1.tgz", 4049 + "integrity": "sha512-CW2gKbJFTuX1feMvOrvsVMmijAOgI9kg2Ie9Dq3gOcMt/dVVoVmqNlLcEUCT13NxHFMEajcUcVBIplbyDroDiw==", 4050 + "license": "MIT", 4051 + "dependencies": { 4052 + "buffer": "^6.0.3", 4053 + "is-buffer": "^2.0.5", 4054 + "level-supports": "^6.2.0", 4055 + "level-transcoder": "^1.0.1", 4056 + "maybe-combine-errors": "^1.0.0", 4057 + "module-error": "^1.0.1" 4058 + }, 4059 + "engines": { 4060 + "node": ">=18" 4061 + } 4062 + }, 3988 4063 "node_modules/accepts": { 3989 4064 "version": "2.0.0", 3990 4065 "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", ··· 5026 5101 "dev": true, 5027 5102 "license": "MIT" 5028 5103 }, 5104 + "node_modules/browser-level": { 5105 + "version": "3.0.0", 5106 + "resolved": "https://registry.npmjs.org/browser-level/-/browser-level-3.0.0.tgz", 5107 + "integrity": "sha512-kGXtLh29jMwqKaskz5xeDLtCtN1KBz/DbQSqmvH7QdJiyGRC7RAM8PPg6gvUiNMa+wVnaxS9eSmEtP/f5ajOVw==", 5108 + "license": "MIT", 5109 + "dependencies": { 5110 + "abstract-level": "^3.1.0" 5111 + } 5112 + }, 5029 5113 "node_modules/browser-resolve": { 5030 5114 "version": "2.0.0", 5031 5115 "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", ··· 5749 5833 "dev": true, 5750 5834 "license": "MIT" 5751 5835 }, 5836 + "node_modules/classic-level": { 5837 + "version": "3.0.0", 5838 + "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-3.0.0.tgz", 5839 + "integrity": "sha512-yGy8j8LjPbN0Bh3+ygmyYvrmskVita92pD/zCoalfcC9XxZj6iDtZTAnz+ot7GG8p9KLTG+MZ84tSA4AhkgVZQ==", 5840 + "hasInstallScript": true, 5841 + "license": "MIT", 5842 + "dependencies": { 5843 + "abstract-level": "^3.1.0", 5844 + "module-error": "^1.0.1", 5845 + "napi-macros": "^2.2.2", 5846 + "node-gyp-build": "^4.3.0" 5847 + }, 5848 + "engines": { 5849 + "node": ">=18" 5850 + } 5851 + }, 5752 5852 "node_modules/clean-stack": { 5753 5853 "version": "2.2.0", 5754 5854 "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", ··· 9125 9225 "url": "https://github.com/sponsors/ljharb" 9126 9226 } 9127 9227 }, 9228 + "node_modules/is-buffer": { 9229 + "version": "2.0.5", 9230 + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", 9231 + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", 9232 + "funding": [ 9233 + { 9234 + "type": "github", 9235 + "url": "https://github.com/sponsors/feross" 9236 + }, 9237 + { 9238 + "type": "patreon", 9239 + "url": "https://www.patreon.com/feross" 9240 + }, 9241 + { 9242 + "type": "consulting", 9243 + "url": "https://feross.org/support" 9244 + } 9245 + ], 9246 + "license": "MIT", 9247 + "engines": { 9248 + "node": ">=4" 9249 + } 9250 + }, 9128 9251 "node_modules/is-callable": { 9129 9252 "version": "1.2.7", 9130 9253 "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", ··· 10922 11045 "dev": true, 10923 11046 "license": "MIT" 10924 11047 }, 11048 + "node_modules/level": { 11049 + "version": "10.0.0", 11050 + "resolved": "https://registry.npmjs.org/level/-/level-10.0.0.tgz", 11051 + "integrity": "sha512-aZJvdfRr/f0VBbSRF5C81FHON47ZsC2TkGxbBezXpGGXAUEL/s6+GP73nnhAYRSCIqUNsmJjfeOF4lzRDKbUig==", 11052 + "license": "MIT", 11053 + "dependencies": { 11054 + "abstract-level": "^3.1.0", 11055 + "browser-level": "^3.0.0", 11056 + "classic-level": "^3.0.0" 11057 + }, 11058 + "engines": { 11059 + "node": ">=18" 11060 + }, 11061 + "funding": { 11062 + "type": "opencollective", 11063 + "url": "https://opencollective.com/level" 11064 + } 11065 + }, 11066 + "node_modules/level-supports": { 11067 + "version": "6.2.0", 11068 + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-6.2.0.tgz", 11069 + "integrity": "sha512-QNxVXP0IRnBmMsJIh+sb2kwNCYcKciQZJEt+L1hPCHrKNELllXhvrlClVHXBYZVT+a7aTSM6StgNXdAldoab3w==", 11070 + "license": "MIT", 11071 + "engines": { 11072 + "node": ">=16" 11073 + } 11074 + }, 11075 + "node_modules/level-transcoder": { 11076 + "version": "1.0.1", 11077 + "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", 11078 + "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", 11079 + "license": "MIT", 11080 + "dependencies": { 11081 + "buffer": "^6.0.3", 11082 + "module-error": "^1.0.1" 11083 + }, 11084 + "engines": { 11085 + "node": ">=12" 11086 + } 11087 + }, 10925 11088 "node_modules/leven": { 10926 11089 "version": "3.1.0", 10927 11090 "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", ··· 11337 11500 "license": "MIT", 11338 11501 "engines": { 11339 11502 "node": ">= 0.4" 11503 + } 11504 + }, 11505 + "node_modules/maybe-combine-errors": { 11506 + "version": "1.0.0", 11507 + "resolved": "https://registry.npmjs.org/maybe-combine-errors/-/maybe-combine-errors-1.0.0.tgz", 11508 + "integrity": "sha512-eefp6IduNPT6fVdwPp+1NgD0PML1NU5P6j1Mj5nz1nidX8/sWY7119WL8vTAHgqfsY74TzW0w1XPgdYEKkGZ5A==", 11509 + "license": "MIT", 11510 + "engines": { 11511 + "node": ">=10" 11340 11512 } 11341 11513 }, 11342 11514 "node_modules/md5.js": { ··· 12654 12826 "dev": true, 12655 12827 "license": "MIT" 12656 12828 }, 12829 + "node_modules/module-error": { 12830 + "version": "1.0.2", 12831 + "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", 12832 + "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==", 12833 + "license": "MIT", 12834 + "engines": { 12835 + "node": ">=10" 12836 + } 12837 + }, 12657 12838 "node_modules/ms": { 12658 12839 "version": "2.1.3", 12659 12840 "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", ··· 12689 12870 "version": "2.2.2", 12690 12871 "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz", 12691 12872 "integrity": "sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==", 12692 - "dev": true, 12693 - "license": "MIT", 12694 - "optional": true 12873 + "license": "MIT" 12695 12874 }, 12696 12875 "node_modules/napi-postinstall": { 12697 12876 "version": "0.2.4", ··· 12875 13054 "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", 12876 13055 "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", 12877 13056 "license": "MIT", 12878 - "optional": true, 12879 13057 "bin": { 12880 13058 "node-gyp-build": "bin.js", 12881 13059 "node-gyp-build-optional": "optional.js",
+2
package.json
··· 26 26 "express": "^5.1.0", 27 27 "isomorphic-ws": "^5.0.0", 28 28 "jose": "^6.0.11", 29 + "level": "^10.0.0", 29 30 "nanoid": "^5.1.5", 30 31 "preact": "^10.26.9", 31 32 "simple-peer": "^9.11.1", ··· 47 48 "@types/confusing-browser-globals": "^1.0.3", 48 49 "@types/express": "^5.0.3", 49 50 "@types/jest": "^30.0.0", 51 + "@types/level": "^6.0.3", 50 52 "@types/node": "^24.0.1", 51 53 "@types/simple-peer": "^9.11.8", 52 54 "@types/ws": "^8.18.1",