@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.
Files changed (79) hide show
  1. package/dist/index.d.ts +3 -2
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +2 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/{network.d.ts → internal/network.d.ts} +5 -3
  6. package/dist/internal/network.d.ts.map +1 -0
  7. package/dist/{network.js → internal/network.js} +29 -10
  8. package/dist/internal/network.js.map +1 -0
  9. package/dist/internal/promise.d.ts.map +1 -0
  10. package/dist/internal/promise.js.map +1 -0
  11. package/dist/internal/tenancy.d.ts.map +1 -0
  12. package/dist/internal/tenancy.js.map +1 -0
  13. package/dist/logger/index.d.ts +3 -1
  14. package/dist/logger/index.d.ts.map +1 -1
  15. package/dist/logger/index.js +8 -3
  16. package/dist/logger/index.js.map +1 -1
  17. package/dist/passkey/authentication/authentication.d.ts +118 -0
  18. package/dist/passkey/authentication/authentication.d.ts.map +1 -0
  19. package/dist/passkey/authentication/{micro.js → authentication.js} +98 -33
  20. package/dist/passkey/authentication/authentication.js.map +1 -0
  21. package/dist/passkey/authentication/authentication.test.d.ts +2 -0
  22. package/dist/passkey/authentication/authentication.test.d.ts.map +1 -0
  23. package/dist/passkey/authentication/authentication.test.js +157 -0
  24. package/dist/passkey/authentication/authentication.test.js.map +1 -0
  25. package/dist/passkey/authentication/index.d.ts +3 -3
  26. package/dist/passkey/authentication/index.d.ts.map +1 -1
  27. package/dist/passkey/authentication/index.js +5 -5
  28. package/dist/passkey/authentication/index.js.map +1 -1
  29. package/dist/passkey/{shared.d.ts → errors.d.ts} +5 -4
  30. package/dist/passkey/errors.d.ts.map +1 -0
  31. package/dist/passkey/{shared.js → errors.js} +4 -4
  32. package/dist/passkey/errors.js.map +1 -0
  33. package/dist/passkey/index.d.ts +5 -6
  34. package/dist/passkey/index.d.ts.map +1 -1
  35. package/dist/passkey/index.js +5 -4
  36. package/dist/passkey/index.js.map +1 -1
  37. package/dist/passkey/registration/index.d.ts +3 -3
  38. package/dist/passkey/registration/index.d.ts.map +1 -1
  39. package/dist/passkey/registration/index.js +5 -5
  40. package/dist/passkey/registration/index.js.map +1 -1
  41. package/dist/passkey/registration/{micro.d.ts → registration.d.ts} +45 -10
  42. package/dist/passkey/registration/registration.d.ts.map +1 -0
  43. package/dist/passkey/registration/{micro.js → registration.js} +63 -42
  44. package/dist/passkey/registration/registration.js.map +1 -0
  45. package/dist/passkey/registration/registration.test.d.ts +2 -0
  46. package/dist/passkey/registration/registration.test.d.ts.map +1 -0
  47. package/dist/passkey/registration/registration.test.js +161 -0
  48. package/dist/passkey/registration/registration.test.js.map +1 -0
  49. package/dist/passkey/signals/index.d.ts +9 -0
  50. package/dist/passkey/signals/index.d.ts.map +1 -0
  51. package/dist/passkey/signals/index.js +19 -0
  52. package/dist/passkey/signals/index.js.map +1 -0
  53. package/dist/passkey/signals/signals.d.ts +45 -0
  54. package/dist/passkey/signals/signals.d.ts.map +1 -0
  55. package/dist/passkey/signals/signals.js +156 -0
  56. package/dist/passkey/signals/signals.js.map +1 -0
  57. package/dist/passkey/support.d.ts.map +1 -1
  58. package/dist/passkey/support.js +1 -1
  59. package/dist/passkey/support.js.map +1 -1
  60. package/dist/passkey/types.d.ts.map +1 -1
  61. package/dist/shared.d.ts.map +1 -1
  62. package/package.json +22 -25
  63. package/dist/network.d.ts.map +0 -1
  64. package/dist/network.js.map +0 -1
  65. package/dist/passkey/authentication/micro.d.ts +0 -71
  66. package/dist/passkey/authentication/micro.d.ts.map +0 -1
  67. package/dist/passkey/authentication/micro.js.map +0 -1
  68. package/dist/passkey/registration/micro.d.ts.map +0 -1
  69. package/dist/passkey/registration/micro.js.map +0 -1
  70. package/dist/passkey/shared.d.ts.map +0 -1
  71. package/dist/passkey/shared.js.map +0 -1
  72. package/dist/promise.d.ts.map +0 -1
  73. package/dist/promise.js.map +0 -1
  74. package/dist/tenancy.d.ts.map +0 -1
  75. package/dist/tenancy.js.map +0 -1
  76. /package/dist/{promise.d.ts → internal/promise.d.ts} +0 -0
  77. /package/dist/{promise.js → internal/promise.js} +0 -0
  78. /package/dist/{tenancy.d.ts → internal/tenancy.d.ts} +0 -0
  79. /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, AuthenticationError } from "./micro";
20
- export { isAuthenticationSuccess } from "./micro";
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,EAEL,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC3B,MAAM,SAAS,CAAC;AACjB,OAAO,EAAe,MAAM,EAAE,MAAM,cAAc,CAAC;AAEnD;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,GACpC,SAAS,qBAAqB,EAC9B,SAAQ,OAAO,MAAM,CAAC,OAAqB,KAC1C,OAAO,CAAC,qBAAqB,CAK7B,CAAC;AAEJ;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAC9B,SAAS,qBAAqB,EAC9B,SAAQ,OAAO,MAAM,CAAC,OAAqB,KAC1C,OAAO,CAAC,qBAAqB,GAAG,mBAAmB,CAKnD,CAAC;AAEJ,YAAY,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC"}
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 "./micro";
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,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EACL,mBAAmB,IAAI,oBAAoB,GAI5C,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEnD;;;;;;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,kBAAkB,CACnB,CAAC;AAEJ;;;;;;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,YAAY,CACb,CAAC;AAGJ,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC"}
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 isPasskeysUnsupportedError: (error: unknown) => error is PasskeysUnsupportedError;
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/PasskeysUnsupportedError";
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 isPasskeysUnsupportedError: (error: unknown) => error is PasskeysUnsupportedError;
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=shared.d.ts.map
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 isPasskeysUnsupportedError = (error) => error instanceof PasskeysUnsupportedError;
3
- export class PasskeysUnsupportedError extends Micro.TaggedError("@error/PasskeysUnsupportedError") {
4
- static isPasskeysUnsupportedError = isPasskeysUnsupportedError;
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=shared.js.map
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"}
@@ -1,7 +1,6 @@
1
- export type { RegistrationOptions, RegistrationSuccess, RegistrationError, DuplicatePasskeyError, } from "./registration/micro";
2
- export { registerPasskeyUnsafe, registerPasskey, isRegistrationSuccess, } from "./registration/index";
3
- export type { AuthenticationOptions, AuthenticationSuccess, AuthenticationError, } from "./authentication/micro";
4
- export { authenticatePasskeyUnsafe, authenticatePasskey, isAuthenticationSuccess, } from "./authentication/index";
5
- export { isPasskeySupport, isAutofillSupport } from "./support";
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,YAAY,EACV,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEhE,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC"}
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"}
@@ -1,5 +1,6 @@
1
- export { registerPasskeyUnsafe, registerPasskey, isRegistrationSuccess, } from "./registration/index";
2
- export { authenticatePasskeyUnsafe, authenticatePasskey, isAuthenticationSuccess, } from "./authentication/index";
3
- export { isPasskeySupport, isAutofillSupport } from "./support";
4
- 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";
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/passkey/index.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAQ9B,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEhE,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC"}
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 { RegistrationSuccess, RegistrationError } from "./micro";
18
- export { isRegistrationSuccess } from "./micro";
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,EAEL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACzB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAe,MAAM,EAAE,MAAM,cAAc,CAAC;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,SAAS,mBAAmB,EAC5B,SAAQ,OAAO,MAAM,CAAC,OAAqB,KAC1C,OAAO,CAAC,mBAAmB,CAK3B,CAAC;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAC1B,SAAS,mBAAmB,EAC5B,SAAQ,OAAO,MAAM,CAAC,OAAqB,KAC1C,OAAO,CAAC,mBAAmB,GAAG,iBAAiB,CAK/C,CAAC;AAEJ,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC"}
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 "./micro";
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,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EACL,eAAe,IAAI,gBAAgB,GAIpC,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEnD;;;;;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,kBAAkB,CACnB,CAAC;AAEJ;;;;;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,YAAY,CACb,CAAC;AAGJ,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC"}
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 { Micro } from "effect";
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
- export declare const isDuplicatePasskeyError: (err: unknown) => err is DuplicatePasskeyError;
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/DuplicatePasskeyError";
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 isDuplicatePasskeyError: (err: unknown) => err is DuplicatePasskeyError;
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=micro.d.ts.map
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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"}