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.
@@ -1,4 +1,4 @@
1
1
 
2
- > jazz-react-auth-clerk@0.13.3 build /home/runner/_work/jazz/jazz/packages/jazz-react-auth-clerk
2
+ > jazz-react-auth-clerk@0.13.4 build /home/runner/_work/jazz/jazz/packages/jazz-react-auth-clerk
3
3
  > rm -rf ./dist && tsc --sourceMap --outDir dist
4
4
 
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,kBAAkB,EAExB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAEL,iBAAiB,EAGlB,MAAM,YAAY,CAAC;AAiCpB,eAAO,MAAM,qBAAqB,UACzB;IAAE,KAAK,EAAE,kBAAkB,CAAA;CAAE,GAAG,iBAAiB,mDA+BzD,CAAC"}
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, isClerkCredentials, } from "jazz-auth-clerk";
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 { AuthSecretStorage, InMemoryKVStore, KvStoreContext } from "jazz-tools";
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
- // Need to use addListener because the clerk user object is not updated when the user logs in
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
- setupKvStore();
30
- const secretStorage = new AuthSecretStorage();
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
- if (!isClerkCredentials(props.clerk.user?.unsafeMetadata)) {
33
- setIsLoaded(true);
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, onLogOut: props.clerk.signOut, children: _jsx(RegisterClerkAuth, { clerk: props.clerk, children: props.children }) }));
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,EACL,aAAa,EAEb,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EACL,YAAY,EAEZ,oBAAoB,EACpB,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAChF,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,6FAA6F;QAC7F,OAAO,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE;YACjC,UAAU,CAAC,iBAAiB,CAAC,KAAyC,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,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;IAChD,YAAY,EAAE,CAAC;IACf,MAAM,aAAa,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAE9C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,CAAC;YAC1D,WAAW,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO;QACT,CAAC;QAED,aAAa,CAAC,iBAAiB,CAC7B,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,EAC/B,aAAa,CACd,CAAC,IAAI,CAAC,GAAG,EAAE;YACV,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,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,YACpD,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"}
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",
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.3",
11
- "jazz-browser": "0.13.3",
12
- "jazz-react": "0.13.3",
13
- "jazz-tools": "0.13.3"
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 { AuthSecretStorage, InMemoryKVStore, KvStoreContext } from "jazz-tools";
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
- // Need to use addListener because the clerk user object is not updated when the user logs in
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
- if (!isClerkCredentials(props.clerk.user?.unsafeMetadata)) {
54
- setIsLoaded(true);
55
- return;
56
- }
49
+ setupKvStore();
57
50
 
58
- JazzClerkAuth.loadClerkAuthData(
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} onLogOut={props.clerk.signOut}>
61
+ <JazzProvider {...props} logOutReplacement={props.clerk.signOut}>
72
62
  <RegisterClerkAuth clerk={props.clerk}>
73
63
  {props.children}
74
64
  </RegisterClerkAuth>
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=JazzProviderWithClerk.test.d.ts.map
@@ -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
- });