@bitgo-beta/passkey-crypto 0.0.1-beta.4 → 0.0.1-beta.400

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 (63) hide show
  1. package/dist/src/attachPasskeyToWallet.d.ts +11 -0
  2. package/dist/src/attachPasskeyToWallet.d.ts.map +1 -0
  3. package/dist/src/attachPasskeyToWallet.js +68 -0
  4. package/dist/src/derivePasskeyPrfKey.d.ts +14 -0
  5. package/dist/src/derivePasskeyPrfKey.d.ts.map +1 -0
  6. package/dist/src/derivePasskeyPrfKey.js +68 -0
  7. package/dist/src/index.d.ts +8 -3
  8. package/dist/src/index.d.ts.map +1 -1
  9. package/dist/src/index.js +16 -6
  10. package/dist/src/prfHelpers.d.ts.map +1 -1
  11. package/dist/src/prfHelpers.js +19 -4
  12. package/dist/src/registerPasskey.d.ts +9 -0
  13. package/dist/src/registerPasskey.d.ts.map +1 -0
  14. package/dist/src/registerPasskey.js +93 -0
  15. package/dist/src/removePasskeyFromAccount.d.ts +11 -0
  16. package/dist/src/removePasskeyFromAccount.d.ts.map +1 -0
  17. package/dist/src/removePasskeyFromAccount.js +15 -0
  18. package/dist/src/removePasskeyFromWallet.d.ts +9 -0
  19. package/dist/src/removePasskeyFromWallet.d.ts.map +1 -0
  20. package/dist/src/removePasskeyFromWallet.js +22 -0
  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 +152 -0
  33. package/dist/test/unit/attachPasskeyToWallet.test.d.ts +2 -0
  34. package/dist/test/unit/attachPasskeyToWallet.test.d.ts.map +1 -0
  35. package/dist/test/unit/attachPasskeyToWallet.test.js +224 -0
  36. package/dist/test/unit/base64url.test.d.ts +2 -0
  37. package/dist/test/unit/base64url.test.d.ts.map +1 -0
  38. package/dist/test/unit/base64url.test.js +75 -0
  39. package/dist/test/unit/deriveEnterpriseSalt.test.js +8 -4
  40. package/dist/test/unit/derivePasskeyPrfKey.test.d.ts +2 -0
  41. package/dist/test/unit/derivePasskeyPrfKey.test.d.ts.map +1 -0
  42. package/dist/test/unit/derivePasskeyPrfKey.test.js +152 -0
  43. package/dist/test/unit/registerPasskey.test.d.ts +2 -0
  44. package/dist/test/unit/registerPasskey.test.d.ts.map +1 -0
  45. package/dist/test/unit/registerPasskey.test.js +155 -0
  46. package/dist/test/unit/removePasskeyFromAccount.test.d.ts +2 -0
  47. package/dist/test/unit/removePasskeyFromAccount.test.d.ts.map +1 -0
  48. package/dist/test/unit/removePasskeyFromAccount.test.js +88 -0
  49. package/dist/test/unit/removePasskeyFromWallet.test.d.ts +2 -0
  50. package/dist/test/unit/removePasskeyFromWallet.test.d.ts.map +1 -0
  51. package/dist/test/unit/removePasskeyFromWallet.test.js +170 -0
  52. package/dist/tsconfig.tsbuildinfo +1 -1
  53. package/package.json +8 -6
  54. package/LICENSE +0 -191
  55. package/dist/src/deriveEnterpriseSalt.d.ts +0 -12
  56. package/dist/src/deriveEnterpriseSalt.d.ts.map +0 -1
  57. package/dist/src/deriveEnterpriseSalt.js +0 -56
  58. package/dist/src/derivePassword.d.ts +0 -11
  59. package/dist/src/derivePassword.d.ts.map +0 -1
  60. package/dist/src/derivePassword.js +0 -16
  61. package/dist/src/webAuthnTypes.d.ts +0 -18
  62. package/dist/src/webAuthnTypes.d.ts.map +0 -1
  63. package/dist/src/webAuthnTypes.js +0 -3
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.makeMockBitGo = makeMockBitGo;
37
+ const sinon = __importStar(require("sinon"));
38
+ const fixtures_1 = require("./fixtures");
39
+ // Use sjcl directly — same underlying library as bitgo.encrypt/decrypt
40
+ const sjcl = require('sjcl');
41
+ function realEncrypt({ password, input }) {
42
+ return JSON.stringify(sjcl.encrypt(password, input));
43
+ }
44
+ function realDecrypt({ password, input }) {
45
+ return sjcl.decrypt(password, typeof input === 'string' ? JSON.parse(input) : input);
46
+ }
47
+ function makeMockBitGo(initialEncryptedPrv) {
48
+ const keychainState = {
49
+ id: fixtures_1.KEYCHAIN_ID,
50
+ encryptedPrv: initialEncryptedPrv,
51
+ webauthnDevices: undefined,
52
+ };
53
+ // Build the mock request chain: bitgo.get(url).result() etc.
54
+ function makeRequest(result) {
55
+ const req = {
56
+ send: sinon.stub().returnsThis(),
57
+ result: sinon.stub().resolves(result),
58
+ };
59
+ return req;
60
+ }
61
+ // Stub the wallet
62
+ const mockWallet = {
63
+ type: sinon.stub().returns('hot'),
64
+ toJSON: sinon.stub().returns({ enterprise: fixtures_1.ENTERPRISE_ID }),
65
+ keyIds: sinon.stub().returns([fixtures_1.KEYCHAIN_ID]),
66
+ getEncryptedUserKeychain: sinon.stub().callsFake(async () => ({ ...keychainState })),
67
+ };
68
+ // Stub baseCoin
69
+ const mockBaseCoin = {
70
+ wallets: sinon.stub().returns({
71
+ get: sinon.stub().resolves(mockWallet),
72
+ }),
73
+ keychains: sinon.stub().returns({
74
+ get: sinon.stub().callsFake(async () => ({ ...keychainState })),
75
+ }),
76
+ };
77
+ // Build the bitgo stub
78
+ const bitgo = {
79
+ coin: sinon.stub().returns(mockBaseCoin),
80
+ url: (path, version) => `https://app.bitgo-test.com/api/v${version ?? 2}${path}`,
81
+ encrypt: (params) => realEncrypt(params),
82
+ decrypt: (params) => realDecrypt(params),
83
+ get: sinon.stub().callsFake((url) => {
84
+ if (url.includes('/user/otp/webauthn/register')) {
85
+ return makeRequest({
86
+ challenge: fixtures_1.REGISTER_CHALLENGE,
87
+ baseSalt: fixtures_1.BASE_SALT,
88
+ rp: { name: 'BitGo', id: 'bitgo.com' },
89
+ user: { id: Buffer.from('user-id'), name: 'test@bitgo.com', displayName: 'Test User' },
90
+ pubKeyCredParams: [{ type: 'public-key', alg: -7 }],
91
+ });
92
+ }
93
+ if (url.includes('/user/otp/webauthn/assertion')) {
94
+ return makeRequest({ challenge: fixtures_1.ASSERTION_CHALLENGE });
95
+ }
96
+ return makeRequest({});
97
+ }),
98
+ put: sinon.stub().callsFake((url) => {
99
+ // PUT /user/otp — register device
100
+ if (url.includes('/user/otp') && !url.includes('/key/')) {
101
+ return {
102
+ send: sinon.stub().returnsThis(),
103
+ result: sinon.stub().resolves({
104
+ user: {
105
+ otpDevices: [
106
+ {
107
+ id: fixtures_1.DEVICE_MONGO_ID,
108
+ credentialId: fixtures_1.CREDENTIAL_ID,
109
+ prfSalt: fixtures_1.BASE_SALT,
110
+ isPasskey: true,
111
+ extensions: { prf: true },
112
+ },
113
+ ],
114
+ },
115
+ }),
116
+ };
117
+ }
118
+ // PUT /{coin}/key/{keychainId} — attach webauthnInfo
119
+ if (url.includes('/key/')) {
120
+ return {
121
+ send: sinon.stub().callsFake((body) => ({
122
+ result: sinon.stub().callsFake(async () => {
123
+ // Update keychainState with webauthnInfo — simulates server persisting it
124
+ if (body?.webauthnInfo) {
125
+ keychainState.webauthnDevices = [
126
+ {
127
+ authenticatorInfo: { credID: fixtures_1.CREDENTIAL_ID },
128
+ prfSalt: body.webauthnInfo.prfSalt,
129
+ id: fixtures_1.DEVICE_MONGO_ID,
130
+ encryptedPrv: body.webauthnInfo.encryptedPrv,
131
+ },
132
+ ];
133
+ keychainState.encryptedPrv = body.webauthnInfo.encryptedPrv;
134
+ }
135
+ return { ...keychainState };
136
+ }),
137
+ })),
138
+ };
139
+ }
140
+ return { send: sinon.stub().returnsThis(), result: sinon.stub().resolves({}) };
141
+ }),
142
+ del: sinon.stub().callsFake((_url) => {
143
+ return { result: sinon.stub().resolves({}) };
144
+ }),
145
+ };
146
+ return { bitgo, keychainState, wallet: mockWallet, encrypt: realEncrypt, decrypt: realDecrypt };
147
+ }
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja0JpdEdvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC9pbnRlZ3JhdGlvbi9oZWxwZXJzL21vY2tCaXRHby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlDQSxzQ0E4R0M7QUF2SkQsNkNBQStCO0FBQy9CLHlDQVFvQjtBQUVwQix1RUFBdUU7QUFDdkUsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRTdCLFNBQVMsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBdUM7SUFDM0UsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBdUM7SUFDM0UsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZGLENBQUM7QUFxQkQsU0FBZ0IsYUFBYSxDQUFDLG1CQUEyQjtJQUN2RCxNQUFNLGFBQWEsR0FBa0I7UUFDbkMsRUFBRSxFQUFFLHNCQUFXO1FBQ2YsWUFBWSxFQUFFLG1CQUFtQjtRQUNqQyxlQUFlLEVBQUUsU0FBUztLQUMzQixDQUFDO0lBRUYsNkRBQTZEO0lBQzdELFNBQVMsV0FBVyxDQUFDLE1BQWU7UUFDbEMsTUFBTSxHQUFHLEdBQUc7WUFDVixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtZQUNoQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7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QUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDOzRCQUM5RCxDQUFDOzRCQUNELE9BQU8sRUFBRSxHQUFHLGFBQWEsRUFBRSxDQUFDO3dCQUM5QixDQUFDLENBQUM7cUJBQ0gsQ0FBQyxDQUFDO2lCQUNKLENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNqRixDQUFDLENBQUM7UUFFRixHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQVksRUFBRSxFQUFFO1lBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQy9DLENBQUMsQ0FBQztLQUNILENBQUM7SUFFRixPQUFPLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDO0FBQ2xHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQge1xuICBBU1NFUlRJT05fQ0hBTExFTkdFLFxuICBCQVNFX1NBTFQsXG4gIENSRURFTlRJQUxfSUQsXG4gIERFVklDRV9NT05HT19JRCxcbiAgRU5URVJQUklTRV9JRCxcbiAgS0VZQ0hBSU5fSUQsXG4gIFJFR0lTVEVSX0NIQUxMRU5HRSxcbn0gZnJvbSAnLi9maXh0dXJlcyc7XG5cbi8vIFVzZSBzamNsIGRpcmVjdGx5IOKAlCBzYW1lIHVuZGVybHlpbmcgbGlicmFyeSBhcyBiaXRnby5lbmNyeXB0L2RlY3J5cHRcbmNvbnN0IHNqY2wgPSByZXF1aXJlKCdzamNsJyk7XG5cbmZ1bmN0aW9uIHJlYWxFbmNyeXB0KHsgcGFzc3dvcmQsIGlucHV0IH06IHsgcGFzc3dvcmQ6IHN0cmluZzsgaW5wdXQ6IHN0cmluZyB9KTogc3RyaW5nIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHNqY2wuZW5jcnlwdChwYXNzd29yZCwgaW5wdXQpKTtcbn1cblxuZnVuY3Rpb24gcmVhbERlY3J5cHQoeyBwYXNzd29yZCwgaW5wdXQgfTogeyBwYXNzd29yZDogc3RyaW5nOyBpbnB1dDogc3RyaW5nIH0pOiBzdHJpbmcge1xuICByZXR1cm4gc2pjbC5kZWNyeXB0KHBhc3N3b3JkLCB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShpbnB1dCkgOiBpbnB1dCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgS2V5Y2hhaW5TdGF0ZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGVuY3J5cHRlZFBydjogc3RyaW5nO1xuICB3ZWJhdXRobkRldmljZXM/OiBBcnJheTx7XG4gICAgYXV0aGVudGljYXRvckluZm86IHsgY3JlZElEOiBzdHJpbmcgfTtcbiAgICBwcmZTYWx0OiBzdHJpbmc7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgZW5jcnlwdGVkUHJ2Pzogc3RyaW5nO1xuICB9Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb2NrQml0R28ge1xuICBiaXRnbzogYW55O1xuICBrZXljaGFpblN0YXRlOiBLZXljaGFpblN0YXRlO1xuICB3YWxsZXQ6IGFueTtcbiAgZW5jcnlwdDogKHBhcmFtczogeyBwYXNzd29yZDogc3RyaW5nOyBpbnB1dDogc3RyaW5nIH0pID0+IHN0cmluZztcbiAgZGVjcnlwdDogKHBhcmFtczogeyBwYXNzd29yZDogc3RyaW5nOyBpbnB1dDogc3RyaW5nIH0pID0+IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VNb2NrQml0R28oaW5pdGlhbEVuY3J5cHRlZFBydjogc3RyaW5nKTogTW9ja0JpdEdvIHtcbiAgY29uc3Qga2V5Y2hhaW5TdGF0ZTogS2V5Y2hhaW5TdGF0ZSA9IHtcbiAgICBpZDogS0VZQ0hBSU5fSUQsXG4gICAgZW5jcnlwdGVkUHJ2OiBpbml0aWFsRW5jcnlwdGVkUHJ2LFxuICAgIHdlYmF1dGhuRGV2aWNlczogdW5kZWZpbmVkLFxuICB9O1xuXG4gIC8vIEJ1aWxkIHRoZSBtb2NrIHJlcXVlc3QgY2hhaW46IGJpdGdvLmdldCh1cmwpLnJlc3VsdCgpIGV0Yy5cbiAgZnVuY3Rpb24gbWFrZVJlcXVlc3QocmVzdWx0OiB1bmtub3duKSB7XG4gICAgY29uc3QgcmVxID0ge1xuICAgICAgc2VuZDogc2lub24uc3R1YigpLnJldHVybnNUaGlzKCksXG4gICAgICByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhyZXN1bHQpLFxuICAgIH07XG4gICAgcmV0dXJuIHJlcTtcbiAgfVxuXG4gIC8vIFN0dWIgdGhlIHdhbGxldFxuICBjb25zdCBtb2NrV2FsbGV0ID0ge1xuICAgIHR5cGU6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdob3QnKSxcbiAgICB0b0pTT046IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHsgZW50ZXJwcmlzZTogRU5URVJQUklTRV9JRCB9KSxcbiAgICBrZXlJZHM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKFtLRVlDSEFJTl9JRF0pLFxuICAgIGdldEVuY3J5cHRlZFVzZXJLZXljaGFpbjogc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAoKSA9PiAoeyAuLi5rZXljaGFpblN0YXRlIH0pKSxcbiAgfTtcblxuICAvLyBTdHViIGJhc2VDb2luXG4gIGNvbnN0IG1vY2tCYXNlQ29pbiA9IHtcbiAgICB3YWxsZXRzOiBzaW5vbi5zdHViKCkucmV0dXJucyh7XG4gICAgICBnZXQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhtb2NrV2FsbGV0KSxcbiAgICB9KSxcbiAgICBrZXljaGFpbnM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgIGdldDogc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAoKSA9PiAoeyAuLi5rZXljaGFpblN0YXRlIH0pKSxcbiAgICB9KSxcbiAgfTtcblxuICAvLyBCdWlsZCB0aGUgYml0Z28gc3R1YlxuICBjb25zdCBiaXRnbzogYW55ID0ge1xuICAgIGNvaW46IHNpbm9uLnN0dWIoKS5yZXR1cm5zKG1vY2tCYXNlQ29pbiksXG5cbiAgICB1cmw6IChwYXRoOiBzdHJpbmcsIHZlcnNpb24/OiBudW1iZXIpID0+IGBodHRwczovL2FwcC5iaXRnby10ZXN0LmNvbS9hcGkvdiR7dmVyc2lvbiA/PyAyfSR7cGF0aH1gLFxuXG4gICAgZW5jcnlwdDogKHBhcmFtczogeyBwYXNzd29yZDogc3RyaW5nOyBpbnB1dDogc3RyaW5nIH0pID0+IHJlYWxFbmNyeXB0KHBhcmFtcyksXG4gICAgZGVjcnlwdDogKHBhcmFtczogeyBwYXNzd29yZDogc3RyaW5nOyBpbnB1dDogc3RyaW5nIH0pID0+IHJlYWxEZWNyeXB0KHBhcmFtcyksXG5cbiAgICBnZXQ6IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKHVybDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAodXJsLmluY2x1ZGVzKCcvdXNlci9vdHAvd2ViYXV0aG4vcmVnaXN0ZXInKSkge1xuICAgICAgICByZXR1cm4gbWFrZVJlcXVlc3Qoe1xuICAgICAgICAgIGNoYWxsZW5nZTogUkVHSVNURVJfQ0hBTExFTkdFLFxuICAgICAgICAgIGJhc2VTYWx0OiBCQVNFX1NBTFQsXG4gICAgICAgICAgcnA6IHsgbmFtZTogJ0JpdEdvJywgaWQ6ICdiaXRnby5jb20nIH0sXG4gICAgICAgICAgdXNlcjogeyBpZDogQnVmZmVyLmZyb20oJ3VzZXItaWQnKSwgbmFtZTogJ3Rlc3RAYml0Z28uY29tJywgZGlzcGxheU5hbWU6ICdUZXN0IFVzZXInIH0sXG4gICAgICAgICAgcHViS2V5Q3JlZFBhcmFtczogW3sgdHlwZTogJ3B1YmxpYy1rZXknLCBhbGc6IC03IH1dLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh1cmwuaW5jbHVkZXMoJy91c2VyL290cC93ZWJhdXRobi9hc3NlcnRpb24nKSkge1xuICAgICAgICByZXR1cm4gbWFrZVJlcXVlc3QoeyBjaGFsbGVuZ2U6IEFTU0VSVElPTl9DSEFMTEVOR0UgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWFrZVJlcXVlc3Qoe30pO1xuICAgIH0pLFxuXG4gICAgcHV0OiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKCh1cmw6IHN0cmluZykgPT4ge1xuICAgICAgLy8gUFVUIC91c2VyL290cCDigJQgcmVnaXN0ZXIgZGV2aWNlXG4gICAgICBpZiAodXJsLmluY2x1ZGVzKCcvdXNlci9vdHAnKSAmJiAhdXJsLmluY2x1ZGVzKCcva2V5LycpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2VuZDogc2lub24uc3R1YigpLnJldHVybnNUaGlzKCksXG4gICAgICAgICAgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoe1xuICAgICAgICAgICAgdXNlcjoge1xuICAgICAgICAgICAgICBvdHBEZXZpY2VzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaWQ6IERFVklDRV9NT05HT19JRCxcbiAgICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxJZDogQ1JFREVOVElBTF9JRCxcbiAgICAgICAgICAgICAgICAgIHByZlNhbHQ6IEJBU0VfU0FMVCxcbiAgICAgICAgICAgICAgICAgIGlzUGFzc2tleTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnM6IHsgcHJmOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBQVVQgL3tjb2lufS9rZXkve2tleWNoYWluSWR9IOKAlCBhdHRhY2ggd2ViYXV0aG5JbmZvXG4gICAgICBpZiAodXJsLmluY2x1ZGVzKCcva2V5LycpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2VuZDogc2lub24uc3R1YigpLmNhbGxzRmFrZSgoYm9keTogYW55KSA9PiAoe1xuICAgICAgICAgICAgcmVzdWx0OiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgLy8gVXBkYXRlIGtleWNoYWluU3RhdGUgd2l0aCB3ZWJhdXRobkluZm8g4oCUIHNpbXVsYXRlcyBzZXJ2ZXIgcGVyc2lzdGluZyBpdFxuICAgICAgICAgICAgICBpZiAoYm9keT8ud2ViYXV0aG5JbmZvKSB7XG4gICAgICAgICAgICAgICAga2V5Y2hhaW5TdGF0ZS53ZWJhdXRobkRldmljZXMgPSBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0b3JJbmZvOiB7IGNyZWRJRDogQ1JFREVOVElBTF9JRCB9LFxuICAgICAgICAgICAgICAgICAgICBwcmZTYWx0OiBib2R5LndlYmF1dGhuSW5mby5wcmZTYWx0LFxuICAgICAgICAgICAgICAgICAgICBpZDogREVWSUNFX01PTkdPX0lELFxuICAgICAgICAgICAgICAgICAgICBlbmNyeXB0ZWRQcnY6IGJvZHkud2ViYXV0aG5JbmZvLmVuY3J5cHRlZFBydixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBrZXljaGFpblN0YXRlLmVuY3J5cHRlZFBydiA9IGJvZHkud2ViYXV0aG5JbmZvLmVuY3J5cHRlZFBydjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4geyAuLi5rZXljaGFpblN0YXRlIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4geyBzZW5kOiBzaW5vbi5zdHViKCkucmV0dXJuc1RoaXMoKSwgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoe30pIH07XG4gICAgfSksXG5cbiAgICBkZWw6IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKF91cmw6IHN0cmluZykgPT4ge1xuICAgICAgcmV0dXJuIHsgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoe30pIH07XG4gICAgfSksXG4gIH07XG5cbiAgcmV0dXJuIHsgYml0Z28sIGtleWNoYWluU3RhdGUsIHdhbGxldDogbW9ja1dhbGxldCwgZW5jcnlwdDogcmVhbEVuY3J5cHQsIGRlY3J5cHQ6IHJlYWxEZWNyeXB0IH07XG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ import { type WebAuthnProvider } from '@bitgo-beta/sdk-core';
2
+ export declare function makeMockProvider(): WebAuthnProvider & {
3
+ lastEvalByCredential: Record<string, string> | undefined;
4
+ };
5
+ //# sourceMappingURL=mockProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockProvider.d.ts","sourceRoot":"","sources":["../../../../test/integration/helpers/mockProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkD,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG7G,wBAAgB,gBAAgB,IAAI,gBAAgB,GAAG;IAAE,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;CAAE,CAmClH"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeMockProvider = makeMockProvider;
4
+ const fixtures_1 = require("./fixtures");
5
+ function makeMockProvider() {
6
+ let lastEvalByCredential;
7
+ const provider = {
8
+ get lastEvalByCredential() {
9
+ return lastEvalByCredential;
10
+ },
11
+ async create(options) {
12
+ return {
13
+ id: fixtures_1.CREDENTIAL_ID,
14
+ rawId: Buffer.from(fixtures_1.CREDENTIAL_ID, 'base64'),
15
+ type: 'public-key',
16
+ response: {
17
+ attestationObject: new ArrayBuffer(0),
18
+ clientDataJSON: new ArrayBuffer(0),
19
+ getTransports: () => [],
20
+ },
21
+ authenticatorAttachment: 'platform',
22
+ getClientExtensionResults: () => ({ prf: { enabled: true } }),
23
+ toJSON: () => ({}),
24
+ };
25
+ },
26
+ async get(options) {
27
+ lastEvalByCredential = options.evalByCredential;
28
+ return {
29
+ prfResult: fixtures_1.PRF_OUTPUT,
30
+ credentialId: fixtures_1.CREDENTIAL_ID,
31
+ otpCode: '123456',
32
+ };
33
+ },
34
+ };
35
+ return provider;
36
+ }
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja1Byb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC9pbnRlZ3JhdGlvbi9oZWxwZXJzL21vY2tQcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBLDRDQW1DQztBQXJDRCx5Q0FBdUQ7QUFFdkQsU0FBZ0IsZ0JBQWdCO0lBQzlCLElBQUksb0JBQXdELENBQUM7SUFFN0QsTUFBTSxRQUFRLEdBQW9GO1FBQ2hHLElBQUksb0JBQW9CO1lBQ3RCLE9BQU8sb0JBQW9CLENBQUM7UUFDOUIsQ0FBQztRQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBMkM7WUFDdEQsT0FBTztnQkFDTCxFQUFFLEVBQUUsd0JBQWE7Z0JBQ2pCLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLHdCQUFhLEVBQUUsUUFBUSxDQUFDO2dCQUMzQyxJQUFJLEVBQUUsWUFBWTtnQkFDbEIsUUFBUSxFQUFFO29CQUNSLGlCQUFpQixFQUFFLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQztvQkFDckMsY0FBYyxFQUFFLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQztvQkFDbEMsYUFBYSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7aUJBQ3hCO2dCQUNELHVCQUF1QixFQUFFLFVBQVU7Z0JBQ25DLHlCQUF5QixFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDN0QsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBOEIsQ0FBQTthQUNaLENBQUM7UUFDdEMsQ0FBQztRQUVELEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBMEI7WUFDbEMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDO1lBQ2hELE9BQU87Z0JBQ0wsU0FBUyxFQUFFLHFCQUFVO2dCQUNyQixZQUFZLEVBQUUsd0JBQWE7Z0JBQzNCLE9BQU8sRUFBRSxRQUFRO2FBQ2xCLENBQUM7UUFDSixDQUFDO0tBQ0YsQ0FBQztJQUVGLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIFBhc3NrZXlBdXRoUmVzdWx0LCB0eXBlIFBhc3NrZXlHZXRPcHRpb25zLCB0eXBlIFdlYkF1dGhuUHJvdmlkZXIgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBDUkVERU5USUFMX0lELCBQUkZfT1VUUFVUIH0gZnJvbSAnLi9maXh0dXJlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlTW9ja1Byb3ZpZGVyKCk6IFdlYkF1dGhuUHJvdmlkZXIgJiB7IGxhc3RFdmFsQnlDcmVkZW50aWFsOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkIH0ge1xuICBsZXQgbGFzdEV2YWxCeUNyZWRlbnRpYWw6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3QgcHJvdmlkZXI6IFdlYkF1dGhuUHJvdmlkZXIgJiB7IGxhc3RFdmFsQnlDcmVkZW50aWFsOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkIH0gPSB7XG4gICAgZ2V0IGxhc3RFdmFsQnlDcmVkZW50aWFsKCkge1xuICAgICAgcmV0dXJuIGxhc3RFdmFsQnlDcmVkZW50aWFsO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGUob3B0aW9uczogUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyk6IFByb21pc2U8UHVibGljS2V5Q3JlZGVudGlhbD4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IENSRURFTlRJQUxfSUQsXG4gICAgICAgIHJhd0lkOiBCdWZmZXIuZnJvbShDUkVERU5USUFMX0lELCAnYmFzZTY0JyksXG4gICAgICAgIHR5cGU6ICdwdWJsaWMta2V5JyxcbiAgICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgICBhdHRlc3RhdGlvbk9iamVjdDogbmV3IEFycmF5QnVmZmVyKDApLFxuICAgICAgICAgIGNsaWVudERhdGFKU09OOiBuZXcgQXJyYXlCdWZmZXIoMCksXG4gICAgICAgICAgZ2V0VHJhbnNwb3J0czogKCkgPT4gW10sXG4gICAgICAgIH0sXG4gICAgICAgIGF1dGhlbnRpY2F0b3JBdHRhY2htZW50OiAncGxhdGZvcm0nLFxuICAgICAgICBnZXRDbGllbnRFeHRlbnNpb25SZXN1bHRzOiAoKSA9PiAoeyBwcmY6IHsgZW5hYmxlZDogdHJ1ZSB9IH0pLFxuICAgICAgICB0b0pTT046ICgpID0+ICh7fSBhcyBQdWJsaWNLZXlDcmVkZW50aWFsSlNPTiksXG4gICAgICB9IGFzIHVua25vd24gYXMgUHVibGljS2V5Q3JlZGVudGlhbDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0KG9wdGlvbnM6IFBhc3NrZXlHZXRPcHRpb25zKTogUHJvbWlzZTxQYXNza2V5QXV0aFJlc3VsdD4ge1xuICAgICAgbGFzdEV2YWxCeUNyZWRlbnRpYWwgPSBvcHRpb25zLmV2YWxCeUNyZWRlbnRpYWw7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcmZSZXN1bHQ6IFBSRl9PVVRQVVQsXG4gICAgICAgIGNyZWRlbnRpYWxJZDogQ1JFREVOVElBTF9JRCxcbiAgICAgICAgb3RwQ29kZTogJzEyMzQ1NicsXG4gICAgICB9O1xuICAgIH0sXG4gIH07XG5cbiAgcmV0dXJuIHByb3ZpZGVyO1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=passkeyLifecycle.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passkeyLifecycle.test.d.ts","sourceRoot":"","sources":["../../../test/integration/passkeyLifecycle.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const assert = __importStar(require("assert"));
37
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
38
+ const registerPasskey_1 = require("../../src/registerPasskey");
39
+ const attachPasskeyToWallet_1 = require("../../src/attachPasskeyToWallet");
40
+ const derivePasskeyPrfKey_1 = require("../../src/derivePasskeyPrfKey");
41
+ const removePasskeyFromWallet_1 = require("../../src/removePasskeyFromWallet");
42
+ const removePasskeyFromAccount_1 = require("../../src/removePasskeyFromAccount");
43
+ const mockBitGo_1 = require("./helpers/mockBitGo");
44
+ const mockProvider_1 = require("./helpers/mockProvider");
45
+ const fixtures_1 = require("./helpers/fixtures");
46
+ // Use sjcl directly for round-trip encryption tests — same crypto as mockBitGo
47
+ const sjcl = require('sjcl');
48
+ const sjclEncrypt = (password, input) => JSON.stringify(sjcl.encrypt(password, input));
49
+ const sjclDecrypt = (password, input) => sjcl.decrypt(password, JSON.parse(input));
50
+ describe('passkey-crypto integration', function () {
51
+ let initialEncryptedPrv;
52
+ const PRIVATE_KEY = 'xprv-test-private-key-12345';
53
+ before(function () {
54
+ // Encrypt the private key with the existing passphrase (simulates what the server stores)
55
+ initialEncryptedPrv = sjclEncrypt(fixtures_1.EXISTING_PASSPHRASE, PRIVATE_KEY);
56
+ });
57
+ describe('register → attach', function () {
58
+ it('re-encrypts the private key under the PRF-derived password', async function () {
59
+ const { bitgo, keychainState } = (0, mockBitGo_1.makeMockBitGo)(initialEncryptedPrv);
60
+ const provider = (0, mockProvider_1.makeMockProvider)();
61
+ const device = await (0, registerPasskey_1.registerPasskey)({ bitgo, provider, label: 'test-key' });
62
+ assert.strictEqual(device.credentialId, fixtures_1.CREDENTIAL_ID);
63
+ assert.strictEqual(device.prfSupported, true);
64
+ await (0, attachPasskeyToWallet_1.attachPasskeyToWallet)({
65
+ bitgo,
66
+ coin: fixtures_1.COIN,
67
+ walletId: fixtures_1.WALLET_ID,
68
+ device,
69
+ existingPassphrase: fixtures_1.EXISTING_PASSPHRASE,
70
+ provider,
71
+ });
72
+ // Verify encryptedPrv round-trips with the PRF-derived password
73
+ const decrypted = sjclDecrypt((0, sdk_core_1.derivePassword)(fixtures_1.PRF_OUTPUT), keychainState.encryptedPrv);
74
+ assert.strictEqual(decrypted, PRIVATE_KEY);
75
+ // prfSalt stored in webauthnInfo must be valid base64url
76
+ assert.ok(keychainState.webauthnDevices);
77
+ assert.match(keychainState.webauthnDevices[0].prfSalt, /^[A-Za-z0-9\-_]+$/);
78
+ });
79
+ });
80
+ describe('attach → derivePasskeyPrfKey', function () {
81
+ it('derives the same passphrase used to re-encrypt during attach', async function () {
82
+ const { bitgo, keychainState, wallet } = (0, mockBitGo_1.makeMockBitGo)(initialEncryptedPrv);
83
+ const provider = (0, mockProvider_1.makeMockProvider)();
84
+ const device = { id: fixtures_1.DEVICE_MONGO_ID, credentialId: fixtures_1.CREDENTIAL_ID, prfSalt: fixtures_1.BASE_SALT, isPasskey: true };
85
+ await (0, attachPasskeyToWallet_1.attachPasskeyToWallet)({
86
+ bitgo,
87
+ coin: fixtures_1.COIN,
88
+ walletId: fixtures_1.WALLET_ID,
89
+ device,
90
+ existingPassphrase: fixtures_1.EXISTING_PASSPHRASE,
91
+ provider,
92
+ });
93
+ const derivedPassphrase = await (0, derivePasskeyPrfKey_1.derivePasskeyPrfKey)({ bitgo, wallet, provider });
94
+ // Same passphrase as what attach used — decrypts the stored key
95
+ assert.strictEqual(derivedPassphrase, (0, sdk_core_1.derivePassword)(fixtures_1.PRF_OUTPUT));
96
+ assert.strictEqual(sjclDecrypt(derivedPassphrase, keychainState.encryptedPrv), PRIVATE_KEY);
97
+ });
98
+ });
99
+ describe('full lifecycle (register → attach → derive → remove)', function () {
100
+ it('completes all steps and hits both DEL endpoints', async function () {
101
+ const { bitgo, wallet } = (0, mockBitGo_1.makeMockBitGo)(initialEncryptedPrv);
102
+ const provider = (0, mockProvider_1.makeMockProvider)();
103
+ const device = await (0, registerPasskey_1.registerPasskey)({ bitgo, provider, label: 'lifecycle-key' });
104
+ await (0, attachPasskeyToWallet_1.attachPasskeyToWallet)({
105
+ bitgo,
106
+ coin: fixtures_1.COIN,
107
+ walletId: fixtures_1.WALLET_ID,
108
+ device,
109
+ existingPassphrase: fixtures_1.EXISTING_PASSPHRASE,
110
+ provider,
111
+ });
112
+ const passphrase = await (0, derivePasskeyPrfKey_1.derivePasskeyPrfKey)({ bitgo, wallet, provider });
113
+ await (0, removePasskeyFromWallet_1.removePasskeyFromWallet)({ bitgo, coin: fixtures_1.COIN, walletId: fixtures_1.WALLET_ID, device, walletPassphrase: passphrase });
114
+ await (0, removePasskeyFromAccount_1.removePasskeyFromAccount)({ bitgo, device });
115
+ const delUrls = bitgo.del.args.map((a) => a[0]);
116
+ assert.ok(delUrls.some((url) => url.includes(`/key/${fixtures_1.KEYCHAIN_ID}/webauthndevice/${fixtures_1.DEVICE_MONGO_ID}`)));
117
+ assert.ok(delUrls.some((url) => url.includes(`/user/otp/${fixtures_1.DEVICE_MONGO_ID}`)));
118
+ });
119
+ });
120
+ describe('PRF salt derivation wiring', function () {
121
+ it('passes deriveEnterpriseSalt output as the eval salt in attachPasskeyToWallet', async function () {
122
+ const { bitgo } = (0, mockBitGo_1.makeMockBitGo)(initialEncryptedPrv);
123
+ const provider = (0, mockProvider_1.makeMockProvider)();
124
+ const device = { id: fixtures_1.DEVICE_MONGO_ID, credentialId: fixtures_1.CREDENTIAL_ID, prfSalt: fixtures_1.BASE_SALT, isPasskey: true };
125
+ await (0, attachPasskeyToWallet_1.attachPasskeyToWallet)({
126
+ bitgo,
127
+ coin: fixtures_1.COIN,
128
+ walletId: fixtures_1.WALLET_ID,
129
+ device,
130
+ existingPassphrase: fixtures_1.EXISTING_PASSPHRASE,
131
+ provider,
132
+ });
133
+ assert.strictEqual(provider.lastEvalByCredential?.[fixtures_1.CREDENTIAL_ID], (0, sdk_core_1.deriveEnterpriseSalt)(fixtures_1.BASE_SALT, fixtures_1.ENTERPRISE_ID));
134
+ });
135
+ });
136
+ describe('error propagation', function () {
137
+ it('aborts removePasskeyFromWallet and does not DEL when passphrase is wrong', async function () {
138
+ const { bitgo } = (0, mockBitGo_1.makeMockBitGo)(initialEncryptedPrv);
139
+ const device = { id: fixtures_1.DEVICE_MONGO_ID, credentialId: fixtures_1.CREDENTIAL_ID, prfSalt: fixtures_1.BASE_SALT, isPasskey: true };
140
+ // Uses real sjcl decrypt — wrong passphrase genuinely fails decryptKeychainPrivateKey
141
+ await assert.rejects(() => (0, removePasskeyFromWallet_1.removePasskeyFromWallet)({
142
+ bitgo,
143
+ coin: fixtures_1.COIN,
144
+ walletId: fixtures_1.WALLET_ID,
145
+ device,
146
+ walletPassphrase: 'wrong-passphrase',
147
+ }), /Incorrect wallet passphrase/);
148
+ assert.strictEqual(bitgo.del.callCount, 0);
149
+ });
150
+ });
151
+ });
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc2tleUxpZmVjeWNsZS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC9pbnRlZ3JhdGlvbi9wYXNza2V5TGlmZWN5Y2xlLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsbURBQTRFO0FBQzVFLCtEQUE0RDtBQUM1RCwyRUFBd0U7QUFDeEUsdUVBQW9FO0FBQ3BFLCtFQUE0RTtBQUM1RSxpRkFBOEU7QUFDOUUsbURBQW9EO0FBQ3BELHlEQUEwRDtBQUMxRCxpREFVNEI7QUFFNUIsK0VBQStFO0FBQy9FLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3QixNQUFNLFdBQVcsR0FBRyxDQUFDLFFBQWdCLEVBQUUsS0FBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDdkcsTUFBTSxXQUFXLEdBQUcsQ0FBQyxRQUFnQixFQUFFLEtBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBRW5HLFFBQVEsQ0FBQyw0QkFBNEIsRUFBRTtJQUNyQyxJQUFJLG1CQUEyQixDQUFDO0lBQ2hDLE1BQU0sV0FBVyxHQUFHLDZCQUE2QixDQUFDO0lBRWxELE1BQU0sQ0FBQztRQUNMLDBGQUEwRjtRQUMxRixtQkFBbUIsR0FBRyxXQUFXLENBQUMsOEJBQW1CLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDdEUsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsbUJBQW1CLEVBQUU7UUFDNUIsRUFBRSxDQUFDLDREQUE0RCxFQUFFLEtBQUs7WUFDcEUsTUFBTSxFQUFFLEtBQUssRUFB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SUFBSSxFQUFFLGVBQUk7Z0JBQ1YsUUFBUSxFQUFFLG9CQUFTO2dCQUNuQixNQUFNO2dCQUNOLGdCQUFnQixFQUFFLGtCQUFrQjthQUNyQyxDQUFDLEVBQ0osNkJBQTZCLENBQzlCLENBQUM7WUFFRixNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgZGVyaXZlRW50ZXJwcmlzZVNhbHQsIGRlcml2ZVBhc3N3b3JkIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgcmVnaXN0ZXJQYXNza2V5IH0gZnJvbSAnLi4vLi4vc3JjL3JlZ2lzdGVyUGFzc2tleSc7XG5pbXBvcnQgeyBhdHRhY2hQYXNza2V5VG9XYWxsZXQgfSBmcm9tICcuLi8uLi9zcmMvYXR0YWNoUGFzc2tleVRvV2FsbGV0JztcbmltcG9ydCB7IGRlcml2ZVBhc3NrZXlQcmZLZXkgfSBmcm9tICcuLi8uLi9zcmMvZGVyaXZlUGFzc2tleVByZktleSc7XG5pbXBvcnQgeyByZW1vdmVQYXNza2V5RnJvbVdhbGxldCB9IGZyb20gJy4uLy4uL3NyYy9yZW1vdmVQYXNza2V5RnJvbVdhbGxldCc7XG5pbXBvcnQgeyByZW1vdmVQYXNza2V5RnJvbUFjY291bnQgfSBmcm9tICcuLi8uLi9zcmMvcmVtb3ZlUGFzc2tleUZyb21BY2NvdW50JztcbmltcG9ydCB7IG1ha2VNb2NrQml0R28gfSBmcm9tICcuL2hlbHBlcnMvbW9ja0JpdEdvJztcbmltcG9ydCB7IG1ha2VNb2NrUHJvdmlkZXIgfSBmcm9tICcuL2hlbHBlcnMvbW9ja1Byb3ZpZGVyJztcbmltcG9ydCB7XG4gIEVOVEVSUFJJU0VfSUQsXG4gIFdBTExFVF9JRCxcbiAgQ09JTixcbiAgRVhJU1RJTkdfUEFTU1BIUkFTRSxcbiAgUFJGX09VVFBVVCxcbiAgQ1JFREVOVElBTF9JRCxcbiAgREVWSUNFX01PTkdPX0lELFxuICBCQVNFX1NBTFQsXG4gIEtFWUNIQUlOX0lELFxufSBmcm9tICcuL2hlbHBlcnMvZml4dHVyZXMnO1xuXG4vLyBVc2Ugc2pjbCBkaXJlY3RseSBmb3Igcm91bmQtdHJpcCBlbmNyeXB0aW9uIHRlc3RzIOKAlCBzYW1lIGNyeXB0byBhcyBtb2NrQml0R29cbmNvbnN0IHNqY2wgPSByZXF1aXJlKCdzamNsJyk7XG5jb25zdCBzamNsRW5jcnlwdCA9IChwYXNzd29yZDogc3RyaW5nLCBpbnB1dDogc3RyaW5nKSA9PiBKU09OLnN0cmluZ2lmeShzamNsLmVuY3J5cHQocGFzc3dvcmQsIGlucHV0KSk7XG5jb25zdCBzamNsRGVjcnlwdCA9IChwYXNzd29yZDogc3RyaW5nLCBpbnB1dDogc3RyaW5nKSA9PiBzamNsLmRlY3J5cHQocGFzc3dvcmQsIEpTT04ucGFyc2UoaW5wdXQpKTtcblxuZGVzY3JpYmUoJ3Bhc3NrZXktY3J5cHRvIGludGVncmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICBsZXQgaW5pdGlhbEVuY3J5cHRlZFBydjogc3RyaW5nO1xuICBjb25zdCBQUklWQVRFX0tFWSA9ICd4cHJ2LXRlc3QtcHJpdmF0ZS1rZXktMTIzNDUnO1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgLy8gRW5jcnlwdCB0aGUgcHJpdmF0ZSBrZXkgd2l0aCB0aGUgZXhpc3RpbmcgcGFzc3BocmFzZSAoc2ltdWxhdGVzIHdoYXQgdGhlIHNlcnZlciBzdG9yZXMpXG4gICAgaW5pdGlhbEVuY3J5cHRlZFBydiA9IHNqY2xFbmNyeXB0KEVYSVNUSU5HX1BBU1NQSFJBU0UsIFBSSVZBVEVfS0VZKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlZ2lzdGVyIOKGkiBhdHRhY2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3JlLWVuY3J5cHRzIHRoZSBwcml2YXRlIGtleSB1bmRlciB0aGUgUFJGLWRlcml2ZWQgcGFzc3dvcmQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB7IGJpdGdvLCBrZXljaGFpblN0YXRlIH0gPSBtYWtlTW9ja0JpdEdvKGluaXRpYWxFbmNyeXB0ZWRQcnYpO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBtYWtlTW9ja1Byb3ZpZGVyKCk7XG5cbiAgICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IHJlZ2lzdGVyUGFzc2tleSh7IGJpdGdvLCBwcm92aWRlciwgbGFiZWw6ICd0ZXN0LWtleScgfSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZGV2aWNlLmNyZWRlbnRpYWxJZCwgQ1JFREVOVElBTF9JRCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZGV2aWNlLnByZlN1cHBvcnRlZCwgdHJ1ZSk7XG5cbiAgICAgIGF3YWl0IGF0dGFjaFBhc3NrZXlUb1dhbGxldCh7XG4gICAgICAgIGJpdGdvLFxuICAgICAgICBjb2luOiBDT0lOLFxuICAgICAgICB3YWxsZXRJZDogV0FMTEVUX0lELFxuICAgICAgICBkZXZpY2UsXG4gICAgICAgIGV4aXN0aW5nUGFzc3BocmFzZTogRVhJU1RJTkdfUEFTU1BIUkFTRSxcbiAgICAgICAgcHJvdmlkZXIsXG4gICAgICB9KTtcblxuICAgICAgLy8gVmVyaWZ5IGVuY3J5cHRlZFBydiByb3VuZC10cmlwcyB3aXRoIHRoZSBQUkYtZGVyaXZlZCBwYXNzd29yZFxuICAgICAgY29uc3QgZGVjcnlwdGVkID0gc2pjbERlY3J5cHQoZGVyaXZlUGFzc3dvcmQoUFJGX09VVFBVVCksIGtleWNoYWluU3RhdGUuZW5jcnlwdGVkUHJ2KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChkZWNyeXB0ZWQsIFBSSVZBVEVfS0VZKTtcblxuICAgICAgLy8gcHJmU2FsdCBzdG9yZWQgaW4gd2ViYXV0aG5JbmZvIG11c3QgYmUgdmFsaWQgYmFzZTY0dXJsXG4gICAgICBhc3NlcnQub2soa2V5Y2hhaW5TdGF0ZS53ZWJhdXRobkRldmljZXMpO1xuICAgICAgYXNzZXJ0Lm1hdGNoKGtleWNoYWluU3RhdGUud2ViYXV0aG5EZXZpY2VzWzBdLnByZlNhbHQsIC9eW0EtWmEtejAtOVxcLV9dKyQvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2F0dGFjaCDihpIgZGVyaXZlUGFzc2tleVByZktleScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnZGVyaXZlcyB0aGUgc2FtZSBwYXNzcGhyYXNlIHVzZWQgdG8gcmUtZW5jcnlwdCBkdXJpbmcgYXR0YWNoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgeyBiaXRnbywga2V5Y2hhaW5TdGF0ZSwgd2FsbGV0IH0gPSBtYWtlTW9ja0JpdEdvKGluaXRpYWxFbmNyeXB0ZWRQcnYpO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBtYWtlTW9ja1Byb3ZpZGVyKCk7XG5cbiAgICAgIGNvbnN0IGRldmljZSA9IHsgaWQ6IERFVklDRV9NT05HT19JRCwgY3JlZGVudGlhbElkOiBDUkVERU5USUFMX0lELCBwcmZTYWx0OiBCQVNFX1NBTFQsIGlzUGFzc2tleTogdHJ1ZSB9O1xuICAgICAgYXdhaXQgYXR0YWNoUGFzc2tleVRvV2FsbGV0KHtcbiAgICAgICAgYml0Z28sXG4gICAgICAgIGNvaW46IENPSU4sXG4gICAgICAgIHdhbGxldElkOiBXQUxMRVRfSUQsXG4gICAgICAgIGRldmljZSxcbiAgICAgICAgZXhpc3RpbmdQYXNzcGhyYXNlOiBFWElTVElOR19QQVNTUEhSQVNFLFxuICAgICAgICBwcm92aWRlcixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBkZXJpdmVkUGFzc3BocmFzZSA9IGF3YWl0IGRlcml2ZVBhc3NrZXlQcmZLZXkoeyBiaXRnbywgd2FsbGV0LCBwcm92aWRlciB9KTtcblxuICAgICAgLy8gU2FtZSBwYXNzcGhyYXNlIGFzIHdoYXQgYXR0YWNoIHVzZWQg4oCUIGRlY3J5cHRzIHRoZSBzdG9yZWQga2V5XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZGVyaXZlZFBhc3NwaHJhc2UsIGRlcml2ZVBhc3N3b3JkKFBSRl9PVVRQVVQpKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzamNsRGVjcnlwdChkZXJpdmVkUGFzc3BocmFzZSwga2V5Y2hhaW5TdGF0ZS5lbmNyeXB0ZWRQcnYpLCBQUklWQVRFX0tFWSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmdWxsIGxpZmVjeWNsZSAocmVnaXN0ZXIg4oaSIGF0dGFjaCDihpIgZGVyaXZlIOKGkiByZW1vdmUpJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdjb21wbGV0ZXMgYWxsIHN0ZXBzIGFuZCBoaXRzIGJvdGggREVMIGVuZHBvaW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHsgYml0Z28sIHdhbGxldCB9ID0gbWFrZU1vY2tCaXRHbyhpbml0aWFsRW5jcnlwdGVkUHJ2KTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gbWFrZU1vY2tQcm92aWRlcigpO1xuXG4gICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCByZWdpc3RlclBhc3NrZXkoeyBiaXRnbywgcHJvdmlkZXIsIGxhYmVsOiAnbGlmZWN5Y2xlLWtleScgfSk7XG4gICAgICBhd2FpdCBhdHRhY2hQYXNza2V5VG9XYWxsZXQoe1xuICAgICAgICBiaXRnbyxcbiAgICAgICAgY29pbjogQ09JTixcbiAgICAgICAgd2FsbGV0SWQ6IFdBTExFVF9JRCxcbiAgICAgICAgZGV2aWNlLFxuICAgICAgICBleGlzdGluZ1Bhc3NwaHJhc2U6IEVYSVNUSU5HX1BBU1NQSFJBU0UsXG4gICAgICAgIHByb3ZpZGVyLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHBhc3NwaHJhc2UgPSBhd2FpdCBkZXJpdmVQYXNza2V5UHJmS2V5KHsgYml0Z28sIHdhbGxldCwgcHJvdmlkZXIgfSk7XG4gICAgICBhd2FpdCByZW1vdmVQYXNza2V5RnJvbVdhbGxldCh7IGJpdGdvLCBjb2luOiBDT0lOLCB3YWxsZXRJZDogV0FMTEVUX0lELCBkZXZpY2UsIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UgfSk7XG4gICAgICBhd2FpdCByZW1vdmVQYXNza2V5RnJvbUFjY291bnQoeyBiaXRnbywgZGV2aWNlIH0pO1xuXG4gICAgICBjb25zdCBkZWxVcmxzID0gYml0Z28uZGVsLmFyZ3MubWFwKChhOiBzdHJpbmdbXSkgPT4gYVswXSk7XG4gICAgICBhc3NlcnQub2soZGVsVXJscy5zb21lKCh1cmw6IHN0cmluZykgPT4gdXJsLmluY2x1ZGVzKGAva2V5LyR7S0VZQ0hBSU5fSUR9L3dlYmF1dGhuZGV2aWNlLyR7REVWSUNFX01PTkdPX0lEfWApKSk7XG4gICAgICBhc3NlcnQub2soZGVsVXJscy5zb21lKCh1cmw6IHN0cmluZykgPT4gdXJsLmluY2x1ZGVzKGAvdXNlci9vdHAvJHtERVZJQ0VfTU9OR09fSUR9YCkpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1BSRiBzYWx0IGRlcml2YXRpb24gd2lyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdwYXNzZXMgZGVyaXZlRW50ZXJwcmlzZVNhbHQgb3V0cHV0IGFzIHRoZSBldmFsIHNhbHQgaW4gYXR0YWNoUGFzc2tleVRvV2FsbGV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgeyBiaXRnbyB9ID0gbWFrZU1vY2tCaXRHbyhpbml0aWFsRW5jcnlwdGVkUHJ2KTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gbWFrZU1vY2tQcm92aWRlcigpO1xuXG4gICAgICBjb25zdCBkZXZpY2UgPSB7IGlkOiBERVZJQ0VfTU9OR09fSUQsIGNyZWRlbnRpYWxJZDogQ1JFREVOVElBTF9JRCwgcHJmU2FsdDogQkFTRV9TQUxULCBpc1Bhc3NrZXk6IHRydWUgfTtcbiAgICAgIGF3YWl0IGF0dGFjaFBhc3NrZXlUb1dhbGxldCh7XG4gICAgICAgIGJpdGdvLFxuICAgICAgICBjb2luOiBDT0lOLFxuICAgICAgICB3YWxsZXRJZDogV0FMTEVUX0lELFxuICAgICAgICBkZXZpY2UsXG4gICAgICAgIGV4aXN0aW5nUGFzc3BocmFzZTogRVhJU1RJTkdfUEFTU1BIUkFTRSxcbiAgICAgICAgcHJvdmlkZXIsXG4gICAgICB9KTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgICBwcm92aWRlci5sYXN0RXZhbEJ5Q3JlZGVudGlhbD8uW0NSRURFTlRJQUxfSURdLFxuICAgICAgICBkZXJpdmVFbnRlcnByaXNlU2FsdChCQVNFX1NBTFQsIEVOVEVSUFJJU0VfSUQpXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZXJyb3IgcHJvcGFnYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2Fib3J0cyByZW1vdmVQYXNza2V5RnJvbVdhbGxldCBhbmQgZG9lcyBub3QgREVMIHdoZW4gcGFzc3BocmFzZSBpcyB3cm9uZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHsgYml0Z28gfSA9IG1ha2VNb2NrQml0R28oaW5pdGlhbEVuY3J5cHRlZFBydik7XG4gICAgICBjb25zdCBkZXZpY2UgPSB7IGlkOiBERVZJQ0VfTU9OR09fSUQsIGNyZWRlbnRpYWxJZDogQ1JFREVOVElBTF9JRCwgcHJmU2FsdDogQkFTRV9TQUxULCBpc1Bhc3NrZXk6IHRydWUgfTtcblxuICAgICAgLy8gVXNlcyByZWFsIHNqY2wgZGVjcnlwdCDigJQgd3JvbmcgcGFzc3BocmFzZSBnZW51aW5lbHkgZmFpbHMgZGVjcnlwdEtleWNoYWluUHJpdmF0ZUtleVxuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgcmVtb3ZlUGFzc2tleUZyb21XYWxsZXQoe1xuICAgICAgICAgICAgYml0Z28sXG4gICAgICAgICAgICBjb2luOiBDT0lOLFxuICAgICAgICAgICAgd2FsbGV0SWQ6IFdBTExFVF9JRCxcbiAgICAgICAgICAgIGRldmljZSxcbiAgICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICd3cm9uZy1wYXNzcGhyYXNlJyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgL0luY29ycmVjdCB3YWxsZXQgcGFzc3BocmFzZS9cbiAgICAgICk7XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChiaXRnby5kZWwuY2FsbENvdW50LCAwKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=attachPasskeyToWallet.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachPasskeyToWallet.test.d.ts","sourceRoot":"","sources":["../../../test/unit/attachPasskeyToWallet.test.ts"],"names":[],"mappings":""}