jazz-react-auth-clerk 0.13.3 → 0.13.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -14
- package/dist/index.js.map +1 -1
- package/package.json +7 -6
- package/src/index.tsx +11 -21
- package/dist/tests/JazzProviderWithClerk.test.d.ts +0 -2
- package/dist/tests/JazzProviderWithClerk.test.d.ts.map +0 -1
- package/dist/tests/JazzProviderWithClerk.test.js +0 -112
- package/dist/tests/JazzProviderWithClerk.test.js.map +0 -1
- package/src/tests/JazzProviderWithClerk.test.tsx +0 -165
package/.turbo/turbo-build.log
CHANGED
package/CHANGELOG.md
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
# jazz-browser-media-images
|
2
2
|
|
3
|
+
## 0.13.4
|
4
|
+
|
5
|
+
### Patch Changes
|
6
|
+
|
7
|
+
- 3129982: Rewrite the auth management making Clerk the source of truth. This fixes the logOut issues as well as making the logout work from the Clerk APIs. When the Clerk session expires now the user is correctly logged out from Jazz\
|
8
|
+
- Updated dependencies [3129982]
|
9
|
+
- Updated dependencies [3129982]
|
10
|
+
- jazz-auth-clerk@0.13.4
|
11
|
+
- jazz-browser@0.13.4
|
12
|
+
- jazz-react@0.13.4
|
13
|
+
- jazz-tools@0.13.4
|
14
|
+
|
3
15
|
## 0.13.3
|
4
16
|
|
5
17
|
### Patch Changes
|
package/dist/index.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAEzE,OAAO,EAEL,iBAAiB,EAGlB,MAAM,YAAY,CAAC;AA8BpB,eAAO,MAAM,qBAAqB,UACzB;IAAE,KAAK,EAAE,kBAAkB,CAAA;CAAE,GAAG,iBAAiB,mDA4BzD,CAAC"}
|
package/dist/index.js
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
2
|
-
import { JazzClerkAuth
|
2
|
+
import { JazzClerkAuth } from "jazz-auth-clerk";
|
3
3
|
import { LocalStorageKVStore } from "jazz-browser";
|
4
4
|
import { JazzProvider, useAuthSecretStorage, useJazzContext, } from "jazz-react";
|
5
|
-
import {
|
5
|
+
import { InMemoryKVStore, KvStoreContext } from "jazz-tools";
|
6
6
|
import { useEffect, useMemo, useState } from "react";
|
7
7
|
function useJazzClerkAuth(clerk) {
|
8
8
|
const context = useJazzContext();
|
@@ -14,10 +14,7 @@ function useJazzClerkAuth(clerk) {
|
|
14
14
|
return new JazzClerkAuth(context.authenticate, authSecretStorage);
|
15
15
|
}, []);
|
16
16
|
useEffect(() => {
|
17
|
-
|
18
|
-
return clerk.addListener((event) => {
|
19
|
-
authMethod.onClerkUserChange(event);
|
20
|
-
});
|
17
|
+
return authMethod.registerListener(clerk);
|
21
18
|
}, []);
|
22
19
|
}
|
23
20
|
function RegisterClerkAuth(props) {
|
@@ -26,21 +23,21 @@ function RegisterClerkAuth(props) {
|
|
26
23
|
}
|
27
24
|
export const JazzProviderWithClerk = (props) => {
|
28
25
|
const [isLoaded, setIsLoaded] = useState(false);
|
29
|
-
|
30
|
-
|
26
|
+
/**
|
27
|
+
* This effect ensures that a logged-in Clerk user is authenticated before the JazzProvider is mounted.
|
28
|
+
*
|
29
|
+
* This is done to optimize the initial load.
|
30
|
+
*/
|
31
31
|
useEffect(() => {
|
32
|
-
|
33
|
-
|
34
|
-
return;
|
35
|
-
}
|
36
|
-
JazzClerkAuth.loadClerkAuthData(props.clerk.user.unsafeMetadata, secretStorage).then(() => {
|
32
|
+
setupKvStore();
|
33
|
+
JazzClerkAuth.initializeAuth(props.clerk).then(() => {
|
37
34
|
setIsLoaded(true);
|
38
35
|
});
|
39
36
|
}, []);
|
40
37
|
if (!isLoaded) {
|
41
38
|
return null;
|
42
39
|
}
|
43
|
-
return (_jsx(JazzProvider, { ...props,
|
40
|
+
return (_jsx(JazzProvider, { ...props, logOutReplacement: props.clerk.signOut, children: _jsx(RegisterClerkAuth, { clerk: props.clerk, children: props.children }) }));
|
44
41
|
};
|
45
42
|
function setupKvStore() {
|
46
43
|
KvStoreContext.getInstance().initialize(typeof window === "undefined"
|
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";AAAA,OAAO,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAA2B,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EACL,YAAY,EAEZ,oBAAoB,EACpB,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAErD,SAAS,gBAAgB,CAAC,KAAyB;IACjD,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,MAAM,iBAAiB,GAAG,oBAAoB,EAAE,CAAC;IAEjD,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE;QAC9B,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;IACpE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,UAAU,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;AAED,SAAS,iBAAiB,CAAC,KAG1B;IACC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAE9B,OAAO,KAAK,CAAC,QAAQ,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,KAAwD,EACxD,EAAE;IACF,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEhD;;;;OAIG;IACH,SAAS,CAAC,GAAG,EAAE;QACb,YAAY,EAAE,CAAC;QAEf,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YAClD,WAAW,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,KAAC,YAAY,OAAK,KAAK,EAAE,iBAAiB,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,YAC7D,KAAC,iBAAiB,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK,YAClC,KAAK,CAAC,QAAQ,GACG,GACP,CAChB,CAAC;AACJ,CAAC,CAAC;AAEF,SAAS,YAAY;IACnB,cAAc,CAAC,WAAW,EAAE,CAAC,UAAU,CACrC,OAAO,MAAM,KAAK,WAAW;QAC3B,CAAC,CAAC,IAAI,eAAe,EAAE;QACvB,CAAC,CAAC,IAAI,mBAAmB,EAAE,CAC9B,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
{
|
2
2
|
"name": "jazz-react-auth-clerk",
|
3
|
-
"version": "0.13.
|
3
|
+
"version": "0.13.4",
|
4
4
|
"type": "module",
|
5
5
|
"main": "dist/index.js",
|
6
6
|
"types": "dist/index.d.ts",
|
7
7
|
"license": "MIT",
|
8
8
|
"dependencies": {
|
9
9
|
"cojson": "0.13.2",
|
10
|
-
"jazz-auth-clerk": "0.13.
|
11
|
-
"jazz-browser": "0.13.
|
12
|
-
"jazz-react": "0.13.
|
13
|
-
"jazz-tools": "0.13.
|
10
|
+
"jazz-auth-clerk": "0.13.4",
|
11
|
+
"jazz-browser": "0.13.4",
|
12
|
+
"jazz-react": "0.13.4",
|
13
|
+
"jazz-tools": "0.13.4"
|
14
14
|
},
|
15
15
|
"peerDependencies": {
|
16
16
|
"react": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
@@ -24,6 +24,7 @@
|
|
24
24
|
"scripts": {
|
25
25
|
"format-and-lint": "biome check .",
|
26
26
|
"format-and-lint:fix": "biome check . --write",
|
27
|
-
"build": "rm -rf ./dist && tsc --sourceMap --outDir dist"
|
27
|
+
"build": "rm -rf ./dist && tsc --sourceMap --outDir dist",
|
28
|
+
"dev": " tsc --sourceMap --outDir dist --watch"
|
28
29
|
}
|
29
30
|
}
|
package/src/index.tsx
CHANGED
@@ -1,8 +1,4 @@
|
|
1
|
-
import {
|
2
|
-
JazzClerkAuth,
|
3
|
-
type MinimalClerkClient,
|
4
|
-
isClerkCredentials,
|
5
|
-
} from "jazz-auth-clerk";
|
1
|
+
import { JazzClerkAuth, type MinimalClerkClient } from "jazz-auth-clerk";
|
6
2
|
import { LocalStorageKVStore } from "jazz-browser";
|
7
3
|
import {
|
8
4
|
JazzProvider,
|
@@ -10,7 +6,7 @@ import {
|
|
10
6
|
useAuthSecretStorage,
|
11
7
|
useJazzContext,
|
12
8
|
} from "jazz-react";
|
13
|
-
import {
|
9
|
+
import { InMemoryKVStore, KvStoreContext } from "jazz-tools";
|
14
10
|
import { useEffect, useMemo, useState } from "react";
|
15
11
|
|
16
12
|
function useJazzClerkAuth(clerk: MinimalClerkClient) {
|
@@ -26,10 +22,7 @@ function useJazzClerkAuth(clerk: MinimalClerkClient) {
|
|
26
22
|
}, []);
|
27
23
|
|
28
24
|
useEffect(() => {
|
29
|
-
|
30
|
-
return clerk.addListener((event) => {
|
31
|
-
authMethod.onClerkUserChange(event as Pick<MinimalClerkClient, "user">);
|
32
|
-
});
|
25
|
+
return authMethod.registerListener(clerk);
|
33
26
|
}, []);
|
34
27
|
}
|
35
28
|
|
@@ -46,19 +39,16 @@ export const JazzProviderWithClerk = (
|
|
46
39
|
props: { clerk: MinimalClerkClient } & JazzProviderProps,
|
47
40
|
) => {
|
48
41
|
const [isLoaded, setIsLoaded] = useState(false);
|
49
|
-
setupKvStore();
|
50
|
-
const secretStorage = new AuthSecretStorage();
|
51
42
|
|
43
|
+
/**
|
44
|
+
* This effect ensures that a logged-in Clerk user is authenticated before the JazzProvider is mounted.
|
45
|
+
*
|
46
|
+
* This is done to optimize the initial load.
|
47
|
+
*/
|
52
48
|
useEffect(() => {
|
53
|
-
|
54
|
-
setIsLoaded(true);
|
55
|
-
return;
|
56
|
-
}
|
49
|
+
setupKvStore();
|
57
50
|
|
58
|
-
JazzClerkAuth.
|
59
|
-
props.clerk.user.unsafeMetadata,
|
60
|
-
secretStorage,
|
61
|
-
).then(() => {
|
51
|
+
JazzClerkAuth.initializeAuth(props.clerk).then(() => {
|
62
52
|
setIsLoaded(true);
|
63
53
|
});
|
64
54
|
}, []);
|
@@ -68,7 +58,7 @@ export const JazzProviderWithClerk = (
|
|
68
58
|
}
|
69
59
|
|
70
60
|
return (
|
71
|
-
<JazzProvider {...props}
|
61
|
+
<JazzProvider {...props} logOutReplacement={props.clerk.signOut}>
|
72
62
|
<RegisterClerkAuth clerk={props.clerk}>
|
73
63
|
{props.children}
|
74
64
|
</RegisterClerkAuth>
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"JazzProviderWithClerk.test.d.ts","sourceRoot":"","sources":["../../src/tests/JazzProviderWithClerk.test.tsx"],"names":[],"mappings":""}
|
@@ -1,112 +0,0 @@
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
2
|
-
// @vitest-environment happy-dom
|
3
|
-
import { act, render } from "@testing-library/react";
|
4
|
-
import { JazzClerkAuth } from "jazz-auth-clerk";
|
5
|
-
import { AuthSecretStorage, InMemoryKVStore, KvStoreContext } from "jazz-tools";
|
6
|
-
import { beforeEach, describe, expect, it, vi } from "vitest";
|
7
|
-
import { JazzProviderWithClerk } from "../index";
|
8
|
-
vi.mock("jazz-react", async (importOriginal) => {
|
9
|
-
const { JazzTestProvider, createJazzTestAccount } = await import("jazz-react/testing");
|
10
|
-
const account = await createJazzTestAccount({
|
11
|
-
isCurrentActiveAccount: true,
|
12
|
-
});
|
13
|
-
function JazzProvider(props) {
|
14
|
-
return (_jsx(JazzTestProvider, { account: account, children: props.children }));
|
15
|
-
}
|
16
|
-
return {
|
17
|
-
...(await importOriginal()),
|
18
|
-
JazzProvider,
|
19
|
-
};
|
20
|
-
});
|
21
|
-
vi.mock("jazz-auth-clerk", async (importOriginal) => {
|
22
|
-
const { JazzClerkAuth } = await import("jazz-auth-clerk");
|
23
|
-
JazzClerkAuth.loadClerkAuthData = vi.fn().mockResolvedValue(undefined);
|
24
|
-
return {
|
25
|
-
...(await importOriginal()),
|
26
|
-
JazzClerkAuth,
|
27
|
-
};
|
28
|
-
});
|
29
|
-
const authSecretStorage = new AuthSecretStorage();
|
30
|
-
KvStoreContext.getInstance().initialize(new InMemoryKVStore());
|
31
|
-
describe("JazzProviderWithClerk", () => {
|
32
|
-
beforeEach(async () => {
|
33
|
-
await authSecretStorage.clear();
|
34
|
-
vi.clearAllMocks();
|
35
|
-
});
|
36
|
-
const setup = (children = _jsx("div", { "data-testid": "test-child", children: "Test Content" })) => {
|
37
|
-
let callbacks = new Set();
|
38
|
-
const mockClerk = {
|
39
|
-
user: {
|
40
|
-
fullName: "Test User",
|
41
|
-
unsafeMetadata: {},
|
42
|
-
update: vi.fn(),
|
43
|
-
},
|
44
|
-
signOut: vi.fn().mockImplementation(() => {
|
45
|
-
mockClerk.user = null;
|
46
|
-
Array.from(callbacks).map((callback) => callback(mockClerk));
|
47
|
-
}),
|
48
|
-
addListener: vi.fn((callback) => {
|
49
|
-
callbacks.add(callback);
|
50
|
-
return () => {
|
51
|
-
callbacks.delete(callback);
|
52
|
-
};
|
53
|
-
}),
|
54
|
-
};
|
55
|
-
const utils = render(_jsx(JazzProviderWithClerk, { clerk: mockClerk, sync: { peer: "wss://test.jazz.tools" }, children: children }));
|
56
|
-
return {
|
57
|
-
...utils,
|
58
|
-
mockClerk,
|
59
|
-
callbacks,
|
60
|
-
};
|
61
|
-
};
|
62
|
-
it("should push the local credentials to clerk", async () => {
|
63
|
-
const { mockClerk, callbacks } = setup();
|
64
|
-
expect(mockClerk.user?.update).not.toHaveBeenCalled();
|
65
|
-
await act(async () => {
|
66
|
-
await Promise.all(Array.from(callbacks).map((callback) => callback(mockClerk)));
|
67
|
-
});
|
68
|
-
expect(mockClerk.user?.update).toHaveBeenCalledWith({
|
69
|
-
unsafeMetadata: {
|
70
|
-
jazzAccountID: expect.any(String),
|
71
|
-
jazzAccountSecret: expect.any(String),
|
72
|
-
jazzAccountSeed: expect.any(Array),
|
73
|
-
},
|
74
|
-
});
|
75
|
-
});
|
76
|
-
it("should load the clerk credentials when the user is authenticated", async () => {
|
77
|
-
render(_jsx(JazzProviderWithClerk, { clerk: {
|
78
|
-
addListener: vi.fn(),
|
79
|
-
signOut: vi.fn(),
|
80
|
-
user: {
|
81
|
-
update: vi.fn(),
|
82
|
-
unsafeMetadata: {
|
83
|
-
jazzAccountID: "test",
|
84
|
-
jazzAccountSecret: "test",
|
85
|
-
jazzAccountSeed: "test",
|
86
|
-
},
|
87
|
-
firstName: "Test",
|
88
|
-
lastName: "User",
|
89
|
-
username: "test",
|
90
|
-
fullName: "Test User",
|
91
|
-
id: "test",
|
92
|
-
primaryEmailAddress: {
|
93
|
-
emailAddress: "test@test.com",
|
94
|
-
},
|
95
|
-
},
|
96
|
-
}, sync: { peer: "wss://test.jazz.tools" }, children: _jsx("div", { "data-testid": "test-child", children: "Test Content" }) }));
|
97
|
-
expect(JazzClerkAuth.loadClerkAuthData).toHaveBeenCalledWith({
|
98
|
-
jazzAccountID: "test",
|
99
|
-
jazzAccountSecret: "test",
|
100
|
-
jazzAccountSeed: "test",
|
101
|
-
}, authSecretStorage);
|
102
|
-
});
|
103
|
-
it("should not load the clerk credentials when the user is not authenticated", async () => {
|
104
|
-
render(_jsx(JazzProviderWithClerk, { clerk: {
|
105
|
-
addListener: vi.fn(),
|
106
|
-
signOut: vi.fn(),
|
107
|
-
user: null,
|
108
|
-
}, sync: { peer: "wss://test.jazz.tools" }, children: _jsx("div", { "data-testid": "test-child", children: "Test Content" }) }));
|
109
|
-
expect(JazzClerkAuth.loadClerkAuthData).not.toHaveBeenCalledWith();
|
110
|
-
});
|
111
|
-
});
|
112
|
-
//# sourceMappingURL=JazzProviderWithClerk.test.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"JazzProviderWithClerk.test.js","sourceRoot":"","sources":["../../src/tests/JazzProviderWithClerk.test.tsx"],"names":[],"mappings":"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"}
|
@@ -1,165 +0,0 @@
|
|
1
|
-
// @vitest-environment happy-dom
|
2
|
-
|
3
|
-
import { act, render, waitFor } from "@testing-library/react";
|
4
|
-
import { JazzClerkAuth, type MinimalClerkClient } from "jazz-auth-clerk";
|
5
|
-
import { AuthSecretStorage, InMemoryKVStore, KvStoreContext } from "jazz-tools";
|
6
|
-
import { MockInstance, beforeEach, describe, expect, it, vi } from "vitest";
|
7
|
-
import { JazzProviderWithClerk } from "../index";
|
8
|
-
|
9
|
-
vi.mock("jazz-react", async (importOriginal) => {
|
10
|
-
const { JazzTestProvider, createJazzTestAccount } = await import(
|
11
|
-
"jazz-react/testing"
|
12
|
-
);
|
13
|
-
|
14
|
-
const account = await createJazzTestAccount({
|
15
|
-
isCurrentActiveAccount: true,
|
16
|
-
});
|
17
|
-
|
18
|
-
function JazzProvider(props: { children: React.ReactNode }) {
|
19
|
-
return (
|
20
|
-
<JazzTestProvider account={account}>{props.children}</JazzTestProvider>
|
21
|
-
);
|
22
|
-
}
|
23
|
-
|
24
|
-
return {
|
25
|
-
...(await importOriginal<typeof import("jazz-react")>()),
|
26
|
-
JazzProvider,
|
27
|
-
};
|
28
|
-
});
|
29
|
-
|
30
|
-
vi.mock("jazz-auth-clerk", async (importOriginal) => {
|
31
|
-
const { JazzClerkAuth } = await import("jazz-auth-clerk");
|
32
|
-
|
33
|
-
JazzClerkAuth.loadClerkAuthData = vi.fn().mockResolvedValue(undefined);
|
34
|
-
|
35
|
-
return {
|
36
|
-
...(await importOriginal<typeof import("jazz-auth-clerk")>()),
|
37
|
-
JazzClerkAuth,
|
38
|
-
};
|
39
|
-
});
|
40
|
-
|
41
|
-
const authSecretStorage = new AuthSecretStorage();
|
42
|
-
KvStoreContext.getInstance().initialize(new InMemoryKVStore());
|
43
|
-
|
44
|
-
describe("JazzProviderWithClerk", () => {
|
45
|
-
beforeEach(async () => {
|
46
|
-
await authSecretStorage.clear();
|
47
|
-
vi.clearAllMocks();
|
48
|
-
});
|
49
|
-
|
50
|
-
const setup = (
|
51
|
-
children = <div data-testid="test-child">Test Content</div>,
|
52
|
-
) => {
|
53
|
-
let callbacks = new Set<(clerk: MinimalClerkClient) => void>();
|
54
|
-
|
55
|
-
const mockClerk = {
|
56
|
-
user: {
|
57
|
-
fullName: "Test User",
|
58
|
-
unsafeMetadata: {},
|
59
|
-
update: vi.fn(),
|
60
|
-
},
|
61
|
-
signOut: vi.fn().mockImplementation(() => {
|
62
|
-
mockClerk.user = null;
|
63
|
-
Array.from(callbacks).map((callback) => callback(mockClerk));
|
64
|
-
}),
|
65
|
-
addListener: vi.fn((callback) => {
|
66
|
-
callbacks.add(callback);
|
67
|
-
|
68
|
-
return () => {
|
69
|
-
callbacks.delete(callback);
|
70
|
-
};
|
71
|
-
}),
|
72
|
-
} as unknown as MinimalClerkClient;
|
73
|
-
|
74
|
-
const utils = render(
|
75
|
-
<JazzProviderWithClerk
|
76
|
-
clerk={mockClerk}
|
77
|
-
sync={{ peer: "wss://test.jazz.tools" }}
|
78
|
-
>
|
79
|
-
{children}
|
80
|
-
</JazzProviderWithClerk>,
|
81
|
-
);
|
82
|
-
|
83
|
-
return {
|
84
|
-
...utils,
|
85
|
-
mockClerk,
|
86
|
-
callbacks,
|
87
|
-
};
|
88
|
-
};
|
89
|
-
|
90
|
-
it("should push the local credentials to clerk", async () => {
|
91
|
-
const { mockClerk, callbacks } = setup();
|
92
|
-
|
93
|
-
expect(mockClerk.user?.update).not.toHaveBeenCalled();
|
94
|
-
|
95
|
-
await act(async () => {
|
96
|
-
await Promise.all(
|
97
|
-
Array.from(callbacks).map((callback) => callback(mockClerk)),
|
98
|
-
);
|
99
|
-
});
|
100
|
-
|
101
|
-
expect(mockClerk.user?.update).toHaveBeenCalledWith({
|
102
|
-
unsafeMetadata: {
|
103
|
-
jazzAccountID: expect.any(String),
|
104
|
-
jazzAccountSecret: expect.any(String),
|
105
|
-
jazzAccountSeed: expect.any(Array),
|
106
|
-
},
|
107
|
-
});
|
108
|
-
});
|
109
|
-
|
110
|
-
it("should load the clerk credentials when the user is authenticated", async () => {
|
111
|
-
render(
|
112
|
-
<JazzProviderWithClerk
|
113
|
-
clerk={{
|
114
|
-
addListener: vi.fn(),
|
115
|
-
signOut: vi.fn(),
|
116
|
-
user: {
|
117
|
-
update: vi.fn(),
|
118
|
-
unsafeMetadata: {
|
119
|
-
jazzAccountID: "test",
|
120
|
-
jazzAccountSecret: "test",
|
121
|
-
jazzAccountSeed: "test",
|
122
|
-
},
|
123
|
-
firstName: "Test",
|
124
|
-
lastName: "User",
|
125
|
-
username: "test",
|
126
|
-
fullName: "Test User",
|
127
|
-
id: "test",
|
128
|
-
primaryEmailAddress: {
|
129
|
-
emailAddress: "test@test.com",
|
130
|
-
},
|
131
|
-
},
|
132
|
-
}}
|
133
|
-
sync={{ peer: "wss://test.jazz.tools" }}
|
134
|
-
>
|
135
|
-
<div data-testid="test-child">Test Content</div>
|
136
|
-
</JazzProviderWithClerk>,
|
137
|
-
);
|
138
|
-
|
139
|
-
expect(JazzClerkAuth.loadClerkAuthData).toHaveBeenCalledWith(
|
140
|
-
{
|
141
|
-
jazzAccountID: "test",
|
142
|
-
jazzAccountSecret: "test",
|
143
|
-
jazzAccountSeed: "test",
|
144
|
-
},
|
145
|
-
authSecretStorage,
|
146
|
-
);
|
147
|
-
});
|
148
|
-
|
149
|
-
it("should not load the clerk credentials when the user is not authenticated", async () => {
|
150
|
-
render(
|
151
|
-
<JazzProviderWithClerk
|
152
|
-
clerk={{
|
153
|
-
addListener: vi.fn(),
|
154
|
-
signOut: vi.fn(),
|
155
|
-
user: null,
|
156
|
-
}}
|
157
|
-
sync={{ peer: "wss://test.jazz.tools" }}
|
158
|
-
>
|
159
|
-
<div data-testid="test-child">Test Content</div>
|
160
|
-
</JazzProviderWithClerk>,
|
161
|
-
);
|
162
|
-
|
163
|
-
expect(JazzClerkAuth.loadClerkAuthData).not.toHaveBeenCalledWith();
|
164
|
-
});
|
165
|
-
});
|