@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,69 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { CognitoUser } from '@aws-amplify/auth';
3
+ import { AuthClass } from '@aws-amplify/auth/lib-esm/Auth';
4
+ import { LrBadArgumentException } from '../_common/exceptions';
5
+
6
+ @Injectable({
7
+ providedIn: 'root',
8
+ })
9
+ export class TwoFactorService {
10
+ constructor(private auth: AuthClass) {}
11
+
12
+ public async getPreferredMFA(): Promise<string> {
13
+ const cognitoUser: CognitoUser = await this.auth.currentAuthenticatedUser();
14
+
15
+ return await this.auth.getPreferredMFA(cognitoUser);
16
+ }
17
+
18
+ public async setPreferredMFA(
19
+ method: 'TOTP' | 'SMS' | 'NOMFA'
20
+ ): Promise<void> {
21
+ const cognitoUser: CognitoUser = await this.auth.currentAuthenticatedUser();
22
+
23
+ await this.auth.setPreferredMFA(cognitoUser, method);
24
+ }
25
+
26
+ public async setPhoneNumber(phone): Promise<void> {
27
+ const cognitoUser: CognitoUser = await this.auth.currentAuthenticatedUser();
28
+
29
+ await this.auth.updateUserAttributes(cognitoUser, {
30
+ phone_number: phone,
31
+ });
32
+ }
33
+
34
+ public async getSMSCode() {
35
+ await this.auth.verifyCurrentUserAttribute('phone_number');
36
+ }
37
+
38
+ public async verifySMSCode(verificationCode: string) {
39
+ await this.auth.verifyCurrentUserAttributeSubmit(
40
+ 'phone_number',
41
+ verificationCode
42
+ );
43
+ }
44
+
45
+ public async getSoftwareToken(): Promise<{ code: string; codeUri: string }> {
46
+ const [cognitoUser, userInfo] = await Promise.all([
47
+ this.auth.currentAuthenticatedUser(),
48
+ this.auth.currentUserInfo(),
49
+ ]);
50
+
51
+ const code = await this.auth.setupTOTP(cognitoUser);
52
+
53
+ const email = userInfo.attributes.email;
54
+ if (!email) {
55
+ throw new LrBadArgumentException('No email associated with user.');
56
+ }
57
+
58
+ return {
59
+ code,
60
+ codeUri: `otpauth://totp/${email}?secret=${code}&issuer=LifeReady`,
61
+ };
62
+ }
63
+
64
+ public async verifySoftwareToken(totpCode: string): Promise<void> {
65
+ const cognitoUser: CognitoUser = await this.auth.currentAuthenticatedUser();
66
+
67
+ await this.auth.verifyTotpToken(cognitoUser, totpCode);
68
+ }
69
+ }
@@ -0,0 +1,28 @@
1
+ import { TestBed } from '@angular/core/testing';
2
+ import { CategoryMetaService } from './category-meta.service';
3
+ import { CategoryService } from './category.service';
4
+ import { HttpClient } from '@angular/common/http';
5
+
6
+ const http = jasmine.createSpyObj('HttpClient', ['']);
7
+ const categoryService = jasmine.createSpyObj<CategoryService>(
8
+ 'CategoryService',
9
+ ['getCategories', 'getCategory']
10
+ );
11
+
12
+ describe('CategoryMetaService', () => {
13
+ let service: CategoryMetaService;
14
+
15
+ beforeEach(() => {
16
+ TestBed.configureTestingModule({
17
+ providers: [
18
+ { provide: CategoryService, useValue: categoryService },
19
+ { provide: HttpClient, useValue: http },
20
+ ],
21
+ });
22
+ service = TestBed.inject(CategoryMetaService);
23
+ });
24
+
25
+ it('should be created', () => {
26
+ expect(service).toBeTruthy();
27
+ });
28
+ });
@@ -0,0 +1,125 @@
1
+ import { HttpClient } from '@angular/common/http';
2
+ import { Injectable } from '@angular/core';
3
+ import { CategoryService } from './category.service';
4
+ import {
5
+ AccessLevel,
6
+ Category,
7
+ CurrentCategory,
8
+ DefaultCategory,
9
+ VaultCategory,
10
+ } from './category.types';
11
+
12
+ export class LoadedCategoryTree {
13
+ categories: CurrentCategory[];
14
+ missingCategories: string[][];
15
+ }
16
+
17
+ @Injectable({
18
+ providedIn: 'root',
19
+ })
20
+ export class CategoryMetaService {
21
+ private categories: DefaultCategory[];
22
+
23
+ constructor(
24
+ private http: HttpClient,
25
+ private categoryService: CategoryService
26
+ ) {}
27
+
28
+ public async getCoreCategories(): Promise<DefaultCategory[]> {
29
+ if (!this.categories) {
30
+ this.categories = await this.http
31
+ .get<DefaultCategory[]>('/assets/meta/categories.json')
32
+ .toPromise();
33
+ }
34
+ return Promise.resolve(this.categories);
35
+ }
36
+
37
+ async loadCategories(
38
+ categoryTrees: string[][],
39
+ selectedCategoryId?: string,
40
+ trustedPartyId?: string
41
+ ): Promise<LoadedCategoryTree> {
42
+ const rootCategories = trustedPartyId
43
+ ? (await this.categoryService.getTrustedPartyCategories(trustedPartyId))
44
+ .categories
45
+ : await this.categoryService.getCategories();
46
+
47
+ const selectedCategory = selectedCategoryId
48
+ ? await this.categoryService.getCategory(selectedCategoryId)
49
+ : null;
50
+
51
+ const categoryPromises = categoryTrees.map(async (x) => ({
52
+ categoryTree: x,
53
+ category: await this.loadCategory(
54
+ [...x],
55
+ rootCategories,
56
+ selectedCategory
57
+ ),
58
+ }));
59
+
60
+ const loadedCategories = await Promise.all(categoryPromises);
61
+
62
+ const loadedCategoryTree: LoadedCategoryTree = {
63
+ categories: [],
64
+ missingCategories: [],
65
+ };
66
+
67
+ loadedCategories.forEach((x) =>
68
+ x.category
69
+ ? loadedCategoryTree.categories.push(x.category)
70
+ : loadedCategoryTree.missingCategories.push(x.categoryTree)
71
+ );
72
+
73
+ return loadedCategoryTree;
74
+ }
75
+
76
+ async loadCategoriesForRole(
77
+ categories: { category: string[]; accessLevel: AccessLevel }[]
78
+ ): Promise<{ category: CurrentCategory; accessLevel: AccessLevel }[]> {
79
+ const rootCategories = await this.categoryService.getCategories();
80
+
81
+ return await Promise.all(
82
+ categories.map(async (x) => ({
83
+ category: await this.loadCategory([...x.category], rootCategories),
84
+ accessLevel: x.accessLevel,
85
+ }))
86
+ );
87
+ }
88
+
89
+ private async loadCategory(
90
+ categoryTree: string[],
91
+ categories: Category[],
92
+ selectedCategory?: VaultCategory
93
+ ): Promise<CurrentCategory> {
94
+ const name = categoryTree.shift();
95
+
96
+ const currentCategory = categories.find(
97
+ (x) => x.code === name && !x.isCustom
98
+ );
99
+
100
+ if (currentCategory) {
101
+ if (categoryTree.length) {
102
+ const { subCategories } = await this.categoryService.getCategory(
103
+ currentCategory.id
104
+ );
105
+ return this.loadCategory(categoryTree, subCategories, selectedCategory);
106
+ } else {
107
+ const { category } = await this.categoryService.getCategory(
108
+ currentCategory.id
109
+ );
110
+
111
+ if (
112
+ selectedCategory &&
113
+ selectedCategory.category.parents.some((x) => x.id === category.id)
114
+ ) {
115
+ return selectedCategory.category;
116
+ }
117
+ return category;
118
+ }
119
+ } else if (categoryTree.length) {
120
+ return this.loadCategory(categoryTree, categories, selectedCategory);
121
+ } else {
122
+ return null;
123
+ }
124
+ }
125
+ }
@@ -0,0 +1,449 @@
1
+ import { HasKeyGraph } from './../cryptography/cryptography.types';
2
+ import { KeyGraphFragment } from '../_common/queries.gql';
3
+ import gql from 'graphql-tag';
4
+ import { HasKeyGraphEdges, HasEdges } from '../_common/types';
5
+
6
+ export const DEFAULT_BREADCRUMB_DEPTH = 5;
7
+ export const DEFAULT_DESCENDANTS_DEPTH = 5;
8
+
9
+ export enum DirectoryType {
10
+ Vault = 'vault',
11
+ Category = 'category',
12
+ Record = 'record',
13
+ }
14
+
15
+ export const DefaultVaultFilter = JSON.stringify({
16
+ filter: [
17
+ {
18
+ contains: {
19
+ directoryType: DirectoryType.Vault,
20
+ default: true,
21
+ },
22
+ },
23
+ ],
24
+ });
25
+
26
+ export const CategoryFilter = JSON.stringify({
27
+ filter: [
28
+ {
29
+ contains: {
30
+ directoryType: DirectoryType.Category,
31
+ },
32
+ },
33
+ ],
34
+ });
35
+
36
+ export const RecordFilter = JSON.stringify({
37
+ filter: [
38
+ {
39
+ contains: {
40
+ directoryType: DirectoryType.Record,
41
+ },
42
+ },
43
+ ],
44
+ });
45
+
46
+ export const AccessFields = `
47
+ accessRoles {
48
+ role
49
+ method
50
+ inheritedFrom {
51
+ id
52
+ }
53
+ trustedParty {
54
+ id
55
+ }
56
+ isIssuer
57
+ }`;
58
+
59
+ const descendantDirectories = `
60
+ descendantDirectories(depth: ${DEFAULT_DESCENDANTS_DEPTH}, plainMeta: $categoryFilter, archived: false) {
61
+ recordsCount: directoriesCount(plainMeta: $recordFilter, archived: false)
62
+ }
63
+ `;
64
+
65
+ export const CategoryFields = `
66
+ id
67
+ keyId
68
+ archived
69
+ plainMeta
70
+ cipherMeta
71
+ ${AccessFields}
72
+ ${descendantDirectories}
73
+ `;
74
+
75
+ export const VaultFields = `
76
+ id
77
+ keyId
78
+ plainMeta
79
+ cipherMeta
80
+ `;
81
+
82
+ export const GetRootDirectoryIdsQuery = gql`
83
+ query GetRootDirectoryIdsQuery($archived: Boolean) {
84
+ rootDirectories(archived: $archived) {
85
+ edges {
86
+ node {
87
+ id
88
+ }
89
+ }
90
+ }
91
+ }
92
+ `;
93
+
94
+ export const GetCategoriesQuery = gql`
95
+ query GetCategories($vaultFilter: LrJSONFilter!, $categoryFilter: LrJSONFilter!, $recordFilter: LrJSONFilter!, $archived: Boolean, $cachedKeyIds: [LrRelayIdInput!])
96
+ {
97
+ vaults: rootDirectories(plainMeta: $vaultFilter) {
98
+ edges {
99
+ node {
100
+ childDirectoryLinks(plainMeta: $categoryFilter, orderBy: "created", archived: $archived) {
101
+ edges {
102
+ node {
103
+ childDirectory {
104
+ ${CategoryFields}
105
+ }
106
+ }
107
+ }
108
+ }
109
+ }
110
+ }
111
+ }
112
+ keyGraph(cachedKeyIds: $cachedKeyIds) {
113
+ ...KeyGraphFragment
114
+ }
115
+ }
116
+ ${KeyGraphFragment}
117
+ `;
118
+
119
+ export const GetVaultsQuery = gql`
120
+ query GetVaults($plainMetaFilter: LrJSONFilter!, $cachedKeyIds: [LrRelayIdInput!])
121
+ {
122
+ list: rootDirectories(plainMeta: $plainMetaFilter, orderBy: "created") {
123
+ edges {
124
+ node {
125
+ ${VaultFields}
126
+ }
127
+ }
128
+ }
129
+ keyGraph(cachedKeyIds: $cachedKeyIds) {
130
+ ...KeyGraphFragment
131
+ }
132
+ }
133
+ ${KeyGraphFragment}
134
+ `;
135
+
136
+ export interface GetTrustedPartyCategoriesQueryType extends HasKeyGraph {
137
+ tp: {
138
+ sharedItems: {
139
+ list: HasEdges<any>;
140
+ records: HasEdges<any>;
141
+ };
142
+ };
143
+ }
144
+
145
+ export const GetTrustedPartyCategoriesQuery = gql`
146
+ query GetTrustedPartyCategoriesQuery($trustedPartyId: LrRelayIdInput!, $categoryFilter: LrJSONFilter!, $recordFilter: LrJSONFilter!, $contentFilter: LrJSONFilter, $cachedKeyIds: [LrRelayIdInput!])
147
+ {
148
+ tp(id: $trustedPartyId) {
149
+ sharedItems {
150
+ list: directories(plainMeta: $categoryFilter, orderBy: "created") {
151
+ edges {
152
+ node {
153
+ ${CategoryFields}
154
+ }
155
+ }
156
+ }
157
+ records: directories(plainMeta: $recordFilter, orderBy: "created") {
158
+ edges {
159
+ node {
160
+ id
161
+ keyId
162
+ archived
163
+ plainMeta
164
+ cipherMeta
165
+ created
166
+ modified
167
+ ${AccessFields}
168
+ content: childFileLinks(plainMeta: $contentFilter) {
169
+ edges {
170
+ node {
171
+ childFile {
172
+ id
173
+ archived
174
+ currentVersion {
175
+ state {
176
+ keyId
177
+ plainMeta
178
+ cipherMeta
179
+ created
180
+ modified
181
+ }
182
+ }
183
+ }
184
+ }
185
+ }
186
+ }
187
+ }
188
+ }
189
+ }
190
+ }
191
+ }
192
+ keyGraph(cachedKeyIds: $cachedKeyIds) {
193
+ ...KeyGraphFragment
194
+ }
195
+ }
196
+ ${KeyGraphFragment}
197
+ `;
198
+
199
+ export interface GetMySharedCategoriesQueryType extends HasKeyGraph {
200
+ tp: {
201
+ myItems: {
202
+ list: HasEdges<any>;
203
+ records: HasEdges<any>;
204
+ };
205
+ };
206
+ }
207
+
208
+ export const GetMySharedCategoriesQuery = gql`
209
+ query GetMySharedCategoriesQuery($trustedPartyId: LrRelayIdInput!, $categoryFilter: LrJSONFilter!, $recordFilter: LrJSONFilter!, $contentFilter: LrJSONFilter, $cachedKeyIds: [LrRelayIdInput!])
210
+ {
211
+ tp(id: $trustedPartyId) {
212
+ myItems {
213
+ list: directories(plainMeta: $categoryFilter, orderBy: "created") {
214
+ edges {
215
+ node {
216
+ ${CategoryFields}
217
+ }
218
+ }
219
+ }
220
+ records: directories(plainMeta: $recordFilter, orderBy: "created") {
221
+ edges {
222
+ node {
223
+ id
224
+ keyId
225
+ archived
226
+ plainMeta
227
+ cipherMeta
228
+ created
229
+ modified
230
+ ${AccessFields}
231
+ content: childFileLinks(plainMeta: $contentFilter) {
232
+ edges {
233
+ node {
234
+ childFile {
235
+ id
236
+ archived
237
+ currentVersion {
238
+ state {
239
+ keyId
240
+ plainMeta
241
+ cipherMeta
242
+ created
243
+ modified
244
+ }
245
+ }
246
+ }
247
+ }
248
+ }
249
+ }
250
+ }
251
+ }
252
+ }
253
+ }
254
+ }
255
+ keyGraph(cachedKeyIds: $cachedKeyIds) {
256
+ ...KeyGraphFragment
257
+ }
258
+ }
259
+ ${KeyGraphFragment}
260
+ `;
261
+
262
+ export const parentCategoriesField = (depth = DEFAULT_BREADCRUMB_DEPTH) => {
263
+ if (!depth) {
264
+ return '';
265
+ }
266
+ return `
267
+ parentCategories: parentDirectoryLinks(plainMeta: $categoryFilter) {
268
+ edges {
269
+ node {
270
+ parentDirectory {
271
+ id
272
+ keyId
273
+ archived
274
+ plainMeta
275
+ cipherMeta
276
+ ${parentCategoriesField(depth - 1)}
277
+ ${AccessFields}
278
+ }
279
+ }
280
+ }
281
+ }
282
+ `;
283
+ };
284
+
285
+ export const GetCategoryQuery = (
286
+ depth: number = DEFAULT_BREADCRUMB_DEPTH
287
+ ) => gql`
288
+ query GetCategory(
289
+ $id: LrRelayIdInput!,
290
+ $categoryFilter: LrJSONFilter!,
291
+ $recordFilter: LrJSONFilter!,
292
+ $contentFilter: LrJSONFilter,
293
+ $cachedKeyIds: [LrRelayIdInput!]) {
294
+ category: directory(id: $id) {
295
+ id
296
+ keyId
297
+ archived
298
+ plainMeta
299
+ cipherMeta
300
+ ${AccessFields}
301
+ ${descendantDirectories}
302
+ ${parentCategoriesField(depth)}
303
+ subCategories: childDirectoryLinks(plainMeta: $categoryFilter, orderBy: "created") {
304
+ edges {
305
+ node {
306
+ childDirectory {
307
+ ${CategoryFields}
308
+ }
309
+ }
310
+ }
311
+ }
312
+ records: childDirectoryLinks(plainMeta: $recordFilter, orderBy: "created") {
313
+ edges {
314
+ node {
315
+ childDirectory {
316
+ id
317
+ keyId
318
+ archived
319
+ plainMeta
320
+ cipherMeta
321
+ created
322
+ modified
323
+ ${AccessFields}
324
+ content: childFileLinks(plainMeta: $contentFilter) {
325
+ edges {
326
+ node {
327
+ childFile {
328
+ id
329
+ archived
330
+ currentVersion {
331
+ state {
332
+ keyId
333
+ plainMeta
334
+ cipherMeta
335
+ created
336
+ modified
337
+ }
338
+ }
339
+ }
340
+ }
341
+ }
342
+ }
343
+ }
344
+ }
345
+ }
346
+ }
347
+ }
348
+ keyGraph(cachedKeyIds: $cachedKeyIds) {
349
+ ...KeyGraphFragment
350
+ }
351
+ }
352
+ ${KeyGraphFragment} `;
353
+
354
+ export const GetCategoryKeyIdQuery = gql`
355
+ query GetCategoryKeyIdQuery(
356
+ $id: LrRelayIdInput!
357
+ $cachedKeyIds: [LrRelayIdInput!]
358
+ ) {
359
+ category: directory(id: $id) {
360
+ keyId
361
+ }
362
+ keyGraph(cachedKeyIds: $cachedKeyIds) {
363
+ ...KeyGraphFragment
364
+ }
365
+ }
366
+ ${KeyGraphFragment}
367
+ `;
368
+
369
+ export const CreateCategoryMutation = gql`
370
+ mutation CreateCategory(
371
+ $plainMeta: LrJSONString
372
+ $cipherMeta: String
373
+ $parentDirectories: [ParentDirectoryInput!]
374
+ $parentRootDirectory: ParentRootDirectoryInput
375
+ ) {
376
+ new: createDirectory(
377
+ input: {
378
+ plainMeta: $plainMeta
379
+ cipherMeta: $cipherMeta
380
+ parentDirectories: $parentDirectories
381
+ parentRootDirectory: $parentRootDirectory
382
+ }
383
+ ) {
384
+ category: directory {
385
+ id
386
+ keyId
387
+ }
388
+ }
389
+ }
390
+ `;
391
+
392
+ export const CreateVaultMutation = gql`
393
+ mutation CreateCategory(
394
+ $plainMeta: LrJSONString
395
+ $cipherMeta: String
396
+ $parentRootDirectory: ParentRootDirectoryInput
397
+ ) {
398
+ new: createDirectory(
399
+ input: {
400
+ plainMeta: $plainMeta
401
+ cipherMeta: $cipherMeta
402
+ parentRootDirectory: $parentRootDirectory
403
+ }
404
+ ) {
405
+ vault: directory {
406
+ id
407
+ keyId
408
+ }
409
+ }
410
+ }
411
+ `;
412
+
413
+ export const UpdateCategoryMutation = gql`
414
+ mutation UpdateCategory($input: UpdateDirectoryInput!) {
415
+ updateDirectory(input: $input) {
416
+ directory {
417
+ id
418
+ }
419
+ }
420
+ }
421
+ `;
422
+
423
+ export const DeleteCategoryMutation = gql`
424
+ mutation DeleteCategory($categoryId: LrRelayIdInput!) {
425
+ deleteDirectory(input: { directoryId: $categoryId }) {
426
+ id
427
+ }
428
+ }
429
+ `;
430
+
431
+ export const ArchiveDirectoryMutation = gql`
432
+ mutation ArchiveDirectory($input: ArchiveDirectoryInput!) {
433
+ archiveDirectory(input: $input) {
434
+ directory {
435
+ id
436
+ }
437
+ }
438
+ }
439
+ `;
440
+
441
+ export const UnarchiveDirectoryMutation = gql`
442
+ mutation UnarchiveDirectory($input: UnarchiveDirectoryInput!) {
443
+ unarchiveDirectory(input: $input) {
444
+ directory {
445
+ id
446
+ }
447
+ }
448
+ }
449
+ `;
@@ -0,0 +1,26 @@
1
+ import { TestBed } from '@angular/core/testing';
2
+ import { LrApolloService } from '../api/lr-apollo.service';
3
+ import { KeyMetaService } from '../cryptography/key-meta.service';
4
+ import { lrConfigureTestingModule } from '../_common/tests';
5
+ import { CategoryService } from './category.service';
6
+
7
+ const keyMetaService = jasmine.createSpyObj<KeyMetaService>('PasswordService', [
8
+ 'wrapContent',
9
+ ]);
10
+ const lrApollo = jasmine.createSpyObj<LrApolloService>('PasswordService', [
11
+ 'query',
12
+ 'mutate',
13
+ ]);
14
+
15
+ describe('FolderService', () => {
16
+ let service: CategoryService;
17
+
18
+ beforeEach(async () => {
19
+ lrConfigureTestingModule();
20
+ service = TestBed.inject(CategoryService);
21
+ });
22
+
23
+ it('should be created', () => {
24
+ expect(service).toBeTruthy();
25
+ });
26
+ });