75 lines
1.9 KiB
TypeScript
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);
|
|
});
|
|
});
|
|
}
|