@passlock/client 2.0.0-beta.2 → 2.0.0-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/{network.d.ts → internal/network.d.ts} +5 -3
- package/dist/internal/network.d.ts.map +1 -0
- package/dist/{network.js → internal/network.js} +29 -10
- package/dist/internal/network.js.map +1 -0
- package/dist/internal/promise.d.ts.map +1 -0
- package/dist/internal/promise.js.map +1 -0
- package/dist/internal/tenancy.d.ts.map +1 -0
- package/dist/internal/tenancy.js.map +1 -0
- package/dist/logger/index.d.ts +3 -1
- package/dist/logger/index.d.ts.map +1 -1
- package/dist/logger/index.js +8 -3
- package/dist/logger/index.js.map +1 -1
- package/dist/passkey/authentication/authentication.d.ts +118 -0
- package/dist/passkey/authentication/authentication.d.ts.map +1 -0
- package/dist/passkey/authentication/{micro.js → authentication.js} +98 -33
- package/dist/passkey/authentication/authentication.js.map +1 -0
- package/dist/passkey/authentication/authentication.test.d.ts +2 -0
- package/dist/passkey/authentication/authentication.test.d.ts.map +1 -0
- package/dist/passkey/authentication/authentication.test.js +157 -0
- package/dist/passkey/authentication/authentication.test.js.map +1 -0
- package/dist/passkey/authentication/index.d.ts +3 -3
- package/dist/passkey/authentication/index.d.ts.map +1 -1
- package/dist/passkey/authentication/index.js +5 -5
- package/dist/passkey/authentication/index.js.map +1 -1
- package/dist/passkey/{shared.d.ts → errors.d.ts} +5 -4
- package/dist/passkey/errors.d.ts.map +1 -0
- package/dist/passkey/{shared.js → errors.js} +4 -4
- package/dist/passkey/errors.js.map +1 -0
- package/dist/passkey/index.d.ts +5 -6
- package/dist/passkey/index.d.ts.map +1 -1
- package/dist/passkey/index.js +5 -4
- package/dist/passkey/index.js.map +1 -1
- package/dist/passkey/registration/index.d.ts +3 -3
- package/dist/passkey/registration/index.d.ts.map +1 -1
- package/dist/passkey/registration/index.js +5 -5
- package/dist/passkey/registration/index.js.map +1 -1
- package/dist/passkey/registration/{micro.d.ts → registration.d.ts} +45 -10
- package/dist/passkey/registration/registration.d.ts.map +1 -0
- package/dist/passkey/registration/{micro.js → registration.js} +63 -42
- package/dist/passkey/registration/registration.js.map +1 -0
- package/dist/passkey/registration/registration.test.d.ts +2 -0
- package/dist/passkey/registration/registration.test.d.ts.map +1 -0
- package/dist/passkey/registration/registration.test.js +161 -0
- package/dist/passkey/registration/registration.test.js.map +1 -0
- package/dist/passkey/signals/index.d.ts +9 -0
- package/dist/passkey/signals/index.d.ts.map +1 -0
- package/dist/passkey/signals/index.js +19 -0
- package/dist/passkey/signals/index.js.map +1 -0
- package/dist/passkey/signals/signals.d.ts +45 -0
- package/dist/passkey/signals/signals.d.ts.map +1 -0
- package/dist/passkey/signals/signals.js +156 -0
- package/dist/passkey/signals/signals.js.map +1 -0
- package/dist/passkey/support.d.ts.map +1 -1
- package/dist/passkey/support.js +1 -1
- package/dist/passkey/support.js.map +1 -1
- package/dist/passkey/types.d.ts.map +1 -1
- package/dist/shared.d.ts.map +1 -1
- package/package.json +22 -25
- package/dist/network.d.ts.map +0 -1
- package/dist/network.js.map +0 -1
- package/dist/passkey/authentication/micro.d.ts +0 -71
- package/dist/passkey/authentication/micro.d.ts.map +0 -1
- package/dist/passkey/authentication/micro.js.map +0 -1
- package/dist/passkey/registration/micro.d.ts.map +0 -1
- package/dist/passkey/registration/micro.js.map +0 -1
- package/dist/passkey/shared.d.ts.map +0 -1
- package/dist/passkey/shared.js.map +0 -1
- package/dist/promise.d.ts.map +0 -1
- package/dist/promise.js.map +0 -1
- package/dist/tenancy.d.ts.map +0 -1
- package/dist/tenancy.js.map +0 -1
- /package/dist/{promise.d.ts → internal/promise.d.ts} +0 -0
- /package/dist/{promise.js → internal/promise.js} +0 -0
- /package/dist/{tenancy.d.ts → internal/tenancy.d.ts} +0 -0
- /package/dist/{tenancy.js → internal/tenancy.js} +0 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import fetchMock from "@fetch-mock/vitest";
|
|
2
|
+
import { Context, Micro, pipe } from "effect";
|
|
3
|
+
import { afterAll, describe, expect, it, vi } from "vitest";
|
|
4
|
+
import { Endpoint } from "../../internal/network";
|
|
5
|
+
import { TenancyId } from "../../internal/tenancy";
|
|
6
|
+
import { Logger } from "../../logger";
|
|
7
|
+
import { PasskeysUnsupportedError } from "../errors";
|
|
8
|
+
import { AuthenticationHelper, authenticatePasskey, fetchOptions, startAuthentication, verifyCredential, } from "./authentication";
|
|
9
|
+
const loggerTest = {
|
|
10
|
+
logDebug: () => Micro.void,
|
|
11
|
+
logError: () => Micro.void,
|
|
12
|
+
logInfo: () => Micro.void,
|
|
13
|
+
logWarn: () => Micro.void,
|
|
14
|
+
};
|
|
15
|
+
describe(fetchOptions.name, () => {
|
|
16
|
+
const endpoint = "https://api.passlock.dev";
|
|
17
|
+
const tenancyId = "dummyTenancyId";
|
|
18
|
+
const ctx = pipe(Context.make(Endpoint, { endpoint }), Context.add(Logger, loggerTest), Context.add(TenancyId, { tenancyId }));
|
|
19
|
+
const expectedRoute = `${endpoint}/${tenancyId}/passkey/authentication/options`;
|
|
20
|
+
const mockResponse = {
|
|
21
|
+
optionsJSON: {},
|
|
22
|
+
sessionToken: "dummySessionToken",
|
|
23
|
+
};
|
|
24
|
+
describe("given an empty set of options", () => {
|
|
25
|
+
it("should fetch some PublicKeyCredentialCreationOptions", async () => {
|
|
26
|
+
fetchMock.mockGlobal().postOnce(expectedRoute, mockResponse);
|
|
27
|
+
const result = await pipe(fetchOptions({}), Micro.provideContext(ctx), Micro.runPromise);
|
|
28
|
+
expect(result.sessionToken).toBeTruthy();
|
|
29
|
+
expect(result.optionsJSON).toBeTruthy();
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
describe("given a userId", () => {
|
|
33
|
+
const userId = "dummyUserId";
|
|
34
|
+
it("should send it to the backend", async () => {
|
|
35
|
+
fetchMock.mockGlobal().postOnce(expectedRoute, mockResponse);
|
|
36
|
+
await pipe(fetchOptions({ userId }), Micro.provideContext(ctx), Micro.runPromise);
|
|
37
|
+
expect(fetchMock).toHavePosted(expectedRoute, { body: { userId } });
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
describe("given a list of allowCredentials", () => {
|
|
41
|
+
const allowCredentials = ["dummyCredential"];
|
|
42
|
+
it("should send them to the backend", async () => {
|
|
43
|
+
fetchMock.mockGlobal().postOnce(expectedRoute, mockResponse);
|
|
44
|
+
await pipe(fetchOptions({ allowCredentials }), Micro.provideContext(ctx), Micro.runPromise);
|
|
45
|
+
expect(fetchMock).toHavePosted(expectedRoute, {
|
|
46
|
+
body: { allowCredentials },
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
describe("given a userVerification", () => {
|
|
51
|
+
const userVerification = "required";
|
|
52
|
+
it("should send it to the backend", async () => {
|
|
53
|
+
fetchMock.mockGlobal().postOnce(expectedRoute, mockResponse);
|
|
54
|
+
await pipe(fetchOptions({ userVerification }), Micro.provideContext(ctx), Micro.runPromise);
|
|
55
|
+
expect(fetchMock).toHavePosted(expectedRoute, {
|
|
56
|
+
body: { userVerification },
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
it("should invoke the onEvent handler", async () => {
|
|
61
|
+
fetchMock.mockGlobal().postOnce(expectedRoute, mockResponse);
|
|
62
|
+
const onEvent = vi.fn();
|
|
63
|
+
await pipe(fetchOptions({ onEvent }), Micro.provideContext(ctx), Micro.runPromise);
|
|
64
|
+
expect(onEvent).toHaveBeenCalledWith("optionsRequest");
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
describe(startAuthentication.name, () => {
|
|
68
|
+
describe("given valid options", () => {
|
|
69
|
+
const authenticationHelperTest = {
|
|
70
|
+
browserSupportsWebAuthn: () => true,
|
|
71
|
+
startAuthentication: () => Promise.resolve({}),
|
|
72
|
+
};
|
|
73
|
+
it("should invoke the underlying startAuthentication function", async () => {
|
|
74
|
+
await pipe(startAuthentication({}, {
|
|
75
|
+
useBrowserAutofill: false,
|
|
76
|
+
}), Micro.provideService(Logger, loggerTest), Micro.provideService(AuthenticationHelper, authenticationHelperTest), Micro.runPromise);
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
describe("if the device does not support passkeys", () => {
|
|
80
|
+
const authenticationHelperTest = {
|
|
81
|
+
browserSupportsWebAuthn: () => false,
|
|
82
|
+
startAuthentication: () => Promise.resolve({}),
|
|
83
|
+
};
|
|
84
|
+
it("should return an error", async () => {
|
|
85
|
+
const result = await pipe(startAuthentication({}, {
|
|
86
|
+
useBrowserAutofill: false,
|
|
87
|
+
}), Micro.flip, Micro.provideService(Logger, loggerTest), Micro.provideService(AuthenticationHelper, authenticationHelperTest), Micro.runPromise);
|
|
88
|
+
expect(result).toBeInstanceOf(PasskeysUnsupportedError);
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
describe(verifyCredential.name, () => {
|
|
93
|
+
const endpoint = "https://api.passlock.dev";
|
|
94
|
+
const tenancyId = "dummyTenancyId";
|
|
95
|
+
const ctx = pipe(Context.make(Endpoint, { endpoint }), Context.add(Logger, loggerTest), Context.add(TenancyId, { tenancyId }));
|
|
96
|
+
const expectedRoute = `${endpoint}/${tenancyId}/passkey/authentication/verification`;
|
|
97
|
+
describe("when the passkey exists", () => {
|
|
98
|
+
const mockResponse = {
|
|
99
|
+
_tag: "AuthenticationSuccess",
|
|
100
|
+
code: "dummyCode",
|
|
101
|
+
id_token: "dummyIdToken",
|
|
102
|
+
principal: {
|
|
103
|
+
authenticatorId: "dummyPasskeyId",
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
it("should return a successful response", async () => {
|
|
107
|
+
fetchMock.mockGlobal().postOnce(expectedRoute, mockResponse);
|
|
108
|
+
const result = await pipe(verifyCredential("dummySessionToken", {}, {}), Micro.provideContext(ctx), Micro.runPromise);
|
|
109
|
+
expect(result).toStrictEqual(mockResponse);
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
describe("when the backend says the passkey does not exist", () => {
|
|
113
|
+
it("should return an error", async () => {
|
|
114
|
+
const mockResponse = {
|
|
115
|
+
_tag: "@error/PasskeyNotFound",
|
|
116
|
+
credentialId: "dummyWebAuthnId",
|
|
117
|
+
message: "oops",
|
|
118
|
+
rpId: "localhost",
|
|
119
|
+
};
|
|
120
|
+
fetchMock.mockGlobal().postOnce(expectedRoute, { body: mockResponse, status: 400 });
|
|
121
|
+
const error = await pipe(verifyCredential("dummySessionToken", {}, {}), Micro.flip, Micro.provideContext(ctx), Micro.runPromise);
|
|
122
|
+
expect(error).toStrictEqual(mockResponse);
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
describe(authenticatePasskey.name, () => {
|
|
127
|
+
const endpoint = "https://api.passlock.dev";
|
|
128
|
+
const tenancyId = "dummyTenancyId";
|
|
129
|
+
const authenticationHelperTest = {
|
|
130
|
+
browserSupportsWebAuthn: () => true,
|
|
131
|
+
startAuthentication: () => Promise.resolve({}),
|
|
132
|
+
};
|
|
133
|
+
const ctx = pipe(Context.make(Endpoint, { endpoint }), Context.add(Logger, loggerTest), Context.add(TenancyId, { tenancyId }), Context.add(AuthenticationHelper, authenticationHelperTest));
|
|
134
|
+
const optionsRoute = `${endpoint}/${tenancyId}/passkey/authentication/options`;
|
|
135
|
+
const optionsResponse = {
|
|
136
|
+
optionsJSON: {},
|
|
137
|
+
sessionToken: "dummySessionToken",
|
|
138
|
+
};
|
|
139
|
+
const verificationRoute = `${endpoint}/${tenancyId}/passkey/authentication/verification`;
|
|
140
|
+
const verificationResponse = {
|
|
141
|
+
_tag: "AuthenticationSuccess",
|
|
142
|
+
code: "dummyCode",
|
|
143
|
+
id_token: "dummyIdToken",
|
|
144
|
+
principal: {
|
|
145
|
+
authenticatorId: "dummyPasskeyId",
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
it("should fetch the options and kick off the authentication", async () => {
|
|
149
|
+
fetchMock.mockGlobal().postOnce(optionsRoute, optionsResponse);
|
|
150
|
+
fetchMock.mockGlobal().postOnce(verificationRoute, verificationResponse);
|
|
151
|
+
pipe(authenticatePasskey({ tenancyId }), Micro.provideContext(ctx), Micro.runPromise);
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
afterAll(() => {
|
|
155
|
+
fetchMock.unmockGlobal();
|
|
156
|
+
});
|
|
157
|
+
//# sourceMappingURL=authentication.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authentication.test.js","sourceRoot":"","sources":["../../../src/passkey/authentication/authentication.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type AuthenticationError, type AuthenticationOptions, type AuthenticationSuccess } from "./micro";
|
|
2
1
|
import { Logger } from "../../logger";
|
|
2
|
+
import { type AuthenticationError, type AuthenticationOptions, type AuthenticationSuccess } from "./authentication";
|
|
3
3
|
/**
|
|
4
4
|
* Trigger local passkey authentication then verify the passkey in the Passlock vault.
|
|
5
5
|
* Returns a code and id_token that can be exchanged/decoded in your backend.
|
|
@@ -16,6 +16,6 @@ export declare const authenticatePasskeyUnsafe: (options: AuthenticationOptions,
|
|
|
16
16
|
* @returns
|
|
17
17
|
*/
|
|
18
18
|
export declare const authenticatePasskey: (options: AuthenticationOptions, logger?: typeof Logger.Service) => Promise<AuthenticationSuccess | AuthenticationError>;
|
|
19
|
-
export type { AuthenticationSuccess,
|
|
20
|
-
export { isAuthenticationSuccess } from "./
|
|
19
|
+
export type { AuthenticationError, AuthenticationOptions, AuthenticationSuccess, } from "./authentication";
|
|
20
|
+
export { isAuthenticationSuccess } from "./authentication";
|
|
21
21
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/passkey/authentication/index.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/passkey/authentication/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAe,MAAM,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EACL,KAAK,mBAAmB,EAExB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAE3B,MAAM,kBAAkB,CAAA;AAEzB;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,GACpC,SAAS,qBAAqB,EAC9B,SAAQ,OAAO,MAAM,CAAC,OAAqB,KAC1C,OAAO,CAAC,qBAAqB,CAM7B,CAAA;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAC9B,SAAS,qBAAqB,EAC9B,SAAQ,OAAO,MAAM,CAAC,OAAqB,KAC1C,OAAO,CAAC,qBAAqB,GAAG,mBAAmB,CAMnD,CAAA;AAEH,YAAY,EACV,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Micro, pipe } from "effect";
|
|
2
|
-
import { runToPromise, runToPromiseUnsafe } from "../../promise";
|
|
3
|
-
import { authenticatePasskey as authenticatePasskeyM, } from "./micro";
|
|
2
|
+
import { runToPromise, runToPromiseUnsafe } from "../../internal/promise";
|
|
4
3
|
import { EventLogger, Logger } from "../../logger";
|
|
4
|
+
import { AuthenticationHelper, authenticatePasskey as authenticatePasskeyM, } from "./authentication";
|
|
5
5
|
/**
|
|
6
6
|
* Trigger local passkey authentication then verify the passkey in the Passlock vault.
|
|
7
7
|
* Returns a code and id_token that can be exchanged/decoded in your backend.
|
|
@@ -9,7 +9,7 @@ import { EventLogger, Logger } from "../../logger";
|
|
|
9
9
|
* @param options
|
|
10
10
|
* @returns
|
|
11
11
|
*/
|
|
12
|
-
export const authenticatePasskeyUnsafe = (options, logger = EventLogger) => pipe(authenticatePasskeyM(options), Micro.provideService(Logger, logger), runToPromiseUnsafe);
|
|
12
|
+
export const authenticatePasskeyUnsafe = (options, logger = EventLogger) => pipe(authenticatePasskeyM(options), Micro.provideService(Logger, logger), Micro.provideService(AuthenticationHelper, AuthenticationHelper.Default), runToPromiseUnsafe);
|
|
13
13
|
/**
|
|
14
14
|
* Trigger local passkey authentication then verify the passkey in the Passlock vault.
|
|
15
15
|
* Returns a code and id_token that can be exchanged/decoded in your backend.
|
|
@@ -17,6 +17,6 @@ export const authenticatePasskeyUnsafe = (options, logger = EventLogger) => pipe
|
|
|
17
17
|
* @param options
|
|
18
18
|
* @returns
|
|
19
19
|
*/
|
|
20
|
-
export const authenticatePasskey = (options, logger = EventLogger) => pipe(authenticatePasskeyM(options), Micro.provideService(Logger, logger), runToPromise);
|
|
21
|
-
export { isAuthenticationSuccess } from "./
|
|
20
|
+
export const authenticatePasskey = (options, logger = EventLogger) => pipe(authenticatePasskeyM(options), Micro.provideService(Logger, logger), Micro.provideService(AuthenticationHelper, AuthenticationHelper.Default), runToPromise);
|
|
21
|
+
export { isAuthenticationSuccess } from "./authentication";
|
|
22
22
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/passkey/authentication/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/passkey/authentication/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAEL,oBAAoB,EAGpB,mBAAmB,IAAI,oBAAoB,GAC5C,MAAM,kBAAkB,CAAA;AAEzB;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,OAA8B,EAC9B,SAAgC,WAAW,EACX,EAAE,CAClC,IAAI,CACF,oBAAoB,CAAC,OAAO,CAAC,EAC7B,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,KAAK,CAAC,cAAc,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,OAAO,CAAC,EACxE,kBAAkB,CACnB,CAAA;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,OAA8B,EAC9B,SAAgC,WAAW,EACW,EAAE,CACxD,IAAI,CACF,oBAAoB,CAAC,OAAO,CAAC,EAC7B,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,KAAK,CAAC,cAAc,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,OAAO,CAAC,EACxE,YAAY,CACb,CAAA;AAOH,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Micro } from "effect";
|
|
2
|
-
export declare const
|
|
2
|
+
export declare const isPasskeysUnsupported: (error: unknown) => error is PasskeysUnsupportedError;
|
|
3
3
|
declare const PasskeysUnsupportedError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => Micro.YieldableError & {
|
|
4
|
-
readonly _tag: "@error/
|
|
4
|
+
readonly _tag: "@error/PasskeysUnsupported";
|
|
5
5
|
} & Readonly<A>;
|
|
6
6
|
export declare class PasskeysUnsupportedError extends PasskeysUnsupportedError_base<{
|
|
7
7
|
readonly message: string;
|
|
8
8
|
}> {
|
|
9
|
-
static
|
|
9
|
+
static isPasskeysUnsupported: (error: unknown) => error is PasskeysUnsupportedError;
|
|
10
10
|
}
|
|
11
11
|
export type ErrorCode = "ERROR_CEREMONY_ABORTED" | "ERROR_INVALID_DOMAIN" | "ERROR_INVALID_RP_ID" | "ERROR_INVALID_USER_ID_LENGTH" | "ERROR_MALFORMED_PUBKEYCREDPARAMS" | "ERROR_AUTHENTICATOR_GENERAL_ERROR" | "ERROR_AUTHENTICATOR_MISSING_DISCOVERABLE_CREDENTIAL_SUPPORT" | "ERROR_AUTHENTICATOR_MISSING_USER_VERIFICATION_SUPPORT" | "ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED" | "ERROR_AUTHENTICATOR_NO_SUPPORTED_PUBKEYCREDPARAMS_ALG" | "ERROR_AUTO_REGISTER_USER_VERIFICATION_FAILURE" | "ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY";
|
|
12
12
|
export declare const isOtherPasskeyError: (error: unknown) => error is OtherPasskeyError;
|
|
@@ -17,8 +17,9 @@ export declare class OtherPasskeyError extends OtherPasskeyError_base<{
|
|
|
17
17
|
readonly error: unknown;
|
|
18
18
|
readonly message: string;
|
|
19
19
|
readonly code?: ErrorCode;
|
|
20
|
+
readonly cause?: unknown;
|
|
20
21
|
}> {
|
|
21
22
|
static isOtherPasskeyError: (error: unknown) => error is OtherPasskeyError;
|
|
22
23
|
}
|
|
23
24
|
export {};
|
|
24
|
-
//# sourceMappingURL=
|
|
25
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/passkey/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAE9B,eAAO,MAAM,qBAAqB,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,wBACrB,CAAA;;;;AAE3C,qBAAa,wBAAyB,SAAQ,8BAAgD;IAC5F,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAC;IACA,MAAM,CAAC,qBAAqB,UANe,OAAO,KAAG,KAAK,IAAI,wBAAwB,CAMlC;CACrD;AAED,MAAM,MAAM,SAAS,GACjB,wBAAwB,GACxB,sBAAsB,GACtB,qBAAqB,GACrB,8BAA8B,GAC9B,kCAAkC,GAClC,mCAAmC,GACnC,6DAA6D,GAC7D,uDAAuD,GACvD,2CAA2C,GAC3C,uDAAuD,GACvD,+CAA+C,GAC/C,sCAAsC,CAAA;AAE1C,eAAO,MAAM,mBAAmB,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,iBAC1B,CAAA;;;;AAEpC,qBAAa,iBAAkB,SAAQ,uBAA8C;IACnF,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAA;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CACzB,CAAC;IACA,MAAM,CAAC,mBAAmB,UATe,OAAO,KAAG,KAAK,IAAI,iBAAiB,CAS7B;CACjD"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Micro } from "effect";
|
|
2
|
-
export const
|
|
3
|
-
export class PasskeysUnsupportedError extends Micro.TaggedError("@error/
|
|
4
|
-
static
|
|
2
|
+
export const isPasskeysUnsupported = (error) => error instanceof PasskeysUnsupportedError;
|
|
3
|
+
export class PasskeysUnsupportedError extends Micro.TaggedError("@error/PasskeysUnsupported") {
|
|
4
|
+
static isPasskeysUnsupported = isPasskeysUnsupported;
|
|
5
5
|
}
|
|
6
6
|
export const isOtherPasskeyError = (error) => error instanceof OtherPasskeyError;
|
|
7
7
|
export class OtherPasskeyError extends Micro.TaggedError("@error/OtherPasskeyError") {
|
|
8
8
|
static isOtherPasskeyError = isOtherPasskeyError;
|
|
9
9
|
}
|
|
10
|
-
//# sourceMappingURL=
|
|
10
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/passkey/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAE9B,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAc,EAAqC,EAAE,CACzF,KAAK,YAAY,wBAAwB,CAAA;AAE3C,MAAM,OAAO,wBAAyB,SAAQ,KAAK,CAAC,WAAW,CAAC,4BAA4B,CAE1F;IACA,MAAM,CAAC,qBAAqB,GAAG,qBAAqB,CAAA;;AAiBtD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAc,EAA8B,EAAE,CAChF,KAAK,YAAY,iBAAiB,CAAA;AAEpC,MAAM,OAAO,iBAAkB,SAAQ,KAAK,CAAC,WAAW,CAAC,0BAA0B,CAKjF;IACA,MAAM,CAAC,mBAAmB,GAAG,mBAAmB,CAAA"}
|
package/dist/passkey/index.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
export
|
|
5
|
-
export
|
|
6
|
-
export { PasskeysUnsupportedError, OtherPasskeyError } from "./shared";
|
|
1
|
+
export * from "./authentication/index";
|
|
2
|
+
export * from "./errors";
|
|
3
|
+
export * from "./registration/index";
|
|
4
|
+
export * from "./signals/index";
|
|
5
|
+
export * from "./support";
|
|
7
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/passkey/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/passkey/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,UAAU,CAAA;AACxB,cAAc,sBAAsB,CAAA;AACpC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,WAAW,CAAA"}
|
package/dist/passkey/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
export
|
|
1
|
+
export * from "./authentication/index";
|
|
2
|
+
export * from "./errors";
|
|
3
|
+
export * from "./registration/index";
|
|
4
|
+
export * from "./signals/index";
|
|
5
|
+
export * from "./support";
|
|
5
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/passkey/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/passkey/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,UAAU,CAAA;AACxB,cAAc,sBAAsB,CAAA;AACpC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,WAAW,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type RegistrationError, type RegistrationOptions, type RegistrationSuccess } from "./micro";
|
|
2
1
|
import { Logger } from "../../logger";
|
|
2
|
+
import { type RegistrationError, type RegistrationOptions, type RegistrationSuccess } from "./registration";
|
|
3
3
|
/**
|
|
4
4
|
* Register a passkey on the local device and store the
|
|
5
5
|
* associated public key in your Passlock vault.
|
|
@@ -14,6 +14,6 @@ export declare const registerPasskeyUnsafe: (options: RegistrationOptions, logge
|
|
|
14
14
|
* @returns
|
|
15
15
|
*/
|
|
16
16
|
export declare const registerPasskey: (options: RegistrationOptions, logger?: typeof Logger.Service) => Promise<RegistrationSuccess | RegistrationError>;
|
|
17
|
-
export type {
|
|
18
|
-
export { isRegistrationSuccess } from "./
|
|
17
|
+
export type { RegistrationError, RegistrationOptions, RegistrationSuccess } from "./registration";
|
|
18
|
+
export { isRegistrationSuccess } from "./registration";
|
|
19
19
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/passkey/registration/index.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/passkey/registration/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAe,MAAM,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EACL,KAAK,iBAAiB,EAEtB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EAEzB,MAAM,gBAAgB,CAAA;AAEvB;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,SAAS,mBAAmB,EAC5B,SAAQ,OAAO,MAAM,CAAC,OAAqB,KAC1C,OAAO,CAAC,mBAAmB,CAM3B,CAAA;AAEH;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAC1B,SAAS,mBAAmB,EAC5B,SAAQ,OAAO,MAAM,CAAC,OAAqB,KAC1C,OAAO,CAAC,mBAAmB,GAAG,iBAAiB,CAM/C,CAAA;AAEH,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AACjG,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import { Micro, pipe } from "effect";
|
|
2
|
-
import { runToPromise, runToPromiseUnsafe } from "../../promise";
|
|
3
|
-
import { registerPasskey as registerPasskeyM, } from "./micro";
|
|
2
|
+
import { runToPromise, runToPromiseUnsafe } from "../../internal/promise";
|
|
4
3
|
import { EventLogger, Logger } from "../../logger";
|
|
4
|
+
import { RegistrationHelper, registerPasskey as registerPasskeyM, } from "./registration";
|
|
5
5
|
/**
|
|
6
6
|
* Register a passkey on the local device and store the
|
|
7
7
|
* associated public key in your Passlock vault.
|
|
8
8
|
* @param options
|
|
9
9
|
* @returns
|
|
10
10
|
*/
|
|
11
|
-
export const registerPasskeyUnsafe = async (options, logger = EventLogger) => pipe(registerPasskeyM(options), Micro.provideService(Logger, logger), runToPromiseUnsafe);
|
|
11
|
+
export const registerPasskeyUnsafe = async (options, logger = EventLogger) => pipe(registerPasskeyM(options), Micro.provideService(Logger, logger), Micro.provideService(RegistrationHelper, RegistrationHelper.Default), runToPromiseUnsafe);
|
|
12
12
|
/**
|
|
13
13
|
* Register a passkey on the local device and store the
|
|
14
14
|
* associated public key in your Passlock vault.
|
|
15
15
|
* @param options
|
|
16
16
|
* @returns
|
|
17
17
|
*/
|
|
18
|
-
export const registerPasskey = async (options, logger = EventLogger) => pipe(registerPasskeyM(options), Micro.provideService(Logger, logger), runToPromise);
|
|
19
|
-
export { isRegistrationSuccess } from "./
|
|
18
|
+
export const registerPasskey = async (options, logger = EventLogger) => pipe(registerPasskeyM(options), Micro.provideService(Logger, logger), Micro.provideService(RegistrationHelper, RegistrationHelper.Default), runToPromise);
|
|
19
|
+
export { isRegistrationSuccess } from "./registration";
|
|
20
20
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/passkey/registration/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/passkey/registration/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAEL,kBAAkB,EAGlB,eAAe,IAAI,gBAAgB,GACpC,MAAM,gBAAgB,CAAA;AAEvB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EACxC,OAA4B,EAC5B,SAAgC,WAAW,EACb,EAAE,CAChC,IAAI,CACF,gBAAgB,CAAC,OAAO,CAAC,EACzB,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,KAAK,CAAC,cAAc,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,OAAO,CAAC,EACpE,kBAAkB,CACnB,CAAA;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAClC,OAA4B,EAC5B,SAAgC,WAAW,EACO,EAAE,CACpD,IAAI,CACF,gBAAgB,CAAC,OAAO,CAAC,EACzB,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,KAAK,CAAC,cAAc,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,OAAO,CAAC,EACpE,YAAY,CACb,CAAA;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -1,12 +1,29 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { type UnexpectedError } from "../../network";
|
|
3
|
-
import { OtherPasskeyError as OtherPasskeyError, PasskeysUnsupportedError } from "../shared";
|
|
4
|
-
import { type PasslockOptions } from "../../shared";
|
|
5
|
-
import { Logger } from "../../logger";
|
|
1
|
+
import type { PasslockOptions } from "../../shared";
|
|
6
2
|
import type { UserVerification } from "../types";
|
|
7
|
-
|
|
3
|
+
import * as Helper from "@simplewebauthn/browser";
|
|
4
|
+
import { type PublicKeyCredentialCreationOptionsJSON, type RegistrationResponseJSON } from "@simplewebauthn/browser";
|
|
5
|
+
import { Context, Micro } from "effect";
|
|
6
|
+
import { Endpoint, type UnexpectedError } from "../../internal/network";
|
|
7
|
+
import { TenancyId } from "../../internal/tenancy";
|
|
8
|
+
import { Logger } from "../../logger";
|
|
9
|
+
import { OtherPasskeyError, PasskeysUnsupportedError } from "../errors";
|
|
10
|
+
interface OptionsResponse {
|
|
11
|
+
sessionToken: string;
|
|
12
|
+
optionsJSON: PublicKeyCredentialCreationOptionsJSON;
|
|
13
|
+
}
|
|
14
|
+
declare const RegistrationHelper_base: Context.TagClass<RegistrationHelper, "RegistrationHelper", {
|
|
15
|
+
browserSupportsWebAuthn: typeof Helper.browserSupportsWebAuthn;
|
|
16
|
+
startRegistration: typeof Helper.startRegistration;
|
|
17
|
+
}>;
|
|
18
|
+
export declare class RegistrationHelper extends RegistrationHelper_base {
|
|
19
|
+
static Default: {
|
|
20
|
+
browserSupportsWebAuthn: typeof Helper.browserSupportsWebAuthn;
|
|
21
|
+
startRegistration: typeof Helper.startRegistration;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export declare const isDuplicatePasskey: (err: unknown) => err is DuplicatePasskeyError;
|
|
8
25
|
declare const DuplicatePasskeyError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => Micro.YieldableError & {
|
|
9
|
-
readonly _tag: "@error/
|
|
26
|
+
readonly _tag: "@error/DuplicatePasskey";
|
|
10
27
|
} & Readonly<A>;
|
|
11
28
|
/**
|
|
12
29
|
* Raised if excludeCredentials or userId was provided and the
|
|
@@ -16,8 +33,11 @@ declare const DuplicatePasskeyError_base: new <A extends Record<string, any> = {
|
|
|
16
33
|
export declare class DuplicatePasskeyError extends DuplicatePasskeyError_base<{
|
|
17
34
|
readonly message: string;
|
|
18
35
|
}> {
|
|
19
|
-
static
|
|
36
|
+
static isDuplicatePasskey: (err: unknown) => err is DuplicatePasskeyError;
|
|
20
37
|
}
|
|
38
|
+
export declare const registrationEvent: readonly ["optionsRequest", "createCredential", "saveCredential"];
|
|
39
|
+
export type RegistrationEvent = (typeof registrationEvent)[number];
|
|
40
|
+
export type OnEventFn = (event: RegistrationEvent) => void;
|
|
21
41
|
/**
|
|
22
42
|
* Passkey registration options
|
|
23
43
|
*/
|
|
@@ -50,8 +70,17 @@ export interface RegistrationOptions extends PasslockOptions {
|
|
|
50
70
|
* @see {@link https://passlock.dev/passkeys/user-verification/|userVerification}
|
|
51
71
|
*/
|
|
52
72
|
userVerification?: UserVerification | undefined;
|
|
73
|
+
/**
|
|
74
|
+
* Receive notifications about key stages in the registration process.
|
|
75
|
+
* For example, you might use event notifications to toggle loading icons or
|
|
76
|
+
* to disable certain form fields.
|
|
77
|
+
* @param event
|
|
78
|
+
* @returns
|
|
79
|
+
*/
|
|
80
|
+
onEvent?: OnEventFn;
|
|
53
81
|
timeout?: number | undefined;
|
|
54
82
|
}
|
|
83
|
+
export declare const fetchOptions: (options: Omit<RegistrationOptions, keyof PasslockOptions>) => Micro.Micro<OptionsResponse, UnexpectedError, Endpoint | Logger | TenancyId>;
|
|
55
84
|
declare const RegistrationSuccessTag: "RegistrationSuccess";
|
|
56
85
|
type RegistrationSuccessTag = typeof RegistrationSuccessTag;
|
|
57
86
|
/**
|
|
@@ -86,6 +115,12 @@ export interface RegistrationSuccess {
|
|
|
86
115
|
code: string;
|
|
87
116
|
}
|
|
88
117
|
export declare const isRegistrationSuccess: (payload: unknown) => payload is RegistrationSuccess;
|
|
118
|
+
export declare const startRegistration: (optionsJSON: PublicKeyCredentialCreationOptionsJSON, { onEvent }: {
|
|
119
|
+
onEvent?: OnEventFn | undefined;
|
|
120
|
+
}) => Micro.Micro<Helper.RegistrationResponseJSON, PasskeysUnsupportedError | OtherPasskeyError | DuplicatePasskeyError, Logger | RegistrationHelper>;
|
|
121
|
+
export declare const verifyCredential: (sessionToken: string, response: RegistrationResponseJSON, { onEvent }: {
|
|
122
|
+
onEvent?: OnEventFn | undefined;
|
|
123
|
+
}) => Micro.Micro<RegistrationSuccess, UnexpectedError, Endpoint | Logger | TenancyId>;
|
|
89
124
|
/**
|
|
90
125
|
* Potential errors associated with Passkey registration
|
|
91
126
|
*/
|
|
@@ -96,6 +131,6 @@ export type RegistrationError = PasskeysUnsupportedError | DuplicatePasskeyError
|
|
|
96
131
|
* @param options
|
|
97
132
|
* @returns
|
|
98
133
|
*/
|
|
99
|
-
export declare const registerPasskey: (options: RegistrationOptions) => Micro.Micro<RegistrationSuccess, RegistrationError, Logger>;
|
|
134
|
+
export declare const registerPasskey: (options: RegistrationOptions) => Micro.Micro<RegistrationSuccess, RegistrationError, Logger | RegistrationHelper>;
|
|
100
135
|
export {};
|
|
101
|
-
//# sourceMappingURL=
|
|
136
|
+
//# sourceMappingURL=registration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registration.d.ts","sourceRoot":"","sources":["../../../src/passkey/registration/registration.ts"],"names":[],"mappings":"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"}
|