@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,539 @@
1
+ import { LrApolloService } from '../api/lr-apollo.service';
2
+ import { HttpClient } from '@angular/common/http';
3
+ import { Inject, Injectable } from '@angular/core';
4
+ import { AuthClass } from '@aws-amplify/auth/lib-esm/Auth';
5
+ import gql from 'graphql-tag';
6
+ import { JWK } from 'node-jose';
7
+ import { EncryptionService } from '../cryptography/encryption.service';
8
+ import { KeyGraphService } from '../cryptography/key-graph.service';
9
+ import { KeyService } from '../cryptography/key.service';
10
+ import { LifeReadyConfig, LR_CONFIG } from '../life-ready.config';
11
+ import {
12
+ LrException,
13
+ LrErrorCode,
14
+ LrBadLogicException,
15
+ } from '../_common/exceptions';
16
+ import { LifeReadyAuthService } from './life-ready-auth.service';
17
+ import { PasswordService } from './password.service';
18
+ import { Slip39Helper } from 'slip39';
19
+ import { KeyFactoryService as KFS } from '../cryptography/key-factory.service';
20
+
21
+ interface SetPasswordApiResult {
22
+ username: string;
23
+ idpPassword: string;
24
+ setPasswordToken: string;
25
+ }
26
+
27
+ export interface SetPasswordParams {
28
+ lbopId: string;
29
+ newPassword: string;
30
+ verifiedToken: string;
31
+ masterKeyId: string;
32
+ masterKey: JWK.Key;
33
+ }
34
+
35
+ export interface VerifyContactParams {
36
+ email?: string;
37
+ phone?: string;
38
+ }
39
+
40
+ export interface VerifyContactResult {
41
+ // The claim_id identifies the Email/SMS confirmation
42
+ claimId: string;
43
+ }
44
+
45
+ export interface ConfirmContactParams {
46
+ claimId: string;
47
+ vCode: string;
48
+ }
49
+
50
+ export interface ConfirmContactResult {
51
+ // The token to prove the client had the correct confirmation code.
52
+ token: string;
53
+ }
54
+
55
+ export interface VerifyParams {
56
+ claimId: string;
57
+ claimToken: string;
58
+ lbop: string;
59
+ }
60
+
61
+ export interface VerifyResult {
62
+ // userId: string;
63
+ lbopId: string;
64
+ verifiedToken: string;
65
+ masterKeyId: string;
66
+ masterKey: JWK.Key;
67
+ }
68
+
69
+ export interface ChallengeResult {
70
+ challenge: any;
71
+ lbops: any;
72
+ // userId: string;
73
+ }
74
+
75
+ export interface Lbop {
76
+ id: string;
77
+ partial?: string;
78
+ name?: string;
79
+ lbopString?: string;
80
+ }
81
+
82
+ export interface CreateLbopParams {
83
+ name?: string;
84
+ }
85
+
86
+ interface CreateLbopQuery {
87
+ createLbop: {
88
+ lbop: Lbop;
89
+ };
90
+ }
91
+
92
+ export const CreateLbopQuery = gql`
93
+ mutation CreateLbop($input: CreateLbopInput!) {
94
+ createLbop(input: $input) {
95
+ lbop {
96
+ id
97
+ }
98
+ }
99
+ }
100
+ `;
101
+
102
+ interface DeleteLbopQuery {
103
+ deleteLbop: Lbop;
104
+ }
105
+
106
+ export const DeleteLbopQuery = gql`
107
+ mutation DeleteLbop($input: DeleteLbopInput!) {
108
+ deleteLbop(input: $input) {
109
+ id
110
+ }
111
+ }
112
+ `;
113
+
114
+ export interface UpdateLbopParams {
115
+ id: string;
116
+ name: string;
117
+ }
118
+
119
+ interface UpdateLbopQuery {
120
+ updateLbop: Lbop;
121
+ }
122
+
123
+ export const UpdateLbopQuery = gql`
124
+ mutation UpdateLbop($input: UpdateLbopInput!) {
125
+ updateLbop(input: $input) {
126
+ lbop {
127
+ id
128
+ }
129
+ }
130
+ }
131
+ `;
132
+
133
+ export const LbopQuery = gql`
134
+ query Lbop($id: LrRelayIdInput!) {
135
+ lbop(id: $id) {
136
+ id
137
+ cipherMeta
138
+ }
139
+ }
140
+ `;
141
+
142
+ interface LbopsQuery {
143
+ lbops: any;
144
+ }
145
+
146
+ export const LbopsQuery = gql`
147
+ query Lbops {
148
+ lbops {
149
+ edges {
150
+ node {
151
+ id
152
+ cipherMeta
153
+ }
154
+ }
155
+ }
156
+ }
157
+ `;
158
+
159
+ @Injectable({
160
+ providedIn: 'root',
161
+ })
162
+ export class LbopService {
163
+ private readonly CLIENT_NONCE_LENGTH = 32;
164
+ // There are 1024 words (10 bits), so 25 words should give ~256 bits of entropy.
165
+ private readonly LBOP_WORDS = 25;
166
+
167
+ constructor(
168
+ @Inject(LR_CONFIG) private config: LifeReadyConfig,
169
+ private http: HttpClient,
170
+ private lrApollo: LrApolloService,
171
+ private auth: AuthClass,
172
+ private authService: LifeReadyAuthService,
173
+ private keyFactory: KFS,
174
+ private keyService: KeyService,
175
+ private encryptionService: EncryptionService,
176
+ private keyGraph: KeyGraphService,
177
+ private passwordService: PasswordService
178
+ ) {}
179
+
180
+ private getPartial(lbopString: string): string {
181
+ return lbopString.split(' ')[0];
182
+ }
183
+
184
+ public async remove(id: string): Promise<string> {
185
+ const res = await this.lrApollo.mutate<any>({
186
+ mutation: DeleteLbopQuery,
187
+ variables: {
188
+ input: {
189
+ id,
190
+ },
191
+ },
192
+ });
193
+
194
+ return res.deleteLbop.id;
195
+ }
196
+
197
+ public async update({ id, name }: UpdateLbopParams): Promise<Lbop> {
198
+ const lbop = await this.get(id);
199
+ lbop.name = name;
200
+
201
+ const masterKey = await this.keyService.getCurrentMasterKey();
202
+ const cipherMeta = await this.encryptionService.encrypt(
203
+ masterKey.jwk,
204
+ lbop
205
+ );
206
+
207
+ const res = await this.lrApollo.mutate<UpdateLbopQuery>({
208
+ mutation: UpdateLbopQuery,
209
+ variables: {
210
+ input: {
211
+ id,
212
+ cipherMeta: JSON.stringify(cipherMeta),
213
+ },
214
+ },
215
+ });
216
+
217
+ return res.updateLbop;
218
+ }
219
+
220
+ public async get(id: string): Promise<Lbop> {
221
+ const res = await this.lrApollo.query<any>({
222
+ query: LbopQuery,
223
+ variables: {
224
+ id,
225
+ },
226
+ });
227
+
228
+ const masterKey = await this.keyService.getCurrentMasterKey();
229
+
230
+ const plainCipherMeta = await this.encryptionService.decrypt(
231
+ masterKey.jwk,
232
+ JSON.parse(res.lbop.cipherMeta)
233
+ );
234
+
235
+ return {
236
+ id: res.id,
237
+ ...plainCipherMeta,
238
+ };
239
+ }
240
+
241
+ public async list(): Promise<Lbop[]> {
242
+ const res = await this.lrApollo.query<LbopsQuery>({
243
+ query: LbopsQuery,
244
+ });
245
+
246
+ const masterKey = await this.keyService.getCurrentMasterKey();
247
+
248
+ return Promise.all(
249
+ res.lbops.edges.map(async (edge) => {
250
+ const plainCipherMeta = await this.encryptionService.decrypt(
251
+ masterKey.jwk,
252
+ JSON.parse(edge.node.cipherMeta)
253
+ );
254
+ return {
255
+ id: edge.node.id,
256
+ ...plainCipherMeta,
257
+ };
258
+ })
259
+ );
260
+ }
261
+
262
+ public async create({ name }: CreateLbopParams): Promise<Lbop> {
263
+ if (Slip39Helper.WORD_LIST.length !== 1024) {
264
+ throw new LrBadLogicException('Slip39Helper.WORD_LIST.length != 1024');
265
+ }
266
+
267
+ // Get existing to make sure there are not duplicate first words
268
+ const lbops = await this.list();
269
+
270
+ // Generate new one
271
+ let lbopString;
272
+ while (true) {
273
+ lbopString = this.keyFactory
274
+ .randomChoices(Slip39Helper.WORD_LIST, this.LBOP_WORDS)
275
+ .join(' ');
276
+ const partial = this.getPartial(lbopString);
277
+
278
+ if (!lbops.some((lbop) => lbop.partial === partial)) {
279
+ break;
280
+ }
281
+ }
282
+
283
+ const lbopKeyParams = await this.keyFactory.createLbopKeyParams();
284
+ const lbopKey = (
285
+ await this.keyFactory.deriveLbopKey({
286
+ password: lbopString,
287
+ ...lbopKeyParams,
288
+ })
289
+ ).jwk;
290
+
291
+ const lbopKeyVerifier = await this.keyFactory.createSignKey();
292
+ const wrappedLbopKeyVerifier = await this.encryptionService.encrypt(
293
+ lbopKey,
294
+ lbopKeyVerifier.toJSON(true)
295
+ );
296
+
297
+ // Re-encrypt master key with new key
298
+ const currentUser = await this.authService.getUser();
299
+ const masterKey = await this.keyGraph.getKey(
300
+ currentUser.currentUserKey.masterKey.id
301
+ );
302
+ const wrappedMasterKey = await this.encryptionService.encrypt(
303
+ lbopKey,
304
+ masterKey.jwk.toJSON(true)
305
+ );
306
+
307
+ const meta = {
308
+ ...(name && { name }),
309
+ partial: this.getPartial(lbopString),
310
+ };
311
+ const cipherMeta = await this.encryptionService.encrypt(
312
+ masterKey.jwk,
313
+ meta
314
+ );
315
+
316
+ const res = await this.lrApollo.mutate<CreateLbopQuery>({
317
+ mutation: CreateLbopQuery,
318
+ variables: {
319
+ input: {
320
+ cipherMeta: JSON.stringify(cipherMeta),
321
+ lbopKeyParams: JSON.stringify(lbopKeyParams),
322
+ lbopKeyVerifier: JSON.stringify(lbopKeyVerifier.toJSON(true)),
323
+ wrappedLbopKeyVerifier: JSON.stringify(wrappedLbopKeyVerifier),
324
+ masterKeyId: currentUser.currentUserKey.masterKey.id,
325
+ wrappedMasterKey: JSON.stringify(wrappedMasterKey),
326
+ },
327
+ },
328
+ });
329
+
330
+ return {
331
+ ...res.createLbop.lbop,
332
+ lbopString,
333
+ };
334
+ }
335
+
336
+ // --------------------------------------------------------------------------------------------------------------------
337
+ // --------------------------------------------------------------------------------------------------------------------
338
+ // Flow below are for password reset via LBOP
339
+ //
340
+ // --Potential Failure Point xxx--
341
+ //
342
+ // Look for the above and you can test by interrupting at these points.
343
+ //
344
+ // The LBOP reset process can be restarted at any point before the call to "set-password/". Once "set-password/" has been
345
+ // called, we assume the client has a short period of time to change the Idp password to the one they've chosen. The "set-password/"
346
+ // will set the Idp password to a temporary random password. The user can no longer login using their current password. If the Idp
347
+ // password change process does not complete or takes longer than the lockout period, the account will not be accessible and a new
348
+ // LBOP password reset must be carried out.
349
+ // --------------------------------------------------------------------------------------------------------------------
350
+ // --------------------------------------------------------------------------------------------------------------------
351
+ private async verifyLbops(
352
+ challengeResult: ChallengeResult,
353
+ lbopString: string
354
+ ): Promise<{ lbop: any; signedChallenge: any; lbopKey: JWK.Key }> {
355
+ const clientNonce = this.keyFactory.randomString(this.CLIENT_NONCE_LENGTH);
356
+
357
+ for (const lbop of challengeResult.lbops) {
358
+ const lbopKey = (
359
+ await this.keyFactory.deriveLbopKey({
360
+ password: lbopString,
361
+ ...lbop.lbopKeyParams,
362
+ })
363
+ ).jwk;
364
+
365
+ // If decoding successful then it's the correct lbop
366
+ try {
367
+ const lbopKeyVerifier = (await this.encryptionService.decrypt(
368
+ lbopKey,
369
+ lbop.wrappedLbopKeyVerifier
370
+ )) as any;
371
+
372
+ // Force a bad signature.
373
+ // const serverNonce = challengeResult.challenge.serverNonce + "1",
374
+
375
+ const serverNonce = challengeResult.challenge.serverNonce;
376
+
377
+ const signedChallenge = await this.encryptionService.sign(
378
+ lbopKeyVerifier,
379
+ {
380
+ serverNonce,
381
+ clientNonce,
382
+ }
383
+ );
384
+
385
+ return {
386
+ lbop,
387
+ signedChallenge,
388
+ lbopKey,
389
+ };
390
+ } catch (error) {
391
+ continue;
392
+ }
393
+ }
394
+ throw new LrException({
395
+ source: 'LBOP',
396
+ code: 'INVALID_PASSPHRASE',
397
+ message: 'Invalid passphrase.',
398
+ });
399
+ }
400
+
401
+ public async verifyContact(
402
+ params: VerifyContactParams
403
+ ): Promise<VerifyContactResult> {
404
+ const ret = this.http
405
+ .post<VerifyContactResult>(
406
+ `${this.config.authUrl}users/lbop-reset/verify-contact/`,
407
+ params
408
+ )
409
+ .toPromise();
410
+
411
+ // --Potential Failure Point 1 --
412
+ // The contact verifications are throttled. But otherwise harmless.
413
+
414
+ return ret;
415
+ }
416
+
417
+ public async confirmContact(
418
+ params: ConfirmContactParams
419
+ ): Promise<ConfirmContactResult> {
420
+ return this.http
421
+ .post<ConfirmContactResult>(`${this.config.authUrl}cove/respond/`, {
422
+ claim_id: params.claimId,
423
+ v_code: params.vCode,
424
+ })
425
+ .toPromise();
426
+
427
+ // --Potential Failure Point 2 --
428
+ // A verified claim for a contact does not prevent new ones from being generated. So it should be fine to just start again.
429
+ }
430
+
431
+ public async verify(params: VerifyParams): Promise<VerifyResult> {
432
+ const challengeResult = await this.http
433
+ .post<ChallengeResult>(
434
+ `${this.config.authUrl}users/lbop-reset/get-challenge/`,
435
+ {
436
+ claimId: params.claimId,
437
+ claimToken: params.claimToken,
438
+ }
439
+ )
440
+ .toPromise();
441
+
442
+ // --Potential Failure Point 3 --
443
+ // This does not lock anything. A second call to "get-challenge/" will create a new challenge amd invalidate the first one.
444
+ const { signedChallenge, lbop, lbopKey } = await this.verifyLbops(
445
+ challengeResult,
446
+ params.lbop
447
+ );
448
+
449
+ const res = await this.http
450
+ .post<any>(`${this.config.authUrl}users/lbop-reset/verify-challenge/`, {
451
+ lbopId: lbop.lbopId,
452
+ signedChallenge,
453
+ })
454
+ .toPromise();
455
+
456
+ // --Potential Failure Point 4 --
457
+ // This does not lock anything. So ok to restart.
458
+
459
+ return {
460
+ lbopId: lbop.lbopId,
461
+ verifiedToken: res.verifiedToken,
462
+ masterKeyId: res.masterKeyId,
463
+ masterKey: await KFS.asKey(
464
+ await this.encryptionService.decrypt(lbopKey, res.wrappedMasterKey)
465
+ ),
466
+ };
467
+ }
468
+
469
+ public async setPassword(params: SetPasswordParams): Promise<any> {
470
+ // Generate the new password derived keys
471
+ const passKeyBundle = await this.passwordService.createPassKeyBundle(
472
+ params.newPassword
473
+ );
474
+
475
+ // Re-encrypt master key with new key
476
+ const newWrappedMasterKey = await this.encryptionService.encrypt(
477
+ passKeyBundle.passKey,
478
+ params.masterKey.toJSON(true)
479
+ );
480
+
481
+ const result = await this.http
482
+ .post<SetPasswordApiResult>(
483
+ `${this.config.authUrl}users/lbop-reset/set-password/`,
484
+ {
485
+ lbopId: params.lbopId,
486
+ verifiedToken: params.verifiedToken,
487
+ masterKeyId: params.masterKeyId,
488
+ newWrappedMasterKey,
489
+ newPassKey: {
490
+ passKeyParams: passKeyBundle.passKeyParams,
491
+ passIdpParams: passKeyBundle.passIdpParams,
492
+ passIdpVerifierPbk: passKeyBundle.passIdpVerifier.toJSON(),
493
+ wrappedPassIdpVerifierPrk: passKeyBundle.wrappedPassIdpVerifierPrk,
494
+ },
495
+ }
496
+ )
497
+ .toPromise();
498
+
499
+ // --Potential Failure Point 5 --
500
+ // A timed mutex is locked. The Idp password change must occur within a period of time.
501
+ // If interrupted here, the user can not login with their old password again. They must
502
+ // start the whole LBOP password reset process again.
503
+
504
+ // This call will go through the LR proxy which is OK since the LR server knows
505
+ // the temporary password anyway.
506
+ let user = await this.auth.signIn(result.username, result.idpPassword, {
507
+ noProxy: 'true',
508
+ });
509
+
510
+ if (user.challengeName !== 'NEW_PASSWORD_REQUIRED') {
511
+ throw new LrException({
512
+ message:
513
+ 'Internal error. Expecting Cognito to have done a password reset.',
514
+ });
515
+ }
516
+
517
+ // --Potential Failure Point 6 --
518
+ // Must restart the LBOP password reset process again.
519
+
520
+ // Set new password on Idp
521
+ user = await this.auth.completeNewPassword(
522
+ user,
523
+ this.passwordService.getPassIdpString(passKeyBundle.passIdp),
524
+ {}
525
+ );
526
+
527
+ // --Potential Failure Point 7 --
528
+ // Must restart the LBOP password reset process again.
529
+
530
+ await this.auth.signOut();
531
+
532
+ return await this.http
533
+ .post<any>(`${this.config.authUrl}users/lbop-reset/complete/`, {
534
+ lbopId: params.lbopId,
535
+ setPasswordToken: result.setPasswordToken,
536
+ })
537
+ .toPromise();
538
+ }
539
+ }
@@ -0,0 +1,70 @@
1
+ import { TestBed } from '@angular/core/testing';
2
+ import { LifeReadyAuthService } from './life-ready-auth.service';
3
+ import { CurrentUser } from '../../public-api';
4
+ import { environment } from 'projects/lr-auth-app/src/environments/environment';
5
+ import { lrConfigureTestingModule } from '../_common/tests';
6
+
7
+ describe('LifeReadyAuthService', () => {
8
+ let service: LifeReadyAuthService;
9
+
10
+ beforeEach(() => {
11
+ lrConfigureTestingModule();
12
+ service = TestBed.inject(LifeReadyAuthService);
13
+ });
14
+
15
+ it('should be created', () => {
16
+ expect(service).toBeTruthy();
17
+ });
18
+ });
19
+
20
+ export async function loginTestUser(
21
+ username?: string,
22
+ password?: string
23
+ ): Promise<CurrentUser> {
24
+ if (!environment.test) {
25
+ return;
26
+ }
27
+
28
+ if (!username || !password) {
29
+ username = environment.test.users[0].username;
30
+ password = environment.test.users[0].password;
31
+ }
32
+
33
+ const authService = TestBed.inject(LifeReadyAuthService);
34
+
35
+ const originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
36
+ jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
37
+ console.log(
38
+ `setting jasmine.DEFAULT_TIMEOUT_INTERVAL to ${jasmine.DEFAULT_TIMEOUT_INTERVAL}`
39
+ );
40
+
41
+ try {
42
+ try {
43
+ const user = await authService.getUser();
44
+ if (user.username === username || user.email === username) {
45
+ return user;
46
+ }
47
+ } catch (error) {
48
+ // nothing
49
+ }
50
+
51
+ await logoutUser();
52
+
53
+ console.log('Logging in test user.');
54
+
55
+ await authService.login(username, password);
56
+
57
+ // If there's 2FA then getUser() will throw.
58
+ return await authService.getUser();
59
+ } finally {
60
+ console.log(
61
+ `setting jasmine.DEFAULT_TIMEOUT_INTERVAL back to ${jasmine.DEFAULT_TIMEOUT_INTERVAL}`
62
+ );
63
+ jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
64
+ }
65
+ }
66
+
67
+ export async function logoutUser(): Promise<void> {
68
+ const authService = TestBed.inject(LifeReadyAuthService);
69
+ await authService.logout();
70
+ }