nfx-ui 0.33.0 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +1 -1
- package/README.md +1 -1
- package/dist/events/system.d.ts +9 -0
- package/dist/events/system.d.ts.map +1 -1
- package/dist/events/system.js +9 -1
- package/dist/events/system.js.map +1 -1
- package/dist/hooks/auth.d.ts +9 -2
- package/dist/hooks/auth.d.ts.map +1 -1
- package/dist/hooks/auth.js +78 -67
- package/dist/hooks/auth.js.map +1 -1
- package/dist/providers/DataProvider/index.d.ts.map +1 -1
- package/dist/providers/DataProvider/index.js +63 -41
- package/dist/providers/DataProvider/index.js.map +1 -1
- package/package.json +1 -1
- package/src/events/system.ts +16 -0
- package/src/hooks/auth.ts +27 -7
- package/src/providers/DataProvider/index.tsx +39 -6
package/README.en.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
Shared React library for NebulaForgeX (theme, i18n, hooks). **Not** a standalone site. Hosts: Identity, Edge, News, Storages, Documentation.
|
|
6
6
|
|
|
7
|
-
Exports and host wiring: [NFX-Documentation chapter 7](https://github.com/NebulaForgeX/NFX-Documentation/blob/main/books/en/chapter-07-nfx-ui.md). Current **0.
|
|
7
|
+
Exports and host wiring: [NFX-Documentation chapter 7](https://github.com/NebulaForgeX/NFX-Documentation/blob/main/books/en/chapter-07-nfx-ui.md). Current **0.35.0**; hosts pin exactly `"nfx-ui": "0.35.0"`. No `file:` dual path.
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
10
|
npm install
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
NebulaForgeX 共享 React 库(主题、i18n、hooks)。**不是**独立站点。宿主:Identity、Edge、News、Storages、Documentation。
|
|
6
6
|
|
|
7
|
-
接入与真实导出:[NFX-Documentation 第七章](https://github.com/NebulaForgeX/NFX-Documentation/blob/main/books/zh/chapter-07-nfx-ui.md)。当前 **0.
|
|
7
|
+
接入与真实导出:[NFX-Documentation 第七章](https://github.com/NebulaForgeX/NFX-Documentation/blob/main/books/zh/chapter-07-nfx-ui.md)。当前 **0.35.0**,宿主精确钉 `"nfx-ui": "0.35.0"`。不要 `file:` 双路径。
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
10
|
npm install
|
package/dist/events/system.d.ts
CHANGED
|
@@ -5,6 +5,8 @@ import { EventNamesOf, EventEmitter } from './EventEmitter';
|
|
|
5
5
|
export declare const systemEvents: import('./EventEmitter').DefinedEvents<{
|
|
6
6
|
SHOW_ERROR: string;
|
|
7
7
|
SHOW_SUCCESS: string;
|
|
8
|
+
SHOW_LOADING: string;
|
|
9
|
+
HIDE_LOADING: string;
|
|
8
10
|
}>;
|
|
9
11
|
type SystemEvent = EventNamesOf<typeof systemEvents>;
|
|
10
12
|
export type SystemShowErrorPayload = {
|
|
@@ -16,14 +18,21 @@ export type SystemShowSuccessPayload = string | {
|
|
|
16
18
|
title?: string;
|
|
17
19
|
onClick?: () => void;
|
|
18
20
|
};
|
|
21
|
+
export type SystemShowLoadingPayload = {
|
|
22
|
+
message?: string;
|
|
23
|
+
};
|
|
19
24
|
type SystemPayloadMap = {
|
|
20
25
|
"SYSTEM:SHOW_ERROR": SystemShowErrorPayload;
|
|
21
26
|
"SYSTEM:SHOW_SUCCESS": SystemShowSuccessPayload;
|
|
27
|
+
"SYSTEM:SHOW_LOADING": SystemShowLoadingPayload;
|
|
28
|
+
"SYSTEM:HIDE_LOADING": void;
|
|
22
29
|
};
|
|
23
30
|
declare class SystemEventEmitter extends EventEmitter<SystemEvent, SystemPayloadMap> {
|
|
24
31
|
constructor();
|
|
25
32
|
showError(message: string, title?: string): void;
|
|
26
33
|
showSuccess(props: SystemShowSuccessPayload): void;
|
|
34
|
+
showLoading(message?: string): void;
|
|
35
|
+
hideLoading(): void;
|
|
27
36
|
}
|
|
28
37
|
export declare const systemEventEmitter: SystemEventEmitter;
|
|
29
38
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/events/system.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,OAAO,EAAgB,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAGxE;;GAEG;AACH,eAAO,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/events/system.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,OAAO,EAAgB,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAGxE;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;EAKvB,CAAC;AAEH,KAAK,WAAW,GAAG,YAAY,CAAC,OAAO,YAAY,CAAC,CAAC;AAErD,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAChC,MAAM,GACN;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEN,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,mBAAmB,EAAE,sBAAsB,CAAC;IAC5C,qBAAqB,EAAE,wBAAwB,CAAC;IAChD,qBAAqB,EAAE,wBAAwB,CAAC;IAChD,qBAAqB,EAAE,IAAI,CAAC;CAC7B,CAAC;AAEF,cAAM,kBAAmB,SAAQ,YAAY,CAAC,WAAW,EAAE,gBAAgB,CAAC;;IAK1E,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAIzC,WAAW,CAAC,KAAK,EAAE,wBAAwB;IAI3C,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM;IAI5B,WAAW;CAGZ;AAED,eAAO,MAAM,kBAAkB,oBAAwC,CAAC"}
|
package/dist/events/system.js
CHANGED
|
@@ -3,7 +3,9 @@ import { singleton as n } from "../utils/singleton.js";
|
|
|
3
3
|
//#region src/events/system.ts
|
|
4
4
|
var r = t({
|
|
5
5
|
SHOW_ERROR: "SYSTEM:SHOW_ERROR",
|
|
6
|
-
SHOW_SUCCESS: "SYSTEM:SHOW_SUCCESS"
|
|
6
|
+
SHOW_SUCCESS: "SYSTEM:SHOW_SUCCESS",
|
|
7
|
+
SHOW_LOADING: "SYSTEM:SHOW_LOADING",
|
|
8
|
+
HIDE_LOADING: "SYSTEM:HIDE_LOADING"
|
|
7
9
|
}), i = new (n(class extends e {
|
|
8
10
|
constructor() {
|
|
9
11
|
super(r);
|
|
@@ -17,6 +19,12 @@ var r = t({
|
|
|
17
19
|
showSuccess(e) {
|
|
18
20
|
this.emit(r.SHOW_SUCCESS, e);
|
|
19
21
|
}
|
|
22
|
+
showLoading(e) {
|
|
23
|
+
this.emit(r.SHOW_LOADING, { message: e });
|
|
24
|
+
}
|
|
25
|
+
hideLoading() {
|
|
26
|
+
this.emit(r.HIDE_LOADING);
|
|
27
|
+
}
|
|
20
28
|
}))();
|
|
21
29
|
//#endregion
|
|
22
30
|
export { i as systemEventEmitter, r as systemEvents };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system.js","names":[],"sources":["../../src/events/system.ts"],"sourcesContent":["import type { EventNamesOf } from \"nfx-ui/events/EventEmitter\";\n\nimport { defineEvents, EventEmitter } from \"nfx-ui/events/EventEmitter\";\nimport { singleton } from \"nfx-ui/utils/singleton\";\n\n/**\n * Host-agnostic UI feedback. Package emits; WEB ModalProvider listens.\n */\nexport const systemEvents = defineEvents({\n SHOW_ERROR: \"SYSTEM:SHOW_ERROR\",\n SHOW_SUCCESS: \"SYSTEM:SHOW_SUCCESS\",\n});\n\ntype SystemEvent = EventNamesOf<typeof systemEvents>;\n\nexport type SystemShowErrorPayload = {\n message: string;\n title?: string;\n};\n\nexport type SystemShowSuccessPayload =\n | string\n | {\n message: string;\n title?: string;\n onClick?: () => void;\n };\n\ntype SystemPayloadMap = {\n \"SYSTEM:SHOW_ERROR\": SystemShowErrorPayload;\n \"SYSTEM:SHOW_SUCCESS\": SystemShowSuccessPayload;\n};\n\nclass SystemEventEmitter extends EventEmitter<SystemEvent, SystemPayloadMap> {\n constructor() {\n super(systemEvents);\n }\n\n showError(message: string, title?: string) {\n this.emit(systemEvents.SHOW_ERROR, { message, title });\n }\n\n showSuccess(props: SystemShowSuccessPayload) {\n this.emit(systemEvents.SHOW_SUCCESS, props);\n }\n}\n\nexport const systemEventEmitter = new (singleton(SystemEventEmitter))();\n"],"mappings":";;;AAQA,IAAa,IAAe,EAAa;CACvC,YAAY;CACZ,cAAc;AAChB,CAAC,
|
|
1
|
+
{"version":3,"file":"system.js","names":[],"sources":["../../src/events/system.ts"],"sourcesContent":["import type { EventNamesOf } from \"nfx-ui/events/EventEmitter\";\n\nimport { defineEvents, EventEmitter } from \"nfx-ui/events/EventEmitter\";\nimport { singleton } from \"nfx-ui/utils/singleton\";\n\n/**\n * Host-agnostic UI feedback. Package emits; WEB ModalProvider listens.\n */\nexport const systemEvents = defineEvents({\n SHOW_ERROR: \"SYSTEM:SHOW_ERROR\",\n SHOW_SUCCESS: \"SYSTEM:SHOW_SUCCESS\",\n SHOW_LOADING: \"SYSTEM:SHOW_LOADING\",\n HIDE_LOADING: \"SYSTEM:HIDE_LOADING\",\n});\n\ntype SystemEvent = EventNamesOf<typeof systemEvents>;\n\nexport type SystemShowErrorPayload = {\n message: string;\n title?: string;\n};\n\nexport type SystemShowSuccessPayload =\n | string\n | {\n message: string;\n title?: string;\n onClick?: () => void;\n };\n\nexport type SystemShowLoadingPayload = {\n message?: string;\n};\n\ntype SystemPayloadMap = {\n \"SYSTEM:SHOW_ERROR\": SystemShowErrorPayload;\n \"SYSTEM:SHOW_SUCCESS\": SystemShowSuccessPayload;\n \"SYSTEM:SHOW_LOADING\": SystemShowLoadingPayload;\n \"SYSTEM:HIDE_LOADING\": void;\n};\n\nclass SystemEventEmitter extends EventEmitter<SystemEvent, SystemPayloadMap> {\n constructor() {\n super(systemEvents);\n }\n\n showError(message: string, title?: string) {\n this.emit(systemEvents.SHOW_ERROR, { message, title });\n }\n\n showSuccess(props: SystemShowSuccessPayload) {\n this.emit(systemEvents.SHOW_SUCCESS, props);\n }\n\n showLoading(message?: string) {\n this.emit(systemEvents.SHOW_LOADING, { message });\n }\n\n hideLoading() {\n this.emit(systemEvents.HIDE_LOADING);\n }\n}\n\nexport const systemEventEmitter = new (singleton(SystemEventEmitter))();\n"],"mappings":";;;AAQA,IAAa,IAAe,EAAa;CACvC,YAAY;CACZ,cAAc;CACd,cAAc;CACd,cAAc;AAChB,CAAC,GAkDY,IAAqB,KAAK,EAAU,cAtBhB,EAA4C;CAC3E,cAAc;EACZ,MAAM,CAAY;CACpB;CAEA,UAAU,GAAiB,GAAgB;EACzC,KAAK,KAAK,EAAa,YAAY;GAAE;GAAS;EAAM,CAAC;CACvD;CAEA,YAAY,GAAiC;EAC3C,KAAK,KAAK,EAAa,cAAc,CAAK;CAC5C;CAEA,YAAY,GAAkB;EAC5B,KAAK,KAAK,EAAa,cAAc,EAAE,WAAQ,CAAC;CAClD;CAEA,cAAc;EACZ,KAAK,KAAK,EAAa,YAAY;CACrC;AACF,CAEmE,GAAG"}
|
package/dist/hooks/auth.d.ts
CHANGED
|
@@ -24,10 +24,17 @@ export declare const useLoginWithPhone: () => import('@tanstack/react-query').Us
|
|
|
24
24
|
password: string;
|
|
25
25
|
rememberMe: boolean;
|
|
26
26
|
}, unknown>;
|
|
27
|
-
export
|
|
27
|
+
export type SelectProfileOptions = {
|
|
28
|
+
/** 已翻译的加载文案。Host-translated loading copy. */
|
|
29
|
+
switchingMsg?: string;
|
|
30
|
+
/** 与 token、档案同一次提交里执行(例如跳到该档案的首页)。Runs in the same commit as the token and profile. */
|
|
31
|
+
onCommit?: () => void;
|
|
32
|
+
};
|
|
33
|
+
/** 两步登录第二步:切换当前 profile,重新签发 token。kind 决定后端分派到社区/权限档。 */
|
|
34
|
+
export declare const useSelectProfile: (options?: SelectProfileOptions) => import('@tanstack/react-query').UseMutationResult<Login.Response.SelectProfile, AxiosError<unknown, any, any>, {
|
|
28
35
|
profileId: string;
|
|
29
36
|
kind: Login.ProfileKind;
|
|
30
|
-
},
|
|
37
|
+
}, void>;
|
|
31
38
|
export declare const usePatchProfile: (options?: {
|
|
32
39
|
silent?: boolean;
|
|
33
40
|
}) => import('@tanstack/react-query').UseMutationResult<void, AxiosError<unknown, any, any>, Profile.Request.PatchProfile, unknown>;
|
package/dist/hooks/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/hooks/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/hooks/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/hooks/auth.js
CHANGED
|
@@ -13,8 +13,9 @@ import { pickProfile as k } from "../utils/domain/account.js";
|
|
|
13
13
|
import { useEffect as A } from "react";
|
|
14
14
|
import { useTranslation as j } from "react-i18next";
|
|
15
15
|
import { useMutation as M } from "@tanstack/react-query";
|
|
16
|
+
import { flushSync as N } from "react-dom";
|
|
16
17
|
//#region src/hooks/auth.ts
|
|
17
|
-
function
|
|
18
|
+
function P() {
|
|
18
19
|
let e = m((e) => e.currentAccountId), t = m((e) => e.currentProfileId), n = m((e) => e.isAuthValid), r = m((e) => e.currentProfileKind);
|
|
19
20
|
return {
|
|
20
21
|
aID: e,
|
|
@@ -24,14 +25,14 @@ function N() {
|
|
|
24
25
|
profileScope: r
|
|
25
26
|
};
|
|
26
27
|
}
|
|
27
|
-
function
|
|
28
|
+
function F(e, t) {
|
|
28
29
|
A(() => {
|
|
29
30
|
e && a.getState().isAuthValid && c(a.getState().currentProfileId) && (_.emit(v.LOGOUT, t), s());
|
|
30
31
|
}, [e, t]);
|
|
31
32
|
}
|
|
32
|
-
function
|
|
33
|
-
let e = y(), { aID: t, pID: n, isAuthValid: r, kind: i } =
|
|
34
|
-
return
|
|
33
|
+
function I() {
|
|
34
|
+
let e = y(), { aID: t, pID: n, isAuthValid: r, kind: i } = P(), a = O(({ kind: t }) => e.GetCurrentFullAccountInformationWithProfile(t), x(t, n), { kind: i }, { enabled: r && c(n) });
|
|
35
|
+
return F(a.isError, t), {
|
|
35
36
|
kind: i,
|
|
36
37
|
data: a.data,
|
|
37
38
|
profile: k(i, a.data),
|
|
@@ -40,7 +41,7 @@ function F() {
|
|
|
40
41
|
refetch: a.refetch
|
|
41
42
|
};
|
|
42
43
|
}
|
|
43
|
-
var
|
|
44
|
+
var L = () => {
|
|
44
45
|
let e = y(), { t } = j("hooks", { keyPrefix: "account" });
|
|
45
46
|
return M({
|
|
46
47
|
mutationFn: (t) => e.SendVerificationCode(t),
|
|
@@ -51,7 +52,7 @@ var I = () => {
|
|
|
51
52
|
D.showError(g(e, "[useSendVerificationCode] error"));
|
|
52
53
|
}
|
|
53
54
|
});
|
|
54
|
-
},
|
|
55
|
+
}, R = () => {
|
|
55
56
|
let e = y();
|
|
56
57
|
return M({
|
|
57
58
|
mutationFn: async ({ rememberMe: t, ...n }) => {
|
|
@@ -71,7 +72,7 @@ var I = () => {
|
|
|
71
72
|
D.showError(g(e, "[useSignup] error"));
|
|
72
73
|
}
|
|
73
74
|
});
|
|
74
|
-
},
|
|
75
|
+
}, z = () => {
|
|
75
76
|
let e = y();
|
|
76
77
|
return M({
|
|
77
78
|
mutationFn: async ({ rememberMe: t, ...n }) => e.LoginWithEmail({
|
|
@@ -88,7 +89,7 @@ var I = () => {
|
|
|
88
89
|
D.showError(g(e, "[useLogin] error"));
|
|
89
90
|
}
|
|
90
91
|
});
|
|
91
|
-
},
|
|
92
|
+
}, B = () => {
|
|
92
93
|
let e = y();
|
|
93
94
|
return M({
|
|
94
95
|
mutationFn: async ({ rememberMe: t, ...n }) => e.LoginWithPhone({
|
|
@@ -105,26 +106,36 @@ var I = () => {
|
|
|
105
106
|
D.showError(g(e, "[useLoginWithPhone] error"));
|
|
106
107
|
}
|
|
107
108
|
});
|
|
108
|
-
},
|
|
109
|
-
let
|
|
109
|
+
}, V = (e) => {
|
|
110
|
+
let n = y();
|
|
110
111
|
return M({
|
|
111
|
-
mutationFn: async ({ profileId:
|
|
112
|
-
profileId:
|
|
113
|
-
kind:
|
|
112
|
+
mutationFn: async ({ profileId: e, kind: t }) => n.SelectProfile({
|
|
113
|
+
profileId: e,
|
|
114
|
+
kind: t,
|
|
114
115
|
deviceId: await h()
|
|
115
116
|
}),
|
|
116
|
-
|
|
117
|
-
e?.
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
117
|
+
onMutate: () => {
|
|
118
|
+
e?.switchingMsg && D.showLoading(e.switchingMsg);
|
|
119
|
+
},
|
|
120
|
+
onSuccess: (n, r) => {
|
|
121
|
+
try {
|
|
122
|
+
if (!n?.accessToken) return;
|
|
123
|
+
N(() => {
|
|
124
|
+
p({
|
|
125
|
+
accessToken: n.accessToken,
|
|
126
|
+
refreshToken: t(n.refreshToken)
|
|
127
|
+
}), d(r.kind), n.profileId && u(n.profileId), e?.onCommit?.();
|
|
128
|
+
}), _.emit(v.LOGIN_SUCCESS, n.accountId);
|
|
129
|
+
} finally {
|
|
130
|
+
D.hideLoading();
|
|
131
|
+
}
|
|
121
132
|
},
|
|
122
133
|
onError: (e) => {
|
|
123
|
-
D.showError(g(e, "[useSelectProfile] error"));
|
|
134
|
+
D.hideLoading(), D.showError(g(e, "[useSelectProfile] error"));
|
|
124
135
|
}
|
|
125
136
|
});
|
|
126
|
-
},
|
|
127
|
-
let n = y(), { kind: r } =
|
|
137
|
+
}, H = (t) => {
|
|
138
|
+
let n = y(), { kind: r } = P(), i = e(t?.silent, !1), { t: o } = j("pages.User.Profile.Edit");
|
|
128
139
|
return M({
|
|
129
140
|
mutationFn: (e) => n.PatchProfile(r, e),
|
|
130
141
|
onSuccess: () => {
|
|
@@ -139,8 +150,8 @@ var I = () => {
|
|
|
139
150
|
i || D.showError(g(e, "[usePatchProfile] error"));
|
|
140
151
|
}
|
|
141
152
|
});
|
|
142
|
-
},
|
|
143
|
-
let e = y(), { kind: t } =
|
|
153
|
+
}, U = () => {
|
|
154
|
+
let e = y(), { kind: t } = P(), { t: n } = j("hooks", { keyPrefix: "account" });
|
|
144
155
|
return M({
|
|
145
156
|
mutationFn: (n) => e.PatchProfileSettings(t, n),
|
|
146
157
|
onSuccess: () => {
|
|
@@ -151,21 +162,21 @@ var I = () => {
|
|
|
151
162
|
D.showError(g(e, "[useUpdateProfileSettings] error"));
|
|
152
163
|
}
|
|
153
164
|
});
|
|
154
|
-
},
|
|
155
|
-
let e = y(), { kind: t } =
|
|
165
|
+
}, W = () => {
|
|
166
|
+
let e = y(), { kind: t } = P();
|
|
156
167
|
return M({
|
|
157
168
|
mutationFn: (n) => e.UpdatePreference(t, n),
|
|
158
169
|
onError: (e) => {
|
|
159
170
|
D.showError(g(e, "[useUpdatePreference] error"));
|
|
160
171
|
}
|
|
161
172
|
});
|
|
162
|
-
},
|
|
163
|
-
let t = y(), { aID: n, isAuthValid: r } =
|
|
173
|
+
}, G = (e) => {
|
|
174
|
+
let t = y(), { aID: n, isAuthValid: r } = P();
|
|
164
175
|
return O(() => t.ListProfiles(e, {
|
|
165
176
|
limit: 50,
|
|
166
177
|
offset: 0
|
|
167
178
|
}), ee(n, e), void 0, { enabled: r && !!n });
|
|
168
|
-
},
|
|
179
|
+
}, K = () => {
|
|
169
180
|
let e = y();
|
|
170
181
|
return M({
|
|
171
182
|
mutationFn: (t) => e.CreateForgerProfile(t),
|
|
@@ -180,7 +191,7 @@ var I = () => {
|
|
|
180
191
|
D.showError(g(e, "[useCreateForgerProfile] error"));
|
|
181
192
|
}
|
|
182
193
|
});
|
|
183
|
-
},
|
|
194
|
+
}, q = () => {
|
|
184
195
|
let e = y();
|
|
185
196
|
return M({
|
|
186
197
|
mutationFn: (t) => e.CreateAuthorityProfile(t),
|
|
@@ -195,7 +206,7 @@ var I = () => {
|
|
|
195
206
|
D.showError(g(e, "[useCreateAuthorityProfile] error"));
|
|
196
207
|
}
|
|
197
208
|
});
|
|
198
|
-
},
|
|
209
|
+
}, J = () => {
|
|
199
210
|
let e = y();
|
|
200
211
|
return M({
|
|
201
212
|
mutationFn: ({ kind: t, profileId: n }) => e.DeleteProfile(t, n),
|
|
@@ -210,8 +221,8 @@ var I = () => {
|
|
|
210
221
|
D.showError(g(e, "[useDeleteProfile] error"));
|
|
211
222
|
}
|
|
212
223
|
});
|
|
213
|
-
},
|
|
214
|
-
let e = y(), { kind: t } =
|
|
224
|
+
}, te = () => {
|
|
225
|
+
let e = y(), { kind: t } = P();
|
|
215
226
|
return M({
|
|
216
227
|
mutationFn: (n) => e.ConfirmProfileAvatar(t, n),
|
|
217
228
|
onSuccess: () => {
|
|
@@ -222,8 +233,8 @@ var I = () => {
|
|
|
222
233
|
D.showError(g(e, "[useConfirmProfileAvatar] error"));
|
|
223
234
|
}
|
|
224
235
|
});
|
|
225
|
-
},
|
|
226
|
-
let e = y(), { kind: t } =
|
|
236
|
+
}, Y = () => {
|
|
237
|
+
let e = y(), { kind: t } = P(), { t: n } = j("hooks", { keyPrefix: "account" });
|
|
227
238
|
return M({
|
|
228
239
|
mutationFn: () => e.ClearProfileAvatar(t),
|
|
229
240
|
onSuccess: () => {
|
|
@@ -234,19 +245,19 @@ var I = () => {
|
|
|
234
245
|
D.showError(g(e, "[useClearProfileAvatar] error"));
|
|
235
246
|
}
|
|
236
247
|
});
|
|
237
|
-
},
|
|
238
|
-
let e = y(), { aID: t, isAuthValid: n } =
|
|
248
|
+
}, X = () => {
|
|
249
|
+
let e = y(), { aID: t, isAuthValid: n } = P();
|
|
239
250
|
return O(() => e.ListEmails({
|
|
240
251
|
limit: 50,
|
|
241
252
|
offset: 0
|
|
242
253
|
}), b(t), void 0, { enabled: n && !!t });
|
|
243
|
-
},
|
|
244
|
-
let e = y(), { aID: t, isAuthValid: n } =
|
|
254
|
+
}, Z = () => {
|
|
255
|
+
let e = y(), { aID: t, isAuthValid: n } = P();
|
|
245
256
|
return O(() => e.ListPhones({
|
|
246
257
|
limit: 50,
|
|
247
258
|
offset: 0
|
|
248
259
|
}), w(t), void 0, { enabled: n && !!t });
|
|
249
|
-
},
|
|
260
|
+
}, Q = () => {
|
|
250
261
|
let e = y(), t = a.getState().currentAccountId, { t: n } = j("hooks", { keyPrefix: "account" });
|
|
251
262
|
return M({
|
|
252
263
|
mutationFn: (t) => e.CreateEmail(t),
|
|
@@ -257,7 +268,7 @@ var I = () => {
|
|
|
257
268
|
D.showError(g(e, "[useCreateEmail] error"));
|
|
258
269
|
}
|
|
259
270
|
});
|
|
260
|
-
},
|
|
271
|
+
}, ne = () => {
|
|
261
272
|
let e = y(), { t } = j("hooks", { keyPrefix: "account" });
|
|
262
273
|
return M({
|
|
263
274
|
mutationFn: ({ emailId: t, lang: n }) => e.SendEmailVerificationCode(t, { lang: n }),
|
|
@@ -268,7 +279,7 @@ var I = () => {
|
|
|
268
279
|
D.showError(g(e, "[useSendEmailVerificationCode] error"));
|
|
269
280
|
}
|
|
270
281
|
});
|
|
271
|
-
},
|
|
282
|
+
}, re = () => {
|
|
272
283
|
let e = y(), t = a.getState().currentAccountId, { t: n } = j("hooks", { keyPrefix: "account" });
|
|
273
284
|
return M({
|
|
274
285
|
mutationFn: ({ emailId: t, verificationCode: n }) => e.VerifyEmail(t, { verificationCode: n }),
|
|
@@ -279,7 +290,7 @@ var I = () => {
|
|
|
279
290
|
D.showError(g(e, "[useVerifyEmail] error"));
|
|
280
291
|
}
|
|
281
292
|
});
|
|
282
|
-
},
|
|
293
|
+
}, ie = () => {
|
|
283
294
|
let e = y(), t = a.getState().currentAccountId, { t: n } = j("hooks", { keyPrefix: "account" });
|
|
284
295
|
return M({
|
|
285
296
|
mutationFn: ({ emailId: t, email: n }) => e.UpdateEmail(t, { email: n }),
|
|
@@ -290,7 +301,7 @@ var I = () => {
|
|
|
290
301
|
D.showError(g(e, "[useUpdateEmail] error"));
|
|
291
302
|
}
|
|
292
303
|
});
|
|
293
|
-
},
|
|
304
|
+
}, ae = () => {
|
|
294
305
|
let e = y(), t = a.getState().currentAccountId, { t: n } = j("hooks", { keyPrefix: "account" });
|
|
295
306
|
return M({
|
|
296
307
|
mutationFn: (t) => e.SetPrimaryEmail(t),
|
|
@@ -301,7 +312,7 @@ var I = () => {
|
|
|
301
312
|
D.showError(g(e, "[useSetPrimaryEmail] error"));
|
|
302
313
|
}
|
|
303
314
|
});
|
|
304
|
-
},
|
|
315
|
+
}, oe = () => {
|
|
305
316
|
let e = y(), t = a.getState().currentAccountId, { t: n } = j("hooks", { keyPrefix: "account" });
|
|
306
317
|
return M({
|
|
307
318
|
mutationFn: (t) => e.DeleteEmail(t),
|
|
@@ -312,7 +323,7 @@ var I = () => {
|
|
|
312
323
|
D.showError(g(e, "[useDeleteEmail] error"));
|
|
313
324
|
}
|
|
314
325
|
});
|
|
315
|
-
},
|
|
326
|
+
}, se = () => {
|
|
316
327
|
let e = y(), { t } = j("hooks", { keyPrefix: "account" });
|
|
317
328
|
return M({
|
|
318
329
|
mutationFn: (t = {}) => e.SendChangePasswordVerificationCode(t),
|
|
@@ -323,7 +334,7 @@ var I = () => {
|
|
|
323
334
|
D.showError(g(e, "[useSendChangePasswordVerificationCode] error"));
|
|
324
335
|
}
|
|
325
336
|
});
|
|
326
|
-
},
|
|
337
|
+
}, ce = () => {
|
|
327
338
|
let e = y(), { t } = j("hooks", { keyPrefix: "account" });
|
|
328
339
|
return M({
|
|
329
340
|
mutationFn: (t) => e.ChangePassword(t),
|
|
@@ -334,8 +345,8 @@ var I = () => {
|
|
|
334
345
|
D.showError(g(e, "[useChangePassword] error"));
|
|
335
346
|
}
|
|
336
347
|
});
|
|
337
|
-
},
|
|
338
|
-
let e = y(), { kind: t } =
|
|
348
|
+
}, le = () => {
|
|
349
|
+
let e = y(), { kind: t } = P();
|
|
339
350
|
return M({
|
|
340
351
|
mutationFn: (n) => e.ConfirmProfileBackgrounds(t, n),
|
|
341
352
|
onSuccess: () => {
|
|
@@ -346,7 +357,7 @@ var I = () => {
|
|
|
346
357
|
D.showError(g(e, "[useConfirmProfileBackgrounds] error"));
|
|
347
358
|
}
|
|
348
359
|
});
|
|
349
|
-
},
|
|
360
|
+
}, ue = () => {
|
|
350
361
|
let e = y(), t = a.getState().currentAccountId, { t: n } = j("hooks", { keyPrefix: "account" });
|
|
351
362
|
return M({
|
|
352
363
|
mutationFn: (t) => e.CreatePhone(t),
|
|
@@ -357,7 +368,7 @@ var I = () => {
|
|
|
357
368
|
D.showError(g(e, "[useCreatePhone] error"));
|
|
358
369
|
}
|
|
359
370
|
});
|
|
360
|
-
},
|
|
371
|
+
}, de = () => {
|
|
361
372
|
let e = y(), { t } = j("hooks", { keyPrefix: "account" });
|
|
362
373
|
return M({
|
|
363
374
|
mutationFn: (t) => e.SendPhoneVerificationCode(t),
|
|
@@ -368,7 +379,7 @@ var I = () => {
|
|
|
368
379
|
D.showError(g(e, "[useSendPhoneVerificationCode] error"));
|
|
369
380
|
}
|
|
370
381
|
});
|
|
371
|
-
},
|
|
382
|
+
}, fe = () => {
|
|
372
383
|
let e = y(), t = a.getState().currentAccountId, { t: n } = j("hooks", { keyPrefix: "account" });
|
|
373
384
|
return M({
|
|
374
385
|
mutationFn: ({ phoneId: t, verificationCode: n }) => e.VerifyPhone(t, { verificationCode: n }),
|
|
@@ -379,7 +390,7 @@ var I = () => {
|
|
|
379
390
|
D.showError(g(e, "[useVerifyPhone] error"));
|
|
380
391
|
}
|
|
381
392
|
});
|
|
382
|
-
},
|
|
393
|
+
}, pe = () => {
|
|
383
394
|
let e = y(), t = a.getState().currentAccountId, { t: n } = j("hooks", { keyPrefix: "account" });
|
|
384
395
|
return M({
|
|
385
396
|
mutationFn: ({ phoneId: t, phone: n }) => e.UpdatePhone(t, { phone: n }),
|
|
@@ -390,7 +401,7 @@ var I = () => {
|
|
|
390
401
|
D.showError(g(e, "[useUpdatePhone] error"));
|
|
391
402
|
}
|
|
392
403
|
});
|
|
393
|
-
},
|
|
404
|
+
}, $ = () => {
|
|
394
405
|
let e = y(), t = a.getState().currentAccountId, { t: n } = j("hooks", { keyPrefix: "account" });
|
|
395
406
|
return M({
|
|
396
407
|
mutationFn: (t) => e.SetPrimaryPhone(t),
|
|
@@ -401,7 +412,7 @@ var I = () => {
|
|
|
401
412
|
D.showError(g(e, "[useSetPrimaryPhone] error"));
|
|
402
413
|
}
|
|
403
414
|
});
|
|
404
|
-
},
|
|
415
|
+
}, me = () => {
|
|
405
416
|
let e = y(), t = a.getState().currentAccountId, { t: n } = j("hooks", { keyPrefix: "account" });
|
|
406
417
|
return M({
|
|
407
418
|
mutationFn: (t) => e.DeletePhone(t),
|
|
@@ -412,38 +423,38 @@ var I = () => {
|
|
|
412
423
|
D.showError(g(e, "[useDeletePhone] error"));
|
|
413
424
|
}
|
|
414
425
|
});
|
|
415
|
-
},
|
|
416
|
-
let t = y(), { aID: n, isAuthValid: r } =
|
|
426
|
+
}, he = (e) => {
|
|
427
|
+
let t = y(), { aID: n, isAuthValid: r } = P(), a = e.trim();
|
|
417
428
|
return O(({ query: e }) => t.SearchForgerProfiles({
|
|
418
429
|
query: e,
|
|
419
430
|
limit: 50,
|
|
420
431
|
offset: 0
|
|
421
432
|
}), T(n, i.COMMUNITY, a), { query: a }, { enabled: r && !!n && a.length > 0 });
|
|
422
|
-
},
|
|
423
|
-
let t = y(), { aID: n, isAuthValid: r } =
|
|
433
|
+
}, ge = (e) => {
|
|
434
|
+
let t = y(), { aID: n, isAuthValid: r } = P(), a = e.trim();
|
|
424
435
|
return O(({ query: e }) => t.SearchAuthorityProfiles({
|
|
425
436
|
query: e,
|
|
426
437
|
limit: 50,
|
|
427
438
|
offset: 0
|
|
428
439
|
}), T(n, i.AUTHORITY, a), { query: a }, { enabled: r && !!n && a.length > 0 });
|
|
429
|
-
},
|
|
430
|
-
let t = y(), { isAuthValid: n } =
|
|
440
|
+
}, _e = (e) => {
|
|
441
|
+
let t = y(), { isAuthValid: n } = P();
|
|
431
442
|
return O(() => t.GetPublicProfileCard(e), E(e), void 0, { enabled: n && !!e });
|
|
432
|
-
},
|
|
433
|
-
let t = y(), { aID: n, isAuthValid: r } =
|
|
443
|
+
}, ve = (e = "") => {
|
|
444
|
+
let t = y(), { aID: n, isAuthValid: r } = P(), i = e.trim();
|
|
434
445
|
return O(({ query: e }) => t.ListOwnerForgerProfiles({
|
|
435
446
|
limit: 50,
|
|
436
447
|
offset: 0,
|
|
437
448
|
query: e || void 0
|
|
438
449
|
}), [...C(n), i], { query: i }, { enabled: r && !!n });
|
|
439
|
-
},
|
|
440
|
-
let t = y(), { aID: n, isAuthValid: r } =
|
|
450
|
+
}, ye = (e = "") => {
|
|
451
|
+
let t = y(), { aID: n, isAuthValid: r } = P(), i = e.trim();
|
|
441
452
|
return O(({ query: e }) => t.ListOwnerAuthorityProfiles({
|
|
442
453
|
limit: 50,
|
|
443
454
|
offset: 0,
|
|
444
455
|
query: e || void 0
|
|
445
456
|
}), [...S(n), i], { query: i }, { enabled: r && !!n });
|
|
446
|
-
},
|
|
457
|
+
}, be = () => {
|
|
447
458
|
let e = y(), t = a.getState().currentAccountId, { t: n } = j("hooks", { keyPrefix: "account" });
|
|
448
459
|
return M({
|
|
449
460
|
mutationFn: ({ profileId: t, authorityRoles: n }) => e.UpdateAuthorityProfileRoles(t, { authorityRoles: n }),
|
|
@@ -456,6 +467,6 @@ var I = () => {
|
|
|
456
467
|
});
|
|
457
468
|
};
|
|
458
469
|
//#endregion
|
|
459
|
-
export { r as AuthSignupPlatformEnum, a as AuthStore, n as LanguageEnum, c as hasSelectedProfile,
|
|
470
|
+
export { r as AuthSignupPlatformEnum, a as AuthStore, n as LanguageEnum, c as hasSelectedProfile, P as useAuthQueryScope, m as useAuthStore, ce as useChangePassword, Y as useClearProfileAvatar, te as useConfirmProfileAvatar, le as useConfirmProfileBackgrounds, q as useCreateAuthorityProfile, Q as useCreateEmail, K as useCreateForgerProfile, ue as useCreatePhone, I as useCurrentProfile, oe as useDeleteEmail, me as useDeletePhone, J as useDeleteProfile, _e as useGetPublicProfileCard, X as useListEmails, ye as useListOwnerAuthorityProfiles, ve as useListOwnerForgerProfiles, Z as useListPhones, G as useListProfiles, z as useLoginWithEmail, B as useLoginWithPhone, H as usePatchProfile, ge as useSearchAuthorityProfiles, he as useSearchForgerProfiles, V as useSelectProfile, se as useSendChangePasswordVerificationCode, ne as useSendEmailVerificationCode, de as useSendPhoneVerificationCode, L as useSendVerificationCode, ae as useSetPrimaryEmail, $ as useSetPrimaryPhone, R as useSignupWithEmail, be as useUpdateAuthorityProfileRoles, ie as useUpdateEmail, pe as useUpdatePhone, W as useUpdatePreference, U as useUpdateProfileSettings, re as useVerifyEmail, fe as useVerifyPhone };
|
|
460
471
|
|
|
461
472
|
//# sourceMappingURL=auth.js.map
|
package/dist/hooks/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","names":[],"sources":["../../src/hooks/auth.ts"],"sourcesContent":["/**\n * Auth hooks — 组件勿直接调 apis/auth\n */\nimport type { AxiosError } from \"axios\";\nimport type { CurrentProfileResult, Login, Profile, Signup } from \"nfx-ui/types\";\n\nimport { useEffect } from \"react\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useAuthRepository } from \"nfx-ui/apis/repositories\";\nimport { AUTH_EMAILS, AUTH_ME, AUTH_OWNER_AUTHORITIES, AUTH_OWNER_FORGERS, AUTH_PHONES, AUTH_PROFILE_SEARCH, AUTH_PROFILES, AUTH_PUBLIC_CARD } from \"nfx-ui/constants\";\nimport { AuthSignupPlatformEnum, LanguageEnum, ProfileKindEnum } from \"nfx-ui/enums\";\nimport { authEventEmitter, authEvents } from \"nfx-ui/events/auth\";\nimport { systemEventEmitter } from \"nfx-ui/events/system\";\nimport {\n AuthStore,\n clearAuth,\n EMPTY_PROFILE_ID,\n hasSelectedProfile,\n setCurrentAccountId,\n setCurrentProfileId,\n setCurrentProfileKind,\n setIsAuthValid,\n setTokens,\n useAuthStore,\n} from \"nfx-ui/stores/auth\";\nimport { ensureDeviceIdStorage } from \"nfx-ui/stores/system\";\nimport { getApiErrorMessage } from \"nfx-ui/utils/apiError\";\nimport { pickProfile } from \"nfx-ui/utils/domain/account\";\nimport { useUnifiedQuery } from \"nfx-ui/utils/factory\";\nimport { safeOr, safeStringable } from \"nfx-ui/utils/safe\";\nimport { useTranslation } from \"react-i18next\";\n\nexport function useAuthQueryScope() {\n const aID = useAuthStore((s) => s.currentAccountId);\n const pID = useAuthStore((s) => s.currentProfileId);\n const isAuthValid = useAuthStore((s) => s.isAuthValid);\n const kind = useAuthStore((s) => s.currentProfileKind);\n return { aID, pID, isAuthValid, kind, profileScope: kind };\n}\n\nfunction useLogoutOnAuthError(isError: boolean, aID: string) {\n useEffect(() => {\n if (!isError || !AuthStore.getState().isAuthValid) return;\n if (!hasSelectedProfile(AuthStore.getState().currentProfileId)) return;\n authEventEmitter.emit(authEvents.LOGOUT, aID);\n clearAuth();\n }, [isError, aID]);\n}\n\nexport function useCurrentProfile(): CurrentProfileResult {\n const auth = useAuthRepository();\n const { aID, pID, isAuthValid, kind } = useAuthQueryScope();\n const result = useUnifiedQuery(\n ({ kind }: { kind: ProfileKindEnum }) => auth.GetCurrentFullAccountInformationWithProfile(kind),\n AUTH_ME(aID, pID),\n { kind },\n { enabled: isAuthValid && hasSelectedProfile(pID) },\n );\n useLogoutOnAuthError(result.isError, aID);\n return {\n kind,\n data: result.data,\n profile: pickProfile(kind, result.data),\n isLoading: result.isLoading,\n isError: result.isError,\n refetch: result.refetch,\n } as CurrentProfileResult;\n}\n\nexport const useSendVerificationCode = () => {\n const auth = useAuthRepository();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (params: Signup.Request.SendVerificationCode) => auth.SendVerificationCode(params),\n onSuccess: () => {\n systemEventEmitter.showSuccess(t(\"sendVerificationCodeSuccess\", { defaultValue: \"Code sent\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSendVerificationCode] error\"));\n },\n });\n};\n\nexport const useSignupWithEmail = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: async ({\n rememberMe,\n ...params\n }: {\n rememberMe: boolean;\n } & Omit<Signup.Request.SignupWithEmail, \"deviceId\">): Promise<Signup.Response.SignupWithEmail> => {\n const deviceId = await ensureDeviceIdStorage();\n return auth.SignupWithEmail({\n ...params,\n deviceId,\n });\n },\n onSuccess: (result, variables) => {\n if (!result?.accessToken) return;\n setTokens(\n {\n accessToken: result.accessToken,\n refreshToken: safeStringable(result.refreshToken),\n },\n { rememberMe: variables.rememberMe },\n );\n setIsAuthValid(true);\n if (result.accountId) setCurrentAccountId(result.accountId);\n if (result.profileId) {\n setCurrentProfileId(result.profileId);\n setCurrentProfileKind(ProfileKindEnum.COMMUNITY);\n authEventEmitter.emit(authEvents.LOGIN_SUCCESS, result.accountId);\n } else {\n setCurrentProfileId(EMPTY_PROFILE_ID);\n }\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSignup] error\"));\n },\n });\n};\n\nexport const useLoginWithEmail = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: async ({ rememberMe, ...params }: { email: string; password: string; rememberMe: boolean }) =>\n auth.LoginWithEmail({\n ...params,\n deviceId: await ensureDeviceIdStorage(),\n }),\n onSuccess: (result, variables) => {\n if (!result?.accessToken) return;\n setCurrentProfileId(EMPTY_PROFILE_ID);\n setTokens(\n {\n accessToken: result.accessToken,\n refreshToken: safeStringable(result.refreshToken),\n },\n { rememberMe: variables.rememberMe },\n );\n setIsAuthValid(true);\n if (result.accountId) setCurrentAccountId(result.accountId);\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useLogin] error\"));\n },\n });\n};\n\nexport const useLoginWithPhone = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: async ({ rememberMe, ...params }: { phone: string; password: string; rememberMe: boolean }) =>\n auth.LoginWithPhone({\n ...params,\n deviceId: await ensureDeviceIdStorage(),\n }),\n onSuccess: (result, variables) => {\n if (!result?.accessToken) return;\n setCurrentProfileId(EMPTY_PROFILE_ID);\n setTokens(\n {\n accessToken: result.accessToken,\n refreshToken: safeStringable(result.refreshToken),\n },\n { rememberMe: variables.rememberMe },\n );\n setIsAuthValid(true);\n if (result.accountId) setCurrentAccountId(result.accountId);\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useLoginWithPhone] error\"));\n },\n });\n};\n\nexport const useSelectProfile = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: async ({ profileId, kind }: { profileId: string; kind: Login.ProfileKind }) =>\n auth.SelectProfile({\n profileId,\n kind,\n deviceId: await ensureDeviceIdStorage(),\n }),\n onSuccess: (result, variables) => {\n if (result?.accessToken) {\n setTokens({\n accessToken: result.accessToken,\n refreshToken: safeStringable(result.refreshToken),\n });\n setCurrentProfileKind(variables.kind);\n if (result.profileId) setCurrentProfileId(result.profileId);\n authEventEmitter.emit(authEvents.LOGIN_SUCCESS, result.accountId);\n }\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSelectProfile] error\"));\n },\n });\n};\n\nexport const usePatchProfile = (options?: { silent?: boolean }) => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n const silent = safeOr(options?.silent, false);\n const { t } = useTranslation(\"pages.User.Profile.Edit\");\n return useMutation({\n mutationFn: (body: Profile.Request.PatchProfile) => auth.PatchProfile(kind, body),\n onSuccess: () => {\n if (!silent) systemEventEmitter.showSuccess(t(\"saveSuccess\", { defaultValue: \"Saved\" }));\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.invalidateProfiles({ aID, kind });\n },\n onError: (error: AxiosError) => {\n if (!silent) systemEventEmitter.showError(getApiErrorMessage(error, \"[usePatchProfile] error\"));\n },\n });\n};\n\nexport const useUpdateProfileSettings = () => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (body: Profile.Request.PatchProfileSettings) => auth.PatchProfileSettings(kind, body),\n onSuccess: () => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, aID);\n systemEventEmitter.showSuccess(t(\"updateSettingsSuccess\", { defaultValue: \"Settings updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useUpdateProfileSettings] error\"));\n },\n });\n};\n\nexport const useUpdatePreference = () => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n return useMutation({\n mutationFn: (preference: string) => auth.UpdatePreference(kind, preference),\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useUpdatePreference] error\"));\n },\n });\n};\n\nexport const useListProfiles = <K extends ProfileKindEnum>(kind: K) => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n return useUnifiedQuery(\n () => auth.ListProfiles(kind, { limit: 50, offset: 0 }),\n AUTH_PROFILES(aID, kind),\n undefined,\n { enabled: isAuthValid && Boolean(aID) },\n );\n};\n\nexport const useCreateForgerProfile = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: (body: Login.Request.CreateForgerProfile) => auth.CreateForgerProfile(body),\n onSuccess: () => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.invalidateProfiles({ aID, kind: ProfileKindEnum.COMMUNITY });\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useCreateForgerProfile] error\"));\n },\n });\n};\n\nexport const useCreateAuthorityProfile = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: (body: Login.Request.CreateAuthorityProfile) => auth.CreateAuthorityProfile(body),\n onSuccess: () => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.invalidateProfiles({ aID, kind: ProfileKindEnum.AUTHORITY });\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useCreateAuthorityProfile] error\"));\n },\n });\n};\n\nexport const useDeleteProfile = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: ({ kind, profileId }: { kind: ProfileKindEnum; profileId: string }) => auth.DeleteProfile(kind, profileId),\n onSuccess: (_void, variables) => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.invalidateProfiles({ aID, kind: variables.kind });\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useDeleteProfile] error\"));\n },\n });\n};\n\nexport const useConfirmProfileAvatar = () => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n return useMutation({\n mutationFn: (body: Profile.Request.ConfirmProfileAvatar) => auth.ConfirmProfileAvatar(kind, body),\n onSuccess: () => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, aID);\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useConfirmProfileAvatar] error\"));\n },\n });\n};\n\nexport const useClearProfileAvatar = () => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: () => auth.ClearProfileAvatar(kind),\n onSuccess: () => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, aID);\n systemEventEmitter.showSuccess(t(\"clearAvatarSuccess\", { defaultValue: \"Avatar removed.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useClearProfileAvatar] error\"));\n },\n });\n};\n\nexport const useListEmails = () => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n return useUnifiedQuery(() => auth.ListEmails({ limit: 50, offset: 0 }), AUTH_EMAILS(aID), undefined, {\n enabled: isAuthValid && Boolean(aID),\n });\n};\n\nexport const useListPhones = () => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n return useUnifiedQuery(() => auth.ListPhones({ limit: 50, offset: 0 }), AUTH_PHONES(aID), undefined, {\n enabled: isAuthValid && Boolean(aID),\n });\n};\n\nexport const useCreateEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (body: Login.Request.CreateEmail) => auth.CreateEmail(body),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n systemEventEmitter.showSuccess(t(\"createEmailSuccess\", { defaultValue: \"Email added.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useCreateEmail] error\"));\n },\n });\n};\n\nexport const useSendEmailVerificationCode = () => {\n const auth = useAuthRepository();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: ({ emailId, lang }: { emailId: string; lang?: LanguageEnum }) => auth.SendEmailVerificationCode(emailId, { lang }),\n onSuccess: () => {\n systemEventEmitter.showSuccess(t(\"sendVerificationCodeSuccess\", { defaultValue: \"Code sent\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSendEmailVerificationCode] error\"));\n },\n });\n};\n\nexport const useVerifyEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: ({ emailId, verificationCode }: { emailId: string; verificationCode: string }) =>\n auth.VerifyEmail(emailId, { verificationCode }),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n systemEventEmitter.showSuccess(t(\"verifyEmailSuccess\", { defaultValue: \"Email verified.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useVerifyEmail] error\"));\n },\n });\n};\n\nexport const useUpdateEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: ({ emailId, email }: { emailId: string; email: string }) => auth.UpdateEmail(emailId, { email }),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n systemEventEmitter.showSuccess(t(\"updateEmailSuccess\", { defaultValue: \"Email updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useUpdateEmail] error\"));\n },\n });\n};\n\nexport const useSetPrimaryEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (emailId: string) => auth.SetPrimaryEmail(emailId),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, accountId);\n systemEventEmitter.showSuccess(t(\"setPrimaryEmailSuccess\", { defaultValue: \"Primary email updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSetPrimaryEmail] error\"));\n },\n });\n};\n\nexport const useDeleteEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (emailId: string) => auth.DeleteEmail(emailId),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n systemEventEmitter.showSuccess(t(\"deleteEmailSuccess\", { defaultValue: \"Email removed.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useDeleteEmail] error\"));\n },\n });\n};\n\nexport const useSendChangePasswordVerificationCode = () => {\n const auth = useAuthRepository();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (body: Login.Request.SendChangePasswordVerificationCode = {}) => auth.SendChangePasswordVerificationCode(body),\n onSuccess: () => {\n systemEventEmitter.showSuccess(t(\"sendVerificationCodeSuccess\", { defaultValue: \"Code sent\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSendChangePasswordVerificationCode] error\"));\n },\n });\n};\n\nexport const useChangePassword = () => {\n const auth = useAuthRepository();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (body: Login.Request.ChangePassword) => auth.ChangePassword(body),\n onSuccess: () => {\n systemEventEmitter.showSuccess(t(\"changePasswordSuccess\", { defaultValue: \"Password updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useChangePassword] error\"));\n },\n });\n};\n\nexport const useConfirmProfileBackgrounds = () => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n return useMutation({\n mutationFn: (body: Profile.Request.ConfirmProfileBackgrounds) => auth.ConfirmProfileBackgrounds(kind, body),\n onSuccess: () => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, aID);\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useConfirmProfileBackgrounds] error\"));\n },\n });\n};\n\nexport const useCreatePhone = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (body: Login.Request.CreatePhone) => auth.CreatePhone(body),\n onSuccess: () => {\n authEventEmitter.invalidatePhones(accountId);\n systemEventEmitter.showSuccess(t(\"createPhoneSuccess\", { defaultValue: \"Phone added.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useCreatePhone] error\"));\n },\n });\n};\n\nexport const useSendPhoneVerificationCode = () => {\n const auth = useAuthRepository();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (phoneId: string) => auth.SendPhoneVerificationCode(phoneId),\n onSuccess: () => {\n systemEventEmitter.showSuccess(t(\"sendVerificationCodeSuccess\", { defaultValue: \"Code sent\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSendPhoneVerificationCode] error\"));\n },\n });\n};\n\nexport const useVerifyPhone = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: ({ phoneId, verificationCode }: { phoneId: string; verificationCode: string }) =>\n auth.VerifyPhone(phoneId, { verificationCode }),\n onSuccess: () => {\n authEventEmitter.invalidatePhones(accountId);\n systemEventEmitter.showSuccess(t(\"verifyPhoneSuccess\", { defaultValue: \"Phone verified.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useVerifyPhone] error\"));\n },\n });\n};\n\nexport const useUpdatePhone = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: ({ phoneId, phone }: { phoneId: string; phone: string }) => auth.UpdatePhone(phoneId, { phone }),\n onSuccess: () => {\n authEventEmitter.invalidatePhones(accountId);\n systemEventEmitter.showSuccess(t(\"updatePhoneSuccess\", { defaultValue: \"Phone updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useUpdatePhone] error\"));\n },\n });\n};\n\nexport const useSetPrimaryPhone = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (phoneId: string) => auth.SetPrimaryPhone(phoneId),\n onSuccess: () => {\n authEventEmitter.invalidatePhones(accountId);\n authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, accountId);\n systemEventEmitter.showSuccess(t(\"setPrimaryPhoneSuccess\", { defaultValue: \"Primary phone updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSetPrimaryPhone] error\"));\n },\n });\n};\n\nexport const useDeletePhone = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (phoneId: string) => auth.DeletePhone(phoneId),\n onSuccess: () => {\n authEventEmitter.invalidatePhones(accountId);\n systemEventEmitter.showSuccess(t(\"deletePhoneSuccess\", { defaultValue: \"Phone removed.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useDeletePhone] error\"));\n },\n });\n};\n\nexport const useSearchForgerProfiles = (query: string) => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n const trimmed = query.trim();\n return useUnifiedQuery(\n ({ query: q }) => auth.SearchForgerProfiles({ query: q, limit: 50, offset: 0 }),\n AUTH_PROFILE_SEARCH(aID, ProfileKindEnum.COMMUNITY, trimmed),\n { query: trimmed },\n { enabled: isAuthValid && Boolean(aID) && trimmed.length > 0 },\n );\n};\n\nexport const useSearchAuthorityProfiles = (query: string) => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n const trimmed = query.trim();\n return useUnifiedQuery(\n ({ query: q }) => auth.SearchAuthorityProfiles({ query: q, limit: 50, offset: 0 }),\n AUTH_PROFILE_SEARCH(aID, ProfileKindEnum.AUTHORITY, trimmed),\n { query: trimmed },\n { enabled: isAuthValid && Boolean(aID) && trimmed.length > 0 },\n );\n};\n\nexport const useGetPublicProfileCard = (profileId: string) => {\n const auth = useAuthRepository();\n const { isAuthValid } = useAuthQueryScope();\n return useUnifiedQuery(\n () => auth.GetPublicProfileCard(profileId),\n AUTH_PUBLIC_CARD(profileId),\n undefined,\n { enabled: isAuthValid && Boolean(profileId) },\n );\n};\n\nexport const useListOwnerForgerProfiles = (query = \"\") => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n const trimmed = query.trim();\n return useUnifiedQuery(\n ({ query: q }) => auth.ListOwnerForgerProfiles({ limit: 50, offset: 0, query: q || undefined }),\n [...AUTH_OWNER_FORGERS(aID), trimmed],\n { query: trimmed },\n { enabled: isAuthValid && Boolean(aID) },\n );\n};\n\nexport const useListOwnerAuthorityProfiles = (query = \"\") => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n const trimmed = query.trim();\n return useUnifiedQuery(\n ({ query: q }) => auth.ListOwnerAuthorityProfiles({ limit: 50, offset: 0, query: q || undefined }),\n [...AUTH_OWNER_AUTHORITIES(aID), trimmed],\n { query: trimmed },\n { enabled: isAuthValid && Boolean(aID) },\n );\n};\n\nexport const useUpdateAuthorityProfileRoles = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: ({ profileId, authorityRoles }: { profileId: string; authorityRoles: Profile.Request.UpdateAuthorityProfileRoles[\"authorityRoles\"] }) =>\n auth.UpdateAuthorityProfileRoles(profileId, { authorityRoles }),\n onSuccess: () => {\n authEventEmitter.invalidateOwner(accountId);\n systemEventEmitter.showSuccess(t(\"updateRolesSuccess\", { defaultValue: \"Roles updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useUpdateAuthorityProfileRoles] error\"));\n },\n });\n};\n\nexport { hasSelectedProfile, AuthStore, useAuthStore };\nexport { LanguageEnum, AuthSignupPlatformEnum };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auth.js","names":[],"sources":["../../src/hooks/auth.ts"],"sourcesContent":["/**\n * Auth hooks — 组件勿直接调 apis/auth\n */\nimport type { AxiosError } from \"axios\";\nimport type { CurrentProfileResult, Login, Profile, Signup } from \"nfx-ui/types\";\n\nimport { useEffect } from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useAuthRepository } from \"nfx-ui/apis/repositories\";\nimport { AUTH_EMAILS, AUTH_ME, AUTH_OWNER_AUTHORITIES, AUTH_OWNER_FORGERS, AUTH_PHONES, AUTH_PROFILE_SEARCH, AUTH_PROFILES, AUTH_PUBLIC_CARD } from \"nfx-ui/constants\";\nimport { AuthSignupPlatformEnum, LanguageEnum, ProfileKindEnum } from \"nfx-ui/enums\";\nimport { authEventEmitter, authEvents } from \"nfx-ui/events/auth\";\nimport { systemEventEmitter } from \"nfx-ui/events/system\";\nimport {\n AuthStore,\n clearAuth,\n EMPTY_PROFILE_ID,\n hasSelectedProfile,\n setCurrentAccountId,\n setCurrentProfileId,\n setCurrentProfileKind,\n setIsAuthValid,\n setTokens,\n useAuthStore,\n} from \"nfx-ui/stores/auth\";\nimport { ensureDeviceIdStorage } from \"nfx-ui/stores/system\";\nimport { getApiErrorMessage } from \"nfx-ui/utils/apiError\";\nimport { pickProfile } from \"nfx-ui/utils/domain/account\";\nimport { useUnifiedQuery } from \"nfx-ui/utils/factory\";\nimport { safeOr, safeStringable } from \"nfx-ui/utils/safe\";\nimport { useTranslation } from \"react-i18next\";\n\nexport function useAuthQueryScope() {\n const aID = useAuthStore((s) => s.currentAccountId);\n const pID = useAuthStore((s) => s.currentProfileId);\n const isAuthValid = useAuthStore((s) => s.isAuthValid);\n const kind = useAuthStore((s) => s.currentProfileKind);\n return { aID, pID, isAuthValid, kind, profileScope: kind };\n}\n\nfunction useLogoutOnAuthError(isError: boolean, aID: string) {\n useEffect(() => {\n if (!isError || !AuthStore.getState().isAuthValid) return;\n if (!hasSelectedProfile(AuthStore.getState().currentProfileId)) return;\n authEventEmitter.emit(authEvents.LOGOUT, aID);\n clearAuth();\n }, [isError, aID]);\n}\n\nexport function useCurrentProfile(): CurrentProfileResult {\n const auth = useAuthRepository();\n const { aID, pID, isAuthValid, kind } = useAuthQueryScope();\n const result = useUnifiedQuery(\n ({ kind }: { kind: ProfileKindEnum }) => auth.GetCurrentFullAccountInformationWithProfile(kind),\n AUTH_ME(aID, pID),\n { kind },\n { enabled: isAuthValid && hasSelectedProfile(pID) },\n );\n useLogoutOnAuthError(result.isError, aID);\n return {\n kind,\n data: result.data,\n profile: pickProfile(kind, result.data),\n isLoading: result.isLoading,\n isError: result.isError,\n refetch: result.refetch,\n } as CurrentProfileResult;\n}\n\nexport const useSendVerificationCode = () => {\n const auth = useAuthRepository();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (params: Signup.Request.SendVerificationCode) => auth.SendVerificationCode(params),\n onSuccess: () => {\n systemEventEmitter.showSuccess(t(\"sendVerificationCodeSuccess\", { defaultValue: \"Code sent\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSendVerificationCode] error\"));\n },\n });\n};\n\nexport const useSignupWithEmail = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: async ({\n rememberMe,\n ...params\n }: {\n rememberMe: boolean;\n } & Omit<Signup.Request.SignupWithEmail, \"deviceId\">): Promise<Signup.Response.SignupWithEmail> => {\n const deviceId = await ensureDeviceIdStorage();\n return auth.SignupWithEmail({\n ...params,\n deviceId,\n });\n },\n onSuccess: (result, variables) => {\n if (!result?.accessToken) return;\n setTokens(\n {\n accessToken: result.accessToken,\n refreshToken: safeStringable(result.refreshToken),\n },\n { rememberMe: variables.rememberMe },\n );\n setIsAuthValid(true);\n if (result.accountId) setCurrentAccountId(result.accountId);\n if (result.profileId) {\n setCurrentProfileId(result.profileId);\n setCurrentProfileKind(ProfileKindEnum.COMMUNITY);\n authEventEmitter.emit(authEvents.LOGIN_SUCCESS, result.accountId);\n } else {\n setCurrentProfileId(EMPTY_PROFILE_ID);\n }\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSignup] error\"));\n },\n });\n};\n\nexport const useLoginWithEmail = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: async ({ rememberMe, ...params }: { email: string; password: string; rememberMe: boolean }) =>\n auth.LoginWithEmail({\n ...params,\n deviceId: await ensureDeviceIdStorage(),\n }),\n onSuccess: (result, variables) => {\n if (!result?.accessToken) return;\n setCurrentProfileId(EMPTY_PROFILE_ID);\n setTokens(\n {\n accessToken: result.accessToken,\n refreshToken: safeStringable(result.refreshToken),\n },\n { rememberMe: variables.rememberMe },\n );\n setIsAuthValid(true);\n if (result.accountId) setCurrentAccountId(result.accountId);\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useLogin] error\"));\n },\n });\n};\n\nexport const useLoginWithPhone = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: async ({ rememberMe, ...params }: { phone: string; password: string; rememberMe: boolean }) =>\n auth.LoginWithPhone({\n ...params,\n deviceId: await ensureDeviceIdStorage(),\n }),\n onSuccess: (result, variables) => {\n if (!result?.accessToken) return;\n setCurrentProfileId(EMPTY_PROFILE_ID);\n setTokens(\n {\n accessToken: result.accessToken,\n refreshToken: safeStringable(result.refreshToken),\n },\n { rememberMe: variables.rememberMe },\n );\n setIsAuthValid(true);\n if (result.accountId) setCurrentAccountId(result.accountId);\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useLoginWithPhone] error\"));\n },\n });\n};\n\nexport type SelectProfileOptions = {\n /** 已翻译的加载文案。Host-translated loading copy. */\n switchingMsg?: string;\n /** 与 token、档案同一次提交里执行(例如跳到该档案的首页)。Runs in the same commit as the token and profile. */\n onCommit?: () => void;\n};\n\n/** 两步登录第二步:切换当前 profile,重新签发 token。kind 决定后端分派到社区/权限档。 */\nexport const useSelectProfile = (options?: SelectProfileOptions) => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: async ({ profileId, kind }: { profileId: string; kind: Login.ProfileKind }) =>\n auth.SelectProfile({\n profileId,\n kind,\n deviceId: await ensureDeviceIdStorage(),\n }),\n onMutate: () => {\n if (options?.switchingMsg) systemEventEmitter.showLoading(options.switchingMsg);\n },\n onSuccess: (result, variables) => {\n try {\n if (!result?.accessToken) return;\n // 同一次提交写入新 token 和档案,旧角色的请求在重拉前先停用。\n flushSync(() => {\n setTokens({\n accessToken: result.accessToken,\n refreshToken: safeStringable(result.refreshToken),\n });\n setCurrentProfileKind(variables.kind);\n if (result.profileId) setCurrentProfileId(result.profileId);\n options?.onCommit?.();\n });\n authEventEmitter.emit(authEvents.LOGIN_SUCCESS, result.accountId);\n } finally {\n systemEventEmitter.hideLoading();\n }\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.hideLoading();\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSelectProfile] error\"));\n },\n });\n};\n\nexport const usePatchProfile = (options?: { silent?: boolean }) => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n const silent = safeOr(options?.silent, false);\n const { t } = useTranslation(\"pages.User.Profile.Edit\");\n return useMutation({\n mutationFn: (body: Profile.Request.PatchProfile) => auth.PatchProfile(kind, body),\n onSuccess: () => {\n if (!silent) systemEventEmitter.showSuccess(t(\"saveSuccess\", { defaultValue: \"Saved\" }));\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.invalidateProfiles({ aID, kind });\n },\n onError: (error: AxiosError) => {\n if (!silent) systemEventEmitter.showError(getApiErrorMessage(error, \"[usePatchProfile] error\"));\n },\n });\n};\n\nexport const useUpdateProfileSettings = () => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (body: Profile.Request.PatchProfileSettings) => auth.PatchProfileSettings(kind, body),\n onSuccess: () => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, aID);\n systemEventEmitter.showSuccess(t(\"updateSettingsSuccess\", { defaultValue: \"Settings updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useUpdateProfileSettings] error\"));\n },\n });\n};\n\nexport const useUpdatePreference = () => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n return useMutation({\n mutationFn: (preference: string) => auth.UpdatePreference(kind, preference),\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useUpdatePreference] error\"));\n },\n });\n};\n\nexport const useListProfiles = <K extends ProfileKindEnum>(kind: K) => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n return useUnifiedQuery(\n () => auth.ListProfiles(kind, { limit: 50, offset: 0 }),\n AUTH_PROFILES(aID, kind),\n undefined,\n { enabled: isAuthValid && Boolean(aID) },\n );\n};\n\nexport const useCreateForgerProfile = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: (body: Login.Request.CreateForgerProfile) => auth.CreateForgerProfile(body),\n onSuccess: () => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.invalidateProfiles({ aID, kind: ProfileKindEnum.COMMUNITY });\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useCreateForgerProfile] error\"));\n },\n });\n};\n\nexport const useCreateAuthorityProfile = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: (body: Login.Request.CreateAuthorityProfile) => auth.CreateAuthorityProfile(body),\n onSuccess: () => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.invalidateProfiles({ aID, kind: ProfileKindEnum.AUTHORITY });\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useCreateAuthorityProfile] error\"));\n },\n });\n};\n\nexport const useDeleteProfile = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: ({ kind, profileId }: { kind: ProfileKindEnum; profileId: string }) => auth.DeleteProfile(kind, profileId),\n onSuccess: (_void, variables) => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.invalidateProfiles({ aID, kind: variables.kind });\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useDeleteProfile] error\"));\n },\n });\n};\n\nexport const useConfirmProfileAvatar = () => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n return useMutation({\n mutationFn: (body: Profile.Request.ConfirmProfileAvatar) => auth.ConfirmProfileAvatar(kind, body),\n onSuccess: () => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, aID);\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useConfirmProfileAvatar] error\"));\n },\n });\n};\n\nexport const useClearProfileAvatar = () => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: () => auth.ClearProfileAvatar(kind),\n onSuccess: () => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, aID);\n systemEventEmitter.showSuccess(t(\"clearAvatarSuccess\", { defaultValue: \"Avatar removed.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useClearProfileAvatar] error\"));\n },\n });\n};\n\nexport const useListEmails = () => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n return useUnifiedQuery(() => auth.ListEmails({ limit: 50, offset: 0 }), AUTH_EMAILS(aID), undefined, {\n enabled: isAuthValid && Boolean(aID),\n });\n};\n\nexport const useListPhones = () => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n return useUnifiedQuery(() => auth.ListPhones({ limit: 50, offset: 0 }), AUTH_PHONES(aID), undefined, {\n enabled: isAuthValid && Boolean(aID),\n });\n};\n\nexport const useCreateEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (body: Login.Request.CreateEmail) => auth.CreateEmail(body),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n systemEventEmitter.showSuccess(t(\"createEmailSuccess\", { defaultValue: \"Email added.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useCreateEmail] error\"));\n },\n });\n};\n\nexport const useSendEmailVerificationCode = () => {\n const auth = useAuthRepository();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: ({ emailId, lang }: { emailId: string; lang?: LanguageEnum }) => auth.SendEmailVerificationCode(emailId, { lang }),\n onSuccess: () => {\n systemEventEmitter.showSuccess(t(\"sendVerificationCodeSuccess\", { defaultValue: \"Code sent\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSendEmailVerificationCode] error\"));\n },\n });\n};\n\nexport const useVerifyEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: ({ emailId, verificationCode }: { emailId: string; verificationCode: string }) =>\n auth.VerifyEmail(emailId, { verificationCode }),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n systemEventEmitter.showSuccess(t(\"verifyEmailSuccess\", { defaultValue: \"Email verified.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useVerifyEmail] error\"));\n },\n });\n};\n\nexport const useUpdateEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: ({ emailId, email }: { emailId: string; email: string }) => auth.UpdateEmail(emailId, { email }),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n systemEventEmitter.showSuccess(t(\"updateEmailSuccess\", { defaultValue: \"Email updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useUpdateEmail] error\"));\n },\n });\n};\n\nexport const useSetPrimaryEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (emailId: string) => auth.SetPrimaryEmail(emailId),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, accountId);\n systemEventEmitter.showSuccess(t(\"setPrimaryEmailSuccess\", { defaultValue: \"Primary email updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSetPrimaryEmail] error\"));\n },\n });\n};\n\nexport const useDeleteEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (emailId: string) => auth.DeleteEmail(emailId),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n systemEventEmitter.showSuccess(t(\"deleteEmailSuccess\", { defaultValue: \"Email removed.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useDeleteEmail] error\"));\n },\n });\n};\n\nexport const useSendChangePasswordVerificationCode = () => {\n const auth = useAuthRepository();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (body: Login.Request.SendChangePasswordVerificationCode = {}) => auth.SendChangePasswordVerificationCode(body),\n onSuccess: () => {\n systemEventEmitter.showSuccess(t(\"sendVerificationCodeSuccess\", { defaultValue: \"Code sent\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSendChangePasswordVerificationCode] error\"));\n },\n });\n};\n\nexport const useChangePassword = () => {\n const auth = useAuthRepository();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (body: Login.Request.ChangePassword) => auth.ChangePassword(body),\n onSuccess: () => {\n systemEventEmitter.showSuccess(t(\"changePasswordSuccess\", { defaultValue: \"Password updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useChangePassword] error\"));\n },\n });\n};\n\nexport const useConfirmProfileBackgrounds = () => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n return useMutation({\n mutationFn: (body: Profile.Request.ConfirmProfileBackgrounds) => auth.ConfirmProfileBackgrounds(kind, body),\n onSuccess: () => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, aID);\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useConfirmProfileBackgrounds] error\"));\n },\n });\n};\n\nexport const useCreatePhone = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (body: Login.Request.CreatePhone) => auth.CreatePhone(body),\n onSuccess: () => {\n authEventEmitter.invalidatePhones(accountId);\n systemEventEmitter.showSuccess(t(\"createPhoneSuccess\", { defaultValue: \"Phone added.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useCreatePhone] error\"));\n },\n });\n};\n\nexport const useSendPhoneVerificationCode = () => {\n const auth = useAuthRepository();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (phoneId: string) => auth.SendPhoneVerificationCode(phoneId),\n onSuccess: () => {\n systemEventEmitter.showSuccess(t(\"sendVerificationCodeSuccess\", { defaultValue: \"Code sent\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSendPhoneVerificationCode] error\"));\n },\n });\n};\n\nexport const useVerifyPhone = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: ({ phoneId, verificationCode }: { phoneId: string; verificationCode: string }) =>\n auth.VerifyPhone(phoneId, { verificationCode }),\n onSuccess: () => {\n authEventEmitter.invalidatePhones(accountId);\n systemEventEmitter.showSuccess(t(\"verifyPhoneSuccess\", { defaultValue: \"Phone verified.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useVerifyPhone] error\"));\n },\n });\n};\n\nexport const useUpdatePhone = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: ({ phoneId, phone }: { phoneId: string; phone: string }) => auth.UpdatePhone(phoneId, { phone }),\n onSuccess: () => {\n authEventEmitter.invalidatePhones(accountId);\n systemEventEmitter.showSuccess(t(\"updatePhoneSuccess\", { defaultValue: \"Phone updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useUpdatePhone] error\"));\n },\n });\n};\n\nexport const useSetPrimaryPhone = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (phoneId: string) => auth.SetPrimaryPhone(phoneId),\n onSuccess: () => {\n authEventEmitter.invalidatePhones(accountId);\n authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, accountId);\n systemEventEmitter.showSuccess(t(\"setPrimaryPhoneSuccess\", { defaultValue: \"Primary phone updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSetPrimaryPhone] error\"));\n },\n });\n};\n\nexport const useDeletePhone = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (phoneId: string) => auth.DeletePhone(phoneId),\n onSuccess: () => {\n authEventEmitter.invalidatePhones(accountId);\n systemEventEmitter.showSuccess(t(\"deletePhoneSuccess\", { defaultValue: \"Phone removed.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useDeletePhone] error\"));\n },\n });\n};\n\nexport const useSearchForgerProfiles = (query: string) => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n const trimmed = query.trim();\n return useUnifiedQuery(\n ({ query: q }) => auth.SearchForgerProfiles({ query: q, limit: 50, offset: 0 }),\n AUTH_PROFILE_SEARCH(aID, ProfileKindEnum.COMMUNITY, trimmed),\n { query: trimmed },\n { enabled: isAuthValid && Boolean(aID) && trimmed.length > 0 },\n );\n};\n\nexport const useSearchAuthorityProfiles = (query: string) => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n const trimmed = query.trim();\n return useUnifiedQuery(\n ({ query: q }) => auth.SearchAuthorityProfiles({ query: q, limit: 50, offset: 0 }),\n AUTH_PROFILE_SEARCH(aID, ProfileKindEnum.AUTHORITY, trimmed),\n { query: trimmed },\n { enabled: isAuthValid && Boolean(aID) && trimmed.length > 0 },\n );\n};\n\nexport const useGetPublicProfileCard = (profileId: string) => {\n const auth = useAuthRepository();\n const { isAuthValid } = useAuthQueryScope();\n return useUnifiedQuery(\n () => auth.GetPublicProfileCard(profileId),\n AUTH_PUBLIC_CARD(profileId),\n undefined,\n { enabled: isAuthValid && Boolean(profileId) },\n );\n};\n\nexport const useListOwnerForgerProfiles = (query = \"\") => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n const trimmed = query.trim();\n return useUnifiedQuery(\n ({ query: q }) => auth.ListOwnerForgerProfiles({ limit: 50, offset: 0, query: q || undefined }),\n [...AUTH_OWNER_FORGERS(aID), trimmed],\n { query: trimmed },\n { enabled: isAuthValid && Boolean(aID) },\n );\n};\n\nexport const useListOwnerAuthorityProfiles = (query = \"\") => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n const trimmed = query.trim();\n return useUnifiedQuery(\n ({ query: q }) => auth.ListOwnerAuthorityProfiles({ limit: 50, offset: 0, query: q || undefined }),\n [...AUTH_OWNER_AUTHORITIES(aID), trimmed],\n { query: trimmed },\n { enabled: isAuthValid && Boolean(aID) },\n );\n};\n\nexport const useUpdateAuthorityProfileRoles = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: ({ profileId, authorityRoles }: { profileId: string; authorityRoles: Profile.Request.UpdateAuthorityProfileRoles[\"authorityRoles\"] }) =>\n auth.UpdateAuthorityProfileRoles(profileId, { authorityRoles }),\n onSuccess: () => {\n authEventEmitter.invalidateOwner(accountId);\n systemEventEmitter.showSuccess(t(\"updateRolesSuccess\", { defaultValue: \"Roles updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useUpdateAuthorityProfileRoles] error\"));\n },\n });\n};\n\nexport { hasSelectedProfile, AuthStore, useAuthStore };\nexport { LanguageEnum, AuthSignupPlatformEnum };\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/DataProvider/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/DataProvider/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAkBvC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,oBAAoB,CAAC;CACrC;AAyED,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,iBAAiB,+BAUzE"}
|
|
@@ -1,64 +1,86 @@
|
|
|
1
1
|
import { setIdentityRepositories as e } from "../../apis/activeIdentityRepositories.js";
|
|
2
|
-
import { AuthStore as t, hasSelectedProfile as n, subscribeAuthStorageSync as r } from "../../stores/auth.js";
|
|
3
|
-
import { parseServerPreference as
|
|
4
|
-
import { scheduleAccessTokenRefresh as
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
2
|
+
import { AuthStore as t, hasSelectedProfile as n, subscribeAuthStorageSync as r, useAuthStore as i } from "../../stores/auth.js";
|
|
3
|
+
import { parseServerPreference as a, toServerPreference as o } from "../../stores/preference.js";
|
|
4
|
+
import { clearScheduledTokenRefresh as s, scheduleAccessTokenRefresh as c } from "../../apis/authRefresh.js";
|
|
5
|
+
import { authEventEmitter as l, authEvents as u } from "../../events/auth.js";
|
|
6
|
+
import { ApiAuthRepository as d } from "../../apis/repositories/AuthRepository.js";
|
|
7
|
+
import { ApiAssetRepository as f } from "../../apis/repositories/AssetRepository.js";
|
|
8
|
+
import { IdentityRepositoriesContext as p, useAuthRepository as m } from "../../apis/repositories/context.js";
|
|
9
|
+
import { useAuthQueryScope as h, useCurrentProfile as g } from "../../hooks/auth.js";
|
|
10
|
+
import { configurePreferenceSync as _, useApplyPreferenceOnLoad as v } from "../../hooks/preference.js";
|
|
11
|
+
import { useEffect as y, useMemo as b } from "react";
|
|
12
|
+
import { jsx as x, jsxs as S } from "react/jsx-runtime";
|
|
12
13
|
//#region src/providers/DataProvider/index.tsx
|
|
13
|
-
var
|
|
14
|
-
auth: new
|
|
15
|
-
asset: new
|
|
14
|
+
var C = {
|
|
15
|
+
auth: new d(),
|
|
16
|
+
asset: new f()
|
|
16
17
|
};
|
|
17
|
-
e(
|
|
18
|
-
function
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
|
|
18
|
+
e(C);
|
|
19
|
+
function w() {
|
|
20
|
+
let { refetch: e } = g(), a = i((e) => e.isAuthValid), o = i((e) => e.accessToken), d = i((e) => e.currentProfileId);
|
|
21
|
+
return y(() => {
|
|
22
|
+
if (!a || !o) {
|
|
23
|
+
s();
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
return c(o), () => s();
|
|
27
|
+
}, [a, o]), y(() => r(() => {
|
|
28
|
+
let { accessToken: e, isAuthValid: n } = t.getState();
|
|
29
|
+
if (!n || !e) {
|
|
30
|
+
s();
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
c(e);
|
|
34
|
+
}), []), y(() => {
|
|
35
|
+
a && n(d) && e();
|
|
36
|
+
}, [
|
|
37
|
+
a,
|
|
38
|
+
d,
|
|
39
|
+
e
|
|
40
|
+
]), y(() => {
|
|
41
|
+
let t = async () => {
|
|
42
|
+
await e();
|
|
43
|
+
};
|
|
44
|
+
return l.on(u.LOGIN_SUCCESS, t), () => {
|
|
45
|
+
l.off(u.LOGIN_SUCCESS, t);
|
|
46
|
+
};
|
|
47
|
+
}, [e]), null;
|
|
26
48
|
}
|
|
27
|
-
function
|
|
28
|
-
let e =
|
|
29
|
-
|
|
30
|
-
if (!r || !n(
|
|
31
|
-
|
|
49
|
+
function T() {
|
|
50
|
+
let e = m(), { kind: t, isAuthValid: r, pID: i } = h(), { profile: s } = g();
|
|
51
|
+
y(() => {
|
|
52
|
+
if (!r || !n(i)) {
|
|
53
|
+
_(void 0);
|
|
32
54
|
return;
|
|
33
55
|
}
|
|
34
|
-
return
|
|
35
|
-
e.UpdatePreference(t, JSON.stringify(
|
|
36
|
-
}), () =>
|
|
56
|
+
return _((n) => {
|
|
57
|
+
e.UpdatePreference(t, JSON.stringify(o(n)));
|
|
58
|
+
}), () => _(void 0);
|
|
37
59
|
}, [
|
|
38
60
|
e,
|
|
39
61
|
t,
|
|
40
62
|
r,
|
|
41
|
-
|
|
63
|
+
i
|
|
42
64
|
]);
|
|
43
|
-
let c =
|
|
44
|
-
return
|
|
45
|
-
isAuthValid: r && n(
|
|
46
|
-
applyKey:
|
|
65
|
+
let c = b(() => s?.preference ? a(s.preference) : null, [s?.preference]);
|
|
66
|
+
return v({
|
|
67
|
+
isAuthValid: r && n(i),
|
|
68
|
+
applyKey: i,
|
|
47
69
|
serverPreference: c
|
|
48
70
|
}), null;
|
|
49
71
|
}
|
|
50
|
-
function
|
|
51
|
-
let r = n ??
|
|
52
|
-
return e(r), /* @__PURE__ */
|
|
72
|
+
function E({ children: t, repositories: n }) {
|
|
73
|
+
let r = n ?? C;
|
|
74
|
+
return e(r), /* @__PURE__ */ S(p.Provider, {
|
|
53
75
|
value: r,
|
|
54
76
|
children: [
|
|
55
|
-
/* @__PURE__ */
|
|
56
|
-
/* @__PURE__ */
|
|
77
|
+
/* @__PURE__ */ x(w, {}),
|
|
78
|
+
/* @__PURE__ */ x(T, {}),
|
|
57
79
|
t
|
|
58
80
|
]
|
|
59
81
|
});
|
|
60
82
|
}
|
|
61
83
|
//#endregion
|
|
62
|
-
export {
|
|
84
|
+
export { E as DataProvider };
|
|
63
85
|
|
|
64
86
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/providers/DataProvider/index.tsx"],"sourcesContent":["import type { IdentityRepositories } from \"nfx-ui/apis\";\nimport type { ReactNode } from \"react\";\n\nimport { useEffect, useMemo } from \"react\";\nimport { ApiAssetRepository, ApiAuthRepository, IdentityRepositoriesContext, setIdentityRepositories, useAuthRepository } from \"nfx-ui/apis\";\nimport { scheduleAccessTokenRefresh } from \"nfx-ui/apis/authRefresh\";\nimport { useAuthQueryScope, useCurrentProfile } from \"nfx-ui/hooks/auth\";\nimport { configurePreferenceSync, useApplyPreferenceOnLoad } from \"nfx-ui/hooks/preference\";\nimport { AuthStore, hasSelectedProfile, subscribeAuthStorageSync } from \"nfx-ui/stores/auth\";\nimport { parseServerPreference, toServerPreference } from \"nfx-ui/stores/preference\";\n\nconst defaultIdentityRepositories: IdentityRepositories = {\n auth: new ApiAuthRepository(),\n asset: new ApiAssetRepository(),\n};\n\nsetIdentityRepositories(defaultIdentityRepositories);\n\nexport interface DataProviderProps {\n children: ReactNode;\n repositories?: IdentityRepositories;\n}\n\nfunction AuthSessionBootstrap() {\n
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/providers/DataProvider/index.tsx"],"sourcesContent":["import type { IdentityRepositories } from \"nfx-ui/apis\";\nimport type { ReactNode } from \"react\";\n\nimport { useEffect, useMemo } from \"react\";\nimport { ApiAssetRepository, ApiAuthRepository, IdentityRepositoriesContext, setIdentityRepositories, useAuthRepository } from \"nfx-ui/apis\";\nimport { clearScheduledTokenRefresh, scheduleAccessTokenRefresh } from \"nfx-ui/apis/authRefresh\";\nimport { authEventEmitter, authEvents } from \"nfx-ui/events/auth\";\nimport { useAuthQueryScope, useCurrentProfile } from \"nfx-ui/hooks/auth\";\nimport { configurePreferenceSync, useApplyPreferenceOnLoad } from \"nfx-ui/hooks/preference\";\nimport { AuthStore, hasSelectedProfile, subscribeAuthStorageSync, useAuthStore } from \"nfx-ui/stores/auth\";\nimport { parseServerPreference, toServerPreference } from \"nfx-ui/stores/preference\";\n\nconst defaultIdentityRepositories: IdentityRepositories = {\n auth: new ApiAuthRepository(),\n asset: new ApiAssetRepository(),\n};\n\nsetIdentityRepositories(defaultIdentityRepositories);\n\nexport interface DataProviderProps {\n children: ReactNode;\n repositories?: IdentityRepositories;\n}\n\nfunction AuthSessionBootstrap() {\n const { refetch } = useCurrentProfile();\n const isAuthValid = useAuthStore((s) => s.isAuthValid);\n const accessToken = useAuthStore((s) => s.accessToken);\n const profileId = useAuthStore((s) => s.currentProfileId);\n\n useEffect(() => {\n if (!isAuthValid || !accessToken) {\n clearScheduledTokenRefresh();\n return;\n }\n scheduleAccessTokenRefresh(accessToken);\n return () => clearScheduledTokenRefresh();\n }, [isAuthValid, accessToken]);\n\n useEffect(() => {\n return subscribeAuthStorageSync(() => {\n const { accessToken: nextAccessToken, isAuthValid: nextValid } = AuthStore.getState();\n if (!nextValid || !nextAccessToken) {\n clearScheduledTokenRefresh();\n return;\n }\n scheduleAccessTokenRefresh(nextAccessToken);\n });\n }, []);\n\n useEffect(() => {\n if (!isAuthValid || !hasSelectedProfile(profileId)) return;\n void refetch();\n }, [isAuthValid, profileId, refetch]);\n\n useEffect(() => {\n const onLoginSuccess = async () => {\n await refetch();\n };\n authEventEmitter.on(authEvents.LOGIN_SUCCESS, onLoginSuccess);\n return () => {\n authEventEmitter.off(authEvents.LOGIN_SUCCESS, onLoginSuccess);\n };\n }, [refetch]);\n\n return null;\n}\n\nfunction AuthPreferenceSync() {\n const auth = useAuthRepository();\n const { kind, isAuthValid, pID } = useAuthQueryScope();\n const { profile } = useCurrentProfile();\n\n useEffect(() => {\n if (!isAuthValid || !hasSelectedProfile(pID)) {\n configurePreferenceSync(undefined);\n return;\n }\n configurePreferenceSync((state) => {\n void auth.UpdatePreference(kind, JSON.stringify(toServerPreference(state)));\n });\n return () => configurePreferenceSync(undefined);\n }, [auth, kind, isAuthValid, pID]);\n\n const serverPreference = useMemo(() => (profile?.preference ? parseServerPreference(profile.preference) : null), [profile?.preference]);\n\n useApplyPreferenceOnLoad({\n isAuthValid: isAuthValid && hasSelectedProfile(pID),\n applyKey: pID,\n serverPreference,\n });\n\n return null;\n}\n\nexport function DataProvider({ children, repositories }: DataProviderProps) {\n const value = repositories ?? defaultIdentityRepositories;\n setIdentityRepositories(value);\n return (\n <IdentityRepositoriesContext.Provider value={value}>\n <AuthSessionBootstrap />\n <AuthPreferenceSync />\n {children}\n </IdentityRepositoriesContext.Provider>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAYA,IAAM,IAAoD;CACxD,MAAM,IAAI,EAAkB;CAC5B,OAAO,IAAI,EAAmB;AAChC;AAEA,EAAwB,CAA2B;AAOnD,SAAS,IAAuB;CAC9B,IAAM,EAAE,eAAY,EAAkB,GAChC,IAAc,GAAc,MAAM,EAAE,WAAW,GAC/C,IAAc,GAAc,MAAM,EAAE,WAAW,GAC/C,IAAY,GAAc,MAAM,EAAE,gBAAgB;CAqCxD,OAnCA,QAAgB;EACd,IAAI,CAAC,KAAe,CAAC,GAAa;GAChC,EAA2B;GAC3B;EACF;EAEA,OADA,EAA2B,CAAW,SACzB,EAA2B;CAC1C,GAAG,CAAC,GAAa,CAAW,CAAC,GAE7B,QACS,QAA+B;EACpC,IAAM,EAAE,aAAa,GAAiB,aAAa,MAAc,EAAU,SAAS;EACpF,IAAI,CAAC,KAAa,CAAC,GAAiB;GAClC,EAA2B;GAC3B;EACF;EACA,EAA2B,CAAe;CAC5C,CAAC,GACA,CAAC,CAAC,GAEL,QAAgB;EACV,AAAC,KAAgB,EAAmB,CAAS,KACjD,EAAa;CACf,GAAG;EAAC;EAAa;EAAW;CAAO,CAAC,GAEpC,QAAgB;EACd,IAAM,IAAiB,YAAY;GACjC,MAAM,EAAQ;EAChB;EAEA,OADA,EAAiB,GAAG,EAAW,eAAe,CAAc,SAC/C;GACX,EAAiB,IAAI,EAAW,eAAe,CAAc;EAC/D;CACF,GAAG,CAAC,CAAO,CAAC,GAEL;AACT;AAEA,SAAS,IAAqB;CAC5B,IAAM,IAAO,EAAkB,GACzB,EAAE,SAAM,gBAAa,WAAQ,EAAkB,GAC/C,EAAE,eAAY,EAAkB;CAEtC,QAAgB;EACd,IAAI,CAAC,KAAe,CAAC,EAAmB,CAAG,GAAG;GAC5C,EAAwB,KAAA,CAAS;GACjC;EACF;EAIA,OAHA,GAAyB,MAAU;GACjC,EAAU,iBAAiB,GAAM,KAAK,UAAU,EAAmB,CAAK,CAAC,CAAC;EAC5E,CAAC,SACY,EAAwB,KAAA,CAAS;CAChD,GAAG;EAAC;EAAM;EAAM;EAAa;CAAG,CAAC;CAEjC,IAAM,IAAmB,QAAe,GAAS,aAAa,EAAsB,EAAQ,UAAU,IAAI,MAAO,CAAC,GAAS,UAAU,CAAC;CAQtI,OANA,EAAyB;EACvB,aAAa,KAAe,EAAmB,CAAG;EAClD,UAAU;EACV;CACF,CAAC,GAEM;AACT;AAEA,SAAgB,EAAa,EAAE,aAAU,mBAAmC;CAC1E,IAAM,IAAQ,KAAgB;CAE9B,OADA,EAAwB,CAAK,GAE3B,kBAAC,EAA4B,UAA7B;EAA6C;EAA7C,UAAA;GACE,kBAAC,GAAD,CAAuB,CAAA;GACvB,kBAAC,GAAD,CAAqB,CAAA;GACpB;EACmC;;AAE1C"}
|
package/package.json
CHANGED
package/src/events/system.ts
CHANGED
|
@@ -9,6 +9,8 @@ import { singleton } from "nfx-ui/utils/singleton";
|
|
|
9
9
|
export const systemEvents = defineEvents({
|
|
10
10
|
SHOW_ERROR: "SYSTEM:SHOW_ERROR",
|
|
11
11
|
SHOW_SUCCESS: "SYSTEM:SHOW_SUCCESS",
|
|
12
|
+
SHOW_LOADING: "SYSTEM:SHOW_LOADING",
|
|
13
|
+
HIDE_LOADING: "SYSTEM:HIDE_LOADING",
|
|
12
14
|
});
|
|
13
15
|
|
|
14
16
|
type SystemEvent = EventNamesOf<typeof systemEvents>;
|
|
@@ -26,9 +28,15 @@ export type SystemShowSuccessPayload =
|
|
|
26
28
|
onClick?: () => void;
|
|
27
29
|
};
|
|
28
30
|
|
|
31
|
+
export type SystemShowLoadingPayload = {
|
|
32
|
+
message?: string;
|
|
33
|
+
};
|
|
34
|
+
|
|
29
35
|
type SystemPayloadMap = {
|
|
30
36
|
"SYSTEM:SHOW_ERROR": SystemShowErrorPayload;
|
|
31
37
|
"SYSTEM:SHOW_SUCCESS": SystemShowSuccessPayload;
|
|
38
|
+
"SYSTEM:SHOW_LOADING": SystemShowLoadingPayload;
|
|
39
|
+
"SYSTEM:HIDE_LOADING": void;
|
|
32
40
|
};
|
|
33
41
|
|
|
34
42
|
class SystemEventEmitter extends EventEmitter<SystemEvent, SystemPayloadMap> {
|
|
@@ -43,6 +51,14 @@ class SystemEventEmitter extends EventEmitter<SystemEvent, SystemPayloadMap> {
|
|
|
43
51
|
showSuccess(props: SystemShowSuccessPayload) {
|
|
44
52
|
this.emit(systemEvents.SHOW_SUCCESS, props);
|
|
45
53
|
}
|
|
54
|
+
|
|
55
|
+
showLoading(message?: string) {
|
|
56
|
+
this.emit(systemEvents.SHOW_LOADING, { message });
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
hideLoading() {
|
|
60
|
+
this.emit(systemEvents.HIDE_LOADING);
|
|
61
|
+
}
|
|
46
62
|
}
|
|
47
63
|
|
|
48
64
|
export const systemEventEmitter = new (singleton(SystemEventEmitter))();
|
package/src/hooks/auth.ts
CHANGED
|
@@ -5,6 +5,7 @@ import type { AxiosError } from "axios";
|
|
|
5
5
|
import type { CurrentProfileResult, Login, Profile, Signup } from "nfx-ui/types";
|
|
6
6
|
|
|
7
7
|
import { useEffect } from "react";
|
|
8
|
+
import { flushSync } from "react-dom";
|
|
8
9
|
import { useMutation } from "@tanstack/react-query";
|
|
9
10
|
import { useAuthRepository } from "nfx-ui/apis/repositories";
|
|
10
11
|
import { AUTH_EMAILS, AUTH_ME, AUTH_OWNER_AUTHORITIES, AUTH_OWNER_FORGERS, AUTH_PHONES, AUTH_PROFILE_SEARCH, AUTH_PROFILES, AUTH_PUBLIC_CARD } from "nfx-ui/constants";
|
|
@@ -175,7 +176,15 @@ export const useLoginWithPhone = () => {
|
|
|
175
176
|
});
|
|
176
177
|
};
|
|
177
178
|
|
|
178
|
-
export
|
|
179
|
+
export type SelectProfileOptions = {
|
|
180
|
+
/** 已翻译的加载文案。Host-translated loading copy. */
|
|
181
|
+
switchingMsg?: string;
|
|
182
|
+
/** 与 token、档案同一次提交里执行(例如跳到该档案的首页)。Runs in the same commit as the token and profile. */
|
|
183
|
+
onCommit?: () => void;
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
/** 两步登录第二步:切换当前 profile,重新签发 token。kind 决定后端分派到社区/权限档。 */
|
|
187
|
+
export const useSelectProfile = (options?: SelectProfileOptions) => {
|
|
179
188
|
const auth = useAuthRepository();
|
|
180
189
|
return useMutation({
|
|
181
190
|
mutationFn: async ({ profileId, kind }: { profileId: string; kind: Login.ProfileKind }) =>
|
|
@@ -184,18 +193,29 @@ export const useSelectProfile = () => {
|
|
|
184
193
|
kind,
|
|
185
194
|
deviceId: await ensureDeviceIdStorage(),
|
|
186
195
|
}),
|
|
196
|
+
onMutate: () => {
|
|
197
|
+
if (options?.switchingMsg) systemEventEmitter.showLoading(options.switchingMsg);
|
|
198
|
+
},
|
|
187
199
|
onSuccess: (result, variables) => {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
200
|
+
try {
|
|
201
|
+
if (!result?.accessToken) return;
|
|
202
|
+
// 同一次提交写入新 token 和档案,旧角色的请求在重拉前先停用。
|
|
203
|
+
flushSync(() => {
|
|
204
|
+
setTokens({
|
|
205
|
+
accessToken: result.accessToken,
|
|
206
|
+
refreshToken: safeStringable(result.refreshToken),
|
|
207
|
+
});
|
|
208
|
+
setCurrentProfileKind(variables.kind);
|
|
209
|
+
if (result.profileId) setCurrentProfileId(result.profileId);
|
|
210
|
+
options?.onCommit?.();
|
|
192
211
|
});
|
|
193
|
-
setCurrentProfileKind(variables.kind);
|
|
194
|
-
if (result.profileId) setCurrentProfileId(result.profileId);
|
|
195
212
|
authEventEmitter.emit(authEvents.LOGIN_SUCCESS, result.accountId);
|
|
213
|
+
} finally {
|
|
214
|
+
systemEventEmitter.hideLoading();
|
|
196
215
|
}
|
|
197
216
|
},
|
|
198
217
|
onError: (error: AxiosError) => {
|
|
218
|
+
systemEventEmitter.hideLoading();
|
|
199
219
|
systemEventEmitter.showError(getApiErrorMessage(error, "[useSelectProfile] error"));
|
|
200
220
|
},
|
|
201
221
|
});
|
|
@@ -3,10 +3,11 @@ import type { ReactNode } from "react";
|
|
|
3
3
|
|
|
4
4
|
import { useEffect, useMemo } from "react";
|
|
5
5
|
import { ApiAssetRepository, ApiAuthRepository, IdentityRepositoriesContext, setIdentityRepositories, useAuthRepository } from "nfx-ui/apis";
|
|
6
|
-
import { scheduleAccessTokenRefresh } from "nfx-ui/apis/authRefresh";
|
|
6
|
+
import { clearScheduledTokenRefresh, scheduleAccessTokenRefresh } from "nfx-ui/apis/authRefresh";
|
|
7
|
+
import { authEventEmitter, authEvents } from "nfx-ui/events/auth";
|
|
7
8
|
import { useAuthQueryScope, useCurrentProfile } from "nfx-ui/hooks/auth";
|
|
8
9
|
import { configurePreferenceSync, useApplyPreferenceOnLoad } from "nfx-ui/hooks/preference";
|
|
9
|
-
import { AuthStore, hasSelectedProfile, subscribeAuthStorageSync } from "nfx-ui/stores/auth";
|
|
10
|
+
import { AuthStore, hasSelectedProfile, subscribeAuthStorageSync, useAuthStore } from "nfx-ui/stores/auth";
|
|
10
11
|
import { parseServerPreference, toServerPreference } from "nfx-ui/stores/preference";
|
|
11
12
|
|
|
12
13
|
const defaultIdentityRepositories: IdentityRepositories = {
|
|
@@ -22,14 +23,46 @@ export interface DataProviderProps {
|
|
|
22
23
|
}
|
|
23
24
|
|
|
24
25
|
function AuthSessionBootstrap() {
|
|
26
|
+
const { refetch } = useCurrentProfile();
|
|
27
|
+
const isAuthValid = useAuthStore((s) => s.isAuthValid);
|
|
28
|
+
const accessToken = useAuthStore((s) => s.accessToken);
|
|
29
|
+
const profileId = useAuthStore((s) => s.currentProfileId);
|
|
30
|
+
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (!isAuthValid || !accessToken) {
|
|
33
|
+
clearScheduledTokenRefresh();
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
scheduleAccessTokenRefresh(accessToken);
|
|
37
|
+
return () => clearScheduledTokenRefresh();
|
|
38
|
+
}, [isAuthValid, accessToken]);
|
|
39
|
+
|
|
25
40
|
useEffect(() => {
|
|
26
|
-
const accessToken = AuthStore.getState().accessToken;
|
|
27
|
-
if (accessToken) scheduleAccessTokenRefresh(accessToken);
|
|
28
41
|
return subscribeAuthStorageSync(() => {
|
|
29
|
-
const
|
|
30
|
-
if (
|
|
42
|
+
const { accessToken: nextAccessToken, isAuthValid: nextValid } = AuthStore.getState();
|
|
43
|
+
if (!nextValid || !nextAccessToken) {
|
|
44
|
+
clearScheduledTokenRefresh();
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
scheduleAccessTokenRefresh(nextAccessToken);
|
|
31
48
|
});
|
|
32
49
|
}, []);
|
|
50
|
+
|
|
51
|
+
useEffect(() => {
|
|
52
|
+
if (!isAuthValid || !hasSelectedProfile(profileId)) return;
|
|
53
|
+
void refetch();
|
|
54
|
+
}, [isAuthValid, profileId, refetch]);
|
|
55
|
+
|
|
56
|
+
useEffect(() => {
|
|
57
|
+
const onLoginSuccess = async () => {
|
|
58
|
+
await refetch();
|
|
59
|
+
};
|
|
60
|
+
authEventEmitter.on(authEvents.LOGIN_SUCCESS, onLoginSuccess);
|
|
61
|
+
return () => {
|
|
62
|
+
authEventEmitter.off(authEvents.LOGIN_SUCCESS, onLoginSuccess);
|
|
63
|
+
};
|
|
64
|
+
}, [refetch]);
|
|
65
|
+
|
|
33
66
|
return null;
|
|
34
67
|
}
|
|
35
68
|
|