@digitaldefiance/express-suite-react-components 2.9.7 → 2.9.9

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 +6 -5
  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 +70 -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 +106 -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 +108 -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 +66 -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 +54 -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 +99 -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 +54 -0
  60. package/src/components/RegisterForm.d.ts.map +1 -0
  61. package/src/components/RegisterForm.js +105 -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 +68 -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 +42 -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 +56 -0
  84. package/src/components/UserSettingsForm.d.ts.map +1 -0
  85. package/src/components/UserSettingsForm.js +93 -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 +61 -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 +446 -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 +244 -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 +70 -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 +36 -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 +46 -0
  126. package/src/hooks/useUserSettings.d.ts.map +1 -0
  127. package/src/hooks/useUserSettings.js +152 -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 +347 -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 +21 -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 +26 -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 -134
  203. package/src/components/BackupCodeLoginForm.tsx +0 -314
  204. package/src/components/BackupCodesForm.tsx +0 -198
  205. package/src/components/ChangePasswordForm.tsx +0 -182
  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 -65
  212. package/src/components/Flag.tsx +0 -53
  213. package/src/components/ForgotPasswordForm.tsx +0 -120
  214. package/src/components/LoginForm.tsx +0 -307
  215. package/src/components/LogoutPage.tsx +0 -21
  216. package/src/components/RegisterForm.tsx +0 -354
  217. package/src/components/ResetPasswordForm.tsx +0 -164
  218. package/src/components/SideMenu.tsx +0 -46
  219. package/src/components/SideMenuListItem.tsx +0 -74
  220. package/src/components/TopMenu.tsx +0 -149
  221. package/src/components/TranslatedTitle.tsx +0 -22
  222. package/src/components/UserLanguageSelector.tsx +0 -45
  223. package/src/components/UserMenu.tsx +0 -15
  224. package/src/components/UserSettingsForm.tsx +0 -328
  225. package/src/components/VerifyEmailPage.tsx +0 -133
  226. package/src/contexts/AuthProvider.spec.tsx +0 -1060
  227. package/src/contexts/AuthProvider.tsx +0 -741
  228. package/src/contexts/I18nProvider.tsx +0 -85
  229. package/src/contexts/MenuContext.tsx +0 -310
  230. package/src/contexts/SuiteConfigProvider.tsx +0 -93
  231. package/src/contexts/ThemeProvider.tsx +0 -67
  232. package/src/hooks/useBackupCodes.ts +0 -85
  233. package/src/hooks/useEmailVerification.ts +0 -39
  234. package/src/hooks/useExpiringValue.ts +0 -78
  235. package/src/hooks/useLocalStorage.ts +0 -18
  236. package/src/hooks/useUserSettings.ts +0 -216
  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 -422
  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 -35
  251. package/src/wrappers/BackupCodesWrapper.tsx +0 -28
  252. package/src/wrappers/ChangePasswordFormWrapper.tsx +0 -31
  253. package/src/wrappers/LoginFormWrapper.tsx +0 -59
  254. package/src/wrappers/LogoutPageWrapper.tsx +0 -30
  255. package/src/wrappers/RegisterFormWrapper.tsx +0 -48
  256. package/src/wrappers/UserSettingsFormWrapper.tsx +0 -39
  257. package/src/wrappers/VerifyEmailPageWrapper.tsx +0 -27
@@ -0,0 +1,347 @@
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
+ return {
38
+ error: response.data.message
39
+ ? response.data.message
40
+ : (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Registration_Error),
41
+ ...(response.data.errorType
42
+ ? { errorType: response.data.errorType }
43
+ : {}),
44
+ ...(response.data.errors ? { errors: response.data.errors } : {}),
45
+ };
46
+ }
47
+ return {
48
+ success: true,
49
+ message: response.data.message ??
50
+ (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Registration_Success, {
51
+ MNEMONIC: response.data.mnemonic,
52
+ }),
53
+ mnemonic: response.data.mnemonic,
54
+ };
55
+ }
56
+ catch (error) {
57
+ if ((0, axios_1.isAxiosError)(error) && error.response) {
58
+ return {
59
+ error: error.response.data.error?.message ??
60
+ error.response.data.message ??
61
+ error.message ??
62
+ (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError),
63
+ ...(error.response.data.errorType
64
+ ? { errorType: error.response.data.errorType }
65
+ : {}),
66
+ ...(error.response.data.error?.field
67
+ ? { field: error.response.data.error.field }
68
+ : {}),
69
+ ...(error.response.data.errors
70
+ ? { errors: error.response.data.errors }
71
+ : {}),
72
+ };
73
+ }
74
+ else {
75
+ return {
76
+ error: (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError),
77
+ };
78
+ }
79
+ }
80
+ }
81
+ async directLogin(mnemonic, username, email) {
82
+ if (!username && !email) {
83
+ return {
84
+ error: (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Validation_UsernameOrEmailRequired),
85
+ };
86
+ }
87
+ try {
88
+ const loginRequest = await this.apiClient.post('/user/request-direct-login');
89
+ if (loginRequest.data.challenge) {
90
+ const { wallet } = this.cryptoCore.walletAndSeedFromMnemonic(mnemonic);
91
+ const publicKey = wallet.getPublicKey();
92
+ // Add 0x04 prefix for uncompressed public key
93
+ const publicKeyWithPrefix = new Uint8Array(publicKey.length + 1);
94
+ publicKeyWithPrefix[0] = 0x04;
95
+ publicKeyWithPrefix.set(publicKey, 1);
96
+ const challengeBuffer = (0, ecies_lib_1.hexToUint8Array)(loginRequest.data.challenge);
97
+ const privateKeyBuffer = wallet.getPrivateKey();
98
+ const signature = this.eciesService.signMessage(privateKeyBuffer, challengeBuffer);
99
+ const signatureHex = (0, ecies_lib_1.uint8ArrayToHex)(signature);
100
+ const loginResponse = await this.apiClient.post('/user/direct-challenge', {
101
+ username: username,
102
+ email: email ? email.email : undefined,
103
+ challenge: loginRequest.data.challenge,
104
+ signature: signatureHex,
105
+ });
106
+ if (loginResponse.data.token && loginResponse.data.user) {
107
+ return {
108
+ message: loginResponse.data.message,
109
+ token: loginResponse.data.token,
110
+ user: loginResponse.data.user,
111
+ wallet,
112
+ };
113
+ }
114
+ }
115
+ }
116
+ catch (error) {
117
+ if ((0, axios_1.isAxiosError)(error) && error.response) {
118
+ // Check for DirectChallengeNotEnabled error
119
+ if (error.response.status === 403 && error.response.data.errorType === 'DirectChallengeNotEnabledError') {
120
+ return {
121
+ error: (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Error_Login_DirectChallengeNotEnabled),
122
+ errorType: 'DirectChallengeNotEnabled',
123
+ };
124
+ }
125
+ // Check for PasswordLoginNotEnabled error
126
+ if (error.response.status === 403 && error.response.data.errorType === 'PasswordLoginNotEnabledError') {
127
+ return {
128
+ error: (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Error_Login_PasswordLoginNotEnabled),
129
+ errorType: 'PasswordLoginNotEnabled',
130
+ };
131
+ }
132
+ return {
133
+ error: error.response.data.error?.message ??
134
+ error.response.data.message ??
135
+ error.message ??
136
+ (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError),
137
+ ...(error.response.data.errorType
138
+ ? { errorType: error.response.data.errorType }
139
+ : {}),
140
+ };
141
+ }
142
+ console.error('directLogin: non-axios error:', error);
143
+ }
144
+ return {
145
+ error: (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError),
146
+ };
147
+ }
148
+ async requestEmailLogin(username, email) {
149
+ if (!username && !email) {
150
+ return {
151
+ error: (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Validation_UsernameOrEmailRequired),
152
+ };
153
+ }
154
+ try {
155
+ const result = await this.apiClient.post('/user/request-email-login', {
156
+ email: email ? email.email : undefined,
157
+ username,
158
+ });
159
+ if (result.data.message) {
160
+ return result.data.message;
161
+ }
162
+ }
163
+ catch (error) {
164
+ if ((0, axios_1.isAxiosError)(error) && error.response) {
165
+ return {
166
+ error: error.response.data.error?.message ??
167
+ error.response.data.message ??
168
+ error.message ??
169
+ (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError),
170
+ ...(error.response.data.errorType
171
+ ? { errorType: error.response.data.errorType }
172
+ : {}),
173
+ };
174
+ }
175
+ }
176
+ return {
177
+ error: (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError),
178
+ };
179
+ }
180
+ async emailChallengeLogin(mnemonic, token, username, email) {
181
+ if (!username && !email) {
182
+ return {
183
+ error: (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Validation_UsernameOrEmailRequired),
184
+ };
185
+ }
186
+ try {
187
+ const { wallet } = this.cryptoCore.walletAndSeedFromMnemonic(mnemonic);
188
+ const challengeBuffer = (0, ecies_lib_1.hexToUint8Array)(token);
189
+ const privateKeyBuffer = wallet.getPrivateKey();
190
+ const signature = this.eciesService.signMessage(privateKeyBuffer, challengeBuffer);
191
+ const signatureHex = (0, ecies_lib_1.uint8ArrayToHex)(signature);
192
+ const response = await this.apiClient.post('/user/email-login', {
193
+ token,
194
+ signature: signatureHex,
195
+ username: username ?? null,
196
+ email: email ?? null,
197
+ });
198
+ if (response.data.token && response.data.user) {
199
+ return {
200
+ message: response.data.message,
201
+ token: response.data.token,
202
+ user: response.data.user,
203
+ wallet,
204
+ };
205
+ }
206
+ }
207
+ catch (error) {
208
+ if ((0, axios_1.isAxiosError)(error) && error.response) {
209
+ return {
210
+ error: error.response.data.error?.message ??
211
+ error.response.data.message ??
212
+ error.message ??
213
+ (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError),
214
+ ...(error.response.data.errorType
215
+ ? { errorType: error.response.data.errorType }
216
+ : {}),
217
+ };
218
+ }
219
+ }
220
+ return {
221
+ error: (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError),
222
+ };
223
+ }
224
+ async verifyToken(token) {
225
+ try {
226
+ const response = await this.apiClient.get('/user/verify', {
227
+ headers: { Authorization: `Bearer ${token}` },
228
+ });
229
+ return response.data.user;
230
+ }
231
+ catch (error) {
232
+ if ((0, axios_1.isAxiosError)(error) && error.response) {
233
+ return {
234
+ error: error.response.data.message
235
+ ? error.response.data.message
236
+ : error.message
237
+ ? error.message
238
+ : (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError),
239
+ ...(error.response.data.errorType
240
+ ? { errorType: error.response.data.errorType }
241
+ : {}),
242
+ };
243
+ }
244
+ else {
245
+ return {
246
+ error: (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError),
247
+ };
248
+ }
249
+ }
250
+ }
251
+ async refreshToken() {
252
+ try {
253
+ const refreshResponse = await this.authenticatedApiClient.get('/user/refresh-token');
254
+ if (refreshResponse.status === 200) {
255
+ const newToken = refreshResponse.headers['authorization'];
256
+ let token = undefined;
257
+ let user = undefined;
258
+ if (newToken?.startsWith('Bearer ')) {
259
+ token = newToken.slice(7);
260
+ }
261
+ if (refreshResponse.data.user) {
262
+ user = refreshResponse.data.user;
263
+ }
264
+ if (token && user) {
265
+ return { token, user };
266
+ }
267
+ }
268
+ }
269
+ catch (error) {
270
+ console.error('Token refresh error:', error);
271
+ if ((0, axios_1.isAxiosError)(error) && error.response) {
272
+ console.error('Error response:', error.response.data);
273
+ console.error('Error status:', error.response.status);
274
+ }
275
+ }
276
+ throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError);
277
+ }
278
+ async changePassword(currentPassword, newPassword) {
279
+ try {
280
+ await this.authenticatedApiClient.post('/user/change-password', {
281
+ currentPassword,
282
+ newPassword,
283
+ });
284
+ return { success: true };
285
+ }
286
+ catch (error) {
287
+ if ((0, axios_1.isAxiosError)(error) && error.response) {
288
+ return {
289
+ error: error.response.data.error?.message ??
290
+ error.response.data.message ??
291
+ error.message ??
292
+ (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError),
293
+ ...(error.response.data.errorType
294
+ ? { errorType: error.response.data.errorType }
295
+ : {}),
296
+ };
297
+ }
298
+ return { error: (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError) };
299
+ }
300
+ }
301
+ async backupCodeLogin(identifier, code, isEmail, recoverMnemonic, newPassword) {
302
+ try {
303
+ const response = await this.apiClient.post('/user/backup-code', {
304
+ [isEmail ? 'email' : 'username']: identifier,
305
+ code,
306
+ recoverMnemonic,
307
+ ...(newPassword ? { newPassword } : {}),
308
+ });
309
+ if (response.data.token && response.data.user) {
310
+ return {
311
+ token: response.data.token,
312
+ user: response.data.user,
313
+ codeCount: response.data.codeCount ?? 0,
314
+ ...(response.data.mnemonic ? { mnemonic: response.data.mnemonic } : {}),
315
+ ...(response.data.message ? { message: response.data.message } : {}),
316
+ };
317
+ }
318
+ return {
319
+ error: response.data.message
320
+ ? response.data.message
321
+ : (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Validation_InvalidToken),
322
+ ...(response.data.errorType
323
+ ? { errorType: response.data.errorType }
324
+ : {}),
325
+ };
326
+ }
327
+ catch (error) {
328
+ console.error('Backup code login error:', error);
329
+ if ((0, axios_1.isAxiosError)(error) && error.response) {
330
+ return {
331
+ error: error.response.data.error.message ??
332
+ error.response.data.message ??
333
+ error.message ??
334
+ (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError),
335
+ ...(error.response.data.errorType
336
+ ? { errorType: error.response.data.errorType }
337
+ : {}),
338
+ status: error.response.status,
339
+ };
340
+ }
341
+ return { error: (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError) };
342
+ }
343
+ }
344
+ }
345
+ exports.AuthService = AuthService;
346
+ const createAuthService = (constants, baseUrl, eciesConfig) => new AuthService(constants, baseUrl, eciesConfig);
347
+ 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,CAwBlE,CAAC"}
@@ -0,0 +1,21 @@
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 { routes } = (0, contexts_1.useSuiteConfig)();
12
+ const handleSubmit = async (...args) => {
13
+ const result = await backupCodeLogin(...args);
14
+ if ('token' in result && onSuccess) {
15
+ onSuccess();
16
+ }
17
+ return result;
18
+ };
19
+ return ((0, jsx_runtime_1.jsx)(BackupCodeLoginForm_1.BackupCodeLoginForm, { onSubmit: handleSubmit, onNavigate: navigate, isAuthenticated: isAuthenticated, ...componentProps }));
20
+ };
21
+ 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,CAqBxE,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;