permissionless 0.2.39 → 0.2.40
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/CHANGELOG.md +6 -0
- package/_cjs/actions/passkeyServer/startAuthentication.js +19 -0
- package/_cjs/actions/passkeyServer/startAuthentication.js.map +1 -0
- package/_cjs/actions/passkeyServer/verifyAuthentication.js +78 -0
- package/_cjs/actions/passkeyServer/verifyAuthentication.js.map +1 -0
- package/_cjs/actions/passkeyServer/verifyRegistration.js +2 -0
- package/_cjs/actions/passkeyServer/verifyRegistration.js.map +1 -1
- package/_cjs/clients/decorators/passkeyServer.js +5 -1
- package/_cjs/clients/decorators/passkeyServer.js.map +1 -1
- package/_esm/actions/passkeyServer/startAuthentication.js +15 -0
- package/_esm/actions/passkeyServer/startAuthentication.js.map +1 -0
- package/_esm/actions/passkeyServer/verifyAuthentication.js +74 -0
- package/_esm/actions/passkeyServer/verifyAuthentication.js.map +1 -0
- package/_esm/actions/passkeyServer/verifyRegistration.js +2 -0
- package/_esm/actions/passkeyServer/verifyRegistration.js.map +1 -1
- package/_esm/clients/decorators/passkeyServer.js +5 -1
- package/_esm/clients/decorators/passkeyServer.js.map +1 -1
- package/_types/actions/passkeyServer/startAuthentication.d.ts +8 -0
- package/_types/actions/passkeyServer/startAuthentication.d.ts.map +1 -0
- package/_types/actions/passkeyServer/verifyAuthentication.d.ts +13 -0
- package/_types/actions/passkeyServer/verifyAuthentication.d.ts.map +1 -0
- package/_types/actions/passkeyServer/verifyRegistration.d.ts.map +1 -1
- package/_types/clients/decorators/passkeyServer.d.ts +4 -0
- package/_types/clients/decorators/passkeyServer.d.ts.map +1 -1
- package/_types/types/passkeyServer.d.ts +41 -0
- package/_types/types/passkeyServer.d.ts.map +1 -1
- package/actions/passkeyServer/startAuthentication.ts +35 -0
- package/actions/passkeyServer/verifyAuthentication.ts +121 -0
- package/actions/passkeyServer/verifyRegistration.ts +48 -38
- package/clients/decorators/passkeyServer.ts +16 -1
- package/package.json +1 -1
- package/types/passkeyServer.ts +41 -0
package/CHANGELOG.md
CHANGED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.startAuthentication = void 0;
|
|
4
|
+
const ox_1 = require("ox");
|
|
5
|
+
const viem_1 = require("viem");
|
|
6
|
+
const startAuthentication = async (client) => {
|
|
7
|
+
const response = await client.request({
|
|
8
|
+
method: "pks_startAuthentication",
|
|
9
|
+
params: []
|
|
10
|
+
});
|
|
11
|
+
return {
|
|
12
|
+
challenge: (0, viem_1.toHex)(ox_1.Base64.toBytes(response.challenge)),
|
|
13
|
+
rpId: response.rpId,
|
|
14
|
+
userVerification: response.userVerification,
|
|
15
|
+
uuid: response.uuid
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
exports.startAuthentication = startAuthentication;
|
|
19
|
+
//# sourceMappingURL=startAuthentication.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startAuthentication.js","sourceRoot":"","sources":["../../../actions/passkeyServer/startAuthentication.ts"],"names":[],"mappings":";;;AAAA,2BAA2B;AAE3B,+BAMa;AAON,MAAM,mBAAmB,GAAG,KAAK,EACpC,MAKC,EACqC,EAAE;IACxC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;QAClC,MAAM,EAAE,yBAAyB;QACjC,MAAM,EAAE,EAAE;KACb,CAAC,CAAA;IAEF,OAAO;QACH,SAAS,EAAE,IAAA,YAAK,EAAC,WAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;QAC3C,IAAI,EAAE,QAAQ,CAAC,IAAI;KACtB,CAAA;AACL,CAAC,CAAA;AAnBY,QAAA,mBAAmB,uBAmB/B"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.verifyAuthentication = void 0;
|
|
4
|
+
const ox_1 = require("ox");
|
|
5
|
+
const verifyAuthentication = async (client, args) => {
|
|
6
|
+
const { raw, uuid } = args;
|
|
7
|
+
let responseAuthenticatorData;
|
|
8
|
+
if ("authenticatorData" in raw.response) {
|
|
9
|
+
responseAuthenticatorData = ox_1.Base64.fromBytes(new Uint8Array(raw.response.authenticatorData), {
|
|
10
|
+
url: true
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
throw new Error("authenticatorData not found in the signature");
|
|
15
|
+
}
|
|
16
|
+
let signature;
|
|
17
|
+
if ("signature" in raw.response) {
|
|
18
|
+
signature = ox_1.Base64.fromBytes(new Uint8Array(raw.response.signature), {
|
|
19
|
+
pad: false,
|
|
20
|
+
url: true
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
throw new Error("signature not found in the signature");
|
|
25
|
+
}
|
|
26
|
+
let userHandle;
|
|
27
|
+
if ("userHandle" in raw.response) {
|
|
28
|
+
userHandle = ox_1.Base64.fromBytes(new Uint8Array(raw.response.userHandle), {
|
|
29
|
+
pad: false,
|
|
30
|
+
url: true
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
const serverResponse = await client.request({
|
|
34
|
+
method: "pks_verifyAuthentication",
|
|
35
|
+
params: [
|
|
36
|
+
{
|
|
37
|
+
id: raw.id,
|
|
38
|
+
rawId: ox_1.Base64.fromBytes(new Uint8Array(raw.rawId), {
|
|
39
|
+
pad: false,
|
|
40
|
+
url: true
|
|
41
|
+
}),
|
|
42
|
+
authenticatorAttachment: raw.authenticatorAttachment,
|
|
43
|
+
response: {
|
|
44
|
+
clientDataJSON: ox_1.Base64.fromBytes(new Uint8Array(raw.response.clientDataJSON), {
|
|
45
|
+
pad: false,
|
|
46
|
+
url: true
|
|
47
|
+
}),
|
|
48
|
+
authenticatorData: responseAuthenticatorData,
|
|
49
|
+
signature,
|
|
50
|
+
userHandle
|
|
51
|
+
},
|
|
52
|
+
clientExtensionResults: raw.getClientExtensionResults(),
|
|
53
|
+
type: raw.type
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
uuid
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
}, {
|
|
60
|
+
retryCount: 0
|
|
61
|
+
});
|
|
62
|
+
const success = Boolean(serverResponse?.success);
|
|
63
|
+
const id = serverResponse?.id;
|
|
64
|
+
const publicKey = serverResponse?.publicKey;
|
|
65
|
+
if (typeof id !== "string") {
|
|
66
|
+
throw new Error("Invalid passkey id returned from server");
|
|
67
|
+
}
|
|
68
|
+
if (typeof publicKey !== "string" || !publicKey.startsWith("0x")) {
|
|
69
|
+
throw new Error("Invalid public key returned from server - must be hex string starting with 0x");
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
success,
|
|
73
|
+
id,
|
|
74
|
+
publicKey: publicKey
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
exports.verifyAuthentication = verifyAuthentication;
|
|
78
|
+
//# sourceMappingURL=verifyAuthentication.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifyAuthentication.js","sourceRoot":"","sources":["../../../actions/passkeyServer/verifyAuthentication.ts"],"names":[],"mappings":";;;AAAA,2BAA8C;AAevC,MAAM,oBAAoB,GAAG,KAAK,EACrC,MAKC,EACD,IAAoC,EACG,EAAE;IACzC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,CAAA;IAE1B,IAAI,yBAAiC,CAAA;IAErC,IAAI,mBAAmB,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QACtC,yBAAyB,GAAG,WAAM,CAAC,SAAS,CACxC,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,iBAAgC,CAAC,EAC7D;YACI,GAAG,EAAE,IAAI;SACZ,CACJ,CAAA;IACL,CAAC;SAAM,CAAC;QACJ,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACnE,CAAC;IAED,IAAI,SAAiB,CAAA;IACrB,IAAI,WAAW,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,SAAS,GAAG,WAAM,CAAC,SAAS,CACxB,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAwB,CAAC,EACrD;YACI,GAAG,EAAE,KAAK;YACV,GAAG,EAAE,IAAI;SACZ,CACJ,CAAA;IACL,CAAC;SAAM,CAAC;QACJ,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;IAC3D,CAAC;IAED,IAAI,UAA8B,CAAA;IAClC,IAAI,YAAY,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC/B,UAAU,GAAG,WAAM,CAAC,SAAS,CACzB,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAyB,CAAC,EACtD;YACI,GAAG,EAAE,KAAK;YACV,GAAG,EAAE,IAAI;SACZ,CACJ,CAAA;IACL,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,OAAO,CACvC;QACI,MAAM,EAAE,0BAA0B;QAClC,MAAM,EAAE;YACJ;gBACI,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,KAAK,EAAE,WAAM,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;oBAC/C,GAAG,EAAE,KAAK;oBACV,GAAG,EAAE,IAAI;iBACZ,CAAC;gBACF,uBAAuB,EAAE,GAAG,CAAC,uBAEb;gBAChB,QAAQ,EAAE;oBACN,cAAc,EAAE,WAAM,CAAC,SAAS,CAC5B,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,EAC3C;wBACI,GAAG,EAAE,KAAK;wBACV,GAAG,EAAE,IAAI;qBACZ,CACJ;oBACD,iBAAiB,EAAE,yBAAyB;oBAC5C,SAAS;oBACT,UAAU;iBACb;gBACD,sBAAsB,EAAE,GAAG,CAAC,yBAAyB,EAAE;gBACvD,IAAI,EAAE,GAAG,CAAC,IAAoB;aACjC;YACD;gBACI,IAAI;aACP;SACJ;KACJ,EACD;QACI,UAAU,EAAE,CAAC;KAChB,CACJ,CAAA;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IAChD,MAAM,EAAE,GAAG,cAAc,EAAE,EAAE,CAAA;IAC7B,MAAM,SAAS,GAAG,cAAc,EAAE,SAAS,CAAA;IAE3C,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;IAC9D,CAAC;IAED,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CACX,+EAA+E,CAClF,CAAA;IACL,CAAC;IAED,OAAO;QACH,OAAO;QACP,EAAE;QACF,SAAS,EAAE,SAAgB;KAC9B,CAAA;AACL,CAAC,CAAA;AAzGY,QAAA,oBAAoB,wBAyGhC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyRegistration.js","sourceRoot":"","sources":["../../../actions/passkeyServer/verifyRegistration.ts"],"names":[],"mappings":";;;AAAA,2BAA2B;AAgBpB,MAAM,kBAAkB,GAAG,KAAK,EACnC,MAKC,EACD,IAAkC,EACG,EAAE;IACvC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAEpC,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG;SAC1B,QAAuD,CAAA;IAE5D,IAAI,0BAA0B,GAAuB,SAAS,CAAA;IAC9D,IAAI,OAAO,QAAQ,CAAC,qBAAqB,KAAK,UAAU,EAAE,CAAC;QACvD,IAAI,CAAC;YACD,0BAA0B,GAAG,QAAQ,CAAC,qBAAqB,EAAE,CAAA;QACjE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;QAC/D,CAAC;IACL,CAAC;IAED,IAAI,yBAA6C,CAAA;IACjD,IAAI,OAAO,QAAQ,CAAC,oBAAoB,KAAK,UAAU,EAAE,CAAC;QACtD,IAAI,CAAC;YACD,yBAAyB,GAAG,WAAM,CAAC,SAAS,CACxC,IAAI,UAAU,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,CAClD,CAAA;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;QAC9D,CAAC;IACL,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"verifyRegistration.js","sourceRoot":"","sources":["../../../actions/passkeyServer/verifyRegistration.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,12 +2,16 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.passkeyServerActions = void 0;
|
|
4
4
|
const getCredentials_js_1 = require("../../actions/passkeyServer/getCredentials.js");
|
|
5
|
+
const startAuthentication_js_1 = require("../../actions/passkeyServer/startAuthentication.js");
|
|
5
6
|
const startRegistration_js_1 = require("../../actions/passkeyServer/startRegistration.js");
|
|
7
|
+
const verifyAuthentication_js_1 = require("../../actions/passkeyServer/verifyAuthentication.js");
|
|
6
8
|
const verifyRegistration_js_1 = require("../../actions/passkeyServer/verifyRegistration.js");
|
|
7
9
|
const passkeyServerActions = (client) => ({
|
|
8
10
|
startRegistration: (args) => (0, startRegistration_js_1.startRegistration)(client, args),
|
|
9
11
|
verifyRegistration: (args) => (0, verifyRegistration_js_1.verifyRegistration)(client, args),
|
|
10
|
-
getCredentials: (args) => (0, getCredentials_js_1.getCredentials)(client, args)
|
|
12
|
+
getCredentials: (args) => (0, getCredentials_js_1.getCredentials)(client, args),
|
|
13
|
+
startAuthentication: () => (0, startAuthentication_js_1.startAuthentication)(client),
|
|
14
|
+
verifyAuthentication: (args) => (0, verifyAuthentication_js_1.verifyAuthentication)(client, args)
|
|
11
15
|
});
|
|
12
16
|
exports.passkeyServerActions = passkeyServerActions;
|
|
13
17
|
//# sourceMappingURL=passkeyServer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"passkeyServer.js","sourceRoot":"","sources":["../../../clients/decorators/passkeyServer.ts"],"names":[],"mappings":";;;AACA,qFAIsD;AACtD,2FAIyD;AACzD,6FAI0D;
|
|
1
|
+
{"version":3,"file":"passkeyServer.js","sourceRoot":"","sources":["../../../clients/decorators/passkeyServer.ts"],"names":[],"mappings":";;;AACA,qFAIsD;AACtD,+FAG2D;AAC3D,2FAIyD;AACzD,iGAI4D;AAC5D,6FAI0D;AAmBnD,MAAM,oBAAoB,GAAG,CAChC,MAKC,EACmB,EAAE,CAAC,CAAC;IACxB,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,wCAAiB,EAAC,MAAM,EAAE,IAAI,CAAC;IAC5D,kBAAkB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,0CAAkB,EAAC,MAAM,EAAE,IAAI,CAAC;IAC9D,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,kCAAc,EAAC,MAAM,EAAE,IAAI,CAAC;IACtD,mBAAmB,EAAE,GAAG,EAAE,CAAC,IAAA,4CAAmB,EAAC,MAAM,CAAC;IACtD,oBAAoB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,8CAAoB,EAAC,MAAM,EAAE,IAAI,CAAC;CACrE,CAAC,CAAA;AAbW,QAAA,oBAAoB,wBAa/B"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Base64 } from "ox";
|
|
2
|
+
import { toHex } from "viem";
|
|
3
|
+
export const startAuthentication = async (client) => {
|
|
4
|
+
const response = await client.request({
|
|
5
|
+
method: "pks_startAuthentication",
|
|
6
|
+
params: []
|
|
7
|
+
});
|
|
8
|
+
return {
|
|
9
|
+
challenge: toHex(Base64.toBytes(response.challenge)),
|
|
10
|
+
rpId: response.rpId,
|
|
11
|
+
userVerification: response.userVerification,
|
|
12
|
+
uuid: response.uuid
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=startAuthentication.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startAuthentication.js","sourceRoot":"","sources":["../../../actions/passkeyServer/startAuthentication.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAA;AAE3B,OAAO,EAKH,KAAK,EACR,MAAM,MAAM,CAAA;AAOb,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACpC,MAKC,EACqC,EAAE;IACxC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;QAClC,MAAM,EAAE,yBAAyB;QACjC,MAAM,EAAE,EAAE;KACb,CAAC,CAAA;IAEF,OAAO;QACH,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;QAC3C,IAAI,EAAE,QAAQ,CAAC,IAAI;KACtB,CAAA;AACL,CAAC,CAAA"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Base64 } from "ox";
|
|
2
|
+
export const verifyAuthentication = async (client, args) => {
|
|
3
|
+
const { raw, uuid } = args;
|
|
4
|
+
let responseAuthenticatorData;
|
|
5
|
+
if ("authenticatorData" in raw.response) {
|
|
6
|
+
responseAuthenticatorData = Base64.fromBytes(new Uint8Array(raw.response.authenticatorData), {
|
|
7
|
+
url: true
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
throw new Error("authenticatorData not found in the signature");
|
|
12
|
+
}
|
|
13
|
+
let signature;
|
|
14
|
+
if ("signature" in raw.response) {
|
|
15
|
+
signature = Base64.fromBytes(new Uint8Array(raw.response.signature), {
|
|
16
|
+
pad: false,
|
|
17
|
+
url: true
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
throw new Error("signature not found in the signature");
|
|
22
|
+
}
|
|
23
|
+
let userHandle;
|
|
24
|
+
if ("userHandle" in raw.response) {
|
|
25
|
+
userHandle = Base64.fromBytes(new Uint8Array(raw.response.userHandle), {
|
|
26
|
+
pad: false,
|
|
27
|
+
url: true
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
const serverResponse = await client.request({
|
|
31
|
+
method: "pks_verifyAuthentication",
|
|
32
|
+
params: [
|
|
33
|
+
{
|
|
34
|
+
id: raw.id,
|
|
35
|
+
rawId: Base64.fromBytes(new Uint8Array(raw.rawId), {
|
|
36
|
+
pad: false,
|
|
37
|
+
url: true
|
|
38
|
+
}),
|
|
39
|
+
authenticatorAttachment: raw.authenticatorAttachment,
|
|
40
|
+
response: {
|
|
41
|
+
clientDataJSON: Base64.fromBytes(new Uint8Array(raw.response.clientDataJSON), {
|
|
42
|
+
pad: false,
|
|
43
|
+
url: true
|
|
44
|
+
}),
|
|
45
|
+
authenticatorData: responseAuthenticatorData,
|
|
46
|
+
signature,
|
|
47
|
+
userHandle
|
|
48
|
+
},
|
|
49
|
+
clientExtensionResults: raw.getClientExtensionResults(),
|
|
50
|
+
type: raw.type
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
uuid
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
}, {
|
|
57
|
+
retryCount: 0
|
|
58
|
+
});
|
|
59
|
+
const success = Boolean(serverResponse?.success);
|
|
60
|
+
const id = serverResponse?.id;
|
|
61
|
+
const publicKey = serverResponse?.publicKey;
|
|
62
|
+
if (typeof id !== "string") {
|
|
63
|
+
throw new Error("Invalid passkey id returned from server");
|
|
64
|
+
}
|
|
65
|
+
if (typeof publicKey !== "string" || !publicKey.startsWith("0x")) {
|
|
66
|
+
throw new Error("Invalid public key returned from server - must be hex string starting with 0x");
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
success,
|
|
70
|
+
id,
|
|
71
|
+
publicKey: publicKey
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=verifyAuthentication.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifyAuthentication.js","sourceRoot":"","sources":["../../../actions/passkeyServer/verifyAuthentication.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyRegistration.js","sourceRoot":"","sources":["../../../actions/passkeyServer/verifyRegistration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAA;AAgB3B,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACnC,MAKC,EACD,IAAkC,EACG,EAAE;IACvC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAEpC,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG;SAC1B,QAAuD,CAAA;IAE5D,IAAI,0BAA0B,GAAuB,SAAS,CAAA;IAC9D,IAAI,OAAO,QAAQ,CAAC,qBAAqB,KAAK,UAAU,EAAE,CAAC;QACvD,IAAI,CAAC;YACD,0BAA0B,GAAG,QAAQ,CAAC,qBAAqB,EAAE,CAAA;QACjE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;QAC/D,CAAC;IACL,CAAC;IAED,IAAI,yBAA6C,CAAA;IACjD,IAAI,OAAO,QAAQ,CAAC,oBAAoB,KAAK,UAAU,EAAE,CAAC;QACtD,IAAI,CAAC;YACD,yBAAyB,GAAG,MAAM,CAAC,SAAS,CACxC,IAAI,UAAU,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,CAClD,CAAA;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;QAC9D,CAAC;IACL,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"verifyRegistration.js","sourceRoot":"","sources":["../../../actions/passkeyServer/verifyRegistration.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import { getCredentials } from "../../actions/passkeyServer/getCredentials.js";
|
|
2
|
+
import { startAuthentication } from "../../actions/passkeyServer/startAuthentication.js";
|
|
2
3
|
import { startRegistration } from "../../actions/passkeyServer/startRegistration.js";
|
|
4
|
+
import { verifyAuthentication } from "../../actions/passkeyServer/verifyAuthentication.js";
|
|
3
5
|
import { verifyRegistration } from "../../actions/passkeyServer/verifyRegistration.js";
|
|
4
6
|
export const passkeyServerActions = (client) => ({
|
|
5
7
|
startRegistration: (args) => startRegistration(client, args),
|
|
6
8
|
verifyRegistration: (args) => verifyRegistration(client, args),
|
|
7
|
-
getCredentials: (args) => getCredentials(client, args)
|
|
9
|
+
getCredentials: (args) => getCredentials(client, args),
|
|
10
|
+
startAuthentication: () => startAuthentication(client),
|
|
11
|
+
verifyAuthentication: (args) => verifyAuthentication(client, args)
|
|
8
12
|
});
|
|
9
13
|
//# sourceMappingURL=passkeyServer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"passkeyServer.js","sourceRoot":"","sources":["../../../clients/decorators/passkeyServer.ts"],"names":[],"mappings":"AACA,OAAO,EAGH,cAAc,EACjB,MAAM,+CAA+C,CAAA;AACtD,OAAO,EAGH,iBAAiB,EACpB,MAAM,kDAAkD,CAAA;AACzD,OAAO,EAGH,kBAAkB,EACrB,MAAM,mDAAmD,CAAA;
|
|
1
|
+
{"version":3,"file":"passkeyServer.js","sourceRoot":"","sources":["../../../clients/decorators/passkeyServer.ts"],"names":[],"mappings":"AACA,OAAO,EAGH,cAAc,EACjB,MAAM,+CAA+C,CAAA;AACtD,OAAO,EAEH,mBAAmB,EACtB,MAAM,oDAAoD,CAAA;AAC3D,OAAO,EAGH,iBAAiB,EACpB,MAAM,kDAAkD,CAAA;AACzD,OAAO,EAGH,oBAAoB,EACvB,MAAM,qDAAqD,CAAA;AAC5D,OAAO,EAGH,kBAAkB,EACrB,MAAM,mDAAmD,CAAA;AAmB1D,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAChC,MAKC,EACmB,EAAE,CAAC,CAAC;IACxB,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC;IAC5D,kBAAkB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC;IAC9D,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC;IACtD,mBAAmB,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC;IACtD,oBAAoB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC;CACrE,CAAC,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { WebAuthnP256 } from "ox";
|
|
2
|
+
import { type Account, type Chain, type Client, type Transport } from "viem";
|
|
3
|
+
import type { PasskeyServerRpcSchema } from "../../types/passkeyServer.js";
|
|
4
|
+
export type StartAuthenticationReturnType = WebAuthnP256.sign.Options & {
|
|
5
|
+
uuid: string;
|
|
6
|
+
};
|
|
7
|
+
export declare const startAuthentication: (client: Client<Transport, Chain | undefined, Account | undefined, PasskeyServerRpcSchema>) => Promise<StartAuthenticationReturnType>;
|
|
8
|
+
//# sourceMappingURL=startAuthentication.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startAuthentication.d.ts","sourceRoot":"","sources":["../../../actions/passkeyServer/startAuthentication.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AACtC,OAAO,EACH,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,MAAM,EACX,KAAK,SAAS,EAEjB,MAAM,MAAM,CAAA;AACb,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AAE1E,MAAM,MAAM,6BAA6B,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,GAAG;IACpE,IAAI,EAAE,MAAM,CAAA;CACf,CAAA;AAED,eAAO,MAAM,mBAAmB,GAC5B,QAAQ,MAAM,CACV,SAAS,EACT,KAAK,GAAG,SAAS,EACjB,OAAO,GAAG,SAAS,EACnB,sBAAsB,CACzB,KACF,OAAO,CAAC,6BAA6B,CAYvC,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type WebAuthnP256 } from "ox";
|
|
2
|
+
import type { Account, Chain, Client, Hex, Transport } from "viem";
|
|
3
|
+
import type { PasskeyServerRpcSchema } from "../../types/passkeyServer.js";
|
|
4
|
+
export type VerifyAuthenticationParameters = WebAuthnP256.sign.ReturnType & {
|
|
5
|
+
uuid: string;
|
|
6
|
+
};
|
|
7
|
+
export type VerifyAuthenticationReturnType = {
|
|
8
|
+
success: boolean;
|
|
9
|
+
id: string;
|
|
10
|
+
publicKey: Hex;
|
|
11
|
+
};
|
|
12
|
+
export declare const verifyAuthentication: (client: Client<Transport, Chain | undefined, Account | undefined, PasskeyServerRpcSchema>, args: VerifyAuthenticationParameters) => Promise<VerifyAuthenticationReturnType>;
|
|
13
|
+
//# sourceMappingURL=verifyAuthentication.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifyAuthentication.d.ts","sourceRoot":"","sources":["../../../actions/passkeyServer/verifyAuthentication.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,YAAY,EAAE,MAAM,IAAI,CAAA;AAE9C,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAClE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AAE1E,MAAM,MAAM,8BAA8B,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,GAAG;IACxE,IAAI,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,8BAA8B,GAAG;IACzC,OAAO,EAAE,OAAO,CAAA;IAChB,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,GAAG,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,oBAAoB,GAC7B,QAAQ,MAAM,CACV,SAAS,EACT,KAAK,GAAG,SAAS,EACjB,OAAO,GAAG,SAAS,EACnB,sBAAsB,CACzB,EACD,MAAM,8BAA8B,KACrC,OAAO,CAAC,8BAA8B,CAiGxC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyRegistration.d.ts","sourceRoot":"","sources":["../../../actions/passkeyServer/verifyRegistration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAClE,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,0BAA0B,CAAA;AAClF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AAE1E,MAAM,MAAM,4BAA4B,GAAG;IACvC,UAAU,EAAE,kCAAkC,CAAA;IAC9C,OAAO,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,4BAA4B,GAAG;IACvC,OAAO,EAAE,OAAO,CAAA;IAChB,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,GAAG,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,kBAAkB,GAC3B,QAAQ,MAAM,CACV,SAAS,EACT,KAAK,GAAG,SAAS,EACjB,OAAO,GAAG,SAAS,EACnB,sBAAsB,CACzB,EACD,MAAM,4BAA4B,KACnC,OAAO,CAAC,4BAA4B,
|
|
1
|
+
{"version":3,"file":"verifyRegistration.d.ts","sourceRoot":"","sources":["../../../actions/passkeyServer/verifyRegistration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAClE,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,0BAA0B,CAAA;AAClF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AAE1E,MAAM,MAAM,4BAA4B,GAAG;IACvC,UAAU,EAAE,kCAAkC,CAAA;IAC9C,OAAO,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,4BAA4B,GAAG;IACvC,OAAO,EAAE,OAAO,CAAA;IAChB,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,GAAG,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,kBAAkB,GAC3B,QAAQ,MAAM,CACV,SAAS,EACT,KAAK,GAAG,SAAS,EACjB,OAAO,GAAG,SAAS,EACnB,sBAAsB,CACzB,EACD,MAAM,4BAA4B,KACnC,OAAO,CAAC,4BAA4B,CAmGtC,CAAA"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import type { Account, Chain, Client, Transport } from "viem";
|
|
2
2
|
import { type GetCredentialsParameters, type GetCredentialsReturnType } from "../../actions/passkeyServer/getCredentials.js";
|
|
3
|
+
import { type StartAuthenticationReturnType } from "../../actions/passkeyServer/startAuthentication.js";
|
|
3
4
|
import { type StartRegistrationParameters, type StartRegistrationReturnType } from "../../actions/passkeyServer/startRegistration.js";
|
|
5
|
+
import { type VerifyAuthenticationParameters, type VerifyAuthenticationReturnType } from "../../actions/passkeyServer/verifyAuthentication.js";
|
|
4
6
|
import { type VerifyRegistrationParameters, type VerifyRegistrationReturnType } from "../../actions/passkeyServer/verifyRegistration.js";
|
|
5
7
|
import type { PasskeyServerRpcSchema } from "../../types/passkeyServer.js";
|
|
6
8
|
export type PasskeyServerActions = {
|
|
7
9
|
startRegistration: (args: StartRegistrationParameters) => Promise<StartRegistrationReturnType>;
|
|
8
10
|
verifyRegistration: (args: VerifyRegistrationParameters) => Promise<VerifyRegistrationReturnType>;
|
|
11
|
+
startAuthentication: () => Promise<StartAuthenticationReturnType>;
|
|
12
|
+
verifyAuthentication: (args: VerifyAuthenticationParameters) => Promise<VerifyAuthenticationReturnType>;
|
|
9
13
|
getCredentials: (args: GetCredentialsParameters) => Promise<GetCredentialsReturnType>;
|
|
10
14
|
};
|
|
11
15
|
export declare const passkeyServerActions: (client: Client<Transport, Chain | undefined, Account | undefined, PasskeyServerRpcSchema>) => PasskeyServerActions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"passkeyServer.d.ts","sourceRoot":"","sources":["../../../clients/decorators/passkeyServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAC7D,OAAO,EACH,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAEhC,MAAM,+CAA+C,CAAA;AACtD,OAAO,EACH,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EAEnC,MAAM,kDAAkD,CAAA;AACzD,OAAO,EACH,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,EAEpC,MAAM,mDAAmD,CAAA;AAC1D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AAE1E,MAAM,MAAM,oBAAoB,GAAG;IAC/B,iBAAiB,EAAE,CACf,IAAI,EAAE,2BAA2B,KAChC,OAAO,CAAC,2BAA2B,CAAC,CAAA;IACzC,kBAAkB,EAAE,CAChB,IAAI,EAAE,4BAA4B,KACjC,OAAO,CAAC,4BAA4B,CAAC,CAAA;IAC1C,cAAc,EAAE,CACZ,IAAI,EAAE,wBAAwB,KAC7B,OAAO,CAAC,wBAAwB,CAAC,CAAA;CACzC,CAAA;AAED,eAAO,MAAM,oBAAoB,GAC7B,QAAQ,MAAM,CACV,SAAS,EACT,KAAK,GAAG,SAAS,EACjB,OAAO,GAAG,SAAS,EACnB,sBAAsB,CACzB,KACF,
|
|
1
|
+
{"version":3,"file":"passkeyServer.d.ts","sourceRoot":"","sources":["../../../clients/decorators/passkeyServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAC7D,OAAO,EACH,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAEhC,MAAM,+CAA+C,CAAA;AACtD,OAAO,EACH,KAAK,6BAA6B,EAErC,MAAM,oDAAoD,CAAA;AAC3D,OAAO,EACH,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EAEnC,MAAM,kDAAkD,CAAA;AACzD,OAAO,EACH,KAAK,8BAA8B,EACnC,KAAK,8BAA8B,EAEtC,MAAM,qDAAqD,CAAA;AAC5D,OAAO,EACH,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,EAEpC,MAAM,mDAAmD,CAAA;AAC1D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AAE1E,MAAM,MAAM,oBAAoB,GAAG;IAC/B,iBAAiB,EAAE,CACf,IAAI,EAAE,2BAA2B,KAChC,OAAO,CAAC,2BAA2B,CAAC,CAAA;IACzC,kBAAkB,EAAE,CAChB,IAAI,EAAE,4BAA4B,KACjC,OAAO,CAAC,4BAA4B,CAAC,CAAA;IAC1C,mBAAmB,EAAE,MAAM,OAAO,CAAC,6BAA6B,CAAC,CAAA;IACjE,oBAAoB,EAAE,CAClB,IAAI,EAAE,8BAA8B,KACnC,OAAO,CAAC,8BAA8B,CAAC,CAAA;IAC5C,cAAc,EAAE,CACZ,IAAI,EAAE,wBAAwB,KAC7B,OAAO,CAAC,wBAAwB,CAAC,CAAA;CACzC,CAAA;AAED,eAAO,MAAM,oBAAoB,GAC7B,QAAQ,MAAM,CACV,SAAS,EACT,KAAK,GAAG,SAAS,EACjB,OAAO,GAAG,SAAS,EACnB,sBAAsB,CACzB,KACF,oBAMD,CAAA"}
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
import type { Hex } from "viem";
|
|
2
2
|
export type PasskeyServerRpcSchema = [
|
|
3
|
+
{
|
|
4
|
+
Method: "pks_startAuthentication";
|
|
5
|
+
Parameters: [];
|
|
6
|
+
ReturnType: {
|
|
7
|
+
challenge: string;
|
|
8
|
+
rpId: string;
|
|
9
|
+
timeout?: number;
|
|
10
|
+
userVerification?: "required" | "preferred" | "discouraged";
|
|
11
|
+
uuid: string;
|
|
12
|
+
};
|
|
13
|
+
},
|
|
3
14
|
{
|
|
4
15
|
Method: "pks_startRegistration";
|
|
5
16
|
Parameters: [context: unknown];
|
|
@@ -62,6 +73,36 @@ export type PasskeyServerRpcSchema = [
|
|
|
62
73
|
publicKey: Hex;
|
|
63
74
|
};
|
|
64
75
|
},
|
|
76
|
+
{
|
|
77
|
+
Method: "pks_verifyAuthentication";
|
|
78
|
+
Parameters: [
|
|
79
|
+
{
|
|
80
|
+
id: string;
|
|
81
|
+
rawId: string;
|
|
82
|
+
response: {
|
|
83
|
+
clientDataJSON: string;
|
|
84
|
+
authenticatorData: string;
|
|
85
|
+
signature: string;
|
|
86
|
+
userHandle?: string;
|
|
87
|
+
};
|
|
88
|
+
authenticatorAttachment: "cross-platform" | "platform";
|
|
89
|
+
clientExtensionResults: {
|
|
90
|
+
appid?: boolean;
|
|
91
|
+
credProps?: {
|
|
92
|
+
rk?: boolean;
|
|
93
|
+
};
|
|
94
|
+
hmacCreateSecret?: boolean;
|
|
95
|
+
};
|
|
96
|
+
type: "public-key";
|
|
97
|
+
},
|
|
98
|
+
context: unknown
|
|
99
|
+
];
|
|
100
|
+
ReturnType: {
|
|
101
|
+
success: boolean;
|
|
102
|
+
id: string;
|
|
103
|
+
publicKey: Hex;
|
|
104
|
+
};
|
|
105
|
+
},
|
|
65
106
|
{
|
|
66
107
|
Method: "pks_getCredentials";
|
|
67
108
|
Parameters: [context: unknown];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"passkeyServer.d.ts","sourceRoot":"","sources":["../../types/passkeyServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AAE/B,MAAM,MAAM,sBAAsB,GAAG;IACjC;QACI,MAAM,EAAE,uBAAuB,CAAA;QAC/B,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC9B,UAAU,EAAE;YACR,EAAE,EAAE;gBACA,EAAE,EAAE,MAAM,CAAA;gBACV,IAAI,EAAE,MAAM,CAAA;aACf,CAAA;YACD,IAAI,EAAE;gBACF,EAAE,EAAE,MAAM,CAAA;gBACV,IAAI,EAAE,MAAM,CAAA;gBACZ,WAAW,EAAE,MAAM,CAAA;aACtB,CAAA;YACD,SAAS,EAAE,MAAM,CAAA;YACjB,OAAO,CAAC,EAAE,MAAM,CAAA;YAChB,sBAAsB,CAAC,EAAE;gBACrB,uBAAuB,CAAC,EAAE,UAAU,GAAG,gBAAgB,CAAA;gBACvD,kBAAkB,CAAC,EAAE,OAAO,CAAA;gBAC5B,WAAW,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,aAAa,CAAA;gBACtD,gBAAgB,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,aAAa,CAAA;aAC9D,CAAA;YACD,WAAW,EAAE,QAAQ,GAAG,YAAY,GAAG,UAAU,GAAG,MAAM,CAAA;YAC1D,UAAU,CAAC,EAAE;gBACT,KAAK,CAAC,EAAE,MAAM,CAAA;gBACd,SAAS,CAAC,EAAE,OAAO,CAAA;gBACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;gBAC1B,YAAY,CAAC,EAAE,OAAO,CAAA;aACzB,CAAA;SACJ,CAAA;KACJ;IACD;QACI,MAAM,EAAE,wBAAwB,CAAA;QAChC,UAAU,EAAE;YACR;gBACI,EAAE,EAAE,MAAM,CAAA;gBACV,KAAK,EAAE,MAAM,CAAA;gBACb,QAAQ,EAAE;oBACN,cAAc,EAAE,MAAM,CAAA;oBACtB,iBAAiB,EAAE,MAAM,CAAA;oBACzB,iBAAiB,CAAC,EAAE,MAAM,CAAA;oBAC1B,UAAU,CAAC,EAAE,CACP,KAAK,GACL,OAAO,GACP,QAAQ,GACR,UAAU,GACV,KAAK,GACL,YAAY,GACZ,KAAK,CACV,EAAE,CAAA;oBACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;oBAC3B,aAAa,CAAC,EAAE,MAAM,CAAA;iBACzB,CAAA;gBACD,uBAAuB,EAAE,gBAAgB,GAAG,UAAU,CAAA;gBACtD,sBAAsB,EAAE;oBACpB,KAAK,CAAC,EAAE,OAAO,CAAA;oBACf,SAAS,CAAC,EAAE;wBACR,EAAE,CAAC,EAAE,OAAO,CAAA;qBACf,CAAA;oBACD,gBAAgB,CAAC,EAAE,OAAO,CAAA;iBAC7B,CAAA;gBACD,IAAI,EAAE,YAAY,CAAA;aACrB;YACD,OAAO,EAAE,OAAO;SACnB,CAAA;QACD,UAAU,EAAE;YACR,OAAO,EAAE,OAAO,CAAA;YAChB,EAAE,EAAE,MAAM,CAAA;YACV,SAAS,EAAE,GAAG,CAAA;SACjB,CAAA;KACJ;IACD;QACI,MAAM,EAAE,oBAAoB,CAAA;QAC5B,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC9B,UAAU,EAAE;YACR,EAAE,EAAE,MAAM,CAAA;YACV,SAAS,EAAE,GAAG,CAAA;SACjB,EAAE,CAAA;KACN;CACJ,CAAA"}
|
|
1
|
+
{"version":3,"file":"passkeyServer.d.ts","sourceRoot":"","sources":["../../types/passkeyServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Base64 } from "ox"
|
|
2
|
+
import type { WebAuthnP256 } from "ox"
|
|
3
|
+
import {
|
|
4
|
+
type Account,
|
|
5
|
+
type Chain,
|
|
6
|
+
type Client,
|
|
7
|
+
type Transport,
|
|
8
|
+
toHex
|
|
9
|
+
} from "viem"
|
|
10
|
+
import type { PasskeyServerRpcSchema } from "../../types/passkeyServer.js"
|
|
11
|
+
|
|
12
|
+
export type StartAuthenticationReturnType = WebAuthnP256.sign.Options & {
|
|
13
|
+
uuid: string
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const startAuthentication = async (
|
|
17
|
+
client: Client<
|
|
18
|
+
Transport,
|
|
19
|
+
Chain | undefined,
|
|
20
|
+
Account | undefined,
|
|
21
|
+
PasskeyServerRpcSchema
|
|
22
|
+
>
|
|
23
|
+
): Promise<StartAuthenticationReturnType> => {
|
|
24
|
+
const response = await client.request({
|
|
25
|
+
method: "pks_startAuthentication",
|
|
26
|
+
params: []
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
return {
|
|
30
|
+
challenge: toHex(Base64.toBytes(response.challenge)),
|
|
31
|
+
rpId: response.rpId,
|
|
32
|
+
userVerification: response.userVerification,
|
|
33
|
+
uuid: response.uuid
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { Base64, type WebAuthnP256 } from "ox"
|
|
2
|
+
// import { Base64 } from "ox"
|
|
3
|
+
import type { Account, Chain, Client, Hex, Transport } from "viem"
|
|
4
|
+
import type { PasskeyServerRpcSchema } from "../../types/passkeyServer.js"
|
|
5
|
+
|
|
6
|
+
export type VerifyAuthenticationParameters = WebAuthnP256.sign.ReturnType & {
|
|
7
|
+
uuid: string
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export type VerifyAuthenticationReturnType = {
|
|
11
|
+
success: boolean
|
|
12
|
+
id: string
|
|
13
|
+
publicKey: Hex
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const verifyAuthentication = async (
|
|
17
|
+
client: Client<
|
|
18
|
+
Transport,
|
|
19
|
+
Chain | undefined,
|
|
20
|
+
Account | undefined,
|
|
21
|
+
PasskeyServerRpcSchema
|
|
22
|
+
>,
|
|
23
|
+
args: VerifyAuthenticationParameters
|
|
24
|
+
): Promise<VerifyAuthenticationReturnType> => {
|
|
25
|
+
const { raw, uuid } = args
|
|
26
|
+
|
|
27
|
+
let responseAuthenticatorData: string
|
|
28
|
+
|
|
29
|
+
if ("authenticatorData" in raw.response) {
|
|
30
|
+
responseAuthenticatorData = Base64.fromBytes(
|
|
31
|
+
new Uint8Array(raw.response.authenticatorData as ArrayBuffer),
|
|
32
|
+
{
|
|
33
|
+
url: true
|
|
34
|
+
}
|
|
35
|
+
)
|
|
36
|
+
} else {
|
|
37
|
+
throw new Error("authenticatorData not found in the signature")
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
let signature: string
|
|
41
|
+
if ("signature" in raw.response) {
|
|
42
|
+
signature = Base64.fromBytes(
|
|
43
|
+
new Uint8Array(raw.response.signature as ArrayBuffer),
|
|
44
|
+
{
|
|
45
|
+
pad: false,
|
|
46
|
+
url: true
|
|
47
|
+
}
|
|
48
|
+
)
|
|
49
|
+
} else {
|
|
50
|
+
throw new Error("signature not found in the signature")
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
let userHandle: string | undefined
|
|
54
|
+
if ("userHandle" in raw.response) {
|
|
55
|
+
userHandle = Base64.fromBytes(
|
|
56
|
+
new Uint8Array(raw.response.userHandle as ArrayBuffer),
|
|
57
|
+
{
|
|
58
|
+
pad: false,
|
|
59
|
+
url: true
|
|
60
|
+
}
|
|
61
|
+
)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const serverResponse = await client.request(
|
|
65
|
+
{
|
|
66
|
+
method: "pks_verifyAuthentication",
|
|
67
|
+
params: [
|
|
68
|
+
{
|
|
69
|
+
id: raw.id,
|
|
70
|
+
rawId: Base64.fromBytes(new Uint8Array(raw.rawId), {
|
|
71
|
+
pad: false,
|
|
72
|
+
url: true
|
|
73
|
+
}),
|
|
74
|
+
authenticatorAttachment: raw.authenticatorAttachment as
|
|
75
|
+
| "cross-platform"
|
|
76
|
+
| "platform",
|
|
77
|
+
response: {
|
|
78
|
+
clientDataJSON: Base64.fromBytes(
|
|
79
|
+
new Uint8Array(raw.response.clientDataJSON),
|
|
80
|
+
{
|
|
81
|
+
pad: false,
|
|
82
|
+
url: true
|
|
83
|
+
}
|
|
84
|
+
),
|
|
85
|
+
authenticatorData: responseAuthenticatorData,
|
|
86
|
+
signature,
|
|
87
|
+
userHandle
|
|
88
|
+
},
|
|
89
|
+
clientExtensionResults: raw.getClientExtensionResults(),
|
|
90
|
+
type: raw.type as "public-key"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
uuid
|
|
94
|
+
}
|
|
95
|
+
]
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
retryCount: 0
|
|
99
|
+
}
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
const success = Boolean(serverResponse?.success)
|
|
103
|
+
const id = serverResponse?.id
|
|
104
|
+
const publicKey = serverResponse?.publicKey
|
|
105
|
+
|
|
106
|
+
if (typeof id !== "string") {
|
|
107
|
+
throw new Error("Invalid passkey id returned from server")
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (typeof publicKey !== "string" || !publicKey.startsWith("0x")) {
|
|
111
|
+
throw new Error(
|
|
112
|
+
"Invalid public key returned from server - must be hex string starting with 0x"
|
|
113
|
+
)
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return {
|
|
117
|
+
success,
|
|
118
|
+
id,
|
|
119
|
+
publicKey: publicKey as Hex
|
|
120
|
+
}
|
|
121
|
+
}
|
|
@@ -48,49 +48,59 @@ export const verifyRegistration = async (
|
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
const serverResponse = await client.request(
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}),
|
|
60
|
-
response: {
|
|
61
|
-
clientDataJSON: Base64.fromBytes(
|
|
62
|
-
new Uint8Array(response.clientDataJSON)
|
|
63
|
-
),
|
|
64
|
-
attestationObject: Base64.fromBytes(
|
|
65
|
-
new Uint8Array(response.attestationObject),
|
|
51
|
+
const serverResponse = await client.request(
|
|
52
|
+
{
|
|
53
|
+
method: "pks_verifyRegistration",
|
|
54
|
+
params: [
|
|
55
|
+
{
|
|
56
|
+
id: credential.id,
|
|
57
|
+
rawId: Base64.fromBytes(
|
|
58
|
+
new Uint8Array(credential.raw.rawId),
|
|
66
59
|
{
|
|
60
|
+
pad: false,
|
|
67
61
|
url: true
|
|
68
62
|
}
|
|
69
63
|
),
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
64
|
+
response: {
|
|
65
|
+
clientDataJSON: Base64.fromBytes(
|
|
66
|
+
new Uint8Array(response.clientDataJSON)
|
|
67
|
+
),
|
|
68
|
+
attestationObject: Base64.fromBytes(
|
|
69
|
+
new Uint8Array(response.attestationObject),
|
|
70
|
+
{
|
|
71
|
+
url: true
|
|
72
|
+
}
|
|
73
|
+
),
|
|
74
|
+
transports:
|
|
75
|
+
typeof response.getTransports === "function"
|
|
76
|
+
? (response.getTransports() as (
|
|
77
|
+
| "ble"
|
|
78
|
+
| "cable"
|
|
79
|
+
| "hybrid"
|
|
80
|
+
| "internal"
|
|
81
|
+
| "nfc"
|
|
82
|
+
| "smart-card"
|
|
83
|
+
| "usb"
|
|
84
|
+
)[])
|
|
85
|
+
: undefined,
|
|
86
|
+
publicKeyAlgorithm: responsePublicKeyAlgorithm,
|
|
87
|
+
authenticatorData: responseAuthenticatorData
|
|
88
|
+
},
|
|
89
|
+
authenticatorAttachment: credential.raw
|
|
90
|
+
.authenticatorAttachment as
|
|
91
|
+
| "cross-platform"
|
|
92
|
+
| "platform",
|
|
93
|
+
clientExtensionResults:
|
|
94
|
+
credential.raw.getClientExtensionResults(),
|
|
95
|
+
type: credential.raw.type as "public-key"
|
|
84
96
|
},
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
]
|
|
93
|
-
})
|
|
97
|
+
context
|
|
98
|
+
]
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
retryCount: 0
|
|
102
|
+
}
|
|
103
|
+
)
|
|
94
104
|
|
|
95
105
|
const success = Boolean(serverResponse?.success)
|
|
96
106
|
const id = serverResponse?.id
|
|
@@ -4,11 +4,20 @@ import {
|
|
|
4
4
|
type GetCredentialsReturnType,
|
|
5
5
|
getCredentials
|
|
6
6
|
} from "../../actions/passkeyServer/getCredentials.js"
|
|
7
|
+
import {
|
|
8
|
+
type StartAuthenticationReturnType,
|
|
9
|
+
startAuthentication
|
|
10
|
+
} from "../../actions/passkeyServer/startAuthentication.js"
|
|
7
11
|
import {
|
|
8
12
|
type StartRegistrationParameters,
|
|
9
13
|
type StartRegistrationReturnType,
|
|
10
14
|
startRegistration
|
|
11
15
|
} from "../../actions/passkeyServer/startRegistration.js"
|
|
16
|
+
import {
|
|
17
|
+
type VerifyAuthenticationParameters,
|
|
18
|
+
type VerifyAuthenticationReturnType,
|
|
19
|
+
verifyAuthentication
|
|
20
|
+
} from "../../actions/passkeyServer/verifyAuthentication.js"
|
|
12
21
|
import {
|
|
13
22
|
type VerifyRegistrationParameters,
|
|
14
23
|
type VerifyRegistrationReturnType,
|
|
@@ -23,6 +32,10 @@ export type PasskeyServerActions = {
|
|
|
23
32
|
verifyRegistration: (
|
|
24
33
|
args: VerifyRegistrationParameters
|
|
25
34
|
) => Promise<VerifyRegistrationReturnType>
|
|
35
|
+
startAuthentication: () => Promise<StartAuthenticationReturnType>
|
|
36
|
+
verifyAuthentication: (
|
|
37
|
+
args: VerifyAuthenticationParameters
|
|
38
|
+
) => Promise<VerifyAuthenticationReturnType>
|
|
26
39
|
getCredentials: (
|
|
27
40
|
args: GetCredentialsParameters
|
|
28
41
|
) => Promise<GetCredentialsReturnType>
|
|
@@ -38,5 +51,7 @@ export const passkeyServerActions = (
|
|
|
38
51
|
): PasskeyServerActions => ({
|
|
39
52
|
startRegistration: (args) => startRegistration(client, args),
|
|
40
53
|
verifyRegistration: (args) => verifyRegistration(client, args),
|
|
41
|
-
getCredentials: (args) => getCredentials(client, args)
|
|
54
|
+
getCredentials: (args) => getCredentials(client, args),
|
|
55
|
+
startAuthentication: () => startAuthentication(client),
|
|
56
|
+
verifyAuthentication: (args) => verifyAuthentication(client, args)
|
|
42
57
|
})
|
package/package.json
CHANGED
package/types/passkeyServer.ts
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import type { Hex } from "viem"
|
|
2
2
|
|
|
3
3
|
export type PasskeyServerRpcSchema = [
|
|
4
|
+
{
|
|
5
|
+
Method: "pks_startAuthentication"
|
|
6
|
+
Parameters: []
|
|
7
|
+
ReturnType: {
|
|
8
|
+
challenge: string
|
|
9
|
+
rpId: string
|
|
10
|
+
timeout?: number
|
|
11
|
+
userVerification?: "required" | "preferred" | "discouraged"
|
|
12
|
+
uuid: string
|
|
13
|
+
}
|
|
14
|
+
},
|
|
4
15
|
{
|
|
5
16
|
Method: "pks_startRegistration"
|
|
6
17
|
Parameters: [context: unknown]
|
|
@@ -71,6 +82,36 @@ export type PasskeyServerRpcSchema = [
|
|
|
71
82
|
publicKey: Hex
|
|
72
83
|
}
|
|
73
84
|
},
|
|
85
|
+
{
|
|
86
|
+
Method: "pks_verifyAuthentication"
|
|
87
|
+
Parameters: [
|
|
88
|
+
{
|
|
89
|
+
id: string
|
|
90
|
+
rawId: string
|
|
91
|
+
response: {
|
|
92
|
+
clientDataJSON: string
|
|
93
|
+
authenticatorData: string
|
|
94
|
+
signature: string
|
|
95
|
+
userHandle?: string
|
|
96
|
+
}
|
|
97
|
+
authenticatorAttachment: "cross-platform" | "platform"
|
|
98
|
+
clientExtensionResults: {
|
|
99
|
+
appid?: boolean
|
|
100
|
+
credProps?: {
|
|
101
|
+
rk?: boolean
|
|
102
|
+
}
|
|
103
|
+
hmacCreateSecret?: boolean
|
|
104
|
+
}
|
|
105
|
+
type: "public-key"
|
|
106
|
+
},
|
|
107
|
+
context: unknown
|
|
108
|
+
]
|
|
109
|
+
ReturnType: {
|
|
110
|
+
success: boolean
|
|
111
|
+
id: string
|
|
112
|
+
publicKey: Hex
|
|
113
|
+
}
|
|
114
|
+
},
|
|
74
115
|
{
|
|
75
116
|
Method: "pks_getCredentials"
|
|
76
117
|
Parameters: [context: unknown]
|