| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import {sendWithPromise} from 'chrome://resources/js/cr.js'; |
| |
| export interface Passkey { |
| // credentialId is hex-encoded. |
| credentialId: string; |
| relyingPartyId: string; |
| userName: string; |
| userDisplayName: string; |
| } |
| |
| export interface PasskeysBrowserProxy { |
| /** |
| * Determines whether any passkeys exist on the local device. Should be |
| * significantly more efficient than calling `enumerate` and checking for a |
| * non-empty list, but may report false positives if the last passkey was |
| * recently deleted. |
| */ |
| hasPasskeys(): Promise<boolean>; |
| |
| /** |
| * Enumerates passkeys from the local device. Result is null if management |
| * is not supported on this platform. |
| */ |
| enumerate(): Promise<Passkey[]|null>; |
| |
| /** |
| * Deletes a passkey as specified by credentialId then performs an `enumerate` |
| * operation. |
| */ |
| delete(credentialId: string): Promise<Passkey[]|null>; |
| |
| /** |
| * Edits a passkey's credential metadata username then performs an `enumerate` |
| * operation. |
| */ |
| edit(credentialId: string, newUsername: string): Promise<Passkey[]|null>; |
| } |
| |
| export class PasskeysBrowserProxyImpl implements PasskeysBrowserProxy { |
| hasPasskeys() { |
| return sendWithPromise('passkeysHasPasskeys'); |
| } |
| |
| enumerate() { |
| return sendWithPromise('passkeysEnumerate'); |
| } |
| |
| delete(credentialId: string) { |
| return sendWithPromise('passkeysDelete', credentialId); |
| } |
| |
| edit(credentialId: string, newUsername: string) { |
| return sendWithPromise('passkeysEdit', credentialId, newUsername); |
| } |
| |
| static getInstance(): PasskeysBrowserProxy { |
| return passkeysProxyInstance || |
| (passkeysProxyInstance = new PasskeysBrowserProxyImpl()); |
| } |
| |
| static setInstance(obj: PasskeysBrowserProxy) { |
| passkeysProxyInstance = obj; |
| } |
| } |
| |
| let passkeysProxyInstance: PasskeysBrowserProxy|null = null; |