Compare commits

...

16 Commits

Author SHA1 Message Date
Anselm Eickhoff
61b346a948 Merge pull request #691 from gardencmp/changeset-release/main
Version Packages
2024-11-05 09:38:34 +00:00
github-actions[bot]
c2dfe6a0dd Version Packages 2024-11-05 09:35:46 +00:00
Anselm Eickhoff
81e8910519 Merge pull request #676 from gardencmp/benjamin-jazz-452
Store clerk authentication locally
2024-11-05 09:34:29 +00:00
Benjamin S. Leveritt
cce679b031 Split changesets 2024-11-05 09:32:29 +00:00
Benjamin S. Leveritt
06278c3d97 Update saveCredentials mock 2024-11-05 06:53:32 +00:00
Benjamin S. Leveritt
221c58f1f7 Add changeset 2024-11-04 18:51:03 +00:00
Benjamin S. Leveritt
ebca75bf70 Add check for existance and await 2024-11-04 18:43:01 +00:00
Benjamin S. Leveritt
b5e516f974 Add tests
Particularly covering log out and checking for storing creds
2024-11-04 17:37:47 +00:00
Benjamin S. Leveritt
8fc5a49ca8 Refactor setItem into fn 2024-11-04 17:37:40 +00:00
Benjamin S. Leveritt
00054aa9a5 Export Credential type from jazz-tools 2024-11-04 17:11:05 +00:00
Benjamin S. Leveritt
6f3c98f704 Make saveCredentials optional 2024-11-04 17:00:28 +00:00
Benjamin S. Leveritt
47ec0cd8fe Rename type 2024-11-04 16:53:42 +00:00
Benjamin S. Leveritt
685031c39c Remove check for user before passing to BrowserClerkAuth 2024-11-04 16:53:22 +00:00
Benjamin S. Leveritt
e4fd89dbbb Add saveCredentials to existing Clerk accounts authentications 2024-11-04 16:32:37 +00:00
Benjamin S. Leveritt
57deec451a Check for local credentials before Clerk checks 2024-11-04 10:47:42 +00:00
Benjamin S. Leveritt
bc8ea23e6d Store clerk authentication locally
Introduce LocallyStoredCredentials for storing and validating local storage values
2024-11-04 09:39:46 +00:00
48 changed files with 470 additions and 113 deletions

View File

@@ -1,5 +1,13 @@
# @jazz-e2e/binarycostream
## 0.0.93
### Patch Changes
- Updated dependencies [cce679b]
- jazz-tools@0.8.15
- jazz-react@0.8.15
## 0.0.92
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "@jazz-e2e/binarycostream",
"private": true,
"version": "0.0.92",
"version": "0.0.93",
"type": "module",
"scripts": {
"dev": "vite",
@@ -17,8 +17,8 @@
"cojson": "workspace:0.8.12",
"hash-slash": "workspace:0.2.1",
"is-ci": "^3.0.1",
"jazz-react": "workspace:0.8.14",
"jazz-tools": "workspace:0.8.14",
"jazz-react": "workspace:0.8.15",
"jazz-tools": "workspace:0.8.15",
"react": "^18.2.0",
"react-dom": "^18.2.0"
},

View File

@@ -1,5 +1,13 @@
# @jazz-e2e/covalues
## 0.0.92
### Patch Changes
- Updated dependencies [cce679b]
- jazz-tools@0.8.15
- jazz-react@0.8.15
## 0.0.91
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "@jazz-e2e/covalues",
"private": true,
"version": "0.0.91",
"version": "0.0.92",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -1,5 +1,14 @@
# jazz-example-book-shelf
## 0.1.8
### Patch Changes
- Updated dependencies [cce679b]
- jazz-tools@0.8.15
- jazz-browser-media-images@0.8.15
- jazz-react@0.8.15
## 0.1.7
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "jazz-example-book-shelf",
"version": "0.1.7",
"version": "0.1.8",
"private": true,
"scripts": {
"dev": "next dev",
@@ -11,9 +11,9 @@
},
"dependencies": {
"clsx": "^2.0.0",
"jazz-browser-media-images": "workspace:0.8.14",
"jazz-react": "workspace:0.8.14",
"jazz-tools": "workspace:0.8.14",
"jazz-browser-media-images": "workspace:0.8.15",
"jazz-react": "workspace:0.8.15",
"jazz-tools": "workspace:0.8.15",
"next": "14.2.5",
"react": "^18.2.0",
"react-dom": "^18.2.0"

View File

@@ -1,5 +1,15 @@
# jazz-example-chat
## 0.0.92
### Patch Changes
- Updated dependencies [cce679b]
- Updated dependencies [221c58f]
- jazz-tools@0.8.15
- jazz-react-auth-clerk@0.8.15
- jazz-react@0.8.15
## 0.0.91
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "jazz-example-chat-clerk",
"private": true,
"version": "0.0.91",
"version": "0.0.92",
"type": "module",
"scripts": {
"dev": "vite",
@@ -23,9 +23,9 @@
"clsx": "^2.0.0",
"cojson": "workspace:0.8.12",
"hash-slash": "workspace:0.2.1",
"jazz-react": "workspace:0.8.14",
"jazz-react-auth-clerk": "workspace:0.8.14",
"jazz-tools": "workspace:0.8.14",
"jazz-react": "workspace:0.8.15",
"jazz-react-auth-clerk": "workspace:0.8.15",
"jazz-tools": "workspace:0.8.15",
"lucide-react": "^0.274.0",
"qrcode": "^1.5.3",
"react": "^18.2.0",

View File

@@ -1,5 +1,16 @@
# chat-rn-clerk
## 1.0.8
### Patch Changes
- Updated dependencies [cce679b]
- Updated dependencies [221c58f]
- jazz-tools@0.8.15
- jazz-react-auth-clerk@0.8.15
- jazz-react-native@0.8.15
- jazz-react-native-media-images@0.8.11
## 1.0.7
### Patch Changes

View File

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

View File

@@ -1,5 +1,13 @@
# chat-rn
## 1.0.10
### Patch Changes
- Updated dependencies [cce679b]
- jazz-tools@0.8.15
- jazz-react-native@0.8.15
## 1.0.9
### Patch Changes

View File

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

View File

@@ -1,5 +1,13 @@
# jazz-example-chat
## 0.0.94
### Patch Changes
- Updated dependencies [cce679b]
- jazz-tools@0.8.15
- jazz-react@0.8.15
## 0.0.93
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "jazz-example-chat",
"private": true,
"version": "0.0.93",
"version": "0.0.94",
"type": "module",
"scripts": {
"dev": "vite",
@@ -24,8 +24,8 @@
"clsx": "^2.0.0",
"cojson": "workspace:0.8.12",
"hash-slash": "workspace:0.2.1",
"jazz-react": "workspace:0.8.14",
"jazz-tools": "workspace:0.8.14",
"jazz-react": "workspace:0.8.15",
"jazz-tools": "workspace:0.8.15",
"lucide-react": "^0.274.0",
"qrcode": "^1.5.3",
"react": "^18.2.0",

View File

@@ -1,5 +1,13 @@
# jazz-example-musicplayer
## 0.0.14
### Patch Changes
- Updated dependencies [cce679b]
- jazz-tools@0.8.15
- jazz-react@0.8.15
## 0.0.13
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "jazz-example-music-player",
"private": true,
"version": "0.0.13",
"version": "0.0.14",
"type": "module",
"scripts": {
"dev": "vite",
@@ -22,8 +22,8 @@
"@radix-ui/react-toast": "^1.1.4",
"class-variance-authority": "^0.7.0",
"clsx": "^2.0.0",
"jazz-react": "workspace:0.8.14",
"jazz-tools": "workspace:0.8.14",
"jazz-react": "workspace:0.8.15",
"jazz-tools": "workspace:0.8.15",
"lucide-react": "^0.274.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",

View File

@@ -1,5 +1,13 @@
# jazz-password-manager
## 0.0.13
### Patch Changes
- Updated dependencies [cce679b]
- jazz-tools@0.8.15
- jazz-react@0.8.15
## 0.0.12
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "jazz-password-manager",
"private": true,
"version": "0.0.12",
"version": "0.0.13",
"type": "module",
"scripts": {
"dev": "vite",
@@ -11,8 +11,8 @@
"clean-install": "rm -rf node_modules pnpm-lock.yaml && pnpm install"
},
"dependencies": {
"jazz-react": "workspace:0.8.14",
"jazz-tools": "workspace:0.8.14",
"jazz-react": "workspace:0.8.15",
"jazz-tools": "workspace:0.8.15",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-hook-form": "^7.41.5",

View File

@@ -1,5 +1,14 @@
# jazz-example-pets
## 0.0.111
### Patch Changes
- Updated dependencies [cce679b]
- jazz-tools@0.8.15
- jazz-browser-media-images@0.8.15
- jazz-react@0.8.15
## 0.0.110
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "jazz-example-pets",
"private": true,
"version": "0.0.110",
"version": "0.0.111",
"type": "module",
"scripts": {
"dev": "vite",
@@ -23,9 +23,9 @@
"@radix-ui/react-toast": "^1.1.4",
"class-variance-authority": "^0.7.0",
"clsx": "^2.0.0",
"jazz-browser-media-images": "workspace:0.8.14",
"jazz-react": "workspace:0.8.14",
"jazz-tools": "workspace:0.8.14",
"jazz-browser-media-images": "workspace:0.8.15",
"jazz-react": "workspace:0.8.15",
"jazz-tools": "workspace:0.8.15",
"lucide-react": "^0.274.0",
"qrcode": "^1.5.3",
"react": "^18.2.0",
@@ -50,7 +50,7 @@
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-react-refresh": "^0.4.3",
"is-ci": "^3.0.1",
"jazz-run": "workspace:0.8.14",
"jazz-run": "workspace:0.8.15",
"postcss": "^8.4.27",
"tailwindcss": "3.3.2",
"typescript": "^5.3.3",

View File

@@ -1,5 +1,13 @@
# jazz-example-todo
## 0.0.110
### Patch Changes
- Updated dependencies [cce679b]
- jazz-tools@0.8.15
- jazz-react@0.8.15
## 0.0.109
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "jazz-example-todo",
"private": true,
"version": "0.0.109",
"version": "0.0.110",
"type": "module",
"scripts": {
"dev": "vite",
@@ -20,8 +20,8 @@
"@radix-ui/react-toast": "^1.1.4",
"class-variance-authority": "^0.7.0",
"clsx": "^2.0.0",
"jazz-react": "workspace:0.8.14",
"jazz-tools": "workspace:0.8.14",
"jazz-react": "workspace:0.8.15",
"jazz-tools": "workspace:0.8.15",
"lucide-react": "^0.274.0",
"qrcode": "^1.5.3",
"react": "^18.2.0",

View File

@@ -1,5 +1,14 @@
# jazz-browser-media-images
## 0.8.15
### Patch Changes
- 221c58f: Store clerk credentials in localStorage, and use if available
- Updated dependencies [cce679b]
- jazz-tools@0.8.15
- jazz-browser@0.8.15
## 0.8.14
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "jazz-browser-auth-clerk",
"version": "0.8.14",
"version": "0.8.15",
"type": "module",
"main": "dist/index.js",
"types": "src/index.ts",
@@ -11,14 +11,16 @@
},
"dependencies": {
"cojson": "workspace:0.8.12",
"jazz-browser": "workspace:0.8.14",
"jazz-tools": "workspace:0.8.14"
"jazz-browser": "workspace:0.8.15",
"jazz-tools": "workspace:0.8.15"
},
"scripts": {
"lint": "eslint . --ext ts,tsx",
"format": "prettier --write './src/**/*.{ts,tsx}'",
"build": "npm run lint && rm -rf ./dist && tsc --sourceMap --outDir dist",
"prepublishOnly": "npm run build"
"prepublishOnly": "npm run build",
"test": "vitest --run --root ../../ --project jazz-browser-auth-clerk",
"test:watch": "vitest --watch --root ../../ --project jazz-browser-auth-clerk"
},
"devDependencies": {
"typescript": "^5.3.3"

View File

@@ -1,5 +1,7 @@
import { Account, AuthMethod, AuthResult, ID } from "jazz-tools";
import { AgentSecret } from "cojson";
import { Account, AuthMethod, AuthResult, Credentials, ID } from "jazz-tools";
const localStorageKey = "jazz-clerk-auth";
export type MinimalClerkClient = {
user: {
@@ -16,6 +18,16 @@ export type MinimalClerkClient = {
signOut: () => Promise<void>;
}
function saveCredentialsToLocalStorage(credentials: Credentials) {
localStorage.setItem(
localStorageKey,
JSON.stringify({
accountID: credentials.accountID,
secret: credentials.secret,
}),
);
}
export class BrowserClerkAuth implements AuthMethod {
constructor(
public driver: BrowserClerkAuth.Driver,
@@ -23,7 +35,34 @@ export class BrowserClerkAuth implements AuthMethod {
) {}
async start(): Promise<AuthResult> {
// Check local storage for credentials
const locallyStoredCredentials = localStorage.getItem(localStorageKey);
if (locallyStoredCredentials) {
try {
const credentials = JSON.parse(
locallyStoredCredentials,
) as Credentials;
return {
type: "existing",
credentials,
saveCredentials: async () => {}, // No need to save credentials when recovering from local storage
onSuccess: () => {},
onError: (error: string | Error) => {
this.driver.onError(error);
},
logOut: () => {
localStorage.removeItem(localStorageKey);
void this.clerkClient.signOut();
},
};
} catch (e) {
console.error("Error parsing local storage credentials", e);
}
}
if (this.clerkClient.user) {
// Check clerk user metadata for credentials
const storedCredentials = this.clerkClient.user.unsafeMetadata;
if (storedCredentials.jazzAccountID) {
if (!storedCredentials.jazzAccountSecret) {
@@ -36,6 +75,15 @@ export class BrowserClerkAuth implements AuthMethod {
storedCredentials.jazzAccountID as ID<Account>,
secret: storedCredentials.jazzAccountSecret as AgentSecret,
},
saveCredentials: async ({
accountID,
secret,
}: Credentials) => {
saveCredentialsToLocalStorage({
accountID,
secret,
});
},
onSuccess: () => {},
onError: (error: string | Error) => {
this.driver.onError(error);
@@ -45,6 +93,7 @@ export class BrowserClerkAuth implements AuthMethod {
},
};
} else {
// No credentials found, so we need to create new credentials
return {
type: "new",
creationProps: {
@@ -53,14 +102,18 @@ export class BrowserClerkAuth implements AuthMethod {
this.clerkClient.user.username ||
this.clerkClient.user.id,
},
saveCredentials: async (credentials: {
accountID: ID<Account>;
secret: AgentSecret;
}) => {
saveCredentials: async ({
accountID,
secret,
}: Credentials) => {
saveCredentialsToLocalStorage({
accountID,
secret,
});
await this.clerkClient.user?.update({
unsafeMetadata: {
jazzAccountID: credentials.accountID,
jazzAccountSecret: credentials.secret,
jazzAccountID: accountID,
jazzAccountSecret: secret,
},
});
},
@@ -74,6 +127,7 @@ export class BrowserClerkAuth implements AuthMethod {
};
}
} else {
// Clerk user not found, so we can't authenticate
throw new Error("Not signed in");
}
}

View File

@@ -0,0 +1,119 @@
import { AgentSecret } from "cojson";
import { Account, ID } from "jazz-tools";
import { beforeEach, describe, expect, it, vi } from "vitest";
import { BrowserClerkAuth, MinimalClerkClient } from "../index.js";
describe("BrowserClerkAuth", () => {
let mockLocalStorage: { [key: string]: string };
let mockClerkClient: MinimalClerkClient;
let mockDriver: BrowserClerkAuth.Driver;
beforeEach(() => {
// Mock localStorage
mockLocalStorage = {};
global.localStorage = {
getItem: vi.fn((key: string) => mockLocalStorage[key] || null),
setItem: vi.fn((key: string, value: string) => {
mockLocalStorage[key] = value;
}),
removeItem: vi.fn((key: string) => {
delete mockLocalStorage[key];
}),
clear: vi.fn(),
length: 0,
key: vi.fn(),
};
// Mock Clerk client
mockClerkClient = {
user: {
unsafeMetadata: {},
fullName: "Test User",
username: "testuser",
id: "test-id",
update: vi.fn(),
},
signOut: vi.fn(),
};
// Mock driver
mockDriver = {
onError: vi.fn(),
};
});
describe("clerk credentials in localStorage", () => {
it("should get credentials from localStorage when clerk user is not signed in", async () => {
mockLocalStorage["jazz-clerk-auth"] = JSON.stringify({
accountID: "test-account-id",
accountSecret: "test-secret",
});
const auth = new BrowserClerkAuth(mockDriver, {
...mockClerkClient,
user: null,
});
const result = await auth.start();
expect(result.type).toBe("existing");
});
});
describe("clerk credentials not in localStorage", () => {
it("should return new credentials when clerk user signs up", async () => {
const auth = new BrowserClerkAuth(mockDriver, mockClerkClient);
const result = await auth.start();
expect(result.type).toBe("new");
});
it("should return existing credentials when clerk user is signed in", async () => {
mockClerkClient = {
user: {
unsafeMetadata: {
jazzAccountID: "test-account-id",
jazzAccountSecret: "test-secret",
},
fullName: "Test User",
username: "testuser",
id: "test-id",
update: vi.fn(),
},
signOut: vi.fn(),
};
const auth = new BrowserClerkAuth(mockDriver, mockClerkClient);
const result = await auth.start();
expect(result.type).toBe("existing");
});
it("should throw error when not signed in", async () => {
const auth = new BrowserClerkAuth(mockDriver, {
...mockClerkClient,
user: null,
});
await expect(auth.start()).rejects.toThrow("Not signed in");
});
it("should save credentials to localStorage", async () => {
const auth = new BrowserClerkAuth(mockDriver, mockClerkClient);
const result = await auth.start();
if (result.saveCredentials) {
await result.saveCredentials({
accountID: "test-account-id" as ID<Account>,
secret: "test-secret" as AgentSecret,
});
}
expect(mockLocalStorage["jazz-clerk-auth"]).toBeDefined();
});
it("should call clerk signOut when logging out", async () => {
const auth = new BrowserClerkAuth(mockDriver, mockClerkClient);
const result = await auth.start();
result.logOut();
expect(mockClerkClient.signOut).toHaveBeenCalled();
});
});
});

View File

@@ -1,5 +1,13 @@
# jazz-browser-media-images
## 0.8.15
### Patch Changes
- Updated dependencies [cce679b]
- jazz-tools@0.8.15
- jazz-browser@0.8.15
## 0.8.14
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "jazz-browser-media-images",
"version": "0.8.14",
"version": "0.8.15",
"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.8.14",
"jazz-tools": "workspace:0.8.14",
"jazz-browser": "workspace:0.8.15",
"jazz-tools": "workspace:0.8.15",
"pica": "^9.0.1",
"typescript": "^5.3.3"
},

View File

@@ -1,5 +1,12 @@
# jazz-browser
## 0.8.15
### Patch Changes
- Updated dependencies [cce679b]
- jazz-tools@0.8.15
## 0.8.14
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "jazz-browser",
"version": "0.8.14",
"version": "0.8.15",
"type": "module",
"main": "dist/index.js",
"types": "src/index.ts",
@@ -10,7 +10,7 @@
"cojson": "workspace:0.8.12",
"cojson-storage-indexeddb": "workspace:0.8.12",
"cojson-transport-ws": "workspace:0.8.13",
"jazz-tools": "workspace:0.8.14",
"jazz-tools": "workspace:0.8.15",
"typescript": "^5.3.3"
},
"scripts": {

View File

@@ -1,5 +1,12 @@
# jazz-autosub
## 0.8.15
### Patch Changes
- Updated dependencies [cce679b]
- jazz-tools@0.8.15
## 0.8.14
### Patch Changes

View File

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

View File

@@ -1,5 +1,16 @@
# jazz-browser-media-images
## 0.8.15
### Patch Changes
- 221c58f: Store clerk credentials in localStorage, and use if available
- Updated dependencies [cce679b]
- Updated dependencies [221c58f]
- jazz-tools@0.8.15
- jazz-browser-auth-clerk@0.8.15
- jazz-react@0.8.15
## 0.8.14
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "jazz-react-auth-clerk",
"version": "0.8.14",
"version": "0.8.15",
"type": "module",
"main": "dist/index.js",
"types": "src/index.tsx",
@@ -11,9 +11,9 @@
},
"dependencies": {
"cojson": "workspace:0.8.12",
"jazz-browser-auth-clerk": "workspace:0.8.14",
"jazz-react": "workspace:0.8.14",
"jazz-tools": "workspace:0.8.14"
"jazz-browser-auth-clerk": "workspace:0.8.15",
"jazz-react": "workspace:0.8.15",
"jazz-tools": "workspace:0.8.15"
},
"peerDependencies": {
"react": "^18.2.0"

View File

@@ -7,22 +7,18 @@ export function useJazzClerkAuth(clerk: MinimalClerkClient & {
const [state, setState] = useState<{ errors: string[] }>({ errors: [] });
const authMethod = useMemo(() => {
if (clerk.user) {
return new BrowserClerkAuth(
{
onError: (error) => {
void clerk.signOut();
setState((state) => ({
...state,
errors: [...state.errors, error.toString()],
}));
},
return new BrowserClerkAuth(
{
onError: (error) => {
void clerk.signOut();
setState((state) => ({
...state,
errors: [...state.errors, error.toString()],
}));
},
clerk,
);
} else {
return undefined;
}
},
clerk,
);
}, [clerk.user]);
return [authMethod, state] as const;

View File

@@ -1,5 +1,12 @@
# jazz-browser-media-images
## 0.8.11
### Patch Changes
- Updated dependencies [cce679b]
- jazz-tools@0.8.15
## 0.8.10
### Patch Changes

View File

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

View File

@@ -1,5 +1,12 @@
# jazz-browser
## 0.8.15
### Patch Changes
- Updated dependencies [cce679b]
- jazz-tools@0.8.15
## 0.8.14
### Patch Changes

View File

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

View File

@@ -1,5 +1,13 @@
# jazz-react
## 0.8.15
### Patch Changes
- Updated dependencies [cce679b]
- jazz-tools@0.8.15
- jazz-browser@0.8.15
## 0.8.14
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "jazz-react",
"version": "0.8.14",
"version": "0.8.15",
"type": "module",
"main": "dist/index.js",
"types": "src/index.ts",
@@ -8,8 +8,8 @@
"dependencies": {
"@scure/bip39": "^1.3.0",
"cojson": "workspace:0.8.12",
"jazz-browser": "workspace:0.8.14",
"jazz-tools": "workspace:0.8.14",
"jazz-browser": "workspace:0.8.15",
"jazz-tools": "workspace:0.8.15",
"typescript": "^5.3.3"
},
"devDependencies": {

View File

@@ -1,5 +1,12 @@
# jazz-run
## 0.8.15
### Patch Changes
- Updated dependencies [cce679b]
- jazz-tools@0.8.15
## 0.8.14
### Patch Changes

View File

@@ -3,7 +3,7 @@
"bin": "./dist/index.js",
"type": "module",
"license": "MIT",
"version": "0.8.14",
"version": "0.8.15",
"scripts": {
"lint": "eslint . --ext ts,tsx",
"format": "prettier --write './src/**/*.{ts,tsx}'",
@@ -21,7 +21,7 @@
"cojson-storage-sqlite": "workspace:0.8.12",
"cojson-transport-ws": "workspace:0.8.13",
"effect": "^3.6.5",
"jazz-tools": "workspace:0.8.14",
"jazz-tools": "workspace:0.8.15",
"ws": "^8.14.2"
},
"devDependencies": {

View File

@@ -1,5 +1,11 @@
# jazz-tools
## 0.8.15
### Patch Changes
- cce679b: Export `type Credentials` and mark `AuthResult.saveCredentials` as optional and run if available
## 0.8.14
### Patch Changes

View File

@@ -19,7 +19,7 @@
},
"type": "module",
"license": "MIT",
"version": "0.8.14",
"version": "0.8.15",
"dependencies": {
"cojson": "workspace:*",
"fast-check": "^3.17.2"

View File

@@ -26,6 +26,7 @@ export { loadCoValue, subscribeToCoValue, createCoValueObservable } from "./inte
export {
type AuthMethod,
type AuthResult,
type Credentials,
createJazzContext,
fixedCredentialsAuth,
ephemeralCredentialsAuth,

View File

@@ -11,10 +11,16 @@ import {
} from "cojson";
import { Account, AccountClass, ID } from "../internal.js";
export type Credentials = {
accountID: ID<Account>;
secret: AgentSecret;
};
export type AuthResult =
| {
type: "existing";
credentials: { accountID: ID<Account>; secret: AgentSecret };
credentials: Credentials;
saveCredentials?: (credentials: Credentials) => Promise<void>;
onSuccess: () => void;
onError: (error: string | Error) => void;
logOut: () => void;
@@ -23,10 +29,7 @@ export type AuthResult =
type: "new";
creationProps: { name: string };
initialSecret?: AgentSecret;
saveCredentials: (credentials: {
accountID: ID<Account>;
secret: AgentSecret;
}) => Promise<void>;
saveCredentials: (credentials: Credentials) => Promise<void>;
onSuccess: () => void;
onError: (error: string | Error) => void;
logOut: () => void;
@@ -44,6 +47,7 @@ export const fixedCredentialsAuth = (credentials: {
start: async () => ({
type: "existing",
credentials,
saveCredentials: async () => {},
onSuccess: () => {},
onError: () => {},
logOut: () => {},
@@ -168,6 +172,15 @@ export async function createJazzContext<Acc extends Account>(
});
const account = AccountSchema.fromNode(node);
if (authResult.saveCredentials) {
await authResult.saveCredentials({
accountID: node.account
.id as unknown as ID<Account>,
secret: node.account.agentSecret,
});
}
authResult.onSuccess();
return {

64
pnpm-lock.yaml generated
View File

@@ -52,10 +52,10 @@ importers:
specifier: ^3.0.1
version: 3.0.1
jazz-react:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../../packages/jazz-react
jazz-tools:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../../packages/jazz-tools
react:
specifier: 18.3.1
@@ -147,13 +147,13 @@ importers:
specifier: ^2.0.0
version: 2.0.0
jazz-browser-media-images:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../../packages/jazz-browser-media-images
jazz-react:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../../packages/jazz-react
jazz-tools:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../../packages/jazz-tools
next:
specifier: 14.2.5
@@ -226,10 +226,10 @@ importers:
specifier: workspace:0.2.1
version: link:../../packages/hash-slash
jazz-react:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../../packages/jazz-react
jazz-tools:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../../packages/jazz-tools
lucide-react:
specifier: ^0.274.0
@@ -338,13 +338,13 @@ importers:
specifier: workspace:0.2.1
version: link:../../packages/hash-slash
jazz-react:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../../packages/jazz-react
jazz-react-auth-clerk:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../../packages/jazz-react-auth-clerk
jazz-tools:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../../packages/jazz-tools
lucide-react:
specifier: ^0.274.0
@@ -825,10 +825,10 @@ importers:
specifier: ^2.0.0
version: 2.0.0
jazz-react:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../../packages/jazz-react
jazz-tools:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../../packages/jazz-tools
lucide-react:
specifier: ^0.274.0
@@ -901,10 +901,10 @@ importers:
examples/password-manager:
dependencies:
jazz-react:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../../packages/jazz-react
jazz-tools:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../../packages/jazz-tools
react:
specifier: 18.3.1
@@ -980,13 +980,13 @@ importers:
specifier: ^2.0.0
version: 2.0.0
jazz-browser-media-images:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../../packages/jazz-browser-media-images
jazz-react:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../../packages/jazz-react
jazz-tools:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../../packages/jazz-tools
lucide-react:
specifier: ^0.274.0
@@ -1056,7 +1056,7 @@ importers:
specifier: ^3.0.1
version: 3.0.1
jazz-run:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../../packages/jazz-run
postcss:
specifier: ^8.4.27
@@ -1094,10 +1094,10 @@ importers:
specifier: ^2.0.0
version: 2.0.0
jazz-react:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../../packages/jazz-react
jazz-tools:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../../packages/jazz-tools
lucide-react:
specifier: ^0.274.0
@@ -1306,7 +1306,7 @@ importers:
specifier: workspace:0.8.13
version: link:../cojson-transport-ws
jazz-tools:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../jazz-tools
typescript:
specifier: ^5.3.3
@@ -1318,10 +1318,10 @@ importers:
specifier: workspace:0.8.12
version: link:../cojson
jazz-browser:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../jazz-browser
jazz-tools:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../jazz-tools
devDependencies:
typescript:
@@ -1337,10 +1337,10 @@ importers:
specifier: ^4.1.0
version: 4.1.0
jazz-browser:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../jazz-browser
jazz-tools:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../jazz-tools
pica:
specifier: ^9.0.1
@@ -1362,7 +1362,7 @@ importers:
specifier: workspace:0.8.13
version: link:../cojson-transport-ws
jazz-tools:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../jazz-tools
ws:
specifier: ^8.14.2
@@ -1384,10 +1384,10 @@ importers:
specifier: workspace:0.8.12
version: link:../cojson
jazz-browser:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../jazz-browser
jazz-tools:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../jazz-tools
typescript:
specifier: ^5.3.3
@@ -1409,13 +1409,13 @@ importers:
specifier: workspace:0.8.12
version: link:../cojson
jazz-browser-auth-clerk:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../jazz-browser-auth-clerk
jazz-react:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../jazz-react
jazz-tools:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../jazz-tools
react:
specifier: 18.3.1
@@ -1511,7 +1511,7 @@ importers:
specifier: ^3.6.5
version: 3.6.5
jazz-tools:
specifier: workspace:0.8.14
specifier: workspace:0.8.15
version: link:../jazz-tools
ws:
specifier: ^8.14.2