From 9c7e9d3a79656dca0a632e07eb09b8ee9cec1717 Mon Sep 17 00:00:00 2001 From: sacha Date: Mon, 15 Dec 2025 16:59:41 +0100 Subject: [PATCH] Add remove SessionDevice method --- src/main/__tests__/sessionDevices.spec.ts | 24 +++++++++++++++++++++++ src/main/main.ts | 7 +++++++ src/main/profileClient.ts | 11 +++++++++++ 3 files changed, 42 insertions(+) diff --git a/src/main/__tests__/sessionDevices.spec.ts b/src/main/__tests__/sessionDevices.spec.ts index f93abff..793aafa 100644 --- a/src/main/__tests__/sessionDevices.spec.ts +++ b/src/main/__tests__/sessionDevices.spec.ts @@ -64,5 +64,29 @@ test('list session devices', async () => { } ] }) +}) + +test('remove session device', async () => { + const { client, domain } = createDefaultTestClient() + const accessToken = 'accesstoken' + const sessionDeviceId = 'UUID' + + const removeSessionDeviceCall = fetchMock.mockResponseOnce( + JSON.stringify('') + ) + + const result = await client.removeSessionDevice({accessToken, sessionDeviceId}) + + expect(removeSessionDeviceCall).toHaveBeenCalledWith( + `https://${domain}/identity/v1/session-devices/${sessionDeviceId}`, + { + method: 'DELETE', + headers: expect.objectContaining({ + ...headers.accessToken(accessToken) + }) + } + ) + expect(result).toEqual('') }) + diff --git a/src/main/main.ts b/src/main/main.ts index fd03469..4438110 100644 --- a/src/main/main.ts +++ b/src/main/main.ts @@ -47,6 +47,7 @@ import ProfileClient, { EmailVerificationParams, GetUserParams, PhoneNumberVerificationParams, + RemoveSessionDeviceParams, RequestAccountRecoveryParams, RequestPasswordResetParams, UnlinkParams, @@ -114,6 +115,7 @@ export type Client = { remoteSettings: Promise removeMfaEmail: (params: RemoveMfaEmailParams) => Promise removeMfaPhoneNumber: (params: RemoveMfaPhoneNumberParams) => Promise + removeSessionDevice: (params: RemoveSessionDeviceParams) => Promise removeTrustedDevice: (params: DeleteTrustedDeviceParams) => Promise removeWebAuthnDevice: (accessToken: string, deviceId: string) => Promise requestAccountRecovery: (params: RequestAccountRecoveryParams) => Promise @@ -341,6 +343,10 @@ export function createClient(creationConfig: Config): Client { return apiClients.then((clients) => clients.mfa.removeMfaPhoneNumber(params)) } + function removeSessionDevice(params: RemoveSessionDeviceParams) { + return apiClients.then((clients) => clients.profile.removeSessionDevice(params)) + } + function removeTrustedDevice(params: DeleteTrustedDeviceParams) { return apiClients.then((clients) => clients.mfa.deleteTrustedDevices(params)) } @@ -473,6 +479,7 @@ export function createClient(creationConfig: Config): Client { remoteSettings, removeMfaEmail, removeMfaPhoneNumber, + removeSessionDevice, removeTrustedDevice, removeWebAuthnDevice, requestAccountRecovery, diff --git a/src/main/profileClient.ts b/src/main/profileClient.ts index e047e01..305c69a 100644 --- a/src/main/profileClient.ts +++ b/src/main/profileClient.ts @@ -58,6 +58,12 @@ type EmailVerificationCodeUpdatePasswordParams = { verificationCode: string password: string } + +export type RemoveSessionDeviceParams = { + accessToken: string + sessionDeviceId: string +} + type SmsVerificationCodeUpdatePasswordParams = { accessToken?: string phoneNumber: string @@ -146,6 +152,11 @@ export default class ProfileClient { return this.http.get(this.sessionDevicesUrl, { accessToken }) } + removeSessionDevice(params: RemoveSessionDeviceParams): Promise { + const { accessToken, sessionDeviceId } = params + return this.http.remove(`${this.sessionDevicesUrl}/${sessionDeviceId}`, {accessToken}) + } + getSignupData(signupToken: string): Promise { return this.http.get(this.signupDataUrl, { query: {