jazz-browser-auth-clerk 0.9.14 → 0.9.16

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-browser-auth-clerk@0.9.14 build /home/runner/work/jazz/jazz/packages/jazz-browser-auth-clerk
2
+ > jazz-browser-auth-clerk@0.9.16 build /home/runner/work/jazz/jazz/packages/jazz-browser-auth-clerk
3
3
  > rm -rf ./dist && tsc --sourceMap --outDir dist
4
4
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # jazz-browser-media-images
2
2
 
3
+ ## 0.9.16
4
+
5
+ ### Patch Changes
6
+
7
+ - 24b3b6a: Extract friendly user name for profile creation when authenticating using Clerk with a regular email address.
8
+ Email passed to creationProps when using Clerk auth
9
+ Clear stored Clerk credentials on logout
10
+ - Updated dependencies [24b3b6a]
11
+ - jazz-tools@0.9.16
12
+ - jazz-browser@0.9.16
13
+
14
+ ## 0.9.15
15
+
16
+ ### Patch Changes
17
+
18
+ - Updated dependencies [7491711]
19
+ - jazz-tools@0.9.15
20
+ - jazz-browser@0.9.15
21
+
3
22
  ## 0.9.14
4
23
 
5
24
  ### Patch Changes
package/dist/index.js CHANGED
@@ -5,14 +5,30 @@ function saveCredentialsToLocalStorage(credentials) {
5
5
  secret: credentials.secret,
6
6
  }));
7
7
  }
8
+ function clearStoredCredentials() {
9
+ localStorage.removeItem(localStorageKey);
10
+ }
8
11
  export class BrowserClerkAuth {
9
12
  constructor(driver, clerkClient) {
10
13
  this.driver = driver;
11
14
  this.clerkClient = clerkClient;
12
15
  }
13
16
  async start() {
14
- // Check local storage for credentials
15
- const locallyStoredCredentials = localStorage.getItem(localStorageKey);
17
+ // clear localStorage if the current Clerk user doesn't match stored credentials
18
+ let locallyStoredCredentials = localStorage.getItem(localStorageKey);
19
+ if (locallyStoredCredentials && this.clerkClient.user) {
20
+ try {
21
+ const stored = JSON.parse(locallyStoredCredentials);
22
+ const clerkMetadata = this.clerkClient.user.unsafeMetadata;
23
+ if (clerkMetadata.jazzAccountID !== stored.accountID) {
24
+ clearStoredCredentials();
25
+ }
26
+ }
27
+ catch (e) {
28
+ clearStoredCredentials();
29
+ }
30
+ }
31
+ locallyStoredCredentials = localStorage.getItem(localStorageKey);
16
32
  if (locallyStoredCredentials) {
17
33
  try {
18
34
  const credentials = JSON.parse(locallyStoredCredentials);
@@ -25,7 +41,7 @@ export class BrowserClerkAuth {
25
41
  this.driver.onError(error);
26
42
  },
27
43
  logOut: () => {
28
- localStorage.removeItem(localStorageKey);
44
+ clearStoredCredentials();
29
45
  void this.clerkClient.signOut();
30
46
  },
31
47
  };
@@ -58,6 +74,7 @@ export class BrowserClerkAuth {
58
74
  this.driver.onError(error);
59
75
  },
60
76
  logOut: () => {
77
+ clearStoredCredentials();
61
78
  void this.clerkClient.signOut();
62
79
  },
63
80
  };
@@ -68,8 +85,13 @@ export class BrowserClerkAuth {
68
85
  type: "new",
69
86
  creationProps: {
70
87
  name: this.clerkClient.user.fullName ||
88
+ this.clerkClient.user.firstName ||
71
89
  this.clerkClient.user.username ||
90
+ this.clerkClient.user.primaryEmailAddress?.emailAddress?.split("@")[0] ||
72
91
  this.clerkClient.user.id,
92
+ other: {
93
+ email: this.clerkClient.user.primaryEmailAddress?.emailAddress,
94
+ },
73
95
  },
74
96
  saveCredentials: async ({ accountID, secret }) => {
75
97
  saveCredentialsToLocalStorage({
@@ -88,6 +110,7 @@ export class BrowserClerkAuth {
88
110
  this.driver.onError(error);
89
111
  },
90
112
  logOut: () => {
113
+ clearStoredCredentials();
91
114
  void this.clerkClient.signOut();
92
115
  },
93
116
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,8 @@ describe("BrowserClerkAuth", () => {
25
25
  unsafeMetadata: {},
26
26
  fullName: "Test User",
27
27
  username: "testuser",
28
+ firstName: null,
29
+ primaryEmailAddress: null,
28
30
  id: "test-id",
29
31
  update: vi.fn(),
30
32
  },
@@ -64,6 +66,8 @@ describe("BrowserClerkAuth", () => {
64
66
  },
65
67
  fullName: "Test User",
66
68
  username: "testuser",
69
+ firstName: null,
70
+ primaryEmailAddress: null,
67
71
  id: "test-id",
68
72
  update: vi.fn(),
69
73
  },
@@ -97,6 +101,67 @@ describe("BrowserClerkAuth", () => {
97
101
  result.logOut();
98
102
  expect(mockClerkClient.signOut).toHaveBeenCalled();
99
103
  });
104
+ it("should resolve name from available user fields", async () => {
105
+ const testCases = [
106
+ {
107
+ user: {
108
+ unsafeMetadata: {},
109
+ fullName: "Full Name",
110
+ firstName: null,
111
+ username: null,
112
+ primaryEmailAddress: null,
113
+ id: "test-id",
114
+ update: vi.fn(),
115
+ },
116
+ expected: "Full Name",
117
+ },
118
+ {
119
+ user: {
120
+ unsafeMetadata: {},
121
+ fullName: null,
122
+ firstName: "First",
123
+ username: null,
124
+ primaryEmailAddress: null,
125
+ id: "test-id",
126
+ update: vi.fn(),
127
+ },
128
+ expected: "First",
129
+ },
130
+ {
131
+ user: {
132
+ unsafeMetadata: {},
133
+ fullName: null,
134
+ firstName: null,
135
+ username: "username123",
136
+ primaryEmailAddress: null,
137
+ id: "test-id",
138
+ update: vi.fn(),
139
+ },
140
+ expected: "username123",
141
+ },
142
+ {
143
+ user: {
144
+ unsafeMetadata: {},
145
+ fullName: null,
146
+ firstName: null,
147
+ username: null,
148
+ primaryEmailAddress: { emailAddress: "test@example.com" },
149
+ id: "test-id",
150
+ update: vi.fn(),
151
+ },
152
+ expected: "test",
153
+ },
154
+ ];
155
+ for (const { user, expected } of testCases) {
156
+ const auth = new BrowserClerkAuth(mockDriver, {
157
+ ...mockClerkClient,
158
+ user,
159
+ });
160
+ const result = await auth.start();
161
+ expect(result.type).toBe("new");
162
+ expect(result.creationProps.name).toBe(expected);
163
+ }
164
+ });
100
165
  });
101
166
  });
102
167
  //# sourceMappingURL=BrowserClerkAuth.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BrowserClerkAuth.test.js","sourceRoot":"","sources":["../../src/tests/BrowserClerkAuth.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BrowserClerkAuth.test.js","sourceRoot":"","sources":["../../src/tests/BrowserClerkAuth.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "jazz-browser-auth-clerk",
3
- "version": "0.9.14",
3
+ "version": "0.9.16",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "src/index.ts",
7
7
  "license": "MIT",
8
8
  "dependencies": {
9
9
  "cojson": "0.9.13",
10
- "jazz-browser": "0.9.14",
11
- "jazz-tools": "0.9.14"
10
+ "jazz-browser": "0.9.16",
11
+ "jazz-tools": "0.9.16"
12
12
  },
13
13
  "devDependencies": {
14
14
  "typescript": "~5.6.2"
package/src/index.ts CHANGED
@@ -1,8 +1,6 @@
1
1
  import { AgentSecret } from "cojson";
2
2
  import { Account, AuthMethod, AuthResult, Credentials, ID } from "jazz-tools";
3
3
 
4
- const localStorageKey = "jazz-clerk-auth";
5
-
6
4
  export type MinimalClerkClient = {
7
5
  user:
8
6
  | {
@@ -10,6 +8,10 @@ export type MinimalClerkClient = {
10
8
  unsafeMetadata: Record<string, any>;
11
9
  fullName: string | null;
12
10
  username: string | null;
11
+ firstName: string | null;
12
+ primaryEmailAddress: {
13
+ emailAddress: string;
14
+ } | null;
13
15
  id: string;
14
16
  update: (args: {
15
17
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -21,6 +23,8 @@ export type MinimalClerkClient = {
21
23
  signOut: () => Promise<void>;
22
24
  };
23
25
 
26
+ const localStorageKey = "jazz-clerk-auth";
27
+
24
28
  function saveCredentialsToLocalStorage(credentials: Credentials) {
25
29
  localStorage.setItem(
26
30
  localStorageKey,
@@ -31,6 +35,10 @@ function saveCredentialsToLocalStorage(credentials: Credentials) {
31
35
  );
32
36
  }
33
37
 
38
+ function clearStoredCredentials() {
39
+ localStorage.removeItem(localStorageKey);
40
+ }
41
+
34
42
  export class BrowserClerkAuth implements AuthMethod {
35
43
  constructor(
36
44
  public driver: BrowserClerkAuth.Driver,
@@ -38,8 +46,21 @@ export class BrowserClerkAuth implements AuthMethod {
38
46
  ) {}
39
47
 
40
48
  async start(): Promise<AuthResult> {
41
- // Check local storage for credentials
42
- const locallyStoredCredentials = localStorage.getItem(localStorageKey);
49
+ // clear localStorage if the current Clerk user doesn't match stored credentials
50
+ let locallyStoredCredentials = localStorage.getItem(localStorageKey);
51
+ if (locallyStoredCredentials && this.clerkClient.user) {
52
+ try {
53
+ const stored = JSON.parse(locallyStoredCredentials);
54
+ const clerkMetadata = this.clerkClient.user.unsafeMetadata;
55
+ if (clerkMetadata.jazzAccountID !== stored.accountID) {
56
+ clearStoredCredentials();
57
+ }
58
+ } catch (e) {
59
+ clearStoredCredentials();
60
+ }
61
+ }
62
+
63
+ locallyStoredCredentials = localStorage.getItem(localStorageKey);
43
64
 
44
65
  if (locallyStoredCredentials) {
45
66
  try {
@@ -53,7 +74,7 @@ export class BrowserClerkAuth implements AuthMethod {
53
74
  this.driver.onError(error);
54
75
  },
55
76
  logOut: () => {
56
- localStorage.removeItem(localStorageKey);
77
+ clearStoredCredentials();
57
78
  void this.clerkClient.signOut();
58
79
  },
59
80
  };
@@ -86,6 +107,7 @@ export class BrowserClerkAuth implements AuthMethod {
86
107
  this.driver.onError(error);
87
108
  },
88
109
  logOut: () => {
110
+ clearStoredCredentials();
89
111
  void this.clerkClient.signOut();
90
112
  },
91
113
  };
@@ -96,8 +118,15 @@ export class BrowserClerkAuth implements AuthMethod {
96
118
  creationProps: {
97
119
  name:
98
120
  this.clerkClient.user.fullName ||
121
+ this.clerkClient.user.firstName ||
99
122
  this.clerkClient.user.username ||
123
+ this.clerkClient.user.primaryEmailAddress?.emailAddress?.split(
124
+ "@",
125
+ )[0] ||
100
126
  this.clerkClient.user.id,
127
+ other: {
128
+ email: this.clerkClient.user.primaryEmailAddress?.emailAddress,
129
+ },
101
130
  },
102
131
  saveCredentials: async ({ accountID, secret }: Credentials) => {
103
132
  saveCredentialsToLocalStorage({
@@ -116,6 +145,7 @@ export class BrowserClerkAuth implements AuthMethod {
116
145
  this.driver.onError(error);
117
146
  },
118
147
  logOut: () => {
148
+ clearStoredCredentials();
119
149
  void this.clerkClient.signOut();
120
150
  },
121
151
  };
@@ -30,6 +30,8 @@ describe("BrowserClerkAuth", () => {
30
30
  unsafeMetadata: {},
31
31
  fullName: "Test User",
32
32
  username: "testuser",
33
+ firstName: null,
34
+ primaryEmailAddress: null,
33
35
  id: "test-id",
34
36
  update: vi.fn(),
35
37
  },
@@ -75,6 +77,8 @@ describe("BrowserClerkAuth", () => {
75
77
  },
76
78
  fullName: "Test User",
77
79
  username: "testuser",
80
+ firstName: null,
81
+ primaryEmailAddress: null,
78
82
  id: "test-id",
79
83
  update: vi.fn(),
80
84
  },
@@ -115,5 +119,68 @@ describe("BrowserClerkAuth", () => {
115
119
 
116
120
  expect(mockClerkClient.signOut).toHaveBeenCalled();
117
121
  });
122
+
123
+ it("should resolve name from available user fields", async () => {
124
+ const testCases = [
125
+ {
126
+ user: {
127
+ unsafeMetadata: {},
128
+ fullName: "Full Name",
129
+ firstName: null,
130
+ username: null,
131
+ primaryEmailAddress: null,
132
+ id: "test-id",
133
+ update: vi.fn(),
134
+ },
135
+ expected: "Full Name",
136
+ },
137
+ {
138
+ user: {
139
+ unsafeMetadata: {},
140
+ fullName: null,
141
+ firstName: "First",
142
+ username: null,
143
+ primaryEmailAddress: null,
144
+ id: "test-id",
145
+ update: vi.fn(),
146
+ },
147
+ expected: "First",
148
+ },
149
+ {
150
+ user: {
151
+ unsafeMetadata: {},
152
+ fullName: null,
153
+ firstName: null,
154
+ username: "username123",
155
+ primaryEmailAddress: null,
156
+ id: "test-id",
157
+ update: vi.fn(),
158
+ },
159
+ expected: "username123",
160
+ },
161
+ {
162
+ user: {
163
+ unsafeMetadata: {},
164
+ fullName: null,
165
+ firstName: null,
166
+ username: null,
167
+ primaryEmailAddress: { emailAddress: "test@example.com" },
168
+ id: "test-id",
169
+ update: vi.fn(),
170
+ },
171
+ expected: "test",
172
+ },
173
+ ];
174
+
175
+ for (const { user, expected } of testCases) {
176
+ const auth = new BrowserClerkAuth(mockDriver, {
177
+ ...mockClerkClient,
178
+ user,
179
+ });
180
+ const result = await auth.start();
181
+ expect(result.type).toBe("new");
182
+ expect((result as any).creationProps.name).toBe(expected);
183
+ }
184
+ });
118
185
  });
119
186
  });