Skip to content

Commit 98dfc2d

Browse files
committed
feat(sdk-core): improve removePasskeyFromAccount and use public-types
- Add device.id validation before DELETE call - Add edge-case tests for missing device.id - Replace local WebAuthnOtpDevice with @bitgo/public-types@6.1.0 WCN-191
1 parent 13e9c65 commit 98dfc2d

5 files changed

Lines changed: 35 additions & 108 deletions

File tree

modules/sdk-core/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
]
4141
},
4242
"dependencies": {
43-
"@bitgo/public-types": "5.96.2",
43+
"@bitgo/public-types": "6.1.0",
4444
"@bitgo/sdk-lib-mpc": "^10.11.1",
4545
"@bitgo/secp256k1": "^1.11.0",
4646
"@bitgo/sjcl": "^1.1.0",

modules/sdk-core/src/bitgo/passkey/removePasskeyFromAccount.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,8 @@ import { WebAuthnOtpDevice } from './types';
77
*/
88
export async function removePasskeyFromAccount(params: { bitgo: BitGoBase; device: WebAuthnOtpDevice }): Promise<void> {
99
const { bitgo, device } = params;
10+
if (!device.id) {
11+
throw new Error('device.id is required to remove a passkey from the account');
12+
}
1013
await bitgo.del(bitgo.url(`/user/otp/${device.id}`)).result();
1114
}
Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1 @@
1-
// TODO: replace with: export type { WebAuthnOtpDevice } from '@bitgo/public-types'
2-
export interface WebAuthnOtpDevice {
3-
id: string; // serialized MongoDB _id — used for DELETE
4-
credentialId: string; // from authenticatorInfo.credID
5-
prfSalt?: string;
6-
isPasskey?: boolean;
7-
extensions?: Record<string, boolean>;
8-
}
1+
export type { WebAuthnOtpDevice } from '@bitgo/public-types';

modules/sdk-core/test/unit/bitgo/passkey/removePasskeyFromAccount.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,20 @@ describe('removePasskeyFromAccount', function () {
4949
const result = await removePasskeyFromAccount({ bitgo: mockBitGo as any, device });
5050
assert.strictEqual(result, undefined);
5151
});
52+
53+
it('should throw if device.id is empty', async function () {
54+
const badDevice: WebAuthnOtpDevice = { ...device, id: '' };
55+
await assert.rejects(() => removePasskeyFromAccount({ bitgo: mockBitGo as any, device: badDevice }), {
56+
message: 'device.id is required to remove a passkey from the account',
57+
});
58+
assert.strictEqual(mockBitGo.del.called, false);
59+
});
60+
61+
it('should throw if device.id is undefined', async function () {
62+
const badDevice = { ...device, id: undefined } as unknown as WebAuthnOtpDevice;
63+
await assert.rejects(() => removePasskeyFromAccount({ bitgo: mockBitGo as any, device: badDevice }), {
64+
message: 'device.id is required to remove a passkey from the account',
65+
});
66+
assert.strictEqual(mockBitGo.del.called, false);
67+
});
5268
});

yarn.lock

Lines changed: 14 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -1010,6 +1010,17 @@
10101010
monocle-ts "^2.3.13"
10111011
newtype-ts "^0.3.5"
10121012

1013+
"@bitgo/public-types@6.1.0":
1014+
version "6.1.0"
1015+
resolved "https://registry.npmjs.org/@bitgo/public-types/-/public-types-6.1.0.tgz#7c3949a0ae4de706b3d6a748ab07669a330e3fad"
1016+
integrity sha512-k+3cYvcSzpaqBcBO3saZkwfsazE3JY9WC321WX76fAYFTt6v6Q71pyUSCH41dTEZz9KGi79DwicCnpKsREw8eg==
1017+
dependencies:
1018+
fp-ts "^2.0.0"
1019+
io-ts "npm:@bitgo-forks/io-ts@2.1.4"
1020+
io-ts-types "^0.5.16"
1021+
monocle-ts "^2.3.13"
1022+
newtype-ts "^0.3.5"
1023+
10131024
"@bitgo/wasm-dot@^1.7.0":
10141025
version "1.7.0"
10151026
resolved "https://registry.npmjs.org/@bitgo/wasm-dot/-/wasm-dot-1.7.0.tgz"
@@ -1521,13 +1532,6 @@
15211532
resolved "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.33.1.tgz"
15221533
integrity sha512-UnLHDY6KMmC+UXf3Ufyh+onE19xzEXjT4VZ504Acmk4PXxqyvG4cCPprlKUFnGUX7f0z8Or9MAOHXBx41uHBcg==
15231534

1524-
"@cspotcode/source-map-support@^0.8.0":
1525-
version "0.8.1"
1526-
resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1"
1527-
integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==
1528-
dependencies:
1529-
"@jridgewell/trace-mapping" "0.3.9"
1530-
15311535
"@csstools/postcss-cascade-layers@^1.1.1":
15321536
version "1.1.1"
15331537
resolved "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz"
@@ -3189,7 +3193,7 @@
31893193
"@jridgewell/sourcemap-codec" "^1.5.0"
31903194
"@jridgewell/trace-mapping" "^0.3.24"
31913195

3192-
"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0":
3196+
"@jridgewell/resolve-uri@^3.1.0":
31933197
version "3.1.2"
31943198
resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz"
31953199
integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
@@ -3202,19 +3206,11 @@
32023206
"@jridgewell/gen-mapping" "^0.3.5"
32033207
"@jridgewell/trace-mapping" "^0.3.25"
32043208

3205-
"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0", "@jridgewell/sourcemap-codec@^1.5.5":
3209+
"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0", "@jridgewell/sourcemap-codec@^1.5.5":
32063210
version "1.5.5"
32073211
resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz"
32083212
integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==
32093213

3210-
"@jridgewell/trace-mapping@0.3.9":
3211-
version "0.3.9"
3212-
resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9"
3213-
integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==
3214-
dependencies:
3215-
"@jridgewell/resolve-uri" "^3.0.3"
3216-
"@jridgewell/sourcemap-codec" "^1.4.10"
3217-
32183214
"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.28":
32193215
version "0.3.30"
32203216
resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz"
@@ -5857,26 +5853,6 @@
58575853
resolved "https://registry.npmjs.org/@tronweb3/google-protobuf/-/google-protobuf-3.21.4.tgz"
58585854
integrity sha512-joxgV4esCdyZ921AprMIG1T7HjkypquhbJ5qJti/priCBJhRE1z9GOxIEMvayxSVSRbMGIoJNE0Knrg3vpwM1w==
58595855

5860-
"@tsconfig/node10@^1.0.7":
5861-
version "1.0.12"
5862-
resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz#be57ceac1e4692b41be9de6be8c32a106636dba4"
5863-
integrity sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==
5864-
5865-
"@tsconfig/node12@^1.0.7":
5866-
version "1.0.11"
5867-
resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d"
5868-
integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==
5869-
5870-
"@tsconfig/node14@^1.0.0":
5871-
version "1.0.3"
5872-
resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1"
5873-
integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==
5874-
5875-
"@tsconfig/node16@^1.0.2":
5876-
version "1.0.4"
5877-
resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9"
5878-
integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==
5879-
58805856
"@tufjs/canonical-json@1.0.0":
58815857
version "1.0.0"
58825858
resolved "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz"
@@ -7066,13 +7042,6 @@ acorn-walk@^8.0.0, acorn-walk@^8.0.2:
70667042
dependencies:
70677043
acorn "^8.11.0"
70687044

7069-
acorn-walk@^8.1.1:
7070-
version "8.3.5"
7071-
resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz#8a6b8ca8fc5b34685af15dabb44118663c296496"
7072-
integrity sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==
7073-
dependencies:
7074-
acorn "^8.11.0"
7075-
70767045
acorn@7.1.1:
70777046
version "7.1.1"
70787047
resolved "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz"
@@ -7093,11 +7062,6 @@ acorn@^8.0.4, acorn@^8.1.0, acorn@^8.11.0, acorn@^8.14.0, acorn@^8.15.0:
70937062
resolved "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz"
70947063
integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==
70957064

7096-
acorn@^8.4.1:
7097-
version "8.16.0"
7098-
resolved "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz#4ce79c89be40afe7afe8f3adb902a1f1ce9ac08a"
7099-
integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==
7100-
71017065
add-stream@^1.0.0:
71027066
version "1.0.0"
71037067
resolved "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz"
@@ -7299,11 +7263,6 @@ are-we-there-yet@^3.0.0:
72997263
delegates "^1.0.0"
73007264
readable-stream "^3.6.0"
73017265

7302-
arg@^4.1.0:
7303-
version "4.1.3"
7304-
resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
7305-
integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
7306-
73077266
argparse@^1.0.10, argparse@^1.0.7:
73087267
version "1.0.10"
73097268
resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz"
@@ -9553,11 +9512,6 @@ create-hmac@^1.1.0, create-hmac@^1.1.7:
95539512
safe-buffer "^5.0.1"
95549513
sha.js "^2.4.8"
95559514

9556-
create-require@^1.1.0:
9557-
version "1.1.1"
9558-
resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
9559-
integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
9560-
95619515
cross-env@^7.0.3:
95629516
version "7.0.3"
95639517
resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz"
@@ -14881,11 +14835,6 @@ make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0:
1488114835
dependencies:
1488214836
semver "^6.0.0"
1488314837

14884-
make-error@^1.1.1:
14885-
version "1.3.6"
14886-
resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
14887-
integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
14888-
1488914838
make-fetch-happen@15.0.2, make-fetch-happen@^15.0.0, make-fetch-happen@^15.0.2:
1489014839
version "15.0.2"
1489114840
resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.2.tgz"
@@ -15423,7 +15372,7 @@ mocha@10.6.0:
1542315372
yargs-parser "^20.2.9"
1542415373
yargs-unparser "^2.0.0"
1542515374

15426-
mocha@^10.0.0, mocha@^10.2.0:
15375+
mocha@^10.2.0:
1542715376
version "10.8.2"
1542815377
resolved "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz"
1542915378
integrity sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==
@@ -20193,25 +20142,6 @@ ts-loader@^9.1.2:
2019320142
semver "^7.3.4"
2019420143
source-map "^0.7.4"
2019520144

20196-
ts-node@^10.0.0:
20197-
version "10.9.2"
20198-
resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f"
20199-
integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==
20200-
dependencies:
20201-
"@cspotcode/source-map-support" "^0.8.0"
20202-
"@tsconfig/node10" "^1.0.7"
20203-
"@tsconfig/node12" "^1.0.7"
20204-
"@tsconfig/node14" "^1.0.0"
20205-
"@tsconfig/node16" "^1.0.2"
20206-
acorn "^8.4.1"
20207-
acorn-walk "^8.1.1"
20208-
arg "^4.1.0"
20209-
create-require "^1.1.0"
20210-
diff "^4.0.1"
20211-
make-error "^1.1.1"
20212-
v8-compile-cache-lib "^3.0.1"
20213-
yn "3.1.1"
20214-
2021520145
ts-results@^3.2.1:
2021620146
version "3.3.0"
2021720147
resolved "https://registry.npmjs.org/ts-results/-/ts-results-3.3.0.tgz"
@@ -20509,11 +20439,6 @@ typescript@^4.2.4:
2050920439
resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz"
2051020440
integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==
2051120441

20512-
typescript@~5.4.5:
20513-
version "5.4.5"
20514-
resolved "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611"
20515-
integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==
20516-
2051720442
"ua-parser-js@>0.7.30 <0.8.0", ua-parser-js@^0.7.30, ua-parser-js@^1.0.35:
2051820443
version "0.7.41"
2051920444
resolved "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.41.tgz#9f6dee58c389e8afababa62a4a2dc22edb69a452"
@@ -20816,11 +20741,6 @@ uuid@^8.3.2:
2081620741
resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz"
2081720742
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
2081820743

20819-
v8-compile-cache-lib@^3.0.1:
20820-
version "3.0.1"
20821-
resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf"
20822-
integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==
20823-
2082420744
v8-compile-cache@^2.0.3:
2082520745
version "2.4.0"
2082620746
resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz"
@@ -21642,11 +21562,6 @@ yeoman-generator@^5.6.1:
2164221562
sort-keys "^4.2.0"
2164321563
text-table "^0.2.0"
2164421564

21645-
yn@3.1.1:
21646-
version "3.1.1"
21647-
resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
21648-
integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
21649-
2165021565
yocto-queue@^0.1.0:
2165121566
version "0.1.0"
2165221567
resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz"

0 commit comments

Comments
 (0)