node-windows-ucv/index.ts
Fedor Indutny dd9dd40da5 v1.0.0
2025-06-05 11:17:30 -07:00

75 lines
1.9 KiB
TypeScript

import loadBinding from 'bindings';
export type Availability =
| 'available'
| 'deviceBusy'
| 'deviceNotPresent'
| 'disabledByPolicy'
| 'notConfiguredForUser'
| 'unknown';
export type Verification =
| 'verified'
| 'deviceBusy'
| 'deviceNotPresent'
| 'disabledByPolicy'
| 'notConfiguredForUser'
| 'retriesExhausted'
| 'canceled'
| 'unknown';
type BindingType = Readonly<{
checkAvailability(callback: (result: Availability | 'error') => void): void;
requestVerification(
message: string,
callback: (result: Verification | 'error') => void,
): void;
}>;
let binding: BindingType | undefined;
if (process.platform === 'win32') {
binding = loadBinding('windows-ucv');
}
/**
* Check if User Constant Verification is available.
*
* See: https://learn.microsoft.com/en-us/uwp/api/windows.security.credentials.ui.userconsentverifier.checkavailabilityasync?view=winrt-26100#windows-security-credentials-ui-userconsentverifier-checkavailabilityasync
*/
export async function checkAvailability(): Promise<Availability> {
if (!binding) {
throw new Error('This library works only on Windows');
}
return new Promise((resolve, reject) => {
binding.checkAvailability((result) => {
if (result === 'error') {
return reject(new Error('Internal error'));
}
return resolve(result);
});
});
}
/**
* Request User Constant Verification
*
* See: https://learn.microsoft.com/en-us/uwp/api/windows.security.credentials.ui.userconsentverifier.requestverificationasync?view=winrt-26100
*/
export async function requestVerification(
message: string,
): Promise<Verification> {
if (!binding) {
throw new Error('This library works only on Windows');
}
return new Promise((resolve, reject) => {
binding.requestVerification(message, (result) => {
if (result === 'error') {
return reject(new Error('Internal error'));
}
return resolve(result);
});
});
}