@arcblock/did-connect-react 3.1.33 → 3.1.35
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/lib/Session/hooks/use-session-token.js +115 -109
- package/lib/Session/index.js +300 -294
- package/lib/constant.js +13 -12
- package/lib/index.js +74 -73
- package/lib/package.json.js +1 -1
- package/package.json +5 -5
- package/src/Session/hooks/use-session-token.js +6 -1
- package/src/Session/index.jsx +8 -0
- package/src/constant.js +1 -0
|
@@ -1,173 +1,179 @@
|
|
|
1
|
-
import { useState as
|
|
2
|
-
import { useCreation as
|
|
3
|
-
import { joinURL as
|
|
4
|
-
import
|
|
5
|
-
import { setVisitorId as
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import { ReactGA as
|
|
11
|
-
import { GA_LAST_SOURCE_PROVIDER as
|
|
12
|
-
import
|
|
13
|
-
import { createAxios as
|
|
14
|
-
import { CHECK_INTERVAL_TIME as m, LANG_COOKIE_NAME as
|
|
1
|
+
import { useState as M } from "react";
|
|
2
|
+
import { useCreation as N, useMemoizedFn as c, useInterval as oe } from "ahooks";
|
|
3
|
+
import { joinURL as A, withQuery as ne } from "ufo";
|
|
4
|
+
import h from "js-cookie";
|
|
5
|
+
import { setVisitorId as se, getCookieOptions as te } from "@arcblock/ux/lib/Util";
|
|
6
|
+
import ie from "jwt-decode";
|
|
7
|
+
import ce from "@arcblock/ux/lib/Toast";
|
|
8
|
+
import fe from "p-retry";
|
|
9
|
+
import le from "lodash/noop";
|
|
10
|
+
import { ReactGA as ue } from "@arcblock/ux/lib/withTracker";
|
|
11
|
+
import { GA_LAST_SOURCE_PROVIDER as ae } from "@arcblock/ux/lib/withTracker/constant";
|
|
12
|
+
import de from "../../Service/index.js";
|
|
13
|
+
import { createAxios as ke, getBrowserLang as he, logger as O, debug as u, sleep as me, decrypt as Te } from "../../utils.js";
|
|
14
|
+
import { CHECK_INTERVAL_TIME as m, LANG_COOKIE_NAME as pe } from "../../constant.js";
|
|
15
15
|
class T extends Error {
|
|
16
16
|
}
|
|
17
|
-
const
|
|
18
|
-
function
|
|
17
|
+
const Re = 10, p = (e) => Te(e, localStorage.getItem("__encKey"), localStorage.getItem("__decKey"));
|
|
18
|
+
function Ve({
|
|
19
19
|
state: e,
|
|
20
20
|
pageState: i,
|
|
21
|
-
serviceHost:
|
|
22
|
-
sessionTokenStorage:
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
serviceHost: R,
|
|
22
|
+
sessionTokenStorage: V,
|
|
23
|
+
csrfTokenStorage: b,
|
|
24
|
+
refreshTokenStorage: q,
|
|
25
|
+
lazyRefreshToken: z,
|
|
26
|
+
apiOptions: P = {},
|
|
27
|
+
onRefresh: j = le
|
|
27
28
|
}) {
|
|
28
|
-
const [
|
|
29
|
-
baseURL:
|
|
29
|
+
const [D, y] = M(0), [B, d] = M(m), { getToken: w, setToken: v, removeToken: $ } = V, { setToken: Q } = b, { getToken: C, setToken: g, removeToken: X } = q, Y = N(() => ke({
|
|
30
|
+
baseURL: R,
|
|
30
31
|
timeout: 10 * 1e3,
|
|
31
32
|
secure: !0
|
|
32
|
-
}), [
|
|
33
|
-
|
|
34
|
-
}, _ =
|
|
33
|
+
}), [R]), k = () => {
|
|
34
|
+
$(), X();
|
|
35
|
+
}, _ = N(() => de(
|
|
35
36
|
{
|
|
36
|
-
sessionTokenStorage:
|
|
37
|
-
refreshTokenStorage:
|
|
38
|
-
serviceHost:
|
|
37
|
+
sessionTokenStorage: V,
|
|
38
|
+
refreshTokenStorage: q,
|
|
39
|
+
serviceHost: R,
|
|
39
40
|
authServicePrefix: i.prefix,
|
|
40
41
|
onRefreshTokenError() {
|
|
41
|
-
|
|
42
|
+
k(), e.user && (e.user = null);
|
|
42
43
|
}
|
|
43
44
|
},
|
|
44
|
-
|
|
45
|
-
), [
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
},
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
}),
|
|
52
|
-
const
|
|
45
|
+
P
|
|
46
|
+
), [R, i.prefix]), x = () => {
|
|
47
|
+
const r = te({ returnDomain: !1 });
|
|
48
|
+
h.remove("connected_did", r), h.remove("connected_pk", r), h.remove("connected_app", r), h.remove("connected_wallet_os", r), k();
|
|
49
|
+
}, J = c(() => {
|
|
50
|
+
const r = h.get(pe) || he();
|
|
51
|
+
r !== i.currentLocale && (i.currentLocale = r);
|
|
52
|
+
}), W = c(async () => {
|
|
53
|
+
const r = () => _.get(A(i.notificationPrefix, "/unread-count"));
|
|
53
54
|
try {
|
|
54
|
-
const { data: n } = await
|
|
55
|
+
const { data: n } = await r();
|
|
55
56
|
return n.unReadCount;
|
|
56
57
|
} catch (n) {
|
|
57
58
|
return console.error("getUnreadCount error", n), 0;
|
|
58
59
|
}
|
|
59
|
-
}),
|
|
60
|
-
async ({ showProgress:
|
|
60
|
+
}), F = c(
|
|
61
|
+
async ({ showProgress: r = !1, requestFn: n = null, onlyRefreshToken: t = !1, type: s = "refreshToken" }) => {
|
|
61
62
|
try {
|
|
62
63
|
if (e.loading)
|
|
63
64
|
return console.warn("SessionProvider.refresh is currently in progress, call it will be noop"), { loading: !0 };
|
|
64
|
-
|
|
65
|
-
const { data:
|
|
66
|
-
if (a &&
|
|
65
|
+
r && (e.loading = !0);
|
|
66
|
+
const { data: o, status: f } = await n(), a = o?.user?.did;
|
|
67
|
+
if (a && ue.set({
|
|
67
68
|
user_id: a
|
|
68
|
-
}),
|
|
69
|
-
throw e.error =
|
|
70
|
-
if (
|
|
69
|
+
}), o?.user?.sourceProvider && localStorage.setItem(ae, o.user.sourceProvider), f === 400 && (k(), e.user = null, e.error = ""), o.error)
|
|
70
|
+
throw e.error = o.error, e.open = !1, e.unReadCount = 0, new Error(o.error);
|
|
71
|
+
if (o.user) {
|
|
71
72
|
try {
|
|
72
|
-
const l = await
|
|
73
|
+
const l = await W();
|
|
73
74
|
e.unReadCount = l || 0;
|
|
74
75
|
} catch (l) {
|
|
75
|
-
|
|
76
|
+
O.error("getUnreadCount error", l), e.unReadCount = 0;
|
|
76
77
|
}
|
|
77
|
-
|
|
78
|
-
type:
|
|
79
|
-
sessionToken:
|
|
80
|
-
refreshToken:
|
|
81
|
-
user:
|
|
82
|
-
}),
|
|
78
|
+
o.nextToken && (v(o.nextToken), j({
|
|
79
|
+
type: s,
|
|
80
|
+
sessionToken: o.nextToken,
|
|
81
|
+
refreshToken: o.nextRefreshToken,
|
|
82
|
+
user: o.user
|
|
83
|
+
}), o.nextRefreshToken && g(o.nextRefreshToken)), t || (e.open = !1, e.user = o.user, e.provider = o.provider, e.walletOS = o.walletOS), w() || ce.error("Can't write session token, please use https url to access this page");
|
|
83
84
|
} else
|
|
84
|
-
throw
|
|
85
|
-
return { data:
|
|
86
|
-
} catch (
|
|
87
|
-
throw
|
|
85
|
+
throw r && (e.loading = i.autoConnect), e.open = i.autoConnect, e.user = null, e.provider = "", e.walletOS = "", e.unReadCount = 0, new T("Invalid token");
|
|
86
|
+
return { data: o, status: f };
|
|
87
|
+
} catch (o) {
|
|
88
|
+
throw O.error("SessionProvider.refresh error", o), e.open = !1, e.error = o.message, o?.response?.status === 400 ? new T("Invalid token") : o;
|
|
88
89
|
} finally {
|
|
89
|
-
|
|
90
|
+
r && (e.loading = !1);
|
|
90
91
|
}
|
|
91
92
|
}
|
|
92
|
-
), I = c(async (
|
|
93
|
-
u("handleRefreshToken", { showProgress:
|
|
94
|
-
const
|
|
93
|
+
), I = c(async (r = !1, n = !1) => {
|
|
94
|
+
u("handleRefreshToken", { showProgress: r, onlyRefreshToken: n });
|
|
95
|
+
const t = () => Y.post(ne(A(i.prefix, "/refreshSession")), null, {
|
|
95
96
|
headers: {
|
|
96
|
-
authorization: `Bearer ${encodeURIComponent(
|
|
97
|
+
authorization: `Bearer ${encodeURIComponent(C())}`
|
|
97
98
|
}
|
|
98
99
|
});
|
|
99
100
|
d(void 0);
|
|
100
101
|
try {
|
|
101
|
-
await
|
|
102
|
-
} catch (
|
|
103
|
-
|
|
102
|
+
await F({ showProgress: r, requestFn: t, onlyRefreshToken: n, type: "refreshToken" }), y(0), d(m);
|
|
103
|
+
} catch (s) {
|
|
104
|
+
s instanceof T ? (console.warn("refresh token failed, remove all tokens"), y(0), k(), d(m)) : (O.error("refresh token failed, unexpected error:", s), y(D + 1), await me(m), D >= Re ? (y(0), d(void 0)) : d(m));
|
|
104
105
|
}
|
|
105
|
-
}),
|
|
106
|
-
if (
|
|
106
|
+
}), G = c((r = !1) => {
|
|
107
|
+
if (z)
|
|
107
108
|
return;
|
|
108
|
-
const n =
|
|
109
|
-
let
|
|
110
|
-
const
|
|
109
|
+
const n = w();
|
|
110
|
+
let t = r;
|
|
111
|
+
const s = (/* @__PURE__ */ new Date()).getTime();
|
|
111
112
|
if (n)
|
|
112
113
|
try {
|
|
113
|
-
const { exp:
|
|
114
|
-
|
|
114
|
+
const { exp: o, iat: f } = ie(n);
|
|
115
|
+
o * 1e3 - s < s - f * 1e3 && (t = !0);
|
|
115
116
|
} catch {
|
|
116
|
-
|
|
117
|
+
t = !0;
|
|
117
118
|
}
|
|
118
119
|
else
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}),
|
|
122
|
-
const
|
|
120
|
+
t = !0;
|
|
121
|
+
t && (C() ? I(!1, !0) : (x(), e.user && (e.user = null)));
|
|
122
|
+
}), K = c(async ({ showProgress: r = !1, forceRefreshToken: n = !1 } = {}) => {
|
|
123
|
+
const t = () => fe(() => _.get(A(i.prefix, "/session"), { secure: !0 }), {
|
|
123
124
|
retries: 2
|
|
124
125
|
});
|
|
125
|
-
u("handleRefreshUser", { showProgress:
|
|
126
|
+
u("handleRefreshUser", { showProgress: r, forceRefreshToken: n });
|
|
126
127
|
try {
|
|
127
128
|
if (n)
|
|
128
129
|
throw new T("need force refresh token");
|
|
129
|
-
await
|
|
130
|
-
} catch (
|
|
131
|
-
|
|
130
|
+
await F({ showProgress: r, requestFn: t, type: "refreshUser" });
|
|
131
|
+
} catch (s) {
|
|
132
|
+
s instanceof T && (u("handleRefreshUser failed, try to refresh token", { err: s }), await I());
|
|
132
133
|
}
|
|
133
|
-
}),
|
|
134
|
-
const
|
|
135
|
-
e.user || (
|
|
136
|
-
}),
|
|
134
|
+
}), Z = c(async () => {
|
|
135
|
+
const r = w(), n = C();
|
|
136
|
+
e.user || (r || n ? await K() : (x(), e.user && (e.user = null)));
|
|
137
|
+
}), H = c(() => {
|
|
137
138
|
if (e.initialized && e.user)
|
|
138
139
|
try {
|
|
139
|
-
|
|
140
|
+
G();
|
|
140
141
|
} catch {
|
|
141
142
|
}
|
|
142
|
-
}),
|
|
143
|
-
const n = Array.isArray(
|
|
144
|
-
u("handleLoginResult", { loginResult: n, result:
|
|
145
|
-
const { loginToken: s, sessionToken:
|
|
146
|
-
let
|
|
147
|
-
|
|
143
|
+
}), ee = c((r) => {
|
|
144
|
+
const n = Array.isArray(r) ? r[0] : r;
|
|
145
|
+
u("handleLoginResult", { loginResult: n, result: r });
|
|
146
|
+
const { loginToken: t, csrfToken: s, sessionToken: o, refreshToken: f, visitorId: a, encrypted: l = !0 } = n, L = t || o;
|
|
147
|
+
let S, E, U;
|
|
148
|
+
if (L) {
|
|
149
|
+
S = l ? p(L) : L, u("handleLoginResult: setSessionToken", { decryptSessionToken: S }), v(S);
|
|
150
|
+
const re = l ? p(s) : s;
|
|
151
|
+
Q(re), f && (E = l ? p(f) : f, u("handleLoginResult: setRefreshToken", { decryptRefreshToken: E }), g(E));
|
|
152
|
+
}
|
|
153
|
+
a && (U = l ? p(a) : a, u("handleLoginResult: setVisitorId", { decryptVisitorId: U }), se(U));
|
|
148
154
|
});
|
|
149
|
-
return
|
|
155
|
+
return oe(
|
|
150
156
|
() => {
|
|
151
|
-
|
|
157
|
+
J(), G();
|
|
152
158
|
},
|
|
153
|
-
|
|
159
|
+
B,
|
|
154
160
|
{ immediate: !0 }
|
|
155
161
|
), {
|
|
156
|
-
renewToken:
|
|
157
|
-
handleRefreshUser:
|
|
162
|
+
renewToken: H,
|
|
163
|
+
handleRefreshUser: K,
|
|
158
164
|
handleRefreshToken: I,
|
|
159
|
-
syncSessionSate:
|
|
160
|
-
handleLoginResult:
|
|
161
|
-
decrypt:
|
|
162
|
-
removeToken:
|
|
165
|
+
syncSessionSate: Z,
|
|
166
|
+
handleLoginResult: ee,
|
|
167
|
+
decrypt: p,
|
|
168
|
+
removeToken: k,
|
|
163
169
|
clearSession: x,
|
|
164
|
-
getSessionToken:
|
|
165
|
-
getRefreshToken:
|
|
170
|
+
getSessionToken: w,
|
|
171
|
+
getRefreshToken: C,
|
|
166
172
|
setRefreshToken: g,
|
|
167
|
-
setSessionToken:
|
|
173
|
+
setSessionToken: v,
|
|
168
174
|
service: _
|
|
169
175
|
};
|
|
170
176
|
}
|
|
171
177
|
export {
|
|
172
|
-
|
|
178
|
+
Ve as default
|
|
173
179
|
};
|