@lockerpm/desktop-service 1.0.0
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 +98 -0
- package/lib/cjs/abstractions/api.service.js +2 -0
- package/lib/cjs/abstractions/crypto.service.js +147 -0
- package/lib/cjs/abstractions/errors.js +99 -0
- package/lib/cjs/abstractions/event.service.js +2 -0
- package/lib/cjs/abstractions/index.js +2 -0
- package/lib/cjs/abstractions/socket.service.js +11 -0
- package/lib/cjs/abstractions/storage.service.js +2 -0
- package/lib/cjs/index.js +243 -0
- package/lib/cjs/misc/config.js +15 -0
- package/lib/cjs/misc/utils.js +37 -0
- package/lib/cjs/proto/google/api/annotations.js +2 -0
- package/lib/cjs/proto/google/api/http.js +477 -0
- package/lib/cjs/proto/google/protobuf/descriptor.js +4873 -0
- package/lib/cjs/proto/locker-service-grpc.js +1915 -0
- package/lib/cjs/services/api.service.js +182 -0
- package/lib/cjs/services/cache.service.js +50 -0
- package/lib/cjs/services/core-crypto.service.js +193 -0
- package/lib/cjs/services/crypto.service.js +101 -0
- package/lib/cjs/services/event.service.js +31 -0
- package/lib/cjs/services/fido.service.js +136 -0
- package/lib/cjs/services/grpc.service.js +130 -0
- package/lib/cjs/services/log.service.js +30 -0
- package/lib/cjs/services/pairing.service.js +122 -0
- package/lib/cjs/services/socket.service.js +280 -0
- package/lib/cjs/services/user.service.js +134 -0
- package/lib/cjs/types/abstractions/api.service.d.ts +40 -0
- package/lib/cjs/types/abstractions/api.service.d.ts.map +1 -0
- package/lib/cjs/types/abstractions/crypto.service.d.ts +46 -0
- package/lib/cjs/types/abstractions/crypto.service.d.ts.map +1 -0
- package/lib/cjs/types/abstractions/errors.d.ts +73 -0
- package/lib/cjs/types/abstractions/errors.d.ts.map +1 -0
- package/lib/cjs/types/abstractions/event.service.d.ts +23 -0
- package/lib/cjs/types/abstractions/event.service.d.ts.map +1 -0
- package/lib/cjs/types/abstractions/index.d.ts +56 -0
- package/lib/cjs/types/abstractions/index.d.ts.map +1 -0
- package/lib/cjs/types/abstractions/socket.service.d.ts +52 -0
- package/lib/cjs/types/abstractions/socket.service.d.ts.map +1 -0
- package/lib/cjs/types/abstractions/storage.service.d.ts +6 -0
- package/lib/cjs/types/abstractions/storage.service.d.ts.map +1 -0
- package/lib/cjs/types/index.d.ts +164 -0
- package/lib/cjs/types/index.d.ts.map +1 -0
- package/lib/cjs/types/misc/config.d.ts +6 -0
- package/lib/cjs/types/misc/config.d.ts.map +1 -0
- package/lib/cjs/types/misc/utils.d.ts +21 -0
- package/lib/cjs/types/misc/utils.d.ts.map +1 -0
- package/lib/cjs/types/proto/google/api/annotations.d.ts +2 -0
- package/lib/cjs/types/proto/google/api/annotations.d.ts.map +1 -0
- package/lib/cjs/types/proto/google/api/http.d.ts +195 -0
- package/lib/cjs/types/proto/google/api/http.d.ts.map +1 -0
- package/lib/cjs/types/proto/google/protobuf/descriptor.d.ts +3409 -0
- package/lib/cjs/types/proto/google/protobuf/descriptor.d.ts.map +1 -0
- package/lib/cjs/types/proto/locker-service-grpc.d.ts +622 -0
- package/lib/cjs/types/proto/locker-service-grpc.d.ts.map +1 -0
- package/lib/cjs/types/services/api.service.d.ts +37 -0
- package/lib/cjs/types/services/api.service.d.ts.map +1 -0
- package/lib/cjs/types/services/cache.service.d.ts +10 -0
- package/lib/cjs/types/services/cache.service.d.ts.map +1 -0
- package/lib/cjs/types/services/core-crypto.service.d.ts +17 -0
- package/lib/cjs/types/services/core-crypto.service.d.ts.map +1 -0
- package/lib/cjs/types/services/crypto.service.d.ts +23 -0
- package/lib/cjs/types/services/crypto.service.d.ts.map +1 -0
- package/lib/cjs/types/services/event.service.d.ts +14 -0
- package/lib/cjs/types/services/event.service.d.ts.map +1 -0
- package/lib/cjs/types/services/fido.service.d.ts +40 -0
- package/lib/cjs/types/services/fido.service.d.ts.map +1 -0
- package/lib/cjs/types/services/grpc.service.d.ts +34 -0
- package/lib/cjs/types/services/grpc.service.d.ts.map +1 -0
- package/lib/cjs/types/services/log.service.d.ts +13 -0
- package/lib/cjs/types/services/log.service.d.ts.map +1 -0
- package/lib/cjs/types/services/pairing.service.d.ts +37 -0
- package/lib/cjs/types/services/pairing.service.d.ts.map +1 -0
- package/lib/cjs/types/services/socket.service.d.ts +39 -0
- package/lib/cjs/types/services/socket.service.d.ts.map +1 -0
- package/lib/cjs/types/services/user.service.d.ts +32 -0
- package/lib/cjs/types/services/user.service.d.ts.map +1 -0
- package/lib/cjs/types/usecases/fido.d.ts +54 -0
- package/lib/cjs/types/usecases/fido.d.ts.map +1 -0
- package/lib/cjs/usecases/fido.js +227 -0
- package/lib/esm/abstractions/api.service.js +2 -0
- package/lib/esm/abstractions/crypto.service.js +165 -0
- package/lib/esm/abstractions/errors.js +100 -0
- package/lib/esm/abstractions/event.service.js +2 -0
- package/lib/esm/abstractions/index.js +2 -0
- package/lib/esm/abstractions/socket.service.js +11 -0
- package/lib/esm/abstractions/storage.service.js +2 -0
- package/lib/esm/index.mjs +227 -0
- package/lib/esm/misc/config.js +15 -0
- package/lib/esm/misc/utils.js +37 -0
- package/lib/esm/proto/google/api/annotations.js +2 -0
- package/lib/esm/proto/google/api/http.js +468 -0
- package/lib/esm/proto/google/protobuf/descriptor.js +4830 -0
- package/lib/esm/proto/locker-service-grpc.js +1892 -0
- package/lib/esm/services/api.service.js +177 -0
- package/lib/esm/services/cache.service.js +52 -0
- package/lib/esm/services/core-crypto.service.js +164 -0
- package/lib/esm/services/crypto.service.js +83 -0
- package/lib/esm/services/event.service.js +33 -0
- package/lib/esm/services/fido.service.js +139 -0
- package/lib/esm/services/grpc.service.js +119 -0
- package/lib/esm/services/log.service.js +31 -0
- package/lib/esm/services/pairing.service.js +107 -0
- package/lib/esm/services/socket.service.js +265 -0
- package/lib/esm/services/user.service.js +116 -0
- package/lib/esm/types/abstractions/api.service.d.ts +40 -0
- package/lib/esm/types/abstractions/api.service.d.ts.map +1 -0
- package/lib/esm/types/abstractions/crypto.service.d.ts +46 -0
- package/lib/esm/types/abstractions/crypto.service.d.ts.map +1 -0
- package/lib/esm/types/abstractions/errors.d.ts +73 -0
- package/lib/esm/types/abstractions/errors.d.ts.map +1 -0
- package/lib/esm/types/abstractions/event.service.d.ts +23 -0
- package/lib/esm/types/abstractions/event.service.d.ts.map +1 -0
- package/lib/esm/types/abstractions/index.d.ts +56 -0
- package/lib/esm/types/abstractions/index.d.ts.map +1 -0
- package/lib/esm/types/abstractions/socket.service.d.ts +52 -0
- package/lib/esm/types/abstractions/socket.service.d.ts.map +1 -0
- package/lib/esm/types/abstractions/storage.service.d.ts +6 -0
- package/lib/esm/types/abstractions/storage.service.d.ts.map +1 -0
- package/lib/esm/types/index.d.ts +164 -0
- package/lib/esm/types/index.d.ts.map +1 -0
- package/lib/esm/types/misc/config.d.ts +6 -0
- package/lib/esm/types/misc/config.d.ts.map +1 -0
- package/lib/esm/types/misc/utils.d.ts +21 -0
- package/lib/esm/types/misc/utils.d.ts.map +1 -0
- package/lib/esm/types/proto/google/api/annotations.d.ts +2 -0
- package/lib/esm/types/proto/google/api/annotations.d.ts.map +1 -0
- package/lib/esm/types/proto/google/api/http.d.ts +195 -0
- package/lib/esm/types/proto/google/api/http.d.ts.map +1 -0
- package/lib/esm/types/proto/google/protobuf/descriptor.d.ts +3409 -0
- package/lib/esm/types/proto/google/protobuf/descriptor.d.ts.map +1 -0
- package/lib/esm/types/proto/locker-service-grpc.d.ts +622 -0
- package/lib/esm/types/proto/locker-service-grpc.d.ts.map +1 -0
- package/lib/esm/types/services/api.service.d.ts +37 -0
- package/lib/esm/types/services/api.service.d.ts.map +1 -0
- package/lib/esm/types/services/cache.service.d.ts +10 -0
- package/lib/esm/types/services/cache.service.d.ts.map +1 -0
- package/lib/esm/types/services/core-crypto.service.d.ts +17 -0
- package/lib/esm/types/services/core-crypto.service.d.ts.map +1 -0
- package/lib/esm/types/services/crypto.service.d.ts +23 -0
- package/lib/esm/types/services/crypto.service.d.ts.map +1 -0
- package/lib/esm/types/services/event.service.d.ts +14 -0
- package/lib/esm/types/services/event.service.d.ts.map +1 -0
- package/lib/esm/types/services/fido.service.d.ts +40 -0
- package/lib/esm/types/services/fido.service.d.ts.map +1 -0
- package/lib/esm/types/services/grpc.service.d.ts +34 -0
- package/lib/esm/types/services/grpc.service.d.ts.map +1 -0
- package/lib/esm/types/services/log.service.d.ts +13 -0
- package/lib/esm/types/services/log.service.d.ts.map +1 -0
- package/lib/esm/types/services/pairing.service.d.ts +37 -0
- package/lib/esm/types/services/pairing.service.d.ts.map +1 -0
- package/lib/esm/types/services/socket.service.d.ts +39 -0
- package/lib/esm/types/services/socket.service.d.ts.map +1 -0
- package/lib/esm/types/services/user.service.d.ts +32 -0
- package/lib/esm/types/services/user.service.d.ts.map +1 -0
- package/lib/esm/types/usecases/fido.d.ts +54 -0
- package/lib/esm/types/usecases/fido.d.ts.map +1 -0
- package/lib/esm/usecases/fido.js +201 -0
- package/package.json +55 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { LogService } from './log.service';
|
|
2
|
+
import { OS } from '../misc/utils';
|
|
3
|
+
import { BackupKey, GetPublicPwlCredentialResponse, GetReleasesResponse, SetBackupPwlParams, PasswordlessType } from '../abstractions/api.service';
|
|
4
|
+
export declare class ApiService {
|
|
5
|
+
baseUrl: string;
|
|
6
|
+
token: string;
|
|
7
|
+
headers: {
|
|
8
|
+
[key: string]: string;
|
|
9
|
+
};
|
|
10
|
+
private logger;
|
|
11
|
+
constructor(params: {
|
|
12
|
+
baseUrl: string;
|
|
13
|
+
logger: LogService;
|
|
14
|
+
headers?: {
|
|
15
|
+
[key: string]: string;
|
|
16
|
+
};
|
|
17
|
+
});
|
|
18
|
+
setToken(token: string): void;
|
|
19
|
+
getPasswordlessCredentials(email: string): Promise<GetPublicPwlCredentialResponse>;
|
|
20
|
+
getReleases(os: OS): Promise<GetReleasesResponse>;
|
|
21
|
+
setPasswordlessCredential(params: {
|
|
22
|
+
credentialId: string;
|
|
23
|
+
name: string;
|
|
24
|
+
type: PasswordlessType;
|
|
25
|
+
random?: string;
|
|
26
|
+
}): Promise<{
|
|
27
|
+
random: string;
|
|
28
|
+
}>;
|
|
29
|
+
deletePasswordlessCredential(): Promise<void>;
|
|
30
|
+
listBackupPasswordlessCredentials(): Promise<BackupKey[]>;
|
|
31
|
+
setBackupPasswordlessCredential(payload: SetBackupPwlParams): Promise<{
|
|
32
|
+
id: string;
|
|
33
|
+
}>;
|
|
34
|
+
deleteBackupPasswordlessCredential(id: string): Promise<void>;
|
|
35
|
+
private logDebug;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=api.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.service.d.ts","sourceRoot":"","sources":["../../../../src/services/api.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAA;AAClC,OAAO,EACL,SAAS,EACT,8BAA8B,EAC9B,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,6BAA6B,CAAA;AAEpC,qBAAa,UAAU;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAA;IAElC,OAAO,CAAC,MAAM,CAAY;gBAEd,MAAM,EAAE;QAClB,OAAO,EAAE,MAAM,CAAA;QACf,MAAM,EAAE,UAAU,CAAA;QAClB,OAAO,CAAC,EAAE;YAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,CAAA;KACpC;IAQD,QAAQ,CAAC,KAAK,EAAE,MAAM;IAIhB,0BAA0B,CAAC,KAAK,EAAE,MAAM;IAqBxC,WAAW,CAAC,EAAE,EAAE,EAAE;IAkBlB,yBAAyB,CAAC,MAAM,EAAE;QACtC,YAAY,EAAE,MAAM,CAAA;QACpB,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,gBAAgB,CAAA;QACtB,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB;gBAsByB,MAAM;;IAQ1B,4BAA4B;IAwB5B,iCAAiC;IAuBjC,+BAA+B,CAAC,OAAO,EAAE,kBAAkB;YAapC,MAAM;;IAM7B,kCAAkC,CAAC,EAAE,EAAE,MAAM;IAmBnD,OAAO,CAAC,QAAQ;CAMjB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { LogService } from './log.service';
|
|
2
|
+
import { GRPCService } from './grpc.service';
|
|
3
|
+
export declare class CacheService {
|
|
4
|
+
private logger;
|
|
5
|
+
private grpc;
|
|
6
|
+
constructor(logger: LogService, grpcService: GRPCService);
|
|
7
|
+
getCache(): Promise<any>;
|
|
8
|
+
setCache(data: any): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=cache.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.service.d.ts","sourceRoot":"","sources":["../../../../src/services/cache.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAQ5C,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,IAAI,CAAa;gBAEb,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW;IAKxD,QAAQ;IAmBR,QAAQ,CAAC,IAAI,EAAE,GAAG;CAenB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { KdfType, SymmetricCryptoKey, EncString } from '../abstractions/crypto.service';
|
|
2
|
+
export declare class CoreCryptoService {
|
|
3
|
+
makeKey(password: string, salt: string, kdf: KdfType, kdfIterations: number): Promise<SymmetricCryptoKey>;
|
|
4
|
+
hashPassword(password: string, key: SymmetricCryptoKey): Promise<string>;
|
|
5
|
+
remakeEncKey(currentEncKey: ArrayBuffer, key: SymmetricCryptoKey): Promise<[SymmetricCryptoKey, EncString]>;
|
|
6
|
+
private pbkdf2;
|
|
7
|
+
private toBuf;
|
|
8
|
+
private toWebCryptoAlgorithm;
|
|
9
|
+
private stretchKey;
|
|
10
|
+
private hkdfExpand;
|
|
11
|
+
private hmac;
|
|
12
|
+
private encrypt;
|
|
13
|
+
private aesEncrypt;
|
|
14
|
+
private randomBytes;
|
|
15
|
+
private _aesEncrypt;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=core-crypto.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-crypto.service.d.ts","sourceRoot":"","sources":["../../../../src/services/core-crypto.service.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,OAAO,EACP,kBAAkB,EAClB,SAAS,EAEV,MAAM,gCAAgC,CAAA;AAKvC,qBAAa,iBAAiB;IACtB,OAAO,CACX,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,OAAO,EACZ,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,kBAAkB,CAAC;IAexB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IAQxE,YAAY,CAChB,aAAa,EAAE,WAAW,EAC1B,GAAG,EAAE,kBAAkB,GACtB,OAAO,CAAC,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;YAe7B,MAAM;IA2BpB,OAAO,CAAC,KAAK;IAUb,OAAO,CAAC,oBAAoB;YAOd,UAAU;YASV,UAAU;YAmCV,IAAI;YAaJ,OAAO;YAkBP,UAAU;IAgBxB,OAAO,CAAC,WAAW;YAIL,WAAW;CAU1B"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import c from 'crypto';
|
|
3
|
+
import { CoreCryptoService } from './core-crypto.service';
|
|
4
|
+
type CryptoKey = c.webcrypto.CryptoKey;
|
|
5
|
+
export declare class CryptoService {
|
|
6
|
+
core: CoreCryptoService;
|
|
7
|
+
constructor();
|
|
8
|
+
createECDHKeyPair(): Promise<{
|
|
9
|
+
publicKey: string;
|
|
10
|
+
privateKey: c.webcrypto.CryptoKey;
|
|
11
|
+
}>;
|
|
12
|
+
createEncKey(theirPublicKey: string, ourPrivateKey: CryptoKey): Promise<{
|
|
13
|
+
encKey: string;
|
|
14
|
+
approveCode: string;
|
|
15
|
+
}>;
|
|
16
|
+
aesEncrypt(data: string, key: string): Promise<string>;
|
|
17
|
+
aesDecrypt(data: string, key: string): Promise<string>;
|
|
18
|
+
getFileChecksum(path: string): Promise<string>;
|
|
19
|
+
getRandomValues(length: number): Uint8Array;
|
|
20
|
+
private createECDHSharedSecret;
|
|
21
|
+
}
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=crypto.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.service.d.ts","sourceRoot":"","sources":["../../../../src/services/crypto.service.ts"],"names":[],"mappings":";AAAA,OAAO,CAAC,MAAM,QAAQ,CAAA;AAItB,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAEzD,KAAK,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;AAGtC,qBAAa,aAAa;IACxB,IAAI,EAAE,iBAAiB,CAAA;;IAMjB,iBAAiB;;;;IASjB,YAAY,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS;;;;IAS7D,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAiBpC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAiB1C,eAAe,CAAC,IAAI,EAAE,MAAM;IAY5B,eAAe,CAAC,MAAM,EAAE,MAAM;YAMhB,sBAAsB;CAkBrC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import EventEmitter from 'eventemitter3';
|
|
2
|
+
import { LogService } from './log.service';
|
|
3
|
+
import { EventArguments, Event } from '../abstractions/event.service';
|
|
4
|
+
export declare class EventService {
|
|
5
|
+
private events;
|
|
6
|
+
private logger;
|
|
7
|
+
constructor(logger: LogService);
|
|
8
|
+
emit<E extends Event>(event: E, args: EventArguments[E]): boolean;
|
|
9
|
+
on<E extends Event>(event: E, handler: (args: EventArguments[E]) => void): EventEmitter<string | symbol, any>;
|
|
10
|
+
once<E extends Event>(event: E, handler: (args: EventArguments[E]) => void): EventEmitter<string | symbol, any>;
|
|
11
|
+
removeListener<E extends Event>(event: E, handler: (args: EventArguments[E]) => void): void;
|
|
12
|
+
removeAllListeners(): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=event.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event.service.d.ts","sourceRoot":"","sources":["../../../../src/services/event.service.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAA;AAErE,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAY;gBAEd,MAAM,EAAE,UAAU;IAK9B,IAAI,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;IAMvD,EAAE,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI;IAIxE,IAAI,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI;IAI1E,cAAc,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI;IAIpF,kBAAkB;CAGnB"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { LogService } from './log.service';
|
|
2
|
+
import { EventService } from './event.service';
|
|
3
|
+
import { GRPCService } from './grpc.service';
|
|
4
|
+
export declare class FidoService {
|
|
5
|
+
private logger;
|
|
6
|
+
private eventEmitter;
|
|
7
|
+
private grpc;
|
|
8
|
+
constructor(logger: LogService, eventEmitter: EventService, grpcService: GRPCService);
|
|
9
|
+
getDeviceList(): Promise<{
|
|
10
|
+
name: string;
|
|
11
|
+
path: string;
|
|
12
|
+
}[]>;
|
|
13
|
+
setSelectedDevice(path: string): Promise<boolean>;
|
|
14
|
+
listCredentials(params: {
|
|
15
|
+
pin: string;
|
|
16
|
+
}): Promise<{
|
|
17
|
+
name: string;
|
|
18
|
+
displayName: string;
|
|
19
|
+
credentialId: string;
|
|
20
|
+
}[]>;
|
|
21
|
+
makeCredential(params: {
|
|
22
|
+
email: string;
|
|
23
|
+
name: string;
|
|
24
|
+
pin?: string;
|
|
25
|
+
}): Promise<{
|
|
26
|
+
credentialId: string | undefined;
|
|
27
|
+
}>;
|
|
28
|
+
deleteCredential(params: {
|
|
29
|
+
credentialId: string;
|
|
30
|
+
pin: string;
|
|
31
|
+
}): Promise<boolean>;
|
|
32
|
+
getHmacSecret(params: {
|
|
33
|
+
credentialId: string;
|
|
34
|
+
salt: string;
|
|
35
|
+
pin?: string;
|
|
36
|
+
}): Promise<{
|
|
37
|
+
secret: string;
|
|
38
|
+
}>;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=fido.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fido.service.d.ts","sourceRoot":"","sources":["../../../../src/services/fido.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAY5C,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,IAAI,CAAa;gBAEb,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW;IAMpF,aAAa;cAGgB,MAAM;cAAQ,MAAM;;IAqBjD,iBAAiB,CAAC,IAAI,EAAE,MAAM;IAgB9B,eAAe,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE;cAIV,MAAM;qBAAe,MAAM;sBAAgB,MAAM;;IAoB9E,cAAc,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE;sBAO/B,MAAM,GAAG,SAAS;;IAcvD,gBAAgB,CAAC,MAAM,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE;IAiB9D,aAAa,CAAC,MAAM,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE;gBAW3C,MAAM;;CAatC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { locker_service_grpc } from '../proto/locker-service-grpc';
|
|
3
|
+
import { LogService } from './log.service';
|
|
4
|
+
import { CryptoService } from './crypto.service';
|
|
5
|
+
import { ApiService } from './api.service';
|
|
6
|
+
export declare class GRPCService {
|
|
7
|
+
client: locker_service_grpc.LockerServiceClient;
|
|
8
|
+
currentPort: number;
|
|
9
|
+
private logger;
|
|
10
|
+
private crypto;
|
|
11
|
+
private api;
|
|
12
|
+
private serviceChecksums;
|
|
13
|
+
private credentials;
|
|
14
|
+
private unsafe;
|
|
15
|
+
private serviceAlias;
|
|
16
|
+
constructor(services: {
|
|
17
|
+
logger: LogService;
|
|
18
|
+
cryptoService: CryptoService;
|
|
19
|
+
apiService: ApiService;
|
|
20
|
+
}, options: {
|
|
21
|
+
ssl?: {
|
|
22
|
+
rootCert: Buffer;
|
|
23
|
+
};
|
|
24
|
+
unsafe?: boolean;
|
|
25
|
+
serviceAlias: string;
|
|
26
|
+
});
|
|
27
|
+
get isReady(): boolean;
|
|
28
|
+
initConnection(): Promise<void>;
|
|
29
|
+
private pingService;
|
|
30
|
+
private testConnection;
|
|
31
|
+
private validateConnection;
|
|
32
|
+
private loadServiceChecksums;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=grpc.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grpc.service.d.ts","sourceRoot":"","sources":["../../../../src/services/grpc.service.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAK1C,qBAAa,WAAW;IACtB,MAAM,EAAE,mBAAmB,CAAC,mBAAmB,CAAA;IAC/C,WAAW,SAAI;IAEf,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,GAAG,CAAY;IAEvB,OAAO,CAAC,gBAAgB,CAAe;IACvC,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAK;gBAGvB,QAAQ,EAAE;QACR,MAAM,EAAE,UAAU,CAAA;QAClB,aAAa,EAAE,aAAa,CAAA;QAC5B,UAAU,EAAE,UAAU,CAAA;KACvB,EACD,OAAO,EAAE;QACP,GAAG,CAAC,EAAE;YACJ,QAAQ,EAAE,MAAM,CAAA;SACjB,CAAA;QACD,MAAM,CAAC,EAAE,OAAO,CAAA;QAChB,YAAY,EAAE,MAAM,CAAA;KACrB;IAmBH,IAAI,OAAO,YAEV;IAEK,cAAc;YA2BN,WAAW;IAkBzB,OAAO,CAAC,cAAc;YAgBR,kBAAkB;YAgBlB,oBAAoB;CAKnC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare enum LogLevel {
|
|
2
|
+
NONE = 0,
|
|
3
|
+
ERROR = 1,
|
|
4
|
+
DEBUG = 2
|
|
5
|
+
}
|
|
6
|
+
export declare class LogService {
|
|
7
|
+
logLevel: LogLevel;
|
|
8
|
+
constructor(logLevel?: LogLevel);
|
|
9
|
+
setLogLevel(level: LogLevel): void;
|
|
10
|
+
debug(e: any): void;
|
|
11
|
+
error(e: any): void;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=log.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.service.d.ts","sourceRoot":"","sources":["../../../../src/services/log.service.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IAClB,IAAI,IAAI;IACR,KAAK,IAAI;IACT,KAAK,IAAI;CACV;AAED,qBAAa,UAAU;IACrB,QAAQ,EAAE,QAAQ,CAAA;gBAEN,QAAQ,CAAC,EAAE,QAAQ;IAI/B,WAAW,CAAC,KAAK,EAAE,QAAQ;IAI3B,KAAK,CAAC,CAAC,EAAE,GAAG;IAOZ,KAAK,CAAC,CAAC,EAAE,GAAG;CAMb"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ClientType } from '../abstractions';
|
|
2
|
+
import { IStorageService } from '../abstractions/storage.service';
|
|
3
|
+
import { CryptoService } from './crypto.service';
|
|
4
|
+
import { EventService } from './event.service';
|
|
5
|
+
import { GRPCService } from './grpc.service';
|
|
6
|
+
import { LogService } from './log.service';
|
|
7
|
+
type ClientInfo = {
|
|
8
|
+
encKey: string;
|
|
9
|
+
confirmed: boolean;
|
|
10
|
+
};
|
|
11
|
+
export declare class PairingService {
|
|
12
|
+
private crypto;
|
|
13
|
+
private storage;
|
|
14
|
+
private events;
|
|
15
|
+
private logger;
|
|
16
|
+
private grpc;
|
|
17
|
+
private clients;
|
|
18
|
+
isReady: boolean;
|
|
19
|
+
constructor(services: {
|
|
20
|
+
cryptoService: CryptoService;
|
|
21
|
+
eventService: EventService;
|
|
22
|
+
storageService: IStorageService;
|
|
23
|
+
grpcService: GRPCService;
|
|
24
|
+
logger: LogService;
|
|
25
|
+
});
|
|
26
|
+
getClient(clientId: string): ClientInfo;
|
|
27
|
+
isClientConfirmed(clientId: string): boolean;
|
|
28
|
+
getResponseForPairingRequest(clientId: string, publicKey: string, clientType: ClientType): Promise<import("../abstractions/socket.service").OutgoingEnvelop<import("../abstractions/socket.service").OutgoingMessageType>>;
|
|
29
|
+
confirmPairingClient(clientId: string, keepInKeyring?: boolean): Promise<void>;
|
|
30
|
+
encryptDataForClient(clientId: string, data: string): Promise<string>;
|
|
31
|
+
decryptDataFromClient(clientId: string, data: string): Promise<string>;
|
|
32
|
+
private registerClientOnService;
|
|
33
|
+
private loadFromStore;
|
|
34
|
+
private saveToStore;
|
|
35
|
+
}
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=pairing.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pairing.service.d.ts","sourceRoot":"","sources":["../../../../src/services/pairing.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAG5C,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAI1C,KAAK,UAAU,GAAG;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,IAAI,CAAa;IAEzB,OAAO,CAAC,OAAO,CAET;IAEN,OAAO,UAAQ;gBAEH,QAAQ,EAAE;QACpB,aAAa,EAAE,aAAa,CAAA;QAC5B,YAAY,EAAE,YAAY,CAAA;QAC1B,cAAc,EAAE,eAAe,CAAA;QAC/B,WAAW,EAAE,WAAW,CAAA;QACxB,MAAM,EAAE,UAAU,CAAA;KACnB;IAUD,SAAS,CAAC,QAAQ,EAAE,MAAM;IAI1B,iBAAiB,CAAC,QAAQ,EAAE,MAAM;IAI5B,4BAA4B,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU;IAkBxF,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,OAAO;IAS9D,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IASnD,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAS1D,OAAO,CAAC,uBAAuB;YAmBjB,aAAa;IAc3B,OAAO,CAAC,WAAW;CAGpB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { LogService } from './log.service';
|
|
3
|
+
import { PairingService } from './pairing.service';
|
|
4
|
+
import { OutgoingEnvelop, OutgoingMessageType } from '../abstractions/socket.service';
|
|
5
|
+
import { UserService } from './user.service';
|
|
6
|
+
import { EventService } from './event.service';
|
|
7
|
+
export declare class SocketService {
|
|
8
|
+
private logger;
|
|
9
|
+
private pairingService;
|
|
10
|
+
private userService;
|
|
11
|
+
private eventService;
|
|
12
|
+
private sslConfig;
|
|
13
|
+
private server;
|
|
14
|
+
private clients;
|
|
15
|
+
private serviceAlias;
|
|
16
|
+
currentPort: number;
|
|
17
|
+
currentSslPort: number;
|
|
18
|
+
constructor(params: {
|
|
19
|
+
logger: LogService;
|
|
20
|
+
pairingService: PairingService;
|
|
21
|
+
userService: UserService;
|
|
22
|
+
eventService: EventService;
|
|
23
|
+
ssl?: {
|
|
24
|
+
cert: Buffer;
|
|
25
|
+
key: Buffer;
|
|
26
|
+
};
|
|
27
|
+
serviceAlias: string;
|
|
28
|
+
});
|
|
29
|
+
get isReady(): boolean;
|
|
30
|
+
sendMessageToClient(clientId: string, envelop: OutgoingEnvelop<OutgoingMessageType>): Promise<void>;
|
|
31
|
+
broadcastMessageToAll(envelop: OutgoingEnvelop<OutgoingMessageType>): void;
|
|
32
|
+
broadcastToAllExcept(clientId: string, envelop: OutgoingEnvelop<OutgoingMessageType>): void;
|
|
33
|
+
initSocket(): Promise<void>;
|
|
34
|
+
initSslSocket(): Promise<void>;
|
|
35
|
+
private initSocketOnPort;
|
|
36
|
+
private sendMessage;
|
|
37
|
+
private handleMessage;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=socket.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket.service.d.ts","sourceRoot":"","sources":["../../../../src/services/socket.service.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAIL,eAAe,EACf,mBAAmB,EAEpB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAM9C,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,YAAY,CAAc;IAElC,OAAO,CAAC,SAAS,CAKQ;IACzB,OAAO,CAAC,MAAM,CAAyC;IACvD,OAAO,CAAC,OAAO,CAET;IACN,OAAO,CAAC,YAAY,CAAK;IAEzB,WAAW,SAAI;IACf,cAAc,SAAI;gBAEN,MAAM,EAAE;QAClB,MAAM,EAAE,UAAU,CAAA;QAClB,cAAc,EAAE,cAAc,CAAA;QAC9B,WAAW,EAAE,WAAW,CAAA;QACxB,YAAY,EAAE,YAAY,CAAA;QAC1B,GAAG,CAAC,EAAE;YACJ,IAAI,EAAE,MAAM,CAAA;YACZ,GAAG,EAAE,MAAM,CAAA;SACZ,CAAA;QACD,YAAY,EAAE,MAAM,CAAA;KACrB;IAaD,IAAI,OAAO,YAIV;IAEK,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,CAAC,mBAAmB,CAAC;IAsBzF,qBAAqB,CAAC,OAAO,EAAE,eAAe,CAAC,mBAAmB,CAAC;IAWnE,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,CAAC,mBAAmB,CAAC;IAa9E,UAAU;IAeV,aAAa;IAiBnB,OAAO,CAAC,gBAAgB;IAkFxB,OAAO,CAAC,WAAW;YAKL,aAAa;CAoG5B"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { IStorageService } from '../abstractions/storage.service';
|
|
2
|
+
import { GRPCService } from './grpc.service';
|
|
3
|
+
import { LogService } from './log.service';
|
|
4
|
+
export type UserCredentials = {
|
|
5
|
+
email: string;
|
|
6
|
+
key: string;
|
|
7
|
+
hashedPassword: string;
|
|
8
|
+
};
|
|
9
|
+
export declare class UserService {
|
|
10
|
+
private logger;
|
|
11
|
+
private storage;
|
|
12
|
+
private grpc;
|
|
13
|
+
currentUser: UserCredentials | null;
|
|
14
|
+
isLocked: boolean;
|
|
15
|
+
isReady: boolean;
|
|
16
|
+
constructor(services: {
|
|
17
|
+
logger: LogService;
|
|
18
|
+
storageService: IStorageService;
|
|
19
|
+
grpcService: GRPCService;
|
|
20
|
+
});
|
|
21
|
+
login(data: UserCredentials): Promise<void>;
|
|
22
|
+
logout(localOnly?: boolean): Promise<void>;
|
|
23
|
+
lock(localOnly?: boolean): Promise<void>;
|
|
24
|
+
getCurrentUser(): Promise<UserCredentials | null>;
|
|
25
|
+
private getCurrentUserFromService;
|
|
26
|
+
private loginService;
|
|
27
|
+
private logoutService;
|
|
28
|
+
private setUser;
|
|
29
|
+
private loadFromStore;
|
|
30
|
+
private saveToStore;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=user.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.service.d.ts","sourceRoot":"","sources":["../../../../src/services/user.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAEjE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAS1C,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,cAAc,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,IAAI,CAAa;IAEzB,WAAW,EAAE,eAAe,GAAG,IAAI,CAAO;IAC1C,QAAQ,UAAO;IACf,OAAO,UAAQ;gBAEH,QAAQ,EAAE;QACpB,MAAM,EAAE,UAAU,CAAA;QAClB,cAAc,EAAE,eAAe,CAAA;QAC/B,WAAW,EAAE,WAAW,CAAA;KACzB;IAQK,KAAK,CAAC,IAAI,EAAE,eAAe;IAK3B,MAAM,CAAC,SAAS,CAAC,EAAE,OAAO;IAS1B,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO;IAKxB,cAAc;IAQpB,OAAO,CAAC,yBAAyB;IAuBjC,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,aAAa;YAeP,OAAO;YAKP,aAAa;IAQ3B,OAAO,CAAC,WAAW;CAGpB"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { ApiService } from '../services/api.service';
|
|
2
|
+
import { CryptoService } from '../services/crypto.service';
|
|
3
|
+
import { FidoService } from '../services/fido.service';
|
|
4
|
+
import { LogService } from '../services/log.service';
|
|
5
|
+
/**
|
|
6
|
+
* Set pwl using fido
|
|
7
|
+
* @param params
|
|
8
|
+
* @param services
|
|
9
|
+
* @returns secret
|
|
10
|
+
*/
|
|
11
|
+
export declare function setNewPasswordless(params: {
|
|
12
|
+
devicePath: string;
|
|
13
|
+
deviceName: string;
|
|
14
|
+
email: string;
|
|
15
|
+
name: string;
|
|
16
|
+
pin?: string;
|
|
17
|
+
}, services: {
|
|
18
|
+
apiService: ApiService;
|
|
19
|
+
fidoService: FidoService;
|
|
20
|
+
}): Promise<string>;
|
|
21
|
+
/**
|
|
22
|
+
* Set backup pwl using fido key
|
|
23
|
+
* @param params
|
|
24
|
+
* @param services
|
|
25
|
+
* @returns secret
|
|
26
|
+
*/
|
|
27
|
+
export declare function setBackupPasswordless(params: {
|
|
28
|
+
deviceName: string;
|
|
29
|
+
devicePath: string;
|
|
30
|
+
email: string;
|
|
31
|
+
name: string;
|
|
32
|
+
currentEncKey: ArrayBuffer;
|
|
33
|
+
pin?: string | undefined;
|
|
34
|
+
}, services: {
|
|
35
|
+
apiService: ApiService;
|
|
36
|
+
fidoService: FidoService;
|
|
37
|
+
cryptoService: CryptoService;
|
|
38
|
+
}): Promise<string>;
|
|
39
|
+
/**
|
|
40
|
+
* Get pwl from fido key
|
|
41
|
+
* @param params
|
|
42
|
+
* @returns secret
|
|
43
|
+
*/
|
|
44
|
+
export declare function getPasswordless(params: {
|
|
45
|
+
email: string;
|
|
46
|
+
pin?: string;
|
|
47
|
+
devicePath: string;
|
|
48
|
+
onlyBackup?: boolean;
|
|
49
|
+
}, services: {
|
|
50
|
+
apiService: ApiService;
|
|
51
|
+
fidoService: FidoService;
|
|
52
|
+
logService: LogService;
|
|
53
|
+
}): Promise<string>;
|
|
54
|
+
//# sourceMappingURL=fido.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fido.d.ts","sourceRoot":"","sources":["../../../../src/usecases/fido.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEpD;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE;IACN,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,EACD,QAAQ,EAAE;IACR,UAAU,EAAE,UAAU,CAAA;IACtB,WAAW,EAAE,WAAW,CAAA;CACzB,mBA8BF;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE;IACN,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,WAAW,CAAA;IAC1B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACzB,EACD,QAAQ,EAAE;IACR,UAAU,EAAE,UAAU,CAAA;IACtB,WAAW,EAAE,WAAW,CAAA;IACxB,aAAa,EAAE,aAAa,CAAA;CAC7B,mBAgDF;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE;IACN,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,EACD,QAAQ,EAAE;IACR,UAAU,EAAE,UAAU,CAAA;IACtB,WAAW,EAAE,WAAW,CAAA;IACxB,UAAU,EAAE,UAAU,CAAA;CACvB,mBAyGF"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPasswordless = exports.setBackupPasswordless = exports.setNewPasswordless = void 0;
|
|
4
|
+
const errors_1 = require("../abstractions/errors");
|
|
5
|
+
const utils_1 = require("../misc/utils");
|
|
6
|
+
/**
|
|
7
|
+
* Set pwl using fido
|
|
8
|
+
* @param params
|
|
9
|
+
* @param services
|
|
10
|
+
* @returns secret
|
|
11
|
+
*/
|
|
12
|
+
async function setNewPasswordless(params, services) {
|
|
13
|
+
const { apiService, fidoService } = services;
|
|
14
|
+
if (!apiService.token) {
|
|
15
|
+
throw new errors_1.ServiceError('1001');
|
|
16
|
+
}
|
|
17
|
+
const { devicePath, deviceName, email, name, pin } = params;
|
|
18
|
+
const isConnected = await fidoService.setSelectedDevice(devicePath);
|
|
19
|
+
if (!isConnected) {
|
|
20
|
+
throw new errors_1.ServiceError('2001');
|
|
21
|
+
}
|
|
22
|
+
const { credentialId } = await fidoService.makeCredential({
|
|
23
|
+
email,
|
|
24
|
+
name,
|
|
25
|
+
pin,
|
|
26
|
+
});
|
|
27
|
+
if (!credentialId) {
|
|
28
|
+
throw new errors_1.ServiceError('2002');
|
|
29
|
+
}
|
|
30
|
+
const { random } = await apiService.setPasswordlessCredential({
|
|
31
|
+
credentialId,
|
|
32
|
+
name: deviceName,
|
|
33
|
+
type: 'hmac',
|
|
34
|
+
});
|
|
35
|
+
const { secret } = await fidoService.getHmacSecret({
|
|
36
|
+
credentialId,
|
|
37
|
+
salt: random,
|
|
38
|
+
pin,
|
|
39
|
+
});
|
|
40
|
+
return secret;
|
|
41
|
+
}
|
|
42
|
+
exports.setNewPasswordless = setNewPasswordless;
|
|
43
|
+
/**
|
|
44
|
+
* Set backup pwl using fido key
|
|
45
|
+
* @param params
|
|
46
|
+
* @param services
|
|
47
|
+
* @returns secret
|
|
48
|
+
*/
|
|
49
|
+
async function setBackupPasswordless(params, services) {
|
|
50
|
+
const { apiService, fidoService, cryptoService } = services;
|
|
51
|
+
if (!apiService.token) {
|
|
52
|
+
throw new errors_1.ServiceError('1001');
|
|
53
|
+
}
|
|
54
|
+
const { deviceName, devicePath, email, name, pin, currentEncKey } = params;
|
|
55
|
+
const isConnected = await fidoService.setSelectedDevice(devicePath);
|
|
56
|
+
if (!isConnected) {
|
|
57
|
+
throw new errors_1.ServiceError('2001');
|
|
58
|
+
}
|
|
59
|
+
// Create credential
|
|
60
|
+
const { credentialId } = await fidoService.makeCredential({
|
|
61
|
+
email,
|
|
62
|
+
name,
|
|
63
|
+
pin,
|
|
64
|
+
});
|
|
65
|
+
if (!credentialId) {
|
|
66
|
+
throw new errors_1.ServiceError('2002');
|
|
67
|
+
}
|
|
68
|
+
// Create HMAC secret
|
|
69
|
+
const random = utils_1.Utils.fromBufferToHex(cryptoService.getRandomValues(16));
|
|
70
|
+
const { secret } = await fidoService.getHmacSecret({
|
|
71
|
+
credentialId,
|
|
72
|
+
salt: random,
|
|
73
|
+
pin,
|
|
74
|
+
});
|
|
75
|
+
// Create new encrypted key hash and password hash
|
|
76
|
+
const kdf = 0;
|
|
77
|
+
const kdfIterations = 100000;
|
|
78
|
+
const key = await cryptoService.core.makeKey(secret, email, kdf, kdfIterations);
|
|
79
|
+
const newPwHash = await cryptoService.core.hashPassword(secret, key);
|
|
80
|
+
const encKey = await cryptoService.core.remakeEncKey(currentEncKey, key);
|
|
81
|
+
// Send API
|
|
82
|
+
await apiService.setBackupPasswordlessCredential({
|
|
83
|
+
fd_credential_id: credentialId,
|
|
84
|
+
fd_random: random,
|
|
85
|
+
key: encKey[1].encryptedString || '',
|
|
86
|
+
master_password_hash: newPwHash,
|
|
87
|
+
name: deviceName,
|
|
88
|
+
type: 'hmac',
|
|
89
|
+
});
|
|
90
|
+
return secret;
|
|
91
|
+
}
|
|
92
|
+
exports.setBackupPasswordless = setBackupPasswordless;
|
|
93
|
+
/**
|
|
94
|
+
* Get pwl from fido key
|
|
95
|
+
* @param params
|
|
96
|
+
* @returns secret
|
|
97
|
+
*/
|
|
98
|
+
async function getPasswordless(params, services) {
|
|
99
|
+
const { fidoService, apiService, logService } = services;
|
|
100
|
+
const { email, pin, devicePath, onlyBackup } = params;
|
|
101
|
+
// Select FIDO device
|
|
102
|
+
const isConnected = await fidoService.setSelectedDevice(devicePath);
|
|
103
|
+
if (!isConnected) {
|
|
104
|
+
throw new errors_1.ServiceError('2001');
|
|
105
|
+
}
|
|
106
|
+
// Get cred + random from API
|
|
107
|
+
const { backup_keys, ...mainKey } = await apiService.getPasswordlessCredentials(email);
|
|
108
|
+
const validBackupKeys = backup_keys.filter((k) => k.type !== 'prf');
|
|
109
|
+
const isMainKeyValid = mainKey.type !== 'prf' && !!mainKey.credential_id && !!mainKey.random;
|
|
110
|
+
if (!isMainKeyValid && !validBackupKeys.length) {
|
|
111
|
+
throw new errors_1.ServiceError('1002');
|
|
112
|
+
}
|
|
113
|
+
// If the user provides PIN, check for required cred by listing all residental keys
|
|
114
|
+
if (pin) {
|
|
115
|
+
let matchingCredId = '';
|
|
116
|
+
let matchingCredRandom = '';
|
|
117
|
+
const validCreds = validBackupKeys.map((k) => ({
|
|
118
|
+
credential_id: k.credential_id,
|
|
119
|
+
random: k.random,
|
|
120
|
+
}));
|
|
121
|
+
if (isMainKeyValid) {
|
|
122
|
+
validCreds.push({
|
|
123
|
+
credential_id: mainKey.credential_id,
|
|
124
|
+
random: mainKey.random,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
try {
|
|
128
|
+
const residentalCreds = await fidoService.listCredentials({ pin });
|
|
129
|
+
const existingCredIds = residentalCreds.map((c) => c.credentialId);
|
|
130
|
+
const matchingCred = validCreds.find((c) => existingCredIds.includes(c.credential_id));
|
|
131
|
+
if (!matchingCred) {
|
|
132
|
+
// TODO: There is a case where the key setup before is not a residental key
|
|
133
|
+
// Temporary ignore this and proceed with trying each cred
|
|
134
|
+
// throw new ServiceError('2005')
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
matchingCredId = matchingCred.credential_id;
|
|
138
|
+
matchingCredRandom = matchingCred.random;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch (e) {
|
|
142
|
+
const err = e;
|
|
143
|
+
if (['2003', '2004', '2005'].includes(err.code)) {
|
|
144
|
+
throw err;
|
|
145
|
+
}
|
|
146
|
+
// Some keys do not allow this action -> ignore error here
|
|
147
|
+
logService.debug(e);
|
|
148
|
+
}
|
|
149
|
+
if (matchingCredId) {
|
|
150
|
+
const { secret } = await fidoService.getHmacSecret({
|
|
151
|
+
credentialId: matchingCredId,
|
|
152
|
+
salt: matchingCredRandom,
|
|
153
|
+
pin,
|
|
154
|
+
});
|
|
155
|
+
return secret;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// Try main key first
|
|
159
|
+
if (!onlyBackup && isMainKeyValid) {
|
|
160
|
+
try {
|
|
161
|
+
const { secret } = await fidoService.getHmacSecret({
|
|
162
|
+
credentialId: mainKey.credential_id,
|
|
163
|
+
salt: mainKey.random,
|
|
164
|
+
pin,
|
|
165
|
+
});
|
|
166
|
+
return secret;
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
const err = error;
|
|
170
|
+
if (err.code === '2006' && validBackupKeys?.length) {
|
|
171
|
+
logService.debug('Main cred not found, try backup creds');
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
throw err;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// Try backup keys
|
|
179
|
+
for (const key of validBackupKeys) {
|
|
180
|
+
try {
|
|
181
|
+
const { secret } = await fidoService.getHmacSecret({
|
|
182
|
+
credentialId: key.credential_id,
|
|
183
|
+
salt: key.random,
|
|
184
|
+
pin,
|
|
185
|
+
});
|
|
186
|
+
return secret;
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
const err = error;
|
|
190
|
+
if (err.code === '2006') {
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
throw error;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// No cred is valid
|
|
199
|
+
throw new errors_1.ServiceError('2005');
|
|
200
|
+
}
|
|
201
|
+
exports.getPasswordless = getPasswordless;
|