Compare commits
61 Commits
jazz-svelt
...
jazz-svelt
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
88e314d980 | ||
|
|
62e0e5d721 | ||
|
|
aa16ad9c1c | ||
|
|
ada802bff8 | ||
|
|
471b8c6a15 | ||
|
|
7dd080d907 | ||
|
|
69c81a3e90 | ||
|
|
d8ed987461 | ||
|
|
beb45c2656 | ||
|
|
1d71ca1511 | ||
|
|
65941c7f87 | ||
|
|
a37dc1c22f | ||
|
|
774f232390 | ||
|
|
12c19fc940 | ||
|
|
338f5421f4 | ||
|
|
e0daca300b | ||
|
|
5c76e37f14 | ||
|
|
0117d0c9b9 | ||
|
|
b90c766c05 | ||
|
|
262a36e456 | ||
|
|
cb1df65beb | ||
|
|
ea91e63ff2 | ||
|
|
8eae2eb31e | ||
|
|
c9044f5123 | ||
|
|
24340173fa | ||
|
|
53e88993a0 | ||
|
|
ece168878b | ||
|
|
cad84db52b | ||
|
|
342a385111 | ||
|
|
f87ba7d927 | ||
|
|
7c7f55b85c | ||
|
|
0e5b9f5292 | ||
|
|
2f5af3dece | ||
|
|
2c35e2ba85 | ||
|
|
0a4f79d5a4 | ||
|
|
43cb7abba7 | ||
|
|
25f76f6b02 | ||
|
|
6a56561c98 | ||
|
|
2ac31e7c51 | ||
|
|
1bbefab5a9 | ||
|
|
1143b32cf3 | ||
|
|
51ada27810 | ||
|
|
954ecb3984 | ||
|
|
05089270d9 | ||
|
|
fecc81111a | ||
|
|
4d3e7dbcd5 | ||
|
|
ee65f18fd9 | ||
|
|
bcbc4636ed | ||
|
|
8c323c4513 | ||
|
|
4103ea0c88 | ||
|
|
733ebec902 | ||
|
|
10a3834668 | ||
|
|
593c3aeb6e | ||
|
|
a55d71c28d | ||
|
|
c030c7a57e | ||
|
|
e5b4c0448a | ||
|
|
0d516a3c6a | ||
|
|
271ff3eb40 | ||
|
|
dcc836ff98 | ||
|
|
22da4ea136 | ||
|
|
80e86c92b2 |
@@ -1,5 +1,15 @@
|
||||
# chat-rn-clerk
|
||||
|
||||
## 1.0.71
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [ada802b]
|
||||
- jazz-tools@0.10.6
|
||||
- jazz-react-native@0.10.6
|
||||
- jazz-react-native-auth-clerk@0.10.6
|
||||
- jazz-react-native-media-images@0.10.6
|
||||
|
||||
## 1.0.70
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "chat-rn-clerk",
|
||||
"main": "index.js",
|
||||
"version": "1.0.70",
|
||||
"version": "1.0.71",
|
||||
"scripts": {
|
||||
"build": "expo export -p ios",
|
||||
"start": "expo start",
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# chat-rn
|
||||
|
||||
## 1.0.68
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [ada802b]
|
||||
- jazz-tools@0.10.6
|
||||
- jazz-react-native@0.10.6
|
||||
|
||||
## 1.0.67
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "chat-rn",
|
||||
"version": "1.0.67",
|
||||
"version": "1.0.68",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"build": "expo export -p ios",
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
# chat-vue
|
||||
|
||||
## 0.0.55
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [ada802b]
|
||||
- jazz-tools@0.10.6
|
||||
- jazz-browser@0.10.6
|
||||
- jazz-vue@0.10.6
|
||||
|
||||
## 0.0.54
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "chat-vue",
|
||||
"version": "0.0.54",
|
||||
"version": "0.0.55",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
# jazz-example-chat
|
||||
|
||||
## 0.0.151
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1d71ca1]
|
||||
- Updated dependencies [ada802b]
|
||||
- hash-slash@0.2.2
|
||||
- jazz-react@0.10.6
|
||||
- jazz-tools@0.10.6
|
||||
- jazz-browser-media-images@0.10.6
|
||||
|
||||
## 0.0.150
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "jazz-example-chat",
|
||||
"private": true,
|
||||
"version": "0.0.150",
|
||||
"version": "0.0.151",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
# minimal-auth-clerk
|
||||
|
||||
## 0.0.50
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1d71ca1]
|
||||
- Updated dependencies [ada802b]
|
||||
- jazz-react-auth-clerk@0.10.6
|
||||
- jazz-react@0.10.6
|
||||
- jazz-tools@0.10.6
|
||||
|
||||
## 0.0.49
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "clerk",
|
||||
"private": true,
|
||||
"version": "0.0.49",
|
||||
"version": "0.0.50",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
@@ -13,7 +13,7 @@
|
||||
"dependencies": {
|
||||
"@clerk/clerk-react": "^5.4.1",
|
||||
"jazz-react": "workspace:*",
|
||||
"jazz-react-auth-clerk": "workspace:0.10.5",
|
||||
"jazz-react-auth-clerk": "workspace:0.10.6",
|
||||
"jazz-tools": "workspace:*",
|
||||
"react": "^18.3.1",
|
||||
"react-dom": "^18.3.1"
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# file-share-svelte
|
||||
|
||||
## 0.0.35
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [ada802b]
|
||||
- jazz-tools@0.10.6
|
||||
- jazz-svelte@0.10.6
|
||||
|
||||
## 0.0.34
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "file-share-svelte",
|
||||
"version": "0.0.34",
|
||||
"version": "0.0.35",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
# form
|
||||
|
||||
## 0.0.46
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1d71ca1]
|
||||
- Updated dependencies [ada802b]
|
||||
- hash-slash@0.2.2
|
||||
- jazz-react@0.10.6
|
||||
- jazz-tools@0.10.6
|
||||
- jazz-browser-media-images@0.10.6
|
||||
|
||||
## 0.0.45
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "form",
|
||||
"private": true,
|
||||
"version": "0.0.45",
|
||||
"version": "0.0.46",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
# image-upload
|
||||
|
||||
## 0.0.48
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1d71ca1]
|
||||
- Updated dependencies [ada802b]
|
||||
- jazz-react@0.10.6
|
||||
- jazz-tools@0.10.6
|
||||
- jazz-browser-media-images@0.10.6
|
||||
|
||||
## 0.0.47
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "image-upload",
|
||||
"private": true,
|
||||
"version": "0.0.47",
|
||||
"version": "0.0.48",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
# jazz-example-inspector
|
||||
|
||||
## 0.0.107
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1d71ca1]
|
||||
- Updated dependencies [5c76e37]
|
||||
- hash-slash@0.2.2
|
||||
- cojson@0.10.6
|
||||
- cojson-transport-ws@0.10.6
|
||||
|
||||
## 0.0.106
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "jazz-inspector-app",
|
||||
"private": true,
|
||||
"version": "0.0.106",
|
||||
"version": "0.0.107",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
@@ -16,9 +16,9 @@
|
||||
"@radix-ui/react-toast": "^1.1.4",
|
||||
"class-variance-authority": "^0.7.0",
|
||||
"clsx": "^2.0.0",
|
||||
"cojson": "workspace:0.10.4",
|
||||
"cojson-transport-ws": "workspace:0.10.4",
|
||||
"hash-slash": "workspace:0.2.1",
|
||||
"cojson": "workspace:0.10.6",
|
||||
"cojson-transport-ws": "workspace:0.10.6",
|
||||
"hash-slash": "workspace:0.2.2",
|
||||
"lucide-react": "^0.274.0",
|
||||
"qrcode": "^1.5.3",
|
||||
"react": "^18.3.1",
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
# jazz-example-musicplayer
|
||||
|
||||
## 0.0.72
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1d71ca1]
|
||||
- Updated dependencies [ada802b]
|
||||
- jazz-react@0.10.6
|
||||
- jazz-tools@0.10.6
|
||||
- jazz-inspector@0.10.6
|
||||
|
||||
## 0.0.71
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "jazz-example-music-player",
|
||||
"private": true,
|
||||
"version": "0.0.71",
|
||||
"version": "0.0.72",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
@@ -22,8 +22,8 @@
|
||||
"class-variance-authority": "^0.7.0",
|
||||
"clsx": "^2.0.0",
|
||||
"jazz-inspector": "workspace:*",
|
||||
"jazz-react": "workspace:0.10.5",
|
||||
"jazz-tools": "workspace:0.10.5",
|
||||
"jazz-react": "workspace:0.10.6",
|
||||
"jazz-tools": "workspace:0.10.6",
|
||||
"lucide-react": "^0.274.0",
|
||||
"react": "^18.3.1",
|
||||
"react-dom": "^18.3.1",
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
# organization
|
||||
|
||||
## 0.0.44
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1d71ca1]
|
||||
- Updated dependencies [ada802b]
|
||||
- jazz-react@0.10.6
|
||||
- jazz-tools@0.10.6
|
||||
|
||||
## 0.0.43
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "organization",
|
||||
"private": true,
|
||||
"version": "0.0.43",
|
||||
"version": "0.0.44",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
# passkey-svelte
|
||||
|
||||
## 0.0.39
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- jazz-svelte@0.10.6
|
||||
|
||||
## 0.0.38
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "passkey-svelte",
|
||||
"version": "0.0.38",
|
||||
"version": "0.0.39",
|
||||
"type": "module",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
# minimal-auth-passkey
|
||||
|
||||
## 0.0.49
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1d71ca1]
|
||||
- Updated dependencies [ada802b]
|
||||
- jazz-react@0.10.6
|
||||
- jazz-tools@0.10.6
|
||||
|
||||
## 0.0.48
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "passkey",
|
||||
"private": true,
|
||||
"version": "0.0.48",
|
||||
"version": "0.0.49",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
# passphrase
|
||||
|
||||
## 0.0.46
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1d71ca1]
|
||||
- Updated dependencies [ada802b]
|
||||
- jazz-react@0.10.6
|
||||
- jazz-tools@0.10.6
|
||||
|
||||
## 0.0.45
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "passphrase",
|
||||
"private": true,
|
||||
"version": "0.0.45",
|
||||
"version": "0.0.46",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
# jazz-password-manager
|
||||
|
||||
## 0.0.70
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1d71ca1]
|
||||
- Updated dependencies [ada802b]
|
||||
- jazz-react@0.10.6
|
||||
- jazz-tools@0.10.6
|
||||
|
||||
## 0.0.69
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "jazz-password-manager",
|
||||
"private": true,
|
||||
"version": "0.0.69",
|
||||
"version": "0.0.70",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
@@ -12,8 +12,8 @@
|
||||
"clean-install": "rm -rf node_modules pnpm-lock.yaml && pnpm install"
|
||||
},
|
||||
"dependencies": {
|
||||
"jazz-react": "workspace:0.10.5",
|
||||
"jazz-tools": "workspace:0.10.5",
|
||||
"jazz-react": "workspace:0.10.6",
|
||||
"jazz-tools": "workspace:0.10.6",
|
||||
"react": "^18.3.1",
|
||||
"react-dom": "^18.3.1",
|
||||
"react-hook-form": "^7.41.5",
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
# jazz-example-pets
|
||||
|
||||
## 0.0.168
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1d71ca1]
|
||||
- Updated dependencies [ada802b]
|
||||
- jazz-react@0.10.6
|
||||
- jazz-tools@0.10.6
|
||||
- jazz-browser-media-images@0.10.6
|
||||
|
||||
## 0.0.167
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "jazz-example-pets",
|
||||
"private": true,
|
||||
"version": "0.0.167",
|
||||
"version": "0.0.168",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
@@ -19,9 +19,9 @@
|
||||
"@radix-ui/react-toast": "^1.1.4",
|
||||
"class-variance-authority": "^0.7.0",
|
||||
"clsx": "^2.0.0",
|
||||
"jazz-browser-media-images": "workspace:0.10.5",
|
||||
"jazz-react": "workspace:0.10.5",
|
||||
"jazz-tools": "workspace:0.10.5",
|
||||
"jazz-browser-media-images": "workspace:0.10.6",
|
||||
"jazz-react": "workspace:0.10.6",
|
||||
"jazz-tools": "workspace:0.10.6",
|
||||
"lucide-react": "^0.274.0",
|
||||
"qrcode": "^1.5.3",
|
||||
"react": "^18.3.1",
|
||||
@@ -41,7 +41,7 @@
|
||||
"@vitejs/plugin-react-swc": "^3.3.2",
|
||||
"autoprefixer": "^10.4.20",
|
||||
"is-ci": "^3.0.1",
|
||||
"jazz-run": "workspace:0.10.5",
|
||||
"jazz-run": "workspace:0.10.6",
|
||||
"postcss": "^8.4.27",
|
||||
"tailwindcss": "^3.4.17",
|
||||
"typescript": "~5.6.2",
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
# reactions
|
||||
|
||||
## 0.0.48
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1d71ca1]
|
||||
- Updated dependencies [ada802b]
|
||||
- hash-slash@0.2.2
|
||||
- jazz-react@0.10.6
|
||||
- jazz-tools@0.10.6
|
||||
- jazz-browser-media-images@0.10.6
|
||||
|
||||
## 0.0.47
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "reactions",
|
||||
"private": true,
|
||||
"version": "0.0.47",
|
||||
"version": "0.0.48",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
# todo-vue
|
||||
|
||||
## 0.0.53
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [ada802b]
|
||||
- jazz-tools@0.10.6
|
||||
- jazz-browser@0.10.6
|
||||
- jazz-vue@0.10.6
|
||||
|
||||
## 0.0.52
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "todo-vue",
|
||||
"version": "0.0.52",
|
||||
"version": "0.0.53",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
# jazz-example-todo
|
||||
|
||||
## 0.0.167
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1d71ca1]
|
||||
- Updated dependencies [ada802b]
|
||||
- jazz-react@0.10.6
|
||||
- jazz-tools@0.10.6
|
||||
|
||||
## 0.0.166
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "jazz-example-todo",
|
||||
"private": true,
|
||||
"version": "0.0.166",
|
||||
"version": "0.0.167",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
@@ -16,8 +16,8 @@
|
||||
"@radix-ui/react-toast": "^1.1.4",
|
||||
"class-variance-authority": "^0.7.0",
|
||||
"clsx": "^2.0.0",
|
||||
"jazz-react": "workspace:0.10.5",
|
||||
"jazz-tools": "workspace:0.10.5",
|
||||
"jazz-react": "workspace:0.10.6",
|
||||
"jazz-tools": "workspace:0.10.6",
|
||||
"lucide-react": "^0.274.0",
|
||||
"qrcode": "^1.5.3",
|
||||
"react": "^18.3.1",
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
# version-history
|
||||
|
||||
## 0.0.45
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1d71ca1]
|
||||
- Updated dependencies [ada802b]
|
||||
- jazz-react@0.10.6
|
||||
- jazz-tools@0.10.6
|
||||
|
||||
## 0.0.44
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "version-history",
|
||||
"private": true,
|
||||
"version": "0.0.44",
|
||||
"version": "0.0.45",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
|
||||
6
flake.lock
generated
6
flake.lock
generated
@@ -20,11 +20,11 @@
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1737885589,
|
||||
"narHash": "sha256-Zf0hSrtzaM1DEz8//+Xs51k/wdSajticVrATqDrfQjg=",
|
||||
"lastModified": 1739580444,
|
||||
"narHash": "sha256-+/bSz4EAVbqz8/HsIGLroF8aNaO8bLRL7WfACN+24g4=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "852ff1d9e153d8875a83602e03fdef8a63f0ecf8",
|
||||
"rev": "8bb37161a0488b89830168b81c48aed11569cb93",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
||||
@@ -16,15 +16,19 @@
|
||||
{
|
||||
devShells.default = pkgs.mkShell {
|
||||
buildInputs = with pkgs; [
|
||||
# General development
|
||||
git
|
||||
turbo
|
||||
|
||||
# JS development
|
||||
nodejs_22
|
||||
nodePackages.pnpm
|
||||
git
|
||||
];
|
||||
|
||||
shellHook = ''
|
||||
echo ""
|
||||
echo "Welcome to the Jazz development environment!"
|
||||
echo "Run 'pnpm install' to install the dependencies."
|
||||
echo "Run 'pnpm install' to install dependencies."
|
||||
echo ""
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -8,6 +8,7 @@ import {
|
||||
ChevronRight,
|
||||
CodeIcon,
|
||||
CopyIcon,
|
||||
FileLock2Icon,
|
||||
FileTextIcon,
|
||||
FingerprintIcon,
|
||||
FolderArchiveIcon,
|
||||
@@ -61,6 +62,7 @@ const icons = {
|
||||
newsletter: MailIcon,
|
||||
offline: WifiOffIcon,
|
||||
package: BoxIcon,
|
||||
permissions: FileLock2Icon,
|
||||
social: UsersIcon,
|
||||
spatialPresence: MousePointerSquareDashedIcon,
|
||||
tableOfContents: ScrollIcon,
|
||||
@@ -117,7 +119,7 @@ export function Icon({
|
||||
className?: string;
|
||||
} & React.SVGProps<SVGSVGElement>) {
|
||||
if (!icon && (!name || !icons.hasOwnProperty(name))) {
|
||||
throw new Error(`Icon not found`);
|
||||
throw new Error(`Icon not found: ${name}`);
|
||||
}
|
||||
|
||||
// @ts-ignore
|
||||
|
||||
@@ -229,7 +229,10 @@ async function readMdxContent(url) {
|
||||
const relativePath = url.replace(/^\/docs\/?/, "");
|
||||
|
||||
// Base directory for docs
|
||||
const baseDir = path.join(process.cwd(), "app/docs/[framework]/[...slug]");
|
||||
const baseDir = path.join(
|
||||
process.cwd(),
|
||||
"app/(docs)/docs/[framework]/[...slug]",
|
||||
);
|
||||
|
||||
// If it's a directory, try to read all framework variants
|
||||
const fullPath = path.join(baseDir, relativePath);
|
||||
@@ -300,7 +303,6 @@ async function generateDetailedDocs(docs) {
|
||||
for (const page of section.pages) {
|
||||
output.push(`#### ${page.title}\n`);
|
||||
const content = await readMdxContent(page.url);
|
||||
console.log(content);
|
||||
if (content) {
|
||||
// If the content contains framework-specific implementations, they're already properly formatted
|
||||
// Otherwise, just add the content directly
|
||||
|
||||
24
homepage/homepage/generate-docs/llms-full.test.mjs
Normal file
24
homepage/homepage/generate-docs/llms-full.test.mjs
Normal file
@@ -0,0 +1,24 @@
|
||||
import assert from "node:assert";
|
||||
import fs from "node:fs/promises";
|
||||
import path from "node:path";
|
||||
import { test } from "node:test";
|
||||
|
||||
test("Size test", async () => {
|
||||
const filePath = path.join(process.cwd(), "public", "llms-full.txt");
|
||||
const stats = await fs.stat(filePath);
|
||||
assert.ok(
|
||||
stats.size > 100 * 1024,
|
||||
"llms-full.txt should be larger than 100kb", // Somewhat arbitrary, but it's a good sanity check
|
||||
);
|
||||
});
|
||||
|
||||
test("Content test", async () => {
|
||||
const filePath = path.join(process.cwd(), "public", "llms-full.txt");
|
||||
const content = await fs.readFile(filePath, "utf-8");
|
||||
assert.ok(
|
||||
content.includes(
|
||||
'Jazz authentication is based on cryptographic keys ("Account keys").',
|
||||
),
|
||||
"Should contain authentication message", // From authentication, it's unlikely to change much
|
||||
);
|
||||
});
|
||||
@@ -13,7 +13,9 @@
|
||||
"generate:docs": "node generate-docs/typedocs.mjs --build",
|
||||
"generate:llm-docs:all": "pnpm run generate:llm-docs:concise && pnpm run generate:llm-docs:full",
|
||||
"generate:llm-docs:concise": "node generate-docs/llms.mjs",
|
||||
"generate:llm-docs:full": "node generate-docs/llms-full.mjs"
|
||||
"generate:llm-docs:full": "node generate-docs/llms-full.mjs",
|
||||
"test": "pnpm run test:llm-docs",
|
||||
"test:llm-docs": "node generate-docs/llms-full.test.mjs"
|
||||
},
|
||||
"packageManager": "pnpm@9.14.0",
|
||||
"dependencies": {
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
},
|
||||
"build:generate-docs": {
|
||||
"inputs": ["../../../packages/*/src/**"],
|
||||
"outputs": ["typedoc/**"],
|
||||
"outputs": ["typedoc/**", "public/llms.txt", "public/llms-full.txt"],
|
||||
"dependsOn": ["^build"]
|
||||
},
|
||||
"dev": {
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# cojson-storage-indexeddb
|
||||
|
||||
## 0.10.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [5c76e37]
|
||||
- cojson@0.10.6
|
||||
- cojson-storage@0.10.6
|
||||
|
||||
## 0.10.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "cojson-storage-indexeddb",
|
||||
"version": "0.10.4",
|
||||
"version": "0.10.6",
|
||||
"main": "dist/index.js",
|
||||
"type": "module",
|
||||
"types": "src/index.ts",
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# cojson-storage-sqlite
|
||||
|
||||
## 0.8.64
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [5c76e37]
|
||||
- cojson@0.10.6
|
||||
- cojson-storage@0.10.6
|
||||
|
||||
## 0.8.63
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "cojson-storage-rn-sqlite",
|
||||
"type": "module",
|
||||
"version": "0.8.63",
|
||||
"version": "0.8.64",
|
||||
"main": "dist/index.js",
|
||||
"types": "src/index.ts",
|
||||
"license": "MIT",
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# cojson-storage-sqlite
|
||||
|
||||
## 0.10.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [5c76e37]
|
||||
- cojson@0.10.6
|
||||
- cojson-storage@0.10.6
|
||||
|
||||
## 0.10.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
{
|
||||
"name": "cojson-storage-sqlite",
|
||||
"type": "module",
|
||||
"version": "0.10.4",
|
||||
"version": "0.10.6",
|
||||
"main": "dist/index.js",
|
||||
"types": "src/index.ts",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"better-sqlite3": "^11.7.0",
|
||||
"cojson": "workspace:0.10.4",
|
||||
"cojson": "workspace:0.10.6",
|
||||
"cojson-storage": "workspace:*"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
# cojson-storage
|
||||
|
||||
## 0.10.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [5c76e37]
|
||||
- cojson@0.10.6
|
||||
|
||||
## 0.10.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "cojson-storage",
|
||||
"version": "0.10.4",
|
||||
"version": "0.10.6",
|
||||
"main": "dist/index.js",
|
||||
"type": "module",
|
||||
"types": "src/index.ts",
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
# cojson-transport-nodejs-ws
|
||||
|
||||
## 0.10.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [5c76e37]
|
||||
- cojson@0.10.6
|
||||
|
||||
## 0.10.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "cojson-transport-ws",
|
||||
"type": "module",
|
||||
"version": "0.10.4",
|
||||
"version": "0.10.6",
|
||||
"main": "dist/index.js",
|
||||
"types": "src/index.ts",
|
||||
"license": "MIT",
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
# cojson
|
||||
|
||||
## 0.10.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 5c76e37: Ports Wasm crypto functions to use exported library `jazz-crypto-rs`
|
||||
|
||||
## 0.10.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -25,20 +25,19 @@
|
||||
},
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"version": "0.10.4",
|
||||
"version": "0.10.6",
|
||||
"devDependencies": {
|
||||
"@opentelemetry/sdk-metrics": "^1.29.0",
|
||||
"typescript": "~5.6.2",
|
||||
"vitest": "3.0.5"
|
||||
},
|
||||
"dependencies": {
|
||||
"@hazae41/berith": "^1.2.6",
|
||||
"@noble/ciphers": "^0.1.3",
|
||||
"@noble/curves": "^1.3.0",
|
||||
"@noble/hashes": "^1.4.0",
|
||||
"@opentelemetry/api": "^1.0.0",
|
||||
"@scure/base": "1.2.1",
|
||||
"hash-wasm": "^4.9.0",
|
||||
"jazz-crypto-rs": "0.0.3",
|
||||
"neverthrow": "^7.0.1",
|
||||
"queueueue": "^4.1.2"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import { xsalsa20, xsalsa20_poly1305 } from "@noble/ciphers/salsa";
|
||||
import { randomBytes } from "@noble/ciphers/webcrypto/utils";
|
||||
import { ed25519, x25519 } from "@noble/curves/ed25519";
|
||||
import { blake3 } from "@noble/hashes/blake3";
|
||||
import { base58 } from "@scure/base";
|
||||
@@ -24,21 +23,24 @@ import {
|
||||
|
||||
type Blake3State = ReturnType<typeof blake3.create>;
|
||||
|
||||
/**
|
||||
* Pure JavaScript implementation of the CryptoProvider interface using noble-curves and noble-ciphers libraries.
|
||||
* This provides a fallback implementation that doesn't require WebAssembly, offering:
|
||||
* - Signing/verifying (Ed25519)
|
||||
* - Encryption/decryption (XSalsa20)
|
||||
* - Sealing/unsealing (X25519 + XSalsa20-Poly1305)
|
||||
* - Hashing (BLAKE3)
|
||||
*/
|
||||
export class PureJSCrypto extends CryptoProvider<Blake3State> {
|
||||
static async create(): Promise<PureJSCrypto> {
|
||||
return new PureJSCrypto();
|
||||
}
|
||||
|
||||
randomBytes(length: number): Uint8Array {
|
||||
return randomBytes(length);
|
||||
}
|
||||
|
||||
emptyBlake3State(): Blake3State {
|
||||
return blake3.create({});
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
cloneBlake3State(state: any): Blake3State {
|
||||
cloneBlake3State(state: Blake3State): Blake3State {
|
||||
return state.clone();
|
||||
}
|
||||
|
||||
@@ -61,6 +63,14 @@ export class PureJSCrypto extends CryptoProvider<Blake3State> {
|
||||
return state.clone().digest();
|
||||
}
|
||||
|
||||
generateNonce(input: Uint8Array): Uint8Array {
|
||||
return this.blake3HashOnce(input).slice(0, 24);
|
||||
}
|
||||
|
||||
private generateJsonNonce(material: JsonValue): Uint8Array {
|
||||
return this.generateNonce(textEncoder.encode(stableStringify(material)));
|
||||
}
|
||||
|
||||
newEd25519SigningKey(): Uint8Array {
|
||||
return ed25519.utils.randomPrivateKey();
|
||||
}
|
||||
@@ -109,9 +119,7 @@ export class PureJSCrypto extends CryptoProvider<Blake3State> {
|
||||
const keySecretBytes = base58.decode(
|
||||
keySecret.substring("keySecret_z".length),
|
||||
);
|
||||
const nOnce = this.blake3HashOnce(
|
||||
textEncoder.encode(stableStringify(nOnceMaterial)),
|
||||
).slice(0, 24);
|
||||
const nOnce = this.generateJsonNonce(nOnceMaterial);
|
||||
|
||||
const plaintext = textEncoder.encode(stableStringify(value));
|
||||
const ciphertext = xsalsa20(keySecretBytes, nOnce, plaintext);
|
||||
@@ -126,9 +134,7 @@ export class PureJSCrypto extends CryptoProvider<Blake3State> {
|
||||
const keySecretBytes = base58.decode(
|
||||
keySecret.substring("keySecret_z".length),
|
||||
);
|
||||
const nOnce = this.blake3HashOnce(
|
||||
textEncoder.encode(stableStringify(nOnceMaterial)),
|
||||
).slice(0, 24);
|
||||
const nOnce = this.generateJsonNonce(nOnceMaterial);
|
||||
|
||||
const ciphertext = base64URLtoBytes(
|
||||
encrypted.substring("encrypted_U".length),
|
||||
@@ -149,9 +155,7 @@ export class PureJSCrypto extends CryptoProvider<Blake3State> {
|
||||
to: SealerID;
|
||||
nOnceMaterial: { in: RawCoID; tx: TransactionID };
|
||||
}): Sealed<T> {
|
||||
const nOnce = this.blake3HashOnce(
|
||||
textEncoder.encode(stableStringify(nOnceMaterial)),
|
||||
).slice(0, 24);
|
||||
const nOnce = this.generateJsonNonce(nOnceMaterial);
|
||||
|
||||
const sealerPub = base58.decode(to.substring("sealer_z".length));
|
||||
|
||||
@@ -174,9 +178,7 @@ export class PureJSCrypto extends CryptoProvider<Blake3State> {
|
||||
from: SealerID,
|
||||
nOnceMaterial: { in: RawCoID; tx: TransactionID },
|
||||
): T | undefined {
|
||||
const nOnce = this.blake3HashOnce(
|
||||
textEncoder.encode(stableStringify(nOnceMaterial)),
|
||||
).slice(0, 24);
|
||||
const nOnce = this.generateJsonNonce(nOnceMaterial);
|
||||
|
||||
const sealerPriv = base58.decode(sealer.substring("sealerSecret_z".length));
|
||||
|
||||
|
||||
@@ -1,16 +1,19 @@
|
||||
import {
|
||||
Ed25519Signature,
|
||||
Ed25519SigningKey,
|
||||
Ed25519VerifyingKey,
|
||||
Memory,
|
||||
X25519PublicKey,
|
||||
X25519StaticSecret,
|
||||
initBundledOnce,
|
||||
} from "@hazae41/berith";
|
||||
import { xsalsa20, xsalsa20_poly1305 } from "@noble/ciphers/salsa";
|
||||
import { randomBytes } from "@noble/ciphers/webcrypto/utils";
|
||||
import { base58 } from "@scure/base";
|
||||
import { createBLAKE3 } from "hash-wasm";
|
||||
Blake3Hasher,
|
||||
blake3_empty_state,
|
||||
blake3_hash_once,
|
||||
blake3_hash_once_with_context,
|
||||
decrypt,
|
||||
encrypt,
|
||||
get_sealer_id,
|
||||
get_signer_id,
|
||||
new_ed25519_signing_key,
|
||||
new_x25519_private_key,
|
||||
seal,
|
||||
sign,
|
||||
unseal,
|
||||
verify,
|
||||
} from "jazz-crypto-rs";
|
||||
import { base64URLtoBytes, bytesToBase64url } from "../base64url.js";
|
||||
import { RawCoID, TransactionID } from "../ids.js";
|
||||
import { Stringified, stableStringify } from "../jsonStringify.js";
|
||||
@@ -30,103 +33,82 @@ import {
|
||||
textEncoder,
|
||||
} from "./crypto.js";
|
||||
|
||||
export class WasmCrypto extends CryptoProvider<Uint8Array> {
|
||||
private constructor(
|
||||
public blake3Instance: Awaited<ReturnType<typeof createBLAKE3>>,
|
||||
) {
|
||||
type Blake3State = Blake3Hasher;
|
||||
|
||||
/**
|
||||
* WebAssembly implementation of the CryptoProvider interface using jazz-crypto-rs.
|
||||
* This provides the primary implementation using WebAssembly for optimal performance, offering:
|
||||
* - Signing/verifying (Ed25519)
|
||||
* - Encryption/decryption (XSalsa20)
|
||||
* - Sealing/unsealing (X25519 + XSalsa20-Poly1305)
|
||||
* - Hashing (BLAKE3)
|
||||
*/
|
||||
export class WasmCrypto extends CryptoProvider<Blake3State> {
|
||||
private constructor() {
|
||||
super();
|
||||
}
|
||||
|
||||
static async create(): Promise<WasmCrypto> {
|
||||
return Promise.all([createBLAKE3(), initBundledOnce()]).then(
|
||||
([blake3instance]) => new WasmCrypto(blake3instance),
|
||||
);
|
||||
return new WasmCrypto();
|
||||
}
|
||||
|
||||
randomBytes(length: number): Uint8Array {
|
||||
return randomBytes(length);
|
||||
emptyBlake3State(): Blake3State {
|
||||
return blake3_empty_state();
|
||||
}
|
||||
|
||||
emptyBlake3State(): Uint8Array {
|
||||
return this.blake3Instance.init().save();
|
||||
}
|
||||
|
||||
cloneBlake3State(state: Uint8Array): Uint8Array {
|
||||
return this.blake3Instance.load(state).save();
|
||||
cloneBlake3State(state: Blake3State): Blake3State {
|
||||
return state.clone();
|
||||
}
|
||||
|
||||
blake3HashOnce(data: Uint8Array) {
|
||||
return this.blake3Instance.init().update(data).digest("binary");
|
||||
return blake3_hash_once(data);
|
||||
}
|
||||
|
||||
blake3HashOnceWithContext(
|
||||
data: Uint8Array,
|
||||
{ context }: { context: Uint8Array },
|
||||
) {
|
||||
return this.blake3Instance
|
||||
.init()
|
||||
.update(context)
|
||||
.update(data)
|
||||
.digest("binary");
|
||||
return blake3_hash_once_with_context(data, context);
|
||||
}
|
||||
|
||||
blake3IncrementalUpdate(state: Uint8Array, data: Uint8Array): Uint8Array {
|
||||
return this.blake3Instance.load(state).update(data).save();
|
||||
blake3IncrementalUpdate(state: Blake3State, data: Uint8Array): Blake3State {
|
||||
state.update(data);
|
||||
return state;
|
||||
}
|
||||
|
||||
blake3DigestForState(state: Uint8Array): Uint8Array {
|
||||
return this.blake3Instance.load(state).digest("binary");
|
||||
blake3DigestForState(state: Blake3State): Uint8Array {
|
||||
return state.finalize();
|
||||
}
|
||||
|
||||
newEd25519SigningKey(): Uint8Array {
|
||||
return new Ed25519SigningKey().to_bytes().copyAndDispose();
|
||||
return new_ed25519_signing_key();
|
||||
}
|
||||
|
||||
getSignerID(secret: SignerSecret): SignerID {
|
||||
return `signer_z${base58.encode(
|
||||
Ed25519SigningKey.from_bytes(
|
||||
new Memory(base58.decode(secret.substring("signerSecret_z".length))),
|
||||
)
|
||||
.public()
|
||||
.to_bytes()
|
||||
.copyAndDispose(),
|
||||
)}`;
|
||||
return get_signer_id(textEncoder.encode(secret)) as SignerID;
|
||||
}
|
||||
|
||||
sign(secret: SignerSecret, message: JsonValue): Signature {
|
||||
const signature = Ed25519SigningKey.from_bytes(
|
||||
new Memory(base58.decode(secret.substring("signerSecret_z".length))),
|
||||
)
|
||||
.sign(new Memory(textEncoder.encode(stableStringify(message))))
|
||||
.to_bytes()
|
||||
.copyAndDispose();
|
||||
return `signature_z${base58.encode(signature)}`;
|
||||
return sign(
|
||||
textEncoder.encode(stableStringify(message)),
|
||||
textEncoder.encode(secret),
|
||||
) as Signature;
|
||||
}
|
||||
|
||||
verify(signature: Signature, message: JsonValue, id: SignerID): boolean {
|
||||
return new Ed25519VerifyingKey(
|
||||
new Memory(base58.decode(id.substring("signer_z".length))),
|
||||
).verify(
|
||||
new Memory(textEncoder.encode(stableStringify(message))),
|
||||
new Ed25519Signature(
|
||||
new Memory(base58.decode(signature.substring("signature_z".length))),
|
||||
),
|
||||
return verify(
|
||||
textEncoder.encode(signature),
|
||||
textEncoder.encode(stableStringify(message)),
|
||||
textEncoder.encode(id),
|
||||
);
|
||||
}
|
||||
|
||||
newX25519StaticSecret(): Uint8Array {
|
||||
return new X25519StaticSecret().to_bytes().copyAndDispose();
|
||||
return new_x25519_private_key();
|
||||
}
|
||||
|
||||
getSealerID(secret: SealerSecret): SealerID {
|
||||
return `sealer_z${base58.encode(
|
||||
X25519StaticSecret.from_bytes(
|
||||
new Memory(base58.decode(secret.substring("sealerSecret_z".length))),
|
||||
)
|
||||
.to_public()
|
||||
.to_bytes()
|
||||
.copyAndDispose(),
|
||||
)}`;
|
||||
return get_sealer_id(textEncoder.encode(secret)) as SealerID;
|
||||
}
|
||||
|
||||
encrypt<T extends JsonValue, N extends JsonValue>(
|
||||
@@ -134,16 +116,13 @@ export class WasmCrypto extends CryptoProvider<Uint8Array> {
|
||||
keySecret: KeySecret,
|
||||
nOnceMaterial: N,
|
||||
): Encrypted<T, N> {
|
||||
const keySecretBytes = base58.decode(
|
||||
keySecret.substring("keySecret_z".length),
|
||||
);
|
||||
const nOnce = this.blake3HashOnce(
|
||||
textEncoder.encode(stableStringify(nOnceMaterial)),
|
||||
).slice(0, 24);
|
||||
|
||||
const plaintext = textEncoder.encode(stableStringify(value));
|
||||
const ciphertext = xsalsa20(keySecretBytes, nOnce, plaintext);
|
||||
return `encrypted_U${bytesToBase64url(ciphertext)}` as Encrypted<T, N>;
|
||||
return `encrypted_U${bytesToBase64url(
|
||||
encrypt(
|
||||
textEncoder.encode(stableStringify(value)),
|
||||
keySecret,
|
||||
textEncoder.encode(stableStringify(nOnceMaterial)),
|
||||
),
|
||||
)}` as Encrypted<T, N>;
|
||||
}
|
||||
|
||||
decryptRaw<T extends JsonValue, N extends JsonValue>(
|
||||
@@ -151,19 +130,13 @@ export class WasmCrypto extends CryptoProvider<Uint8Array> {
|
||||
keySecret: KeySecret,
|
||||
nOnceMaterial: N,
|
||||
): Stringified<T> {
|
||||
const keySecretBytes = base58.decode(
|
||||
keySecret.substring("keySecret_z".length),
|
||||
);
|
||||
const nOnce = this.blake3HashOnce(
|
||||
textEncoder.encode(stableStringify(nOnceMaterial)),
|
||||
).slice(0, 24);
|
||||
|
||||
const ciphertext = base64URLtoBytes(
|
||||
encrypted.substring("encrypted_U".length),
|
||||
);
|
||||
const plaintext = xsalsa20(keySecretBytes, nOnce, ciphertext);
|
||||
|
||||
return textDecoder.decode(plaintext) as Stringified<T>;
|
||||
return textDecoder.decode(
|
||||
decrypt(
|
||||
base64URLtoBytes(encrypted.substring("encrypted_U".length)),
|
||||
keySecret,
|
||||
textEncoder.encode(stableStringify(nOnceMaterial)),
|
||||
),
|
||||
) as Stringified<T>;
|
||||
}
|
||||
|
||||
seal<T extends JsonValue>({
|
||||
@@ -177,26 +150,14 @@ export class WasmCrypto extends CryptoProvider<Uint8Array> {
|
||||
to: SealerID;
|
||||
nOnceMaterial: { in: RawCoID; tx: TransactionID };
|
||||
}): Sealed<T> {
|
||||
const nOnce = this.blake3HashOnce(
|
||||
textEncoder.encode(stableStringify(nOnceMaterial)),
|
||||
).slice(0, 24);
|
||||
|
||||
const sealerPub = base58.decode(to.substring("sealer_z".length));
|
||||
|
||||
const senderPriv = base58.decode(from.substring("sealerSecret_z".length));
|
||||
|
||||
const plaintext = textEncoder.encode(stableStringify(message));
|
||||
|
||||
const sharedSecret = X25519StaticSecret.from_bytes(new Memory(senderPriv))
|
||||
.diffie_hellman(X25519PublicKey.from_bytes(new Memory(sealerPub)))
|
||||
.to_bytes()
|
||||
.copyAndDispose();
|
||||
|
||||
const sealedBytes = xsalsa20_poly1305(sharedSecret, nOnce).encrypt(
|
||||
plaintext,
|
||||
);
|
||||
|
||||
return `sealed_U${bytesToBase64url(sealedBytes)}` as Sealed<T>;
|
||||
return `sealed_U${bytesToBase64url(
|
||||
seal(
|
||||
textEncoder.encode(stableStringify(message)),
|
||||
from,
|
||||
to,
|
||||
textEncoder.encode(stableStringify(nOnceMaterial)),
|
||||
),
|
||||
)}` as Sealed<T>;
|
||||
}
|
||||
|
||||
unseal<T extends JsonValue>(
|
||||
@@ -205,31 +166,21 @@ export class WasmCrypto extends CryptoProvider<Uint8Array> {
|
||||
from: SealerID,
|
||||
nOnceMaterial: { in: RawCoID; tx: TransactionID },
|
||||
): T | undefined {
|
||||
const nOnce = this.blake3HashOnce(
|
||||
textEncoder.encode(stableStringify(nOnceMaterial)),
|
||||
).slice(0, 24);
|
||||
|
||||
const sealerPriv = base58.decode(sealer.substring("sealerSecret_z".length));
|
||||
|
||||
const senderPub = base58.decode(from.substring("sealer_z".length));
|
||||
|
||||
const sealedBytes = base64URLtoBytes(sealed.substring("sealed_U".length));
|
||||
|
||||
const sharedSecret = X25519StaticSecret.from_bytes(new Memory(sealerPriv))
|
||||
.diffie_hellman(X25519PublicKey.from_bytes(new Memory(senderPub)))
|
||||
.to_bytes()
|
||||
.copyAndDispose();
|
||||
|
||||
const plaintext = xsalsa20_poly1305(sharedSecret, nOnce).decrypt(
|
||||
sealedBytes,
|
||||
const plaintext = textDecoder.decode(
|
||||
unseal(
|
||||
base64URLtoBytes(sealed.substring("sealed_U".length)),
|
||||
sealer,
|
||||
from,
|
||||
textEncoder.encode(stableStringify(nOnceMaterial)),
|
||||
),
|
||||
);
|
||||
|
||||
try {
|
||||
return JSON.parse(textDecoder.decode(plaintext));
|
||||
return JSON.parse(plaintext) as T;
|
||||
} catch (e) {
|
||||
logger.error(
|
||||
"Failed to decrypt/parse sealed message: " + (e as Error)?.message,
|
||||
);
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { randomBytes } from "@noble/ciphers/webcrypto/utils";
|
||||
import { base58 } from "@scure/base";
|
||||
import { RawAccountID } from "../coValues/account.js";
|
||||
import { AgentID, RawCoID, TransactionID } from "../ids.js";
|
||||
@@ -21,7 +22,9 @@ export const textDecoder = new TextDecoder();
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
export abstract class CryptoProvider<Blake3State = any> {
|
||||
abstract randomBytes(length: number): Uint8Array;
|
||||
randomBytes(length: number): Uint8Array {
|
||||
return randomBytes(length);
|
||||
}
|
||||
|
||||
abstract newEd25519SigningKey(): Uint8Array;
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ import { xsalsa20_poly1305 } from "@noble/ciphers/salsa";
|
||||
import { x25519 } from "@noble/curves/ed25519";
|
||||
import { blake3 } from "@noble/hashes/blake3";
|
||||
import { base58, base64url } from "@scure/base";
|
||||
import { expect, test } from "vitest";
|
||||
import { expect, test, vi } from "vitest";
|
||||
import { PureJSCrypto } from "../crypto/PureJSCrypto.js";
|
||||
import { WasmCrypto } from "../crypto/WasmCrypto.js";
|
||||
import { SessionID } from "../ids.js";
|
||||
@@ -186,4 +186,46 @@ const pureJSCrypto = await PureJSCrypto.create();
|
||||
|
||||
expect(decrypted).toBeUndefined();
|
||||
});
|
||||
|
||||
test(`Unsealing malformed JSON logs error [${name}]`, () => {
|
||||
const data = "not valid json";
|
||||
const sender = crypto.newRandomSealer();
|
||||
const sealer = crypto.newRandomSealer();
|
||||
|
||||
const consoleSpy = vi.spyOn(console, "error").mockImplementation(() => {});
|
||||
|
||||
const nOnceMaterial = {
|
||||
in: "co_zTEST",
|
||||
tx: { sessionID: "co_zTEST_session_zTEST" as SessionID, txIndex: 0 },
|
||||
} as const;
|
||||
|
||||
// Create a sealed message with invalid JSON
|
||||
const nOnce = blake3(
|
||||
new TextEncoder().encode(stableStringify(nOnceMaterial)),
|
||||
).slice(0, 24);
|
||||
|
||||
const senderPriv = base58.decode(sender.substring("sealerSecret_z".length));
|
||||
const sealerPub = base58.decode(
|
||||
crypto.getSealerID(sealer).substring("sealer_z".length),
|
||||
);
|
||||
|
||||
const plaintext = new TextEncoder().encode(data);
|
||||
const sharedSecret = x25519.getSharedSecret(senderPriv, sealerPub);
|
||||
const sealedBytes = xsalsa20_poly1305(sharedSecret, nOnce).encrypt(
|
||||
plaintext,
|
||||
);
|
||||
const sealed = `sealed_U${base64url.encode(sealedBytes)}`;
|
||||
|
||||
const result = crypto.unseal(
|
||||
sealed as any,
|
||||
sealer,
|
||||
crypto.getSealerID(sender),
|
||||
nOnceMaterial,
|
||||
);
|
||||
|
||||
expect(result).toBeUndefined();
|
||||
expect(consoleSpy.mock.lastCall?.[0]).toContain(
|
||||
"Failed to decrypt/parse sealed message",
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -7,7 +7,7 @@ import { SessionID } from "../ids.js";
|
||||
describe.each([
|
||||
{ impl: await WasmCrypto.create(), name: "Wasm" },
|
||||
{ impl: await PureJSCrypto.create(), name: "PureJS" },
|
||||
])("Crypto $name", ({ impl }) => {
|
||||
])("$name implementation", ({ impl, name }) => {
|
||||
test("randomBytes", () => {
|
||||
expect(impl.randomBytes(32).length).toEqual(32);
|
||||
});
|
||||
|
||||
@@ -1,43 +1,49 @@
|
||||
# hash-slash
|
||||
|
||||
## 0.2.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 1d71ca1: Add React 19 to the peer dependencies
|
||||
|
||||
## 0.2.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Parent-frame friendlier naviation
|
||||
- Parent-frame friendlier naviation
|
||||
|
||||
## 0.2.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- e299c3e: New simplified API
|
||||
- e299c3e: New simplified API
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 60d5ca2: Allow fall-through of routes
|
||||
- 69ac514: Use effect schema much less
|
||||
- 627d895: Get rid of Co namespace
|
||||
- 60d5ca2: Allow fall-through of routes
|
||||
- 69ac514: Use effect schema much less
|
||||
- 627d895: Get rid of Co namespace
|
||||
|
||||
## 0.2.0-alpha.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Allow fall-through of routes
|
||||
- Allow fall-through of routes
|
||||
|
||||
## 0.2.0-alpha.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Get rid of Co namespace
|
||||
- Get rid of Co namespace
|
||||
|
||||
## 0.2.0-alpha.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Use effect schema much less
|
||||
- Use effect schema much less
|
||||
|
||||
## 0.2.0-alpha.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- New simplified API
|
||||
- New simplified API
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "hash-slash",
|
||||
"version": "0.2.1",
|
||||
"version": "0.2.2",
|
||||
"type": "module",
|
||||
"main": "dist/index.js",
|
||||
"types": "src/index.tsx",
|
||||
@@ -11,7 +11,7 @@
|
||||
"typescript": "~5.6.2"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": "17 - 18"
|
||||
"react": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
||||
},
|
||||
"scripts": {
|
||||
"dev": "tsc --watch --sourceMap --outDir dist",
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
# jazz-browser-media-images
|
||||
|
||||
## 0.10.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [5c76e37]
|
||||
- Updated dependencies [ada802b]
|
||||
- cojson@0.10.6
|
||||
- jazz-tools@0.10.6
|
||||
- jazz-browser@0.10.6
|
||||
|
||||
## 0.10.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
{
|
||||
"name": "jazz-auth-clerk",
|
||||
"version": "0.10.5",
|
||||
"version": "0.10.6",
|
||||
"type": "module",
|
||||
"main": "dist/index.js",
|
||||
"types": "src/index.ts",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"cojson": "workspace:0.10.4",
|
||||
"jazz-browser": "workspace:0.10.5",
|
||||
"jazz-tools": "workspace:0.10.5"
|
||||
"cojson": "workspace:0.10.6",
|
||||
"jazz-browser": "workspace:0.10.6",
|
||||
"jazz-tools": "workspace:0.10.6"
|
||||
},
|
||||
"scripts": {
|
||||
"format-and-lint": "biome check .",
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# jazz-browser-media-images
|
||||
|
||||
## 0.10.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [ada802b]
|
||||
- jazz-tools@0.10.6
|
||||
- jazz-browser@0.10.6
|
||||
|
||||
## 0.10.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jazz-browser-media-images",
|
||||
"version": "0.10.5",
|
||||
"version": "0.10.6",
|
||||
"type": "module",
|
||||
"main": "dist/index.js",
|
||||
"types": "src/index.ts",
|
||||
@@ -8,8 +8,8 @@
|
||||
"dependencies": {
|
||||
"@types/image-blob-reduce": "^4.1.1",
|
||||
"image-blob-reduce": "^4.1.0",
|
||||
"jazz-browser": "workspace:0.10.5",
|
||||
"jazz-tools": "workspace:0.10.5",
|
||||
"jazz-browser": "workspace:0.10.6",
|
||||
"jazz-tools": "workspace:0.10.6",
|
||||
"pica": "^9.0.1",
|
||||
"typescript": "~5.6.2"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
# jazz-browser
|
||||
|
||||
## 0.10.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [5c76e37]
|
||||
- Updated dependencies [ada802b]
|
||||
- cojson@0.10.6
|
||||
- jazz-tools@0.10.6
|
||||
- cojson-storage-indexeddb@0.10.6
|
||||
- cojson-transport-ws@0.10.6
|
||||
|
||||
## 0.10.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jazz-browser",
|
||||
"version": "0.10.5",
|
||||
"version": "0.10.6",
|
||||
"type": "module",
|
||||
"main": "dist/index.js",
|
||||
"types": "src/index.ts",
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
# jazz-inspector
|
||||
|
||||
## 0.10.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1d71ca1]
|
||||
- Updated dependencies [5c76e37]
|
||||
- Updated dependencies [ada802b]
|
||||
- jazz-react-core@0.10.6
|
||||
- cojson@0.10.6
|
||||
- jazz-tools@0.10.6
|
||||
|
||||
## 0.10.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jazz-inspector",
|
||||
"version": "0.10.5",
|
||||
"version": "0.10.6",
|
||||
"type": "module",
|
||||
"main": "./dist/app.js",
|
||||
"types": "./dist/app.d.ts",
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
# jazz-autosub
|
||||
|
||||
## 0.10.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [5c76e37]
|
||||
- Updated dependencies [ada802b]
|
||||
- cojson@0.10.6
|
||||
- jazz-tools@0.10.6
|
||||
- cojson-transport-ws@0.10.6
|
||||
|
||||
## 0.10.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"types": "src/index.ts",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"version": "0.10.5",
|
||||
"version": "0.10.6",
|
||||
"dependencies": {
|
||||
"cojson": "workspace:*",
|
||||
"cojson-transport-ws": "workspace:*",
|
||||
|
||||
@@ -1,5 +1,18 @@
|
||||
# jazz-browser-media-images
|
||||
|
||||
## 0.10.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 1d71ca1: Add React 19 to the peer dependencies
|
||||
- Updated dependencies [1d71ca1]
|
||||
- Updated dependencies [5c76e37]
|
||||
- Updated dependencies [ada802b]
|
||||
- jazz-react@0.10.6
|
||||
- cojson@0.10.6
|
||||
- jazz-tools@0.10.6
|
||||
- jazz-auth-clerk@0.10.6
|
||||
|
||||
## 0.10.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jazz-react-auth-clerk",
|
||||
"version": "0.10.5",
|
||||
"version": "0.10.6",
|
||||
"type": "module",
|
||||
"main": "dist/index.js",
|
||||
"types": "src/index.tsx",
|
||||
@@ -12,7 +12,7 @@
|
||||
"jazz-tools": "workspace:*"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": "^18.2.0"
|
||||
"react": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
||||
},
|
||||
"scripts": {
|
||||
"format-and-lint": "biome check .",
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
# jazz-react-core
|
||||
|
||||
## 0.10.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 1d71ca1: Add React 19 to the peer dependencies
|
||||
- Updated dependencies [5c76e37]
|
||||
- Updated dependencies [ada802b]
|
||||
- cojson@0.10.6
|
||||
- jazz-tools@0.10.6
|
||||
|
||||
## 0.10.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jazz-react-core",
|
||||
"version": "0.10.5",
|
||||
"version": "0.10.6",
|
||||
"type": "module",
|
||||
"main": "dist/index.js",
|
||||
"types": "src/index.ts",
|
||||
@@ -30,8 +30,8 @@
|
||||
"typescript": "~5.6.2"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": "^17.0.0 || ^18.0.0",
|
||||
"react-dom": "^17.0.0 || ^18.0.0"
|
||||
"react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
||||
"react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
||||
},
|
||||
"scripts": {
|
||||
"dev": "tsc --watch --sourceMap --outDir dist",
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
# jazz-react-native-auth-clerk
|
||||
|
||||
## 0.10.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [5c76e37]
|
||||
- Updated dependencies [ada802b]
|
||||
- cojson@0.10.6
|
||||
- jazz-tools@0.10.6
|
||||
- jazz-react-native@0.10.6
|
||||
- jazz-auth-clerk@0.10.6
|
||||
|
||||
## 0.10.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jazz-react-native-auth-clerk",
|
||||
"version": "0.10.5",
|
||||
"version": "0.10.6",
|
||||
"type": "module",
|
||||
"main": "dist/index.js",
|
||||
"types": "src/index.tsx",
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
# jazz-browser-media-images
|
||||
|
||||
## 0.10.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [ada802b]
|
||||
- jazz-tools@0.10.6
|
||||
|
||||
## 0.10.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jazz-react-native-media-images",
|
||||
"version": "0.10.5",
|
||||
"version": "0.10.6",
|
||||
"type": "module",
|
||||
"main": "dist/index.js",
|
||||
"types": "src/index.ts",
|
||||
|
||||
@@ -1,5 +1,18 @@
|
||||
# jazz-browser
|
||||
|
||||
## 0.10.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1d71ca1]
|
||||
- Updated dependencies [5c76e37]
|
||||
- Updated dependencies [ada802b]
|
||||
- jazz-react-core@0.10.6
|
||||
- cojson@0.10.6
|
||||
- jazz-tools@0.10.6
|
||||
- cojson-storage-rn-sqlite@0.8.64
|
||||
- cojson-transport-ws@0.10.6
|
||||
|
||||
## 0.10.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jazz-react-native",
|
||||
"version": "0.10.5",
|
||||
"version": "0.10.6",
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
"module": "./dist/index.js",
|
||||
|
||||
@@ -1,5 +1,18 @@
|
||||
# jazz-react
|
||||
|
||||
## 0.10.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 1d71ca1: Add React 19 to the peer dependencies
|
||||
- Updated dependencies [1d71ca1]
|
||||
- Updated dependencies [5c76e37]
|
||||
- Updated dependencies [ada802b]
|
||||
- jazz-react-core@0.10.6
|
||||
- cojson@0.10.6
|
||||
- jazz-tools@0.10.6
|
||||
- jazz-browser@0.10.6
|
||||
|
||||
## 0.10.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jazz-react",
|
||||
"version": "0.10.5",
|
||||
"version": "0.10.6",
|
||||
"type": "module",
|
||||
"main": "dist/index.js",
|
||||
"types": "src/index.ts",
|
||||
@@ -17,10 +17,10 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@scure/bip39": "^1.3.0",
|
||||
"cojson": "workspace:0.10.4",
|
||||
"jazz-browser": "workspace:0.10.5",
|
||||
"cojson": "workspace:0.10.6",
|
||||
"jazz-browser": "workspace:0.10.6",
|
||||
"jazz-react-core": "workspace:*",
|
||||
"jazz-tools": "workspace:0.10.5"
|
||||
"jazz-tools": "workspace:0.10.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@testing-library/dom": "^10.4.0",
|
||||
@@ -32,8 +32,8 @@
|
||||
"typescript": "~5.6.2"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": "^17.0.0 || ^18.0.0",
|
||||
"react-dom": "^17.0.0 || ^18.0.0"
|
||||
"react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
||||
"react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
||||
},
|
||||
"scripts": {
|
||||
"dev": "tsc --watch --sourceMap --outDir dist",
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
# jazz-run
|
||||
|
||||
## 0.10.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [5c76e37]
|
||||
- Updated dependencies [ada802b]
|
||||
- cojson@0.10.6
|
||||
- jazz-tools@0.10.6
|
||||
- cojson-storage-sqlite@0.10.6
|
||||
- cojson-transport-ws@0.10.6
|
||||
|
||||
## 0.10.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"bin": "./dist/index.js",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"version": "0.10.5",
|
||||
"version": "0.10.6",
|
||||
"exports": {
|
||||
"./startSyncServer": {
|
||||
"import": "./dist/startSyncServer.js",
|
||||
@@ -28,11 +28,11 @@
|
||||
"@effect/printer-ansi": "^0.34.5",
|
||||
"@effect/schema": "^0.71.1",
|
||||
"@effect/typeclass": "^0.25.5",
|
||||
"cojson": "workspace:0.10.4",
|
||||
"cojson-storage-sqlite": "workspace:0.10.4",
|
||||
"cojson-transport-ws": "workspace:0.10.4",
|
||||
"cojson": "workspace:0.10.6",
|
||||
"cojson-storage-sqlite": "workspace:0.10.6",
|
||||
"cojson-transport-ws": "workspace:0.10.6",
|
||||
"effect": "^3.6.5",
|
||||
"jazz-tools": "workspace:0.10.5",
|
||||
"jazz-tools": "workspace:0.10.6",
|
||||
"ws": "^8.14.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
# jazz-svelte
|
||||
|
||||
## 0.10.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [5c76e37]
|
||||
- Updated dependencies [ada802b]
|
||||
- cojson@0.10.6
|
||||
- jazz-tools@0.10.6
|
||||
- jazz-browser@0.10.6
|
||||
|
||||
## 0.10.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jazz-svelte",
|
||||
"version": "0.10.5",
|
||||
"version": "0.10.6",
|
||||
"scripts": {
|
||||
"dev": "vite dev",
|
||||
"build": "vite build && npm run package",
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# jazz-tools
|
||||
|
||||
## 0.10.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- ada802b: Fix Clerk credentials migration
|
||||
- Updated dependencies [5c76e37]
|
||||
- cojson@0.10.6
|
||||
|
||||
## 0.10.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
},
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"version": "0.10.5",
|
||||
"version": "0.10.6",
|
||||
"dependencies": {
|
||||
"@scure/bip39": "^1.3.0",
|
||||
"cojson": "workspace:*"
|
||||
|
||||
@@ -28,16 +28,50 @@ export class AuthSecretStorage {
|
||||
if (!(await kvStore.get(STORAGE_KEY))) {
|
||||
const demoAuthSecret = await kvStore.get("demo-auth-logged-in-secret");
|
||||
if (demoAuthSecret) {
|
||||
await kvStore.set(STORAGE_KEY, demoAuthSecret);
|
||||
const parsed = JSON.parse(demoAuthSecret);
|
||||
await kvStore.set(
|
||||
STORAGE_KEY,
|
||||
JSON.stringify({
|
||||
accountID: parsed.accountID,
|
||||
accountSecret: parsed.accountSecret,
|
||||
provider: "demo",
|
||||
}),
|
||||
);
|
||||
await kvStore.delete("demo-auth-logged-in-secret");
|
||||
}
|
||||
|
||||
const clerkAuthSecret = await kvStore.get("jazz-clerk-auth");
|
||||
if (clerkAuthSecret) {
|
||||
await kvStore.set(STORAGE_KEY, clerkAuthSecret);
|
||||
const parsed = JSON.parse(clerkAuthSecret);
|
||||
await kvStore.set(
|
||||
STORAGE_KEY,
|
||||
JSON.stringify({
|
||||
accountID: parsed.accountID,
|
||||
accountSecret: parsed.secret,
|
||||
provider: "clerk",
|
||||
}),
|
||||
);
|
||||
await kvStore.delete("jazz-clerk-auth");
|
||||
}
|
||||
}
|
||||
|
||||
const value = await kvStore.get(STORAGE_KEY);
|
||||
|
||||
if (value) {
|
||||
const parsed = JSON.parse(value);
|
||||
|
||||
if ("secret" in parsed) {
|
||||
await kvStore.set(
|
||||
STORAGE_KEY,
|
||||
JSON.stringify({
|
||||
accountID: parsed.accountID,
|
||||
secretSeed: parsed.secretSeed,
|
||||
accountSecret: parsed.secret,
|
||||
provider: parsed.provider,
|
||||
}),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async get(): Promise<AuthCredentials | null> {
|
||||
|
||||
@@ -28,20 +28,52 @@ describe("AuthSecretStorage", () => {
|
||||
|
||||
await authSecretStorage.migrate();
|
||||
|
||||
expect(await kvStore.get("jazz-logged-in-secret")).toBe(demoSecret);
|
||||
expect(await kvStore.get("jazz-logged-in-secret")).toBe(
|
||||
JSON.stringify({
|
||||
accountID: "demo123",
|
||||
accountSecret: "secret123",
|
||||
provider: "demo",
|
||||
}),
|
||||
);
|
||||
expect(await kvStore.get("demo-auth-logged-in-secret")).toBeNull();
|
||||
});
|
||||
|
||||
it("should migrate clerk auth secret", async () => {
|
||||
const clerkSecret = JSON.stringify({
|
||||
accountID: "clerk123",
|
||||
accountSecret: "secret123",
|
||||
secret: "secret123",
|
||||
});
|
||||
await kvStore.set("jazz-clerk-auth", clerkSecret);
|
||||
|
||||
await authSecretStorage.migrate();
|
||||
|
||||
expect(await kvStore.get("jazz-logged-in-secret")).toBe(clerkSecret);
|
||||
expect(await kvStore.get("jazz-logged-in-secret")).toBe(
|
||||
JSON.stringify({
|
||||
accountID: "clerk123",
|
||||
accountSecret: "secret123",
|
||||
provider: "clerk",
|
||||
}),
|
||||
);
|
||||
expect(await kvStore.get("jazz-clerk-auth")).toBeNull();
|
||||
});
|
||||
|
||||
it("should migrate auth wrong secret key to accountSecret", async () => {
|
||||
const clerkSecret = JSON.stringify({
|
||||
accountID: "clerk123",
|
||||
secret: "secret123",
|
||||
provider: "clerk",
|
||||
});
|
||||
await kvStore.set("jazz-logged-in-secret", clerkSecret);
|
||||
|
||||
await authSecretStorage.migrate();
|
||||
|
||||
expect(await kvStore.get("jazz-logged-in-secret")).toBe(
|
||||
JSON.stringify({
|
||||
accountID: "clerk123",
|
||||
accountSecret: "secret123",
|
||||
provider: "clerk",
|
||||
}),
|
||||
);
|
||||
expect(await kvStore.get("jazz-clerk-auth")).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -199,7 +199,6 @@ describe("ContextManager", () => {
|
||||
test("the migration should be applied correctly on existing accounts ", async () => {
|
||||
class AccountRoot extends CoMap {
|
||||
value = co.string;
|
||||
transferredRoot = co.optional.ref(AccountRoot);
|
||||
}
|
||||
|
||||
let lastRootId: string | undefined;
|
||||
@@ -236,6 +235,48 @@ describe("ContextManager", () => {
|
||||
expect(me.root.id).toBe(lastRootId);
|
||||
});
|
||||
|
||||
test("the migration should be applied correctly on existing accounts (2)", async () => {
|
||||
class AccountRoot extends CoMap {
|
||||
value = co.number;
|
||||
}
|
||||
|
||||
class CustomAccount extends Account {
|
||||
root = co.ref(AccountRoot);
|
||||
|
||||
async migrate(this: CustomAccount) {
|
||||
if (this.root === undefined) {
|
||||
this.root = AccountRoot.create({
|
||||
value: 1,
|
||||
});
|
||||
} else {
|
||||
const { root } = await this.ensureLoaded({ root: {} });
|
||||
|
||||
root.value = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
const customManager = new TestJazzContextManager<CustomAccount>();
|
||||
|
||||
// Create initial anonymous context
|
||||
await customManager.createContext({
|
||||
AccountSchema: CustomAccount,
|
||||
});
|
||||
|
||||
const account = (
|
||||
customManager.getCurrentValue() as JazzAuthContext<CustomAccount>
|
||||
).me;
|
||||
|
||||
await customManager.authenticate({
|
||||
accountID: account.id,
|
||||
accountSecret: account._raw.core.node.account.agentSecret,
|
||||
provider: "test",
|
||||
});
|
||||
|
||||
const me = await CustomAccount.getMe().ensureLoaded({ root: {} });
|
||||
|
||||
expect(me.root.value).toBe(2);
|
||||
});
|
||||
|
||||
test("onAnonymousAccountDiscarded should work on transfering data between accounts", async () => {
|
||||
class AccountRoot extends CoMap {
|
||||
value = co.string;
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
# jazz-react
|
||||
|
||||
## 0.10.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [5c76e37]
|
||||
- Updated dependencies [ada802b]
|
||||
- cojson@0.10.6
|
||||
- jazz-tools@0.10.6
|
||||
- jazz-browser@0.10.6
|
||||
|
||||
## 0.10.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jazz-vue",
|
||||
"version": "0.10.5",
|
||||
"version": "0.10.6",
|
||||
"type": "module",
|
||||
"main": "dist/index.js",
|
||||
"types": "src/index.ts",
|
||||
|
||||
110
pnpm-lock.yaml
generated
110
pnpm-lock.yaml
generated
@@ -471,7 +471,7 @@ importers:
|
||||
specifier: workspace:*
|
||||
version: link:../../packages/jazz-react
|
||||
jazz-react-auth-clerk:
|
||||
specifier: workspace:0.10.5
|
||||
specifier: workspace:0.10.6
|
||||
version: link:../../packages/jazz-react-auth-clerk
|
||||
jazz-tools:
|
||||
specifier: workspace:*
|
||||
@@ -700,13 +700,13 @@ importers:
|
||||
specifier: ^2.0.0
|
||||
version: 2.1.1
|
||||
cojson:
|
||||
specifier: workspace:0.10.4
|
||||
specifier: workspace:0.10.6
|
||||
version: link:../../packages/cojson
|
||||
cojson-transport-ws:
|
||||
specifier: workspace:0.10.4
|
||||
specifier: workspace:0.10.6
|
||||
version: link:../../packages/cojson-transport-ws
|
||||
hash-slash:
|
||||
specifier: workspace:0.2.1
|
||||
specifier: workspace:0.2.2
|
||||
version: link:../../packages/hash-slash
|
||||
lucide-react:
|
||||
specifier: ^0.274.0
|
||||
@@ -797,10 +797,10 @@ importers:
|
||||
specifier: workspace:*
|
||||
version: link:../../packages/jazz-inspector
|
||||
jazz-react:
|
||||
specifier: workspace:0.10.5
|
||||
specifier: workspace:0.10.6
|
||||
version: link:../../packages/jazz-react
|
||||
jazz-tools:
|
||||
specifier: workspace:0.10.5
|
||||
specifier: workspace:0.10.6
|
||||
version: link:../../packages/jazz-tools
|
||||
lucide-react:
|
||||
specifier: ^0.274.0
|
||||
@@ -1039,10 +1039,10 @@ importers:
|
||||
examples/password-manager:
|
||||
dependencies:
|
||||
jazz-react:
|
||||
specifier: workspace:0.10.5
|
||||
specifier: workspace:0.10.6
|
||||
version: link:../../packages/jazz-react
|
||||
jazz-tools:
|
||||
specifier: workspace:0.10.5
|
||||
specifier: workspace:0.10.6
|
||||
version: link:../../packages/jazz-tools
|
||||
react:
|
||||
specifier: 18.3.1
|
||||
@@ -1103,13 +1103,13 @@ importers:
|
||||
specifier: ^2.0.0
|
||||
version: 2.1.1
|
||||
jazz-browser-media-images:
|
||||
specifier: workspace:0.10.5
|
||||
specifier: workspace:0.10.6
|
||||
version: link:../../packages/jazz-browser-media-images
|
||||
jazz-react:
|
||||
specifier: workspace:0.10.5
|
||||
specifier: workspace:0.10.6
|
||||
version: link:../../packages/jazz-react
|
||||
jazz-tools:
|
||||
specifier: workspace:0.10.5
|
||||
specifier: workspace:0.10.6
|
||||
version: link:../../packages/jazz-tools
|
||||
lucide-react:
|
||||
specifier: ^0.274.0
|
||||
@@ -1164,7 +1164,7 @@ importers:
|
||||
specifier: ^3.0.1
|
||||
version: 3.0.1
|
||||
jazz-run:
|
||||
specifier: workspace:0.10.5
|
||||
specifier: workspace:0.10.6
|
||||
version: link:../../packages/jazz-run
|
||||
postcss:
|
||||
specifier: ^8.4.27
|
||||
@@ -1243,10 +1243,10 @@ importers:
|
||||
specifier: ^2.0.0
|
||||
version: 2.1.1
|
||||
jazz-react:
|
||||
specifier: workspace:0.10.5
|
||||
specifier: workspace:0.10.6
|
||||
version: link:../../packages/jazz-react
|
||||
jazz-tools:
|
||||
specifier: workspace:0.10.5
|
||||
specifier: workspace:0.10.6
|
||||
version: link:../../packages/jazz-tools
|
||||
lucide-react:
|
||||
specifier: ^0.274.0
|
||||
@@ -1413,9 +1413,6 @@ importers:
|
||||
|
||||
packages/cojson:
|
||||
dependencies:
|
||||
'@hazae41/berith':
|
||||
specifier: ^1.2.6
|
||||
version: 1.2.6
|
||||
'@noble/ciphers':
|
||||
specifier: ^0.1.3
|
||||
version: 0.1.4
|
||||
@@ -1431,9 +1428,9 @@ importers:
|
||||
'@scure/base':
|
||||
specifier: 1.2.1
|
||||
version: 1.2.1
|
||||
hash-wasm:
|
||||
specifier: ^4.9.0
|
||||
version: 4.12.0
|
||||
jazz-crypto-rs:
|
||||
specifier: 0.0.3
|
||||
version: 0.0.3
|
||||
neverthrow:
|
||||
specifier: ^7.0.1
|
||||
version: 7.2.0
|
||||
@@ -1508,7 +1505,7 @@ importers:
|
||||
specifier: ^11.7.0
|
||||
version: 11.7.0
|
||||
cojson:
|
||||
specifier: workspace:0.10.4
|
||||
specifier: workspace:0.10.6
|
||||
version: link:../cojson
|
||||
cojson-storage:
|
||||
specifier: workspace:*
|
||||
@@ -1583,13 +1580,13 @@ importers:
|
||||
packages/jazz-auth-clerk:
|
||||
dependencies:
|
||||
cojson:
|
||||
specifier: workspace:0.10.4
|
||||
specifier: workspace:0.10.6
|
||||
version: link:../cojson
|
||||
jazz-browser:
|
||||
specifier: workspace:0.10.5
|
||||
specifier: workspace:0.10.6
|
||||
version: link:../jazz-browser
|
||||
jazz-tools:
|
||||
specifier: workspace:0.10.5
|
||||
specifier: workspace:0.10.6
|
||||
version: link:../jazz-tools
|
||||
devDependencies:
|
||||
typescript:
|
||||
@@ -1627,10 +1624,10 @@ importers:
|
||||
specifier: ^4.1.0
|
||||
version: 4.1.0
|
||||
jazz-browser:
|
||||
specifier: workspace:0.10.5
|
||||
specifier: workspace:0.10.6
|
||||
version: link:../jazz-browser
|
||||
jazz-tools:
|
||||
specifier: workspace:0.10.5
|
||||
specifier: workspace:0.10.6
|
||||
version: link:../jazz-tools
|
||||
pica:
|
||||
specifier: ^9.0.1
|
||||
@@ -1702,16 +1699,16 @@ importers:
|
||||
specifier: ^1.3.0
|
||||
version: 1.5.0
|
||||
cojson:
|
||||
specifier: workspace:0.10.4
|
||||
specifier: workspace:0.10.6
|
||||
version: link:../cojson
|
||||
jazz-browser:
|
||||
specifier: workspace:0.10.5
|
||||
specifier: workspace:0.10.6
|
||||
version: link:../jazz-browser
|
||||
jazz-react-core:
|
||||
specifier: workspace:*
|
||||
version: link:../jazz-react-core
|
||||
jazz-tools:
|
||||
specifier: workspace:0.10.5
|
||||
specifier: workspace:0.10.6
|
||||
version: link:../jazz-tools
|
||||
devDependencies:
|
||||
'@testing-library/dom':
|
||||
@@ -1894,19 +1891,19 @@ importers:
|
||||
specifier: ^0.25.5
|
||||
version: 0.25.8(effect@3.11.9)
|
||||
cojson:
|
||||
specifier: workspace:0.10.4
|
||||
specifier: workspace:0.10.6
|
||||
version: link:../cojson
|
||||
cojson-storage-sqlite:
|
||||
specifier: workspace:0.10.4
|
||||
specifier: workspace:0.10.6
|
||||
version: link:../cojson-storage-sqlite
|
||||
cojson-transport-ws:
|
||||
specifier: workspace:0.10.4
|
||||
specifier: workspace:0.10.6
|
||||
version: link:../cojson-transport-ws
|
||||
effect:
|
||||
specifier: ^3.6.5
|
||||
version: 3.11.9
|
||||
jazz-tools:
|
||||
specifier: workspace:0.10.5
|
||||
specifier: workspace:0.10.6
|
||||
version: link:../jazz-tools
|
||||
ws:
|
||||
specifier: ^8.14.2
|
||||
@@ -3637,18 +3634,6 @@ packages:
|
||||
'@formkit/auto-animate@0.8.2':
|
||||
resolution: {integrity: sha512-SwPWfeRa5veb1hOIBMdzI+73te5puUBHmqqaF1Bu7FjvxlYSz/kJcZKSa9Cg60zL0uRNeJL2SbRxV6Jp6Q1nFQ==}
|
||||
|
||||
'@hazae41/berith@1.2.6':
|
||||
resolution: {integrity: sha512-TQLkisoolGD2kdSQVtTVXNwmsotA9dLmUgXcpHTNzssmN11Mp+vHVf4Myn3+Q4U18Na3UzGi6DZqogZFqjPPvg==}
|
||||
|
||||
'@hazae41/box@1.0.14':
|
||||
resolution: {integrity: sha512-RevIMZBVRmp0BDkpBpL77sr3Rk7XdqzBZcw+UsfUT4JAly/sryM/NDzJa80sMyO6aERJkjHUQaxH5DYDznPhkw==}
|
||||
|
||||
'@hazae41/option@1.1.4':
|
||||
resolution: {integrity: sha512-ZGAVkOJJw2YIeihG8PaWs4R3KDloCgWGNDPqbATvT3kTtoyU+dJmya/UCM2P+ZwCfWYpE7nGiYJbBTlpp929Qg==}
|
||||
|
||||
'@hazae41/result@1.3.2':
|
||||
resolution: {integrity: sha512-X2RdjCC4DypMZFN3aZ7P5Zh8kEMN6SEqcMARRa/CraEU7Es/hj0yBh1Pt5eAYrRkpnWiE9+ohKSU4s7nL5L1gg==}
|
||||
|
||||
'@humanfs/core@0.19.1':
|
||||
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
|
||||
engines: {node: '>=18.18.0'}
|
||||
@@ -7475,9 +7460,6 @@ packages:
|
||||
resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
hash-wasm@4.12.0:
|
||||
resolution: {integrity: sha512-+/2B2rYLb48I/evdOIhP+K/DD2ca2fgBjp6O+GBEnCDk2e4rpeXIK8GvIyRPjTezgmWn9gmKwkQjjx6BtqDHVQ==}
|
||||
|
||||
hasown@2.0.2:
|
||||
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
|
||||
engines: {node: '>= 0.4'}
|
||||
@@ -7876,6 +7858,9 @@ packages:
|
||||
jackspeak@3.4.3:
|
||||
resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
|
||||
|
||||
jazz-crypto-rs@0.0.3:
|
||||
resolution: {integrity: sha512-b8yDOUQCRoOdH1KrIQsAIdhZqXcOgpCLGY93/NZEWqimFeGGKAQY7KRXNQtXndKN0jC1y/TH8a8Vxsf0T0+yqQ==}
|
||||
|
||||
jest-changed-files@29.7.0:
|
||||
resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==}
|
||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
||||
@@ -13440,22 +13425,6 @@ snapshots:
|
||||
|
||||
'@formkit/auto-animate@0.8.2': {}
|
||||
|
||||
'@hazae41/berith@1.2.6':
|
||||
dependencies:
|
||||
'@hazae41/box': 1.0.14
|
||||
|
||||
'@hazae41/box@1.0.14':
|
||||
dependencies:
|
||||
'@hazae41/result': 1.3.2
|
||||
|
||||
'@hazae41/option@1.1.4':
|
||||
dependencies:
|
||||
'@hazae41/result': 1.3.2
|
||||
|
||||
'@hazae41/result@1.3.2':
|
||||
dependencies:
|
||||
'@hazae41/option': 1.1.4
|
||||
|
||||
'@humanfs/core@0.19.1': {}
|
||||
|
||||
'@humanfs/node@0.16.6':
|
||||
@@ -17834,8 +17803,6 @@ snapshots:
|
||||
dependencies:
|
||||
has-symbols: 1.1.0
|
||||
|
||||
hash-wasm@4.12.0: {}
|
||||
|
||||
hasown@2.0.2:
|
||||
dependencies:
|
||||
function-bind: 1.1.2
|
||||
@@ -18208,6 +18175,8 @@ snapshots:
|
||||
optionalDependencies:
|
||||
'@pkgjs/parseargs': 0.11.0
|
||||
|
||||
jazz-crypto-rs@0.0.3: {}
|
||||
|
||||
jest-changed-files@29.7.0:
|
||||
dependencies:
|
||||
execa: 5.1.1
|
||||
@@ -21777,16 +21746,15 @@ snapshots:
|
||||
dependencies:
|
||||
vite: 6.0.11(@types/node@22.10.2)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.37.0)(yaml@2.6.1)
|
||||
|
||||
vite-node@3.0.5(@types/node@22.10.2)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.37.0)(yaml@2.6.1):
|
||||
vite-node@3.0.5(@types/node@22.10.2)(lightningcss@1.29.1)(terser@5.37.0):
|
||||
dependencies:
|
||||
cac: 6.7.14
|
||||
debug: 4.4.0
|
||||
es-module-lexer: 1.6.0
|
||||
pathe: 2.0.2
|
||||
vite: 6.0.11(@types/node@22.10.2)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.37.0)(yaml@2.6.1)
|
||||
vite: 5.4.11(@types/node@22.10.2)(lightningcss@1.29.1)(terser@5.37.0)
|
||||
transitivePeerDependencies:
|
||||
- '@types/node'
|
||||
- jiti
|
||||
- less
|
||||
- lightningcss
|
||||
- sass
|
||||
@@ -21795,8 +21763,6 @@ snapshots:
|
||||
- sugarss
|
||||
- supports-color
|
||||
- terser
|
||||
- tsx
|
||||
- yaml
|
||||
|
||||
vite-plugin-dts@4.4.0(@types/node@22.10.2)(rollup@4.28.1)(typescript@5.6.3)(vite@6.0.11(@types/node@22.10.2)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.37.0)(yaml@2.6.1)):
|
||||
dependencies:
|
||||
@@ -21922,7 +21888,7 @@ snapshots:
|
||||
tinypool: 1.0.2
|
||||
tinyrainbow: 2.0.0
|
||||
vite: 6.0.11(@types/node@22.10.2)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.37.0)(yaml@2.6.1)
|
||||
vite-node: 3.0.5(@types/node@22.10.2)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.37.0)(yaml@2.6.1)
|
||||
vite-node: 3.0.5(@types/node@22.10.2)(lightningcss@1.29.1)(terser@5.37.0)
|
||||
why-is-node-running: 2.3.0
|
||||
optionalDependencies:
|
||||
'@types/node': 22.10.2
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user