@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
package/lib/constant.js
CHANGED
|
@@ -1,22 +1,23 @@
|
|
|
1
|
-
const _ = 300, o = 1800, n = "/.well-known/service", E = "login_token", c = "
|
|
1
|
+
const _ = 300, o = 1800, n = "/.well-known/service", E = "login_token", c = "x-csrf-token", t = "refresh_token", e = "/.well-known/service", s = "/api/did", T = "DID Connect", d = "__did-connect__", A = ["scanned", "succeed", "error", "busy"], S = {
|
|
2
2
|
chrome: "https://chromewebstore.google.com/detail/did-wallet/ibjflpbmadchofnbpppegdbnifdgincp",
|
|
3
3
|
edge: "https://microsoftedge.microsoft.com/addons/detail/did-wallet/hjgoblidjnnnamdkinbichnfbmghmafd"
|
|
4
|
-
}, i = 2 * 1e3,
|
|
4
|
+
}, i = 2 * 1e3, I = 6, R = "nf_lang", O = 1e3, l = window?.blocklet?.DID_SPACES_BASE_URL || "https://www.didspaces.com/app";
|
|
5
5
|
export {
|
|
6
|
-
|
|
6
|
+
s as API_DID_PREFIX,
|
|
7
7
|
n as BLOCKLET_SERVICE_PATH_PREFIX,
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
A as BUSY_STATUS,
|
|
9
|
+
O as CHECK_INTERVAL_TIME,
|
|
10
10
|
i as CHECK_STATUS_INTERVAL,
|
|
11
|
-
|
|
11
|
+
c as CSRF_TOKEN_STORAGE_KEY,
|
|
12
|
+
T as DEFAULT_NAME,
|
|
12
13
|
_ as DEFAULT_TIMEOUT,
|
|
13
14
|
o as DEFAULT_WINDOW_TIMEOUT,
|
|
14
15
|
d as DID_CONNECT_URL_PARAMS_NAME,
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
l as DID_SPACES_BASE_URL,
|
|
17
|
+
S as EXT_DOWNLOAD_URL,
|
|
18
|
+
R as LANG_COOKIE_NAME,
|
|
19
|
+
t as REFRESH_TOKEN_STORAGE_KEY,
|
|
20
|
+
e as RELAY_SOCKET_PREFIX,
|
|
20
21
|
E as SESSION_TOKEN_STORAGE_KEY,
|
|
21
|
-
|
|
22
|
+
I as VERIFY_CODE_LENGTH
|
|
22
23
|
};
|
package/lib/index.js
CHANGED
|
@@ -1,107 +1,108 @@
|
|
|
1
1
|
import { default as t, default as r, default as s } from "./Connect/index.js";
|
|
2
2
|
import { default as n, default as d } from "./Button/index.js";
|
|
3
|
-
import { default as
|
|
4
|
-
import { createSessionContext as
|
|
5
|
-
import { OAuthConsumer as
|
|
6
|
-
import { PasskeyConsumer as
|
|
7
|
-
import { default as
|
|
3
|
+
import { default as f, default as p } from "@arcblock/ux/lib/DIDLogo";
|
|
4
|
+
import { createSessionContext as _, createAuthServiceSessionContext as x, createSessionContext as A } from "./Session/index.js";
|
|
5
|
+
import { OAuthConsumer as m, OAuthContext as i, OAuthProvider as T, useOAuth as I } from "./OAuth/context.js";
|
|
6
|
+
import { PasskeyConsumer as l, PasskeyContext as c, PasskeyProvider as O, usePasskey as D } from "./Passkey/context.js";
|
|
7
|
+
import { default as R } from "./Passkey/actions.js";
|
|
8
8
|
import { default as N } from "./User/use-did.js";
|
|
9
9
|
import { default as F } from "./User/wrap-did.js";
|
|
10
|
-
import { FederatedConsumer as
|
|
11
|
-
import { API_DID_PREFIX as V, BLOCKLET_SERVICE_PATH_PREFIX as v, BUSY_STATUS as B, CHECK_INTERVAL_TIME as W, CHECK_STATUS_INTERVAL as
|
|
12
|
-
import { createAxios as
|
|
13
|
-
import { NotOpenError as
|
|
10
|
+
import { FederatedConsumer as K, FederatedContext as M, FederatedProvider as y, useFederatedContext as h } from "./Federated/context.js";
|
|
11
|
+
import { API_DID_PREFIX as V, BLOCKLET_SERVICE_PATH_PREFIX as v, BUSY_STATUS as B, CHECK_INTERVAL_TIME as W, CHECK_STATUS_INTERVAL as Y, CSRF_TOKEN_STORAGE_KEY as G, DEFAULT_NAME as H, DEFAULT_TIMEOUT as b, DEFAULT_WINDOW_TIMEOUT as X, DID_CONNECT_URL_PARAMS_NAME as w, DID_SPACES_BASE_URL as q, EXT_DOWNLOAD_URL as j, LANG_COOKIE_NAME as z, REFRESH_TOKEN_STORAGE_KEY as J, RELAY_SOCKET_PREFIX as Q, SESSION_TOKEN_STORAGE_KEY as Z, VERIFY_CODE_LENGTH as $ } from "./constant.js";
|
|
12
|
+
import { createAxios as oe, debug as te, decodeConnectUrl as re, decodeKey as se, decodeUrlParams as ae, decrypt as ne, encodeConnectUrl as de, encodeKey as Ee, encrypt as fe, formatCacheTtl as pe, getApiErrorMessage as ue, getAppId as _e, getBrowserLang as xe, getConnectedInfo as Ae, getWebAuthnErrorMessage as Ce, logger as me, openPopup as ie, parseNextWorkflow as Te, parseTokenFromConnectUrl as Ie, runPopup as Se, sleep as le, updateConnectedInfo as ce, version as Oe } from "./utils.js";
|
|
13
|
+
import { NotOpenError as ge } from "./error.js";
|
|
14
14
|
import { default as Le } from "@arcblock/ux/lib/SessionManager";
|
|
15
|
-
import { default as
|
|
16
|
-
import { default as
|
|
15
|
+
import { default as Pe } from "@arcblock/ux/lib/Address";
|
|
16
|
+
import { default as Ue } from "@arcblock/ux/lib/Avatar";
|
|
17
17
|
import { default as Me } from "./Connect/use-connect.js";
|
|
18
|
-
import { EVENTS as
|
|
19
|
-
import { didSpacesIsRequired as
|
|
20
|
-
import { loginFederatedMaster as
|
|
21
|
-
import { translations as
|
|
22
|
-
import { checkEnableAutoLogin as be, getMobileVisitorId as
|
|
23
|
-
import { SessionContext as
|
|
18
|
+
import { EVENTS as he } from "./Session/libs/constants.js";
|
|
19
|
+
import { didSpacesIsRequired as Ve } from "./Session/libs/did-spaces.js";
|
|
20
|
+
import { loginFederatedMaster as Be, mountFederatedIframe as We } from "./Session/libs/federated.js";
|
|
21
|
+
import { translations as Ge } from "./Session/libs/locales.js";
|
|
22
|
+
import { checkEnableAutoLogin as be, getMobileVisitorId as Xe, login as we } from "./Session/libs/login-mobile.js";
|
|
23
|
+
import { SessionContext as je } from "./Session/context.js";
|
|
24
24
|
export * from "@arcblock/ux/lib/Util/wallet";
|
|
25
|
-
import { getVisitorId as
|
|
25
|
+
import { getVisitorId as Qe, setVisitorId as Ze } from "@arcblock/ux/lib/Util";
|
|
26
26
|
export {
|
|
27
27
|
V as API_DID_PREFIX,
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
Pe as Address,
|
|
29
|
+
Ue as Avatar,
|
|
30
30
|
v as BLOCKLET_SERVICE_PATH_PREFIX,
|
|
31
31
|
B as BUSY_STATUS,
|
|
32
32
|
n as Button,
|
|
33
33
|
W as CHECK_INTERVAL_TIME,
|
|
34
|
-
|
|
34
|
+
Y as CHECK_STATUS_INTERVAL,
|
|
35
|
+
G as CSRF_TOKEN_STORAGE_KEY,
|
|
35
36
|
t as Connect,
|
|
36
|
-
|
|
37
|
+
H as DEFAULT_NAME,
|
|
37
38
|
b as DEFAULT_TIMEOUT,
|
|
38
|
-
|
|
39
|
+
X as DEFAULT_WINDOW_TIMEOUT,
|
|
39
40
|
d as DIDButton,
|
|
40
41
|
r as DIDConnect,
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
f as DIDLogo,
|
|
43
|
+
w as DID_CONNECT_URL_PARAMS_NAME,
|
|
44
|
+
q as DID_SPACES_BASE_URL,
|
|
44
45
|
s as DidConnect,
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
he as EVENTS,
|
|
47
|
+
j as EXT_DOWNLOAD_URL,
|
|
48
|
+
K as FederatedConsumer,
|
|
49
|
+
M as FederatedContext,
|
|
49
50
|
y as FederatedProvider,
|
|
50
|
-
|
|
51
|
+
z as LANG_COOKIE_NAME,
|
|
51
52
|
p as Logo,
|
|
52
|
-
|
|
53
|
-
|
|
53
|
+
ge as NotOpenError,
|
|
54
|
+
m as OAuthConsumer,
|
|
54
55
|
i as OAuthContext,
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
56
|
+
T as OAuthProvider,
|
|
57
|
+
R as PasskeyActions,
|
|
58
|
+
l as PasskeyConsumer,
|
|
59
|
+
c as PasskeyContext,
|
|
60
|
+
O as PasskeyProvider,
|
|
61
|
+
J as REFRESH_TOKEN_STORAGE_KEY,
|
|
62
|
+
Q as RELAY_SOCKET_PREFIX,
|
|
63
|
+
Z as SESSION_TOKEN_STORAGE_KEY,
|
|
64
|
+
_ as Session,
|
|
65
|
+
je as SessionContext,
|
|
65
66
|
Le as SessionManager,
|
|
66
|
-
|
|
67
|
+
$ as VERIFY_CODE_LENGTH,
|
|
67
68
|
F as WrapDid,
|
|
68
69
|
be as checkEnableAutoLogin,
|
|
69
|
-
|
|
70
|
-
|
|
70
|
+
x as createAuthServiceSessionContext,
|
|
71
|
+
oe as createAxios,
|
|
71
72
|
A as createSessionContext,
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
73
|
+
te as debug,
|
|
74
|
+
re as decodeConnectUrl,
|
|
75
|
+
se as decodeKey,
|
|
76
|
+
ae as decodeUrlParams,
|
|
77
|
+
ne as decrypt,
|
|
78
|
+
Ve as didSpacesIsRequired,
|
|
79
|
+
de as encodeConnectUrl,
|
|
80
|
+
Ee as encodeKey,
|
|
80
81
|
fe as encrypt,
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
pe as formatCacheTtl,
|
|
83
|
+
ue as getApiErrorMessage,
|
|
84
|
+
_e as getAppId,
|
|
84
85
|
xe as getBrowserLang,
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
Ae as getConnectedInfo,
|
|
87
|
+
Xe as getMobileVisitorId,
|
|
88
|
+
Qe as getVisitorId,
|
|
89
|
+
Ce as getWebAuthnErrorMessage,
|
|
89
90
|
me as logger,
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
91
|
+
we as login,
|
|
92
|
+
Be as loginFederatedMaster,
|
|
93
|
+
We as mountFederatedIframe,
|
|
94
|
+
ie as openPopup,
|
|
95
|
+
Te as parseNextWorkflow,
|
|
95
96
|
Ie as parseTokenFromConnectUrl,
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
97
|
+
Se as runPopup,
|
|
98
|
+
Ze as setVisitorId,
|
|
99
|
+
le as sleep,
|
|
100
|
+
Ge as translations,
|
|
100
101
|
ce as updateConnectedInfo,
|
|
101
102
|
Me as useConnect,
|
|
102
103
|
N as useDid,
|
|
103
104
|
h as useFederatedContext,
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
105
|
+
I as useOAuth,
|
|
106
|
+
D as usePasskey,
|
|
107
|
+
Oe as version
|
|
107
108
|
};
|
package/lib/package.json.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arcblock/did-connect-react",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.35",
|
|
4
4
|
"description": "Client side library to work with DID Connect by ArcBlock.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -32,10 +32,10 @@
|
|
|
32
32
|
"url": "https://github.com/ArcBlock/ux/issues"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@arcblock/bridge": "3.1.
|
|
35
|
+
"@arcblock/bridge": "3.1.35",
|
|
36
36
|
"@arcblock/did": "^1.21.3",
|
|
37
|
-
"@arcblock/icons": "3.1.
|
|
38
|
-
"@arcblock/react-hooks": "3.1.
|
|
37
|
+
"@arcblock/icons": "3.1.35",
|
|
38
|
+
"@arcblock/react-hooks": "3.1.35",
|
|
39
39
|
"@arcblock/ws": "^1.21.3",
|
|
40
40
|
"@fontsource/lexend": "^5.2.9",
|
|
41
41
|
"@iconify-icons/logos": "^1.2.36",
|
|
@@ -80,5 +80,5 @@
|
|
|
80
80
|
"eslint-plugin-react-hooks": "^4.6.2",
|
|
81
81
|
"jest": "^29.7.0"
|
|
82
82
|
},
|
|
83
|
-
"gitHead": "
|
|
83
|
+
"gitHead": "52c5cb7cbc7f22fe05f9c1d85559199fb3166d72"
|
|
84
84
|
}
|
|
@@ -25,6 +25,7 @@ export default function useSessionToken({
|
|
|
25
25
|
pageState,
|
|
26
26
|
serviceHost,
|
|
27
27
|
sessionTokenStorage,
|
|
28
|
+
csrfTokenStorage,
|
|
28
29
|
refreshTokenStorage,
|
|
29
30
|
lazyRefreshToken,
|
|
30
31
|
apiOptions = {},
|
|
@@ -33,6 +34,7 @@ export default function useSessionToken({
|
|
|
33
34
|
const [retryCount, setRetryCount] = useState(0);
|
|
34
35
|
const [intervalTime, setIntervalTime] = useState(CHECK_INTERVAL_TIME);
|
|
35
36
|
const { getToken: getSessionToken, setToken: setSessionToken, removeToken: removeSessionToken } = sessionTokenStorage;
|
|
37
|
+
const { setToken: setCsrfToken } = csrfTokenStorage;
|
|
36
38
|
const { getToken: getRefreshToken, setToken: setRefreshToken, removeToken: removeRefreshToken } = refreshTokenStorage;
|
|
37
39
|
const request = useCreation(() => {
|
|
38
40
|
return createAxios({
|
|
@@ -326,7 +328,7 @@ export default function useSessionToken({
|
|
|
326
328
|
const handleLoginResult = useMemoizedFn((result) => {
|
|
327
329
|
const loginResult = Array.isArray(result) ? result[0] : result;
|
|
328
330
|
debug('handleLoginResult', { loginResult, result });
|
|
329
|
-
const { loginToken, sessionToken, refreshToken, visitorId, encrypted = true } = loginResult;
|
|
331
|
+
const { loginToken, csrfToken, sessionToken, refreshToken, visitorId, encrypted = true } = loginResult;
|
|
330
332
|
const token = loginToken || sessionToken;
|
|
331
333
|
let decryptSessionToken;
|
|
332
334
|
let decryptRefreshToken;
|
|
@@ -336,6 +338,9 @@ export default function useSessionToken({
|
|
|
336
338
|
debug('handleLoginResult: setSessionToken', { decryptSessionToken });
|
|
337
339
|
setSessionToken(decryptSessionToken);
|
|
338
340
|
|
|
341
|
+
const decryptCsrfToken = encrypted ? decrypt(csrfToken) : csrfToken;
|
|
342
|
+
setCsrfToken(decryptCsrfToken);
|
|
343
|
+
|
|
339
344
|
if (refreshToken) {
|
|
340
345
|
decryptRefreshToken = encrypted ? decrypt(refreshToken) : refreshToken;
|
|
341
346
|
debug('handleLoginResult: setRefreshToken', { decryptRefreshToken });
|
package/src/Session/index.jsx
CHANGED
|
@@ -61,6 +61,7 @@ import {
|
|
|
61
61
|
REFRESH_TOKEN_STORAGE_KEY,
|
|
62
62
|
SESSION_TOKEN_STORAGE_KEY,
|
|
63
63
|
DID_SPACES_BASE_URL,
|
|
64
|
+
CSRF_TOKEN_STORAGE_KEY,
|
|
64
65
|
} from '../constant';
|
|
65
66
|
import { checkEnableAutoLogin, getMobileVisitorId, login as loginInMobile } from './libs/login-mobile';
|
|
66
67
|
import useQuickConnect from '../Connect/hooks/use-quick-connect';
|
|
@@ -141,6 +142,10 @@ function createSessionContext(
|
|
|
141
142
|
}
|
|
142
143
|
|
|
143
144
|
const sessionTokenStorage = createStorage(storageKey, storageEngine, storageOptions);
|
|
145
|
+
const csrfTokenStorage = createStorage(CSRF_TOKEN_STORAGE_KEY, 'cookie', {
|
|
146
|
+
secure: true,
|
|
147
|
+
sameSite: 'strict',
|
|
148
|
+
});
|
|
144
149
|
|
|
145
150
|
const refreshTokenStorage = createStorage(opts.refreshTokenStorageKey, 'ls');
|
|
146
151
|
|
|
@@ -359,6 +364,7 @@ function createSessionContext(
|
|
|
359
364
|
pageState,
|
|
360
365
|
sessionTokenStorage,
|
|
361
366
|
refreshTokenStorage,
|
|
367
|
+
csrfTokenStorage,
|
|
362
368
|
serviceHost: props.serviceHost,
|
|
363
369
|
apiOptions: props.apiOptions,
|
|
364
370
|
lazyRefreshToken: props.lazyRefreshToken,
|
|
@@ -1516,6 +1522,7 @@ function createSessionContext(
|
|
|
1516
1522
|
await onLogin({
|
|
1517
1523
|
sessionToken: result.sessionToken,
|
|
1518
1524
|
refreshToken: result.refreshToken,
|
|
1525
|
+
csrfToken: result.csrfToken,
|
|
1519
1526
|
visitorId: result.visitorId,
|
|
1520
1527
|
encrypted: false,
|
|
1521
1528
|
});
|
|
@@ -1605,6 +1612,7 @@ function createSessionContext(
|
|
|
1605
1612
|
await onLogin({
|
|
1606
1613
|
sessionToken: result.sessionToken,
|
|
1607
1614
|
refreshToken: result.refreshToken,
|
|
1615
|
+
csrfToken: result.csrfToken,
|
|
1608
1616
|
visitorId: result.visitorId,
|
|
1609
1617
|
encrypted: false,
|
|
1610
1618
|
});
|
package/src/constant.js
CHANGED
|
@@ -2,6 +2,7 @@ export const DEFAULT_TIMEOUT = 5 * 60;
|
|
|
2
2
|
export const DEFAULT_WINDOW_TIMEOUT = 30 * 60;
|
|
3
3
|
export const BLOCKLET_SERVICE_PATH_PREFIX = '/.well-known/service';
|
|
4
4
|
export const SESSION_TOKEN_STORAGE_KEY = 'login_token';
|
|
5
|
+
export const CSRF_TOKEN_STORAGE_KEY = 'x-csrf-token';
|
|
5
6
|
export const REFRESH_TOKEN_STORAGE_KEY = 'refresh_token';
|
|
6
7
|
|
|
7
8
|
export const RELAY_SOCKET_PREFIX = '/.well-known/service';
|