@dream-api/sdk 0.1.31 → 0.1.33
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/dist/index.js +81 -78
- package/dist/index.mjs +81 -78
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -194,6 +194,7 @@ var JWT_TEMPLATE = "end-user-api";
|
|
|
194
194
|
function getClerk() {
|
|
195
195
|
return window.Clerk;
|
|
196
196
|
}
|
|
197
|
+
var STORAGE_KEY = "dream_api_jwt";
|
|
197
198
|
var ClerkManager = class {
|
|
198
199
|
constructor(mode, onTokenChange) {
|
|
199
200
|
this.loaded = false;
|
|
@@ -202,25 +203,57 @@ var ClerkManager = class {
|
|
|
202
203
|
this.onTokenChange = onTokenChange;
|
|
203
204
|
}
|
|
204
205
|
/**
|
|
205
|
-
* Load
|
|
206
|
+
* Load auth (call once on page load)
|
|
207
|
+
* Uses JWT from URL or localStorage - no Clerk needed on dev's domain
|
|
206
208
|
*/
|
|
207
209
|
async load() {
|
|
208
210
|
if (this.loaded || typeof window === "undefined") return;
|
|
209
211
|
const urlParams = new URLSearchParams(window.location.search);
|
|
210
212
|
const jwt = urlParams.get("__clerk_jwt");
|
|
211
213
|
if (jwt) {
|
|
212
|
-
console.log("[DreamAPI] JWT received from
|
|
213
|
-
this.
|
|
214
|
-
this.onTokenChange?.(jwt);
|
|
214
|
+
console.log("[DreamAPI] JWT received from auth worker");
|
|
215
|
+
this.setToken(jwt);
|
|
215
216
|
urlParams.delete("__clerk_jwt");
|
|
216
217
|
const newUrl = urlParams.toString() ? `${window.location.pathname}?${urlParams}` : window.location.pathname;
|
|
217
218
|
window.history.replaceState({}, "", newUrl);
|
|
218
219
|
this.loaded = true;
|
|
219
220
|
return;
|
|
220
221
|
}
|
|
222
|
+
const storedJwt = localStorage.getItem(STORAGE_KEY);
|
|
223
|
+
if (storedJwt) {
|
|
224
|
+
try {
|
|
225
|
+
const payload = JSON.parse(atob(storedJwt.split(".")[1].replace(/-/g, "+").replace(/_/g, "/")));
|
|
226
|
+
const now = Math.floor(Date.now() / 1e3);
|
|
227
|
+
if (payload.exp && payload.exp > now) {
|
|
228
|
+
console.log("[DreamAPI] Valid JWT from localStorage");
|
|
229
|
+
this.token = storedJwt;
|
|
230
|
+
this.onTokenChange?.(storedJwt);
|
|
231
|
+
this.loaded = true;
|
|
232
|
+
return;
|
|
233
|
+
} else {
|
|
234
|
+
console.log("[DreamAPI] Stored JWT expired, clearing");
|
|
235
|
+
localStorage.removeItem(STORAGE_KEY);
|
|
236
|
+
}
|
|
237
|
+
} catch (e) {
|
|
238
|
+
console.log("[DreamAPI] Invalid stored JWT, clearing");
|
|
239
|
+
localStorage.removeItem(STORAGE_KEY);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
if (this.mode === "test") {
|
|
243
|
+
try {
|
|
244
|
+
await this.loadClerkSDK();
|
|
245
|
+
} catch (e) {
|
|
246
|
+
console.log("[DreamAPI] Clerk load failed (expected in some environments)");
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
this.loaded = true;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Load Clerk SDK (test mode only, for better DX on localhost)
|
|
253
|
+
*/
|
|
254
|
+
async loadClerkSDK() {
|
|
221
255
|
const existingClerk = getClerk();
|
|
222
256
|
if (existingClerk) {
|
|
223
|
-
this.loaded = true;
|
|
224
257
|
await this.checkSession();
|
|
225
258
|
return;
|
|
226
259
|
}
|
|
@@ -242,55 +275,16 @@ var ClerkManager = class {
|
|
|
242
275
|
}
|
|
243
276
|
if (clerk) {
|
|
244
277
|
await clerk.load();
|
|
245
|
-
|
|
246
|
-
const ticket = urlParams2.get("__clerk_ticket");
|
|
247
|
-
console.log("[DreamAPI] URL:", window.location.href);
|
|
248
|
-
console.log("[DreamAPI] Ticket present:", ticket ? "YES" : "NO");
|
|
249
|
-
const sdkDebug = {
|
|
250
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
251
|
-
url: window.location.href,
|
|
252
|
-
hasTicket: !!ticket,
|
|
253
|
-
ticketLength: ticket ? ticket.length : 0,
|
|
254
|
-
signupDebug: localStorage.getItem("dream_signup_debug"),
|
|
255
|
-
signupRedirect: localStorage.getItem("dream_signup_redirect")
|
|
256
|
-
};
|
|
257
|
-
localStorage.setItem("dream_sdk_debug", JSON.stringify(sdkDebug));
|
|
258
|
-
if (ticket) {
|
|
259
|
-
for (let i = 0; i < 50; i++) {
|
|
260
|
-
const hasSignIn = clerk.signIn || clerk.client?.signIn;
|
|
261
|
-
if (hasSignIn && clerk.setActive) break;
|
|
262
|
-
await new Promise((r) => setTimeout(r, 100));
|
|
263
|
-
}
|
|
264
|
-
console.log("[DreamAPI] signIn available:", !!clerk.signIn, "client.signIn:", !!clerk.client?.signIn, "setActive:", !!clerk.setActive);
|
|
265
|
-
}
|
|
266
|
-
const signInObj = clerk.signIn || clerk.client?.signIn;
|
|
267
|
-
if (ticket && signInObj && clerk.setActive) {
|
|
268
|
-
console.log("[DreamAPI] Consuming ticket...");
|
|
269
|
-
try {
|
|
270
|
-
const result = await signInObj.create({ strategy: "ticket", ticket });
|
|
271
|
-
console.log("[DreamAPI] Ticket result:", result.status, result.createdSessionId);
|
|
272
|
-
if (result.status === "complete" && result.createdSessionId) {
|
|
273
|
-
await clerk.setActive({ session: result.createdSessionId });
|
|
274
|
-
console.log("[DreamAPI] Session activated!");
|
|
275
|
-
for (let i = 0; i < 20; i++) {
|
|
276
|
-
await new Promise((r) => setTimeout(r, 100));
|
|
277
|
-
if (clerk.user && clerk.session) break;
|
|
278
|
-
}
|
|
279
|
-
console.log("[DreamAPI] User hydrated:", !!clerk.user);
|
|
280
|
-
urlParams2.delete("__clerk_ticket");
|
|
281
|
-
const newUrl = urlParams2.toString() ? `${window.location.pathname}?${urlParams2}` : window.location.pathname;
|
|
282
|
-
window.history.replaceState({}, "", newUrl);
|
|
283
|
-
}
|
|
284
|
-
} catch (err) {
|
|
285
|
-
console.error("[DreamAPI] Ticket error:", err?.message, err);
|
|
286
|
-
}
|
|
287
|
-
} else if (ticket) {
|
|
288
|
-
console.error("[DreamAPI] FAILED to get signIn object! Ticket NOT consumed.");
|
|
289
|
-
console.log("[DreamAPI] clerk keys:", Object.keys(clerk));
|
|
290
|
-
}
|
|
278
|
+
await this.checkSession();
|
|
291
279
|
}
|
|
292
|
-
|
|
293
|
-
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Store JWT in memory and localStorage
|
|
283
|
+
*/
|
|
284
|
+
setToken(jwt) {
|
|
285
|
+
this.token = jwt;
|
|
286
|
+
localStorage.setItem(STORAGE_KEY, jwt);
|
|
287
|
+
this.onTokenChange?.(jwt);
|
|
294
288
|
}
|
|
295
289
|
/**
|
|
296
290
|
* Check if returning from auth and grab token
|
|
@@ -319,6 +313,17 @@ var ClerkManager = class {
|
|
|
319
313
|
* Get current user info
|
|
320
314
|
*/
|
|
321
315
|
getUser() {
|
|
316
|
+
const clerk = getClerk();
|
|
317
|
+
if (clerk?.user) {
|
|
318
|
+
const user = clerk.user;
|
|
319
|
+
const metadata = user.publicMetadata || {};
|
|
320
|
+
return {
|
|
321
|
+
id: user.id,
|
|
322
|
+
email: user.primaryEmailAddress?.emailAddress || "",
|
|
323
|
+
plan: metadata.plan || "free",
|
|
324
|
+
publishableKey: metadata.publishableKey || ""
|
|
325
|
+
};
|
|
326
|
+
}
|
|
322
327
|
if (this.token) {
|
|
323
328
|
try {
|
|
324
329
|
const parts = this.token.split(".");
|
|
@@ -335,16 +340,7 @@ var ClerkManager = class {
|
|
|
335
340
|
console.error("[DreamAPI] Failed to decode JWT:", e);
|
|
336
341
|
}
|
|
337
342
|
}
|
|
338
|
-
|
|
339
|
-
if (!clerk?.user) return null;
|
|
340
|
-
const user = clerk.user;
|
|
341
|
-
const metadata = user.publicMetadata || {};
|
|
342
|
-
return {
|
|
343
|
-
id: user.id,
|
|
344
|
-
email: user.primaryEmailAddress?.emailAddress || "",
|
|
345
|
-
plan: metadata.plan || "free",
|
|
346
|
-
publishableKey: metadata.publishableKey || ""
|
|
347
|
-
};
|
|
343
|
+
return null;
|
|
348
344
|
}
|
|
349
345
|
/**
|
|
350
346
|
* Get current token
|
|
@@ -353,33 +349,40 @@ var ClerkManager = class {
|
|
|
353
349
|
return this.token;
|
|
354
350
|
}
|
|
355
351
|
/**
|
|
356
|
-
* Refresh token and user data
|
|
357
|
-
*
|
|
352
|
+
* Refresh token and user data
|
|
353
|
+
* In test mode: refreshes from Clerk session
|
|
354
|
+
* In live mode: returns current token (re-auth needed for fresh data)
|
|
358
355
|
*/
|
|
359
356
|
async refreshToken() {
|
|
360
357
|
const clerk = getClerk();
|
|
361
|
-
if (
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
358
|
+
if (clerk?.session) {
|
|
359
|
+
try {
|
|
360
|
+
if (clerk.user?.reload) {
|
|
361
|
+
await clerk.user.reload();
|
|
362
|
+
}
|
|
363
|
+
this.token = await clerk.session.getToken({ template: JWT_TEMPLATE });
|
|
364
|
+
this.setToken(this.token);
|
|
365
|
+
return this.token;
|
|
366
|
+
} catch (err) {
|
|
367
|
+
console.error("Failed to refresh token from Clerk:", err);
|
|
365
368
|
}
|
|
366
|
-
this.token = await clerk.session.getToken({ template: JWT_TEMPLATE });
|
|
367
|
-
this.onTokenChange?.(this.token);
|
|
368
|
-
return this.token;
|
|
369
|
-
} catch (err) {
|
|
370
|
-
console.error("Failed to refresh token:", err);
|
|
371
|
-
return null;
|
|
372
369
|
}
|
|
370
|
+
return this.token;
|
|
373
371
|
}
|
|
374
372
|
/**
|
|
375
373
|
* Sign out
|
|
376
374
|
*/
|
|
377
375
|
async signOut() {
|
|
378
|
-
|
|
379
|
-
if (!clerk) return;
|
|
380
|
-
await clerk.signOut();
|
|
376
|
+
localStorage.removeItem(STORAGE_KEY);
|
|
381
377
|
this.token = null;
|
|
382
378
|
this.onTokenChange?.(null);
|
|
379
|
+
const clerk = getClerk();
|
|
380
|
+
if (clerk) {
|
|
381
|
+
try {
|
|
382
|
+
await clerk.signOut();
|
|
383
|
+
} catch (e) {
|
|
384
|
+
}
|
|
385
|
+
}
|
|
383
386
|
}
|
|
384
387
|
/**
|
|
385
388
|
* Check if we're returning from auth (has clerk params/cookies)
|
package/dist/index.mjs
CHANGED
|
@@ -166,6 +166,7 @@ var JWT_TEMPLATE = "end-user-api";
|
|
|
166
166
|
function getClerk() {
|
|
167
167
|
return window.Clerk;
|
|
168
168
|
}
|
|
169
|
+
var STORAGE_KEY = "dream_api_jwt";
|
|
169
170
|
var ClerkManager = class {
|
|
170
171
|
constructor(mode, onTokenChange) {
|
|
171
172
|
this.loaded = false;
|
|
@@ -174,25 +175,57 @@ var ClerkManager = class {
|
|
|
174
175
|
this.onTokenChange = onTokenChange;
|
|
175
176
|
}
|
|
176
177
|
/**
|
|
177
|
-
* Load
|
|
178
|
+
* Load auth (call once on page load)
|
|
179
|
+
* Uses JWT from URL or localStorage - no Clerk needed on dev's domain
|
|
178
180
|
*/
|
|
179
181
|
async load() {
|
|
180
182
|
if (this.loaded || typeof window === "undefined") return;
|
|
181
183
|
const urlParams = new URLSearchParams(window.location.search);
|
|
182
184
|
const jwt = urlParams.get("__clerk_jwt");
|
|
183
185
|
if (jwt) {
|
|
184
|
-
console.log("[DreamAPI] JWT received from
|
|
185
|
-
this.
|
|
186
|
-
this.onTokenChange?.(jwt);
|
|
186
|
+
console.log("[DreamAPI] JWT received from auth worker");
|
|
187
|
+
this.setToken(jwt);
|
|
187
188
|
urlParams.delete("__clerk_jwt");
|
|
188
189
|
const newUrl = urlParams.toString() ? `${window.location.pathname}?${urlParams}` : window.location.pathname;
|
|
189
190
|
window.history.replaceState({}, "", newUrl);
|
|
190
191
|
this.loaded = true;
|
|
191
192
|
return;
|
|
192
193
|
}
|
|
194
|
+
const storedJwt = localStorage.getItem(STORAGE_KEY);
|
|
195
|
+
if (storedJwt) {
|
|
196
|
+
try {
|
|
197
|
+
const payload = JSON.parse(atob(storedJwt.split(".")[1].replace(/-/g, "+").replace(/_/g, "/")));
|
|
198
|
+
const now = Math.floor(Date.now() / 1e3);
|
|
199
|
+
if (payload.exp && payload.exp > now) {
|
|
200
|
+
console.log("[DreamAPI] Valid JWT from localStorage");
|
|
201
|
+
this.token = storedJwt;
|
|
202
|
+
this.onTokenChange?.(storedJwt);
|
|
203
|
+
this.loaded = true;
|
|
204
|
+
return;
|
|
205
|
+
} else {
|
|
206
|
+
console.log("[DreamAPI] Stored JWT expired, clearing");
|
|
207
|
+
localStorage.removeItem(STORAGE_KEY);
|
|
208
|
+
}
|
|
209
|
+
} catch (e) {
|
|
210
|
+
console.log("[DreamAPI] Invalid stored JWT, clearing");
|
|
211
|
+
localStorage.removeItem(STORAGE_KEY);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
if (this.mode === "test") {
|
|
215
|
+
try {
|
|
216
|
+
await this.loadClerkSDK();
|
|
217
|
+
} catch (e) {
|
|
218
|
+
console.log("[DreamAPI] Clerk load failed (expected in some environments)");
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
this.loaded = true;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Load Clerk SDK (test mode only, for better DX on localhost)
|
|
225
|
+
*/
|
|
226
|
+
async loadClerkSDK() {
|
|
193
227
|
const existingClerk = getClerk();
|
|
194
228
|
if (existingClerk) {
|
|
195
|
-
this.loaded = true;
|
|
196
229
|
await this.checkSession();
|
|
197
230
|
return;
|
|
198
231
|
}
|
|
@@ -214,55 +247,16 @@ var ClerkManager = class {
|
|
|
214
247
|
}
|
|
215
248
|
if (clerk) {
|
|
216
249
|
await clerk.load();
|
|
217
|
-
|
|
218
|
-
const ticket = urlParams2.get("__clerk_ticket");
|
|
219
|
-
console.log("[DreamAPI] URL:", window.location.href);
|
|
220
|
-
console.log("[DreamAPI] Ticket present:", ticket ? "YES" : "NO");
|
|
221
|
-
const sdkDebug = {
|
|
222
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
223
|
-
url: window.location.href,
|
|
224
|
-
hasTicket: !!ticket,
|
|
225
|
-
ticketLength: ticket ? ticket.length : 0,
|
|
226
|
-
signupDebug: localStorage.getItem("dream_signup_debug"),
|
|
227
|
-
signupRedirect: localStorage.getItem("dream_signup_redirect")
|
|
228
|
-
};
|
|
229
|
-
localStorage.setItem("dream_sdk_debug", JSON.stringify(sdkDebug));
|
|
230
|
-
if (ticket) {
|
|
231
|
-
for (let i = 0; i < 50; i++) {
|
|
232
|
-
const hasSignIn = clerk.signIn || clerk.client?.signIn;
|
|
233
|
-
if (hasSignIn && clerk.setActive) break;
|
|
234
|
-
await new Promise((r) => setTimeout(r, 100));
|
|
235
|
-
}
|
|
236
|
-
console.log("[DreamAPI] signIn available:", !!clerk.signIn, "client.signIn:", !!clerk.client?.signIn, "setActive:", !!clerk.setActive);
|
|
237
|
-
}
|
|
238
|
-
const signInObj = clerk.signIn || clerk.client?.signIn;
|
|
239
|
-
if (ticket && signInObj && clerk.setActive) {
|
|
240
|
-
console.log("[DreamAPI] Consuming ticket...");
|
|
241
|
-
try {
|
|
242
|
-
const result = await signInObj.create({ strategy: "ticket", ticket });
|
|
243
|
-
console.log("[DreamAPI] Ticket result:", result.status, result.createdSessionId);
|
|
244
|
-
if (result.status === "complete" && result.createdSessionId) {
|
|
245
|
-
await clerk.setActive({ session: result.createdSessionId });
|
|
246
|
-
console.log("[DreamAPI] Session activated!");
|
|
247
|
-
for (let i = 0; i < 20; i++) {
|
|
248
|
-
await new Promise((r) => setTimeout(r, 100));
|
|
249
|
-
if (clerk.user && clerk.session) break;
|
|
250
|
-
}
|
|
251
|
-
console.log("[DreamAPI] User hydrated:", !!clerk.user);
|
|
252
|
-
urlParams2.delete("__clerk_ticket");
|
|
253
|
-
const newUrl = urlParams2.toString() ? `${window.location.pathname}?${urlParams2}` : window.location.pathname;
|
|
254
|
-
window.history.replaceState({}, "", newUrl);
|
|
255
|
-
}
|
|
256
|
-
} catch (err) {
|
|
257
|
-
console.error("[DreamAPI] Ticket error:", err?.message, err);
|
|
258
|
-
}
|
|
259
|
-
} else if (ticket) {
|
|
260
|
-
console.error("[DreamAPI] FAILED to get signIn object! Ticket NOT consumed.");
|
|
261
|
-
console.log("[DreamAPI] clerk keys:", Object.keys(clerk));
|
|
262
|
-
}
|
|
250
|
+
await this.checkSession();
|
|
263
251
|
}
|
|
264
|
-
|
|
265
|
-
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Store JWT in memory and localStorage
|
|
255
|
+
*/
|
|
256
|
+
setToken(jwt) {
|
|
257
|
+
this.token = jwt;
|
|
258
|
+
localStorage.setItem(STORAGE_KEY, jwt);
|
|
259
|
+
this.onTokenChange?.(jwt);
|
|
266
260
|
}
|
|
267
261
|
/**
|
|
268
262
|
* Check if returning from auth and grab token
|
|
@@ -291,6 +285,17 @@ var ClerkManager = class {
|
|
|
291
285
|
* Get current user info
|
|
292
286
|
*/
|
|
293
287
|
getUser() {
|
|
288
|
+
const clerk = getClerk();
|
|
289
|
+
if (clerk?.user) {
|
|
290
|
+
const user = clerk.user;
|
|
291
|
+
const metadata = user.publicMetadata || {};
|
|
292
|
+
return {
|
|
293
|
+
id: user.id,
|
|
294
|
+
email: user.primaryEmailAddress?.emailAddress || "",
|
|
295
|
+
plan: metadata.plan || "free",
|
|
296
|
+
publishableKey: metadata.publishableKey || ""
|
|
297
|
+
};
|
|
298
|
+
}
|
|
294
299
|
if (this.token) {
|
|
295
300
|
try {
|
|
296
301
|
const parts = this.token.split(".");
|
|
@@ -307,16 +312,7 @@ var ClerkManager = class {
|
|
|
307
312
|
console.error("[DreamAPI] Failed to decode JWT:", e);
|
|
308
313
|
}
|
|
309
314
|
}
|
|
310
|
-
|
|
311
|
-
if (!clerk?.user) return null;
|
|
312
|
-
const user = clerk.user;
|
|
313
|
-
const metadata = user.publicMetadata || {};
|
|
314
|
-
return {
|
|
315
|
-
id: user.id,
|
|
316
|
-
email: user.primaryEmailAddress?.emailAddress || "",
|
|
317
|
-
plan: metadata.plan || "free",
|
|
318
|
-
publishableKey: metadata.publishableKey || ""
|
|
319
|
-
};
|
|
315
|
+
return null;
|
|
320
316
|
}
|
|
321
317
|
/**
|
|
322
318
|
* Get current token
|
|
@@ -325,33 +321,40 @@ var ClerkManager = class {
|
|
|
325
321
|
return this.token;
|
|
326
322
|
}
|
|
327
323
|
/**
|
|
328
|
-
* Refresh token and user data
|
|
329
|
-
*
|
|
324
|
+
* Refresh token and user data
|
|
325
|
+
* In test mode: refreshes from Clerk session
|
|
326
|
+
* In live mode: returns current token (re-auth needed for fresh data)
|
|
330
327
|
*/
|
|
331
328
|
async refreshToken() {
|
|
332
329
|
const clerk = getClerk();
|
|
333
|
-
if (
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
330
|
+
if (clerk?.session) {
|
|
331
|
+
try {
|
|
332
|
+
if (clerk.user?.reload) {
|
|
333
|
+
await clerk.user.reload();
|
|
334
|
+
}
|
|
335
|
+
this.token = await clerk.session.getToken({ template: JWT_TEMPLATE });
|
|
336
|
+
this.setToken(this.token);
|
|
337
|
+
return this.token;
|
|
338
|
+
} catch (err) {
|
|
339
|
+
console.error("Failed to refresh token from Clerk:", err);
|
|
337
340
|
}
|
|
338
|
-
this.token = await clerk.session.getToken({ template: JWT_TEMPLATE });
|
|
339
|
-
this.onTokenChange?.(this.token);
|
|
340
|
-
return this.token;
|
|
341
|
-
} catch (err) {
|
|
342
|
-
console.error("Failed to refresh token:", err);
|
|
343
|
-
return null;
|
|
344
341
|
}
|
|
342
|
+
return this.token;
|
|
345
343
|
}
|
|
346
344
|
/**
|
|
347
345
|
* Sign out
|
|
348
346
|
*/
|
|
349
347
|
async signOut() {
|
|
350
|
-
|
|
351
|
-
if (!clerk) return;
|
|
352
|
-
await clerk.signOut();
|
|
348
|
+
localStorage.removeItem(STORAGE_KEY);
|
|
353
349
|
this.token = null;
|
|
354
350
|
this.onTokenChange?.(null);
|
|
351
|
+
const clerk = getClerk();
|
|
352
|
+
if (clerk) {
|
|
353
|
+
try {
|
|
354
|
+
await clerk.signOut();
|
|
355
|
+
} catch (e) {
|
|
356
|
+
}
|
|
357
|
+
}
|
|
355
358
|
}
|
|
356
359
|
/**
|
|
357
360
|
* Check if we're returning from auth (has clerk params/cookies)
|