@djangocfg/api 2.1.448 → 2.1.450
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth-server.cjs +1 -2272
- package/dist/auth-server.cjs.map +1 -1
- package/dist/auth-server.d.cts +1 -35
- package/dist/auth-server.d.ts +1 -35
- package/dist/auth-server.mjs +1 -2272
- package/dist/auth-server.mjs.map +1 -1
- package/dist/auth.cjs +285 -146
- package/dist/auth.cjs.map +1 -1
- package/dist/auth.d.cts +137 -2
- package/dist/auth.d.ts +137 -2
- package/dist/auth.mjs +294 -155
- package/dist/auth.mjs.map +1 -1
- package/dist/clients.cjs +35 -0
- package/dist/clients.cjs.map +1 -1
- package/dist/clients.d.cts +147 -2
- package/dist/clients.d.ts +147 -2
- package/dist/clients.mjs +35 -0
- package/dist/clients.mjs.map +1 -1
- package/dist/hooks.cjs +11 -0
- package/dist/hooks.cjs.map +1 -1
- package/dist/hooks.mjs +11 -0
- package/dist/hooks.mjs.map +1 -1
- package/dist/index.cjs +35 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +169 -6
- package/dist/index.d.ts +169 -6
- package/dist/index.mjs +35 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +7 -4
- package/src/_api/generated/_cfg_accounts/api.ts +8 -0
- package/src/_api/generated/_cfg_accounts/openapi.json +84 -5
- package/src/_api/generated/_cfg_accounts/schemas/OAuthTokenResponse.ts +2 -2
- package/src/_api/generated/_cfg_accounts/schemas/OTPRequestResponse.ts +2 -0
- package/src/_api/generated/_cfg_accounts/schemas/WebmailLink.ts +15 -0
- package/src/_api/generated/_cfg_accounts/schemas/WebmailLinkProviderEnum.ts +9 -0
- package/src/_api/generated/_cfg_accounts/schemas/index.ts +2 -0
- package/src/_api/generated/_cfg_centrifugo/api.ts +8 -0
- package/src/_api/generated/_cfg_totp/api.ts +8 -0
- package/src/_api/generated/helpers/auth.ts +12 -0
- package/src/_api/generated/openapi.json +84 -5
- package/src/_api/generated/types.gen.ts +131 -2
- package/src/auth/__tests__/jwt.test.ts +119 -0
- package/src/auth/__tests__/onUnauthorized.test.ts +206 -0
- package/src/auth/__tests__/refreshRotation.test.ts +119 -0
- package/src/auth/__tests__/sessionBootstrap.test.ts +76 -0
- package/src/auth/context/AuthContext.tsx +131 -14
- package/src/auth/hooks/useAuthForm.ts +5 -2
- package/src/auth/hooks/useAuthFormState.ts +4 -1
- package/src/auth/hooks/useTokenRefresh.ts +28 -62
- package/src/auth/middlewares/index.ts +7 -7
- package/src/auth/refreshHandler.ts +79 -0
- package/src/auth/types/form.ts +10 -0
- package/src/auth/types/index.ts +1 -0
- package/src/auth/utils/jwt.ts +66 -0
- package/src/auth/middlewares/tokenRefresh.ts +0 -161
package/dist/auth.d.cts
CHANGED
|
@@ -73,6 +73,10 @@ type OtpRequestResponse = {
|
|
|
73
73
|
* Success message
|
|
74
74
|
*/
|
|
75
75
|
message: string;
|
|
76
|
+
/**
|
|
77
|
+
* Webmail deep-link for the recipient's provider, or null if the domain is unknown.
|
|
78
|
+
*/
|
|
79
|
+
webmail?: WebmailLink | null;
|
|
76
80
|
};
|
|
77
81
|
/**
|
|
78
82
|
* Serializer for OTP verification.
|
|
@@ -190,6 +194,129 @@ type User = {
|
|
|
190
194
|
readonly centrifugo: CentrifugoToken | null;
|
|
191
195
|
readonly api_key: string | null;
|
|
192
196
|
};
|
|
197
|
+
/**
|
|
198
|
+
* Deep-link that opens the user's webmail on a search for our login email.
|
|
199
|
+
*
|
|
200
|
+
* Present only when the recipient's email domain maps to a known webmail
|
|
201
|
+
* provider (Gmail, Outlook, Mail.ru, Yandex, iCloud, …). For unknown/corporate
|
|
202
|
+
* domains this whole object is null and the frontend shows no button.
|
|
203
|
+
*/
|
|
204
|
+
type WebmailLink = {
|
|
205
|
+
/**
|
|
206
|
+
* Provider slug (e.g. 'gmail', 'outlook', 'mail_ru'). Also selects the brand icon on the frontend.
|
|
207
|
+
*
|
|
208
|
+
* * `gmail` - gmail
|
|
209
|
+
* * `outlook` - outlook
|
|
210
|
+
* * `yahoo` - yahoo
|
|
211
|
+
* * `icloud` - icloud
|
|
212
|
+
* * `proton` - proton
|
|
213
|
+
* * `zoho` - zoho
|
|
214
|
+
* * `aol` - aol
|
|
215
|
+
* * `fastmail` - fastmail
|
|
216
|
+
* * `gmx` - gmx
|
|
217
|
+
* * `mailcom` - mailcom
|
|
218
|
+
* * `mail_ru` - mail_ru
|
|
219
|
+
* * `yandex` - yandex
|
|
220
|
+
* * `rambler` - rambler
|
|
221
|
+
* * `qq` - qq
|
|
222
|
+
* * `netease` - netease
|
|
223
|
+
* * `sina` - sina
|
|
224
|
+
* * `aliyun` - aliyun
|
|
225
|
+
* * `naver` - naver
|
|
226
|
+
* * `daum` - daum
|
|
227
|
+
* * `web_de` - web_de
|
|
228
|
+
* * `tonline` - tonline
|
|
229
|
+
* * `seznam` - seznam
|
|
230
|
+
* * `wp_pl` - wp_pl
|
|
231
|
+
* * `o2_pl` - o2_pl
|
|
232
|
+
* * `interia` - interia
|
|
233
|
+
* * `libero` - libero
|
|
234
|
+
* * `virgilio` - virgilio
|
|
235
|
+
* * `orange` - orange
|
|
236
|
+
* * `laposte` - laposte
|
|
237
|
+
* * `free_fr` - free_fr
|
|
238
|
+
* * `sfr` - sfr
|
|
239
|
+
*/
|
|
240
|
+
provider: WebmailLinkProviderEnum;
|
|
241
|
+
/**
|
|
242
|
+
* Human-facing provider name, e.g. 'Gmail'.
|
|
243
|
+
*/
|
|
244
|
+
provider_name: string;
|
|
245
|
+
/**
|
|
246
|
+
* Absolute URL to open in a new tab (a sender-filtered search, or the inbox as fallback).
|
|
247
|
+
*/
|
|
248
|
+
url: string;
|
|
249
|
+
/**
|
|
250
|
+
* True if the URL opens a search filtered to our sender; False if it only opens the inbox.
|
|
251
|
+
*/
|
|
252
|
+
is_search: boolean;
|
|
253
|
+
};
|
|
254
|
+
/**
|
|
255
|
+
* * `gmail` - gmail
|
|
256
|
+
* * `outlook` - outlook
|
|
257
|
+
* * `yahoo` - yahoo
|
|
258
|
+
* * `icloud` - icloud
|
|
259
|
+
* * `proton` - proton
|
|
260
|
+
* * `zoho` - zoho
|
|
261
|
+
* * `aol` - aol
|
|
262
|
+
* * `fastmail` - fastmail
|
|
263
|
+
* * `gmx` - gmx
|
|
264
|
+
* * `mailcom` - mailcom
|
|
265
|
+
* * `mail_ru` - mail_ru
|
|
266
|
+
* * `yandex` - yandex
|
|
267
|
+
* * `rambler` - rambler
|
|
268
|
+
* * `qq` - qq
|
|
269
|
+
* * `netease` - netease
|
|
270
|
+
* * `sina` - sina
|
|
271
|
+
* * `aliyun` - aliyun
|
|
272
|
+
* * `naver` - naver
|
|
273
|
+
* * `daum` - daum
|
|
274
|
+
* * `web_de` - web_de
|
|
275
|
+
* * `tonline` - tonline
|
|
276
|
+
* * `seznam` - seznam
|
|
277
|
+
* * `wp_pl` - wp_pl
|
|
278
|
+
* * `o2_pl` - o2_pl
|
|
279
|
+
* * `interia` - interia
|
|
280
|
+
* * `libero` - libero
|
|
281
|
+
* * `virgilio` - virgilio
|
|
282
|
+
* * `orange` - orange
|
|
283
|
+
* * `laposte` - laposte
|
|
284
|
+
* * `free_fr` - free_fr
|
|
285
|
+
* * `sfr` - sfr
|
|
286
|
+
*/
|
|
287
|
+
declare enum WebmailLinkProviderEnum {
|
|
288
|
+
GMAIL = "gmail",
|
|
289
|
+
OUTLOOK = "outlook",
|
|
290
|
+
YAHOO = "yahoo",
|
|
291
|
+
ICLOUD = "icloud",
|
|
292
|
+
PROTON = "proton",
|
|
293
|
+
ZOHO = "zoho",
|
|
294
|
+
AOL = "aol",
|
|
295
|
+
FASTMAIL = "fastmail",
|
|
296
|
+
GMX = "gmx",
|
|
297
|
+
MAILCOM = "mailcom",
|
|
298
|
+
MAIL_RU = "mail_ru",
|
|
299
|
+
YANDEX = "yandex",
|
|
300
|
+
RAMBLER = "rambler",
|
|
301
|
+
QQ = "qq",
|
|
302
|
+
NETEASE = "netease",
|
|
303
|
+
SINA = "sina",
|
|
304
|
+
ALIYUN = "aliyun",
|
|
305
|
+
NAVER = "naver",
|
|
306
|
+
DAUM = "daum",
|
|
307
|
+
WEB_DE = "web_de",
|
|
308
|
+
TONLINE = "tonline",
|
|
309
|
+
SEZNAM = "seznam",
|
|
310
|
+
WP_PL = "wp_pl",
|
|
311
|
+
O2_PL = "o2_pl",
|
|
312
|
+
INTERIA = "interia",
|
|
313
|
+
LIBERO = "libero",
|
|
314
|
+
VIRGILIO = "virgilio",
|
|
315
|
+
ORANGE = "orange",
|
|
316
|
+
LAPOSTE = "laposte",
|
|
317
|
+
FREE_FR = "free_fr",
|
|
318
|
+
SFR = "sfr"
|
|
319
|
+
}
|
|
193
320
|
|
|
194
321
|
/**
|
|
195
322
|
* Auth Form Types
|
|
@@ -204,6 +331,8 @@ interface OTPRequestResult {
|
|
|
204
331
|
message: string;
|
|
205
332
|
statusCode?: number;
|
|
206
333
|
retryAfter?: number;
|
|
334
|
+
/** Webmail deep-link for the recipient's provider, or null if unknown. */
|
|
335
|
+
webmail?: WebmailLink | null;
|
|
207
336
|
}
|
|
208
337
|
interface AuthFormState {
|
|
209
338
|
/** Email address */
|
|
@@ -232,6 +361,8 @@ interface AuthFormState {
|
|
|
232
361
|
isRateLimited: boolean;
|
|
233
362
|
/** Formatted countdown label, e.g. "19:00" or "42s" */
|
|
234
363
|
rateLimitLabel: string;
|
|
364
|
+
/** Webmail deep-link for the current identifier's provider (null = no button). */
|
|
365
|
+
webmail: WebmailLink | null;
|
|
235
366
|
}
|
|
236
367
|
interface AuthFormStateHandlers {
|
|
237
368
|
setIdentifier: (identifier: string) => void;
|
|
@@ -247,6 +378,8 @@ interface AuthFormStateHandlers {
|
|
|
247
378
|
setUseBackupCode: (useBackup: boolean) => void;
|
|
248
379
|
/** Start a countdown timer that disables submit for `seconds` seconds */
|
|
249
380
|
startRateLimitCountdown: (seconds: number) => void;
|
|
381
|
+
/** Set (or clear) the webmail deep-link for the current identifier */
|
|
382
|
+
setWebmail: (webmail: WebmailLink | null) => void;
|
|
250
383
|
}
|
|
251
384
|
interface AuthFormSubmitHandlers {
|
|
252
385
|
handleIdentifierSubmit: (e: React.FormEvent) => Promise<void>;
|
|
@@ -817,7 +950,9 @@ interface UseTokenRefreshOptions {
|
|
|
817
950
|
onRefreshError?: (error: Error) => void;
|
|
818
951
|
}
|
|
819
952
|
/**
|
|
820
|
-
* Hook for automatic token refresh
|
|
953
|
+
* Hook for proactive automatic token refresh.
|
|
954
|
+
* (JWT expiry helpers live in ../utils/jwt so they can be unit-tested and
|
|
955
|
+
* reused by the auth-bootstrap validation path.)
|
|
821
956
|
*/
|
|
822
957
|
declare function useTokenRefresh(options?: UseTokenRefreshOptions): {
|
|
823
958
|
refreshToken: () => Promise<boolean>;
|
|
@@ -918,4 +1053,4 @@ declare const Analytics: {
|
|
|
918
1053
|
setUser(userId: string): void;
|
|
919
1054
|
};
|
|
920
1055
|
|
|
921
|
-
export { AUTH_CONSTANTS, type AccountsContextValue, AccountsProvider, Analytics, AnalyticsCategory, type AnalyticsCategoryType, AnalyticsEvent, type AnalyticsEventType, type AuthConfig, AuthContext, type AuthContextType, type AuthFormAutoSubmit, type AuthFormReturn, type AuthFormState, type AuthFormStateHandlers, type AuthFormSubmitHandlers, type AuthFormValidation, AuthProvider, type AuthProviderProps, type AuthStep, type DeleteAccountResult, type OTPRequestResult, type PatchedCfgUserUpdateRequest, PatchedCfgUserUpdateRequestSchema, type ProfileCacheOptions, type TwoFactorDevice, type TwoFactorSetupData, type UseAuthFormOptions, type UseAuthFormStateReturn, type UseAutoAuthOptions, type UseDeleteAccountReturn, type UseGithubAuthOptions, type UseGithubAuthReturn, type UseTwoFactorOptions, type UseTwoFactorReturn, type UseTwoFactorSetupOptions, type UseTwoFactorSetupReturn, type UseTwoFactorStatusReturn, type UserProfile, authLogger, clearProfileCache, decodeBase64, encodeBase64, formatAuthError, getCacheMetadata, getCachedProfile, hasValidCache, logger, setCachedProfile, useAccountsContext, useAuth, useAuthForm, useAuthFormState, useAuthGuard, useAuthRedirectManager, useAuthValidation, useAutoAuth, useBase64, useCfgRouter, useDeleteAccount, useGithubAuth, useLocalStorage, useQueryParams, useSessionStorage, useTokenRefresh, useTwoFactor, useTwoFactorSetup, useTwoFactorStatus, validateEmail, validateIdentifier };
|
|
1056
|
+
export { AUTH_CONSTANTS, type AccountsContextValue, AccountsProvider, Analytics, AnalyticsCategory, type AnalyticsCategoryType, AnalyticsEvent, type AnalyticsEventType, type AuthConfig, AuthContext, type AuthContextType, type AuthFormAutoSubmit, type AuthFormReturn, type AuthFormState, type AuthFormStateHandlers, type AuthFormSubmitHandlers, type AuthFormValidation, AuthProvider, type AuthProviderProps, type AuthStep, type DeleteAccountResult, type OTPRequestResult, type PatchedCfgUserUpdateRequest, PatchedCfgUserUpdateRequestSchema, type ProfileCacheOptions, type TwoFactorDevice, type TwoFactorSetupData, type UseAuthFormOptions, type UseAuthFormStateReturn, type UseAutoAuthOptions, type UseDeleteAccountReturn, type UseGithubAuthOptions, type UseGithubAuthReturn, type UseTwoFactorOptions, type UseTwoFactorReturn, type UseTwoFactorSetupOptions, type UseTwoFactorSetupReturn, type UseTwoFactorStatusReturn, type UserProfile, type WebmailLink, authLogger, clearProfileCache, decodeBase64, encodeBase64, formatAuthError, getCacheMetadata, getCachedProfile, hasValidCache, logger, setCachedProfile, useAccountsContext, useAuth, useAuthForm, useAuthFormState, useAuthGuard, useAuthRedirectManager, useAuthValidation, useAutoAuth, useBase64, useCfgRouter, useDeleteAccount, useGithubAuth, useLocalStorage, useQueryParams, useSessionStorage, useTokenRefresh, useTwoFactor, useTwoFactorSetup, useTwoFactorStatus, validateEmail, validateIdentifier };
|
package/dist/auth.d.ts
CHANGED
|
@@ -73,6 +73,10 @@ type OtpRequestResponse = {
|
|
|
73
73
|
* Success message
|
|
74
74
|
*/
|
|
75
75
|
message: string;
|
|
76
|
+
/**
|
|
77
|
+
* Webmail deep-link for the recipient's provider, or null if the domain is unknown.
|
|
78
|
+
*/
|
|
79
|
+
webmail?: WebmailLink | null;
|
|
76
80
|
};
|
|
77
81
|
/**
|
|
78
82
|
* Serializer for OTP verification.
|
|
@@ -190,6 +194,129 @@ type User = {
|
|
|
190
194
|
readonly centrifugo: CentrifugoToken | null;
|
|
191
195
|
readonly api_key: string | null;
|
|
192
196
|
};
|
|
197
|
+
/**
|
|
198
|
+
* Deep-link that opens the user's webmail on a search for our login email.
|
|
199
|
+
*
|
|
200
|
+
* Present only when the recipient's email domain maps to a known webmail
|
|
201
|
+
* provider (Gmail, Outlook, Mail.ru, Yandex, iCloud, …). For unknown/corporate
|
|
202
|
+
* domains this whole object is null and the frontend shows no button.
|
|
203
|
+
*/
|
|
204
|
+
type WebmailLink = {
|
|
205
|
+
/**
|
|
206
|
+
* Provider slug (e.g. 'gmail', 'outlook', 'mail_ru'). Also selects the brand icon on the frontend.
|
|
207
|
+
*
|
|
208
|
+
* * `gmail` - gmail
|
|
209
|
+
* * `outlook` - outlook
|
|
210
|
+
* * `yahoo` - yahoo
|
|
211
|
+
* * `icloud` - icloud
|
|
212
|
+
* * `proton` - proton
|
|
213
|
+
* * `zoho` - zoho
|
|
214
|
+
* * `aol` - aol
|
|
215
|
+
* * `fastmail` - fastmail
|
|
216
|
+
* * `gmx` - gmx
|
|
217
|
+
* * `mailcom` - mailcom
|
|
218
|
+
* * `mail_ru` - mail_ru
|
|
219
|
+
* * `yandex` - yandex
|
|
220
|
+
* * `rambler` - rambler
|
|
221
|
+
* * `qq` - qq
|
|
222
|
+
* * `netease` - netease
|
|
223
|
+
* * `sina` - sina
|
|
224
|
+
* * `aliyun` - aliyun
|
|
225
|
+
* * `naver` - naver
|
|
226
|
+
* * `daum` - daum
|
|
227
|
+
* * `web_de` - web_de
|
|
228
|
+
* * `tonline` - tonline
|
|
229
|
+
* * `seznam` - seznam
|
|
230
|
+
* * `wp_pl` - wp_pl
|
|
231
|
+
* * `o2_pl` - o2_pl
|
|
232
|
+
* * `interia` - interia
|
|
233
|
+
* * `libero` - libero
|
|
234
|
+
* * `virgilio` - virgilio
|
|
235
|
+
* * `orange` - orange
|
|
236
|
+
* * `laposte` - laposte
|
|
237
|
+
* * `free_fr` - free_fr
|
|
238
|
+
* * `sfr` - sfr
|
|
239
|
+
*/
|
|
240
|
+
provider: WebmailLinkProviderEnum;
|
|
241
|
+
/**
|
|
242
|
+
* Human-facing provider name, e.g. 'Gmail'.
|
|
243
|
+
*/
|
|
244
|
+
provider_name: string;
|
|
245
|
+
/**
|
|
246
|
+
* Absolute URL to open in a new tab (a sender-filtered search, or the inbox as fallback).
|
|
247
|
+
*/
|
|
248
|
+
url: string;
|
|
249
|
+
/**
|
|
250
|
+
* True if the URL opens a search filtered to our sender; False if it only opens the inbox.
|
|
251
|
+
*/
|
|
252
|
+
is_search: boolean;
|
|
253
|
+
};
|
|
254
|
+
/**
|
|
255
|
+
* * `gmail` - gmail
|
|
256
|
+
* * `outlook` - outlook
|
|
257
|
+
* * `yahoo` - yahoo
|
|
258
|
+
* * `icloud` - icloud
|
|
259
|
+
* * `proton` - proton
|
|
260
|
+
* * `zoho` - zoho
|
|
261
|
+
* * `aol` - aol
|
|
262
|
+
* * `fastmail` - fastmail
|
|
263
|
+
* * `gmx` - gmx
|
|
264
|
+
* * `mailcom` - mailcom
|
|
265
|
+
* * `mail_ru` - mail_ru
|
|
266
|
+
* * `yandex` - yandex
|
|
267
|
+
* * `rambler` - rambler
|
|
268
|
+
* * `qq` - qq
|
|
269
|
+
* * `netease` - netease
|
|
270
|
+
* * `sina` - sina
|
|
271
|
+
* * `aliyun` - aliyun
|
|
272
|
+
* * `naver` - naver
|
|
273
|
+
* * `daum` - daum
|
|
274
|
+
* * `web_de` - web_de
|
|
275
|
+
* * `tonline` - tonline
|
|
276
|
+
* * `seznam` - seznam
|
|
277
|
+
* * `wp_pl` - wp_pl
|
|
278
|
+
* * `o2_pl` - o2_pl
|
|
279
|
+
* * `interia` - interia
|
|
280
|
+
* * `libero` - libero
|
|
281
|
+
* * `virgilio` - virgilio
|
|
282
|
+
* * `orange` - orange
|
|
283
|
+
* * `laposte` - laposte
|
|
284
|
+
* * `free_fr` - free_fr
|
|
285
|
+
* * `sfr` - sfr
|
|
286
|
+
*/
|
|
287
|
+
declare enum WebmailLinkProviderEnum {
|
|
288
|
+
GMAIL = "gmail",
|
|
289
|
+
OUTLOOK = "outlook",
|
|
290
|
+
YAHOO = "yahoo",
|
|
291
|
+
ICLOUD = "icloud",
|
|
292
|
+
PROTON = "proton",
|
|
293
|
+
ZOHO = "zoho",
|
|
294
|
+
AOL = "aol",
|
|
295
|
+
FASTMAIL = "fastmail",
|
|
296
|
+
GMX = "gmx",
|
|
297
|
+
MAILCOM = "mailcom",
|
|
298
|
+
MAIL_RU = "mail_ru",
|
|
299
|
+
YANDEX = "yandex",
|
|
300
|
+
RAMBLER = "rambler",
|
|
301
|
+
QQ = "qq",
|
|
302
|
+
NETEASE = "netease",
|
|
303
|
+
SINA = "sina",
|
|
304
|
+
ALIYUN = "aliyun",
|
|
305
|
+
NAVER = "naver",
|
|
306
|
+
DAUM = "daum",
|
|
307
|
+
WEB_DE = "web_de",
|
|
308
|
+
TONLINE = "tonline",
|
|
309
|
+
SEZNAM = "seznam",
|
|
310
|
+
WP_PL = "wp_pl",
|
|
311
|
+
O2_PL = "o2_pl",
|
|
312
|
+
INTERIA = "interia",
|
|
313
|
+
LIBERO = "libero",
|
|
314
|
+
VIRGILIO = "virgilio",
|
|
315
|
+
ORANGE = "orange",
|
|
316
|
+
LAPOSTE = "laposte",
|
|
317
|
+
FREE_FR = "free_fr",
|
|
318
|
+
SFR = "sfr"
|
|
319
|
+
}
|
|
193
320
|
|
|
194
321
|
/**
|
|
195
322
|
* Auth Form Types
|
|
@@ -204,6 +331,8 @@ interface OTPRequestResult {
|
|
|
204
331
|
message: string;
|
|
205
332
|
statusCode?: number;
|
|
206
333
|
retryAfter?: number;
|
|
334
|
+
/** Webmail deep-link for the recipient's provider, or null if unknown. */
|
|
335
|
+
webmail?: WebmailLink | null;
|
|
207
336
|
}
|
|
208
337
|
interface AuthFormState {
|
|
209
338
|
/** Email address */
|
|
@@ -232,6 +361,8 @@ interface AuthFormState {
|
|
|
232
361
|
isRateLimited: boolean;
|
|
233
362
|
/** Formatted countdown label, e.g. "19:00" or "42s" */
|
|
234
363
|
rateLimitLabel: string;
|
|
364
|
+
/** Webmail deep-link for the current identifier's provider (null = no button). */
|
|
365
|
+
webmail: WebmailLink | null;
|
|
235
366
|
}
|
|
236
367
|
interface AuthFormStateHandlers {
|
|
237
368
|
setIdentifier: (identifier: string) => void;
|
|
@@ -247,6 +378,8 @@ interface AuthFormStateHandlers {
|
|
|
247
378
|
setUseBackupCode: (useBackup: boolean) => void;
|
|
248
379
|
/** Start a countdown timer that disables submit for `seconds` seconds */
|
|
249
380
|
startRateLimitCountdown: (seconds: number) => void;
|
|
381
|
+
/** Set (or clear) the webmail deep-link for the current identifier */
|
|
382
|
+
setWebmail: (webmail: WebmailLink | null) => void;
|
|
250
383
|
}
|
|
251
384
|
interface AuthFormSubmitHandlers {
|
|
252
385
|
handleIdentifierSubmit: (e: React.FormEvent) => Promise<void>;
|
|
@@ -817,7 +950,9 @@ interface UseTokenRefreshOptions {
|
|
|
817
950
|
onRefreshError?: (error: Error) => void;
|
|
818
951
|
}
|
|
819
952
|
/**
|
|
820
|
-
* Hook for automatic token refresh
|
|
953
|
+
* Hook for proactive automatic token refresh.
|
|
954
|
+
* (JWT expiry helpers live in ../utils/jwt so they can be unit-tested and
|
|
955
|
+
* reused by the auth-bootstrap validation path.)
|
|
821
956
|
*/
|
|
822
957
|
declare function useTokenRefresh(options?: UseTokenRefreshOptions): {
|
|
823
958
|
refreshToken: () => Promise<boolean>;
|
|
@@ -918,4 +1053,4 @@ declare const Analytics: {
|
|
|
918
1053
|
setUser(userId: string): void;
|
|
919
1054
|
};
|
|
920
1055
|
|
|
921
|
-
export { AUTH_CONSTANTS, type AccountsContextValue, AccountsProvider, Analytics, AnalyticsCategory, type AnalyticsCategoryType, AnalyticsEvent, type AnalyticsEventType, type AuthConfig, AuthContext, type AuthContextType, type AuthFormAutoSubmit, type AuthFormReturn, type AuthFormState, type AuthFormStateHandlers, type AuthFormSubmitHandlers, type AuthFormValidation, AuthProvider, type AuthProviderProps, type AuthStep, type DeleteAccountResult, type OTPRequestResult, type PatchedCfgUserUpdateRequest, PatchedCfgUserUpdateRequestSchema, type ProfileCacheOptions, type TwoFactorDevice, type TwoFactorSetupData, type UseAuthFormOptions, type UseAuthFormStateReturn, type UseAutoAuthOptions, type UseDeleteAccountReturn, type UseGithubAuthOptions, type UseGithubAuthReturn, type UseTwoFactorOptions, type UseTwoFactorReturn, type UseTwoFactorSetupOptions, type UseTwoFactorSetupReturn, type UseTwoFactorStatusReturn, type UserProfile, authLogger, clearProfileCache, decodeBase64, encodeBase64, formatAuthError, getCacheMetadata, getCachedProfile, hasValidCache, logger, setCachedProfile, useAccountsContext, useAuth, useAuthForm, useAuthFormState, useAuthGuard, useAuthRedirectManager, useAuthValidation, useAutoAuth, useBase64, useCfgRouter, useDeleteAccount, useGithubAuth, useLocalStorage, useQueryParams, useSessionStorage, useTokenRefresh, useTwoFactor, useTwoFactorSetup, useTwoFactorStatus, validateEmail, validateIdentifier };
|
|
1056
|
+
export { AUTH_CONSTANTS, type AccountsContextValue, AccountsProvider, Analytics, AnalyticsCategory, type AnalyticsCategoryType, AnalyticsEvent, type AnalyticsEventType, type AuthConfig, AuthContext, type AuthContextType, type AuthFormAutoSubmit, type AuthFormReturn, type AuthFormState, type AuthFormStateHandlers, type AuthFormSubmitHandlers, type AuthFormValidation, AuthProvider, type AuthProviderProps, type AuthStep, type DeleteAccountResult, type OTPRequestResult, type PatchedCfgUserUpdateRequest, PatchedCfgUserUpdateRequestSchema, type ProfileCacheOptions, type TwoFactorDevice, type TwoFactorSetupData, type UseAuthFormOptions, type UseAuthFormStateReturn, type UseAutoAuthOptions, type UseDeleteAccountReturn, type UseGithubAuthOptions, type UseGithubAuthReturn, type UseTwoFactorOptions, type UseTwoFactorReturn, type UseTwoFactorSetupOptions, type UseTwoFactorSetupReturn, type UseTwoFactorStatusReturn, type UserProfile, type WebmailLink, authLogger, clearProfileCache, decodeBase64, encodeBase64, formatAuthError, getCacheMetadata, getCachedProfile, hasValidCache, logger, setCachedProfile, useAccountsContext, useAuth, useAuthForm, useAuthFormState, useAuthGuard, useAuthRedirectManager, useAuthValidation, useAutoAuth, useBase64, useCfgRouter, useDeleteAccount, useGithubAuth, useLocalStorage, useQueryParams, useSessionStorage, useTokenRefresh, useTwoFactor, useTwoFactorSetup, useTwoFactorStatus, validateEmail, validateIdentifier };
|