@arcblock/did-connect-react 3.2.19 → 3.3.1
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/docs/assets/diagram/core-components-session-provider-01.ja.jpg +0 -0
- package/docs/assets/diagram/core-components-session-provider-01.jpg +0 -0
- package/docs/assets/diagram/core-components-session-provider-01.zh-TW.jpg +0 -0
- package/docs/assets/diagram/core-components-session-provider-01.zh.jpg +0 -0
- package/docs/assets/diagram/did-connect-diagram-0.ja.jpg +0 -0
- package/docs/assets/diagram/did-connect-diagram-0.jpg +0 -0
- package/docs/assets/diagram/did-connect-diagram-0.zh-TW.jpg +0 -0
- package/docs/assets/diagram/did-connect-diagram-0.zh.jpg +0 -0
- package/docs/assets/diagram/overview-01.ja.jpg +0 -0
- package/docs/assets/diagram/overview-01.jpg +0 -0
- package/docs/assets/diagram/overview-01.zh-TW.jpg +0 -0
- package/docs/assets/diagram/overview-01.zh.jpg +0 -0
- package/docs/assets/diagram/use-connect-diagram-0.ja.jpg +0 -0
- package/docs/assets/diagram/use-connect-diagram-0.jpg +0 -0
- package/docs/assets/diagram/use-connect-diagram-0.zh-TW.jpg +0 -0
- package/docs/assets/diagram/use-connect-diagram-0.zh.jpg +0 -0
- package/docs/core-components-did-connect.ja.md +3 -50
- package/docs/core-components-did-connect.md +5 -52
- package/docs/core-components-did-connect.zh-TW.md +3 -50
- package/docs/core-components-did-connect.zh.md +3 -50
- package/docs/core-components-session-provider.ja.md +3 -45
- package/docs/core-components-session-provider.md +3 -45
- package/docs/core-components-session-provider.zh-TW.md +3 -45
- package/docs/core-components-session-provider.zh.md +3 -45
- package/docs/hooks-use-connect.ja.md +3 -39
- package/docs/hooks-use-connect.md +4 -40
- package/docs/hooks-use-connect.zh-TW.md +3 -39
- package/docs/hooks-use-connect.zh.md +3 -39
- package/docs/overview.ja.md +3 -45
- package/docs/overview.md +3 -45
- package/docs/overview.zh-TW.md +3 -45
- package/docs/overview.zh.md +3 -45
- package/lib/Connect/assets/locale.js +4 -2
- package/lib/Connect/components/login-item/connect-choose-list.js +2 -2
- package/lib/Connect/components/login-item/connect-provider-list.js +299 -0
- package/lib/Connect/components/login-item/login-method-item.js +42 -41
- package/lib/Connect/hooks/provider-list.js +50 -0
- package/lib/Connect/index.js +180 -196
- package/lib/OAuth/context.js +33 -32
- package/lib/Passkey/context.js +64 -63
- package/lib/Session/hooks/use-verify.js +1 -1
- package/lib/Session/libs/locales.js +3 -3
- package/lib/package.json.js +1 -1
- package/package.json +9 -9
- package/src/Connect/assets/locale.js +2 -0
- package/src/Connect/components/login-item/connect-choose-list.jsx +5 -5
- package/src/Connect/components/login-item/connect-provider-list.jsx +392 -0
- package/src/Connect/components/login-item/login-method-item.jsx +31 -28
- package/src/Connect/hooks/provider-list.js +127 -0
- package/src/Connect/index.jsx +8 -27
- package/src/OAuth/context.jsx +10 -2
- package/src/Passkey/context.jsx +3 -0
- package/src/Session/hooks/use-verify.jsx +1 -1
- package/src/Session/libs/locales.js +3 -3
package/lib/OAuth/context.js
CHANGED
|
@@ -9,13 +9,13 @@ import B from "lodash/omit";
|
|
|
9
9
|
import { joinURL as re } from "ufo";
|
|
10
10
|
import { translate as ne } from "@arcblock/ux/lib/Locale/util";
|
|
11
11
|
import ie from "@arcblock/ux/lib/Dialog/use-confirm";
|
|
12
|
-
import { getBlockletData as S, getFederatedEnabled as C, getMaster as
|
|
12
|
+
import { getBlockletData as S, getFederatedEnabled as C, getMaster as k } from "@arcblock/ux/lib/Util/federated";
|
|
13
13
|
import { BLOCKLET_SERVICE_PATH_PREFIX as F, LOGIN_PROVIDER_NAME as f } from "@arcblock/ux/lib/Util/constant";
|
|
14
14
|
import { createAxios as se, openPopup as ae, runPopup as de, sleep as ce, getApiErrorMessage as m } from "../utils.js";
|
|
15
15
|
import { parseResponse as ue, PassportSwitcher as le } from "../components/PassportSwitcher.js";
|
|
16
16
|
import pe from "../Session/hooks/use-mobile.js";
|
|
17
17
|
import he from "./bind-conflict-alert.js";
|
|
18
|
-
const D = Z({}), { Provider: fe, Consumer: Te } = D,
|
|
18
|
+
const D = Z({}), { Provider: fe, Consumer: Te } = D, R = `${F}/api/oauth`, be = {
|
|
19
19
|
zh: {
|
|
20
20
|
bindOAuth: "绑定第三方登录",
|
|
21
21
|
bind: "绑定",
|
|
@@ -57,7 +57,7 @@ function Ae({
|
|
|
57
57
|
onSwitchPassport: I = O,
|
|
58
58
|
session: Y = null
|
|
59
59
|
}) {
|
|
60
|
-
const x = pe(), { confirmApi: M, confirmHolder:
|
|
60
|
+
const x = pe(), { confirmApi: M, confirmHolder: j } = ie({
|
|
61
61
|
maxWidth: !1,
|
|
62
62
|
PaperProps: {
|
|
63
63
|
style: {
|
|
@@ -88,10 +88,10 @@ function Ae({
|
|
|
88
88
|
reset({ status: t = "" } = {}) {
|
|
89
89
|
b.loading = !!t, b.checking = !1, b.error = "", b.status = t;
|
|
90
90
|
}
|
|
91
|
-
}),
|
|
91
|
+
}), d = u((t, e = {}) => ne(be, t, p, "en", e)), N = te(() => se({
|
|
92
92
|
// NOTICE: 请求必须向当前站点发起
|
|
93
|
-
baseURL:
|
|
94
|
-
}), [r.baseUrl,
|
|
93
|
+
baseURL: R
|
|
94
|
+
}), [r.baseUrl, R]), A = oe(N), P = u(async () => {
|
|
95
95
|
if (r.baseUrl === "/")
|
|
96
96
|
return window.blocklet;
|
|
97
97
|
try {
|
|
@@ -101,11 +101,12 @@ function Ae({
|
|
|
101
101
|
}
|
|
102
102
|
return await S(r.baseUrl);
|
|
103
103
|
}), U = u(async ({ sourceAppPid: t } = {}) => {
|
|
104
|
-
const e = await P(), o = C(e), n =
|
|
105
|
-
|
|
104
|
+
const e = await P(), o = C(e), n = k(e);
|
|
105
|
+
let i = {};
|
|
106
|
+
return o && n?.appPid && t === n?.appPid ? i = (await S(n.appUrl))?.settings?.authentication || {} : i = e?.settings?.authentication || {}, Object.keys(i).reduce((a, s) => (i[s]?.type === "oauth" && (a[s] = i[s]), a), {});
|
|
106
107
|
}), X = u(async ({ sourceAppPid: t } = {}) => {
|
|
107
108
|
const e = await U({ sourceAppPid: t });
|
|
108
|
-
return Object.entries(e).map(([n,
|
|
109
|
+
return Object.entries(e).map(([n, i]) => ({ ...i, provider: n })).filter((n) => n.enabled).sort((n, i) => n?.order !== void 0 && i?.order !== void 0 ? n.order - i.order : n?.order !== void 0 ? -1 : 1);
|
|
109
110
|
}), L = u(async ({ provider: t } = {}) => {
|
|
110
111
|
const e = ae(re(r.baseUrl, F, "/oauth/login", t), {
|
|
111
112
|
name: "oauth-login:popup",
|
|
@@ -120,7 +121,7 @@ function Ae({
|
|
|
120
121
|
});
|
|
121
122
|
return o?.response ? o.response?.code : null;
|
|
122
123
|
} catch (o) {
|
|
123
|
-
throw o?.message === "Popup closed" ? new Error(
|
|
124
|
+
throw o?.message === "Popup closed" ? new Error(d("cancelAuth")) : o;
|
|
124
125
|
}
|
|
125
126
|
}), q = async ({ session: t, oauthItem: e } = {}) => {
|
|
126
127
|
r.bindFnSession = t, r.bindAuthLoading = !0;
|
|
@@ -131,24 +132,24 @@ function Ae({
|
|
|
131
132
|
provider: e.provider,
|
|
132
133
|
code: o,
|
|
133
134
|
sourceAppPid: n
|
|
134
|
-
}), l.success(
|
|
135
|
+
}), l.success(d("bindOAuthSucceed", { provider: f[e.provider] })), T(e);
|
|
135
136
|
} catch (o) {
|
|
136
137
|
if (o.response?.status === 409) {
|
|
137
|
-
const { data:
|
|
138
|
-
["ALREADY_EXIST", "ALREADY_BIND"].includes(
|
|
139
|
-
title:
|
|
138
|
+
const { data: i = {} } = o.response || {}, { code: a } = i || {};
|
|
139
|
+
["ALREADY_EXIST", "ALREADY_BIND"].includes(a) ? M.open({
|
|
140
|
+
title: d(a, { provider: e.provider }),
|
|
140
141
|
showCancelButton: !1,
|
|
141
|
-
confirmButtonText:
|
|
142
|
-
content: /* @__PURE__ */ E(he, { data:
|
|
142
|
+
confirmButtonText: d("confirm"),
|
|
143
|
+
content: /* @__PURE__ */ E(he, { data: i }),
|
|
143
144
|
onConfirm(s) {
|
|
144
145
|
s();
|
|
145
146
|
}
|
|
146
147
|
}) : l.error(
|
|
147
|
-
m(o,
|
|
148
|
+
m(o, d("bindOAuthFailed", { provider: f[e.provider] }))
|
|
148
149
|
);
|
|
149
150
|
} else
|
|
150
151
|
l.error(
|
|
151
|
-
m(o,
|
|
152
|
+
m(o, d("bindOAuthFailed", { provider: f[e.provider] }))
|
|
152
153
|
);
|
|
153
154
|
} finally {
|
|
154
155
|
r.bindAuthLoading = !1;
|
|
@@ -162,7 +163,7 @@ function Ae({
|
|
|
162
163
|
connectedAccount: B(e, ["showProvider"]),
|
|
163
164
|
sourceAppPid: o
|
|
164
165
|
}), l.success(
|
|
165
|
-
|
|
166
|
+
d("unbindOAuthSucceed", {
|
|
166
167
|
provider: f[e.showProvider || e.provider]
|
|
167
168
|
})
|
|
168
169
|
), _(e);
|
|
@@ -170,7 +171,7 @@ function Ae({
|
|
|
170
171
|
l.error(
|
|
171
172
|
m(
|
|
172
173
|
o,
|
|
173
|
-
|
|
174
|
+
d("unbindOAuthFailed", {
|
|
174
175
|
provider: f[e.showProvider || e.provider]
|
|
175
176
|
})
|
|
176
177
|
)
|
|
@@ -181,9 +182,9 @@ function Ae({
|
|
|
181
182
|
}, z = async (t = {}) => {
|
|
182
183
|
try {
|
|
183
184
|
const { data: e } = await A.current.get("/passports");
|
|
184
|
-
e.length > 0 ? (c.open = !0, c.currentUser = t, c.passports = e || []) : l.error(
|
|
185
|
+
e.length > 0 ? (c.open = !0, c.currentUser = t, c.passports = e || []) : l.error(d("noPassports"));
|
|
185
186
|
} catch (e) {
|
|
186
|
-
l.error(e.message ||
|
|
187
|
+
l.error(e.message || d("getPassportFailed"));
|
|
187
188
|
}
|
|
188
189
|
}, H = u((...t) => {
|
|
189
190
|
c.reset(), I(...t);
|
|
@@ -194,28 +195,28 @@ function Ae({
|
|
|
194
195
|
if (o?.sourceAppPid === window.blocklet?.appPid)
|
|
195
196
|
r.baseUrl = window.blocklet?.appUrl || "/";
|
|
196
197
|
else if (o?.sourceAppPid) {
|
|
197
|
-
const
|
|
198
|
+
const a = await P(), s = C(a), g = k(a);
|
|
198
199
|
s && g?.appPid && o?.sourceAppPid === g?.appPid && (r.baseUrl = g.appUrl);
|
|
199
200
|
}
|
|
200
|
-
const
|
|
201
|
+
const i = window?.blocklet?.componentId;
|
|
201
202
|
try {
|
|
202
|
-
const
|
|
203
|
-
if (r.baseUrl = n, await ce(100),
|
|
203
|
+
const a = await L({ provider: t });
|
|
204
|
+
if (r.baseUrl = n, await ce(100), a) {
|
|
204
205
|
const s = {
|
|
205
206
|
...o,
|
|
206
207
|
action: e,
|
|
207
208
|
locale: p,
|
|
208
|
-
code:
|
|
209
|
+
code: a,
|
|
209
210
|
provider: t,
|
|
210
|
-
componentId:
|
|
211
|
+
componentId: i
|
|
211
212
|
};
|
|
212
213
|
Q(s.inviter) && window.localStorage.getItem("inviter") && (s.inviter = window.localStorage.getItem("inviter"));
|
|
213
214
|
const g = ["connect-to-did-space", "connect-to-did-domain"].includes(s.action) ? "login" : s.action, { data: $ } = await A.current.post("/login", { ...s, action: g }), y = ue($);
|
|
214
215
|
return y.provider = t, y;
|
|
215
216
|
}
|
|
216
217
|
return r.baseUrl = n, null;
|
|
217
|
-
} catch (
|
|
218
|
-
const s = m(
|
|
218
|
+
} catch (a) {
|
|
219
|
+
const s = m(a, d("loginOAuthFailed", { provider: f[t] }));
|
|
219
220
|
throw r.baseUrl = n, new Error(s);
|
|
220
221
|
}
|
|
221
222
|
}), K = u(() => {
|
|
@@ -237,11 +238,11 @@ function Ae({
|
|
|
237
238
|
oauthState: b,
|
|
238
239
|
unbindAuthLoading: r.unbindAuthLoading,
|
|
239
240
|
bindAuthLoading: r.bindAuthLoading,
|
|
240
|
-
t:
|
|
241
|
+
t: d
|
|
241
242
|
},
|
|
242
243
|
children: [
|
|
243
244
|
w,
|
|
244
|
-
|
|
245
|
+
j,
|
|
245
246
|
/* @__PURE__ */ E(
|
|
246
247
|
le,
|
|
247
248
|
{
|
package/lib/Passkey/context.js
CHANGED
|
@@ -12,7 +12,7 @@ import { getBlockletData as H, getFederatedEnabled as X, getMaster as Q } from "
|
|
|
12
12
|
import { startRegistration as Y, startAuthentication as Z } from "@simplewebauthn/browser";
|
|
13
13
|
import { createAxios as $, getWebAuthnErrorMessage as h, logger as U, getApiErrorMessage as A } from "../utils.js";
|
|
14
14
|
import { parseResponse as ee, PassportSwitcher as se } from "../components/PassportSwitcher.js";
|
|
15
|
-
const F = J({}), { Provider: te, Consumer: he } = F,
|
|
15
|
+
const F = J({}), { Provider: te, Consumer: he } = F, re = {
|
|
16
16
|
zh: {
|
|
17
17
|
cancel: "取消",
|
|
18
18
|
usePasskey: "使用 Passkey",
|
|
@@ -76,7 +76,7 @@ const F = J({}), { Provider: te, Consumer: he } = F, ae = {
|
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
};
|
|
79
|
-
function
|
|
79
|
+
function ae({
|
|
80
80
|
children: m,
|
|
81
81
|
locale: l = "en",
|
|
82
82
|
onAddPasskey: E = w,
|
|
@@ -84,7 +84,7 @@ function re({
|
|
|
84
84
|
onSwitchPassport: I = w,
|
|
85
85
|
session: R = null
|
|
86
86
|
}) {
|
|
87
|
-
const v = S(window.env?.apiPrefix || G, "/api/passkey"),
|
|
87
|
+
const v = S(window.env?.apiPrefix || G, "/api/passkey"), r = g({
|
|
88
88
|
baseUrl: "/",
|
|
89
89
|
session: void 0,
|
|
90
90
|
connecting: !1,
|
|
@@ -117,52 +117,52 @@ function re({
|
|
|
117
117
|
reset() {
|
|
118
118
|
d.creating = !1, d.verifying = !1, d.creatingStatus = "", d.verifyingStatus = "", d.error = "";
|
|
119
119
|
}
|
|
120
|
-
}), n = i((
|
|
121
|
-
if (
|
|
120
|
+
}), n = i((t, e = {}) => q(re, t, l, "en", e)), c = W(() => $({ baseURL: S(r.baseUrl, v), sessionTokenKey: "__sst", timeout: 60 * 1e3 }), [r.baseUrl, v]), x = i(async () => {
|
|
121
|
+
if (r.baseUrl === "/")
|
|
122
122
|
return window.blocklet;
|
|
123
123
|
try {
|
|
124
|
-
if (new URL(
|
|
124
|
+
if (new URL(r.baseUrl).host === window.location.host)
|
|
125
125
|
return window.blocklet;
|
|
126
126
|
} catch {
|
|
127
127
|
}
|
|
128
|
-
return await H(
|
|
129
|
-
}), P = window?.blocklet?.componentId, B = (
|
|
130
|
-
|
|
131
|
-
}, T = (
|
|
132
|
-
|
|
133
|
-
}, b = i(async (
|
|
134
|
-
const { data: e } = await c.get("/register", { params:
|
|
128
|
+
return await H(r.baseUrl);
|
|
129
|
+
}), P = window?.blocklet?.componentId, B = (t) => {
|
|
130
|
+
r.baseUrl = t || "/";
|
|
131
|
+
}, T = (t) => {
|
|
132
|
+
r.targetAppPid = t;
|
|
133
|
+
}, b = i(async (t) => {
|
|
134
|
+
const { data: e } = await c.get("/register", { params: t });
|
|
135
135
|
console.warn("passkey.create.options", e);
|
|
136
136
|
try {
|
|
137
|
-
const
|
|
138
|
-
console.warn("passkey.create.response",
|
|
139
|
-
const { data:
|
|
140
|
-
if (console.warn("passkey.create.result",
|
|
137
|
+
const s = await Y({ optionsJSON: e, useAutoRegister: !1 });
|
|
138
|
+
console.warn("passkey.create.response", s);
|
|
139
|
+
const { data: a } = await c.post("/register", s, { params: { challenge: e.challenge } });
|
|
140
|
+
if (console.warn("passkey.create.result", a), !a.verified)
|
|
141
141
|
throw new Error(n("createPasskeyFailed"));
|
|
142
|
-
return
|
|
143
|
-
} catch (
|
|
144
|
-
throw
|
|
142
|
+
return a;
|
|
143
|
+
} catch (s) {
|
|
144
|
+
throw console.error("passkey.create.error", s), s.name ? new Error(h(s, n("createPasskeyFailed"), n)) : s;
|
|
145
145
|
}
|
|
146
|
-
}), k = i(async (
|
|
147
|
-
const { data: e } = await c.get("/auth", { params:
|
|
146
|
+
}), k = i(async (t) => {
|
|
147
|
+
const { data: e } = await c.get("/auth", { params: t });
|
|
148
148
|
console.warn("passkey.auth.options", e);
|
|
149
149
|
try {
|
|
150
|
-
const
|
|
151
|
-
console.warn("passkey.auth.response",
|
|
152
|
-
const { data:
|
|
153
|
-
params: { challenge: e.challenge, targetAppPid:
|
|
150
|
+
const s = await Z({ optionsJSON: e });
|
|
151
|
+
console.warn("passkey.auth.response", s);
|
|
152
|
+
const { data: a } = await c.post("/auth", s, {
|
|
153
|
+
params: { challenge: e.challenge, targetAppPid: r.targetAppPid }
|
|
154
154
|
});
|
|
155
|
-
if (console.warn("passkey.auth.result",
|
|
155
|
+
if (console.warn("passkey.auth.result", a), !a.verified)
|
|
156
156
|
throw new Error(n("verifyPasskeyFailed"));
|
|
157
|
-
return
|
|
158
|
-
} catch (
|
|
159
|
-
throw
|
|
157
|
+
return a;
|
|
158
|
+
} catch (s) {
|
|
159
|
+
throw console.error("passkey.auth.error", s), s.name ? new Error(h(s, n("verifyPasskeyFailed"), n)) : s;
|
|
160
160
|
}
|
|
161
|
-
}), M = async (
|
|
162
|
-
|
|
161
|
+
}), M = async (t) => {
|
|
162
|
+
r.connecting = !0;
|
|
163
163
|
try {
|
|
164
164
|
const e = await b({
|
|
165
|
-
...
|
|
165
|
+
...t,
|
|
166
166
|
locale: l,
|
|
167
167
|
componentId: P
|
|
168
168
|
});
|
|
@@ -170,54 +170,55 @@ function re({
|
|
|
170
170
|
} catch (e) {
|
|
171
171
|
U.error("Failed to connect passkey", e), u.error(A(e, n("connectPasskeyFailed")));
|
|
172
172
|
} finally {
|
|
173
|
-
|
|
173
|
+
r.connecting = !1;
|
|
174
174
|
}
|
|
175
|
-
}, D = async ({ session:
|
|
176
|
-
|
|
175
|
+
}, D = async ({ session: t, connectedAccount: e }) => {
|
|
176
|
+
r.session = t, r.disconnecting = !0;
|
|
177
177
|
try {
|
|
178
|
-
const
|
|
178
|
+
const s = await k({
|
|
179
179
|
action: "disconnect",
|
|
180
180
|
locale: l,
|
|
181
181
|
componentId: P,
|
|
182
|
-
sourceAppPid:
|
|
182
|
+
sourceAppPid: t?.user?.sourceAppPid,
|
|
183
183
|
credentialId: e.id
|
|
184
184
|
});
|
|
185
|
-
u.success(n("disconnectPasskeySucceed")), C(
|
|
186
|
-
} catch (
|
|
187
|
-
U.error("Failed to disconnect passkey",
|
|
185
|
+
u.success(n("disconnectPasskeySucceed")), C(s);
|
|
186
|
+
} catch (s) {
|
|
187
|
+
U.error("Failed to disconnect passkey", s), u.error(A(s, n("disconnectPasskeyFailed")));
|
|
188
188
|
} finally {
|
|
189
|
-
|
|
189
|
+
r.disconnecting = !1;
|
|
190
190
|
}
|
|
191
|
-
}, N = async (
|
|
191
|
+
}, N = async (t = {}) => {
|
|
192
192
|
try {
|
|
193
193
|
const { data: e } = await c.get("/passports");
|
|
194
|
-
e.length ? (o.open = !0, o.currentUser =
|
|
194
|
+
e.length ? (o.open = !0, o.currentUser = t, o.passports = e || []) : u.error(n("noPassports"));
|
|
195
195
|
} catch (e) {
|
|
196
196
|
u.error(e.message || n("getPassportFailed"));
|
|
197
197
|
}
|
|
198
|
-
}, j = i((...
|
|
199
|
-
o.reset(), I(...
|
|
200
|
-
}), L = i(async ({ action:
|
|
201
|
-
const
|
|
198
|
+
}, j = i((...t) => {
|
|
199
|
+
o.reset(), I(...t);
|
|
200
|
+
}), L = i(async ({ action: t = "login", ...e } = {}) => {
|
|
201
|
+
const s = r.baseUrl;
|
|
202
202
|
if (e?.sourceAppPid === window.blocklet?.appPid)
|
|
203
|
-
|
|
203
|
+
r.baseUrl = window.blocklet?.appUrl || "/";
|
|
204
204
|
else if (e?.sourceAppPid) {
|
|
205
|
-
const
|
|
206
|
-
y && f?.appPid && e?.sourceAppPid === f?.appPid && (
|
|
205
|
+
const a = await x(), y = X(a), f = Q(a);
|
|
206
|
+
y && f?.appPid && e?.sourceAppPid === f?.appPid && (r.baseUrl = f.appUrl);
|
|
207
207
|
}
|
|
208
208
|
try {
|
|
209
|
-
const
|
|
209
|
+
const a = {
|
|
210
210
|
...e,
|
|
211
|
-
action:
|
|
211
|
+
action: t,
|
|
212
212
|
locale: l,
|
|
213
213
|
componentId: P
|
|
214
214
|
};
|
|
215
|
-
z(
|
|
216
|
-
const y = ee(await k(
|
|
215
|
+
z(a.inviter) && window.localStorage.getItem("inviter") && (a.inviter = window.localStorage.getItem("inviter"));
|
|
216
|
+
const y = ee(await k(a));
|
|
217
217
|
return y.provider = "passkey", y;
|
|
218
|
-
} catch (
|
|
219
|
-
|
|
220
|
-
|
|
218
|
+
} catch (a) {
|
|
219
|
+
console.error("passkey.login.error", a);
|
|
220
|
+
const y = h(a, n("verifyPasskeyFailed"), n);
|
|
221
|
+
throw r.baseUrl = s, new Error(y);
|
|
221
222
|
}
|
|
222
223
|
}), _ = i(() => {
|
|
223
224
|
});
|
|
@@ -234,12 +235,12 @@ function re({
|
|
|
234
235
|
loginPasskey: L,
|
|
235
236
|
logoutPasskey: _,
|
|
236
237
|
switchPassport: N,
|
|
237
|
-
baseUrl:
|
|
238
|
+
baseUrl: r.baseUrl,
|
|
238
239
|
setBaseUrl: B,
|
|
239
240
|
setTargetAppPid: T,
|
|
240
241
|
passkeyState: d,
|
|
241
|
-
disconnecting:
|
|
242
|
-
connecting:
|
|
242
|
+
disconnecting: r.disconnecting,
|
|
243
|
+
connecting: r.connecting,
|
|
243
244
|
t: n
|
|
244
245
|
},
|
|
245
246
|
children: [
|
|
@@ -261,7 +262,7 @@ function re({
|
|
|
261
262
|
function me() {
|
|
262
263
|
return K(F);
|
|
263
264
|
}
|
|
264
|
-
|
|
265
|
+
ae.propTypes = {
|
|
265
266
|
children: p.node.isRequired,
|
|
266
267
|
locale: p.string,
|
|
267
268
|
onAddPasskey: p.func,
|
|
@@ -272,6 +273,6 @@ re.propTypes = {
|
|
|
272
273
|
export {
|
|
273
274
|
he as PasskeyConsumer,
|
|
274
275
|
F as PasskeyContext,
|
|
275
|
-
|
|
276
|
+
ae as PasskeyProvider,
|
|
276
277
|
me as usePasskey
|
|
277
278
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { translate as I } from "@arcblock/ux/lib/Locale/util";
|
|
2
|
-
import { LOGIN_PROVIDER as n } from "@
|
|
2
|
+
import { LOGIN_PROVIDER as n } from "@arcblock/ux/lib/Util/constant";
|
|
3
3
|
import { toBase64 as A } from "@ocap/util";
|
|
4
4
|
import { translations as C } from "../libs/locales.js";
|
|
5
5
|
function k({ state: p, locale: a, connectApi: c }) {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
const e = {
|
|
2
2
|
login: {
|
|
3
3
|
en: {
|
|
4
|
-
title: "
|
|
5
|
-
scan: "
|
|
4
|
+
title: "Login",
|
|
5
|
+
scan: "Login with one of the following methods",
|
|
6
6
|
confirm: "Confirm connection in your DID Wallet",
|
|
7
|
-
success: "Successfully
|
|
7
|
+
success: "Successfully logged in"
|
|
8
8
|
},
|
|
9
9
|
zh: {
|
|
10
10
|
title: "登录",
|
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.
|
|
3
|
+
"version": "3.3.1",
|
|
4
4
|
"description": "Client side library to work with DID Connect by ArcBlock.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -32,17 +32,17 @@
|
|
|
32
32
|
"url": "https://github.com/ArcBlock/ux/issues"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@arcblock/bridge": "3.
|
|
36
|
-
"@arcblock/did": "^1.27.
|
|
37
|
-
"@arcblock/icons": "3.
|
|
38
|
-
"@arcblock/react-hooks": "3.
|
|
39
|
-
"@arcblock/ws": "^1.27.
|
|
40
|
-
"@blocklet/constant": "^1.17.
|
|
35
|
+
"@arcblock/bridge": "3.3.1",
|
|
36
|
+
"@arcblock/did": "^1.27.16",
|
|
37
|
+
"@arcblock/icons": "3.3.1",
|
|
38
|
+
"@arcblock/react-hooks": "3.3.1",
|
|
39
|
+
"@arcblock/ws": "^1.27.16",
|
|
40
|
+
"@blocklet/constant": "^1.17.6",
|
|
41
41
|
"@fontsource/lexend": "^5.2.9",
|
|
42
42
|
"@iconify-icons/logos": "^1.2.36",
|
|
43
43
|
"@iconify-icons/material-symbols": "^1.2.58",
|
|
44
44
|
"@iconify/react": "^5.2.1",
|
|
45
|
-
"@ocap/util": "^1.27.
|
|
45
|
+
"@ocap/util": "^1.27.16",
|
|
46
46
|
"@simplewebauthn/browser": "^13.1.0",
|
|
47
47
|
"ahooks": "^3.8.5",
|
|
48
48
|
"axios": "^1.10.0",
|
|
@@ -81,5 +81,5 @@
|
|
|
81
81
|
"eslint-plugin-react-hooks": "^4.6.2",
|
|
82
82
|
"jest": "^29.7.0"
|
|
83
83
|
},
|
|
84
|
-
"gitHead": "
|
|
84
|
+
"gitHead": "39aec3e1aef080ae289918120dc12629940a75b4"
|
|
85
85
|
}
|
|
@@ -70,6 +70,7 @@ export default {
|
|
|
70
70
|
'Sign in with Passkey - More secure and convenient authentication. No passwords to remember, easily access apps and websites.',
|
|
71
71
|
didConnectTitle: 'DID Connect',
|
|
72
72
|
didConnectDescription: 'Decentralized identities and apps, W3C DID-based, future-ready.',
|
|
73
|
+
noAuthenticationProvider: 'No authentication provider configured',
|
|
73
74
|
},
|
|
74
75
|
zh: {
|
|
75
76
|
generateError: '二维码生成失败',
|
|
@@ -141,5 +142,6 @@ export default {
|
|
|
141
142
|
'使用 Passkey 账户登录 - 更安全、更便捷的身份验证方式。无需记忆密码,轻松登录各类应用和网站',
|
|
142
143
|
didConnectTitle: 'DID Connect',
|
|
143
144
|
didConnectDescription: '面向未来的基于 W3C DID 去中心化身份和应用',
|
|
145
|
+
noAuthenticationProvider: '未配置任何身份验证提供者',
|
|
144
146
|
},
|
|
145
147
|
};
|
|
@@ -29,7 +29,7 @@ export default function ConnectChooseList({
|
|
|
29
29
|
webWalletUrl = getWebWalletUrl(),
|
|
30
30
|
tokenKey,
|
|
31
31
|
passkeyBehavior = 'none',
|
|
32
|
-
|
|
32
|
+
onReset = noop,
|
|
33
33
|
showMobileLogin = true,
|
|
34
34
|
showOAuthLogin = true,
|
|
35
35
|
showPasskeyLogin = true,
|
|
@@ -100,7 +100,7 @@ export default function ConnectChooseList({
|
|
|
100
100
|
|
|
101
101
|
const defaultRetryConnect = useMemoizedFn(async () => {
|
|
102
102
|
tokenState.reset();
|
|
103
|
-
await
|
|
103
|
+
await onReset();
|
|
104
104
|
tokenState.status = 'created';
|
|
105
105
|
connectState.chooseMethod = 'wallet';
|
|
106
106
|
});
|
|
@@ -169,7 +169,7 @@ export default function ConnectChooseList({
|
|
|
169
169
|
onClick={async () => {
|
|
170
170
|
localStorage.setItem(GA_LAST_LOGIN_METHOD, 'wallet');
|
|
171
171
|
tokenState.reset();
|
|
172
|
-
await
|
|
172
|
+
await onReset();
|
|
173
173
|
tokenState.status = 'created';
|
|
174
174
|
connectState.chooseMethod = 'wallet';
|
|
175
175
|
const connectFn = walletLoginRef.current?.connect;
|
|
@@ -193,7 +193,7 @@ export default function ConnectChooseList({
|
|
|
193
193
|
connectState.chooseMethod = 'wallet-web';
|
|
194
194
|
const connectFn = webLoginRef.current.connect;
|
|
195
195
|
connectState.retryConnect = async () => {
|
|
196
|
-
await
|
|
196
|
+
await onReset();
|
|
197
197
|
tokenState.error = '';
|
|
198
198
|
tokenState.status = 'scanned';
|
|
199
199
|
connectFn();
|
|
@@ -294,7 +294,7 @@ ConnectChooseList.propTypes = {
|
|
|
294
294
|
webWalletUrl: PropTypes.string,
|
|
295
295
|
tokenKey: PropTypes.string.isRequired,
|
|
296
296
|
passkeyBehavior: PropTypes.oneOf(['none', 'both', 'only-existing', 'only-new']),
|
|
297
|
-
|
|
297
|
+
onReset: PropTypes.func,
|
|
298
298
|
showMobileLogin: PropTypes.bool,
|
|
299
299
|
showOAuthLogin: PropTypes.bool,
|
|
300
300
|
showPasskeyLogin: PropTypes.bool,
|