jazz-browser-auth-clerk 0.9.15 → 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.15 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,16 @@
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
+
3
14
  ## 0.9.15
4
15
 
5
16
  ### 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":"AAGA,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAoB1C,SAAS,6BAA6B,CAAC,WAAwB;IAC7D,YAAY,CAAC,OAAO,CAClB,eAAe,EACf,IAAI,CAAC,SAAS,CAAC;QACb,SAAS,EAAE,WAAW,CAAC,SAAS;QAChC,MAAM,EAAE,WAAW,CAAC,MAAM;KAC3B,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,gBAAgB;IAC3B,YACS,MAA+B,EACrB,WAA+B;QADzC,WAAM,GAAN,MAAM,CAAyB;QACrB,gBAAW,GAAX,WAAW,CAAoB;IAC/C,CAAC;IAEJ,KAAK,CAAC,KAAK;QACT,sCAAsC;QACtC,MAAM,wBAAwB,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAEvE,IAAI,wBAAwB,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAgB,CAAC;gBACxE,OAAO;oBACL,IAAI,EAAE,UAAU;oBAChB,WAAW;oBACX,eAAe,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC,EAAE,iEAAiE;oBAClG,SAAS,EAAE,GAAG,EAAE,GAAE,CAAC;oBACnB,OAAO,EAAE,CAAC,KAAqB,EAAE,EAAE;wBACjC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC7B,CAAC;oBACD,MAAM,EAAE,GAAG,EAAE;wBACX,YAAY,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;wBACzC,KAAK,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;oBAClC,CAAC;iBACF,CAAC;YACJ,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,CAAC,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YAC1B,4CAA4C;YAC5C,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC;YAC/D,IAAI,iBAAiB,CAAC,aAAa,EAAE,CAAC;gBACpC,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC;oBACzC,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;gBACjD,CAAC;gBACD,OAAO;oBACL,IAAI,EAAE,UAAU;oBAChB,WAAW,EAAE;wBACX,SAAS,EAAE,iBAAiB,CAAC,aAA4B;wBACzD,MAAM,EAAE,iBAAiB,CAAC,iBAAgC;qBAC3D;oBACD,eAAe,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAe,EAAE,EAAE;wBAC5D,6BAA6B,CAAC;4BAC5B,SAAS;4BACT,MAAM;yBACP,CAAC,CAAC;oBACL,CAAC;oBACD,SAAS,EAAE,GAAG,EAAE,GAAE,CAAC;oBACnB,OAAO,EAAE,CAAC,KAAqB,EAAE,EAAE;wBACjC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC7B,CAAC;oBACD,MAAM,EAAE,GAAG,EAAE;wBACX,KAAK,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;oBAClC,CAAC;iBACF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,6DAA6D;gBAC7D,OAAO;oBACL,IAAI,EAAE,KAAK;oBACX,aAAa,EAAE;wBACb,IAAI,EACF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ;4BAC9B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ;4BAC9B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;qBAC3B;oBACD,eAAe,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAe,EAAE,EAAE;wBAC5D,6BAA6B,CAAC;4BAC5B,SAAS;4BACT,MAAM;yBACP,CAAC,CAAC;wBACH,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC;4BAClC,cAAc,EAAE;gCACd,aAAa,EAAE,SAAS;gCACxB,iBAAiB,EAAE,MAAM;6BAC1B;yBACF,CAAC,CAAC;oBACL,CAAC;oBACD,SAAS,EAAE,GAAG,EAAE,GAAE,CAAC;oBACnB,OAAO,EAAE,CAAC,KAAqB,EAAE,EAAE;wBACjC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC7B,CAAC;oBACD,MAAM,EAAE,GAAG,EAAE;wBACX,KAAK,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;oBAClC,CAAC;iBACF,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,iDAAiD;YACjD,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;CACF"}
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.15",
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.15",
11
- "jazz-tools": "0.9.15"
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
  });