@safe-global/protocol-kit 5.0.5-alpha.0 → 5.1.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.
@@ -10,18 +10,21 @@ const types_1 = require("../types");
10
10
  const isSharedSigner_1 = __importDefault(require("./isSharedSigner"));
11
11
  exports.PASSKEY_CLIENT_KEY = 'passkeyWallet';
12
12
  exports.PASSKEY_CLIENT_NAME = 'Passkey Wallet Client';
13
- const sign = async (passkeyRawId, data) => {
14
- const assertion = (await navigator.credentials.get({
13
+ const sign = async (passkeyRawId, data, getFn) => {
14
+ // Avoid loosing the context for navigator.credentials.get function that leads to an error
15
+ const getCredentials = getFn || navigator.credentials.get.bind(navigator.credentials);
16
+ const assertion = (await getCredentials({
15
17
  publicKey: {
16
18
  challenge: data,
17
19
  allowCredentials: [{ type: 'public-key', id: passkeyRawId }],
18
20
  userVerification: 'required'
19
21
  }
20
22
  }));
21
- if (!assertion?.response?.authenticatorData) {
23
+ const assertionResponse = assertion.response;
24
+ if (!assertionResponse?.authenticatorData) {
22
25
  throw new Error('Failed to sign data with passkey Signer');
23
26
  }
24
- const { authenticatorData, signature, clientDataJSON } = assertion.response;
27
+ const { authenticatorData, signature, clientDataJSON } = assertionResponse;
25
28
  return (0, viem_1.encodeAbiParameters)((0, viem_1.parseAbiParameters)('bytes, bytes, uint256[2]'), [
26
29
  (0, viem_1.toHex)(new Uint8Array(authenticatorData)),
27
30
  extractClientDataFields(clientDataJSON),
@@ -61,9 +64,9 @@ const createPasskeyClient = async (passkey, safeWebAuthnSignerFactoryContract, s
61
64
  .extend(() => ({
62
65
  signMessage({ message }) {
63
66
  if (typeof message === 'string') {
64
- return sign(passkeyRawId, (0, viem_1.toBytes)(message));
67
+ return sign(passkeyRawId, (0, viem_1.toBytes)(message), passkey.getFn);
65
68
  }
66
- return sign(passkeyRawId, (0, viem_1.isHex)(message.raw) ? (0, viem_1.toBytes)(message.raw) : message.raw);
69
+ return sign(passkeyRawId, (0, viem_1.isHex)(message.raw) ? (0, viem_1.toBytes)(message.raw) : message.raw, passkey.getFn);
67
70
  },
68
71
  signTransaction,
69
72
  signTypedData,
@@ -98,6 +101,14 @@ const createPasskeyClient = async (passkey, safeWebAuthnSignerFactoryContract, s
98
101
  }));
99
102
  };
100
103
  exports.createPasskeyClient = createPasskeyClient;
104
+ function decodeClientDataJSON(clientDataJSON) {
105
+ const uint8Array = new Uint8Array(clientDataJSON);
106
+ let result = '';
107
+ for (let i = 0; i < uint8Array.length; i++) {
108
+ result += String.fromCharCode(uint8Array[i]);
109
+ }
110
+ return result;
111
+ }
101
112
  /**
102
113
  * Compute the additional client data JSON fields. This is the fields other than `type` and
103
114
  * `challenge` (including `origin` and any other additional client data fields that may be
@@ -110,7 +121,7 @@ exports.createPasskeyClient = createPasskeyClient;
110
121
  * @throws {Error} Throws an error if the client data JSON does not contain the expected 'challenge' field pattern.
111
122
  */
112
123
  function extractClientDataFields(clientDataJSON) {
113
- const decodedClientDataJSON = new TextDecoder('utf-8').decode(clientDataJSON);
124
+ const decodedClientDataJSON = decodeClientDataJSON(clientDataJSON);
114
125
  const match = decodedClientDataJSON.match(/^\{"type":"webauthn.get","challenge":"[A-Za-z0-9\-_]{43}",(.*)\}$/);
115
126
  if (!match) {
116
127
  throw new Error('challenge not found in client data JSON');
@@ -1 +1 @@
1
- {"version":3,"file":"PasskeyClient.js","sourceRoot":"","sources":["../../../../src/utils/passkeys/PasskeyClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PasskeyClient.js","sourceRoot":"","sources":["../../../../src/utils/passkeys/PasskeyClient.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,56 @@
1
- import { PasskeyCoordinates, PasskeyArgType } from '../../types';
1
+ import { PasskeyArgType, PasskeyCoordinates } from '../../types';
2
+ /**
3
+ * Decodes a Base64-encoded ECDSA public key for React Native and extracts the x and y coordinates.
4
+ *
5
+ * This function handles both ASN.1 DER-encoded keys and uncompressed keys. It decodes a Base64-encoded
6
+ * public key, checks its format, and extracts the x and y coordinates using the `@noble/curves` library.
7
+ * The coordinates are returned as hexadecimal strings prefixed with '0x'.
8
+ *
9
+ * @param {string} publicKey - The Base64-encoded public key to decode.
10
+ * @returns {PasskeyCoordinates} An object containing the x and y coordinates of the public key.
11
+ * @throws {Error} Throws an error if the key is empty or if the coordinates cannot be extracted.
12
+ */
13
+ export declare function decodePublicKeyForReactNative(publicKey: string): Promise<PasskeyCoordinates>;
14
+ /**
15
+ * Decodes an ECDSA public key for the web platform and extracts the x and y coordinates.
16
+ *
17
+ * This function uses the Web Crypto API to import a public key in SPKI format and then
18
+ * exports it to a JWK format to retrieve the x and y coordinates. The coordinates are
19
+ * returned as hexadecimal strings prefixed with '0x'.
20
+ *
21
+ * @param {ArrayBuffer} publicKey - The public key in SPKI format to decode.
22
+ * @returns {Promise<PasskeyCoordinates>} A promise that resolves to an object containing
23
+ * the x and y coordinates of the public key.
24
+ * @throws {Error} Throws an error if the key coordinates cannot be extracted.
25
+ */
26
+ export declare function decodePublicKeyForWeb(publicKey: ArrayBuffer): Promise<PasskeyCoordinates>;
27
+ /**
28
+ * Decodes the x and y coordinates of the public key from a created public key credential response.
29
+ *
30
+ * @param {AuthenticatorResponse} response
31
+ * @returns {PasskeyCoordinates} Object containing the coordinates derived from the public key of the passkey.
32
+ * @throws {Error} Throws an error if the coordinates could not be extracted via `p256.ProjectivePoint.fromHex`
33
+ */
34
+ export declare function decodePublicKey(response: AuthenticatorResponse): Promise<PasskeyCoordinates>;
2
35
  /**
3
36
  * Extracts and returns the passkey data (coordinates and rawId) from a given passkey Credential.
4
37
  *
5
- * @param {Credential} passkeyCredential - The passkey credential generated via `navigator.credentials.create()` using correct parameters.
38
+ * @param {Credential} passkeyCredential - The passkey credential generated via `navigator.credentials.create()` or other method in another platforms.
6
39
  * @returns {Promise<PasskeyArgType>} A promise that resolves to an object containing the coordinates and the rawId derived from the passkey.
40
+ * This is the important information in the Safe account context and should be stored securely as it is used to verify the passkey and to instantiate the SDK
41
+ * as a signer (`Safe.init())
7
42
  * @throws {Error} Throws an error if the coordinates could not be extracted
8
43
  */
9
44
  export declare function extractPasskeyData(passkeyCredential: Credential): Promise<PasskeyArgType>;
10
45
  /**
11
- * Extracts and returns coordinates from a given passkey public key.
46
+ * Retrieves the default FCLP256 Verifier address for a given blockchain network.
47
+ *
48
+ * This function fetches the deployment information for the FCLP256 Verifier and
49
+ * returns the verifier address associated with the specified chain ID. It ensures
50
+ * that the correct version and release status are used.
12
51
  *
13
- * @param {ArrayBuffer} publicKey - The public key of the passkey from which coordinates will be extracted.
14
- * @returns {Promise<PasskeyCoordinates>} A promise that resolves to an object containing the coordinates derived from the public key of the passkey.
15
- * @throws {Error} Throws an error if the coordinates could not be extracted via `crypto.subtle.exportKey()`
52
+ * @param {string} chainId - The ID of the blockchain network to retrieve the verifier address for.
53
+ * @returns {string} The FCLP256 Verifier address for the specified chain ID.
54
+ * @throws {Error} Throws an error if the deployment information or address cannot be found.
16
55
  */
17
- export declare function extractPasskeyCoordinates(publicKey: ArrayBuffer): Promise<PasskeyCoordinates>;
18
56
  export declare function getDefaultFCLP256VerifierAddress(chainId: string): string;
@@ -1,38 +1,145 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || function (mod) {
25
+ if (mod && mod.__esModule) return mod;
26
+ var result = {};
27
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
28
+ __setModuleDefault(result, mod);
29
+ return result;
30
+ };
2
31
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getDefaultFCLP256VerifierAddress = exports.extractPasskeyCoordinates = exports.extractPasskeyData = void 0;
4
- const safe_modules_deployments_1 = require("@safe-global/safe-modules-deployments");
32
+ exports.getDefaultFCLP256VerifierAddress = exports.extractPasskeyData = exports.decodePublicKey = exports.decodePublicKeyForWeb = exports.decodePublicKeyForReactNative = void 0;
5
33
  const buffer_1 = require("buffer");
34
+ const safe_modules_deployments_1 = require("@safe-global/safe-modules-deployments");
6
35
  /**
7
- * Extracts and returns the passkey data (coordinates and rawId) from a given passkey Credential.
36
+ * Converts a Base64 URL-encoded string to a Uint8Array.
8
37
  *
9
- * @param {Credential} passkeyCredential - The passkey credential generated via `navigator.credentials.create()` using correct parameters.
10
- * @returns {Promise<PasskeyArgType>} A promise that resolves to an object containing the coordinates and the rawId derived from the passkey.
11
- * @throws {Error} Throws an error if the coordinates could not be extracted
38
+ * This function handles Base64 URL variants by replacing URL-safe characters
39
+ * with standard Base64 characters, decodes the Base64 string into a binary string,
40
+ * and then converts it into a Uint8Array.
41
+ *
42
+ * @param {string} base64 - The Base64 URL-encoded string to convert.
43
+ * @returns {Uint8Array} The resulting Uint8Array from the decoded Base64 string.
12
44
  */
13
- async function extractPasskeyData(passkeyCredential) {
14
- const passkey = passkeyCredential;
15
- const attestationResponse = passkey.response;
16
- const publicKey = attestationResponse.getPublicKey();
17
- if (!publicKey) {
18
- throw new Error('Failed to generate passkey Coordinates. getPublicKey() failed');
45
+ function base64ToUint8Array(base64) {
46
+ const base64Fixed = base64.replace(/-/g, '+').replace(/_/g, '/');
47
+ const binaryBuffer = buffer_1.Buffer.from(base64Fixed, 'base64');
48
+ return new Uint8Array(binaryBuffer);
49
+ }
50
+ /**
51
+ * Dynamic import libraries required for decoding public keys.
52
+ */
53
+ async function importLibs() {
54
+ const { p256 } = await Promise.resolve().then(() => __importStar(require('@noble/curves/p256')));
55
+ const { AsnParser, AsnProp, AsnPropTypes, AsnType, AsnTypeTypes } = await Promise.resolve().then(() => __importStar(require('@peculiar/asn1-schema')));
56
+ let AlgorithmIdentifier = class AlgorithmIdentifier {
57
+ constructor() {
58
+ this.id = '';
59
+ this.curve = '';
60
+ }
61
+ };
62
+ __decorate([
63
+ AsnProp({ type: AsnPropTypes.ObjectIdentifier })
64
+ ], AlgorithmIdentifier.prototype, "id", void 0);
65
+ __decorate([
66
+ AsnProp({ type: AsnPropTypes.ObjectIdentifier, optional: true })
67
+ ], AlgorithmIdentifier.prototype, "curve", void 0);
68
+ AlgorithmIdentifier = __decorate([
69
+ AsnType({ type: AsnTypeTypes.Sequence })
70
+ ], AlgorithmIdentifier);
71
+ let ECPublicKey = class ECPublicKey {
72
+ constructor() {
73
+ this.algorithm = new AlgorithmIdentifier();
74
+ this.publicKey = new ArrayBuffer(0);
75
+ }
76
+ };
77
+ __decorate([
78
+ AsnProp({ type: AlgorithmIdentifier })
79
+ ], ECPublicKey.prototype, "algorithm", void 0);
80
+ __decorate([
81
+ AsnProp({ type: AsnPropTypes.BitString })
82
+ ], ECPublicKey.prototype, "publicKey", void 0);
83
+ ECPublicKey = __decorate([
84
+ AsnType({ type: AsnTypeTypes.Sequence })
85
+ ], ECPublicKey);
86
+ return {
87
+ p256,
88
+ AsnParser,
89
+ ECPublicKey
90
+ };
91
+ }
92
+ /**
93
+ * Decodes a Base64-encoded ECDSA public key for React Native and extracts the x and y coordinates.
94
+ *
95
+ * This function handles both ASN.1 DER-encoded keys and uncompressed keys. It decodes a Base64-encoded
96
+ * public key, checks its format, and extracts the x and y coordinates using the `@noble/curves` library.
97
+ * The coordinates are returned as hexadecimal strings prefixed with '0x'.
98
+ *
99
+ * @param {string} publicKey - The Base64-encoded public key to decode.
100
+ * @returns {PasskeyCoordinates} An object containing the x and y coordinates of the public key.
101
+ * @throws {Error} Throws an error if the key is empty or if the coordinates cannot be extracted.
102
+ */
103
+ async function decodePublicKeyForReactNative(publicKey) {
104
+ const { p256, AsnParser, ECPublicKey } = await importLibs();
105
+ let publicKeyBytes = base64ToUint8Array(publicKey);
106
+ if (publicKeyBytes.length === 0) {
107
+ throw new Error('Decoded public key is empty.');
108
+ }
109
+ const isAsn1Encoded = publicKeyBytes[0] === 0x30;
110
+ const isUncompressedKey = publicKeyBytes.length === 64;
111
+ if (isAsn1Encoded) {
112
+ const asn1ParsedKey = AsnParser.parse(publicKeyBytes.buffer, ECPublicKey);
113
+ publicKeyBytes = new Uint8Array(asn1ParsedKey.publicKey);
114
+ }
115
+ else if (isUncompressedKey) {
116
+ const uncompressedKey = new Uint8Array(65);
117
+ uncompressedKey[0] = 0x04;
118
+ uncompressedKey.set(publicKeyBytes, 1);
119
+ publicKeyBytes = uncompressedKey;
19
120
  }
20
- const coordinates = await extractPasskeyCoordinates(publicKey);
21
- const rawId = buffer_1.Buffer.from(passkey.rawId).toString('hex');
121
+ const point = p256.ProjectivePoint.fromHex(publicKeyBytes);
122
+ const x = point.x.toString(16).padStart(64, '0');
123
+ const y = point.y.toString(16).padStart(64, '0');
22
124
  return {
23
- rawId,
24
- coordinates
125
+ x: '0x' + x,
126
+ y: '0x' + y
25
127
  };
26
128
  }
27
- exports.extractPasskeyData = extractPasskeyData;
129
+ exports.decodePublicKeyForReactNative = decodePublicKeyForReactNative;
28
130
  /**
29
- * Extracts and returns coordinates from a given passkey public key.
131
+ * Decodes an ECDSA public key for the web platform and extracts the x and y coordinates.
30
132
  *
31
- * @param {ArrayBuffer} publicKey - The public key of the passkey from which coordinates will be extracted.
32
- * @returns {Promise<PasskeyCoordinates>} A promise that resolves to an object containing the coordinates derived from the public key of the passkey.
33
- * @throws {Error} Throws an error if the coordinates could not be extracted via `crypto.subtle.exportKey()`
133
+ * This function uses the Web Crypto API to import a public key in SPKI format and then
134
+ * exports it to a JWK format to retrieve the x and y coordinates. The coordinates are
135
+ * returned as hexadecimal strings prefixed with '0x'.
136
+ *
137
+ * @param {ArrayBuffer} publicKey - The public key in SPKI format to decode.
138
+ * @returns {Promise<PasskeyCoordinates>} A promise that resolves to an object containing
139
+ * the x and y coordinates of the public key.
140
+ * @throws {Error} Throws an error if the key coordinates cannot be extracted.
34
141
  */
35
- async function extractPasskeyCoordinates(publicKey) {
142
+ async function decodePublicKeyForWeb(publicKey) {
36
143
  const algorithm = {
37
144
  name: 'ECDSA',
38
145
  namedCurve: 'P-256',
@@ -49,7 +156,63 @@ async function extractPasskeyCoordinates(publicKey) {
49
156
  y: '0x' + buffer_1.Buffer.from(y, 'base64').toString('hex')
50
157
  };
51
158
  }
52
- exports.extractPasskeyCoordinates = extractPasskeyCoordinates;
159
+ exports.decodePublicKeyForWeb = decodePublicKeyForWeb;
160
+ /**
161
+ * Decodes the x and y coordinates of the public key from a created public key credential response.
162
+ *
163
+ * @param {AuthenticatorResponse} response
164
+ * @returns {PasskeyCoordinates} Object containing the coordinates derived from the public key of the passkey.
165
+ * @throws {Error} Throws an error if the coordinates could not be extracted via `p256.ProjectivePoint.fromHex`
166
+ */
167
+ async function decodePublicKey(response) {
168
+ const publicKeyAuthenticatorResponse = response;
169
+ const publicKey = publicKeyAuthenticatorResponse.getPublicKey();
170
+ if (!publicKey) {
171
+ throw new Error('Failed to generate passkey coordinates. getPublicKey() failed');
172
+ }
173
+ if (typeof publicKey === 'string') {
174
+ // Public key is base64 encoded
175
+ // - React Native platform uses base64 encoded strings
176
+ return decodePublicKeyForReactNative(publicKey);
177
+ }
178
+ if (publicKey instanceof ArrayBuffer) {
179
+ // Public key is an ArrayBuffer
180
+ // - Web platform uses ArrayBuffer
181
+ return await decodePublicKeyForWeb(publicKey);
182
+ }
183
+ throw new Error('Unsupported public key format.');
184
+ }
185
+ exports.decodePublicKey = decodePublicKey;
186
+ /**
187
+ * Extracts and returns the passkey data (coordinates and rawId) from a given passkey Credential.
188
+ *
189
+ * @param {Credential} passkeyCredential - The passkey credential generated via `navigator.credentials.create()` or other method in another platforms.
190
+ * @returns {Promise<PasskeyArgType>} A promise that resolves to an object containing the coordinates and the rawId derived from the passkey.
191
+ * This is the important information in the Safe account context and should be stored securely as it is used to verify the passkey and to instantiate the SDK
192
+ * as a signer (`Safe.init())
193
+ * @throws {Error} Throws an error if the coordinates could not be extracted
194
+ */
195
+ async function extractPasskeyData(passkeyCredential) {
196
+ const passkeyPublicKeyCredential = passkeyCredential;
197
+ const rawId = buffer_1.Buffer.from(passkeyPublicKeyCredential.rawId).toString('hex');
198
+ const coordinates = await decodePublicKey(passkeyPublicKeyCredential.response);
199
+ return {
200
+ rawId,
201
+ coordinates
202
+ };
203
+ }
204
+ exports.extractPasskeyData = extractPasskeyData;
205
+ /**
206
+ * Retrieves the default FCLP256 Verifier address for a given blockchain network.
207
+ *
208
+ * This function fetches the deployment information for the FCLP256 Verifier and
209
+ * returns the verifier address associated with the specified chain ID. It ensures
210
+ * that the correct version and release status are used.
211
+ *
212
+ * @param {string} chainId - The ID of the blockchain network to retrieve the verifier address for.
213
+ * @returns {string} The FCLP256 Verifier address for the specified chain ID.
214
+ * @throws {Error} Throws an error if the deployment information or address cannot be found.
215
+ */
53
216
  function getDefaultFCLP256VerifierAddress(chainId) {
54
217
  const FCLP256VerifierDeployment = (0, safe_modules_deployments_1.getFCLP256VerifierDeployment)({
55
218
  version: '0.2.1',
@@ -1 +1 @@
1
- {"version":3,"file":"extractPasskeyData.js","sourceRoot":"","sources":["../../../../src/utils/passkeys/extractPasskeyData.ts"],"names":[],"mappings":";;;AAAA,oFAAoF;AACpF,mCAA+B;AAG/B;;;;;;GAMG;AACI,KAAK,UAAU,kBAAkB,CAAC,iBAA6B;IACpE,MAAM,OAAO,GAAG,iBAAwC,CAAA;IACxD,MAAM,mBAAmB,GAAG,OAAO,CAAC,QAA4C,CAAA;IAEhF,MAAM,SAAS,GAAG,mBAAmB,CAAC,YAAY,EAAE,CAAA;IAEpD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAA;IAClF,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,yBAAyB,CAAC,SAAS,CAAC,CAAA;IAC9D,MAAM,KAAK,GAAG,eAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAExD,OAAO;QACL,KAAK;QACL,WAAW;KACZ,CAAA;AACH,CAAC;AAjBD,gDAiBC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,yBAAyB,CAC7C,SAAsB;IAEtB,MAAM,SAAS,GAAG;QAChB,IAAI,EAAE,OAAO;QACb,UAAU,EAAE,OAAO;QACnB,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;KAC1B,CAAA;IAED,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEzF,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IAE1D,MAAM,kBAAkB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAErC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAA;IAC7F,CAAC;IAED,OAAO;QACL,CAAC,EAAE,IAAI,GAAG,eAAM,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAClD,CAAC,EAAE,IAAI,GAAG,eAAM,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;KACnD,CAAA;AACH,CAAC;AAvBD,8DAuBC;AAED,SAAgB,gCAAgC,CAAC,OAAe;IAC9D,MAAM,yBAAyB,GAAG,IAAA,uDAA4B,EAAC;QAC7D,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,OAAO;KACjB,CAAC,CAAA;IAEF,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,0DAA0D,OAAO,EAAE,CAAC,CAAA;IACtF,CAAC;IAED,MAAM,eAAe,GAAG,yBAAyB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;IAE3E,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,kDAAkD,OAAO,EAAE,CAAC,CAAA;IAC9E,CAAC;IAED,OAAO,eAAe,CAAA;AACxB,CAAC;AAlBD,4EAkBC"}
1
+ {"version":3,"file":"extractPasskeyData.js","sourceRoot":"","sources":["../../../../src/utils/passkeys/extractPasskeyData.ts"],"names":[],"mappings":"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"}