@arcblock/did-connect-react 3.3.0 → 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/lib/Passkey/context.js +64 -63
- package/lib/package.json.js +1 -1
- package/package.json +5 -5
- package/src/Passkey/context.jsx +3 -0
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
|
};
|
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.
|
|
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,10 +32,10 @@
|
|
|
32
32
|
"url": "https://github.com/ArcBlock/ux/issues"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@arcblock/bridge": "3.3.
|
|
35
|
+
"@arcblock/bridge": "3.3.1",
|
|
36
36
|
"@arcblock/did": "^1.27.16",
|
|
37
|
-
"@arcblock/icons": "3.3.
|
|
38
|
-
"@arcblock/react-hooks": "3.3.
|
|
37
|
+
"@arcblock/icons": "3.3.1",
|
|
38
|
+
"@arcblock/react-hooks": "3.3.1",
|
|
39
39
|
"@arcblock/ws": "^1.27.16",
|
|
40
40
|
"@blocklet/constant": "^1.17.6",
|
|
41
41
|
"@fontsource/lexend": "^5.2.9",
|
|
@@ -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
|
}
|
package/src/Passkey/context.jsx
CHANGED
|
@@ -204,6 +204,7 @@ function PasskeyProvider({
|
|
|
204
204
|
return result;
|
|
205
205
|
} catch (err) {
|
|
206
206
|
// Check if this is a WebAuthn specific error
|
|
207
|
+
console.error('passkey.create.error', err);
|
|
207
208
|
if (err.name) {
|
|
208
209
|
throw new Error(getWebAuthnErrorMessage(err, t('createPasskeyFailed'), t));
|
|
209
210
|
}
|
|
@@ -232,6 +233,7 @@ function PasskeyProvider({
|
|
|
232
233
|
return result;
|
|
233
234
|
} catch (err) {
|
|
234
235
|
// Check if this is a WebAuthn specific error
|
|
236
|
+
console.error('passkey.auth.error', err);
|
|
235
237
|
if (err.name) {
|
|
236
238
|
throw new Error(getWebAuthnErrorMessage(err, t('verifyPasskeyFailed'), t));
|
|
237
239
|
}
|
|
@@ -333,6 +335,7 @@ function PasskeyProvider({
|
|
|
333
335
|
return result;
|
|
334
336
|
} catch (err) {
|
|
335
337
|
// Use the WebAuthn specific error handler if the error has a name property (WebAuthn errors do)
|
|
338
|
+
console.error('passkey.login.error', err);
|
|
336
339
|
const errMsg = getWebAuthnErrorMessage(err, t('verifyPasskeyFailed'), t);
|
|
337
340
|
state.baseUrl = backupBaseUrl;
|
|
338
341
|
throw new Error(errMsg);
|