Skip to content
Open
Show file tree
Hide file tree
Changes from 92 commits
Commits
Show all changes
127 commits
Select commit Hold shift + click to select a range
70661c0
Turn on passkeys and dev mode
abergs Mar 24, 2025
aeb3b9f
PM-19138: Add try-catch to desktop-autofill (#13964)
abergs Mar 31, 2025
849aa54
PM-19424: React to IPC disconnect (#14123)
abergs Apr 7, 2025
92e9dca
Autofill/pm 9034 implement passkey for unlocked accounts (#13826)
jholland-livefront Apr 8, 2025
d902a0d
PM-11455: Trigger sync when user enables OS setting (#14127)
abergs Apr 8, 2025
b676f9b
Added support for handling a locked vault
abergs Mar 19, 2025
411d195
PM-19511: Add support for ExcludedCredentials (#14128)
abergs Apr 8, 2025
f3726e5
simplify updatedCipher (#14179)
abergs Apr 9, 2025
b7c2419
Fix base64url decode on MacOS passkeys (#14227)
abergs Apr 11, 2025
b62220a
Autofill/pm 17444 use reprompt (#14004)
jholland-livefront Apr 11, 2025
8d598c3
Change modal size to 600x600
abergs Apr 15, 2025
6426dc5
Improve MacOS Syncing
abergs Apr 14, 2025
0fca674
Improved modalPosition by allowing multiple calls to applyModalStyles
abergs Apr 18, 2025
9d8d5be
Merge branch 'main' into feature/passkey-provider
abergs Apr 22, 2025
27f973e
moved imports to please lint
abergs Apr 22, 2025
ac0d7de
Make passkey header stick for select and create (#14357)
jholland-livefront Apr 25, 2025
9a86bf0
Added local build command
abergs Apr 30, 2025
95a5d80
Exclude credentials using kvc to avoid comilation error in cicd (#14568)
abergs Apr 30, 2025
733d0f4
Fix syntax error
abergs Apr 30, 2025
f86e670
Don't use kvc
abergs Apr 30, 2025
eb3b07d
Enables the autofill extension in mac and mas builds (#14373)
nathan-livefront May 1, 2025
28a9404
Merge branch 'main' into feature/passkey-provider
abergs May 2, 2025
4c5e396
Improve Autofill IPC reliability (#14358)
abergs May 13, 2025
7f3f7ae
feat: add test and check for too long buffers (#14775)
coroiu May 14, 2025
156d96e
Autofill/PM-19511: Overwrite and reprompt (#14288)
abergs May 15, 2025
40c77b6
Move modal files to `autofill` and rename dir to `credentials` (#14757)
jholland-livefront May 15, 2025
ec6c85d
Add tests for `cipherHasNoOtherPasskeys` (#14829)
jholland-livefront May 19, 2025
1b12836
Adjust spacing to place new login button below other items (#14877)
jholland-livefront May 27, 2025
10ae123
Autofill/pm 21903 use translations everywhere for passkeys (#14908)
jholland-livefront May 28, 2025
0376ead
Autofill/pm 21864 center unlock vault modal (#14867)
jholland-livefront Jun 2, 2025
8953786
Merge branch 'main' into feature/passkey-provider
abergs Jun 3, 2025
2b1f6e4
Add rustup for cicd to work (#15055)
abergs Jun 3, 2025
0d7154e
Hide credentials that are in the bin (#15034)
jholland-livefront Jun 3, 2025
c873f5a
Add tests for passkey components (#15185)
jholland-livefront Jun 16, 2025
7d72b98
Autofill/pm 22821 center vault modal (#15243)
jholland-livefront Jun 19, 2025
cd4f5fb
Refactor Fido2 Components (#15105)
jholland-livefront Jun 30, 2025
f74f9ad
PM-22476: Show config UI while enabling Bitwarden (#15149)
abergs Jul 1, 2025
c0fa664
Add provisioning profile values to electron build (#15412)
jholland-livefront Jul 1, 2025
097b90a
Merge remote-tracking branch 'origin/main' into feature/passkey-provider
jholland-livefront Jul 1, 2025
12230c3
Address BitwardenShield icon issue
jholland-livefront Jul 1, 2025
5518a38
Fix fido2-vault component
jholland-livefront Jul 1, 2025
448a929
Display the vault modal when selecting Bitwarden... (#15257)
jholland-livefront Jul 2, 2025
121a975
Merge branch 'main' into feature/passkey-provider
abergs Jul 3, 2025
c63913d
Passkeys filtering breaks on SSH keys (#15448)
abergs Jul 3, 2025
9eb55c4
Display the blue header on the locked vault passkey flow (#15655)
jholland-livefront Jul 30, 2025
fa3483d
PM-23848: Use the MacOS UI-friendly API instead (#15650)
abergs Jul 30, 2025
34cdcf2
Fix action text and close vault modal (#15634)
jholland-livefront Jul 30, 2025
d6621f2
Update SVG to support dark mode (#15805)
jholland-livefront Jul 30, 2025
036771c
When a locked vault is unlocked displays correctly (#15612)
jholland-livefront Aug 1, 2025
647c58b
Merge remote-tracking branch 'origin/main' into feature/passkey-provider
jholland-livefront Aug 5, 2025
56cd0f0
Update broken tests for lock component
jholland-livefront Aug 5, 2025
6e0a90e
Merge branch 'main' into feature/passkey-provider
differsthecat Aug 5, 2025
13ce601
Add missing brace to preload.ts
differsthecat Aug 5, 2025
6f63a6d
Run lint
differsthecat Aug 5, 2025
5a2966a
Merge branch 'main' into feature/passkey-provider
differsthecat Aug 7, 2025
7236e48
Added explainer
abergs Aug 12, 2025
3d48e4a
Moved the explainer
abergs Aug 12, 2025
8b94512
Tidying up readme
abergs Aug 13, 2025
a1228b6
Add feature flag to short-circuit the passkey provider (#16003)
abergs Aug 15, 2025
58e093f
Merge branch 'main' into feature/passkey-provider
abergs Aug 15, 2025
22d2432
Lint fixes
jholland-livefront Aug 15, 2025
1d5f09c
Merge remote-tracking branch 'origin/main' into feature/passkey-provider
jholland-livefront Aug 15, 2025
917a40e
Merge branch 'main' into feature/passkey-provider
jholland-livefront Aug 15, 2025
fca0c8e
PM-22175: Improve launch of app + window positioning (#15658)
abergs Aug 19, 2025
69d24d2
Update fido2-vault and fido2-service implementations
jholland-livefront Aug 20, 2025
8169061
Use tailwind-alike classes for new styles
jholland-livefront Aug 20, 2025
9f07ac7
Merge branch 'main' into feature/passkey-provider
jholland-livefront Aug 20, 2025
c522fa2
Add label to biticons in passkey modals
jholland-livefront Aug 20, 2025
d4cdf6a
Merge branch 'main' into feature/passkey-provider
jholland-livefront Aug 20, 2025
5d55b8f
Fix broken vault test
jholland-livefront Aug 20, 2025
31b7a60
Revert to original `isDev` function
jholland-livefront Aug 21, 2025
383c0ec
Add comment to lock component describing `disable-redirect` param
jholland-livefront Aug 21, 2025
9d8cf94
Use tailwind classes instead of custom sticky header class
jholland-livefront Aug 22, 2025
f556a49
Use standard `tw-z-10` for z-index
jholland-livefront Aug 22, 2025
69ddbb1
Change log service levels
jholland-livefront Aug 25, 2025
87fc48b
Mock svg icons for CI
jholland-livefront Aug 28, 2025
df61638
Add back provisioning profiles
jholland-livefront Aug 29, 2025
a93d715
Remove `--break-system-packages` and simplify commands
jholland-livefront Sep 2, 2025
a885f65
Revert `cipherId` param for `confirmNewCredential`
jholland-livefront Sep 3, 2025
6caefb5
Remove placeholder UI
jholland-livefront Sep 3, 2025
f4b3aec
Small improvements to the readme
abergs Sep 4, 2025
d05167b
Remove optional userId and deprecated method
jholland-livefront Sep 4, 2025
67f909e
Autofill should own the macos_provider (#16271)
abergs Sep 4, 2025
bcfca57
Remove unnecessary logs, no magic numbers, revert `cipherId?`
jholland-livefront Sep 5, 2025
41142b8
Merge remote-tracking branch 'origin/main' into feature/passkey-provider
jholland-livefront Sep 9, 2025
40ce33d
Fixes for broken build
jholland-livefront Sep 9, 2025
42057ec
Update test issues
jholland-livefront Sep 10, 2025
733ba46
[BEEEP] Use tracing in macOS provider
neuronull Oct 3, 2025
eecc538
Merge remote-tracking branch 'origin/main' into feature/passkey-provider
jholland-livefront Oct 7, 2025
f496b83
Update comments and add null check for ciphers
jholland-livefront Oct 10, 2025
8dbb93c
Merge branch 'main' into feature/passkey-provider
jholland-livefront Oct 10, 2025
8f067bd
Update status comments and readme
jholland-livefront Oct 12, 2025
85f7351
Remove electron modal mode link
jholland-livefront Oct 13, 2025
50449cf
Clarify modal mode use
abergs Oct 13, 2025
8d6dc00
Add comment about usernames
abergs Oct 13, 2025
b0f5665
Add comment that we don't support extensions yet
abergs Oct 13, 2025
c8d55d9
Added comment about base64 format
abergs Oct 13, 2025
f97e7cf
Use NO_CALLBACK_INDICATOR
abergs Oct 13, 2025
6aaeb99
cb -> callback
abergs Oct 13, 2025
9e7c798
Update apps/desktop/desktop_native/napi/src/lib.rs
abergs Oct 13, 2025
81b3190
Clean up Fido2Create subscriptions and update comments
jholland-livefront Oct 14, 2025
67aeeb3
added comment to clarify silent exception
abergs Oct 14, 2025
a68fa10
Add comments
abergs Oct 14, 2025
e184d44
clean up unwrap()
abergs Oct 14, 2025
6704dcb
set log level filter to INFO
neuronull Oct 15, 2025
6a7b40e
Merge branch 'main' into autofill/pm-26089/beeep-use-tracing-in-macosโ€ฆ
neuronull Oct 15, 2025
e542a97
Address modal popup issue
jholland-livefront Oct 17, 2025
8d0846e
Merge remote-tracking branch 'origin/autofill/pm-26089/beeep-use-tracโ€ฆ
jholland-livefront Oct 17, 2025
aa96ec7
plutil on Info.plist
abergs Oct 20, 2025
d754acd
Adhere to style guides
abergs Oct 20, 2025
6d27a73
Merge remote-tracking branch 'origin/main' into feature/passkey-provider
jholland-livefront Oct 22, 2025
3abf069
Fix broken lock ui component tests
jholland-livefront Oct 22, 2025
c9597c2
Fix broken lock ui component tests
jholland-livefront Oct 22, 2025
ae1eef6
Added codeowners entry
abergs Oct 23, 2025
44e908f
Merge branch 'main' into feature/passkey-provider
abergs Oct 24, 2025
21b13be
logservice.warning -> debug
abergs Oct 24, 2025
34bff4a
Uint8Array -> ArrayBuffer
abergs Oct 24, 2025
3984555
Remove autofill entitlement
abergs Oct 28, 2025
b51b283
Merge remote-tracking branch 'origin/main' into feature/passkey-provider
jholland-livefront Nov 14, 2025
8491fb2
Fix linting issues
jholland-livefront Nov 14, 2025
47b08b1
Fix arm build issue
jholland-livefront Nov 14, 2025
4294beb
Adjust build command
jholland-livefront Nov 14, 2025
411da18
Add missing entitlement
jholland-livefront Nov 14, 2025
72c3d3f
revert missing entitlement change
jholland-livefront Nov 14, 2025
60a2716
Add proper autofill entitlements
jholland-livefront Nov 17, 2025
281c082
Remove autofill extension from mas builds
jholland-livefront Nov 20, 2025
a38bc28
Merge remote-tracking branch 'origin/main' into feature/passkey-provider
jholland-livefront Nov 20, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 24 additions & 6 deletions .github/workflows/build-desktop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -668,7 +668,7 @@ jobs:

macos-build:
name: MacOS Build
runs-on: macos-13
runs-on: macos-15
needs:
- setup
permissions:
Expand All @@ -694,8 +694,13 @@ jobs:
cache-dependency-path: '**/package-lock.json'
node-version: ${{ env._NODE_VERSION }}

- name: Set up Python
uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0
with:
python-version: '3.13'

- name: Set up Node-gyp
run: python3 -m pip install setuptools
run: python -m pip install setuptools

- name: Print environment
run: |
Expand All @@ -704,6 +709,7 @@ jobs:
rustup show
echo "GitHub ref: $GITHUB_REF"
echo "GitHub event: $GITHUB_EVENT"
xcodebuild -showsdks

- name: Cache Build
id: build-cache
Expand Down Expand Up @@ -891,7 +897,7 @@ jobs:

macos-package-github:
name: MacOS Package GitHub Release Assets
runs-on: macos-13
runs-on: macos-15
if: ${{ needs.setup.outputs.has_secrets == 'true' }}
needs:
- browser-build
Expand Down Expand Up @@ -920,8 +926,13 @@ jobs:
cache-dependency-path: '**/package-lock.json'
node-version: ${{ env._NODE_VERSION }}

- name: Set up Python
uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0
with:
python-version: '3.13'

- name: Set up Node-gyp
run: python3 -m pip install setuptools
run: python -m pip install setuptools

- name: Print environment
run: |
Expand All @@ -930,6 +941,7 @@ jobs:
rustup show
echo "GitHub ref: $GITHUB_REF"
echo "GitHub event: $GITHUB_EVENT"
xcodebuild -showsdks

- name: Get Build Cache
id: build-cache
Expand Down Expand Up @@ -1149,7 +1161,7 @@ jobs:

macos-package-mas:
name: MacOS Package Prod Release Asset
runs-on: macos-13
runs-on: macos-15
if: ${{ needs.setup.outputs.has_secrets == 'true' }}
needs:
- browser-build
Expand Down Expand Up @@ -1178,8 +1190,13 @@ jobs:
cache-dependency-path: '**/package-lock.json'
node-version: ${{ env._NODE_VERSION }}

- name: Set up Python
uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0
with:
python-version: '3.13'

- name: Set up Node-gyp
run: python3 -m pip install setuptools
run: python -m pip install setuptools

- name: Print environment
run: |
Expand All @@ -1188,6 +1205,7 @@ jobs:
rustup show
echo "GitHub ref: $GITHUB_REF"
echo "GitHub event: $GITHUB_EVENT"
xcodebuild -showsdks

- name: Get Build Cache
id: build-cache
Expand Down
15 changes: 2 additions & 13 deletions apps/browser/src/autofill/popup/fido2/fido2.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import { getUserId } from "@bitwarden/common/auth/services/account.service";
import { DomainSettingsService } from "@bitwarden/common/autofill/services/domain-settings.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
import { Fido2Utils } from "@bitwarden/common/platform/services/fido2/fido2-utils";
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
import { SearchService } from "@bitwarden/common/vault/abstractions/search.service";
import { SecureNoteType, CipherType } from "@bitwarden/common/vault/enums";
Expand Down Expand Up @@ -196,7 +197,7 @@ export class Fido2Component implements OnInit, OnDestroy {
this.displayedCiphers = this.ciphers.filter(
(cipher) =>
cipher.login.matchesUri(this.url, equivalentDomains) &&
this.cipherHasNoOtherPasskeys(cipher, message.userHandle),
Fido2Utils.cipherHasNoOtherPasskeys(cipher, message.userHandle),
);

this.passkeyAction = PasskeyActions.Register;
Expand Down Expand Up @@ -470,16 +471,4 @@ export class Fido2Component implements OnInit, OnDestroy {
...msg,
});
}

/**
* This methods returns true if a cipher either has no passkeys, or has a passkey matching with userHandle
* @param userHandle
*/
private cipherHasNoOtherPasskeys(cipher: CipherView, userHandle: string): boolean {
if (cipher.login.fido2Credentials == null || cipher.login.fido2Credentials.length === 0) {
return true;
}

return cipher.login.fido2Credentials.some((passkey) => passkey.userHandle === userHandle);
}
}
33 changes: 33 additions & 0 deletions apps/desktop/desktop_native/macos_provider/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Explainer: Mac OS Native Passkey Provider

This document describes the changes introduced in https://github.com/bitwarden/clients/pull/13963, where we introduce the MacOS Native Passkey Provider. It gives the high level explanation of the architecture and some of the quirks and additional good to know context.

## The high level
MacOS has native APIs (similar to iOS) to allow Credential Managers to provide credentials to the MacOS autofill system (in the PR referenced above, we only provide passkeys).

Weโ€™ve written a Swift-based native autofill-extension. Itโ€™s bundled in the app-bundle in PlugIns, similar to the safari-extension.

This swift extension currently communicates with our Electron app through IPC based on a unix socket. The IPC implementation is done in Rust and utilized through UniFFI + NAPI bindings.

Footnotes:

* We're not using the IPC framework as the implementation pre-dates the IPC framework.
* Alternatives like XPC or CFMessagePort may have better support for when the app is sandboxed.

Electron receives the messages and passes it to Angular (through the electron-renderer event system).

Our existing fido2 services in the renderer respond to events, displaying UI as necessary, and returns the signature back through the same mechanism, allowing people to authenticate with passkeys through the native system + UI. See [Mac OS Native Passkey Workflows](https://bitwarden.atlassian.net/wiki/spaces/EN/pages/1828356098/Mac+OS+Native+Passkey+Workflows) for demo videos.

## Typescript + UI implementations

We utilize the same FIDO2 implementation and interface that is already present for our browser authentication. It was designed by @coroiu with multiple โ€˜ui environments' in mind.

Therefore, a lot of the plumbing is implemented in /autofill/services/desktop-fido2-user-interface.service.ts, which implements the interface that our fido2 authenticator/client expects to drive UI related behaviors.

Weโ€™ve also implemented a couple FIDO2 UI components to handle registration/sign in flows, but also improved the โ€œmodal modeโ€ of the desktop app.

## Modal mode

When modal mode is activated, the desktop app turns into a smaller modal that is always on top and cannot be resized. This is done to improve the UX of performing a passkey operation (or SSH operation). Once the operation is completed, the app returns to normal mode and its previous position.

Some modal modes may hide the 'traffic buttons' (window controls) due to design requirements.
3 changes: 3 additions & 0 deletions apps/desktop/desktop_native/macos_provider/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ rm -r tmp
mkdir -p ./tmp/target/universal-darwin/release/


rustup target add aarch64-apple-darwin
rustup target add x86_64-apple-darwin

cargo build --package macos_provider --target aarch64-apple-darwin --release
cargo build --package macos_provider --target x86_64-apple-darwin --release

Expand Down
76 changes: 61 additions & 15 deletions apps/desktop/desktop_native/macos_provider/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,14 @@ trait Callback: Send + Sync {
fn error(&self, error: BitwardenError);
}

#[derive(uniffi::Enum, Debug)]
/// Store the connection status between the macOS credential provider extension
/// and the desktop application's IPC server.
pub enum ConnectionStatus {
Connected,
Disconnected,
}

#[derive(uniffi::Object)]
pub struct MacOSProviderClient {
to_server_send: tokio::sync::mpsc::Sender<String>,
Expand All @@ -57,6 +65,18 @@ pub struct MacOSProviderClient {
response_callbacks_counter: AtomicU32,
#[allow(clippy::type_complexity)]
response_callbacks_queue: Arc<Mutex<HashMap<u32, (Box<dyn Callback>, Instant)>>>,

// Flag to track connection status - atomic for thread safety without locks
connection_status: Arc<std::sync::atomic::AtomicBool>,
}

#[derive(Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
/// Store native desktop status information to use for IPC communication
/// between the application and the macOS credential provider.
pub struct NativeStatus {
key: String,
value: String,
}

#[uniffi::export]
Expand All @@ -74,13 +94,15 @@ impl MacOSProviderClient {

let client = MacOSProviderClient {
to_server_send,
response_callbacks_counter: AtomicU32::new(0),
response_callbacks_counter: AtomicU32::new(1), // 0 is reserved for no callback
response_callbacks_queue: Arc::new(Mutex::new(HashMap::new())),
connection_status: Arc::new(std::sync::atomic::AtomicBool::new(false)),
};

let path = desktop_core::ipc::path("autofill");

let queue = client.response_callbacks_queue.clone();
let connection_status = client.connection_status.clone();

std::thread::spawn(move || {
let rt = tokio::runtime::Builder::new_current_thread()
Expand All @@ -98,9 +120,11 @@ impl MacOSProviderClient {
match serde_json::from_str::<SerializedMessage>(&message) {
Ok(SerializedMessage::Command(CommandMessage::Connected)) => {
info!("Connected to server");
connection_status.store(true, std::sync::atomic::Ordering::Relaxed);
}
Ok(SerializedMessage::Command(CommandMessage::Disconnected)) => {
info!("Disconnected from server");
connection_status.store(false, std::sync::atomic::Ordering::Relaxed);
}
Ok(SerializedMessage::Message {
sequence_number,
Expand Down Expand Up @@ -138,28 +162,44 @@ impl MacOSProviderClient {
client
}

pub fn send_native_status(&self, key: String, value: String) {
let status = NativeStatus { key, value };
self.send_message(status, None);
}

pub fn prepare_passkey_registration(
&self,
request: PasskeyRegistrationRequest,
callback: Arc<dyn PreparePasskeyRegistrationCallback>,
) {
self.send_message(request, Box::new(callback));
self.send_message(request, Some(Box::new(callback)));
}

pub fn prepare_passkey_assertion(
&self,
request: PasskeyAssertionRequest,
callback: Arc<dyn PreparePasskeyAssertionCallback>,
) {
self.send_message(request, Box::new(callback));
self.send_message(request, Some(Box::new(callback)));
}

pub fn prepare_passkey_assertion_without_user_interface(
&self,
request: PasskeyAssertionWithoutUserInterfaceRequest,
callback: Arc<dyn PreparePasskeyAssertionCallback>,
) {
self.send_message(request, Box::new(callback));
self.send_message(request, Some(Box::new(callback)));
}

pub fn get_connection_status(&self) -> ConnectionStatus {
let is_connected = self
.connection_status
.load(std::sync::atomic::Ordering::Relaxed);
if is_connected {
ConnectionStatus::Connected
} else {
ConnectionStatus::Disconnected
}
}
}

Expand Down Expand Up @@ -201,9 +241,13 @@ impl MacOSProviderClient {
fn send_message(
&self,
message: impl Serialize + DeserializeOwned,
callback: Box<dyn Callback>,
callback: Option<Box<dyn Callback>>,
) {
let sequence_number = self.add_callback(callback);
let sequence_number = if let Some(cb) = callback {
self.add_callback(cb)
} else {
0 // Special value indicating "no callback"
};

let message = serde_json::to_string(&SerializedMessage::Message {
sequence_number,
Expand All @@ -213,15 +257,17 @@ impl MacOSProviderClient {

if let Err(e) = self.to_server_send.blocking_send(message) {
// Make sure we remove the callback from the queue if we can't send the message
if let Some((cb, _)) = self
.response_callbacks_queue
.lock()
.unwrap()
.remove(&sequence_number)
{
cb.error(BitwardenError::Internal(format!(
"Error sending message: {e}"
)));
if sequence_number != 0 {
if let Some((cb, _)) = self
.response_callbacks_queue
.lock()
.unwrap()
.remove(&sequence_number)
{
cb.error(BitwardenError::Internal(format!(
"Error sending message: {e}"
)));
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ pub struct PasskeyRegistrationRequest {
user_verification: UserVerification,
supported_algorithms: Vec<i32>,
window_xy: Position,
excluded_credentials: Vec<Vec<u8>>,
}

#[derive(uniffi::Record, Serialize, Deserialize)]
Expand Down
7 changes: 6 additions & 1 deletion apps/desktop/desktop_native/napi/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ export declare namespace autofill {
userVerification: UserVerification
supportedAlgorithms: Array<number>
windowXy: Position
excludedCredentials: Array<Array<number>>
}
export interface PasskeyRegistrationResponse {
rpId: string
Expand All @@ -170,6 +171,10 @@ export declare namespace autofill {
userVerification: UserVerification
windowXy: Position
}
export interface NativeStatus {
key: string
value: string
}
export interface PasskeyAssertionResponse {
rpId: string
userHandle: Array<number>
Expand All @@ -185,7 +190,7 @@ export declare namespace autofill {
* @param name The endpoint name to listen on. This name uniquely identifies the IPC connection and must be the same for both the server and client.
* @param callback This function will be called whenever a message is received from a client.
*/
static listen(name: string, registrationCallback: (error: null | Error, clientId: number, sequenceNumber: number, message: PasskeyRegistrationRequest) => void, assertionCallback: (error: null | Error, clientId: number, sequenceNumber: number, message: PasskeyAssertionRequest) => void, assertionWithoutUserInterfaceCallback: (error: null | Error, clientId: number, sequenceNumber: number, message: PasskeyAssertionWithoutUserInterfaceRequest) => void): Promise<IpcServer>
static listen(name: string, registrationCallback: (error: null | Error, clientId: number, sequenceNumber: number, message: PasskeyRegistrationRequest) => void, assertionCallback: (error: null | Error, clientId: number, sequenceNumber: number, message: PasskeyAssertionRequest) => void, assertionWithoutUserInterfaceCallback: (error: null | Error, clientId: number, sequenceNumber: number, message: PasskeyAssertionWithoutUserInterfaceRequest) => void, nativeStatusCallback: (error: null | Error, clientId: number, sequenceNumber: number, message: NativeStatus) => void): Promise<IpcServer>
/** Return the path to the IPC server. */
getPath(): string
/** Stop the IPC server. */
Expand Down
Loading
Loading