@digitaldefiance/express-suite-react-components 5.0.3 → 5.0.5
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/package.json +1 -1
- package/src/contexts/AuthProvider.d.ts +4 -171
- package/src/contexts/AuthProvider.d.ts.map +1 -1
- package/src/contexts/AuthProvider.js +6 -7
- package/src/contexts/MenuContext.d.ts.map +1 -1
- package/src/contexts/MenuContext.js +22 -10
- package/src/contexts/auth-context.d.ts +172 -0
- package/src/contexts/auth-context.d.ts.map +1 -0
- package/src/contexts/auth-context.js +13 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@digitaldefiance/express-suite-react-components",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.5",
|
|
4
4
|
"homepage": "https://github.com/Digital-Defiance/react-components",
|
|
5
5
|
"description": "React MUI components for Digital Defiance Express Suite",
|
|
6
6
|
"repository": {
|
|
@@ -1,173 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { IConstants, IRequestUserDTO, ISuccessMessage, IUserSettings } from '@digitaldefiance/suite-core-lib';
|
|
4
|
-
import { Wallet } from '@ethereumjs/wallet';
|
|
5
|
-
import { PaletteMode } from '@mui/material';
|
|
1
|
+
import { IECIESConfig } from '@digitaldefiance/ecies-lib';
|
|
2
|
+
import { IConstants } from '@digitaldefiance/suite-core-lib';
|
|
6
3
|
import { ReactNode } from 'react';
|
|
7
|
-
export
|
|
8
|
-
|
|
9
|
-
* True if the user has a global admin role
|
|
10
|
-
*/
|
|
11
|
-
admin: boolean;
|
|
12
|
-
/**
|
|
13
|
-
* Counter that increments on login/logout to trigger effects in dependent components
|
|
14
|
-
*/
|
|
15
|
-
authState: number;
|
|
16
|
-
/**
|
|
17
|
-
* Performs a server side backup-code login
|
|
18
|
-
* @param identifier
|
|
19
|
-
* @param code
|
|
20
|
-
* @param isEmail
|
|
21
|
-
* @param recoverMnemonic
|
|
22
|
-
* @param newPassword
|
|
23
|
-
* @returns
|
|
24
|
-
*/
|
|
25
|
-
backupCodeLogin: (identifier: string, code: string, isEmail: boolean, recoverMnemonic: boolean, newPassword?: string) => Promise<{
|
|
26
|
-
token: string;
|
|
27
|
-
codeCount: number;
|
|
28
|
-
mnemonic?: string;
|
|
29
|
-
message?: string;
|
|
30
|
-
} | {
|
|
31
|
-
error: string;
|
|
32
|
-
status?: number;
|
|
33
|
-
}>;
|
|
34
|
-
/**
|
|
35
|
-
* Verifies the stored token (if any) and updates auth state
|
|
36
|
-
* @returns void
|
|
37
|
-
*/
|
|
38
|
-
checkAuth: () => void;
|
|
39
|
-
/**
|
|
40
|
-
* Changes the stored browser password login mnemonic
|
|
41
|
-
* @param currentPassword
|
|
42
|
-
* @param newPassword
|
|
43
|
-
* @returns
|
|
44
|
-
*/
|
|
45
|
-
changePassword: (currentPassword: string, newPassword: string) => Promise<ISuccessMessage | {
|
|
46
|
-
error: string;
|
|
47
|
-
errorType?: string | undefined;
|
|
48
|
-
}>;
|
|
49
|
-
clearMnemonic: () => void;
|
|
50
|
-
clearWallet: () => void;
|
|
51
|
-
colorMode?: PaletteMode;
|
|
52
|
-
currencyCode?: CurrencyCode;
|
|
53
|
-
directLogin: (mnemonic: SecureString, username?: string, email?: EmailString, expireMnemonicSeconds?: number, expireWalletSeconds?: number) => Promise<{
|
|
54
|
-
token: string;
|
|
55
|
-
user: IRequestUserDTO;
|
|
56
|
-
wallet: Wallet;
|
|
57
|
-
} | {
|
|
58
|
-
pendingTotpToken: string;
|
|
59
|
-
} | {
|
|
60
|
-
error: string;
|
|
61
|
-
errorType?: string;
|
|
62
|
-
}>;
|
|
63
|
-
emailChallengeLogin: (mnemonic: SecureString, token: string, username?: string, email?: EmailString, expireMnemonicSeconds?: number, expireWalletSeconds?: number) => Promise<{
|
|
64
|
-
token: string;
|
|
65
|
-
user: IRequestUserDTO;
|
|
66
|
-
wallet: Wallet;
|
|
67
|
-
message: string;
|
|
68
|
-
} | {
|
|
69
|
-
pendingTotpToken: string;
|
|
70
|
-
} | {
|
|
71
|
-
error: string;
|
|
72
|
-
errorType?: string;
|
|
73
|
-
}>;
|
|
74
|
-
isAuthenticated: boolean;
|
|
75
|
-
isCheckingAuth: boolean;
|
|
76
|
-
isBrowserPasswordLoginAvailable?: () => boolean;
|
|
77
|
-
loading: boolean;
|
|
78
|
-
logout: () => void;
|
|
79
|
-
mnemonic?: SecureString;
|
|
80
|
-
mnemonicExpirationSeconds: number;
|
|
81
|
-
passwordLogin: (password: SecureString, username?: string, email?: EmailString) => Promise<{
|
|
82
|
-
token: string;
|
|
83
|
-
user: IRequestUserDTO;
|
|
84
|
-
wallet: Wallet;
|
|
85
|
-
} | {
|
|
86
|
-
pendingTotpToken: string;
|
|
87
|
-
} | {
|
|
88
|
-
error: string;
|
|
89
|
-
errorType?: string;
|
|
90
|
-
}>;
|
|
91
|
-
requestEmailLogin: (username?: string, email?: EmailString) => Promise<string | {
|
|
92
|
-
error: string;
|
|
93
|
-
errorType?: string;
|
|
94
|
-
}>;
|
|
95
|
-
refreshToken: () => Promise<{
|
|
96
|
-
token: string;
|
|
97
|
-
user: IRequestUserDTO;
|
|
98
|
-
}>;
|
|
99
|
-
register: (username: string, email: string, timezone: string, password?: string, mnemonic?: string, displayName?: string, directChallenge?: boolean) => Promise<{
|
|
100
|
-
success: boolean;
|
|
101
|
-
message: string;
|
|
102
|
-
mnemonic: string;
|
|
103
|
-
} | {
|
|
104
|
-
error: string;
|
|
105
|
-
errorType?: string;
|
|
106
|
-
field?: string;
|
|
107
|
-
errors?: Array<{
|
|
108
|
-
path: string;
|
|
109
|
-
msg: string;
|
|
110
|
-
}>;
|
|
111
|
-
}>;
|
|
112
|
-
serverPublicKey: string | null;
|
|
113
|
-
/**
|
|
114
|
-
* Gets the remaining time in seconds for the mnemonic expiration
|
|
115
|
-
* @returns Number of seconds remaining, or 0 if no mnemonic is set
|
|
116
|
-
*/
|
|
117
|
-
getMnemonicRemainingTime: () => number;
|
|
118
|
-
/**
|
|
119
|
-
* Gets the remaining time in seconds for the wallet expiration
|
|
120
|
-
* @returns Number of seconds remaining, or 0 if no wallet is set
|
|
121
|
-
*/
|
|
122
|
-
getWalletRemainingTime: () => number;
|
|
123
|
-
setMnemonic: (mnemonic: SecureString, durationSeconds?: number) => void;
|
|
124
|
-
setMnemonicExpirationSeconds: (seconds: number) => void;
|
|
125
|
-
setWalletExpirationSeconds: (seconds: number) => void;
|
|
126
|
-
setUpBrowserPasswordLogin: (mnemonic: SecureString, password: SecureString, username?: string, email?: EmailString) => Promise<{
|
|
127
|
-
success: boolean;
|
|
128
|
-
message: string;
|
|
129
|
-
} | {
|
|
130
|
-
error: string;
|
|
131
|
-
errorType?: string;
|
|
132
|
-
}>;
|
|
133
|
-
setUser: (user: IRequestUserDTO | null) => Promise<void>;
|
|
134
|
-
setUserSetting: (setting?: Partial<IUserSettings>) => Promise<void>;
|
|
135
|
-
setWallet: (wallet: Wallet, durationSeconds?: number) => void;
|
|
136
|
-
user: FrontendMember | null;
|
|
137
|
-
userData: IRequestUserDTO | null;
|
|
138
|
-
userSettings: IUserSettings | undefined;
|
|
139
|
-
token: string | null;
|
|
140
|
-
wallet?: Wallet;
|
|
141
|
-
walletExpirationSeconds: number;
|
|
142
|
-
verifyToken: (token: string) => Promise<boolean>;
|
|
143
|
-
/**
|
|
144
|
-
* Initiates TOTP setup for the authenticated user.
|
|
145
|
-
* Returns the provisioning URI and raw base32 secret on success.
|
|
146
|
-
*/
|
|
147
|
-
setupTotp: () => Promise<{
|
|
148
|
-
provisioningUri: string;
|
|
149
|
-
secret: string;
|
|
150
|
-
} | {
|
|
151
|
-
error: string;
|
|
152
|
-
}>;
|
|
153
|
-
/**
|
|
154
|
-
* Confirms TOTP setup with a 6-digit code.
|
|
155
|
-
*/
|
|
156
|
-
confirmTotp: (code: string) => Promise<{
|
|
157
|
-
success: boolean;
|
|
158
|
-
} | {
|
|
159
|
-
error: string;
|
|
160
|
-
}>;
|
|
161
|
-
/**
|
|
162
|
-
* Completes TOTP login by verifying a 6-digit code against a pending TOTP token.
|
|
163
|
-
*/
|
|
164
|
-
verifyTotpLogin: (pendingTotpToken: string, code: string) => Promise<{
|
|
165
|
-
token: string;
|
|
166
|
-
user: IRequestUserDTO;
|
|
167
|
-
} | {
|
|
168
|
-
error: string;
|
|
169
|
-
}>;
|
|
170
|
-
}
|
|
4
|
+
export { AuthContext, useAuth } from './auth-context';
|
|
5
|
+
export type { AuthContextData } from './auth-context';
|
|
171
6
|
export type AuthProviderProps = {
|
|
172
7
|
children: ReactNode;
|
|
173
8
|
baseUrl: string;
|
|
@@ -180,7 +15,5 @@ export type AuthProviderProps = {
|
|
|
180
15
|
onLogout?: () => void;
|
|
181
16
|
emailDomain: string;
|
|
182
17
|
};
|
|
183
|
-
export declare const AuthContext: import("react").Context<AuthContextData>;
|
|
184
18
|
export declare const AuthProvider: ({ children, baseUrl, constants, eciesConfig, onLogout, emailDomain, }: AuthProviderProps) => import("react").JSX.Element;
|
|
185
|
-
export declare const useAuth: () => AuthContextData;
|
|
186
19
|
//# sourceMappingURL=AuthProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthProvider.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/contexts/AuthProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"AuthProvider.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/contexts/AuthProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,YAAY,EAIb,MAAM,4BAA4B,CAAC;AAMpC,OAAO,EACL,UAAU,EAMX,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,SAAS,EAKV,MAAM,OAAO,CAAC;AAGf,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAUtD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,UAAU,CAAC;IACtB,WAAW,EAAE,YAAY,CAAC;IAC1B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAitBF,eAAO,MAAM,YAAY,GAAI,uEAO1B,iBAAiB,gCAYnB,CAAC"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.AuthProvider = exports.useAuth = exports.AuthContext = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const ecies_lib_1 = require("@digitaldefiance/ecies-lib");
|
|
6
6
|
const i18n_lib_1 = require("@digitaldefiance/i18n-lib");
|
|
7
7
|
const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
|
|
8
8
|
const react_1 = require("react");
|
|
9
|
+
const auth_context_1 = require("./auth-context");
|
|
10
|
+
var auth_context_2 = require("./auth-context");
|
|
11
|
+
Object.defineProperty(exports, "AuthContext", { enumerable: true, get: function () { return auth_context_2.AuthContext; } });
|
|
12
|
+
Object.defineProperty(exports, "useAuth", { enumerable: true, get: function () { return auth_context_2.useAuth; } });
|
|
9
13
|
const useExpiringValue_1 = require("../hooks/useExpiringValue");
|
|
10
14
|
const useLocalStorage_1 = require("../hooks/useLocalStorage");
|
|
11
15
|
const useUserSettings_1 = require("../hooks/useUserSettings");
|
|
@@ -13,7 +17,6 @@ const authService_1 = require("../services/authService");
|
|
|
13
17
|
const authenticatedApi_1 = require("../services/authenticatedApi");
|
|
14
18
|
const I18nProvider_1 = require("./I18nProvider");
|
|
15
19
|
const ThemeProvider_1 = require("./ThemeProvider");
|
|
16
|
-
exports.AuthContext = (0, react_1.createContext)({});
|
|
17
20
|
const AuthProviderInner = ({ children, baseUrl, constants, eciesConfig, onLogout, emailDomain, }) => {
|
|
18
21
|
const { tComponent, changeLanguage: i18nChangeLanguage } = (0, I18nProvider_1.useI18n)();
|
|
19
22
|
const { setColorMode: themeSetPaletteMode, mode: colorMode } = (0, ThemeProvider_1.useTheme)();
|
|
@@ -503,13 +506,9 @@ const AuthProviderInner = ({ children, baseUrl, constants, eciesConfig, onLogout
|
|
|
503
506
|
walletManager.value,
|
|
504
507
|
walletExpirationSeconds,
|
|
505
508
|
]);
|
|
506
|
-
return ((0, jsx_runtime_1.jsx)(
|
|
509
|
+
return ((0, jsx_runtime_1.jsx)(auth_context_1.AuthContext.Provider, { value: contextValue, children: children }));
|
|
507
510
|
};
|
|
508
511
|
const AuthProvider = ({ children, baseUrl, constants, eciesConfig, onLogout, emailDomain, }) => {
|
|
509
512
|
return ((0, jsx_runtime_1.jsx)(AuthProviderInner, { baseUrl: baseUrl, constants: constants, eciesConfig: eciesConfig, onLogout: onLogout, emailDomain: emailDomain, children: children }));
|
|
510
513
|
};
|
|
511
514
|
exports.AuthProvider = AuthProvider;
|
|
512
|
-
const useAuth = () => {
|
|
513
|
-
return (0, react_1.useContext)(exports.AuthContext);
|
|
514
|
-
};
|
|
515
|
-
exports.useAuth = useAuth;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuContext.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/contexts/MenuContext.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MenuContext.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/contexts/MenuContext.tsx"],"names":[],"mappings":"AAsBA,OAAO,EACL,EAAE,EACF,SAAS,EAQV,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAa,MAAM,mBAAmB,CAAC;AAMxD,UAAU,iBAAiB;IACzB,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC;IAC5B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,UAAU,eAAe;IACvB,WAAW,EAAE,WAAW,EAAE,CAAC;IAC3B,cAAc,EAAE,CACd,QAAQ,EAAE,QAAQ,EAClB,eAAe,EAAE,OAAO,KACrB,WAAW,EAAE,CAAC;IACnB,kBAAkB,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,MAAM,IAAI,CAAC;IACxD,mBAAmB,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,MAAM,IAAI,CAAC;IAC5D,WAAW,EAAE,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC;CACvC;AAID,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAuW9C,CAAC;AAEF,eAAO,MAAM,OAAO,QAAO,eAM1B,CAAC"}
|
|
@@ -6,26 +6,38 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
6
6
|
const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
|
|
7
7
|
const icons_material_1 = require("@mui/icons-material");
|
|
8
8
|
const react_1 = require("react");
|
|
9
|
-
const hooks_1 = require("../hooks");
|
|
10
|
-
const services_1 = require("../services");
|
|
11
9
|
const MenuType_1 = require("../types/MenuType");
|
|
12
|
-
const
|
|
10
|
+
const auth_context_1 = require("./auth-context");
|
|
13
11
|
const I18nProvider_1 = require("./I18nProvider");
|
|
14
12
|
const SuiteConfigProvider_1 = require("./SuiteConfigProvider");
|
|
15
13
|
const ThemeProvider_1 = require("./ThemeProvider");
|
|
16
14
|
const MenuContext = (0, react_1.createContext)(undefined);
|
|
17
15
|
const MenuProvider = ({ children, menuConfigs = [], enableBackupCodes = true, hiddenMenuIds = [], }) => {
|
|
18
|
-
const { userData: user, isAuthenticated, admin: isGlobalAdmin, mnemonic, clearMnemonic, wallet, clearWallet, } = (0,
|
|
19
|
-
const { mode: colorMode } = (0, ThemeProvider_1.useTheme)();
|
|
16
|
+
const { userData: user, isAuthenticated, admin: isGlobalAdmin, mnemonic, clearMnemonic, wallet, clearWallet, } = (0, auth_context_1.useAuth)();
|
|
17
|
+
const { mode: colorMode, toggleColorMode: themeToggle } = (0, ThemeProvider_1.useTheme)();
|
|
20
18
|
const registeredMenuOptions = (0, react_1.useRef)(new Set());
|
|
21
19
|
const [registeredOptions, setRegisteredOptions] = (0, react_1.useState)(new Map());
|
|
22
20
|
const { tComponent } = (0, I18nProvider_1.useI18n)();
|
|
23
21
|
const { baseUrl } = (0, SuiteConfigProvider_1.useSuiteConfig)();
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
22
|
+
// Flip the theme immediately with the crypto-free ThemeProvider toggle, then persist the choice to the server as a
|
|
23
|
+
// best-effort side effect. The persistence path (which pulls ecies-lib + axios) is loaded lazily via dynamic import
|
|
24
|
+
// ONLY when an authenticated user toggles, so it stays out of the static bundle for consumers that only use the menu.
|
|
25
|
+
const toggleColorMode = (0, react_1.useCallback)(() => {
|
|
26
|
+
const next = colorMode === 'dark' ? 'light' : 'dark';
|
|
27
|
+
themeToggle();
|
|
28
|
+
if (!isAuthenticated)
|
|
29
|
+
return;
|
|
30
|
+
void (async () => {
|
|
31
|
+
try {
|
|
32
|
+
const { createAuthenticatedApiClient } = await import('../services/index.js');
|
|
33
|
+
const api = createAuthenticatedApiClient(baseUrl);
|
|
34
|
+
await api.post('/user/settings', (0, suite_core_lib_1.dehydrateUserSettings)({ darkMode: next === 'dark' }));
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// Best-effort: the theme already flipped; a failed persist just means it is not remembered server-side.
|
|
38
|
+
}
|
|
39
|
+
})();
|
|
40
|
+
}, [colorMode, themeToggle, isAuthenticated, baseUrl]);
|
|
29
41
|
const registerMenuOption = (0, react_1.useCallback)((option) => {
|
|
30
42
|
const unregister = () => {
|
|
31
43
|
setRegisteredOptions((prev) => {
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import type { EmailString, Member as FrontendMember, SecureString } from '@digitaldefiance/ecies-lib';
|
|
2
|
+
import type { CurrencyCode } from '@digitaldefiance/i18n-lib';
|
|
3
|
+
import type { IRequestUserDTO, ISuccessMessage, IUserSettings } from '@digitaldefiance/suite-core-lib';
|
|
4
|
+
import type { Wallet } from '@ethereumjs/wallet';
|
|
5
|
+
import type { PaletteMode } from '@mui/material';
|
|
6
|
+
export interface AuthContextData {
|
|
7
|
+
/**
|
|
8
|
+
* True if the user has a global admin role
|
|
9
|
+
*/
|
|
10
|
+
admin: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Counter that increments on login/logout to trigger effects in dependent components
|
|
13
|
+
*/
|
|
14
|
+
authState: number;
|
|
15
|
+
/**
|
|
16
|
+
* Performs a server side backup-code login
|
|
17
|
+
* @param identifier
|
|
18
|
+
* @param code
|
|
19
|
+
* @param isEmail
|
|
20
|
+
* @param recoverMnemonic
|
|
21
|
+
* @param newPassword
|
|
22
|
+
* @returns
|
|
23
|
+
*/
|
|
24
|
+
backupCodeLogin: (identifier: string, code: string, isEmail: boolean, recoverMnemonic: boolean, newPassword?: string) => Promise<{
|
|
25
|
+
token: string;
|
|
26
|
+
codeCount: number;
|
|
27
|
+
mnemonic?: string;
|
|
28
|
+
message?: string;
|
|
29
|
+
} | {
|
|
30
|
+
error: string;
|
|
31
|
+
status?: number;
|
|
32
|
+
}>;
|
|
33
|
+
/**
|
|
34
|
+
* Verifies the stored token (if any) and updates auth state
|
|
35
|
+
* @returns void
|
|
36
|
+
*/
|
|
37
|
+
checkAuth: () => void;
|
|
38
|
+
/**
|
|
39
|
+
* Changes the stored browser password login mnemonic
|
|
40
|
+
* @param currentPassword
|
|
41
|
+
* @param newPassword
|
|
42
|
+
* @returns
|
|
43
|
+
*/
|
|
44
|
+
changePassword: (currentPassword: string, newPassword: string) => Promise<ISuccessMessage | {
|
|
45
|
+
error: string;
|
|
46
|
+
errorType?: string | undefined;
|
|
47
|
+
}>;
|
|
48
|
+
clearMnemonic: () => void;
|
|
49
|
+
clearWallet: () => void;
|
|
50
|
+
colorMode?: PaletteMode;
|
|
51
|
+
currencyCode?: CurrencyCode;
|
|
52
|
+
directLogin: (mnemonic: SecureString, username?: string, email?: EmailString, expireMnemonicSeconds?: number, expireWalletSeconds?: number) => Promise<{
|
|
53
|
+
token: string;
|
|
54
|
+
user: IRequestUserDTO;
|
|
55
|
+
wallet: Wallet;
|
|
56
|
+
} | {
|
|
57
|
+
pendingTotpToken: string;
|
|
58
|
+
} | {
|
|
59
|
+
error: string;
|
|
60
|
+
errorType?: string;
|
|
61
|
+
}>;
|
|
62
|
+
emailChallengeLogin: (mnemonic: SecureString, token: string, username?: string, email?: EmailString, expireMnemonicSeconds?: number, expireWalletSeconds?: number) => Promise<{
|
|
63
|
+
token: string;
|
|
64
|
+
user: IRequestUserDTO;
|
|
65
|
+
wallet: Wallet;
|
|
66
|
+
message: string;
|
|
67
|
+
} | {
|
|
68
|
+
pendingTotpToken: string;
|
|
69
|
+
} | {
|
|
70
|
+
error: string;
|
|
71
|
+
errorType?: string;
|
|
72
|
+
}>;
|
|
73
|
+
isAuthenticated: boolean;
|
|
74
|
+
isCheckingAuth: boolean;
|
|
75
|
+
isBrowserPasswordLoginAvailable?: () => boolean;
|
|
76
|
+
loading: boolean;
|
|
77
|
+
logout: () => void;
|
|
78
|
+
mnemonic?: SecureString;
|
|
79
|
+
mnemonicExpirationSeconds: number;
|
|
80
|
+
passwordLogin: (password: SecureString, username?: string, email?: EmailString) => Promise<{
|
|
81
|
+
token: string;
|
|
82
|
+
user: IRequestUserDTO;
|
|
83
|
+
wallet: Wallet;
|
|
84
|
+
} | {
|
|
85
|
+
pendingTotpToken: string;
|
|
86
|
+
} | {
|
|
87
|
+
error: string;
|
|
88
|
+
errorType?: string;
|
|
89
|
+
}>;
|
|
90
|
+
requestEmailLogin: (username?: string, email?: EmailString) => Promise<string | {
|
|
91
|
+
error: string;
|
|
92
|
+
errorType?: string;
|
|
93
|
+
}>;
|
|
94
|
+
refreshToken: () => Promise<{
|
|
95
|
+
token: string;
|
|
96
|
+
user: IRequestUserDTO;
|
|
97
|
+
}>;
|
|
98
|
+
register: (username: string, email: string, timezone: string, password?: string, mnemonic?: string, displayName?: string, directChallenge?: boolean) => Promise<{
|
|
99
|
+
success: boolean;
|
|
100
|
+
message: string;
|
|
101
|
+
mnemonic: string;
|
|
102
|
+
} | {
|
|
103
|
+
error: string;
|
|
104
|
+
errorType?: string;
|
|
105
|
+
field?: string;
|
|
106
|
+
errors?: Array<{
|
|
107
|
+
path: string;
|
|
108
|
+
msg: string;
|
|
109
|
+
}>;
|
|
110
|
+
}>;
|
|
111
|
+
serverPublicKey: string | null;
|
|
112
|
+
/**
|
|
113
|
+
* Gets the remaining time in seconds for the mnemonic expiration
|
|
114
|
+
* @returns Number of seconds remaining, or 0 if no mnemonic is set
|
|
115
|
+
*/
|
|
116
|
+
getMnemonicRemainingTime: () => number;
|
|
117
|
+
/**
|
|
118
|
+
* Gets the remaining time in seconds for the wallet expiration
|
|
119
|
+
* @returns Number of seconds remaining, or 0 if no wallet is set
|
|
120
|
+
*/
|
|
121
|
+
getWalletRemainingTime: () => number;
|
|
122
|
+
setMnemonic: (mnemonic: SecureString, durationSeconds?: number) => void;
|
|
123
|
+
setMnemonicExpirationSeconds: (seconds: number) => void;
|
|
124
|
+
setWalletExpirationSeconds: (seconds: number) => void;
|
|
125
|
+
setUpBrowserPasswordLogin: (mnemonic: SecureString, password: SecureString, username?: string, email?: EmailString) => Promise<{
|
|
126
|
+
success: boolean;
|
|
127
|
+
message: string;
|
|
128
|
+
} | {
|
|
129
|
+
error: string;
|
|
130
|
+
errorType?: string;
|
|
131
|
+
}>;
|
|
132
|
+
setUser: (user: IRequestUserDTO | null) => Promise<void>;
|
|
133
|
+
setUserSetting: (setting?: Partial<IUserSettings>) => Promise<void>;
|
|
134
|
+
setWallet: (wallet: Wallet, durationSeconds?: number) => void;
|
|
135
|
+
user: FrontendMember | null;
|
|
136
|
+
userData: IRequestUserDTO | null;
|
|
137
|
+
userSettings: IUserSettings | undefined;
|
|
138
|
+
token: string | null;
|
|
139
|
+
wallet?: Wallet;
|
|
140
|
+
walletExpirationSeconds: number;
|
|
141
|
+
verifyToken: (token: string) => Promise<boolean>;
|
|
142
|
+
/**
|
|
143
|
+
* Initiates TOTP setup for the authenticated user.
|
|
144
|
+
* Returns the provisioning URI and raw base32 secret on success.
|
|
145
|
+
*/
|
|
146
|
+
setupTotp: () => Promise<{
|
|
147
|
+
provisioningUri: string;
|
|
148
|
+
secret: string;
|
|
149
|
+
} | {
|
|
150
|
+
error: string;
|
|
151
|
+
}>;
|
|
152
|
+
/**
|
|
153
|
+
* Confirms TOTP setup with a 6-digit code.
|
|
154
|
+
*/
|
|
155
|
+
confirmTotp: (code: string) => Promise<{
|
|
156
|
+
success: boolean;
|
|
157
|
+
} | {
|
|
158
|
+
error: string;
|
|
159
|
+
}>;
|
|
160
|
+
/**
|
|
161
|
+
* Completes TOTP login by verifying a 6-digit code against a pending TOTP token.
|
|
162
|
+
*/
|
|
163
|
+
verifyTotpLogin: (pendingTotpToken: string, code: string) => Promise<{
|
|
164
|
+
token: string;
|
|
165
|
+
user: IRequestUserDTO;
|
|
166
|
+
} | {
|
|
167
|
+
error: string;
|
|
168
|
+
}>;
|
|
169
|
+
}
|
|
170
|
+
export declare const AuthContext: import("react").Context<AuthContextData>;
|
|
171
|
+
export declare const useAuth: () => AuthContextData;
|
|
172
|
+
//# sourceMappingURL=auth-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-context.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/contexts/auth-context.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useAuth = exports.AuthContext = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* The authentication context, its data shape, and the `useAuth` hook, split out of AuthProvider so consumers that only
|
|
6
|
+
* read auth state (e.g. the menu components) need not pull AuthProvider's runtime crypto/HTTP stack (ecies-lib,
|
|
7
|
+
* @ethereumjs/wallet, axios) into their bundle. The crypto/suite symbols are imported as TYPES only, so they are erased
|
|
8
|
+
* at build time and add no runtime weight. AuthProvider re-exports these, so the public API is unchanged.
|
|
9
|
+
*/
|
|
10
|
+
const react_1 = require("react");
|
|
11
|
+
exports.AuthContext = (0, react_1.createContext)({});
|
|
12
|
+
const useAuth = () => (0, react_1.useContext)(exports.AuthContext);
|
|
13
|
+
exports.useAuth = useAuth;
|