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