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.
Files changed (32) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/_cjs/actions/passkeyServer/startAuthentication.js +19 -0
  3. package/_cjs/actions/passkeyServer/startAuthentication.js.map +1 -0
  4. package/_cjs/actions/passkeyServer/verifyAuthentication.js +78 -0
  5. package/_cjs/actions/passkeyServer/verifyAuthentication.js.map +1 -0
  6. package/_cjs/actions/passkeyServer/verifyRegistration.js +2 -0
  7. package/_cjs/actions/passkeyServer/verifyRegistration.js.map +1 -1
  8. package/_cjs/clients/decorators/passkeyServer.js +5 -1
  9. package/_cjs/clients/decorators/passkeyServer.js.map +1 -1
  10. package/_esm/actions/passkeyServer/startAuthentication.js +15 -0
  11. package/_esm/actions/passkeyServer/startAuthentication.js.map +1 -0
  12. package/_esm/actions/passkeyServer/verifyAuthentication.js +74 -0
  13. package/_esm/actions/passkeyServer/verifyAuthentication.js.map +1 -0
  14. package/_esm/actions/passkeyServer/verifyRegistration.js +2 -0
  15. package/_esm/actions/passkeyServer/verifyRegistration.js.map +1 -1
  16. package/_esm/clients/decorators/passkeyServer.js +5 -1
  17. package/_esm/clients/decorators/passkeyServer.js.map +1 -1
  18. package/_types/actions/passkeyServer/startAuthentication.d.ts +8 -0
  19. package/_types/actions/passkeyServer/startAuthentication.d.ts.map +1 -0
  20. package/_types/actions/passkeyServer/verifyAuthentication.d.ts +13 -0
  21. package/_types/actions/passkeyServer/verifyAuthentication.d.ts.map +1 -0
  22. package/_types/actions/passkeyServer/verifyRegistration.d.ts.map +1 -1
  23. package/_types/clients/decorators/passkeyServer.d.ts +4 -0
  24. package/_types/clients/decorators/passkeyServer.d.ts.map +1 -1
  25. package/_types/types/passkeyServer.d.ts +41 -0
  26. package/_types/types/passkeyServer.d.ts.map +1 -1
  27. package/actions/passkeyServer/startAuthentication.ts +35 -0
  28. package/actions/passkeyServer/verifyAuthentication.ts +121 -0
  29. package/actions/passkeyServer/verifyRegistration.ts +48 -38
  30. package/clients/decorators/passkeyServer.ts +16 -1
  31. package/package.json +1 -1
  32. package/types/passkeyServer.ts +41 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # permissionless
2
2
 
3
+ ## 0.2.40
4
+
5
+ ### Patch Changes
6
+
7
+ - 9448c6fc5275f4be21916cb9f91dc067452baa6b: Added passkeys authentication flow
8
+
3
9
  ## 0.2.39
4
10
 
5
11
  ### Patch Changes
@@ -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":"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"}
@@ -51,6 +51,8 @@ const verifyRegistration = async (client, args) => {
51
51
  },
52
52
  context
53
53
  ]
54
+ }, {
55
+ retryCount: 0
54
56
  });
55
57
  const success = Boolean(serverResponse?.success);
56
58
  const id = serverResponse?.id;
@@ -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,CAAC;QACxC,MAAM,EAAE,wBAAwB;QAChC,MAAM,EAAE;YACJ;gBACI,EAAE,EAAE,UAAU,CAAC,EAAE;gBACjB,KAAK,EAAE,WAAM,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;oBAC1D,GAAG,EAAE,KAAK;oBACV,GAAG,EAAE,IAAI;iBACZ,CAAC;gBACF,QAAQ,EAAE;oBACN,cAAc,EAAE,WAAM,CAAC,SAAS,CAC5B,IAAI,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,CAC1C;oBACD,iBAAiB,EAAE,WAAM,CAAC,SAAS,CAC/B,IAAI,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAC1C;wBACI,GAAG,EAAE,IAAI;qBACZ,CACJ;oBACD,UAAU,EACN,OAAO,QAAQ,CAAC,aAAa,KAAK,UAAU;wBACxC,CAAC,CAAE,QAAQ,CAAC,aAAa,EAQnB;wBACN,CAAC,CAAC,SAAS;oBACnB,kBAAkB,EAAE,0BAA0B;oBAC9C,iBAAiB,EAAE,yBAAyB;iBAC/C;gBACD,uBAAuB,EAAE,UAAU,CAAC,GAAG;qBAClC,uBAAwD;gBAC7D,sBAAsB,EAClB,UAAU,CAAC,GAAG,CAAC,yBAAyB,EAAE;gBAC9C,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,IAAoB;aAC5C;YACD,OAAO;SACV;KACJ,CAAC,CAAA;IAEF,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;AAjGY,QAAA,kBAAkB,sBAiG9B"}
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,CACvC;QACI,MAAM,EAAE,wBAAwB;QAChC,MAAM,EAAE;YACJ;gBACI,EAAE,EAAE,UAAU,CAAC,EAAE;gBACjB,KAAK,EAAE,WAAM,CAAC,SAAS,CACnB,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EACpC;oBACI,GAAG,EAAE,KAAK;oBACV,GAAG,EAAE,IAAI;iBACZ,CACJ;gBACD,QAAQ,EAAE;oBACN,cAAc,EAAE,WAAM,CAAC,SAAS,CAC5B,IAAI,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,CAC1C;oBACD,iBAAiB,EAAE,WAAM,CAAC,SAAS,CAC/B,IAAI,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAC1C;wBACI,GAAG,EAAE,IAAI;qBACZ,CACJ;oBACD,UAAU,EACN,OAAO,QAAQ,CAAC,aAAa,KAAK,UAAU;wBACxC,CAAC,CAAE,QAAQ,CAAC,aAAa,EAQnB;wBACN,CAAC,CAAC,SAAS;oBACnB,kBAAkB,EAAE,0BAA0B;oBAC9C,iBAAiB,EAAE,yBAAyB;iBAC/C;gBACD,uBAAuB,EAAE,UAAU,CAAC,GAAG;qBAClC,uBAEW;gBAChB,sBAAsB,EAClB,UAAU,CAAC,GAAG,CAAC,yBAAyB,EAAE;gBAC9C,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,IAAoB;aAC5C;YACD,OAAO;SACV;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;AA3GY,QAAA,kBAAkB,sBA2G9B"}
@@ -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;AAenD,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;CACzD,CAAC,CAAA;AAXW,QAAA,oBAAoB,wBAW/B"}
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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"}
@@ -48,6 +48,8 @@ export const verifyRegistration = async (client, args) => {
48
48
  },
49
49
  context
50
50
  ]
51
+ }, {
52
+ retryCount: 0
51
53
  });
52
54
  const success = Boolean(serverResponse?.success);
53
55
  const id = serverResponse?.id;
@@ -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,CAAC;QACxC,MAAM,EAAE,wBAAwB;QAChC,MAAM,EAAE;YACJ;gBACI,EAAE,EAAE,UAAU,CAAC,EAAE;gBACjB,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;oBAC1D,GAAG,EAAE,KAAK;oBACV,GAAG,EAAE,IAAI;iBACZ,CAAC;gBACF,QAAQ,EAAE;oBACN,cAAc,EAAE,MAAM,CAAC,SAAS,CAC5B,IAAI,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,CAC1C;oBACD,iBAAiB,EAAE,MAAM,CAAC,SAAS,CAC/B,IAAI,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAC1C;wBACI,GAAG,EAAE,IAAI;qBACZ,CACJ;oBACD,UAAU,EACN,OAAO,QAAQ,CAAC,aAAa,KAAK,UAAU;wBACxC,CAAC,CAAE,QAAQ,CAAC,aAAa,EAQnB;wBACN,CAAC,CAAC,SAAS;oBACnB,kBAAkB,EAAE,0BAA0B;oBAC9C,iBAAiB,EAAE,yBAAyB;iBAC/C;gBACD,uBAAuB,EAAE,UAAU,CAAC,GAAG;qBAClC,uBAAwD;gBAC7D,sBAAsB,EAClB,UAAU,CAAC,GAAG,CAAC,yBAAyB,EAAE;gBAC9C,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,IAAoB;aAC5C;YACD,OAAO;SACV;KACJ,CAAC,CAAA;IAEF,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"}
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,CACvC;QACI,MAAM,EAAE,wBAAwB;QAChC,MAAM,EAAE;YACJ;gBACI,EAAE,EAAE,UAAU,CAAC,EAAE;gBACjB,KAAK,EAAE,MAAM,CAAC,SAAS,CACnB,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EACpC;oBACI,GAAG,EAAE,KAAK;oBACV,GAAG,EAAE,IAAI;iBACZ,CACJ;gBACD,QAAQ,EAAE;oBACN,cAAc,EAAE,MAAM,CAAC,SAAS,CAC5B,IAAI,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,CAC1C;oBACD,iBAAiB,EAAE,MAAM,CAAC,SAAS,CAC/B,IAAI,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAC1C;wBACI,GAAG,EAAE,IAAI;qBACZ,CACJ;oBACD,UAAU,EACN,OAAO,QAAQ,CAAC,aAAa,KAAK,UAAU;wBACxC,CAAC,CAAE,QAAQ,CAAC,aAAa,EAQnB;wBACN,CAAC,CAAC,SAAS;oBACnB,kBAAkB,EAAE,0BAA0B;oBAC9C,iBAAiB,EAAE,yBAAyB;iBAC/C;gBACD,uBAAuB,EAAE,UAAU,CAAC,GAAG;qBAClC,uBAEW;gBAChB,sBAAsB,EAClB,UAAU,CAAC,GAAG,CAAC,yBAAyB,EAAE;gBAC9C,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,IAAoB;aAC5C;YACD,OAAO;SACV;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"}
@@ -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;AAe1D,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;CACzD,CAAC,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,CAyFtC,CAAA"}
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,oBAID,CAAA"}
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
- method: "pks_verifyRegistration",
53
- params: [
54
- {
55
- id: credential.id,
56
- rawId: Base64.fromBytes(new Uint8Array(credential.raw.rawId), {
57
- pad: false,
58
- url: true
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
- transports:
71
- typeof response.getTransports === "function"
72
- ? (response.getTransports() as (
73
- | "ble"
74
- | "cable"
75
- | "hybrid"
76
- | "internal"
77
- | "nfc"
78
- | "smart-card"
79
- | "usb"
80
- )[])
81
- : undefined,
82
- publicKeyAlgorithm: responsePublicKeyAlgorithm,
83
- authenticatorData: responseAuthenticatorData
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
- authenticatorAttachment: credential.raw
86
- .authenticatorAttachment as "cross-platform" | "platform",
87
- clientExtensionResults:
88
- credential.raw.getClientExtensionResults(),
89
- type: credential.raw.type as "public-key"
90
- },
91
- context
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "permissionless",
3
- "version": "0.2.39",
3
+ "version": "0.2.40",
4
4
  "author": "Pimlico",
5
5
  "homepage": "https://docs.pimlico.io/permissionless",
6
6
  "repository": "github:pimlicolabs/permissionless.js",
@@ -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]