-
Notifications
You must be signed in to change notification settings - Fork 2
/
passkey-api-client.ts
74 lines (60 loc) · 1.92 KB
/
passkey-api-client.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import ky from "ky";
import {KyInstance} from "ky/distribution/types/ky";
import {
AddAuthenticatorRequest,
AddAuthenticatorResponse,
AuthenticationOptsRequest,
AuthenticationOptsResponse,
RegistrationOptsRequest,
RegistrationOptsResponse,
VerifyRequest,
VerifyResponse,
} from "./types";
type PasskeyApiClientOptions = {
baseUrl: string;
tenantId: string;
};
export class PasskeyApiClient {
tenantId: string;
api: KyInstance;
constructor({baseUrl, tenantId}: PasskeyApiClientOptions) {
this.tenantId = tenantId;
this.api = ky.create({
prefixUrl: baseUrl,
});
}
async registrationOptions({token, userName}: RegistrationOptsRequest): Promise<RegistrationOptsResponse> {
const response = await this.api.post("user-authenticators/passkey/registration-options", {
json: {userName},
headers: this.buildHeaders(token),
});
return response.json();
}
async authenticationOptions({token}: AuthenticationOptsRequest): Promise<AuthenticationOptsResponse> {
const response = await this.api.post("user-authenticators/passkey/authentication-options", {
json: {},
headers: this.buildHeaders(token),
});
return response.json();
}
async addAuthenticator({token, ...rest}: AddAuthenticatorRequest): Promise<AddAuthenticatorResponse> {
const response = await this.api.post("user-authenticators/passkey", {
json: rest,
headers: this.buildHeaders(token),
});
return response.json();
}
async verify({token, ...rest}: VerifyRequest): Promise<VerifyResponse> {
const response = await this.api.post("verify/passkey", {
json: rest,
headers: this.buildHeaders(token),
});
return response.json();
}
private buildHeaders(token?: string) {
const authorizationHeader = token ? `Bearer ${token}` : `Basic ${window.btoa(encodeURIComponent(this.tenantId))}`;
return {
Authorization: authorizationHeader,
};
}
}