Compare commits
79 Commits
jazz-nodej
...
fix/exampl
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
243ab074eb | ||
|
|
938f9256db | ||
|
|
88521721bf | ||
|
|
2701630582 | ||
|
|
07ce619fa2 | ||
|
|
895de1a470 | ||
|
|
4450761a7b | ||
|
|
08b3d65c0b | ||
|
|
5dac731f26 | ||
|
|
e99308cda2 | ||
|
|
88e314d980 | ||
|
|
62e0e5d721 | ||
|
|
aa16ad9c1c | ||
|
|
ada802bff8 | ||
|
|
44e1d140ca | ||
|
|
e0ef3fc1de | ||
|
|
a31ac66213 | ||
|
|
b444b2e96a | ||
|
|
8fcc4b5e50 | ||
|
|
33bfbee9cf | ||
|
|
d08e4e263b | ||
|
|
471b8c6a15 | ||
|
|
7dd080d907 | ||
|
|
69c81a3e90 | ||
|
|
d8ed987461 | ||
|
|
beb45c2656 | ||
|
|
e6241dfb5a | ||
|
|
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 |
4
.gitignore
vendored
4
.gitignore
vendored
@@ -7,11 +7,15 @@ docsTmp
|
||||
coverage
|
||||
.direnv
|
||||
|
||||
# Typescript
|
||||
**/*.tsbuildinfo
|
||||
|
||||
# Next.js
|
||||
**/.next
|
||||
|
||||
# Vite output
|
||||
**/dist
|
||||
__screenshots__
|
||||
|
||||
# Playwright
|
||||
test-results
|
||||
|
||||
@@ -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",
|
||||
@@ -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",
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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",
|
||||
@@ -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",
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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",
|
||||
@@ -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",
|
||||
|
||||
@@ -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": {
|
||||
@@ -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",
|
||||
|
||||
@@ -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,4 @@
|
||||
import { useIframeHashRouter } from "hash-slash";
|
||||
import { useAccount } from "jazz-react";
|
||||
import { ID } from "jazz-tools";
|
||||
import { CreateOrder } from "./CreateOrder.tsx";
|
||||
import { EditOrder } from "./EditOrder.tsx";
|
||||
@@ -7,25 +6,10 @@ import { Orders } from "./Orders.tsx";
|
||||
import { BubbleTeaOrder } from "./schema.ts";
|
||||
|
||||
function App() {
|
||||
const { me, logOut } = useAccount();
|
||||
const router = useIframeHashRouter();
|
||||
|
||||
return (
|
||||
<>
|
||||
<header>
|
||||
<nav className="container py-2 border-b flex items-center justify-between">
|
||||
<span>
|
||||
You're logged in as <strong>{me?.profile?.name}</strong>
|
||||
</span>
|
||||
<button
|
||||
className="bg-stone-100 py-1.5 px-3 text-sm rounded-md dark:bg-stone-900 dark:text-white"
|
||||
onClick={() => logOut()}
|
||||
>
|
||||
Log out
|
||||
</button>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main className="container py-8 space-y-8">
|
||||
{router.route({
|
||||
"/": () => <Orders />,
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -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"}
|
||||
@@ -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,19 +1,8 @@
|
||||
import { useAccount } from "jazz-react";
|
||||
import ImageUpload from "./ImageUpload.tsx";
|
||||
|
||||
function App() {
|
||||
const { me, logOut } = useAccount();
|
||||
|
||||
return (
|
||||
<>
|
||||
<header>
|
||||
<nav className="container">
|
||||
<span>
|
||||
You're logged in as <strong>{me?.profile?.name}</strong>
|
||||
</span>
|
||||
<button onClick={() => logOut()}>Log out</button>
|
||||
</nav>
|
||||
</header>
|
||||
<main className="container">
|
||||
<ImageUpload />
|
||||
</main>
|
||||
|
||||
@@ -46,7 +46,12 @@ export default function ImageUpload() {
|
||||
) : (
|
||||
<div>
|
||||
<label>Upload image</label>
|
||||
<input ref={inputRef} type="file" onChange={onImageChange} />
|
||||
<input
|
||||
ref={inputRef}
|
||||
type="file"
|
||||
accept="image/png, image/jpeg, image/gif"
|
||||
onChange={onImageChange}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
@@ -72,8 +72,7 @@ nav {
|
||||
.container {
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
padding-right: 0.75rem;
|
||||
padding-left: 0.75rem;
|
||||
padding: 2rem 0.75rem;
|
||||
max-width: 800px;
|
||||
}
|
||||
|
||||
|
||||
@@ -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",
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -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"}
|
||||
@@ -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",
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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": {
|
||||
@@ -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",
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
},
|
||||
"build:generate-docs": {
|
||||
"inputs": ["../../../packages/*/src/**"],
|
||||
"outputs": ["typedoc/**"],
|
||||
"outputs": ["typedoc/**", "public/llms.txt", "public/llms-full.txt"],
|
||||
"dependsOn": ["^build"]
|
||||
},
|
||||
"dev": {
|
||||
|
||||
9
homepage/pnpm-lock.yaml
generated
9
homepage/pnpm-lock.yaml
generated
@@ -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
|
||||
|
||||
@@ -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,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"
|
||||
|
||||
@@ -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
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user