@veliseev93/clerk-react-native 0.0.1-dev.0

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 ADDED
@@ -0,0 +1,648 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ ClerkApiError: () => ClerkApiError,
24
+ useAddIdentifier: () => useAddIdentifier,
25
+ useAuthWithIdentifier: () => useAuthWithIdentifier,
26
+ useAuthWithSSO: () => useAuthWithSSO,
27
+ useAuthWithTicket: () => useAuthWithTicket,
28
+ useChangePassword: () => useChangePassword,
29
+ useClerkResources: () => useClerkResources,
30
+ useGetSessionToken: () => useGetSessionToken,
31
+ useOtpVerification: () => useOtpVerification,
32
+ useResetPassword: () => useResetPassword,
33
+ useUpdateIdentifier: () => useUpdateIdentifier
34
+ });
35
+ module.exports = __toCommonJS(index_exports);
36
+
37
+ // src/enums/api-error.ts
38
+ var ClerkApiError = /* @__PURE__ */ ((ClerkApiError2) => {
39
+ ClerkApiError2["SESSION_EXISTS"] = "session_exists";
40
+ ClerkApiError2["FORM_IDENTIFIER_EXIST"] = "form_identifier_exists";
41
+ ClerkApiError2["FORM_CODE_INCORRECT"] = "form_code_incorrect";
42
+ return ClerkApiError2;
43
+ })(ClerkApiError || {});
44
+
45
+ // src/hooks/use-clerk-resources.ts
46
+ var import_clerk_expo = require("@clerk/clerk-expo");
47
+ var useClerkResources = () => {
48
+ const clerk = (0, import_clerk_expo.getClerkInstance)();
49
+ const signUp = clerk.client?.signUp;
50
+ const signIn = clerk.client?.signIn;
51
+ const signOut = clerk.signOut;
52
+ const setActive = clerk.setActive;
53
+ return { signUp, signIn, setActive, signOut };
54
+ };
55
+
56
+ // src/hooks/use-get-session-token.ts
57
+ var import_clerk_expo2 = require("@clerk/clerk-expo");
58
+ var useGetSessionToken = () => {
59
+ const clerk = (0, import_clerk_expo2.getClerkInstance)();
60
+ const getSessionToken = async ({ tokenTemplate }) => {
61
+ try {
62
+ const token = await clerk.session?.getToken({ template: tokenTemplate });
63
+ const sessionToken = token || clerk.session?.lastActiveToken?.getRawString();
64
+ if (sessionToken) {
65
+ return {
66
+ sessionToken,
67
+ isSuccess: true
68
+ };
69
+ } else {
70
+ return {
71
+ sessionToken: null,
72
+ isSuccess: false
73
+ };
74
+ }
75
+ } catch (error) {
76
+ return {
77
+ sessionToken: null,
78
+ error,
79
+ isSuccess: false
80
+ };
81
+ }
82
+ };
83
+ return { getSessionToken };
84
+ };
85
+
86
+ // src/hooks/use-auth-with-sso.ts
87
+ var import_clerk_expo3 = require("@clerk/clerk-expo");
88
+ var import_react = require("react");
89
+ function useAuthWithSSO() {
90
+ const { startSSOFlow: clerkStartSSOFlow } = (0, import_clerk_expo3.useSSO)();
91
+ const { getSessionToken } = useGetSessionToken();
92
+ const [isLoading, setIsLoading] = (0, import_react.useState)(false);
93
+ const startSSOFlow = async ({
94
+ strategy,
95
+ redirectUrl,
96
+ tokenTemplate
97
+ }) => {
98
+ try {
99
+ setIsLoading(true);
100
+ const { createdSessionId, setActive, signIn, signUp } = await clerkStartSSOFlow({
101
+ strategy,
102
+ redirectUrl
103
+ });
104
+ if (!createdSessionId) {
105
+ return { sessionToken: null };
106
+ }
107
+ await setActive?.({ session: createdSessionId });
108
+ const { sessionToken } = await getSessionToken({ tokenTemplate });
109
+ if (sessionToken) {
110
+ return {
111
+ sessionToken,
112
+ signIn,
113
+ signUp,
114
+ isSuccess: true
115
+ };
116
+ }
117
+ return {
118
+ signIn,
119
+ signUp,
120
+ isSuccess: false
121
+ };
122
+ } catch (error) {
123
+ return {
124
+ error,
125
+ isSuccess: false
126
+ };
127
+ } finally {
128
+ setIsLoading(false);
129
+ }
130
+ };
131
+ return { startSSOFlow, isLoading };
132
+ }
133
+
134
+ // src/hooks/use-auth-with-ticket.ts
135
+ var import_react2 = require("react");
136
+ function useAuthWithTicket() {
137
+ const { signIn, setActive } = useClerkResources();
138
+ const { getSessionToken } = useGetSessionToken();
139
+ const [isLoading, setIsLoading] = (0, import_react2.useState)(false);
140
+ const startAuthorization = async ({ ticket, tokenTemplate }) => {
141
+ if (signIn) {
142
+ setIsLoading(true);
143
+ try {
144
+ const signInAttempt = await signIn.create({
145
+ strategy: "ticket",
146
+ ticket
147
+ });
148
+ if (signInAttempt.status === "complete") {
149
+ await setActive({
150
+ session: signInAttempt.createdSessionId
151
+ });
152
+ const { sessionToken, error } = await getSessionToken({ tokenTemplate });
153
+ if (sessionToken) {
154
+ return {
155
+ sessionToken,
156
+ signIn,
157
+ isSuccess: true
158
+ };
159
+ }
160
+ return {
161
+ signIn,
162
+ error,
163
+ isSuccess: false
164
+ };
165
+ }
166
+ } catch (error) {
167
+ return {
168
+ signIn,
169
+ error,
170
+ isSuccess: false
171
+ };
172
+ } finally {
173
+ setIsLoading(false);
174
+ }
175
+ }
176
+ return {
177
+ sessionToken: null,
178
+ signIn,
179
+ isSuccess: false
180
+ };
181
+ };
182
+ return {
183
+ startAuthorization,
184
+ isLoading
185
+ };
186
+ }
187
+
188
+ // src/hooks/use-otp-verification.ts
189
+ var import_react3 = require("react");
190
+ function useOtpVerification() {
191
+ const { signUp, signIn, setActive } = useClerkResources();
192
+ const { getSessionToken } = useGetSessionToken();
193
+ const [isVerifying, setIsVerifying] = (0, import_react3.useState)(false);
194
+ const sendSignInOtpCode = async (strategy, isSecondFactor = false) => {
195
+ const codeFactors = isSecondFactor ? signIn?.supportedSecondFactors : signIn?.supportedFirstFactors;
196
+ const prepareFactor = isSecondFactor ? signIn?.prepareSecondFactor : signIn?.prepareFirstFactor;
197
+ const codeFactor = codeFactors?.find(
198
+ (factor) => factor.strategy === strategy
199
+ );
200
+ if (codeFactor && "emailAddressId" in codeFactor) {
201
+ await prepareFactor?.({ strategy: "email_code", emailAddressId: codeFactor.emailAddressId });
202
+ } else if (codeFactor && "phoneNumberId" in codeFactor) {
203
+ await prepareFactor?.({ strategy: "phone_code", phoneNumberId: codeFactor.phoneNumberId });
204
+ } else {
205
+ throw new Error(`No ${isSecondFactor ? "second " : ""}factor found for strategy: ${strategy}`);
206
+ }
207
+ };
208
+ const sendSignUpOtpCode = async (strategy) => {
209
+ if (!signUp) return;
210
+ await signUp.prepareVerification({ strategy });
211
+ };
212
+ const sendOtpCode = async ({ strategy, isSignUp, isSecondFactor }) => {
213
+ if (isSignUp) {
214
+ await sendSignUpOtpCode(strategy);
215
+ } else {
216
+ await sendSignInOtpCode(strategy, !!isSecondFactor);
217
+ }
218
+ };
219
+ const verifyCode = async ({
220
+ code,
221
+ strategy,
222
+ tokenTemplate,
223
+ isSignUp,
224
+ isSecondFactor
225
+ }) => {
226
+ try {
227
+ setIsVerifying(true);
228
+ if (isSignUp) {
229
+ const completeSignUp = await signUp?.attemptVerification({
230
+ strategy,
231
+ code
232
+ });
233
+ if (completeSignUp?.status === "complete") {
234
+ await setActive?.({ session: completeSignUp.createdSessionId });
235
+ const { sessionToken, error } = await getSessionToken({ tokenTemplate });
236
+ if (sessionToken) {
237
+ return {
238
+ sessionToken,
239
+ signIn,
240
+ signUp,
241
+ isSuccess: true
242
+ };
243
+ }
244
+ return {
245
+ signIn,
246
+ signUp,
247
+ error,
248
+ isSuccess: false
249
+ };
250
+ }
251
+ } else {
252
+ const attemptSignIn = isSecondFactor ? signIn?.attemptSecondFactor : signIn?.attemptFirstFactor;
253
+ const completeSignIn = await attemptSignIn?.({ strategy, code });
254
+ if (completeSignIn?.status === "complete") {
255
+ await setActive?.({ session: completeSignIn.createdSessionId });
256
+ const sessionToken = (await getSessionToken({ tokenTemplate })).sessionToken;
257
+ if (sessionToken) {
258
+ return { sessionToken, signIn, signUp, isSuccess: true };
259
+ }
260
+ return { sessionToken: null, signIn, signUp, isSuccess: false };
261
+ }
262
+ }
263
+ return {
264
+ signIn,
265
+ signUp,
266
+ isSuccess: false
267
+ };
268
+ } catch (error) {
269
+ return {
270
+ signIn,
271
+ signUp,
272
+ error,
273
+ isSuccess: false
274
+ };
275
+ } finally {
276
+ setIsVerifying(false);
277
+ }
278
+ };
279
+ return {
280
+ sendOtpCode,
281
+ verifyCode,
282
+ isVerifying
283
+ };
284
+ }
285
+
286
+ // src/hooks/use-auth-with-identifier.ts
287
+ var import_clerk_expo4 = require("@clerk/clerk-expo");
288
+ var import_react4 = require("react");
289
+ function useAuthWithIdentifier(method, verifyBy) {
290
+ const { signUp, signIn, setActive } = useClerkResources();
291
+ const { sendOtpCode, verifyCode: verifyOtpCode, isVerifying } = useOtpVerification();
292
+ const { getSessionToken } = useGetSessionToken();
293
+ const [isAuthorizing, setIsAuthorizing] = (0, import_react4.useState)(false);
294
+ const [isLoading, setIsLoading] = (0, import_react4.useState)(false);
295
+ const strategy = method === "emailAddress" ? "email_code" : "phone_code";
296
+ const handleSessionToken = async (tokenTemplate) => {
297
+ const { sessionToken, error } = await getSessionToken({ tokenTemplate });
298
+ return { sessionToken: sessionToken || void 0, error };
299
+ };
300
+ const handleSignInWithPassword = async (signInAttempt, isSignUp, tokenTemplate) => {
301
+ await setActive?.({ session: signInAttempt.createdSessionId });
302
+ const { sessionToken, error } = await handleSessionToken(tokenTemplate);
303
+ if (isSignUp) {
304
+ return {
305
+ signUp,
306
+ error,
307
+ sessionToken,
308
+ isSuccess: !!sessionToken
309
+ };
310
+ }
311
+ return {
312
+ signIn,
313
+ error,
314
+ sessionToken,
315
+ isSuccess: !!sessionToken
316
+ };
317
+ };
318
+ const handleUsernameAuth = async (params, isSignUp) => {
319
+ const { identifier, password, tokenTemplate } = params;
320
+ const authMethod = isSignUp ? signUp : signIn;
321
+ const authAttempt = await authMethod?.create({ username: identifier, password });
322
+ if (authAttempt?.status === "complete" && "createdSessionId" in authAttempt) {
323
+ return handleSignInWithPassword(authAttempt, isSignUp, tokenTemplate);
324
+ }
325
+ return {
326
+ isSuccess: false,
327
+ [isSignUp ? "signUp" : "signIn"]: authMethod
328
+ };
329
+ };
330
+ const handleEmailPhoneAuth = async (params, isSignUp) => {
331
+ const { identifier } = params;
332
+ const authMethod = isSignUp ? signUp : signIn;
333
+ const identifierFieldName = isSignUp ? method : "identifier";
334
+ if (verifyBy === "password") {
335
+ try {
336
+ const { password, tokenTemplate } = params;
337
+ const authAttempt = await authMethod?.create({ [identifierFieldName]: identifier, password });
338
+ if (authAttempt?.status === "complete" && "createdSessionId" in authAttempt) {
339
+ return handleSignInWithPassword(authAttempt, isSignUp, tokenTemplate);
340
+ } else {
341
+ return { isSuccess: false, signIn, signUp, status: authAttempt?.status, error: null };
342
+ }
343
+ } catch (error) {
344
+ return { error, signIn, signUp };
345
+ }
346
+ } else if (verifyBy === "otp") {
347
+ try {
348
+ await authMethod?.create({ [identifierFieldName]: identifier });
349
+ await sendOtpCode({ strategy, isSignUp });
350
+ } catch (error) {
351
+ return { error, signIn, signUp };
352
+ }
353
+ }
354
+ return {
355
+ isSuccess: true,
356
+ [isSignUp ? "signUp" : "signIn"]: authMethod
357
+ };
358
+ };
359
+ const startSignUp = async (params) => {
360
+ try {
361
+ setIsLoading(true);
362
+ return method === "username" ? await handleUsernameAuth(params, true) : await handleEmailPhoneAuth(params, true);
363
+ } catch (error) {
364
+ return { error, signUp, isSuccess: false };
365
+ } finally {
366
+ setIsLoading(false);
367
+ }
368
+ };
369
+ const startSignIn = async (params) => {
370
+ try {
371
+ setIsLoading(true);
372
+ return method === "username" ? await handleUsernameAuth(params, false) : await handleEmailPhoneAuth(params, false);
373
+ } catch (error) {
374
+ return { error, signIn, isSuccess: false };
375
+ } finally {
376
+ setIsLoading(false);
377
+ }
378
+ };
379
+ const startAuthorization = async (params) => {
380
+ try {
381
+ setIsAuthorizing(true);
382
+ const result = await startSignUp(params);
383
+ if (result?.error && (0, import_clerk_expo4.isClerkAPIResponseError)(result.error)) {
384
+ const error = result.error.errors[0];
385
+ if (error?.code === "form_identifier_exists" /* FORM_IDENTIFIER_EXIST */) {
386
+ const signInResult = await startSignIn(params);
387
+ return { ...signInResult, isSignUp: false };
388
+ }
389
+ }
390
+ return { ...result, isSignUp: true };
391
+ } catch (error) {
392
+ return { error, signIn, signUp, isSuccess: false };
393
+ } finally {
394
+ setIsAuthorizing(false);
395
+ }
396
+ };
397
+ const verifyCode = async ({
398
+ code,
399
+ isSignUp,
400
+ tokenTemplate
401
+ }) => {
402
+ setIsLoading(true);
403
+ try {
404
+ return await verifyOtpCode({ code, strategy, tokenTemplate, isSignUp });
405
+ } finally {
406
+ setIsLoading(false);
407
+ }
408
+ };
409
+ if (method === "username") {
410
+ return {
411
+ startSignIn,
412
+ startSignUp,
413
+ startAuthorization,
414
+ isLoading: isAuthorizing || isLoading
415
+ };
416
+ } else {
417
+ return {
418
+ startSignIn,
419
+ startSignUp,
420
+ startAuthorization,
421
+ isLoading: isAuthorizing || isLoading,
422
+ verifyCode,
423
+ isVerifying
424
+ };
425
+ }
426
+ }
427
+
428
+ // src/hooks/use-add-identifier.ts
429
+ var import_clerk_expo5 = require("@clerk/clerk-expo");
430
+ var import_react5 = require("react");
431
+ function useAddIdentifier(type) {
432
+ const { user } = (0, import_clerk_expo5.useUser)();
433
+ const [isCreating, setIsCreating] = (0, import_react5.useState)(false);
434
+ const [isVerifying, setIsVerifying] = (0, import_react5.useState)(false);
435
+ const isEmail = type === "email";
436
+ const createIdentifier = async ({ identifier }) => {
437
+ setIsCreating(true);
438
+ try {
439
+ let resource = getIdentifierResource(identifier);
440
+ if (!resource) {
441
+ resource = isEmail ? await user?.createEmailAddress({ email: identifier }) : await user?.createPhoneNumber({ phoneNumber: identifier });
442
+ await user?.reload();
443
+ }
444
+ await prepareVerification({ isEmail, identifier });
445
+ return { isSuccess: true, user };
446
+ } catch (e) {
447
+ if ((0, import_clerk_expo5.isClerkAPIResponseError)(e)) {
448
+ return { error: e, user };
449
+ }
450
+ return { isSuccess: false, user };
451
+ } finally {
452
+ setIsCreating(false);
453
+ }
454
+ };
455
+ const verifyCode = async ({ code, identifier }) => {
456
+ setIsVerifying(true);
457
+ try {
458
+ const resource = getIdentifierResource(identifier);
459
+ const verifyAttempt = await resource?.attemptVerification({ code });
460
+ if (verifyAttempt?.verification?.status === "verified") {
461
+ return { isSuccess: true, user };
462
+ } else {
463
+ return { isSuccess: false, verifyAttempt };
464
+ }
465
+ } catch (error) {
466
+ return { error, user };
467
+ } finally {
468
+ setIsVerifying(false);
469
+ }
470
+ };
471
+ const prepareVerification = async ({
472
+ isEmail: isEmail2,
473
+ identifier
474
+ }) => {
475
+ const phoneResource = user?.phoneNumbers?.find((a) => a.phoneNumber === identifier);
476
+ const emailResource = user?.emailAddresses?.find((a) => a.emailAddress === identifier);
477
+ await (isEmail2 ? emailResource?.prepareVerification({ strategy: "email_code" }) : phoneResource?.prepareVerification());
478
+ };
479
+ const getIdentifierResource = (identifier) => {
480
+ return isEmail ? user?.emailAddresses.find((a) => a.emailAddress === identifier) : user?.phoneNumbers.find((a) => a.phoneNumber === identifier);
481
+ };
482
+ return { createIdentifier, verifyCode, isCreating, isVerifying };
483
+ }
484
+
485
+ // src/hooks/use-reset-password.ts
486
+ var import_react6 = require("react");
487
+ function useResetPassword({ method }) {
488
+ const { signIn, setActive } = useClerkResources();
489
+ const { getSessionToken } = useGetSessionToken();
490
+ const [isCodeSending, setIsCodeSending] = (0, import_react6.useState)(false);
491
+ const [isVerifying, setIsVerifying] = (0, import_react6.useState)(false);
492
+ const [isResetting, setIsResetting] = (0, import_react6.useState)(false);
493
+ const strategy = method === "emailAddress" ? "reset_password_email_code" : "reset_password_phone_code";
494
+ const startResetPassword = async ({ identifier }) => {
495
+ setIsCodeSending(true);
496
+ try {
497
+ await signIn?.create({
498
+ strategy,
499
+ identifier
500
+ });
501
+ return { isSuccess: true, signIn };
502
+ } catch (error) {
503
+ return { isSuccess: false, signIn, error };
504
+ } finally {
505
+ setIsCodeSending(false);
506
+ }
507
+ };
508
+ const verifyCode = async ({ code }) => {
509
+ setIsVerifying(true);
510
+ try {
511
+ await signIn?.attemptFirstFactor({
512
+ strategy,
513
+ code
514
+ });
515
+ return { isSuccess: true, signIn };
516
+ } catch (error) {
517
+ return { isSuccess: false, signIn, error };
518
+ } finally {
519
+ setIsVerifying(false);
520
+ }
521
+ };
522
+ const resetPassword = async ({ password, tokenTemplate }) => {
523
+ setIsResetting(true);
524
+ try {
525
+ const result = await signIn?.resetPassword({
526
+ password
527
+ });
528
+ await setActive({ session: result?.createdSessionId });
529
+ const { sessionToken, error } = await getSessionToken({ tokenTemplate });
530
+ if (sessionToken) {
531
+ return {
532
+ isSuccess: true,
533
+ signIn,
534
+ sessionToken
535
+ };
536
+ } else {
537
+ return {
538
+ signIn,
539
+ error,
540
+ isSuccess: false
541
+ };
542
+ }
543
+ } catch (error) {
544
+ return { isSuccess: false, signIn, error };
545
+ } finally {
546
+ setIsResetting(false);
547
+ }
548
+ };
549
+ return {
550
+ startResetPassword,
551
+ verifyCode,
552
+ resetPassword,
553
+ isCodeSending,
554
+ isVerifying,
555
+ isResetting
556
+ };
557
+ }
558
+
559
+ // src/hooks/use-update-password.ts
560
+ var import_clerk_expo6 = require("@clerk/clerk-expo");
561
+ var import_react7 = require("react");
562
+ var useChangePassword = () => {
563
+ const { user } = (0, import_clerk_expo6.useUser)();
564
+ const [isPasswordUpdating, setIsPasswordUpdating] = (0, import_react7.useState)(false);
565
+ const updatePassword = async (params) => {
566
+ const { newPassword, currentPassword } = params;
567
+ try {
568
+ setIsPasswordUpdating(true);
569
+ await user?.updatePassword({ newPassword, currentPassword });
570
+ return { isSuccess: true };
571
+ } catch (error) {
572
+ return { isSuccess: false, error };
573
+ } finally {
574
+ setIsPasswordUpdating(false);
575
+ }
576
+ };
577
+ return { updatePassword, isPasswordUpdating };
578
+ };
579
+
580
+ // src/hooks/use-update-identifier.ts
581
+ var import_clerk_expo7 = require("@clerk/clerk-expo");
582
+ var import_react8 = require("react");
583
+ function useUpdateIdentifier(type) {
584
+ const { user } = (0, import_clerk_expo7.useUser)();
585
+ const isEmail = type === "email";
586
+ const { createIdentifier, verifyCode: verifyAddIdentifierCode, isCreating, isVerifying } = useAddIdentifier(type);
587
+ const [isUpdating, setIsUpdating] = (0, import_react8.useState)(false);
588
+ const getIdentifierResource = (identifier) => {
589
+ return isEmail ? user?.emailAddresses?.find((a) => a.emailAddress === identifier) : user?.phoneNumbers?.find((a) => a.phoneNumber === identifier);
590
+ };
591
+ const swapPrimaryIdentifier = async (identifier) => {
592
+ const newResource = getIdentifierResource(identifier);
593
+ if (!newResource || newResource.verification?.status !== "verified") {
594
+ throw new Error("Identifier not found or not verified");
595
+ }
596
+ const currentPrimaryId = isEmail ? user?.primaryEmailAddressId : user?.primaryPhoneNumberId;
597
+ const resources = isEmail ? user?.emailAddresses : user?.phoneNumbers;
598
+ const oldPrimaryResource = resources?.find((r) => r.id === currentPrimaryId);
599
+ if (isEmail) {
600
+ await user?.update({ primaryEmailAddressId: newResource.id });
601
+ } else {
602
+ await user?.update({ primaryPhoneNumberId: newResource.id });
603
+ }
604
+ if (oldPrimaryResource && oldPrimaryResource.id !== newResource.id) {
605
+ await oldPrimaryResource.destroy();
606
+ }
607
+ await user?.reload();
608
+ };
609
+ const verifyCode = async ({ code, identifier }) => {
610
+ setIsUpdating(true);
611
+ const result = await verifyAddIdentifierCode({ code, identifier });
612
+ await user?.reload();
613
+ if (!result.isSuccess) {
614
+ setIsUpdating(false);
615
+ return result;
616
+ }
617
+ try {
618
+ await swapPrimaryIdentifier(identifier);
619
+ return { isSuccess: true, user };
620
+ } catch (error) {
621
+ return { isSuccess: false, error, user };
622
+ } finally {
623
+ setIsUpdating(false);
624
+ }
625
+ };
626
+ return {
627
+ createIdentifier,
628
+ verifyCode,
629
+ isCreating,
630
+ isVerifying,
631
+ isUpdating
632
+ };
633
+ }
634
+ // Annotate the CommonJS export names for ESM import in node:
635
+ 0 && (module.exports = {
636
+ ClerkApiError,
637
+ useAddIdentifier,
638
+ useAuthWithIdentifier,
639
+ useAuthWithSSO,
640
+ useAuthWithTicket,
641
+ useChangePassword,
642
+ useClerkResources,
643
+ useGetSessionToken,
644
+ useOtpVerification,
645
+ useResetPassword,
646
+ useUpdateIdentifier
647
+ });
648
+ //# sourceMappingURL=index.js.map