@passlock/client 0.9.32 → 2.0.0-beta.2
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 +14 -86
- package/README.template.md +16 -88
- package/dist/index.d.ts +4 -206
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -158
- package/dist/index.js.map +1 -1
- package/dist/logger/index.d.ts +24 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +47 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/network.d.ts +39 -0
- package/dist/network.d.ts.map +1 -0
- package/dist/network.js +83 -0
- package/dist/network.js.map +1 -0
- package/dist/passkey/authentication/index.d.ts +21 -0
- package/dist/passkey/authentication/index.d.ts.map +1 -0
- package/dist/passkey/authentication/index.js +22 -0
- package/dist/passkey/authentication/index.js.map +1 -0
- package/dist/passkey/authentication/micro.d.ts +71 -0
- package/dist/passkey/authentication/micro.d.ts.map +1 -0
- package/dist/passkey/authentication/micro.js +107 -0
- package/dist/passkey/authentication/micro.js.map +1 -0
- package/dist/passkey/index.d.ts +7 -0
- package/dist/passkey/index.d.ts.map +1 -0
- package/dist/passkey/index.js +5 -0
- package/dist/passkey/index.js.map +1 -0
- package/dist/passkey/registration/index.d.ts +19 -0
- package/dist/passkey/registration/index.d.ts.map +1 -0
- package/dist/passkey/registration/index.js +20 -0
- package/dist/passkey/registration/index.js.map +1 -0
- package/dist/passkey/registration/micro.d.ts +101 -0
- package/dist/passkey/registration/micro.d.ts.map +1 -0
- package/dist/passkey/registration/micro.js +126 -0
- package/dist/passkey/registration/micro.js.map +1 -0
- package/dist/passkey/shared.d.ts +24 -0
- package/dist/passkey/shared.d.ts.map +1 -0
- package/dist/passkey/shared.js +10 -0
- package/dist/passkey/shared.js.map +1 -0
- package/dist/passkey/support.d.ts +3 -0
- package/dist/passkey/support.d.ts.map +1 -0
- package/dist/passkey/support.js +4 -0
- package/dist/passkey/support.js.map +1 -0
- package/dist/passkey/types.d.ts +26 -0
- package/dist/passkey/types.d.ts.map +1 -0
- package/dist/passkey/types.js +2 -0
- package/dist/passkey/types.js.map +1 -0
- package/dist/promise.d.ts +15 -0
- package/dist/promise.d.ts.map +1 -0
- package/dist/promise.js +46 -0
- package/dist/promise.js.map +1 -0
- package/dist/shared.d.ts +15 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +2 -0
- package/dist/shared.js.map +1 -0
- package/dist/tenancy.d.ts +8 -0
- package/dist/tenancy.d.ts.map +1 -0
- package/dist/tenancy.js +4 -0
- package/dist/tenancy.js.map +1 -0
- package/package.json +52 -58
- package/LICENSE +0 -21
- package/dist/authentication/authenticate.d.ts +0 -23
- package/dist/authentication/authenticate.fixture.d.ts +0 -52
- package/dist/authentication/authenticate.fixture.js +0 -50
- package/dist/authentication/authenticate.fixture.js.map +0 -1
- package/dist/authentication/authenticate.js +0 -72
- package/dist/authentication/authenticate.js.map +0 -1
- package/dist/capabilities/capabilities.d.ts +0 -19
- package/dist/capabilities/capabilities.js +0 -37
- package/dist/capabilities/capabilities.js.map +0 -1
- package/dist/connection/connection.d.ts +0 -15
- package/dist/connection/connection.fixture.d.ts +0 -10
- package/dist/connection/connection.fixture.js +0 -13
- package/dist/connection/connection.fixture.js.map +0 -1
- package/dist/connection/connection.js +0 -23
- package/dist/connection/connection.js.map +0 -1
- package/dist/effect.d.ts +0 -26
- package/dist/effect.js +0 -78
- package/dist/effect.js.map +0 -1
- package/dist/email/email.d.ts +0 -70
- package/dist/email/email.fixture.d.ts +0 -46
- package/dist/email/email.fixture.js +0 -25
- package/dist/email/email.fixture.js.map +0 -1
- package/dist/email/email.js +0 -83
- package/dist/email/email.js.map +0 -1
- package/dist/event/event.d.ts +0 -8
- package/dist/event/event.js +0 -23
- package/dist/event/event.js.map +0 -1
- package/dist/logging/eventLogger.d.ts +0 -17
- package/dist/logging/eventLogger.js +0 -38
- package/dist/logging/eventLogger.js.map +0 -1
- package/dist/registration/register.d.ts +0 -25
- package/dist/registration/register.fixture.d.ts +0 -53
- package/dist/registration/register.fixture.js +0 -66
- package/dist/registration/register.fixture.js.map +0 -1
- package/dist/registration/register.js +0 -77
- package/dist/registration/register.js.map +0 -1
- package/dist/rpc/client.d.ts +0 -30
- package/dist/rpc/client.js +0 -101
- package/dist/rpc/client.js.map +0 -1
- package/dist/rpc/config.d.ts +0 -15
- package/dist/rpc/config.js +0 -6
- package/dist/rpc/config.js.map +0 -1
- package/dist/rpc/connection.d.ts +0 -8
- package/dist/rpc/connection.js +0 -16
- package/dist/rpc/connection.js.map +0 -1
- package/dist/rpc/passkey/authentication.d.ts +0 -8
- package/dist/rpc/passkey/authentication.js +0 -17
- package/dist/rpc/passkey/authentication.js.map +0 -1
- package/dist/rpc/passkey/registration.d.ts +0 -8
- package/dist/rpc/passkey/registration.js +0 -17
- package/dist/rpc/passkey/registration.js.map +0 -1
- package/dist/rpc/social.d.ts +0 -10
- package/dist/rpc/social.js +0 -19
- package/dist/rpc/social.js.map +0 -1
- package/dist/rpc/user.d.ts +0 -8
- package/dist/rpc/user.js +0 -20
- package/dist/rpc/user.js.map +0 -1
- package/dist/social/social.d.ts +0 -23
- package/dist/social/social.fixture.d.ts +0 -46
- package/dist/social/social.fixture.js +0 -31
- package/dist/social/social.fixture.js.map +0 -1
- package/dist/social/social.js +0 -38
- package/dist/social/social.js.map +0 -1
- package/dist/storage/storage.d.ts +0 -56
- package/dist/storage/storage.fixture.d.ts +0 -4
- package/dist/storage/storage.fixture.js +0 -10
- package/dist/storage/storage.fixture.js.map +0 -1
- package/dist/storage/storage.js +0 -111
- package/dist/storage/storage.js.map +0 -1
- package/dist/test/fixtures.d.ts +0 -15
- package/dist/test/fixtures.js +0 -56
- package/dist/test/fixtures.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/user/user.d.ts +0 -25
- package/dist/user/user.fixture.d.ts +0 -12
- package/dist/user/user.fixture.js +0 -20
- package/dist/user/user.fixture.js.map +0 -1
- package/dist/user/user.js +0 -37
- package/dist/user/user.js.map +0 -1
- package/dist/version.d.ts +0 -1
- package/dist/version.js +0 -2
- package/dist/version.js.map +0 -1
- package/src/authentication/authenticate.fixture.ts +0 -73
- package/src/authentication/authenticate.test.ts +0 -249
- package/src/authentication/authenticate.ts +0 -143
- package/src/capabilities/capabilities.ts +0 -83
- package/src/connection/connection.fixture.ts +0 -20
- package/src/connection/connection.test.ts +0 -60
- package/src/connection/connection.ts +0 -51
- package/src/effect.ts +0 -280
- package/src/email/email.fixture.ts +0 -44
- package/src/email/email.test.ts +0 -186
- package/src/email/email.ts +0 -148
- package/src/event/event.node.test.ts +0 -21
- package/src/event/event.test.ts +0 -37
- package/src/event/event.ts +0 -25
- package/src/index.ts +0 -407
- package/src/logging/eventLogger.test.ts +0 -104
- package/src/logging/eventLogger.ts +0 -41
- package/src/registration/register.fixture.ts +0 -96
- package/src/registration/register.test.ts +0 -216
- package/src/registration/register.ts +0 -156
- package/src/rpc/client.ts +0 -174
- package/src/rpc/config.ts +0 -18
- package/src/rpc/connection.ts +0 -32
- package/src/rpc/passkey/authentication.ts +0 -52
- package/src/rpc/passkey/registration.ts +0 -52
- package/src/rpc/social.ts +0 -55
- package/src/rpc/user.ts +0 -68
- package/src/social/social.fixture.ts +0 -44
- package/src/social/social.test.ts +0 -179
- package/src/social/social.ts +0 -79
- package/src/storage/storage.fixture.ts +0 -16
- package/src/storage/storage.test.ts +0 -206
- package/src/storage/storage.ts +0 -168
- package/src/test/fixtures.ts +0 -70
- package/src/user/user.fixture.ts +0 -33
- package/src/user/user.test.ts +0 -84
- package/src/user/user.ts +0 -71
- package/src/version.ts +0 -1
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { Effect as E, Layer as L, Option as O } from 'effect';
|
|
2
|
-
import { VerifyEmailRequest, VerifyEmailResponse } from '@passlock/shared/dist/rpc/user.js';
|
|
3
|
-
import * as Fixtures from '../test/fixtures.js';
|
|
4
|
-
import { AuthenticationService } from '../authentication/authenticate.js';
|
|
5
|
-
import { UserClient } from '../rpc/user.js';
|
|
6
|
-
import { URLQueryString } from './email.js';
|
|
7
|
-
export const token = 'token';
|
|
8
|
-
export const code = 'code';
|
|
9
|
-
export const authType = 'passkey';
|
|
10
|
-
export const expireAt = Date.now() + 10000;
|
|
11
|
-
export const locationSearchTest = L.succeed(URLQueryString, URLQueryString.of(E.succeed(`?code=${code}`)));
|
|
12
|
-
export const authenticationServiceTest = L.succeed(AuthenticationService, AuthenticationService.of({
|
|
13
|
-
authenticatePasskey: () => E.succeed(Fixtures.principal),
|
|
14
|
-
}));
|
|
15
|
-
export const rpcVerifyEmailReq = new VerifyEmailRequest({ token, code });
|
|
16
|
-
export const rpcVerifyEmailRes = new VerifyEmailResponse({ principal: Fixtures.principal });
|
|
17
|
-
export const rpcClientTest = L.succeed(UserClient, UserClient.of({
|
|
18
|
-
isExistingUser: () => E.succeed({ existingUser: true, detail: O.none() }),
|
|
19
|
-
verifyEmail: () => E.succeed(rpcVerifyEmailRes),
|
|
20
|
-
resendVerificationEmail: () => E.fail(Fixtures.notImplemented),
|
|
21
|
-
}));
|
|
22
|
-
export const principal = Fixtures.principal;
|
|
23
|
-
export const storedToken = Fixtures.storedToken;
|
|
24
|
-
export const storageServiceTest = Fixtures.storageServiceTest;
|
|
25
|
-
//# sourceMappingURL=email.fixture.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"email.fixture.js","sourceRoot":"","sources":["../../src/email/email.fixture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE7D,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AAE3F,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAA;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE3C,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,kBAAkB,GAAG,CAAC,CAAC,OAAO,CACzC,cAAc,EACd,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAC9C,CAAA;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,OAAO,CAChD,qBAAqB,EACrB,qBAAqB,CAAC,EAAE,CAAC;IACvB,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;CACzD,CAAC,CACH,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,kBAAkB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;AAExE,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,mBAAmB,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAA;AAE3F,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,OAAO,CACpC,UAAU,EACV,UAAU,CAAC,EAAE,CAAC;IACZ,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;IACzE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC;IAC/C,uBAAuB,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;CAC/D,CAAC,CACH,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAA;AAE3C,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAA;AAE/C,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,CAAA"}
|
package/dist/email/email.js
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Email verification effects
|
|
3
|
-
*/
|
|
4
|
-
import { Context, Effect as E, Layer, Option as O, flow, identity, pipe } from 'effect';
|
|
5
|
-
import { BadRequest } from '@passlock/shared/dist/error/error.js';
|
|
6
|
-
import { VerifyEmailRequest } from '@passlock/shared/dist/rpc/user.js';
|
|
7
|
-
import { AuthenticationService } from '../authentication/authenticate.js';
|
|
8
|
-
import { UserClient } from '../rpc/user.js';
|
|
9
|
-
import { StorageService } from '../storage/storage.js';
|
|
10
|
-
/* Dependencies */
|
|
11
|
-
export class URLQueryString extends Context.Tag('@utils/URLQueryString')() {
|
|
12
|
-
}
|
|
13
|
-
/* Service */
|
|
14
|
-
export class EmailService extends Context.Tag('@services/EmailService')() {
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Check for existing token in sessionStorage,
|
|
18
|
-
* otherwise force passkey re-authentication
|
|
19
|
-
* @returns
|
|
20
|
-
*/
|
|
21
|
-
const getToken = () => {
|
|
22
|
-
return E.gen(function* (_) {
|
|
23
|
-
// Check for existing token
|
|
24
|
-
const storageService = yield* _(StorageService);
|
|
25
|
-
const existingTokenE = storageService.getToken('passkey');
|
|
26
|
-
const authenticationService = yield* _(AuthenticationService);
|
|
27
|
-
const tokenE = E.matchEffect(existingTokenE, {
|
|
28
|
-
onSuccess: token => E.succeed(token),
|
|
29
|
-
onFailure: () =>
|
|
30
|
-
// No token, need to authenticate the user
|
|
31
|
-
pipe(authenticationService.authenticatePasskey({
|
|
32
|
-
userVerification: O.some('preferred'),
|
|
33
|
-
email: O.none(),
|
|
34
|
-
}), E.map(principal => ({
|
|
35
|
-
token: principal.jti,
|
|
36
|
-
authType: principal.authType,
|
|
37
|
-
expiry: principal.exp.getTime(),
|
|
38
|
-
}))),
|
|
39
|
-
});
|
|
40
|
-
const token = yield* _(tokenE);
|
|
41
|
-
yield* _(storageService.clearToken('passkey'));
|
|
42
|
-
return token;
|
|
43
|
-
});
|
|
44
|
-
};
|
|
45
|
-
/**
|
|
46
|
-
* Look for ?code=<code> in the url
|
|
47
|
-
* @returns
|
|
48
|
-
*/
|
|
49
|
-
export const extractCodeFromHref = () => {
|
|
50
|
-
return pipe(URLQueryString, E.flatMap(identity), E.map(search => new URLSearchParams(search)), E.flatMap(params => O.fromNullable(params.get('code'))));
|
|
51
|
-
};
|
|
52
|
-
/* Effects */
|
|
53
|
-
/**
|
|
54
|
-
* Verify the mailbox using the given code
|
|
55
|
-
* @param request
|
|
56
|
-
* @returns
|
|
57
|
-
*/
|
|
58
|
-
export const verifyEmail = (request) => {
|
|
59
|
-
return E.gen(function* (_) {
|
|
60
|
-
// Re-authenticate the user if required
|
|
61
|
-
const { token } = yield* _(getToken());
|
|
62
|
-
yield* _(E.logDebug('Making request'));
|
|
63
|
-
const client = yield* _(UserClient);
|
|
64
|
-
const { principal } = yield* _(client.verifyEmail(new VerifyEmailRequest({ token, code: request.code })));
|
|
65
|
-
return principal;
|
|
66
|
-
});
|
|
67
|
-
};
|
|
68
|
-
/**
|
|
69
|
-
* Look for a code in the current url and verify it
|
|
70
|
-
* @returns
|
|
71
|
-
*/
|
|
72
|
-
export const verifyEmailLink = () => pipe(extractCodeFromHref(), E.mapError(() => new BadRequest({ message: 'Expected ?code=xxx in window.location' })), E.flatMap(code => verifyEmail({ code })));
|
|
73
|
-
/* Live */
|
|
74
|
-
/* v8 ignore start */
|
|
75
|
-
export const EmailServiceLive = Layer.effect(EmailService, E.gen(function* (_) {
|
|
76
|
-
const context = yield* _(E.context());
|
|
77
|
-
return EmailService.of({
|
|
78
|
-
verifyEmailCode: flow(verifyEmail, E.provide(context)),
|
|
79
|
-
verifyEmailLink: flow(verifyEmailLink, E.provide(context)),
|
|
80
|
-
});
|
|
81
|
-
}));
|
|
82
|
-
/* v8 ignore stop */
|
|
83
|
-
//# sourceMappingURL=email.js.map
|
package/dist/email/email.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/email/email.ts"],"names":[],"mappings":"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"}
|
package/dist/event/event.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Fire DOM events
|
|
3
|
-
*/
|
|
4
|
-
import { Effect } from 'effect';
|
|
5
|
-
import { InternalBrowserError } from '@passlock/shared/dist/error/error.js';
|
|
6
|
-
export declare const DebugMessage = "PasslogDebugMessage";
|
|
7
|
-
export declare const fireEvent: (message: string) => Effect.Effect<void, InternalBrowserError, never>;
|
|
8
|
-
export declare function isPasslockEvent(event: Event): event is CustomEvent;
|
package/dist/event/event.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Fire DOM events
|
|
3
|
-
*/
|
|
4
|
-
import { Effect } from 'effect';
|
|
5
|
-
import { InternalBrowserError } from '@passlock/shared/dist/error/error.js';
|
|
6
|
-
export const DebugMessage = 'PasslogDebugMessage';
|
|
7
|
-
export const fireEvent = (message) => {
|
|
8
|
-
return Effect.try({
|
|
9
|
-
try: () => {
|
|
10
|
-
const evt = new CustomEvent(DebugMessage, { detail: message });
|
|
11
|
-
globalThis.dispatchEvent(evt);
|
|
12
|
-
},
|
|
13
|
-
catch: () => {
|
|
14
|
-
return new InternalBrowserError({ message: 'Unable to fire custom event' });
|
|
15
|
-
},
|
|
16
|
-
});
|
|
17
|
-
};
|
|
18
|
-
export function isPasslockEvent(event) {
|
|
19
|
-
if (event.type !== DebugMessage)
|
|
20
|
-
return false;
|
|
21
|
-
return 'detail' in event;
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=event.js.map
|
package/dist/event/event.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"event.js","sourceRoot":"","sources":["../../src/event/event.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAA;AAE3E,MAAM,CAAC,MAAM,YAAY,GAAG,qBAAqB,CAAA;AAEjD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,OAAe,EAAE,EAAE;IAC3C,OAAO,MAAM,CAAC,GAAG,CAAC;QAChB,GAAG,EAAE,GAAG,EAAE;YACR,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;YAC9D,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;QAC/B,CAAC;QACD,KAAK,EAAE,GAAG,EAAE;YACV,OAAO,IAAI,oBAAoB,CAAC,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC,CAAA;QAC7E,CAAC;KACF,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,UAAU,eAAe,CAAC,KAAY;IAC1C,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,KAAK,CAAA;IAC7C,OAAO,QAAQ,IAAI,KAAK,CAAA;AAC1B,CAAC"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Logger implementation that also fires DOM events.
|
|
3
|
-
* This is useful to allow external code to plug into the logging
|
|
4
|
-
* mechanism. E.g. the Passlock demo subscribes to events to generate
|
|
5
|
-
* a typewriter style effect
|
|
6
|
-
*/
|
|
7
|
-
import { Effect as E } from 'effect';
|
|
8
|
-
/**
|
|
9
|
-
* Some log messages span multiple lines/include json etc which is
|
|
10
|
-
* better output without being formatted by Effect's logging framework
|
|
11
|
-
*
|
|
12
|
-
* @param message
|
|
13
|
-
* @returns
|
|
14
|
-
*/
|
|
15
|
-
export declare const logRaw: <T>(message: T) => E.Effect<void, never, never>;
|
|
16
|
-
export declare const DebugMessage = "PasslogDebugMessage";
|
|
17
|
-
export declare const eventLoggerLive: import("effect/Layer").Layer<never, never, never>;
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Logger implementation that also fires DOM events.
|
|
3
|
-
* This is useful to allow external code to plug into the logging
|
|
4
|
-
* mechanism. E.g. the Passlock demo subscribes to events to generate
|
|
5
|
-
* a typewriter style effect
|
|
6
|
-
*/
|
|
7
|
-
import { Effect as E, LogLevel, Logger } from 'effect';
|
|
8
|
-
/**
|
|
9
|
-
* Some log messages span multiple lines/include json etc which is
|
|
10
|
-
* better output without being formatted by Effect's logging framework
|
|
11
|
-
*
|
|
12
|
-
* @param message
|
|
13
|
-
* @returns
|
|
14
|
-
*/
|
|
15
|
-
export const logRaw = (message) => {
|
|
16
|
-
return E.sync(() => {
|
|
17
|
-
console.log(message);
|
|
18
|
-
});
|
|
19
|
-
};
|
|
20
|
-
export const DebugMessage = 'PasslogDebugMessage';
|
|
21
|
-
const dispatch = (message) => {
|
|
22
|
-
try {
|
|
23
|
-
const evt = new CustomEvent(DebugMessage, { detail: message });
|
|
24
|
-
globalThis.dispatchEvent(evt);
|
|
25
|
-
}
|
|
26
|
-
catch {
|
|
27
|
-
globalThis.console.log('Unable to fire custom event');
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
export const eventLoggerLive = Logger.add(Logger.make(({ logLevel, message }) => {
|
|
31
|
-
if (typeof message === 'string' && logLevel !== LogLevel.Debug) {
|
|
32
|
-
dispatch(message);
|
|
33
|
-
}
|
|
34
|
-
else if (Array.isArray(message) && logLevel !== LogLevel.Debug) {
|
|
35
|
-
message.forEach(dispatch);
|
|
36
|
-
}
|
|
37
|
-
}));
|
|
38
|
-
//# sourceMappingURL=eventLogger.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"eventLogger.js","sourceRoot":"","sources":["../../src/logging/eventLogger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEtD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAI,OAAU,EAAE,EAAE;IACtC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;QACjB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACtB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,qBAAqB,CAAA;AAEjD,MAAM,QAAQ,GAAG,CAAC,OAAe,EAAE,EAAE;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;QAC9D,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAA;IACvD,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CACvC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;IACpC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,QAAQ,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC/D,QAAQ,CAAC,OAAO,CAAC,CAAA;IACnB,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,QAAQ,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC3B,CAAC;AACH,CAAC,CAAC,CACH,CAAA"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { Context, Effect as E, Layer } from 'effect';
|
|
2
|
-
import type { Duplicate, NotSupported } from '@passlock/shared/dist/error/error.js';
|
|
3
|
-
import { InternalBrowserError } from '@passlock/shared/dist/error/error.js';
|
|
4
|
-
import * as RPC from '../rpc/passkey/registration.js';
|
|
5
|
-
import type { RegistrationCredential } from '@passlock/shared/dist/schema/passkey.js';
|
|
6
|
-
import type { Principal } from '@passlock/shared/dist/schema/principal.js';
|
|
7
|
-
import { Capabilities } from '../capabilities/capabilities.js';
|
|
8
|
-
import { StorageService } from '../storage/storage.js';
|
|
9
|
-
import type { UserService } from '../user/user.js';
|
|
10
|
-
export type RegistrationRequest = RPC.OptionsRequest;
|
|
11
|
-
declare const CreateCredential_base: Context.TagClass<CreateCredential, "@services/CreateCredential", {
|
|
12
|
-
createCredential: (request: CredentialCreationOptions) => E.Effect<RegistrationCredential, InternalBrowserError | Duplicate>;
|
|
13
|
-
}>;
|
|
14
|
-
export declare class CreateCredential extends CreateCredential_base {
|
|
15
|
-
}
|
|
16
|
-
export type RegistrationErrors = NotSupported | RPC.OptionsErrors | RPC.VerificationErrors;
|
|
17
|
-
declare const RegistrationService_base: Context.TagClass<RegistrationService, "@services/RegistrationService", {
|
|
18
|
-
registerPasskey: (request: RegistrationRequest) => E.Effect<Principal, RegistrationErrors>;
|
|
19
|
-
}>;
|
|
20
|
-
export declare class RegistrationService extends RegistrationService_base {
|
|
21
|
-
}
|
|
22
|
-
type Dependencies = Capabilities | CreateCredential | StorageService | UserService | RPC.RegistrationClient;
|
|
23
|
-
export declare const registerPasskey: (request: RegistrationRequest) => E.Effect<Principal, RegistrationErrors, Dependencies>;
|
|
24
|
-
export declare const RegistrationServiceLive: Layer.Layer<RegistrationService, never, Capabilities | StorageService | RPC.RegistrationClient | UserService | CreateCredential>;
|
|
25
|
-
export {};
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { Layer as L } from 'effect';
|
|
2
|
-
import { OptionsRequest, OptionsResponse, VerificationRequest, VerificationResponse } from '@passlock/shared/dist/rpc/passkey/registration.js';
|
|
3
|
-
import type { RegistrationCredential } from '@passlock/shared/dist/schema/passkey.js';
|
|
4
|
-
import { RegistrationClient } from '../rpc/passkey/registration.js';
|
|
5
|
-
import { UserService } from '../user/user.js';
|
|
6
|
-
import { CreateCredential, type RegistrationRequest } from './register.js';
|
|
7
|
-
export declare const session = "session";
|
|
8
|
-
export declare const token = "token";
|
|
9
|
-
export declare const code = "code";
|
|
10
|
-
export declare const authType = "passkey";
|
|
11
|
-
export declare const expireAt: number;
|
|
12
|
-
export declare const registrationRequest: RegistrationRequest;
|
|
13
|
-
export declare const rpcOptionsReq: OptionsRequest;
|
|
14
|
-
export declare const registrationOptions: OptionsResponse;
|
|
15
|
-
export declare const rpcOptionsRes: OptionsResponse;
|
|
16
|
-
export declare const credential: RegistrationCredential;
|
|
17
|
-
export declare const rpcVerificationReq: VerificationRequest;
|
|
18
|
-
export declare const rpcVerificationRes: VerificationResponse;
|
|
19
|
-
export declare const createCredentialTest: L.Layer<CreateCredential, never, never>;
|
|
20
|
-
export declare const userServiceTest: L.Layer<UserService, never, never>;
|
|
21
|
-
export declare const rpcClientTest: L.Layer<RegistrationClient, never, never>;
|
|
22
|
-
export declare const principal: {
|
|
23
|
-
readonly email?: string;
|
|
24
|
-
readonly givenName?: string;
|
|
25
|
-
readonly familyName?: string;
|
|
26
|
-
readonly emailVerified?: boolean;
|
|
27
|
-
readonly user?: {
|
|
28
|
-
readonly email: string;
|
|
29
|
-
readonly id: string;
|
|
30
|
-
readonly givenName: string;
|
|
31
|
-
readonly familyName: string;
|
|
32
|
-
readonly emailVerified: boolean;
|
|
33
|
-
};
|
|
34
|
-
readonly iss: string;
|
|
35
|
-
readonly aud: string;
|
|
36
|
-
readonly sub: string;
|
|
37
|
-
readonly iat: Date;
|
|
38
|
-
readonly nbf: Date;
|
|
39
|
-
readonly exp: Date;
|
|
40
|
-
readonly jti: string;
|
|
41
|
-
readonly token: string;
|
|
42
|
-
readonly userVerified: boolean;
|
|
43
|
-
readonly authType: "email" | "apple" | "google" | "passkey";
|
|
44
|
-
readonly authId: string;
|
|
45
|
-
readonly authStatement: {
|
|
46
|
-
readonly userVerified: boolean;
|
|
47
|
-
readonly authType: "email" | "apple" | "google" | "passkey";
|
|
48
|
-
readonly authTimestamp: Date;
|
|
49
|
-
};
|
|
50
|
-
readonly expireAt: Date;
|
|
51
|
-
};
|
|
52
|
-
export declare const capabilitiesTest: L.Layer<import("../capabilities/capabilities.js").Capabilities, never, never>;
|
|
53
|
-
export declare const storageServiceTest: L.Layer<import("../storage/storage.js").StorageService, never, never>;
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { Effect as E, Layer as L, Option as O } from 'effect';
|
|
2
|
-
import { OptionsRequest, OptionsResponse, VerificationRequest, VerificationResponse, } from '@passlock/shared/dist/rpc/passkey/registration.js';
|
|
3
|
-
import * as Fixtures from '../test/fixtures.js';
|
|
4
|
-
import { RegistrationClient } from '../rpc/passkey/registration.js';
|
|
5
|
-
import { UserService } from '../user/user.js';
|
|
6
|
-
import { CreateCredential } from './register.js';
|
|
7
|
-
export const session = 'session';
|
|
8
|
-
export const token = 'token';
|
|
9
|
-
export const code = 'code';
|
|
10
|
-
export const authType = 'passkey';
|
|
11
|
-
export const expireAt = Date.now() + 10000;
|
|
12
|
-
export const registrationRequest = {
|
|
13
|
-
email: 'jdoe@gmail.com',
|
|
14
|
-
givenName: O.some('john'),
|
|
15
|
-
familyName: O.some('doe'),
|
|
16
|
-
userVerification: O.none(),
|
|
17
|
-
verifyEmail: O.none(),
|
|
18
|
-
};
|
|
19
|
-
export const rpcOptionsReq = new OptionsRequest(registrationRequest);
|
|
20
|
-
export const registrationOptions = {
|
|
21
|
-
session,
|
|
22
|
-
publicKey: {
|
|
23
|
-
rp: {
|
|
24
|
-
name: 'passlock',
|
|
25
|
-
id: 'passlock.dev',
|
|
26
|
-
},
|
|
27
|
-
user: {
|
|
28
|
-
name: 'john doe',
|
|
29
|
-
id: 'jdoe',
|
|
30
|
-
displayName: 'john doe',
|
|
31
|
-
},
|
|
32
|
-
challenge: 'FKZSl_saKu5OXjLLwoq8eK3wlD8XgpGiS10SszW5RiE',
|
|
33
|
-
pubKeyCredParams: [],
|
|
34
|
-
},
|
|
35
|
-
};
|
|
36
|
-
export const rpcOptionsRes = new OptionsResponse(registrationOptions);
|
|
37
|
-
export const credential = {
|
|
38
|
-
type: 'public-key',
|
|
39
|
-
id: '1',
|
|
40
|
-
rawId: '1',
|
|
41
|
-
response: {
|
|
42
|
-
transports: [],
|
|
43
|
-
clientDataJSON: '',
|
|
44
|
-
attestationObject: '',
|
|
45
|
-
},
|
|
46
|
-
clientExtensionResults: {},
|
|
47
|
-
};
|
|
48
|
-
export const rpcVerificationReq = new VerificationRequest({
|
|
49
|
-
session,
|
|
50
|
-
credential,
|
|
51
|
-
verifyEmail: O.none(),
|
|
52
|
-
});
|
|
53
|
-
export const rpcVerificationRes = new VerificationResponse({ principal: Fixtures.principal });
|
|
54
|
-
export const createCredentialTest = L.succeed(CreateCredential, CreateCredential.of({ createCredential: () => E.succeed(credential) }));
|
|
55
|
-
export const userServiceTest = L.succeed(UserService, UserService.of({
|
|
56
|
-
isExistingUser: () => E.succeed(false),
|
|
57
|
-
resendVerificationEmail: () => E.succeed(true),
|
|
58
|
-
}));
|
|
59
|
-
export const rpcClientTest = L.succeed(RegistrationClient, RegistrationClient.of({
|
|
60
|
-
getRegistrationOptions: () => E.succeed(rpcOptionsRes),
|
|
61
|
-
verifyRegistrationCredential: () => E.succeed(rpcVerificationRes),
|
|
62
|
-
}));
|
|
63
|
-
export const principal = Fixtures.principal;
|
|
64
|
-
export const capabilitiesTest = Fixtures.capabilitiesTest;
|
|
65
|
-
export const storageServiceTest = Fixtures.storageServiceTest;
|
|
66
|
-
//# sourceMappingURL=register.fixture.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"register.fixture.js","sourceRoot":"","sources":["../../src/registration/register.fixture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE7D,OAAO,EACL,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,mDAAmD,CAAA;AAG1D,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAA4B,MAAM,eAAe,CAAA;AAE1E,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,mBAAmB,GAAwB;IACtD,KAAK,EAAE,gBAAgB;IACvB,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IACzB,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IACzB,gBAAgB,EAAE,CAAC,CAAC,IAAI,EAAE;IAC1B,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE;CACtB,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,cAAc,CAAC,mBAAmB,CAAC,CAAA;AAEpE,MAAM,CAAC,MAAM,mBAAmB,GAAoB;IAClD,OAAO;IACP,SAAS,EAAE;QACT,EAAE,EAAE;YACF,IAAI,EAAE,UAAU;YAChB,EAAE,EAAE,cAAc;SACnB;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,UAAU;YAChB,EAAE,EAAE,MAAM;YACV,WAAW,EAAE,UAAU;SACxB;QACD,SAAS,EAAE,6CAA6C;QACxD,gBAAgB,EAAE,EAAE;KACrB;CACF,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,eAAe,CAAC,mBAAmB,CAAC,CAAA;AAErE,MAAM,CAAC,MAAM,UAAU,GAA2B;IAChD,IAAI,EAAE,YAAY;IAClB,EAAE,EAAE,GAAG;IACP,KAAK,EAAE,GAAG;IACV,QAAQ,EAAE;QACR,UAAU,EAAE,EAAE;QACd,cAAc,EAAE,EAAE;QAClB,iBAAiB,EAAE,EAAE;KACtB;IACD,sBAAsB,EAAE,EAAE;CAC3B,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,mBAAmB,CAAC;IACxD,OAAO;IACP,UAAU;IACV,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE;CACtB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,oBAAoB,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAA;AAE7F,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,OAAO,CAC3C,gBAAgB,EAChB,gBAAgB,CAAC,EAAE,CAAC,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CACvE,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,OAAO,CACtC,WAAW,EACX,WAAW,CAAC,EAAE,CAAC;IACb,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IACtC,uBAAuB,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;CAC/C,CAAC,CACH,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,OAAO,CACpC,kBAAkB,EAClB,kBAAkB,CAAC,EAAE,CAAC;IACpB,sBAAsB,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IACtD,4BAA4B,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC;CAClE,CAAC,CACH,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAA;AAE3C,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,CAAA;AAEzD,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,CAAA"}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* User & passkey registration effects
|
|
3
|
-
*/
|
|
4
|
-
import { parseCreationOptionsFromJSON, } from '@github/webauthn-json/browser-ponyfill';
|
|
5
|
-
import { Context, Effect as E, Layer, flow, pipe } from 'effect';
|
|
6
|
-
import { InternalBrowserError } from '@passlock/shared/dist/error/error.js';
|
|
7
|
-
import * as RPC from '../rpc/passkey/registration.js';
|
|
8
|
-
import { Capabilities } from '../capabilities/capabilities.js';
|
|
9
|
-
import { StorageService } from '../storage/storage.js';
|
|
10
|
-
/* Dependencies */
|
|
11
|
-
export class CreateCredential extends Context.Tag('@services/CreateCredential')() {
|
|
12
|
-
}
|
|
13
|
-
/* Service */
|
|
14
|
-
export class RegistrationService extends Context.Tag('@services/RegistrationService')() {
|
|
15
|
-
}
|
|
16
|
-
/* Utilities */
|
|
17
|
-
const fetchOptions = (request) => {
|
|
18
|
-
return E.gen(function* (_) {
|
|
19
|
-
yield* _(E.logDebug('Making request'));
|
|
20
|
-
const rpcClient = yield* _(RPC.RegistrationClient);
|
|
21
|
-
const { publicKey, session } = yield* _(rpcClient.getRegistrationOptions(request));
|
|
22
|
-
yield* _(E.logDebug('Converting Passlock options to CredentialCreationOptions'));
|
|
23
|
-
const options = yield* _(toCreationOptions({ publicKey }));
|
|
24
|
-
return { options, session };
|
|
25
|
-
});
|
|
26
|
-
};
|
|
27
|
-
const toCreationOptions = (jsonOptions) => {
|
|
28
|
-
return pipe(E.try(() => parseCreationOptionsFromJSON(jsonOptions)), E.mapError(error => new InternalBrowserError({
|
|
29
|
-
message: 'Browser was unable to create credential creation options',
|
|
30
|
-
detail: String(error.error),
|
|
31
|
-
})));
|
|
32
|
-
};
|
|
33
|
-
const verifyCredential = (request) => {
|
|
34
|
-
return E.gen(function* (_) {
|
|
35
|
-
yield* _(E.logDebug('Making request'));
|
|
36
|
-
const rpcClient = yield* _(RPC.RegistrationClient);
|
|
37
|
-
const { principal } = yield* _(rpcClient.verifyRegistrationCredential(request));
|
|
38
|
-
return principal;
|
|
39
|
-
});
|
|
40
|
-
};
|
|
41
|
-
export const registerPasskey = (request) => {
|
|
42
|
-
const effect = E.gen(function* (_) {
|
|
43
|
-
yield* _(E.logInfo('Checking if browser supports Passkeys'));
|
|
44
|
-
const capabilities = yield* _(Capabilities);
|
|
45
|
-
yield* _(capabilities.passkeySupport);
|
|
46
|
-
yield* _(E.logInfo('Fetching registration options from Passlock'));
|
|
47
|
-
const { options, session } = yield* fetchOptions(new RPC.OptionsRequest(request));
|
|
48
|
-
yield* _(E.logInfo('Building new credential'));
|
|
49
|
-
const { createCredential } = yield* _(CreateCredential);
|
|
50
|
-
const credential = yield* _(createCredential(options));
|
|
51
|
-
yield* _(E.logInfo('Storing credential public key in Passlock'));
|
|
52
|
-
const verificationRequest = new RPC.VerificationRequest({
|
|
53
|
-
...request,
|
|
54
|
-
credential,
|
|
55
|
-
session,
|
|
56
|
-
});
|
|
57
|
-
const principal = yield* _(verifyCredential(verificationRequest));
|
|
58
|
-
const storageService = yield* _(StorageService);
|
|
59
|
-
yield* _(storageService.storeToken(principal));
|
|
60
|
-
yield* _(E.logDebug('Storing token in local storage'));
|
|
61
|
-
yield* _(E.logDebug('Defering local token deletion'));
|
|
62
|
-
const delayedClearTokenE = pipe(storageService.clearExpiredToken('passkey'), E.delay('6 minutes'), E.fork);
|
|
63
|
-
yield* _(delayedClearTokenE);
|
|
64
|
-
return principal;
|
|
65
|
-
});
|
|
66
|
-
return E.catchTag(effect, 'InternalBrowserError', e => E.die(e));
|
|
67
|
-
};
|
|
68
|
-
/* Live */
|
|
69
|
-
/* v8 ignore start */
|
|
70
|
-
export const RegistrationServiceLive = Layer.effect(RegistrationService, E.gen(function* (_) {
|
|
71
|
-
const context = yield* _(E.context());
|
|
72
|
-
return RegistrationService.of({
|
|
73
|
-
registerPasskey: flow(registerPasskey, E.provide(context)),
|
|
74
|
-
});
|
|
75
|
-
}));
|
|
76
|
-
/* v8 ignore stop */
|
|
77
|
-
//# sourceMappingURL=register.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/registration/register.ts"],"names":[],"mappings":"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"}
|
package/dist/rpc/client.d.ts
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import * as S from '@effect/schema/Schema';
|
|
2
|
-
import { Context, Effect as E, Layer } from 'effect';
|
|
3
|
-
import { NetworkError } from '@passlock/shared/dist/error/error.js';
|
|
4
|
-
import { RetrySchedule, RpcConfig } from './config.js';
|
|
5
|
-
export type DispatcherResponse = {
|
|
6
|
-
status: number;
|
|
7
|
-
body: object;
|
|
8
|
-
};
|
|
9
|
-
declare const Dispatcher_base: Context.TagClass<Dispatcher, "@rpc/Dispatcher", {
|
|
10
|
-
get: (path: string) => E.Effect<DispatcherResponse, NetworkError>;
|
|
11
|
-
post: (path: string, body: string) => E.Effect<DispatcherResponse, NetworkError>;
|
|
12
|
-
}>;
|
|
13
|
-
/** To send the JSON to the backend */
|
|
14
|
-
export declare class Dispatcher extends Dispatcher_base {
|
|
15
|
-
}
|
|
16
|
-
/** Fires off client requests using fetch */
|
|
17
|
-
/** TODO: Write tests */
|
|
18
|
-
/** TODO: Evaluate platform/http client (if now stable) */
|
|
19
|
-
export declare const DispatcherLive: Layer.Layer<Dispatcher, never, RpcConfig | RetrySchedule>;
|
|
20
|
-
export declare const makeGetRequest: <Res, ResEnc, Err, ErrEnc>(responseSchema: S.Schema<Res, ResEnc, never>, errorSchema: S.Schema<Err, ErrEnc, never>, dispatcher: Dispatcher["Type"]) => (path: string) => E.Effect<Res, Exclude<Exclude<Err, {
|
|
21
|
-
_tag: "ParseError";
|
|
22
|
-
}>, {
|
|
23
|
-
_tag: "NetworkError";
|
|
24
|
-
}>, never>;
|
|
25
|
-
export declare const makePostRequest: <Req, ReqEnc, Res, ResEnc, Err, ErrEnc>(requestSchema: S.Schema<Req, ReqEnc, never>, responseSchema: S.Schema<Res, ResEnc, never>, errorSchema: S.Schema<Err, ErrEnc, never>, dispatcher: Dispatcher["Type"]) => (path: string, request: Req) => E.Effect<Res, Exclude<Exclude<Err, {
|
|
26
|
-
_tag: "ParseError";
|
|
27
|
-
}>, {
|
|
28
|
-
_tag: "NetworkError";
|
|
29
|
-
}>, never>;
|
|
30
|
-
export {};
|
package/dist/rpc/client.js
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import * as S from '@effect/schema/Schema';
|
|
2
|
-
import { Context, Effect as E, Layer, pipe } from 'effect';
|
|
3
|
-
import { NetworkError } from '@passlock/shared/dist/error/error.js';
|
|
4
|
-
import { PASSLOCK_CLIENT_VERSION } from '../version.js';
|
|
5
|
-
import { RetrySchedule, RpcConfig } from './config.js';
|
|
6
|
-
/** To send the JSON to the backend */
|
|
7
|
-
export class Dispatcher extends Context.Tag('@rpc/Dispatcher')() {
|
|
8
|
-
}
|
|
9
|
-
/** Fires off client requests using fetch */
|
|
10
|
-
/** TODO: Write tests */
|
|
11
|
-
/** TODO: Evaluate platform/http client (if now stable) */
|
|
12
|
-
export const DispatcherLive = Layer.effect(Dispatcher, E.gen(function* (_) {
|
|
13
|
-
const { schedule } = yield* _(RetrySchedule);
|
|
14
|
-
const { tenancyId, clientId, endpoint: maybeEndpoint } = yield* _(RpcConfig);
|
|
15
|
-
const parseJson = (res, url) => E.tryPromise({
|
|
16
|
-
try: () => res.json(),
|
|
17
|
-
catch: e => new NetworkError({
|
|
18
|
-
message: 'Unable to extract json response from ' + url,
|
|
19
|
-
detail: String(e),
|
|
20
|
-
}),
|
|
21
|
-
});
|
|
22
|
-
// 400 errors are reflected in the RPC response error channel
|
|
23
|
-
// so in network terms they're still "ok"
|
|
24
|
-
const assertNo500s = (res, url) => {
|
|
25
|
-
if (res.status >= 500) {
|
|
26
|
-
return E.fail(new NetworkError({
|
|
27
|
-
message: 'Received 500 response code from ' + url,
|
|
28
|
-
}));
|
|
29
|
-
}
|
|
30
|
-
else
|
|
31
|
-
return E.void;
|
|
32
|
-
};
|
|
33
|
-
const parseJsonObject = (json) => {
|
|
34
|
-
return typeof json === 'object' && json !== null
|
|
35
|
-
? E.succeed(json)
|
|
36
|
-
: E.fail(new NetworkError({
|
|
37
|
-
message: `Expected JSON object to be returned from RPC endpoint, actual ${typeof json}`,
|
|
38
|
-
}));
|
|
39
|
-
};
|
|
40
|
-
const buildUrl = (_path) => {
|
|
41
|
-
const endpoint = maybeEndpoint || 'https://api.v1.passlock.dev';
|
|
42
|
-
// drop leading /
|
|
43
|
-
const path = _path.replace(/^\//, '');
|
|
44
|
-
return `${endpoint}/${tenancyId}/${path}`;
|
|
45
|
-
};
|
|
46
|
-
return {
|
|
47
|
-
get: (path) => {
|
|
48
|
-
const effect = E.gen(function* (_) {
|
|
49
|
-
const headers = {
|
|
50
|
-
'Accept': 'application/json',
|
|
51
|
-
'X-CLIENT-ID': clientId,
|
|
52
|
-
'X-PASSLOCK-CLIENT-VERSION': PASSLOCK_CLIENT_VERSION,
|
|
53
|
-
};
|
|
54
|
-
const url = buildUrl(path);
|
|
55
|
-
const res = yield* _(E.tryPromise({
|
|
56
|
-
try: () => fetch(url, { method: 'GET', headers }),
|
|
57
|
-
catch: e => new NetworkError({ message: 'Unable to fetch from ' + url, detail: String(e) }),
|
|
58
|
-
}));
|
|
59
|
-
const json = yield* _(parseJson(res, url));
|
|
60
|
-
yield* _(assertNo500s(res, url));
|
|
61
|
-
const jsonObject = yield* _(parseJsonObject(json));
|
|
62
|
-
return { status: res.status, body: jsonObject };
|
|
63
|
-
});
|
|
64
|
-
return E.retry(effect, { schedule });
|
|
65
|
-
},
|
|
66
|
-
post: (_path, body) => {
|
|
67
|
-
const effect = E.gen(function* (_) {
|
|
68
|
-
const headers = {
|
|
69
|
-
'Content-Type': 'application/json',
|
|
70
|
-
'Accept': 'application/json',
|
|
71
|
-
'X-CLIENT-ID': clientId,
|
|
72
|
-
'X-PASSLOCK-CLIENT-VERSION': PASSLOCK_CLIENT_VERSION,
|
|
73
|
-
};
|
|
74
|
-
// drop leading /
|
|
75
|
-
const url = buildUrl(_path);
|
|
76
|
-
const res = yield* _(E.tryPromise({
|
|
77
|
-
try: () => fetch(url, { method: 'POST', headers, body }),
|
|
78
|
-
catch: e => new NetworkError({ message: 'Unable to fetch from ' + url, detail: String(e) }),
|
|
79
|
-
}));
|
|
80
|
-
const json = yield* _(parseJson(res, url));
|
|
81
|
-
yield* _(assertNo500s(res, url));
|
|
82
|
-
const jsonObject = yield* _(parseJsonObject(json));
|
|
83
|
-
return { status: res.status, body: jsonObject };
|
|
84
|
-
});
|
|
85
|
-
return E.retry(effect, { schedule });
|
|
86
|
-
},
|
|
87
|
-
};
|
|
88
|
-
}));
|
|
89
|
-
export const makeGetRequest = (responseSchema, errorSchema, dispatcher) => (path) => pipe(dispatcher.get(path), E.flatMap(res => {
|
|
90
|
-
if (res.status === 200)
|
|
91
|
-
return S.decodeUnknown(responseSchema)(res.body);
|
|
92
|
-
return pipe(S.decodeUnknown(errorSchema)(res.body), E.flatMap(err => E.fail(err)));
|
|
93
|
-
}), E.catchTag('ParseError', e => E.die(e)), E.catchTag('NetworkError', e => E.die(e)));
|
|
94
|
-
export const makePostRequest = (requestSchema, responseSchema, errorSchema, dispatcher) => (path, request) => {
|
|
95
|
-
return pipe(S.encode(requestSchema)(request), E.flatMap(request => dispatcher.post(path, JSON.stringify(request))), E.flatMap(res => {
|
|
96
|
-
if (res.status === 200)
|
|
97
|
-
return S.decodeUnknown(responseSchema)(res.body);
|
|
98
|
-
return pipe(S.decodeUnknown(errorSchema)(res.body), E.flatMap(err => E.fail(err)));
|
|
99
|
-
}), E.catchTag('ParseError', e => E.die(e)), E.catchTag('NetworkError', e => E.die(e)));
|
|
100
|
-
};
|
|
101
|
-
//# sourceMappingURL=client.js.map
|
package/dist/rpc/client.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/rpc/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,uBAAuB,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAA;AAEnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAOtD,sCAAsC;AACtC,MAAM,OAAO,UAAW,SAAQ,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAM3D;CAAG;AAEN,4CAA4C;AAC5C,wBAAwB;AACxB,0DAA0D;AAC1D,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CACxC,UAAU,EACV,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;IAChB,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAA;IAC5C,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAE5E,MAAM,SAAS,GAAG,CAAC,GAAa,EAAE,GAAW,EAAE,EAAE,CAC/C,CAAC,CAAC,UAAU,CAAC;QACX,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,EAAsB;QACzC,KAAK,EAAE,CAAC,CAAC,EAAE,CACT,IAAI,YAAY,CAAC;YACf,OAAO,EAAE,uCAAuC,GAAG,GAAG;YACtD,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;SAClB,CAAC;KACL,CAAC,CAAA;IAEJ,6DAA6D;IAC7D,yCAAyC;IACzC,MAAM,YAAY,GAAG,CAAC,GAAa,EAAE,GAAW,EAAE,EAAE;QAClD,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;YACtB,OAAO,CAAC,CAAC,IAAI,CACX,IAAI,YAAY,CAAC;gBACf,OAAO,EAAE,kCAAkC,GAAG,GAAG;aAClD,CAAC,CACH,CAAA;QACH,CAAC;;YAAM,OAAO,CAAC,CAAC,IAAI,CAAA;IACtB,CAAC,CAAA;IAED,MAAM,eAAe,GAAG,CAAC,IAAa,EAAE,EAAE;QACxC,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;YAC9C,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;YACjB,CAAC,CAAC,CAAC,CAAC,IAAI,CACJ,IAAI,YAAY,CAAC;gBACf,OAAO,EAAE,iEAAiE,OAAO,IAAI,EAAE;aACxF,CAAC,CACH,CAAA;IACP,CAAC,CAAA;IAED,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,EAAE;QACjC,MAAM,QAAQ,GAAG,aAAa,IAAI,6BAA6B,CAAA;QAC/D,iBAAiB;QACjB,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QACrC,OAAO,GAAG,QAAQ,IAAI,SAAS,IAAI,IAAI,EAAE,CAAA;IAC3C,CAAC,CAAA;IAED,OAAO;QACL,GAAG,EAAE,CAAC,IAAY,EAAE,EAAE;YACpB,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/B,MAAM,OAAO,GAAG;oBACd,QAAQ,EAAE,kBAAkB;oBAC5B,aAAa,EAAE,QAAQ;oBACvB,2BAA2B,EAAE,uBAAuB;iBACrD,CAAA;gBAED,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;gBAE1B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAClB,CAAC,CAAC,UAAU,CAAC;oBACX,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;oBACjD,KAAK,EAAE,CAAC,CAAC,EAAE,CACT,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,uBAAuB,GAAG,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;iBAClF,CAAC,CACH,CAAA;gBAED,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;gBAC1C,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;gBAChC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAA;gBAElD,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;YACjD,CAAC,CAAC,CAAA;YAEF,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAA;QACtC,CAAC;QAED,IAAI,EAAE,CAAC,KAAa,EAAE,IAAY,EAAE,EAAE;YACpC,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/B,MAAM,OAAO,GAAG;oBACd,cAAc,EAAE,kBAAkB;oBAClC,QAAQ,EAAE,kBAAkB;oBAC5B,aAAa,EAAE,QAAQ;oBACvB,2BAA2B,EAAE,uBAAuB;iBACrD,CAAA;gBAED,iBAAiB;gBACjB,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;gBAE3B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAClB,CAAC,CAAC,UAAU,CAAC;oBACX,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;oBACxD,KAAK,EAAE,CAAC,CAAC,EAAE,CACT,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,uBAAuB,GAAG,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;iBAClF,CAAC,CACH,CAAA;gBAED,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;gBAC1C,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;gBAChC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAA;gBAElD,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;YACjD,CAAC,CAAC,CAAA;YAEF,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAA;QACtC,CAAC;KACF,CAAA;AACH,CAAC,CAAC,CACH,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GACzB,CACE,cAA4C,EAC5C,WAAyC,EACzC,UAA8B,EAC9B,EAAE,CACJ,CAAC,IAAY,EAAE,EAAE,CACf,IAAI,CACF,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EACpB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;IACd,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACxE,OAAO,IAAI,CACT,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EACtC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAC9B,CAAA;AACH,CAAC,CAAC,EACF,CAAC,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EACvC,CAAC,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAC1C,CAAA;AAEL,MAAM,CAAC,MAAM,eAAe,GAC1B,CACE,aAA2C,EAC3C,cAA4C,EAC5C,WAAyC,EACzC,UAA8B,EAC9B,EAAE,CACJ,CAAC,IAAY,EAAE,OAAY,EAAE,EAAE;IAC7B,OAAO,IAAI,CACT,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAChC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EACpE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACd,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACxE,OAAO,IAAI,CACT,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EACtC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAC9B,CAAA;IACH,CAAC,CAAC,EACF,CAAC,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EACvC,CAAC,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAC1C,CAAA;AACH,CAAC,CAAA"}
|
package/dist/rpc/config.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { Schedule } from 'effect';
|
|
2
|
-
import { Context } from 'effect';
|
|
3
|
-
declare const RpcConfig_base: Context.TagClass<RpcConfig, "@rpc/RpcConfig", {
|
|
4
|
-
endpoint?: string;
|
|
5
|
-
tenancyId: string;
|
|
6
|
-
clientId: string;
|
|
7
|
-
}>;
|
|
8
|
-
export declare class RpcConfig extends RpcConfig_base {
|
|
9
|
-
}
|
|
10
|
-
declare const RetrySchedule_base: Context.TagClass<RetrySchedule, "@rpc/RetrySchedule", {
|
|
11
|
-
schedule: Schedule.Schedule<unknown>;
|
|
12
|
-
}>;
|
|
13
|
-
export declare class RetrySchedule extends RetrySchedule_base {
|
|
14
|
-
}
|
|
15
|
-
export {};
|
package/dist/rpc/config.js
DELETED
package/dist/rpc/config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/rpc/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAEhC,MAAM,OAAO,SAAU,SAAQ,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAOzD;CAAG;AAEN,MAAM,OAAO,aAAc,SAAQ,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAKjE;CAAG"}
|