@passlock/client 0.9.6 → 0.9.8
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 +3 -3
- package/dist/authentication/authenticate.d.ts +6 -5
- package/dist/authentication/authenticate.d.ts.map +1 -1
- package/dist/authentication/authenticate.fixture.d.ts +8 -5
- package/dist/authentication/authenticate.fixture.d.ts.map +1 -1
- package/dist/authentication/authenticate.fixture.js +12 -7
- package/dist/authentication/authenticate.fixture.js.map +1 -1
- package/dist/authentication/authenticate.js +6 -6
- package/dist/authentication/authenticate.js.map +1 -1
- package/dist/authentication/authenticate.test.js +4 -4
- package/dist/capabilities/capabilities.js +3 -3
- package/dist/connection/connection.fixture.d.ts +1 -1
- package/dist/connection/connection.fixture.d.ts.map +1 -1
- package/dist/connection/connection.fixture.js +13 -10
- package/dist/connection/connection.fixture.js.map +1 -1
- package/dist/connection/connection.js +3 -3
- package/dist/effect.d.ts +21 -5
- package/dist/effect.d.ts.map +1 -1
- package/dist/effect.js +12 -9
- package/dist/effect.js.map +1 -1
- package/dist/email/email.d.ts +24 -8
- package/dist/email/email.d.ts.map +1 -1
- package/dist/email/email.fixture.d.ts +8 -8
- package/dist/email/email.fixture.d.ts.map +1 -1
- package/dist/email/email.fixture.js +12 -10
- package/dist/email/email.fixture.js.map +1 -1
- package/dist/email/email.js +5 -5
- package/dist/email/email.js.map +1 -1
- package/dist/email/email.test.js +4 -4
- package/dist/email/email.test.js.map +1 -1
- package/dist/index.d.ts +52 -37
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -14
- package/dist/index.js.map +1 -1
- package/dist/registration/register.d.ts +3 -4
- package/dist/registration/register.d.ts.map +1 -1
- package/dist/registration/register.fixture.d.ts +4 -4
- package/dist/registration/register.fixture.d.ts.map +1 -1
- package/dist/registration/register.fixture.js +12 -8
- package/dist/registration/register.fixture.js.map +1 -1
- package/dist/registration/register.js +4 -13
- package/dist/registration/register.js.map +1 -1
- package/dist/social/social.d.ts +22 -0
- package/dist/social/social.d.ts.map +1 -0
- package/dist/social/social.js +29 -0
- package/dist/social/social.js.map +1 -0
- package/dist/storage/storage.d.ts +1 -1
- package/dist/storage/storage.d.ts.map +1 -1
- package/dist/storage/storage.fixture.d.ts +1 -2
- package/dist/storage/storage.fixture.d.ts.map +1 -1
- package/dist/storage/storage.fixture.js +1 -16
- package/dist/storage/storage.fixture.js.map +1 -1
- package/dist/storage/storage.js +4 -3
- package/dist/storage/storage.js.map +1 -1
- package/dist/test/fixtures.d.ts +4 -0
- package/dist/test/fixtures.d.ts.map +1 -1
- package/dist/test/fixtures.js +13 -9
- package/dist/test/fixtures.js.map +1 -1
- package/dist/user/user.d.ts +9 -2
- package/dist/user/user.d.ts.map +1 -1
- package/dist/user/user.fixture.d.ts +3 -2
- package/dist/user/user.fixture.d.ts.map +1 -1
- package/dist/user/user.fixture.js +13 -9
- package/dist/user/user.fixture.js.map +1 -1
- package/dist/user/user.js +11 -1
- package/dist/user/user.js.map +1 -1
- package/package.json +14 -13
- package/src/authentication/authenticate.fixture.ts +14 -7
- package/src/authentication/authenticate.test.ts +4 -4
- package/src/authentication/authenticate.ts +15 -12
- package/src/capabilities/capabilities.ts +3 -3
- package/src/connection/connection.fixture.ts +14 -11
- package/src/connection/connection.ts +4 -4
- package/src/effect.ts +28 -26
- package/src/email/email.fixture.ts +15 -13
- package/src/email/email.test.ts +4 -4
- package/src/email/email.ts +13 -12
- package/src/index.ts +91 -34
- package/src/registration/register.fixture.ts +12 -8
- package/src/registration/register.test.ts +8 -43
- package/src/registration/register.ts +8 -24
- package/src/social/social.ts +86 -0
- package/src/storage/storage.fixture.ts +2 -19
- package/src/storage/storage.ts +5 -4
- package/src/test/fixtures.ts +15 -10
- package/src/user/user.fixture.ts +14 -11
- package/src/user/user.ts +22 -3
- package/dist/exit.d.ts +0 -64
- package/dist/exit.d.ts.map +0 -1
- package/dist/exit.js +0 -106
- package/dist/exit.js.map +0 -1
|
@@ -8,11 +8,11 @@ import { StorageService } from '../storage/storage.js';
|
|
|
8
8
|
import { UserService } from '../user/user.js';
|
|
9
9
|
export const CreateCredential = Context.GenericTag('@services/Create');
|
|
10
10
|
export const RegistrationService = Context.GenericTag('@services/RegistrationService');
|
|
11
|
-
const fetchOptions = (
|
|
11
|
+
const fetchOptions = (request) => {
|
|
12
12
|
return E.gen(function* (_) {
|
|
13
13
|
yield* _(E.logDebug('Making request'));
|
|
14
14
|
const rpcClient = yield* _(RpcClient);
|
|
15
|
-
const { publicKey, session } = yield* _(rpcClient.getRegistrationOptions(
|
|
15
|
+
const { publicKey, session } = yield* _(rpcClient.getRegistrationOptions(request));
|
|
16
16
|
yield* _(E.logDebug('Converting Passlock options to CredentialCreationOptions'));
|
|
17
17
|
const options = yield* _(toCreationOptions({ publicKey }));
|
|
18
18
|
return { options, session };
|
|
@@ -24,28 +24,19 @@ const toCreationOptions = (jsonOptions) => {
|
|
|
24
24
|
detail: String(error.error),
|
|
25
25
|
})));
|
|
26
26
|
};
|
|
27
|
-
const verifyCredential = (
|
|
27
|
+
const verifyCredential = (request) => {
|
|
28
28
|
return E.gen(function* (_) {
|
|
29
29
|
yield* _(E.logDebug('Making request'));
|
|
30
30
|
const rpcClient = yield* _(RpcClient);
|
|
31
|
-
const { principal } = yield* _(rpcClient.verifyRegistrationCredential(
|
|
31
|
+
const { principal } = yield* _(rpcClient.verifyRegistrationCredential(request));
|
|
32
32
|
return principal;
|
|
33
33
|
});
|
|
34
34
|
};
|
|
35
|
-
const isNewUser = (email) => {
|
|
36
|
-
return pipe(UserService, E.flatMap(service => service.isExistingUser({ email })), E.catchTag('BadRequest', () => E.unit), E.flatMap(isExistingUser => {
|
|
37
|
-
return isExistingUser
|
|
38
|
-
? new Duplicate({ message: 'User already has a passkey registered' })
|
|
39
|
-
: E.unit;
|
|
40
|
-
}));
|
|
41
|
-
};
|
|
42
35
|
export const registerPasskey = (request) => {
|
|
43
36
|
const effect = E.gen(function* (_) {
|
|
44
37
|
yield* _(E.logInfo('Checking if browser supports Passkeys'));
|
|
45
38
|
const capabilities = yield* _(Capabilities);
|
|
46
39
|
yield* _(capabilities.passkeySupport);
|
|
47
|
-
yield* _(E.logInfo('Checking if already registered'));
|
|
48
|
-
yield* _(isNewUser(request.email));
|
|
49
40
|
yield* _(E.logInfo('Fetching registration options from Passlock'));
|
|
50
41
|
const { options, session } = yield* _(fetchOptions(new OptionsReq(request)));
|
|
51
42
|
yield* _(E.logInfo('Building new credential'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/registration/register.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,4BAA4B,GAC7B,MAAM,wCAAwC,CAAA;AAE/C,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAA;AAEtF,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAA;AACvF,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAO5D,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAkB7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAmB,kBAAkB,CAAC,CAAA;AAYxF,MAAM,CAAC,MAAM,mBAAmB,GAAG,OAAO,CAAC,UAAU,CACnD,+BAA+B,CAChC,CAAA;AAID,MAAM,YAAY,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/registration/register.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type BadRequest, type NotSupported } from '@passlock/shared/dist/error/error.js';
|
|
2
|
+
import { RpcClient } from '@passlock/shared/dist/rpc/rpc.js';
|
|
3
|
+
import { AuthenticateOidcErrors, RegisterOidcErrors } from '@passlock/shared/dist/rpc/social.js';
|
|
4
|
+
import type { Principal } from '@passlock/shared/dist/schema/schema.js';
|
|
5
|
+
import { Context, Effect as E, Layer } from 'effect';
|
|
6
|
+
export type OidcRequest = {
|
|
7
|
+
provider: 'google';
|
|
8
|
+
idToken: string;
|
|
9
|
+
};
|
|
10
|
+
export type RegistrationErrors = NotSupported | BadRequest | RegisterOidcErrors;
|
|
11
|
+
export type AuthenticationErrors = NotSupported | BadRequest | AuthenticateOidcErrors;
|
|
12
|
+
export type SocialService = {
|
|
13
|
+
registerOidc: (data: OidcRequest) => E.Effect<Principal, RegistrationErrors>;
|
|
14
|
+
authenticateOidc: (data: OidcRequest) => E.Effect<Principal, AuthenticationErrors>;
|
|
15
|
+
};
|
|
16
|
+
export declare const SocialService: Context.Tag<SocialService, SocialService>;
|
|
17
|
+
type Dependencies = RpcClient;
|
|
18
|
+
export declare const registerOidc: (request: OidcRequest) => E.Effect<Principal, RegistrationErrors, Dependencies>;
|
|
19
|
+
export declare const authenticateOidc: (request: OidcRequest) => E.Effect<Principal, AuthenticationErrors, Dependencies>;
|
|
20
|
+
export declare const SocialServiceLive: Layer.Layer<SocialService, never, RpcClient>;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=social.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"social.d.ts","sourceRoot":"","sources":["../../src/social/social.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,YAAY,EAClB,MAAM,sCAAsC,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAC5D,OAAO,EAAE,sBAAsB,EAAuB,kBAAkB,EAAmB,MAAM,qCAAqC,CAAA;AACtI,OAAO,KAAK,EACV,SAAS,EACV,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,KAAK,EAAQ,MAAM,QAAQ,CAAA;AAI1D,MAAM,MAAM,WAAW,GAAG;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAIjE,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,UAAU,GAAG,kBAAkB,CAAA;AAE/E,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,UAAU,GAAG,sBAAsB,CAAA;AAIrF,MAAM,MAAM,aAAa,GAAG;IAC1B,YAAY,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAA;IAC5E,gBAAgB,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAA;CACnF,CAAA;AAED,eAAO,MAAM,aAAa,2CAEzB,CAAA;AAID,KAAK,YAAY,GAAG,SAAS,CAAA;AAE7B,eAAO,MAAM,YAAY,YACd,WAAW,KACnB,EAAE,MAAM,CAAC,SAAS,EAAE,kBAAkB,EAAE,YAAY,CAYtD,CAAA;AAED,eAAO,MAAM,gBAAgB,YAClB,WAAW,KACnB,EAAE,MAAM,CAAC,SAAS,EAAE,oBAAoB,EAAE,YAAY,CAYxD,CAAA;AAKD,eAAO,MAAM,iBAAiB,8CAU7B,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import {} from '@passlock/shared/dist/error/error.js';
|
|
2
|
+
import { RpcClient } from '@passlock/shared/dist/rpc/rpc.js';
|
|
3
|
+
import { AuthenticateOidcErrors, AuthenticateOidcReq, RegisterOidcErrors, RegisterOidcReq } from '@passlock/shared/dist/rpc/social.js';
|
|
4
|
+
import { Context, Effect as E, Layer, flow } from 'effect';
|
|
5
|
+
export const SocialService = Context.GenericTag('@services/SocialService');
|
|
6
|
+
export const registerOidc = (request) => {
|
|
7
|
+
return E.gen(function* (_) {
|
|
8
|
+
yield* _(E.logInfo('Registering social account'));
|
|
9
|
+
const rpcClient = yield* _(RpcClient);
|
|
10
|
+
const { principal } = yield* _(rpcClient.registerOidc(new RegisterOidcReq(request)));
|
|
11
|
+
return principal;
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
export const authenticateOidc = (request) => {
|
|
15
|
+
return E.gen(function* (_) {
|
|
16
|
+
yield* _(E.logInfo('Authenticating with social account'));
|
|
17
|
+
const rpcClient = yield* _(RpcClient);
|
|
18
|
+
const { principal } = yield* _(rpcClient.authenticateOidc(new AuthenticateOidcReq(request)));
|
|
19
|
+
return principal;
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
export const SocialServiceLive = Layer.effect(SocialService, E.gen(function* (_) {
|
|
23
|
+
const context = yield* _(E.context());
|
|
24
|
+
return SocialService.of({
|
|
25
|
+
registerOidc: flow(registerOidc, E.provide(context)),
|
|
26
|
+
authenticateOidc: flow(authenticateOidc, E.provide(context))
|
|
27
|
+
});
|
|
28
|
+
}));
|
|
29
|
+
//# sourceMappingURL=social.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"social.js","sourceRoot":"","sources":["../../src/social/social.ts"],"names":[],"mappings":"AAGA,OAAO,EAGN,MAAM,sCAAsC,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAC5D,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAItI,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAmB1D,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,CAC7C,yBAAyB,CAC1B,CAAA;AAMD,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,OAAoB,EACmC,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,SAAS,CAAC,CAAA;QAErC,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAC5B,SAAS,CAAC,YAAY,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC,CACrD,CAAA;QAED,OAAO,SAAS,CAAA;IAClB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,OAAoB,EACqC,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,SAAS,CAAC,CAAA;QAErC,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAC5B,SAAS,CAAC,gBAAgB,CAAC,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAC7D,CAAA;QAED,OAAO,SAAS,CAAA;IAClB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAKD,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,EAAa,CAAC,CAAA;IAEhD,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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Principal } from '@passlock/shared/dist/schema/schema.js';
|
|
2
2
|
import { Context, Effect as E, Layer, Option as O } from 'effect';
|
|
3
3
|
import type { NoSuchElementException } from 'effect/Cause';
|
|
4
|
-
export type AuthType = 'email' | 'passkey';
|
|
4
|
+
export type AuthType = 'email' | 'passkey' | 'google';
|
|
5
5
|
export type StoredToken = {
|
|
6
6
|
token: string;
|
|
7
7
|
authType: AuthType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/storage/storage.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAA;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,EAAc,MAAM,QAAQ,CAAA;AAC7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AAI1D,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/storage/storage.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAA;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,EAAc,MAAM,QAAQ,CAAA;AAC7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AAI1D,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAA;AAErD,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,QAAQ,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAID,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACpD,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAA;IAC/E,UAAU,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAClD,iBAAiB,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACzD,kBAAkB,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;CACnC,CAAA;AAID,eAAO,MAAM,cAAc,6CAAiE,CAAA;AAG5F,eAAO,MAAM,OAAO,+BAAmD,CAAA;AAEvE,eAAO,MAAM,QAAQ,aAAc,QAAQ,WAAiC,CAAA;AAG5E,eAAO,MAAM,aAAa,cAAe,SAAS,KAAG,MAIpD,CAAA;AAGD,eAAO,MAAM,WAAW,aACX,QAAQ,SACf,MAAM,KAAG,EAAE,MAAM,CAAC,WAAW,CAShC,CAAA;AASH,eAAO,MAAM,UAAU,cAAe,SAAS,KAAG,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAY9E,CAAA;AAOD,eAAO,MAAM,QAAQ,aACT,QAAQ,KACjB,EAAE,MAAM,CAAC,WAAW,EAAE,sBAAsB,EAAE,OAAO,CAavD,CAAA;AAOD,eAAO,MAAM,UAAU,aAAc,QAAQ,KAAG,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAK5E,CAAA;AAQD,eAAO,MAAM,iBAAiB,aAAc,QAAQ,KAAG,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAqBnF,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAI5D,CAAA;AAKF,eAAO,MAAM,kBAAkB,6CAa9B,CAAA"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type { Principal } from '@passlock/shared/dist/schema/schema.js';
|
|
2
1
|
import { Layer } from 'effect';
|
|
3
|
-
export declare const principal: Principal;
|
|
4
2
|
export declare const testLayers: (storage?: Layer.Layer<Storage>) => Layer.Layer<Storage | import("./storage.js").StorageService, never, never>;
|
|
3
|
+
export { principal } from '../test/fixtures.js';
|
|
5
4
|
//# sourceMappingURL=storage.fixture.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.fixture.d.ts","sourceRoot":"","sources":["../../src/storage/storage.fixture.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"storage.fixture.d.ts","sourceRoot":"","sources":["../../src/storage/storage.fixture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,EAAQ,MAAM,QAAQ,CAAA;AASjD,eAAO,MAAM,UAAU,aAAa,MAAM,KAAK,CAAC,OAAO,CAAC,+EAIvD,CAAA;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA"}
|
|
@@ -1,25 +1,10 @@
|
|
|
1
1
|
import { Effect as E, Layer, pipe } from 'effect';
|
|
2
2
|
import { mock } from 'vitest-mock-extended';
|
|
3
3
|
import { Storage, StorageServiceLive } from './storage.js';
|
|
4
|
-
export const principal = {
|
|
5
|
-
token: 'token',
|
|
6
|
-
subject: {
|
|
7
|
-
id: '1',
|
|
8
|
-
email: 'john.doe@gmail.com',
|
|
9
|
-
firstName: 'john',
|
|
10
|
-
lastName: 'doe',
|
|
11
|
-
emailVerified: false,
|
|
12
|
-
},
|
|
13
|
-
authStatement: {
|
|
14
|
-
authType: 'passkey',
|
|
15
|
-
userVerified: false,
|
|
16
|
-
authTimestamp: new Date(0),
|
|
17
|
-
},
|
|
18
|
-
expireAt: new Date(100),
|
|
19
|
-
};
|
|
20
4
|
const storageTest = Layer.effect(Storage, E.sync(() => mock()));
|
|
21
5
|
export const testLayers = (storage = storageTest) => {
|
|
22
6
|
const storageService = pipe(StorageServiceLive, Layer.provide(storage));
|
|
23
7
|
return Layer.merge(storage, storageService);
|
|
24
8
|
};
|
|
9
|
+
export { principal } from '../test/fixtures.js';
|
|
25
10
|
//# sourceMappingURL=storage.fixture.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.fixture.js","sourceRoot":"","sources":["../../src/storage/storage.fixture.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"storage.fixture.js","sourceRoot":"","sources":["../../src/storage/storage.fixture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAE1D,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAC9B,OAAO,EACP,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAW,CAAC,CAC9B,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,UAAgC,WAAW,EAAE,EAAE;IACxE,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;IAEvE,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,cAAc,CAAC,CAAA;AAC7C,CAAC,CAAA;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA"}
|
package/dist/storage/storage.js
CHANGED
|
@@ -23,7 +23,7 @@ export const storeToken = (principal) => {
|
|
|
23
23
|
const compressed = compressToken(principal);
|
|
24
24
|
const key = buildKey(principal.authStatement.authType);
|
|
25
25
|
localStorage.setItem(key, compressed);
|
|
26
|
-
}).pipe(E.orElse(() => E.
|
|
26
|
+
}).pipe(E.orElse(() => E.void));
|
|
27
27
|
return yield* _(storeEffect);
|
|
28
28
|
});
|
|
29
29
|
};
|
|
@@ -51,13 +51,14 @@ export const clearExpiredToken = (authType) => {
|
|
|
51
51
|
}
|
|
52
52
|
});
|
|
53
53
|
return pipe(effect, E.match({
|
|
54
|
-
onSuccess: () => E.
|
|
55
|
-
onFailure: () => E.
|
|
54
|
+
onSuccess: () => E.void,
|
|
55
|
+
onFailure: () => E.void,
|
|
56
56
|
}));
|
|
57
57
|
};
|
|
58
58
|
export const clearExpiredTokens = E.all([
|
|
59
59
|
clearExpiredToken('passkey'),
|
|
60
60
|
clearExpiredToken('email'),
|
|
61
|
+
clearExpiredToken('google'),
|
|
61
62
|
]);
|
|
62
63
|
export const StorageServiceLive = Layer.effect(StorageService, E.gen(function* (_) {
|
|
63
64
|
const context = yield* _(E.context());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/storage/storage.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/storage/storage.ts"],"names":[],"mappings":"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"}
|
package/dist/test/fixtures.d.ts
CHANGED
|
@@ -2,6 +2,8 @@ import type { Principal } from '@passlock/shared/dist/schema/schema.js';
|
|
|
2
2
|
import { Layer as L } from 'effect';
|
|
3
3
|
import { Capabilities } from '../capabilities/capabilities.js';
|
|
4
4
|
import { StorageService, type StoredToken } from '../storage/storage.js';
|
|
5
|
+
import { BadRequest } from '@passlock/shared/dist/error/error.js';
|
|
6
|
+
import { PreConnectRes } from '@passlock/shared/dist/rpc/connection.js';
|
|
5
7
|
export declare const session = "session";
|
|
6
8
|
export declare const token = "token";
|
|
7
9
|
export declare const code = "code";
|
|
@@ -11,4 +13,6 @@ export declare const principal: Principal;
|
|
|
11
13
|
export declare const capabilitiesTest: L.Layer<Capabilities, never, never>;
|
|
12
14
|
export declare const storedToken: StoredToken;
|
|
13
15
|
export declare const storageServiceTest: L.Layer<StorageService, never, never>;
|
|
16
|
+
export declare const preConnectRes: PreConnectRes;
|
|
17
|
+
export declare const notImplemented: BadRequest;
|
|
14
18
|
//# sourceMappingURL=fixtures.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../src/test/fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAA;AACvE,OAAO,EAAe,KAAK,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../src/test/fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAA;AACvE,OAAO,EAAe,KAAK,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAA;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAA;AAEvE,eAAO,MAAM,OAAO,YAAY,CAAA;AAChC,eAAO,MAAM,KAAK,UAAU,CAAA;AAC5B,eAAO,MAAM,IAAI,SAAS,CAAA;AAC1B,eAAO,MAAM,QAAQ,YAAY,CAAA;AACjC,eAAO,MAAM,QAAQ,QAAqB,CAAA;AAE1C,eAAO,MAAM,SAAS,EAAE,SAevB,CAAA;AAED,eAAO,MAAM,gBAAgB,qCAQ5B,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,WAA2C,CAAA;AAErE,eAAO,MAAM,kBAAkB,uCAS9B,CAAA;AAED,eAAO,MAAM,aAAa,eAAsC,CAAA;AAChE,eAAO,MAAM,cAAc,YAAiD,CAAA"}
|
package/dist/test/fixtures.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Effect as E, Layer as L } from 'effect';
|
|
2
2
|
import { Capabilities } from '../capabilities/capabilities.js';
|
|
3
3
|
import { StorageService } from '../storage/storage.js';
|
|
4
|
+
import { BadRequest } from '@passlock/shared/dist/error/error.js';
|
|
5
|
+
import { PreConnectRes } from '@passlock/shared/dist/rpc/connection.js';
|
|
4
6
|
export const session = 'session';
|
|
5
7
|
export const token = 'token';
|
|
6
8
|
export const code = 'code';
|
|
@@ -8,11 +10,11 @@ export const authType = 'passkey';
|
|
|
8
10
|
export const expireAt = Date.now() + 10000;
|
|
9
11
|
export const principal = {
|
|
10
12
|
token: 'token',
|
|
11
|
-
|
|
13
|
+
user: {
|
|
12
14
|
id: '1',
|
|
13
15
|
email: 'john.doe@gmail.com',
|
|
14
|
-
|
|
15
|
-
|
|
16
|
+
givenName: 'john',
|
|
17
|
+
familyName: 'doe',
|
|
16
18
|
emailVerified: false,
|
|
17
19
|
},
|
|
18
20
|
authStatement: {
|
|
@@ -23,17 +25,19 @@ export const principal = {
|
|
|
23
25
|
expireAt: new Date(0),
|
|
24
26
|
};
|
|
25
27
|
export const capabilitiesTest = L.succeed(Capabilities, Capabilities.of({
|
|
26
|
-
passkeySupport: E.
|
|
28
|
+
passkeySupport: E.void,
|
|
27
29
|
isPasskeySupport: E.succeed(true),
|
|
28
|
-
autofillSupport: E.
|
|
30
|
+
autofillSupport: E.void,
|
|
29
31
|
isAutofillSupport: E.succeed(true),
|
|
30
32
|
}));
|
|
31
33
|
export const storedToken = { token, authType, expireAt };
|
|
32
34
|
export const storageServiceTest = L.succeed(StorageService, StorageService.of({
|
|
33
|
-
storeToken: () => E.
|
|
35
|
+
storeToken: () => E.void,
|
|
34
36
|
getToken: () => E.succeed(storedToken),
|
|
35
|
-
clearToken: () => E.
|
|
36
|
-
clearExpiredToken: () => E.
|
|
37
|
-
clearExpiredTokens: E.
|
|
37
|
+
clearToken: () => E.void,
|
|
38
|
+
clearExpiredToken: () => E.void,
|
|
39
|
+
clearExpiredTokens: E.void,
|
|
38
40
|
}));
|
|
41
|
+
export const preConnectRes = new PreConnectRes({ warmed: true });
|
|
42
|
+
export const notImplemented = new BadRequest({ message: 'Not implemented' });
|
|
39
43
|
//# sourceMappingURL=fixtures.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../src/test/fixtures.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAoB,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../src/test/fixtures.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAoB,MAAM,uBAAuB,CAAA;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAA;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAA;AAEvE,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,SAAS,GAAc;IAClC,KAAK,EAAE,OAAO;IACd,IAAI,EAAE;QACJ,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,oBAAoB;QAC3B,SAAS,EAAE,MAAM;QACjB,UAAU,EAAE,KAAK;QACjB,aAAa,EAAE,KAAK;KACrB;IACD,aAAa,EAAE;QACb,QAAQ,EAAE,OAAO;QACjB,YAAY,EAAE,KAAK;QACnB,aAAa,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;KAC3B;IACD,QAAQ,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;CACtB,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,OAAO,CACvC,YAAY,EACZ,YAAY,CAAC,EAAE,CAAC;IACd,cAAc,EAAE,CAAC,CAAC,IAAI;IACtB,gBAAgB,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IACjC,eAAe,EAAE,CAAC,CAAC,IAAI;IACvB,iBAAiB,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;CACnC,CAAC,CACH,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAA;AAErE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,OAAO,CACzC,cAAc,EACd,cAAc,CAAC,EAAE,CAAC;IAChB,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI;IACxB,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;IACtC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI;IACxB,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI;IAC/B,kBAAkB,EAAE,CAAC,CAAC,IAAI;CAC3B,CAAC,CACH,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;AAChE,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,UAAU,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAA"}
|
package/dist/user/user.d.ts
CHANGED
|
@@ -1,15 +1,22 @@
|
|
|
1
|
-
import type { BadRequest } from '@passlock/shared/dist/error/error.js';
|
|
1
|
+
import type { BadRequest, Disabled, NotFound } from '@passlock/shared/dist/error/error.js';
|
|
2
2
|
import { RpcClient } from '@passlock/shared/dist/rpc/rpc.js';
|
|
3
|
+
import type { VerifyEmail } from '@passlock/shared/dist/schema/schema.js';
|
|
3
4
|
import { Context, Effect as E, Layer } from 'effect';
|
|
4
5
|
export type Email = {
|
|
5
6
|
email: string;
|
|
6
7
|
};
|
|
8
|
+
export type ResendEmail = VerifyEmail & {
|
|
9
|
+
userId: string;
|
|
10
|
+
};
|
|
11
|
+
export type ResendEmailErrors = BadRequest | NotFound | Disabled;
|
|
7
12
|
export type UserService = {
|
|
8
|
-
isExistingUser: (
|
|
13
|
+
isExistingUser: (request: Email) => E.Effect<boolean, BadRequest>;
|
|
14
|
+
resendVerificationEmail: (request: ResendEmail) => E.Effect<void, ResendEmailErrors>;
|
|
9
15
|
};
|
|
10
16
|
export declare const UserService: Context.Tag<UserService, UserService>;
|
|
11
17
|
type Dependencies = RpcClient;
|
|
12
18
|
export declare const isExistingUser: (request: Email) => E.Effect<boolean, BadRequest, Dependencies>;
|
|
19
|
+
export declare const resendVerificationEmail: (request: ResendEmail) => E.Effect<void, ResendEmailErrors, Dependencies>;
|
|
13
20
|
export declare const UserServiceLive: Layer.Layer<UserService, never, RpcClient>;
|
|
14
21
|
export {};
|
|
15
22
|
//# sourceMappingURL=user.d.ts.map
|
package/dist/user/user.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/user/user.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAA;
|
|
1
|
+
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/user/user.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAA;AAC1F,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAE5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAA;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,KAAK,EAAQ,MAAM,QAAQ,CAAA;AAI1D,MAAM,MAAM,KAAK,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AACrC,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAI1D,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAIhE,MAAM,MAAM,WAAW,GAAG;IACxB,cAAc,EAAE,CAAC,OAAO,EAAE,KAAK,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;IACjE,uBAAuB,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAA;CACrF,CAAA;AAED,eAAO,MAAM,WAAW,uCAA2D,CAAA;AAInF,KAAK,YAAY,GAAG,SAAS,CAAA;AAE7B,eAAO,MAAM,cAAc,YAAa,KAAK,KAAG,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,CAUzF,CAAA;AAED,eAAO,MAAM,uBAAuB,YAAa,WAAW,KAAG,EAAE,MAAM,CAAC,IAAI,EAAE,iBAAiB,EAAE,YAAY,CAS5G,CAAA;AAKD,eAAO,MAAM,eAAe,4CAS3B,CAAA"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { RpcClient } from '@passlock/shared/dist/rpc/rpc.js';
|
|
2
|
-
import { IsExistingUserReq, IsExistingUserRes } from '@passlock/shared/dist/rpc/user.js';
|
|
2
|
+
import { IsExistingUserReq, IsExistingUserRes, VerifyEmailRes } from '@passlock/shared/dist/rpc/user.js';
|
|
3
3
|
import { Layer as L } from 'effect';
|
|
4
4
|
export declare const email = "jdoe@gmail.com";
|
|
5
|
-
export declare const rpcClientTest: L.Layer<RpcClient, never, never>;
|
|
6
5
|
export declare const isRegisteredReq: IsExistingUserReq;
|
|
7
6
|
export declare const isRegisteredRes: IsExistingUserRes;
|
|
7
|
+
export declare const verifyEmailRes: VerifyEmailRes;
|
|
8
|
+
export declare const rpcClientTest: L.Layer<RpcClient, never, never>;
|
|
8
9
|
//# sourceMappingURL=user.fixture.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.fixture.d.ts","sourceRoot":"","sources":["../../src/user/user.fixture.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"user.fixture.d.ts","sourceRoot":"","sources":["../../src/user/user.fixture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAC5D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AACxG,OAAO,EAAe,KAAK,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAGhD,eAAO,MAAM,KAAK,mBAAmB,CAAA;AACrC,eAAO,MAAM,eAAe,mBAAmC,CAAA;AAC/D,eAAO,MAAM,eAAe,mBAAiD,CAAA;AAC7E,eAAO,MAAM,cAAc,gBAAwD,CAAA;AAEnF,eAAO,MAAM,aAAa,kCAczB,CAAA"}
|
|
@@ -1,17 +1,21 @@
|
|
|
1
|
-
import { BadRequest } from '@passlock/shared/dist/error/error.js';
|
|
2
1
|
import { RpcClient } from '@passlock/shared/dist/rpc/rpc.js';
|
|
3
|
-
import { IsExistingUserReq, IsExistingUserRes } from '@passlock/shared/dist/rpc/user.js';
|
|
2
|
+
import { IsExistingUserReq, IsExistingUserRes, VerifyEmailRes } from '@passlock/shared/dist/rpc/user.js';
|
|
4
3
|
import { Effect as E, Layer as L } from 'effect';
|
|
4
|
+
import * as Fixtures from '../test/fixtures.js';
|
|
5
5
|
export const email = 'jdoe@gmail.com';
|
|
6
|
+
export const isRegisteredReq = new IsExistingUserReq({ email });
|
|
7
|
+
export const isRegisteredRes = new IsExistingUserRes({ existingUser: false });
|
|
8
|
+
export const verifyEmailRes = new VerifyEmailRes({ principal: Fixtures.principal });
|
|
6
9
|
export const rpcClientTest = L.succeed(RpcClient, RpcClient.of({
|
|
7
10
|
preConnect: () => E.succeed({ warmed: true }),
|
|
8
11
|
isExistingUser: () => E.succeed({ existingUser: true }),
|
|
9
|
-
verifyEmail: () => E.succeed(
|
|
10
|
-
getRegistrationOptions: () => E.fail(
|
|
11
|
-
verifyRegistrationCredential: () => E.fail(
|
|
12
|
-
getAuthenticationOptions: () => E.fail(
|
|
13
|
-
verifyAuthenticationCredential: () => E.fail(
|
|
12
|
+
verifyEmail: () => E.succeed(verifyEmailRes),
|
|
13
|
+
getRegistrationOptions: () => E.fail(Fixtures.notImplemented),
|
|
14
|
+
verifyRegistrationCredential: () => E.fail(Fixtures.notImplemented),
|
|
15
|
+
getAuthenticationOptions: () => E.fail(Fixtures.notImplemented),
|
|
16
|
+
verifyAuthenticationCredential: () => E.fail(Fixtures.notImplemented),
|
|
17
|
+
registerOidc: () => E.fail(Fixtures.notImplemented),
|
|
18
|
+
authenticateOidc: () => E.fail(Fixtures.notImplemented),
|
|
19
|
+
resendVerificationEmail: () => E.fail(Fixtures.notImplemented),
|
|
14
20
|
}));
|
|
15
|
-
export const isRegisteredReq = new IsExistingUserReq({ email });
|
|
16
|
-
export const isRegisteredRes = new IsExistingUserRes({ existingUser: false });
|
|
17
21
|
//# sourceMappingURL=user.fixture.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.fixture.js","sourceRoot":"","sources":["../../src/user/user.fixture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"user.fixture.js","sourceRoot":"","sources":["../../src/user/user.fixture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAC5D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AACxG,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAChD,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAA;AAE/C,MAAM,CAAC,MAAM,KAAK,GAAG,gBAAgB,CAAA;AACrC,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,iBAAiB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;AAC/D,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,iBAAiB,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAA;AAC7E,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAA;AAEnF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,OAAO,CACpC,SAAS,EACT,SAAS,CAAC,EAAE,CAAC;IACX,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC7C,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IACvD,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;IAC5C,sBAAsB,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;IAC7D,4BAA4B,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;IACnE,wBAAwB,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;IAC/D,8BAA8B,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;IACrE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;IACnD,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;IACvD,uBAAuB,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;CAC/D,CAAC,CACH,CAAA"}
|
package/dist/user/user.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { RpcClient } from '@passlock/shared/dist/rpc/rpc.js';
|
|
2
|
-
import { IsExistingUserReq } from '@passlock/shared/dist/rpc/user.js';
|
|
2
|
+
import { IsExistingUserReq, ResendEmailReq } from '@passlock/shared/dist/rpc/user.js';
|
|
3
3
|
import { Context, Effect as E, Layer, flow } from 'effect';
|
|
4
4
|
export const UserService = Context.GenericTag('@services/UserService');
|
|
5
5
|
export const isExistingUser = (request) => {
|
|
@@ -11,10 +11,20 @@ export const isExistingUser = (request) => {
|
|
|
11
11
|
return existingUser;
|
|
12
12
|
});
|
|
13
13
|
};
|
|
14
|
+
export const resendVerificationEmail = (request) => {
|
|
15
|
+
return E.gen(function* (_) {
|
|
16
|
+
yield* _(E.logInfo('Resending verification email'));
|
|
17
|
+
const rpcClient = yield* _(RpcClient);
|
|
18
|
+
yield* _(E.logDebug('Making RPC request'));
|
|
19
|
+
const { userId, ...verifyEmail } = request;
|
|
20
|
+
yield* _(rpcClient.resendVerificationEmail(new ResendEmailReq({ userId, verifyEmail })));
|
|
21
|
+
});
|
|
22
|
+
};
|
|
14
23
|
export const UserServiceLive = Layer.effect(UserService, E.gen(function* (_) {
|
|
15
24
|
const context = yield* _(E.context());
|
|
16
25
|
return UserService.of({
|
|
17
26
|
isExistingUser: flow(isExistingUser, E.provide(context)),
|
|
27
|
+
resendVerificationEmail: flow(resendVerificationEmail, E.provide(context))
|
|
18
28
|
});
|
|
19
29
|
}));
|
|
20
30
|
//# sourceMappingURL=user.js.map
|
package/dist/user/user.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/user/user.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;
|
|
1
|
+
{"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/user/user.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAC5D,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AAErF,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAkB1D,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAc,uBAAuB,CAAC,CAAA;AAMnF,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,SAAS,CAAC,CAAA;QAErC,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,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAE3F,OAAO,YAAY,CAAA;IACrB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,OAAoB,EAAmD,EAAE;IAC/G,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,SAAS,CAAC,CAAA;QAErC,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,cAAc,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CAAA;IAC1F,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAKD,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,EAAa,CAAC,CAAA;IAChD,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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@passlock/client",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.8",
|
|
4
4
|
"description": "Easy WebAuthn/FIDO Passkey authentication for your web apps. This library works with pretty much any frontend/backend stack including React/Next.js, Vue, SvelteKit etc - check out the tutorial",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"passkey",
|
|
@@ -40,17 +40,17 @@
|
|
|
40
40
|
],
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@github/webauthn-json": "^2.1.1",
|
|
43
|
-
"effect": "
|
|
44
|
-
"@passlock/shared": "0.9.
|
|
43
|
+
"effect": "3.0.3",
|
|
44
|
+
"@passlock/shared": "0.9.8"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@tsconfig/node18": "^18.2.4",
|
|
48
|
-
"@types/node": "^20.12.
|
|
49
|
-
"@typescript-eslint/eslint-plugin": "^7.
|
|
50
|
-
"@typescript-eslint/parser": "^7.
|
|
51
|
-
"@vitest/coverage-v8": "^1.
|
|
52
|
-
"@vitest/ui": "^1.
|
|
53
|
-
"eslint": "^8.
|
|
48
|
+
"@types/node": "^20.12.7",
|
|
49
|
+
"@typescript-eslint/eslint-plugin": "^7.7.1",
|
|
50
|
+
"@typescript-eslint/parser": "^7.7.1",
|
|
51
|
+
"@vitest/coverage-v8": "^1.5.0",
|
|
52
|
+
"@vitest/ui": "^1.5.0",
|
|
53
|
+
"eslint": "^8.56.0",
|
|
54
54
|
"eslint-config-prettier": "^9.1.0",
|
|
55
55
|
"eslint-import-resolver-typescript": "^3.6.1",
|
|
56
56
|
"eslint-plugin-import": "^2.29.1",
|
|
@@ -58,9 +58,9 @@
|
|
|
58
58
|
"prettier": "^3.2.5",
|
|
59
59
|
"rimraf": "^5.0.5",
|
|
60
60
|
"tslib": "^2.6.2",
|
|
61
|
-
"typescript": "^5.4.
|
|
62
|
-
"vite": "^5.2.
|
|
63
|
-
"vitest": "^1.
|
|
61
|
+
"typescript": "^5.4.5",
|
|
62
|
+
"vite": "^5.2.10",
|
|
63
|
+
"vitest": "^1.5.0",
|
|
64
64
|
"vitest-mock-extended": "^1.3.1"
|
|
65
65
|
},
|
|
66
66
|
"scripts": {
|
|
@@ -71,12 +71,13 @@
|
|
|
71
71
|
"test:ui": "vitest --coverage.enabled=true --ui",
|
|
72
72
|
"test:coverage": "vitest run --coverage",
|
|
73
73
|
"build": "tsc --build",
|
|
74
|
+
"build:clean": "pnpm run clean && pnpm run build",
|
|
74
75
|
"watch": "tsc --build --watch",
|
|
75
76
|
"typecheck": "tsc --noEmit",
|
|
76
77
|
"lint": "eslint --ext .ts src",
|
|
77
78
|
"lint:fix": "pnpm run lint --fix",
|
|
78
79
|
"format": "prettier --write \"src/**/*.+(js|ts|json)\"",
|
|
79
80
|
"ncu": "ncu -x @passlock/shared",
|
|
80
|
-
"ncu:save": "ncu -u -x @passlock/shared"
|
|
81
|
+
"ncu:save": "ncu -u -x @passlock/shared -x eslint"
|
|
81
82
|
}
|
|
82
83
|
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { BadRequest } from '@passlock/shared/dist/error/error.js'
|
|
2
1
|
import {
|
|
3
2
|
OptionsRes,
|
|
4
3
|
VerificationReq,
|
|
5
4
|
VerificationRes,
|
|
6
5
|
} from '@passlock/shared/dist/rpc/authentication.js'
|
|
7
6
|
import { RpcClient } from '@passlock/shared/dist/rpc/rpc.js'
|
|
7
|
+
import { IsExistingUserRes, VerifyEmailRes } from '@passlock/shared/dist/rpc/user.js'
|
|
8
8
|
import type { AuthenticationCredential } from '@passlock/shared/dist/schema/schema.js'
|
|
9
9
|
import { Effect as E, Layer as L } from 'effect'
|
|
10
|
-
import { type AuthenticationRequest, GetCredential } from './authenticate.js'
|
|
11
10
|
import * as Fixtures from '../test/fixtures.js'
|
|
11
|
+
import { GetCredential, type AuthenticationRequest } from './authenticate.js'
|
|
12
12
|
|
|
13
13
|
export const session = 'session'
|
|
14
14
|
export const token = 'token'
|
|
@@ -48,6 +48,10 @@ export const verificationReq = new VerificationReq({ session, credential })
|
|
|
48
48
|
|
|
49
49
|
export const verificationRes = new VerificationRes({ principal: Fixtures.principal })
|
|
50
50
|
|
|
51
|
+
export const isExistingUserRes = new IsExistingUserRes({ existingUser: true })
|
|
52
|
+
|
|
53
|
+
export const verifyEmailRes = new VerifyEmailRes({ principal: Fixtures.principal })
|
|
54
|
+
|
|
51
55
|
export const getCredentialTest = L.succeed(
|
|
52
56
|
GetCredential,
|
|
53
57
|
GetCredential.of(() => E.succeed(credential)),
|
|
@@ -56,13 +60,16 @@ export const getCredentialTest = L.succeed(
|
|
|
56
60
|
export const rpcClientTest = L.succeed(
|
|
57
61
|
RpcClient,
|
|
58
62
|
RpcClient.of({
|
|
59
|
-
preConnect: () => E.succeed(
|
|
60
|
-
isExistingUser: () => E.succeed(
|
|
61
|
-
verifyEmail: () => E.succeed(
|
|
62
|
-
getRegistrationOptions: () => E.fail(
|
|
63
|
-
verifyRegistrationCredential: () => E.fail(
|
|
63
|
+
preConnect: () => E.succeed(Fixtures.preConnectRes),
|
|
64
|
+
isExistingUser: () => E.succeed(isExistingUserRes),
|
|
65
|
+
verifyEmail: () => E.succeed(verifyEmailRes),
|
|
66
|
+
getRegistrationOptions: () => E.fail(Fixtures.notImplemented),
|
|
67
|
+
verifyRegistrationCredential: () => E.fail(Fixtures.notImplemented),
|
|
64
68
|
getAuthenticationOptions: () => E.succeed(optionsRes),
|
|
65
69
|
verifyAuthenticationCredential: () => E.succeed(verificationRes),
|
|
70
|
+
registerOidc: () => E.fail(Fixtures.notImplemented),
|
|
71
|
+
authenticateOidc: () => E.fail(Fixtures.notImplemented),
|
|
72
|
+
resendVerificationEmail: () => E.fail(Fixtures.notImplemented),
|
|
66
73
|
}),
|
|
67
74
|
)
|
|
68
75
|
|
|
@@ -114,8 +114,8 @@ describe('authenticate should', () => {
|
|
|
114
114
|
E.sync(() => {
|
|
115
115
|
const storageMock = mock<StorageService>()
|
|
116
116
|
|
|
117
|
-
storageMock.storeToken.mockReturnValue(E.
|
|
118
|
-
storageMock.clearExpiredToken.mockReturnValue(E.
|
|
117
|
+
storageMock.storeToken.mockReturnValue(E.void)
|
|
118
|
+
storageMock.clearExpiredToken.mockReturnValue(E.void)
|
|
119
119
|
|
|
120
120
|
return storageMock
|
|
121
121
|
}),
|
|
@@ -149,8 +149,8 @@ describe('authenticate should', () => {
|
|
|
149
149
|
E.sync(() => {
|
|
150
150
|
const storageMock = mock<StorageService>()
|
|
151
151
|
|
|
152
|
-
storageMock.storeToken.mockReturnValue(E.
|
|
153
|
-
storageMock.clearExpiredToken.mockReturnValue(E.
|
|
152
|
+
storageMock.storeToken.mockReturnValue(E.void)
|
|
153
|
+
storageMock.clearExpiredToken.mockReturnValue(E.void)
|
|
154
154
|
|
|
155
155
|
return storageMock
|
|
156
156
|
}),
|