@gahojin-inc/amplify-auth-hooks 2025.8.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.mjs ADDED
@@ -0,0 +1,328 @@
1
+ import { defaultAuthHubHandler, listenToAuthHub } from "./defaultAuthHubHandler-DR9nH-fl.js";
2
+ import { createAuthenticatorMachine } from "./machines-CRIehDHl.js";
3
+ import { createContext, useCallback, useContext, useEffect, useMemo, useState } from "react";
4
+ import { useActor, useSelector } from "@xstate/react";
5
+ import { Hub } from "@aws-amplify/core";
6
+ import { getCurrentUser } from "@aws-amplify/auth";
7
+ import { jsx } from "react/jsx-runtime";
8
+
9
+ //#region src/context/AuthenticatorContext.ts
10
+ const AuthenticatorContext = createContext(null);
11
+
12
+ //#endregion
13
+ //#region src/context/AuthenticatorProvider.tsx
14
+ const createHubHandler = (options) => {
15
+ return (data, service) => defaultAuthHubHandler(data, service, options);
16
+ };
17
+ var AuthenticatorProvider_default = ({ options, children }) => {
18
+ const machine = useMemo(() => createAuthenticatorMachine(options), [options]);
19
+ const [authStatus, setAuthStatus] = useState("configuring");
20
+ const parentProvider = useContext(AuthenticatorContext);
21
+ const [, , actor] = useActor(machine);
22
+ const value = useMemo(() => parentProvider ?? {
23
+ authStatus,
24
+ actor
25
+ }, [
26
+ authStatus,
27
+ parentProvider,
28
+ actor
29
+ ]);
30
+ const { actor: activeActor } = value;
31
+ useEffect(() => {
32
+ const onSignIn = () => setAuthStatus("authenticated");
33
+ const onSignOut = () => setAuthStatus("unauthenticated");
34
+ return listenToAuthHub(activeActor, createHubHandler({
35
+ onSignIn,
36
+ onSignOut
37
+ }));
38
+ }, [activeActor]);
39
+ return /* @__PURE__ */ jsx(AuthenticatorContext.Provider, {
40
+ value,
41
+ children
42
+ });
43
+ };
44
+
45
+ //#endregion
46
+ //#region src/hooks/useAuth.ts
47
+ const useAuth = () => {
48
+ const [result, setResult] = useState({ isLoading: true });
49
+ const fetchCurrentUser = useCallback(async () => {
50
+ setResult((prev) => ({
51
+ ...prev,
52
+ isLoading: true
53
+ }));
54
+ try {
55
+ const user = await getCurrentUser();
56
+ setResult({
57
+ user,
58
+ isLoading: false
59
+ });
60
+ } catch (e) {
61
+ setResult({
62
+ error: e,
63
+ isLoading: false
64
+ });
65
+ }
66
+ }, []);
67
+ const handleAuth = useCallback(({ payload }) => {
68
+ switch (payload.event) {
69
+ case "signedIn":
70
+ case "signUp":
71
+ case "autoSignIn":
72
+ setResult({
73
+ user: payload.data,
74
+ isLoading: false
75
+ });
76
+ break;
77
+ case "signedOut":
78
+ setResult({ isLoading: false });
79
+ break;
80
+ case "tokenRefresh_failure":
81
+ case "signIn_failure":
82
+ setResult({
83
+ error: payload.data,
84
+ isLoading: false
85
+ });
86
+ break;
87
+ case "autoSignIn_failure":
88
+ setResult({
89
+ error: new Error(payload.message),
90
+ isLoading: false
91
+ });
92
+ break;
93
+ case "tokenRefresh":
94
+ fetchCurrentUser();
95
+ break;
96
+ default: break;
97
+ }
98
+ }, [fetchCurrentUser]);
99
+ useEffect(() => {
100
+ const unsubscribe = Hub.listen("auth", handleAuth, "useAuth");
101
+ fetchCurrentUser();
102
+ return unsubscribe;
103
+ }, [handleAuth, fetchCurrentUser]);
104
+ return result;
105
+ };
106
+
107
+ //#endregion
108
+ //#region src/hooks/facade.ts
109
+ const NAVIGABLE_ROUTE_EVENT = {
110
+ forgotPassword: "FORGOT_PASSWORD",
111
+ signIn: "SIGN_IN",
112
+ signUp: "SIGN_UP",
113
+ signOut: "SIGN_OUT"
114
+ };
115
+ const getSendEventAliases = (send) => {
116
+ return {
117
+ handleSubmit: (data) => send({
118
+ type: "SUBMIT",
119
+ data
120
+ }),
121
+ resendConfirmationCode: () => send({ type: "RESEND" }),
122
+ setRoute: (route) => send({ type: NAVIGABLE_ROUTE_EVENT[route] }),
123
+ skipAttributeVerification: () => send({ type: "SKIP" }),
124
+ toFederatedSignIn: () => send({ type: "FEDERATED_SIGN_IN" })
125
+ };
126
+ };
127
+ const getChildActor = (snapshot) => {
128
+ return snapshot.children?.childActor?.getSnapshot();
129
+ };
130
+ const getRoute = (actor, childActor) => {
131
+ if (childActor?.matches("federatedSignIn")) {
132
+ if (actor.matches("signUpActor")) return "signUp";
133
+ if (actor.matches("signInActor")) return "signIn";
134
+ }
135
+ switch (true) {
136
+ case actor.matches("idle"): return "idle";
137
+ case actor.matches("setup"): return "setup";
138
+ case actor.matches("signOut"): return "signOut";
139
+ case actor.matches("authenticated"): return "authenticated";
140
+ case childActor?.matches("confirmSignUp"):
141
+ case childActor?.matches("resendSignUpCode"): return "confirmSignUp";
142
+ case childActor?.matches("confirmSignIn"): return "confirmSignIn";
143
+ case childActor?.matches("setupTotp"): return "setupTotp";
144
+ case childActor?.matches("signIn"): return "signIn";
145
+ case childActor?.matches("signUp"):
146
+ case childActor?.matches("autoSignIn"): return "signUp";
147
+ case childActor?.matches("forceChangePassword"): return "forceNewPassword";
148
+ case childActor?.matches("forgotPassword"): return "forgotPassword";
149
+ case childActor?.matches("confirmResetPassword"): return "confirmResetPassword";
150
+ case childActor?.matches("selectUserAttributes"): return "verifyUser";
151
+ case childActor?.matches("confirmVerifyUserAttribute"): return "confirmVerifyUser";
152
+ case childActor?.matches("setupEmail"): return "setupEmail";
153
+ case childActor?.matches("selectMfaType"): return "selectMfaType";
154
+ case actor.matches("getCurrentUser"):
155
+ case childActor?.matches("fetchUserAttributes"):
156
+ /**
157
+ * This route is needed for autoSignIn to capture both the
158
+ * autoSignIn.pending and the resolved states when the
159
+ * signIn actor is running.
160
+ */
161
+ return "transition";
162
+ default: return null;
163
+ }
164
+ };
165
+ const getServiceContextFacade = (actor) => {
166
+ const childActor = getChildActor(actor);
167
+ const isPending = (actor.hasTag("pending") || childActor?.hasTag("pending")) ?? false;
168
+ const route = getRoute(actor, childActor);
169
+ const context = actor.context;
170
+ const actorContext = childActor?.context ?? {};
171
+ const user = actorContext?.user ?? context.user;
172
+ const { allowedMfaTypes, codeDeliveryDetails, remoteError: errorMessage, totpSecretCode, unverifiedUserAttributes, username } = actorContext;
173
+ return {
174
+ allowedMfaTypes,
175
+ codeDeliveryDetails,
176
+ errorMessage,
177
+ isPending,
178
+ route,
179
+ totpSecretCode,
180
+ unverifiedUserAttributes,
181
+ user,
182
+ username
183
+ };
184
+ };
185
+
186
+ //#endregion
187
+ //#region src/hooks/utils.ts
188
+ /**
189
+ * Checks if `value` is an Object (non-primitive, non-array, non-function)
190
+ * Will return false for Arrays and functions
191
+ *
192
+ *
193
+ * @param {unknown} value The value to check
194
+ * @returns {boolean} Returns `true` if `value` is an object, `false` otherwise
195
+ */
196
+ function isObject(value) {
197
+ return value != null && !Array.isArray(value) && typeof value === "object";
198
+ }
199
+ /**
200
+ * Checks if `value` is a string primitive or object
201
+ *
202
+ * @param {unknown} value The value to check
203
+ * @returns {boolean} Returns `true` if `value` is a string, `false` otherwise
204
+ */
205
+ function isString(value) {
206
+ return typeof value === "string" || typeof value === "object" && Object.prototype.toString.call(value) === "[object String]";
207
+ }
208
+ /**
209
+ * Checks if `value` is a Map
210
+ *
211
+ * @param {unknown} value The value to check
212
+ * @returns {boolean} Returns `true` if `value` is a Map, `false` otherwise
213
+ */
214
+ function isMap(value) {
215
+ return isObject(value) && Object.prototype.toString.call(value) === "[object Map]";
216
+ }
217
+ /**
218
+ * Checks if `value` is a Set
219
+ *
220
+ * @param {unknown} value The value to check
221
+ * @returns {boolean} Returns `true` if `value` is a Set, `false` otherwise
222
+ */
223
+ function isSet(value) {
224
+ return isObject(value) && Object.prototype.toString.call(value) === "[object Set]";
225
+ }
226
+ /**
227
+ * Checks if `value` is empty
228
+ *
229
+ * @param {unknown} value The value to check
230
+ * @returns {boolean} Returns `true` if `value` is empty, `false` otherwise
231
+ */
232
+ function isEmpty(value) {
233
+ if (value === null || value === void 0) return true;
234
+ if (isObject(value) && (isMap(value) || isSet(value))) return !value.size;
235
+ if (isObject(value) && (isString(value) || Array.isArray(value))) return !value.length;
236
+ for (const key in value) if (has(value, key)) return false;
237
+ return true;
238
+ }
239
+ /**
240
+ * Checks if `value` is an empty array
241
+ *
242
+ * @param {unknown} value The value to check
243
+ * @returns {boolean} Returns `true` if `value` is a empty, `false` otherwise
244
+ */
245
+ function isEmptyArray(value) {
246
+ return Array.isArray(value) && isEmpty(value);
247
+ }
248
+ /**
249
+ * Checks if all members of the `values` param are empty arrays
250
+ *
251
+ * @param {unknown} value The values to check
252
+ * @returns {boolean} Returns `true` if all members of `values` are empty, `false` otherwise
253
+ */
254
+ function areEmptyArrays(...values) {
255
+ return values.every(isEmptyArray);
256
+ }
257
+ /**
258
+ * Checks if `value` is an empty object
259
+ *
260
+ * @param {unknown} value The value to check
261
+ * @returns {boolean} Returns `true` if `value` is empty, `false` otherwise
262
+ */
263
+ function isEmptyObject(value) {
264
+ return isObject(value) && isEmpty(value);
265
+ }
266
+ /**
267
+ * Checks if all members of the `values` param are empty objects
268
+ *
269
+ * @param {unknown} values The values to check
270
+ * @returns {boolean} Returns `true` if all members of the `values` param are empty, `false` otherwise
271
+ */
272
+ function areEmptyObjects(...values) {
273
+ return values.every(isEmptyObject);
274
+ }
275
+ /**
276
+ * Checks if `key` is a direct property of `value`
277
+ *
278
+ * @param {unknown} value `object` potentially containing property
279
+ * @param {string} key property key
280
+ * @returns whether `key` param is a property of the `obj` param
281
+ */
282
+ function has(value, key) {
283
+ return value != null && Object.hasOwn(value, key);
284
+ }
285
+ /**
286
+ * Does an ordering and shallow comparison of each array value,
287
+ * plus a value equality check for empty objects and arrays.
288
+ */
289
+ function areSelectorDepsEqual(currentDeps, nextDeps) {
290
+ if (currentDeps.length !== nextDeps.length) return false;
291
+ return currentDeps.every((currentDep, index) => {
292
+ const nextDep = nextDeps[index];
293
+ if (areEmptyArrays(currentDep, nextDep) || areEmptyObjects(currentDep, nextDep)) return true;
294
+ return currentDep === nextDep;
295
+ });
296
+ }
297
+ const getComparator = (selector) => {
298
+ return (currentFacade, nextFacade) => {
299
+ const currentSelectorDeps = selector(currentFacade);
300
+ const nextSelectorDeps = selector(nextFacade);
301
+ return areSelectorDepsEqual(currentSelectorDeps, nextSelectorDeps);
302
+ };
303
+ };
304
+
305
+ //#endregion
306
+ //#region src/hooks/useAuthenticator.ts
307
+ const defaultComparator = () => false;
308
+ const useAuthenticator = (selector) => {
309
+ const context = useContext(AuthenticatorContext);
310
+ if (!context) throw new Error("`useAuthenticator` must be used inside an `AuthenticatorProvider`.");
311
+ const { actor } = context;
312
+ const { send } = actor;
313
+ const comparator = selector ? getComparator(selector) : defaultComparator;
314
+ return useSelector(actor, (snapshot) => ({
315
+ ...getSendEventAliases(send),
316
+ ...getServiceContextFacade(snapshot)
317
+ }), comparator);
318
+ };
319
+
320
+ //#endregion
321
+ //#region src/utils.ts
322
+ const getTotpCodeURL = (issuer, username, secret) => {
323
+ return encodeURI(`otpauth://totp/${issuer}:${username}?secret=${secret}&issuer=${issuer}`);
324
+ };
325
+
326
+ //#endregion
327
+ export { AuthenticatorContext, AuthenticatorProvider_default as AuthenticatorProvider, getTotpCodeURL, useAuth, useAuthenticator };
328
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["AuthenticatorContext: Context<AuthenticatorContextType | null>","handleAuth: HubCallback","NAVIGABLE_ROUTE_EVENT: Record<NavigableRoute, AuthEventTypes>","actorContext: AuthActorContext"],"sources":["../src/context/AuthenticatorContext.ts","../src/context/AuthenticatorProvider.tsx","../src/hooks/useAuth.ts","../src/hooks/facade.ts","../src/hooks/utils.ts","../src/hooks/useAuthenticator.ts","../src/utils.ts"],"sourcesContent":["import { type Context, createContext } from 'react'\nimport type { AuthActor } from '../authenticator/types'\nimport type { AuthStatus } from '../context/types'\n\ntype AuthenticatorContextType = {\n actor: AuthActor\n authStatus: AuthStatus\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, useState } from 'react'\nimport { defaultAuthHubHandler, listenToAuthHub } from '../authenticator/defaultAuthHubHandler'\nimport type { AuthMachineHubHandler } from '../authenticator/types'\nimport { AuthenticatorContext } from '../context/AuthenticatorContext'\nimport type { AuthStatus } from '../context/types'\nimport { type AuthenticatorMachineOptions, createAuthenticatorMachine } from '../machines'\n\ntype Options = Parameters<AuthMachineHubHandler>[2]\n\nconst createHubHandler = (options?: Options): 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 const [authStatus, setAuthStatus] = useState<AuthStatus>('configuring')\n\n // 階層構造にAuthenticatorContextを使用している場合、親Contextの認証状態を継承する\n const parentProvider = useContext(AuthenticatorContext)\n const [, , actor] = useActor(machine)\n const value = useMemo(() => parentProvider ?? { authStatus, actor }, [authStatus, parentProvider, actor])\n\n const { actor: activeActor } = value\n\n useEffect(() => {\n const onSignIn = () => setAuthStatus('authenticated')\n const onSignOut = () => setAuthStatus('unauthenticated')\n return listenToAuthHub(activeActor, createHubHandler({ onSignIn, onSignOut }))\n }, [activeActor])\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'\n\nexport type UseAuthResult = {\n user?: AuthUser\n isLoading: boolean\n error?: Error\n}\n\nexport const useAuth = (): UseAuthResult => {\n const [result, setResult] = useState<UseAuthResult>({\n isLoading: true,\n })\n\n const fetchCurrentUser = useCallback(async () => {\n // loading\n setResult((prev) => ({ ...prev, isLoading: true }))\n\n try {\n const user = await getCurrentUser()\n setResult({ user, isLoading: false })\n } catch (e) {\n setResult({ error: e as Error, isLoading: false })\n }\n }, [])\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 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 fetchCurrentUser() // on init, see if user is already logged in\n\n return unsubscribe\n }, [handleAuth, fetchCurrentUser])\n\n return result\n}\n","import type { AnyMachineSnapshot, SnapshotFrom } from 'xstate'\nimport type { AuthActor } from '../authenticator/types'\nimport type { AuthActorContext, AuthEvent, AuthEventTypes, NavigableRoute } from '../machines/types'\nimport type { AuthenticatorRoute, AuthenticatorSendEventAliases, AuthenticatorServiceContextFacade } from './types'\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 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","/*\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 '../hooks/types'\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 { useSelector } from '@xstate/react'\nimport { useContext } from 'react'\nimport { AuthenticatorContext } from '../context'\nimport { getSendEventAliases, getServiceContextFacade } from './facade'\nimport type { UseAuthenticator, UseAuthenticatorSelector } from './types'\nimport { getComparator } from './utils'\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","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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"}
@@ -0,0 +1,24 @@
1
+ import type { CodeDeliveryDetails, UserAttributeKey } from "@aws-amplify/auth";
2
+ import type { AuthVerifiableAttributeKey } from "@aws-amplify/core/internals/utils";
3
+ import type { AuthEvent, AuthEventData, AuthMFAType, ResetPasswordStep, SignInStep, SignUpStep, Step, UnverifiedUserAttributes } from "./types.mjs";
4
+ type ActionParams<Context = unknown> = {
5
+ context: Context;
6
+ event: AuthEvent;
7
+ };
8
+ declare const setTotpSecretCode: ({ event }: ActionParams) => string | undefined;
9
+ declare const setAllowedMfaTypes: ({ event }: ActionParams) => AuthMFAType[] | undefined;
10
+ declare const setSignInStep: Step;
11
+ declare const setShouldVerifyUserAttributeStep: Step;
12
+ declare const setConfirmAttributeCompleteStep: Step;
13
+ declare const setConfirmSignUpStep: Step;
14
+ declare const setNextSignInStep: ({ event }: ActionParams) => SignInStep;
15
+ declare const setNextSignUpStep: ({ event }: ActionParams) => SignUpStep;
16
+ declare const setNextResetPasswordStep: ({ event }: ActionParams) => ResetPasswordStep;
17
+ declare const setMissingAttributes: ({ event }: ActionParams) => string | undefined;
18
+ declare const setRemoteError: ({ event }: ActionParams) => string;
19
+ declare const setUsername: ({ event }: ActionParams) => string | undefined;
20
+ declare const setUser: ({ event }: ActionParams) => AuthEventData | undefined;
21
+ declare const setCodeDeliveryDetails: ({ event }: ActionParams) => CodeDeliveryDetails<UserAttributeKey>;
22
+ declare const setUnverifiedUserAttributes: ({ event }: ActionParams) => UnverifiedUserAttributes;
23
+ declare const setSelectedUserAttribute: ({ event }: ActionParams) => AuthVerifiableAttributeKey | undefined;
24
+ export { setAllowedMfaTypes, setCodeDeliveryDetails, setMissingAttributes, setNextResetPasswordStep, setNextSignInStep, setNextSignUpStep, setRemoteError, setConfirmAttributeCompleteStep, setShouldVerifyUserAttributeStep, setSelectedUserAttribute, setSignInStep, setConfirmSignUpStep, setTotpSecretCode, setUsername, setUser, setUnverifiedUserAttributes };
@@ -0,0 +1,2 @@
1
+ import type { Handlers } from "./types.mjs";
2
+ export declare const defaultHandlers: Handlers;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,22 @@
1
+ import type { AuthEvent, ResetPasswordContext, Step } from "./types.mjs";
2
+ export declare const shouldConfirmSignInWithNewPassword: (event: AuthEvent) => boolean;
3
+ export declare const shouldResetPasswordFromSignIn: (event: AuthEvent) => boolean;
4
+ export declare const shouldConfirmSignUpFromSignIn: (event: AuthEvent) => boolean;
5
+ export declare const shouldAutoSignIn: (event: AuthEvent) => boolean;
6
+ export declare const hasCompletedSignIn: (event: AuthEvent) => boolean;
7
+ export declare const hasCompletedSignUp: (event: AuthEvent) => boolean;
8
+ export declare const hasCompletedResetPassword: (event: AuthEvent) => boolean;
9
+ export declare const hasCompletedAttributeConfirmation: (step: Step) => boolean;
10
+ export declare const isConfirmUserAttributeStep: (step: Step) => boolean;
11
+ export declare const isShouldConfirmUserAttributeStep: (step: Step) => boolean;
12
+ export declare const isResetPasswordStep: (step: Step) => boolean;
13
+ export declare const isConfirmSignUpStep: (step: Step) => boolean;
14
+ export declare const isShouldConfirmSignInWithNewPassword: (step: Step) => boolean;
15
+ export declare const shouldConfirmSignIn: (step: Step) => boolean;
16
+ export declare const shouldSetupTotp: (step: Step) => boolean;
17
+ export declare const shouldSetupEmail: (step: Step) => boolean;
18
+ export declare const shouldSelectMfaType: (step: Step) => boolean;
19
+ export declare const shouldResetPassword: (context: ResetPasswordContext, event: AuthEvent) => boolean;
20
+ export declare const shouldConfirmResetPassword: (context: ResetPasswordContext, event: AuthEvent) => boolean;
21
+ export declare const shouldVerifyAttribute: (event: AuthEvent) => boolean;
22
+ export declare const isUserAlreadyConfirmed: (event: AuthEvent) => boolean;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,88 @@
1
+ import type { AuthUser, ConfirmResetPasswordInput, ConfirmSignInInput, ConfirmSignInOutput, ConfirmSignUpInput, ConfirmSignUpOutput, ConfirmUserAttributeInput, FetchUserAttributesOutput, ResendSignUpCodeInput, ResendSignUpCodeOutput, ResetPasswordInput, ResetPasswordOutput, SendUserAttributeVerificationCodeInput, SendUserAttributeVerificationCodeOutput, SignInInput, SignInOutput, SignUpInput, SignUpOutput, UserAttributeKey } from "@aws-amplify/auth";
2
+ import type { AuthSignInWithRedirectInput, AuthSignOutInput } from "node_modules/@aws-amplify/auth/dist/esm/types";
3
+ import type { AuthCodeDeliveryDetails, AutoSignInCallback } from "node_modules/@aws-amplify/auth/dist/esm/types/models";
4
+ export type AuthMFAType = "SMS" | "TOTP" | "EMAIL";
5
+ /**
6
+ * Authenticator routes that can be directly navigated to by user interaction.
7
+ */
8
+ export type NavigableRoute = "signIn" | "signUp" | "forgotPassword" | "signOut";
9
+ export type InitialRoute = "signIn" | "signUp" | "forgotPassword";
10
+ export type AuthTOTPSetupDetails = {
11
+ sharedSecret: string;
12
+ getSetupUri: (appName: string, accountName?: string) => URL;
13
+ };
14
+ export 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";
15
+ export type AuthEventData = Record<PropertyKey, any>;
16
+ export type AuthEvent = {
17
+ type: AuthEventTypes;
18
+ data?: AuthEventData;
19
+ input?: ActorDoneData;
20
+ output?: AuthEventData;
21
+ error?: Error;
22
+ actorId?: string;
23
+ };
24
+ export type ActorDoneData = {
25
+ codeDeliveryDetails?: AuthCodeDeliveryDetails<UserAttributeKey>;
26
+ missingAttributes?: string[];
27
+ remoteError?: string;
28
+ step: Step;
29
+ totpSecretCode?: string;
30
+ username?: string;
31
+ unverifiedUserAttributes?: UnverifiedUserAttributes;
32
+ allowedMfaTypes?: AuthMFAType[];
33
+ };
34
+ export type AuthContext = {
35
+ user?: AuthUser;
36
+ config?: {
37
+ initialState?: "signIn" | "signUp" | "forgotPassword";
38
+ };
39
+ actorDoneData?: ActorDoneData;
40
+ };
41
+ export type InitialStep = "FORGOT_PASSWORD" | "SIGN_IN" | "SIGN_UP";
42
+ export 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";
43
+ export type ResetPasswordStep = "CONFIRM_RESET_PASSWORD_WITH_CODE" | "RESET_PASSWORD_COMPLETE";
44
+ export type SignUpStep = "CONFIRM_SIGN_UP" | "COMPLETE_AUTO_SIGN_IN" | "SIGN_UP_COMPLETE";
45
+ export type UserAttributeStep = "SHOULD_CONFIRM_USER_ATTRIBUTE" | "CONFIRM_ATTRIBUTE_WITH_CODE" | "CONFIRM_ATTRIBUTE_COMPLETE";
46
+ export type Step = InitialStep | SignInStep | SignUpStep | ResetPasswordStep | UserAttributeStep;
47
+ type BaseContext = {
48
+ missingAttributes?: string[];
49
+ remoteError?: string;
50
+ step: Step;
51
+ totpSecretCode?: string;
52
+ unverifiedUserAttributes?: UnverifiedUserAttributes;
53
+ allowedMfaTypes?: AuthMFAType[];
54
+ username?: string;
55
+ selectedUserAttribute?: string;
56
+ user?: AuthUser;
57
+ };
58
+ export type ResetPasswordContext = BaseContext & ActorDoneData;
59
+ export type SignInContext = BaseContext & ActorDoneData;
60
+ export type SignUpContext = BaseContext & ActorDoneData;
61
+ export type VerifyUserContext = BaseContext & ActorDoneData;
62
+ export type SignOutContext = Pick<BaseContext, "user">;
63
+ export type AuthActorContext = SignInContext | SignUpContext | ResetPasswordContext;
64
+ export type Handlers = {
65
+ getCurrentUser: () => Promise<AuthUser>;
66
+ fetchUserAttributes: () => Promise<FetchUserAttributesOutput>;
67
+ signIn: (input: SignInInput) => Promise<SignInOutput>;
68
+ signInWithRedirect: (input?: AuthSignInWithRedirectInput) => Promise<void>;
69
+ signUp: (input: SignUpInput) => Promise<SignUpOutput>;
70
+ signOut: (input?: AuthSignOutInput) => Promise<void>;
71
+ autoSignIn: AutoSignInCallback;
72
+ confirmSignIn: (input: ConfirmSignInInput) => Promise<ConfirmSignInOutput>;
73
+ confirmSignUp: (input: ConfirmSignUpInput) => Promise<ConfirmSignUpOutput>;
74
+ confirmResetPassword: (input: ConfirmResetPasswordInput) => Promise<void>;
75
+ confirmUserAttribute: (input: ConfirmUserAttributeInput) => Promise<void>;
76
+ resetPassword: (input: ResetPasswordInput) => Promise<ResetPasswordOutput>;
77
+ resendSignUpCode: (input: ResendSignUpCodeInput) => Promise<ResendSignUpCodeOutput>;
78
+ sendUserAttributeVerificationCode: (input: SendUserAttributeVerificationCodeInput) => Promise<SendUserAttributeVerificationCodeOutput>;
79
+ };
80
+ export type UnverifiedUserAttributes = {
81
+ email?: string;
82
+ phone_number?: string;
83
+ };
84
+ export type AuthError = Error & {
85
+ __type: string;
86
+ message?: string;
87
+ };
88
+ export {};
@@ -0,0 +1 @@
1
+ export {};