@gahojin-inc/amplify-auth-hooks 2026.3.0 → 2026.4.4

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.
Files changed (38) hide show
  1. package/dist/authenticator-CCnWvIl5.d.ts +120 -0
  2. package/dist/authenticator.d.ts +7 -0
  3. package/dist/defaultAuthHubHandler-rX4tAlCj.js.map +1 -1
  4. package/dist/index.d.ts +66 -0
  5. package/dist/{index.mjs → index.js} +85 -84
  6. package/dist/index.js.map +1 -0
  7. package/dist/{machines-BRfb3dTb.js → machines-whqvCGDP.js} +49 -25
  8. package/dist/machines-whqvCGDP.js.map +1 -0
  9. package/dist/machines.d.ts +2 -0
  10. package/dist/machines.js +2 -0
  11. package/package.json +15 -14
  12. package/dist/authenticator/defaultAuthHubHandler.d.mts +0 -3
  13. package/dist/authenticator/types.d.mts +0 -11
  14. package/dist/authenticator.d.mts +0 -1
  15. package/dist/context/AuthenticatorContext.d.mts +0 -7
  16. package/dist/context/AuthenticatorProvider.d.mts +0 -7
  17. package/dist/context/index.d.mts +0 -2
  18. package/dist/hooks/facade.d.mts +0 -6
  19. package/dist/hooks/types.d.mts +0 -29
  20. package/dist/hooks/useAuth.d.mts +0 -12
  21. package/dist/hooks/useAuthenticator.d.mts +0 -2
  22. package/dist/hooks/utils.d.mts +0 -87
  23. package/dist/index.d.mts +0 -6
  24. package/dist/index.mjs.map +0 -1
  25. package/dist/machines/actions.d.mts +0 -25
  26. package/dist/machines/defaultHandlers.d.mts +0 -2
  27. package/dist/machines/forgotPassword/actor.d.mts +0 -1
  28. package/dist/machines/guards.d.mts +0 -22
  29. package/dist/machines/signIn/actor.d.mts +0 -1
  30. package/dist/machines/signOut/actor.d.mts +0 -1
  31. package/dist/machines/signUp/actor.d.mts +0 -1
  32. package/dist/machines/types.d.mts +0 -96
  33. package/dist/machines/verifyUserAttributes/actor.d.mts +0 -1
  34. package/dist/machines-BRfb3dTb.js.map +0 -1
  35. package/dist/machines.d.mts +0 -5
  36. package/dist/machines.mjs +0 -2
  37. package/dist/utils.d.mts +0 -1
  38. /package/dist/{authenticator.mjs → authenticator.js} +0 -0
@@ -0,0 +1,120 @@
1
+ import { HubCapsule } from "@aws-amplify/core";
2
+ import { ActorRefFrom } from "xstate";
3
+ import { AuthUser, CodeDeliveryDetails, ConfirmResetPasswordInput, ConfirmSignInInput, ConfirmSignInOutput, ConfirmSignUpInput, ConfirmSignUpOutput, ConfirmUserAttributeInput, FetchUserAttributesOutput, ResendSignUpCodeInput, ResendSignUpCodeOutput, ResetPasswordInput, ResetPasswordOutput, SendUserAttributeVerificationCodeInput, SendUserAttributeVerificationCodeOutput, SignInInput, SignInOutput, SignInWithRedirectInput, SignOutInput, SignUpInput, SignUpOutput, UserAttributeKey } from "@aws-amplify/auth";
4
+
5
+ //#region src/types/user.d.ts
6
+ /** Federated IDPs that Authenticator supports */
7
+ declare const FederatedIdentityProviders: {
8
+ readonly Apple: "Apple";
9
+ readonly Amazon: "Amazon";
10
+ readonly Facebook: "Facebook";
11
+ readonly Google: "Google";
12
+ };
13
+ type FederatedIdentityProviders = (typeof FederatedIdentityProviders)[keyof typeof FederatedIdentityProviders];
14
+ /**
15
+ * Cognito user contact method types that have not been verified as valid
16
+ */
17
+ declare const UnverifiedContactMethodTypes: readonly ["email", "phone_number"];
18
+ type UnverifiedContactMethodType = (typeof UnverifiedContactMethodTypes)[number];
19
+ type UnverifiedUserAttributes = Partial<Record<UnverifiedContactMethodType, string>>;
20
+ //#endregion
21
+ //#region src/types/machines.d.ts
22
+ type AuthMFAType = "SMS" | "TOTP" | "EMAIL";
23
+ type AuthAllowedMFATypes = AuthMFAType[];
24
+ /**
25
+ * Authenticator routes that can be directly navigated to by user interaction.
26
+ */
27
+ type NavigableRoute = "signIn" | "signUp" | "forgotPassword" | "signOut";
28
+ type InitialRoute = "signIn" | "signUp" | "forgotPassword";
29
+ type AuthTOTPSetupDetails = {
30
+ sharedSecret: string;
31
+ getSetupUri: (appName: string, accountName?: string) => URL;
32
+ };
33
+ type AuthEventTypes = "FEDERATED_SIGN_IN" | "RESEND" | "FORGOT_PASSWORD" | "AUTO_SIGN_IN_FAILURE" | "SIGN_IN_WITH_REDIRECT" | "SIGN_IN" | "SIGN_OUT" | "SIGN_UP" | "SUBMIT" | "SKIP" | "INIT" | "TOKEN_REFRESH";
34
+ type AuthEventData = Record<PropertyKey, any>;
35
+ type AuthEvent = {
36
+ type: AuthEventTypes;
37
+ data?: AuthEventData;
38
+ input?: ActorDoneData;
39
+ output?: AuthEventData;
40
+ error?: Error;
41
+ actorId?: string;
42
+ };
43
+ type ActorDoneData = {
44
+ codeDeliveryDetails?: CodeDeliveryDetails<UserAttributeKey>;
45
+ missingAttributes?: string[];
46
+ remoteError?: string;
47
+ step: Step;
48
+ totpSecretCode?: string;
49
+ username?: string;
50
+ unverifiedUserAttributes?: UnverifiedUserAttributes;
51
+ allowedMfaTypes?: AuthMFAType[];
52
+ };
53
+ type AuthContext = {
54
+ user?: AuthUser;
55
+ config?: {
56
+ initialState?: "signIn" | "signUp" | "forgotPassword";
57
+ };
58
+ actorDoneData?: ActorDoneData;
59
+ };
60
+ type InitialStep = "FORGOT_PASSWORD" | "SIGN_IN" | "SIGN_UP";
61
+ type SignInStep = "CONFIRM_SIGN_IN_WITH_EMAIL_CODE" | "CONFIRM_SIGN_IN_WITH_SMS_CODE" | "CONFIRM_SIGN_IN_WITH_TOTP_CODE" | "CONFIRM_SIGN_IN_WITH_NEW_PASSWORD_REQUIRED" | "CONFIRM_SIGN_IN_WITH_PASSWORD" | "CONFIRM_SIGN_UP" | "CONTINUE_SIGN_IN_WITH_TOTP_SETUP" | "CONTINUE_SIGN_IN_WITH_EMAIL_SETUP" | "CONTINUE_SIGN_IN_WITH_MFA_SETUP_SELECTION" | "CONTINUE_SIGN_IN_WITH_MFA_SELECTION" | "CONFIRM_SIGN_IN_WITH_CUSTOM_CHALLENGE" | "CONTINUE_SIGN_IN_WITH_FIRST_FACTOR_SELECTION" | "RESET_PASSWORD" | "SIGN_IN_COMPLETE";
62
+ type ResetPasswordStep = "CONFIRM_RESET_PASSWORD_WITH_CODE" | "RESET_PASSWORD_COMPLETE";
63
+ type SignUpStep = "CONFIRM_SIGN_UP" | "COMPLETE_AUTO_SIGN_IN" | "SIGN_UP_COMPLETE";
64
+ type UserAttributeStep = "SHOULD_CONFIRM_USER_ATTRIBUTE" | "CONFIRM_ATTRIBUTE_WITH_CODE" | "CONFIRM_ATTRIBUTE_COMPLETE";
65
+ type Step = InitialStep | SignInStep | SignUpStep | ResetPasswordStep | UserAttributeStep;
66
+ type BaseContext = {
67
+ missingAttributes?: string[];
68
+ remoteError?: string;
69
+ step: Step;
70
+ totpSecretCode?: string;
71
+ unverifiedUserAttributes?: UnverifiedUserAttributes;
72
+ allowedMfaTypes?: AuthMFAType[];
73
+ username?: string;
74
+ selectedUserAttribute?: string;
75
+ user?: AuthUser;
76
+ };
77
+ type ResetPasswordContext = BaseContext & ActorDoneData;
78
+ type SignInContext = BaseContext & ActorDoneData;
79
+ type SignUpContext = BaseContext & ActorDoneData;
80
+ type VerifyUserContext = BaseContext & ActorDoneData;
81
+ type SignOutContext = Pick<BaseContext, "user">;
82
+ type AuthActorContext = SignInContext | SignUpContext | ResetPasswordContext;
83
+ type Handlers = {
84
+ getCurrentUser: () => Promise<AuthUser>;
85
+ fetchUserAttributes: () => Promise<FetchUserAttributesOutput>;
86
+ signIn: (input: SignInInput) => Promise<SignInOutput>;
87
+ signInWithRedirect: (input?: SignInWithRedirectInput) => Promise<void>;
88
+ signUp: (input: SignUpInput) => Promise<SignUpOutput>;
89
+ signOut: (input?: SignOutInput) => Promise<void>;
90
+ autoSignIn: () => Promise<SignInOutput>;
91
+ confirmSignIn: (input: ConfirmSignInInput) => Promise<ConfirmSignInOutput>;
92
+ confirmSignUp: (input: ConfirmSignUpInput) => Promise<ConfirmSignUpOutput>;
93
+ confirmResetPassword: (input: ConfirmResetPasswordInput) => Promise<void>;
94
+ confirmUserAttribute: (input: ConfirmUserAttributeInput) => Promise<void>;
95
+ resetPassword: (input: ResetPasswordInput) => Promise<ResetPasswordOutput>;
96
+ resendSignUpCode: (input: ResendSignUpCodeInput) => Promise<ResendSignUpCodeOutput>;
97
+ sendUserAttributeVerificationCode: (input: SendUserAttributeVerificationCodeInput) => Promise<SendUserAttributeVerificationCodeOutput>;
98
+ };
99
+ type AuthError = Error & {
100
+ __type: string;
101
+ message?: string;
102
+ };
103
+ //#endregion
104
+ //#region src/machines/index.d.ts
105
+ type AuthenticatorMachineOptions = AuthContext["config"] & {
106
+ handlers?: Partial<Handlers>;
107
+ } & AuthMachineHubHandlerOptions;
108
+ type createAuthenticatorMachineReturnType = ReturnType<typeof createAuthenticatorMachine>;
109
+ //#endregion
110
+ //#region src/types/authenticator.d.ts
111
+ type AuthActor = ActorRefFrom<createAuthenticatorMachineReturnType>;
112
+ type AuthMachineHubHandlerOptions = {
113
+ onSignIn?: (user: AuthUser) => void;
114
+ onSignOut?: () => void;
115
+ };
116
+ type AuthMachineHubHandler = (data: HubCapsule<any, any>, actor: AuthActor, options?: AuthMachineHubHandlerOptions) => void;
117
+ type StopListenerCallback = () => void;
118
+ //#endregion
119
+ export { FederatedIdentityProviders as A, SignInStep as C, Step as D, SignUpStep as E, UnverifiedContactMethodTypes as M, UnverifiedUserAttributes as N, UserAttributeStep as O, SignInContext as S, SignUpContext as T, InitialRoute as _, createAuthenticatorMachineReturnType as a, ResetPasswordContext as b, AuthAllowedMFATypes as c, AuthEvent as d, AuthEventData as f, Handlers as g, AuthTOTPSetupDetails as h, AuthenticatorMachineOptions as i, UnverifiedContactMethodType as j, VerifyUserContext as k, AuthContext as l, AuthMFAType as m, AuthMachineHubHandler as n, ActorDoneData as o, AuthEventTypes as p, StopListenerCallback as r, AuthActorContext as s, AuthActor as t, AuthError as u, InitialStep as v, SignOutContext as w, ResetPasswordStep as x, NavigableRoute as y };
120
+ //# sourceMappingURL=authenticator-CCnWvIl5.d.ts.map
@@ -0,0 +1,7 @@
1
+ import { n as AuthMachineHubHandler, r as StopListenerCallback, t as AuthActor } from "./authenticator-CCnWvIl5.js";
2
+
3
+ //#region src/authenticator/defaultAuthHubHandler.d.ts
4
+ declare const listenToAuthHub: (actor: AuthActor, handler?: AuthMachineHubHandler) => StopListenerCallback;
5
+ //#endregion
6
+ export { listenToAuthHub };
7
+ //# sourceMappingURL=authenticator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"defaultAuthHubHandler-rX4tAlCj.js","names":[],"sources":["../src/authenticator/defaultAuthHubHandler.ts"],"sourcesContent":["/*\n * Copyright 2017 - 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * (C) 2025 GAHOJIN, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nimport { Hub } from '@aws-amplify/core'\nimport { AmplifyErrorCode } from '@aws-amplify/core/internals/utils'\nimport type { AuthActor, AuthMachineHubHandler, StopListenerCallback } from './types'\n\nexport const defaultAuthHubHandler: AuthMachineHubHandler = ({ payload }, actor, options) => {\n const { data, event } = payload\n const { send } = actor\n const { onSignIn, onSignOut } = options ?? {}\n\n switch (event) {\n case 'signedIn': {\n if (typeof onSignIn === 'function') {\n onSignIn(payload)\n }\n break\n }\n case 'signInWithRedirect': {\n send({ type: 'SIGN_IN_WITH_REDIRECT' })\n break\n }\n case 'signedOut': {\n if (typeof onSignOut === 'function') {\n onSignOut()\n }\n send({ type: 'SIGN_OUT' })\n break\n }\n case 'tokenRefresh_failure': {\n if (data?.error?.name === AmplifyErrorCode.NetworkError) {\n return\n }\n send({ type: 'SIGN_OUT' })\n break\n }\n default: {\n break\n }\n }\n}\n\nexport const listenToAuthHub = (actor: AuthActor, handler: AuthMachineHubHandler = defaultAuthHubHandler): StopListenerCallback => {\n const eventHandler: Parameters<typeof Hub.listen>[1] = (data) => handler(data, actor)\n return Hub.listen('auth', eventHandler, 'authenticator-hub-handler')\n}\n"],"mappings":";;;AAeA,MAAa,yBAAgD,EAAE,WAAW,OAAO,YAAY;CAC3F,MAAM,EAAE,MAAM,UAAU;CACxB,MAAM,EAAE,SAAS;CACjB,MAAM,EAAE,UAAU,cAAc,WAAW,EAAE;AAE7C,SAAQ,OAAR;EACE,KAAK;AACH,OAAI,OAAO,aAAa,WACtB,UAAS,QAAQ;AAEnB;EAEF,KAAK;AACH,QAAK,EAAE,MAAM,yBAAyB,CAAC;AACvC;EAEF,KAAK;AACH,OAAI,OAAO,cAAc,WACvB,YAAW;AAEb,QAAK,EAAE,MAAM,YAAY,CAAC;AAC1B;EAEF,KAAK;AACH,OAAI,MAAM,OAAO,SAAS,iBAAiB,aACzC;AAEF,QAAK,EAAE,MAAM,YAAY,CAAC;AAC1B;EAEF,QACE;;;AAKN,MAAa,mBAAmB,OAAkB,UAAiC,0BAAgD;CACjI,MAAM,gBAAkD,SAAS,QAAQ,MAAM,MAAM;AACrF,QAAO,IAAI,OAAO,QAAQ,cAAc,4BAA4B"}
1
+ {"version":3,"file":"defaultAuthHubHandler-rX4tAlCj.js","names":[],"sources":["../src/authenticator/defaultAuthHubHandler.ts"],"sourcesContent":["/*\n * Copyright 2017 - 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * (C) 2025 GAHOJIN, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nimport { Hub } from '@aws-amplify/core'\nimport { AmplifyErrorCode } from '@aws-amplify/core/internals/utils'\nimport type { AuthActor, AuthMachineHubHandler, StopListenerCallback } from '~/types/authenticator'\n\nexport const defaultAuthHubHandler: AuthMachineHubHandler = ({ payload }, actor, options) => {\n const { data, event } = payload\n const { send } = actor\n const { onSignIn, onSignOut } = options ?? {}\n\n switch (event) {\n case 'signedIn': {\n if (typeof onSignIn === 'function') {\n onSignIn(payload)\n }\n break\n }\n case 'signInWithRedirect': {\n send({ type: 'SIGN_IN_WITH_REDIRECT' })\n break\n }\n case 'signedOut': {\n if (typeof onSignOut === 'function') {\n onSignOut()\n }\n send({ type: 'SIGN_OUT' })\n break\n }\n case 'tokenRefresh_failure': {\n if (data?.error?.name === AmplifyErrorCode.NetworkError) {\n return\n }\n send({ type: 'SIGN_OUT' })\n break\n }\n default: {\n break\n }\n }\n}\n\nexport const listenToAuthHub = (actor: AuthActor, handler: AuthMachineHubHandler = defaultAuthHubHandler): StopListenerCallback => {\n const eventHandler: Parameters<typeof Hub.listen>[1] = (data) => handler(data, actor)\n return Hub.listen('auth', eventHandler, 'authenticator-hub-handler')\n}\n"],"mappings":";;;AAeA,MAAa,yBAAgD,EAAE,WAAW,OAAO,YAAY;CAC3F,MAAM,EAAE,MAAM,UAAU;CACxB,MAAM,EAAE,SAAS;CACjB,MAAM,EAAE,UAAU,cAAc,WAAW,EAAE;AAE7C,SAAQ,OAAR;EACE,KAAK;AACH,OAAI,OAAO,aAAa,WACtB,UAAS,QAAQ;AAEnB;EAEF,KAAK;AACH,QAAK,EAAE,MAAM,yBAAyB,CAAC;AACvC;EAEF,KAAK;AACH,OAAI,OAAO,cAAc,WACvB,YAAW;AAEb,QAAK,EAAE,MAAM,YAAY,CAAC;AAC1B;EAEF,KAAK;AACH,OAAI,MAAM,OAAO,SAAS,iBAAiB,aACzC;AAEF,QAAK,EAAE,MAAM,YAAY,CAAC;AAC1B;EAEF,QACE;;;AAKN,MAAa,mBAAmB,OAAkB,UAAiC,0BAAgD;CACjI,MAAM,gBAAkD,SAAS,QAAQ,MAAM,MAAM;AACrF,QAAO,IAAI,OAAO,QAAQ,cAAc,4BAA4B"}
@@ -0,0 +1,66 @@
1
+ import { A as FederatedIdentityProviders, C as SignInStep, D as Step, E as SignUpStep, M as UnverifiedContactMethodTypes, N as UnverifiedUserAttributes, O as UserAttributeStep, S as SignInContext, T as SignUpContext, _ as InitialRoute, b as ResetPasswordContext, c as AuthAllowedMFATypes, d as AuthEvent, f as AuthEventData, g as Handlers, h as AuthTOTPSetupDetails, i as AuthenticatorMachineOptions, j as UnverifiedContactMethodType, k as VerifyUserContext, l as AuthContext, m as AuthMFAType, o as ActorDoneData, p as AuthEventTypes, s as AuthActorContext, t as AuthActor, u as AuthError, v as InitialStep, w as SignOutContext, x as ResetPasswordStep, y as NavigableRoute } from "./authenticator-CCnWvIl5.js";
2
+ import { Context, JSX, PropsWithChildren } from "react";
3
+ import { AuthUser, CodeDeliveryDetails } from "@aws-amplify/auth";
4
+
5
+ //#region src/context/AuthenticatorContext.d.ts
6
+ type AuthenticatorContextType = {
7
+ actor: AuthActor;
8
+ };
9
+ declare const AuthenticatorContext: Context<AuthenticatorContextType | null>;
10
+ //#endregion
11
+ //#region src/context/AuthenticatorProvider.d.ts
12
+ type Props$1 = PropsWithChildren & {
13
+ options?: AuthenticatorMachineOptions;
14
+ };
15
+ declare const _default: ({
16
+ options,
17
+ children
18
+ }: Props$1) => JSX.Element;
19
+ //#endregion
20
+ //#region src/hooks/useAuth.d.ts
21
+ type UseAuthResult = {
22
+ user?: AuthUser;
23
+ isLoading: boolean;
24
+ error?: Error;
25
+ };
26
+ type Props = {
27
+ getCurrentUser?: Handlers["getCurrentUser"];
28
+ };
29
+ declare const useAuth: (handlers?: Props) => UseAuthResult;
30
+ //#endregion
31
+ //#region src/types/hooks.d.ts
32
+ type AuthenticatorRoute = "authenticated" | "confirmResetPassword" | "confirmSignIn" | "confirmSignUp" | "confirmVerifyUser" | "forceNewPassword" | "idle" | "forgotPassword" | "setup" | "signOut" | "selectMfaType" | "setupEmail" | "setupTotp" | "signIn" | "signUp" | "transition" | "verifyUser";
33
+ type AuthenticatorMachineContext = AuthenticatorServiceFacade;
34
+ type AuthenticatorMachineContextKey = keyof AuthenticatorMachineContext;
35
+ type UseAuthenticatorSelector = (context: AuthenticatorServiceFacade) => AuthenticatorMachineContext[AuthenticatorMachineContextKey][];
36
+ type UseAuthenticator = AuthenticatorServiceFacade;
37
+ type AuthenticatorServiceContextFacade = {
38
+ allowedMfaTypes?: AuthAllowedMFATypes;
39
+ codeDeliveryDetails?: CodeDeliveryDetails;
40
+ errorMessage?: string;
41
+ isPending: boolean;
42
+ route: AuthenticatorRoute | null;
43
+ totpSecretCode?: string;
44
+ username?: string;
45
+ user?: AuthUser;
46
+ unverifiedUserAttributes?: UnverifiedUserAttributes;
47
+ };
48
+ type AuthenticatorSendEventAliases = {
49
+ handleSubmit: (data?: AuthEventData) => void;
50
+ resendConfirmationCode: () => void;
51
+ refreshUser: () => void;
52
+ setRoute: (route: NavigableRoute) => void;
53
+ skipAttributeVerification: () => void;
54
+ toFederatedSignIn: (data?: AuthEventData) => void;
55
+ };
56
+ type AuthenticatorServiceFacade = AuthenticatorSendEventAliases & AuthenticatorServiceContextFacade;
57
+ type Comparator = (currentMachineContext: AuthenticatorMachineContext, nextMachineContext: AuthenticatorMachineContext) => boolean;
58
+ //#endregion
59
+ //#region src/hooks/useAuthenticator.d.ts
60
+ declare const useAuthenticator: (selector?: UseAuthenticatorSelector) => UseAuthenticator;
61
+ //#endregion
62
+ //#region src/utils.d.ts
63
+ declare const getTotpCodeURL: (issuer: string, username: string, secret: string) => string;
64
+ //#endregion
65
+ export { ActorDoneData, AuthActorContext, AuthAllowedMFATypes, AuthContext, AuthError, AuthEvent, AuthEventData, AuthEventTypes, AuthMFAType, AuthTOTPSetupDetails, AuthenticatorContext, _default as AuthenticatorProvider, AuthenticatorRoute, AuthenticatorSendEventAliases, AuthenticatorServiceContextFacade, AuthenticatorServiceFacade, Comparator, FederatedIdentityProviders, Handlers, InitialRoute, InitialStep, NavigableRoute, ResetPasswordContext, ResetPasswordStep, SignInContext, SignInStep, SignOutContext, SignUpContext, SignUpStep, Step, UnverifiedContactMethodType, UnverifiedContactMethodTypes, UnverifiedUserAttributes, type UseAuthResult, UseAuthenticator, UseAuthenticatorSelector, UserAttributeStep, VerifyUserContext, getTotpCodeURL, useAuth, useAuthenticator };
66
+ //# sourceMappingURL=index.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import { n as listenToAuthHub, t as defaultAuthHubHandler } from "./defaultAuthHubHandler-rX4tAlCj.js";
2
- import { t as createAuthenticatorMachine } from "./machines-BRfb3dTb.js";
2
+ import { t as createAuthenticatorMachine } from "./machines-whqvCGDP.js";
3
3
  import { createContext, useCallback, useContext, useEffect, useMemo, useState } from "react";
4
4
  import { useActor, useSelector } from "@xstate/react";
5
5
  import { Hub } from "@aws-amplify/core";
@@ -83,85 +83,6 @@ const useAuth = (handlers) => {
83
83
  return result;
84
84
  };
85
85
  //#endregion
86
- //#region src/hooks/facade.ts
87
- const NAVIGABLE_ROUTE_EVENT = {
88
- forgotPassword: "FORGOT_PASSWORD",
89
- signIn: "SIGN_IN",
90
- signUp: "SIGN_UP",
91
- signOut: "SIGN_OUT"
92
- };
93
- const getSendEventAliases = (send) => {
94
- return {
95
- handleSubmit: (data) => send({
96
- type: "SUBMIT",
97
- data
98
- }),
99
- resendConfirmationCode: () => send({ type: "RESEND" }),
100
- refreshUser: () => send({ type: "TOKEN_REFRESH" }),
101
- setRoute: (route) => send({ type: NAVIGABLE_ROUTE_EVENT[route] }),
102
- skipAttributeVerification: () => send({ type: "SKIP" }),
103
- toFederatedSignIn: () => send({ type: "FEDERATED_SIGN_IN" })
104
- };
105
- };
106
- const getChildActor = (snapshot) => {
107
- return snapshot.children?.childActor?.getSnapshot();
108
- };
109
- const getRoute = (actor, childActor) => {
110
- if (childActor?.matches("federatedSignIn")) {
111
- if (actor.matches("signUpActor")) return "signUp";
112
- if (actor.matches("signInActor")) return "signIn";
113
- }
114
- switch (true) {
115
- case actor.matches("idle"): return "idle";
116
- case actor.matches("setup"): return "setup";
117
- case actor.matches("signOut"): return "signOut";
118
- case actor.matches("authenticated"): return "authenticated";
119
- case childActor?.matches("confirmSignUp"):
120
- case childActor?.matches("resendSignUpCode"): return "confirmSignUp";
121
- case childActor?.matches("confirmSignIn"): return "confirmSignIn";
122
- case childActor?.matches("setupTotp"): return "setupTotp";
123
- case childActor?.matches("signIn"): return "signIn";
124
- case childActor?.matches("signUp"):
125
- case childActor?.matches("autoSignIn"): return "signUp";
126
- case childActor?.matches("forceChangePassword"): return "forceNewPassword";
127
- case childActor?.matches("forgotPassword"): return "forgotPassword";
128
- case childActor?.matches("confirmResetPassword"): return "confirmResetPassword";
129
- case childActor?.matches("selectUserAttributes"): return "verifyUser";
130
- case childActor?.matches("confirmVerifyUserAttribute"): return "confirmVerifyUser";
131
- case childActor?.matches("setupEmail"): return "setupEmail";
132
- case childActor?.matches("selectMfaType"): return "selectMfaType";
133
- case actor.matches("getCurrentUser"):
134
- case childActor?.matches("fetchUserAttributes"):
135
- /**
136
- * This route is needed for autoSignIn to capture both the
137
- * autoSignIn.pending and the resolved states when the
138
- * signIn actor is running.
139
- */
140
- return "transition";
141
- default: return null;
142
- }
143
- };
144
- const getServiceContextFacade = (actor) => {
145
- const childActor = getChildActor(actor);
146
- const isPending = (actor.hasTag("pending") || childActor?.hasTag("pending")) ?? false;
147
- const route = getRoute(actor, childActor);
148
- const context = actor.context;
149
- const actorContext = childActor?.context ?? {};
150
- const user = actorContext?.user ?? context.user;
151
- const { allowedMfaTypes, codeDeliveryDetails, remoteError: errorMessage, totpSecretCode, unverifiedUserAttributes, username } = actorContext;
152
- return {
153
- allowedMfaTypes,
154
- codeDeliveryDetails,
155
- errorMessage,
156
- isPending,
157
- route,
158
- totpSecretCode,
159
- unverifiedUserAttributes,
160
- user,
161
- username
162
- };
163
- };
164
- //#endregion
165
86
  //#region src/hooks/utils.ts
166
87
  /**
167
88
  * Checks if `value` is an Object (non-primitive, non-array, non-function)
@@ -278,6 +199,85 @@ const getComparator = (selector) => {
278
199
  };
279
200
  };
280
201
  //#endregion
202
+ //#region src/hooks/facade.ts
203
+ const NAVIGABLE_ROUTE_EVENT = {
204
+ forgotPassword: "FORGOT_PASSWORD",
205
+ signIn: "SIGN_IN",
206
+ signUp: "SIGN_UP",
207
+ signOut: "SIGN_OUT"
208
+ };
209
+ const getSendEventAliases = (send) => {
210
+ return {
211
+ handleSubmit: (data) => send({
212
+ type: "SUBMIT",
213
+ data
214
+ }),
215
+ resendConfirmationCode: () => send({ type: "RESEND" }),
216
+ refreshUser: () => send({ type: "TOKEN_REFRESH" }),
217
+ setRoute: (route) => send({ type: NAVIGABLE_ROUTE_EVENT[route] }),
218
+ skipAttributeVerification: () => send({ type: "SKIP" }),
219
+ toFederatedSignIn: () => send({ type: "FEDERATED_SIGN_IN" })
220
+ };
221
+ };
222
+ const getChildActor = (snapshot) => {
223
+ return snapshot.children?.childActor?.getSnapshot();
224
+ };
225
+ const getRoute = (actor, childActor) => {
226
+ if (childActor?.matches("federatedSignIn")) {
227
+ if (actor.matches("signUpActor")) return "signUp";
228
+ if (actor.matches("signInActor")) return "signIn";
229
+ }
230
+ switch (true) {
231
+ case actor.matches("idle"): return "idle";
232
+ case actor.matches("setup"): return "setup";
233
+ case actor.matches("signOut"): return "signOut";
234
+ case actor.matches("authenticated"): return "authenticated";
235
+ case childActor?.matches("confirmSignUp"):
236
+ case childActor?.matches("resendSignUpCode"): return "confirmSignUp";
237
+ case childActor?.matches("confirmSignIn"): return "confirmSignIn";
238
+ case childActor?.matches("setupTotp"): return "setupTotp";
239
+ case childActor?.matches("signIn"): return "signIn";
240
+ case childActor?.matches("signUp"):
241
+ case childActor?.matches("autoSignIn"): return "signUp";
242
+ case childActor?.matches("forceChangePassword"): return "forceNewPassword";
243
+ case childActor?.matches("forgotPassword"): return "forgotPassword";
244
+ case childActor?.matches("confirmResetPassword"): return "confirmResetPassword";
245
+ case childActor?.matches("selectUserAttributes"): return "verifyUser";
246
+ case childActor?.matches("confirmVerifyUserAttribute"): return "confirmVerifyUser";
247
+ case childActor?.matches("setupEmail"): return "setupEmail";
248
+ case childActor?.matches("selectMfaType"): return "selectMfaType";
249
+ case actor.matches("getCurrentUser"):
250
+ case childActor?.matches("fetchUserAttributes"):
251
+ /**
252
+ * This route is needed for autoSignIn to capture both the
253
+ * autoSignIn.pending and the resolved states when the
254
+ * signIn actor is running.
255
+ */
256
+ return "transition";
257
+ default: return null;
258
+ }
259
+ };
260
+ const getServiceContextFacade = (actor) => {
261
+ const childActor = getChildActor(actor);
262
+ const isPending = (actor.hasTag("pending") || childActor?.hasTag("pending")) ?? false;
263
+ const route = getRoute(actor, childActor);
264
+ const context = actor.context;
265
+ const actorContext = childActor?.context ?? {};
266
+ const user = actorContext?.user ?? context.user;
267
+ const { allowedMfaTypes, codeDeliveryDetails, remoteError: errorMessage, totpSecretCode, unverifiedUserAttributes, username } = actorContext;
268
+ return {
269
+ allowedMfaTypes,
270
+ codeDeliveryDetails,
271
+ errorMessage,
272
+ isPending,
273
+ route,
274
+ totpSecretCode,
275
+ unverifiedUserAttributes,
276
+ user,
277
+ username
278
+ };
279
+ };
280
+ //#endregion
281
281
  //#region src/hooks/useAuthenticator.ts
282
282
  const defaultComparator = () => false;
283
283
  const useAuthenticator = (selector) => {
@@ -291,7 +291,8 @@ const useAuthenticator = (selector) => {
291
291
  }), selector ? getComparator(selector) : defaultComparator);
292
292
  };
293
293
  //#endregion
294
- //#region src/machines/types.ts
294
+ //#region src/types/user.ts
295
+ /** Federated IDPs that Authenticator supports */
295
296
  const FederatedIdentityProviders = {
296
297
  Apple: "Apple",
297
298
  Amazon: "Amazon",
@@ -301,13 +302,13 @@ const FederatedIdentityProviders = {
301
302
  /**
302
303
  * Cognito user contact method types that have not been verified as valid
303
304
  */
304
- const unverifiedContactMethodTypes = ["email", "phone_number"];
305
+ const UnverifiedContactMethodTypes = ["email", "phone_number"];
305
306
  //#endregion
306
307
  //#region src/utils.ts
307
308
  const getTotpCodeURL = (issuer, username, secret) => {
308
309
  return encodeURI(`otpauth://totp/${issuer}:${username}?secret=${secret}&issuer=${issuer}`);
309
310
  };
310
311
  //#endregion
311
- export { AuthenticatorContext, AuthenticatorProvider_default as AuthenticatorProvider, FederatedIdentityProviders, getTotpCodeURL, unverifiedContactMethodTypes, useAuth, useAuthenticator };
312
+ export { AuthenticatorContext, AuthenticatorProvider_default as AuthenticatorProvider, FederatedIdentityProviders, UnverifiedContactMethodTypes, getTotpCodeURL, useAuth, useAuthenticator };
312
313
 
313
- //# sourceMappingURL=index.mjs.map
314
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/context/AuthenticatorContext.ts","../src/context/AuthenticatorProvider.tsx","../src/hooks/useAuth.ts","../src/hooks/utils.ts","../src/hooks/facade.ts","../src/hooks/useAuthenticator.ts","../src/types/user.ts","../src/utils.ts"],"sourcesContent":["import { type Context, createContext } from 'react'\nimport type { AuthActor } from '~/types/authenticator'\n\ntype AuthenticatorContextType = {\n actor: AuthActor\n}\n\nexport const AuthenticatorContext: Context<AuthenticatorContextType | null> = createContext<AuthenticatorContextType | null>(null)\n","import { useActor } from '@xstate/react'\nimport { type JSX, type PropsWithChildren, useContext, useEffect, useMemo } from 'react'\nimport { defaultAuthHubHandler, listenToAuthHub } from '~/authenticator/defaultAuthHubHandler'\nimport { AuthenticatorContext } from '~/context/AuthenticatorContext'\nimport { type AuthenticatorMachineOptions, createAuthenticatorMachine } from '~/machines'\nimport type { AuthMachineHubHandler, AuthMachineHubHandlerOptions } from '~/types/authenticator'\n\nconst createHubHandler = (options?: AuthMachineHubHandlerOptions): AuthMachineHubHandler => {\n return (data, service) => defaultAuthHubHandler(data, service, options)\n}\n\ntype Props = PropsWithChildren & {\n options?: AuthenticatorMachineOptions\n}\n\nexport default ({ options, children }: Props): JSX.Element => {\n const machine = useMemo(() => createAuthenticatorMachine(options), [options])\n\n // 階層構造にAuthenticatorContextを使用している場合、親Contextの認証状態を継承する\n const parentProvider = useContext(AuthenticatorContext)\n const [, , actor] = useActor(machine)\n const value = useMemo(() => parentProvider ?? { actor }, [parentProvider, actor])\n\n const { actor: activeActor } = value\n\n useEffect(() => {\n return listenToAuthHub(activeActor, createHubHandler(options))\n }, [activeActor, options])\n\n return <AuthenticatorContext.Provider value={value}>{children}</AuthenticatorContext.Provider>\n}\n","/*\n * Copyright 2017 - 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * (C) 2025 GAHOJIN, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nimport { type AuthUser, getCurrentUser } from '@aws-amplify/auth'\nimport { Hub, type HubCallback } from '@aws-amplify/core'\nimport { useCallback, useEffect, useState } from 'react'\nimport type { Handlers } from '~/types/machines'\n\nexport type UseAuthResult = {\n user?: AuthUser\n isLoading: boolean\n error?: Error\n}\n\ntype Props = {\n getCurrentUser?: Handlers['getCurrentUser']\n}\n\nexport const useAuth = (handlers?: Props): UseAuthResult => {\n const [result, setResult] = useState<UseAuthResult>({\n isLoading: true,\n })\n\n const fetchCurrentUser = useCallback(() => {\n // loading\n setResult((prev) => ({ ...prev, isLoading: true }))\n\n void (handlers?.getCurrentUser ?? getCurrentUser)()\n .then((user) => setResult({ user, isLoading: false }))\n .catch((e) => setResult({ error: e as Error, isLoading: false }))\n }, [handlers?.getCurrentUser])\n\n const handleAuth: HubCallback = useCallback(\n ({ payload }) => {\n switch (payload.event) {\n // success events\n case 'signedIn':\n case 'signUp':\n case 'autoSignIn':\n setResult({ user: payload.data as AuthUser, isLoading: false })\n break\n case 'signedOut':\n setResult({ isLoading: false })\n break\n\n // failure events\n case 'tokenRefresh_failure':\n case 'signIn_failure':\n setResult({ error: payload.data as Error, isLoading: false })\n break\n case 'autoSignIn_failure':\n // autoSignIn just returns error message. Wrap it to an Error object\n setResult({ error: new Error(payload.message), isLoading: false })\n break\n\n // events that need another fetch\n case 'tokenRefresh':\n void fetchCurrentUser()\n break\n\n default:\n // we do not handle other hub events like `configured`.\n break\n }\n },\n [fetchCurrentUser],\n )\n\n useEffect(() => {\n const unsubscribe = Hub.listen('auth', handleAuth, 'useAuth')\n void fetchCurrentUser() // on init, see if user is already logged in\n\n return unsubscribe\n }, [handleAuth, fetchCurrentUser])\n\n return result\n}\n","/*\n * Copyright 2017 - 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * (C) 2025 GAHOJIN, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nimport type { Comparator, UseAuthenticatorSelector } from '~/types/hooks'\n\n/**\n * Checks if `value` is an Object (non-primitive, non-array, non-function)\n * Will return false for Arrays and functions\n *\n *\n * @param {unknown} value The value to check\n * @returns {boolean} Returns `true` if `value` is an object, `false` otherwise\n */\nexport function isObject(value: unknown): value is object {\n return value != null && !Array.isArray(value) && typeof value === 'object'\n}\n\n/**\n * Checks if `value` is a string primitive or object\n *\n * @param {unknown} value The value to check\n * @returns {boolean} Returns `true` if `value` is a string, `false` otherwise\n */\nexport function isString(value: unknown): value is string {\n return typeof value === 'string' || (typeof value === 'object' && Object.prototype.toString.call(value) === '[object String]')\n}\n\n/**\n * Checks if `value` is a Map\n *\n * @param {unknown} value The value to check\n * @returns {boolean} Returns `true` if `value` is a Map, `false` otherwise\n */\nexport function isMap(value: unknown): value is Map<unknown, unknown> {\n return isObject(value) && Object.prototype.toString.call(value) === '[object Map]'\n}\n\n/**\n * Checks if `value` is a Set\n *\n * @param {unknown} value The value to check\n * @returns {boolean} Returns `true` if `value` is a Set, `false` otherwise\n */\nexport function isSet<T>(value: unknown): value is Set<T> {\n return isObject(value) && Object.prototype.toString.call(value) === '[object Set]'\n}\n\n/**\n * Checks if `value` is undefined\n *\n * @param {unknown} value The value to check\n * @returns {boolean} Returns `true` if `value` is undefined, `false` otherwise\n */\nexport function isUndefined(value: unknown): value is undefined {\n return value === undefined\n}\n\n/**\n * Checks if `value` is nullish\n *\n * @param {unknown} value The value to check\n * @returns {boolean} Returns `true` if `value` is nullish, `false` otherwise\n */\nexport function isNil(value: unknown): value is null | undefined {\n return value == null\n}\n\n/**\n * Checks if `value` is empty\n *\n * @param {unknown} value The value to check\n * @returns {boolean} Returns `true` if `value` is empty, `false` otherwise\n */\nexport function isEmpty<T>(value: T): boolean {\n if (value === null || value === undefined) return true\n\n if (isObject(value) && (isMap(value) || isSet(value))) {\n return !value.size\n }\n if (isObject(value) && (isString(value) || Array.isArray(value))) {\n return !value.length\n }\n for (const key in value) {\n if (has(value, key)) {\n return false\n }\n }\n return true\n}\n\n/**\n * Checks if `value` is an empty array\n *\n * @param {unknown} value The value to check\n * @returns {boolean} Returns `true` if `value` is a empty, `false` otherwise\n */\nfunction isEmptyArray<T>(value: T): boolean {\n return Array.isArray(value) && isEmpty(value)\n}\n\n/**\n * Checks if all members of the `values` param are empty arrays\n *\n * @param {unknown} value The values to check\n * @returns {boolean} Returns `true` if all members of `values` are empty, `false` otherwise\n */\nexport function areEmptyArrays<T>(...values: T[]): boolean {\n return values.every(isEmptyArray)\n}\n\n/**\n * Checks if `value` is an empty object\n *\n * @param {unknown} value The value to check\n * @returns {boolean} Returns `true` if `value` is empty, `false` otherwise\n */\nexport function isEmptyObject<T>(value: T): boolean {\n return isObject(value) && isEmpty(value)\n}\n\n/**\n * Checks if all members of the `values` param are empty objects\n *\n * @param {unknown} values The values to check\n * @returns {boolean} Returns `true` if all members of the `values` param are empty, `false` otherwise\n */\nexport function areEmptyObjects<T>(...values: T[]): boolean {\n return values.every(isEmptyObject)\n}\n\n/**\n * Checks if `key` is a direct property of `value`\n *\n * @param {unknown} value `object` potentially containing property\n * @param {string} key property key\n * @returns whether `key` param is a property of the `obj` param\n */\nexport function has(value: unknown, key: string): boolean {\n return value != null && Object.hasOwn(value, key)\n}\n\n/**\n * Does an ordering and shallow comparison of each array value,\n * plus a value equality check for empty objects and arrays.\n */\nexport function areSelectorDepsEqual<T>(currentDeps: T[], nextDeps: T[]): boolean {\n if (currentDeps.length !== nextDeps.length) {\n return false\n }\n return currentDeps.every((currentDep, index) => {\n const nextDep = nextDeps[index]\n\n if (areEmptyArrays(currentDep, nextDep) || areEmptyObjects(currentDep, nextDep)) {\n return true\n }\n\n return currentDep === nextDep\n })\n}\n\nexport const getComparator = (selector: UseAuthenticatorSelector): Comparator => {\n return (currentFacade, nextFacade) => {\n const currentSelectorDeps = selector(currentFacade)\n const nextSelectorDeps = selector(nextFacade)\n\n // Shallow compare the array values\n return areSelectorDepsEqual(currentSelectorDeps, nextSelectorDeps)\n }\n}\n","import type { AnyMachineSnapshot, SnapshotFrom } from 'xstate'\nimport type { AuthActor } from '~/types/authenticator'\nimport type { AuthenticatorRoute, AuthenticatorSendEventAliases, AuthenticatorServiceContextFacade } from '~/types/hooks'\nimport type { AuthActorContext, AuthEvent, AuthEventTypes, NavigableRoute } from '~/types/machines'\n\nconst NAVIGABLE_ROUTE_EVENT: Record<NavigableRoute, AuthEventTypes> = {\n forgotPassword: 'FORGOT_PASSWORD',\n signIn: 'SIGN_IN',\n signUp: 'SIGN_UP',\n signOut: 'SIGN_OUT',\n}\n\nexport const getSendEventAliases = (send: (event: AuthEvent) => void): AuthenticatorSendEventAliases => {\n return {\n handleSubmit: (data) => send({ type: 'SUBMIT', data }),\n resendConfirmationCode: () => send({ type: 'RESEND' }),\n refreshUser: () => send({ type: 'TOKEN_REFRESH' }),\n setRoute: (route) => send({ type: NAVIGABLE_ROUTE_EVENT[route] }),\n skipAttributeVerification: () => send({ type: 'SKIP' }),\n toFederatedSignIn: () => send({ type: 'FEDERATED_SIGN_IN' }),\n }\n}\n\nconst getChildActor = (snapshot: SnapshotFrom<AuthActor>): AnyMachineSnapshot | undefined => {\n return snapshot.children?.childActor?.getSnapshot() as AnyMachineSnapshot\n}\n\nconst getRoute = (actor: SnapshotFrom<AuthActor>, childActor: AnyMachineSnapshot | undefined): AuthenticatorRoute | null => {\n // 'federatedSignIn' exists as a state on both the 'signInActor' and 'signUpActor',\n // match against the `actorState` initially to determine if the federated sign in flow\n // has begun, then which actor has begun the flow and return the corresponding `route`\n if (childActor?.matches('federatedSignIn')) {\n if (actor.matches('signUpActor')) {\n return 'signUp'\n }\n if (actor.matches('signInActor')) {\n return 'signIn'\n }\n }\n\n switch (true) {\n case actor.matches('idle'):\n return 'idle'\n case actor.matches('setup'):\n return 'setup'\n case actor.matches('signOut'):\n return 'signOut'\n case actor.matches('authenticated'):\n return 'authenticated'\n case childActor?.matches('confirmSignUp'):\n case childActor?.matches('resendSignUpCode'):\n return 'confirmSignUp'\n case childActor?.matches('confirmSignIn'):\n return 'confirmSignIn'\n case childActor?.matches('setupTotp'):\n return 'setupTotp'\n case childActor?.matches('signIn'):\n return 'signIn'\n case childActor?.matches('signUp'):\n case childActor?.matches('autoSignIn'):\n return 'signUp'\n case childActor?.matches('forceChangePassword'):\n return 'forceNewPassword'\n case childActor?.matches('forgotPassword'):\n return 'forgotPassword'\n case childActor?.matches('confirmResetPassword'):\n return 'confirmResetPassword'\n case childActor?.matches('selectUserAttributes'):\n return 'verifyUser'\n case childActor?.matches('confirmVerifyUserAttribute'):\n return 'confirmVerifyUser'\n case childActor?.matches('setupEmail'):\n return 'setupEmail'\n case childActor?.matches('selectMfaType'):\n return 'selectMfaType'\n case actor.matches('getCurrentUser'):\n case childActor?.matches('fetchUserAttributes'):\n /**\n * This route is needed for autoSignIn to capture both the\n * autoSignIn.pending and the resolved states when the\n * signIn actor is running.\n */\n return 'transition'\n default:\n return null\n }\n}\n\nexport const getServiceContextFacade = (actor: SnapshotFrom<AuthActor>): AuthenticatorServiceContextFacade => {\n const childActor = getChildActor(actor)\n const isPending = (actor.hasTag('pending') || childActor?.hasTag('pending')) ?? false\n const route = getRoute(actor, childActor)\n const context = actor.context\n const actorContext: AuthActorContext = childActor?.context ?? {}\n const user = actorContext?.user ?? context.user\n\n const { allowedMfaTypes, codeDeliveryDetails, remoteError: errorMessage, totpSecretCode, unverifiedUserAttributes, username } = actorContext\n\n return {\n allowedMfaTypes,\n codeDeliveryDetails,\n errorMessage,\n isPending,\n route,\n totpSecretCode,\n unverifiedUserAttributes,\n user,\n username,\n }\n}\n","import { useSelector } from '@xstate/react'\nimport { useContext } from 'react'\nimport { AuthenticatorContext } from '~/context'\nimport { getComparator } from '~/hooks/utils'\nimport type { UseAuthenticator, UseAuthenticatorSelector } from '~/types/hooks'\nimport { getSendEventAliases, getServiceContextFacade } from './facade'\n\nconst defaultComparator = (): false => false\n\nexport const useAuthenticator = (selector?: UseAuthenticatorSelector): UseAuthenticator => {\n const context = useContext(AuthenticatorContext)\n\n if (!context) {\n throw new Error('`useAuthenticator` must be used inside an `AuthenticatorProvider`.')\n }\n\n const { actor } = context\n const { send } = actor\n\n const comparator = selector ? getComparator(selector) : defaultComparator\n\n return useSelector(\n actor,\n (snapshot) => ({\n ...getSendEventAliases(send),\n ...getServiceContextFacade(snapshot),\n }),\n comparator,\n )\n}\n","/** Federated IDPs that Authenticator supports */\nexport const FederatedIdentityProviders = {\n Apple: 'Apple',\n Amazon: 'Amazon',\n Facebook: 'Facebook',\n Google: 'Google',\n} as const\nexport type FederatedIdentityProviders = (typeof FederatedIdentityProviders)[keyof typeof FederatedIdentityProviders]\n\n/**\n * Cognito user contact method types that have not been verified as valid\n */\nexport const UnverifiedContactMethodTypes = ['email', 'phone_number'] as const\nexport type UnverifiedContactMethodType = (typeof UnverifiedContactMethodTypes)[number]\n\nexport type UnverifiedUserAttributes = Partial<Record<UnverifiedContactMethodType, string>>\n","export const getTotpCodeURL = (issuer: string, username: string, secret: string): string => {\n return encodeURI(`otpauth://totp/${issuer}:${username}?secret=${secret}&issuer=${issuer}`)\n}\n"],"mappings":"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"}