@passlock/client 0.9.21 → 0.9.22

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 (42) hide show
  1. package/README.md +125 -0
  2. package/package.json +16 -14
  3. package/dist/authentication/authenticate.test.d.ts +0 -2
  4. package/dist/authentication/authenticate.test.d.ts.map +0 -1
  5. package/dist/authentication/authenticate.test.js +0 -111
  6. package/dist/authentication/authenticate.test.js.map +0 -1
  7. package/dist/connection/connection.test.d.ts +0 -2
  8. package/dist/connection/connection.test.d.ts.map +0 -1
  9. package/dist/connection/connection.test.js +0 -36
  10. package/dist/connection/connection.test.js.map +0 -1
  11. package/dist/email/email.test.d.ts +0 -2
  12. package/dist/email/email.test.d.ts.map +0 -1
  13. package/dist/email/email.test.js +0 -99
  14. package/dist/email/email.test.js.map +0 -1
  15. package/dist/event/event.node.test.d.ts +0 -2
  16. package/dist/event/event.node.test.d.ts.map +0 -1
  17. package/dist/event/event.node.test.js +0 -13
  18. package/dist/event/event.node.test.js.map +0 -1
  19. package/dist/event/event.test.d.ts +0 -2
  20. package/dist/event/event.test.d.ts.map +0 -1
  21. package/dist/event/event.test.js +0 -30
  22. package/dist/event/event.test.js.map +0 -1
  23. package/dist/logging/eventLogger.test.d.ts +0 -2
  24. package/dist/logging/eventLogger.test.d.ts.map +0 -1
  25. package/dist/logging/eventLogger.test.js +0 -67
  26. package/dist/logging/eventLogger.test.js.map +0 -1
  27. package/dist/registration/register.test.d.ts +0 -2
  28. package/dist/registration/register.test.d.ts.map +0 -1
  29. package/dist/registration/register.test.js +0 -104
  30. package/dist/registration/register.test.js.map +0 -1
  31. package/dist/social/social.test.d.ts +0 -2
  32. package/dist/social/social.test.d.ts.map +0 -1
  33. package/dist/social/social.test.js +0 -110
  34. package/dist/social/social.test.js.map +0 -1
  35. package/dist/storage/storage.test.d.ts +0 -2
  36. package/dist/storage/storage.test.d.ts.map +0 -1
  37. package/dist/storage/storage.test.js +0 -120
  38. package/dist/storage/storage.test.js.map +0 -1
  39. package/dist/user/user.test.d.ts +0 -2
  40. package/dist/user/user.test.d.ts.map +0 -1
  41. package/dist/user/user.test.js +0 -56
  42. package/dist/user/user.test.js.map +0 -1
package/README.md ADDED
@@ -0,0 +1,125 @@
1
+ <div align="center">
2
+ <a href="https://github.com/passlock-dev/ts-clients">
3
+ <img src="https://github.com/passlock-dev/passkeys-frontend/assets/208345/53ee00d3-8e6c-49ea-b43c-3f901450c73b" alt="Passlock logo" width="80" height="80">
4
+ </a>
5
+ </div>
6
+
7
+ <h1 align="center">Passkeys, Social Login & More</h1>
8
+
9
+ <div align="center">
10
+ <picture align="center">
11
+ <source srcset="https://raw.githubusercontent.com/passlock-dev/ts-clients/master/README_assets/repo-banner.dark.svg" media="(prefers-color-scheme: dark)" />
12
+ <img align="center" width=550 height=50 src="https://raw.githubusercontent.com/passlock-dev/ts-clients/master/README_assets/repo-banner.svg" />
13
+ </picture>
14
+ <p align="center">
15
+ Typescript library for next generation authentication. Passkeys, Apple login, Google one-tap and more..
16
+ <br />
17
+ <a href="https://passlock.dev"><strong>Project website »</strong></a>
18
+ <br />
19
+ <a href="https://github.com/passlock-dev/ts-clients">GitHub</a>
20
+ ·
21
+ <a href="https://d1rl0ue18b0151.cloudfront.net">Demo</a>
22
+ ·
23
+ <a href="https://docs.passlock.dev">Documentation</a>
24
+ ·
25
+ <a href="https://docs.passlock.dev/docs/tutorial/introduction">Tutorial</a>
26
+ </p>
27
+ </div>
28
+
29
+ <br />
30
+
31
+ ## Features
32
+
33
+ Passkeys and the WebAuthn API are quite complex. I've taken an opinionated approach to simplify things for you. Following the 80/20 principle, I've tried to focus on the features most valuable to developers and users.
34
+
35
+ 1. **🔐 Primary or secondary authentication** - 2FA or a complete replacement for passwords
36
+
37
+ 2. **🚀 Social login** - Supporting Apple & Google. GitHub coming soon..
38
+
39
+ 3. **☝🏻 Biometrics** - Frictionless facial or fingerprint recognition for your webapps
40
+
41
+ 4. **🖥️ Management console** - Suspend users, disable or revoke passkeys and more..
42
+
43
+ 5. **🕵️ Audit trail** - View a full audit trail for each user
44
+
45
+ 6. **🖥️ Dev console** - Something not working? check the web console for details
46
+
47
+ 7. **👌 Headless components** - You have 100% control over the UI
48
+
49
+ ## Screenshots
50
+
51
+ ![SvelteKit template using this library](https://raw.githubusercontent.com/passlock-dev/ts-clients/master/README_assets/preline.dark.png)
52
+ <p align="center">Demo app using this library for passkey and social login</p>
53
+
54
+ ![Passlock user profile](https://raw.githubusercontent.com/passlock-dev/ts-clients/master/README_assets/console.png)
55
+ <p align="center">Viewing a user's authentication activity on their profile page</p>
56
+
57
+ ## Usage
58
+
59
+ ### Register a passkey
60
+
61
+ ```typescript
62
+ import { Passlock, PasslockError } from '@passlock/client'
63
+
64
+ // you can find these details in the settings area of your Passlock console
65
+ const tenancyId = '...'
66
+ const clientId = '...'
67
+
68
+ const passlock = new Passlock({ tenancyId, clientId })
69
+
70
+ // to register a new passkey, call registerPasskey(). We're using placeholders for
71
+ // the user data. You should grab this from an HTML form, React store, Redux etc.
72
+ const [email, givenName, familyName] = ["jdoe@gmail.com", "John", "Doe"]
73
+
74
+ // Passlock doesn't throw but instead returns a union: result | error
75
+ const result = await passlock.registerPasskey({ email, givenName, familyName })
76
+
77
+ // ensure we're error free
78
+ if (!PasslockError.isError(result)) {
79
+ // send the token to your backend (json/fetch or hidden form field etc)
80
+ console.log('Token: %s', result.token)
81
+ }
82
+ ```
83
+
84
+ ### Authenticate using a passkey
85
+
86
+ ```typescript
87
+ import { Passlock, PasslockError } from '@passlock/client'
88
+
89
+ const tenancyId = '...'
90
+ const clientId = '...'
91
+
92
+ const passlock = new Passlock({ tenancyId, clientId })
93
+ const result = await passlock.authenticatePasskey()
94
+
95
+ if (!PasslockError.isError(result)) {
96
+ // send the token to your backend for verification
97
+ console.log('Token: %s', result.token)
98
+ }
99
+ ```
100
+
101
+ ### Backend verification
102
+
103
+ Verify the token and obtain the passkey registration or authentication details. You can make a simple GET request to `https://api.passlock.dev/{tenancyId}/token/{token}` or use the [@passlock/node][node] library:
104
+
105
+ ```typescript
106
+ import { Passlock } from '@passlock/node'
107
+
108
+ // API Keys can be found in your passlock console
109
+ const passlock = new Passlock({ tenancyId, apiKey })
110
+
111
+ // token comes from your frontend
112
+ const principal = await passlock.fetchPrincipal({ token })
113
+
114
+ // get the user id
115
+ console.log(principal.user.id)
116
+ ```
117
+
118
+ ## More information
119
+
120
+ Please see the [tutorial][tutorial] and [documentation][docs]
121
+
122
+ [contact]: https://passlock.dev/contact
123
+ [tutorial]: https://docs.passlock.dev/docs/tutorial/introduction
124
+ [docs]: https://docs.passlock.dev
125
+ [node]: https://www.npmjs.com/package/@passlock/node
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@passlock/client",
3
- "version": "0.9.21",
3
+ "version": "0.9.22",
4
4
  "description": "Easy WebAuthn/FIDO Passkey authentication and social login for web apps. This library works with pretty much any frontend/backend stack including React/Next.js, Vue etc.",
5
5
  "keywords": [
6
6
  "passkey",
@@ -19,31 +19,32 @@
19
19
  "email": "toby@passlock.dev"
20
20
  },
21
21
  "license": "MIT",
22
- "homepage": "https://passlock.dev",
23
- "repository": "github.com/passlock-dev/passkeys",
22
+ "homepage": "https://github.com/passlock-dev/ts-clients",
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "git+https://github.com/passlock-dev/ts-clients.git"
26
+ },
24
27
  "bugs": {
25
- "url": "https://github.com/passlock-dev/passkeys/issues",
28
+ "url": "https://github.com/passlock-dev/ts-clients/issues",
26
29
  "email": "team@passlock.dev"
27
30
  },
28
31
  "type": "module",
29
32
  "exports": {
30
33
  ".": {
31
- "import": "./dist/index.js",
32
- "types": "./dist/index.d.ts"
33
- },
34
- "./effect": {
35
- "import": "./dist/effect.js",
36
- "types": "./dist/effect.d.ts"
34
+ "types": "./dist/index.d.ts",
35
+ "import": "./dist/index.js"
37
36
  }
38
37
  },
39
38
  "files": [
40
39
  "src",
41
- "dist"
40
+ "dist",
41
+ "!dist/**/*.test.*",
42
+ "!dist/**/*.spec.*"
42
43
  ],
43
44
  "dependencies": {
44
45
  "@github/webauthn-json": "^2.1.1",
45
- "effect": "^3.4.8",
46
- "@passlock/shared": "0.9.21"
46
+ "effect": "3.4.8",
47
+ "@passlock/shared": "0.9.22"
47
48
  },
48
49
  "devDependencies": {
49
50
  "@tsconfig/node18": "^18.2.4",
@@ -58,6 +59,7 @@
58
59
  "eslint-plugin-import": "^2.29.1",
59
60
  "jsdom": "^24.1.0",
60
61
  "prettier": "^3.3.2",
62
+ "publint": "^0.1.9",
61
63
  "rimraf": "^5.0.8",
62
64
  "tslib": "^2.6.3",
63
65
  "typescript": "^5.5.3",
@@ -72,7 +74,7 @@
72
74
  "test:watch": "vitest dev",
73
75
  "test:ui": "vitest --coverage.enabled=true --ui",
74
76
  "test:coverage": "vitest run --coverage",
75
- "build": "tsc --build",
77
+ "build": "tsc --build && publint",
76
78
  "build:clean": "pnpm run clean && pnpm run build",
77
79
  "build:watch": "tsc --build --watch",
78
80
  "format": "prettier --write \"src/**/*.+(js|ts|json)\"",
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=authenticate.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"authenticate.test.d.ts","sourceRoot":"","sources":["../../src/authentication/authenticate.test.ts"],"names":[],"mappings":""}
@@ -1,111 +0,0 @@
1
- import { AuthenticationClient } from '@passlock/shared/dist/rpc/authentication.js';
2
- import { Effect as E, Layer as L, Layer, LogLevel, Logger, pipe } from 'effect';
3
- import { describe, expect, test, vi } from 'vitest';
4
- import { mock } from 'vitest-mock-extended';
5
- import { StorageService } from '../storage/storage.js';
6
- import * as Fixture from './authenticate.fixture.js';
7
- import { AuthenticateServiceLive, AuthenticationService, GetCredential } from './authenticate.js';
8
- describe('authenticate should', () => {
9
- test('return a valid principal', async () => {
10
- const assertions = E.gen(function* (_) {
11
- const service = yield* _(AuthenticationService);
12
- const result = yield* _(service.authenticatePasskey({ userVerification: 'preferred' }));
13
- expect(result).toEqual(Fixture.principal);
14
- });
15
- const service = pipe(AuthenticateServiceLive, L.provide(Fixture.getCredentialTest), L.provide(Fixture.capabilitiesTest), L.provide(Fixture.storageServiceTest), L.provide(Fixture.rpcClientTest));
16
- const effect = pipe(E.provide(assertions, service), Logger.withMinimumLogLevel(LogLevel.None));
17
- return E.runPromise(effect);
18
- });
19
- test('pass the authentication request to the backend', async () => {
20
- const assertions = E.gen(function* (_) {
21
- const service = yield* _(AuthenticationService);
22
- yield* _(service.authenticatePasskey({ userVerification: 'preferred' }));
23
- const rpcClient = yield* _(AuthenticationClient);
24
- expect(rpcClient.getAuthenticationOptions).toHaveBeenCalledOnce();
25
- expect(rpcClient.verifyAuthenticationCredential).toHaveBeenCalledOnce();
26
- });
27
- const rpcClientTest = L.effect(AuthenticationClient, E.sync(() => {
28
- const rpcMock = mock();
29
- rpcMock.getAuthenticationOptions.mockReturnValue(E.succeed(Fixture.rpcOptionsRes));
30
- rpcMock.verifyAuthenticationCredential.mockReturnValue(E.succeed(Fixture.rpcVerificationRes));
31
- return rpcMock;
32
- }));
33
- const service = pipe(AuthenticateServiceLive, L.provide(Fixture.getCredentialTest), L.provide(Fixture.capabilitiesTest), L.provide(Fixture.storageServiceTest), L.provide(rpcClientTest));
34
- const layers = Layer.merge(service, rpcClientTest);
35
- const effect = pipe(E.provide(assertions, layers), Logger.withMinimumLogLevel(LogLevel.None));
36
- return E.runPromise(effect);
37
- });
38
- test('send the credential to the backend', async () => {
39
- const assertions = E.gen(function* (_) {
40
- const service = yield* _(AuthenticationService);
41
- yield* _(service.authenticatePasskey({ userVerification: 'preferred' }));
42
- const rpcClient = yield* _(AuthenticationClient);
43
- expect(rpcClient.getAuthenticationOptions).toHaveBeenCalledOnce();
44
- expect(rpcClient.verifyAuthenticationCredential).toHaveBeenCalledWith(Fixture.rpcVerificationReq);
45
- });
46
- const rpcClientTest = L.effect(AuthenticationClient, E.sync(() => {
47
- const rpcMock = mock();
48
- rpcMock.getAuthenticationOptions.mockReturnValue(E.succeed(Fixture.rpcOptionsRes));
49
- rpcMock.verifyAuthenticationCredential.mockReturnValue(E.succeed(Fixture.rpcVerificationRes));
50
- return rpcMock;
51
- }));
52
- const service = pipe(AuthenticateServiceLive, L.provide(Fixture.getCredentialTest), L.provide(Fixture.capabilitiesTest), L.provide(Fixture.storageServiceTest), L.provide(rpcClientTest));
53
- const layers = Layer.merge(service, rpcClientTest);
54
- const effect = pipe(E.provide(assertions, layers), Logger.withMinimumLogLevel(LogLevel.None));
55
- return E.runPromise(effect);
56
- });
57
- test('store the credential in local storage', async () => {
58
- const assertions = E.gen(function* (_) {
59
- const service = yield* _(AuthenticationService);
60
- yield* _(service.authenticatePasskey({ userVerification: 'preferred' }));
61
- const storageService = yield* _(StorageService);
62
- expect(storageService.storeToken).toHaveBeenCalledWith(Fixture.principal);
63
- });
64
- const storageServiceTest = L.effect(StorageService, E.sync(() => {
65
- const storageMock = mock();
66
- storageMock.storeToken.mockReturnValue(E.void);
67
- storageMock.clearExpiredToken.mockReturnValue(E.void);
68
- return storageMock;
69
- }));
70
- const service = pipe(AuthenticateServiceLive, L.provide(Fixture.getCredentialTest), L.provide(Fixture.capabilitiesTest), L.provide(Fixture.rpcClientTest), L.provide(storageServiceTest));
71
- const layers = Layer.merge(service, storageServiceTest);
72
- const effect = pipe(E.provide(assertions, layers), Logger.withMinimumLogLevel(LogLevel.None));
73
- return E.runPromise(effect);
74
- });
75
- test('schedule deletion of the local token', async () => {
76
- const assertions = E.gen(function* (_) {
77
- const service = yield* _(AuthenticationService);
78
- yield* _(service.authenticatePasskey({ userVerification: 'preferred' }));
79
- const storageService = yield* _(StorageService);
80
- expect(storageService.clearExpiredToken).toHaveBeenCalledWith('passkey');
81
- });
82
- const storageServiceTest = L.effect(StorageService, E.sync(() => {
83
- const storageMock = mock();
84
- storageMock.storeToken.mockReturnValue(E.void);
85
- storageMock.clearExpiredToken.mockReturnValue(E.void);
86
- return storageMock;
87
- }));
88
- const service = pipe(AuthenticateServiceLive, L.provide(Fixture.getCredentialTest), L.provide(Fixture.capabilitiesTest), L.provide(Fixture.rpcClientTest), L.provide(storageServiceTest));
89
- const layers = Layer.merge(service, storageServiceTest);
90
- const effect = pipe(E.provide(assertions, layers), Logger.withMinimumLogLevel(LogLevel.None));
91
- return E.runPromise(effect);
92
- });
93
- test("return an error if the browser can't create a credential", async () => {
94
- const assertions = E.gen(function* (_) {
95
- const service = yield* _(AuthenticationService);
96
- yield* _(service.authenticatePasskey({ userVerification: 'preferred' }));
97
- const getCredential = yield* _(GetCredential);
98
- expect(getCredential).toHaveBeenCalledOnce();
99
- });
100
- const getCredentialTest = L.effect(GetCredential, E.sync(() => {
101
- const getCredentialMock = vi.fn();
102
- getCredentialMock.mockReturnValue(E.succeed(Fixture.credential));
103
- return getCredentialMock;
104
- }));
105
- const service = pipe(AuthenticateServiceLive, L.provide(Fixture.storageServiceTest), L.provide(Fixture.capabilitiesTest), L.provide(Fixture.rpcClientTest), L.provide(getCredentialTest));
106
- const layers = Layer.merge(service, getCredentialTest);
107
- const effect = pipe(E.provide(assertions, layers), Logger.withMinimumLogLevel(LogLevel.None));
108
- return E.runPromise(effect);
109
- });
110
- });
111
- //# sourceMappingURL=authenticate.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"authenticate.test.js","sourceRoot":"","sources":["../../src/authentication/authenticate.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=connection.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"connection.test.d.ts","sourceRoot":"","sources":["../../src/connection/connection.test.ts"],"names":[],"mappings":""}
@@ -1,36 +0,0 @@
1
- import { RpcConfig } from '@passlock/shared/dist/rpc/config.js';
2
- import { ConnectionClient } from '@passlock/shared/dist/rpc/connection.js';
3
- import { Dispatcher } from '@passlock/shared/dist/rpc/dispatcher.js';
4
- import { Effect as E, Layer as L, Layer, LogLevel, Logger, pipe } from 'effect';
5
- import { describe, expect, test } from 'vitest';
6
- import { mock } from 'vitest-mock-extended';
7
- import * as Fixture from './connection.fixture.js';
8
- import { ConnectionService, ConnectionServiceLive } from './connection.js';
9
- describe('preConnect should', () => {
10
- test('hit the rpc endpoint', async () => {
11
- const assertions = E.gen(function* (_) {
12
- const service = yield* _(ConnectionService);
13
- yield* _(service.preConnect());
14
- const rpcClient = yield* _(ConnectionClient);
15
- expect(rpcClient.preConnect).toBeCalled();
16
- const dispatcher = yield* _(Dispatcher);
17
- expect(dispatcher.get).toBeCalledWith(`/token/token?warm=true`);
18
- });
19
- const rpcClientTest = Layer.effect(ConnectionClient, E.sync(() => {
20
- const rpcMock = mock();
21
- rpcMock.preConnect.mockReturnValue(E.succeed(Fixture.preConnectRes));
22
- return rpcMock;
23
- }));
24
- const rpcConfigTest = Layer.succeed(RpcConfig, RpcConfig.of(Fixture.rpcConfig));
25
- const dispatcherTest = Layer.effect(Dispatcher, E.sync(() => {
26
- const dispatcherMock = mock();
27
- dispatcherMock.get.mockReturnValue(E.succeed({ status: 200, body: {} }));
28
- return dispatcherMock;
29
- }));
30
- const service = pipe(ConnectionServiceLive, L.provide(rpcClientTest), L.provide(dispatcherTest), L.provide(rpcConfigTest));
31
- const layers = L.mergeAll(service, rpcClientTest, dispatcherTest);
32
- const effect = pipe(E.provide(assertions, layers), Logger.withMinimumLogLevel(LogLevel.None));
33
- return E.runPromise(effect);
34
- });
35
- });
36
- //# sourceMappingURL=connection.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"connection.test.js","sourceRoot":"","sources":["../../src/connection/connection.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=email.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"email.test.d.ts","sourceRoot":"","sources":["../../src/email/email.test.ts"],"names":[],"mappings":""}
@@ -1,99 +0,0 @@
1
- import { UserClient } from '@passlock/shared/dist/rpc/user.js';
2
- import { Effect as E, Layer as L, LogLevel, Logger, pipe } from 'effect';
3
- import { NoSuchElementException } from 'effect/Cause';
4
- import { describe, expect, test } from 'vitest';
5
- import { mock } from 'vitest-mock-extended';
6
- import { AuthenticationService } from '../authentication/authenticate.js';
7
- import { StorageService } from '../storage/storage.js';
8
- import * as Fixture from './email.fixture.js';
9
- import { EmailService, EmailServiceLive } from './email.js';
10
- describe('verifyEmailCode should', () => {
11
- test('return a principal when the verification is successful', async () => {
12
- const assertions = E.gen(function* (_) {
13
- const service = yield* _(EmailService);
14
- const result = yield* _(service.verifyEmailCode({ code: '123' }));
15
- expect(result).toEqual(Fixture.principal);
16
- });
17
- const service = pipe(EmailServiceLive, L.provide(Fixture.locationSearchTest), L.provide(Fixture.authenticationServiceTest), L.provide(Fixture.storageServiceTest), L.provide(Fixture.rpcClientTest));
18
- const effect = pipe(E.provide(assertions, service), Logger.withMinimumLogLevel(LogLevel.None));
19
- return E.runPromise(effect);
20
- });
21
- test('check for a token in local storage', async () => {
22
- const assertions = E.gen(function* (_) {
23
- const service = yield* _(EmailService);
24
- yield* _(service.verifyEmailCode({ code: '123' }));
25
- const storageService = yield* _(StorageService);
26
- expect(storageService.getToken).toHaveBeenCalledWith('passkey');
27
- });
28
- const storageServiceTest = L.effect(StorageService, E.sync(() => {
29
- const storageServiceMock = mock();
30
- storageServiceMock.getToken.mockReturnValue(E.succeed(Fixture.storedToken));
31
- storageServiceMock.clearToken.mockReturnValue(E.void);
32
- return storageServiceMock;
33
- }));
34
- const service = pipe(EmailServiceLive, L.provide(Fixture.locationSearchTest), L.provide(Fixture.authenticationServiceTest), L.provide(storageServiceTest), L.provide(Fixture.rpcClientTest));
35
- const layers = L.merge(service, storageServiceTest);
36
- const effect = pipe(E.provide(assertions, layers), Logger.withMinimumLogLevel(LogLevel.None));
37
- return E.runPromise(effect);
38
- });
39
- test('re-authenticate the user if no local token', async () => {
40
- const assertions = E.gen(function* (_) {
41
- const service = yield* _(EmailService);
42
- yield* _(service.verifyEmailCode({ code: '123' }));
43
- const authService = yield* _(AuthenticationService);
44
- expect(authService.authenticatePasskey).toHaveBeenCalled();
45
- });
46
- const storageServiceTest = L.effect(StorageService, E.sync(() => {
47
- const storageServiceMock = mock();
48
- storageServiceMock.getToken.mockReturnValue(E.fail(new NoSuchElementException()));
49
- storageServiceMock.clearToken.mockReturnValue(E.void);
50
- return storageServiceMock;
51
- }));
52
- const authServiceTest = L.effect(AuthenticationService, E.sync(() => {
53
- const authServiceMock = mock();
54
- authServiceMock.authenticatePasskey.mockReturnValue(E.succeed(Fixture.principal));
55
- return authServiceMock;
56
- }));
57
- const service = pipe(EmailServiceLive, L.provide(Fixture.locationSearchTest), L.provide(authServiceTest), L.provide(storageServiceTest), L.provide(Fixture.rpcClientTest));
58
- const layers = L.mergeAll(service, storageServiceTest, authServiceTest);
59
- const effect = pipe(E.provide(assertions, layers), Logger.withMinimumLogLevel(LogLevel.None));
60
- return E.runPromise(effect);
61
- });
62
- test('call the backend', async () => {
63
- const assertions = E.gen(function* (_) {
64
- const service = yield* _(EmailService);
65
- yield* _(service.verifyEmailCode({ code: Fixture.code }));
66
- const rpcClient = yield* _(UserClient);
67
- expect(rpcClient.verifyEmail).toHaveBeenCalledWith(Fixture.rpcVerifyEmailReq);
68
- });
69
- const rpcClientTest = L.effect(UserClient, E.sync(() => {
70
- const rpcMock = mock();
71
- rpcMock.verifyEmail.mockReturnValue(E.succeed(Fixture.rpcVerifyEmailRes));
72
- return rpcMock;
73
- }));
74
- const service = pipe(EmailServiceLive, L.provide(Fixture.locationSearchTest), L.provide(Fixture.authenticationServiceTest), L.provide(Fixture.storageServiceTest), L.provide(rpcClientTest));
75
- const layers = L.merge(service, rpcClientTest);
76
- const effect = pipe(E.provide(assertions, layers), Logger.withMinimumLogLevel(LogLevel.None));
77
- return E.runPromise(effect);
78
- });
79
- });
80
- describe('verifyEmailLink should', () => {
81
- test('extract the code from the current url', async () => {
82
- const assertions = E.gen(function* (_) {
83
- const service = yield* _(EmailService);
84
- yield* _(service.verifyEmailLink());
85
- const rpcClient = yield* _(UserClient);
86
- expect(rpcClient.verifyEmail).toBeCalledWith(Fixture.rpcVerifyEmailReq);
87
- });
88
- const rpcClientTest = L.effect(UserClient, E.sync(() => {
89
- const rpcMock = mock();
90
- rpcMock.verifyEmail.mockReturnValue(E.succeed(Fixture.rpcVerifyEmailRes));
91
- return rpcMock;
92
- }));
93
- const service = pipe(EmailServiceLive, L.provide(Fixture.locationSearchTest), L.provide(Fixture.storageServiceTest), L.provide(Fixture.authenticationServiceTest), L.provide(rpcClientTest));
94
- const layers = L.merge(service, rpcClientTest);
95
- const effect = pipe(E.provide(assertions, layers), Logger.withMinimumLogLevel(LogLevel.None));
96
- return E.runPromise(effect);
97
- });
98
- });
99
- //# sourceMappingURL=email.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"email.test.js","sourceRoot":"","sources":["../../src/email/email.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=event.node.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"event.node.test.d.ts","sourceRoot":"","sources":["../../src/event/event.node.test.ts"],"names":[],"mappings":""}
@@ -1,13 +0,0 @@
1
- import { Effect, pipe } from 'effect';
2
- import { describe, expect, test } from 'vitest';
3
- import { fireEvent } from './event.js';
4
- describe('isPasslockEvent', () => {
5
- test("return a Passlock error if custom events aren't supported", async () => {
6
- const program = pipe(fireEvent('hello world'), Effect.flip, Effect.tap(e => {
7
- expect(e._tag).toBe('InternalBrowserError');
8
- expect(e.message).toBe('Unable to fire custom event');
9
- }));
10
- await Effect.runPromise(program);
11
- });
12
- });
13
- //# sourceMappingURL=event.node.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"event.node.test.js","sourceRoot":"","sources":["../../src/event/event.node.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAItC,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,OAAO,GAAG,IAAI,CAClB,SAAS,CAAC,aAAa,CAAC,EACxB,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACb,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;YAC3C,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;QACvD,CAAC,CAAC,CACH,CAAA;QAED,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=event.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"event.test.d.ts","sourceRoot":"","sources":["../../src/event/event.test.ts"],"names":[],"mappings":""}
@@ -1,30 +0,0 @@
1
- import { Effect } from 'effect';
2
- import { afterEach, describe, expect, test, vi } from 'vitest';
3
- import { DebugMessage, fireEvent, isPasslockEvent } from './event.js';
4
- describe('fireEvent', () => {
5
- afterEach(() => {
6
- vi.restoreAllMocks();
7
- });
8
- test('fire a custom log event', () => {
9
- const effect = fireEvent('hello world');
10
- const eventSpy = vi.spyOn(globalThis, 'dispatchEvent');
11
- Effect.runSync(effect);
12
- const expectedEvent = new CustomEvent(DebugMessage, {
13
- detail: 'hello world',
14
- });
15
- expect(eventSpy).toHaveBeenCalledWith(expectedEvent);
16
- });
17
- });
18
- describe('isPasslockEvent', () => {
19
- test('return true for our custom event', () => {
20
- const passlockEvent = new CustomEvent(DebugMessage, {
21
- detail: 'hello world',
22
- });
23
- expect(isPasslockEvent(passlockEvent)).toBe(true);
24
- });
25
- test('return false for other events', () => {
26
- const otherEvent = new MouseEvent('click');
27
- expect(isPasslockEvent(otherEvent)).toBe(false);
28
- });
29
- });
30
- //# sourceMappingURL=event.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"event.test.js","sourceRoot":"","sources":["../../src/event/event.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAErE,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,eAAe,EAAE,CAAA;IACtB,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACnC,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,CAAA;QACvC,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,eAAe,CAAC,CAAA;QACtD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAEtB,MAAM,aAAa,GAAG,IAAI,WAAW,CAAC,YAAY,EAAE;YAClD,MAAM,EAAE,aAAa;SACtB,CAAC,CAAA;QAEF,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC5C,MAAM,aAAa,GAAG,IAAI,WAAW,CAAC,YAAY,EAAE;YAClD,MAAM,EAAE,aAAa;SACtB,CAAC,CAAA;QAEF,MAAM,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACnD,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACzC,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAA;QAC1C,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=eventLogger.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eventLogger.test.d.ts","sourceRoot":"","sources":["../../src/logging/eventLogger.test.ts"],"names":[],"mappings":""}
@@ -1,67 +0,0 @@
1
- import { Effect as E, LogLevel, Logger } from 'effect';
2
- import { describe, expect, test, vi } from 'vitest';
3
- import { eventLoggerLive, logRaw } from './eventLogger.js';
4
- describe('log', () => {
5
- test('log DEBUG to the console', () => {
6
- const logStatement = E.logDebug('hello world');
7
- const logSpy = vi.spyOn(globalThis.console, 'log').mockImplementation(() => undefined);
8
- const withLogLevel = logStatement.pipe(Logger.withMinimumLogLevel(LogLevel.Debug));
9
- const effect = E.provide(withLogLevel, eventLoggerLive);
10
- E.runSync(effect);
11
- expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('hello world'));
12
- expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('DEBUG'));
13
- });
14
- test('log INFO to the console', () => {
15
- const logStatement = E.logInfo('hello world');
16
- const logSpy = vi.spyOn(globalThis.console, 'log').mockImplementation(() => undefined);
17
- const withLogLevel = logStatement.pipe(Logger.withMinimumLogLevel(LogLevel.Info));
18
- const effect = E.provide(withLogLevel, eventLoggerLive);
19
- E.runSync(effect);
20
- expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('hello world'));
21
- expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('INFO'));
22
- });
23
- test('log WARN to the console', () => {
24
- const logStatement = E.logWarning('hello world');
25
- const logSpy = vi.spyOn(globalThis.console, 'log').mockImplementation(() => undefined);
26
- const withLogLevel = logStatement.pipe(Logger.withMinimumLogLevel(LogLevel.Warning));
27
- const effect = E.provide(withLogLevel, eventLoggerLive);
28
- E.runSync(effect);
29
- expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('hello world'));
30
- expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('WARN'));
31
- });
32
- test('log ERROR to the console', () => {
33
- const logStatement = E.logError('hello world');
34
- const logSpy = vi.spyOn(globalThis.console, 'log').mockImplementation(() => undefined);
35
- const withLogLevel = logStatement.pipe(Logger.withMinimumLogLevel(LogLevel.Error));
36
- const effect = E.provide(withLogLevel, eventLoggerLive);
37
- E.runSync(effect);
38
- expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('hello world'));
39
- expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('ERROR'));
40
- });
41
- test('log raw data to the console', () => {
42
- const logStatement = logRaw('hello world');
43
- const logSpy = vi.spyOn(globalThis.console, 'log').mockImplementation(() => undefined);
44
- E.runSync(logStatement);
45
- expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('hello world'));
46
- });
47
- test('fire a custom log event', () => {
48
- const logStatement = E.logWarning('hello world');
49
- const eventSpy = vi.spyOn(globalThis, 'dispatchEvent').mockImplementation(() => false);
50
- const withLogLevel = logStatement.pipe(Logger.withMinimumLogLevel(LogLevel.Warning));
51
- const effect = E.provide(withLogLevel, eventLoggerLive);
52
- E.runSync(effect);
53
- const expectedEvent = new CustomEvent('PasslogDebugMessage', {
54
- detail: 'hello world',
55
- });
56
- expect(eventSpy).toHaveBeenCalledWith(expectedEvent);
57
- });
58
- test('not fire a log event for a debug message', () => {
59
- const logStatement = E.logDebug('hello world');
60
- const eventSpy = vi.spyOn(globalThis, 'dispatchEvent').mockImplementation(() => false);
61
- const withDebugLevel = logStatement.pipe(Logger.withMinimumLogLevel(LogLevel.Debug));
62
- const effect = E.provide(withDebugLevel, eventLoggerLive);
63
- E.runSync(effect);
64
- expect(eventSpy).not.toHaveBeenCalled();
65
- });
66
- });
67
- //# sourceMappingURL=eventLogger.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eventLogger.test.js","sourceRoot":"","sources":["../../src/logging/eventLogger.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=register.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"register.test.d.ts","sourceRoot":"","sources":["../../src/registration/register.test.ts"],"names":[],"mappings":""}
@@ -1,104 +0,0 @@
1
- import { Duplicate, InternalBrowserError } from '@passlock/shared/dist/error/error.js';
2
- import { RegistrationClient } from '@passlock/shared/dist/rpc/registration.js';
3
- import { Effect as E, Layer as L, Layer, LogLevel, Logger, pipe } from 'effect';
4
- import { describe, expect, test, vi } from 'vitest';
5
- import { mock } from 'vitest-mock-extended';
6
- import * as Fixture from './register.fixture.js';
7
- import { CreateCredential, RegistrationService, RegistrationServiceLive } from './register.js';
8
- describe('register should', () => {
9
- test('return a valid credential', async () => {
10
- const assertions = E.gen(function* (_) {
11
- const service = yield* _(RegistrationService);
12
- const result = yield* _(service.registerPasskey(Fixture.registrationRequest));
13
- expect(result).toEqual(Fixture.principal);
14
- });
15
- const service = pipe(RegistrationServiceLive, L.provide(Fixture.createCredentialTest), L.provide(Fixture.userServiceTest), L.provide(Fixture.capabilitiesTest), L.provide(Fixture.storageServiceTest), L.provide(Fixture.rpcClientTest));
16
- const effect = pipe(E.provide(assertions, service), Logger.withMinimumLogLevel(LogLevel.None));
17
- return E.runPromise(effect);
18
- });
19
- test('pass the registration data to the backend', async () => {
20
- const assertions = E.gen(function* (_) {
21
- const service = yield* _(RegistrationService);
22
- yield* _(service.registerPasskey(Fixture.registrationRequest));
23
- const rpcClient = yield* _(RegistrationClient);
24
- expect(rpcClient.getRegistrationOptions).toHaveBeenCalledWith(Fixture.rpcOptionsReq);
25
- });
26
- const rpcClientTest = L.effect(RegistrationClient, E.sync(() => {
27
- const rpcMock = mock();
28
- rpcMock.getRegistrationOptions.mockReturnValue(E.succeed(Fixture.rpcOptionsRes));
29
- rpcMock.verifyRegistrationCredential.mockReturnValue(E.succeed(Fixture.rpcVerificationRes));
30
- return rpcMock;
31
- }));
32
- const service = pipe(RegistrationServiceLive, L.provide(Fixture.createCredentialTest), L.provide(Fixture.capabilitiesTest), L.provide(Fixture.storageServiceTest), L.provide(Fixture.userServiceTest), L.provide(rpcClientTest));
33
- const layers = Layer.merge(service, rpcClientTest);
34
- const effect = pipe(E.provide(assertions, layers), Logger.withMinimumLogLevel(LogLevel.None));
35
- return E.runPromise(effect);
36
- });
37
- test('send the new credential to the backend', async () => {
38
- const assertions = E.gen(function* (_) {
39
- const service = yield* _(RegistrationService);
40
- yield* _(service.registerPasskey(Fixture.registrationRequest));
41
- const rpcClient = yield* _(RegistrationClient);
42
- expect(rpcClient.verifyRegistrationCredential).toHaveBeenCalledWith(Fixture.rpcVerificationReq);
43
- });
44
- const rpcClientTest = L.effect(RegistrationClient, E.sync(() => {
45
- const rpcMock = mock();
46
- rpcMock.getRegistrationOptions.mockReturnValue(E.succeed(Fixture.rpcOptionsRes));
47
- rpcMock.verifyRegistrationCredential.mockReturnValue(E.succeed(Fixture.rpcVerificationRes));
48
- return rpcMock;
49
- }));
50
- const service = pipe(RegistrationServiceLive, L.provide(Fixture.createCredentialTest), L.provide(Fixture.capabilitiesTest), L.provide(Fixture.storageServiceTest), L.provide(Fixture.userServiceTest), L.provide(rpcClientTest));
51
- const layers = Layer.merge(service, rpcClientTest);
52
- const effect = pipe(E.provide(assertions, layers), Logger.withMinimumLogLevel(LogLevel.None));
53
- return E.runPromise(effect);
54
- });
55
- test('short-circuit if the user is already registered', async () => {
56
- const assertions = E.gen(function* (_) {
57
- const service = yield* _(RegistrationService);
58
- const error = yield* _(service.registerPasskey(Fixture.registrationRequest), E.flip);
59
- expect(error).toBeInstanceOf(Duplicate);
60
- });
61
- const rpcClientTest = L.effect(RegistrationClient, E.sync(() => {
62
- const rpcMock = mock();
63
- rpcMock.getRegistrationOptions.mockReturnValue(E.fail(new Duplicate({ message: 'User already exists' })));
64
- return rpcMock;
65
- }));
66
- const service = pipe(RegistrationServiceLive, L.provide(Fixture.createCredentialTest), L.provide(Fixture.capabilitiesTest), L.provide(Fixture.storageServiceTest), L.provide(Fixture.userServiceTest), L.provide(rpcClientTest));
67
- const layers = Layer.merge(service, rpcClientTest);
68
- const effect = pipe(E.provide(assertions, layers), Logger.withMinimumLogLevel(LogLevel.None));
69
- return E.runPromise(effect);
70
- });
71
- test('return an error if we try to re-register a credential', async () => {
72
- const assertions = E.gen(function* (_) {
73
- const service = yield* _(RegistrationService);
74
- const defect = yield* _(service.registerPasskey(Fixture.registrationRequest), E.flip);
75
- expect(defect).toBeInstanceOf(Duplicate);
76
- });
77
- const createTest = L.effect(CreateCredential, E.sync(() => {
78
- const createTest = vi.fn();
79
- createTest.mockReturnValue(E.fail(new Duplicate({ message: 'boom!' })));
80
- return createTest;
81
- }));
82
- const service = pipe(RegistrationServiceLive, L.provide(Fixture.userServiceTest), L.provide(Fixture.capabilitiesTest), L.provide(Fixture.storageServiceTest), L.provide(Fixture.rpcClientTest), L.provide(createTest));
83
- const layers = Layer.merge(service, createTest);
84
- const effect = pipe(E.provide(assertions, layers), Logger.withMinimumLogLevel(LogLevel.None));
85
- return E.runPromise(effect);
86
- });
87
- test("throw an error if the browser can't create a credential", async () => {
88
- const assertions = E.gen(function* (_) {
89
- const service = yield* _(RegistrationService);
90
- const defect = yield* _(service.registerPasskey(Fixture.registrationRequest), E.catchAllDefect(defect => E.succeed(defect)));
91
- expect(defect).toBeInstanceOf(InternalBrowserError);
92
- });
93
- const createTest = L.effect(CreateCredential, E.sync(() => {
94
- const createTest = vi.fn();
95
- createTest.mockReturnValue(E.fail(new InternalBrowserError({ message: 'boom!' })));
96
- return createTest;
97
- }));
98
- const service = pipe(RegistrationServiceLive, L.provide(Fixture.userServiceTest), L.provide(Fixture.capabilitiesTest), L.provide(Fixture.storageServiceTest), L.provide(Fixture.rpcClientTest), L.provide(createTest));
99
- const layers = Layer.merge(service, createTest);
100
- const effect = pipe(E.provide(assertions, layers), Logger.withMinimumLogLevel(LogLevel.None));
101
- return E.runPromise(effect);
102
- });
103
- });
104
- //# sourceMappingURL=register.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"register.test.js","sourceRoot":"","sources":["../../src/registration/register.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=social.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"social.test.d.ts","sourceRoot":"","sources":["../../src/social/social.test.ts"],"names":[],"mappings":""}
@@ -1,110 +0,0 @@
1
- import { Duplicate, NotFound } from '@passlock/shared/dist/error/error.js';
2
- import { SocialClient } from '@passlock/shared/dist/rpc/social.js';
3
- import { Effect as E, Layer as L, Layer, LogLevel, Logger, pipe } from 'effect';
4
- import { describe, expect, test } from 'vitest';
5
- import { mock } from 'vitest-mock-extended';
6
- import * as Fixture from './social.fixture.js';
7
- import { SocialService, SocialServiceLive } from './social.js';
8
- describe('registerOidc should', () => {
9
- test('return a valid credential', async () => {
10
- const assertions = E.gen(function* (_) {
11
- const service = yield* _(SocialService);
12
- const result = yield* _(service.registerOidc(Fixture.registerOidcReq));
13
- expect(result).toEqual(Fixture.principal);
14
- });
15
- const rpcClientTest = L.effect(SocialClient, E.sync(() => {
16
- const rpcMock = mock();
17
- rpcMock.registerOidc.mockReturnValue(E.succeed(Fixture.rpcRegisterRes));
18
- return rpcMock;
19
- }));
20
- const service = pipe(SocialServiceLive, L.provide(rpcClientTest));
21
- const layers = Layer.merge(service, rpcClientTest);
22
- const effect = pipe(E.provide(assertions, layers), Logger.withMinimumLogLevel(LogLevel.None));
23
- return E.runPromise(effect);
24
- });
25
- test('pass the request to the backend', async () => {
26
- const assertions = E.gen(function* (_) {
27
- const service = yield* _(SocialService);
28
- yield* _(service.registerOidc(Fixture.registerOidcReq));
29
- const rpcClient = yield* _(SocialClient);
30
- expect(rpcClient.registerOidc).toHaveBeenCalledWith(Fixture.rpcRegisterReq);
31
- });
32
- const rpcClientTest = L.effect(SocialClient, E.sync(() => {
33
- const rpcMock = mock();
34
- rpcMock.registerOidc.mockReturnValue(E.succeed(Fixture.rpcRegisterRes));
35
- return rpcMock;
36
- }));
37
- const service = pipe(SocialServiceLive, L.provide(rpcClientTest));
38
- const layers = Layer.merge(service, rpcClientTest);
39
- const effect = pipe(E.provide(assertions, layers), Logger.withMinimumLogLevel(LogLevel.None));
40
- return E.runPromise(effect);
41
- });
42
- test('return an error if we try to register an existing user', async () => {
43
- const assertions = E.gen(function* (_) {
44
- const service = yield* _(SocialService);
45
- const defect = yield* _(service.registerOidc(Fixture.registerOidcReq), E.flip);
46
- expect(defect).toBeInstanceOf(Duplicate);
47
- });
48
- const rpcClientTest = L.effect(SocialClient, E.sync(() => {
49
- const rpcMock = mock();
50
- rpcMock.registerOidc.mockReturnValue(E.fail(new Duplicate({ message: "Duplicate user" })));
51
- return rpcMock;
52
- }));
53
- const service = pipe(SocialServiceLive, L.provide(rpcClientTest));
54
- const layers = Layer.merge(service, rpcClientTest);
55
- const effect = pipe(E.provide(assertions, layers), Logger.withMinimumLogLevel(LogLevel.None));
56
- return E.runPromise(effect);
57
- });
58
- });
59
- describe('authenticateIodc should', () => {
60
- test('return a valid credential', async () => {
61
- const assertions = E.gen(function* (_) {
62
- const service = yield* _(SocialService);
63
- const result = yield* _(service.authenticateOidc(Fixture.authOidcReq));
64
- expect(result).toEqual(Fixture.principal);
65
- });
66
- const rpcClientTest = L.effect(SocialClient, E.sync(() => {
67
- const rpcMock = mock();
68
- rpcMock.authenticateOidc.mockReturnValue(E.succeed(Fixture.rpcRegisterRes));
69
- return rpcMock;
70
- }));
71
- const service = pipe(SocialServiceLive, L.provide(rpcClientTest));
72
- const layers = Layer.merge(service, rpcClientTest);
73
- const effect = pipe(E.provide(assertions, layers), Logger.withMinimumLogLevel(LogLevel.None));
74
- return E.runPromise(effect);
75
- });
76
- test('pass the request to the backend', async () => {
77
- const assertions = E.gen(function* (_) {
78
- const service = yield* _(SocialService);
79
- yield* _(service.authenticateOidc(Fixture.authOidcReq));
80
- const rpcClient = yield* _(SocialClient);
81
- expect(rpcClient.authenticateOidc).toHaveBeenCalledWith(Fixture.rpcAuthenticateReq);
82
- });
83
- const rpcClientTest = L.effect(SocialClient, E.sync(() => {
84
- const rpcMock = mock();
85
- rpcMock.authenticateOidc.mockReturnValue(E.succeed(Fixture.rpcAuthenticateRes));
86
- return rpcMock;
87
- }));
88
- const service = pipe(SocialServiceLive, L.provide(rpcClientTest));
89
- const layers = Layer.merge(service, rpcClientTest);
90
- const effect = pipe(E.provide(assertions, layers), Logger.withMinimumLogLevel(LogLevel.None));
91
- return E.runPromise(effect);
92
- });
93
- test('return an error if we try to authenticate a non-existing user', async () => {
94
- const assertions = E.gen(function* (_) {
95
- const service = yield* _(SocialService);
96
- const defect = yield* _(service.authenticateOidc(Fixture.authOidcReq), E.flip);
97
- expect(defect).toBeInstanceOf(NotFound);
98
- });
99
- const rpcClientTest = L.effect(SocialClient, E.sync(() => {
100
- const rpcMock = mock();
101
- rpcMock.authenticateOidc.mockReturnValue(E.fail(new NotFound({ message: "User not found" })));
102
- return rpcMock;
103
- }));
104
- const service = pipe(SocialServiceLive, L.provide(rpcClientTest));
105
- const layers = Layer.merge(service, rpcClientTest);
106
- const effect = pipe(E.provide(assertions, layers), Logger.withMinimumLogLevel(LogLevel.None));
107
- return E.runPromise(effect);
108
- });
109
- });
110
- //# sourceMappingURL=social.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"social.test.js","sourceRoot":"","sources":["../../src/social/social.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=storage.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storage.test.d.ts","sourceRoot":"","sources":["../../src/storage/storage.test.ts"],"names":[],"mappings":""}
@@ -1,120 +0,0 @@
1
- import { Effect as E, Layer, LogLevel, Logger, identity, pipe } from 'effect';
2
- import { describe, expect, test } from 'vitest';
3
- import { mock } from 'vitest-mock-extended';
4
- import { principal, testLayers } from './storage.fixture.js';
5
- import { Storage, StorageService, clearExpiredToken, clearToken, getToken } from './storage.js';
6
- describe('storeToken should', () => {
7
- test('set the token in local storage', () => {
8
- const assertions = E.gen(function* (_) {
9
- const service = yield* _(StorageService);
10
- yield* _(service.storeToken(principal));
11
- const storage = yield* _(Storage);
12
- expect(storage.setItem).toHaveBeenCalled();
13
- });
14
- const effect = pipe(E.provide(assertions, testLayers()), Logger.withMinimumLogLevel(LogLevel.None));
15
- E.runSync(effect);
16
- });
17
- test('with the key passlock:passkey:token', () => {
18
- const assertions = E.gen(function* (_) {
19
- const service = yield* _(StorageService);
20
- yield* _(service.storeToken(principal));
21
- const storage = yield* _(Storage);
22
- expect(storage.setItem).toHaveBeenCalledWith('passlock:passkey:token', expect.any(String));
23
- });
24
- const effect = pipe(E.provide(assertions, testLayers()), Logger.withMinimumLogLevel(LogLevel.None));
25
- E.runSync(effect);
26
- });
27
- test('with the value token:expiry', () => {
28
- const assertions = E.gen(function* (_) {
29
- const service = yield* _(StorageService);
30
- yield* _(service.storeToken(principal));
31
- const storage = yield* _(Storage);
32
- const token = principal.token;
33
- const expiry = principal.expireAt.getTime();
34
- expect(storage.setItem).toHaveBeenCalledWith('passlock:passkey:token', `${token}:${expiry}`);
35
- });
36
- const effect = pipe(E.provide(assertions, testLayers()), Logger.withMinimumLogLevel(LogLevel.None));
37
- E.runSync(effect);
38
- });
39
- });
40
- describe('getToken should', () => {
41
- test('get the token from local storage', () => {
42
- const assertions = E.gen(function* (_) {
43
- const service = yield* _(StorageService);
44
- yield* _(service.getToken('passkey'));
45
- const storage = yield* _(Storage);
46
- expect(storage.getItem).toHaveBeenCalled();
47
- expect(storage.getItem).toHaveBeenCalledWith('passlock:passkey:token');
48
- });
49
- const storageTest = Layer.effect(Storage, E.sync(() => {
50
- const mockStorage = mock();
51
- const expiry = Date.now() + 1000;
52
- mockStorage.getItem.mockReturnValue(`token:${expiry}`);
53
- return mockStorage;
54
- }));
55
- const effect = pipe(E.provide(assertions, testLayers(storageTest)), Logger.withMinimumLogLevel(LogLevel.None));
56
- E.runSync(effect);
57
- });
58
- test('filter out expired tokens', () => {
59
- const assertions = pipe(getToken('passkey'), E.match({
60
- onSuccess: identity,
61
- onFailure: () => undefined,
62
- }), E.flatMap(result => E.sync(() => {
63
- expect(result).toBeUndefined();
64
- })));
65
- const storageTest = Layer.effect(Storage, E.sync(() => {
66
- const mockStorage = mock();
67
- const expiry = Date.now() - 1000;
68
- mockStorage.getItem.mockReturnValue(`token:${expiry}`);
69
- return mockStorage;
70
- }));
71
- const effect = pipe(E.provide(assertions, testLayers(storageTest)), Logger.withMinimumLogLevel(LogLevel.None));
72
- E.runSync(effect);
73
- });
74
- });
75
- describe('clearToken should', () => {
76
- test('clear the token in local storage', () => {
77
- const assertions = E.gen(function* (_) {
78
- const storage = yield* _(Storage);
79
- yield* _(clearToken('passkey'));
80
- expect(storage.removeItem).toHaveBeenCalledWith('passlock:passkey:token');
81
- });
82
- const effect = pipe(E.provide(assertions, testLayers()), Logger.withMinimumLogLevel(LogLevel.None));
83
- E.runSync(effect);
84
- });
85
- });
86
- describe('clearExpiredToken should', () => {
87
- test('clear an expired token from local storage', () => {
88
- const assertions = E.gen(function* (_) {
89
- const storage = yield* _(Storage);
90
- yield* _(clearExpiredToken('passkey'));
91
- expect(storage.getItem).toHaveBeenCalledWith('passlock:passkey:token');
92
- expect(storage.removeItem).toHaveBeenCalledWith('passlock:passkey:token');
93
- });
94
- const storageTest = Layer.effect(Storage, E.sync(() => {
95
- const mockStorage = mock();
96
- const expiry = Date.now() - 1000;
97
- mockStorage.getItem.mockReturnValue(`token:${expiry}`);
98
- return mockStorage;
99
- }));
100
- const effect = pipe(E.provide(assertions, testLayers(storageTest)), Logger.withMinimumLogLevel(LogLevel.None));
101
- E.runSync(effect);
102
- });
103
- test('leave a live token in local storage', () => {
104
- const assertions = E.gen(function* (_) {
105
- const storage = yield* _(Storage);
106
- yield* _(clearExpiredToken('passkey'));
107
- expect(storage.getItem).toHaveBeenCalledWith('passlock:passkey:token');
108
- expect(storage.removeItem).not.toHaveBeenCalled();
109
- });
110
- const storageTest = Layer.effect(Storage, E.sync(() => {
111
- const mockStorage = mock();
112
- const expiry = Date.now() + 1000;
113
- mockStorage.getItem.mockReturnValue(`token:${expiry}`);
114
- return mockStorage;
115
- }));
116
- const effect = pipe(E.provide(assertions, testLayers(storageTest)), Logger.withMinimumLogLevel(LogLevel.None));
117
- E.runSync(effect);
118
- });
119
- });
120
- //# sourceMappingURL=storage.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storage.test.js","sourceRoot":"","sources":["../../src/storage/storage.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=user.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user.test.d.ts","sourceRoot":"","sources":["../../src/user/user.test.ts"],"names":[],"mappings":""}
@@ -1,56 +0,0 @@
1
- import { UserClient } from '@passlock/shared/dist/rpc/user.js';
2
- import { Effect as E, Layer as L, Layer, LogLevel, Logger, pipe } from 'effect';
3
- import { describe, expect, test } from 'vitest';
4
- import { mock } from 'vitest-mock-extended';
5
- import * as Fixture from './user.fixture.js';
6
- import { UserService, UserServiceLive } from './user.js';
7
- describe('isExistingUser should', () => {
8
- test('return true when the user already has a passkey', async () => {
9
- const assertions = E.gen(function* (_) {
10
- const service = yield* _(UserService);
11
- const result = yield* _(service.isExistingUser({ email: Fixture.email }));
12
- expect(result).toBe(true);
13
- });
14
- const service = pipe(UserServiceLive, L.provide(Fixture.rpcClientTest));
15
- const effect = pipe(E.provide(assertions, service), Logger.withMinimumLogLevel(LogLevel.None));
16
- return E.runPromise(effect);
17
- });
18
- test('send the email to the backend', async () => {
19
- const assertions = E.gen(function* (_) {
20
- const service = yield* _(UserService);
21
- const result = yield* _(service.isExistingUser({ email: Fixture.email }));
22
- expect(result).toBe(false);
23
- const rpcClient = yield* _(UserClient);
24
- expect(rpcClient.isExistingUser).toBeCalledWith(Fixture.isRegisteredReq);
25
- });
26
- const rpcClientTest = Layer.effect(UserClient, E.sync(() => {
27
- const rpcMock = mock();
28
- rpcMock.isExistingUser.mockReturnValue(E.succeed(Fixture.isRegisteredRes));
29
- return rpcMock;
30
- }));
31
- const service = pipe(UserServiceLive, L.provide(rpcClientTest));
32
- const layers = L.merge(service, rpcClientTest);
33
- const effect = pipe(E.provide(assertions, layers), Logger.withMinimumLogLevel(LogLevel.None));
34
- return E.runPromise(effect);
35
- });
36
- });
37
- describe('resendVerificationEmail should', () => {
38
- test('forward the request to the backend', async () => {
39
- const assertions = E.gen(function* (_) {
40
- const service = yield* _(UserService);
41
- yield* _(service.resendVerificationEmail(Fixture.resendEmailReq));
42
- const rpcClient = yield* _(UserClient);
43
- expect(rpcClient.resendVerificationEmail).toBeCalledWith(Fixture.rpcResendEmailReq);
44
- });
45
- const rpcClientTest = Layer.effect(UserClient, E.sync(() => {
46
- const rpcMock = mock();
47
- rpcMock.resendVerificationEmail.mockReturnValue(E.succeed(Fixture.rpcResendEmailRes));
48
- return rpcMock;
49
- }));
50
- const service = pipe(UserServiceLive, L.provide(rpcClientTest));
51
- const layers = L.merge(service, rpcClientTest);
52
- const effect = pipe(E.provide(assertions, layers), Logger.withMinimumLogLevel(LogLevel.None));
53
- return E.runPromise(effect);
54
- });
55
- });
56
- //# sourceMappingURL=user.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user.test.js","sourceRoot":"","sources":["../../src/user/user.test.ts"],"names":[],"mappings":"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"}