@lifeready/core 0.6.0-beta.1

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 (225) hide show
  1. package/README.md +62 -0
  2. package/bundles/lifeready-core.umd.js +15939 -0
  3. package/bundles/lifeready-core.umd.js.map +1 -0
  4. package/bundles/lifeready-core.umd.min.js +2 -0
  5. package/bundles/lifeready-core.umd.min.js.map +1 -0
  6. package/esm2015/lib/_common/ast.js +40 -0
  7. package/esm2015/lib/_common/deferred-promise.js +24 -0
  8. package/esm2015/lib/_common/exceptions.js +157 -0
  9. package/esm2015/lib/_common/queries.gql.js +190 -0
  10. package/esm2015/lib/_common/run-outside-angular.js +79 -0
  11. package/esm2015/lib/_common/types.js +1 -0
  12. package/esm2015/lib/_common/utils.js +44 -0
  13. package/esm2015/lib/api/contact-card.gql.js +79 -0
  14. package/esm2015/lib/api/contact-card.service.js +154 -0
  15. package/esm2015/lib/api/contact-card2.gql.js +60 -0
  16. package/esm2015/lib/api/contact-card2.service.js +103 -0
  17. package/esm2015/lib/api/file.service.js +74 -0
  18. package/esm2015/lib/api/item2.gql.js +110 -0
  19. package/esm2015/lib/api/item2.service.js +311 -0
  20. package/esm2015/lib/api/key-exchange.gql.js +188 -0
  21. package/esm2015/lib/api/key-exchange.service.js +442 -0
  22. package/esm2015/lib/api/key-exchange.types.js +18 -0
  23. package/esm2015/lib/api/key-exchange2.gql.js +171 -0
  24. package/esm2015/lib/api/key-exchange2.service.js +479 -0
  25. package/esm2015/lib/api/lock.gql.js +40 -0
  26. package/esm2015/lib/api/lock.service.js +64 -0
  27. package/esm2015/lib/api/lr-apollo.service.js +46 -0
  28. package/esm2015/lib/api/lr-graphql/index.js +6 -0
  29. package/esm2015/lib/api/lr-graphql/lr-graphql.service.js +155 -0
  30. package/esm2015/lib/api/lr-graphql/lr-merged-mutation.js +213 -0
  31. package/esm2015/lib/api/lr-graphql/lr-mutation-base.js +51 -0
  32. package/esm2015/lib/api/lr-graphql/lr-mutation.js +48 -0
  33. package/esm2015/lib/api/lr-graphql/lr.service.js +18 -0
  34. package/esm2015/lib/api/message.service.js +138 -0
  35. package/esm2015/lib/api/persist.service.js +181 -0
  36. package/esm2015/lib/api/query-processor/common-processors.service.js +93 -0
  37. package/esm2015/lib/api/query-processor/index.js +3 -0
  38. package/esm2015/lib/api/query-processor/query-processor.service.js +192 -0
  39. package/esm2015/lib/api/query-processor/tp-password-reset-processor.service.js +109 -0
  40. package/esm2015/lib/api/shared-contact-card.service.js +119 -0
  41. package/esm2015/lib/api/shared-contact-card2.gql.js +41 -0
  42. package/esm2015/lib/api/shared-contact-card2.service.js +117 -0
  43. package/esm2015/lib/api/time.service.js +146 -0
  44. package/esm2015/lib/api/types/graphql.types.js +7 -0
  45. package/esm2015/lib/api/types/index.js +3 -0
  46. package/esm2015/lib/api/types/lr-graphql.types.js +71 -0
  47. package/esm2015/lib/auth/auth.config.js +57 -0
  48. package/esm2015/lib/auth/auth.gql.js +48 -0
  49. package/esm2015/lib/auth/auth.types.js +27 -0
  50. package/esm2015/lib/auth/idle.service.js +168 -0
  51. package/esm2015/lib/auth/idle.types.js +7 -0
  52. package/esm2015/lib/auth/lbop.service.js +355 -0
  53. package/esm2015/lib/auth/life-ready-auth.service.js +333 -0
  54. package/esm2015/lib/auth/password.service.js +320 -0
  55. package/esm2015/lib/auth/register.service.js +172 -0
  56. package/esm2015/lib/auth/two-factor.service.js +74 -0
  57. package/esm2015/lib/category/category-meta.service.js +99 -0
  58. package/esm2015/lib/category/category.gql.js +406 -0
  59. package/esm2015/lib/category/category.service.js +390 -0
  60. package/esm2015/lib/category/category.types.js +29 -0
  61. package/esm2015/lib/cryptography/cryptography.types.js +11 -0
  62. package/esm2015/lib/cryptography/encryption.service.js +189 -0
  63. package/esm2015/lib/cryptography/key-factory.service.js +237 -0
  64. package/esm2015/lib/cryptography/key-graph.service.js +280 -0
  65. package/esm2015/lib/cryptography/key-meta.service.js +200 -0
  66. package/esm2015/lib/cryptography/key.service.js +124 -0
  67. package/esm2015/lib/cryptography/slip39.service.js +169 -0
  68. package/esm2015/lib/cryptography/web-crypto.service.js +29 -0
  69. package/esm2015/lib/life-ready.config.js +84 -0
  70. package/esm2015/lib/life-ready.module.js +74 -0
  71. package/esm2015/lib/plan/plan.gql.js +123 -0
  72. package/esm2015/lib/plan/plan.service.js +149 -0
  73. package/esm2015/lib/plan/plan.types.js +11 -0
  74. package/esm2015/lib/record/record-attachment.service.js +101 -0
  75. package/esm2015/lib/record/record.gql.js +179 -0
  76. package/esm2015/lib/record/record.service.js +206 -0
  77. package/esm2015/lib/record/record.types.js +15 -0
  78. package/esm2015/lib/record-type/record-type.service.js +75 -0
  79. package/esm2015/lib/record-type/record-type.types.js +28 -0
  80. package/esm2015/lib/scenario/approvals/scenario-approval.gql.js +105 -0
  81. package/esm2015/lib/scenario/approvals/scenario-approval.types.js +1 -0
  82. package/esm2015/lib/scenario/approvals/scenario-approver.service.js +300 -0
  83. package/esm2015/lib/scenario/claimants/scenario-claimant.gql.js +52 -0
  84. package/esm2015/lib/scenario/claimants/scenario-claimant.service.js +97 -0
  85. package/esm2015/lib/scenario/claimants/scenario-claimant.types.js +1 -0
  86. package/esm2015/lib/scenario/receivers/scenario-receiver.gql.js +150 -0
  87. package/esm2015/lib/scenario/receivers/scenario-receiver.service.js +229 -0
  88. package/esm2015/lib/scenario/receivers/scenario-receiver.types.js +1 -0
  89. package/esm2015/lib/scenario/scenario-setup.service.js +269 -0
  90. package/esm2015/lib/scenario/scenario.gql.js +368 -0
  91. package/esm2015/lib/scenario/scenario.service.js +611 -0
  92. package/esm2015/lib/scenario/scenario.types.js +64 -0
  93. package/esm2015/lib/search/search.gql.js +62 -0
  94. package/esm2015/lib/search/search.service.js +156 -0
  95. package/esm2015/lib/search/search.types.js +6 -0
  96. package/esm2015/lib/trusted-parties/tp-password-reset-request.service.js +112 -0
  97. package/esm2015/lib/trusted-parties/tp-password-reset-user.service.js +266 -0
  98. package/esm2015/lib/trusted-parties/tp-password-reset.gql.js +232 -0
  99. package/esm2015/lib/trusted-parties/tp-password-reset.service.js +300 -0
  100. package/esm2015/lib/trusted-parties/trusted-party.gql.js +148 -0
  101. package/esm2015/lib/trusted-parties/trusted-party.service.js +326 -0
  102. package/esm2015/lib/trusted-parties/trusted-party.types.js +41 -0
  103. package/esm2015/lib/trusted-parties/trusted-party2.gql.js +87 -0
  104. package/esm2015/lib/trusted-parties/trusted-party2.service.js +215 -0
  105. package/esm2015/lib/users/profile-details.service.js +214 -0
  106. package/esm2015/lib/users/profile.gql.js +97 -0
  107. package/esm2015/lib/users/profile.service.js +169 -0
  108. package/esm2015/lib/users/profile.types.js +34 -0
  109. package/esm2015/lib/users/user.gql.js +60 -0
  110. package/esm2015/lib/users/user.service.js +79 -0
  111. package/esm2015/lib/users/user.types.js +5 -0
  112. package/esm2015/lifeready-core.js +10 -0
  113. package/esm2015/public-api.js +81 -0
  114. package/fesm2015/lifeready-core.js +13290 -0
  115. package/fesm2015/lifeready-core.js.map +1 -0
  116. package/lib/_common/ast.d.ts +11 -0
  117. package/lib/_common/deferred-promise.d.ts +12 -0
  118. package/lib/_common/exceptions.d.ts +109 -0
  119. package/lib/_common/queries.gql.d.ts +10 -0
  120. package/lib/_common/run-outside-angular.d.ts +14 -0
  121. package/lib/_common/types.d.ts +10 -0
  122. package/lib/_common/utils.d.ts +3 -0
  123. package/lib/api/contact-card.gql.d.ts +7 -0
  124. package/lib/api/contact-card.service.d.ts +52 -0
  125. package/lib/api/contact-card2.gql.d.ts +34 -0
  126. package/lib/api/contact-card2.service.d.ts +49 -0
  127. package/lib/api/file.service.d.ts +18 -0
  128. package/lib/api/item2.gql.d.ts +96 -0
  129. package/lib/api/item2.service.d.ts +177 -0
  130. package/lib/api/key-exchange.gql.d.ts +9 -0
  131. package/lib/api/key-exchange.service.d.ts +39 -0
  132. package/lib/api/key-exchange.types.d.ts +196 -0
  133. package/lib/api/key-exchange2.gql.d.ts +125 -0
  134. package/lib/api/key-exchange2.service.d.ts +187 -0
  135. package/lib/api/lock.gql.d.ts +27 -0
  136. package/lib/api/lock.service.d.ts +25 -0
  137. package/lib/api/lr-apollo.service.d.ts +15 -0
  138. package/lib/api/lr-graphql/index.d.ts +5 -0
  139. package/lib/api/lr-graphql/lr-graphql.service.d.ts +60 -0
  140. package/lib/api/lr-graphql/lr-merged-mutation.d.ts +27 -0
  141. package/lib/api/lr-graphql/lr-mutation-base.d.ts +28 -0
  142. package/lib/api/lr-graphql/lr-mutation.d.ts +8 -0
  143. package/lib/api/lr-graphql/lr.service.d.ts +9 -0
  144. package/lib/api/message.service.d.ts +58 -0
  145. package/lib/api/persist.service.d.ts +31 -0
  146. package/lib/api/query-processor/common-processors.service.d.ts +36 -0
  147. package/lib/api/query-processor/index.d.ts +2 -0
  148. package/lib/api/query-processor/query-processor.service.d.ts +18 -0
  149. package/lib/api/query-processor/tp-password-reset-processor.service.d.ts +15 -0
  150. package/lib/api/shared-contact-card.service.d.ts +33 -0
  151. package/lib/api/shared-contact-card2.gql.d.ts +36 -0
  152. package/lib/api/shared-contact-card2.service.d.ts +45 -0
  153. package/lib/api/time.service.d.ts +16 -0
  154. package/lib/api/types/graphql.types.d.ts +29 -0
  155. package/lib/api/types/index.d.ts +2 -0
  156. package/lib/api/types/lr-graphql.types.d.ts +385 -0
  157. package/lib/auth/auth.config.d.ts +5 -0
  158. package/lib/auth/auth.gql.d.ts +15 -0
  159. package/lib/auth/auth.types.d.ts +66 -0
  160. package/lib/auth/idle.service.d.ts +40 -0
  161. package/lib/auth/idle.types.d.ts +10 -0
  162. package/lib/auth/lbop.service.d.ts +91 -0
  163. package/lib/auth/life-ready-auth.service.d.ts +46 -0
  164. package/lib/auth/password.service.d.ts +78 -0
  165. package/lib/auth/register.service.d.ts +25 -0
  166. package/lib/auth/two-factor.service.d.ts +15 -0
  167. package/lib/category/category-meta.service.d.ts +23 -0
  168. package/lib/category/category.gql.d.ts +45 -0
  169. package/lib/category/category.service.d.ts +67 -0
  170. package/lib/category/category.types.d.ts +79 -0
  171. package/lib/cryptography/cryptography.types.d.ts +83 -0
  172. package/lib/cryptography/encryption.service.d.ts +41 -0
  173. package/lib/cryptography/key-factory.service.d.ts +38 -0
  174. package/lib/cryptography/key-graph.service.d.ts +33 -0
  175. package/lib/cryptography/key-meta.service.d.ts +44 -0
  176. package/lib/cryptography/key.service.d.ts +36 -0
  177. package/lib/cryptography/slip39.service.d.ts +43 -0
  178. package/lib/cryptography/web-crypto.service.d.ts +5 -0
  179. package/lib/life-ready.config.d.ts +14 -0
  180. package/lib/life-ready.module.d.ts +5 -0
  181. package/lib/plan/plan.gql.d.ts +11 -0
  182. package/lib/plan/plan.service.d.ts +33 -0
  183. package/lib/plan/plan.types.d.ts +31 -0
  184. package/lib/record/record-attachment.service.d.ts +16 -0
  185. package/lib/record/record.gql.d.ts +14 -0
  186. package/lib/record/record.service.d.ts +25 -0
  187. package/lib/record/record.types.d.ts +57 -0
  188. package/lib/record-type/record-type.service.d.ts +11 -0
  189. package/lib/record-type/record-type.types.d.ts +50 -0
  190. package/lib/scenario/approvals/scenario-approval.gql.d.ts +7 -0
  191. package/lib/scenario/approvals/scenario-approval.types.d.ts +63 -0
  192. package/lib/scenario/approvals/scenario-approver.service.d.ts +32 -0
  193. package/lib/scenario/claimants/scenario-claimant.gql.d.ts +5 -0
  194. package/lib/scenario/claimants/scenario-claimant.service.d.ts +17 -0
  195. package/lib/scenario/claimants/scenario-claimant.types.d.ts +18 -0
  196. package/lib/scenario/receivers/scenario-receiver.gql.d.ts +8 -0
  197. package/lib/scenario/receivers/scenario-receiver.service.d.ts +30 -0
  198. package/lib/scenario/receivers/scenario-receiver.types.d.ts +54 -0
  199. package/lib/scenario/scenario-setup.service.d.ts +22 -0
  200. package/lib/scenario/scenario.gql.d.ts +34 -0
  201. package/lib/scenario/scenario.service.d.ts +58 -0
  202. package/lib/scenario/scenario.types.d.ts +217 -0
  203. package/lib/search/search.gql.d.ts +1 -0
  204. package/lib/search/search.service.d.ts +25 -0
  205. package/lib/search/search.types.d.ts +20 -0
  206. package/lib/trusted-parties/tp-password-reset-request.service.d.ts +20 -0
  207. package/lib/trusted-parties/tp-password-reset-user.service.d.ts +41 -0
  208. package/lib/trusted-parties/tp-password-reset.gql.d.ts +218 -0
  209. package/lib/trusted-parties/tp-password-reset.service.d.ts +131 -0
  210. package/lib/trusted-parties/trusted-party.gql.d.ts +9 -0
  211. package/lib/trusted-parties/trusted-party.service.d.ts +44 -0
  212. package/lib/trusted-parties/trusted-party.types.d.ts +102 -0
  213. package/lib/trusted-parties/trusted-party2.gql.d.ts +79 -0
  214. package/lib/trusted-parties/trusted-party2.service.d.ts +114 -0
  215. package/lib/users/profile-details.service.d.ts +21 -0
  216. package/lib/users/profile.gql.d.ts +11 -0
  217. package/lib/users/profile.service.d.ts +35 -0
  218. package/lib/users/profile.types.d.ts +96 -0
  219. package/lib/users/user.gql.d.ts +9 -0
  220. package/lib/users/user.service.d.ts +12 -0
  221. package/lib/users/user.types.d.ts +23 -0
  222. package/lifeready-core.d.ts +9 -0
  223. package/lifeready-core.metadata.json +1 -0
  224. package/package.json +29 -0
  225. package/public-api.d.ts +77 -0
@@ -0,0 +1,124 @@
1
+ import { __awaiter } from "tslib";
2
+ import { Inject, Injectable } from '@angular/core';
3
+ import { LrNotFoundException } from '../_common/exceptions';
4
+ import { PersistService } from '../api/persist.service';
5
+ import { KeyFactoryService as KFS } from './key-factory.service';
6
+ import { LR_CONFIG } from '../life-ready.config';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../life-ready.config";
9
+ import * as i2 from "../api/persist.service";
10
+ export class UserKeys {
11
+ }
12
+ export class KeyService {
13
+ constructor(config, persistService) {
14
+ this.config = config;
15
+ this.persistService = persistService;
16
+ this.STORE_MASTER_KEY = 'masterKey';
17
+ // AZ: This can't be change easily. It's basically a PassK or PassIdp rotation.
18
+ // todo: we should eventually increase this periodically to match with Moore's law.
19
+ // The iterations for each key are kept by the server as well but we assume the value
20
+ // from the server is not trustworthy, so need to have minimum thresholds here.
21
+ // If creating new keys, these minimum are used.
22
+ this.MIN_PASS_IDP_PBKDF_ITER = 100000;
23
+ this.MIN_PASS_KEY_PBKDF_ITER = 100000;
24
+ this.MIN_LBOP_KEY_PBKDF_ITER = 100000;
25
+ // These are used as the default values. They must be larger than the minimum values.
26
+ this.DEFAULT_PASS_IDP_PBKDF_ITER = this.MIN_PASS_IDP_PBKDF_ITER;
27
+ this.DEFAULT_PASS_KEY_PBKDF_ITER = this.MIN_PASS_KEY_PBKDF_ITER;
28
+ this.DEFAULT_LBOP_KEY_PBKDF_ITER = this.MIN_LBOP_KEY_PBKDF_ITER;
29
+ this.resetKeys();
30
+ }
31
+ resetKeys() {
32
+ this.keys = null;
33
+ this.masterKey = null;
34
+ }
35
+ purgeKeys() {
36
+ this.resetKeys();
37
+ this.persistService.clear();
38
+ }
39
+ populateKeys(keys) {
40
+ this.keys = keys;
41
+ }
42
+ getCurrentPassKey() {
43
+ return this.keys.passKey;
44
+ }
45
+ getCurrentMasterKey() {
46
+ return this.keys.masterKey;
47
+ }
48
+ getCurrentRootKey() {
49
+ return this.keys.rootKey;
50
+ }
51
+ getCurrentPxk() {
52
+ return this.keys.pxk;
53
+ }
54
+ getCurrentSigPxk() {
55
+ return this.keys.sigPxk;
56
+ }
57
+ expiresAfter(seconds) {
58
+ return new Date(Date.now() + 1000 * seconds);
59
+ }
60
+ persistMasterKey(masterKey, expiresAfterSeconds) {
61
+ return __awaiter(this, void 0, void 0, function* () {
62
+ const storedKey = {
63
+ id: masterKey.id,
64
+ jwk: masterKey.jwk.toJSON(true),
65
+ };
66
+ this.masterKey = masterKey;
67
+ // Save in an expirable cookie.
68
+ yield this.persistService.set({
69
+ name: this.STORE_MASTER_KEY,
70
+ value: storedKey,
71
+ expiry: this.expiresAfter(expiresAfterSeconds),
72
+ serverSession: !this.config.disableSessionEncryptionKey,
73
+ });
74
+ });
75
+ }
76
+ setMasterKeyExpiresAfterSeconds(seconds) {
77
+ return __awaiter(this, void 0, void 0, function* () {
78
+ const storedKey = yield this.persistService.get(this.STORE_MASTER_KEY);
79
+ if (storedKey == null) {
80
+ throw new LrNotFoundException(`Can not find masterKey in persisted storage using name: ${this.STORE_MASTER_KEY}`);
81
+ }
82
+ yield this.persistService.set({
83
+ name: this.STORE_MASTER_KEY,
84
+ value: storedKey,
85
+ expiry: this.expiresAfter(seconds),
86
+ serverSession: !this.config.disableSessionEncryptionKey,
87
+ });
88
+ });
89
+ }
90
+ // There's little benefit in using WebCrypto's none-extractable keys because if there
91
+ // is an XSS attack, then the attacker has control over the js that downloads the keys. The
92
+ // attacker can modify the code to import the keys as extractable. So none-extractable keys
93
+ // are only useful if they are already persisted and the user cannot download any more keys,
94
+ // which is not feasible.
95
+ // So storing the PassKey in localstorage for now, at least till we know what the usage
96
+ // pattern is, i.e. how often do we need to use the RootK, MaterK, and PassK.
97
+ loadMasterKey(masterKeyId) {
98
+ return __awaiter(this, void 0, void 0, function* () {
99
+ if (!this.masterKey) {
100
+ const storedKey = yield this.persistService.get(this.STORE_MASTER_KEY);
101
+ if (!storedKey) {
102
+ throw new LrNotFoundException('Could not find masterKey in persisted storage');
103
+ }
104
+ if (storedKey.id !== masterKeyId) {
105
+ throw new LrNotFoundException(`masterKeyId ${storedKey.id} in persisted storage does not match the one requested ${masterKeyId}`);
106
+ }
107
+ storedKey.jwk = yield KFS.asKey(storedKey.jwk);
108
+ this.masterKey = storedKey;
109
+ }
110
+ return this.masterKey;
111
+ });
112
+ }
113
+ }
114
+ KeyService.ɵprov = i0.ɵɵdefineInjectable({ factory: function KeyService_Factory() { return new KeyService(i0.ɵɵinject(i1.LR_CONFIG), i0.ɵɵinject(i2.PersistService)); }, token: KeyService, providedIn: "root" });
115
+ KeyService.decorators = [
116
+ { type: Injectable, args: [{
117
+ providedIn: 'root',
118
+ },] }
119
+ ];
120
+ KeyService.ctorParameters = () => [
121
+ { type: undefined, decorators: [{ type: Inject, args: [LR_CONFIG,] }] },
122
+ { type: PersistService }
123
+ ];
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiQzovUHJvamVjdHMvdGVzdC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9jcnlwdG9ncmFwaHkva2V5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLElBQUksR0FBRyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakUsT0FBTyxFQUFtQixTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7OztBQUVsRSxNQUFNLE9BQU8sUUFBUTtDQU1wQjtBQVVELE1BQU0sT0FBTyxVQUFVO0lBb0JyQixZQUM2QixNQUF1QixFQUMxQyxjQUE4QjtRQURYLFdBQU0sR0FBTixNQUFNLENBQWlCO1FBQzFDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQXJCdkIscUJBQWdCLEdBQUcsV0FBVyxDQUFDO1FBS2hELCtFQUErRTtRQUMvRSxtRkFBbUY7UUFDbkYscUZBQXFGO1FBQ3JGLCtFQUErRTtRQUMvRSxnREFBZ0Q7UUFDaEMsNEJBQXVCLEdBQUcsTUFBTSxDQUFDO1FBQ2pDLDRCQUF1QixHQUFHLE1BQU0sQ0FBQztRQUNqQyw0QkFBdUIsR0FBRyxNQUFNLENBQUM7UUFFakQscUZBQXFGO1FBQ3JFLGdDQUEyQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztRQUMzRCxnQ0FBMkIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUM7UUFDM0QsZ0NBQTJCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDO1FBTXpFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFjO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFTSxpQkFBaUI7UUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUMzQixDQUFDO0lBRU0sbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDN0IsQ0FBQztJQUVNLGlCQUFpQjtRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQzNCLENBQUM7SUFFTSxhQUFhO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDdkIsQ0FBQztJQUVNLGdCQUFnQjtRQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQzFCLENBQUM7SUFFTyxZQUFZLENBQUMsT0FBZTtRQUNsQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVLLGdCQUFnQixDQUNwQixTQUFjLEVBQ2QsbUJBQTJCOztZQUUzQixNQUFNLFNBQVMsR0FBRztnQkFDaEIsRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFO2dCQUNoQixHQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2FBQ2hDLENBQUM7WUFFRixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztZQUUzQiwrQkFBK0I7WUFDL0IsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQztnQkFDNUIsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQzNCLEtBQUssRUFBRSxTQUFTO2dCQUNoQixNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztnQkFDOUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQywyQkFBMkI7YUFDeEQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUFBO0lBRUssK0JBQStCLENBQUMsT0FBZTs7WUFDbkQsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN2RSxJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUU7Z0JBQ3JCLE1BQU0sSUFBSSxtQkFBbUIsQ0FDM0IsMkRBQTJELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUNuRixDQUFDO2FBQ0g7WUFDRCxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO2dCQUM1QixJQUFJLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtnQkFDM0IsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQztnQkFDbEMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQywyQkFBMkI7YUFDeEQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUFBO0lBRUQscUZBQXFGO0lBQ3JGLDJGQUEyRjtJQUMzRiwyRkFBMkY7SUFDM0YsNEZBQTRGO0lBQzVGLHlCQUF5QjtJQUN6Qix1RkFBdUY7SUFDdkYsNkVBQTZFO0lBQ3ZFLGFBQWEsQ0FBQyxXQUFtQjs7WUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ25CLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBRXZFLElBQUksQ0FBQyxTQUFTLEVBQUU7b0JBQ2QsTUFBTSxJQUFJLG1CQUFtQixDQUMzQiwrQ0FBK0MsQ0FDaEQsQ0FBQztpQkFDSDtnQkFFRCxJQUFJLFNBQVMsQ0FBQyxFQUFFLEtBQUssV0FBVyxFQUFFO29CQUNoQyxNQUFNLElBQUksbUJBQW1CLENBQzNCLGVBQWUsU0FBUyxDQUFDLEVBQUUsMERBQTBELFdBQVcsRUFBRSxDQUNuRyxDQUFDO2lCQUNIO2dCQUVELFNBQVMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFL0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7YUFDNUI7WUFFRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDeEIsQ0FBQztLQUFBOzs7O1lBcElGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OzRDQXNCSSxNQUFNLFNBQUMsU0FBUztZQXpDWixjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEtleSwgUGFzc0tleSB9IGZyb20gJy4vY3J5cHRvZ3JhcGh5LnR5cGVzJztcclxuaW1wb3J0IHsgTHJOb3RGb3VuZEV4Y2VwdGlvbiB9IGZyb20gJy4uL19jb21tb24vZXhjZXB0aW9ucyc7XHJcbmltcG9ydCB7IFBlcnNpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vYXBpL3BlcnNpc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IEtleUZhY3RvcnlTZXJ2aWNlIGFzIEtGUyB9IGZyb20gJy4va2V5LWZhY3Rvcnkuc2VydmljZSc7XHJcbmltcG9ydCB7IExpZmVSZWFkeUNvbmZpZywgTFJfQ09ORklHIH0gZnJvbSAnLi4vbGlmZS1yZWFkeS5jb25maWcnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJLZXlzIHtcclxuICBwYXNzS2V5OiBQYXNzS2V5O1xyXG4gIG1hc3RlcktleTogS2V5O1xyXG4gIHJvb3RLZXk/OiBLZXk7XHJcbiAgcHhrPzogS2V5O1xyXG4gIHNpZ1B4az86IEtleTtcclxufVxyXG5cclxuaW50ZXJmYWNlIFN0b3JlZFBhc3NLZXkge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgandrOiBvYmplY3Q7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBLZXlTZXJ2aWNlIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IFNUT1JFX01BU1RFUl9LRVkgPSAnbWFzdGVyS2V5JztcclxuICAvLyB2YXJpYWJsZXNcclxuICBwcml2YXRlIGtleXM6IFVzZXJLZXlzO1xyXG4gIHByaXZhdGUgbWFzdGVyS2V5OiBLZXk7XHJcblxyXG4gIC8vIEFaOiBUaGlzIGNhbid0IGJlIGNoYW5nZSBlYXNpbHkuIEl0J3MgYmFzaWNhbGx5IGEgUGFzc0sgb3IgUGFzc0lkcCByb3RhdGlvbi5cclxuICAvLyB0b2RvOiB3ZSBzaG91bGQgZXZlbnR1YWxseSBpbmNyZWFzZSB0aGlzIHBlcmlvZGljYWxseSB0byBtYXRjaCB3aXRoIE1vb3JlJ3MgbGF3LlxyXG4gIC8vIFRoZSBpdGVyYXRpb25zIGZvciBlYWNoIGtleSBhcmUga2VwdCBieSB0aGUgc2VydmVyIGFzIHdlbGwgYnV0IHdlIGFzc3VtZSB0aGUgdmFsdWVcclxuICAvLyBmcm9tIHRoZSBzZXJ2ZXIgaXMgbm90IHRydXN0d29ydGh5LCBzbyBuZWVkIHRvIGhhdmUgbWluaW11bSB0aHJlc2hvbGRzIGhlcmUuXHJcbiAgLy8gSWYgY3JlYXRpbmcgbmV3IGtleXMsIHRoZXNlIG1pbmltdW0gYXJlIHVzZWQuXHJcbiAgcHVibGljIHJlYWRvbmx5IE1JTl9QQVNTX0lEUF9QQktERl9JVEVSID0gMTAwMDAwO1xyXG4gIHB1YmxpYyByZWFkb25seSBNSU5fUEFTU19LRVlfUEJLREZfSVRFUiA9IDEwMDAwMDtcclxuICBwdWJsaWMgcmVhZG9ubHkgTUlOX0xCT1BfS0VZX1BCS0RGX0lURVIgPSAxMDAwMDA7XHJcblxyXG4gIC8vIFRoZXNlIGFyZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHZhbHVlcy4gVGhleSBtdXN0IGJlIGxhcmdlciB0aGFuIHRoZSBtaW5pbXVtIHZhbHVlcy5cclxuICBwdWJsaWMgcmVhZG9ubHkgREVGQVVMVF9QQVNTX0lEUF9QQktERl9JVEVSID0gdGhpcy5NSU5fUEFTU19JRFBfUEJLREZfSVRFUjtcclxuICBwdWJsaWMgcmVhZG9ubHkgREVGQVVMVF9QQVNTX0tFWV9QQktERl9JVEVSID0gdGhpcy5NSU5fUEFTU19LRVlfUEJLREZfSVRFUjtcclxuICBwdWJsaWMgcmVhZG9ubHkgREVGQVVMVF9MQk9QX0tFWV9QQktERl9JVEVSID0gdGhpcy5NSU5fTEJPUF9LRVlfUEJLREZfSVRFUjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KExSX0NPTkZJRykgcHJpdmF0ZSBjb25maWc6IExpZmVSZWFkeUNvbmZpZyxcclxuICAgIHByaXZhdGUgcGVyc2lzdFNlcnZpY2U6IFBlcnNpc3RTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLnJlc2V0S2V5cygpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRLZXlzKCkge1xyXG4gICAgdGhpcy5rZXlzID0gbnVsbDtcclxuICAgIHRoaXMubWFzdGVyS2V5ID0gbnVsbDtcclxuICB9XHJcblxyXG4gIHB1cmdlS2V5cygpIHtcclxuICAgIHRoaXMucmVzZXRLZXlzKCk7XHJcbiAgICB0aGlzLnBlcnNpc3RTZXJ2aWNlLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICBwb3B1bGF0ZUtleXMoa2V5czogVXNlcktleXMpIHtcclxuICAgIHRoaXMua2V5cyA9IGtleXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q3VycmVudFBhc3NLZXkoKTogS2V5IHtcclxuICAgIHJldHVybiB0aGlzLmtleXMucGFzc0tleTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDdXJyZW50TWFzdGVyS2V5KCk6IEtleSB7XHJcbiAgICByZXR1cm4gdGhpcy5rZXlzLm1hc3RlcktleTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDdXJyZW50Um9vdEtleSgpOiBLZXkge1xyXG4gICAgcmV0dXJuIHRoaXMua2V5cy5yb290S2V5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEN1cnJlbnRQeGsoKTogS2V5IHtcclxuICAgIHJldHVybiB0aGlzLmtleXMucHhrO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEN1cnJlbnRTaWdQeGsoKTogS2V5IHtcclxuICAgIHJldHVybiB0aGlzLmtleXMuc2lnUHhrO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBpcmVzQWZ0ZXIoc2Vjb25kczogbnVtYmVyKTogRGF0ZSB7XHJcbiAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5ub3coKSArIDEwMDAgKiBzZWNvbmRzKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHBlcnNpc3RNYXN0ZXJLZXkoXHJcbiAgICBtYXN0ZXJLZXk6IEtleSxcclxuICAgIGV4cGlyZXNBZnRlclNlY29uZHM6IG51bWJlclxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3Qgc3RvcmVkS2V5ID0ge1xyXG4gICAgICBpZDogbWFzdGVyS2V5LmlkLFxyXG4gICAgICBqd2s6IG1hc3RlcktleS5qd2sudG9KU09OKHRydWUpLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLm1hc3RlcktleSA9IG1hc3RlcktleTtcclxuXHJcbiAgICAvLyBTYXZlIGluIGFuIGV4cGlyYWJsZSBjb29raWUuXHJcbiAgICBhd2FpdCB0aGlzLnBlcnNpc3RTZXJ2aWNlLnNldCh7XHJcbiAgICAgIG5hbWU6IHRoaXMuU1RPUkVfTUFTVEVSX0tFWSxcclxuICAgICAgdmFsdWU6IHN0b3JlZEtleSxcclxuICAgICAgZXhwaXJ5OiB0aGlzLmV4cGlyZXNBZnRlcihleHBpcmVzQWZ0ZXJTZWNvbmRzKSxcclxuICAgICAgc2VydmVyU2Vzc2lvbjogIXRoaXMuY29uZmlnLmRpc2FibGVTZXNzaW9uRW5jcnlwdGlvbktleSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2V0TWFzdGVyS2V5RXhwaXJlc0FmdGVyU2Vjb25kcyhzZWNvbmRzOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHN0b3JlZEtleSA9IGF3YWl0IHRoaXMucGVyc2lzdFNlcnZpY2UuZ2V0KHRoaXMuU1RPUkVfTUFTVEVSX0tFWSk7XHJcbiAgICBpZiAoc3RvcmVkS2V5ID09IG51bGwpIHtcclxuICAgICAgdGhyb3cgbmV3IExyTm90Rm91bmRFeGNlcHRpb24oXHJcbiAgICAgICAgYENhbiBub3QgZmluZCBtYXN0ZXJLZXkgaW4gcGVyc2lzdGVkIHN0b3JhZ2UgdXNpbmcgbmFtZTogJHt0aGlzLlNUT1JFX01BU1RFUl9LRVl9YFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5wZXJzaXN0U2VydmljZS5zZXQoe1xyXG4gICAgICBuYW1lOiB0aGlzLlNUT1JFX01BU1RFUl9LRVksXHJcbiAgICAgIHZhbHVlOiBzdG9yZWRLZXksXHJcbiAgICAgIGV4cGlyeTogdGhpcy5leHBpcmVzQWZ0ZXIoc2Vjb25kcyksXHJcbiAgICAgIHNlcnZlclNlc3Npb246ICF0aGlzLmNvbmZpZy5kaXNhYmxlU2Vzc2lvbkVuY3J5cHRpb25LZXksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIFRoZXJlJ3MgbGl0dGxlIGJlbmVmaXQgaW4gdXNpbmcgV2ViQ3J5cHRvJ3Mgbm9uZS1leHRyYWN0YWJsZSBrZXlzIGJlY2F1c2UgaWYgdGhlcmVcclxuICAvLyBpcyBhbiBYU1MgYXR0YWNrLCB0aGVuIHRoZSBhdHRhY2tlciBoYXMgY29udHJvbCBvdmVyIHRoZSBqcyB0aGF0IGRvd25sb2FkcyB0aGUga2V5cy4gVGhlXHJcbiAgLy8gYXR0YWNrZXIgY2FuIG1vZGlmeSB0aGUgY29kZSB0byBpbXBvcnQgdGhlIGtleXMgYXMgZXh0cmFjdGFibGUuIFNvIG5vbmUtZXh0cmFjdGFibGUga2V5c1xyXG4gIC8vIGFyZSBvbmx5IHVzZWZ1bCBpZiB0aGV5IGFyZSBhbHJlYWR5IHBlcnNpc3RlZCBhbmQgdGhlIHVzZXIgY2Fubm90IGRvd25sb2FkIGFueSBtb3JlIGtleXMsXHJcbiAgLy8gd2hpY2ggaXMgbm90IGZlYXNpYmxlLlxyXG4gIC8vIFNvIHN0b3JpbmcgdGhlIFBhc3NLZXkgaW4gbG9jYWxzdG9yYWdlIGZvciBub3csIGF0IGxlYXN0IHRpbGwgd2Uga25vdyB3aGF0IHRoZSB1c2FnZVxyXG4gIC8vIHBhdHRlcm4gaXMsIGkuZS4gaG93IG9mdGVuIGRvIHdlIG5lZWQgdG8gdXNlIHRoZSBSb290SywgTWF0ZXJLLCBhbmQgUGFzc0suXHJcbiAgYXN5bmMgbG9hZE1hc3RlcktleShtYXN0ZXJLZXlJZDogc3RyaW5nKTogUHJvbWlzZTxLZXk+IHtcclxuICAgIGlmICghdGhpcy5tYXN0ZXJLZXkpIHtcclxuICAgICAgY29uc3Qgc3RvcmVkS2V5ID0gYXdhaXQgdGhpcy5wZXJzaXN0U2VydmljZS5nZXQodGhpcy5TVE9SRV9NQVNURVJfS0VZKTtcclxuXHJcbiAgICAgIGlmICghc3RvcmVkS2V5KSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IExyTm90Rm91bmRFeGNlcHRpb24oXHJcbiAgICAgICAgICAnQ291bGQgbm90IGZpbmQgbWFzdGVyS2V5IGluIHBlcnNpc3RlZCBzdG9yYWdlJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChzdG9yZWRLZXkuaWQgIT09IG1hc3RlcktleUlkKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IExyTm90Rm91bmRFeGNlcHRpb24oXHJcbiAgICAgICAgICBgbWFzdGVyS2V5SWQgJHtzdG9yZWRLZXkuaWR9IGluIHBlcnNpc3RlZCBzdG9yYWdlIGRvZXMgbm90IG1hdGNoIHRoZSBvbmUgcmVxdWVzdGVkICR7bWFzdGVyS2V5SWR9YFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN0b3JlZEtleS5qd2sgPSBhd2FpdCBLRlMuYXNLZXkoc3RvcmVkS2V5Lmp3ayk7XHJcblxyXG4gICAgICB0aGlzLm1hc3RlcktleSA9IHN0b3JlZEtleTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5tYXN0ZXJLZXk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,169 @@
1
+ import { __awaiter } from "tslib";
2
+ import { Injectable } from '@angular/core';
3
+ import { Slip39, Slip39Helper } from 'slip39';
4
+ import * as i0 from "@angular/core";
5
+ export class SecretShare {
6
+ constructor(assembly = 0, subAssembly = 0, mnemonics = '') {
7
+ this.assembly = assembly;
8
+ this.subAssembly = subAssembly;
9
+ this.mnemonics = mnemonics;
10
+ }
11
+ }
12
+ export class SubAssembly {
13
+ constructor(index, threshold = 0, size = 0) {
14
+ this.index = index;
15
+ this.threshold = threshold;
16
+ this.size = size;
17
+ this.clearShares();
18
+ }
19
+ clearShares() {
20
+ this.shares = Array();
21
+ }
22
+ addShare(share) {
23
+ this.shares.push(share);
24
+ }
25
+ }
26
+ export class Assembly {
27
+ constructor(threshold = 0) {
28
+ this.threshold = threshold;
29
+ this.clearSubAssemblies();
30
+ }
31
+ size() {
32
+ return this.subAssemblies.length;
33
+ }
34
+ clearSubAssemblies() {
35
+ this.subAssemblies = new Array();
36
+ }
37
+ addSubAssembly(subAssembly) {
38
+ this.subAssemblies.push(subAssembly);
39
+ }
40
+ }
41
+ export class SubQuorum {
42
+ constructor(subAssemblyIndex) {
43
+ this.subAssemblyIndex = subAssemblyIndex;
44
+ this.clearShares();
45
+ }
46
+ clearShares() {
47
+ this.shares = new Array();
48
+ }
49
+ addShare(share) {
50
+ this.shares.push(share);
51
+ }
52
+ }
53
+ export class Quorum {
54
+ constructor() {
55
+ this.clearSubQuora();
56
+ }
57
+ clearSubQuora() {
58
+ this.subQuora = new Array();
59
+ }
60
+ addSubQuorum(subQuorum) {
61
+ this.subQuora.push(subQuorum);
62
+ }
63
+ serialiseShares() {
64
+ let shares = [];
65
+ this.subQuora.forEach((subQuorum) => {
66
+ shares = shares.concat(subQuorum.shares);
67
+ });
68
+ return shares;
69
+ }
70
+ }
71
+ export class Slip39Service {
72
+ constructor() { }
73
+ generateShares(secret, passphrase, assembly) {
74
+ return __awaiter(this, void 0, void 0, function* () {
75
+ // Hex-encode secret.
76
+ let ems = btoa(secret);
77
+ ems = Slip39Helper.slip39EncodeHex(ems);
78
+ // Construct group specifications
79
+ const groups = [];
80
+ for (const sa of assembly.subAssemblies) {
81
+ groups.push([sa.threshold, sa.size]);
82
+ }
83
+ // Split!
84
+ const slip = yield Slip39.fromArray(ems, {
85
+ passphrase,
86
+ threshold: assembly.threshold,
87
+ groups,
88
+ title: '',
89
+ });
90
+ // Extract shares
91
+ assembly.subAssemblies.forEach((sa, isa) => {
92
+ // Remove any existing shares
93
+ sa.clearShares();
94
+ for (let im = 0; im < sa.size; im++) {
95
+ // Construct the path to the share, formatted as "r/<subassembly index>/<member index>"
96
+ // with <subassembly index> and <member index> being two-digit, zero-padded integers.
97
+ const path = 'r/' +
98
+ isa.toString().padStart(2, '0') +
99
+ '/' +
100
+ im.toString().padStart(2, '0');
101
+ const mnemonics = slip.fromPath(path).mnemonics[0];
102
+ const share = new SecretShare(isa, im, mnemonics);
103
+ sa.addShare(share);
104
+ }
105
+ });
106
+ });
107
+ }
108
+ // Remove all redundant shares. i.e. keep only enough members and groups to satisfy the thresholds.
109
+ minimalSet(mnemonics) {
110
+ // Decode the mnemonics and sort then into groups.
111
+ let groupThresh = null;
112
+ const groups = new Map();
113
+ for (const mnemonic of mnemonics) {
114
+ const decoded = Slip39Helper.decodeMnemonic(mnemonic);
115
+ if (groupThresh && groupThresh !== decoded.groupThreshold) {
116
+ throw new Error('groupThreshold is different in mnemonics');
117
+ }
118
+ groupThresh = decoded.groupThreshold;
119
+ // Note that Slip39.recoverSecret() will do all the error checking again. So it's not critical
120
+ // that we error check here. So we just optimistically assume it's all good.
121
+ let g = groups.get(decoded.groupIndex);
122
+ if (g == null) {
123
+ g = {
124
+ memberThreshold: decoded.memberThreshold,
125
+ members: [],
126
+ };
127
+ groups.set(decoded.groupIndex, g);
128
+ }
129
+ g.members.push({
130
+ mnemonic,
131
+ decoded,
132
+ });
133
+ }
134
+ // Keep the minimum set of groups that meet threshold.
135
+ const mnemonicsMinSet = [];
136
+ let groupCount = 0;
137
+ for (const g of groups.values()) {
138
+ // Keep only groups that meet threshold
139
+ if (g.members.length < g.memberThreshold) {
140
+ continue;
141
+ }
142
+ // Keep minimum number of approvals needed for group
143
+ g.members.slice(0, g.memberThreshold).forEach((member) => {
144
+ mnemonicsMinSet.push(member.mnemonic);
145
+ });
146
+ ++groupCount;
147
+ if (groupCount >= groupThresh) {
148
+ break;
149
+ }
150
+ }
151
+ return mnemonicsMinSet;
152
+ }
153
+ recoverSecret(shares, passphrase) {
154
+ return __awaiter(this, void 0, void 0, function* () {
155
+ shares = this.minimalSet(shares);
156
+ const recovered = yield Slip39.recoverSecret(shares, passphrase);
157
+ const secret = Slip39Helper.slip39DecodeHex(recovered);
158
+ return atob(secret);
159
+ });
160
+ }
161
+ }
162
+ Slip39Service.ɵprov = i0.ɵɵdefineInjectable({ factory: function Slip39Service_Factory() { return new Slip39Service(); }, token: Slip39Service, providedIn: "root" });
163
+ Slip39Service.decorators = [
164
+ { type: Injectable, args: [{
165
+ providedIn: 'root',
166
+ },] }
167
+ ];
168
+ Slip39Service.ctorParameters = () => [];
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpcDM5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiQzovUHJvamVjdHMvdGVzdC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9jcnlwdG9ncmFwaHkvc2xpcDM5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxRQUFRLENBQUM7O0FBRTlDLE1BQU0sT0FBTyxXQUFXO0lBQ3RCLFlBQ1MsV0FBbUIsQ0FBQyxFQUNwQixjQUFzQixDQUFDLEVBQ3ZCLFlBQW9CLEVBQUU7UUFGdEIsYUFBUSxHQUFSLFFBQVEsQ0FBWTtRQUNwQixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixjQUFTLEdBQVQsU0FBUyxDQUFhO0lBQzVCLENBQUM7Q0FDTDtBQUVELE1BQU0sT0FBTyxXQUFXO0lBQ3RCLFlBQ1MsS0FBYSxFQUNiLFlBQW9CLENBQUMsRUFDckIsT0FBZSxDQUFDO1FBRmhCLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDYixjQUFTLEdBQVQsU0FBUyxDQUFZO1FBQ3JCLFNBQUksR0FBSixJQUFJLENBQVk7UUFFdkIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFJTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVNLFFBQVEsQ0FBQyxLQUFrQjtRQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sUUFBUTtJQUNuQixZQUFtQixZQUFvQixDQUFDO1FBQXJCLGNBQVMsR0FBVCxTQUFTLENBQVk7UUFDdEMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUlNLElBQUk7UUFDVCxPQUFPLElB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YmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNsaXAzOSwgU2xpcDM5SGVscGVyIH0gZnJvbSAnc2xpcDM5JztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWNyZXRTaGFyZSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgYXNzZW1ibHk6IG51bWJlciA9IDAsXHJcbiAgICBwdWJsaWMgc3ViQXNzZW1ibHk6IG51bWJlciA9IDAsXHJcbiAgICBwdWJsaWMgbW5lbW9uaWNzOiBzdHJpbmcgPSAnJ1xyXG4gICkge31cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1YkFzc2VtYmx5IHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBpbmRleDogbnVtYmVyLFxyXG4gICAgcHVibGljIHRocmVzaG9sZDogbnVtYmVyID0gMCxcclxuICAgIHB1YmxpYyBzaXplOiBudW1iZXIgPSAwXHJcbiAgKSB7XHJcbiAgICB0aGlzLmNsZWFyU2hhcmVzKCk7XHJcbiAgfVxyXG5cclxuICBzaGFyZXM6IFNlY3JldFNoYXJlW107XHJcblxyXG4gIHB1YmxpYyBjbGVhclNoYXJlcygpIHtcclxuICAgIHRoaXMuc2hhcmVzID0gQXJyYXkoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZGRTaGFyZShzaGFyZTogU2VjcmV0U2hhcmUpIHtcclxuICAgIHRoaXMuc2hhcmVzLnB1c2goc2hhcmUpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEFzc2VtYmx5IHtcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGhyZXNob2xkOiBudW1iZXIgPSAwKSB7XHJcbiAgICB0aGlzLmNsZWFyU3ViQXNzZW1ibGllcygpO1xyXG4gIH1cclxuXHJcbiAgc3ViQXNzZW1ibGllczogU3ViQXNzZW1ibHlbXTtcclxuXHJcbiAgcHVibGljIHNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdWJBc3NlbWJsaWVzLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGVhclN1YkFzc2VtYmxpZXMoKSB7XHJcbiAgICB0aGlzLnN1YkFzc2VtYmxpZXMgPSBuZXcgQXJyYXkoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZGRTdWJBc3NlbWJseShzdWJBc3NlbWJseTogU3ViQXNzZW1ibHkpIHtcclxuICAgIHRoaXMuc3ViQXNzZW1ibGllcy5wdXNoKHN1YkFzc2VtYmx5KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTdWJRdW9ydW0ge1xyXG4gIHNoYXJlczogc3RyaW5nW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBzdWJBc3NlbWJseUluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMuY2xlYXJTaGFyZXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGVhclNoYXJlcygpIHtcclxuICAgIHRoaXMuc2hhcmVzID0gbmV3IEFycmF5KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkU2hhcmUoc2hhcmU6IHN0cmluZykge1xyXG4gICAgdGhpcy5zaGFyZXMucHVzaChzaGFyZSk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUXVvcnVtIHtcclxuICBzdWJRdW9yYTogU3ViUXVvcnVtW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5jbGVhclN1YlF1b3JhKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXJTdWJRdW9yYSgpIHtcclxuICAgIHRoaXMuc3ViUXVvcmEgPSBuZXcgQXJyYXkoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZGRTdWJRdW9ydW0oc3ViUXVvcnVtOiBTdWJRdW9ydW0pIHtcclxuICAgIHRoaXMuc3ViUXVvcmEucHVzaChzdWJRdW9ydW0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlcmlhbGlzZVNoYXJlcygpIHtcclxuICAgIGxldCBzaGFyZXMgPSBbXTtcclxuXHJcbiAgICB0aGlzLnN1YlF1b3JhLmZvckVhY2goKHN1YlF1b3J1bSkgPT4ge1xyXG4gICAgICBzaGFyZXMgPSBzaGFyZXMuY29uY2F0KHN1YlF1b3J1bS5zaGFyZXMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHNoYXJlcztcclxuICB9XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbGlwMzlTZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZW5lcmF0ZVNoYXJlcyhzZWNyZXQsIHBhc3NwaHJhc2U6IHN0cmluZywgYXNzZW1ibHk6IEFzc2VtYmx5KSB7XHJcbiAgICAvLyBIZXgtZW5jb2RlIHNlY3JldC5cclxuICAgIGxldCBlbXMgPSBidG9hKHNlY3JldCk7XHJcbiAgICBlbXMgPSBTbGlwMzlIZWxwZXIuc2xpcDM5RW5jb2RlSGV4KGVtcyk7XHJcblxyXG4gICAgLy8gQ29uc3RydWN0IGdyb3VwIHNwZWNpZmljYXRpb25zXHJcbiAgICBjb25zdCBncm91cHMgPSBbXTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IHNhIG9mIGFzc2VtYmx5LnN1YkFzc2VtYmxpZXMpIHtcclxuICAgICAgZ3JvdXBzLnB1c2goW3NhLnRocmVzaG9sZCwgc2Euc2l6ZV0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNwbGl0IVxyXG4gICAgY29uc3Qgc2xpcCA9IGF3YWl0IFNsaXAzOS5mcm9tQXJyYXkoZW1zLCB7XHJcbiAgICAgIHBhc3NwaHJhc2UsXHJcbiAgICAgIHRocmVzaG9sZDogYXNzZW1ibHkudGhyZXNob2xkLFxyXG4gICAgICBncm91cHMsXHJcbiAgICAgIHRpdGxlOiAnJyxcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEV4dHJhY3Qgc2hhcmVzXHJcbiAgICBhc3NlbWJseS5zdWJBc3NlbWJsaWVzLmZvckVhY2goKHNhLCBpc2EpID0+IHtcclxuICAgICAgLy8gUmVtb3ZlIGFueSBleGlzdGluZyBzaGFyZXNcclxuICAgICAgc2EuY2xlYXJTaGFyZXMoKTtcclxuXHJcbiAgICAgIGZvciAobGV0IGltID0gMDsgaW0gPCBzYS5zaXplOyBpbSsrKSB7XHJcbiAgICAgICAgLy8gQ29uc3RydWN0IHRoZSBwYXRoIHRvIHRoZSBzaGFyZSwgZm9ybWF0dGVkIGFzIFwici88c3ViYXNzZW1ibHkgaW5kZXg+LzxtZW1iZXIgaW5kZXg+XCJcclxuICAgICAgICAvLyB3aXRoIDxzdWJhc3NlbWJseSBpbmRleD4gYW5kIDxtZW1iZXIgaW5kZXg+IGJlaW5nIHR3by1kaWdpdCwgemVyby1wYWRkZWQgaW50ZWdlcnMuXHJcbiAgICAgICAgY29uc3QgcGF0aCA9XHJcbiAgICAgICAgICAnci8nICtcclxuICAgICAgICAgIGlzYS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJykgK1xyXG4gICAgICAgICAgJy8nICtcclxuICAgICAgICAgIGltLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgICAgICBjb25zdCBtbmVtb25pY3MgPSBzbGlwLmZyb21QYXRoKHBhdGgpLm1uZW1vbmljc1swXTtcclxuICAgICAgICBjb25zdCBzaGFyZSA9IG5ldyBTZWNyZXRTaGFyZShpc2EsIGltLCBtbmVtb25pY3MpO1xyXG5cclxuICAgICAgICBzYS5hZGRTaGFyZShzaGFyZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gUmVtb3ZlIGFsbCByZWR1bmRhbnQgc2hhcmVzLiBpLmUuIGtlZXAgb25seSBlbm91Z2ggbWVtYmVycyBhbmQgZ3JvdXBzIHRvIHNhdGlzZnkgdGhlIHRocmVzaG9sZHMuXHJcbiAgcHJpdmF0ZSBtaW5pbWFsU2V0KG1uZW1vbmljczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XHJcbiAgICAvLyBEZWNvZGUgdGhlIG1uZW1vbmljcyBhbmQgc29ydCB0aGVuIGludG8gZ3JvdXBzLlxyXG4gICAgbGV0IGdyb3VwVGhyZXNoID0gbnVsbDtcclxuICAgIGNvbnN0IGdyb3VwcyA9IG5ldyBNYXAoKTtcclxuICAgIGZvciAoY29uc3QgbW5lbW9uaWMgb2YgbW5lbW9uaWNzKSB7XHJcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBTbGlwMzlIZWxwZXIuZGVjb2RlTW5lbW9uaWMobW5lbW9uaWMpO1xyXG5cclxuICAgICAgaWYgKGdyb3VwVGhyZXNoICYmIGdyb3VwVGhyZXNoICE9PSBkZWNvZGVkLmdyb3VwVGhyZXNob2xkKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdncm91cFRocmVzaG9sZCBpcyBkaWZmZXJlbnQgaW4gbW5lbW9uaWNzJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGdyb3VwVGhyZXNoID0gZGVjb2RlZC5ncm91cFRocmVzaG9sZDtcclxuXHJcbiAgICAgIC8vIE5vdGUgdGhhdCBTbGlwMzkucmVjb3ZlclNlY3JldCgpIHdpbGwgZG8gYWxsIHRoZSBlcnJvciBjaGVja2luZyBhZ2Fpbi4gU28gaXQncyBub3QgY3JpdGljYWxcclxuICAgICAgLy8gdGhhdCB3ZSBlcnJvciBjaGVjayBoZXJlLiBTbyB3ZSBqdXN0IG9wdGltaXN0aWNhbGx5IGFzc3VtZSBpdCdzIGFsbCBnb29kLlxyXG4gICAgICBsZXQgZyA9IGdyb3Vwcy5nZXQoZGVjb2RlZC5ncm91cEluZGV4KTtcclxuICAgICAgaWYgKGcgPT0gbnVsbCkge1xyXG4gICAgICAgIGcgPSB7XHJcbiAgICAgICAgICBtZW1iZXJUaHJlc2hvbGQ6IGRlY29kZWQubWVtYmVyVGhyZXNob2xkLFxyXG4gICAgICAgICAgbWVtYmVyczogW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBncm91cHMuc2V0KGRlY29kZWQuZ3JvdXBJbmRleCwgZyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGcubWVtYmVycy5wdXNoKHtcclxuICAgICAgICBtbmVtb25pYyxcclxuICAgICAgICBkZWNvZGVkLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBLZWVwIHRoZSBtaW5pbXVtIHNldCBvZiBncm91cHMgdGhhdCBtZWV0IHRocmVzaG9sZC5cclxuICAgIGNvbnN0IG1uZW1vbmljc01pblNldCA9IFtdO1xyXG4gICAgbGV0IGdyb3VwQ291bnQgPSAwO1xyXG4gICAgZm9yIChjb25zdCBnIG9mIGdyb3Vwcy52YWx1ZXMoKSkge1xyXG4gICAgICAvLyBLZWVwIG9ubHkgZ3JvdXBzIHRoYXQgbWVldCB0aHJlc2hvbGRcclxuICAgICAgaWYgKGcubWVtYmVycy5sZW5ndGggPCBnLm1lbWJlclRocmVzaG9sZCkge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBLZWVwIG1pbmltdW0gbnVtYmVyIG9mIGFwcHJvdmFscyBuZWVkZWQgZm9yIGdyb3VwXHJcbiAgICAgIGcubWVtYmVycy5zbGljZSgwLCBnLm1lbWJlclRocmVzaG9sZCkuZm9yRWFjaCgobWVtYmVyKSA9PiB7XHJcbiAgICAgICAgbW5lbW9uaWNzTWluU2V0LnB1c2gobWVtYmVyLm1uZW1vbmljKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICArK2dyb3VwQ291bnQ7XHJcbiAgICAgIGlmIChncm91cENvdW50ID49IGdyb3VwVGhyZXNoKSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbW5lbW9uaWNzTWluU2V0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHJlY292ZXJTZWNyZXQoc2hhcmVzOiBzdHJpbmdbXSwgcGFzc3BocmFzZTogc3RyaW5nKSB7XHJcbiAgICBzaGFyZXMgPSB0aGlzLm1pbmltYWxTZXQoc2hhcmVzKTtcclxuXHJcbiAgICBjb25zdCByZWNvdmVyZWQgPSBhd2FpdCBTbGlwMzkucmVjb3ZlclNlY3JldChzaGFyZXMsIHBhc3NwaHJhc2UpO1xyXG5cclxuICAgIGNvbnN0IHNlY3JldCA9IFNsaXAzOUhlbHBlci5zbGlwMzlEZWNvZGVIZXgocmVjb3ZlcmVkKTtcclxuXHJcbiAgICByZXR1cm4gYXRvYihzZWNyZXQpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,29 @@
1
+ import { __awaiter } from "tslib";
2
+ import { Injectable } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ export class WebCryptoService {
5
+ constructor() {
6
+ this.crypto = window.crypto;
7
+ }
8
+ toHex(buffer) {
9
+ // Ref: https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest
10
+ const array = Array.from(new Uint8Array(buffer)); // convert buffer to byte array
11
+ const hex = array.map((b) => b.toString(16).padStart(2, '0')).join(''); // convert bytes to hex string
12
+ return hex;
13
+ }
14
+ stringDigest(algorithm, message) {
15
+ return __awaiter(this, void 0, void 0, function* () {
16
+ const encoder = new TextEncoder();
17
+ const data = encoder.encode(message);
18
+ const hash = yield this.crypto.subtle.digest(algorithm, data);
19
+ return this.toHex(hash);
20
+ });
21
+ }
22
+ }
23
+ WebCryptoService.ɵprov = i0.ɵɵdefineInjectable({ factory: function WebCryptoService_Factory() { return new WebCryptoService(); }, token: WebCryptoService, providedIn: "root" });
24
+ WebCryptoService.decorators = [
25
+ { type: Injectable, args: [{
26
+ providedIn: 'root',
27
+ },] }
28
+ ];
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLWNyeXB0by5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IkM6L1Byb2plY3RzL3Rlc3QvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvY3J5cHRvZ3JhcGh5L3dlYi1jcnlwdG8uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLM0MsTUFBTSxPQUFPLGdCQUFnQjtJQUg3QjtRQUlFLFdBQU0sR0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDO0tBZWhDO0lBYkMsS0FBSyxDQUFDLE1BQW1CO1FBQ3ZCLDRFQUE0RTtRQUM1RSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQywrQkFBK0I7UUFDakYsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsOEJBQThCO1FBQ3RHLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVLLFlBQVksQ0FBQyxTQUFpQixFQUFFLE9BQWU7O1lBQ25ELE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyQyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDOUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLENBQUM7S0FBQTs7OztZQWxCRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgV2ViQ3J5cHRvU2VydmljZSB7XHJcbiAgY3J5cHRvOiBDcnlwdG8gPSB3aW5kb3cuY3J5cHRvO1xyXG5cclxuICB0b0hleChidWZmZXI6IEFycmF5QnVmZmVyKSB7XHJcbiAgICAvLyBSZWY6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TdWJ0bGVDcnlwdG8vZGlnZXN0XHJcbiAgICBjb25zdCBhcnJheSA9IEFycmF5LmZyb20obmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSk7IC8vIGNvbnZlcnQgYnVmZmVyIHRvIGJ5dGUgYXJyYXlcclxuICAgIGNvbnN0IGhleCA9IGFycmF5Lm1hcCgoYikgPT4gYi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyk7IC8vIGNvbnZlcnQgYnl0ZXMgdG8gaGV4IHN0cmluZ1xyXG4gICAgcmV0dXJuIGhleDtcclxuICB9XHJcblxyXG4gIGFzeW5jIHN0cmluZ0RpZ2VzdChhbGdvcml0aG06IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcclxuICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVyLmVuY29kZShtZXNzYWdlKTtcclxuICAgIGNvbnN0IGhhc2ggPSBhd2FpdCB0aGlzLmNyeXB0by5zdWJ0bGUuZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XHJcbiAgICByZXR1cm4gdGhpcy50b0hleChoYXNoKTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,84 @@
1
+ import { __awaiter } from "tslib";
2
+ import { InjectionToken } from '@angular/core';
3
+ import { ApolloLink, createHttpLink, from, InMemoryCache, } from '@apollo/client/core';
4
+ import { setContext } from '@apollo/client/link/context';
5
+ import { RetryLink } from '@apollo/client/link/retry';
6
+ import { LrApiErrorCode } from './_common/exceptions';
7
+ export const LR_CONFIG = new InjectionToken('LR.AUTH');
8
+ const RETRY_ERROR_CODES = [LrApiErrorCode.CONCURRENT_ACCESS];
9
+ export const configureApollo = (config, auth) => {
10
+ const defaultOptions = {
11
+ watchQuery: {
12
+ fetchPolicy: 'no-cache',
13
+ errorPolicy: 'all',
14
+ },
15
+ query: {
16
+ fetchPolicy: 'no-cache',
17
+ errorPolicy: 'all',
18
+ },
19
+ mutate: {
20
+ errorPolicy: 'all',
21
+ },
22
+ };
23
+ const authLink = setContext((_, { headers }) => __awaiter(void 0, void 0, void 0, function* () {
24
+ let accessJwt = null;
25
+ try {
26
+ accessJwt = (yield auth.currentSession()).getAccessToken();
27
+ }
28
+ catch (_a) {
29
+ console.log('User not signed in');
30
+ }
31
+ return {
32
+ headers: Object.assign(Object.assign({}, headers), { authorization: accessJwt ? `Bearer ${accessJwt.jwtToken}` : '' }),
33
+ };
34
+ }));
35
+ // We are only retrying on certain errors, like the CONCURRENT_ACCESS gql
36
+ // error which indicates DB race condition. So can be safely retried.
37
+ const retryIf = (error, _) => {
38
+ // The RetryLink is called on network error as well, so we need to filter for GraphQL errors.
39
+ if (error instanceof GraphQLErrorException) {
40
+ if (error.errors.some((e) => { var _a; return RETRY_ERROR_CODES.includes((_a = e.extensions) === null || _a === void 0 ? void 0 : _a.code); })) {
41
+ return true;
42
+ }
43
+ }
44
+ return false;
45
+ };
46
+ const retryLink = new RetryLink({
47
+ delay: {
48
+ initial: 300,
49
+ max: Infinity,
50
+ jitter: true,
51
+ },
52
+ attempts: {
53
+ max: 3,
54
+ retryIf,
55
+ },
56
+ });
57
+ class GraphQLErrorException extends Error {
58
+ constructor(errors) {
59
+ super(errors.map((e) => e.message).join(', '));
60
+ this.errors = errors;
61
+ }
62
+ }
63
+ // Throw exception on gql errors which effectively promotes it to a network
64
+ // error, which can then be handled by the RetryLink.
65
+ const promoteGqlErrors = new ApolloLink((operation, forward) => {
66
+ return forward(operation).map((data) => {
67
+ if (data && data.errors) {
68
+ const errors = data.errors.filter((e) => { var _a; return RETRY_ERROR_CODES.includes((_a = e.extensions) === null || _a === void 0 ? void 0 : _a.code); });
69
+ if (errors.length > 0) {
70
+ throw new GraphQLErrorException(data.errors);
71
+ }
72
+ }
73
+ return data;
74
+ });
75
+ });
76
+ const httpLink = createHttpLink({
77
+ uri: config.apolloUrl,
78
+ // Sending the sessionid cookie so that the server can use session data when needed.
79
+ // eg. setting the session encryption key.
80
+ credentials: 'include',
81
+ });
82
+ return Object.assign({ link: from([retryLink, promoteGqlErrors, authLink, httpLink]), cache: new InMemoryCache(), defaultOptions }, config.apolloConfig);
83
+ };
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlmZS1yZWFkeS5jb25maWcuanMiLCJzb3VyY2VSb290IjoiQzovUHJvamVjdHMvdGVzdC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9saWZlLXJlYWR5LmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQyxPQUFPLEVBRUwsVUFBVSxFQUNWLGNBQWMsRUFFZCxJQUFJLEVBQ0osYUFBYSxHQUNkLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHdEQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLElBQUksY0FBYyxDQUFrQixTQUFTLENBQUMsQ0FBQztBQUN4RSxNQUFNLGlCQUFpQixHQUFHLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFhN0QsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQzdCLE1BQXVCLEVBQ3ZCLElBQWUsRUFDVyxFQUFFO0lBQzVCLE1BQU0sY0FBYyxHQUFtQjtRQUNyQyxVQUFVLEVBQUU7WUFDVixXQUFXLEVBQUUsVUFBVTtZQUN2QixXQUFXLEVBQUUsS0FBSztTQUNuQjtRQUNELEtBQUssRUFBRTtZQUNMLFdBQVcsRUFBRSxVQUFVO1lBQ3ZCLFdBQVcsRUFBRSxLQUFLO1NBQ25CO1FBQ0QsTUFBTSxFQUFFO1lBQ04sV0FBVyxFQUFFLEtBQUs7U0FDbkI7S0FDRixDQUFDO0lBRUYsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLENBQU8sQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtRQUNuRCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSTtZQUNGLFNBQVMs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QUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEF1dGhDbGFzcyB9IGZyb20gJ0Bhd3MtYW1wbGlmeS9hdXRoL2xpYi1lc20vQXV0aCc7XHJcbmltcG9ydCB7XHJcbiAgQXBvbGxvQ2xpZW50T3B0aW9ucyxcclxuICBBcG9sbG9MaW5rLFxyXG4gIGNyZWF0ZUh0dHBMaW5rLFxyXG4gIERlZmF1bHRPcHRpb25zLFxyXG4gIGZyb20sXHJcbiAgSW5NZW1vcnlDYWNoZSxcclxufSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlJztcclxuaW1wb3J0IHsgc2V0Q29udGV4dCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2xpbmsvY29udGV4dCc7XHJcbmltcG9ydCB7IFJldHJ5TGluayB9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2xpbmsvcmV0cnknO1xyXG5pbXBvcnQgeyBMckFwaUVycm9yQ29kZSB9IGZyb20gJy4vX2NvbW1vbi9leGNlcHRpb25zJztcclxuaW1wb3J0IHsgR3JhcGhRTEVycm9yIH0gZnJvbSAnZ3JhcGhxbCc7XHJcblxyXG5leHBvcnQgY29uc3QgTFJfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPExpZmVSZWFkeUNvbmZpZz4oJ0xSLkFVVEgnKTtcclxuY29uc3QgUkVUUllfRVJST1JfQ09ERVMgPSBbTHJBcGlFcnJvckNvZGUuQ09OQ1VSUkVOVF9BQ0NFU1NdO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMaWZlUmVhZHlDb25maWcge1xyXG4gIGF1dGhVcmw6IHN0cmluZztcclxuICBhcGlVcmw6IHN0cmluZztcclxuICBhcG9sbG9Vcmw6IHN0cmluZztcclxuICB1c2VyUG9vbElkOiBzdHJpbmc7XHJcbiAgdXNlclBvb2xXZWJDbGllbnRJZDogc3RyaW5nO1xyXG4gIGFwb2xsb0NvbmZpZz86IEFwb2xsb0NsaWVudE9wdGlvbnM8YW55PjtcclxuICAvLyBNYWlubHkgdG8gYWxsb3cgbG9jYWxob3N0IHRvIG5vdCBuZWVkaW5nIHRoaXMuIERlZmF1bHQgdG8gZmFsc3lcclxuICBkaXNhYmxlU2Vzc2lvbkVuY3J5cHRpb25LZXk/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgY29uZmlndXJlQXBvbGxvID0gKFxyXG4gIGNvbmZpZzogTGlmZVJlYWR5Q29uZmlnLFxyXG4gIGF1dGg6IEF1dGhDbGFzc1xyXG4pOiBBcG9sbG9DbGllbnRPcHRpb25zPGFueT4gPT4ge1xyXG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zOiBEZWZhdWx0T3B0aW9ucyA9IHtcclxuICAgIHdhdGNoUXVlcnk6IHtcclxuICAgICAgZmV0Y2hQb2xpY3k6ICduby1jYWNoZScsXHJcbiAgICAgIGVycm9yUG9saWN5OiAnYWxsJyxcclxuICAgIH0sXHJcbiAgICBxdWVyeToge1xyXG4gICAgICBmZXRjaFBvbGljeTogJ25vLWNhY2hlJyxcclxuICAgICAgZXJyb3JQb2xpY3k6ICdhbGwnLFxyXG4gICAgfSxcclxuICAgIG11dGF0ZToge1xyXG4gICAgICBlcnJvclBvbGljeTogJ2FsbCcsXHJcbiAgICB9LFxyXG4gIH07XHJcblxyXG4gIGNvbnN0IGF1dGhMaW5rID0gc2V0Q29udGV4dChhc3luYyAoXywgeyBoZWFkZXJzIH0pID0+IHtcclxuICAgIGxldCBhY2Nlc3NKd3QgPSBudWxsO1xyXG4gICAgdHJ5IHtcclxuICAgICAgYWNjZXNzSnd0ID0gKGF3YWl0IGF1dGguY3VycmVudFNlc3Npb24oKSkuZ2V0QWNjZXNzVG9rZW4oKTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICBjb25zb2xlLmxvZygnVXNlciBub3Qgc2lnbmVkIGluJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgIC4uLmhlYWRlcnMsXHJcbiAgICAgICAgYXV0aG9yaXphdGlvbjogYWNjZXNzSnd0ID8gYEJlYXJlciAke2FjY2Vzc0p3dC5qd3RUb2tlbn1gIDogJycsXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gIH0pO1xyXG5cclxuICAvLyBXZSBhcmUgb25seSByZXRyeWluZyBvbiBjZXJ0YWluIGVycm9ycywgbGlrZSB0aGUgQ09OQ1VSUkVOVF9BQ0NFU1MgZ3FsXHJcbiAgLy8gZXJyb3Igd2hpY2ggaW5kaWNhdGVzIERCIHJhY2UgY29uZGl0aW9uLiBTbyBjYW4gYmUgc2FmZWx5IHJldHJpZWQuXHJcbiAgY29uc3QgcmV0cnlJZiA9IChlcnJvciwgXykgPT4ge1xyXG4gICAgLy8gVGhlIFJldHJ5TGluayBpcyBjYWxsZWQgb24gbmV0d29yayBlcnJvciBhcyB3ZWxsLCBzbyB3ZSBuZWVkIHRvIGZpbHRlciBmb3IgR3JhcGhRTCBlcnJvcnMuXHJcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBHcmFwaFFMRXJyb3JFeGNlcHRpb24pIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGVycm9yLmVycm9ycy5zb21lKChlKSA9PiBSRVRSWV9FUlJPUl9DT0RFUy5pbmNsdWRlcyhlLmV4dGVuc2lvbnM/LmNvZGUpKVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9O1xyXG5cclxuICBjb25zdCByZXRyeUxpbmsgPSBuZXcgUmV0cnlMaW5rKHtcclxuICAgIGRlbGF5OiB7XHJcbiAgICAgIGluaXRpYWw6IDMwMCxcclxuICAgICAgbWF4OiBJbmZpbml0eSxcclxuICAgICAgaml0dGVyOiB0cnVlLFxyXG4gICAgfSxcclxuICAgIGF0dGVtcHRzOiB7XHJcbiAgICAgIG1heDogMyxcclxuICAgICAgcmV0cnlJZixcclxuICAgIH0sXHJcbiAgfSk7XHJcblxyXG4gIGNsYXNzIEdyYXBoUUxFcnJvckV4Y2VwdGlvbiBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlcnJvcnM6IHJlYWRvbmx5IEdyYXBoUUxFcnJvcltdKSB7XHJcbiAgICAgIHN1cGVyKGVycm9ycy5tYXAoKGUpID0+IGUubWVzc2FnZSkuam9pbignLCAnKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBUaHJvdyBleGNlcHRpb24gb24gZ3FsIGVycm9ycyB3aGljaCBlZmZlY3RpdmVseSBwcm9tb3RlcyBpdCB0byBhIG5ldHdvcmtcclxuICAvLyBlcnJvciwgd2hpY2ggY2FuIHRoZW4gYmUgaGFuZGxlZCBieSB0aGUgUmV0cnlMaW5rLlxyXG4gIGNvbnN0IHByb21vdGVHcWxFcnJvcnMgPSBuZXcgQXBvbGxvTGluaygob3BlcmF0aW9uLCBmb3J3YXJkKSA9PiB7XHJcbiAgICByZXR1cm4gZm9yd2FyZChvcGVyYXRpb24pLm1hcCgoZGF0YSkgPT4ge1xyXG4gICAgICBpZiAoZGF0YSAmJiBkYXRhLmVycm9ycykge1xyXG4gICAgICAgIGNvbnN0IGVycm9ycyA9IGRhdGEuZXJyb3JzLmZpbHRlcigoZSkgPT5cclxuICAgICAgICAgIFJFVFJZX0VSUk9SX0NPREVTLmluY2x1ZGVzKGUuZXh0ZW5zaW9ucz8uY29kZSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRocm93IG5ldyBHcmFwaFFMRXJyb3JFeGNlcHRpb24oZGF0YS5lcnJvcnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH0pO1xyXG4gIH0pO1xyXG5cclxuICBjb25zdCBodHRwTGluayA9IGNyZWF0ZUh0dHBMaW5rKHtcclxuICAgIHVyaTogY29uZmlnLmFwb2xsb1VybCxcclxuICAgIC8vIFNlbmRpbmcgdGhlIHNlc3Npb25pZCBjb29raWUgc28gdGhhdCB0aGUgc2VydmVyIGNhbiB1c2Ugc2Vzc2lvbiBkYXRhIHdoZW4gbmVlZGVkLlxyXG4gICAgLy8gZWcuIHNldHRpbmcgdGhlIHNlc3Npb24gZW5jcnlwdGlvbiBrZXkuXHJcbiAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnLFxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgbGluazogZnJvbShbcmV0cnlMaW5rLCBwcm9tb3RlR3FsRXJyb3JzLCBhdXRoTGluaywgaHR0cExpbmtdKSxcclxuICAgIGNhY2hlOiBuZXcgSW5NZW1vcnlDYWNoZSgpLFxyXG4gICAgZGVmYXVsdE9wdGlvbnMsXHJcbiAgICAuLi5jb25maWcuYXBvbGxvQ29uZmlnLFxyXG4gIH07XHJcbn07XHJcbiJdfQ==
@@ -0,0 +1,74 @@
1
+ import { HttpClientModule } from '@angular/common/http';
2
+ import { APP_INITIALIZER, NgModule } from '@angular/core';
3
+ import Auth from '@aws-amplify/auth';
4
+ import { AuthClass } from '@aws-amplify/auth/lib-esm/Auth';
5
+ import { APOLLO_OPTIONS } from 'apollo-angular';
6
+ import { CookieService } from 'ngx-cookie-service';
7
+ import { FileService } from './api/file.service';
8
+ import { ProfileService } from './users/profile.service';
9
+ import { configureAmplifyAuth } from './auth/auth.config';
10
+ import { initialiseAuth, LifeReadyAuthService, } from './auth/life-ready-auth.service';
11
+ import { PasswordService } from './auth/password.service';
12
+ import { RegisterService } from './auth/register.service';
13
+ import { EncryptionService } from './cryptography/encryption.service';
14
+ import { KeyGraphService } from './cryptography/key-graph.service';
15
+ import { KeyService } from './cryptography/key.service';
16
+ import { KeyFactoryService } from './cryptography/key-factory.service';
17
+ import { WebCryptoService } from './cryptography/web-crypto.service';
18
+ import { configureApollo, LR_CONFIG, } from './life-ready.config';
19
+ import { TimeService } from './api/time.service';
20
+ import { NgIdleKeepaliveModule } from '@ng-idle/keepalive';
21
+ export class LifeReadyModule {
22
+ static forRoot(config) {
23
+ return {
24
+ ngModule: LifeReadyModule,
25
+ providers: [
26
+ {
27
+ provide: LR_CONFIG,
28
+ useValue: config,
29
+ },
30
+ {
31
+ provide: AuthClass,
32
+ useValue: Auth,
33
+ },
34
+ {
35
+ provide: APP_INITIALIZER,
36
+ useFactory: configureAmplifyAuth,
37
+ deps: [LR_CONFIG, AuthClass],
38
+ multi: true,
39
+ },
40
+ {
41
+ provide: APP_INITIALIZER,
42
+ useFactory: initialiseAuth,
43
+ deps: [LifeReadyAuthService],
44
+ multi: true,
45
+ },
46
+ {
47
+ provide: APOLLO_OPTIONS,
48
+ useFactory: configureApollo,
49
+ deps: [LR_CONFIG, AuthClass],
50
+ },
51
+ ],
52
+ };
53
+ }
54
+ }
55
+ LifeReadyModule.decorators = [
56
+ { type: NgModule, args: [{
57
+ imports: [HttpClientModule, NgIdleKeepaliveModule.forRoot()],
58
+ providers: [
59
+ CookieService,
60
+ TimeService,
61
+ FileService,
62
+ ProfileService,
63
+ RegisterService,
64
+ LifeReadyAuthService,
65
+ PasswordService,
66
+ WebCryptoService,
67
+ EncryptionService,
68
+ KeyGraphService,
69
+ KeyService,
70
+ KeyFactoryService,
71
+ ],
72
+ },] }
73
+ ];
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlmZS1yZWFkeS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiQzovUHJvamVjdHMvdGVzdC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9saWZlLXJlYWR5Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxJQUFJLE1BQU0sbUJBQW1CLENBQUM7QUFDckMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxRCxPQUFPLEVBQ0wsY0FBYyxFQUNkLG9CQUFvQixHQUNyQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNyRSxPQUFPLEVBQ0wsZUFBZSxFQUVmLFNBQVMsR0FDVixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQW1CM0QsTUFBTSxPQUFPLGVBQWU7SUFDbkIsTUFBTSxDQUFDLE9BQU8sQ0FDbkIsTUFBdUI7UUFFdkIsT0FBTztZQUNMLFFBQVEsRUFBRSxlQUFlO1lBQ3pCLFNBQVMsRUFBRTtnQkFDVDtvQkFDRSxPQUFPLEVBQUUsU0FBUztvQkFDbEIsUUFBUSxFQUFFLE1BQU07aUJBQ2pCO2dCQUNEO29CQUNFLE9BQU8sRUFBRSxTQUFTO29CQUNsQixRQUFRLEVBQUUsSUFBSTtpQkFDZjtnQkFDRDtvQkFDRSxPQUFPLEVBQUUsZUFBZTtvQkFDeEIsVUFBVSxFQUFFLG9CQUFvQjtvQkFDaEMsSUFBSSxFQUFFLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQztvQkFDNUIsS0FBSyxFQUFFLElBQUk7aUJBQ1o7Z0JBQ0Q7b0JBQ0UsT0FBTyxFQUFFLGVBQWU7b0JBQ3hCLFVBQVUsRUFBRSxjQUFjO29CQUMxQixJQUFJLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztvQkFDNUIsS0FBSyxFQUFFLElBQUk7aUJBQ1o7Z0JBQ0Q7b0JBQ0UsT0FBTyxFQUFFLGNBQWM7b0JBQ3ZCLFVBQVUsRUFBRSxlQUFlO29CQUMzQixJQUFJLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDO2lCQUM3QjthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7OztZQW5ERixRQUFRLFNBQUM7Z0JBQ1IsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUscUJBQXFCLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzVELFNBQVMsRUFBRTtvQkFDVCxhQUFhO29CQUNiLFdBQVc7b0JBQ1gsV0FBVztvQkFDWCxjQUFjO29CQUNkLGVBQWU7b0JBQ2Ysb0JBQW9CO29CQUNwQixlQUFlO29CQUNmLGdCQUFnQjtvQkFDaEIsaUJBQWlCO29CQUNqQixlQUFlO29CQUNmLFVBQVU7b0JBQ1YsaUJBQWlCO2lCQUNsQjthQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgQXV0aCBmcm9tICdAYXdzLWFtcGxpZnkvYXV0aCc7XHJcbmltcG9ydCB7IEF1dGhDbGFzcyB9IGZyb20gJ0Bhd3MtYW1wbGlmeS9hdXRoL2xpYi1lc20vQXV0aCc7XHJcbmltcG9ydCB7IEFQT0xMT19PUFRJT05TIH0gZnJvbSAnYXBvbGxvLWFuZ3VsYXInO1xyXG5pbXBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSAnbmd4LWNvb2tpZS1zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmlsZVNlcnZpY2UgfSBmcm9tICcuL2FwaS9maWxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9maWxlU2VydmljZSB9IGZyb20gJy4vdXNlcnMvcHJvZmlsZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgY29uZmlndXJlQW1wbGlmeUF1dGggfSBmcm9tICcuL2F1dGgvYXV0aC5jb25maWcnO1xyXG5pbXBvcnQge1xyXG4gIGluaXRpYWxpc2VBdXRoLFxyXG4gIExpZmVSZWFkeUF1dGhTZXJ2aWNlLFxyXG59IGZyb20gJy4vYXV0aC9saWZlLXJlYWR5LWF1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IFBhc3N3b3JkU2VydmljZSB9IGZyb20gJy4vYXV0aC9wYXNzd29yZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVnaXN0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoL3JlZ2lzdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbmNyeXB0aW9uU2VydmljZSB9IGZyb20gJy4vY3J5cHRvZ3JhcGh5L2VuY3J5cHRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEtleUdyYXBoU2VydmljZSB9IGZyb20gJy4vY3J5cHRvZ3JhcGh5L2tleS1ncmFwaC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgS2V5U2VydmljZSB9IGZyb20gJy4vY3J5cHRvZ3JhcGh5L2tleS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgS2V5RmFjdG9yeVNlcnZpY2UgfSBmcm9tICcuL2NyeXB0b2dyYXBoeS9rZXktZmFjdG9yeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV2ViQ3J5cHRvU2VydmljZSB9IGZyb20gJy4vY3J5cHRvZ3JhcGh5L3dlYi1jcnlwdG8uc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgY29uZmlndXJlQXBvbGxvLFxyXG4gIExpZmVSZWFkeUNvbmZpZyxcclxuICBMUl9DT05GSUcsXHJcbn0gZnJvbSAnLi9saWZlLXJlYWR5LmNvbmZpZyc7XHJcbmltcG9ydCB7IFRpbWVTZXJ2aWNlIH0gZnJvbSAnLi9hcGkvdGltZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmdJZGxlS2VlcGFsaXZlTW9kdWxlIH0gZnJvbSAnQG5nLWlkbGUva2VlcGFsaXZlJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW0h0dHBDbGllbnRNb2R1bGUsIE5nSWRsZUtlZXBhbGl2ZU1vZHVsZS5mb3JSb290KCldLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgQ29va2llU2VydmljZSxcclxuICAgIFRpbWVTZXJ2aWNlLFxyXG4gICAgRmlsZVNlcnZpY2UsXHJcbiAgICBQcm9maWxlU2VydmljZSxcclxuICAgIFJlZ2lzdGVyU2VydmljZSxcclxuICAgIExpZmVSZWFkeUF1dGhTZXJ2aWNlLFxyXG4gICAgUGFzc3dvcmRTZXJ2aWNlLFxyXG4gICAgV2ViQ3J5cHRvU2VydmljZSxcclxuICAgIEVuY3J5cHRpb25TZXJ2aWNlLFxyXG4gICAgS2V5R3JhcGhTZXJ2aWNlLFxyXG4gICAgS2V5U2VydmljZSxcclxuICAgIEtleUZhY3RvcnlTZXJ2aWNlLFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaWZlUmVhZHlNb2R1bGUge1xyXG4gIHB1YmxpYyBzdGF0aWMgZm9yUm9vdChcclxuICAgIGNvbmZpZzogTGlmZVJlYWR5Q29uZmlnXHJcbiAgKTogTW9kdWxlV2l0aFByb3ZpZGVyczxMaWZlUmVhZHlNb2R1bGU+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5nTW9kdWxlOiBMaWZlUmVhZHlNb2R1bGUsXHJcbiAgICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHByb3ZpZGU6IExSX0NPTkZJRyxcclxuICAgICAgICAgIHVzZVZhbHVlOiBjb25maWcsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwcm92aWRlOiBBdXRoQ2xhc3MsXHJcbiAgICAgICAgICB1c2VWYWx1ZTogQXV0aCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcclxuICAgICAgICAgIHVzZUZhY3Rvcnk6IGNvbmZpZ3VyZUFtcGxpZnlBdXRoLFxyXG4gICAgICAgICAgZGVwczogW0xSX0NPTkZJRywgQXV0aENsYXNzXSxcclxuICAgICAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxyXG4gICAgICAgICAgdXNlRmFjdG9yeTogaW5pdGlhbGlzZUF1dGgsXHJcbiAgICAgICAgICBkZXBzOiBbTGlmZVJlYWR5QXV0aFNlcnZpY2VdLFxyXG4gICAgICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwcm92aWRlOiBBUE9MTE9fT1BUSU9OUyxcclxuICAgICAgICAgIHVzZUZhY3Rvcnk6IGNvbmZpZ3VyZUFwb2xsbyxcclxuICAgICAgICAgIGRlcHM6IFtMUl9DT05GSUcsIEF1dGhDbGFzc10sXHJcbiAgICAgICAgfSxcclxuICAgICAgXSxcclxuICAgIH07XHJcbiAgfVxyXG59XHJcbiJdfQ==