@passlock/client 0.9.30 → 0.9.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/README.template.md +1 -1
- package/dist/authentication/authenticate.d.ts +5 -6
- package/dist/authentication/authenticate.fixture.d.ts +9 -9
- package/dist/authentication/authenticate.fixture.js +8 -8
- package/dist/authentication/authenticate.fixture.js.map +1 -1
- package/dist/authentication/authenticate.js +4 -5
- package/dist/authentication/authenticate.js.map +1 -1
- package/dist/connection/connection.d.ts +3 -3
- package/dist/connection/connection.fixture.d.ts +2 -2
- package/dist/connection/connection.fixture.js +2 -2
- package/dist/connection/connection.fixture.js.map +1 -1
- package/dist/connection/connection.js +2 -2
- package/dist/connection/connection.js.map +1 -1
- package/dist/effect.js +2 -2
- package/dist/effect.js.map +1 -1
- package/dist/email/email.d.ts +1 -1
- package/dist/email/email.fixture.d.ts +4 -4
- package/dist/email/email.fixture.js +3 -3
- package/dist/email/email.fixture.js.map +1 -1
- package/dist/email/email.js +2 -2
- package/dist/email/email.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/registration/register.d.ts +5 -7
- package/dist/registration/register.fixture.d.ts +8 -8
- package/dist/registration/register.fixture.js +6 -6
- package/dist/registration/register.fixture.js.map +1 -1
- package/dist/registration/register.js +5 -6
- package/dist/registration/register.js.map +1 -1
- package/dist/rpc/client.js +1 -1
- package/dist/rpc/client.js.map +1 -1
- package/dist/rpc/connection.d.ts +1 -1
- package/dist/rpc/connection.js +3 -2
- package/dist/rpc/connection.js.map +1 -1
- package/dist/rpc/{authentication.d.ts → passkey/authentication.d.ts} +4 -4
- package/dist/rpc/passkey/authentication.js +17 -0
- package/dist/rpc/passkey/authentication.js.map +1 -0
- package/dist/rpc/{registration.d.ts → passkey/registration.d.ts} +3 -3
- package/dist/rpc/passkey/registration.js +17 -0
- package/dist/rpc/passkey/registration.js.map +1 -0
- package/dist/rpc/social.d.ts +1 -1
- package/dist/rpc/social.js +6 -5
- package/dist/rpc/social.js.map +1 -1
- package/dist/rpc/user.d.ts +1 -1
- package/dist/rpc/user.js +5 -4
- package/dist/rpc/user.js.map +1 -1
- package/dist/social/social.d.ts +7 -8
- package/dist/social/social.fixture.d.ts +5 -5
- package/dist/social/social.fixture.js +7 -7
- package/dist/social/social.fixture.js.map +1 -1
- package/dist/social/social.js +7 -8
- package/dist/social/social.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/user/user.d.ts +3 -3
- package/dist/user/user.fixture.d.ts +6 -6
- package/dist/user/user.fixture.js +6 -6
- package/dist/user/user.fixture.js.map +1 -1
- package/dist/user/user.js +5 -6
- package/dist/user/user.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
- package/src/authentication/authenticate.fixture.ts +11 -11
- package/src/authentication/authenticate.test.ts +1 -1
- package/src/authentication/authenticate.ts +10 -16
- package/src/connection/connection.fixture.ts +2 -2
- package/src/connection/connection.ts +3 -3
- package/src/effect.ts +2 -2
- package/src/email/email.fixture.ts +3 -3
- package/src/email/email.ts +2 -2
- package/src/registration/register.fixture.ts +11 -11
- package/src/registration/register.test.ts +1 -1
- package/src/registration/register.ts +11 -13
- package/src/rpc/client.ts +1 -1
- package/src/rpc/connection.ts +4 -2
- package/src/rpc/{authentication.ts → passkey/authentication.ts} +22 -13
- package/src/rpc/passkey/registration.ts +52 -0
- package/src/rpc/social.ts +24 -14
- package/src/rpc/user.ts +23 -12
- package/src/social/social.fixture.ts +7 -8
- package/src/social/social.test.ts +8 -8
- package/src/social/social.ts +13 -16
- package/src/user/user.fixture.ts +10 -10
- package/src/user/user.ts +7 -9
- package/dist/rpc/authentication.js +0 -16
- package/dist/rpc/authentication.js.map +0 -1
- package/dist/rpc/registration.js +0 -16
- package/dist/rpc/registration.js.map +0 -1
- package/src/rpc/registration.ts +0 -41
package/dist/user/user.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/user/user.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/user/user.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAI1D,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAA;AAWrC,aAAa;AAEb,MAAM,OAAO,WAAY,SAAQ,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAMlE;CAAG;AAMN,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAc,EAA+C,EAAE;IAC5F,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,CAAA;QACnD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAE1C,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAA;QAC1C,MAAM,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAEnG,OAAO,YAAY,CAAA;IACrB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,OAAoB,EAC6B,EAAE;IACnD,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,CAAA;QACnD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAE1C,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAA;QAC1C,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,CAAA;QAC1C,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,IAAI,GAAG,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CAAA;IAClG,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,UAAU;AAEV,qBAAqB;AACrB,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CACzC,WAAW,EACX,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;IAChB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAkB,CAAC,CAAA;IACrD,OAAO,WAAW,CAAC,EAAE,CAAC;QACpB,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxD,uBAAuB,EAAE,IAAI,CAAC,uBAAuB,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KAC3E,CAAC,CAAA;AACJ,CAAC,CAAC,CACH,CAAA;AACD,oBAAoB"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const PASSLOCK_CLIENT_VERSION = "0.9.
|
|
1
|
+
export declare const PASSLOCK_CLIENT_VERSION = "0.9.32";
|
package/dist/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const PASSLOCK_CLIENT_VERSION = '0.9.
|
|
1
|
+
export const PASSLOCK_CLIENT_VERSION = '0.9.32';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@passlock/client",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.32",
|
|
4
4
|
"description": "Passkey authentication and social login for web apps (Typescript). Framework agnostic",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"passkey",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"@effect/schema": "0.74.1",
|
|
49
49
|
"@github/webauthn-json": "^2.1.1",
|
|
50
50
|
"effect": "3.8.4",
|
|
51
|
-
"@passlock/shared": "0.9.
|
|
51
|
+
"@passlock/shared": "0.9.32"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@qetza/replacetokens": "^1.7.0",
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { Effect as E, Layer as L, Option as O } from 'effect'
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
} from '@passlock/shared/dist/rpc/authentication.js'
|
|
8
|
-
import {
|
|
4
|
+
OptionsResponse,
|
|
5
|
+
VerificationRequest,
|
|
6
|
+
VerificationResponse,
|
|
7
|
+
} from '@passlock/shared/dist/rpc/passkey/authentication.js'
|
|
8
|
+
import { IsExistingUserResponse, VerifyEmailResponse } from '@passlock/shared/dist/rpc/user.js'
|
|
9
9
|
import type { AuthenticationCredential } from '@passlock/shared/dist/schema/passkey.js'
|
|
10
10
|
|
|
11
11
|
import * as Fixtures from '../test/fixtures.js'
|
|
12
|
-
import { AuthenticationClient } from '../rpc/authentication.js'
|
|
12
|
+
import { AuthenticationClient } from '../rpc/passkey/authentication.js'
|
|
13
13
|
import { type AuthenticationRequest, GetCredential } from './authenticate.js'
|
|
14
14
|
|
|
15
15
|
export const session = 'session'
|
|
@@ -23,7 +23,7 @@ export const request: AuthenticationRequest = {
|
|
|
23
23
|
email: O.none(),
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
export const rpcOptionsRes = new
|
|
26
|
+
export const rpcOptionsRes = new OptionsResponse({
|
|
27
27
|
session,
|
|
28
28
|
publicKey: {
|
|
29
29
|
rpId: 'passlock.dev',
|
|
@@ -47,13 +47,13 @@ export const credential: AuthenticationCredential = {
|
|
|
47
47
|
authenticatorAttachment: null,
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
export const rpcVerificationReq = new
|
|
50
|
+
export const rpcVerificationReq = new VerificationRequest({ session, credential })
|
|
51
51
|
|
|
52
|
-
export const rpcVerificationRes = new
|
|
52
|
+
export const rpcVerificationRes = new VerificationResponse({ principal: Fixtures.principal })
|
|
53
53
|
|
|
54
|
-
export const rpcIsExistingUserRes = new
|
|
54
|
+
export const rpcIsExistingUserRes = new IsExistingUserResponse({ existingUser: true, detail: O.none() })
|
|
55
55
|
|
|
56
|
-
export const rpcVerifyEmailRes = new
|
|
56
|
+
export const rpcVerifyEmailRes = new VerifyEmailResponse({ principal: Fixtures.principal })
|
|
57
57
|
|
|
58
58
|
export const getCredentialTest = L.succeed(
|
|
59
59
|
GetCredential,
|
|
@@ -3,7 +3,7 @@ import { describe, expect, test, vi } from 'vitest'
|
|
|
3
3
|
import { mock } from 'vitest-mock-extended'
|
|
4
4
|
|
|
5
5
|
import * as Fixture from './authenticate.fixture.js'
|
|
6
|
-
import { AuthenticationClient } from '../rpc/authentication.js'
|
|
6
|
+
import { AuthenticationClient } from '../rpc/passkey/authentication.js'
|
|
7
7
|
import { StorageService } from '../storage/storage.js'
|
|
8
8
|
import { AuthenticateServiceLive, AuthenticationService, GetCredential } from './authenticate.js'
|
|
9
9
|
|
|
@@ -8,25 +8,19 @@ import {
|
|
|
8
8
|
import { Context, Effect as E, Layer, flow, pipe } from 'effect'
|
|
9
9
|
|
|
10
10
|
import { InternalBrowserError, type NotSupported } from '@passlock/shared/dist/error/error.js'
|
|
11
|
-
import
|
|
12
|
-
type OptionsErrors,
|
|
13
|
-
type OptionsReq,
|
|
14
|
-
type VerificationErrors,
|
|
15
|
-
VerificationReq,
|
|
16
|
-
} from '@passlock/shared/dist/rpc/authentication.js'
|
|
11
|
+
import * as RPC from '../rpc/passkey/authentication.js'
|
|
17
12
|
import type { AuthenticationCredential } from '@passlock/shared/dist/schema/passkey.js'
|
|
18
13
|
import type { Principal } from '@passlock/shared/dist/schema/principal.js'
|
|
19
14
|
|
|
20
15
|
import { Capabilities } from '../capabilities/capabilities.js'
|
|
21
|
-
import { AuthenticationClient } from '../rpc/authentication.js'
|
|
22
16
|
import { StorageService } from '../storage/storage.js'
|
|
23
17
|
|
|
24
18
|
/* Requests */
|
|
25
19
|
|
|
26
|
-
export type AuthenticationRequest =
|
|
20
|
+
export type AuthenticationRequest = RPC.OptionsRequest
|
|
27
21
|
/* Errors */
|
|
28
22
|
|
|
29
|
-
export type AuthenticationErrors = NotSupported | OptionsErrors | VerificationErrors
|
|
23
|
+
export type AuthenticationErrors = NotSupported | RPC.OptionsErrors | RPC.VerificationErrors
|
|
30
24
|
|
|
31
25
|
/* Dependencies */
|
|
32
26
|
|
|
@@ -52,11 +46,11 @@ export class AuthenticationService extends Context.Tag('@services/Authentication
|
|
|
52
46
|
|
|
53
47
|
/* Utilities */
|
|
54
48
|
|
|
55
|
-
const fetchOptions = (request:
|
|
49
|
+
const fetchOptions = (request: RPC.OptionsRequest) => {
|
|
56
50
|
return E.gen(function* (_) {
|
|
57
51
|
yield* _(E.logDebug('Making request'))
|
|
58
52
|
|
|
59
|
-
const rpcClient = yield* _(AuthenticationClient)
|
|
53
|
+
const rpcClient = yield* _(RPC.AuthenticationClient)
|
|
60
54
|
const { publicKey, session } = yield* _(rpcClient.getAuthenticationOptions(request))
|
|
61
55
|
|
|
62
56
|
yield* _(E.logDebug('Converting Passlock options to CredentialRequestOptions'))
|
|
@@ -79,11 +73,11 @@ const toRequestOptions = (request: CredentialRequestOptionsJSON) => {
|
|
|
79
73
|
)
|
|
80
74
|
}
|
|
81
75
|
|
|
82
|
-
const verifyCredential = (request:
|
|
76
|
+
const verifyCredential = (request: RPC.VerificationRequest) => {
|
|
83
77
|
return E.gen(function* (_) {
|
|
84
78
|
yield* _(E.logDebug('Making request'))
|
|
85
79
|
|
|
86
|
-
const rpcClient = yield* _(AuthenticationClient)
|
|
80
|
+
const rpcClient = yield* _(RPC.AuthenticationClient)
|
|
87
81
|
const { principal } = yield* _(rpcClient.verifyAuthenticationCredential(request))
|
|
88
82
|
|
|
89
83
|
return principal
|
|
@@ -92,7 +86,7 @@ const verifyCredential = (request: VerificationReq) => {
|
|
|
92
86
|
|
|
93
87
|
/* Effects */
|
|
94
88
|
|
|
95
|
-
type Dependencies = GetCredential | Capabilities | StorageService | AuthenticationClient
|
|
89
|
+
type Dependencies = GetCredential | Capabilities | StorageService | RPC.AuthenticationClient
|
|
96
90
|
|
|
97
91
|
export const authenticatePasskey = (
|
|
98
92
|
request: AuthenticationRequest,
|
|
@@ -111,7 +105,7 @@ export const authenticatePasskey = (
|
|
|
111
105
|
const credential = yield* _(getCredential(options))
|
|
112
106
|
|
|
113
107
|
yield* _(E.logInfo('Verifying credential with Passlock'))
|
|
114
|
-
const principal = yield* _(verifyCredential(new
|
|
108
|
+
const principal = yield* _(verifyCredential(new RPC.VerificationRequest({ credential, session })))
|
|
115
109
|
|
|
116
110
|
const storageService = yield* _(StorageService)
|
|
117
111
|
yield* _(storageService.storeToken(principal))
|
|
@@ -138,7 +132,7 @@ export const AuthenticateServiceLive = Layer.effect(
|
|
|
138
132
|
AuthenticationService,
|
|
139
133
|
E.gen(function* (_) {
|
|
140
134
|
const context = yield* _(
|
|
141
|
-
E.context<GetCredential | AuthenticationClient | Capabilities | StorageService>(),
|
|
135
|
+
E.context<GetCredential | RPC.AuthenticationClient | Capabilities | StorageService>(),
|
|
142
136
|
)
|
|
143
137
|
|
|
144
138
|
return AuthenticationService.of({
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Effect as E, Layer as L } from 'effect'
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { ConnectResponse } from '@passlock/shared/dist/rpc/connection.js'
|
|
4
4
|
|
|
5
5
|
import { ConnectionClient } from '../rpc/connection.js'
|
|
6
6
|
|
|
7
|
-
export const preConnectRes = new
|
|
7
|
+
export const preConnectRes = new ConnectResponse({ warmed: true })
|
|
8
8
|
|
|
9
9
|
export const rpcClientTest = L.succeed(
|
|
10
10
|
ConnectionClient,
|
|
@@ -5,7 +5,7 @@ import { Context, Effect as E, Layer, flow, pipe } from 'effect'
|
|
|
5
5
|
|
|
6
6
|
import { Dispatcher } from '../rpc/client.js'
|
|
7
7
|
import type { RpcConfig } from '../rpc/config.js'
|
|
8
|
-
import
|
|
8
|
+
import * as RPC from '../rpc/connection.js'
|
|
9
9
|
|
|
10
10
|
/* Service */
|
|
11
11
|
|
|
@@ -28,7 +28,7 @@ const hitPrincipal = pipe(
|
|
|
28
28
|
|
|
29
29
|
const hitRpc = pipe(
|
|
30
30
|
E.logInfo('Pre-connecting to RPC endpoint'),
|
|
31
|
-
E.zipRight(ConnectionClient),
|
|
31
|
+
E.zipRight(RPC.ConnectionClient),
|
|
32
32
|
E.flatMap(rpcClient => rpcClient.preConnect()),
|
|
33
33
|
E.asVoid,
|
|
34
34
|
)
|
|
@@ -41,7 +41,7 @@ export const preConnect = () => pipe(E.all([hitPrincipal, hitRpc], { concurrency
|
|
|
41
41
|
export const ConnectionServiceLive = Layer.effect(
|
|
42
42
|
ConnectionService,
|
|
43
43
|
E.gen(function* (_) {
|
|
44
|
-
const context = yield* _(E.context<ConnectionClient | Dispatcher | RpcConfig>())
|
|
44
|
+
const context = yield* _(E.context<RPC.ConnectionClient | Dispatcher | RpcConfig>())
|
|
45
45
|
|
|
46
46
|
return ConnectionService.of({
|
|
47
47
|
preConnect: flow(preConnect, E.provide(context)),
|
package/src/effect.ts
CHANGED
|
@@ -32,12 +32,12 @@ import {
|
|
|
32
32
|
RegistrationService,
|
|
33
33
|
RegistrationServiceLive,
|
|
34
34
|
} from './registration/register.js'
|
|
35
|
-
import { AuthenticationClientLive } from './rpc/authentication.js'
|
|
35
|
+
import { AuthenticationClientLive } from './rpc/passkey/authentication.js'
|
|
36
36
|
import { DispatcherLive } from './rpc/client.js'
|
|
37
37
|
import type { RpcConfig } from './rpc/config.js'
|
|
38
38
|
import { RetrySchedule } from './rpc/config.js'
|
|
39
39
|
import { ConnectionClientLive } from './rpc/connection.js'
|
|
40
|
-
import { RegistrationClientLive } from './rpc/registration.js'
|
|
40
|
+
import { RegistrationClientLive } from './rpc/passkey/registration.js'
|
|
41
41
|
import { SocialClientLive } from './rpc/social.js'
|
|
42
42
|
import { UserClientLive } from './rpc/user.js'
|
|
43
43
|
import {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Effect as E, Layer as L, Option as O } from 'effect'
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { VerifyEmailRequest, VerifyEmailResponse } from '@passlock/shared/dist/rpc/user.js'
|
|
4
4
|
|
|
5
5
|
import * as Fixtures from '../test/fixtures.js'
|
|
6
6
|
import { AuthenticationService } from '../authentication/authenticate.js'
|
|
@@ -24,9 +24,9 @@ export const authenticationServiceTest = L.succeed(
|
|
|
24
24
|
}),
|
|
25
25
|
)
|
|
26
26
|
|
|
27
|
-
export const rpcVerifyEmailReq = new
|
|
27
|
+
export const rpcVerifyEmailReq = new VerifyEmailRequest({ token, code })
|
|
28
28
|
|
|
29
|
-
export const rpcVerifyEmailRes = new
|
|
29
|
+
export const rpcVerifyEmailRes = new VerifyEmailResponse({ principal: Fixtures.principal })
|
|
30
30
|
|
|
31
31
|
export const rpcClientTest = L.succeed(
|
|
32
32
|
UserClient,
|
package/src/email/email.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { Context, Effect as E, Layer, Option as O, flow, identity, pipe } from '
|
|
|
5
5
|
|
|
6
6
|
import { BadRequest } from '@passlock/shared/dist/error/error.js'
|
|
7
7
|
import type { VerifyEmailErrors as RpcErrors } from '@passlock/shared/dist/rpc/user.js'
|
|
8
|
-
import {
|
|
8
|
+
import { VerifyEmailRequest } from '@passlock/shared/dist/rpc/user.js'
|
|
9
9
|
import type { Principal } from '@passlock/shared/dist/schema/principal.js'
|
|
10
10
|
|
|
11
11
|
import { type AuthenticationErrors, AuthenticationService } from '../authentication/authenticate.js'
|
|
@@ -112,7 +112,7 @@ export const verifyEmail = (
|
|
|
112
112
|
yield* _(E.logDebug('Making request'))
|
|
113
113
|
const client = yield* _(UserClient)
|
|
114
114
|
const { principal } = yield* _(
|
|
115
|
-
client.verifyEmail(new
|
|
115
|
+
client.verifyEmail(new VerifyEmailRequest({ token, code: request.code })),
|
|
116
116
|
)
|
|
117
117
|
|
|
118
118
|
return principal
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { Effect as E, Layer as L, Option as O } from 'effect'
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
} from '@passlock/shared/dist/rpc/registration.js'
|
|
4
|
+
OptionsRequest,
|
|
5
|
+
OptionsResponse,
|
|
6
|
+
VerificationRequest,
|
|
7
|
+
VerificationResponse,
|
|
8
|
+
} from '@passlock/shared/dist/rpc/passkey/registration.js'
|
|
9
9
|
import type { RegistrationCredential } from '@passlock/shared/dist/schema/passkey.js'
|
|
10
10
|
|
|
11
11
|
import * as Fixtures from '../test/fixtures.js'
|
|
12
|
-
import { RegistrationClient } from '../rpc/registration.js'
|
|
12
|
+
import { RegistrationClient } from '../rpc/passkey/registration.js'
|
|
13
13
|
import { UserService } from '../user/user.js'
|
|
14
14
|
import { CreateCredential, type RegistrationRequest } from './register.js'
|
|
15
15
|
|
|
@@ -27,9 +27,9 @@ export const registrationRequest: RegistrationRequest = {
|
|
|
27
27
|
verifyEmail: O.none(),
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
export const rpcOptionsReq = new
|
|
30
|
+
export const rpcOptionsReq = new OptionsRequest(registrationRequest)
|
|
31
31
|
|
|
32
|
-
export const registrationOptions:
|
|
32
|
+
export const registrationOptions: OptionsResponse = {
|
|
33
33
|
session,
|
|
34
34
|
publicKey: {
|
|
35
35
|
rp: {
|
|
@@ -46,7 +46,7 @@ export const registrationOptions: OptionsRes = {
|
|
|
46
46
|
},
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
export const rpcOptionsRes = new
|
|
49
|
+
export const rpcOptionsRes = new OptionsResponse(registrationOptions)
|
|
50
50
|
|
|
51
51
|
export const credential: RegistrationCredential = {
|
|
52
52
|
type: 'public-key',
|
|
@@ -60,13 +60,13 @@ export const credential: RegistrationCredential = {
|
|
|
60
60
|
clientExtensionResults: {},
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
export const rpcVerificationReq = new
|
|
63
|
+
export const rpcVerificationReq = new VerificationRequest({
|
|
64
64
|
session,
|
|
65
65
|
credential,
|
|
66
66
|
verifyEmail: O.none(),
|
|
67
67
|
})
|
|
68
68
|
|
|
69
|
-
export const rpcVerificationRes = new
|
|
69
|
+
export const rpcVerificationRes = new VerificationResponse({ principal: Fixtures.principal })
|
|
70
70
|
|
|
71
71
|
export const createCredentialTest = L.succeed(
|
|
72
72
|
CreateCredential,
|
|
@@ -5,7 +5,7 @@ import { mock } from 'vitest-mock-extended'
|
|
|
5
5
|
import { Duplicate, InternalBrowserError } from '@passlock/shared/dist/error/error.js'
|
|
6
6
|
|
|
7
7
|
import * as Fixture from './register.fixture.js'
|
|
8
|
-
import { RegistrationClient } from '../rpc/registration.js'
|
|
8
|
+
import { RegistrationClient } from '../rpc/passkey/registration.js'
|
|
9
9
|
import { CreateCredential, RegistrationService, RegistrationServiceLive } from './register.js'
|
|
10
10
|
|
|
11
11
|
describe('register should', () => {
|
|
@@ -9,19 +9,17 @@ import { Context, Effect as E, Layer, flow, pipe } from 'effect'
|
|
|
9
9
|
|
|
10
10
|
import type { Duplicate, NotSupported } from '@passlock/shared/dist/error/error.js'
|
|
11
11
|
import { InternalBrowserError } from '@passlock/shared/dist/error/error.js'
|
|
12
|
-
import
|
|
13
|
-
import { OptionsReq, VerificationReq } from '@passlock/shared/dist/rpc/registration.js'
|
|
12
|
+
import * as RPC from '../rpc/passkey/registration.js'
|
|
14
13
|
import type { RegistrationCredential } from '@passlock/shared/dist/schema/passkey.js'
|
|
15
14
|
import type { Principal } from '@passlock/shared/dist/schema/principal.js'
|
|
16
15
|
|
|
17
16
|
import { Capabilities } from '../capabilities/capabilities.js'
|
|
18
|
-
import { RegistrationClient } from '../rpc/registration.js'
|
|
19
17
|
import { StorageService } from '../storage/storage.js'
|
|
20
18
|
import type { UserService } from '../user/user.js'
|
|
21
19
|
|
|
22
20
|
/* Requests */
|
|
23
21
|
|
|
24
|
-
export type RegistrationRequest =
|
|
22
|
+
export type RegistrationRequest = RPC.OptionsRequest
|
|
25
23
|
|
|
26
24
|
/* Dependencies */
|
|
27
25
|
|
|
@@ -36,7 +34,7 @@ export class CreateCredential extends Context.Tag('@services/CreateCredential')<
|
|
|
36
34
|
|
|
37
35
|
/* Errors */
|
|
38
36
|
|
|
39
|
-
export type RegistrationErrors = NotSupported | OptionsErrors | VerificationErrors
|
|
37
|
+
export type RegistrationErrors = NotSupported | RPC.OptionsErrors | RPC.VerificationErrors
|
|
40
38
|
|
|
41
39
|
/* Service */
|
|
42
40
|
|
|
@@ -49,11 +47,11 @@ export class RegistrationService extends Context.Tag('@services/RegistrationServ
|
|
|
49
47
|
|
|
50
48
|
/* Utilities */
|
|
51
49
|
|
|
52
|
-
const fetchOptions = (request:
|
|
50
|
+
const fetchOptions = (request: RPC.OptionsRequest) => {
|
|
53
51
|
return E.gen(function* (_) {
|
|
54
52
|
yield* _(E.logDebug('Making request'))
|
|
55
53
|
|
|
56
|
-
const rpcClient = yield* _(RegistrationClient)
|
|
54
|
+
const rpcClient = yield* _(RPC.RegistrationClient)
|
|
57
55
|
const { publicKey, session } = yield* _(rpcClient.getRegistrationOptions(request))
|
|
58
56
|
|
|
59
57
|
yield* _(E.logDebug('Converting Passlock options to CredentialCreationOptions'))
|
|
@@ -76,11 +74,11 @@ const toCreationOptions = (jsonOptions: CredentialCreationOptionsJSON) => {
|
|
|
76
74
|
)
|
|
77
75
|
}
|
|
78
76
|
|
|
79
|
-
const verifyCredential = (request:
|
|
77
|
+
const verifyCredential = (request: RPC.VerificationRequest) => {
|
|
80
78
|
return E.gen(function* (_) {
|
|
81
79
|
yield* _(E.logDebug('Making request'))
|
|
82
80
|
|
|
83
|
-
const rpcClient = yield* _(RegistrationClient)
|
|
81
|
+
const rpcClient = yield* _(RPC.RegistrationClient)
|
|
84
82
|
const { principal } = yield* _(rpcClient.verifyRegistrationCredential(request))
|
|
85
83
|
|
|
86
84
|
return principal
|
|
@@ -94,7 +92,7 @@ type Dependencies =
|
|
|
94
92
|
| CreateCredential
|
|
95
93
|
| StorageService
|
|
96
94
|
| UserService
|
|
97
|
-
| RegistrationClient
|
|
95
|
+
| RPC.RegistrationClient
|
|
98
96
|
|
|
99
97
|
export const registerPasskey = (
|
|
100
98
|
request: RegistrationRequest,
|
|
@@ -105,14 +103,14 @@ export const registerPasskey = (
|
|
|
105
103
|
yield* _(capabilities.passkeySupport)
|
|
106
104
|
|
|
107
105
|
yield* _(E.logInfo('Fetching registration options from Passlock'))
|
|
108
|
-
const { options, session } = yield* fetchOptions(new
|
|
106
|
+
const { options, session } = yield* fetchOptions(new RPC.OptionsRequest(request))
|
|
109
107
|
|
|
110
108
|
yield* _(E.logInfo('Building new credential'))
|
|
111
109
|
const { createCredential } = yield* _(CreateCredential)
|
|
112
110
|
const credential = yield* _(createCredential(options))
|
|
113
111
|
|
|
114
112
|
yield* _(E.logInfo('Storing credential public key in Passlock'))
|
|
115
|
-
const verificationRequest = new
|
|
113
|
+
const verificationRequest = new RPC.VerificationRequest({
|
|
116
114
|
...request,
|
|
117
115
|
credential,
|
|
118
116
|
session,
|
|
@@ -146,7 +144,7 @@ export const RegistrationServiceLive = Layer.effect(
|
|
|
146
144
|
E.gen(function* (_) {
|
|
147
145
|
const context = yield* _(
|
|
148
146
|
E.context<
|
|
149
|
-
CreateCredential | RegistrationClient | Capabilities | StorageService | UserService
|
|
147
|
+
CreateCredential | RPC.RegistrationClient | Capabilities | StorageService | UserService
|
|
150
148
|
>(),
|
|
151
149
|
)
|
|
152
150
|
|
package/src/rpc/client.ts
CHANGED
|
@@ -62,7 +62,7 @@ export const DispatcherLive = Layer.effect(
|
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
const buildUrl = (_path: string) => {
|
|
65
|
-
const endpoint = maybeEndpoint || 'https://api.passlock.dev'
|
|
65
|
+
const endpoint = maybeEndpoint || 'https://api.v1.passlock.dev'
|
|
66
66
|
// drop leading /
|
|
67
67
|
const path = _path.replace(/^\//, '')
|
|
68
68
|
return `${endpoint}/${tenancyId}/${path}`
|
package/src/rpc/connection.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { Context, Effect as E, Layer } from 'effect'
|
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
CONNECT_ENDPOINT,
|
|
6
|
-
|
|
6
|
+
ConnectResponse,
|
|
7
7
|
type ConnectionService,
|
|
8
8
|
} from '@passlock/shared/dist/rpc/connection.js'
|
|
9
9
|
|
|
@@ -21,10 +21,12 @@ export const ConnectionClientLive = Layer.effect(
|
|
|
21
21
|
E.gen(function* (_) {
|
|
22
22
|
const dispatcher = yield* _(Dispatcher)
|
|
23
23
|
|
|
24
|
-
const preConnectResolver = makeGetRequest(
|
|
24
|
+
const preConnectResolver = makeGetRequest(ConnectResponse, S.Never, dispatcher)
|
|
25
25
|
|
|
26
26
|
return {
|
|
27
27
|
preConnect: () => preConnectResolver(CONNECT_ENDPOINT),
|
|
28
28
|
}
|
|
29
29
|
}),
|
|
30
30
|
)
|
|
31
|
+
|
|
32
|
+
export { ConnectResponse } from '@passlock/shared/dist/rpc/connection.js'
|
|
@@ -4,40 +4,49 @@ import {
|
|
|
4
4
|
type AuthenticationService,
|
|
5
5
|
OPTIONS_ENDPOINT,
|
|
6
6
|
OptionsErrors,
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
OptionsRequest,
|
|
8
|
+
OptionsResponse,
|
|
9
|
+
VERIFICATION_ENDPOINT,
|
|
10
10
|
VerificationErrors,
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
} from '@passlock/shared/dist/rpc/authentication.js'
|
|
11
|
+
VerificationRequest,
|
|
12
|
+
VerificationResponse,
|
|
13
|
+
} from '@passlock/shared/dist/rpc/passkey/authentication.js'
|
|
14
14
|
|
|
15
|
-
import { Dispatcher, makePostRequest } from '
|
|
15
|
+
import { Dispatcher, makePostRequest } from '../client.js'
|
|
16
16
|
|
|
17
17
|
/* Client */
|
|
18
18
|
|
|
19
|
-
export class AuthenticationClient extends Context.Tag('@passkey/
|
|
19
|
+
export class AuthenticationClient extends Context.Tag('@passkey/authentication/client')<
|
|
20
20
|
AuthenticationClient,
|
|
21
21
|
AuthenticationService
|
|
22
|
-
>() {}
|
|
22
|
+
>() { }
|
|
23
23
|
|
|
24
24
|
export const AuthenticationClientLive = Layer.effect(
|
|
25
25
|
AuthenticationClient,
|
|
26
26
|
E.gen(function* (_) {
|
|
27
27
|
const dispatcher = yield* _(Dispatcher)
|
|
28
28
|
|
|
29
|
-
const optionsResolver = makePostRequest(
|
|
29
|
+
const optionsResolver = makePostRequest(OptionsRequest, OptionsResponse, OptionsErrors, dispatcher)
|
|
30
30
|
|
|
31
31
|
const verifyResolver = makePostRequest(
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
VerificationRequest,
|
|
33
|
+
VerificationResponse,
|
|
34
34
|
VerificationErrors,
|
|
35
35
|
dispatcher,
|
|
36
36
|
)
|
|
37
37
|
|
|
38
38
|
return {
|
|
39
39
|
getAuthenticationOptions: req => optionsResolver(OPTIONS_ENDPOINT, req),
|
|
40
|
-
verifyAuthenticationCredential: req => verifyResolver(
|
|
40
|
+
verifyAuthenticationCredential: req => verifyResolver(VERIFICATION_ENDPOINT, req),
|
|
41
41
|
}
|
|
42
42
|
}),
|
|
43
43
|
)
|
|
44
|
+
|
|
45
|
+
export {
|
|
46
|
+
OptionsErrors,
|
|
47
|
+
OptionsRequest,
|
|
48
|
+
OptionsResponse,
|
|
49
|
+
VerificationErrors,
|
|
50
|
+
VerificationRequest,
|
|
51
|
+
VerificationResponse,
|
|
52
|
+
} from '@passlock/shared/dist/rpc/passkey/authentication.js'
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Context, Effect as E, Layer } from 'effect'
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
OptionsErrors,
|
|
5
|
+
OptionsRequest,
|
|
6
|
+
OptionsResponse,
|
|
7
|
+
type RegistrationService,
|
|
8
|
+
VerificationErrors,
|
|
9
|
+
VerificationRequest,
|
|
10
|
+
VerificationResponse,
|
|
11
|
+
OPTIONS_ENDPOINT,
|
|
12
|
+
VERIFICATION_ENDPOINT
|
|
13
|
+
} from '@passlock/shared/dist/rpc/passkey/registration.js'
|
|
14
|
+
|
|
15
|
+
import { Dispatcher, makePostRequest } from '../client.js'
|
|
16
|
+
|
|
17
|
+
/* Client */
|
|
18
|
+
|
|
19
|
+
export class RegistrationClient extends Context.Tag('@passkey/register/client')<
|
|
20
|
+
RegistrationClient,
|
|
21
|
+
RegistrationService
|
|
22
|
+
>() {}
|
|
23
|
+
|
|
24
|
+
export const RegistrationClientLive = Layer.effect(
|
|
25
|
+
RegistrationClient,
|
|
26
|
+
E.gen(function* (_) {
|
|
27
|
+
const dispatcher = yield* _(Dispatcher)
|
|
28
|
+
|
|
29
|
+
const optionsResolver = makePostRequest(OptionsRequest, OptionsResponse, OptionsErrors, dispatcher)
|
|
30
|
+
|
|
31
|
+
const verifyResolver = makePostRequest(
|
|
32
|
+
VerificationRequest,
|
|
33
|
+
VerificationResponse,
|
|
34
|
+
VerificationErrors,
|
|
35
|
+
dispatcher,
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
return {
|
|
39
|
+
getRegistrationOptions: req => optionsResolver(OPTIONS_ENDPOINT, req),
|
|
40
|
+
verifyRegistrationCredential: req => verifyResolver(VERIFICATION_ENDPOINT, req),
|
|
41
|
+
}
|
|
42
|
+
}),
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
export {
|
|
46
|
+
OptionsErrors,
|
|
47
|
+
OptionsRequest,
|
|
48
|
+
OptionsResponse,
|
|
49
|
+
VerificationErrors,
|
|
50
|
+
VerificationRequest,
|
|
51
|
+
VerificationResponse,
|
|
52
|
+
} from '@passlock/shared/dist/rpc/passkey/registration.js'
|
package/src/rpc/social.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { Context, Effect as E, Layer } from 'effect'
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
OIDCRegistrationRequest,
|
|
5
|
+
OIDCRegistrationErrors,
|
|
6
|
+
OIDCAuthenticationRequest,
|
|
7
|
+
OIDCAuthenticationErrors,
|
|
8
|
+
OIDC_REGISTRATION_ENDPOINT,
|
|
9
|
+
OIDC_AUTHENTICATION_ENDPOINT,
|
|
10
|
+
PrincipalResponse,
|
|
11
|
+
type SocialService
|
|
10
12
|
} from '@passlock/shared/dist/rpc/social.js'
|
|
11
13
|
|
|
12
14
|
import { Dispatcher, makePostRequest } from './client.js'
|
|
@@ -24,22 +26,30 @@ export const SocialClientLive = Layer.effect(
|
|
|
24
26
|
const dispatcher = yield* _(Dispatcher)
|
|
25
27
|
|
|
26
28
|
const registerResolver = makePostRequest(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
OIDCRegistrationRequest,
|
|
30
|
+
PrincipalResponse,
|
|
31
|
+
OIDCRegistrationErrors,
|
|
30
32
|
dispatcher,
|
|
31
33
|
)
|
|
32
34
|
|
|
33
35
|
const authenticateResolver = makePostRequest(
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
36
|
+
OIDCAuthenticationRequest,
|
|
37
|
+
PrincipalResponse,
|
|
38
|
+
OIDCAuthenticationErrors,
|
|
37
39
|
dispatcher,
|
|
38
40
|
)
|
|
39
41
|
|
|
40
42
|
return {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
oidcRegistration: req => registerResolver(OIDC_REGISTRATION_ENDPOINT, req),
|
|
44
|
+
oidcAuthentication: req => authenticateResolver(OIDC_AUTHENTICATION_ENDPOINT, req),
|
|
43
45
|
}
|
|
44
46
|
}),
|
|
45
47
|
)
|
|
48
|
+
|
|
49
|
+
export {
|
|
50
|
+
OIDCRegistrationRequest,
|
|
51
|
+
OIDCRegistrationErrors,
|
|
52
|
+
OIDCAuthenticationRequest,
|
|
53
|
+
OIDCAuthenticationErrors,
|
|
54
|
+
PrincipalResponse,
|
|
55
|
+
} from '@passlock/shared/dist/rpc/social.js'
|