Compare commits

..

10 Commits

Author SHA1 Message Date
Guido D'Orsi
6bee742b65 Merge pull request #1207 from garden-co/changeset-release/main
Version Packages
2025-01-18 00:26:30 +01:00
github-actions[bot]
23486d01b9 Version Packages 2025-01-17 23:23:34 +00:00
Guido D'Orsi
b761d5a730 Merge pull request #1215 from garden-co/fix/auth-issues
fix: improve error management on initial auth, fixed an infinite loop when migration fails
2025-01-18 00:22:06 +01:00
Guido D'Orsi
9181e74fc8 chore: add ts-ignore on an error flagged by some Typescript versions 2025-01-18 00:14:54 +01:00
Guido D'Orsi
5e83864f41 fix: improve error management on initial auth, fixed an infinite loop when migration fails 2025-01-18 00:12:46 +01:00
Guido D'Orsi
de5f2d6d5b Merge pull request #1213 from garden-co/fix/handle-unknown-covaule-types
perf: skip coValue content creation on access
2025-01-17 14:44:03 +01:00
Guido D'Orsi
4aa377dea7 chore: changeset 2025-01-17 14:42:05 +01:00
Guido D'Orsi
31ae73fe0e perf: skip coValue content creation on access 2025-01-17 12:49:24 +01:00
Guido D'Orsi
7a5adfc4dc Merge pull request #1212 from garden-co/fix/handle-unknown-covaule-types
feat: handle unknown coValue content instead of triggering an error
2025-01-17 12:23:50 +01:00
Guido D'Orsi
850e264912 feat: handle unknown coValue content instead of triggering an error 2025-01-17 12:02:32 +01:00
97 changed files with 719 additions and 489 deletions

View File

@@ -1,7 +0,0 @@
---
"chat-rn-clerk": patch
"jazz-react-native": patch
"jazz-example-chat": patch
---
Fix image handling in react-native

View File

@@ -1,5 +0,0 @@
---
"cojson": patch
---
Optimize queue management

View File

@@ -1,5 +1,17 @@
# chat-rn-clerk
## 1.0.51
### Patch Changes
- f76274c: Fix image handling in react-native
- Updated dependencies [f76274c]
- Updated dependencies [5e83864]
- jazz-react-native@0.9.10
- jazz-tools@0.9.10
- jazz-react-native-auth-clerk@0.9.10
- jazz-react-native-media-images@0.9.10
## 1.0.50
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "chat-rn-clerk",
"main": "index.js",
"version": "1.0.50",
"version": "1.0.51",
"scripts": {
"build": "expo export -p ios",
"start": "expo start",

View File

@@ -1,5 +1,14 @@
# chat-rn
## 1.0.48
### Patch Changes
- Updated dependencies [f76274c]
- Updated dependencies [5e83864]
- jazz-react-native@0.9.10
- jazz-tools@0.9.10
## 1.0.47
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "chat-rn",
"version": "1.0.47",
"version": "1.0.48",
"main": "index.js",
"scripts": {
"build": "expo export -p ios",

View File

@@ -1,5 +1,14 @@
# chat-vue
## 0.0.35
### Patch Changes
- Updated dependencies [5e83864]
- jazz-tools@0.9.10
- jazz-browser@0.9.10
- jazz-vue@0.9.10
## 0.0.34
### Patch Changes

View File

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

View File

@@ -1,5 +1,15 @@
# jazz-example-chat
## 0.0.131
### Patch Changes
- f76274c: Fix image handling in react-native
- Updated dependencies [5e83864]
- jazz-react@0.9.10
- jazz-tools@0.9.10
- jazz-browser-media-images@0.9.10
## 0.0.130
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "jazz-example-chat",
"private": true,
"version": "0.0.130",
"version": "0.0.131",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -1,5 +1,14 @@
# minimal-auth-clerk
## 0.0.30
### Patch Changes
- Updated dependencies [5e83864]
- jazz-react@0.9.10
- jazz-tools@0.9.10
- jazz-react-auth-clerk@0.9.10
## 0.0.29
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "clerk",
"private": true,
"version": "0.0.29",
"version": "0.0.30",
"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.9.9",
"jazz-react-auth-clerk": "workspace:0.9.10",
"jazz-tools": "workspace:*",
"react": "^18.3.1",
"react-dom": "^18.3.1"

View File

@@ -1,5 +1,13 @@
# file-share-svelte
## 0.0.15
### Patch Changes
- Updated dependencies [5e83864]
- jazz-tools@0.9.10
- jazz-svelte@0.9.10
## 0.0.14
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "file-share-svelte",
"version": "0.0.14",
"version": "0.0.15",
"private": true,
"type": "module",
"scripts": {

View File

@@ -1,5 +1,14 @@
# form
## 0.0.26
### Patch Changes
- Updated dependencies [5e83864]
- jazz-react@0.9.10
- jazz-tools@0.9.10
- jazz-browser-media-images@0.9.10
## 0.0.25
### Patch Changes

View File

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

View File

@@ -1,5 +1,14 @@
# image-upload
## 0.0.28
### Patch Changes
- Updated dependencies [5e83864]
- jazz-react@0.9.10
- jazz-tools@0.9.10
- jazz-browser-media-images@0.9.10
## 0.0.27
### Patch Changes

View File

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

View File

@@ -1,5 +1,13 @@
# jazz-example-inspector
## 0.0.95
### Patch Changes
- Updated dependencies [4aa377d]
- cojson@0.9.10
- cojson-transport-ws@0.9.10
## 0.0.94
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "jazz-inspector",
"private": true,
"version": "0.0.94",
"version": "0.0.95",
"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",
"cojson": "workspace:0.9.9",
"cojson-transport-ws": "workspace:0.9.9",
"cojson": "workspace:0.9.10",
"cojson-transport-ws": "workspace:0.9.10",
"hash-slash": "workspace:0.2.1",
"lucide-react": "^0.274.0",
"qrcode": "^1.5.3",

View File

@@ -1,5 +1,13 @@
# jazz-example-musicplayer
## 0.0.51
### Patch Changes
- Updated dependencies [5e83864]
- jazz-react@0.9.10
- jazz-tools@0.9.10
## 0.0.50
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "jazz-example-music-player",
"private": true,
"version": "0.0.50",
"version": "0.0.51",
"type": "module",
"scripts": {
"dev": "vite",
@@ -18,8 +18,8 @@
"@radix-ui/react-toast": "^1.1.4",
"class-variance-authority": "^0.7.0",
"clsx": "^2.0.0",
"jazz-react": "workspace:0.9.9",
"jazz-tools": "workspace:0.9.9",
"jazz-react": "workspace:0.9.10",
"jazz-tools": "workspace:0.9.10",
"lucide-react": "^0.274.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",

View File

@@ -1,5 +1,14 @@
# jazz-example-onboarding
## 0.0.32
### Patch Changes
- Updated dependencies [5e83864]
- jazz-react@0.9.10
- jazz-tools@0.9.10
- jazz-browser-media-images@0.9.10
## 0.0.31
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "jazz-example-onboarding",
"private": true,
"version": "0.0.31",
"version": "0.0.32",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -1,5 +1,13 @@
# organization
## 0.0.24
### Patch Changes
- Updated dependencies [5e83864]
- jazz-react@0.9.10
- jazz-tools@0.9.10
## 0.0.23
### Patch Changes

View File

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

View File

@@ -1,5 +1,11 @@
# passkey-svelte
## 0.0.19
### Patch Changes
- jazz-svelte@0.9.10
## 0.0.18
### Patch Changes

View File

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

View File

@@ -1,5 +1,13 @@
# minimal-auth-passkey
## 0.0.29
### Patch Changes
- Updated dependencies [5e83864]
- jazz-react@0.9.10
- jazz-tools@0.9.10
## 0.0.28
### Patch Changes

View File

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

View File

@@ -1,5 +1,13 @@
# jazz-password-manager
## 0.0.50
### Patch Changes
- Updated dependencies [5e83864]
- jazz-react@0.9.10
- jazz-tools@0.9.10
## 0.0.49
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "jazz-password-manager",
"private": true,
"version": "0.0.49",
"version": "0.0.50",
"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.9.9",
"jazz-tools": "workspace:0.9.9",
"jazz-react": "workspace:0.9.10",
"jazz-tools": "workspace:0.9.10",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-hook-form": "^7.41.5",

View File

@@ -1,5 +1,14 @@
# jazz-example-pets
## 0.0.148
### Patch Changes
- Updated dependencies [5e83864]
- jazz-react@0.9.10
- jazz-tools@0.9.10
- jazz-browser-media-images@0.9.10
## 0.0.147
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "jazz-example-pets",
"private": true,
"version": "0.0.147",
"version": "0.0.148",
"type": "module",
"scripts": {
"dev": "vite",
@@ -19,9 +19,9 @@
"@radix-ui/react-toast": "^1.1.4",
"class-variance-authority": "^0.7.0",
"clsx": "^2.0.0",
"jazz-browser-media-images": "workspace:0.9.9",
"jazz-react": "workspace:0.9.9",
"jazz-tools": "workspace:0.9.9",
"jazz-browser-media-images": "workspace:0.9.10",
"jazz-react": "workspace:0.9.10",
"jazz-tools": "workspace:0.9.10",
"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.9.9",
"jazz-run": "workspace:0.9.10",
"postcss": "^8.4.27",
"tailwindcss": "^3.4.15",
"typescript": "~5.6.2",

View File

@@ -1,5 +1,14 @@
# reactions
## 0.0.28
### Patch Changes
- Updated dependencies [5e83864]
- jazz-react@0.9.10
- jazz-tools@0.9.10
- jazz-browser-media-images@0.9.10
## 0.0.27
### Patch Changes

View File

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

View File

@@ -1,5 +1,14 @@
# todo-vue
## 0.0.33
### Patch Changes
- Updated dependencies [5e83864]
- jazz-tools@0.9.10
- jazz-browser@0.9.10
- jazz-vue@0.9.10
## 0.0.32
### Patch Changes

View File

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

View File

@@ -1,5 +1,13 @@
# jazz-example-todo
## 0.0.147
### Patch Changes
- Updated dependencies [5e83864]
- jazz-react@0.9.10
- jazz-tools@0.9.10
## 0.0.146
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "jazz-example-todo",
"private": true,
"version": "0.0.146",
"version": "0.0.147",
"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.9.9",
"jazz-tools": "workspace:0.9.9",
"jazz-react": "workspace:0.9.10",
"jazz-tools": "workspace:0.9.10",
"lucide-react": "^0.274.0",
"qrcode": "^1.5.3",
"react": "^18.3.1",

View File

@@ -1,5 +1,13 @@
# version-history
## 0.0.25
### Patch Changes
- Updated dependencies [5e83864]
- jazz-react@0.9.10
- jazz-tools@0.9.10
## 0.0.24
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "version-history",
"private": true,
"version": "0.0.24",
"version": "0.0.25",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -1,5 +1,13 @@
# cojson-storage-indexeddb
## 0.9.10
### Patch Changes
- Updated dependencies [4aa377d]
- cojson@0.9.10
- cojson-storage@0.9.10
## 0.9.9
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "cojson-storage-indexeddb",
"version": "0.9.9",
"version": "0.9.10",
"main": "dist/index.js",
"type": "module",
"types": "src/index.ts",

View File

@@ -1,5 +1,13 @@
# cojson-storage-sqlite
## 0.8.53
### Patch Changes
- Updated dependencies [4aa377d]
- cojson@0.9.10
- cojson-storage@0.9.10
## 0.8.52
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "cojson-storage-rn-sqlite",
"type": "module",
"version": "0.8.52",
"version": "0.8.53",
"main": "dist/index.js",
"types": "src/index.ts",
"license": "MIT",

View File

@@ -1,5 +1,13 @@
# cojson-storage-sqlite
## 0.9.10
### Patch Changes
- Updated dependencies [4aa377d]
- cojson@0.9.10
- cojson-storage@0.9.10
## 0.9.9
### Patch Changes

View File

@@ -1,13 +1,13 @@
{
"name": "cojson-storage-sqlite",
"type": "module",
"version": "0.9.9",
"version": "0.9.10",
"main": "dist/index.js",
"types": "src/index.ts",
"license": "MIT",
"dependencies": {
"better-sqlite3": "^11.7.0",
"cojson": "workspace:0.9.9",
"cojson": "workspace:0.9.10",
"cojson-storage": "workspace:*"
},
"devDependencies": {

View File

@@ -1,5 +1,12 @@
# cojson-storage
## 0.9.10
### Patch Changes
- Updated dependencies [4aa377d]
- cojson@0.9.10
## 0.9.9
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "cojson-storage",
"version": "0.9.9",
"version": "0.9.10",
"main": "dist/index.js",
"type": "module",
"types": "src/index.ts",

View File

@@ -1,5 +1,12 @@
# cojson-transport-nodejs-ws
## 0.9.10
### Patch Changes
- Updated dependencies [4aa377d]
- cojson@0.9.10
## 0.9.9
### Patch Changes

View File

@@ -1,12 +1,12 @@
{
"name": "cojson-transport-ws",
"type": "module",
"version": "0.9.9",
"version": "0.9.10",
"main": "dist/index.js",
"types": "src/index.ts",
"license": "MIT",
"dependencies": {
"cojson": "workspace:0.9.9",
"cojson": "workspace:0.9.10",
"typescript": "~5.6.2"
},
"scripts": {

View File

@@ -1,5 +1,11 @@
# cojson
## 0.9.10
### Patch Changes
- 4aa377d: Handle unkown coValue content type and optimize content access
## 0.9.9
### Patch Changes

View File

@@ -24,7 +24,7 @@
},
"type": "module",
"license": "MIT",
"version": "0.9.9",
"version": "0.9.10",
"devDependencies": {
"@opentelemetry/sdk-metrics": "^1.29.0",
"@types/jest": "^29.5.3",

View File

@@ -92,7 +92,7 @@ export class PeerState {
this.processing = true;
let entry: QueueEntry<SyncMessage> | undefined;
let entry: QueueEntry | undefined;
while ((entry = this.queue.pull())) {
// Awaiting the push to send one message at a time
// This way when the peer is "under pressure" we can enqueue all
@@ -129,7 +129,7 @@ export class PeerState {
}
private closeQueue() {
let entry: QueueEntry<SyncMessage> | undefined;
let entry: QueueEntry | undefined;
while ((entry = this.queue.pull())) {
// Using resolve here to avoid unnecessary noise in the logs
entry.resolve();

View File

@@ -18,12 +18,11 @@ function promiseWithResolvers<R>() {
};
}
export type QueueEntry<V> = {
msg: V;
export type QueueEntry = {
msg: SyncMessage;
promise: Promise<void>;
resolve: () => void;
reject: (_: unknown) => void;
next: QueueEntry<V> | undefined;
};
/**
@@ -34,68 +33,10 @@ type Tuple<T, N extends number, A extends unknown[] = []> = A extends {
}
? A
: Tuple<T, N, [...A, T]>;
type QueueTuple = Tuple<Queue<SyncMessage>, 8>;
class Queue<V> {
head: QueueEntry<V> | undefined = undefined;
tail: QueueEntry<V> | undefined = undefined;
push(msg: V) {
const { promise, resolve, reject } = promiseWithResolvers<void>();
const entry: QueueEntry<V> = {
msg,
promise,
resolve,
reject,
next: undefined,
};
if (this.head === undefined) {
this.head = entry;
} else {
if (this.tail === undefined) {
throw new Error("Tail is null but head is not");
}
this.tail.next = entry;
}
this.tail = entry;
return entry;
}
pull() {
const entry = this.head;
if (entry) {
this.head = entry.next;
}
if (this.head === undefined) {
this.tail = undefined;
}
return entry;
}
isNonEmpty() {
return this.head !== undefined;
}
}
type QueueTuple = Tuple<QueueEntry[], 8>;
export class PriorityBasedMessageQueue {
private queues: QueueTuple = [
new Queue(),
new Queue(),
new Queue(),
new Queue(),
new Queue(),
new Queue(),
new Queue(),
new Queue(),
];
private queues: QueueTuple = [[], [], [], [], [], [], [], []];
queueSizeCounter = metrics
.getMeter("cojson")
.createUpDownCounter("jazz.messagequeue.size", {
@@ -111,19 +52,22 @@ export class PriorityBasedMessageQueue {
constructor(private defaultPriority: CoValuePriority) {}
public push(msg: SyncMessage) {
const { promise, resolve, reject } = promiseWithResolvers<void>();
const entry: QueueEntry = { msg, promise, resolve, reject };
const priority = "priority" in msg ? msg.priority : this.defaultPriority;
const entry = this.getQueue(priority).push(msg);
this.getQueue(priority).push(entry);
this.queueSizeCounter.add(1, {
priority,
});
return entry.promise;
return promise;
}
public pull() {
const priority = this.queues.findIndex((queue) => queue.isNonEmpty());
const priority = this.queues.findIndex((queue) => queue.length > 0);
if (priority === -1) {
return;
@@ -133,6 +77,6 @@ export class PriorityBasedMessageQueue {
priority,
});
return this.queues[priority]?.pull();
return this.queues[priority]?.shift();
}
}

View File

@@ -35,6 +35,43 @@ export interface RawCoValue {
subscribe(listener: (coValue: this) => void): () => void;
}
export class RawUnknownCoValue implements RawCoValue {
id: CoID<this>;
core: CoValueCore;
constructor(core: CoValueCore) {
this.id = core.id as CoID<this>;
this.core = core;
}
get type() {
return this.core.header.type;
}
get headerMeta() {
return this.core.header.meta as JsonObject;
}
/** @category 6. Meta */
get group(): RawGroup {
return this.core.getGroup();
}
toJSON() {
return {};
}
atTime() {
return this;
}
subscribe(listener: (value: this) => void): () => void {
return this.core.subscribe((content) => {
listener(content as this);
});
}
}
export type AnyRawCoValue =
| RawCoMap
| RawGroup

View File

@@ -126,10 +126,7 @@ export class CoValueCore {
.expectCoValueLoaded(header.ruleset.group)
.subscribe((_groupUpdate) => {
this._cachedContent = undefined;
const newContent = this.getCurrentContent();
for (const listener of this.listeners) {
listener(newContent);
}
this.notifyUpdate("immediate");
});
}
}
@@ -244,11 +241,6 @@ export class CoValueCore {
signerID,
} satisfies InvalidSignatureError);
}
// const afterVerify = performance.now();
// console.log(
// "Verify took",
// afterVerify - beforeVerify
// );
this.doAddTransactions(
sessionID,
@@ -263,138 +255,6 @@ export class CoValueCore {
});
}
/*tryAddTransactionsAsync(
sessionID: SessionID,
newTransactions: Transaction[],
givenExpectedNewHash: Hash | undefined,
newSignature: Signature,
): ResultAsync<true, TryAddTransactionsError> {
const currentAsyncAddTransaction = this._currentAsyncAddTransaction;
let maybeAwaitPrevious:
| ResultAsync<void, TryAddTransactionsError>
| undefined;
let thisDone = () => {};
if (currentAsyncAddTransaction) {
// eslint-disable-next-line neverthrow/must-use-result
maybeAwaitPrevious = ResultAsync.fromSafePromise(
currentAsyncAddTransaction,
);
} else {
// eslint-disable-next-line neverthrow/must-use-result
maybeAwaitPrevious = ResultAsync.fromSafePromise(Promise.resolve());
this._currentAsyncAddTransaction = new Promise((resolve) => {
thisDone = resolve;
});
}
return maybeAwaitPrevious
.andThen((_previousDone) =>
this.node
.resolveAccountAgentAsync(
accountOrAgentIDfromSessionID(sessionID),
"Expected to know signer of transaction",
)
.andThen((agent) => {
const signerID = this.crypto.getAgentSignerID(agent);
const nTxBefore =
this.sessionLogs.get(sessionID)?.transactions
.length ?? 0;
// const beforeHash = performance.now();
return ResultAsync.fromSafePromise(
this.expectedNewHashAfterAsync(
sessionID,
newTransactions,
),
).andThen(({ expectedNewHash, newStreamingHash }) => {
// const afterHash = performance.now();
// console.log(
// "Hashing took",
// afterHash - beforeHash
// );
const nTxAfter =
this.sessionLogs.get(sessionID)?.transactions
.length ?? 0;
if (nTxAfter !== nTxBefore) {
const newTransactionLengthBefore =
newTransactions.length;
newTransactions = newTransactions.slice(
nTxAfter - nTxBefore,
);
console.warn(
"Transactions changed while async hashing",
{
nTxBefore,
nTxAfter,
newTransactionLengthBefore,
remainingNewTransactions:
newTransactions.length,
},
);
}
if (
givenExpectedNewHash &&
givenExpectedNewHash !== expectedNewHash
) {
return err({
type: "InvalidHash",
id: this.id,
expectedNewHash,
givenExpectedNewHash,
} satisfies InvalidHashError);
}
performance.mark("verifyStart" + this.id);
if (
!this.crypto.verify(
newSignature,
expectedNewHash,
signerID,
)
) {
return err({
type: "InvalidSignature",
id: this.id,
newSignature,
sessionID,
signerID,
} satisfies InvalidSignatureError);
}
performance.mark("verifyEnd" + this.id);
performance.measure(
"verify" + this.id,
"verifyStart" + this.id,
"verifyEnd" + this.id,
);
this.doAddTransactions(
sessionID,
newTransactions,
newSignature,
expectedNewHash,
newStreamingHash,
"deferred",
);
return ok(true as const);
});
}),
)
.map((trueResult) => {
thisDone();
return trueResult;
})
.mapErr((err) => {
thisDone();
return err;
});
}*/
private doAddTransactions(
sessionID: SessionID,
newTransactions: Transaction[],
@@ -432,12 +292,6 @@ export class CoValueCore {
);
if (sizeOfTxsSinceLastInbetweenSignature > MAX_RECOMMENDED_TX_SIZE) {
// console.log(
// "Saving inbetween signature for tx ",
// sessionID,
// transactions.length - 1,
// sizeOfTxsSinceLastInbetweenSignature
// );
signatureAfter[transactions.length - 1] = newSignature;
}
@@ -463,34 +317,40 @@ export class CoValueCore {
this._cachedDependentOn = undefined;
this._cachedNewContentSinceEmpty = undefined;
if (this.listeners.size > 0) {
if (notifyMode === "immediate") {
const content = this.getCurrentContent();
for (const listener of this.listeners) {
listener(content);
}
} else {
if (!this.nextDeferredNotify) {
this.nextDeferredNotify = new Promise((resolve) => {
setTimeout(() => {
this.nextDeferredNotify = undefined;
this.deferredUpdates = 0;
const content = this.getCurrentContent();
for (const listener of this.listeners) {
listener(content);
}
resolve();
}, 0);
});
}
this.deferredUpdates++;
}
}
this.notifyUpdate(notifyMode);
}
deferredUpdates = 0;
nextDeferredNotify: Promise<void> | undefined;
notifyUpdate(notifyMode: "immediate" | "deferred") {
if (this.listeners.size === 0) {
return;
}
if (notifyMode === "immediate") {
const content = this.getCurrentContent();
for (const listener of this.listeners) {
listener(content);
}
} else {
if (!this.nextDeferredNotify) {
this.nextDeferredNotify = new Promise((resolve) => {
setTimeout(() => {
this.nextDeferredNotify = undefined;
this.deferredUpdates = 0;
const content = this.getCurrentContent();
for (const listener of this.listeners) {
listener(content);
}
resolve();
}, 0);
});
}
this.deferredUpdates++;
}
}
subscribe(listener: (content?: RawCoValue) => void): () => void {
this.listeners.add(listener);
listener(this.getCurrentContent());

View File

@@ -1,3 +1,4 @@
import { RawUnknownCoValue } from "./coValue.js";
import type { CoValueCore } from "./coValueCore.js";
import { RawAccount, RawControlledAccount } from "./coValues/account.js";
import { RawCoList } from "./coValues/coList.js";
@@ -38,6 +39,6 @@ export function coreToCoValue(
return new RawCoStream(core);
}
} else {
throw new Error(`Unknown coValue type ${core.header.type}`);
return new RawUnknownCoValue(core);
}
}

View File

@@ -22,7 +22,7 @@ describe("PriorityBasedMessageQueue", () => {
const { queue } = setup();
expect(queue["defaultPriority"]).toBe(CO_VALUE_PRIORITY.MEDIUM);
expect(queue["queues"].length).toBe(8);
expect(queue["queues"].every((q) => !q.isNonEmpty())).toBe(true);
expect(queue["queues"].every((q) => q.length === 0)).toBe(true);
});
test("should push message with default priority", async () => {

View File

@@ -1,11 +1,14 @@
import { expect, test, vi } from "vitest";
import { Transaction } from "../coValueCore.js";
import { CoValueCore, Transaction } from "../coValueCore.js";
import { MapOpPayload } from "../coValues/coMap.js";
import { WasmCrypto } from "../crypto/WasmCrypto.js";
import { stableStringify } from "../jsonStringify.js";
import { LocalNode } from "../localNode.js";
import { Role } from "../permissions.js";
import { randomAnonymousAccountAndSessionID } from "./testUtils.js";
import {
createTestNode,
randomAnonymousAccountAndSessionID,
} from "./testUtils.js";
const Crypto = await WasmCrypto.create();
@@ -191,3 +194,30 @@ test("New transactions in a group correctly update owned values, including subsc
expect(map.core.getValidSortedTransactions().length).toBe(0);
});
test("creating a coValue with a group should't trigger automatically a content creation (performance)", () => {
const node = createTestNode();
const group = node.createGroup();
const getCurrentContentSpy = vi.spyOn(
CoValueCore.prototype,
"getCurrentContent",
);
const groupSpy = vi.spyOn(group.core, "getCurrentContent");
getCurrentContentSpy.mockClear();
node.createCoValue({
type: "comap",
ruleset: { type: "ownedByGroup", group: group.id },
meta: null,
...Crypto.createdNowUnique(),
});
// It's called once for the group and never for the coValue
expect(getCurrentContentSpy).toHaveBeenCalledTimes(1);
expect(groupSpy).toHaveBeenCalledTimes(1);
getCurrentContentSpy.mockRestore();
});

View File

@@ -1985,6 +1985,25 @@ describe("waitForSyncWithPeer", () => {
});
});
test("Should not crash when syncing an unknown coValue type", async () => {
const { client, jazzCloud } = createTwoConnectedNodes();
const coValue = client.createCoValue({
type: "ooops" as any,
ruleset: { type: "unsafeAllowAll" },
meta: null,
...Crypto.createdNowUnique(),
});
await coValue.waitForSync();
const coValueOnTheOtherNode = await loadCoValueOrFail(
jazzCloud,
coValue.getCurrentContent().id,
);
expect(coValueOnTheOtherNode.id).toBe(coValue.id);
});
describe("metrics", () => {
afterEach(() => {
tearDownTestMetricReader();

View File

@@ -1,5 +1,15 @@
# jazz-browser-media-images
## 0.9.10
### Patch Changes
- Updated dependencies [4aa377d]
- Updated dependencies [5e83864]
- cojson@0.9.10
- jazz-tools@0.9.10
- jazz-browser@0.9.10
## 0.9.9
### Patch Changes

View File

@@ -1,14 +1,14 @@
{
"name": "jazz-browser-auth-clerk",
"version": "0.9.9",
"version": "0.9.10",
"type": "module",
"main": "dist/index.js",
"types": "src/index.ts",
"license": "MIT",
"dependencies": {
"cojson": "workspace:0.9.9",
"jazz-browser": "workspace:0.9.9",
"jazz-tools": "workspace:0.9.9"
"cojson": "workspace:0.9.10",
"jazz-browser": "workspace:0.9.10",
"jazz-tools": "workspace:0.9.10"
},
"scripts": {
"format-and-lint": "biome check .",

View File

@@ -1,5 +1,13 @@
# jazz-browser-media-images
## 0.9.10
### Patch Changes
- Updated dependencies [5e83864]
- jazz-tools@0.9.10
- jazz-browser@0.9.10
## 0.9.9
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "jazz-browser-media-images",
"version": "0.9.9",
"version": "0.9.10",
"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.9.9",
"jazz-tools": "workspace:0.9.9",
"jazz-browser": "workspace:0.9.10",
"jazz-tools": "workspace:0.9.10",
"pica": "^9.0.1",
"typescript": "~5.6.2"
},

View File

@@ -1,5 +1,16 @@
# jazz-browser
## 0.9.10
### Patch Changes
- Updated dependencies [4aa377d]
- Updated dependencies [5e83864]
- cojson@0.9.10
- jazz-tools@0.9.10
- cojson-storage-indexeddb@0.9.10
- cojson-transport-ws@0.9.10
## 0.9.9
### Patch Changes

View File

@@ -1,16 +1,16 @@
{
"name": "jazz-browser",
"version": "0.9.9",
"version": "0.9.10",
"type": "module",
"main": "dist/index.js",
"types": "src/index.ts",
"license": "MIT",
"dependencies": {
"@scure/bip39": "^1.3.0",
"cojson": "workspace:0.9.9",
"cojson-storage-indexeddb": "workspace:0.9.9",
"cojson-transport-ws": "workspace:0.9.9",
"jazz-tools": "workspace:0.9.9",
"cojson": "workspace:0.9.10",
"cojson-storage-indexeddb": "workspace:0.9.10",
"cojson-transport-ws": "workspace:0.9.10",
"jazz-tools": "workspace:0.9.10",
"typescript": "~5.6.2"
},
"scripts": {

View File

@@ -1,5 +1,15 @@
# jazz-autosub
## 0.9.10
### Patch Changes
- Updated dependencies [4aa377d]
- Updated dependencies [5e83864]
- cojson@0.9.10
- jazz-tools@0.9.10
- cojson-transport-ws@0.9.10
## 0.9.9
### Patch Changes

View File

@@ -5,11 +5,11 @@
"types": "src/index.ts",
"type": "module",
"license": "MIT",
"version": "0.9.9",
"version": "0.9.10",
"dependencies": {
"cojson": "workspace:0.9.9",
"cojson-transport-ws": "workspace:0.9.9",
"jazz-tools": "workspace:0.9.9",
"cojson": "workspace:0.9.10",
"cojson-transport-ws": "workspace:0.9.10",
"jazz-tools": "workspace:0.9.10",
"ws": "^8.14.2"
},
"devDependencies": {

View File

@@ -1,5 +1,16 @@
# jazz-browser-media-images
## 0.9.10
### Patch Changes
- Updated dependencies [4aa377d]
- Updated dependencies [5e83864]
- cojson@0.9.10
- jazz-react@0.9.10
- jazz-tools@0.9.10
- jazz-browser-auth-clerk@0.9.10
## 0.9.9
### Patch Changes

View File

@@ -1,15 +1,15 @@
{
"name": "jazz-react-auth-clerk",
"version": "0.9.9",
"version": "0.9.10",
"type": "module",
"main": "dist/index.js",
"types": "src/index.tsx",
"license": "MIT",
"dependencies": {
"cojson": "workspace:0.9.9",
"jazz-browser-auth-clerk": "workspace:0.9.9",
"jazz-react": "workspace:0.9.9",
"jazz-tools": "workspace:0.9.9"
"cojson": "workspace:0.9.10",
"jazz-browser-auth-clerk": "workspace:0.9.10",
"jazz-react": "workspace:0.9.10",
"jazz-tools": "workspace:0.9.10"
},
"peerDependencies": {
"react": "^18.2.0"

View File

@@ -1,5 +1,14 @@
# jazz-react-core
## 0.8.51
### Patch Changes
- Updated dependencies [4aa377d]
- Updated dependencies [5e83864]
- cojson@0.9.10
- jazz-tools@0.9.10
## 0.8.50
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "jazz-react-core",
"version": "0.8.50",
"version": "0.8.51",
"type": "module",
"main": "dist/index.js",
"types": "src/index.ts",

View File

@@ -1,5 +1,16 @@
# jazz-react-native-auth-clerk
## 0.9.10
### Patch Changes
- Updated dependencies [4aa377d]
- Updated dependencies [f76274c]
- Updated dependencies [5e83864]
- cojson@0.9.10
- jazz-react-native@0.9.10
- jazz-tools@0.9.10
## 0.9.9
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "jazz-react-native-auth-clerk",
"version": "0.9.9",
"version": "0.9.10",
"type": "module",
"main": "dist/index.js",
"types": "src/index.ts",

View File

@@ -1,5 +1,12 @@
# jazz-browser-media-images
## 0.9.10
### Patch Changes
- Updated dependencies [5e83864]
- jazz-tools@0.9.10
## 0.9.9
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "jazz-react-native-media-images",
"version": "0.9.9",
"version": "0.9.10",
"type": "module",
"main": "dist/index.js",
"types": "src/index.ts",

View File

@@ -1,5 +1,19 @@
# jazz-browser
## 0.9.10
### Patch Changes
- f76274c: Fix image handling in react-native
- 5e83864: Improve error management on initial auth, fixed an infinite loop when migration fails
- Updated dependencies [4aa377d]
- Updated dependencies [5e83864]
- cojson@0.9.10
- jazz-tools@0.9.10
- cojson-storage-rn-sqlite@0.8.53
- cojson-transport-ws@0.9.10
- jazz-react-core@0.8.51
## 0.9.9
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "jazz-react-native",
"version": "0.9.9",
"version": "0.9.10",
"type": "module",
"main": "./dist/index.js",
"module": "./dist/index.js",

View File

@@ -96,6 +96,10 @@ export function JazzProvider<Acc extends Account = RegisteredAccount>({
const promise = createContext();
promise.catch((e) => {
console.error("Error creating Jazz context", e);
});
// In development mode we don't return a cleanup function because otherwise
// the double effect execution would mark the context as done immediately.
if (process.env.NODE_ENV === "development") {

View File

@@ -1,5 +1,17 @@
# jazz-react
## 0.9.10
### Patch Changes
- 5e83864: Improve error management on initial auth, fixed an infinite loop when migration fails
- Updated dependencies [4aa377d]
- Updated dependencies [5e83864]
- cojson@0.9.10
- jazz-tools@0.9.10
- jazz-browser@0.9.10
- jazz-react-core@0.8.51
## 0.9.9
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "jazz-react",
"version": "0.9.9",
"version": "0.9.10",
"type": "module",
"main": "dist/index.js",
"types": "src/index.ts",
@@ -17,9 +17,9 @@
},
"dependencies": {
"@scure/bip39": "^1.3.0",
"cojson": "workspace:0.9.9",
"jazz-browser": "workspace:0.9.9",
"jazz-tools": "workspace:0.9.9",
"cojson": "workspace:0.9.10",
"jazz-browser": "workspace:0.9.10",
"jazz-tools": "workspace:0.9.10",
"jazz-react-core": "workspace:*"
},
"devDependencies": {

View File

@@ -94,6 +94,10 @@ export function JazzProvider<Acc extends Account = RegisteredAccount>({
const promise = createContext();
promise.catch((e) => {
console.error("Error creating Jazz context", e);
});
// In development mode we don't return a cleanup function because otherwise
// the double effect execution would mark the context as done immediately.
if (process.env.NODE_ENV === "development") {

View File

@@ -1,5 +1,16 @@
# jazz-run
## 0.9.10
### Patch Changes
- Updated dependencies [4aa377d]
- Updated dependencies [5e83864]
- cojson@0.9.10
- jazz-tools@0.9.10
- cojson-storage-sqlite@0.9.10
- cojson-transport-ws@0.9.10
## 0.9.9
### Patch Changes

View File

@@ -3,7 +3,7 @@
"bin": "./dist/index.js",
"type": "module",
"license": "MIT",
"version": "0.9.9",
"version": "0.9.10",
"exports": {
"./startSyncServer": {
"import": "./dist/startSyncServer.js",
@@ -28,11 +28,11 @@
"@effect/printer-ansi": "^0.34.5",
"@effect/schema": "^0.71.1",
"@effect/typeclass": "^0.25.5",
"cojson": "workspace:0.9.9",
"cojson-storage-sqlite": "workspace:0.9.9",
"cojson-transport-ws": "workspace:0.9.9",
"cojson": "workspace:0.9.10",
"cojson-storage-sqlite": "workspace:0.9.10",
"cojson-transport-ws": "workspace:0.9.10",
"effect": "^3.6.5",
"jazz-tools": "workspace:0.9.9",
"jazz-tools": "workspace:0.9.10",
"ws": "^8.14.2"
},
"devDependencies": {

View File

@@ -1,5 +1,15 @@
# jazz-svelte
## 0.9.10
### Patch Changes
- Updated dependencies [4aa377d]
- Updated dependencies [5e83864]
- cojson@0.9.10
- jazz-tools@0.9.10
- jazz-browser@0.9.10
## 0.9.9
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "jazz-svelte",
"version": "0.9.9",
"version": "0.9.10",
"scripts": {
"dev": "vite dev",
"build": "vite build && npm run package",

View File

@@ -1,5 +1,13 @@
# jazz-tools
## 0.9.10
### Patch Changes
- 5e83864: Improve error management on initial auth, fixed an infinite loop when migration fails
- Updated dependencies [4aa377d]
- cojson@0.9.10
## 0.9.9
### Patch Changes

View File

@@ -23,7 +23,7 @@
},
"type": "module",
"license": "MIT",
"version": "0.9.9",
"version": "0.9.10",
"dependencies": {
"cojson": "workspace:*"
},

View File

@@ -372,6 +372,7 @@ export class CoRichText extends CoMap {
end + 1,
mark.endBefore,
RangeClass,
// @ts-ignore Some Typescript versions flag this as an error
{},
{
markOwner: mark.sourceMark._owner || this._owner,

View File

@@ -128,129 +128,106 @@ export async function createJazzContext<Acc extends Account>(
): Promise<JazzContext<Acc>>;
export async function createJazzContext<Acc extends Account>(
options: ContextParamsWithAuth<Acc> | BaseContextParams,
): Promise<JazzContext<Acc>> {
// eslint-disable-next-line no-constant-condition
while (true) {
if (!("auth" in options)) {
return createAnonymousJazzContext({
peersToLoadFrom: options.peersToLoadFrom,
crypto: options.crypto,
): Promise<JazzContext<Acc> | JazzContextWithAgent> {
if (!("auth" in options)) {
return createAnonymousJazzContext({
peersToLoadFrom: options.peersToLoadFrom,
crypto: options.crypto,
});
}
const { auth, sessionProvider, peersToLoadFrom, crypto } = options;
const AccountSchema =
options.AccountSchema ??
(RegisteredSchemas["Account"] as unknown as AccountClass<Acc>);
const authResult = await auth.start(crypto);
if (authResult.type === "existing") {
const { sessionID, sessionDone } = await sessionProvider(
authResult.credentials.accountID,
crypto,
);
const node = await LocalNode.withLoadedAccount({
accountID: authResult.credentials
.accountID as unknown as CoID<RawAccount>,
accountSecret: authResult.credentials.secret,
sessionID: sessionID,
peersToLoadFrom: peersToLoadFrom,
crypto: crypto,
migration: async (rawAccount, _node, creationProps) => {
const account = new AccountSchema({
fromRaw: rawAccount,
}) as Acc;
activeAccountContext.set(account);
await account.applyMigration(creationProps);
},
});
const account = AccountSchema.fromNode(node);
activeAccountContext.set(account);
if (authResult.saveCredentials) {
await authResult.saveCredentials({
accountID: node.account.id as unknown as ID<Account>,
secret: node.account.agentSecret,
});
}
const { auth, sessionProvider, peersToLoadFrom, crypto } = options;
const AccountSchema =
options.AccountSchema ??
(RegisteredSchemas["Account"] as unknown as AccountClass<Acc>);
let authResult: AuthResult;
try {
authResult = await auth.start(crypto);
} catch (e) {
console.error("error", e);
throw e;
}
authResult.onSuccess();
if (authResult.type === "existing") {
try {
const { sessionID, sessionDone } = await sessionProvider(
authResult.credentials.accountID,
crypto,
);
try {
const node = await LocalNode.withLoadedAccount({
accountID: authResult.credentials
.accountID as unknown as CoID<RawAccount>,
accountSecret: authResult.credentials.secret,
sessionID: sessionID,
peersToLoadFrom: peersToLoadFrom,
crypto: crypto,
migration: async (rawAccount, _node, creationProps) => {
const account = new AccountSchema({
fromRaw: rawAccount,
}) as Acc;
activeAccountContext.set(account);
await account.applyMigration(creationProps);
},
});
const account = AccountSchema.fromNode(node);
activeAccountContext.set(account);
if (authResult.saveCredentials) {
await authResult.saveCredentials({
accountID: node.account.id as unknown as ID<Account>,
secret: node.account.agentSecret,
});
}
authResult.onSuccess();
return {
account,
done: () => {
node.gracefulShutdown();
sessionDone();
},
logOut: () => {
node.gracefulShutdown();
sessionDone();
authResult.logOut();
},
};
} catch (e) {
authResult.onError(new Error("Error loading account", { cause: e }));
sessionDone();
}
} catch (e) {
authResult.onError(
new Error("Error acquiring sessionID", { cause: e }),
);
}
} else if (authResult.type === "new") {
try {
// TODO: figure out a way to not "waste" the first SessionID
const { node } = await LocalNode.withNewlyCreatedAccount({
creationProps: authResult.creationProps,
peersToLoadFrom: peersToLoadFrom,
crypto: crypto,
initialAgentSecret: authResult.initialSecret,
migration: async (rawAccount, _node, creationProps) => {
const account = new AccountSchema({
fromRaw: rawAccount,
}) as Acc;
activeAccountContext.set(account);
await account.applyMigration(creationProps);
},
});
const account = AccountSchema.fromNode(node);
return {
account,
done: () => {
node.gracefulShutdown();
sessionDone();
},
logOut: () => {
node.gracefulShutdown();
sessionDone();
authResult.logOut();
},
};
} else if (authResult.type === "new") {
const { node } = await LocalNode.withNewlyCreatedAccount({
creationProps: authResult.creationProps,
peersToLoadFrom: peersToLoadFrom,
crypto: crypto,
initialAgentSecret: authResult.initialSecret,
migration: async (rawAccount, _node, creationProps) => {
const account = new AccountSchema({
fromRaw: rawAccount,
}) as Acc;
activeAccountContext.set(account);
await authResult.saveCredentials({
accountID: node.account.id as unknown as ID<Account>,
secret: node.account.agentSecret,
});
await account.applyMigration(creationProps);
},
});
authResult.onSuccess();
return {
account,
done: () => {
node.gracefulShutdown();
},
logOut: () => {
node.gracefulShutdown();
authResult.logOut();
},
};
} catch (e) {
authResult.onError(new Error("Error creating account", { cause: e }));
}
}
const account = AccountSchema.fromNode(node);
activeAccountContext.set(account);
await authResult.saveCredentials({
accountID: node.account.id as unknown as ID<Account>,
secret: node.account.agentSecret,
});
authResult.onSuccess();
return {
account,
done: () => {
node.gracefulShutdown();
},
logOut: () => {
node.gracefulShutdown();
authResult.logOut();
},
};
}
throw new Error("Invalid auth result");
}
export async function createAnonymousJazzContext({

View File

@@ -1,5 +1,15 @@
# jazz-react
## 0.9.10
### Patch Changes
- Updated dependencies [4aa377d]
- Updated dependencies [5e83864]
- cojson@0.9.10
- jazz-tools@0.9.10
- jazz-browser@0.9.10
## 0.9.9
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "jazz-vue",
"version": "0.9.9",
"version": "0.9.10",
"type": "module",
"main": "dist/index.js",
"types": "src/index.ts",

78
pnpm-lock.yaml generated
View File

@@ -453,7 +453,7 @@ importers:
specifier: workspace:*
version: link:../../packages/jazz-react
jazz-react-auth-clerk:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../../packages/jazz-react-auth-clerk
jazz-tools:
specifier: workspace:*
@@ -682,10 +682,10 @@ importers:
specifier: ^2.0.0
version: 2.1.1
cojson:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../../packages/cojson
cojson-transport-ws:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../../packages/cojson-transport-ws
hash-slash:
specifier: workspace:0.2.1
@@ -767,10 +767,10 @@ importers:
specifier: ^2.0.0
version: 2.1.1
jazz-react:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../../packages/jazz-react
jazz-tools:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../../packages/jazz-tools
lucide-react:
specifier: ^0.274.0
@@ -1024,10 +1024,10 @@ importers:
examples/password-manager:
dependencies:
jazz-react:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../../packages/jazz-react
jazz-tools:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../../packages/jazz-tools
react:
specifier: 18.3.1
@@ -1088,13 +1088,13 @@ importers:
specifier: ^2.0.0
version: 2.1.1
jazz-browser-media-images:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../../packages/jazz-browser-media-images
jazz-react:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../../packages/jazz-react
jazz-tools:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../../packages/jazz-tools
lucide-react:
specifier: ^0.274.0
@@ -1149,7 +1149,7 @@ importers:
specifier: ^3.0.1
version: 3.0.1
jazz-run:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../../packages/jazz-run
postcss:
specifier: ^8.4.27
@@ -1228,10 +1228,10 @@ importers:
specifier: ^2.0.0
version: 2.1.1
jazz-react:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../../packages/jazz-react
jazz-tools:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../../packages/jazz-tools
lucide-react:
specifier: ^0.274.0
@@ -1499,7 +1499,7 @@ importers:
specifier: ^11.7.0
version: 11.7.0
cojson:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../cojson
cojson-storage:
specifier: workspace:*
@@ -1515,7 +1515,7 @@ importers:
packages/cojson-transport-ws:
dependencies:
cojson:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../cojson
typescript:
specifier: ~5.6.2
@@ -1525,8 +1525,6 @@ importers:
specifier: 8.5.10
version: 8.5.10
packages/coverage: {}
packages/create-jazz-app:
dependencies:
chalk:
@@ -1579,16 +1577,16 @@ importers:
specifier: ^1.3.0
version: 1.5.0
cojson:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../cojson
cojson-storage-indexeddb:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../cojson-storage-indexeddb
cojson-transport-ws:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../cojson-transport-ws
jazz-tools:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../jazz-tools
typescript:
specifier: ~5.6.2
@@ -1597,13 +1595,13 @@ importers:
packages/jazz-browser-auth-clerk:
dependencies:
cojson:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../cojson
jazz-browser:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../jazz-browser
jazz-tools:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../jazz-tools
devDependencies:
typescript:
@@ -1619,10 +1617,10 @@ importers:
specifier: ^4.1.0
version: 4.1.0
jazz-browser:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../jazz-browser
jazz-tools:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../jazz-tools
pica:
specifier: ^9.0.1
@@ -1638,13 +1636,13 @@ importers:
packages/jazz-nodejs:
dependencies:
cojson:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../cojson
cojson-transport-ws:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../cojson-transport-ws
jazz-tools:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../jazz-tools
ws:
specifier: ^8.14.2
@@ -1666,16 +1664,16 @@ importers:
specifier: ^1.3.0
version: 1.5.0
cojson:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../cojson
jazz-browser:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../jazz-browser
jazz-react-core:
specifier: workspace:*
version: link:../jazz-react-core
jazz-tools:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../jazz-tools
devDependencies:
'@testing-library/dom':
@@ -1703,16 +1701,16 @@ importers:
packages/jazz-react-auth-clerk:
dependencies:
cojson:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../cojson
jazz-browser-auth-clerk:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../jazz-browser-auth-clerk
jazz-react:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../jazz-react
jazz-tools:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../jazz-tools
react:
specifier: 18.3.1
@@ -1849,19 +1847,19 @@ importers:
specifier: ^0.25.5
version: 0.25.8(effect@3.11.9)
cojson:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../cojson
cojson-storage-sqlite:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../cojson-storage-sqlite
cojson-transport-ws:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../cojson-transport-ws
effect:
specifier: ^3.6.5
version: 3.11.9
jazz-tools:
specifier: workspace:0.9.9
specifier: workspace:0.9.10
version: link:../jazz-tools
ws:
specifier: ^8.14.2

View File

@@ -1,5 +1,13 @@
# jazz-tailwind-demo-auth-starter
## 0.0.25
### Patch Changes
- Updated dependencies [5e83864]
- jazz-react@0.9.10
- jazz-tools@0.9.10
## 0.0.24
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "jazz-tailwind-demo-auth-starter",
"private": true,
"version": "0.0.24",
"version": "0.0.25",
"type": "module",
"scripts": {
"dev": "vite",