@digitaldefiance/express-suite-react-components 2.9.38 → 2.9.40

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 (257) hide show
  1. package/package.json +5 -4
  2. package/src/auth/Private.d.ts +6 -0
  3. package/src/auth/Private.d.ts.map +1 -0
  4. package/src/auth/Private.js +14 -0
  5. package/src/auth/PrivateRoute.d.ts +8 -0
  6. package/src/auth/PrivateRoute.d.ts.map +1 -0
  7. package/src/auth/PrivateRoute.js +23 -0
  8. package/src/auth/UnAuth.d.ts +6 -0
  9. package/src/auth/UnAuth.d.ts.map +1 -0
  10. package/src/auth/UnAuth.js +14 -0
  11. package/src/auth/UnAuthRoute.d.ts +8 -0
  12. package/src/auth/UnAuthRoute.d.ts.map +1 -0
  13. package/src/auth/UnAuthRoute.js +22 -0
  14. package/src/auth/{index.ts → index.d.ts} +2 -1
  15. package/src/auth/index.d.ts.map +1 -0
  16. package/src/auth/index.js +10 -0
  17. package/src/components/ApiAccess.d.ts +16 -0
  18. package/src/components/ApiAccess.d.ts.map +1 -0
  19. package/src/components/ApiAccess.js +77 -0
  20. package/src/components/BackupCodeLoginForm.d.ts +43 -0
  21. package/src/components/BackupCodeLoginForm.d.ts.map +1 -0
  22. package/src/components/BackupCodeLoginForm.js +139 -0
  23. package/src/components/BackupCodesForm.d.ts +26 -0
  24. package/src/components/BackupCodesForm.d.ts.map +1 -0
  25. package/src/components/BackupCodesForm.js +120 -0
  26. package/src/components/ChangePasswordForm.d.ts +26 -0
  27. package/src/components/ChangePasswordForm.d.ts.map +1 -0
  28. package/src/components/ChangePasswordForm.js +78 -0
  29. package/src/components/ConfirmationDialog.d.ts +13 -0
  30. package/src/components/ConfirmationDialog.d.ts.map +1 -0
  31. package/src/components/ConfirmationDialog.js +10 -0
  32. package/src/components/CurrencyCodeSelector.d.ts +9 -0
  33. package/src/components/CurrencyCodeSelector.d.ts.map +1 -0
  34. package/src/components/CurrencyCodeSelector.js +31 -0
  35. package/src/components/CurrencyInput.d.ts +13 -0
  36. package/src/components/CurrencyInput.d.ts.map +1 -0
  37. package/src/components/CurrencyInput.js +22 -0
  38. package/src/components/DashboardPage.d.ts +8 -0
  39. package/src/components/DashboardPage.d.ts.map +1 -0
  40. package/src/components/DashboardPage.js +10 -0
  41. package/src/components/DropdownMenu.d.ts +9 -0
  42. package/src/components/DropdownMenu.d.ts.map +1 -0
  43. package/src/components/DropdownMenu.js +56 -0
  44. package/src/components/ExpirationSecondsSelector.d.ts +13 -0
  45. package/src/components/ExpirationSecondsSelector.d.ts.map +1 -0
  46. package/src/components/ExpirationSecondsSelector.js +32 -0
  47. package/src/components/Flag.d.ts +20 -0
  48. package/src/components/Flag.d.ts.map +1 -0
  49. package/src/components/Flag.js +43 -0
  50. package/src/components/ForgotPasswordForm.d.ts +18 -0
  51. package/src/components/ForgotPasswordForm.d.ts.map +1 -0
  52. package/src/components/ForgotPasswordForm.js +61 -0
  53. package/src/components/LoginForm.d.ts +44 -0
  54. package/src/components/LoginForm.d.ts.map +1 -0
  55. package/src/components/LoginForm.js +122 -0
  56. package/src/components/LogoutPage.d.ts +8 -0
  57. package/src/components/LogoutPage.d.ts.map +1 -0
  58. package/src/components/LogoutPage.js +16 -0
  59. package/src/components/RegisterForm.d.ts +56 -0
  60. package/src/components/RegisterForm.d.ts.map +1 -0
  61. package/src/components/RegisterForm.js +140 -0
  62. package/src/components/ResetPasswordForm.d.ts +23 -0
  63. package/src/components/ResetPasswordForm.d.ts.map +1 -0
  64. package/src/components/ResetPasswordForm.js +78 -0
  65. package/src/components/SideMenu.d.ts +8 -0
  66. package/src/components/SideMenu.d.ts.map +1 -0
  67. package/src/components/SideMenu.js +25 -0
  68. package/src/components/SideMenuListItem.d.ts +13 -0
  69. package/src/components/SideMenuListItem.d.ts.map +1 -0
  70. package/src/components/SideMenuListItem.js +44 -0
  71. package/src/components/TopMenu.d.ts +24 -0
  72. package/src/components/TopMenu.d.ts.map +1 -0
  73. package/src/components/TopMenu.js +35 -0
  74. package/src/components/TranslatedTitle.d.ts +7 -0
  75. package/src/components/TranslatedTitle.d.ts.map +1 -0
  76. package/src/components/TranslatedTitle.js +15 -0
  77. package/src/components/UserLanguageSelector.d.ts +4 -0
  78. package/src/components/UserLanguageSelector.d.ts.map +1 -0
  79. package/src/components/UserLanguageSelector.js +31 -0
  80. package/src/components/UserMenu.d.ts +4 -0
  81. package/src/components/UserMenu.d.ts.map +1 -0
  82. package/src/components/UserMenu.js +12 -0
  83. package/src/components/UserSettingsForm.d.ts +57 -0
  84. package/src/components/UserSettingsForm.d.ts.map +1 -0
  85. package/src/components/UserSettingsForm.js +126 -0
  86. package/src/components/VerifyEmailPage.d.ts +23 -0
  87. package/src/components/VerifyEmailPage.d.ts.map +1 -0
  88. package/src/components/VerifyEmailPage.js +70 -0
  89. package/src/components/{index.ts → index.d.ts} +1 -1
  90. package/src/components/index.d.ts.map +1 -0
  91. package/src/components/index.js +28 -0
  92. package/src/contexts/AuthProvider.d.ts +152 -0
  93. package/src/contexts/AuthProvider.d.ts.map +1 -0
  94. package/src/contexts/AuthProvider.js +502 -0
  95. package/src/contexts/I18nProvider.d.ts +16 -0
  96. package/src/contexts/I18nProvider.d.ts.map +1 -0
  97. package/src/contexts/I18nProvider.js +46 -0
  98. package/src/contexts/MenuContext.d.ts +20 -0
  99. package/src/contexts/MenuContext.d.ts.map +1 -0
  100. package/src/contexts/MenuContext.js +273 -0
  101. package/src/contexts/SuiteConfigProvider.d.ts +44 -0
  102. package/src/contexts/SuiteConfigProvider.d.ts.map +1 -0
  103. package/src/contexts/SuiteConfigProvider.js +43 -0
  104. package/src/contexts/ThemeProvider.d.ts +15 -0
  105. package/src/contexts/ThemeProvider.d.ts.map +1 -0
  106. package/src/contexts/ThemeProvider.js +36 -0
  107. package/src/contexts/{index.ts → index.d.ts} +1 -0
  108. package/src/contexts/index.d.ts.map +1 -0
  109. package/src/contexts/index.js +8 -0
  110. package/src/hooks/{index.ts → index.d.ts} +1 -0
  111. package/src/hooks/index.d.ts.map +1 -0
  112. package/src/hooks/index.js +8 -0
  113. package/src/hooks/useBackupCodes.d.ts +15 -0
  114. package/src/hooks/useBackupCodes.d.ts.map +1 -0
  115. package/src/hooks/useBackupCodes.js +74 -0
  116. package/src/hooks/useEmailVerification.d.ts +10 -0
  117. package/src/hooks/useEmailVerification.d.ts.map +1 -0
  118. package/src/hooks/useEmailVerification.js +40 -0
  119. package/src/hooks/useExpiringValue.d.ts +14 -0
  120. package/src/hooks/useExpiringValue.d.ts.map +1 -0
  121. package/src/hooks/useExpiringValue.js +53 -0
  122. package/src/hooks/useLocalStorage.d.ts +2 -0
  123. package/src/hooks/useLocalStorage.d.ts.map +1 -0
  124. package/src/hooks/useLocalStorage.js +15 -0
  125. package/src/hooks/useUserSettings.d.ts +48 -0
  126. package/src/hooks/useUserSettings.d.ts.map +1 -0
  127. package/src/hooks/useUserSettings.js +169 -0
  128. package/src/{index.ts → index.d.ts} +1 -1
  129. package/src/index.d.ts.map +1 -0
  130. package/src/index.js +12 -0
  131. package/src/interfaces/IAppConfig.d.ts +6 -0
  132. package/src/interfaces/IAppConfig.d.ts.map +1 -0
  133. package/src/interfaces/IAppConfig.js +2 -0
  134. package/src/interfaces/IMenuConfig.d.ts +11 -0
  135. package/src/interfaces/IMenuConfig.d.ts.map +1 -0
  136. package/src/interfaces/IMenuConfig.js +2 -0
  137. package/src/interfaces/IMenuOption.d.ts +58 -0
  138. package/src/interfaces/IMenuOption.d.ts.map +1 -0
  139. package/src/interfaces/IMenuOption.js +2 -0
  140. package/src/interfaces/index.d.ts +4 -0
  141. package/src/interfaces/index.d.ts.map +1 -0
  142. package/src/interfaces/index.js +6 -0
  143. package/src/services/__mocks__/authService.d.ts +21 -0
  144. package/src/services/__mocks__/authService.d.ts.map +1 -0
  145. package/src/services/__mocks__/authService.js +15 -0
  146. package/src/services/api.d.ts +3 -0
  147. package/src/services/api.d.ts.map +1 -0
  148. package/src/services/api.js +14 -0
  149. package/src/services/authService.d.ts +72 -0
  150. package/src/services/authService.d.ts.map +1 -0
  151. package/src/services/authService.js +335 -0
  152. package/src/services/authenticatedApi.d.ts +3 -0
  153. package/src/services/authenticatedApi.d.ts.map +1 -0
  154. package/src/services/authenticatedApi.js +18 -0
  155. package/src/services/index.d.ts +4 -0
  156. package/src/services/index.d.ts.map +1 -0
  157. package/src/services/index.js +6 -0
  158. package/src/types/MenuType.d.ts +11 -0
  159. package/src/types/MenuType.d.ts.map +1 -0
  160. package/src/types/MenuType.js +12 -0
  161. package/src/types/expirationSeconds.d.ts +3 -0
  162. package/src/types/expirationSeconds.d.ts.map +1 -0
  163. package/src/types/expirationSeconds.js +17 -0
  164. package/src/types/index.d.ts +2 -0
  165. package/src/types/index.d.ts.map +1 -0
  166. package/src/types/index.js +4 -0
  167. package/src/types/translation.d.ts +10 -0
  168. package/src/types/translation.d.ts.map +1 -0
  169. package/src/types/translation.js +9 -0
  170. package/src/wrappers/BackupCodeLoginWrapper.d.ts +8 -0
  171. package/src/wrappers/BackupCodeLoginWrapper.d.ts.map +1 -0
  172. package/src/wrappers/BackupCodeLoginWrapper.js +20 -0
  173. package/src/wrappers/BackupCodesWrapper.d.ts +7 -0
  174. package/src/wrappers/BackupCodesWrapper.d.ts.map +1 -0
  175. package/src/wrappers/BackupCodesWrapper.js +17 -0
  176. package/src/wrappers/ChangePasswordFormWrapper.d.ts +8 -0
  177. package/src/wrappers/ChangePasswordFormWrapper.d.ts.map +1 -0
  178. package/src/wrappers/ChangePasswordFormWrapper.js +21 -0
  179. package/src/wrappers/LoginFormWrapper.d.ts +9 -0
  180. package/src/wrappers/LoginFormWrapper.d.ts.map +1 -0
  181. package/src/wrappers/LoginFormWrapper.js +43 -0
  182. package/src/wrappers/LogoutPageWrapper.d.ts +9 -0
  183. package/src/wrappers/LogoutPageWrapper.d.ts.map +1 -0
  184. package/src/wrappers/LogoutPageWrapper.js +21 -0
  185. package/src/wrappers/RegisterFormWrapper.d.ts +9 -0
  186. package/src/wrappers/RegisterFormWrapper.d.ts.map +1 -0
  187. package/src/wrappers/RegisterFormWrapper.js +31 -0
  188. package/src/wrappers/UserSettingsFormWrapper.d.ts +8 -0
  189. package/src/wrappers/UserSettingsFormWrapper.d.ts.map +1 -0
  190. package/src/wrappers/UserSettingsFormWrapper.js +24 -0
  191. package/src/wrappers/VerifyEmailPageWrapper.d.ts +8 -0
  192. package/src/wrappers/VerifyEmailPageWrapper.d.ts.map +1 -0
  193. package/src/wrappers/VerifyEmailPageWrapper.js +20 -0
  194. package/src/wrappers/{index.tsx → index.d.ts} +1 -8
  195. package/src/wrappers/index.d.ts.map +1 -0
  196. package/src/wrappers/index.js +20 -0
  197. package/LICENSE +0 -21
  198. package/src/auth/Private.tsx +0 -17
  199. package/src/auth/PrivateRoute.tsx +0 -28
  200. package/src/auth/UnAuth.tsx +0 -16
  201. package/src/auth/UnAuthRoute.tsx +0 -30
  202. package/src/components/ApiAccess.tsx +0 -174
  203. package/src/components/BackupCodeLoginForm.tsx +0 -488
  204. package/src/components/BackupCodesForm.tsx +0 -286
  205. package/src/components/ChangePasswordForm.tsx +0 -272
  206. package/src/components/ConfirmationDialog.tsx +0 -48
  207. package/src/components/CurrencyCodeSelector.tsx +0 -60
  208. package/src/components/CurrencyInput.tsx +0 -80
  209. package/src/components/DashboardPage.tsx +0 -24
  210. package/src/components/DropdownMenu.tsx +0 -92
  211. package/src/components/ExpirationSecondsSelector.tsx +0 -60
  212. package/src/components/Flag.tsx +0 -52
  213. package/src/components/ForgotPasswordForm.tsx +0 -173
  214. package/src/components/LoginForm.tsx +0 -455
  215. package/src/components/LogoutPage.tsx +0 -21
  216. package/src/components/RegisterForm.tsx +0 -602
  217. package/src/components/ResetPasswordForm.tsx +0 -246
  218. package/src/components/SideMenu.tsx +0 -46
  219. package/src/components/SideMenuListItem.tsx +0 -74
  220. package/src/components/TopMenu.tsx +0 -145
  221. package/src/components/TranslatedTitle.tsx +0 -29
  222. package/src/components/UserLanguageSelector.tsx +0 -45
  223. package/src/components/UserMenu.tsx +0 -15
  224. package/src/components/UserSettingsForm.tsx +0 -505
  225. package/src/components/VerifyEmailPage.tsx +0 -184
  226. package/src/contexts/AuthProvider.spec.tsx +0 -1195
  227. package/src/contexts/AuthProvider.tsx +0 -924
  228. package/src/contexts/I18nProvider.tsx +0 -114
  229. package/src/contexts/MenuContext.tsx +0 -398
  230. package/src/contexts/SuiteConfigProvider.tsx +0 -93
  231. package/src/contexts/ThemeProvider.tsx +0 -67
  232. package/src/hooks/useBackupCodes.ts +0 -105
  233. package/src/hooks/useEmailVerification.ts +0 -49
  234. package/src/hooks/useExpiringValue.ts +0 -78
  235. package/src/hooks/useLocalStorage.ts +0 -18
  236. package/src/hooks/useUserSettings.ts +0 -269
  237. package/src/interfaces/IAppConfig.ts +0 -5
  238. package/src/interfaces/IMenuConfig.ts +0 -11
  239. package/src/interfaces/IMenuOption.ts +0 -55
  240. package/src/interfaces/index.ts +0 -3
  241. package/src/services/__mocks__/authService.ts +0 -14
  242. package/src/services/api.ts +0 -13
  243. package/src/services/authService.ts +0 -500
  244. package/src/services/authenticatedApi.ts +0 -17
  245. package/src/services/index.ts +0 -3
  246. package/src/types/MenuType.ts +0 -15
  247. package/src/types/expirationSeconds.ts +0 -18
  248. package/src/types/index.ts +0 -1
  249. package/src/types/translation.ts +0 -20
  250. package/src/wrappers/BackupCodeLoginWrapper.tsx +0 -34
  251. package/src/wrappers/BackupCodesWrapper.tsx +0 -28
  252. package/src/wrappers/ChangePasswordFormWrapper.tsx +0 -34
  253. package/src/wrappers/LoginFormWrapper.tsx +0 -59
  254. package/src/wrappers/LogoutPageWrapper.tsx +0 -30
  255. package/src/wrappers/RegisterFormWrapper.tsx +0 -61
  256. package/src/wrappers/UserSettingsFormWrapper.tsx +0 -39
  257. package/src/wrappers/VerifyEmailPageWrapper.tsx +0 -27
@@ -0,0 +1,335 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createAuthService = exports.AuthService = void 0;
4
+ // services/authService.js
5
+ const ecies_lib_1 = require("@digitaldefiance/ecies-lib");
6
+ const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
7
+ const axios_1 = require("axios");
8
+ const api_1 = require("./api");
9
+ const authenticatedApi_1 = require("./authenticatedApi");
10
+ class AuthService {
11
+ constants;
12
+ baseUrl;
13
+ eciesService;
14
+ cryptoCore;
15
+ apiClient;
16
+ authenticatedApiClient;
17
+ constructor(constants, baseUrl, eciesConfig) {
18
+ this.constants = constants;
19
+ this.baseUrl = baseUrl;
20
+ this.eciesService = new ecies_lib_1.ECIESService(eciesConfig);
21
+ this.cryptoCore = new ecies_lib_1.EciesCryptoCore(eciesConfig);
22
+ this.apiClient = (0, api_1.createApiClient)(this.baseUrl);
23
+ this.authenticatedApiClient = (0, authenticatedApi_1.createAuthenticatedApiClient)(this.baseUrl);
24
+ }
25
+ getSiteDomain() {
26
+ return this.constants.AdministratorEmail.split('@')[1];
27
+ }
28
+ async register(username, email, timezone, password) {
29
+ try {
30
+ const response = await this.apiClient.post('/user/register', {
31
+ username,
32
+ email,
33
+ timezone,
34
+ ...(password ? { password } : {}),
35
+ });
36
+ if (response.status !== 201) {
37
+ const errorData = response.data;
38
+ return {
39
+ error: errorData.message
40
+ ? errorData.message
41
+ : (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Registration_Error),
42
+ ...(errorData.errorType ? { errorType: errorData.errorType } : {}),
43
+ ...(errorData.errors ? { errors: errorData.errors } : {}),
44
+ };
45
+ }
46
+ return {
47
+ success: true,
48
+ message: response.data.message ??
49
+ (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Registration_Success, {
50
+ MNEMONIC: response.data.mnemonic,
51
+ }),
52
+ mnemonic: response.data.mnemonic ?? '',
53
+ };
54
+ }
55
+ catch (error) {
56
+ if ((0, axios_1.isAxiosError)(error) && error.response) {
57
+ const errorData = error.response.data;
58
+ return {
59
+ error: errorData.error ??
60
+ errorData.message ??
61
+ error.message ??
62
+ (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError),
63
+ ...(errorData.errorType ? { errorType: errorData.errorType } : {}),
64
+ ...(errorData.error ? { field: 'general' } : {}),
65
+ ...(errorData.errors ? { errors: errorData.errors } : {}),
66
+ };
67
+ }
68
+ else {
69
+ return {
70
+ error: (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError),
71
+ };
72
+ }
73
+ }
74
+ }
75
+ async directLogin(mnemonic, username, email) {
76
+ if (!username && !email) {
77
+ return {
78
+ error: (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Validation_UsernameOrEmailRequired),
79
+ };
80
+ }
81
+ try {
82
+ const loginRequest = await this.apiClient.post('/user/request-direct-login');
83
+ if (loginRequest.data.challenge) {
84
+ const { wallet } = this.cryptoCore.walletAndSeedFromMnemonic(mnemonic);
85
+ const challengeBuffer = (0, ecies_lib_1.hexToUint8Array)(loginRequest.data.challenge);
86
+ const privateKeyBuffer = wallet.getPrivateKey();
87
+ const signature = this.eciesService.signMessage(privateKeyBuffer, challengeBuffer);
88
+ const signatureHex = (0, ecies_lib_1.uint8ArrayToHex)(signature);
89
+ const loginResponse = await this.apiClient.post('/user/direct-challenge', {
90
+ username: username,
91
+ email: email ? email.email : undefined,
92
+ challenge: loginRequest.data.challenge,
93
+ signature: signatureHex,
94
+ });
95
+ if (loginResponse.data.token && loginResponse.data.user) {
96
+ return {
97
+ message: loginResponse.data.message ?? '',
98
+ token: loginResponse.data.token,
99
+ user: loginResponse.data.user,
100
+ wallet,
101
+ };
102
+ }
103
+ }
104
+ }
105
+ catch (error) {
106
+ if ((0, axios_1.isAxiosError)(error) && error.response) {
107
+ // Check for DirectChallengeNotEnabled error
108
+ if (error.response.status === 403 &&
109
+ error.response.data.errorType === 'DirectChallengeNotEnabledError') {
110
+ return {
111
+ error: (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Error_Login_DirectChallengeNotEnabled),
112
+ errorType: 'DirectChallengeNotEnabled',
113
+ };
114
+ }
115
+ // Check for PasswordLoginNotEnabled error
116
+ if (error.response.status === 403 &&
117
+ error.response.data.errorType === 'PasswordLoginNotEnabledError') {
118
+ return {
119
+ error: (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Error_Login_PasswordLoginNotEnabled),
120
+ errorType: 'PasswordLoginNotEnabled',
121
+ };
122
+ }
123
+ const errorData = error.response.data;
124
+ return {
125
+ error: errorData.error ??
126
+ errorData.message ??
127
+ error.message ??
128
+ (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError),
129
+ ...(errorData.errorType ? { errorType: errorData.errorType } : {}),
130
+ };
131
+ }
132
+ console.error('directLogin: non-axios error:', error);
133
+ }
134
+ return {
135
+ error: (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError),
136
+ };
137
+ }
138
+ async requestEmailLogin(username, email) {
139
+ if (!username && !email) {
140
+ return {
141
+ error: (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Validation_UsernameOrEmailRequired),
142
+ };
143
+ }
144
+ try {
145
+ const result = await this.apiClient.post('/user/request-email-login', {
146
+ email: email ? email.email : undefined,
147
+ username,
148
+ });
149
+ if (result.data.message) {
150
+ return result.data.message;
151
+ }
152
+ }
153
+ catch (error) {
154
+ if ((0, axios_1.isAxiosError)(error) && error.response) {
155
+ const errorData = error.response.data;
156
+ return {
157
+ error: errorData.error ??
158
+ errorData.message ??
159
+ error.message ??
160
+ (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError),
161
+ ...(errorData.errorType ? { errorType: errorData.errorType } : {}),
162
+ };
163
+ }
164
+ }
165
+ return {
166
+ error: (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError),
167
+ };
168
+ }
169
+ async emailChallengeLogin(mnemonic, token, username, email) {
170
+ if (!username && !email) {
171
+ return {
172
+ error: (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Validation_UsernameOrEmailRequired),
173
+ };
174
+ }
175
+ try {
176
+ const { wallet } = this.cryptoCore.walletAndSeedFromMnemonic(mnemonic);
177
+ const challengeBuffer = (0, ecies_lib_1.hexToUint8Array)(token);
178
+ const privateKeyBuffer = wallet.getPrivateKey();
179
+ const signature = this.eciesService.signMessage(privateKeyBuffer, challengeBuffer);
180
+ const signatureHex = (0, ecies_lib_1.uint8ArrayToHex)(signature);
181
+ const response = await this.apiClient.post('/user/email-login', {
182
+ token,
183
+ signature: signatureHex,
184
+ username: username ?? null,
185
+ email: email ?? null,
186
+ });
187
+ if (response.data.token && response.data.user) {
188
+ return {
189
+ message: response.data.message ?? '',
190
+ token: response.data.token,
191
+ user: response.data.user,
192
+ wallet,
193
+ };
194
+ }
195
+ }
196
+ catch (error) {
197
+ if ((0, axios_1.isAxiosError)(error) && error.response) {
198
+ const errorData = error.response.data;
199
+ return {
200
+ error: errorData.error ??
201
+ errorData.message ??
202
+ error.message ??
203
+ (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError),
204
+ ...(errorData.errorType ? { errorType: errorData.errorType } : {}),
205
+ };
206
+ }
207
+ }
208
+ return {
209
+ error: (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError),
210
+ };
211
+ }
212
+ async verifyToken(token) {
213
+ try {
214
+ const response = await this.apiClient.get('/user/verify', {
215
+ headers: { Authorization: `Bearer ${token}` },
216
+ });
217
+ return response.data.user;
218
+ }
219
+ catch (error) {
220
+ if ((0, axios_1.isAxiosError)(error) && error.response) {
221
+ const errorData = error.response.data;
222
+ return {
223
+ error: errorData.message
224
+ ? errorData.message
225
+ : error.message
226
+ ? error.message
227
+ : (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError),
228
+ ...(errorData.errorType ? { errorType: errorData.errorType } : {}),
229
+ };
230
+ }
231
+ else {
232
+ return {
233
+ error: (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError),
234
+ };
235
+ }
236
+ }
237
+ }
238
+ async refreshToken() {
239
+ try {
240
+ const refreshResponse = await this.authenticatedApiClient.get('/user/refresh-token');
241
+ if (refreshResponse.status === 200) {
242
+ const newToken = refreshResponse.headers['authorization'];
243
+ let token = undefined;
244
+ let user = undefined;
245
+ if (newToken &&
246
+ typeof newToken === 'string' &&
247
+ newToken.startsWith('Bearer ')) {
248
+ token = newToken.slice(7);
249
+ }
250
+ if (refreshResponse.data.user) {
251
+ user = refreshResponse.data.user;
252
+ }
253
+ if (token && user) {
254
+ return { token, user };
255
+ }
256
+ }
257
+ }
258
+ catch (error) {
259
+ console.error('Token refresh error:', error);
260
+ }
261
+ throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError);
262
+ }
263
+ async changePassword(currentPassword, newPassword) {
264
+ try {
265
+ await this.authenticatedApiClient.post('/user/change-password', {
266
+ currentPassword,
267
+ newPassword,
268
+ });
269
+ return { success: true };
270
+ }
271
+ catch (error) {
272
+ if ((0, axios_1.isAxiosError)(error) && error.response) {
273
+ const errorData = error.response.data;
274
+ return {
275
+ error: errorData.error ??
276
+ errorData.message ??
277
+ error.message ??
278
+ (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError),
279
+ ...(errorData.errorType ? { errorType: errorData.errorType } : {}),
280
+ };
281
+ }
282
+ return {
283
+ error: (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError),
284
+ };
285
+ }
286
+ }
287
+ async backupCodeLogin(identifier, code, isEmail, recoverMnemonic, newPassword) {
288
+ try {
289
+ const response = await this.apiClient.post('/user/backup-code', {
290
+ [isEmail ? 'email' : 'username']: identifier,
291
+ code,
292
+ recoverMnemonic,
293
+ ...(newPassword ? { newPassword } : {}),
294
+ });
295
+ if (response.data.token && response.data.user) {
296
+ return {
297
+ token: response.data.token,
298
+ user: response.data.user,
299
+ codeCount: response.data.codeCount ?? 0,
300
+ ...(response.data.mnemonic
301
+ ? { mnemonic: response.data.mnemonic }
302
+ : {}),
303
+ ...(response.data.message ? { message: response.data.message } : {}),
304
+ };
305
+ }
306
+ const errorData = response.data;
307
+ return {
308
+ error: errorData.message
309
+ ? errorData.message
310
+ : (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Validation_InvalidToken),
311
+ ...(errorData.errorType ? { errorType: errorData.errorType } : {}),
312
+ };
313
+ }
314
+ catch (error) {
315
+ console.error('Backup code login error:', error);
316
+ if ((0, axios_1.isAxiosError)(error) && error.response) {
317
+ const errorData = error.response.data;
318
+ return {
319
+ error: errorData.error ??
320
+ errorData.message ??
321
+ error.message ??
322
+ (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError),
323
+ ...(errorData.errorType ? { errorType: errorData.errorType } : {}),
324
+ status: error.response.status,
325
+ };
326
+ }
327
+ return {
328
+ error: (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError),
329
+ };
330
+ }
331
+ }
332
+ }
333
+ exports.AuthService = AuthService;
334
+ const createAuthService = (constants, baseUrl, eciesConfig) => new AuthService(constants, baseUrl, eciesConfig);
335
+ exports.createAuthService = createAuthService;
@@ -0,0 +1,3 @@
1
+ import axios from 'axios';
2
+ export declare function createAuthenticatedApiClient(baseURL: string, tokenKey?: string): axios.AxiosInstance;
3
+ //# sourceMappingURL=authenticatedApi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authenticatedApi.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/services/authenticatedApi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAoB,uBAc3F"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createAuthenticatedApiClient = createAuthenticatedApiClient;
4
+ const tslib_1 = require("tslib");
5
+ const axios_1 = tslib_1.__importDefault(require("axios"));
6
+ function createAuthenticatedApiClient(baseURL, tokenKey = 'authToken') {
7
+ const api = axios_1.default.create({ baseURL });
8
+ api.interceptors.request.use((config) => {
9
+ const token = localStorage.getItem(tokenKey);
10
+ if (token) {
11
+ config.headers['Authorization'] = `Bearer ${token}`;
12
+ }
13
+ const languageCode = localStorage.getItem('languageCode') ?? 'en-US';
14
+ config.headers['Accept-Language'] = languageCode;
15
+ return config;
16
+ });
17
+ return api;
18
+ }
@@ -0,0 +1,4 @@
1
+ export * from './api';
2
+ export * from './authenticatedApi';
3
+ export * from './authService';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./api"), exports);
5
+ tslib_1.__exportStar(require("./authenticatedApi"), exports);
6
+ tslib_1.__exportStar(require("./authService"), exports);
@@ -0,0 +1,11 @@
1
+ export type MenuType = string & {
2
+ readonly __brand: 'MenuType';
3
+ };
4
+ export declare const createMenuType: (id: string) => MenuType;
5
+ export declare const MenuTypes: {
6
+ readonly SideMenu: MenuType;
7
+ readonly TopMenu: MenuType;
8
+ readonly UserMenu: MenuType;
9
+ };
10
+ export type BuiltInMenuType = typeof MenuTypes[keyof typeof MenuTypes];
11
+ //# sourceMappingURL=MenuType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuType.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/types/MenuType.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAA;CAAE,CAAC;AAGjE,eAAO,MAAM,cAAc,GAAI,IAAI,MAAM,KAAG,QAA0B,CAAC;AAGvE,eAAO,MAAM,SAAS;;;;CAIZ,CAAC;AAGX,MAAM,MAAM,eAAe,GAAG,OAAO,SAAS,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MenuTypes = exports.createMenuType = void 0;
4
+ // Factory function to create menu types
5
+ const createMenuType = (id) => id;
6
+ exports.createMenuType = createMenuType;
7
+ // Built-in menu types
8
+ exports.MenuTypes = {
9
+ SideMenu: (0, exports.createMenuType)('SideMenu'),
10
+ TopMenu: (0, exports.createMenuType)('TopMenu'),
11
+ UserMenu: (0, exports.createMenuType)('UserMenu'),
12
+ };
@@ -0,0 +1,3 @@
1
+ export declare const ExpirationSecondsOptionValues: number[];
2
+ export declare function createExpirationSecondsOptionNames(secondsLabel: string, minuteLabel: string, minutesLabel: string): string[];
3
+ //# sourceMappingURL=expirationSeconds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expirationSeconds.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/types/expirationSeconds.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,6BAA6B,UAAqC,CAAC;AAEhF,wBAAgB,kCAAkC,CAChD,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,MAAM,EAAE,CAWV"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExpirationSecondsOptionValues = void 0;
4
+ exports.createExpirationSecondsOptionNames = createExpirationSecondsOptionNames;
5
+ exports.ExpirationSecondsOptionValues = [0, 10, 30, 45, 60, 120, 300, 600];
6
+ function createExpirationSecondsOptionNames(secondsLabel, minuteLabel, minutesLabel) {
7
+ return [
8
+ `0 ${secondsLabel}`,
9
+ `10 ${secondsLabel}`,
10
+ `30 ${secondsLabel}`,
11
+ `45 ${secondsLabel}`,
12
+ `1 ${minuteLabel}`,
13
+ `2 ${minutesLabel}`,
14
+ `5 ${minutesLabel}`,
15
+ `10 ${minutesLabel}`,
16
+ ];
17
+ }
@@ -0,0 +1,2 @@
1
+ export * from './MenuType';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./MenuType"), exports);
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Translation function type for components
3
+ * Accepts a key and optional variables, returns translated string
4
+ */
5
+ export type TranslationFunction = (key: string, variables?: Record<string, string | number>) => string;
6
+ /**
7
+ * Helper to get translated text or fallback to provided string
8
+ */
9
+ export declare function getTranslatedText(t: TranslationFunction | undefined, key: string, fallback: string, variables?: Record<string, string | number>): string;
10
+ //# sourceMappingURL=translation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translation.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/types/translation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAChC,GAAG,EAAE,MAAM,EACX,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,KACxC,MAAM,CAAC;AAEZ;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,mBAAmB,GAAG,SAAS,EAClC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAC1C,MAAM,CAER"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTranslatedText = getTranslatedText;
4
+ /**
5
+ * Helper to get translated text or fallback to provided string
6
+ */
7
+ function getTranslatedText(t, key, fallback, variables) {
8
+ return t ? t(key, variables) : fallback;
9
+ }
@@ -0,0 +1,8 @@
1
+ import { FC } from 'react';
2
+ import { BackupCodeLoginForm } from '../components/BackupCodeLoginForm';
3
+ export interface BackupCodeLoginWrapperProps {
4
+ onSuccess?: () => void;
5
+ componentProps?: Partial<React.ComponentProps<typeof BackupCodeLoginForm>>;
6
+ }
7
+ export declare const BackupCodeLoginWrapper: FC<BackupCodeLoginWrapperProps>;
8
+ //# sourceMappingURL=BackupCodeLoginWrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackupCodeLoginWrapper.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/wrappers/BackupCodeLoginWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAE3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAGxE,MAAM,WAAW,2BAA2B;IAC1C,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC;CAC5E;AAED,eAAO,MAAM,sBAAsB,EAAE,EAAE,CAAC,2BAA2B,CAuBlE,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BackupCodeLoginWrapper = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_router_dom_1 = require("react-router-dom");
6
+ const BackupCodeLoginForm_1 = require("../components/BackupCodeLoginForm");
7
+ const contexts_1 = require("../contexts");
8
+ const BackupCodeLoginWrapper = ({ onSuccess, componentProps = {}, }) => {
9
+ const { backupCodeLogin, isAuthenticated } = (0, contexts_1.useAuth)();
10
+ const navigate = (0, react_router_dom_1.useNavigate)();
11
+ const handleSubmit = async (...args) => {
12
+ const result = await backupCodeLogin(...args);
13
+ if ('token' in result && onSuccess) {
14
+ onSuccess();
15
+ }
16
+ return result;
17
+ };
18
+ return ((0, jsx_runtime_1.jsx)(BackupCodeLoginForm_1.BackupCodeLoginForm, { onSubmit: handleSubmit, onNavigate: navigate, isAuthenticated: isAuthenticated, ...componentProps }));
19
+ };
20
+ exports.BackupCodeLoginWrapper = BackupCodeLoginWrapper;
@@ -0,0 +1,7 @@
1
+ import { FC } from 'react';
2
+ import { BackupCodesForm } from '../components/BackupCodesForm';
3
+ export interface BackupCodesWrapperProps {
4
+ componentProps?: Partial<React.ComponentProps<typeof BackupCodesForm>>;
5
+ }
6
+ export declare const BackupCodesWrapper: FC<BackupCodesWrapperProps>;
7
+ //# sourceMappingURL=BackupCodesWrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackupCodesWrapper.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/wrappers/BackupCodesWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAE3B,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAGhE,MAAM,WAAW,uBAAuB;IACtC,cAAc,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC;CACxE;AAED,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,uBAAuB,CAkB1D,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BackupCodesWrapper = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_router_dom_1 = require("react-router-dom");
6
+ const BackupCodesForm_1 = require("../components/BackupCodesForm");
7
+ const hooks_1 = require("../hooks");
8
+ const BackupCodesWrapper = ({ componentProps = {}, }) => {
9
+ const location = (0, react_router_dom_1.useLocation)();
10
+ const initialCodeCount = location.state?.codeCount ?? null;
11
+ const { backupCodesRemaining, generateBackupCodes } = (0, hooks_1.useBackupCodes)({ initialCodeCount });
12
+ const handleSubmit = async (values) => {
13
+ return await generateBackupCodes(values.password, values.mnemonic);
14
+ };
15
+ return ((0, jsx_runtime_1.jsx)(BackupCodesForm_1.BackupCodesForm, { onSubmit: handleSubmit, backupCodesRemaining: backupCodesRemaining, ...componentProps }));
16
+ };
17
+ exports.BackupCodesWrapper = BackupCodesWrapper;
@@ -0,0 +1,8 @@
1
+ import { FC } from 'react';
2
+ import { ChangePasswordForm } from '../components/ChangePasswordForm';
3
+ export interface ChangePasswordFormWrapperProps {
4
+ onSuccess?: () => void;
5
+ componentProps?: Partial<React.ComponentProps<typeof ChangePasswordForm>>;
6
+ }
7
+ export declare const ChangePasswordFormWrapper: FC<ChangePasswordFormWrapperProps>;
8
+ //# sourceMappingURL=ChangePasswordFormWrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChangePasswordFormWrapper.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/wrappers/ChangePasswordFormWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAGtE,MAAM,WAAW,8BAA8B;IAC7C,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC;CAC3E;AAED,eAAO,MAAM,yBAAyB,EAAE,EAAE,CAAC,8BAA8B,CAwBxE,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChangePasswordFormWrapper = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const ChangePasswordForm_1 = require("../components/ChangePasswordForm");
6
+ const contexts_1 = require("../contexts");
7
+ const ChangePasswordFormWrapper = ({ onSuccess, componentProps = {}, }) => {
8
+ const { changePassword } = (0, contexts_1.useAuth)();
9
+ const handleSubmit = async (values) => {
10
+ const result = await changePassword(values.currentPassword, values.newPassword);
11
+ if ('error' in result) {
12
+ throw new Error(result.error);
13
+ }
14
+ if (onSuccess) {
15
+ onSuccess();
16
+ }
17
+ return result;
18
+ };
19
+ return (0, jsx_runtime_1.jsx)(ChangePasswordForm_1.ChangePasswordForm, { onSubmit: handleSubmit, ...componentProps });
20
+ };
21
+ exports.ChangePasswordFormWrapper = ChangePasswordFormWrapper;
@@ -0,0 +1,9 @@
1
+ import { FC } from 'react';
2
+ import { LoginFormProps } from '../components/LoginForm';
3
+ export interface LoginFormWrapperProps {
4
+ onSuccess?: () => void;
5
+ redirectTo?: string;
6
+ componentProps?: Partial<Omit<LoginFormProps, 'onSubmit'>>;
7
+ }
8
+ export declare const LoginFormWrapper: FC<LoginFormWrapperProps>;
9
+ //# sourceMappingURL=LoginFormWrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoginFormWrapper.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/wrappers/LoginFormWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAG3B,OAAO,EAA8B,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAIrF,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC;CAC5D;AAED,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CA6CtD,CAAC"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LoginFormWrapper = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_router_dom_1 = require("react-router-dom");
6
+ const ecies_lib_1 = require("@digitaldefiance/ecies-lib");
7
+ const LoginForm_1 = require("../components/LoginForm");
8
+ const contexts_1 = require("../contexts");
9
+ const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
10
+ const LoginFormWrapper = ({ onSuccess, redirectTo, componentProps = {}, }) => {
11
+ const { directLogin, passwordLogin } = (0, contexts_1.useAuth)();
12
+ const navigate = (0, react_router_dom_1.useNavigate)();
13
+ const { routes } = (0, contexts_1.useSuiteConfig)();
14
+ const handleSubmit = async (values) => {
15
+ const email = values.email && values.email.trim().length > 0 ? new ecies_lib_1.EmailString(values.email) : undefined;
16
+ const username = values.username && values.username.trim() ? values.username : undefined;
17
+ if (values.password) {
18
+ const result = await passwordLogin(new ecies_lib_1.SecureString(values.password), username, email);
19
+ if ('error' in result) {
20
+ throw new Error(result.error);
21
+ }
22
+ if (onSuccess) {
23
+ onSuccess();
24
+ }
25
+ navigate(redirectTo || routes.dashboard || '/dashboard');
26
+ }
27
+ else if (values.mnemonic) {
28
+ const result = await directLogin(new ecies_lib_1.SecureString(values.mnemonic), username, email);
29
+ if ('error' in result) {
30
+ throw new Error(result.error);
31
+ }
32
+ if (onSuccess) {
33
+ onSuccess();
34
+ }
35
+ navigate(redirectTo || routes.dashboard || '/dashboard');
36
+ }
37
+ else {
38
+ throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Error_NoPasswordOrMnemonicProvided);
39
+ }
40
+ };
41
+ return (0, jsx_runtime_1.jsx)(LoginForm_1.LoginForm, { onSubmit: handleSubmit, ...componentProps });
42
+ };
43
+ exports.LoginFormWrapper = LoginFormWrapper;
@@ -0,0 +1,9 @@
1
+ import { FC } from 'react';
2
+ import { LogoutPage } from '../components/LogoutPage';
3
+ export interface LogoutPageWrapperProps {
4
+ onSuccess?: () => void;
5
+ redirectTo?: string;
6
+ componentProps?: Partial<React.ComponentProps<typeof LogoutPage>>;
7
+ }
8
+ export declare const LogoutPageWrapper: FC<LogoutPageWrapperProps>;
9
+ //# sourceMappingURL=LogoutPageWrapper.d.ts.map