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.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +19 -0
- package/dist/index.js +26 -3
- package/dist/index.js.map +1 -1
- package/dist/tests/BrowserClerkAuth.test.js +65 -0
- package/dist/tests/BrowserClerkAuth.test.js.map +1 -1
- package/package.json +3 -3
- package/src/index.ts +35 -5
- package/src/tests/BrowserClerkAuth.test.ts +67 -0
package/.turbo/turbo-build.log
CHANGED
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
|
-
//
|
15
|
-
|
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
|
-
|
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":"
|
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.
|
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.
|
11
|
-
"jazz-tools": "0.9.
|
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
|
-
//
|
42
|
-
|
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
|
-
|
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
|
});
|