@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,227 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
12
|
+
var t = {};
|
|
13
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
14
|
+
t[p] = s[p];
|
|
15
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
16
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
17
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
18
|
+
t[p[i]] = s[p[i]];
|
|
19
|
+
}
|
|
20
|
+
return t;
|
|
21
|
+
};
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.getPasswordless = exports.setBackupPasswordless = exports.setNewPasswordless = void 0;
|
|
24
|
+
const errors_1 = require("../abstractions/errors");
|
|
25
|
+
const utils_1 = require("../misc/utils");
|
|
26
|
+
/**
|
|
27
|
+
* Set pwl using fido
|
|
28
|
+
* @param params
|
|
29
|
+
* @param services
|
|
30
|
+
* @returns secret
|
|
31
|
+
*/
|
|
32
|
+
function setNewPasswordless(params, services) {
|
|
33
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
34
|
+
const { apiService, fidoService } = services;
|
|
35
|
+
if (!apiService.token) {
|
|
36
|
+
throw new errors_1.ServiceError('1001');
|
|
37
|
+
}
|
|
38
|
+
const { devicePath, deviceName, email, name, pin } = params;
|
|
39
|
+
const isConnected = yield fidoService.setSelectedDevice(devicePath);
|
|
40
|
+
if (!isConnected) {
|
|
41
|
+
throw new errors_1.ServiceError('2001');
|
|
42
|
+
}
|
|
43
|
+
const { credentialId } = yield fidoService.makeCredential({
|
|
44
|
+
email,
|
|
45
|
+
name,
|
|
46
|
+
pin,
|
|
47
|
+
});
|
|
48
|
+
if (!credentialId) {
|
|
49
|
+
throw new errors_1.ServiceError('2002');
|
|
50
|
+
}
|
|
51
|
+
const { random } = yield apiService.setPasswordlessCredential({
|
|
52
|
+
credentialId,
|
|
53
|
+
name: deviceName,
|
|
54
|
+
type: 'hmac',
|
|
55
|
+
});
|
|
56
|
+
const { secret } = yield fidoService.getHmacSecret({
|
|
57
|
+
credentialId,
|
|
58
|
+
salt: random,
|
|
59
|
+
pin,
|
|
60
|
+
});
|
|
61
|
+
return secret;
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
exports.setNewPasswordless = setNewPasswordless;
|
|
65
|
+
/**
|
|
66
|
+
* Set backup pwl using fido key
|
|
67
|
+
* @param params
|
|
68
|
+
* @param services
|
|
69
|
+
* @returns secret
|
|
70
|
+
*/
|
|
71
|
+
function setBackupPasswordless(params, services) {
|
|
72
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
73
|
+
const { apiService, fidoService, cryptoService } = services;
|
|
74
|
+
if (!apiService.token) {
|
|
75
|
+
throw new errors_1.ServiceError('1001');
|
|
76
|
+
}
|
|
77
|
+
const { deviceName, devicePath, email, name, pin, currentEncKey } = params;
|
|
78
|
+
const isConnected = yield fidoService.setSelectedDevice(devicePath);
|
|
79
|
+
if (!isConnected) {
|
|
80
|
+
throw new errors_1.ServiceError('2001');
|
|
81
|
+
}
|
|
82
|
+
// Create credential
|
|
83
|
+
const { credentialId } = yield fidoService.makeCredential({
|
|
84
|
+
email,
|
|
85
|
+
name,
|
|
86
|
+
pin,
|
|
87
|
+
});
|
|
88
|
+
if (!credentialId) {
|
|
89
|
+
throw new errors_1.ServiceError('2002');
|
|
90
|
+
}
|
|
91
|
+
// Create HMAC secret
|
|
92
|
+
const random = utils_1.Utils.fromBufferToHex(cryptoService.getRandomValues(16));
|
|
93
|
+
const { secret } = yield fidoService.getHmacSecret({
|
|
94
|
+
credentialId,
|
|
95
|
+
salt: random,
|
|
96
|
+
pin,
|
|
97
|
+
});
|
|
98
|
+
// Create new encrypted key hash and password hash
|
|
99
|
+
const kdf = 0;
|
|
100
|
+
const kdfIterations = 100000;
|
|
101
|
+
const key = yield cryptoService.core.makeKey(secret, email, kdf, kdfIterations);
|
|
102
|
+
const newPwHash = yield cryptoService.core.hashPassword(secret, key);
|
|
103
|
+
const encKey = yield cryptoService.core.remakeEncKey(currentEncKey, key);
|
|
104
|
+
// Send API
|
|
105
|
+
yield apiService.setBackupPasswordlessCredential({
|
|
106
|
+
fd_credential_id: credentialId,
|
|
107
|
+
fd_random: random,
|
|
108
|
+
key: encKey[1].encryptedString || '',
|
|
109
|
+
master_password_hash: newPwHash,
|
|
110
|
+
name: deviceName,
|
|
111
|
+
type: 'hmac',
|
|
112
|
+
});
|
|
113
|
+
return secret;
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
exports.setBackupPasswordless = setBackupPasswordless;
|
|
117
|
+
/**
|
|
118
|
+
* Get pwl from fido key
|
|
119
|
+
* @param params
|
|
120
|
+
* @returns secret
|
|
121
|
+
*/
|
|
122
|
+
function getPasswordless(params, services) {
|
|
123
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
124
|
+
const { fidoService, apiService, logService } = services;
|
|
125
|
+
const { email, pin, devicePath, onlyBackup } = params;
|
|
126
|
+
// Select FIDO device
|
|
127
|
+
const isConnected = yield fidoService.setSelectedDevice(devicePath);
|
|
128
|
+
if (!isConnected) {
|
|
129
|
+
throw new errors_1.ServiceError('2001');
|
|
130
|
+
}
|
|
131
|
+
// Get cred + random from API
|
|
132
|
+
const _a = yield apiService.getPasswordlessCredentials(email), { backup_keys } = _a, mainKey = __rest(_a, ["backup_keys"]);
|
|
133
|
+
const validBackupKeys = backup_keys.filter((k) => k.type !== 'prf');
|
|
134
|
+
const isMainKeyValid = mainKey.type !== 'prf' && !!mainKey.credential_id && !!mainKey.random;
|
|
135
|
+
if (!isMainKeyValid && !validBackupKeys.length) {
|
|
136
|
+
throw new errors_1.ServiceError('1002');
|
|
137
|
+
}
|
|
138
|
+
// If the user provides PIN, check for required cred by listing all residental keys
|
|
139
|
+
if (pin) {
|
|
140
|
+
let matchingCredId = '';
|
|
141
|
+
let matchingCredRandom = '';
|
|
142
|
+
const validCreds = validBackupKeys.map((k) => ({
|
|
143
|
+
credential_id: k.credential_id,
|
|
144
|
+
random: k.random,
|
|
145
|
+
}));
|
|
146
|
+
if (isMainKeyValid) {
|
|
147
|
+
validCreds.push({
|
|
148
|
+
credential_id: mainKey.credential_id,
|
|
149
|
+
random: mainKey.random,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
try {
|
|
153
|
+
const residentalCreds = yield fidoService.listCredentials({ pin });
|
|
154
|
+
const existingCredIds = residentalCreds.map((c) => c.credentialId);
|
|
155
|
+
const matchingCred = validCreds.find((c) => existingCredIds.includes(c.credential_id));
|
|
156
|
+
if (!matchingCred) {
|
|
157
|
+
// TODO: There is a case where the key setup before is not a residental key
|
|
158
|
+
// Temporary ignore this and proceed with trying each cred
|
|
159
|
+
// throw new ServiceError('2005')
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
matchingCredId = matchingCred.credential_id;
|
|
163
|
+
matchingCredRandom = matchingCred.random;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
catch (e) {
|
|
167
|
+
const err = e;
|
|
168
|
+
if (['2003', '2004', '2005'].includes(err.code)) {
|
|
169
|
+
throw err;
|
|
170
|
+
}
|
|
171
|
+
// Some keys do not allow this action -> ignore error here
|
|
172
|
+
logService.debug(e);
|
|
173
|
+
}
|
|
174
|
+
if (matchingCredId) {
|
|
175
|
+
const { secret } = yield fidoService.getHmacSecret({
|
|
176
|
+
credentialId: matchingCredId,
|
|
177
|
+
salt: matchingCredRandom,
|
|
178
|
+
pin,
|
|
179
|
+
});
|
|
180
|
+
return secret;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// Try main key first
|
|
184
|
+
if (!onlyBackup && isMainKeyValid) {
|
|
185
|
+
try {
|
|
186
|
+
const { secret } = yield fidoService.getHmacSecret({
|
|
187
|
+
credentialId: mainKey.credential_id,
|
|
188
|
+
salt: mainKey.random,
|
|
189
|
+
pin,
|
|
190
|
+
});
|
|
191
|
+
return secret;
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
const err = error;
|
|
195
|
+
if (err.code === '2006' && (validBackupKeys === null || validBackupKeys === void 0 ? void 0 : validBackupKeys.length)) {
|
|
196
|
+
logService.debug('Main cred not found, try backup creds');
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
throw err;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// Try backup keys
|
|
204
|
+
for (const key of validBackupKeys) {
|
|
205
|
+
try {
|
|
206
|
+
const { secret } = yield fidoService.getHmacSecret({
|
|
207
|
+
credentialId: key.credential_id,
|
|
208
|
+
salt: key.random,
|
|
209
|
+
pin,
|
|
210
|
+
});
|
|
211
|
+
return secret;
|
|
212
|
+
}
|
|
213
|
+
catch (error) {
|
|
214
|
+
const err = error;
|
|
215
|
+
if (err.code === '2006') {
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
throw error;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
// No cred is valid
|
|
224
|
+
throw new errors_1.ServiceError('2005');
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
exports.getPasswordless = getPasswordless;
|