jazz-react-auth-clerk 0.10.5 → 0.10.7

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.10.5 build /home/runner/_work/jazz/jazz/packages/jazz-react-auth-clerk
2
+ > jazz-react-auth-clerk@0.10.7 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,35 @@
1
1
  # jazz-browser-media-images
2
2
 
3
+ ## 0.10.7
4
+
5
+ ### Patch Changes
6
+
7
+ - 1136d9b: Fixed isAuthenticated out-of-sync with the account state during the logOut and authenticate flows
8
+ - 0eed228: Fixes clerk auth flow
9
+ - Updated dependencies [0f83320]
10
+ - Updated dependencies [012022d]
11
+ - Updated dependencies [1136d9b]
12
+ - Updated dependencies [bf76d79]
13
+ - Updated dependencies [0eed228]
14
+ - cojson@0.10.7
15
+ - jazz-auth-clerk@0.10.7
16
+ - jazz-browser@0.10.7
17
+ - jazz-react@0.10.7
18
+ - jazz-tools@0.10.7
19
+
20
+ ## 0.10.6
21
+
22
+ ### Patch Changes
23
+
24
+ - 1d71ca1: Add React 19 to the peer dependencies
25
+ - Updated dependencies [1d71ca1]
26
+ - Updated dependencies [5c76e37]
27
+ - Updated dependencies [ada802b]
28
+ - jazz-react@0.10.6
29
+ - cojson@0.10.6
30
+ - jazz-tools@0.10.6
31
+ - jazz-auth-clerk@0.10.6
32
+
3
33
  ## 0.10.5
4
34
 
5
35
  ### Patch Changes
package/dist/index.js CHANGED
@@ -1,7 +1,9 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { JazzClerkAuth } from "jazz-auth-clerk";
2
+ import { JazzClerkAuth, isClerkCredentials, } from "jazz-auth-clerk";
3
+ import { LocalStorageKVStore } from "jazz-browser";
3
4
  import { JazzProvider, useAuthSecretStorage, useJazzContext, } from "jazz-react";
4
- import { useEffect, useMemo } from "react";
5
+ import { AuthSecretStorage, InMemoryKVStore, KvStoreContext } from "jazz-tools";
6
+ import { useEffect, useMemo, useState } from "react";
5
7
  function useJazzClerkAuth(clerk) {
6
8
  const context = useJazzContext();
7
9
  const authSecretStorage = useAuthSecretStorage();
@@ -23,6 +25,26 @@ function RegisterClerkAuth(props) {
23
25
  return props.children;
24
26
  }
25
27
  export const JazzProviderWithClerk = (props) => {
28
+ const [isLoaded, setIsLoaded] = useState(false);
29
+ setupKvStore();
30
+ const secretStorage = new AuthSecretStorage();
31
+ useEffect(() => {
32
+ if (!isClerkCredentials(props.clerk.user?.unsafeMetadata)) {
33
+ setIsLoaded(true);
34
+ return;
35
+ }
36
+ JazzClerkAuth.loadClerkAuthData(props.clerk.user.unsafeMetadata, secretStorage).then(() => {
37
+ setIsLoaded(true);
38
+ });
39
+ }, []);
40
+ if (!isLoaded) {
41
+ return null;
42
+ }
26
43
  return (_jsx(JazzProvider, { ...props, onLogOut: props.clerk.signOut, children: _jsx(RegisterClerkAuth, { clerk: props.clerk, children: props.children }) }));
27
44
  };
45
+ function setupKvStore() {
46
+ KvStoreContext.getInstance().initialize(typeof window === "undefined"
47
+ ? new InMemoryKVStore()
48
+ : new LocalStorageKVStore());
49
+ }
28
50
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAA2B,MAAM,iBAAiB,CAAC;AACzE,OAAO,EACL,YAAY,EAEZ,oBAAoB,EACpB,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAE3C,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,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"}
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,6 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  // @vitest-environment happy-dom
3
3
  import { act, render } from "@testing-library/react";
4
+ import { JazzClerkAuth } from "jazz-auth-clerk";
4
5
  import { AuthSecretStorage, InMemoryKVStore, KvStoreContext } from "jazz-tools";
5
6
  import { beforeEach, describe, expect, it, vi } from "vitest";
6
7
  import { JazzProviderWithClerk } from "../index";
@@ -17,11 +18,20 @@ vi.mock("jazz-react", async (importOriginal) => {
17
18
  JazzProvider,
18
19
  };
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
+ });
20
29
  const authSecretStorage = new AuthSecretStorage();
21
30
  KvStoreContext.getInstance().initialize(new InMemoryKVStore());
22
31
  describe("JazzProviderWithClerk", () => {
23
32
  beforeEach(async () => {
24
33
  await authSecretStorage.clear();
34
+ vi.clearAllMocks();
25
35
  });
26
36
  const setup = (children = _jsx("div", { "data-testid": "test-child", children: "Test Content" })) => {
27
37
  let callbacks = new Set();
@@ -63,5 +73,40 @@ describe("JazzProviderWithClerk", () => {
63
73
  },
64
74
  });
65
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
+ });
66
111
  });
67
112
  //# sourceMappingURL=JazzProviderWithClerk.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"JazzProviderWithClerk.test.js","sourceRoot":"","sources":["../../src/tests/JazzProviderWithClerk.test.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"JazzProviderWithClerk.test.js","sourceRoot":"","sources":["../../src/tests/JazzProviderWithClerk.test.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,18 +1,19 @@
1
1
  {
2
2
  "name": "jazz-react-auth-clerk",
3
- "version": "0.10.5",
3
+ "version": "0.10.7",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "src/index.tsx",
7
7
  "license": "MIT",
8
8
  "dependencies": {
9
- "cojson": "0.10.4",
10
- "jazz-auth-clerk": "0.10.5",
11
- "jazz-react": "0.10.5",
12
- "jazz-tools": "0.10.5"
9
+ "cojson": "0.10.7",
10
+ "jazz-auth-clerk": "0.10.7",
11
+ "jazz-browser": "0.10.7",
12
+ "jazz-react": "0.10.7",
13
+ "jazz-tools": "0.10.7"
13
14
  },
14
15
  "peerDependencies": {
15
- "react": "^18.2.0"
16
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
16
17
  },
17
18
  "devDependencies": {
18
19
  "@testing-library/react": "^16.1.0",
package/src/index.tsx CHANGED
@@ -1,11 +1,17 @@
1
- import { JazzClerkAuth, type MinimalClerkClient } from "jazz-auth-clerk";
1
+ import {
2
+ JazzClerkAuth,
3
+ type MinimalClerkClient,
4
+ isClerkCredentials,
5
+ } from "jazz-auth-clerk";
6
+ import { LocalStorageKVStore } from "jazz-browser";
2
7
  import {
3
8
  JazzProvider,
4
9
  JazzProviderProps,
5
10
  useAuthSecretStorage,
6
11
  useJazzContext,
7
12
  } from "jazz-react";
8
- import { useEffect, useMemo } from "react";
13
+ import { AuthSecretStorage, InMemoryKVStore, KvStoreContext } from "jazz-tools";
14
+ import { useEffect, useMemo, useState } from "react";
9
15
 
10
16
  function useJazzClerkAuth(clerk: MinimalClerkClient) {
11
17
  const context = useJazzContext();
@@ -39,6 +45,28 @@ function RegisterClerkAuth(props: {
39
45
  export const JazzProviderWithClerk = (
40
46
  props: { clerk: MinimalClerkClient } & JazzProviderProps,
41
47
  ) => {
48
+ const [isLoaded, setIsLoaded] = useState(false);
49
+ setupKvStore();
50
+ const secretStorage = new AuthSecretStorage();
51
+
52
+ useEffect(() => {
53
+ if (!isClerkCredentials(props.clerk.user?.unsafeMetadata)) {
54
+ setIsLoaded(true);
55
+ return;
56
+ }
57
+
58
+ JazzClerkAuth.loadClerkAuthData(
59
+ props.clerk.user.unsafeMetadata,
60
+ secretStorage,
61
+ ).then(() => {
62
+ setIsLoaded(true);
63
+ });
64
+ }, []);
65
+
66
+ if (!isLoaded) {
67
+ return null;
68
+ }
69
+
42
70
  return (
43
71
  <JazzProvider {...props} onLogOut={props.clerk.signOut}>
44
72
  <RegisterClerkAuth clerk={props.clerk}>
@@ -47,3 +75,11 @@ export const JazzProviderWithClerk = (
47
75
  </JazzProvider>
48
76
  );
49
77
  };
78
+
79
+ function setupKvStore() {
80
+ KvStoreContext.getInstance().initialize(
81
+ typeof window === "undefined"
82
+ ? new InMemoryKVStore()
83
+ : new LocalStorageKVStore(),
84
+ );
85
+ }
@@ -1,9 +1,9 @@
1
1
  // @vitest-environment happy-dom
2
2
 
3
3
  import { act, render, waitFor } from "@testing-library/react";
4
- import type { MinimalClerkClient } from "jazz-auth-clerk";
4
+ import { JazzClerkAuth, type MinimalClerkClient } from "jazz-auth-clerk";
5
5
  import { AuthSecretStorage, InMemoryKVStore, KvStoreContext } from "jazz-tools";
6
- import { beforeEach, describe, expect, it, vi } from "vitest";
6
+ import { MockInstance, beforeEach, describe, expect, it, vi } from "vitest";
7
7
  import { JazzProviderWithClerk } from "../index";
8
8
 
9
9
  vi.mock("jazz-react", async (importOriginal) => {
@@ -27,12 +27,24 @@ vi.mock("jazz-react", async (importOriginal) => {
27
27
  };
28
28
  });
29
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
+
30
41
  const authSecretStorage = new AuthSecretStorage();
31
42
  KvStoreContext.getInstance().initialize(new InMemoryKVStore());
32
43
 
33
44
  describe("JazzProviderWithClerk", () => {
34
45
  beforeEach(async () => {
35
46
  await authSecretStorage.clear();
47
+ vi.clearAllMocks();
36
48
  });
37
49
 
38
50
  const setup = (
@@ -94,4 +106,60 @@ describe("JazzProviderWithClerk", () => {
94
106
  },
95
107
  });
96
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
+ });
97
165
  });