@lifeready/core 1.0.0 → 1.0.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 (378) hide show
  1. package/README.md +62 -62
  2. package/karma.conf.js +32 -0
  3. package/ng-package.json +26 -0
  4. package/package.json +21 -29
  5. package/src/lib/_common/ast.ts +75 -0
  6. package/src/lib/_common/deferred-promise.ts +35 -0
  7. package/src/lib/_common/exceptions.ts +189 -0
  8. package/src/lib/_common/queries.gql.ts +200 -0
  9. package/src/lib/_common/run-outside-angular.ts +125 -0
  10. package/src/lib/_common/tests.ts +82 -0
  11. package/{lib/_common/types.d.ts → src/lib/_common/types.ts} +13 -10
  12. package/src/lib/_common/utils.ts +57 -0
  13. package/src/lib/api/api-mutation.spec.ts +547 -0
  14. package/src/lib/api/api-query.spec.ts +40 -0
  15. package/src/lib/api/contact-card.gql.ts +85 -0
  16. package/src/lib/api/contact-card.service.spec.ts +249 -0
  17. package/src/lib/api/contact-card.service.ts +228 -0
  18. package/src/lib/api/contact-card2.gql.ts +93 -0
  19. package/src/lib/api/contact-card2.service.spec.ts +297 -0
  20. package/src/lib/api/contact-card2.service.ts +139 -0
  21. package/src/lib/api/file.service.spec.ts +14 -0
  22. package/src/lib/api/file.service.ts +81 -0
  23. package/src/lib/api/item2.gql.ts +211 -0
  24. package/src/lib/api/item2.service.spec.ts +1043 -0
  25. package/src/lib/api/item2.service.ts +481 -0
  26. package/src/lib/api/key-exchange.gql.ts +196 -0
  27. package/src/lib/api/key-exchange.service.spec.ts +470 -0
  28. package/src/lib/api/key-exchange.service.ts +731 -0
  29. package/src/lib/api/key-exchange.types.ts +235 -0
  30. package/src/lib/api/key-exchange2.gql.ts +310 -0
  31. package/src/lib/api/key-exchange2.service.spec.ts +892 -0
  32. package/src/lib/api/key-exchange2.service.ts +875 -0
  33. package/src/lib/api/lock.gql.ts +67 -0
  34. package/src/lib/api/lock.service.spec.ts +549 -0
  35. package/src/lib/api/lock.service.ts +57 -0
  36. package/src/lib/api/lr-apollo.service.spec.ts +27 -0
  37. package/src/lib/api/lr-apollo.service.ts +43 -0
  38. package/{lib/api/lr-graphql/index.d.ts → src/lib/api/lr-graphql/index.ts} +5 -5
  39. package/src/lib/api/lr-graphql/lr-graphql.service.ts +313 -0
  40. package/src/lib/api/lr-graphql/lr-merged-mutation.ts +377 -0
  41. package/src/lib/api/lr-graphql/lr-mutation-base.ts +67 -0
  42. package/src/lib/api/lr-graphql/lr-mutation.ts +74 -0
  43. package/src/lib/api/lr-graphql/lr.service.ts +28 -0
  44. package/src/lib/api/message.service.spec.ts +20 -0
  45. package/src/lib/api/message.service.ts +210 -0
  46. package/src/lib/api/persist.service.spec.ts +209 -0
  47. package/src/lib/api/persist.service.ts +220 -0
  48. package/src/lib/api/query-processor/common-processors.service.ts +148 -0
  49. package/{lib/api/query-processor/index.d.ts → src/lib/api/query-processor/index.ts} +2 -2
  50. package/src/lib/api/query-processor/query-processor.service.ts +240 -0
  51. package/src/lib/api/query-processor/tp-password-reset-processor.service.ts +177 -0
  52. package/src/lib/api/shared-contact-card.service.ts +156 -0
  53. package/src/lib/api/shared-contact-card2.gql.ts +76 -0
  54. package/src/lib/api/shared-contact-card2.service.ts +154 -0
  55. package/src/lib/api/time.service.spec.ts +48 -0
  56. package/src/lib/api/time.service.ts +155 -0
  57. package/src/lib/api/types/graphql.types.ts +48 -0
  58. package/{lib/api/types/index.d.ts → src/lib/api/types/index.ts} +2 -2
  59. package/src/lib/api/types/lr-graphql.types.ts +467 -0
  60. package/src/lib/auth/auth.config.ts +83 -0
  61. package/src/lib/auth/auth.gql.ts +62 -0
  62. package/src/lib/auth/auth.types.ts +79 -0
  63. package/src/lib/auth/idle.service.spec.ts +119 -0
  64. package/src/lib/auth/idle.service.ts +208 -0
  65. package/src/lib/auth/idle.types.ts +11 -0
  66. package/src/lib/auth/lbop.service.spec.ts +56 -0
  67. package/src/lib/auth/lbop.service.ts +539 -0
  68. package/src/lib/auth/life-ready-auth.service.spec.ts +70 -0
  69. package/src/lib/auth/life-ready-auth.service.ts +454 -0
  70. package/src/lib/auth/password.service.spec.ts +51 -0
  71. package/src/lib/auth/password.service.ts +438 -0
  72. package/src/lib/auth/register.service.spec.ts +31 -0
  73. package/src/lib/auth/register.service.ts +181 -0
  74. package/src/lib/auth/two-factor.service.spec.ts +21 -0
  75. package/src/lib/auth/two-factor.service.ts +69 -0
  76. package/src/lib/category/category-meta.service.spec.ts +28 -0
  77. package/src/lib/category/category-meta.service.ts +125 -0
  78. package/src/lib/category/category.gql.ts +449 -0
  79. package/src/lib/category/category.service.spec.ts +26 -0
  80. package/src/lib/category/category.service.ts +498 -0
  81. package/src/lib/category/category.types.ts +89 -0
  82. package/src/lib/cryptography/cryptography.types.ts +108 -0
  83. package/src/lib/cryptography/encryption.service.spec.ts +125 -0
  84. package/src/lib/cryptography/encryption.service.ts +243 -0
  85. package/src/lib/cryptography/key-factory.service.spec.ts +15 -0
  86. package/src/lib/cryptography/key-factory.service.ts +303 -0
  87. package/src/lib/cryptography/key-graph.service.spec.ts +16 -0
  88. package/src/lib/cryptography/key-graph.service.ts +354 -0
  89. package/src/lib/cryptography/key-meta.service.spec.ts +40 -0
  90. package/src/lib/cryptography/key-meta.service.ts +254 -0
  91. package/src/lib/cryptography/key.service.spec.ts +16 -0
  92. package/src/lib/cryptography/key.service.ts +154 -0
  93. package/src/lib/cryptography/slip39.service.spec.ts +44 -0
  94. package/src/lib/cryptography/slip39.service.ts +204 -0
  95. package/src/lib/cryptography/web-crypto.service.ts +22 -0
  96. package/src/lib/life-ready.config.ts +127 -0
  97. package/src/lib/life-ready.module.ts +81 -0
  98. package/src/lib/plan/plan.gql.ts +133 -0
  99. package/src/lib/plan/plan.service.spec.ts +294 -0
  100. package/src/lib/plan/plan.service.ts +198 -0
  101. package/src/lib/plan/plan.types.ts +37 -0
  102. package/src/lib/record/record-attachment.service.spec.ts +31 -0
  103. package/src/lib/record/record-attachment.service.ts +101 -0
  104. package/src/lib/record/record.gql.ts +192 -0
  105. package/src/lib/record/record.service.spec.ts +598 -0
  106. package/src/lib/record/record.service.ts +236 -0
  107. package/src/lib/record/record.types.ts +86 -0
  108. package/src/lib/record-type/record-type.service.spec.ts +16 -0
  109. package/src/lib/record-type/record-type.service.ts +71 -0
  110. package/src/lib/record-type/record-type.types.ts +58 -0
  111. package/src/lib/scenario/approvals/scenario-approval.gql.ts +112 -0
  112. package/src/lib/scenario/approvals/scenario-approval.types.ts +85 -0
  113. package/src/lib/scenario/approvals/scenario-approver.service.spec.ts +16 -0
  114. package/src/lib/scenario/approvals/scenario-approver.service.ts +422 -0
  115. package/src/lib/scenario/claimants/scenario-claimant.gql.ts +56 -0
  116. package/src/lib/scenario/claimants/scenario-claimant.service.spec.ts +16 -0
  117. package/src/lib/scenario/claimants/scenario-claimant.service.ts +100 -0
  118. package/src/lib/scenario/claimants/scenario-claimant.types.ts +21 -0
  119. package/src/lib/scenario/receivers/scenario-receiver.gql.ts +157 -0
  120. package/src/lib/scenario/receivers/scenario-receiver.service.spec.ts +16 -0
  121. package/src/lib/scenario/receivers/scenario-receiver.service.ts +278 -0
  122. package/src/lib/scenario/receivers/scenario-receiver.types.ts +66 -0
  123. package/src/lib/scenario/scenario-setup.service.spec.ts +22 -0
  124. package/src/lib/scenario/scenario-setup.service.ts +369 -0
  125. package/src/lib/scenario/scenario.gql.ts +404 -0
  126. package/src/lib/scenario/scenario.service.spec.ts +1586 -0
  127. package/src/lib/scenario/scenario.service.ts +811 -0
  128. package/src/lib/scenario/scenario.types.ts +258 -0
  129. package/src/lib/search/search.gql.ts +62 -0
  130. package/src/lib/search/search.service.spec.ts +57 -0
  131. package/src/lib/search/search.service.ts +174 -0
  132. package/src/lib/search/search.types.ts +24 -0
  133. package/src/lib/trusted-parties/tp-password-reset-request.service.ts +140 -0
  134. package/src/lib/trusted-parties/tp-password-reset-user.service.ts +359 -0
  135. package/src/lib/trusted-parties/tp-password-reset.gql.ts +453 -0
  136. package/src/lib/trusted-parties/tp-password-reset.service.spec.ts +602 -0
  137. package/src/lib/trusted-parties/tp-password-reset.service.ts +482 -0
  138. package/src/lib/trusted-parties/trusted-party.gql.ts +159 -0
  139. package/src/lib/trusted-parties/trusted-party.service.spec.ts +1008 -0
  140. package/src/lib/trusted-parties/trusted-party.service.ts +394 -0
  141. package/src/lib/trusted-parties/trusted-party.types.ts +119 -0
  142. package/src/lib/trusted-parties/trusted-party2.gql.ts +165 -0
  143. package/src/lib/trusted-parties/trusted-party2.service.spec.ts +1782 -0
  144. package/src/lib/trusted-parties/trusted-party2.service.ts +272 -0
  145. package/src/lib/users/profile-details.service.spec.ts +45 -0
  146. package/src/lib/users/profile-details.service.ts +278 -0
  147. package/src/lib/users/profile.gql.ts +108 -0
  148. package/src/lib/users/profile.service.spec.ts +97 -0
  149. package/src/lib/users/profile.service.ts +224 -0
  150. package/src/lib/users/profile.types.ts +101 -0
  151. package/src/lib/users/user.gql.ts +69 -0
  152. package/src/lib/users/user.service.spec.ts +161 -0
  153. package/src/lib/users/user.service.ts +72 -0
  154. package/src/lib/users/user.types.ts +27 -0
  155. package/{public-api.d.ts → src/public-api.ts} +96 -77
  156. package/src/test.ts +21 -0
  157. package/tsconfig.lib.json +21 -0
  158. package/tsconfig.lib.prod.json +6 -0
  159. package/tsconfig.spec.json +10 -0
  160. package/tslint.json +17 -0
  161. package/bundles/lifeready-core.umd.js +0 -15876
  162. package/bundles/lifeready-core.umd.js.map +0 -1
  163. package/bundles/lifeready-core.umd.min.js +0 -16
  164. package/bundles/lifeready-core.umd.min.js.map +0 -1
  165. package/esm2015/lib/_common/ast.js +0 -40
  166. package/esm2015/lib/_common/deferred-promise.js +0 -24
  167. package/esm2015/lib/_common/exceptions.js +0 -157
  168. package/esm2015/lib/_common/queries.gql.js +0 -190
  169. package/esm2015/lib/_common/run-outside-angular.js +0 -79
  170. package/esm2015/lib/_common/types.js +0 -1
  171. package/esm2015/lib/_common/utils.js +0 -44
  172. package/esm2015/lib/api/contact-card.gql.js +0 -79
  173. package/esm2015/lib/api/contact-card.service.js +0 -154
  174. package/esm2015/lib/api/contact-card2.gql.js +0 -60
  175. package/esm2015/lib/api/contact-card2.service.js +0 -103
  176. package/esm2015/lib/api/file.service.js +0 -74
  177. package/esm2015/lib/api/item2.gql.js +0 -110
  178. package/esm2015/lib/api/item2.service.js +0 -311
  179. package/esm2015/lib/api/key-exchange.gql.js +0 -188
  180. package/esm2015/lib/api/key-exchange.service.js +0 -442
  181. package/esm2015/lib/api/key-exchange.types.js +0 -18
  182. package/esm2015/lib/api/key-exchange2.gql.js +0 -171
  183. package/esm2015/lib/api/key-exchange2.service.js +0 -479
  184. package/esm2015/lib/api/lock.gql.js +0 -40
  185. package/esm2015/lib/api/lock.service.js +0 -64
  186. package/esm2015/lib/api/lr-apollo.service.js +0 -46
  187. package/esm2015/lib/api/lr-graphql/index.js +0 -6
  188. package/esm2015/lib/api/lr-graphql/lr-graphql.service.js +0 -155
  189. package/esm2015/lib/api/lr-graphql/lr-merged-mutation.js +0 -213
  190. package/esm2015/lib/api/lr-graphql/lr-mutation-base.js +0 -51
  191. package/esm2015/lib/api/lr-graphql/lr-mutation.js +0 -48
  192. package/esm2015/lib/api/lr-graphql/lr.service.js +0 -18
  193. package/esm2015/lib/api/message.service.js +0 -138
  194. package/esm2015/lib/api/persist.service.js +0 -181
  195. package/esm2015/lib/api/query-processor/common-processors.service.js +0 -93
  196. package/esm2015/lib/api/query-processor/index.js +0 -3
  197. package/esm2015/lib/api/query-processor/query-processor.service.js +0 -192
  198. package/esm2015/lib/api/query-processor/tp-password-reset-processor.service.js +0 -109
  199. package/esm2015/lib/api/shared-contact-card.service.js +0 -119
  200. package/esm2015/lib/api/shared-contact-card2.gql.js +0 -41
  201. package/esm2015/lib/api/shared-contact-card2.service.js +0 -117
  202. package/esm2015/lib/api/time.service.js +0 -146
  203. package/esm2015/lib/api/types/graphql.types.js +0 -7
  204. package/esm2015/lib/api/types/index.js +0 -3
  205. package/esm2015/lib/api/types/lr-graphql.types.js +0 -71
  206. package/esm2015/lib/auth/auth.config.js +0 -57
  207. package/esm2015/lib/auth/auth.gql.js +0 -48
  208. package/esm2015/lib/auth/auth.types.js +0 -27
  209. package/esm2015/lib/auth/idle.service.js +0 -168
  210. package/esm2015/lib/auth/idle.types.js +0 -7
  211. package/esm2015/lib/auth/lbop.service.js +0 -355
  212. package/esm2015/lib/auth/life-ready-auth.service.js +0 -333
  213. package/esm2015/lib/auth/password.service.js +0 -320
  214. package/esm2015/lib/auth/register.service.js +0 -172
  215. package/esm2015/lib/auth/two-factor.service.js +0 -74
  216. package/esm2015/lib/category/category-meta.service.js +0 -99
  217. package/esm2015/lib/category/category.gql.js +0 -406
  218. package/esm2015/lib/category/category.service.js +0 -390
  219. package/esm2015/lib/category/category.types.js +0 -29
  220. package/esm2015/lib/cryptography/cryptography.types.js +0 -11
  221. package/esm2015/lib/cryptography/encryption.service.js +0 -189
  222. package/esm2015/lib/cryptography/key-factory.service.js +0 -237
  223. package/esm2015/lib/cryptography/key-graph.service.js +0 -280
  224. package/esm2015/lib/cryptography/key-meta.service.js +0 -200
  225. package/esm2015/lib/cryptography/key.service.js +0 -124
  226. package/esm2015/lib/cryptography/slip39.service.js +0 -169
  227. package/esm2015/lib/cryptography/web-crypto.service.js +0 -29
  228. package/esm2015/lib/life-ready.config.js +0 -84
  229. package/esm2015/lib/life-ready.module.js +0 -74
  230. package/esm2015/lib/plan/plan.gql.js +0 -123
  231. package/esm2015/lib/plan/plan.service.js +0 -149
  232. package/esm2015/lib/plan/plan.types.js +0 -11
  233. package/esm2015/lib/record/record-attachment.service.js +0 -101
  234. package/esm2015/lib/record/record.gql.js +0 -179
  235. package/esm2015/lib/record/record.service.js +0 -206
  236. package/esm2015/lib/record/record.types.js +0 -15
  237. package/esm2015/lib/record-type/record-type.service.js +0 -75
  238. package/esm2015/lib/record-type/record-type.types.js +0 -28
  239. package/esm2015/lib/scenario/approvals/scenario-approval.gql.js +0 -105
  240. package/esm2015/lib/scenario/approvals/scenario-approval.types.js +0 -1
  241. package/esm2015/lib/scenario/approvals/scenario-approver.service.js +0 -300
  242. package/esm2015/lib/scenario/claimants/scenario-claimant.gql.js +0 -52
  243. package/esm2015/lib/scenario/claimants/scenario-claimant.service.js +0 -97
  244. package/esm2015/lib/scenario/claimants/scenario-claimant.types.js +0 -1
  245. package/esm2015/lib/scenario/receivers/scenario-receiver.gql.js +0 -150
  246. package/esm2015/lib/scenario/receivers/scenario-receiver.service.js +0 -229
  247. package/esm2015/lib/scenario/receivers/scenario-receiver.types.js +0 -1
  248. package/esm2015/lib/scenario/scenario-setup.service.js +0 -269
  249. package/esm2015/lib/scenario/scenario.gql.js +0 -368
  250. package/esm2015/lib/scenario/scenario.service.js +0 -611
  251. package/esm2015/lib/scenario/scenario.types.js +0 -64
  252. package/esm2015/lib/search/search.gql.js +0 -62
  253. package/esm2015/lib/search/search.service.js +0 -156
  254. package/esm2015/lib/search/search.types.js +0 -6
  255. package/esm2015/lib/trusted-parties/tp-password-reset-request.service.js +0 -112
  256. package/esm2015/lib/trusted-parties/tp-password-reset-user.service.js +0 -266
  257. package/esm2015/lib/trusted-parties/tp-password-reset.gql.js +0 -232
  258. package/esm2015/lib/trusted-parties/tp-password-reset.service.js +0 -300
  259. package/esm2015/lib/trusted-parties/trusted-party.gql.js +0 -148
  260. package/esm2015/lib/trusted-parties/trusted-party.service.js +0 -326
  261. package/esm2015/lib/trusted-parties/trusted-party.types.js +0 -41
  262. package/esm2015/lib/trusted-parties/trusted-party2.gql.js +0 -87
  263. package/esm2015/lib/trusted-parties/trusted-party2.service.js +0 -215
  264. package/esm2015/lib/users/profile-details.service.js +0 -214
  265. package/esm2015/lib/users/profile.gql.js +0 -97
  266. package/esm2015/lib/users/profile.service.js +0 -169
  267. package/esm2015/lib/users/profile.types.js +0 -34
  268. package/esm2015/lib/users/user.gql.js +0 -60
  269. package/esm2015/lib/users/user.service.js +0 -79
  270. package/esm2015/lib/users/user.types.js +0 -5
  271. package/esm2015/lifeready-core.js +0 -10
  272. package/esm2015/public-api.js +0 -81
  273. package/fesm2015/lifeready-core.js +0 -13282
  274. package/fesm2015/lifeready-core.js.map +0 -1
  275. package/lib/_common/ast.d.ts +0 -11
  276. package/lib/_common/deferred-promise.d.ts +0 -12
  277. package/lib/_common/exceptions.d.ts +0 -109
  278. package/lib/_common/queries.gql.d.ts +0 -10
  279. package/lib/_common/run-outside-angular.d.ts +0 -14
  280. package/lib/_common/utils.d.ts +0 -3
  281. package/lib/api/contact-card.gql.d.ts +0 -7
  282. package/lib/api/contact-card.service.d.ts +0 -52
  283. package/lib/api/contact-card2.gql.d.ts +0 -34
  284. package/lib/api/contact-card2.service.d.ts +0 -49
  285. package/lib/api/file.service.d.ts +0 -18
  286. package/lib/api/item2.gql.d.ts +0 -96
  287. package/lib/api/item2.service.d.ts +0 -177
  288. package/lib/api/key-exchange.gql.d.ts +0 -9
  289. package/lib/api/key-exchange.service.d.ts +0 -39
  290. package/lib/api/key-exchange.types.d.ts +0 -196
  291. package/lib/api/key-exchange2.gql.d.ts +0 -125
  292. package/lib/api/key-exchange2.service.d.ts +0 -187
  293. package/lib/api/lock.gql.d.ts +0 -27
  294. package/lib/api/lock.service.d.ts +0 -25
  295. package/lib/api/lr-apollo.service.d.ts +0 -15
  296. package/lib/api/lr-graphql/lr-graphql.service.d.ts +0 -60
  297. package/lib/api/lr-graphql/lr-merged-mutation.d.ts +0 -27
  298. package/lib/api/lr-graphql/lr-mutation-base.d.ts +0 -28
  299. package/lib/api/lr-graphql/lr-mutation.d.ts +0 -8
  300. package/lib/api/lr-graphql/lr.service.d.ts +0 -9
  301. package/lib/api/message.service.d.ts +0 -58
  302. package/lib/api/persist.service.d.ts +0 -31
  303. package/lib/api/query-processor/common-processors.service.d.ts +0 -36
  304. package/lib/api/query-processor/query-processor.service.d.ts +0 -18
  305. package/lib/api/query-processor/tp-password-reset-processor.service.d.ts +0 -15
  306. package/lib/api/shared-contact-card.service.d.ts +0 -33
  307. package/lib/api/shared-contact-card2.gql.d.ts +0 -36
  308. package/lib/api/shared-contact-card2.service.d.ts +0 -45
  309. package/lib/api/time.service.d.ts +0 -16
  310. package/lib/api/types/graphql.types.d.ts +0 -29
  311. package/lib/api/types/lr-graphql.types.d.ts +0 -385
  312. package/lib/auth/auth.config.d.ts +0 -5
  313. package/lib/auth/auth.gql.d.ts +0 -15
  314. package/lib/auth/auth.types.d.ts +0 -66
  315. package/lib/auth/idle.service.d.ts +0 -40
  316. package/lib/auth/idle.types.d.ts +0 -10
  317. package/lib/auth/lbop.service.d.ts +0 -91
  318. package/lib/auth/life-ready-auth.service.d.ts +0 -46
  319. package/lib/auth/password.service.d.ts +0 -78
  320. package/lib/auth/register.service.d.ts +0 -25
  321. package/lib/auth/two-factor.service.d.ts +0 -15
  322. package/lib/category/category-meta.service.d.ts +0 -23
  323. package/lib/category/category.gql.d.ts +0 -45
  324. package/lib/category/category.service.d.ts +0 -67
  325. package/lib/category/category.types.d.ts +0 -79
  326. package/lib/cryptography/cryptography.types.d.ts +0 -83
  327. package/lib/cryptography/encryption.service.d.ts +0 -41
  328. package/lib/cryptography/key-factory.service.d.ts +0 -38
  329. package/lib/cryptography/key-graph.service.d.ts +0 -33
  330. package/lib/cryptography/key-meta.service.d.ts +0 -44
  331. package/lib/cryptography/key.service.d.ts +0 -36
  332. package/lib/cryptography/slip39.service.d.ts +0 -43
  333. package/lib/cryptography/web-crypto.service.d.ts +0 -5
  334. package/lib/life-ready.config.d.ts +0 -14
  335. package/lib/life-ready.module.d.ts +0 -5
  336. package/lib/plan/plan.gql.d.ts +0 -11
  337. package/lib/plan/plan.service.d.ts +0 -33
  338. package/lib/plan/plan.types.d.ts +0 -31
  339. package/lib/record/record-attachment.service.d.ts +0 -16
  340. package/lib/record/record.gql.d.ts +0 -14
  341. package/lib/record/record.service.d.ts +0 -25
  342. package/lib/record/record.types.d.ts +0 -57
  343. package/lib/record-type/record-type.service.d.ts +0 -11
  344. package/lib/record-type/record-type.types.d.ts +0 -50
  345. package/lib/scenario/approvals/scenario-approval.gql.d.ts +0 -7
  346. package/lib/scenario/approvals/scenario-approval.types.d.ts +0 -63
  347. package/lib/scenario/approvals/scenario-approver.service.d.ts +0 -32
  348. package/lib/scenario/claimants/scenario-claimant.gql.d.ts +0 -5
  349. package/lib/scenario/claimants/scenario-claimant.service.d.ts +0 -17
  350. package/lib/scenario/claimants/scenario-claimant.types.d.ts +0 -18
  351. package/lib/scenario/receivers/scenario-receiver.gql.d.ts +0 -8
  352. package/lib/scenario/receivers/scenario-receiver.service.d.ts +0 -30
  353. package/lib/scenario/receivers/scenario-receiver.types.d.ts +0 -54
  354. package/lib/scenario/scenario-setup.service.d.ts +0 -22
  355. package/lib/scenario/scenario.gql.d.ts +0 -34
  356. package/lib/scenario/scenario.service.d.ts +0 -58
  357. package/lib/scenario/scenario.types.d.ts +0 -217
  358. package/lib/search/search.gql.d.ts +0 -1
  359. package/lib/search/search.service.d.ts +0 -25
  360. package/lib/search/search.types.d.ts +0 -20
  361. package/lib/trusted-parties/tp-password-reset-request.service.d.ts +0 -20
  362. package/lib/trusted-parties/tp-password-reset-user.service.d.ts +0 -41
  363. package/lib/trusted-parties/tp-password-reset.gql.d.ts +0 -218
  364. package/lib/trusted-parties/tp-password-reset.service.d.ts +0 -131
  365. package/lib/trusted-parties/trusted-party.gql.d.ts +0 -9
  366. package/lib/trusted-parties/trusted-party.service.d.ts +0 -44
  367. package/lib/trusted-parties/trusted-party.types.d.ts +0 -102
  368. package/lib/trusted-parties/trusted-party2.gql.d.ts +0 -79
  369. package/lib/trusted-parties/trusted-party2.service.d.ts +0 -114
  370. package/lib/users/profile-details.service.d.ts +0 -21
  371. package/lib/users/profile.gql.d.ts +0 -11
  372. package/lib/users/profile.service.d.ts +0 -35
  373. package/lib/users/profile.types.d.ts +0 -96
  374. package/lib/users/user.gql.d.ts +0 -9
  375. package/lib/users/user.service.d.ts +0 -12
  376. package/lib/users/user.types.d.ts +0 -23
  377. package/lifeready-core.d.ts +0 -9
  378. package/lifeready-core.metadata.json +0 -1
@@ -0,0 +1,154 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { Key, PassKey } from './cryptography.types';
3
+ import { LrNotFoundException } from '../_common/exceptions';
4
+ import { PersistService } from '../api/persist.service';
5
+ import { KeyFactoryService as KFS } from './key-factory.service';
6
+ import { LifeReadyConfig, LR_CONFIG } from '../life-ready.config';
7
+
8
+ export class UserKeys {
9
+ passKey: PassKey;
10
+ masterKey: Key;
11
+ rootKey?: Key;
12
+ pxk?: Key;
13
+ sigPxk?: Key;
14
+ }
15
+
16
+ interface StoredPassKey {
17
+ id: string;
18
+ jwk: object;
19
+ }
20
+
21
+ @Injectable({
22
+ providedIn: 'root',
23
+ })
24
+ export class KeyService {
25
+ private readonly STORE_MASTER_KEY = 'masterKey';
26
+ // variables
27
+ private keys: UserKeys;
28
+ private masterKey: Key;
29
+
30
+ // AZ: This can't be change easily. It's basically a PassK or PassIdp rotation.
31
+ // todo: we should eventually increase this periodically to match with Moore's law.
32
+ // The iterations for each key are kept by the server as well but we assume the value
33
+ // from the server is not trustworthy, so need to have minimum thresholds here.
34
+ // If creating new keys, these minimum are used.
35
+ public readonly MIN_PASS_IDP_PBKDF_ITER = 100000;
36
+ public readonly MIN_PASS_KEY_PBKDF_ITER = 100000;
37
+ public readonly MIN_LBOP_KEY_PBKDF_ITER = 100000;
38
+
39
+ // These are used as the default values. They must be larger than the minimum values.
40
+ public readonly DEFAULT_PASS_IDP_PBKDF_ITER = this.MIN_PASS_IDP_PBKDF_ITER;
41
+ public readonly DEFAULT_PASS_KEY_PBKDF_ITER = this.MIN_PASS_KEY_PBKDF_ITER;
42
+ public readonly DEFAULT_LBOP_KEY_PBKDF_ITER = this.MIN_LBOP_KEY_PBKDF_ITER;
43
+
44
+ constructor(
45
+ @Inject(LR_CONFIG) private config: LifeReadyConfig,
46
+ private persistService: PersistService
47
+ ) {
48
+ this.resetKeys();
49
+ }
50
+
51
+ resetKeys() {
52
+ this.keys = null;
53
+ this.masterKey = null;
54
+ }
55
+
56
+ purgeKeys() {
57
+ this.resetKeys();
58
+ this.persistService.clear();
59
+ }
60
+
61
+ populateKeys(keys: UserKeys) {
62
+ this.keys = keys;
63
+ }
64
+
65
+ public getCurrentPassKey(): Key {
66
+ return this.keys.passKey;
67
+ }
68
+
69
+ public getCurrentMasterKey(): Key {
70
+ return this.keys.masterKey;
71
+ }
72
+
73
+ public getCurrentRootKey(): Key {
74
+ return this.keys.rootKey;
75
+ }
76
+
77
+ public getCurrentPxk(): Key {
78
+ return this.keys.pxk;
79
+ }
80
+
81
+ public getCurrentSigPxk(): Key {
82
+ return this.keys.sigPxk;
83
+ }
84
+
85
+ private expiresAfter(seconds: number): Date {
86
+ return new Date(Date.now() + 1000 * seconds);
87
+ }
88
+
89
+ async persistMasterKey(
90
+ masterKey: Key,
91
+ expiresAfterSeconds: number
92
+ ): Promise<void> {
93
+ const storedKey = {
94
+ id: masterKey.id,
95
+ jwk: masterKey.jwk.toJSON(true),
96
+ };
97
+
98
+ this.masterKey = masterKey;
99
+
100
+ // Save in an expirable cookie.
101
+ await this.persistService.set({
102
+ name: this.STORE_MASTER_KEY,
103
+ value: storedKey,
104
+ expiry: this.expiresAfter(expiresAfterSeconds),
105
+ serverSession: !this.config.disableSessionEncryptionKey,
106
+ });
107
+ }
108
+
109
+ async setMasterKeyExpiresAfterSeconds(seconds: number): Promise<void> {
110
+ const storedKey = await this.persistService.get(this.STORE_MASTER_KEY);
111
+ if (storedKey == null) {
112
+ throw new LrNotFoundException(
113
+ `Can not find masterKey in persisted storage using name: ${this.STORE_MASTER_KEY}`
114
+ );
115
+ }
116
+ await this.persistService.set({
117
+ name: this.STORE_MASTER_KEY,
118
+ value: storedKey,
119
+ expiry: this.expiresAfter(seconds),
120
+ serverSession: !this.config.disableSessionEncryptionKey,
121
+ });
122
+ }
123
+
124
+ // There's little benefit in using WebCrypto's none-extractable keys because if there
125
+ // is an XSS attack, then the attacker has control over the js that downloads the keys. The
126
+ // attacker can modify the code to import the keys as extractable. So none-extractable keys
127
+ // are only useful if they are already persisted and the user cannot download any more keys,
128
+ // which is not feasible.
129
+ // So storing the PassKey in localstorage for now, at least till we know what the usage
130
+ // pattern is, i.e. how often do we need to use the RootK, MaterK, and PassK.
131
+ async loadMasterKey(masterKeyId: string): Promise<Key> {
132
+ if (!this.masterKey) {
133
+ const storedKey = await this.persistService.get(this.STORE_MASTER_KEY);
134
+
135
+ if (!storedKey) {
136
+ throw new LrNotFoundException(
137
+ 'Could not find masterKey in persisted storage'
138
+ );
139
+ }
140
+
141
+ if (storedKey.id !== masterKeyId) {
142
+ throw new LrNotFoundException(
143
+ `masterKeyId ${storedKey.id} in persisted storage does not match the one requested ${masterKeyId}`
144
+ );
145
+ }
146
+
147
+ storedKey.jwk = await KFS.asKey(storedKey.jwk);
148
+
149
+ this.masterKey = storedKey;
150
+ }
151
+
152
+ return this.masterKey;
153
+ }
154
+ }
@@ -0,0 +1,44 @@
1
+ import { TestBed } from '@angular/core/testing';
2
+ import { Slip39Service, Assembly, SubAssembly } from './slip39.service';
3
+ import { ScenarioApproverService } from '../scenario/approvals/scenario-approver.service';
4
+ import { lrConfigureTestingModule } from '../_common/tests';
5
+
6
+ describe('Slip32Service', () => {
7
+ let slip39Service: Slip39Service;
8
+
9
+ beforeEach(() => {
10
+ lrConfigureTestingModule();
11
+ slip39Service = TestBed.inject(Slip39Service);
12
+ });
13
+
14
+ it('should combine mnemonics', async () => {
15
+ const quorum = 2;
16
+ const slipAssembly = new Assembly(quorum);
17
+
18
+ slipAssembly.addSubAssembly(new SubAssembly(0, 2, 3));
19
+ slipAssembly.addSubAssembly(new SubAssembly(1, 2, 2));
20
+ slipAssembly.addSubAssembly(new SubAssembly(2, 3, 5));
21
+
22
+ const secret = '123456abcdefg';
23
+ await slip39Service.generateShares(
24
+ secret,
25
+ ScenarioApproverService.SLIP39_PASSPHRASE,
26
+ slipAssembly
27
+ );
28
+
29
+ const mnemonics = [];
30
+
31
+ slipAssembly.subAssemblies.forEach((sa) => {
32
+ sa.shares.forEach((share) => mnemonics.push(share.mnemonics));
33
+ });
34
+
35
+ expect(mnemonics.length).toBe(10);
36
+
37
+ // The recoverSecret() should
38
+ const recovered = await slip39Service.recoverSecret(
39
+ mnemonics,
40
+ ScenarioApproverService.SLIP39_PASSPHRASE
41
+ );
42
+ expect(recovered).toEqual(secret);
43
+ });
44
+ });
@@ -0,0 +1,204 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Slip39, Slip39Helper } from 'slip39';
3
+
4
+ export class SecretShare {
5
+ constructor(
6
+ public assembly: number = 0,
7
+ public subAssembly: number = 0,
8
+ public mnemonics: string = ''
9
+ ) {}
10
+ }
11
+
12
+ export class SubAssembly {
13
+ constructor(
14
+ public index: number,
15
+ public threshold: number = 0,
16
+ public size: number = 0
17
+ ) {
18
+ this.clearShares();
19
+ }
20
+
21
+ shares: SecretShare[];
22
+
23
+ public clearShares() {
24
+ this.shares = Array();
25
+ }
26
+
27
+ public addShare(share: SecretShare) {
28
+ this.shares.push(share);
29
+ }
30
+ }
31
+
32
+ export class Assembly {
33
+ constructor(public threshold: number = 0) {
34
+ this.clearSubAssemblies();
35
+ }
36
+
37
+ subAssemblies: SubAssembly[];
38
+
39
+ public size() {
40
+ return this.subAssemblies.length;
41
+ }
42
+
43
+ public clearSubAssemblies() {
44
+ this.subAssemblies = new Array();
45
+ }
46
+
47
+ public addSubAssembly(subAssembly: SubAssembly) {
48
+ this.subAssemblies.push(subAssembly);
49
+ }
50
+ }
51
+
52
+ export class SubQuorum {
53
+ shares: string[];
54
+
55
+ constructor(public subAssemblyIndex: number) {
56
+ this.clearShares();
57
+ }
58
+
59
+ public clearShares() {
60
+ this.shares = new Array();
61
+ }
62
+
63
+ public addShare(share: string) {
64
+ this.shares.push(share);
65
+ }
66
+ }
67
+
68
+ export class Quorum {
69
+ subQuora: SubQuorum[];
70
+
71
+ constructor() {
72
+ this.clearSubQuora();
73
+ }
74
+
75
+ public clearSubQuora() {
76
+ this.subQuora = new Array();
77
+ }
78
+
79
+ public addSubQuorum(subQuorum: SubQuorum) {
80
+ this.subQuora.push(subQuorum);
81
+ }
82
+
83
+ public serialiseShares() {
84
+ let shares = [];
85
+
86
+ this.subQuora.forEach((subQuorum) => {
87
+ shares = shares.concat(subQuorum.shares);
88
+ });
89
+
90
+ return shares;
91
+ }
92
+ }
93
+
94
+ @Injectable({
95
+ providedIn: 'root',
96
+ })
97
+ export class Slip39Service {
98
+ constructor() {}
99
+
100
+ public async generateShares(secret, passphrase: string, assembly: Assembly) {
101
+ // Hex-encode secret.
102
+ let ems = btoa(secret);
103
+ ems = Slip39Helper.slip39EncodeHex(ems);
104
+
105
+ // Construct group specifications
106
+ const groups = [];
107
+
108
+ for (const sa of assembly.subAssemblies) {
109
+ groups.push([sa.threshold, sa.size]);
110
+ }
111
+
112
+ // Split!
113
+ const slip = await Slip39.fromArray(ems, {
114
+ passphrase,
115
+ threshold: assembly.threshold,
116
+ groups,
117
+ title: '',
118
+ });
119
+
120
+ // Extract shares
121
+ assembly.subAssemblies.forEach((sa, isa) => {
122
+ // Remove any existing shares
123
+ sa.clearShares();
124
+
125
+ for (let im = 0; im < sa.size; im++) {
126
+ // Construct the path to the share, formatted as "r/<subassembly index>/<member index>"
127
+ // with <subassembly index> and <member index> being two-digit, zero-padded integers.
128
+ const path =
129
+ 'r/' +
130
+ isa.toString().padStart(2, '0') +
131
+ '/' +
132
+ im.toString().padStart(2, '0');
133
+ const mnemonics = slip.fromPath(path).mnemonics[0];
134
+ const share = new SecretShare(isa, im, mnemonics);
135
+
136
+ sa.addShare(share);
137
+ }
138
+ });
139
+ }
140
+
141
+ // Remove all redundant shares. i.e. keep only enough members and groups to satisfy the thresholds.
142
+ private minimalSet(mnemonics: string[]): string[] {
143
+ // Decode the mnemonics and sort then into groups.
144
+ let groupThresh = null;
145
+ const groups = new Map();
146
+ for (const mnemonic of mnemonics) {
147
+ const decoded = Slip39Helper.decodeMnemonic(mnemonic);
148
+
149
+ if (groupThresh && groupThresh !== decoded.groupThreshold) {
150
+ throw new Error('groupThreshold is different in mnemonics');
151
+ }
152
+
153
+ groupThresh = decoded.groupThreshold;
154
+
155
+ // Note that Slip39.recoverSecret() will do all the error checking again. So it's not critical
156
+ // that we error check here. So we just optimistically assume it's all good.
157
+ let g = groups.get(decoded.groupIndex);
158
+ if (g == null) {
159
+ g = {
160
+ memberThreshold: decoded.memberThreshold,
161
+ members: [],
162
+ };
163
+ groups.set(decoded.groupIndex, g);
164
+ }
165
+
166
+ g.members.push({
167
+ mnemonic,
168
+ decoded,
169
+ });
170
+ }
171
+
172
+ // Keep the minimum set of groups that meet threshold.
173
+ const mnemonicsMinSet = [];
174
+ let groupCount = 0;
175
+ for (const g of groups.values()) {
176
+ // Keep only groups that meet threshold
177
+ if (g.members.length < g.memberThreshold) {
178
+ continue;
179
+ }
180
+
181
+ // Keep minimum number of approvals needed for group
182
+ g.members.slice(0, g.memberThreshold).forEach((member) => {
183
+ mnemonicsMinSet.push(member.mnemonic);
184
+ });
185
+
186
+ ++groupCount;
187
+ if (groupCount >= groupThresh) {
188
+ break;
189
+ }
190
+ }
191
+
192
+ return mnemonicsMinSet;
193
+ }
194
+
195
+ public async recoverSecret(shares: string[], passphrase: string) {
196
+ shares = this.minimalSet(shares);
197
+
198
+ const recovered = await Slip39.recoverSecret(shares, passphrase);
199
+
200
+ const secret = Slip39Helper.slip39DecodeHex(recovered);
201
+
202
+ return atob(secret);
203
+ }
204
+ }
@@ -0,0 +1,22 @@
1
+ import { Injectable } from '@angular/core';
2
+
3
+ @Injectable({
4
+ providedIn: 'root',
5
+ })
6
+ export class WebCryptoService {
7
+ crypto: Crypto = window.crypto;
8
+
9
+ toHex(buffer: ArrayBuffer) {
10
+ // Ref: https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest
11
+ const array = Array.from(new Uint8Array(buffer)); // convert buffer to byte array
12
+ const hex = array.map((b) => b.toString(16).padStart(2, '0')).join(''); // convert bytes to hex string
13
+ return hex;
14
+ }
15
+
16
+ async stringDigest(algorithm: string, message: string): Promise<string> {
17
+ const encoder = new TextEncoder();
18
+ const data = encoder.encode(message);
19
+ const hash = await this.crypto.subtle.digest(algorithm, data);
20
+ return this.toHex(hash);
21
+ }
22
+ }
@@ -0,0 +1,127 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { AuthClass } from '@aws-amplify/auth/lib-esm/Auth';
3
+ import {
4
+ ApolloClientOptions,
5
+ ApolloLink,
6
+ createHttpLink,
7
+ DefaultOptions,
8
+ from,
9
+ InMemoryCache,
10
+ } from '@apollo/client/core';
11
+ import { setContext } from '@apollo/client/link/context';
12
+ import { RetryLink } from '@apollo/client/link/retry';
13
+ import { LrApiErrorCode } from './_common/exceptions';
14
+ import { GraphQLError } from 'graphql';
15
+
16
+ export const LR_CONFIG = new InjectionToken<LifeReadyConfig>('LR.AUTH');
17
+ const RETRY_ERROR_CODES = [LrApiErrorCode.CONCURRENT_ACCESS];
18
+
19
+ export interface LifeReadyConfig {
20
+ authUrl: string;
21
+ apiUrl: string;
22
+ apolloUrl: string;
23
+ userPoolId: string;
24
+ userPoolWebClientId: string;
25
+ apolloConfig?: ApolloClientOptions<any>;
26
+ // Mainly to allow localhost to not needing this. Default to falsy
27
+ disableSessionEncryptionKey?: boolean;
28
+ }
29
+
30
+ export const configureApollo = (
31
+ config: LifeReadyConfig,
32
+ auth: AuthClass
33
+ ): ApolloClientOptions<any> => {
34
+ const defaultOptions: DefaultOptions = {
35
+ watchQuery: {
36
+ fetchPolicy: 'no-cache',
37
+ errorPolicy: 'all',
38
+ },
39
+ query: {
40
+ fetchPolicy: 'no-cache',
41
+ errorPolicy: 'all',
42
+ },
43
+ mutate: {
44
+ errorPolicy: 'all',
45
+ },
46
+ };
47
+
48
+ const authLink = setContext(async (_, { headers }) => {
49
+ let accessJwt = null;
50
+ try {
51
+ accessJwt = (await auth.currentSession()).getAccessToken();
52
+ } catch {
53
+ console.log('User not signed in');
54
+ }
55
+
56
+ return {
57
+ headers: {
58
+ ...headers,
59
+ authorization: accessJwt ? `Bearer ${accessJwt.jwtToken}` : '',
60
+ },
61
+ };
62
+ });
63
+
64
+ // We are only retrying on certain errors, like the CONCURRENT_ACCESS gql
65
+ // error which indicates DB race condition. So can be safely retried.
66
+ const retryIf = (error, _) => {
67
+ // The RetryLink is called on network error as well, so we need to filter for GraphQL errors.
68
+ if (error instanceof GraphQLErrorException) {
69
+ if (
70
+ error.errors.some((e) => RETRY_ERROR_CODES.includes(e.extensions?.code))
71
+ ) {
72
+ return true;
73
+ }
74
+ }
75
+
76
+ return false;
77
+ };
78
+
79
+ const retryLink = new RetryLink({
80
+ delay: {
81
+ initial: 300,
82
+ max: Infinity,
83
+ jitter: true,
84
+ },
85
+ attempts: {
86
+ max: 3,
87
+ retryIf,
88
+ },
89
+ });
90
+
91
+ class GraphQLErrorException extends Error {
92
+ constructor(public errors: readonly GraphQLError[]) {
93
+ super(errors.map((e) => e.message).join(', '));
94
+ }
95
+ }
96
+
97
+ // Throw exception on gql errors which effectively promotes it to a network
98
+ // error, which can then be handled by the RetryLink.
99
+ const promoteGqlErrors = new ApolloLink((operation, forward) => {
100
+ return forward(operation).map((data) => {
101
+ if (data && data.errors) {
102
+ const errors = data.errors.filter((e) =>
103
+ RETRY_ERROR_CODES.includes(e.extensions?.code)
104
+ );
105
+
106
+ if (errors.length > 0) {
107
+ throw new GraphQLErrorException(data.errors);
108
+ }
109
+ }
110
+ return data;
111
+ });
112
+ });
113
+
114
+ const httpLink = createHttpLink({
115
+ uri: config.apolloUrl,
116
+ // Sending the sessionid cookie so that the server can use session data when needed.
117
+ // eg. setting the session encryption key.
118
+ credentials: 'include',
119
+ });
120
+
121
+ return {
122
+ link: from([retryLink, promoteGqlErrors, authLink, httpLink]),
123
+ cache: new InMemoryCache(),
124
+ defaultOptions,
125
+ ...config.apolloConfig,
126
+ };
127
+ };
@@ -0,0 +1,81 @@
1
+ import { HttpClientModule } from '@angular/common/http';
2
+ import { APP_INITIALIZER, ModuleWithProviders, 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 {
11
+ initialiseAuth,
12
+ LifeReadyAuthService,
13
+ } from './auth/life-ready-auth.service';
14
+ import { PasswordService } from './auth/password.service';
15
+ import { RegisterService } from './auth/register.service';
16
+ import { EncryptionService } from './cryptography/encryption.service';
17
+ import { KeyGraphService } from './cryptography/key-graph.service';
18
+ import { KeyService } from './cryptography/key.service';
19
+ import { KeyFactoryService } from './cryptography/key-factory.service';
20
+ import { WebCryptoService } from './cryptography/web-crypto.service';
21
+ import {
22
+ configureApollo,
23
+ LifeReadyConfig,
24
+ LR_CONFIG,
25
+ } from './life-ready.config';
26
+ import { TimeService } from './api/time.service';
27
+ import { NgIdleKeepaliveModule } from '@ng-idle/keepalive';
28
+
29
+ @NgModule({
30
+ imports: [HttpClientModule, NgIdleKeepaliveModule.forRoot()],
31
+ providers: [
32
+ CookieService,
33
+ TimeService,
34
+ FileService,
35
+ ProfileService,
36
+ RegisterService,
37
+ LifeReadyAuthService,
38
+ PasswordService,
39
+ WebCryptoService,
40
+ EncryptionService,
41
+ KeyGraphService,
42
+ KeyService,
43
+ KeyFactoryService,
44
+ ],
45
+ })
46
+ export class LifeReadyModule {
47
+ public static forRoot(
48
+ config: LifeReadyConfig
49
+ ): ModuleWithProviders<LifeReadyModule> {
50
+ return {
51
+ ngModule: LifeReadyModule,
52
+ providers: [
53
+ {
54
+ provide: LR_CONFIG,
55
+ useValue: config,
56
+ },
57
+ {
58
+ provide: AuthClass,
59
+ useValue: Auth,
60
+ },
61
+ {
62
+ provide: APP_INITIALIZER,
63
+ useFactory: configureAmplifyAuth,
64
+ deps: [LR_CONFIG, AuthClass],
65
+ multi: true,
66
+ },
67
+ {
68
+ provide: APP_INITIALIZER,
69
+ useFactory: initialiseAuth,
70
+ deps: [LifeReadyAuthService],
71
+ multi: true,
72
+ },
73
+ {
74
+ provide: APOLLO_OPTIONS,
75
+ useFactory: configureApollo,
76
+ deps: [LR_CONFIG, AuthClass],
77
+ },
78
+ ],
79
+ };
80
+ }
81
+ }