Compare commits

...

89 Commits

Author SHA1 Message Date
Benjamin S. Leveritt
3d9abdb6d2 More tweaks to the copy 2025-02-19 11:52:59 +00:00
Benjamin S. Leveritt
13adf9f346 Tweaks copy 2025-02-19 10:05:25 +00:00
Trisha Lim
64bb9ba90e Fix typo 2025-02-19 10:04:26 +00:00
Trisha Lim
f136dfe39b Update docs intro LLM section 2025-02-19 10:04:26 +00:00
Trisha Lim
b32ae6240c Use llms-full.txt, add chatgpt screenshot 2025-02-19 10:04:26 +00:00
Trisha Lim
fc4a89f77f Add llms section to docs 2025-02-19 10:04:26 +00:00
Guido D'Orsi
7a6f8db509 Merge pull request #1420 from garden-co/mini-inspector-improvements
[inspector] Add global search and json viewer
2025-02-19 10:42:28 +01:00
Guido D'Orsi
086b9af565 Merge pull request #1422 from garden-co/jazz-723-docs-intro-broken-links
Fix missing framework param in docs links
2025-02-19 08:56:12 +01:00
Trisha Lim
5e95d8b76e Refactor useFramework 2025-02-19 14:25:11 +07:00
Trisha Lim
47e0b68c2e Fix missing framework param in docs links 2025-02-19 14:22:04 +07:00
Tobias Lins
a20e430e7f Add global search and json viewer 2025-02-18 22:15:54 +01:00
Trisha Lim
385659b243 Link to garden from footer 2025-02-18 18:32:43 +07:00
Anselm
88521721bf unpizzazz 😔 2025-02-17 20:35:01 +00:00
Guido D'Orsi
2701630582 Merge pull request #1385 from boorad/fix/rn-polyfills
fix: reduce RN polyfills
2025-02-17 18:50:22 +01:00
Guido D'Orsi
07ce619fa2 Merge pull request #1411 from garden-co/jazz-719-exclued-tsbuildinfo-files
Removes tsbuildinfo files from repo
2025-02-17 18:44:22 +01:00
Guido D'Orsi
895de1a470 Merge pull request #1372 from garden-co/jazz-705-rename-e2e-test-scripts
Jazz 705 rename e2e test scripts
2025-02-17 18:43:59 +01:00
Benjamin S. Leveritt
4450761a7b Removes tsbuildinfo files from repo 2025-02-17 17:14:02 +00:00
Benjamin S. Leveritt
08b3d65c0b Removes onboarding app 2025-02-17 17:08:28 +00:00
Benjamin S. Leveritt
5dac731f26 Gitignore test failure screenshots 2025-02-17 17:06:56 +00:00
Benjamin S. Leveritt
e99308cda2 Revert vite test workspace
...for now...
2025-02-17 17:05:10 +00:00
Guido D'Orsi
88e314d980 Merge pull request #1400 from garden-co/changeset-release/main
Version Packages
2025-02-17 18:00:56 +01:00
github-actions[bot]
62e0e5d721 Version Packages 2025-02-17 16:35:06 +00:00
Guido D'Orsi
aa16ad9c1c Merge pull request #1408 from garden-co/fix/clerk-auth-migration
fix: fixes the clerk credentials migration
2025-02-17 17:33:15 +01:00
Guido D'Orsi
ada802bff8 fix: fixes the clerk credentials migration 2025-02-17 17:16:19 +01:00
Benjamin S. Leveritt
44e1d140ca Builds dependencies for tests (rather than the package; read: faster) 2025-02-17 15:39:05 +00:00
Benjamin S. Leveritt
e0ef3fc1de Removes browser-integration from vite workspace
Vite treats it as a src package, and that breaks turbo's test task resolution (running tests at the root level). Vitest doesn't need it to be there to run the tests.
2025-02-17 15:39:05 +00:00
Benjamin S. Leveritt
a31ac66213 Fixes headless run of browser-integration tests 2025-02-17 15:39:05 +00:00
Benjamin S. Leveritt
b444b2e96a Renames e2e tests to separate from test task 2025-02-17 15:39:05 +00:00
Benjamin S. Leveritt
8fcc4b5e50 Runs turbo tests as in CI (ie. no watching) 2025-02-17 15:39:05 +00:00
Benjamin S. Leveritt
33bfbee9cf Removes unused test command 2025-02-17 15:39:05 +00:00
Benjamin S. Leveritt
d08e4e263b Fixes project jazz-auth-clerk name for tests 2025-02-17 15:39:05 +00:00
Benjamin S. Leveritt
471b8c6a15 Merge pull request #1405 from garden-co/jazz-716-fix-turbo-caching-of-llm-content
Adds llms.txt to turbo build output cache
2025-02-17 15:18:11 +00:00
Benjamin S. Leveritt
7dd080d907 Merge pull request #1401 from garden-co/jazz-714-add-turbo-to-nix-dev-environment
Updates flake, adds turbo dep
2025-02-17 15:07:44 +00:00
Benjamin S. Leveritt
69c81a3e90 Adds llms.txt to turbo build output cache 2025-02-17 15:06:53 +00:00
Benjamin S. Leveritt
d8ed987461 Merge pull request #1406 from garden-co/fix/missing-icon
Fix missing icon
2025-02-17 15:06:39 +00:00
Trisha Lim
beb45c2656 Fix missing icon 2025-02-17 15:06:11 +00:00
Brad Anderson
e6241dfb5a fix: reduce RN polyfills 2025-02-17 09:39:01 -05:00
Guido D'Orsi
1d71ca1511 feat: add React 19 to the peerDependencies 2025-02-17 15:32:04 +01:00
Benjamin S. Leveritt
65941c7f87 Updates flake, adds turbo dep 2025-02-17 12:07:23 +00:00
Guido D'Orsi
a37dc1c22f test: cover another case on existing account migrations 2025-02-17 13:01:59 +01:00
Benjamin S. Leveritt
774f232390 Merge pull request #1307 from garden-co/jazz-679-create-crypto-rust-crate
Jazz 679 Use jazz-crypto-rs
2025-02-17 12:00:46 +00:00
Benjamin S. Leveritt
12c19fc940 Merge pull request #1396 from garden-co/jazz-713-fix-llms-fulltxt-content
Fixes llms-full.txt, adds sanity tests
2025-02-17 11:56:29 +00:00
Benjamin S. Leveritt
338f5421f4 Adds test task 2025-02-17 11:26:38 +00:00
Benjamin S. Leveritt
e0daca300b Fixes llms-full.txt, adds sanity tests 2025-02-17 11:07:16 +00:00
Benjamin S. Leveritt
5c76e37f14 Adds changeset 2025-02-12 21:35:05 +00:00
Benjamin S. Leveritt
0117d0c9b9 Bumps jazz-crypto version 2025-02-12 21:21:34 +00:00
Benjamin S. Leveritt
b90c766c05 Cleans up WasmCrypto.create 2025-02-12 21:21:13 +00:00
Benjamin S. Leveritt
262a36e456 Bumps dep 2025-02-12 20:20:27 +00:00
Benjamin S. Leveritt
cb1df65beb Refactors to use stateful Blake3Hasher 2025-02-12 20:20:26 +00:00
Benjamin S. Leveritt
ea91e63ff2 Bumps jazz-crypto-rs version 2025-02-12 20:20:26 +00:00
Benjamin S. Leveritt
8eae2eb31e Fixes test 2025-02-12 20:20:26 +00:00
Benjamin S. Leveritt
c9044f5123 Adds npm dep 2025-02-12 20:20:26 +00:00
Benjamin S. Leveritt
24340173fa Picks up that can
#riseandshinemrfreeman
2025-02-12 20:19:48 +00:00
Benjamin S. Leveritt
53e88993a0 Moves jazz-crypto-rs into own repo 2025-02-12 20:18:47 +00:00
Benjamin S. Leveritt
ece168878b Use external dep 2025-02-12 20:18:47 +00:00
Benjamin S. Leveritt
cad84db52b Adds comments 2025-02-12 20:18:47 +00:00
Benjamin S. Leveritt
342a385111 Simplifies build process 2025-02-12 20:18:47 +00:00
Benjamin S. Leveritt
f87ba7d927 Fixes seal port 2025-02-12 20:18:47 +00:00
Benjamin S. Leveritt
7c7f55b85c Ports high-level encrypt and decrypt fns 2025-02-12 20:18:46 +00:00
Benjamin S. Leveritt
0e5b9f5292 Fixes unused lint 2025-02-12 20:18:46 +00:00
Benjamin S. Leveritt
2f5af3dece Ports get_sealer_id 2025-02-12 20:18:46 +00:00
Benjamin S. Leveritt
2c35e2ba85 Ports signing fns 2025-02-12 20:18:46 +00:00
Benjamin S. Leveritt
0a4f79d5a4 Adds wasm-pack via pnpm 2025-02-12 20:18:46 +00:00
Benjamin S. Leveritt
43cb7abba7 Exclude target output from formatter 2025-02-12 20:18:46 +00:00
Benjamin S. Leveritt
25f76f6b02 Updates README 2025-02-12 20:18:46 +00:00
Benjamin S. Leveritt
6a56561c98 Refactor into modules 2025-02-12 20:18:45 +00:00
Benjamin S. Leveritt
2ac31e7c51 Removes unused berith dep 2025-02-12 20:18:45 +00:00
Benjamin S. Leveritt
1bbefab5a9 Ports final ed25519 fns 2025-02-12 20:18:45 +00:00
Benjamin S. Leveritt
1143b32cf3 Remove generateNonce from crypto, as only used by PureJS class 2025-02-12 20:18:45 +00:00
Benjamin S. Leveritt
51ada27810 Refactors to pass nonceMaterial to reduce wasm boundary crossing 2025-02-12 20:18:45 +00:00
Benjamin S. Leveritt
954ecb3984 Ports xsalsa20 encrypt/decrypt fns to Rust 2025-02-12 20:18:45 +00:00
Benjamin S. Leveritt
05089270d9 Refactors to pass nonceMaterial, rather than nonces 2025-02-12 20:18:45 +00:00
Benjamin S. Leveritt
fecc81111a Ports seal/unseal to rs lib 2025-02-12 20:18:45 +00:00
Benjamin S. Leveritt
4d3e7dbcd5 Adds X25519 fns 2025-02-12 20:18:44 +00:00
Benjamin S. Leveritt
ee65f18fd9 Add note about rust-analyzer 2025-02-12 20:18:44 +00:00
Benjamin S. Leveritt
bcbc4636ed Moves randomBytes up into crypto class to remove duplication 2025-02-12 20:18:44 +00:00
Benjamin S. Leveritt
8c323c4513 Fixes type 2025-02-12 20:18:44 +00:00
Benjamin S. Leveritt
4103ea0c88 Removes hash-wasm dep 2025-02-12 20:18:44 +00:00
Benjamin S. Leveritt
733ebec902 Ports more Blake3 functions 2025-02-12 19:50:23 +00:00
Benjamin S. Leveritt
10a3834668 Ports blake3_hash with context 2025-02-12 19:50:23 +00:00
Benjamin S. Leveritt
593c3aeb6e Port blake3_hash_once 2025-02-12 19:50:23 +00:00
Benjamin S. Leveritt
a55d71c28d Fixes exported fn for node 2025-02-12 19:49:53 +00:00
Benjamin S. Leveritt
c030c7a57e Adds isomorphic generate_nonce function to rs lib 2025-02-12 19:49:53 +00:00
Benjamin S. Leveritt
e5b4c0448a Refactor into nonceGeneration 2025-02-12 19:49:53 +00:00
Benjamin S. Leveritt
0d516a3c6a Adds a test for unsealed error 2025-02-12 19:49:53 +00:00
Benjamin S. Leveritt
271ff3eb40 Adds comments to crypto libs 2025-02-12 19:49:53 +00:00
Benjamin S. Leveritt
dcc836ff98 Imports jazz-crypto-rs into cojson 2025-02-12 19:49:53 +00:00
Benjamin S. Leveritt
22da4ea136 Add jazz-crypto-rs lib 2025-02-12 18:27:21 +00:00
Benjamin S. Leveritt
80e86c92b2 Add rust tools to nix dev environment 2025-02-12 18:27:21 +00:00
130 changed files with 1090 additions and 540 deletions

4
.gitignore vendored
View File

@@ -7,11 +7,15 @@ docsTmp
coverage
.direnv
# Typescript
**/*.tsbuildinfo
# Next.js
**/.next
# Vite output
**/dist
__screenshots__
# Playwright
test-results

View File

@@ -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

View File

@@ -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",
@@ -9,23 +9,22 @@
"format-and-lint:fix": "biome check . --write",
"android": "expo run:android",
"ios": "expo run:ios",
"web": "expo start --web",
"test": "jest --watchAll"
"web": "expo start --web"
},
"jest": {
"preset": "jest-expo"
},
"dependencies": {
"@azure/core-asynciterator-polyfill": "^1.0.2",
"@bacons/text-decoder": "0.0.0",
"@bam.tech/react-native-image-resizer": "^3.0.11",
"@craftzdog/react-native-buffer": "6.0.5",
"@clerk/clerk-expo": "^2.2.21",
"@expo/vector-icons": "^14.0.2",
"@op-engineering/op-sqlite": "^11.2.12",
"@react-native-community/netinfo": "^11.4.1",
"@react-navigation/native": "^7.0.13",
"@react-navigation/native-stack": "^7.1.14",
"base-64": "^1.0.0",
"buffer": "^6.0.3",
"clsx": "^2.0.0",
"expo": "^52.0.0",
"expo-build-properties": "~0.13.1",
@@ -51,18 +50,14 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-native": "~0.76.3",
"react-native-fetch-api": "^3.0.0",
"react-native-gesture-handler": "~2.20.2",
"react-native-get-random-values": "^1.11.0",
"react-native-polyfill-globals": "^3.1.0",
"react-native-quick-base64": "^2.1.2",
"react-native-reanimated": "~3.16.3",
"react-native-safe-area-context": "4.12.0",
"react-native-screens": "4.1.0",
"react-native-url-polyfill": "^2.0.0",
"react-native-web": "~0.19.13",
"text-encoding": "^0.7.0",
"web-streams-polyfill": "^3.2.1"
"readable-stream": "4.7.0"
},
"devDependencies": {
"@babel/core": "^7.20.0",

View File

@@ -1,8 +1,17 @@
import "react-native-polyfill-globals/auto";
import "@azure/core-asynciterator-polyfill";
import { Buffer } from "buffer";
import { polyfillGlobal } from "react-native/Libraries/Utilities/PolyfillFunctions";
import { ReadableStream } from "web-streams-polyfill/ponyfill/es6";
/* eslint-disable import/order */
// @ts-expect-error - @types/react-native doesn't cover this file
import { polyfillGlobal } from "react-native/Libraries/Utilities/PolyfillFunctions";
import { Buffer } from "@craftzdog/react-native-buffer";
polyfillGlobal("Buffer", () => Buffer);
// @ts-expect-error - @types/readable-stream doesn't have ReadableStream type
import { ReadableStream } from "readable-stream";
polyfillGlobal("ReadableStream", () => ReadableStream);
import "@azure/core-asynciterator-polyfill";
import "@bacons/text-decoder/install";
import "react-native-get-random-values";

View File

@@ -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

View File

@@ -1,6 +1,6 @@
{
"name": "chat-rn",
"version": "1.0.67",
"version": "1.0.68",
"main": "index.js",
"scripts": {
"build": "expo export -p ios",
@@ -13,11 +13,12 @@
},
"dependencies": {
"@azure/core-asynciterator-polyfill": "^1.0.2",
"@bacons/text-decoder": "0.0.0",
"@craftzdog/react-native-buffer": "6.0.5",
"@op-engineering/op-sqlite": "^11.2.12",
"@react-native-community/netinfo": "^11.4.1",
"@react-navigation/native": "^7.0.13",
"@react-navigation/native-stack": "^7.1.14",
"base-64": "^1.0.0",
"clsx": "^2.0.0",
"expo": "^52.0.0",
"expo-build-properties": "~0.13.1",
@@ -33,16 +34,13 @@
"nativewind": "^4.1.21",
"react": "^18.3.1",
"react-native": "~0.76.3",
"react-native-fetch-api": "^3.0.0",
"react-native-get-random-values": "^1.11.0",
"react-native-nitro-modules": "0.21.0",
"react-native-polyfill-globals": "^3.1.0",
"react-native-quick-crypto": "1.0.0-beta.12",
"react-native-safe-area-context": "4.12.0",
"react-native-screens": "4.1.0",
"react-native-url-polyfill": "^2.0.0",
"text-encoding": "^0.7.0",
"web-streams-polyfill": "^3.2.1"
"readable-stream": "4.7.0"
},
"devDependencies": {
"@babel/core": "^7.20.0",

View File

@@ -1,6 +1,17 @@
import "react-native-polyfill-globals/auto";
import "@azure/core-asynciterator-polyfill";
import { polyfillGlobal } from "react-native/Libraries/Utilities/PolyfillFunctions";
import { ReadableStream } from "web-streams-polyfill/ponyfill/es6";
/* eslint-disable import/order */
// @ts-expect-error - @types/react-native doesn't cover this file
import { polyfillGlobal } from "react-native/Libraries/Utilities/PolyfillFunctions";
import { Buffer } from "@craftzdog/react-native-buffer";
polyfillGlobal("Buffer", () => Buffer);
// @ts-expect-error - @types/readable-stream doesn't have ReadableStream type
import { ReadableStream } from "readable-stream";
polyfillGlobal("ReadableStream", () => ReadableStream);
import "@azure/core-asynciterator-polyfill";
import "@bacons/text-decoder/install";
import "react-native-get-random-values";

View File

@@ -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

View File

@@ -1,6 +1,6 @@
{
"name": "chat-vue",
"version": "0.0.54",
"version": "0.0.55",
"private": true,
"type": "module",
"scripts": {

View File

@@ -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

View File

@@ -1,7 +1,7 @@
{
"name": "jazz-example-chat",
"private": true,
"version": "0.0.150",
"version": "0.0.151",
"type": "module",
"scripts": {
"dev": "vite",
@@ -9,8 +9,8 @@
"format-and-lint": "biome check .",
"format-and-lint:fix": "biome check . --write",
"preview": "vite preview",
"test": "playwright test",
"test:ui": "playwright test --ui"
"test:e2e": "playwright test",
"test:e2e:ui": "playwright test --ui"
},
"dependencies": {
"clsx": "^2.0.0",

View File

@@ -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

View File

@@ -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"

View File

@@ -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

View File

@@ -1,6 +1,6 @@
{
"name": "file-share-svelte",
"version": "0.0.34",
"version": "0.0.35",
"private": true,
"type": "module",
"scripts": {
@@ -13,8 +13,8 @@
"lint": "prettier --check . && eslint .",
"format-and-lint": "pnpm run format && pnpm run lint",
"format-and-lint:fix": "pnpm run format --write && pnpm run lint --fix",
"test": "playwright test",
"test:ui": "playwright test --ui"
"test:e2e": "playwright test",
"test:e2e:ui": "playwright test --ui"
},
"devDependencies": {
"@sveltejs/adapter-vercel": "^5.5.0",

View File

@@ -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

View File

@@ -1,7 +1,7 @@
{
"name": "form",
"private": true,
"version": "0.0.45",
"version": "0.0.46",
"type": "module",
"scripts": {
"dev": "vite",

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
{"root":["./src/app.tsx","./src/createorder.tsx","./src/draftindicator.tsx","./src/editorder.tsx","./src/errors.tsx","./src/linktohome.tsx","./src/orderform.tsx","./src/orderthumbnail.tsx","./src/orders.tsx","./src/main.tsx","./src/schema.ts","./src/vite-env.d.ts"],"version":"5.6.3"}

View File

@@ -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

View File

@@ -1,7 +1,7 @@
{
"name": "image-upload",
"private": true,
"version": "0.0.47",
"version": "0.0.48",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -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

View File

@@ -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",

View File

@@ -102,6 +102,7 @@ export default function CoJsonViewerApp() {
if (coValueId) {
setPage(coValueId);
}
setCoValueId("");
};
if (
@@ -118,8 +119,22 @@ export default function CoJsonViewerApp() {
return (
<div className="w-full h-screen bg-gray-100 p-4 overflow-hidden flex flex-col">
<div className="flex justify-between items-center mb-4">
<div className="flex items-center mb-4 gap-4">
<Breadcrumbs path={path} onBreadcrumbClick={goToIndex} />
<div className="flex-1">
<form onSubmit={handleCoValueIdSubmit}>
{path.length !== 0 && (
<input
className="border p-2 rounded-lg min-w-[21rem] font-mono"
placeholder="co_z1234567890abcdef123456789"
value={coValueId}
onChange={(e) =>
setCoValueId(e.target.value as CoID<RawCoValue>)
}
/>
)}
</form>
</div>
<AccountSwitcher
accounts={accounts}
currentAccount={currentAccount}
@@ -172,7 +187,6 @@ export default function CoJsonViewerApp() {
type="button"
className="border inline-block px-2 py-1.5 text-black rounded"
onClick={() => {
setCoValueId(currentAccount.id);
setPage(currentAccount.id);
}}
>

View File

@@ -18,6 +18,8 @@ export function ValueRenderer({
compact?: boolean;
onCoIDClick?: (childNode: CoID<RawCoValue>) => void;
}) {
const [isExpanded, setIsExpanded] = useState(false);
if (typeof json === "undefined" || json === undefined) {
return <span className="text-gray-400">undefined</span>;
}
@@ -85,15 +87,31 @@ export function ValueRenderer({
return (
<span
title={JSON.stringify(json, null, 2)}
className="inline-block max-w-64 truncate"
className="inline-block max-w-64"
>
{compact ? (
<span>
Object{" "}
<span className="text-gray-500">({Object.keys(json).length})</span>
<pre className="mt-1 text-sm whitespace-pre-wrap">
{isExpanded
? JSON.stringify(json, null, 2)
: JSON.stringify(json, null, 2)
.split("\n")
.slice(0, 3)
.join("\n") + (Object.keys(json).length > 2 ? "\n..." : "")}
</pre>
<button
onClick={() => setIsExpanded(!isExpanded)}
className="text-xs text-gray-500 hover:text-gray-700"
>
{isExpanded ? "Show less" : "Show more"}
</button>
</span>
) : (
JSON.stringify(json, null, 2)
<pre className="whitespace-pre-wrap">
{JSON.stringify(json, null, 2)}
</pre>
)}
</span>
);

View File

@@ -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

View File

@@ -1,7 +1,7 @@
{
"name": "jazz-example-music-player",
"private": true,
"version": "0.0.71",
"version": "0.0.72",
"type": "module",
"scripts": {
"dev": "vite",
@@ -9,8 +9,8 @@
"format-and-lint": "biome check .",
"format-and-lint:fix": "biome check . --write",
"preview": "vite preview",
"test": "playwright test",
"test:ui": "playwright test --ui"
"test:e2e": "playwright test",
"test:e2e:ui": "playwright test --ui"
},
"dependencies": {
"@radix-ui/react-dialog": "^1.1.4",
@@ -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",

View File

@@ -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

View File

@@ -1,7 +1,7 @@
{
"name": "organization",
"private": true,
"version": "0.0.43",
"version": "0.0.44",
"type": "module",
"scripts": {
"dev": "vite",

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
{"root":["./src/acceptinvitepage.tsx","./src/homepage.tsx","./src/layout.tsx","./src/organizationpage.tsx","./src/main.tsx","./src/schema.ts","./src/vite-env.d.ts","./src/components/createorganization.tsx","./src/components/createproject.tsx","./src/components/errors.tsx","./src/components/heading.tsx","./src/components/invitelink.tsx","./src/components/organizationform.tsx","./src/components/organizationmembers.tsx","./src/components/organizationselector.tsx"],"version":"5.6.3"}

View File

@@ -1,5 +1,11 @@
# passkey-svelte
## 0.0.39
### Patch Changes
- jazz-svelte@0.10.6
## 0.0.38
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "passkey-svelte",
"version": "0.0.38",
"version": "0.0.39",
"type": "module",
"private": true,
"scripts": {

View File

@@ -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

View File

@@ -1,7 +1,7 @@
{
"name": "passkey",
"private": true,
"version": "0.0.48",
"version": "0.0.49",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -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

View File

@@ -1,7 +1,7 @@
{
"name": "passphrase",
"private": true,
"version": "0.0.45",
"version": "0.0.46",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -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

View File

@@ -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",

View File

@@ -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

View File

@@ -1,7 +1,7 @@
{
"name": "jazz-example-pets",
"private": true,
"version": "0.0.167",
"version": "0.0.168",
"type": "module",
"scripts": {
"dev": "vite",
@@ -10,8 +10,8 @@
"format-and-lint:fix": "biome check . --write",
"preview": "vite preview",
"sync": "jazz-run sync",
"test": "playwright test",
"test:ui": "playwright test --ui"
"test:e2e": "playwright test",
"test:e2e:ui": "playwright test --ui"
},
"dependencies": {
"@radix-ui/react-checkbox": "^1.0.4",
@@ -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",

View File

@@ -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

View File

@@ -1,7 +1,7 @@
{
"name": "reactions",
"private": true,
"version": "0.0.47",
"version": "0.0.48",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -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

View File

@@ -1,6 +1,6 @@
{
"name": "todo-vue",
"version": "0.0.52",
"version": "0.0.53",
"private": true,
"type": "module",
"scripts": {

View File

@@ -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

View File

@@ -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",

View File

@@ -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

View File

@@ -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
View File

@@ -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": {

View File

@@ -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 ""
'';
};

View File

@@ -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

View File

@@ -36,7 +36,9 @@ export function Footer({
<div className="container grid gap-8 md:gap-12">
<div className="grid grid-cols-12 gap-y-3 sm:items-center pb-8 border-b">
<div className="col-span-full sm:col-span-6 md:col-span-8">
{logo}
<Link href="https://garden.co" target="_blank">
{logo}
</Link>
</div>
<p className="col-span-full sm:col-span-6 md:col-span-4 text-sm sm:text-base">
Playful software for serious problems.

View File

@@ -47,12 +47,7 @@ Many of the packages provided are documented in the [API Reference](/api-referen
## LLM Docs
We support the [llms.txt](https://llmstxt.org/) convention for making documentation available to large language models and the applications that make use of them.
We currently have:
- [/llms.txt](/llms.txt) - A overview listing of the available packages and their documentation
- [/llms-full.txt](/llms-full.txt) - Full documentation for our packages
Get better results with AI by [importing the Jazz docs](/docs/ai-tools) into your context window.
## Get support

View File

@@ -0,0 +1,45 @@
import { ContentByFramework, CodeGroup } from '@/components/forMdx'
# Using AI to build Jazz apps
AI tools, particularly large language models (LLMs), can accelerate your development with Jazz. Searching docs, responding to questions and even helping you write code are all things that LLMs are starting to get good at.
Jazz is a rapidly evolving framework, and the docs are a work in progress, and sometimes AI might get things a little wrong.
To help the LLMs, we provide a number of [llms.txt](https://llmstxt.org/) files that are optimised for use with AI tools.
## Getting started with AI tools
[llms.txt](https://llmstxt.org/) is a proposal to standardise the way that documentation is provided to AI tools at inference time that helps them understand the context of the code you're writing.
Many AI tools are starting to support this, and we've created a [llms-full.txt](https://jazz.tools/llms-full.txt) file that is optimised for use with AI tools, like Cursor.
## Setting up AI tools
Every AI tool is different, but generally you'll need to either provide the contents of the [llms-full.txt](https://jazz.tools/llms-full.txt) file in your prompt, or upload the file to the tool.
### ChatGPT and v0
<a href="/llms-full.txt" download>Download llms-full.txt</a>
Upload the txt file in your prompt.
![ChatGPT prompt with llms-full.txt attached](/chatgpt-with-llms-full-txt.jpg)
### Cursor
1. Go to Settings > Cursor Settings > Features > Docs
2. Click "Add new doc"
3. Enter the following URL:
<CodeGroup>
```
https://jazz.tools/llms-full.txt
```
</CodeGroup>
## Limitations and considerations
AI is amazing, but it's not perfect. What works well this week could break next week (or be twice as good).
We're keen to keep up with changes in tooling to help support you building the best apps, but if you need help from humans (or you have issues getting set up), please let us know on [Discord](https://discord.gg/utDMjHYg42).

View File

@@ -34,15 +34,17 @@ Tested with:
<CodeGroup>
```bash
npx expo install expo-linking expo-secure-store expo-file-system @react-native-community/netinfo @bam.tech/react-native-image-resizer @azure/core-asynciterator-polyfill
npx expo install expo-linking expo-secure-store expo-file-system @react-native-community/netinfo @bam.tech/react-native-image-resizer
npm i -S react-native-polyfill-globals react-native-url-polyfill web-streams-polyfill@3.2.1 base-64 text-encoding react-native-fetch-api react-native-get-random-values buffer @op-engineering/op-sqlite
npm i -S @azure/core-asynciterator-polyfill react-native-url-polyfill readable-stream react-native-get-random-values @craftzdog/react-native-buffer @op-engineering/op-sqlite
npm i -S jazz-tools jazz-react-native jazz-react-native-media-images
```
</CodeGroup>
> note: Hermes has added support for `atob` and `btoa` in React Native 0.74. If you are using earlier versions, you may also need to polyfill `atob` and `btoa` in your `package.json` . Packages to try include `text-encoding` and `base-64`, and you can drop `@bacons/text-decoder`.
### Fix incompatible dependencies
<CodeGroup>
@@ -134,16 +136,21 @@ For more information, refer to [this](https://github.com/byCedric/expo-monorepo-
Create a file `polyfills.js` at the project root with the following content:
<CodeGroup>
```ts
import "react-native-polyfill-globals/auto";
import "@azure/core-asynciterator-polyfill";
import { ReadableStream } from "web-streams-polyfill/ponyfill/es6";
import { polyfillGlobal } from "react-native/Libraries/Utilities/PolyfillFunctions";
import { Buffer } from "buffer";
```js
import { polyfillGlobal } from 'react-native/Libraries/Utilities/PolyfillFunctions';
polyfillGlobal("Buffer", () => Buffer);
polyfillGlobal("ReadableStream", () => ReadableStream);
```
import { Buffer } from '@craftzdog/react-native-buffer';
polyfillGlobal('Buffer', () => Buffer);
import { ReadableStream } from 'readable-stream';
polyfillGlobal('ReadableStream', () => ReadableStream);
import '@azure/core-asynciterator-polyfill';
import '@bacons/text-decoder/install';
import 'react-native-get-random-values';
```
</CodeGroup>
Update `index.js` based on whether you are using expo-router or not:

View File

@@ -1,4 +1,3 @@
import { Pizzazz } from "@/components/Pizzazz";
import { JazzNav } from "@/components/nav";
export default function RootLayout({
@@ -10,7 +9,6 @@ export default function RootLayout({
<div className="flex-1 w-full">
<JazzNav />
<main>{children}</main>
<Pizzazz />
</div>
);
}

View File

@@ -1,12 +0,0 @@
"use client";
import { addPizzazz } from "@unicorn-poo/pizzazz";
import { useEffect } from "react";
export function Pizzazz() {
useEffect(() => {
addPizzazz(document?.body, { effectType: "valentines" });
}, []);
return null;
}

View File

@@ -1,6 +1,5 @@
import { ThemeToggle } from "@/components/ThemeToggle";
import { socials } from "@/lib/socials";
import { useFramework } from "@/lib/use-framework";
import { JazzLogo } from "gcmp-design-system/src/app/components/atoms/logos/JazzLogo";
import {
Nav,

View File

@@ -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

View 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
);
});

View File

@@ -24,6 +24,11 @@ export const docNavigationItems = [
href: "/examples",
done: 30,
},
{
name: "AI tools",
href: "/docs/ai-tools",
done: 100,
},
],
},
{

View File

@@ -1,11 +1,9 @@
import { DEFAULT_FRAMEWORK, isValidFramework } from "@/lib/framework";
import { usePathname } from "next/navigation";
import { useParams } from "next/navigation";
export const useFramework = () => {
const pathname = usePathname();
const framework = pathname.startsWith("/docs/")
? pathname.split("/")[2]
: null;
const { framework } = useParams<{ framework?: string }>();
return framework && isValidFramework(framework)
? framework
: DEFAULT_FRAMEWORK;

View File

@@ -1,7 +1,9 @@
import { DocsLink } from "@/components/docs/DocsLink";
import type { MDXComponents } from "mdx/types";
export function useMDXComponents(components: MDXComponents): MDXComponents {
return {
a: (props) => <DocsLink {...props} />,
...components,
CodeWithInterpolation: ({
highlightedCode,

View File

@@ -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": {
@@ -27,7 +29,6 @@
"@turf/turf": "^7.1.0",
"@types/mdx": "^2.0.8",
"@types/topojson-client": "^3.1.5",
"@unicorn-poo/pizzazz": "^1.0.13",
"@vercel/analytics": "^1.3.1",
"@vercel/speed-insights": "^1.0.12",
"clsx": "^2.1.1",

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

View File

@@ -7,7 +7,7 @@
},
"build:generate-docs": {
"inputs": ["../../../packages/*/src/**"],
"outputs": ["typedoc/**"],
"outputs": ["typedoc/**", "public/llms.txt", "public/llms-full.txt"],
"dependsOn": ["^build"]
},
"dev": {

View File

@@ -205,9 +205,6 @@ importers:
'@types/topojson-client':
specifier: ^3.1.5
version: 3.1.5
'@unicorn-poo/pizzazz':
specifier: ^1.0.13
version: 1.0.13
'@vercel/analytics':
specifier: ^1.3.1
version: 1.3.1(next@14.2.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
@@ -1326,10 +1323,6 @@ packages:
'@typescript/vfs@1.3.5':
resolution: {integrity: sha512-pI8Saqjupf9MfLw7w2+og+fmb0fZS0J6vsKXXrp4/PDXEFvntgzXmChCXC/KefZZS0YGS6AT8e0hGAJcTsdJlg==}
'@unicorn-poo/pizzazz@1.0.13':
resolution: {integrity: sha512-vw4sHhGBD5R6gJlaW3QEcXBsKOQ4w7WMCmw/0ef5x4ie3u1tqK/3j/pMhxinu2ahatdgoEK7lSO/2qAfYicwhA==}
engines: {node: '>=14.0.0', npm: '>=6.0.0'}
'@vercel/analytics@1.3.1':
resolution: {integrity: sha512-xhSlYgAuJ6Q4WQGkzYTLmXwhYl39sWjoMA3nHxfkvG+WdBT25c563a7QhwwKivEOZtPJXifYHR1m2ihoisbWyA==}
peerDependencies:
@@ -4691,8 +4684,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@unicorn-poo/pizzazz@1.0.13': {}
'@vercel/analytics@1.3.1(next@14.2.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies:
server-only: 0.0.1

View File

@@ -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

View File

@@ -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",

View File

@@ -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

View File

@@ -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",

View File

@@ -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

View File

@@ -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": {

View File

@@ -1,5 +1,12 @@
# cojson-storage
## 0.10.6
### Patch Changes
- Updated dependencies [5c76e37]
- cojson@0.10.6
## 0.10.4
### Patch Changes

View File

@@ -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",

View File

@@ -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

View File

@@ -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",

View File

@@ -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

View File

@@ -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"
},

View File

@@ -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));

View File

@@ -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;
}
}
}

View File

@@ -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;

View File

@@ -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",
);
});
});

View File

@@ -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);
});

View File

@@ -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

View File

@@ -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",

View File

@@ -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

View File

@@ -1,22 +1,22 @@
{
"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 .",
"format-and-lint:fix": "biome check . --write",
"build": "rm -rf ./dist && tsc --sourceMap --outDir dist",
"prepublishOnly": "npm run build",
"test": "vitest --run --root ../../ --project jazz-browser-auth-clerk",
"test:watch": "vitest --watch --root ../../ --project jazz-browser-auth-clerk"
"test": "vitest --run --root ../../ --project jazz-auth-clerk",
"test:watch": "vitest --watch --root ../../ --project jazz-auth-clerk"
},
"devDependencies": {
"typescript": "~5.6.2"

View File

@@ -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

View File

@@ -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"
},

View File

@@ -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

View File

@@ -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",

View File

@@ -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

View File

@@ -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",

View File

@@ -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

View File

@@ -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:*",

View File

@@ -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

View File

@@ -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 .",

View File

@@ -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

Some files were not shown because too many files have changed in this diff Show More