@bitgo-beta/passkey-crypto 0.0.1-beta.9 → 0.0.1-beta.90

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 (41) hide show
  1. package/dist/src/attachPasskeyToWallet.d.ts +2 -1
  2. package/dist/src/attachPasskeyToWallet.d.ts.map +1 -1
  3. package/dist/src/attachPasskeyToWallet.js +15 -19
  4. package/dist/src/base64url.d.ts +16 -0
  5. package/dist/src/base64url.d.ts.map +1 -0
  6. package/dist/src/base64url.js +27 -0
  7. package/dist/src/deriveEnterpriseSalt.d.ts +7 -1
  8. package/dist/src/deriveEnterpriseSalt.d.ts.map +1 -1
  9. package/dist/src/deriveEnterpriseSalt.js +11 -4
  10. package/dist/src/derivePasskeyPrfKey.d.ts.map +1 -1
  11. package/dist/src/derivePasskeyPrfKey.js +37 -14
  12. package/dist/src/index.d.ts +2 -0
  13. package/dist/src/index.d.ts.map +1 -1
  14. package/dist/src/index.js +6 -2
  15. package/dist/src/prfHelpers.d.ts.map +1 -1
  16. package/dist/src/prfHelpers.js +19 -4
  17. package/dist/src/registerPasskey.d.ts.map +1 -1
  18. package/dist/src/registerPasskey.js +4 -7
  19. package/dist/src/removePasskeyFromWallet.d.ts.map +1 -1
  20. package/dist/src/removePasskeyFromWallet.js +2 -2
  21. package/dist/test/integration/helpers/fixtures.d.ts +12 -0
  22. package/dist/test/integration/helpers/fixtures.d.ts.map +1 -0
  23. package/dist/test/integration/helpers/fixtures.js +15 -0
  24. package/dist/test/integration/helpers/mockBitGo.d.ts +27 -0
  25. package/dist/test/integration/helpers/mockBitGo.d.ts.map +1 -0
  26. package/dist/test/integration/helpers/mockBitGo.js +148 -0
  27. package/dist/test/integration/helpers/mockProvider.d.ts +5 -0
  28. package/dist/test/integration/helpers/mockProvider.d.ts.map +1 -0
  29. package/dist/test/integration/helpers/mockProvider.js +37 -0
  30. package/dist/test/integration/passkeyLifecycle.test.d.ts +2 -0
  31. package/dist/test/integration/passkeyLifecycle.test.d.ts.map +1 -0
  32. package/dist/test/integration/passkeyLifecycle.test.js +153 -0
  33. package/dist/test/unit/attachPasskeyToWallet.test.js +26 -8
  34. package/dist/test/unit/base64url.test.d.ts +2 -0
  35. package/dist/test/unit/base64url.test.d.ts.map +1 -0
  36. package/dist/test/unit/base64url.test.js +75 -0
  37. package/dist/test/unit/deriveEnterpriseSalt.test.js +8 -4
  38. package/dist/test/unit/derivePasskeyPrfKey.test.js +2 -2
  39. package/dist/test/unit/removePasskeyFromWallet.test.js +3 -3
  40. package/dist/tsconfig.tsbuildinfo +1 -1
  41. package/package.json +7 -5
@@ -1,4 +1,4 @@
1
- import { BitGoBase, Keychain } from '@bitgo-beta/sdk-core';
1
+ import { BitGoBase, EncryptionVersion, Keychain } from '@bitgo-beta/sdk-core';
2
2
  import { WebAuthnOtpDevice, WebAuthnProvider } from './webAuthnTypes';
3
3
  export declare function attachPasskeyToWallet(params: {
4
4
  bitgo: BitGoBase;
@@ -7,5 +7,6 @@ export declare function attachPasskeyToWallet(params: {
7
7
  device: WebAuthnOtpDevice;
8
8
  existingPassphrase: string;
9
9
  provider: WebAuthnProvider;
10
+ encryptionVersion?: EncryptionVersion;
10
11
  }): Promise<Keychain>;
11
12
  //# sourceMappingURL=attachPasskeyToWallet.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"attachPasskeyToWallet.d.ts","sourceRoot":"","sources":["../../src/attachPasskeyToWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAG3D,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEtE,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,gBAAgB,CAAC;CAC5B,GAAG,OAAO,CAAC,QAAQ,CAAC,CA2EpB"}
1
+ {"version":3,"file":"attachPasskeyToWallet.d.ts","sourceRoot":"","sources":["../../src/attachPasskeyToWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAI9E,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEtE,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAqEpB"}
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.attachPasskeyToWallet = attachPasskeyToWallet;
4
+ const base64url_1 = require("./base64url");
4
5
  const deriveEnterpriseSalt_1 = require("./deriveEnterpriseSalt");
5
6
  const derivePassword_1 = require("./derivePassword");
6
7
  async function attachPasskeyToWallet(params) {
7
- const { bitgo, coin, walletId, device, existingPassphrase, provider } = params;
8
+ const { bitgo, coin, walletId, device, existingPassphrase, provider, encryptionVersion } = params;
8
9
  // Throw early if PRF extension is not supported
9
10
  if (!device.prfSalt) {
10
11
  throw new Error('PRF extension not supported by this device. Please use a different passkey.');
@@ -23,40 +24,35 @@ async function attachPasskeyToWallet(params) {
23
24
  // Fetch the user keychain — iterates keys until it finds one with encryptedPrv
24
25
  const keychain = await wallet.getEncryptedUserKeychain();
25
26
  const keychainId = keychain.id;
26
- // Derive enterprise-scoped salt
27
- const enterpriseSalt = (0, deriveEnterpriseSalt_1.deriveEnterpriseSalt)(device.prfSalt, enterpriseId);
27
+ // Derive enterprise-scoped salt (base64url; same encoding is used as the
28
+ // PRF eval input and as the server-stored prfSalt so the bytes fed to the
29
+ // authenticator match between attach and derive).
30
+ const prfSalt = (0, deriveEnterpriseSalt_1.deriveEnterpriseSalt)(device.prfSalt, enterpriseId);
28
31
  // Decrypt private key with existing passphrase
29
- const privateKey = bitgo.decrypt({ password: existingPassphrase, input: keychain.encryptedPrv });
32
+ const privateKey = await bitgo.decryptAsync({ password: existingPassphrase, input: keychain.encryptedPrv });
30
33
  // Decode credentialId from base64url to ArrayBuffer for allowCredentials.
31
34
  // The WebAuthn spec requires allowCredentials to be non-empty when using evalByCredential,
32
35
  // and each entry must correspond to a key in the evalByCredential map.
33
- const credentialIdBuffer = Buffer.from(device.credentialId.replace(/-/g, '+').replace(/_/g, '/'), 'base64').buffer;
34
- // PRF assertion — evalByCredential maps this device's credentialId to its enterprise salt
36
+ const credentialIdBuffer = (0, base64url_1.base64UrlToBuffer)(device.credentialId).buffer;
37
+ // PRF assertion — evalByCredential maps this device's credentialId to the
38
+ // base64url enterprise salt. The provider layer is responsible for decoding
39
+ // base64url to raw bytes before handing it to the WebAuthn PRF extension.
35
40
  const authResult = await provider.get({
36
41
  publicKey: {
37
42
  allowCredentials: [{ type: 'public-key', id: credentialIdBuffer }],
38
43
  },
39
- evalByCredential: { [device.credentialId]: enterpriseSalt },
44
+ evalByCredential: { [device.credentialId]: prfSalt },
40
45
  });
41
46
  if (!authResult.prfResult) {
42
47
  throw new Error('PRF assertion did not return a result.');
43
48
  }
44
- // Derive password from PRF output and re-encrypt
45
49
  const prfPassword = (0, derivePassword_1.derivePassword)(authResult.prfResult);
46
- const encryptedPrv = bitgo.encrypt({ password: prfPassword, input: privateKey });
47
- // Convert enterpriseSalt from hex to base64url (URL-safe, no padding)
48
- // as required by the server's prfSalt validation.
49
- const prfSaltBase64url = Buffer.from(enterpriseSalt, 'hex')
50
- .toString('base64')
51
- .replace(/\+/g, '-')
52
- .replace(/\//g, '_')
53
- .replace(/=+$/, '');
54
- // PUT webauthnInfo to keychain endpoint
50
+ const encryptedPrv = await bitgo.encryptAsync({ password: prfPassword, input: privateKey, encryptionVersion });
55
51
  const updatedKeychain = await bitgo
56
52
  .put(bitgo.url(`/${coin}/key/${keychainId}`, 2))
57
53
  .send({
58
54
  webauthnInfo: {
59
- prfSalt: prfSaltBase64url,
55
+ prfSalt,
60
56
  otpDeviceId: device.id,
61
57
  encryptedPrv,
62
58
  },
@@ -64,4 +60,4 @@ async function attachPasskeyToWallet(params) {
64
60
  .result();
65
61
  return updatedKeychain;
66
62
  }
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNoUGFzc2tleVRvV2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F0dGFjaFBhc3NrZXlUb1dhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUtBLHNEQWtGQztBQXRGRCxpRUFBOEQ7QUFDOUQscURBQWtEO0FBRzNDLEtBQUssVUFBVSxxQkFBcUIsQ0FBQyxNQU8zQztJQUNDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBRS9FLGdEQUFnRDtJQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkVBQTZFLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVsQywrQ0FBK0M7SUFDL0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFFOUQsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLFFBQVEsb0VBQW9FLENBQUMsQ0FBQztJQUMxRyxDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ25DLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUM7SUFDM0MsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxRQUFRLHFCQUFxQixDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELCtFQUErRTtJQUMvRSxNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ3pELE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7SUFFL0IsZ0NBQWdDO0lBQ2hDLE1BQU0sY0FBYyxHQUFHLElBQUEsMkNBQW9CLEVBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUUxRSwrQ0FBK0M7SUFDL0MsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7SUFFakcsMEVBQTBFO0lBQzFFLDJGQUEyRjtJQUMzRix1RUFBdUU7SUFDdkUsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUVuSCwwRkFBMEY7SUFDMUYsTUFBTSxVQUFVLEdBQUcsTUFBTSxRQUFRLENBQUMsR0FBRyxDQUFDO1FBQ3BDLFNBQVMsRUFBRTtZQUNULGdCQUFnQixFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxDQUFDO1NBQzlCO1FBQ3RDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsY0FBYyxFQUFFO0tBQzVELENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxpREFBaUQ7SUFDakQsTUFBTSxXQUFXLEdBQUcsSUFBQSwrQkFBYyxFQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN6RCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUVqRixzRUFBc0U7SUFDdEUsa0RBQWtEO0lBQ2xELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDO1NBQ3hELFFBQVEsQ0FBQyxRQUFRLENBQUM7U0FDbEIsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7U0FDbkIsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7U0FDbkIsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUV0Qix3Q0FBd0M7SUFDeEMsTUFBTSxlQUFlLEdBQUcsTUFBTSxLQUFLO1NBQ2hDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxRQUFRLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQy9DLElBQUksQ0FBQztRQUNKLFlBQVksRUFBRTtZQUNaLE9BQU8sRUFBRSxnQkFBZ0I7WUFDekIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQ3RCLFlBQVk7U0FDYjtLQUNGLENBQUM7U0FDRCxNQUFNLEVBQUUsQ0FBQztJQUVaLE9BQU8sZUFBMkIsQ0FBQztBQUNyQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQml0R29CYXNlLCBLZXljaGFpbiB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGRlcml2ZUVudGVycHJpc2VTYWx0IH0gZnJvbSAnLi9kZXJpdmVFbnRlcnByaXNlU2FsdCc7XG5pbXBvcnQgeyBkZXJpdmVQYXNzd29yZCB9IGZyb20gJy4vZGVyaXZlUGFzc3dvcmQnO1xuaW1wb3J0IHsgV2ViQXV0aG5PdHBEZXZpY2UsIFdlYkF1dGhuUHJvdmlkZXIgfSBmcm9tICcuL3dlYkF1dGhuVHlwZXMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXR0YWNoUGFzc2tleVRvV2FsbGV0KHBhcmFtczoge1xuICBiaXRnbzogQml0R29CYXNlO1xuICBjb2luOiBzdHJpbmc7XG4gIHdhbGxldElkOiBzdHJpbmc7XG4gIGRldmljZTogV2ViQXV0aG5PdHBEZXZpY2U7XG4gIGV4aXN0aW5nUGFzc3BocmFzZTogc3RyaW5nO1xuICBwcm92aWRlcjogV2ViQXV0aG5Qcm92aWRlcjtcbn0pOiBQcm9taXNlPEtleWNoYWluPiB7XG4gIGNvbnN0IHsgYml0Z28sIGNvaW4sIHdhbGxldElkLCBkZXZpY2UsIGV4aXN0aW5nUGFzc3BocmFzZSwgcHJvdmlkZXIgfSA9IHBhcmFtcztcblxuICAvLyBUaHJvdyBlYXJseSBpZiBQUkYgZXh0ZW5zaW9uIGlzIG5vdCBzdXBwb3J0ZWRcbiAgaWYgKCFkZXZpY2UucHJmU2FsdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUFJGIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlLiBQbGVhc2UgdXNlIGEgZGlmZmVyZW50IHBhc3NrZXkuJyk7XG4gIH1cblxuICBjb25zdCBiYXNlQ29pbiA9IGJpdGdvLmNvaW4oY29pbik7XG5cbiAgLy8gRmV0Y2ggd2FsbGV0IGFuZCB2YWxpZGF0ZSBpdCBpcyBhIGhvdCB3YWxsZXRcbiAgY29uc3Qgd2FsbGV0ID0gYXdhaXQgYmFzZUNvaW4ud2FsbGV0cygpLmdldCh7IGlkOiB3YWxsZXRJZCB9KTtcblxuICBpZiAod2FsbGV0LnR5cGUoKSAhPT0gJ2hvdCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFdhbGxldCAke3dhbGxldElkfSBpcyBub3QgYSBob3Qgd2FsbGV0LiBPbmx5IGhvdCB3YWxsZXRzIHN1cHBvcnQgcGFzc2tleSBhdHRhY2htZW50LmApO1xuICB9XG5cbiAgY29uc3Qgd2FsbGV0RGF0YSA9IHdhbGxldC50b0pTT04oKTtcbiAgY29uc3QgZW50ZXJwcmlzZUlkID0gd2FsbGV0RGF0YS5lbnRlcnByaXNlO1xuICBpZiAoIWVudGVycHJpc2VJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgV2FsbGV0ICR7d2FsbGV0SWR9IGhhcyBubyBlbnRlcnByaXNlLmApO1xuICB9XG5cbiAgLy8gRmV0Y2ggdGhlIHVzZXIga2V5Y2hhaW4g4oCUIGl0ZXJhdGVzIGtleXMgdW50aWwgaXQgZmluZHMgb25lIHdpdGggZW5jcnlwdGVkUHJ2XG4gIGNvbnN0IGtleWNoYWluID0gYXdhaXQgd2FsbGV0LmdldEVuY3J5cHRlZFVzZXJLZXljaGFpbigpO1xuICBjb25zdCBrZXljaGFpbklkID0ga2V5Y2hhaW4uaWQ7XG5cbiAgLy8gRGVyaXZlIGVudGVycHJpc2Utc2NvcGVkIHNhbHRcbiAgY29uc3QgZW50ZXJwcmlzZVNhbHQgPSBkZXJpdmVFbnRlcnByaXNlU2FsdChkZXZpY2UucHJmU2FsdCwgZW50ZXJwcmlzZUlkKTtcblxuICAvLyBEZWNyeXB0IHByaXZhdGUga2V5IHdpdGggZXhpc3RpbmcgcGFzc3BocmFzZVxuICBjb25zdCBwcml2YXRlS2V5ID0gYml0Z28uZGVjcnlwdCh7IHBhc3N3b3JkOiBleGlzdGluZ1Bhc3NwaHJhc2UsIGlucHV0OiBrZXljaGFpbi5lbmNyeXB0ZWRQcnYgfSk7XG5cbiAgLy8gRGVjb2RlIGNyZWRlbnRpYWxJZCBmcm9tIGJhc2U2NHVybCB0byBBcnJheUJ1ZmZlciBmb3IgYWxsb3dDcmVkZW50aWFscy5cbiAgLy8gVGhlIFdlYkF1dGhuIHNwZWMgcmVxdWlyZXMgYWxsb3dDcmVkZW50aWFscyB0byBiZSBub24tZW1wdHkgd2hlbiB1c2luZyBldmFsQnlDcmVkZW50aWFsLFxuICAvLyBhbmQgZWFjaCBlbnRyeSBtdXN0IGNvcnJlc3BvbmQgdG8gYSBrZXkgaW4gdGhlIGV2YWxCeUNyZWRlbnRpYWwgbWFwLlxuICBjb25zdCBjcmVkZW50aWFsSWRCdWZmZXIgPSBCdWZmZXIuZnJvbShkZXZpY2UuY3JlZGVudGlhbElkLnJlcGxhY2UoLy0vZywgJysnKS5yZXBsYWNlKC9fL2csICcvJyksICdiYXNlNjQnKS5idWZmZXI7XG5cbiAgLy8gUFJGIGFzc2VydGlvbiDigJQgZXZhbEJ5Q3JlZGVudGlhbCBtYXBzIHRoaXMgZGV2aWNlJ3MgY3JlZGVudGlhbElkIHRvIGl0cyBlbnRlcnByaXNlIHNhbHRcbiAgY29uc3QgYXV0aFJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLmdldCh7XG4gICAgcHVibGljS2V5OiB7XG4gICAgICBhbGxvd0NyZWRlbnRpYWxzOiBbeyB0eXBlOiAncHVibGljLWtleScsIGlkOiBjcmVkZW50aWFsSWRCdWZmZXIgfV0sXG4gICAgfSBhcyBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMsXG4gICAgZXZhbEJ5Q3JlZGVudGlhbDogeyBbZGV2aWNlLmNyZWRlbnRpYWxJZF06IGVudGVycHJpc2VTYWx0IH0sXG4gIH0pO1xuXG4gIGlmICghYXV0aFJlc3VsdC5wcmZSZXN1bHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BSRiBhc3NlcnRpb24gZGlkIG5vdCByZXR1cm4gYSByZXN1bHQuJyk7XG4gIH1cblxuICAvLyBEZXJpdmUgcGFzc3dvcmQgZnJvbSBQUkYgb3V0cHV0IGFuZCByZS1lbmNyeXB0XG4gIGNvbnN0IHByZlBhc3N3b3JkID0gZGVyaXZlUGFzc3dvcmQoYXV0aFJlc3VsdC5wcmZSZXN1bHQpO1xuICBjb25zdCBlbmNyeXB0ZWRQcnYgPSBiaXRnby5lbmNyeXB0KHsgcGFzc3dvcmQ6IHByZlBhc3N3b3JkLCBpbnB1dDogcHJpdmF0ZUtleSB9KTtcblxuICAvLyBDb252ZXJ0IGVudGVycHJpc2VTYWx0IGZyb20gaGV4IHRvIGJhc2U2NHVybCAoVVJMLXNhZmUsIG5vIHBhZGRpbmcpXG4gIC8vIGFzIHJlcXVpcmVkIGJ5IHRoZSBzZXJ2ZXIncyBwcmZTYWx0IHZhbGlkYXRpb24uXG4gIGNvbnN0IHByZlNhbHRCYXNlNjR1cmwgPSBCdWZmZXIuZnJvbShlbnRlcnByaXNlU2FsdCwgJ2hleCcpXG4gICAgLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgIC5yZXBsYWNlKC9cXCsvZywgJy0nKVxuICAgIC5yZXBsYWNlKC9cXC8vZywgJ18nKVxuICAgIC5yZXBsYWNlKC89KyQvLCAnJyk7XG5cbiAgLy8gUFVUIHdlYmF1dGhuSW5mbyB0byBrZXljaGFpbiBlbmRwb2ludFxuICBjb25zdCB1cGRhdGVkS2V5Y2hhaW4gPSBhd2FpdCBiaXRnb1xuICAgIC5wdXQoYml0Z28udXJsKGAvJHtjb2lufS9rZXkvJHtrZXljaGFpbklkfWAsIDIpKVxuICAgIC5zZW5kKHtcbiAgICAgIHdlYmF1dGhuSW5mbzoge1xuICAgICAgICBwcmZTYWx0OiBwcmZTYWx0QmFzZTY0dXJsLFxuICAgICAgICBvdHBEZXZpY2VJZDogZGV2aWNlLmlkLFxuICAgICAgICBlbmNyeXB0ZWRQcnYsXG4gICAgICB9LFxuICAgIH0pXG4gICAgLnJlc3VsdCgpO1xuXG4gIHJldHVybiB1cGRhdGVkS2V5Y2hhaW4gYXMgS2V5Y2hhaW47XG59XG4iXX0=
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNoUGFzc2tleVRvV2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F0dGFjaFBhc3NrZXlUb1dhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU1BLHNEQTZFQztBQWxGRCwyQ0FBZ0Q7QUFDaEQsaUVBQThEO0FBQzlELHFEQUFrRDtBQUczQyxLQUFLLFVBQVUscUJBQXFCLENBQUMsTUFRM0M7SUFDQyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUVsRyxnREFBZ0Q7SUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLDZFQUE2RSxDQUFDLENBQUM7SUFDakcsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFbEMsK0NBQStDO0lBQy9DLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBRTlELElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxRQUFRLG9FQUFvRSxDQUFDLENBQUM7SUFDMUcsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNuQyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDO0lBQzNDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsUUFBUSxxQkFBcUIsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCwrRUFBK0U7SUFDL0UsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUN6RCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDO0lBRS9CLHlFQUF5RTtJQUN6RSwwRUFBMEU7SUFDMUUsa0RBQWtEO0lBQ2xELE1BQU0sT0FBTyxHQUFHLElBQUEsMkNBQW9CLEVBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUVuRSwrQ0FBK0M7SUFDL0MsTUFBTSxVQUFVLEdBQUcsTUFBTSxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUU1RywwRUFBMEU7SUFDMUUsMkZBQTJGO0lBQzNGLHVFQUF1RTtJQUN2RSxNQUFNLGtCQUFrQixHQUFHLElBQUEsNkJBQWlCLEVBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUV6RSwwRUFBMEU7SUFDMUUsNEVBQTRFO0lBQzVFLDBFQUEwRTtJQUMxRSxNQUFNLFVBQVUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFDcEMsU0FBUyxFQUFFO1lBQ1QsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLGtCQUFrQixFQUFFLENBQUM7U0FDOUI7UUFDdEMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxPQUFPLEVBQUU7S0FDckQsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLElBQUEsK0JBQWMsRUFBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDekQsTUFBTSxZQUFZLEdBQUcsTUFBTSxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQztJQUUvRyxNQUFNLGVBQWUsR0FBRyxNQUFNLEtBQUs7U0FDaEMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLFFBQVEsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDL0MsSUFBSSxDQUFDO1FBQ0osWUFBWSxFQUFFO1lBQ1osT0FBTztZQUNQLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBRTtZQUN0QixZQUFZO1NBQ2I7S0FDRixDQUFDO1NBQ0QsTUFBTSxFQUFFLENBQUM7SUFFWixPQUFPLGVBQTJCLENBQUM7QUFDckMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJpdEdvQmFzZSwgRW5jcnlwdGlvblZlcnNpb24sIEtleWNoYWluIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgYmFzZTY0VXJsVG9CdWZmZXIgfSBmcm9tICcuL2Jhc2U2NHVybCc7XG5pbXBvcnQgeyBkZXJpdmVFbnRlcnByaXNlU2FsdCB9IGZyb20gJy4vZGVyaXZlRW50ZXJwcmlzZVNhbHQnO1xuaW1wb3J0IHsgZGVyaXZlUGFzc3dvcmQgfSBmcm9tICcuL2Rlcml2ZVBhc3N3b3JkJztcbmltcG9ydCB7IFdlYkF1dGhuT3RwRGV2aWNlLCBXZWJBdXRoblByb3ZpZGVyIH0gZnJvbSAnLi93ZWJBdXRoblR5cGVzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGF0dGFjaFBhc3NrZXlUb1dhbGxldChwYXJhbXM6IHtcbiAgYml0Z286IEJpdEdvQmFzZTtcbiAgY29pbjogc3RyaW5nO1xuICB3YWxsZXRJZDogc3RyaW5nO1xuICBkZXZpY2U6IFdlYkF1dGhuT3RwRGV2aWNlO1xuICBleGlzdGluZ1Bhc3NwaHJhc2U6IHN0cmluZztcbiAgcHJvdmlkZXI6IFdlYkF1dGhuUHJvdmlkZXI7XG4gIGVuY3J5cHRpb25WZXJzaW9uPzogRW5jcnlwdGlvblZlcnNpb247XG59KTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICBjb25zdCB7IGJpdGdvLCBjb2luLCB3YWxsZXRJZCwgZGV2aWNlLCBleGlzdGluZ1Bhc3NwaHJhc2UsIHByb3ZpZGVyLCBlbmNyeXB0aW9uVmVyc2lvbiB9ID0gcGFyYW1zO1xuXG4gIC8vIFRocm93IGVhcmx5IGlmIFBSRiBleHRlbnNpb24gaXMgbm90IHN1cHBvcnRlZFxuICBpZiAoIWRldmljZS5wcmZTYWx0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQUkYgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2UuIFBsZWFzZSB1c2UgYSBkaWZmZXJlbnQgcGFzc2tleS4nKTtcbiAgfVxuXG4gIGNvbnN0IGJhc2VDb2luID0gYml0Z28uY29pbihjb2luKTtcblxuICAvLyBGZXRjaCB3YWxsZXQgYW5kIHZhbGlkYXRlIGl0IGlzIGEgaG90IHdhbGxldFxuICBjb25zdCB3YWxsZXQgPSBhd2FpdCBiYXNlQ29pbi53YWxsZXRzKCkuZ2V0KHsgaWQ6IHdhbGxldElkIH0pO1xuXG4gIGlmICh3YWxsZXQudHlwZSgpICE9PSAnaG90Jykge1xuICAgIHRocm93IG5ldyBFcnJvcihgV2FsbGV0ICR7d2FsbGV0SWR9IGlzIG5vdCBhIGhvdCB3YWxsZXQuIE9ubHkgaG90IHdhbGxldHMgc3VwcG9ydCBwYXNza2V5IGF0dGFjaG1lbnQuYCk7XG4gIH1cblxuICBjb25zdCB3YWxsZXREYXRhID0gd2FsbGV0LnRvSlNPTigpO1xuICBjb25zdCBlbnRlcnByaXNlSWQgPSB3YWxsZXREYXRhLmVudGVycHJpc2U7XG4gIGlmICghZW50ZXJwcmlzZUlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBXYWxsZXQgJHt3YWxsZXRJZH0gaGFzIG5vIGVudGVycHJpc2UuYCk7XG4gIH1cblxuICAvLyBGZXRjaCB0aGUgdXNlciBrZXljaGFpbiDigJQgaXRlcmF0ZXMga2V5cyB1bnRpbCBpdCBmaW5kcyBvbmUgd2l0aCBlbmNyeXB0ZWRQcnZcbiAgY29uc3Qga2V5Y2hhaW4gPSBhd2FpdCB3YWxsZXQuZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluKCk7XG4gIGNvbnN0IGtleWNoYWluSWQgPSBrZXljaGFpbi5pZDtcblxuICAvLyBEZXJpdmUgZW50ZXJwcmlzZS1zY29wZWQgc2FsdCAoYmFzZTY0dXJsOyBzYW1lIGVuY29kaW5nIGlzIHVzZWQgYXMgdGhlXG4gIC8vIFBSRiBldmFsIGlucHV0IGFuZCBhcyB0aGUgc2VydmVyLXN0b3JlZCBwcmZTYWx0IHNvIHRoZSBieXRlcyBmZWQgdG8gdGhlXG4gIC8vIGF1dGhlbnRpY2F0b3IgbWF0Y2ggYmV0d2VlbiBhdHRhY2ggYW5kIGRlcml2ZSkuXG4gIGNvbnN0IHByZlNhbHQgPSBkZXJpdmVFbnRlcnByaXNlU2FsdChkZXZpY2UucHJmU2FsdCwgZW50ZXJwcmlzZUlkKTtcblxuICAvLyBEZWNyeXB0IHByaXZhdGUga2V5IHdpdGggZXhpc3RpbmcgcGFzc3BocmFzZVxuICBjb25zdCBwcml2YXRlS2V5ID0gYXdhaXQgYml0Z28uZGVjcnlwdEFzeW5jKHsgcGFzc3dvcmQ6IGV4aXN0aW5nUGFzc3BocmFzZSwgaW5wdXQ6IGtleWNoYWluLmVuY3J5cHRlZFBydiB9KTtcblxuICAvLyBEZWNvZGUgY3JlZGVudGlhbElkIGZyb20gYmFzZTY0dXJsIHRvIEFycmF5QnVmZmVyIGZvciBhbGxvd0NyZWRlbnRpYWxzLlxuICAvLyBUaGUgV2ViQXV0aG4gc3BlYyByZXF1aXJlcyBhbGxvd0NyZWRlbnRpYWxzIHRvIGJlIG5vbi1lbXB0eSB3aGVuIHVzaW5nIGV2YWxCeUNyZWRlbnRpYWwsXG4gIC8vIGFuZCBlYWNoIGVudHJ5IG11c3QgY29ycmVzcG9uZCB0byBhIGtleSBpbiB0aGUgZXZhbEJ5Q3JlZGVudGlhbCBtYXAuXG4gIGNvbnN0IGNyZWRlbnRpYWxJZEJ1ZmZlciA9IGJhc2U2NFVybFRvQnVmZmVyKGRldmljZS5jcmVkZW50aWFsSWQpLmJ1ZmZlcjtcblxuICAvLyBQUkYgYXNzZXJ0aW9uIOKAlCBldmFsQnlDcmVkZW50aWFsIG1hcHMgdGhpcyBkZXZpY2UncyBjcmVkZW50aWFsSWQgdG8gdGhlXG4gIC8vIGJhc2U2NHVybCBlbnRlcnByaXNlIHNhbHQuIFRoZSBwcm92aWRlciBsYXllciBpcyByZXNwb25zaWJsZSBmb3IgZGVjb2RpbmdcbiAgLy8gYmFzZTY0dXJsIHRvIHJhdyBieXRlcyBiZWZvcmUgaGFuZGluZyBpdCB0byB0aGUgV2ViQXV0aG4gUFJGIGV4dGVuc2lvbi5cbiAgY29uc3QgYXV0aFJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLmdldCh7XG4gICAgcHVibGljS2V5OiB7XG4gICAgICBhbGxvd0NyZWRlbnRpYWxzOiBbeyB0eXBlOiAncHVibGljLWtleScsIGlkOiBjcmVkZW50aWFsSWRCdWZmZXIgfV0sXG4gICAgfSBhcyBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMsXG4gICAgZXZhbEJ5Q3JlZGVudGlhbDogeyBbZGV2aWNlLmNyZWRlbnRpYWxJZF06IHByZlNhbHQgfSxcbiAgfSk7XG5cbiAgaWYgKCFhdXRoUmVzdWx0LnByZlJlc3VsdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUFJGIGFzc2VydGlvbiBkaWQgbm90IHJldHVybiBhIHJlc3VsdC4nKTtcbiAgfVxuXG4gIGNvbnN0IHByZlBhc3N3b3JkID0gZGVyaXZlUGFzc3dvcmQoYXV0aFJlc3VsdC5wcmZSZXN1bHQpO1xuICBjb25zdCBlbmNyeXB0ZWRQcnYgPSBhd2FpdCBiaXRnby5lbmNyeXB0QXN5bmMoeyBwYXNzd29yZDogcHJmUGFzc3dvcmQsIGlucHV0OiBwcml2YXRlS2V5LCBlbmNyeXB0aW9uVmVyc2lvbiB9KTtcblxuICBjb25zdCB1cGRhdGVkS2V5Y2hhaW4gPSBhd2FpdCBiaXRnb1xuICAgIC5wdXQoYml0Z28udXJsKGAvJHtjb2lufS9rZXkvJHtrZXljaGFpbklkfWAsIDIpKVxuICAgIC5zZW5kKHtcbiAgICAgIHdlYmF1dGhuSW5mbzoge1xuICAgICAgICBwcmZTYWx0LFxuICAgICAgICBvdHBEZXZpY2VJZDogZGV2aWNlLmlkLFxuICAgICAgICBlbmNyeXB0ZWRQcnYsXG4gICAgICB9LFxuICAgIH0pXG4gICAgLnJlc3VsdCgpO1xuXG4gIHJldHVybiB1cGRhdGVkS2V5Y2hhaW4gYXMgS2V5Y2hhaW47XG59XG4iXX0=
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Base64url encoding helpers.
3
+ *
4
+ * Base64url uses the same alphabet as standard base64 except `+` becomes `-`,
5
+ * `/` becomes `_`, and padding (`=`) is stripped. Browser WebAuthn APIs and
6
+ * the BitGo server both use base64url for credential IDs and PRF salts, so we
7
+ * normalise to it everywhere on the client to avoid mismatches caused by
8
+ * mixing encodings.
9
+ */
10
+ /** Converts a standard base64 string (or already-base64url string) to base64url. */
11
+ export declare function toBase64Url(s: string): string;
12
+ /** Encodes an ArrayBuffer or Buffer as a base64url string (no padding). */
13
+ export declare function bufferToBase64Url(buffer: ArrayBuffer | Buffer): string;
14
+ /** Decodes a base64url string into a Buffer. */
15
+ export declare function base64UrlToBuffer(s: string): Buffer;
16
+ //# sourceMappingURL=base64url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64url.d.ts","sourceRoot":"","sources":["../../src/base64url.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,oFAAoF;AACpF,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,CAEtE;AAED,gDAAgD;AAChD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnD"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ /**
3
+ * Base64url encoding helpers.
4
+ *
5
+ * Base64url uses the same alphabet as standard base64 except `+` becomes `-`,
6
+ * `/` becomes `_`, and padding (`=`) is stripped. Browser WebAuthn APIs and
7
+ * the BitGo server both use base64url for credential IDs and PRF salts, so we
8
+ * normalise to it everywhere on the client to avoid mismatches caused by
9
+ * mixing encodings.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.toBase64Url = toBase64Url;
13
+ exports.bufferToBase64Url = bufferToBase64Url;
14
+ exports.base64UrlToBuffer = base64UrlToBuffer;
15
+ /** Converts a standard base64 string (or already-base64url string) to base64url. */
16
+ function toBase64Url(s) {
17
+ return s.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
18
+ }
19
+ /** Encodes an ArrayBuffer or Buffer as a base64url string (no padding). */
20
+ function bufferToBase64Url(buffer) {
21
+ return toBase64Url(Buffer.from(buffer).toString('base64'));
22
+ }
23
+ /** Decodes a base64url string into a Buffer. */
24
+ function base64UrlToBuffer(s) {
25
+ return Buffer.from(s.replace(/-/g, '+').replace(/_/g, '/'), 'base64');
26
+ }
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZTY0dXJsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jhc2U2NHVybC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7O0dBUUc7O0FBR0gsa0NBRUM7QUFHRCw4Q0FFQztBQUdELDhDQUVDO0FBYkQsb0ZBQW9GO0FBQ3BGLFNBQWdCLFdBQVcsQ0FBQyxDQUFTO0lBQ25DLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFFRCwyRUFBMkU7QUFDM0UsU0FBZ0IsaUJBQWlCLENBQUMsTUFBNEI7SUFDNUQsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFxQixDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDNUUsQ0FBQztBQUVELGdEQUFnRDtBQUNoRCxTQUFnQixpQkFBaUIsQ0FBQyxDQUFTO0lBQ3pDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3hFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJhc2U2NHVybCBlbmNvZGluZyBoZWxwZXJzLlxuICpcbiAqIEJhc2U2NHVybCB1c2VzIHRoZSBzYW1lIGFscGhhYmV0IGFzIHN0YW5kYXJkIGJhc2U2NCBleGNlcHQgYCtgIGJlY29tZXMgYC1gLFxuICogYC9gIGJlY29tZXMgYF9gLCBhbmQgcGFkZGluZyAoYD1gKSBpcyBzdHJpcHBlZC4gQnJvd3NlciBXZWJBdXRobiBBUElzIGFuZFxuICogdGhlIEJpdEdvIHNlcnZlciBib3RoIHVzZSBiYXNlNjR1cmwgZm9yIGNyZWRlbnRpYWwgSURzIGFuZCBQUkYgc2FsdHMsIHNvIHdlXG4gKiBub3JtYWxpc2UgdG8gaXQgZXZlcnl3aGVyZSBvbiB0aGUgY2xpZW50IHRvIGF2b2lkIG1pc21hdGNoZXMgY2F1c2VkIGJ5XG4gKiBtaXhpbmcgZW5jb2RpbmdzLlxuICovXG5cbi8qKiBDb252ZXJ0cyBhIHN0YW5kYXJkIGJhc2U2NCBzdHJpbmcgKG9yIGFscmVhZHktYmFzZTY0dXJsIHN0cmluZykgdG8gYmFzZTY0dXJsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQmFzZTY0VXJsKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzLnJlcGxhY2UoL1xcKy9nLCAnLScpLnJlcGxhY2UoL1xcLy9nLCAnXycpLnJlcGxhY2UoLz0rJC8sICcnKTtcbn1cblxuLyoqIEVuY29kZXMgYW4gQXJyYXlCdWZmZXIgb3IgQnVmZmVyIGFzIGEgYmFzZTY0dXJsIHN0cmluZyAobm8gcGFkZGluZykuICovXG5leHBvcnQgZnVuY3Rpb24gYnVmZmVyVG9CYXNlNjRVcmwoYnVmZmVyOiBBcnJheUJ1ZmZlciB8IEJ1ZmZlcik6IHN0cmluZyB7XG4gIHJldHVybiB0b0Jhc2U2NFVybChCdWZmZXIuZnJvbShidWZmZXIgYXMgQXJyYXlCdWZmZXIpLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG59XG5cbi8qKiBEZWNvZGVzIGEgYmFzZTY0dXJsIHN0cmluZyBpbnRvIGEgQnVmZmVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJhc2U2NFVybFRvQnVmZmVyKHM6IHN0cmluZyk6IEJ1ZmZlciB7XG4gIHJldHVybiBCdWZmZXIuZnJvbShzLnJlcGxhY2UoLy0vZywgJysnKS5yZXBsYWNlKC9fL2csICcvJyksICdiYXNlNjQnKTtcbn1cbiJdfQ==
@@ -4,9 +4,15 @@
4
4
  * Computes HMAC-SHA256(key=prfSalt_base64url_decoded, data=enterpriseId_utf8).
5
5
  * The baseSalt must always come from the server — never generate it client-side.
6
6
  *
7
+ * Returns base64url so the same encoding is used everywhere the salt is handled
8
+ * (server storage, PRF eval input, prfHelpers lookup). Mixing encodings
9
+ * (e.g. hex on the client, base64url on the server) caused the PRF to receive
10
+ * different bytes during attach vs derive in browser environments where
11
+ * `Buffer.toString('hex')` is unreliable.
12
+ *
7
13
  * @param baseSalt - Server-provided base64url-encoded PRF salt
8
14
  * @param enterpriseId - Enterprise identifier
9
- * @returns Hex-encoded HMAC-SHA256 digest
15
+ * @returns Base64url-encoded HMAC-SHA256 digest (no padding)
10
16
  */
11
17
  export declare function deriveEnterpriseSalt(baseSalt: string, enterpriseId: string): string;
12
18
  //# sourceMappingURL=deriveEnterpriseSalt.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"deriveEnterpriseSalt.d.ts","sourceRoot":"","sources":["../../src/deriveEnterpriseSalt.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAGnF"}
1
+ {"version":3,"file":"deriveEnterpriseSalt.d.ts","sourceRoot":"","sources":["../../src/deriveEnterpriseSalt.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAGnF"}
@@ -2,18 +2,25 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.deriveEnterpriseSalt = deriveEnterpriseSalt;
4
4
  const crypto_1 = require("crypto");
5
+ const base64url_1 = require("./base64url");
5
6
  /**
6
7
  * Derives an enterprise-scoped PRF salt to prevent cross-enterprise key reuse.
7
8
  *
8
9
  * Computes HMAC-SHA256(key=prfSalt_base64url_decoded, data=enterpriseId_utf8).
9
10
  * The baseSalt must always come from the server — never generate it client-side.
10
11
  *
12
+ * Returns base64url so the same encoding is used everywhere the salt is handled
13
+ * (server storage, PRF eval input, prfHelpers lookup). Mixing encodings
14
+ * (e.g. hex on the client, base64url on the server) caused the PRF to receive
15
+ * different bytes during attach vs derive in browser environments where
16
+ * `Buffer.toString('hex')` is unreliable.
17
+ *
11
18
  * @param baseSalt - Server-provided base64url-encoded PRF salt
12
19
  * @param enterpriseId - Enterprise identifier
13
- * @returns Hex-encoded HMAC-SHA256 digest
20
+ * @returns Base64url-encoded HMAC-SHA256 digest (no padding)
14
21
  */
15
22
  function deriveEnterpriseSalt(baseSalt, enterpriseId) {
16
- const keyBytes = Buffer.from(baseSalt.replace(/-/g, '+').replace(/_/g, '/'), 'base64');
17
- return (0, crypto_1.createHmac)('sha256', keyBytes).update(enterpriseId).digest('hex');
23
+ const keyBytes = (0, base64url_1.base64UrlToBuffer)(baseSalt);
24
+ return (0, base64url_1.toBase64Url)((0, crypto_1.createHmac)('sha256', keyBytes).update(enterpriseId).digest('base64'));
18
25
  }
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZlRW50ZXJwcmlzZVNhbHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGVyaXZlRW50ZXJwcmlzZVNhbHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFZQSxvREFHQztBQWZELG1DQUFvQztBQUVwQzs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxRQUFnQixFQUFFLFlBQW9CO0lBQ3pFLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN2RixPQUFPLElBQUEsbUJBQVUsRUFBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSG1hYyB9IGZyb20gJ2NyeXB0byc7XG5cbi8qKlxuICogRGVyaXZlcyBhbiBlbnRlcnByaXNlLXNjb3BlZCBQUkYgc2FsdCB0byBwcmV2ZW50IGNyb3NzLWVudGVycHJpc2Uga2V5IHJldXNlLlxuICpcbiAqIENvbXB1dGVzIEhNQUMtU0hBMjU2KGtleT1wcmZTYWx0X2Jhc2U2NHVybF9kZWNvZGVkLCBkYXRhPWVudGVycHJpc2VJZF91dGY4KS5cbiAqIFRoZSBiYXNlU2FsdCBtdXN0IGFsd2F5cyBjb21lIGZyb20gdGhlIHNlcnZlciDigJQgbmV2ZXIgZ2VuZXJhdGUgaXQgY2xpZW50LXNpZGUuXG4gKlxuICogQHBhcmFtIGJhc2VTYWx0IC0gU2VydmVyLXByb3ZpZGVkIGJhc2U2NHVybC1lbmNvZGVkIFBSRiBzYWx0XG4gKiBAcGFyYW0gZW50ZXJwcmlzZUlkIC0gRW50ZXJwcmlzZSBpZGVudGlmaWVyXG4gKiBAcmV0dXJucyBIZXgtZW5jb2RlZCBITUFDLVNIQTI1NiBkaWdlc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZUVudGVycHJpc2VTYWx0KGJhc2VTYWx0OiBzdHJpbmcsIGVudGVycHJpc2VJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qga2V5Qnl0ZXMgPSBCdWZmZXIuZnJvbShiYXNlU2FsdC5yZXBsYWNlKC8tL2csICcrJykucmVwbGFjZSgvXy9nLCAnLycpLCAnYmFzZTY0Jyk7XG4gIHJldHVybiBjcmVhdGVIbWFjKCdzaGEyNTYnLCBrZXlCeXRlcykudXBkYXRlKGVudGVycHJpc2VJZCkuZGlnZXN0KCdoZXgnKTtcbn1cbiJdfQ==
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZlRW50ZXJwcmlzZVNhbHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGVyaXZlRW50ZXJwcmlzZVNhbHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFtQkEsb0RBR0M7QUF0QkQsbUNBQW9DO0FBQ3BDLDJDQUE2RDtBQUU3RDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxRQUFnQixFQUFFLFlBQW9CO0lBQ3pFLE1BQU0sUUFBUSxHQUFHLElBQUEsNkJBQWlCLEVBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0MsT0FBTyxJQUFBLHVCQUFXLEVBQUMsSUFBQSxtQkFBVSxFQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDM0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUhtYWMgfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgYmFzZTY0VXJsVG9CdWZmZXIsIHRvQmFzZTY0VXJsIH0gZnJvbSAnLi9iYXNlNjR1cmwnO1xuXG4vKipcbiAqIERlcml2ZXMgYW4gZW50ZXJwcmlzZS1zY29wZWQgUFJGIHNhbHQgdG8gcHJldmVudCBjcm9zcy1lbnRlcnByaXNlIGtleSByZXVzZS5cbiAqXG4gKiBDb21wdXRlcyBITUFDLVNIQTI1NihrZXk9cHJmU2FsdF9iYXNlNjR1cmxfZGVjb2RlZCwgZGF0YT1lbnRlcnByaXNlSWRfdXRmOCkuXG4gKiBUaGUgYmFzZVNhbHQgbXVzdCBhbHdheXMgY29tZSBmcm9tIHRoZSBzZXJ2ZXIg4oCUIG5ldmVyIGdlbmVyYXRlIGl0IGNsaWVudC1zaWRlLlxuICpcbiAqIFJldHVybnMgYmFzZTY0dXJsIHNvIHRoZSBzYW1lIGVuY29kaW5nIGlzIHVzZWQgZXZlcnl3aGVyZSB0aGUgc2FsdCBpcyBoYW5kbGVkXG4gKiAoc2VydmVyIHN0b3JhZ2UsIFBSRiBldmFsIGlucHV0LCBwcmZIZWxwZXJzIGxvb2t1cCkuIE1peGluZyBlbmNvZGluZ3NcbiAqIChlLmcuIGhleCBvbiB0aGUgY2xpZW50LCBiYXNlNjR1cmwgb24gdGhlIHNlcnZlcikgY2F1c2VkIHRoZSBQUkYgdG8gcmVjZWl2ZVxuICogZGlmZmVyZW50IGJ5dGVzIGR1cmluZyBhdHRhY2ggdnMgZGVyaXZlIGluIGJyb3dzZXIgZW52aXJvbm1lbnRzIHdoZXJlXG4gKiBgQnVmZmVyLnRvU3RyaW5nKCdoZXgnKWAgaXMgdW5yZWxpYWJsZS5cbiAqXG4gKiBAcGFyYW0gYmFzZVNhbHQgLSBTZXJ2ZXItcHJvdmlkZWQgYmFzZTY0dXJsLWVuY29kZWQgUFJGIHNhbHRcbiAqIEBwYXJhbSBlbnRlcnByaXNlSWQgLSBFbnRlcnByaXNlIGlkZW50aWZpZXJcbiAqIEByZXR1cm5zIEJhc2U2NHVybC1lbmNvZGVkIEhNQUMtU0hBMjU2IGRpZ2VzdCAobm8gcGFkZGluZylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZUVudGVycHJpc2VTYWx0KGJhc2VTYWx0OiBzdHJpbmcsIGVudGVycHJpc2VJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qga2V5Qnl0ZXMgPSBiYXNlNjRVcmxUb0J1ZmZlcihiYXNlU2FsdCk7XG4gIHJldHVybiB0b0Jhc2U2NFVybChjcmVhdGVIbWFjKCdzaGEyNTYnLCBrZXlCeXRlcykudXBkYXRlKGVudGVycHJpc2VJZCkuZGlnZXN0KCdiYXNlNjQnKSk7XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"derivePasskeyPrfKey.d.ts","sourceRoot":"","sources":["../../src/derivePasskeyPrfKey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAG/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAMxD;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE;IAChD,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,gBAAgB,CAAC;CAC5B,GAAG,OAAO,CAAC,MAAM,CAAC,CAwClB"}
1
+ {"version":3,"file":"derivePasskeyPrfKey.d.ts","sourceRoot":"","sources":["../../src/derivePasskeyPrfKey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAoD,MAAM,sBAAsB,CAAC;AAGjH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AA8BxD;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE;IAChD,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,gBAAgB,CAAC;CAC5B,GAAG,OAAO,CAAC,MAAM,CAAC,CA4ClB"}
@@ -3,6 +3,27 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.derivePasskeyPrfKey = derivePasskeyPrfKey;
4
4
  const prfHelpers_1 = require("./prfHelpers");
5
5
  const derivePassword_1 = require("./derivePassword");
6
+ function webauthnDevicesFromKeychain(keychain) {
7
+ const lower = keychain.webauthnDevices;
8
+ if (lower !== undefined && lower.length > 0) {
9
+ return lower;
10
+ }
11
+ const upper = keychain.webAuthnDevices;
12
+ if (upper !== undefined && upper.length > 0) {
13
+ return upper;
14
+ }
15
+ return undefined;
16
+ }
17
+ function challengeFromAuthResponse(body) {
18
+ if (typeof body !== 'object' || body === null) {
19
+ throw new Error('Invalid assertion challenge response');
20
+ }
21
+ const rec = body;
22
+ if (typeof rec.challenge !== 'string') {
23
+ throw new Error('Invalid assertion challenge response');
24
+ }
25
+ return rec.challenge;
26
+ }
6
27
  /**
7
28
  * Derives a wallet passphrase from a passkey PRF output.
8
29
  *
@@ -12,34 +33,36 @@ const derivePassword_1 = require("./derivePassword");
12
33
  */
13
34
  async function derivePasskeyPrfKey(params) {
14
35
  const { bitgo, wallet, provider } = params;
15
- // Fetch the wallet's user keychain to get webauthnDevices
16
36
  const keychain = await wallet.getEncryptedUserKeychain();
17
- const devices = keychain.webauthnDevices;
37
+ const devices = webauthnDevicesFromKeychain(keychain);
18
38
  if (!devices || devices.length === 0) {
19
39
  throw new Error('No passkey devices available');
20
40
  }
21
- // Build PRF eval map from devices
22
41
  const { evalByCredential } = (0, prfHelpers_1.buildEvalByCredential)(devices);
23
42
  if (Object.keys(evalByCredential).length === 0) {
24
43
  throw new Error('No passkey devices available with a valid PRF salt');
25
44
  }
26
- // Fetch a server-issued assertion challenge
27
- const { challenge } = (await bitgo
28
- .get(bitgo.url('/user/otp/webauthn/assertion', 2))
29
- .result());
30
- // Trigger WebAuthn assertion with PRF evaluation via the provider (navigator layer)
45
+ const challenge = challengeFromAuthResponse(await bitgo.get(bitgo.url('/user/otp/webauthn/auth', 2)).result());
46
+ const allowCredentials = Object.keys(evalByCredential).map((credId) => {
47
+ const nodeBuf = Buffer.from(credId.replace(/-/g, '+').replace(/_/g, '/'), 'base64');
48
+ const id = nodeBuf.buffer.slice(nodeBuf.byteOffset, nodeBuf.byteOffset + nodeBuf.byteLength);
49
+ return {
50
+ type: 'public-key',
51
+ id,
52
+ };
53
+ });
54
+ const publicKey = {
55
+ challenge: new Uint8Array(Buffer.from(challenge, 'base64')),
56
+ allowCredentials,
57
+ };
31
58
  const result = await provider.get({
32
- publicKey: {
33
- challenge: Buffer.from(challenge, 'base64'),
34
- },
59
+ publicKey,
35
60
  evalByCredential,
36
61
  });
37
- // Verify the credential matches a known device
38
62
  (0, prfHelpers_1.matchDeviceByCredentialId)(devices, result.credentialId);
39
- // Derive and return hex-encoded wallet passphrase
40
63
  if (!result.prfResult) {
41
64
  throw new Error('PRF output was not returned by the authenticator');
42
65
  }
43
66
  return (0, derivePassword_1.derivePassword)(result.prfResult);
44
67
  }
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZlUGFzc2tleVByZktleS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZXJpdmVQYXNza2V5UHJmS2V5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBZ0JBLGtEQTRDQztBQTNERCw2Q0FBZ0Y7QUFDaEYscURBQWtEO0FBT2xEOzs7Ozs7R0FNRztBQUNJLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxNQUl6QztJQUNDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUUzQywwREFBMEQ7SUFDMUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUN6RCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO0lBRXpDLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNyQyxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxJQUFBLGtDQUFxQixFQUFDLE9BQXNELENBQUMsQ0FBQztJQUUzRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDL0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCw0Q0FBNEM7SUFDNUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsTUFBTSxLQUFLO1NBQy9CLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLDhCQUE4QixFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2pELE1BQU0sRUFBRSxDQUErQixDQUFDO0lBRTNDLG9GQUFvRjtJQUNwRixNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFDaEMsU0FBUyxFQUFFO1lBQ1QsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQztTQUNQO1FBQ3RDLGdCQUFnQjtLQUNqQixDQUFDLENBQUM7SUFFSCwrQ0FBK0M7SUFDL0MsSUFBQSxzQ0FBeUIsRUFBQyxPQUEwRCxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUUzRyxrREFBa0Q7SUFDbEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELE9BQU8sSUFBQSwrQkFBYyxFQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBCaXRHb0Jhc2UsIElXYWxsZXQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBidWlsZEV2YWxCeUNyZWRlbnRpYWwsIG1hdGNoRGV2aWNlQnlDcmVkZW50aWFsSWQgfSBmcm9tICcuL3ByZkhlbHBlcnMnO1xuaW1wb3J0IHsgZGVyaXZlUGFzc3dvcmQgfSBmcm9tICcuL2Rlcml2ZVBhc3N3b3JkJztcbmltcG9ydCB0eXBlIHsgV2ViQXV0aG5Qcm92aWRlciB9IGZyb20gJy4vd2ViQXV0aG5UeXBlcyc7XG5cbmludGVyZmFjZSBBc3NlcnRpb25DaGFsbGVuZ2VSZXNwb25zZSB7XG4gIGNoYWxsZW5nZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIERlcml2ZXMgYSB3YWxsZXQgcGFzc3BocmFzZSBmcm9tIGEgcGFzc2tleSBQUkYgb3V0cHV0LlxuICpcbiAqIEZldGNoZXMgdGhlIHdhbGxldCdzIHVzZXIga2V5Y2hhaW4sIHRyaWdnZXJzIGEgV2ViQXV0aG4gYXNzZXJ0aW9uIHdpdGggUFJGXG4gKiBldmFsdWF0aW9uLCBhbmQgcmV0dXJucyBhIGhleC1lbmNvZGVkIHBhc3NwaHJhc2Ugc3VpdGFibGUgZm9yIHVzZSBhc1xuICogd2FsbGV0UGFzc3BocmFzZSBpbiBzaWduaW5nIGNhbGxzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVyaXZlUGFzc2tleVByZktleShwYXJhbXM6IHtcbiAgYml0Z286IEJpdEdvQmFzZTtcbiAgd2FsbGV0OiBJV2FsbGV0O1xuICBwcm92aWRlcjogV2ViQXV0aG5Qcm92aWRlcjtcbn0pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7IGJpdGdvLCB3YWxsZXQsIHByb3ZpZGVyIH0gPSBwYXJhbXM7XG5cbiAgLy8gRmV0Y2ggdGhlIHdhbGxldCdzIHVzZXIga2V5Y2hhaW4gdG8gZ2V0IHdlYmF1dGhuRGV2aWNlc1xuICBjb25zdCBrZXljaGFpbiA9IGF3YWl0IHdhbGxldC5nZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4oKTtcbiAgY29uc3QgZGV2aWNlcyA9IGtleWNoYWluLndlYmF1dGhuRGV2aWNlcztcblxuICBpZiAoIWRldmljZXMgfHwgZGV2aWNlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHBhc3NrZXkgZGV2aWNlcyBhdmFpbGFibGUnKTtcbiAgfVxuXG4gIC8vIEJ1aWxkIFBSRiBldmFsIG1hcCBmcm9tIGRldmljZXNcbiAgY29uc3QgeyBldmFsQnlDcmVkZW50aWFsIH0gPSBidWlsZEV2YWxCeUNyZWRlbnRpYWwoZGV2aWNlcyBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBidWlsZEV2YWxCeUNyZWRlbnRpYWw+WzBdKTtcblxuICBpZiAoT2JqZWN0LmtleXMoZXZhbEJ5Q3JlZGVudGlhbCkubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBwYXNza2V5IGRldmljZXMgYXZhaWxhYmxlIHdpdGggYSB2YWxpZCBQUkYgc2FsdCcpO1xuICB9XG5cbiAgLy8gRmV0Y2ggYSBzZXJ2ZXItaXNzdWVkIGFzc2VydGlvbiBjaGFsbGVuZ2VcbiAgY29uc3QgeyBjaGFsbGVuZ2UgfSA9IChhd2FpdCBiaXRnb1xuICAgIC5nZXQoYml0Z28udXJsKCcvdXNlci9vdHAvd2ViYXV0aG4vYXNzZXJ0aW9uJywgMikpXG4gICAgLnJlc3VsdCgpKSBhcyBBc3NlcnRpb25DaGFsbGVuZ2VSZXNwb25zZTtcblxuICAvLyBUcmlnZ2VyIFdlYkF1dGhuIGFzc2VydGlvbiB3aXRoIFBSRiBldmFsdWF0aW9uIHZpYSB0aGUgcHJvdmlkZXIgKG5hdmlnYXRvciBsYXllcilcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuZ2V0KHtcbiAgICBwdWJsaWNLZXk6IHtcbiAgICAgIGNoYWxsZW5nZTogQnVmZmVyLmZyb20oY2hhbGxlbmdlLCAnYmFzZTY0JyksXG4gICAgfSBhcyBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMsXG4gICAgZXZhbEJ5Q3JlZGVudGlhbCxcbiAgfSk7XG5cbiAgLy8gVmVyaWZ5IHRoZSBjcmVkZW50aWFsIG1hdGNoZXMgYSBrbm93biBkZXZpY2VcbiAgbWF0Y2hEZXZpY2VCeUNyZWRlbnRpYWxJZChkZXZpY2VzIGFzIFBhcmFtZXRlcnM8dHlwZW9mIG1hdGNoRGV2aWNlQnlDcmVkZW50aWFsSWQ+WzBdLCByZXN1bHQuY3JlZGVudGlhbElkKTtcblxuICAvLyBEZXJpdmUgYW5kIHJldHVybiBoZXgtZW5jb2RlZCB3YWxsZXQgcGFzc3BocmFzZVxuICBpZiAoIXJlc3VsdC5wcmZSZXN1bHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BSRiBvdXRwdXQgd2FzIG5vdCByZXR1cm5lZCBieSB0aGUgYXV0aGVudGljYXRvcicpO1xuICB9XG5cbiAgcmV0dXJuIGRlcml2ZVBhc3N3b3JkKHJlc3VsdC5wcmZSZXN1bHQpO1xufVxuIl19
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZlUGFzc2tleVByZktleS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZXJpdmVQYXNza2V5UHJmS2V5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBd0NBLGtEQWdEQztBQXZGRCw2Q0FBZ0Y7QUFDaEYscURBQWtEO0FBUWxELFNBQVMsMkJBQTJCLENBQUMsUUFBOEI7SUFDakUsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztJQUN2QyxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1QyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO0lBQ3ZDLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzVDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxTQUFTLHlCQUF5QixDQUFDLElBQWE7SUFDOUMsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQzlDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBK0IsQ0FBQztJQUM1QyxJQUFJLE9BQU8sR0FBRyxDQUFDLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDLFNBQVMsQ0FBQztBQUN2QixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0ksS0FBSyxVQUFVLG1CQUFtQixDQUFDLE1BSXpDO0lBQ0MsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBRTNDLE1BQU0sUUFBUSxHQUF5QixNQUFNLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQy9FLE1BQU0sT0FBTyxHQUFHLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXRELElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNyQyxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLElBQUEsa0NBQXFCLEVBQUMsT0FBTyxDQUFDLENBQUM7SUFFNUQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQy9DLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcseUJBQXlCLENBQUMsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBRS9HLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQ3BFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNwRixNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzdGLE9BQU87WUFDTCxJQUFJLEVBQUUsWUFBcUI7WUFDM0IsRUFBRTtTQUNILENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sU0FBUyxHQUFzQztRQUNuRCxTQUFTLEVBQUUsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDM0QsZ0JBQWdCO0tBQ2pCLENBQUM7SUFFRixNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFDaEMsU0FBUztRQUNULGdCQUFnQjtLQUNqQixDQUFDLENBQUM7SUFFSCxJQUFBLHNDQUF5QixFQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFeEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELE9BQU8sSUFBQSwrQkFBYyxFQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBCaXRHb0Jhc2UsIElXYWxsZXQsIEtleWNoYWluV2ViYXV0aG5EZXZpY2UsIEtleWNoYWluV2l0aEVuY3J5cHRlZFBydiB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGJ1aWxkRXZhbEJ5Q3JlZGVudGlhbCwgbWF0Y2hEZXZpY2VCeUNyZWRlbnRpYWxJZCB9IGZyb20gJy4vcHJmSGVscGVycyc7XG5pbXBvcnQgeyBkZXJpdmVQYXNzd29yZCB9IGZyb20gJy4vZGVyaXZlUGFzc3dvcmQnO1xuaW1wb3J0IHR5cGUgeyBXZWJBdXRoblByb3ZpZGVyIH0gZnJvbSAnLi93ZWJBdXRoblR5cGVzJztcblxuLyoqIEFQSSBwYXlsb2FkcyBtYXkgdXNlIGVpdGhlciBzcGVsbGluZyBmb3IgdGhlIHdlYmF1dGhuIGRldmljZSBsaXN0LiAqL1xudHlwZSBVc2VyS2V5Y2hhaW5SZXNwb25zZSA9IEtleWNoYWluV2l0aEVuY3J5cHRlZFBydiAmIHtcbiAgd2ViQXV0aG5EZXZpY2VzPzogS2V5Y2hhaW5XZWJhdXRobkRldmljZVtdO1xufTtcblxuZnVuY3Rpb24gd2ViYXV0aG5EZXZpY2VzRnJvbUtleWNoYWluKGtleWNoYWluOiBVc2VyS2V5Y2hhaW5SZXNwb25zZSk6IEtleWNoYWluV2ViYXV0aG5EZXZpY2VbXSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGxvd2VyID0ga2V5Y2hhaW4ud2ViYXV0aG5EZXZpY2VzO1xuICBpZiAobG93ZXIgIT09IHVuZGVmaW5lZCAmJiBsb3dlci5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGxvd2VyO1xuICB9XG4gIGNvbnN0IHVwcGVyID0ga2V5Y2hhaW4ud2ViQXV0aG5EZXZpY2VzO1xuICBpZiAodXBwZXIgIT09IHVuZGVmaW5lZCAmJiB1cHBlci5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHVwcGVyO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGNoYWxsZW5nZUZyb21BdXRoUmVzcG9uc2UoYm9keTogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgYm9keSAhPT0gJ29iamVjdCcgfHwgYm9keSA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhc3NlcnRpb24gY2hhbGxlbmdlIHJlc3BvbnNlJyk7XG4gIH1cbiAgY29uc3QgcmVjID0gYm9keSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaWYgKHR5cGVvZiByZWMuY2hhbGxlbmdlICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhc3NlcnRpb24gY2hhbGxlbmdlIHJlc3BvbnNlJyk7XG4gIH1cbiAgcmV0dXJuIHJlYy5jaGFsbGVuZ2U7XG59XG5cbi8qKlxuICogRGVyaXZlcyBhIHdhbGxldCBwYXNzcGhyYXNlIGZyb20gYSBwYXNza2V5IFBSRiBvdXRwdXQuXG4gKlxuICogRmV0Y2hlcyB0aGUgd2FsbGV0J3MgdXNlciBrZXljaGFpbiwgdHJpZ2dlcnMgYSBXZWJBdXRobiBhc3NlcnRpb24gd2l0aCBQUkZcbiAqIGV2YWx1YXRpb24sIGFuZCByZXR1cm5zIGEgaGV4LWVuY29kZWQgcGFzc3BocmFzZSBzdWl0YWJsZSBmb3IgdXNlIGFzXG4gKiB3YWxsZXRQYXNzcGhyYXNlIGluIHNpZ25pbmcgY2FsbHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZXJpdmVQYXNza2V5UHJmS2V5KHBhcmFtczoge1xuICBiaXRnbzogQml0R29CYXNlO1xuICB3YWxsZXQ6IElXYWxsZXQ7XG4gIHByb3ZpZGVyOiBXZWJBdXRoblByb3ZpZGVyO1xufSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHsgYml0Z28sIHdhbGxldCwgcHJvdmlkZXIgfSA9IHBhcmFtcztcblxuICBjb25zdCBrZXljaGFpbjogVXNlcktleWNoYWluUmVzcG9uc2UgPSBhd2FpdCB3YWxsZXQuZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluKCk7XG4gIGNvbnN0IGRldmljZXMgPSB3ZWJhdXRobkRldmljZXNGcm9tS2V5Y2hhaW4oa2V5Y2hhaW4pO1xuXG4gIGlmICghZGV2aWNlcyB8fCBkZXZpY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gcGFzc2tleSBkZXZpY2VzIGF2YWlsYWJsZScpO1xuICB9XG5cbiAgY29uc3QgeyBldmFsQnlDcmVkZW50aWFsIH0gPSBidWlsZEV2YWxCeUNyZWRlbnRpYWwoZGV2aWNlcyk7XG5cbiAgaWYgKE9iamVjdC5rZXlzKGV2YWxCeUNyZWRlbnRpYWwpLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gcGFzc2tleSBkZXZpY2VzIGF2YWlsYWJsZSB3aXRoIGEgdmFsaWQgUFJGIHNhbHQnKTtcbiAgfVxuXG4gIGNvbnN0IGNoYWxsZW5nZSA9IGNoYWxsZW5nZUZyb21BdXRoUmVzcG9uc2UoYXdhaXQgYml0Z28uZ2V0KGJpdGdvLnVybCgnL3VzZXIvb3RwL3dlYmF1dGhuL2F1dGgnLCAyKSkucmVzdWx0KCkpO1xuXG4gIGNvbnN0IGFsbG93Q3JlZGVudGlhbHMgPSBPYmplY3Qua2V5cyhldmFsQnlDcmVkZW50aWFsKS5tYXAoKGNyZWRJZCkgPT4ge1xuICAgIGNvbnN0IG5vZGVCdWYgPSBCdWZmZXIuZnJvbShjcmVkSWQucmVwbGFjZSgvLS9nLCAnKycpLnJlcGxhY2UoL18vZywgJy8nKSwgJ2Jhc2U2NCcpO1xuICAgIGNvbnN0IGlkID0gbm9kZUJ1Zi5idWZmZXIuc2xpY2Uobm9kZUJ1Zi5ieXRlT2Zmc2V0LCBub2RlQnVmLmJ5dGVPZmZzZXQgKyBub2RlQnVmLmJ5dGVMZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAncHVibGljLWtleScgYXMgY29uc3QsXG4gICAgICBpZCxcbiAgICB9O1xuICB9KTtcblxuICBjb25zdCBwdWJsaWNLZXk6IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICBjaGFsbGVuZ2U6IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKGNoYWxsZW5nZSwgJ2Jhc2U2NCcpKSxcbiAgICBhbGxvd0NyZWRlbnRpYWxzLFxuICB9O1xuXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLmdldCh7XG4gICAgcHVibGljS2V5LFxuICAgIGV2YWxCeUNyZWRlbnRpYWwsXG4gIH0pO1xuXG4gIG1hdGNoRGV2aWNlQnlDcmVkZW50aWFsSWQoZGV2aWNlcywgcmVzdWx0LmNyZWRlbnRpYWxJZCk7XG5cbiAgaWYgKCFyZXN1bHQucHJmUmVzdWx0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQUkYgb3V0cHV0IHdhcyBub3QgcmV0dXJuZWQgYnkgdGhlIGF1dGhlbnRpY2F0b3InKTtcbiAgfVxuXG4gIHJldHVybiBkZXJpdmVQYXNzd29yZChyZXN1bHQucHJmUmVzdWx0KTtcbn1cbiJdfQ==
@@ -5,4 +5,6 @@ export { buildEvalByCredential, matchDeviceByCredentialId } from './prfHelpers';
5
5
  export { removePasskeyFromAccount } from './removePasskeyFromAccount';
6
6
  export type { WebAuthnOtpDevice, PasskeyAuthResult, PasskeyGetOptions, WebAuthnProvider } from './webAuthnTypes';
7
7
  export { removePasskeyFromWallet } from './removePasskeyFromWallet';
8
+ export { attachPasskeyToWallet } from './attachPasskeyToWallet';
9
+ export { derivePasskeyPrfKey } from './derivePasskeyPrfKey';
8
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACjH,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACjH,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
package/dist/src/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.removePasskeyFromWallet = exports.removePasskeyFromAccount = exports.matchDeviceByCredentialId = exports.buildEvalByCredential = exports.deriveEnterpriseSalt = exports.registerPasskey = exports.derivePassword = void 0;
3
+ exports.derivePasskeyPrfKey = exports.attachPasskeyToWallet = exports.removePasskeyFromWallet = exports.removePasskeyFromAccount = exports.matchDeviceByCredentialId = exports.buildEvalByCredential = exports.deriveEnterpriseSalt = exports.registerPasskey = exports.derivePassword = void 0;
4
4
  var derivePassword_1 = require("./derivePassword");
5
5
  Object.defineProperty(exports, "derivePassword", { enumerable: true, get: function () { return derivePassword_1.derivePassword; } });
6
6
  var registerPasskey_1 = require("./registerPasskey");
@@ -14,4 +14,8 @@ var removePasskeyFromAccount_1 = require("./removePasskeyFromAccount");
14
14
  Object.defineProperty(exports, "removePasskeyFromAccount", { enumerable: true, get: function () { return removePasskeyFromAccount_1.removePasskeyFromAccount; } });
15
15
  var removePasskeyFromWallet_1 = require("./removePasskeyFromWallet");
16
16
  Object.defineProperty(exports, "removePasskeyFromWallet", { enumerable: true, get: function () { return removePasskeyFromWallet_1.removePasskeyFromWallet; } });
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQWtEO0FBQXpDLGdIQUFBLGNBQWMsT0FBQTtBQUN2QixxREFBb0Q7QUFBM0Msa0hBQUEsZUFBZSxPQUFBO0FBQ3hCLCtEQUE4RDtBQUFyRCw0SEFBQSxvQkFBb0IsT0FBQTtBQUM3QiwyQ0FBZ0Y7QUFBdkUsbUhBQUEscUJBQXFCLE9BQUE7QUFBRSx1SEFBQSx5QkFBeUIsT0FBQTtBQUN6RCx1RUFBc0U7QUFBN0Qsb0lBQUEsd0JBQXdCLE9BQUE7QUFFakMscUVBQW9FO0FBQTNELGtJQUFBLHVCQUF1QixPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZGVyaXZlUGFzc3dvcmQgfSBmcm9tICcuL2Rlcml2ZVBhc3N3b3JkJztcbmV4cG9ydCB7IHJlZ2lzdGVyUGFzc2tleSB9IGZyb20gJy4vcmVnaXN0ZXJQYXNza2V5JztcbmV4cG9ydCB7IGRlcml2ZUVudGVycHJpc2VTYWx0IH0gZnJvbSAnLi9kZXJpdmVFbnRlcnByaXNlU2FsdCc7XG5leHBvcnQgeyBidWlsZEV2YWxCeUNyZWRlbnRpYWwsIG1hdGNoRGV2aWNlQnlDcmVkZW50aWFsSWQgfSBmcm9tICcuL3ByZkhlbHBlcnMnO1xuZXhwb3J0IHsgcmVtb3ZlUGFzc2tleUZyb21BY2NvdW50IH0gZnJvbSAnLi9yZW1vdmVQYXNza2V5RnJvbUFjY291bnQnO1xuZXhwb3J0IHR5cGUgeyBXZWJBdXRobk90cERldmljZSwgUGFzc2tleUF1dGhSZXN1bHQsIFBhc3NrZXlHZXRPcHRpb25zLCBXZWJBdXRoblByb3ZpZGVyIH0gZnJvbSAnLi93ZWJBdXRoblR5cGVzJztcbmV4cG9ydCB7IHJlbW92ZVBhc3NrZXlGcm9tV2FsbGV0IH0gZnJvbSAnLi9yZW1vdmVQYXNza2V5RnJvbVdhbGxldCc7XG4iXX0=
17
+ var attachPasskeyToWallet_1 = require("./attachPasskeyToWallet");
18
+ Object.defineProperty(exports, "attachPasskeyToWallet", { enumerable: true, get: function () { return attachPasskeyToWallet_1.attachPasskeyToWallet; } });
19
+ var derivePasskeyPrfKey_1 = require("./derivePasskeyPrfKey");
20
+ Object.defineProperty(exports, "derivePasskeyPrfKey", { enumerable: true, get: function () { return derivePasskeyPrfKey_1.derivePasskeyPrfKey; } });
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQWtEO0FBQXpDLGdIQUFBLGNBQWMsT0FBQTtBQUN2QixxREFBb0Q7QUFBM0Msa0hBQUEsZUFBZSxPQUFBO0FBQ3hCLCtEQUE4RDtBQUFyRCw0SEFBQSxvQkFBb0IsT0FBQTtBQUM3QiwyQ0FBZ0Y7QUFBdkUsbUhBQUEscUJBQXFCLE9BQUE7QUFBRSx1SEFBQSx5QkFBeUIsT0FBQTtBQUN6RCx1RUFBc0U7QUFBN0Qsb0lBQUEsd0JBQXdCLE9BQUE7QUFFakMscUVBQW9FO0FBQTNELGtJQUFBLHVCQUF1QixPQUFBO0FBQ2hDLGlFQUFnRTtBQUF2RCw4SEFBQSxxQkFBcUIsT0FBQTtBQUM5Qiw2REFBNEQ7QUFBbkQsMEhBQUEsbUJBQW1CLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBkZXJpdmVQYXNzd29yZCB9IGZyb20gJy4vZGVyaXZlUGFzc3dvcmQnO1xuZXhwb3J0IHsgcmVnaXN0ZXJQYXNza2V5IH0gZnJvbSAnLi9yZWdpc3RlclBhc3NrZXknO1xuZXhwb3J0IHsgZGVyaXZlRW50ZXJwcmlzZVNhbHQgfSBmcm9tICcuL2Rlcml2ZUVudGVycHJpc2VTYWx0JztcbmV4cG9ydCB7IGJ1aWxkRXZhbEJ5Q3JlZGVudGlhbCwgbWF0Y2hEZXZpY2VCeUNyZWRlbnRpYWxJZCB9IGZyb20gJy4vcHJmSGVscGVycyc7XG5leHBvcnQgeyByZW1vdmVQYXNza2V5RnJvbUFjY291bnQgfSBmcm9tICcuL3JlbW92ZVBhc3NrZXlGcm9tQWNjb3VudCc7XG5leHBvcnQgdHlwZSB7IFdlYkF1dGhuT3RwRGV2aWNlLCBQYXNza2V5QXV0aFJlc3VsdCwgUGFzc2tleUdldE9wdGlvbnMsIFdlYkF1dGhuUHJvdmlkZXIgfSBmcm9tICcuL3dlYkF1dGhuVHlwZXMnO1xuZXhwb3J0IHsgcmVtb3ZlUGFzc2tleUZyb21XYWxsZXQgfSBmcm9tICcuL3JlbW92ZVBhc3NrZXlGcm9tV2FsbGV0JztcbmV4cG9ydCB7IGF0dGFjaFBhc3NrZXlUb1dhbGxldCB9IGZyb20gJy4vYXR0YWNoUGFzc2tleVRvV2FsbGV0JztcbmV4cG9ydCB7IGRlcml2ZVBhc3NrZXlQcmZLZXkgfSBmcm9tICcuL2Rlcml2ZVBhc3NrZXlQcmZLZXknO1xuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"prfHelpers.d.ts","sourceRoot":"","sources":["../../src/prfHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG;IAChE,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC7C,CAYA;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,cAAc,CAMzG"}
1
+ {"version":3,"file":"prfHelpers.d.ts","sourceRoot":"","sources":["../../src/prfHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG;IAChE,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC7C,CA0BA;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,cAAc,CAQzG"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.buildEvalByCredential = buildEvalByCredential;
4
4
  exports.matchDeviceByCredentialId = matchDeviceByCredentialId;
5
+ const base64url_1 = require("./base64url");
5
6
  /**
6
7
  * Builds the PRF eval map and credential-to-device lookup from a wallet
7
8
  * keychain's webauthn devices. Devices without a prfSalt are skipped.
@@ -13,8 +14,20 @@ function buildEvalByCredential(devices) {
13
14
  if (!device.prfSalt)
14
15
  continue;
15
16
  const { credID } = device.authenticatorInfo;
16
- evalByCredential[credID] = device.prfSalt;
17
- credIdToDevice.set(credID, device);
17
+ // Normalise credID to base64url (no padding, URL-safe chars) so it matches
18
+ // the key format used by attachPasskeyToWallet (device.credentialId from the
19
+ // browser, which is already base64url). The WebAuthn PRF extension looks up
20
+ // the selected credential's ID against evalByCredential keys — if the encoding
21
+ // differs (e.g. standard base64 with padding/+/), the lookup silently fails and
22
+ // PRF evaluates with no salt, producing a different output.
23
+ const credIdBase64url = (0, base64url_1.toBase64Url)(credID);
24
+ // Pass prfSalt through as-is (base64url). attachPasskeyToWallet writes the
25
+ // server-stored salt in the same encoding and feeds the same string to
26
+ // the PRF extension at attach time, so both paths produce the same salt
27
+ // bytes — provided the WebAuthn provider layer decodes base64url before
28
+ // handing the bytes to navigator.credentials.get.
29
+ evalByCredential[credIdBase64url] = device.prfSalt;
30
+ credIdToDevice.set(credIdBase64url, device);
18
31
  }
19
32
  return { evalByCredential, credIdToDevice };
20
33
  }
@@ -23,10 +36,12 @@ function buildEvalByCredential(devices) {
23
36
  * @throws if no matching device is found
24
37
  */
25
38
  function matchDeviceByCredentialId(devices, credentialId) {
26
- const device = devices.find((d) => d.authenticatorInfo.credID === credentialId);
39
+ // Normalise both sides to base64url so padding/char differences don't break matching.
40
+ const needle = (0, base64url_1.toBase64Url)(credentialId);
41
+ const device = devices.find((d) => (0, base64url_1.toBase64Url)(d.authenticatorInfo.credID) === needle);
27
42
  if (!device) {
28
43
  throw new Error('Could not identify which passkey device was used');
29
44
  }
30
45
  return device;
31
46
  }
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJmSGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcmZIZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBTUEsc0RBZUM7QUFNRCw4REFNQztBQS9CRDs7O0dBR0c7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxPQUF5QjtJQUk3RCxNQUFNLGdCQUFnQixHQUEyQixFQUFFLENBQUM7SUFDcEQsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQTBCLENBQUM7SUFFekQsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87WUFBRSxTQUFTO1FBQzlCLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7UUFDNUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUMxQyxjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxDQUFDO0FBQzlDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQix5QkFBeUIsQ0FBQyxPQUF5QixFQUFFLFlBQW9CO0lBQ3ZGLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEtBQUssWUFBWSxDQUFDLENBQUM7SUFDaEYsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBXZWJhdXRobkRldmljZSB9IGZyb20gJ0BiaXRnby9wdWJsaWMtdHlwZXMnO1xuXG4vKipcbiAqIEJ1aWxkcyB0aGUgUFJGIGV2YWwgbWFwIGFuZCBjcmVkZW50aWFsLXRvLWRldmljZSBsb29rdXAgZnJvbSBhIHdhbGxldFxuICoga2V5Y2hhaW4ncyB3ZWJhdXRobiBkZXZpY2VzLiBEZXZpY2VzIHdpdGhvdXQgYSBwcmZTYWx0IGFyZSBza2lwcGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRFdmFsQnlDcmVkZW50aWFsKGRldmljZXM6IFdlYmF1dGhuRGV2aWNlW10pOiB7XG4gIGV2YWxCeUNyZWRlbnRpYWw6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGNyZWRJZFRvRGV2aWNlOiBNYXA8c3RyaW5nLCBXZWJhdXRobkRldmljZT47XG59IHtcbiAgY29uc3QgZXZhbEJ5Q3JlZGVudGlhbDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBjb25zdCBjcmVkSWRUb0RldmljZSA9IG5ldyBNYXA8c3RyaW5nLCBXZWJhdXRobkRldmljZT4oKTtcblxuICBmb3IgKGNvbnN0IGRldmljZSBvZiBkZXZpY2VzKSB7XG4gICAgaWYgKCFkZXZpY2UucHJmU2FsdCkgY29udGludWU7XG4gICAgY29uc3QgeyBjcmVkSUQgfSA9IGRldmljZS5hdXRoZW50aWNhdG9ySW5mbztcbiAgICBldmFsQnlDcmVkZW50aWFsW2NyZWRJRF0gPSBkZXZpY2UucHJmU2FsdDtcbiAgICBjcmVkSWRUb0RldmljZS5zZXQoY3JlZElELCBkZXZpY2UpO1xuICB9XG5cbiAgcmV0dXJuIHsgZXZhbEJ5Q3JlZGVudGlhbCwgY3JlZElkVG9EZXZpY2UgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBXZWJhdXRobkRldmljZSBtYXRjaGluZyB0aGUgZ2l2ZW4gY3JlZGVudGlhbCBJRC5cbiAqIEB0aHJvd3MgaWYgbm8gbWF0Y2hpbmcgZGV2aWNlIGlzIGZvdW5kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaERldmljZUJ5Q3JlZGVudGlhbElkKGRldmljZXM6IFdlYmF1dGhuRGV2aWNlW10sIGNyZWRlbnRpYWxJZDogc3RyaW5nKTogV2ViYXV0aG5EZXZpY2Uge1xuICBjb25zdCBkZXZpY2UgPSBkZXZpY2VzLmZpbmQoKGQpID0+IGQuYXV0aGVudGljYXRvckluZm8uY3JlZElEID09PSBjcmVkZW50aWFsSWQpO1xuICBpZiAoIWRldmljZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGlkZW50aWZ5IHdoaWNoIHBhc3NrZXkgZGV2aWNlIHdhcyB1c2VkJyk7XG4gIH1cbiAgcmV0dXJuIGRldmljZTtcbn1cbiJdfQ==
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJmSGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcmZIZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBT0Esc0RBNkJDO0FBTUQsOERBUUM7QUFqREQsMkNBQTBDO0FBRTFDOzs7R0FHRztBQUNILFNBQWdCLHFCQUFxQixDQUFDLE9BQXlCO0lBSTdELE1BQU0sZ0JBQWdCLEdBQTJCLEVBQUUsQ0FBQztJQUNwRCxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBMEIsQ0FBQztJQUV6RCxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTztZQUFFLFNBQVM7UUFDOUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztRQUU1QywyRUFBMkU7UUFDM0UsNkVBQTZFO1FBQzdFLDRFQUE0RTtRQUM1RSwrRUFBK0U7UUFDL0UsZ0ZBQWdGO1FBQ2hGLDREQUE0RDtRQUM1RCxNQUFNLGVBQWUsR0FBRyxJQUFBLHVCQUFXLEVBQUMsTUFBTSxDQUFDLENBQUM7UUFFNUMsMkVBQTJFO1FBQzNFLHVFQUF1RTtRQUN2RSx3RUFBd0U7UUFDeEUsd0VBQXdFO1FBQ3hFLGtEQUFrRDtRQUNsRCxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ25ELGNBQWMsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLENBQUM7QUFDOUMsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLHlCQUF5QixDQUFDLE9BQXlCLEVBQUUsWUFBb0I7SUFDdkYsc0ZBQXNGO0lBQ3RGLE1BQU0sTUFBTSxHQUFHLElBQUEsdUJBQVcsRUFBQyxZQUFZLENBQUMsQ0FBQztJQUN6QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFBLHVCQUFXLEVBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZGLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgV2ViYXV0aG5EZXZpY2UgfSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB7IHRvQmFzZTY0VXJsIH0gZnJvbSAnLi9iYXNlNjR1cmwnO1xuXG4vKipcbiAqIEJ1aWxkcyB0aGUgUFJGIGV2YWwgbWFwIGFuZCBjcmVkZW50aWFsLXRvLWRldmljZSBsb29rdXAgZnJvbSBhIHdhbGxldFxuICoga2V5Y2hhaW4ncyB3ZWJhdXRobiBkZXZpY2VzLiBEZXZpY2VzIHdpdGhvdXQgYSBwcmZTYWx0IGFyZSBza2lwcGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRFdmFsQnlDcmVkZW50aWFsKGRldmljZXM6IFdlYmF1dGhuRGV2aWNlW10pOiB7XG4gIGV2YWxCeUNyZWRlbnRpYWw6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGNyZWRJZFRvRGV2aWNlOiBNYXA8c3RyaW5nLCBXZWJhdXRobkRldmljZT47XG59IHtcbiAgY29uc3QgZXZhbEJ5Q3JlZGVudGlhbDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBjb25zdCBjcmVkSWRUb0RldmljZSA9IG5ldyBNYXA8c3RyaW5nLCBXZWJhdXRobkRldmljZT4oKTtcblxuICBmb3IgKGNvbnN0IGRldmljZSBvZiBkZXZpY2VzKSB7XG4gICAgaWYgKCFkZXZpY2UucHJmU2FsdCkgY29udGludWU7XG4gICAgY29uc3QgeyBjcmVkSUQgfSA9IGRldmljZS5hdXRoZW50aWNhdG9ySW5mbztcblxuICAgIC8vIE5vcm1hbGlzZSBjcmVkSUQgdG8gYmFzZTY0dXJsIChubyBwYWRkaW5nLCBVUkwtc2FmZSBjaGFycykgc28gaXQgbWF0Y2hlc1xuICAgIC8vIHRoZSBrZXkgZm9ybWF0IHVzZWQgYnkgYXR0YWNoUGFzc2tleVRvV2FsbGV0IChkZXZpY2UuY3JlZGVudGlhbElkIGZyb20gdGhlXG4gICAgLy8gYnJvd3Nlciwgd2hpY2ggaXMgYWxyZWFkeSBiYXNlNjR1cmwpLiBUaGUgV2ViQXV0aG4gUFJGIGV4dGVuc2lvbiBsb29rcyB1cFxuICAgIC8vIHRoZSBzZWxlY3RlZCBjcmVkZW50aWFsJ3MgSUQgYWdhaW5zdCBldmFsQnlDcmVkZW50aWFsIGtleXMg4oCUIGlmIHRoZSBlbmNvZGluZ1xuICAgIC8vIGRpZmZlcnMgKGUuZy4gc3RhbmRhcmQgYmFzZTY0IHdpdGggcGFkZGluZy8rLyksIHRoZSBsb29rdXAgc2lsZW50bHkgZmFpbHMgYW5kXG4gICAgLy8gUFJGIGV2YWx1YXRlcyB3aXRoIG5vIHNhbHQsIHByb2R1Y2luZyBhIGRpZmZlcmVudCBvdXRwdXQuXG4gICAgY29uc3QgY3JlZElkQmFzZTY0dXJsID0gdG9CYXNlNjRVcmwoY3JlZElEKTtcblxuICAgIC8vIFBhc3MgcHJmU2FsdCB0aHJvdWdoIGFzLWlzIChiYXNlNjR1cmwpLiBhdHRhY2hQYXNza2V5VG9XYWxsZXQgd3JpdGVzIHRoZVxuICAgIC8vIHNlcnZlci1zdG9yZWQgc2FsdCBpbiB0aGUgc2FtZSBlbmNvZGluZyBhbmQgZmVlZHMgdGhlIHNhbWUgc3RyaW5nIHRvXG4gICAgLy8gdGhlIFBSRiBleHRlbnNpb24gYXQgYXR0YWNoIHRpbWUsIHNvIGJvdGggcGF0aHMgcHJvZHVjZSB0aGUgc2FtZSBzYWx0XG4gICAgLy8gYnl0ZXMg4oCUIHByb3ZpZGVkIHRoZSBXZWJBdXRobiBwcm92aWRlciBsYXllciBkZWNvZGVzIGJhc2U2NHVybCBiZWZvcmVcbiAgICAvLyBoYW5kaW5nIHRoZSBieXRlcyB0byBuYXZpZ2F0b3IuY3JlZGVudGlhbHMuZ2V0LlxuICAgIGV2YWxCeUNyZWRlbnRpYWxbY3JlZElkQmFzZTY0dXJsXSA9IGRldmljZS5wcmZTYWx0O1xuICAgIGNyZWRJZFRvRGV2aWNlLnNldChjcmVkSWRCYXNlNjR1cmwsIGRldmljZSk7XG4gIH1cblxuICByZXR1cm4geyBldmFsQnlDcmVkZW50aWFsLCBjcmVkSWRUb0RldmljZSB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIFdlYmF1dGhuRGV2aWNlIG1hdGNoaW5nIHRoZSBnaXZlbiBjcmVkZW50aWFsIElELlxuICogQHRocm93cyBpZiBubyBtYXRjaGluZyBkZXZpY2UgaXMgZm91bmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoRGV2aWNlQnlDcmVkZW50aWFsSWQoZGV2aWNlczogV2ViYXV0aG5EZXZpY2VbXSwgY3JlZGVudGlhbElkOiBzdHJpbmcpOiBXZWJhdXRobkRldmljZSB7XG4gIC8vIE5vcm1hbGlzZSBib3RoIHNpZGVzIHRvIGJhc2U2NHVybCBzbyBwYWRkaW5nL2NoYXIgZGlmZmVyZW5jZXMgZG9uJ3QgYnJlYWsgbWF0Y2hpbmcuXG4gIGNvbnN0IG5lZWRsZSA9IHRvQmFzZTY0VXJsKGNyZWRlbnRpYWxJZCk7XG4gIGNvbnN0IGRldmljZSA9IGRldmljZXMuZmluZCgoZCkgPT4gdG9CYXNlNjRVcmwoZC5hdXRoZW50aWNhdG9ySW5mby5jcmVkSUQpID09PSBuZWVkbGUpO1xuICBpZiAoIWRldmljZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGlkZW50aWZ5IHdoaWNoIHBhc3NrZXkgZGV2aWNlIHdhcyB1c2VkJyk7XG4gIH1cbiAgcmV0dXJuIGRldmljZTtcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"registerPasskey.d.ts","sourceRoot":"","sources":["../../src/registerPasskey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAyEtE,wBAAsB,eAAe,CAAC,MAAM,EAAE;IAC5C,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,iBAAiB,GAAG;IAAE,YAAY,EAAE,OAAO,CAAA;CAAE,CAAC,CA8DzD"}
1
+ {"version":3,"file":"registerPasskey.d.ts","sourceRoot":"","sources":["../../src/registerPasskey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAoEtE,wBAAsB,eAAe,CAAC,MAAM,EAAE;IAC5C,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,iBAAiB,GAAG;IAAE,YAAY,EAAE,OAAO,CAAA;CAAE,CAAC,CA8DzD"}
@@ -1,10 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.registerPasskey = registerPasskey;
4
- /** Encodes an ArrayBuffer as a base64url string (no padding). */
5
- function encodeBase64Url(buffer) {
6
- return Buffer.from(buffer).toString('base64').replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
7
- }
4
+ const base64url_1 = require("./base64url");
8
5
  /**
9
6
  * Recursively converts a PublicKeyCredential (or any value it contains) to a
10
7
  * JSON-serialisable representation, encoding ArrayBuffers as base64url strings.
@@ -14,10 +11,10 @@ function publicKeyCredentialToJSON(value) {
14
11
  return value.map(publicKeyCredentialToJSON);
15
12
  }
16
13
  if (value instanceof ArrayBuffer) {
17
- return encodeBase64Url(value);
14
+ return (0, base64url_1.bufferToBase64Url)(value);
18
15
  }
19
16
  if (ArrayBuffer.isView(value)) {
20
- return encodeBase64Url(value.buffer);
17
+ return (0, base64url_1.bufferToBase64Url)(value.buffer);
21
18
  }
22
19
  if (value instanceof Object) {
23
20
  const result = {};
@@ -93,4 +90,4 @@ async function registerPasskey(params) {
93
90
  prfSupported,
94
91
  };
95
92
  }
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXJQYXNza2V5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlZ2lzdGVyUGFzc2tleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTBFQSwwQ0FrRUM7QUE5R0QsaUVBQWlFO0FBQ2pFLFNBQVMsZUFBZSxDQUFDLE1BQW1CO0lBQzFDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUcsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMseUJBQXlCLENBQUMsS0FBYztJQUMvQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQ0QsSUFBSSxLQUFLLFlBQVksV0FBVyxFQUFFLENBQUM7UUFDakMsT0FBTyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUNELElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzlCLE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQyxNQUFxQixDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELElBQUksS0FBSyxZQUFZLE1BQU0sRUFBRSxDQUFDO1FBQzVCLE1BQU0sTUFBTSxHQUE0QixFQUFFLENBQUM7UUFDM0MsbUZBQW1GO1FBQ25GLEtBQUssTUFBTSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7WUFDeEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLHlCQUF5QixDQUFFLEtBQWlDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztR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QUMsTUFBTSxFQUFFLENBQUM7UUFDWixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakYsTUFBTSxJQUFJLEtBQUssQ0FDYiwwREFBMEQsV0FBVyxDQUFDLEVBQUUsa0JBQWtCLFNBQVMsR0FBRyxDQUN2RyxDQUFDO0lBQ0osQ0FBQztJQUVELGtEQUFrRDtJQUNsRCxPQUFPO1FBQ0wsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1FBQ2IsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO1FBQ2pDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztRQUN2QixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7UUFDM0IsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1FBQzdCLFlBQVk7S0FDYixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFdlYkF1dGhuT3RwRGV2aWNlLCBXZWJBdXRoblByb3ZpZGVyIH0gZnJvbSAnLi93ZWJBdXRoblR5cGVzJztcblxuaW50ZXJmYWNlIFJlZ2lzdGVyQ2hhbGxlbmdlUmVzcG9uc2Uge1xuICBjaGFsbGVuZ2U6IHN0cmluZztcbiAgYmFzZVNhbHQ6IHN0cmluZztcbiAgcnA6IFB1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eTtcbiAgdXNlcjogUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHk7XG4gIHB1YktleUNyZWRQYXJhbXM6IFB1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzW107XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIGV4Y2x1ZGVDcmVkZW50aWFscz86IFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yW107XG4gIGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24/OiBBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWE7XG4gIGF0dGVzdGF0aW9uPzogQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZTtcbiAgZXh0ZW5zaW9ucz86IEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cztcbn1cblxuaW50ZXJmYWNlIE90cERldmljZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGNyZWRlbnRpYWxJZDogc3RyaW5nO1xuICBwcmZTYWx0Pzogc3RyaW5nO1xuICBpc1Bhc3NrZXk/OiBib29sZWFuO1xuICBleHRlbnNpb25zPzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG59XG5cbmludGVyZmFjZSBSZWdpc3Rlck90cFJlc3BvbnNlIHtcbiAgdXNlcjoge1xuICAgIG90cERldmljZXM6IE90cERldmljZVtdO1xuICB9O1xufVxuXG4vKiogRW5jb2RlcyBhbiBBcnJheUJ1ZmZlciBhcyBhIGJhc2U2NHVybCBzdHJpbmcgKG5vIHBhZGRpbmcpLiAqL1xuZnVuY3Rpb24gZW5jb2RlQmFzZTY0VXJsKGJ1ZmZlcjogQXJyYXlCdWZmZXIpOiBzdHJpbmcge1xuICByZXR1cm4gQnVmZmVyLmZyb20oYnVmZmVyKS50b1N0cmluZygnYmFzZTY0JykucmVwbGFjZSgvPS9nLCAnJykucmVwbGFjZSgvXFwrL2csICctJykucmVwbGFjZSgvXFwvL2csICdfJyk7XG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgY29udmVydHMgYSBQdWJsaWNLZXlDcmVkZW50aWFsIChvciBhbnkgdmFsdWUgaXQgY29udGFpbnMpIHRvIGFcbiAqIEpTT04tc2VyaWFsaXNhYmxlIHJlcHJlc2VudGF0aW9uLCBlbmNvZGluZyBBcnJheUJ1ZmZlcnMgYXMgYmFzZTY0dXJsIHN0cmluZ3MuXG4gKi9cbmZ1bmN0aW9uIHB1YmxpY0tleUNyZWRlbnRpYWxUb0pTT04odmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcChwdWJsaWNLZXlDcmVkZW50aWFsVG9KU09OKTtcbiAgfVxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiBlbmNvZGVCYXNlNjRVcmwodmFsdWUpO1xuICB9XG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUpKSB7XG4gICAgcmV0dXJuIGVuY29kZUJhc2U2NFVybCh2YWx1ZS5idWZmZXIgYXMgQXJyYXlCdWZmZXIpO1xuICB9XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICAvLyBVc2UgZm9yLi4uaW4gdG8gZW51bWVyYXRlIERPTSBvYmplY3QgcHJvcGVydGllcyAobm9uLWVudW1lcmFibGUgb3duICsgaW5oZXJpdGVkKVxuICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHB1YmxpY0tleUNyZWRlbnRpYWxUb0pTT04oKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogRGVjb2RlcyBleGNsdWRlZCBjcmVkZW50aWFsIElEcyBmcm9tIGJhc2U2NCBzdHJpbmdzIHRvIEFycmF5QnVmZmVycy5cbiAqIFRoZSBXZWJBdXRobiBBUEkgcmVxdWlyZXMgQnVmZmVyU291cmNlIHZhbHVlcywgbm90IGJhc2U2NCBzdHJpbmdzLlxuICovXG5mdW5jdGlvbiBwcmVmb3JtYXRFeGNsdWRlZENyZWRlbnRpYWxzKFxuICBleGNsdWRlQ3JlZGVudGlhbHM6IFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yW10gfCB1bmRlZmluZWRcbik6IFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yW10ge1xuICBpZiAoIWV4Y2x1ZGVDcmVkZW50aWFscykgcmV0dXJuIFtdO1xuICByZXR1cm4gZXhjbHVkZUNyZWRlbnRpYWxzLm1hcCgoY3JlZCkgPT4gKHtcbiAgICAuLi5jcmVkLFxuICAgIGlkOiBCdWZmZXIuZnJvbShjcmVkLmlkIGFzIHVua25vd24gYXMgc3RyaW5nLCAnYmFzZTY0JykgYXMgdW5rbm93biBhcyBBcnJheUJ1ZmZlcixcbiAgfSkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVnaXN0ZXJQYXNza2V5KHBhcmFtczoge1xuICBiaXRnbzogQml0R29CYXNlO1xuICBwcm92aWRlcjogV2ViQXV0aG5Qcm92aWRlcjtcbiAgbGFiZWw6IHN0cmluZztcbn0pOiBQcm9taXNlPFdlYkF1dGhuT3RwRGV2aWNlICYgeyBwcmZTdXBwb3J0ZWQ6IGJvb2xlYW4gfT4ge1xuICBjb25zdCB7IGJpdGdvLCBwcm92aWRlciwgbGFiZWwgfSA9IHBhcmFtcztcblxuICAvLyBTdGVwIDE6IEZldGNoIHNlcnZlciBjaGFsbGVuZ2UgKGNvbnRhaW5zIGJhc2VTYWx0KVxuICBjb25zdCBjaGFsbGVuZ2UgPSAoYXdhaXQgYml0Z29cbiAgICAuZ2V0KGJpdGdvLnVybCgnL3VzZXIvb3RwL3dlYmF1dGhuL3JlZ2lzdGVyJywgMikpXG4gICAgLnJlc3VsdCgpKSBhcyBSZWdpc3RlckNoYWxsZW5nZVJlc3BvbnNlO1xuXG4gIC8vIFN0ZXAgMjogUGFzcyBmb3JtYXR0ZWQgY2hhbGxlbmdlIHRvIHByb3ZpZGVyLmNyZWF0ZSgpIOKAlCBicm93c2VyIHJldHVybnMgYXR0ZXN0YXRpb25cbiAgY29uc3QgYXR0ZXN0YXRpb24gPSBhd2FpdCBwcm92aWRlci5jcmVhdGUoe1xuICAgIGNoYWxsZW5nZTogQnVmZmVyLmZyb20oY2hhbGxlbmdlLmNoYWxsZW5nZSwgJ2Jhc2U2NCcpLFxuICAgIHJwOiBjaGFsbGVuZ2UucnAsXG4gICAgdXNlcjogY2hhbGxlbmdlLnVzZXIsXG4gICAgcHViS2V5Q3JlZFBhcmFtczogY2hhbGxlbmdlLnB1YktleUNyZWRQYXJhbXMsXG4gICAgdGltZW91dDogY2hhbGxlbmdlLnRpbWVvdXQsXG4gICAgZXhjbHVkZUNyZWRlbnRpYWxzOiBwcmVmb3JtYXRFeGNsdWRlZENyZWRlbnRpYWxzKGNoYWxsZW5nZS5leGNsdWRlQ3JlZGVudGlhbHMpLFxuICAgIGF1dGhlbnRpY2F0b3JTZWxlY3Rpb246IGNoYWxsZW5nZS5hdXRoZW50aWNhdG9yU2VsZWN0aW9uLFxuICAgIGF0dGVzdGF0aW9uOiBjaGFsbGVuZ2UuYXR0ZXN0YXRpb24sXG4gICAgZXh0ZW5zaW9uczogY2hhbGxlbmdlLmV4dGVuc2lvbnMsXG4gIH0pO1xuXG4gIC8vIFN0ZXAgMzogQ2hlY2sgaWYgUFJGIGlzIHN1cHBvcnRlZCDigJQgYHByZi5lbmFibGVkYCBpcyBzZXQgZHVyaW5nIHJlZ2lzdHJhdGlvblxuICAvLyAobm90IGBwcmYucmVzdWx0cy5maXJzdGAsIHdoaWNoIGlzIG9ubHkgcHJlc2VudCBkdXJpbmcgYXV0aGVudGljYXRpb24gYXNzZXJ0aW9ucylcbiAgY29uc3QgY2xpZW50RXh0ZW5zaW9uUmVzdWx0czogQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyA9IGF0dGVzdGF0aW9uLmdldENsaWVudEV4dGVuc2lvblJlc3VsdHMoKTtcbiAgY29uc3QgcHJmRW5hYmxlZCA9IGNsaWVudEV4dGVuc2lvblJlc3VsdHMucHJmO1xuICBjb25zdCBwcmZTdXBwb3J0ZWQgPSB0eXBlb2YgcHJmRW5hYmxlZCA9PT0gJ29iamVjdCcgJiYgcHJmRW5hYmxlZCAhPT0gbnVsbCAmJiBwcmZFbmFibGVkLmVuYWJsZWQgPT09IHRydWU7XG5cbiAgLy8gU3RlcCA0OiBTZXJpYWxpemUgdGhlIGZ1bGwgY3JlZGVudGlhbCB1c2luZyByZWN1cnNpdmUgYmFzZTY0dXJsIGVuY29kaW5nXG4gIGNvbnN0IG90cCA9IEpTT04uc3RyaW5naWZ5KHB1YmxpY0tleUNyZWRlbnRpYWxUb0pTT04oYXR0ZXN0YXRpb24pKTtcblxuICBjb25zdCBwdXRCb2R5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICBvdHAsXG4gICAgdHlwZTogJ3dlYmF1dGhuJyxcbiAgICBsYWJlbCxcbiAgfTtcblxuICBpZiAocHJmU3VwcG9ydGVkKSB7XG4gICAgcHV0Qm9keS5leHRlbnNpb25zID0gWydwcmYnXTtcbiAgICBwdXRCb2R5LnNjb3BlcyA9IFsnd2FsbGV0X2hvdCddO1xuICB9XG5cbiAgLy8gU3RlcCA1OiBQVVQgL2FwaS92Mi91c2VyL290cFxuICBjb25zdCByZXNwb25zZSA9IChhd2FpdCBiaXRnby5wdXQoYml0Z28udXJsKCcvdXNlci9vdHAnLCAyKSkuc2VuZChwdXRCb2R5KS5yZXN1bHQoKSkgYXMgUmVnaXN0ZXJPdHBSZXNwb25zZTtcblxuICAvLyBTdGVwIDY6IEZpbmQgdGhlIG5ld2x5IHJlZ2lzdGVyZWQgZGV2aWNlIGJ5IG1hdGNoaW5nIGNyZWRlbnRpYWxJZFxuICBjb25zdCBkZXZpY2UgPSByZXNwb25zZS51c2VyLm90cERldmljZXMuZmluZCgoZCkgPT4gZC5jcmVkZW50aWFsSWQgPT09IGF0dGVzdGF0aW9uLmlkKTtcbiAgaWYgKCFkZXZpY2UpIHtcbiAgICBjb25zdCBhdmFpbGFibGUgPSByZXNwb25zZS51c2VyLm90cERldmljZXMubWFwKChkKSA9PiBkLmNyZWRlbnRpYWxJZCkuam9pbignLCAnKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgUmVnaXN0ZXJlZCBkZXZpY2Ugbm90IGZvdW5kIGluIHJlc3BvbnNlIChjcmVkZW50aWFsSWQ6ICR7YXR0ZXN0YXRpb24uaWR9KS4gQXZhaWxhYmxlOiBbJHthdmFpbGFibGV9XWBcbiAgICApO1xuICB9XG5cbiAgLy8gU3RlcCA3OiBSZXR1cm4gV2ViQXV0aG5PdHBEZXZpY2UgKyBwcmZTdXBwb3J0ZWRcbiAgcmV0dXJuIHtcbiAgICBpZDogZGV2aWNlLmlkLFxuICAgIGNyZWRlbnRpYWxJZDogZGV2aWNlLmNyZWRlbnRpYWxJZCxcbiAgICBwcmZTYWx0OiBkZXZpY2UucHJmU2FsdCxcbiAgICBpc1Bhc3NrZXk6IGRldmljZS5pc1Bhc3NrZXksXG4gICAgZXh0ZW5zaW9uczogZGV2aWNlLmV4dGVuc2lvbnMsXG4gICAgcHJmU3VwcG9ydGVkLFxuICB9O1xufVxuIl19
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXJQYXNza2V5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlZ2lzdGVyUGFzc2tleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXNFQSwwQ0FrRUM7QUF2SUQsMkNBQWdEO0FBOEJoRDs7O0dBR0c7QUFDSCxTQUFTLHlCQUF5QixDQUFDLEtBQWM7SUFDL0MsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUNELElBQUksS0FBSyxZQUFZLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLE9BQU8sSUFBQSw2QkFBaUIsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDOUIsT0FBTyxJQUFBLDZCQUFpQixFQUFDLEtBQUssQ0FBQyxNQUFxQixDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUNELElBQUksS0FBSyxZQUFZLE1BQU0sRUFBRSxDQUFDO1FBQzVCLE1BQU0sTUFBTSxHQUE0QixFQUFFLENBQUM7UUFDM0MsbUZBQW1GO1FBQ25GLEtBQUssTUFBTSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7WUFDeEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLHlCQUF5QixDQUFFLEtBQWlDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuRixDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsNEJBQTRCLENBQ25DLGtCQUErRDtJQUUvRCxJQUFJLENBQUMsa0JBQWtCO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDbkMsT0FBTyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJ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QUUsa0JBQWtCLFNBQVMsR0FBRyxDQUN2RyxDQUFDO0lBQ0osQ0FBQztJQUVELGtEQUFrRDtJQUNsRCxPQUFPO1FBQ0wsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1FBQ2IsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO1FBQ2pDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztRQUN2QixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7UUFDM0IsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1FBQzdCLFlBQVk7S0FDYixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGJ1ZmZlclRvQmFzZTY0VXJsIH0gZnJvbSAnLi9iYXNlNjR1cmwnO1xuaW1wb3J0IHsgV2ViQXV0aG5PdHBEZXZpY2UsIFdlYkF1dGhuUHJvdmlkZXIgfSBmcm9tICcuL3dlYkF1dGhuVHlwZXMnO1xuXG5pbnRlcmZhY2UgUmVnaXN0ZXJDaGFsbGVuZ2VSZXNwb25zZSB7XG4gIGNoYWxsZW5nZTogc3RyaW5nO1xuICBiYXNlU2FsdDogc3RyaW5nO1xuICBycDogUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5O1xuICB1c2VyOiBQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eTtcbiAgcHViS2V5Q3JlZFBhcmFtczogUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnNbXTtcbiAgdGltZW91dD86IG51bWJlcjtcbiAgZXhjbHVkZUNyZWRlbnRpYWxzPzogUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3JbXTtcbiAgYXV0aGVudGljYXRvclNlbGVjdGlvbj86IEF1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYTtcbiAgYXR0ZXN0YXRpb24/OiBBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlO1xuICBleHRlbnNpb25zPzogQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzO1xufVxuXG5pbnRlcmZhY2UgT3RwRGV2aWNlIHtcbiAgaWQ6IHN0cmluZztcbiAgY3JlZGVudGlhbElkOiBzdHJpbmc7XG4gIHByZlNhbHQ/OiBzdHJpbmc7XG4gIGlzUGFzc2tleT86IGJvb2xlYW47XG4gIGV4dGVuc2lvbnM/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbn1cblxuaW50ZXJmYWNlIFJlZ2lzdGVyT3RwUmVzcG9uc2Uge1xuICB1c2VyOiB7XG4gICAgb3RwRGV2aWNlczogT3RwRGV2aWNlW107XG4gIH07XG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgY29udmVydHMgYSBQdWJsaWNLZXlDcmVkZW50aWFsIChvciBhbnkgdmFsdWUgaXQgY29udGFpbnMpIHRvIGFcbiAqIEpTT04tc2VyaWFsaXNhYmxlIHJlcHJlc2VudGF0aW9uLCBlbmNvZGluZyBBcnJheUJ1ZmZlcnMgYXMgYmFzZTY0dXJsIHN0cmluZ3MuXG4gKi9cbmZ1bmN0aW9uIHB1YmxpY0tleUNyZWRlbnRpYWxUb0pTT04odmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcChwdWJsaWNLZXlDcmVkZW50aWFsVG9KU09OKTtcbiAgfVxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiBidWZmZXJUb0Jhc2U2NFVybCh2YWx1ZSk7XG4gIH1cbiAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gYnVmZmVyVG9CYXNlNjRVcmwodmFsdWUuYnVmZmVyIGFzIEFycmF5QnVmZmVyKTtcbiAgfVxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgLy8gVXNlIGZvci4uLmluIHRvIGVudW1lcmF0ZSBET00gb2JqZWN0IHByb3BlcnRpZXMgKG5vbi1lbnVtZXJhYmxlIG93biArIGluaGVyaXRlZClcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB2YWx1ZSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBwdWJsaWNLZXlDcmVkZW50aWFsVG9KU09OKCh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIERlY29kZXMgZXhjbHVkZWQgY3JlZGVudGlhbCBJRHMgZnJvbSBiYXNlNjQgc3RyaW5ncyB0byBBcnJheUJ1ZmZlcnMuXG4gKiBUaGUgV2ViQXV0aG4gQVBJIHJlcXVpcmVzIEJ1ZmZlclNvdXJjZSB2YWx1ZXMsIG5vdCBiYXNlNjQgc3RyaW5ncy5cbiAqL1xuZnVuY3Rpb24gcHJlZm9ybWF0RXhjbHVkZWRDcmVkZW50aWFscyhcbiAgZXhjbHVkZUNyZWRlbnRpYWxzOiBQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcltdIHwgdW5kZWZpbmVkXG4pOiBQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcltdIHtcbiAgaWYgKCFleGNsdWRlQ3JlZGVudGlhbHMpIHJldHVybiBbXTtcbiAgcmV0dXJuIGV4Y2x1ZGVDcmVkZW50aWFscy5tYXAoKGNyZWQpID0+ICh7XG4gICAgLi4uY3JlZCxcbiAgICBpZDogQnVmZmVyLmZyb20oY3JlZC5pZCBhcyB1bmtub3duIGFzIHN0cmluZywgJ2Jhc2U2NCcpIGFzIHVua25vd24gYXMgQXJyYXlCdWZmZXIsXG4gIH0pKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlZ2lzdGVyUGFzc2tleShwYXJhbXM6IHtcbiAgYml0Z286IEJpdEdvQmFzZTtcbiAgcHJvdmlkZXI6IFdlYkF1dGhuUHJvdmlkZXI7XG4gIGxhYmVsOiBzdHJpbmc7XG59KTogUHJvbWlzZTxXZWJBdXRobk90cERldmljZSAmIHsgcHJmU3VwcG9ydGVkOiBib29sZWFuIH0+IHtcbiAgY29uc3QgeyBiaXRnbywgcHJvdmlkZXIsIGxhYmVsIH0gPSBwYXJhbXM7XG5cbiAgLy8gU3RlcCAxOiBGZXRjaCBzZXJ2ZXIgY2hhbGxlbmdlIChjb250YWlucyBiYXNlU2FsdClcbiAgY29uc3QgY2hhbGxlbmdlID0gKGF3YWl0IGJpdGdvXG4gICAgLmdldChiaXRnby51cmwoJy91c2VyL290cC93ZWJhdXRobi9yZWdpc3RlcicsIDIpKVxuICAgIC5yZXN1bHQoKSkgYXMgUmVnaXN0ZXJDaGFsbGVuZ2VSZXNwb25zZTtcblxuICAvLyBTdGVwIDI6IFBhc3MgZm9ybWF0dGVkIGNoYWxsZW5nZSB0byBwcm92aWRlci5jcmVhdGUoKSDigJQgYnJvd3NlciByZXR1cm5zIGF0dGVzdGF0aW9uXG4gIGNvbnN0IGF0dGVzdGF0aW9uID0gYXdhaXQgcHJvdmlkZXIuY3JlYXRlKHtcbiAgICBjaGFsbGVuZ2U6IEJ1ZmZlci5mcm9tKGNoYWxsZW5nZS5jaGFsbGVuZ2UsICdiYXNlNjQnKSxcbiAgICBycDogY2hhbGxlbmdlLnJwLFxuICAgIHVzZXI6IGNoYWxsZW5nZS51c2VyLFxuICAgIHB1YktleUNyZWRQYXJhbXM6IGNoYWxsZW5nZS5wdWJLZXlDcmVkUGFyYW1zLFxuICAgIHRpbWVvdXQ6IGNoYWxsZW5nZS50aW1lb3V0LFxuICAgIGV4Y2x1ZGVDcmVkZW50aWFsczogcHJlZm9ybWF0RXhjbHVkZWRDcmVkZW50aWFscyhjaGFsbGVuZ2UuZXhjbHVkZUNyZWRlbnRpYWxzKSxcbiAgICBhdXRoZW50aWNhdG9yU2VsZWN0aW9uOiBjaGFsbGVuZ2UuYXV0aGVudGljYXRvclNlbGVjdGlvbixcbiAgICBhdHRlc3RhdGlvbjogY2hhbGxlbmdlLmF0dGVzdGF0aW9uLFxuICAgIGV4dGVuc2lvbnM6IGNoYWxsZW5nZS5leHRlbnNpb25zLFxuICB9KTtcblxuICAvLyBTdGVwIDM6IENoZWNrIGlmIFBSRiBpcyBzdXBwb3J0ZWQg4oCUIGBwcmYuZW5hYmxlZGAgaXMgc2V0IGR1cmluZyByZWdpc3RyYXRpb25cbiAgLy8gKG5vdCBgcHJmLnJlc3VsdHMuZmlyc3RgLCB3aGljaCBpcyBvbmx5IHByZXNlbnQgZHVyaW5nIGF1dGhlbnRpY2F0aW9uIGFzc2VydGlvbnMpXG4gIGNvbnN0IGNsaWVudEV4dGVuc2lvblJlc3VsdHM6IEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgPSBhdHRlc3RhdGlvbi5nZXRDbGllbnRFeHRlbnNpb25SZXN1bHRzKCk7XG4gIGNvbnN0IHByZkVuYWJsZWQgPSBjbGllbnRFeHRlbnNpb25SZXN1bHRzLnByZjtcbiAgY29uc3QgcHJmU3VwcG9ydGVkID0gdHlwZW9mIHByZkVuYWJsZWQgPT09ICdvYmplY3QnICYmIHByZkVuYWJsZWQgIT09IG51bGwgJiYgcHJmRW5hYmxlZC5lbmFibGVkID09PSB0cnVlO1xuXG4gIC8vIFN0ZXAgNDogU2VyaWFsaXplIHRoZSBmdWxsIGNyZWRlbnRpYWwgdXNpbmcgcmVjdXJzaXZlIGJhc2U2NHVybCBlbmNvZGluZ1xuICBjb25zdCBvdHAgPSBKU09OLnN0cmluZ2lmeShwdWJsaWNLZXlDcmVkZW50aWFsVG9KU09OKGF0dGVzdGF0aW9uKSk7XG5cbiAgY29uc3QgcHV0Qm9keTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgb3RwLFxuICAgIHR5cGU6ICd3ZWJhdXRobicsXG4gICAgbGFiZWwsXG4gIH07XG5cbiAgaWYgKHByZlN1cHBvcnRlZCkge1xuICAgIHB1dEJvZHkuZXh0ZW5zaW9ucyA9IFsncHJmJ107XG4gICAgcHV0Qm9keS5zY29wZXMgPSBbJ3dhbGxldF9ob3QnXTtcbiAgfVxuXG4gIC8vIFN0ZXAgNTogUFVUIC9hcGkvdjIvdXNlci9vdHBcbiAgY29uc3QgcmVzcG9uc2UgPSAoYXdhaXQgYml0Z28ucHV0KGJpdGdvLnVybCgnL3VzZXIvb3RwJywgMikpLnNlbmQocHV0Qm9keSkucmVzdWx0KCkpIGFzIFJlZ2lzdGVyT3RwUmVzcG9uc2U7XG5cbiAgLy8gU3RlcCA2OiBGaW5kIHRoZSBuZXdseSByZWdpc3RlcmVkIGRldmljZSBieSBtYXRjaGluZyBjcmVkZW50aWFsSWRcbiAgY29uc3QgZGV2aWNlID0gcmVzcG9uc2UudXNlci5vdHBEZXZpY2VzLmZpbmQoKGQpID0+IGQuY3JlZGVudGlhbElkID09PSBhdHRlc3RhdGlvbi5pZCk7XG4gIGlmICghZGV2aWNlKSB7XG4gICAgY29uc3QgYXZhaWxhYmxlID0gcmVzcG9uc2UudXNlci5vdHBEZXZpY2VzLm1hcCgoZCkgPT4gZC5jcmVkZW50aWFsSWQpLmpvaW4oJywgJyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFJlZ2lzdGVyZWQgZGV2aWNlIG5vdCBmb3VuZCBpbiByZXNwb25zZSAoY3JlZGVudGlhbElkOiAke2F0dGVzdGF0aW9uLmlkfSkuIEF2YWlsYWJsZTogWyR7YXZhaWxhYmxlfV1gXG4gICAgKTtcbiAgfVxuXG4gIC8vIFN0ZXAgNzogUmV0dXJuIFdlYkF1dGhuT3RwRGV2aWNlICsgcHJmU3VwcG9ydGVkXG4gIHJldHVybiB7XG4gICAgaWQ6IGRldmljZS5pZCxcbiAgICBjcmVkZW50aWFsSWQ6IGRldmljZS5jcmVkZW50aWFsSWQsXG4gICAgcHJmU2FsdDogZGV2aWNlLnByZlNhbHQsXG4gICAgaXNQYXNza2V5OiBkZXZpY2UuaXNQYXNza2V5LFxuICAgIGV4dGVuc2lvbnM6IGRldmljZS5leHRlbnNpb25zLFxuICAgIHByZlN1cHBvcnRlZCxcbiAgfTtcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"removePasskeyFromWallet.d.ts","sourceRoot":"","sources":["../../src/removePasskeyFromWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA6B,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,wBAAsB,uBAAuB,CAAC,MAAM,EAAE;IACpD,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBhB"}
1
+ {"version":3,"file":"removePasskeyFromWallet.d.ts","sourceRoot":"","sources":["../../src/removePasskeyFromWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAkC,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,wBAAsB,uBAAuB,CAAC,MAAM,EAAE;IACpD,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBhB"}
@@ -12,11 +12,11 @@ async function removePasskeyFromWallet(params) {
12
12
  const keychainId = wallet.keyIds()[0];
13
13
  const keychain = await baseCoin.keychains().get({ id: keychainId });
14
14
  // Verify passphrase before any mutation
15
- const decrypted = (0, sdk_core_1.decryptKeychainPrivateKey)(bitgo, keychain, walletPassphrase);
15
+ const decrypted = await (0, sdk_core_1.decryptKeychainPrivateKeyAsync)(bitgo, keychain, walletPassphrase);
16
16
  if (!decrypted) {
17
17
  throw new Error('Incorrect wallet passphrase. Passkey removal aborted to prevent lockout.');
18
18
  }
19
19
  // No sdk-core abstraction for this endpoint; raw DELETE is required
20
20
  await bitgo.del(bitgo.url(`/key/${keychainId}/webauthndevice/${device.id}`, 2)).result();
21
21
  }
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3ZlUGFzc2tleUZyb21XYWxsZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVtb3ZlUGFzc2tleUZyb21XYWxsZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSwwREEwQkM7QUE3QkQsbURBQTRFO0FBR3JFLEtBQUssVUFBVSx1QkFBdUIsQ0FBQyxNQU03QztJQUNDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsTUFBTSxDQUFDO0lBRTdFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDZixNQUFNLElBQUksS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDOUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sUUFBUSxHQUFHLE1BQU0sUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBRXBFLHdDQUF3QztJQUN4QyxNQUFNLFNBQVMsR0FBRyxJQUFBLG9DQUF5QixFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUMvRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixNQUFNLElBQUksS0FBSyxDQUFDLDBFQUEwRSxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVELG9FQUFvRTtJQUNwRSxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLFVBQVUsbUJBQW1CLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCaXRHb0Jhc2UsIGRlY3J5cHRLZXljaGFpblByaXZhdGVLZXkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBXZWJBdXRobk90cERldmljZSB9IGZyb20gJy4vd2ViQXV0aG5UeXBlcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW1vdmVQYXNza2V5RnJvbVdhbGxldChwYXJhbXM6IHtcbiAgYml0Z286IEJpdEdvQmFzZTtcbiAgY29pbjogc3RyaW5nO1xuICB3YWxsZXRJZDogc3RyaW5nO1xuICBkZXZpY2U6IFdlYkF1dGhuT3RwRGV2aWNlO1xuICB3YWxsZXRQYXNzcGhyYXNlOiBzdHJpbmc7XG59KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYml0Z28sIGNvaW46IGNvaW5OYW1lLCB3YWxsZXRJZCwgZGV2aWNlLCB3YWxsZXRQYXNzcGhyYXNlIH0gPSBwYXJhbXM7XG5cbiAgaWYgKCFkZXZpY2UuaWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RldmljZS5pZCBpcyByZXF1aXJlZCB0byByZW1vdmUgYSBwYXNza2V5IGZyb20gdGhlIHdhbGxldCcpO1xuICB9XG5cbiAgY29uc3QgYmFzZUNvaW4gPSBiaXRnby5jb2luKGNvaW5OYW1lKTtcbiAgY29uc3Qgd2FsbGV0ID0gYXdhaXQgYmFzZUNvaW4ud2FsbGV0cygpLmdldCh7IGlkOiB3YWxsZXRJZCB9KTtcbiAgY29uc3Qga2V5Y2hhaW5JZCA9IHdhbGxldC5rZXlJZHMoKVswXTtcbiAgY29uc3Qga2V5Y2hhaW4gPSBhd2FpdCBiYXNlQ29pbi5rZXljaGFpbnMoKS5nZXQoeyBpZDoga2V5Y2hhaW5JZCB9KTtcblxuICAvLyBWZXJpZnkgcGFzc3BocmFzZSBiZWZvcmUgYW55IG11dGF0aW9uXG4gIGNvbnN0IGRlY3J5cHRlZCA9IGRlY3J5cHRLZXljaGFpblByaXZhdGVLZXkoYml0Z28sIGtleWNoYWluLCB3YWxsZXRQYXNzcGhyYXNlKTtcbiAgaWYgKCFkZWNyeXB0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0luY29ycmVjdCB3YWxsZXQgcGFzc3BocmFzZS4gUGFzc2tleSByZW1vdmFsIGFib3J0ZWQgdG8gcHJldmVudCBsb2Nrb3V0LicpO1xuICB9XG5cbiAgLy8gTm8gc2RrLWNvcmUgYWJzdHJhY3Rpb24gZm9yIHRoaXMgZW5kcG9pbnQ7IHJhdyBERUxFVEUgaXMgcmVxdWlyZWRcbiAgYXdhaXQgYml0Z28uZGVsKGJpdGdvLnVybChgL2tleS8ke2tleWNoYWluSWR9L3dlYmF1dGhuZGV2aWNlLyR7ZGV2aWNlLmlkfWAsIDIpKS5yZXN1bHQoKTtcbn1cbiJdfQ==
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3ZlUGFzc2tleUZyb21XYWxsZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVtb3ZlUGFzc2tleUZyb21XYWxsZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSwwREEwQkM7QUE3QkQsbURBQWlGO0FBRzFFLEtBQUssVUFBVSx1QkFBdUIsQ0FBQyxNQU03QztJQUNDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsTUFBTSxDQUFDO0lBRTdFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDZixNQUFNLElBQUksS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDOUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sUUFBUSxHQUFHLE1BQU0sUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBRXBFLHdDQUF3QztJQUN4QyxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUEseUNBQThCLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzFGLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsMEVBQTBFLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRUQsb0VBQW9FO0lBQ3BFLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsVUFBVSxtQkFBbUIsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJpdEdvQmFzZSwgZGVjcnlwdEtleWNoYWluUHJpdmF0ZUtleUFzeW5jIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgV2ViQXV0aG5PdHBEZXZpY2UgfSBmcm9tICcuL3dlYkF1dGhuVHlwZXMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVtb3ZlUGFzc2tleUZyb21XYWxsZXQocGFyYW1zOiB7XG4gIGJpdGdvOiBCaXRHb0Jhc2U7XG4gIGNvaW46IHN0cmluZztcbiAgd2FsbGV0SWQ6IHN0cmluZztcbiAgZGV2aWNlOiBXZWJBdXRobk90cERldmljZTtcbiAgd2FsbGV0UGFzc3BocmFzZTogc3RyaW5nO1xufSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGJpdGdvLCBjb2luOiBjb2luTmFtZSwgd2FsbGV0SWQsIGRldmljZSwgd2FsbGV0UGFzc3BocmFzZSB9ID0gcGFyYW1zO1xuXG4gIGlmICghZGV2aWNlLmlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdkZXZpY2UuaWQgaXMgcmVxdWlyZWQgdG8gcmVtb3ZlIGEgcGFzc2tleSBmcm9tIHRoZSB3YWxsZXQnKTtcbiAgfVxuXG4gIGNvbnN0IGJhc2VDb2luID0gYml0Z28uY29pbihjb2luTmFtZSk7XG4gIGNvbnN0IHdhbGxldCA9IGF3YWl0IGJhc2VDb2luLndhbGxldHMoKS5nZXQoeyBpZDogd2FsbGV0SWQgfSk7XG4gIGNvbnN0IGtleWNoYWluSWQgPSB3YWxsZXQua2V5SWRzKClbMF07XG4gIGNvbnN0IGtleWNoYWluID0gYXdhaXQgYmFzZUNvaW4ua2V5Y2hhaW5zKCkuZ2V0KHsgaWQ6IGtleWNoYWluSWQgfSk7XG5cbiAgLy8gVmVyaWZ5IHBhc3NwaHJhc2UgYmVmb3JlIGFueSBtdXRhdGlvblxuICBjb25zdCBkZWNyeXB0ZWQgPSBhd2FpdCBkZWNyeXB0S2V5Y2hhaW5Qcml2YXRlS2V5QXN5bmMoYml0Z28sIGtleWNoYWluLCB3YWxsZXRQYXNzcGhyYXNlKTtcbiAgaWYgKCFkZWNyeXB0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0luY29ycmVjdCB3YWxsZXQgcGFzc3BocmFzZS4gUGFzc2tleSByZW1vdmFsIGFib3J0ZWQgdG8gcHJldmVudCBsb2Nrb3V0LicpO1xuICB9XG5cbiAgLy8gTm8gc2RrLWNvcmUgYWJzdHJhY3Rpb24gZm9yIHRoaXMgZW5kcG9pbnQ7IHJhdyBERUxFVEUgaXMgcmVxdWlyZWRcbiAgYXdhaXQgYml0Z28uZGVsKGJpdGdvLnVybChgL2tleS8ke2tleWNoYWluSWR9L3dlYmF1dGhuZGV2aWNlLyR7ZGV2aWNlLmlkfWAsIDIpKS5yZXN1bHQoKTtcbn1cbiJdfQ==
@@ -0,0 +1,12 @@
1
+ export declare const ENTERPRISE_ID = "enterprise-abc";
2
+ export declare const WALLET_ID = "wallet-hot-123";
3
+ export declare const KEYCHAIN_ID = "key-user-001";
4
+ export declare const COIN = "tbtc";
5
+ export declare const EXISTING_PASSPHRASE = "my-existing-passphrase";
6
+ export declare const PRF_OUTPUT: ArrayBuffer;
7
+ export declare const CREDENTIAL_ID = "Y3JlZC1pZC00NTY";
8
+ export declare const DEVICE_MONGO_ID = "device-mongo-id-1";
9
+ export declare const BASE_SALT = "ZqJ64M2dL65zn2-Jxd58SMN2ILc9QjbCFxUTGHd_LC8";
10
+ export declare const REGISTER_CHALLENGE: string;
11
+ export declare const ASSERTION_CHALLENGE: string;
12
+ //# sourceMappingURL=fixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../../../test/integration/helpers/fixtures.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,mBAAmB,CAAC;AAC9C,eAAO,MAAM,SAAS,mBAAmB,CAAC;AAC1C,eAAO,MAAM,WAAW,iBAAiB,CAAC;AAC1C,eAAO,MAAM,IAAI,SAAS,CAAC;AAC3B,eAAO,MAAM,mBAAmB,2BAA2B,CAAC;AAC5D,eAAO,MAAM,UAAU,aAA0E,CAAC;AAClG,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAC/C,eAAO,MAAM,eAAe,sBAAsB,CAAC;AACnD,eAAO,MAAM,SAAS,gDAAgD,CAAC;AACvE,eAAO,MAAM,kBAAkB,QAAqD,CAAC;AACrF,eAAO,MAAM,mBAAmB,QAAwD,CAAC"}