@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.
Files changed (158) hide show
  1. package/README.md +98 -0
  2. package/lib/cjs/abstractions/api.service.js +2 -0
  3. package/lib/cjs/abstractions/crypto.service.js +147 -0
  4. package/lib/cjs/abstractions/errors.js +99 -0
  5. package/lib/cjs/abstractions/event.service.js +2 -0
  6. package/lib/cjs/abstractions/index.js +2 -0
  7. package/lib/cjs/abstractions/socket.service.js +11 -0
  8. package/lib/cjs/abstractions/storage.service.js +2 -0
  9. package/lib/cjs/index.js +243 -0
  10. package/lib/cjs/misc/config.js +15 -0
  11. package/lib/cjs/misc/utils.js +37 -0
  12. package/lib/cjs/proto/google/api/annotations.js +2 -0
  13. package/lib/cjs/proto/google/api/http.js +477 -0
  14. package/lib/cjs/proto/google/protobuf/descriptor.js +4873 -0
  15. package/lib/cjs/proto/locker-service-grpc.js +1915 -0
  16. package/lib/cjs/services/api.service.js +182 -0
  17. package/lib/cjs/services/cache.service.js +50 -0
  18. package/lib/cjs/services/core-crypto.service.js +193 -0
  19. package/lib/cjs/services/crypto.service.js +101 -0
  20. package/lib/cjs/services/event.service.js +31 -0
  21. package/lib/cjs/services/fido.service.js +136 -0
  22. package/lib/cjs/services/grpc.service.js +130 -0
  23. package/lib/cjs/services/log.service.js +30 -0
  24. package/lib/cjs/services/pairing.service.js +122 -0
  25. package/lib/cjs/services/socket.service.js +280 -0
  26. package/lib/cjs/services/user.service.js +134 -0
  27. package/lib/cjs/types/abstractions/api.service.d.ts +40 -0
  28. package/lib/cjs/types/abstractions/api.service.d.ts.map +1 -0
  29. package/lib/cjs/types/abstractions/crypto.service.d.ts +46 -0
  30. package/lib/cjs/types/abstractions/crypto.service.d.ts.map +1 -0
  31. package/lib/cjs/types/abstractions/errors.d.ts +73 -0
  32. package/lib/cjs/types/abstractions/errors.d.ts.map +1 -0
  33. package/lib/cjs/types/abstractions/event.service.d.ts +23 -0
  34. package/lib/cjs/types/abstractions/event.service.d.ts.map +1 -0
  35. package/lib/cjs/types/abstractions/index.d.ts +56 -0
  36. package/lib/cjs/types/abstractions/index.d.ts.map +1 -0
  37. package/lib/cjs/types/abstractions/socket.service.d.ts +52 -0
  38. package/lib/cjs/types/abstractions/socket.service.d.ts.map +1 -0
  39. package/lib/cjs/types/abstractions/storage.service.d.ts +6 -0
  40. package/lib/cjs/types/abstractions/storage.service.d.ts.map +1 -0
  41. package/lib/cjs/types/index.d.ts +164 -0
  42. package/lib/cjs/types/index.d.ts.map +1 -0
  43. package/lib/cjs/types/misc/config.d.ts +6 -0
  44. package/lib/cjs/types/misc/config.d.ts.map +1 -0
  45. package/lib/cjs/types/misc/utils.d.ts +21 -0
  46. package/lib/cjs/types/misc/utils.d.ts.map +1 -0
  47. package/lib/cjs/types/proto/google/api/annotations.d.ts +2 -0
  48. package/lib/cjs/types/proto/google/api/annotations.d.ts.map +1 -0
  49. package/lib/cjs/types/proto/google/api/http.d.ts +195 -0
  50. package/lib/cjs/types/proto/google/api/http.d.ts.map +1 -0
  51. package/lib/cjs/types/proto/google/protobuf/descriptor.d.ts +3409 -0
  52. package/lib/cjs/types/proto/google/protobuf/descriptor.d.ts.map +1 -0
  53. package/lib/cjs/types/proto/locker-service-grpc.d.ts +622 -0
  54. package/lib/cjs/types/proto/locker-service-grpc.d.ts.map +1 -0
  55. package/lib/cjs/types/services/api.service.d.ts +37 -0
  56. package/lib/cjs/types/services/api.service.d.ts.map +1 -0
  57. package/lib/cjs/types/services/cache.service.d.ts +10 -0
  58. package/lib/cjs/types/services/cache.service.d.ts.map +1 -0
  59. package/lib/cjs/types/services/core-crypto.service.d.ts +17 -0
  60. package/lib/cjs/types/services/core-crypto.service.d.ts.map +1 -0
  61. package/lib/cjs/types/services/crypto.service.d.ts +23 -0
  62. package/lib/cjs/types/services/crypto.service.d.ts.map +1 -0
  63. package/lib/cjs/types/services/event.service.d.ts +14 -0
  64. package/lib/cjs/types/services/event.service.d.ts.map +1 -0
  65. package/lib/cjs/types/services/fido.service.d.ts +40 -0
  66. package/lib/cjs/types/services/fido.service.d.ts.map +1 -0
  67. package/lib/cjs/types/services/grpc.service.d.ts +34 -0
  68. package/lib/cjs/types/services/grpc.service.d.ts.map +1 -0
  69. package/lib/cjs/types/services/log.service.d.ts +13 -0
  70. package/lib/cjs/types/services/log.service.d.ts.map +1 -0
  71. package/lib/cjs/types/services/pairing.service.d.ts +37 -0
  72. package/lib/cjs/types/services/pairing.service.d.ts.map +1 -0
  73. package/lib/cjs/types/services/socket.service.d.ts +39 -0
  74. package/lib/cjs/types/services/socket.service.d.ts.map +1 -0
  75. package/lib/cjs/types/services/user.service.d.ts +32 -0
  76. package/lib/cjs/types/services/user.service.d.ts.map +1 -0
  77. package/lib/cjs/types/usecases/fido.d.ts +54 -0
  78. package/lib/cjs/types/usecases/fido.d.ts.map +1 -0
  79. package/lib/cjs/usecases/fido.js +227 -0
  80. package/lib/esm/abstractions/api.service.js +2 -0
  81. package/lib/esm/abstractions/crypto.service.js +165 -0
  82. package/lib/esm/abstractions/errors.js +100 -0
  83. package/lib/esm/abstractions/event.service.js +2 -0
  84. package/lib/esm/abstractions/index.js +2 -0
  85. package/lib/esm/abstractions/socket.service.js +11 -0
  86. package/lib/esm/abstractions/storage.service.js +2 -0
  87. package/lib/esm/index.mjs +227 -0
  88. package/lib/esm/misc/config.js +15 -0
  89. package/lib/esm/misc/utils.js +37 -0
  90. package/lib/esm/proto/google/api/annotations.js +2 -0
  91. package/lib/esm/proto/google/api/http.js +468 -0
  92. package/lib/esm/proto/google/protobuf/descriptor.js +4830 -0
  93. package/lib/esm/proto/locker-service-grpc.js +1892 -0
  94. package/lib/esm/services/api.service.js +177 -0
  95. package/lib/esm/services/cache.service.js +52 -0
  96. package/lib/esm/services/core-crypto.service.js +164 -0
  97. package/lib/esm/services/crypto.service.js +83 -0
  98. package/lib/esm/services/event.service.js +33 -0
  99. package/lib/esm/services/fido.service.js +139 -0
  100. package/lib/esm/services/grpc.service.js +119 -0
  101. package/lib/esm/services/log.service.js +31 -0
  102. package/lib/esm/services/pairing.service.js +107 -0
  103. package/lib/esm/services/socket.service.js +265 -0
  104. package/lib/esm/services/user.service.js +116 -0
  105. package/lib/esm/types/abstractions/api.service.d.ts +40 -0
  106. package/lib/esm/types/abstractions/api.service.d.ts.map +1 -0
  107. package/lib/esm/types/abstractions/crypto.service.d.ts +46 -0
  108. package/lib/esm/types/abstractions/crypto.service.d.ts.map +1 -0
  109. package/lib/esm/types/abstractions/errors.d.ts +73 -0
  110. package/lib/esm/types/abstractions/errors.d.ts.map +1 -0
  111. package/lib/esm/types/abstractions/event.service.d.ts +23 -0
  112. package/lib/esm/types/abstractions/event.service.d.ts.map +1 -0
  113. package/lib/esm/types/abstractions/index.d.ts +56 -0
  114. package/lib/esm/types/abstractions/index.d.ts.map +1 -0
  115. package/lib/esm/types/abstractions/socket.service.d.ts +52 -0
  116. package/lib/esm/types/abstractions/socket.service.d.ts.map +1 -0
  117. package/lib/esm/types/abstractions/storage.service.d.ts +6 -0
  118. package/lib/esm/types/abstractions/storage.service.d.ts.map +1 -0
  119. package/lib/esm/types/index.d.ts +164 -0
  120. package/lib/esm/types/index.d.ts.map +1 -0
  121. package/lib/esm/types/misc/config.d.ts +6 -0
  122. package/lib/esm/types/misc/config.d.ts.map +1 -0
  123. package/lib/esm/types/misc/utils.d.ts +21 -0
  124. package/lib/esm/types/misc/utils.d.ts.map +1 -0
  125. package/lib/esm/types/proto/google/api/annotations.d.ts +2 -0
  126. package/lib/esm/types/proto/google/api/annotations.d.ts.map +1 -0
  127. package/lib/esm/types/proto/google/api/http.d.ts +195 -0
  128. package/lib/esm/types/proto/google/api/http.d.ts.map +1 -0
  129. package/lib/esm/types/proto/google/protobuf/descriptor.d.ts +3409 -0
  130. package/lib/esm/types/proto/google/protobuf/descriptor.d.ts.map +1 -0
  131. package/lib/esm/types/proto/locker-service-grpc.d.ts +622 -0
  132. package/lib/esm/types/proto/locker-service-grpc.d.ts.map +1 -0
  133. package/lib/esm/types/services/api.service.d.ts +37 -0
  134. package/lib/esm/types/services/api.service.d.ts.map +1 -0
  135. package/lib/esm/types/services/cache.service.d.ts +10 -0
  136. package/lib/esm/types/services/cache.service.d.ts.map +1 -0
  137. package/lib/esm/types/services/core-crypto.service.d.ts +17 -0
  138. package/lib/esm/types/services/core-crypto.service.d.ts.map +1 -0
  139. package/lib/esm/types/services/crypto.service.d.ts +23 -0
  140. package/lib/esm/types/services/crypto.service.d.ts.map +1 -0
  141. package/lib/esm/types/services/event.service.d.ts +14 -0
  142. package/lib/esm/types/services/event.service.d.ts.map +1 -0
  143. package/lib/esm/types/services/fido.service.d.ts +40 -0
  144. package/lib/esm/types/services/fido.service.d.ts.map +1 -0
  145. package/lib/esm/types/services/grpc.service.d.ts +34 -0
  146. package/lib/esm/types/services/grpc.service.d.ts.map +1 -0
  147. package/lib/esm/types/services/log.service.d.ts +13 -0
  148. package/lib/esm/types/services/log.service.d.ts.map +1 -0
  149. package/lib/esm/types/services/pairing.service.d.ts +37 -0
  150. package/lib/esm/types/services/pairing.service.d.ts.map +1 -0
  151. package/lib/esm/types/services/socket.service.d.ts +39 -0
  152. package/lib/esm/types/services/socket.service.d.ts.map +1 -0
  153. package/lib/esm/types/services/user.service.d.ts +32 -0
  154. package/lib/esm/types/services/user.service.d.ts.map +1 -0
  155. package/lib/esm/types/usecases/fido.d.ts +54 -0
  156. package/lib/esm/types/usecases/fido.d.ts.map +1 -0
  157. package/lib/esm/usecases/fido.js +201 -0
  158. 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;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });