@passlock/client 0.9.29 → 0.9.32
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/README.md +1 -1
- package/README.template.md +1 -1
- package/dist/authentication/authenticate.d.ts +5 -6
- package/dist/authentication/authenticate.fixture.d.ts +15 -15
- package/dist/authentication/authenticate.fixture.js +8 -8
- package/dist/authentication/authenticate.fixture.js.map +1 -1
- package/dist/authentication/authenticate.js +4 -5
- package/dist/authentication/authenticate.js.map +1 -1
- package/dist/connection/connection.d.ts +3 -3
- package/dist/connection/connection.fixture.d.ts +2 -2
- package/dist/connection/connection.fixture.js +2 -2
- package/dist/connection/connection.fixture.js.map +1 -1
- package/dist/connection/connection.js +2 -2
- package/dist/connection/connection.js.map +1 -1
- package/dist/effect.js +2 -2
- package/dist/effect.js.map +1 -1
- package/dist/email/email.d.ts +7 -7
- package/dist/email/email.fixture.d.ts +10 -10
- package/dist/email/email.fixture.js +3 -3
- package/dist/email/email.fixture.js.map +1 -1
- package/dist/email/email.js +2 -2
- package/dist/email/email.js.map +1 -1
- package/dist/index.d.ts +33 -31
- package/dist/index.js +5 -12
- package/dist/index.js.map +1 -1
- package/dist/registration/register.d.ts +5 -7
- package/dist/registration/register.fixture.d.ts +14 -14
- package/dist/registration/register.fixture.js +6 -6
- package/dist/registration/register.fixture.js.map +1 -1
- package/dist/registration/register.js +5 -6
- package/dist/registration/register.js.map +1 -1
- package/dist/rpc/client.js +1 -1
- package/dist/rpc/client.js.map +1 -1
- package/dist/rpc/connection.d.ts +1 -1
- package/dist/rpc/connection.js +3 -2
- package/dist/rpc/connection.js.map +1 -1
- package/dist/rpc/{authentication.d.ts → passkey/authentication.d.ts} +4 -4
- package/dist/rpc/passkey/authentication.js +17 -0
- package/dist/rpc/passkey/authentication.js.map +1 -0
- package/dist/rpc/{registration.d.ts → passkey/registration.d.ts} +3 -3
- package/dist/rpc/passkey/registration.js +17 -0
- package/dist/rpc/passkey/registration.js.map +1 -0
- package/dist/rpc/social.d.ts +1 -1
- package/dist/rpc/social.js +6 -5
- package/dist/rpc/social.js.map +1 -1
- package/dist/rpc/user.d.ts +1 -1
- package/dist/rpc/user.js +5 -4
- package/dist/rpc/user.js.map +1 -1
- package/dist/social/social.d.ts +7 -8
- package/dist/social/social.fixture.d.ts +11 -11
- package/dist/social/social.fixture.js +7 -7
- package/dist/social/social.fixture.js.map +1 -1
- package/dist/social/social.js +7 -8
- package/dist/social/social.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/user/user.d.ts +3 -3
- package/dist/user/user.fixture.d.ts +6 -6
- package/dist/user/user.fixture.js +6 -6
- package/dist/user/user.fixture.js.map +1 -1
- package/dist/user/user.js +5 -6
- package/dist/user/user.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +14 -14
- package/src/authentication/authenticate.fixture.ts +11 -11
- package/src/authentication/authenticate.test.ts +1 -1
- package/src/authentication/authenticate.ts +10 -16
- package/src/connection/connection.fixture.ts +2 -2
- package/src/connection/connection.ts +3 -3
- package/src/effect.ts +2 -2
- package/src/email/email.fixture.ts +3 -3
- package/src/email/email.ts +2 -2
- package/src/index.ts +10 -17
- package/src/registration/register.fixture.ts +11 -11
- package/src/registration/register.test.ts +1 -1
- package/src/registration/register.ts +11 -13
- package/src/rpc/client.ts +1 -1
- package/src/rpc/connection.ts +4 -2
- package/src/rpc/{authentication.ts → passkey/authentication.ts} +22 -13
- package/src/rpc/passkey/registration.ts +52 -0
- package/src/rpc/social.ts +24 -14
- package/src/rpc/user.ts +23 -12
- package/src/social/social.fixture.ts +7 -8
- package/src/social/social.test.ts +8 -8
- package/src/social/social.ts +13 -16
- package/src/user/user.fixture.ts +10 -10
- package/src/user/user.ts +7 -9
- package/dist/rpc/authentication.js +0 -16
- package/dist/rpc/authentication.js.map +0 -1
- package/dist/rpc/registration.js +0 -16
- package/dist/rpc/registration.js.map +0 -1
- package/src/rpc/registration.ts +0 -41
|
@@ -1,22 +1,29 @@
|
|
|
1
1
|
import { Layer as L } from 'effect';
|
|
2
|
-
import * as Shared from '@passlock/shared/dist/rpc/social.js';
|
|
3
2
|
import { SocialClient } from '../rpc/social.js';
|
|
4
3
|
import type { AuthenticateOidcReq } from './social.js';
|
|
4
|
+
import { OIDCRegistrationRequest, PrincipalResponse } from '@passlock/shared/dist/rpc/social.js';
|
|
5
5
|
export declare const session = "session";
|
|
6
6
|
export declare const token = "token";
|
|
7
7
|
export declare const code = "code";
|
|
8
8
|
export declare const authType = "passkey";
|
|
9
9
|
export declare const expireAt: number;
|
|
10
|
-
export declare const registerOidcReq:
|
|
10
|
+
export declare const registerOidcReq: OIDCRegistrationRequest;
|
|
11
11
|
export declare const authOidcReq: AuthenticateOidcReq;
|
|
12
|
-
export declare const rpcRegisterRes:
|
|
13
|
-
export declare const rpcAuthenticateRes:
|
|
12
|
+
export declare const rpcRegisterRes: PrincipalResponse;
|
|
13
|
+
export declare const rpcAuthenticateRes: PrincipalResponse;
|
|
14
14
|
export declare const rpcClientTest: L.Layer<SocialClient, never, never>;
|
|
15
15
|
export declare const principal: {
|
|
16
16
|
readonly email?: string;
|
|
17
17
|
readonly givenName?: string;
|
|
18
18
|
readonly familyName?: string;
|
|
19
19
|
readonly emailVerified?: boolean;
|
|
20
|
+
readonly user?: {
|
|
21
|
+
readonly email: string;
|
|
22
|
+
readonly id: string;
|
|
23
|
+
readonly givenName: string;
|
|
24
|
+
readonly familyName: string;
|
|
25
|
+
readonly emailVerified: boolean;
|
|
26
|
+
};
|
|
20
27
|
readonly iss: string;
|
|
21
28
|
readonly aud: string;
|
|
22
29
|
readonly sub: string;
|
|
@@ -28,13 +35,6 @@ export declare const principal: {
|
|
|
28
35
|
readonly userVerified: boolean;
|
|
29
36
|
readonly authType: "email" | "apple" | "google" | "passkey";
|
|
30
37
|
readonly authId: string;
|
|
31
|
-
readonly user?: {
|
|
32
|
-
readonly id: string;
|
|
33
|
-
readonly email: string;
|
|
34
|
-
readonly givenName: string;
|
|
35
|
-
readonly familyName: string;
|
|
36
|
-
readonly emailVerified: boolean;
|
|
37
|
-
};
|
|
38
38
|
readonly authStatement: {
|
|
39
39
|
readonly userVerified: boolean;
|
|
40
40
|
readonly authType: "email" | "apple" | "google" | "passkey";
|
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
import { Effect as E, Layer as L, Option as O } from 'effect';
|
|
2
|
-
import * as Shared from '@passlock/shared/dist/rpc/social.js';
|
|
3
2
|
import * as Fixtures from '../test/fixtures.js';
|
|
4
3
|
import { SocialClient } from '../rpc/social.js';
|
|
4
|
+
import { OIDCAuthenticationRequest, OIDCRegistrationRequest, PrincipalResponse } from '@passlock/shared/dist/rpc/social.js';
|
|
5
5
|
export const session = 'session';
|
|
6
6
|
export const token = 'token';
|
|
7
7
|
export const code = 'code';
|
|
8
8
|
export const authType = 'passkey';
|
|
9
9
|
export const expireAt = Date.now() + 10000;
|
|
10
|
-
export const registerOidcReq = new
|
|
10
|
+
export const registerOidcReq = new OIDCRegistrationRequest({
|
|
11
11
|
provider: 'google',
|
|
12
12
|
idToken: 'google-token',
|
|
13
13
|
nonce: 'nonce',
|
|
14
14
|
givenName: O.some('john'),
|
|
15
15
|
familyName: O.some('doe'),
|
|
16
16
|
});
|
|
17
|
-
export const authOidcReq = new
|
|
17
|
+
export const authOidcReq = new OIDCAuthenticationRequest({
|
|
18
18
|
provider: 'google',
|
|
19
19
|
idToken: 'google-token',
|
|
20
20
|
nonce: 'nonce',
|
|
21
21
|
});
|
|
22
|
-
export const rpcRegisterRes = new
|
|
23
|
-
export const rpcAuthenticateRes = new
|
|
22
|
+
export const rpcRegisterRes = new PrincipalResponse({ principal: Fixtures.principal });
|
|
23
|
+
export const rpcAuthenticateRes = new PrincipalResponse({ principal: Fixtures.principal });
|
|
24
24
|
export const rpcClientTest = L.succeed(SocialClient, SocialClient.of({
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
oidcRegistration: () => E.fail(Fixtures.notImplemented),
|
|
26
|
+
oidcAuthentication: () => E.fail(Fixtures.notImplemented),
|
|
27
27
|
}));
|
|
28
28
|
export const principal = Fixtures.principal;
|
|
29
29
|
export const capabilitiesTest = Fixtures.capabilitiesTest;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"social.fixture.js","sourceRoot":"","sources":["../../src/social/social.fixture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE7D,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"social.fixture.js","sourceRoot":"","sources":["../../src/social/social.fixture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE7D,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAE/C,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAE3H,MAAM,CAAC,MAAM,OAAO,GAAG,SAAS,CAAA;AAChC,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAAA;AAC5B,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAA;AAC1B,MAAM,CAAC,MAAM,QAAQ,GAAG,SAAS,CAAA;AACjC,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAA;AAE1C,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,uBAAuB,CAAC;IACzD,QAAQ,EAAE,QAAQ;IAClB,OAAO,EAAE,cAAc;IACvB,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IACzB,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;CAC1B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,WAAW,GAAwB,IAAI,yBAAyB,CAAC;IAC5E,QAAQ,EAAE,QAAQ;IAClB,OAAO,EAAE,cAAc;IACvB,KAAK,EAAE,OAAO;CACf,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,iBAAiB,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAA;AAEtF,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,iBAAiB,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAA;AAE1F,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,OAAO,CACpC,YAAY,EACZ,YAAY,CAAC,EAAE,CAAC;IACd,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;IACvD,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;CAC1D,CAAC,CACH,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAA;AAE3C,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,CAAA;AAEzD,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,CAAA"}
|
package/dist/social/social.js
CHANGED
|
@@ -2,27 +2,26 @@
|
|
|
2
2
|
* Passkey authentication effects
|
|
3
3
|
*/
|
|
4
4
|
import { Context, Effect as E, Layer, flow } from 'effect';
|
|
5
|
-
import * as RPC from '
|
|
5
|
+
import * as RPC from '../rpc/social.js';
|
|
6
6
|
import {} from '@passlock/shared/dist/error/error.js';
|
|
7
|
-
import { SocialClient } from '../rpc/social.js';
|
|
8
7
|
/* Service */
|
|
9
8
|
export class SocialService extends Context.Tag('@services/SocialService')() {
|
|
10
9
|
}
|
|
11
10
|
export const registerOidc = (request) => {
|
|
12
11
|
return E.gen(function* (_) {
|
|
13
12
|
yield* _(E.logInfo('Registering social account'));
|
|
14
|
-
const rpcClient = yield* _(SocialClient);
|
|
15
|
-
const rpcRequest = new RPC.
|
|
16
|
-
const { principal } = yield* _(rpcClient.
|
|
13
|
+
const rpcClient = yield* _(RPC.SocialClient);
|
|
14
|
+
const rpcRequest = new RPC.OIDCRegistrationRequest(request);
|
|
15
|
+
const { principal } = yield* _(rpcClient.oidcRegistration(rpcRequest));
|
|
17
16
|
return principal;
|
|
18
17
|
});
|
|
19
18
|
};
|
|
20
19
|
export const authenticateOidc = (request) => {
|
|
21
20
|
return E.gen(function* (_) {
|
|
22
21
|
yield* _(E.logInfo('Authenticating with social account'));
|
|
23
|
-
const rpcClient = yield* _(SocialClient);
|
|
24
|
-
const rpcRequest = new RPC.
|
|
25
|
-
const { principal } = yield* _(rpcClient.
|
|
22
|
+
const rpcClient = yield* _(RPC.SocialClient);
|
|
23
|
+
const rpcRequest = new RPC.OIDCAuthenticationRequest(request);
|
|
24
|
+
const { principal } = yield* _(rpcClient.oidcAuthentication(rpcRequest));
|
|
26
25
|
return principal;
|
|
27
26
|
});
|
|
28
27
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"social.js","sourceRoot":"","sources":["../../src/social/social.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"social.js","sourceRoot":"","sources":["../../src/social/social.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC1D,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAA;AACvC,OAAO,EAAsC,MAAM,sCAAsC,CAAA;AAiBzF,aAAa;AAEb,MAAM,OAAO,aAAc,SAAQ,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAMtE;CAAG;AAMN,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,OAAwB,EAC+B,EAAE;IACzD,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,CAAA;QAEjD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QAC5C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAA;QAC3D,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAA;QAEtE,OAAO,SAAS,CAAA;IAClB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,OAA4B,EAC6B,EAAE;IAC3D,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC,CAAA;QAEzD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QAC5C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAA;QAC7D,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAA;QAExE,OAAO,SAAS,CAAA;IAClB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,UAAU;AAEV,qBAAqB;AACrB,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC,MAAM,CAC3C,aAAa,EACb,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;IAChB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAoB,CAAC,CAAA;IAEvD,OAAO,aAAa,CAAC,EAAE,CAAC;QACtB,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KAC7D,CAAC,CAAA;AACJ,CAAC,CAAC,CACH,CAAA;AACD,oBAAoB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/effect.ts","../src/index.ts","../src/version.ts","../src/authentication/authenticate.fixture.ts","../src/authentication/authenticate.test.ts","../src/authentication/authenticate.ts","../src/capabilities/capabilities.ts","../src/connection/connection.fixture.ts","../src/connection/connection.test.ts","../src/connection/connection.ts","../src/email/email.fixture.ts","../src/email/email.test.ts","../src/email/email.ts","../src/event/event.node.test.ts","../src/event/event.test.ts","../src/event/event.ts","../src/logging/eventlogger.test.ts","../src/logging/eventlogger.ts","../src/registration/register.fixture.ts","../src/registration/register.test.ts","../src/registration/register.ts","../src/rpc/
|
|
1
|
+
{"root":["../src/effect.ts","../src/index.ts","../src/version.ts","../src/authentication/authenticate.fixture.ts","../src/authentication/authenticate.test.ts","../src/authentication/authenticate.ts","../src/capabilities/capabilities.ts","../src/connection/connection.fixture.ts","../src/connection/connection.test.ts","../src/connection/connection.ts","../src/email/email.fixture.ts","../src/email/email.test.ts","../src/email/email.ts","../src/event/event.node.test.ts","../src/event/event.test.ts","../src/event/event.ts","../src/logging/eventlogger.test.ts","../src/logging/eventlogger.ts","../src/registration/register.fixture.ts","../src/registration/register.test.ts","../src/registration/register.ts","../src/rpc/client.ts","../src/rpc/config.ts","../src/rpc/connection.ts","../src/rpc/social.ts","../src/rpc/user.ts","../src/rpc/passkey/authentication.ts","../src/rpc/passkey/registration.ts","../src/social/social.fixture.ts","../src/social/social.test.ts","../src/social/social.ts","../src/storage/storage.fixture.ts","../src/storage/storage.test.ts","../src/storage/storage.ts","../src/test/fixtures.ts","../src/user/user.fixture.ts","../src/user/user.test.ts","../src/user/user.ts"],"version":"5.6.2"}
|
package/dist/user/user.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import { Context, Effect as E, Layer } from 'effect';
|
|
5
5
|
import type { BadRequest, Disabled, NotFound } from '@passlock/shared/dist/error/error.js';
|
|
6
6
|
import type { VerifyEmail } from '@passlock/shared/dist/schema/email.js';
|
|
7
|
-
import
|
|
7
|
+
import * as RPC from '../rpc/user.js';
|
|
8
8
|
export type Email = {
|
|
9
9
|
email: string;
|
|
10
10
|
};
|
|
@@ -18,8 +18,8 @@ declare const UserService_base: Context.TagClass<UserService, "@services/UserSer
|
|
|
18
18
|
}>;
|
|
19
19
|
export declare class UserService extends UserService_base {
|
|
20
20
|
}
|
|
21
|
-
type Dependencies = UserClient;
|
|
21
|
+
type Dependencies = RPC.UserClient;
|
|
22
22
|
export declare const isExistingUser: (request: Email) => E.Effect<boolean, BadRequest, Dependencies>;
|
|
23
23
|
export declare const resendVerificationEmail: (request: ResendEmail) => E.Effect<void, ResendEmailErrors, Dependencies>;
|
|
24
|
-
export declare const UserServiceLive: Layer.Layer<UserService, never, UserClient>;
|
|
24
|
+
export declare const UserServiceLive: Layer.Layer<UserService, never, RPC.UserClient>;
|
|
25
25
|
export {};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Layer as L } from 'effect';
|
|
2
|
-
import {
|
|
2
|
+
import { IsExistingUserRequest, IsExistingUserResponse, ResendEmailRequest, ResendEmailResponse, VerifyEmailResponse } from '@passlock/shared/dist/rpc/user.js';
|
|
3
3
|
import { UserClient } from '../rpc/user.js';
|
|
4
4
|
import type { ResendEmail } from './user.js';
|
|
5
5
|
export declare const email = "jdoe@gmail.com";
|
|
6
|
-
export declare const isRegisteredReq:
|
|
7
|
-
export declare const isRegisteredRes:
|
|
8
|
-
export declare const verifyEmailRes:
|
|
6
|
+
export declare const isRegisteredReq: IsExistingUserRequest;
|
|
7
|
+
export declare const isRegisteredRes: IsExistingUserResponse;
|
|
8
|
+
export declare const verifyEmailRes: VerifyEmailResponse;
|
|
9
9
|
export declare const resendEmailReq: ResendEmail;
|
|
10
|
-
export declare const rpcResendEmailReq:
|
|
11
|
-
export declare const rpcResendEmailRes:
|
|
10
|
+
export declare const rpcResendEmailReq: ResendEmailRequest;
|
|
11
|
+
export declare const rpcResendEmailRes: ResendEmailResponse;
|
|
12
12
|
export declare const rpcClientTest: L.Layer<UserClient, never, never>;
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { Effect as E, Layer as L, Option as O } from 'effect';
|
|
2
|
-
import {
|
|
2
|
+
import { IsExistingUserRequest, IsExistingUserResponse, ResendEmailRequest, ResendEmailResponse, VerifyEmailResponse, } from '@passlock/shared/dist/rpc/user.js';
|
|
3
3
|
import * as Fixtures from '../test/fixtures.js';
|
|
4
4
|
import { UserClient } from '../rpc/user.js';
|
|
5
5
|
export const email = 'jdoe@gmail.com';
|
|
6
|
-
export const isRegisteredReq = new
|
|
7
|
-
export const isRegisteredRes = new
|
|
8
|
-
export const verifyEmailRes = new
|
|
6
|
+
export const isRegisteredReq = new IsExistingUserRequest({ email });
|
|
7
|
+
export const isRegisteredRes = new IsExistingUserResponse({ existingUser: false, detail: O.none() });
|
|
8
|
+
export const verifyEmailRes = new VerifyEmailResponse({ principal: Fixtures.principal });
|
|
9
9
|
export const resendEmailReq = { userId: '123', method: 'code' };
|
|
10
|
-
export const rpcResendEmailReq = new
|
|
10
|
+
export const rpcResendEmailReq = new ResendEmailRequest({
|
|
11
11
|
userId: '123',
|
|
12
12
|
verifyEmail: { method: 'code' },
|
|
13
13
|
});
|
|
14
|
-
export const rpcResendEmailRes = new
|
|
14
|
+
export const rpcResendEmailRes = new ResendEmailResponse({});
|
|
15
15
|
export const rpcClientTest = L.succeed(UserClient, UserClient.of({
|
|
16
16
|
isExistingUser: () => E.succeed({ existingUser: true, detail: O.none() }),
|
|
17
17
|
verifyEmail: () => E.succeed(verifyEmailRes),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.fixture.js","sourceRoot":"","sources":["../../src/user/user.fixture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE7D,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"user.fixture.js","sourceRoot":"","sources":["../../src/user/user.fixture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE7D,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,mCAAmC,CAAA;AAE1C,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAG3C,MAAM,CAAC,MAAM,KAAK,GAAG,gBAAgB,CAAA;AACrC,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,qBAAqB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;AACnE,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,sBAAsB,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;AACpG,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,mBAAmB,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAA;AACxF,MAAM,CAAC,MAAM,cAAc,GAAgB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;AAC5E,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,kBAAkB,CAAC;IACtD,MAAM,EAAE,KAAK;IACb,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;CAChC,CAAC,CAAA;AACF,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,mBAAmB,CAAC,EAAE,CAAC,CAAA;AAE5D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,OAAO,CACpC,UAAU,EACV,UAAU,CAAC,EAAE,CAAC;IACZ,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;IACzE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;IAC5C,uBAAuB,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;CAC/D,CAAC,CACH,CAAA"}
|
package/dist/user/user.js
CHANGED
|
@@ -2,27 +2,26 @@
|
|
|
2
2
|
* Check for an existing user
|
|
3
3
|
*/
|
|
4
4
|
import { Context, Effect as E, Layer, flow } from 'effect';
|
|
5
|
-
import
|
|
6
|
-
import { UserClient } from '../rpc/user.js';
|
|
5
|
+
import * as RPC from '../rpc/user.js';
|
|
7
6
|
/* Service */
|
|
8
7
|
export class UserService extends Context.Tag('@services/UserService')() {
|
|
9
8
|
}
|
|
10
9
|
export const isExistingUser = (request) => {
|
|
11
10
|
return E.gen(function* (_) {
|
|
12
11
|
yield* _(E.logInfo('Checking registration status'));
|
|
13
|
-
const rpcClient = yield* _(UserClient);
|
|
12
|
+
const rpcClient = yield* _(RPC.UserClient);
|
|
14
13
|
yield* _(E.logDebug('Making RPC request'));
|
|
15
|
-
const { existingUser } = yield* _(rpcClient.isExistingUser(new
|
|
14
|
+
const { existingUser } = yield* _(rpcClient.isExistingUser(new RPC.IsExistingUserRequest(request)));
|
|
16
15
|
return existingUser;
|
|
17
16
|
});
|
|
18
17
|
};
|
|
19
18
|
export const resendVerificationEmail = (request) => {
|
|
20
19
|
return E.gen(function* (_) {
|
|
21
20
|
yield* _(E.logInfo('Resending verification email'));
|
|
22
|
-
const rpcClient = yield* _(UserClient);
|
|
21
|
+
const rpcClient = yield* _(RPC.UserClient);
|
|
23
22
|
yield* _(E.logDebug('Making RPC request'));
|
|
24
23
|
const { userId, ...verifyEmail } = request;
|
|
25
|
-
yield* _(rpcClient.resendVerificationEmail(new
|
|
24
|
+
yield* _(rpcClient.resendVerificationEmail(new RPC.ResendEmailRequest({ userId, verifyEmail })));
|
|
26
25
|
});
|
|
27
26
|
};
|
|
28
27
|
/* Live */
|
package/dist/user/user.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/user/user.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/user/user.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAI1D,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAA;AAWrC,aAAa;AAEb,MAAM,OAAO,WAAY,SAAQ,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAMlE;CAAG;AAMN,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAc,EAA+C,EAAE;IAC5F,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,CAAA;QACnD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAE1C,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAA;QAC1C,MAAM,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAEnG,OAAO,YAAY,CAAA;IACrB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,OAAoB,EAC6B,EAAE;IACnD,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,CAAA;QACnD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAE1C,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAA;QAC1C,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,CAAA;QAC1C,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,IAAI,GAAG,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CAAA;IAClG,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,UAAU;AAEV,qBAAqB;AACrB,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CACzC,WAAW,EACX,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;IAChB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAkB,CAAC,CAAA;IACrD,OAAO,WAAW,CAAC,EAAE,CAAC;QACpB,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxD,uBAAuB,EAAE,IAAI,CAAC,uBAAuB,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KAC3E,CAAC,CAAA;AACJ,CAAC,CAAC,CACH,CAAA;AACD,oBAAoB"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const PASSLOCK_CLIENT_VERSION = "0.9.
|
|
1
|
+
export declare const PASSLOCK_CLIENT_VERSION = "0.9.32";
|
package/dist/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const PASSLOCK_CLIENT_VERSION = '0.9.
|
|
1
|
+
export const PASSLOCK_CLIENT_VERSION = '0.9.32';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@passlock/client",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.32",
|
|
4
4
|
"description": "Passkey authentication and social login for web apps (Typescript). Framework agnostic",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"passkey",
|
|
@@ -45,33 +45,33 @@
|
|
|
45
45
|
"!dist/**/*.spec.*"
|
|
46
46
|
],
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@effect/schema": "0.74.
|
|
48
|
+
"@effect/schema": "0.74.1",
|
|
49
49
|
"@github/webauthn-json": "^2.1.1",
|
|
50
|
-
"effect": "3.8.
|
|
51
|
-
"@passlock/shared": "0.9.
|
|
50
|
+
"effect": "3.8.4",
|
|
51
|
+
"@passlock/shared": "0.9.32"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@qetza/replacetokens": "^1.7.0",
|
|
55
55
|
"@total-typescript/tsconfig": "^1.0.4",
|
|
56
56
|
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
|
|
57
57
|
"@tsconfig/node20": "^20.1.4",
|
|
58
|
-
"@types/node": "^22.
|
|
59
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
60
|
-
"@typescript-eslint/parser": "^8.
|
|
61
|
-
"@vitest/coverage-v8": "^2.1.
|
|
62
|
-
"@vitest/ui": "^2.1.
|
|
63
|
-
"eslint": "^9.
|
|
58
|
+
"@types/node": "^22.7.4",
|
|
59
|
+
"@typescript-eslint/eslint-plugin": "^8.8.0",
|
|
60
|
+
"@typescript-eslint/parser": "^8.8.0",
|
|
61
|
+
"@vitest/coverage-v8": "^2.1.2",
|
|
62
|
+
"@vitest/ui": "^2.1.2",
|
|
63
|
+
"eslint": "^9.12.0",
|
|
64
64
|
"eslint-config-prettier": "^9.1.0",
|
|
65
|
-
"globals": "^15.
|
|
66
|
-
"jsdom": "^25.0.
|
|
65
|
+
"globals": "^15.10.0",
|
|
66
|
+
"jsdom": "^25.0.1",
|
|
67
67
|
"prettier": "^3.3.3",
|
|
68
68
|
"publint": "^0.2.11",
|
|
69
69
|
"rimraf": "^6.0.1",
|
|
70
70
|
"tslib": "^2.7.0",
|
|
71
71
|
"tsx": "^4.19.1",
|
|
72
72
|
"typescript": "^5.6.2",
|
|
73
|
-
"vite": "^5.4.
|
|
74
|
-
"vitest": "^2.1.
|
|
73
|
+
"vite": "^5.4.8",
|
|
74
|
+
"vitest": "^2.1.2",
|
|
75
75
|
"vitest-mock-extended": "^2.0.2"
|
|
76
76
|
},
|
|
77
77
|
"scripts": {
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { Effect as E, Layer as L, Option as O } from 'effect'
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
} from '@passlock/shared/dist/rpc/authentication.js'
|
|
8
|
-
import {
|
|
4
|
+
OptionsResponse,
|
|
5
|
+
VerificationRequest,
|
|
6
|
+
VerificationResponse,
|
|
7
|
+
} from '@passlock/shared/dist/rpc/passkey/authentication.js'
|
|
8
|
+
import { IsExistingUserResponse, VerifyEmailResponse } from '@passlock/shared/dist/rpc/user.js'
|
|
9
9
|
import type { AuthenticationCredential } from '@passlock/shared/dist/schema/passkey.js'
|
|
10
10
|
|
|
11
11
|
import * as Fixtures from '../test/fixtures.js'
|
|
12
|
-
import { AuthenticationClient } from '../rpc/authentication.js'
|
|
12
|
+
import { AuthenticationClient } from '../rpc/passkey/authentication.js'
|
|
13
13
|
import { type AuthenticationRequest, GetCredential } from './authenticate.js'
|
|
14
14
|
|
|
15
15
|
export const session = 'session'
|
|
@@ -23,7 +23,7 @@ export const request: AuthenticationRequest = {
|
|
|
23
23
|
email: O.none(),
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
export const rpcOptionsRes = new
|
|
26
|
+
export const rpcOptionsRes = new OptionsResponse({
|
|
27
27
|
session,
|
|
28
28
|
publicKey: {
|
|
29
29
|
rpId: 'passlock.dev',
|
|
@@ -47,13 +47,13 @@ export const credential: AuthenticationCredential = {
|
|
|
47
47
|
authenticatorAttachment: null,
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
export const rpcVerificationReq = new
|
|
50
|
+
export const rpcVerificationReq = new VerificationRequest({ session, credential })
|
|
51
51
|
|
|
52
|
-
export const rpcVerificationRes = new
|
|
52
|
+
export const rpcVerificationRes = new VerificationResponse({ principal: Fixtures.principal })
|
|
53
53
|
|
|
54
|
-
export const rpcIsExistingUserRes = new
|
|
54
|
+
export const rpcIsExistingUserRes = new IsExistingUserResponse({ existingUser: true, detail: O.none() })
|
|
55
55
|
|
|
56
|
-
export const rpcVerifyEmailRes = new
|
|
56
|
+
export const rpcVerifyEmailRes = new VerifyEmailResponse({ principal: Fixtures.principal })
|
|
57
57
|
|
|
58
58
|
export const getCredentialTest = L.succeed(
|
|
59
59
|
GetCredential,
|
|
@@ -3,7 +3,7 @@ import { describe, expect, test, vi } from 'vitest'
|
|
|
3
3
|
import { mock } from 'vitest-mock-extended'
|
|
4
4
|
|
|
5
5
|
import * as Fixture from './authenticate.fixture.js'
|
|
6
|
-
import { AuthenticationClient } from '../rpc/authentication.js'
|
|
6
|
+
import { AuthenticationClient } from '../rpc/passkey/authentication.js'
|
|
7
7
|
import { StorageService } from '../storage/storage.js'
|
|
8
8
|
import { AuthenticateServiceLive, AuthenticationService, GetCredential } from './authenticate.js'
|
|
9
9
|
|
|
@@ -8,25 +8,19 @@ import {
|
|
|
8
8
|
import { Context, Effect as E, Layer, flow, pipe } from 'effect'
|
|
9
9
|
|
|
10
10
|
import { InternalBrowserError, type NotSupported } from '@passlock/shared/dist/error/error.js'
|
|
11
|
-
import
|
|
12
|
-
type OptionsErrors,
|
|
13
|
-
type OptionsReq,
|
|
14
|
-
type VerificationErrors,
|
|
15
|
-
VerificationReq,
|
|
16
|
-
} from '@passlock/shared/dist/rpc/authentication.js'
|
|
11
|
+
import * as RPC from '../rpc/passkey/authentication.js'
|
|
17
12
|
import type { AuthenticationCredential } from '@passlock/shared/dist/schema/passkey.js'
|
|
18
13
|
import type { Principal } from '@passlock/shared/dist/schema/principal.js'
|
|
19
14
|
|
|
20
15
|
import { Capabilities } from '../capabilities/capabilities.js'
|
|
21
|
-
import { AuthenticationClient } from '../rpc/authentication.js'
|
|
22
16
|
import { StorageService } from '../storage/storage.js'
|
|
23
17
|
|
|
24
18
|
/* Requests */
|
|
25
19
|
|
|
26
|
-
export type AuthenticationRequest =
|
|
20
|
+
export type AuthenticationRequest = RPC.OptionsRequest
|
|
27
21
|
/* Errors */
|
|
28
22
|
|
|
29
|
-
export type AuthenticationErrors = NotSupported | OptionsErrors | VerificationErrors
|
|
23
|
+
export type AuthenticationErrors = NotSupported | RPC.OptionsErrors | RPC.VerificationErrors
|
|
30
24
|
|
|
31
25
|
/* Dependencies */
|
|
32
26
|
|
|
@@ -52,11 +46,11 @@ export class AuthenticationService extends Context.Tag('@services/Authentication
|
|
|
52
46
|
|
|
53
47
|
/* Utilities */
|
|
54
48
|
|
|
55
|
-
const fetchOptions = (request:
|
|
49
|
+
const fetchOptions = (request: RPC.OptionsRequest) => {
|
|
56
50
|
return E.gen(function* (_) {
|
|
57
51
|
yield* _(E.logDebug('Making request'))
|
|
58
52
|
|
|
59
|
-
const rpcClient = yield* _(AuthenticationClient)
|
|
53
|
+
const rpcClient = yield* _(RPC.AuthenticationClient)
|
|
60
54
|
const { publicKey, session } = yield* _(rpcClient.getAuthenticationOptions(request))
|
|
61
55
|
|
|
62
56
|
yield* _(E.logDebug('Converting Passlock options to CredentialRequestOptions'))
|
|
@@ -79,11 +73,11 @@ const toRequestOptions = (request: CredentialRequestOptionsJSON) => {
|
|
|
79
73
|
)
|
|
80
74
|
}
|
|
81
75
|
|
|
82
|
-
const verifyCredential = (request:
|
|
76
|
+
const verifyCredential = (request: RPC.VerificationRequest) => {
|
|
83
77
|
return E.gen(function* (_) {
|
|
84
78
|
yield* _(E.logDebug('Making request'))
|
|
85
79
|
|
|
86
|
-
const rpcClient = yield* _(AuthenticationClient)
|
|
80
|
+
const rpcClient = yield* _(RPC.AuthenticationClient)
|
|
87
81
|
const { principal } = yield* _(rpcClient.verifyAuthenticationCredential(request))
|
|
88
82
|
|
|
89
83
|
return principal
|
|
@@ -92,7 +86,7 @@ const verifyCredential = (request: VerificationReq) => {
|
|
|
92
86
|
|
|
93
87
|
/* Effects */
|
|
94
88
|
|
|
95
|
-
type Dependencies = GetCredential | Capabilities | StorageService | AuthenticationClient
|
|
89
|
+
type Dependencies = GetCredential | Capabilities | StorageService | RPC.AuthenticationClient
|
|
96
90
|
|
|
97
91
|
export const authenticatePasskey = (
|
|
98
92
|
request: AuthenticationRequest,
|
|
@@ -111,7 +105,7 @@ export const authenticatePasskey = (
|
|
|
111
105
|
const credential = yield* _(getCredential(options))
|
|
112
106
|
|
|
113
107
|
yield* _(E.logInfo('Verifying credential with Passlock'))
|
|
114
|
-
const principal = yield* _(verifyCredential(new
|
|
108
|
+
const principal = yield* _(verifyCredential(new RPC.VerificationRequest({ credential, session })))
|
|
115
109
|
|
|
116
110
|
const storageService = yield* _(StorageService)
|
|
117
111
|
yield* _(storageService.storeToken(principal))
|
|
@@ -138,7 +132,7 @@ export const AuthenticateServiceLive = Layer.effect(
|
|
|
138
132
|
AuthenticationService,
|
|
139
133
|
E.gen(function* (_) {
|
|
140
134
|
const context = yield* _(
|
|
141
|
-
E.context<GetCredential | AuthenticationClient | Capabilities | StorageService>(),
|
|
135
|
+
E.context<GetCredential | RPC.AuthenticationClient | Capabilities | StorageService>(),
|
|
142
136
|
)
|
|
143
137
|
|
|
144
138
|
return AuthenticationService.of({
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Effect as E, Layer as L } from 'effect'
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { ConnectResponse } from '@passlock/shared/dist/rpc/connection.js'
|
|
4
4
|
|
|
5
5
|
import { ConnectionClient } from '../rpc/connection.js'
|
|
6
6
|
|
|
7
|
-
export const preConnectRes = new
|
|
7
|
+
export const preConnectRes = new ConnectResponse({ warmed: true })
|
|
8
8
|
|
|
9
9
|
export const rpcClientTest = L.succeed(
|
|
10
10
|
ConnectionClient,
|
|
@@ -5,7 +5,7 @@ import { Context, Effect as E, Layer, flow, pipe } from 'effect'
|
|
|
5
5
|
|
|
6
6
|
import { Dispatcher } from '../rpc/client.js'
|
|
7
7
|
import type { RpcConfig } from '../rpc/config.js'
|
|
8
|
-
import
|
|
8
|
+
import * as RPC from '../rpc/connection.js'
|
|
9
9
|
|
|
10
10
|
/* Service */
|
|
11
11
|
|
|
@@ -28,7 +28,7 @@ const hitPrincipal = pipe(
|
|
|
28
28
|
|
|
29
29
|
const hitRpc = pipe(
|
|
30
30
|
E.logInfo('Pre-connecting to RPC endpoint'),
|
|
31
|
-
E.zipRight(ConnectionClient),
|
|
31
|
+
E.zipRight(RPC.ConnectionClient),
|
|
32
32
|
E.flatMap(rpcClient => rpcClient.preConnect()),
|
|
33
33
|
E.asVoid,
|
|
34
34
|
)
|
|
@@ -41,7 +41,7 @@ export const preConnect = () => pipe(E.all([hitPrincipal, hitRpc], { concurrency
|
|
|
41
41
|
export const ConnectionServiceLive = Layer.effect(
|
|
42
42
|
ConnectionService,
|
|
43
43
|
E.gen(function* (_) {
|
|
44
|
-
const context = yield* _(E.context<ConnectionClient | Dispatcher | RpcConfig>())
|
|
44
|
+
const context = yield* _(E.context<RPC.ConnectionClient | Dispatcher | RpcConfig>())
|
|
45
45
|
|
|
46
46
|
return ConnectionService.of({
|
|
47
47
|
preConnect: flow(preConnect, E.provide(context)),
|
package/src/effect.ts
CHANGED
|
@@ -32,12 +32,12 @@ import {
|
|
|
32
32
|
RegistrationService,
|
|
33
33
|
RegistrationServiceLive,
|
|
34
34
|
} from './registration/register.js'
|
|
35
|
-
import { AuthenticationClientLive } from './rpc/authentication.js'
|
|
35
|
+
import { AuthenticationClientLive } from './rpc/passkey/authentication.js'
|
|
36
36
|
import { DispatcherLive } from './rpc/client.js'
|
|
37
37
|
import type { RpcConfig } from './rpc/config.js'
|
|
38
38
|
import { RetrySchedule } from './rpc/config.js'
|
|
39
39
|
import { ConnectionClientLive } from './rpc/connection.js'
|
|
40
|
-
import { RegistrationClientLive } from './rpc/registration.js'
|
|
40
|
+
import { RegistrationClientLive } from './rpc/passkey/registration.js'
|
|
41
41
|
import { SocialClientLive } from './rpc/social.js'
|
|
42
42
|
import { UserClientLive } from './rpc/user.js'
|
|
43
43
|
import {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Effect as E, Layer as L, Option as O } from 'effect'
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { VerifyEmailRequest, VerifyEmailResponse } from '@passlock/shared/dist/rpc/user.js'
|
|
4
4
|
|
|
5
5
|
import * as Fixtures from '../test/fixtures.js'
|
|
6
6
|
import { AuthenticationService } from '../authentication/authenticate.js'
|
|
@@ -24,9 +24,9 @@ export const authenticationServiceTest = L.succeed(
|
|
|
24
24
|
}),
|
|
25
25
|
)
|
|
26
26
|
|
|
27
|
-
export const rpcVerifyEmailReq = new
|
|
27
|
+
export const rpcVerifyEmailReq = new VerifyEmailRequest({ token, code })
|
|
28
28
|
|
|
29
|
-
export const rpcVerifyEmailRes = new
|
|
29
|
+
export const rpcVerifyEmailRes = new VerifyEmailResponse({ principal: Fixtures.principal })
|
|
30
30
|
|
|
31
31
|
export const rpcClientTest = L.succeed(
|
|
32
32
|
UserClient,
|
package/src/email/email.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { Context, Effect as E, Layer, Option as O, flow, identity, pipe } from '
|
|
|
5
5
|
|
|
6
6
|
import { BadRequest } from '@passlock/shared/dist/error/error.js'
|
|
7
7
|
import type { VerifyEmailErrors as RpcErrors } from '@passlock/shared/dist/rpc/user.js'
|
|
8
|
-
import {
|
|
8
|
+
import { VerifyEmailRequest } from '@passlock/shared/dist/rpc/user.js'
|
|
9
9
|
import type { Principal } from '@passlock/shared/dist/schema/principal.js'
|
|
10
10
|
|
|
11
11
|
import { type AuthenticationErrors, AuthenticationService } from '../authentication/authenticate.js'
|
|
@@ -112,7 +112,7 @@ export const verifyEmail = (
|
|
|
112
112
|
yield* _(E.logDebug('Making request'))
|
|
113
113
|
const client = yield* _(UserClient)
|
|
114
114
|
const { principal } = yield* _(
|
|
115
|
-
client.verifyEmail(new
|
|
115
|
+
client.verifyEmail(new VerifyEmailRequest({ token, code: request.code })),
|
|
116
116
|
)
|
|
117
117
|
|
|
118
118
|
return principal
|
package/src/index.ts
CHANGED
|
@@ -13,7 +13,12 @@ import type {
|
|
|
13
13
|
import { ErrorCode } from '@passlock/shared/dist/error/error.js'
|
|
14
14
|
import type { VerifyEmail } from '@passlock/shared/dist/schema/email.js'
|
|
15
15
|
import type { UserVerification } from '@passlock/shared/dist/schema/passkey.js'
|
|
16
|
-
import
|
|
16
|
+
import {
|
|
17
|
+
type Principal,
|
|
18
|
+
type UserPrincipal,
|
|
19
|
+
isPrincipal,
|
|
20
|
+
isUserPrincipal,
|
|
21
|
+
} from '@passlock/shared/dist/schema/principal.js'
|
|
17
22
|
|
|
18
23
|
import type { AuthenticationService } from './authentication/authenticate.js'
|
|
19
24
|
import type { Capabilities } from './capabilities/capabilities.js'
|
|
@@ -240,14 +245,8 @@ export class PasslockUnsafe {
|
|
|
240
245
|
E.runSync(E.logDebug(`Passlock version: ${PASSLOCK_CLIENT_VERSION}`))
|
|
241
246
|
}
|
|
242
247
|
|
|
243
|
-
static
|
|
244
|
-
|
|
245
|
-
principal.givenName !== undefined &&
|
|
246
|
-
principal.familyName !== undefined &&
|
|
247
|
-
principal.email !== undefined &&
|
|
248
|
-
principal.emailVerified !== undefined
|
|
249
|
-
)
|
|
250
|
-
}
|
|
248
|
+
static isPrincipal = (value: unknown): value is Principal => isPrincipal(value)
|
|
249
|
+
static isUserPrincipal = (value: unknown): value is UserPrincipal => isUserPrincipal(value)
|
|
251
250
|
|
|
252
251
|
private readonly runPromise: {
|
|
253
252
|
<A, R extends Requirements>(
|
|
@@ -327,14 +326,8 @@ export class Passlock {
|
|
|
327
326
|
E.runSync(E.logDebug(`Passlock version: ${PASSLOCK_CLIENT_VERSION}`))
|
|
328
327
|
}
|
|
329
328
|
|
|
330
|
-
static
|
|
331
|
-
|
|
332
|
-
principal.givenName !== undefined &&
|
|
333
|
-
principal.familyName !== undefined &&
|
|
334
|
-
principal.email !== undefined &&
|
|
335
|
-
principal.emailVerified !== undefined
|
|
336
|
-
)
|
|
337
|
-
}
|
|
329
|
+
static isPrincipal = (value: unknown): value is Principal => isPrincipal(value)
|
|
330
|
+
static isUserPrincipal = (value: unknown): value is UserPrincipal => isUserPrincipal(value)
|
|
338
331
|
|
|
339
332
|
private readonly runPromise: {
|
|
340
333
|
<A, R extends Requirements>(
|