@lifeready/core 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/README.md +62 -62
  2. package/bundles/lifeready-core.umd.js +15445 -15445
  3. package/bundles/lifeready-core.umd.js.map +1 -1
  4. package/bundles/lifeready-core.umd.min.js.map +1 -1
  5. package/esm2015/lib/_common/ast.js +40 -40
  6. package/esm2015/lib/_common/deferred-promise.js +24 -24
  7. package/esm2015/lib/_common/exceptions.js +157 -157
  8. package/esm2015/lib/_common/queries.gql.js +190 -190
  9. package/esm2015/lib/_common/run-outside-angular.js +79 -79
  10. package/esm2015/lib/_common/types.js +1 -1
  11. package/esm2015/lib/_common/utils.js +44 -44
  12. package/esm2015/lib/api/contact-card.gql.js +79 -79
  13. package/esm2015/lib/api/contact-card.service.js +154 -154
  14. package/esm2015/lib/api/contact-card2.gql.js +60 -60
  15. package/esm2015/lib/api/contact-card2.service.js +103 -103
  16. package/esm2015/lib/api/file.service.js +74 -74
  17. package/esm2015/lib/api/item2.gql.js +110 -110
  18. package/esm2015/lib/api/item2.service.js +311 -311
  19. package/esm2015/lib/api/key-exchange.gql.js +188 -188
  20. package/esm2015/lib/api/key-exchange.service.js +442 -442
  21. package/esm2015/lib/api/key-exchange.types.js +18 -18
  22. package/esm2015/lib/api/key-exchange2.gql.js +171 -171
  23. package/esm2015/lib/api/key-exchange2.service.js +479 -479
  24. package/esm2015/lib/api/lock.gql.js +40 -40
  25. package/esm2015/lib/api/lock.service.js +64 -64
  26. package/esm2015/lib/api/lr-apollo.service.js +46 -46
  27. package/esm2015/lib/api/lr-graphql/index.js +6 -6
  28. package/esm2015/lib/api/lr-graphql/lr-graphql.service.js +155 -155
  29. package/esm2015/lib/api/lr-graphql/lr-merged-mutation.js +213 -213
  30. package/esm2015/lib/api/lr-graphql/lr-mutation-base.js +51 -51
  31. package/esm2015/lib/api/lr-graphql/lr-mutation.js +48 -48
  32. package/esm2015/lib/api/lr-graphql/lr.service.js +18 -18
  33. package/esm2015/lib/api/message.service.js +138 -138
  34. package/esm2015/lib/api/persist.service.js +181 -181
  35. package/esm2015/lib/api/query-processor/common-processors.service.js +93 -93
  36. package/esm2015/lib/api/query-processor/index.js +3 -3
  37. package/esm2015/lib/api/query-processor/query-processor.service.js +192 -192
  38. package/esm2015/lib/api/query-processor/tp-password-reset-processor.service.js +109 -109
  39. package/esm2015/lib/api/shared-contact-card.service.js +119 -119
  40. package/esm2015/lib/api/shared-contact-card2.gql.js +41 -41
  41. package/esm2015/lib/api/shared-contact-card2.service.js +117 -117
  42. package/esm2015/lib/api/time.service.js +146 -146
  43. package/esm2015/lib/api/types/graphql.types.js +7 -7
  44. package/esm2015/lib/api/types/index.js +3 -3
  45. package/esm2015/lib/api/types/lr-graphql.types.js +71 -71
  46. package/esm2015/lib/auth/auth.config.js +57 -57
  47. package/esm2015/lib/auth/auth.gql.js +48 -48
  48. package/esm2015/lib/auth/auth.types.js +27 -27
  49. package/esm2015/lib/auth/idle.service.js +168 -168
  50. package/esm2015/lib/auth/idle.types.js +7 -7
  51. package/esm2015/lib/auth/lbop.service.js +355 -355
  52. package/esm2015/lib/auth/life-ready-auth.service.js +500 -500
  53. package/esm2015/lib/auth/password.service.js +320 -320
  54. package/esm2015/lib/auth/register.service.js +172 -172
  55. package/esm2015/lib/auth/two-factor.service.js +74 -74
  56. package/esm2015/lib/category/category-meta.service.js +99 -99
  57. package/esm2015/lib/category/category.gql.js +406 -406
  58. package/esm2015/lib/category/category.service.js +390 -390
  59. package/esm2015/lib/category/category.types.js +29 -29
  60. package/esm2015/lib/cryptography/cryptography.types.js +11 -11
  61. package/esm2015/lib/cryptography/encryption.service.js +189 -189
  62. package/esm2015/lib/cryptography/key-factory.service.js +237 -237
  63. package/esm2015/lib/cryptography/key-graph.service.js +280 -280
  64. package/esm2015/lib/cryptography/key-meta.service.js +200 -200
  65. package/esm2015/lib/cryptography/key.service.js +124 -124
  66. package/esm2015/lib/cryptography/slip39.service.js +169 -169
  67. package/esm2015/lib/cryptography/web-crypto.service.js +29 -29
  68. package/esm2015/lib/life-ready.config.js +84 -84
  69. package/esm2015/lib/life-ready.module.js +74 -74
  70. package/esm2015/lib/plan/plan.gql.js +123 -123
  71. package/esm2015/lib/plan/plan.service.js +149 -149
  72. package/esm2015/lib/plan/plan.types.js +11 -11
  73. package/esm2015/lib/record/record-attachment.service.js +101 -101
  74. package/esm2015/lib/record/record.gql.js +179 -179
  75. package/esm2015/lib/record/record.service.js +206 -206
  76. package/esm2015/lib/record/record.types.js +15 -15
  77. package/esm2015/lib/record-type/record-type.service.js +75 -75
  78. package/esm2015/lib/record-type/record-type.types.js +28 -28
  79. package/esm2015/lib/scenario/approvals/scenario-approval.gql.js +105 -105
  80. package/esm2015/lib/scenario/approvals/scenario-approval.types.js +1 -1
  81. package/esm2015/lib/scenario/approvals/scenario-approver.service.js +300 -300
  82. package/esm2015/lib/scenario/claimants/scenario-claimant.gql.js +52 -52
  83. package/esm2015/lib/scenario/claimants/scenario-claimant.service.js +97 -97
  84. package/esm2015/lib/scenario/claimants/scenario-claimant.types.js +1 -1
  85. package/esm2015/lib/scenario/receivers/scenario-receiver.gql.js +150 -150
  86. package/esm2015/lib/scenario/receivers/scenario-receiver.service.js +229 -229
  87. package/esm2015/lib/scenario/receivers/scenario-receiver.types.js +1 -1
  88. package/esm2015/lib/scenario/scenario-setup.service.js +269 -269
  89. package/esm2015/lib/scenario/scenario.gql.js +368 -368
  90. package/esm2015/lib/scenario/scenario.service.js +611 -611
  91. package/esm2015/lib/scenario/scenario.types.js +64 -64
  92. package/esm2015/lib/search/search.gql.js +62 -62
  93. package/esm2015/lib/search/search.service.js +156 -156
  94. package/esm2015/lib/search/search.types.js +6 -6
  95. package/esm2015/lib/trusted-parties/tp-password-reset-request.service.js +112 -112
  96. package/esm2015/lib/trusted-parties/tp-password-reset-user.service.js +129 -129
  97. package/esm2015/lib/trusted-parties/tp-password-reset.constants.js +4 -4
  98. package/esm2015/lib/trusted-parties/tp-password-reset.gql.js +232 -232
  99. package/esm2015/lib/trusted-parties/tp-password-reset.service.js +299 -299
  100. package/esm2015/lib/trusted-parties/trusted-party.gql.js +148 -148
  101. package/esm2015/lib/trusted-parties/trusted-party.service.js +326 -326
  102. package/esm2015/lib/trusted-parties/trusted-party.types.js +41 -41
  103. package/esm2015/lib/trusted-parties/trusted-party2.gql.js +87 -87
  104. package/esm2015/lib/trusted-parties/trusted-party2.service.js +215 -215
  105. package/esm2015/lib/users/profile-details.service.js +214 -214
  106. package/esm2015/lib/users/profile.gql.js +97 -97
  107. package/esm2015/lib/users/profile.service.js +169 -169
  108. package/esm2015/lib/users/profile.types.js +34 -34
  109. package/esm2015/lib/users/user.gql.js +60 -60
  110. package/esm2015/lib/users/user.service.js +79 -79
  111. package/esm2015/lib/users/user.types.js +5 -5
  112. package/esm2015/lifeready-core.js +10 -10
  113. package/esm2015/public-api.js +81 -81
  114. package/fesm2015/lifeready-core.js +13088 -13088
  115. package/fesm2015/lifeready-core.js.map +1 -1
  116. package/lib/_common/ast.d.ts +11 -11
  117. package/lib/_common/deferred-promise.d.ts +12 -12
  118. package/lib/_common/exceptions.d.ts +109 -109
  119. package/lib/_common/queries.gql.d.ts +10 -10
  120. package/lib/_common/run-outside-angular.d.ts +14 -14
  121. package/lib/_common/types.d.ts +10 -10
  122. package/lib/_common/utils.d.ts +3 -3
  123. package/lib/api/contact-card.gql.d.ts +7 -7
  124. package/lib/api/contact-card.service.d.ts +52 -52
  125. package/lib/api/contact-card2.gql.d.ts +34 -34
  126. package/lib/api/contact-card2.service.d.ts +49 -49
  127. package/lib/api/file.service.d.ts +18 -18
  128. package/lib/api/item2.gql.d.ts +96 -96
  129. package/lib/api/item2.service.d.ts +177 -177
  130. package/lib/api/key-exchange.gql.d.ts +9 -9
  131. package/lib/api/key-exchange.service.d.ts +39 -39
  132. package/lib/api/key-exchange.types.d.ts +196 -196
  133. package/lib/api/key-exchange2.gql.d.ts +125 -125
  134. package/lib/api/key-exchange2.service.d.ts +187 -187
  135. package/lib/api/lock.gql.d.ts +27 -27
  136. package/lib/api/lock.service.d.ts +25 -25
  137. package/lib/api/lr-apollo.service.d.ts +15 -15
  138. package/lib/api/lr-graphql/index.d.ts +5 -5
  139. package/lib/api/lr-graphql/lr-graphql.service.d.ts +60 -60
  140. package/lib/api/lr-graphql/lr-merged-mutation.d.ts +27 -27
  141. package/lib/api/lr-graphql/lr-mutation-base.d.ts +28 -28
  142. package/lib/api/lr-graphql/lr-mutation.d.ts +8 -8
  143. package/lib/api/lr-graphql/lr.service.d.ts +9 -9
  144. package/lib/api/message.service.d.ts +58 -58
  145. package/lib/api/persist.service.d.ts +31 -31
  146. package/lib/api/query-processor/common-processors.service.d.ts +36 -36
  147. package/lib/api/query-processor/index.d.ts +2 -2
  148. package/lib/api/query-processor/query-processor.service.d.ts +18 -18
  149. package/lib/api/query-processor/tp-password-reset-processor.service.d.ts +15 -15
  150. package/lib/api/shared-contact-card.service.d.ts +33 -33
  151. package/lib/api/shared-contact-card2.gql.d.ts +36 -36
  152. package/lib/api/shared-contact-card2.service.d.ts +45 -45
  153. package/lib/api/time.service.d.ts +16 -16
  154. package/lib/api/types/graphql.types.d.ts +29 -29
  155. package/lib/api/types/index.d.ts +2 -2
  156. package/lib/api/types/lr-graphql.types.d.ts +385 -385
  157. package/lib/auth/auth.config.d.ts +5 -5
  158. package/lib/auth/auth.gql.d.ts +15 -15
  159. package/lib/auth/auth.types.d.ts +66 -66
  160. package/lib/auth/idle.service.d.ts +40 -40
  161. package/lib/auth/idle.types.d.ts +10 -10
  162. package/lib/auth/lbop.service.d.ts +91 -91
  163. package/lib/auth/life-ready-auth.service.d.ts +59 -59
  164. package/lib/auth/password.service.d.ts +78 -78
  165. package/lib/auth/register.service.d.ts +25 -25
  166. package/lib/auth/two-factor.service.d.ts +15 -15
  167. package/lib/category/category-meta.service.d.ts +23 -23
  168. package/lib/category/category.gql.d.ts +45 -45
  169. package/lib/category/category.service.d.ts +67 -67
  170. package/lib/category/category.types.d.ts +79 -79
  171. package/lib/cryptography/cryptography.types.d.ts +83 -83
  172. package/lib/cryptography/encryption.service.d.ts +41 -41
  173. package/lib/cryptography/key-factory.service.d.ts +38 -38
  174. package/lib/cryptography/key-graph.service.d.ts +33 -33
  175. package/lib/cryptography/key-meta.service.d.ts +44 -44
  176. package/lib/cryptography/key.service.d.ts +36 -36
  177. package/lib/cryptography/slip39.service.d.ts +43 -43
  178. package/lib/cryptography/web-crypto.service.d.ts +5 -5
  179. package/lib/life-ready.config.d.ts +14 -14
  180. package/lib/life-ready.module.d.ts +5 -5
  181. package/lib/plan/plan.gql.d.ts +11 -11
  182. package/lib/plan/plan.service.d.ts +33 -33
  183. package/lib/plan/plan.types.d.ts +31 -31
  184. package/lib/record/record-attachment.service.d.ts +16 -16
  185. package/lib/record/record.gql.d.ts +14 -14
  186. package/lib/record/record.service.d.ts +25 -25
  187. package/lib/record/record.types.d.ts +57 -57
  188. package/lib/record-type/record-type.service.d.ts +11 -11
  189. package/lib/record-type/record-type.types.d.ts +50 -50
  190. package/lib/scenario/approvals/scenario-approval.gql.d.ts +7 -7
  191. package/lib/scenario/approvals/scenario-approval.types.d.ts +63 -63
  192. package/lib/scenario/approvals/scenario-approver.service.d.ts +32 -32
  193. package/lib/scenario/claimants/scenario-claimant.gql.d.ts +5 -5
  194. package/lib/scenario/claimants/scenario-claimant.service.d.ts +17 -17
  195. package/lib/scenario/claimants/scenario-claimant.types.d.ts +18 -18
  196. package/lib/scenario/receivers/scenario-receiver.gql.d.ts +8 -8
  197. package/lib/scenario/receivers/scenario-receiver.service.d.ts +30 -30
  198. package/lib/scenario/receivers/scenario-receiver.types.d.ts +54 -54
  199. package/lib/scenario/scenario-setup.service.d.ts +22 -22
  200. package/lib/scenario/scenario.gql.d.ts +34 -34
  201. package/lib/scenario/scenario.service.d.ts +58 -58
  202. package/lib/scenario/scenario.types.d.ts +217 -217
  203. package/lib/search/search.gql.d.ts +1 -1
  204. package/lib/search/search.service.d.ts +25 -25
  205. package/lib/search/search.types.d.ts +20 -20
  206. package/lib/trusted-parties/tp-password-reset-request.service.d.ts +20 -20
  207. package/lib/trusted-parties/tp-password-reset-user.service.d.ts +35 -35
  208. package/lib/trusted-parties/tp-password-reset.constants.d.ts +3 -3
  209. package/lib/trusted-parties/tp-password-reset.gql.d.ts +218 -218
  210. package/lib/trusted-parties/tp-password-reset.service.d.ts +130 -130
  211. package/lib/trusted-parties/trusted-party.gql.d.ts +9 -9
  212. package/lib/trusted-parties/trusted-party.service.d.ts +44 -44
  213. package/lib/trusted-parties/trusted-party.types.d.ts +102 -102
  214. package/lib/trusted-parties/trusted-party2.gql.d.ts +79 -79
  215. package/lib/trusted-parties/trusted-party2.service.d.ts +114 -114
  216. package/lib/users/profile-details.service.d.ts +21 -21
  217. package/lib/users/profile.gql.d.ts +11 -11
  218. package/lib/users/profile.service.d.ts +35 -35
  219. package/lib/users/profile.types.d.ts +96 -96
  220. package/lib/users/user.gql.d.ts +9 -9
  221. package/lib/users/user.service.d.ts +12 -12
  222. package/lib/users/user.types.d.ts +23 -23
  223. package/lifeready-core.d.ts +9 -9
  224. package/package.json +1 -1
  225. package/public-api.d.ts +77 -77
@@ -1,51 +1,51 @@
1
- import gql from 'graphql-tag';
2
- import { getQuery } from '../../_common/ast';
3
- import { DeferredPromise } from '../../_common/deferred-promise';
4
- import { LrBadStateException } from '../../_common/exceptions';
5
- export const fragmentSpreadAstSelection = getQuery(gql `
6
- query {
7
- ...FragmentName
8
- }
9
- `).selectionSet.selections[0];
10
- // const fragmentSpreadAstSelection = () =>
11
- // lodash.deepClone(_fragmentSpreadAstSelection) as FragmentSpreadNode;
12
- /**
13
- * DECISION: LrMutationBase does not provide a convenience method to call lrGraphQL.lrMutate()
14
- * because this class could be made independent of what lib is used to call the API. If we
15
- * provided a configurable call back to make the API call, then the typing for that callback
16
- * needs to be known. But since the API lib (eg. Apollo) has it's own unique return type, so
17
- * it's not possible to do in general.
18
- */
19
- export class LrMutationBase {
20
- constructor() {
21
- /* tslint:disable:variable-name */
22
- this._executed = false;
23
- // protected promises: DeferredPromise<T>[] = [];
24
- this.deferredPromise = new DeferredPromise();
25
- }
26
- get promise() {
27
- return this.deferredPromise.promise;
28
- }
29
- resolve(value) {
30
- this.deferredPromise.resolve(value);
31
- }
32
- reject(reason) {
33
- this.deferredPromise.reject(reason);
34
- }
35
- get lrMutationData() {
36
- return {
37
- mutation: this.mutation,
38
- variables: this.variables,
39
- };
40
- }
41
- get executed() {
42
- return this._executed;
43
- }
44
- setExecuted() {
45
- if (this._executed) {
46
- throw new LrBadStateException('Already executed');
47
- }
48
- this._executed = true;
49
- }
50
- }
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHItbXV0YXRpb24tYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIvb3B0L2F0bGFzc2lhbi9waXBlbGluZXMvYWdlbnQvYnVpbGQvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvYXBpL2xyLWdyYXBocWwvbHItbXV0YXRpb24tYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEdBQUcsTUFBTSxhQUFhLENBQUM7QUFDOUIsT0FBTyxFQUFFLFFBQVEsRUFBcUIsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFPL0QsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQTs7OztDQUlyRCxDQUFDLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQXVCLENBQUM7QUFFcEQsMkNBQTJDO0FBQzNDLHlFQUF5RTtBQUV6RTs7Ozs7O0dBTUc7QUFDSCxNQUFNLE9BQWdCLGNBQWM7SUFBcEM7UUFHRSxrQ0FBa0M7UUFDeEIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUU1QixpREFBaUQ7UUFDakMsb0JBQWUsR0FBRyxJQUFJLGVBQWUsRUFBSyxDQUFDO0lBK0I3RCxDQUFDO0lBN0JDLElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUM7SUFDdEMsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFRO1FBQ2QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFZO1FBQ2pCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTztZQUNMLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDMUIsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsTUFBTSxJQUFJLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLENBQUM7U0FDbkQ7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGVyYXRpb25WYXJpYWJsZXMgfSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlJztcbmltcG9ydCB7IEZyYWdtZW50U3ByZWFkTm9kZSB9IGZyb20gJ2dyYXBocWwnO1xuaW1wb3J0IGdxbCBmcm9tICdncmFwaHFsLXRhZyc7XG5pbXBvcnQgeyBnZXRRdWVyeSwgVHlwZWREb2N1bWVudE5vZGUgfSBmcm9tICcuLi8uLi9fY29tbW9uL2FzdCc7XG5pbXBvcnQgeyBEZWZlcnJlZFByb21pc2UgfSBmcm9tICcuLi8uLi9fY29tbW9uL2RlZmVycmVkLXByb21pc2UnO1xuaW1wb3J0IHsgTHJCYWRTdGF0ZUV4Y2VwdGlvbiB9IGZyb20gJy4uLy4uL19jb21tb24vZXhjZXB0aW9ucyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTHJNdXRhdGlvbkRhdGE8VCwgVFZhcmlhYmxlcyA9IE9wZXJhdGlvblZhcmlhYmxlcz4ge1xuICBtdXRhdGlvbjogVHlwZWREb2N1bWVudE5vZGU8VD47XG4gIHZhcmlhYmxlcz86IFRWYXJpYWJsZXM7XG59XG5cbmV4cG9ydCBjb25zdCBmcmFnbWVudFNwcmVhZEFzdFNlbGVjdGlvbiA9IGdldFF1ZXJ5KGdxbGBcbiAgcXVlcnkge1xuICAgIC4uLkZyYWdtZW50TmFtZVxuICB9XG5gKS5zZWxlY3Rpb25TZXQuc2VsZWN0aW9uc1swXSBhcyBGcmFnbWVudFNwcmVhZE5vZGU7XG5cbi8vIGNvbnN0IGZyYWdtZW50U3ByZWFkQXN0U2VsZWN0aW9uID0gKCkgPT5cbi8vICAgbG9kYXNoLmRlZXBDbG9uZShfZnJhZ21lbnRTcHJlYWRBc3RTZWxlY3Rpb24pIGFzIEZyYWdtZW50U3ByZWFkTm9kZTtcblxuLyoqXG4gKiBERUNJU0lPTjogTHJNdXRhdGlvbkJhc2UgZG9lcyBub3QgcHJvdmlkZSBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBjYWxsIGxyR3JhcGhRTC5sck11dGF0ZSgpXG4gKiBiZWNhdXNlIHRoaXMgY2xhc3MgY291bGQgYmUgbWFkZSBpbmRlcGVuZGVudCBvZiB3aGF0IGxpYiBpcyB1c2VkIHRvIGNhbGwgdGhlIEFQSS4gSWYgd2VcbiAqIHByb3ZpZGVkIGEgY29uZmlndXJhYmxlIGNhbGwgYmFjayB0byBtYWtlIHRoZSBBUEkgY2FsbCwgdGhlbiB0aGUgdHlwaW5nIGZvciB0aGF0IGNhbGxiYWNrXG4gKiBuZWVkcyB0byBiZSBrbm93bi4gQnV0IHNpbmNlIHRoZSBBUEkgbGliIChlZy4gQXBvbGxvKSBoYXMgaXQncyBvd24gdW5pcXVlIHJldHVybiB0eXBlLCBzb1xuICogaXQncyBub3QgcG9zc2libGUgdG8gZG8gaW4gZ2VuZXJhbC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIExyTXV0YXRpb25CYXNlPFQsIFRWYXJpYWJsZXMgPSBPcGVyYXRpb25WYXJpYWJsZXM+IHtcbiAgcHJvdGVjdGVkIG11dGF0aW9uOiBUeXBlZERvY3VtZW50Tm9kZTxUPjtcbiAgcHJvdGVjdGVkIHZhcmlhYmxlcz86IFRWYXJpYWJsZXM7XG4gIC8qIHRzbGludDpkaXNhYmxlOnZhcmlhYmxlLW5hbWUgKi9cbiAgcHJvdGVjdGVkIF9leGVjdXRlZCA9IGZhbHNlO1xuXG4gIC8vIHByb3RlY3RlZCBwcm9taXNlczogRGVmZXJyZWRQcm9taXNlPFQ+W10gPSBbXTtcbiAgcHVibGljIHJlYWRvbmx5IGRlZmVycmVkUHJvbWlzZSA9IG5ldyBEZWZlcnJlZFByb21pc2U8VD4oKTtcblxuICBnZXQgcHJvbWlzZSgpOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5kZWZlcnJlZFByb21pc2UucHJvbWlzZTtcbiAgfVxuXG4gIHJlc29sdmUodmFsdWU6IFQpIHtcbiAgICB0aGlzLmRlZmVycmVkUHJvbWlzZS5yZXNvbHZlKHZhbHVlKTtcbiAgfVxuXG4gIHJlamVjdChyZWFzb24/OiBhbnkpIHtcbiAgICB0aGlzLmRlZmVycmVkUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfVxuXG4gIGdldCBsck11dGF0aW9uRGF0YSgpOiBMck11dGF0aW9uRGF0YTxULCBUVmFyaWFibGVzPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG11dGF0aW9uOiB0aGlzLm11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB0aGlzLnZhcmlhYmxlcyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0IGV4ZWN1dGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9leGVjdXRlZDtcbiAgfVxuXG4gIHNldEV4ZWN1dGVkKCkge1xuICAgIGlmICh0aGlzLl9leGVjdXRlZCkge1xuICAgICAgdGhyb3cgbmV3IExyQmFkU3RhdGVFeGNlcHRpb24oJ0FscmVhZHkgZXhlY3V0ZWQnKTtcbiAgICB9XG4gICAgdGhpcy5fZXhlY3V0ZWQgPSB0cnVlO1xuICB9XG59XG4iXX0=
1
+ import gql from 'graphql-tag';
2
+ import { getQuery } from '../../_common/ast';
3
+ import { DeferredPromise } from '../../_common/deferred-promise';
4
+ import { LrBadStateException } from '../../_common/exceptions';
5
+ export const fragmentSpreadAstSelection = getQuery(gql `
6
+ query {
7
+ ...FragmentName
8
+ }
9
+ `).selectionSet.selections[0];
10
+ // const fragmentSpreadAstSelection = () =>
11
+ // lodash.deepClone(_fragmentSpreadAstSelection) as FragmentSpreadNode;
12
+ /**
13
+ * DECISION: LrMutationBase does not provide a convenience method to call lrGraphQL.lrMutate()
14
+ * because this class could be made independent of what lib is used to call the API. If we
15
+ * provided a configurable call back to make the API call, then the typing for that callback
16
+ * needs to be known. But since the API lib (eg. Apollo) has it's own unique return type, so
17
+ * it's not possible to do in general.
18
+ */
19
+ export class LrMutationBase {
20
+ constructor() {
21
+ /* tslint:disable:variable-name */
22
+ this._executed = false;
23
+ // protected promises: DeferredPromise<T>[] = [];
24
+ this.deferredPromise = new DeferredPromise();
25
+ }
26
+ get promise() {
27
+ return this.deferredPromise.promise;
28
+ }
29
+ resolve(value) {
30
+ this.deferredPromise.resolve(value);
31
+ }
32
+ reject(reason) {
33
+ this.deferredPromise.reject(reason);
34
+ }
35
+ get lrMutationData() {
36
+ return {
37
+ mutation: this.mutation,
38
+ variables: this.variables,
39
+ };
40
+ }
41
+ get executed() {
42
+ return this._executed;
43
+ }
44
+ setExecuted() {
45
+ if (this._executed) {
46
+ throw new LrBadStateException('Already executed');
47
+ }
48
+ this._executed = true;
49
+ }
50
+ }
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHItbXV0YXRpb24tYmFzZS5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9qZWN0cy9uZXdyZXBvL2tjLWNsaWVudC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9hcGkvbHItZ3JhcGhxbC9sci1tdXRhdGlvbi1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sR0FBRyxNQUFNLGFBQWEsQ0FBQztBQUM5QixPQUFPLEVBQUUsUUFBUSxFQUFxQixNQUFNLG1CQUFtQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQU8vRCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFBOzs7O0NBSXJELENBQUMsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBdUIsQ0FBQztBQUVwRCwyQ0FBMkM7QUFDM0MseUVBQXlFO0FBRXpFOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBZ0IsY0FBYztJQUFwQztRQUdFLGtDQUFrQztRQUN4QixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRTVCLGlEQUFpRDtRQUNqQyxvQkFBZSxHQUFHLElBQUksZUFBZSxFQUFLLENBQUM7SUErQjdELENBQUM7SUE3QkMsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQztJQUN0QyxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQVE7UUFDZCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQVk7UUFDakIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPO1lBQ0wsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztTQUMxQixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixNQUFNLElBQUksbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUNuRDtRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wZXJhdGlvblZhcmlhYmxlcyB9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnO1xyXG5pbXBvcnQgeyBGcmFnbWVudFNwcmVhZE5vZGUgfSBmcm9tICdncmFwaHFsJztcclxuaW1wb3J0IGdxbCBmcm9tICdncmFwaHFsLXRhZyc7XHJcbmltcG9ydCB7IGdldFF1ZXJ5LCBUeXBlZERvY3VtZW50Tm9kZSB9IGZyb20gJy4uLy4uL19jb21tb24vYXN0JztcclxuaW1wb3J0IHsgRGVmZXJyZWRQcm9taXNlIH0gZnJvbSAnLi4vLi4vX2NvbW1vbi9kZWZlcnJlZC1wcm9taXNlJztcclxuaW1wb3J0IHsgTHJCYWRTdGF0ZUV4Y2VwdGlvbiB9IGZyb20gJy4uLy4uL19jb21tb24vZXhjZXB0aW9ucyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIExyTXV0YXRpb25EYXRhPFQsIFRWYXJpYWJsZXMgPSBPcGVyYXRpb25WYXJpYWJsZXM+IHtcclxuICBtdXRhdGlvbjogVHlwZWREb2N1bWVudE5vZGU8VD47XHJcbiAgdmFyaWFibGVzPzogVFZhcmlhYmxlcztcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGZyYWdtZW50U3ByZWFkQXN0U2VsZWN0aW9uID0gZ2V0UXVlcnkoZ3FsYFxyXG4gIHF1ZXJ5IHtcclxuICAgIC4uLkZyYWdtZW50TmFtZVxyXG4gIH1cclxuYCkuc2VsZWN0aW9uU2V0LnNlbGVjdGlvbnNbMF0gYXMgRnJhZ21lbnRTcHJlYWROb2RlO1xyXG5cclxuLy8gY29uc3QgZnJhZ21lbnRTcHJlYWRBc3RTZWxlY3Rpb24gPSAoKSA9PlxyXG4vLyAgIGxvZGFzaC5kZWVwQ2xvbmUoX2ZyYWdtZW50U3ByZWFkQXN0U2VsZWN0aW9uKSBhcyBGcmFnbWVudFNwcmVhZE5vZGU7XHJcblxyXG4vKipcclxuICogREVDSVNJT046IExyTXV0YXRpb25CYXNlIGRvZXMgbm90IHByb3ZpZGUgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gY2FsbCBsckdyYXBoUUwubHJNdXRhdGUoKVxyXG4gKiBiZWNhdXNlIHRoaXMgY2xhc3MgY291bGQgYmUgbWFkZSBpbmRlcGVuZGVudCBvZiB3aGF0IGxpYiBpcyB1c2VkIHRvIGNhbGwgdGhlIEFQSS4gSWYgd2VcclxuICogcHJvdmlkZWQgYSBjb25maWd1cmFibGUgY2FsbCBiYWNrIHRvIG1ha2UgdGhlIEFQSSBjYWxsLCB0aGVuIHRoZSB0eXBpbmcgZm9yIHRoYXQgY2FsbGJhY2tcclxuICogbmVlZHMgdG8gYmUga25vd24uIEJ1dCBzaW5jZSB0aGUgQVBJIGxpYiAoZWcuIEFwb2xsbykgaGFzIGl0J3Mgb3duIHVuaXF1ZSByZXR1cm4gdHlwZSwgc29cclxuICogaXQncyBub3QgcG9zc2libGUgdG8gZG8gaW4gZ2VuZXJhbC5cclxuICovXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBMck11dGF0aW9uQmFzZTxULCBUVmFyaWFibGVzID0gT3BlcmF0aW9uVmFyaWFibGVzPiB7XHJcbiAgcHJvdGVjdGVkIG11dGF0aW9uOiBUeXBlZERvY3VtZW50Tm9kZTxUPjtcclxuICBwcm90ZWN0ZWQgdmFyaWFibGVzPzogVFZhcmlhYmxlcztcclxuICAvKiB0c2xpbnQ6ZGlzYWJsZTp2YXJpYWJsZS1uYW1lICovXHJcbiAgcHJvdGVjdGVkIF9leGVjdXRlZCA9IGZhbHNlO1xyXG5cclxuICAvLyBwcm90ZWN0ZWQgcHJvbWlzZXM6IERlZmVycmVkUHJvbWlzZTxUPltdID0gW107XHJcbiAgcHVibGljIHJlYWRvbmx5IGRlZmVycmVkUHJvbWlzZSA9IG5ldyBEZWZlcnJlZFByb21pc2U8VD4oKTtcclxuXHJcbiAgZ2V0IHByb21pc2UoKTogUHJvbWlzZTxUPiB7XHJcbiAgICByZXR1cm4gdGhpcy5kZWZlcnJlZFByb21pc2UucHJvbWlzZTtcclxuICB9XHJcblxyXG4gIHJlc29sdmUodmFsdWU6IFQpIHtcclxuICAgIHRoaXMuZGVmZXJyZWRQcm9taXNlLnJlc29sdmUodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcmVqZWN0KHJlYXNvbj86IGFueSkge1xyXG4gICAgdGhpcy5kZWZlcnJlZFByb21pc2UucmVqZWN0KHJlYXNvbik7XHJcbiAgfVxyXG5cclxuICBnZXQgbHJNdXRhdGlvbkRhdGEoKTogTHJNdXRhdGlvbkRhdGE8VCwgVFZhcmlhYmxlcz4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbXV0YXRpb246IHRoaXMubXV0YXRpb24sXHJcbiAgICAgIHZhcmlhYmxlczogdGhpcy52YXJpYWJsZXMsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGV4ZWN1dGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2V4ZWN1dGVkO1xyXG4gIH1cclxuXHJcbiAgc2V0RXhlY3V0ZWQoKSB7XHJcbiAgICBpZiAodGhpcy5fZXhlY3V0ZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IExyQmFkU3RhdGVFeGNlcHRpb24oJ0FscmVhZHkgZXhlY3V0ZWQnKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2V4ZWN1dGVkID0gdHJ1ZTtcclxuICB9XHJcbn1cclxuIl19
@@ -1,48 +1,48 @@
1
- import * as lodash from 'lodash';
2
- import { getAliasOrName, getFragments, getMutation, } from '../../_common/ast';
3
- import * as ast from '../../_common/ast';
4
- import { fragmentSpreadAstSelection, LrMutationBase } from './lr-mutation-base';
5
- export class LrMutation extends LrMutationBase {
6
- constructor(options) {
7
- super();
8
- this.mutation = options.mutation;
9
- this.variables = options.variables;
10
- }
11
- select(fragments) {
12
- // Don't touch the original
13
- const mutationDoc = lodash.cloneDeep(this.mutation);
14
- const mutationNode = getMutation(mutationDoc);
15
- const fragmentMap = {};
16
- getFragments(fragments).forEach((fragment) => {
17
- fragmentMap[fragment.name.value] = fragment;
18
- });
19
- const replaceFieldSelection = (selection) => {
20
- const field = selection;
21
- const fieldName = getAliasOrName(field);
22
- const fragment = fragmentMap[fieldName];
23
- if (!fragment) {
24
- return;
25
- }
26
- // Make the entire selection of the mutation a spread of
27
- // a fragment using the same name as the mutation field.
28
- // We will also rename the fragment to the same name.
29
- field.selectionSet.selections = [
30
- Object.assign(Object.assign({}, fragmentSpreadAstSelection), { name: ast.name(fieldName) }),
31
- ];
32
- };
33
- mutationNode.selectionSet.selections.forEach((selection) => {
34
- if (selection.kind === 'Field') {
35
- replaceFieldSelection(selection);
36
- }
37
- });
38
- return new LrMutation({
39
- mutation: Object.assign(Object.assign({}, mutationDoc), { definitions: [
40
- // Remove all existing fragments
41
- ...mutationDoc.definitions.filter((def) => def.kind !== 'FragmentDefinition'),
42
- ...fragments.definitions,
43
- ] }),
44
- variables: this.variables,
45
- });
46
- }
47
- }
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHItbXV0YXRpb24uanMiLCJzb3VyY2VSb290IjoiL29wdC9hdGxhc3NpYW4vcGlwZWxpbmVzL2FnZW50L2J1aWxkL3Byb2plY3RzL2NvcmUvc3JjLyIsInNvdXJjZXMiOlsibGliL2FwaS9sci1ncmFwaHFsL2xyLW11dGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBR2pDLE9BQU8sRUFDTCxjQUFjLEVBQ2QsWUFBWSxFQUNaLFdBQVcsR0FFWixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sS0FBSyxHQUFHLE1BQU0sbUJBQW1CLENBQUM7QUFFekMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWhGLE1BQU0sT0FBTyxVQUdYLFNBQVEsY0FBNkI7SUFDckMsWUFBWSxPQUFzQztRQUNoRCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7SUFDckMsQ0FBQztJQUVELE1BQU0sQ0FBVSxTQUFxQztRQUNuRCwyQkFBMkI7UUFDM0IsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFpQixDQUFDO1FBQ3BFLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU5QyxNQUFNLFdBQVcsR0FBRyxFQUErQyxDQUFDO1FBQ3BFLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFnQyxFQUFFLEVBQUU7WUFDbkUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLFNBQW9CLEVBQUUsRUFBRTtZQUNyRCxNQUFNLEtBQUssR0FBRyxTQUFzQixDQUFDO1lBQ3JDLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QyxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFeEMsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDYixPQUFPO2FBQ1I7WUFFRCx3REFBd0Q7WUFDeEQsd0RBQXdEO1lBQ3hELHFEQUFxRDtZQUNyRCxLQUFLLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRztnREFFekIsMEJBQTBCLEtBQzdCLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQzthQUU1QixDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBRUYsWUFBWSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDekQsSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtnQkFDOUIscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDbEM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxVQUFVLENBQUM7WUFDcEIsUUFBUSxFQUFFLGdDQUNMLFdBQVcsS0FDZCxXQUFXLEVBQUU7b0JBQ1gsZ0NBQWdDO29CQUNoQyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUMvQixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxvQkFBb0IsQ0FDM0M7b0JBQ0QsR0FBRyxTQUFTLENBQUMsV0FBVztpQkFDekIsR0FDNEI7WUFDL0IsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQzFCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGxvZGFzaCBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgT3BlcmF0aW9uVmFyaWFibGVzIH0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQgeyBEb2N1bWVudE5vZGUsIEZpZWxkTm9kZSwgRnJhZ21lbnREZWZpbml0aW9uTm9kZSB9IGZyb20gJ2dyYXBocWwnO1xuaW1wb3J0IHtcbiAgZ2V0QWxpYXNPck5hbWUsXG4gIGdldEZyYWdtZW50cyxcbiAgZ2V0TXV0YXRpb24sXG4gIFR5cGVkRG9jdW1lbnROb2RlLFxufSBmcm9tICcuLi8uLi9fY29tbW9uL2FzdCc7XG5pbXBvcnQgKiBhcyBhc3QgZnJvbSAnLi4vLi4vX2NvbW1vbi9hc3QnO1xuaW1wb3J0IHsgTHJNdXRhdGlvbkRhdGEgfSBmcm9tICcuL2xyLW11dGF0aW9uLWJhc2UnO1xuaW1wb3J0IHsgZnJhZ21lbnRTcHJlYWRBc3RTZWxlY3Rpb24sIExyTXV0YXRpb25CYXNlIH0gZnJvbSAnLi9sci1tdXRhdGlvbi1iYXNlJztcblxuZXhwb3J0IGNsYXNzIExyTXV0YXRpb248XG4gIFQgZXh0ZW5kcyBhbnksXG4gIFRWYXJpYWJsZXMgPSBPcGVyYXRpb25WYXJpYWJsZXNcbj4gZXh0ZW5kcyBMck11dGF0aW9uQmFzZTxULCBUVmFyaWFibGVzPiB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IExyTXV0YXRpb25EYXRhPFQsIFRWYXJpYWJsZXM+KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm11dGF0aW9uID0gb3B0aW9ucy5tdXRhdGlvbjtcbiAgICB0aGlzLnZhcmlhYmxlcyA9IG9wdGlvbnMudmFyaWFibGVzO1xuICB9XG5cbiAgc2VsZWN0PFRSZXN1bHQ+KGZyYWdtZW50czogVHlwZWREb2N1bWVudE5vZGU8VFJlc3VsdD4pIHtcbiAgICAvLyBEb24ndCB0b3VjaCB0aGUgb3JpZ2luYWxcbiAgICBjb25zdCBtdXRhdGlvbkRvYyA9IGxvZGFzaC5jbG9uZURlZXAodGhpcy5tdXRhdGlvbikgYXMgRG9jdW1lbnROb2RlO1xuICAgIGNvbnN0IG11dGF0aW9uTm9kZSA9IGdldE11dGF0aW9uKG11dGF0aW9uRG9jKTtcblxuICAgIGNvbnN0IGZyYWdtZW50TWFwID0ge30gYXMgeyBba2V5OiBzdHJpbmddOiBGcmFnbWVudERlZmluaXRpb25Ob2RlIH07XG4gICAgZ2V0RnJhZ21lbnRzKGZyYWdtZW50cykuZm9yRWFjaCgoZnJhZ21lbnQ6IEZyYWdtZW50RGVmaW5pdGlvbk5vZGUpID0+IHtcbiAgICAgIGZyYWdtZW50TWFwW2ZyYWdtZW50Lm5hbWUudmFsdWVdID0gZnJhZ21lbnQ7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXBsYWNlRmllbGRTZWxlY3Rpb24gPSAoc2VsZWN0aW9uOiBGaWVsZE5vZGUpID0+IHtcbiAgICAgIGNvbnN0IGZpZWxkID0gc2VsZWN0aW9uIGFzIEZpZWxkTm9kZTtcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IGdldEFsaWFzT3JOYW1lKGZpZWxkKTtcbiAgICAgIGNvbnN0IGZyYWdtZW50ID0gZnJhZ21lbnRNYXBbZmllbGROYW1lXTtcblxuICAgICAgaWYgKCFmcmFnbWVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIE1ha2UgdGhlIGVudGlyZSBzZWxlY3Rpb24gb2YgdGhlIG11dGF0aW9uIGEgc3ByZWFkIG9mXG4gICAgICAvLyBhIGZyYWdtZW50IHVzaW5nIHRoZSBzYW1lIG5hbWUgYXMgdGhlIG11dGF0aW9uIGZpZWxkLlxuICAgICAgLy8gV2Ugd2lsbCBhbHNvIHJlbmFtZSB0aGUgZnJhZ21lbnQgdG8gdGhlIHNhbWUgbmFtZS5cbiAgICAgIGZpZWxkLnNlbGVjdGlvblNldC5zZWxlY3Rpb25zID0gW1xuICAgICAgICB7XG4gICAgICAgICAgLi4uZnJhZ21lbnRTcHJlYWRBc3RTZWxlY3Rpb24sXG4gICAgICAgICAgbmFtZTogYXN0Lm5hbWUoZmllbGROYW1lKSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfTtcblxuICAgIG11dGF0aW9uTm9kZS5zZWxlY3Rpb25TZXQuc2VsZWN0aW9ucy5mb3JFYWNoKChzZWxlY3Rpb24pID0+IHtcbiAgICAgIGlmIChzZWxlY3Rpb24ua2luZCA9PT0gJ0ZpZWxkJykge1xuICAgICAgICByZXBsYWNlRmllbGRTZWxlY3Rpb24oc2VsZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjoge1xuICAgICAgICAuLi5tdXRhdGlvbkRvYyxcbiAgICAgICAgZGVmaW5pdGlvbnM6IFtcbiAgICAgICAgICAvLyBSZW1vdmUgYWxsIGV4aXN0aW5nIGZyYWdtZW50c1xuICAgICAgICAgIC4uLm11dGF0aW9uRG9jLmRlZmluaXRpb25zLmZpbHRlcihcbiAgICAgICAgICAgIChkZWYpID0+IGRlZi5raW5kICE9PSAnRnJhZ21lbnREZWZpbml0aW9uJ1xuICAgICAgICAgICksXG4gICAgICAgICAgLi4uZnJhZ21lbnRzLmRlZmluaXRpb25zLFxuICAgICAgICBdLFxuICAgICAgfSBhcyBUeXBlZERvY3VtZW50Tm9kZTxUUmVzdWx0PixcbiAgICAgIHZhcmlhYmxlczogdGhpcy52YXJpYWJsZXMsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
1
+ import * as lodash from 'lodash';
2
+ import { getAliasOrName, getFragments, getMutation, } from '../../_common/ast';
3
+ import * as ast from '../../_common/ast';
4
+ import { fragmentSpreadAstSelection, LrMutationBase } from './lr-mutation-base';
5
+ export class LrMutation extends LrMutationBase {
6
+ constructor(options) {
7
+ super();
8
+ this.mutation = options.mutation;
9
+ this.variables = options.variables;
10
+ }
11
+ select(fragments) {
12
+ // Don't touch the original
13
+ const mutationDoc = lodash.cloneDeep(this.mutation);
14
+ const mutationNode = getMutation(mutationDoc);
15
+ const fragmentMap = {};
16
+ getFragments(fragments).forEach((fragment) => {
17
+ fragmentMap[fragment.name.value] = fragment;
18
+ });
19
+ const replaceFieldSelection = (selection) => {
20
+ const field = selection;
21
+ const fieldName = getAliasOrName(field);
22
+ const fragment = fragmentMap[fieldName];
23
+ if (!fragment) {
24
+ return;
25
+ }
26
+ // Make the entire selection of the mutation a spread of
27
+ // a fragment using the same name as the mutation field.
28
+ // We will also rename the fragment to the same name.
29
+ field.selectionSet.selections = [
30
+ Object.assign(Object.assign({}, fragmentSpreadAstSelection), { name: ast.name(fieldName) }),
31
+ ];
32
+ };
33
+ mutationNode.selectionSet.selections.forEach((selection) => {
34
+ if (selection.kind === 'Field') {
35
+ replaceFieldSelection(selection);
36
+ }
37
+ });
38
+ return new LrMutation({
39
+ mutation: Object.assign(Object.assign({}, mutationDoc), { definitions: [
40
+ // Remove all existing fragments
41
+ ...mutationDoc.definitions.filter((def) => def.kind !== 'FragmentDefinition'),
42
+ ...fragments.definitions,
43
+ ] }),
44
+ variables: this.variables,
45
+ });
46
+ }
47
+ }
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHItbXV0YXRpb24uanMiLCJzb3VyY2VSb290IjoiQzovUHJvamVjdHMvbmV3cmVwby9rYy1jbGllbnQvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvYXBpL2xyLWdyYXBocWwvbHItbXV0YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFHakMsT0FBTyxFQUNMLGNBQWMsRUFDZCxZQUFZLEVBQ1osV0FBVyxHQUVaLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxLQUFLLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQztBQUV6QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEYsTUFBTSxPQUFPLFVBR1gsU0FBUSxjQUE2QjtJQUNyQyxZQUFZLE9BQXNDO1FBQ2hELEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsTUFBTSxDQUFVLFNBQXFDO1FBQ25ELDJCQUEyQjtRQUMzQixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQWlCLENBQUM7UUFDcEUsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTlDLE1BQU0sV0FBVyxHQUFHLEVBQStDLENBQUM7UUFDcEUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQWdDLEVBQUUsRUFBRTtZQUNuRSxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLHFCQUFxQixHQUFHLENBQUMsU0FBb0IsRUFBRSxFQUFFO1lBQ3JELE1BQU0sS0FBSyxHQUFHLFNBQXNCLENBQUM7WUFDckMsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUV4QyxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNiLE9BQU87YUFDUjtZQUVELHdEQUF3RDtZQUN4RCx3REFBd0Q7WUFDeEQscURBQXFEO1lBQ3JELEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHO2dEQUV6QiwwQkFBMEIsS0FDN0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO2FBRTVCLENBQUM7UUFDSixDQUFDLENBQUM7UUFFRixZQUFZLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUN6RCxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO2dCQUM5QixxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUNsQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLFVBQVUsQ0FBQztZQUNwQixRQUFRLEVBQUUsZ0NBQ0wsV0FBVyxLQUNkLFdBQVcsRUFBRTtvQkFDWCxnQ0FBZ0M7b0JBQ2hDLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQy9CLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLG9CQUFvQixDQUMzQztvQkFDRCxHQUFHLFNBQVMsQ0FBQyxXQUFXO2lCQUN6QixHQUM0QjtZQUMvQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDMUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgbG9kYXNoIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IE9wZXJhdGlvblZhcmlhYmxlcyB9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnO1xyXG5pbXBvcnQgeyBEb2N1bWVudE5vZGUsIEZpZWxkTm9kZSwgRnJhZ21lbnREZWZpbml0aW9uTm9kZSB9IGZyb20gJ2dyYXBocWwnO1xyXG5pbXBvcnQge1xyXG4gIGdldEFsaWFzT3JOYW1lLFxyXG4gIGdldEZyYWdtZW50cyxcclxuICBnZXRNdXRhdGlvbixcclxuICBUeXBlZERvY3VtZW50Tm9kZSxcclxufSBmcm9tICcuLi8uLi9fY29tbW9uL2FzdCc7XHJcbmltcG9ydCAqIGFzIGFzdCBmcm9tICcuLi8uLi9fY29tbW9uL2FzdCc7XHJcbmltcG9ydCB7IExyTXV0YXRpb25EYXRhIH0gZnJvbSAnLi9sci1tdXRhdGlvbi1iYXNlJztcclxuaW1wb3J0IHsgZnJhZ21lbnRTcHJlYWRBc3RTZWxlY3Rpb24sIExyTXV0YXRpb25CYXNlIH0gZnJvbSAnLi9sci1tdXRhdGlvbi1iYXNlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMck11dGF0aW9uPFxyXG4gIFQgZXh0ZW5kcyBhbnksXHJcbiAgVFZhcmlhYmxlcyA9IE9wZXJhdGlvblZhcmlhYmxlc1xyXG4+IGV4dGVuZHMgTHJNdXRhdGlvbkJhc2U8VCwgVFZhcmlhYmxlcz4ge1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IExyTXV0YXRpb25EYXRhPFQsIFRWYXJpYWJsZXM+KSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5tdXRhdGlvbiA9IG9wdGlvbnMubXV0YXRpb247XHJcbiAgICB0aGlzLnZhcmlhYmxlcyA9IG9wdGlvbnMudmFyaWFibGVzO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0PFRSZXN1bHQ+KGZyYWdtZW50czogVHlwZWREb2N1bWVudE5vZGU8VFJlc3VsdD4pIHtcclxuICAgIC8vIERvbid0IHRvdWNoIHRoZSBvcmlnaW5hbFxyXG4gICAgY29uc3QgbXV0YXRpb25Eb2MgPSBsb2Rhc2guY2xvbmVEZWVwKHRoaXMubXV0YXRpb24pIGFzIERvY3VtZW50Tm9kZTtcclxuICAgIGNvbnN0IG11dGF0aW9uTm9kZSA9IGdldE11dGF0aW9uKG11dGF0aW9uRG9jKTtcclxuXHJcbiAgICBjb25zdCBmcmFnbWVudE1hcCA9IHt9IGFzIHsgW2tleTogc3RyaW5nXTogRnJhZ21lbnREZWZpbml0aW9uTm9kZSB9O1xyXG4gICAgZ2V0RnJhZ21lbnRzKGZyYWdtZW50cykuZm9yRWFjaCgoZnJhZ21lbnQ6IEZyYWdtZW50RGVmaW5pdGlvbk5vZGUpID0+IHtcclxuICAgICAgZnJhZ21lbnRNYXBbZnJhZ21lbnQubmFtZS52YWx1ZV0gPSBmcmFnbWVudDtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHJlcGxhY2VGaWVsZFNlbGVjdGlvbiA9IChzZWxlY3Rpb246IEZpZWxkTm9kZSkgPT4ge1xyXG4gICAgICBjb25zdCBmaWVsZCA9IHNlbGVjdGlvbiBhcyBGaWVsZE5vZGU7XHJcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IGdldEFsaWFzT3JOYW1lKGZpZWxkKTtcclxuICAgICAgY29uc3QgZnJhZ21lbnQgPSBmcmFnbWVudE1hcFtmaWVsZE5hbWVdO1xyXG5cclxuICAgICAgaWYgKCFmcmFnbWVudCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTWFrZSB0aGUgZW50aXJlIHNlbGVjdGlvbiBvZiB0aGUgbXV0YXRpb24gYSBzcHJlYWQgb2ZcclxuICAgICAgLy8gYSBmcmFnbWVudCB1c2luZyB0aGUgc2FtZSBuYW1lIGFzIHRoZSBtdXRhdGlvbiBmaWVsZC5cclxuICAgICAgLy8gV2Ugd2lsbCBhbHNvIHJlbmFtZSB0aGUgZnJhZ21lbnQgdG8gdGhlIHNhbWUgbmFtZS5cclxuICAgICAgZmllbGQuc2VsZWN0aW9uU2V0LnNlbGVjdGlvbnMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgLi4uZnJhZ21lbnRTcHJlYWRBc3RTZWxlY3Rpb24sXHJcbiAgICAgICAgICBuYW1lOiBhc3QubmFtZShmaWVsZE5hbWUpLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF07XHJcbiAgICB9O1xyXG5cclxuICAgIG11dGF0aW9uTm9kZS5zZWxlY3Rpb25TZXQuc2VsZWN0aW9ucy5mb3JFYWNoKChzZWxlY3Rpb24pID0+IHtcclxuICAgICAgaWYgKHNlbGVjdGlvbi5raW5kID09PSAnRmllbGQnKSB7XHJcbiAgICAgICAgcmVwbGFjZUZpZWxkU2VsZWN0aW9uKHNlbGVjdGlvbik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XHJcbiAgICAgIG11dGF0aW9uOiB7XHJcbiAgICAgICAgLi4ubXV0YXRpb25Eb2MsXHJcbiAgICAgICAgZGVmaW5pdGlvbnM6IFtcclxuICAgICAgICAgIC8vIFJlbW92ZSBhbGwgZXhpc3RpbmcgZnJhZ21lbnRzXHJcbiAgICAgICAgICAuLi5tdXRhdGlvbkRvYy5kZWZpbml0aW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChkZWYpID0+IGRlZi5raW5kICE9PSAnRnJhZ21lbnREZWZpbml0aW9uJ1xyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIC4uLmZyYWdtZW50cy5kZWZpbml0aW9ucyxcclxuICAgICAgICBdLFxyXG4gICAgICB9IGFzIFR5cGVkRG9jdW1lbnROb2RlPFRSZXN1bHQ+LFxyXG4gICAgICB2YXJpYWJsZXM6IHRoaXMudmFyaWFibGVzLFxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,18 +1,18 @@
1
- import { __awaiter } from "tslib";
2
- import { LrGraphQLService, } from './lr-graphql.service';
3
- export class LrService {
4
- constructor(injector) {
5
- this.lrGraphQL = injector.get(LrGraphQLService);
6
- }
7
- mutate(lrMutation, options) {
8
- return __awaiter(this, void 0, void 0, function* () {
9
- return this.lrGraphQL.lrMutate(lrMutation, options);
10
- });
11
- }
12
- query(options) {
13
- return __awaiter(this, void 0, void 0, function* () {
14
- return this.lrGraphQL.query(options);
15
- });
16
- }
17
- }
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIvb3B0L2F0bGFzc2lhbi9waXBlbGluZXMvYWdlbnQvYnVpbGQvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvYXBpL2xyLWdyYXBocWwvbHIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUNMLGdCQUFnQixHQUdqQixNQUFNLHNCQUFzQixDQUFDO0FBRzlCLE1BQU0sT0FBTyxTQUFTO0lBR3BCLFlBQVksUUFBa0I7UUFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVlLE1BQU0sQ0FDcEIsVUFFMEMsRUFDMUMsT0FBMEM7O1lBRTFDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELENBQUM7S0FBQTtJQUVlLEtBQUssQ0FBTyxPQUE2Qjs7WUFDdkQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxDQUFDO0tBQUE7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBMckdyYXBoUUxTZXJ2aWNlLFxuICBMck11dGF0aW9uT3B0aW9ucyxcbiAgTHJRdWVyeU9wdGlvbnMsXG59IGZyb20gJy4vbHItZ3JhcGhxbC5zZXJ2aWNlJztcbmltcG9ydCB7IExyTXV0YXRpb25CYXNlIH0gZnJvbSAnLi9sci1tdXRhdGlvbi1iYXNlJztcblxuZXhwb3J0IGNsYXNzIExyU2VydmljZSB7XG4gIHByb3RlY3RlZCBsckdyYXBoUUw6IExyR3JhcGhRTFNlcnZpY2U7XG5cbiAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgdGhpcy5sckdyYXBoUUwgPSBpbmplY3Rvci5nZXQoTHJHcmFwaFFMU2VydmljZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbXV0YXRlPFQsIFRWYXJpYWJsZXM+KFxuICAgIGxyTXV0YXRpb246XG4gICAgICB8IExyTXV0YXRpb25CYXNlPFQsIFRWYXJpYWJsZXM+XG4gICAgICB8IFByb21pc2U8THJNdXRhdGlvbkJhc2U8VCwgVFZhcmlhYmxlcz4+LFxuICAgIG9wdGlvbnM/OiBMck11dGF0aW9uT3B0aW9uczxULCBUVmFyaWFibGVzPlxuICApIHtcbiAgICByZXR1cm4gdGhpcy5sckdyYXBoUUwubHJNdXRhdGUobHJNdXRhdGlvbiwgb3B0aW9ucyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcXVlcnk8VCwgVj4ob3B0aW9uczogTHJRdWVyeU9wdGlvbnM8VCwgVj4pIHtcbiAgICByZXR1cm4gdGhpcy5sckdyYXBoUUwucXVlcnkob3B0aW9ucyk7XG4gIH1cbn1cbiJdfQ==
1
+ import { __awaiter } from "tslib";
2
+ import { LrGraphQLService, } from './lr-graphql.service';
3
+ export class LrService {
4
+ constructor(injector) {
5
+ this.lrGraphQL = injector.get(LrGraphQLService);
6
+ }
7
+ mutate(lrMutation, options) {
8
+ return __awaiter(this, void 0, void 0, function* () {
9
+ return this.lrGraphQL.lrMutate(lrMutation, options);
10
+ });
11
+ }
12
+ query(options) {
13
+ return __awaiter(this, void 0, void 0, function* () {
14
+ return this.lrGraphQL.query(options);
15
+ });
16
+ }
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9qZWN0cy9uZXdyZXBvL2tjLWNsaWVudC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9hcGkvbHItZ3JhcGhxbC9sci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQ0wsZ0JBQWdCLEdBR2pCLE1BQU0sc0JBQXNCLENBQUM7QUFHOUIsTUFBTSxPQUFPLFNBQVM7SUFHcEIsWUFBWSxRQUFrQjtRQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRWUsTUFBTSxDQUNwQixVQUUwQyxFQUMxQyxPQUEwQzs7WUFFMUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdEQsQ0FBQztLQUFBO0lBRWUsS0FBSyxDQUFPLE9BQTZCOztZQUN2RCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7S0FBQTtDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBMckdyYXBoUUxTZXJ2aWNlLFxyXG4gIExyTXV0YXRpb25PcHRpb25zLFxyXG4gIExyUXVlcnlPcHRpb25zLFxyXG59IGZyb20gJy4vbHItZ3JhcGhxbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTHJNdXRhdGlvbkJhc2UgfSBmcm9tICcuL2xyLW11dGF0aW9uLWJhc2UnO1xyXG5cclxuZXhwb3J0IGNsYXNzIExyU2VydmljZSB7XHJcbiAgcHJvdGVjdGVkIGxyR3JhcGhRTDogTHJHcmFwaFFMU2VydmljZTtcclxuXHJcbiAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICB0aGlzLmxyR3JhcGhRTCA9IGluamVjdG9yLmdldChMckdyYXBoUUxTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBhc3luYyBtdXRhdGU8VCwgVFZhcmlhYmxlcz4oXHJcbiAgICBsck11dGF0aW9uOlxyXG4gICAgICB8IExyTXV0YXRpb25CYXNlPFQsIFRWYXJpYWJsZXM+XHJcbiAgICAgIHwgUHJvbWlzZTxMck11dGF0aW9uQmFzZTxULCBUVmFyaWFibGVzPj4sXHJcbiAgICBvcHRpb25zPzogTHJNdXRhdGlvbk9wdGlvbnM8VCwgVFZhcmlhYmxlcz5cclxuICApIHtcclxuICAgIHJldHVybiB0aGlzLmxyR3JhcGhRTC5sck11dGF0ZShsck11dGF0aW9uLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBhc3luYyBxdWVyeTxULCBWPihvcHRpb25zOiBMclF1ZXJ5T3B0aW9uczxULCBWPikge1xyXG4gICAgcmV0dXJuIHRoaXMubHJHcmFwaFFMLnF1ZXJ5KG9wdGlvbnMpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,138 +1,138 @@
1
- import { __awaiter } from "tslib";
2
- import { Injectable } from '@angular/core';
3
- import gql from 'graphql-tag';
4
- import { EncryptionService } from '../cryptography/encryption.service';
5
- import { KeyGraphService } from '../cryptography/key-graph.service';
6
- import { KeyGraphFragment } from '../_common/queries.gql';
7
- import { KeyExchangeService } from './key-exchange.service';
8
- import { LrApolloService } from './lr-apollo.service';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "./lr-apollo.service";
11
- import * as i2 from "../cryptography/key-graph.service";
12
- import * as i3 from "../cryptography/encryption.service";
13
- import * as i4 from "./key-exchange.service";
14
- export const SendMessageMutation = gql `
15
- mutation SendMessage($input: SendMessageInput!) {
16
- sendMessage(input: $input) {
17
- message {
18
- id
19
- }
20
- }
21
- }
22
- `;
23
- export const MessageQuery = gql `
24
- query Message($id: LrRelayIdInput!) {
25
- message(id: $id) {
26
- id
27
- sender {
28
- username
29
- }
30
- receiver {
31
- username
32
- }
33
- plainMessage
34
- signedCipherMessage
35
- sharedKey {
36
- id
37
- }
38
- senderSigPbk {
39
- id
40
- }
41
- }
42
- keyGraph {
43
- ...KeyGraphFragment
44
- }
45
- }
46
- ${KeyGraphFragment}
47
- `;
48
- export class MessageService {
49
- constructor(lrApollo, keyGraph, encryptionService, keyExchangeService) {
50
- this.lrApollo = lrApollo;
51
- this.keyGraph = keyGraph;
52
- this.encryptionService = encryptionService;
53
- this.keyExchangeService = keyExchangeService;
54
- this.encrypt = this.encryptionService.encrypt.bind(this.encryptionService);
55
- this.decrypt = this.encryptionService.decrypt.bind(this.encryptionService);
56
- this.sign = this.encryptionService.sign.bind(this.encryptionService);
57
- this.verify = this.encryptionService.verify.bind(this.encryptionService);
58
- }
59
- sendMessage({ username, userId, plainMessageJson, plainCipherMessageJson, }) {
60
- return __awaiter(this, void 0, void 0, function* () {
61
- const userSharedKey = yield this.keyExchangeService.currentUserSharedKey({
62
- username,
63
- userId,
64
- });
65
- const input = {
66
- receiverUsername: username,
67
- receiverId: userId,
68
- sharedKeyId: userSharedKey.sharedKey.id,
69
- senderSigPbkId: userSharedKey.userSigPrk.id,
70
- };
71
- if (plainCipherMessageJson) {
72
- const sharedKey = yield this.keyGraph.getJwkKey(userSharedKey.sharedKey.id);
73
- const cipherMessage = yield this.encrypt(sharedKey, plainCipherMessageJson);
74
- const senderSigPrk = yield this.keyGraph.getJwkKey(userSharedKey.userSigPrk.id);
75
- const signedCipherMessage = yield this.sign(senderSigPrk, cipherMessage);
76
- input.signedCipherMessage = JSON.stringify(signedCipherMessage);
77
- }
78
- if (plainMessageJson) {
79
- input.plainMessage = JSON.stringify(plainMessageJson);
80
- }
81
- const res = yield this.lrApollo.query({
82
- query: SendMessageMutation,
83
- variables: {
84
- input,
85
- },
86
- });
87
- return res.sendMessage;
88
- });
89
- }
90
- decryptMessage(message, { sharedKey, senderSigPbk }) {
91
- return __awaiter(this, void 0, void 0, function* () {
92
- const signedCipherMessage = yield this.verify(senderSigPbk, JSON.parse(message.signedCipherMessage));
93
- message.plainSignedCipherMessageJson = yield this.decrypt(sharedKey, signedCipherMessage);
94
- });
95
- }
96
- getMessage(id) {
97
- return __awaiter(this, void 0, void 0, function* () {
98
- const res = yield this.lrApollo.query({
99
- query: MessageQuery,
100
- variables: {
101
- id,
102
- },
103
- });
104
- this.keyGraph.addKeys(res.keyGraph);
105
- const message = res.message;
106
- const sharedKey = yield this.keyGraph.getJwkKey(message.sharedKey.id);
107
- // The sender would be getting the Prk back. The receiver gets the Pbk back.
108
- // But only the Pbk is needed here to verify signature.
109
- // So both sender and receiver can access this message.
110
- const senderSigPbk = yield this.keyGraph.getJwkKey(message.senderSigPbk.id);
111
- // Test bad signature
112
- // senderSigPbk = senderSigPbk.toJSON();
113
- // senderSigPbk.n = "x" + senderSigPbk.n.substring(1);
114
- // senderSigPbk = await KFS.asKey(senderSigPbk);
115
- yield this.decryptMessage(message, {
116
- sharedKey,
117
- senderSigPbk,
118
- });
119
- if (message.plainMessage) {
120
- message.plainMessageJson = JSON.parse(message.plainMessage);
121
- }
122
- return res.message;
123
- });
124
- }
125
- }
126
- MessageService.ɵprov = i0.ɵɵdefineInjectable({ factory: function MessageService_Factory() { return new MessageService(i0.ɵɵinject(i1.LrApolloService), i0.ɵɵinject(i2.KeyGraphService), i0.ɵɵinject(i3.EncryptionService), i0.ɵɵinject(i4.KeyExchangeService)); }, token: MessageService, providedIn: "root" });
127
- MessageService.decorators = [
128
- { type: Injectable, args: [{
129
- providedIn: 'root',
130
- },] }
131
- ];
132
- MessageService.ctorParameters = () => [
133
- { type: LrApolloService },
134
- { type: KeyGraphService },
135
- { type: EncryptionService },
136
- { type: KeyExchangeService }
137
- ];
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii9vcHQvYXRsYXNzaWFuL3BpcGVsaW5lcy9hZ2VudC9idWlsZC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9hcGkvbWVzc2FnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sR0FBRyxNQUFNLGFBQWEsQ0FBQztBQUU5QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7QUFHdEQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFBOzs7Ozs7OztDQVFyQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUF1QjNCLGdCQUFnQjtDQUNuQixDQUFDO0FBNkNGLE1BQU0sT0FBTyxjQUFjO0lBY3pCLFlBQ1UsUUFBeUIsRUFDekIsUUFBeUIsRUFDekIsaUJBQW9DLEVBQ3BDLGtCQUFzQztRQUh0QyxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFqQi9CLFlBQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDNUQsSUFBSSxDQUFDLGlCQUFpQixDQUN2QixD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LENBQUM7WUFFdkMsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRXRFLDRFQUE0RTtZQUM1RSx1REFBdUQ7WUFDdkQsdURBQXVEO1lBQ3ZELE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUU1RSxxQkFBcUI7WUFDckIsd0NBQXdDO1lBQ3hDLHNEQUFzRDtZQUN0RCxnREFBZ0Q7WUFFaEQsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRTtnQkFDakMsU0FBUztnQkFDVCxZQUFZO2FBQ2IsQ0FBQyxDQUFDO1lBRUgsSUFBSSxPQUFPLENBQUMsWUFBWSxFQUFFO2dCQUN4QixPQUFPLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDN0Q7WUFFRCxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDckIsQ0FBQztLQUFBOzs7O1lBMUhGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBakZRLGVBQWU7WUFIZixlQUFlO1lBRGYsaUJBQWlCO1lBR2pCLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBncWwgZnJvbSAnZ3JhcGhxbC10YWcnO1xuaW1wb3J0IHsgSldLIH0gZnJvbSAnbm9kZS1qb3NlJztcbmltcG9ydCB7IEVuY3J5cHRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2VuY3J5cHRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBLZXlHcmFwaFNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkva2V5LWdyYXBoLnNlcnZpY2UnO1xuaW1wb3J0IHsgS2V5R3JhcGhGcmFnbWVudCB9IGZyb20gJy4uL19jb21tb24vcXVlcmllcy5ncWwnO1xuaW1wb3J0IHsgS2V5RXhjaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi9rZXktZXhjaGFuZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBMckFwb2xsb1NlcnZpY2UgfSBmcm9tICcuL2xyLWFwb2xsby5zZXJ2aWNlJztcbmltcG9ydCB7IEtleUZhY3RvcnlTZXJ2aWNlIGFzIEtGUyB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9rZXktZmFjdG9yeS5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IFNlbmRNZXNzYWdlTXV0YXRpb24gPSBncWxgXG4gIG11dGF0aW9uIFNlbmRNZXNzYWdlKCRpbnB1dDogU2VuZE1lc3NhZ2VJbnB1dCEpIHtcbiAgICBzZW5kTWVzc2FnZShpbnB1dDogJGlucHV0KSB7XG4gICAgICBtZXNzYWdlIHtcbiAgICAgICAgaWRcbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmV4cG9ydCBjb25zdCBNZXNzYWdlUXVlcnkgPSBncWxgXG4gIHF1ZXJ5IE1lc3NhZ2UoJGlkOiBMclJlbGF5SWRJbnB1dCEpIHtcbiAgICBtZXNzYWdlKGlkOiAkaWQpIHtcbiAgICAgIGlkXG4gICAgICBzZW5kZXIge1xuICAgICAgICB1c2VybmFtZVxuICAgICAgfVxuICAgICAgcmVjZWl2ZXIge1xuICAgICAgICB1c2VybmFtZVxuICAgICAgfVxuICAgICAgcGxhaW5NZXNzYWdlXG4gICAgICBzaWduZWRDaXBoZXJNZXNzYWdlXG4gICAgICBzaGFyZWRLZXkge1xuICAgICAgICBpZFxuICAgICAgfVxuICAgICAgc2VuZGVyU2lnUGJrIHtcbiAgICAgICAgaWRcbiAgICAgIH1cbiAgICB9XG4gICAga2V5R3JhcGgge1xuICAgICAgLi4uS2V5R3JhcGhGcmFnbWVudFxuICAgIH1cbiAgfVxuICAke0tleUdyYXBoRnJhZ21lbnR9XG5gO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlbmRNZXNzYWdlIHtcbiAgbWVzc2FnZToge1xuICAgIGlkOiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VuZE1lc3NhZ2VJbnB1dCB7XG4gIHVzZXJuYW1lPzogc3RyaW5nO1xuICB1c2VySWQ/OiBzdHJpbmc7XG4gIHBsYWluTWVzc2FnZUpzb24/OiBhbnk7XG4gIHBsYWluQ2lwaGVyTWVzc2FnZUpzb24/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHNlbmRlcjoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdXNlcm5hbWU6IHN0cmluZztcbiAgfTtcbiAgcmVjZWl2ZXI6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHVzZXJuYW1lOiBzdHJpbmc7XG4gIH07XG4gIHBsYWluTWVzc2FnZTogc3RyaW5nO1xuICBwbGFpbk1lc3NhZ2VKc29uPzogYW55O1xuICBzaWduZWRDaXBoZXJNZXNzYWdlOiBzdHJpbmc7XG4gIHBsYWluU2lnbmVkQ2lwaGVyTWVzc2FnZUpzb24/OiBhbnk7XG4gIHNlbmRlclNpZ1Biazoge1xuICAgIGlkOiBzdHJpbmc7XG4gIH07XG4gIHNoYXJlZEtleToge1xuICAgIGlkOiBzdHJpbmc7XG4gIH07XG59XG5cbmludGVyZmFjZSBEZWNyeXB0TWVzc2FnZU9wdGlvbnMge1xuICBzaGFyZWRLZXk6IEpXSy5LZXk7XG4gIHNlbmRlclNpZ1BiazogSldLLktleTtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmNyeXB0ID0gdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0LmJpbmQoXG4gICAgdGhpcy5lbmNyeXB0aW9uU2VydmljZVxuICApO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlY3J5cHQgPSB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmRlY3J5cHQuYmluZChcbiAgICB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlXG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2lnbiA9IHRoaXMuZW5jcnlwdGlvblNlcnZpY2Uuc2lnbi5iaW5kKFxuICAgIHRoaXMuZW5jcnlwdGlvblNlcnZpY2VcbiAgKTtcbiAgcHJpdmF0ZSByZWFkb25seSB2ZXJpZnkgPSB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLnZlcmlmeS5iaW5kKFxuICAgIHRoaXMuZW5jcnlwdGlvblNlcnZpY2VcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGxyQXBvbGxvOiBMckFwb2xsb1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBrZXlHcmFwaDogS2V5R3JhcGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgZW5jcnlwdGlvblNlcnZpY2U6IEVuY3J5cHRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUga2V5RXhjaGFuZ2VTZXJ2aWNlOiBLZXlFeGNoYW5nZVNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIHNlbmRNZXNzYWdlKHtcbiAgICB1c2VybmFtZSxcbiAgICB1c2VySWQsXG4gICAgcGxhaW5NZXNzYWdlSnNvbixcbiAgICBwbGFpbkNpcGhlck1lc3NhZ2VKc29uLFxuICB9OiBTZW5kTWVzc2FnZUlucHV0KTogUHJvbWlzZTxTZW5kTWVzc2FnZT4ge1xuICAgIGNvbnN0IHVzZXJTaGFyZWRLZXkgPSBhd2FpdCB0aGlzLmtleUV4Y2hhbmdlU2VydmljZS5jdXJyZW50VXNlclNoYXJlZEtleSh7XG4gICAgICB1c2VybmFtZSxcbiAgICAgIHVzZXJJZCxcbiAgICB9KTtcblxuICAgIGNvbnN0IGlucHV0OiBhbnkgPSB7XG4gICAgICByZWNlaXZlclVzZXJuYW1lOiB1c2VybmFtZSxcbiAgICAgIHJlY2VpdmVySWQ6IHVzZXJJZCxcbiAgICAgIHNoYXJlZEtleUlkOiB1c2VyU2hhcmVkS2V5LnNoYXJlZEtleS5pZCxcbiAgICAgIHNlbmRlclNpZ1Bia0lkOiB1c2VyU2hhcmVkS2V5LnVzZXJTaWdQcmsuaWQsXG4gICAgfTtcblxuICAgIGlmIChwbGFpbkNpcGhlck1lc3NhZ2VKc29uKSB7XG4gICAgICBjb25zdCBzaGFyZWRLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEp3a0tleShcbiAgICAgICAgdXNlclNoYXJlZEtleS5zaGFyZWRLZXkuaWRcbiAgICAgICk7XG4gICAgICBjb25zdCBjaXBoZXJNZXNzYWdlID0gYXdhaXQgdGhpcy5lbmNyeXB0KFxuICAgICAgICBzaGFyZWRLZXksXG4gICAgICAgIHBsYWluQ2lwaGVyTWVzc2FnZUpzb25cbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHNlbmRlclNpZ1ByayA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0SndrS2V5KFxuICAgICAgICB1c2VyU2hhcmVkS2V5LnVzZXJTaWdQcmsuaWRcbiAgICAgICk7XG4gICAgICBjb25zdCBzaWduZWRDaXBoZXJNZXNzYWdlID0gYXdhaXQgdGhpcy5zaWduKHNlbmRlclNpZ1ByaywgY2lwaGVyTWVzc2FnZSk7XG5cbiAgICAgIGlucHV0LnNpZ25lZENpcGhlck1lc3NhZ2UgPSBKU09OLnN0cmluZ2lmeShzaWduZWRDaXBoZXJNZXNzYWdlKTtcbiAgICB9XG5cbiAgICBpZiAocGxhaW5NZXNzYWdlSnNvbikge1xuICAgICAgaW5wdXQucGxhaW5NZXNzYWdlID0gSlNPTi5zdHJpbmdpZnkocGxhaW5NZXNzYWdlSnNvbik7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5sckFwb2xsby5xdWVyeTxhbnk+KHtcbiAgICAgIHF1ZXJ5OiBTZW5kTWVzc2FnZU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiByZXMuc2VuZE1lc3NhZ2U7XG4gIH1cblxuICBhc3luYyBkZWNyeXB0TWVzc2FnZShcbiAgICBtZXNzYWdlOiBNZXNzYWdlLFxuICAgIHsgc2hhcmVkS2V5LCBzZW5kZXJTaWdQYmsgfTogRGVjcnlwdE1lc3NhZ2VPcHRpb25zXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNpZ25lZENpcGhlck1lc3NhZ2UgPSBhd2FpdCB0aGlzLnZlcmlmeShcbiAgICAgIHNlbmRlclNpZ1BiayxcbiAgICAgIEpTT04ucGFyc2UobWVzc2FnZS5zaWduZWRDaXBoZXJNZXNzYWdlKVxuICAgICk7XG5cbiAgICBtZXNzYWdlLnBsYWluU2lnbmVkQ2lwaGVyTWVzc2FnZUpzb24gPSBhd2FpdCB0aGlzLmRlY3J5cHQoXG4gICAgICBzaGFyZWRLZXksXG4gICAgICBzaWduZWRDaXBoZXJNZXNzYWdlXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGdldE1lc3NhZ2UoaWQ6IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZT4ge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMubHJBcG9sbG8ucXVlcnk8YW55Pih7XG4gICAgICBxdWVyeTogTWVzc2FnZVF1ZXJ5LFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlkLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMua2V5R3JhcGguYWRkS2V5cyhyZXMua2V5R3JhcGgpO1xuXG4gICAgY29uc3QgbWVzc2FnZSA9IHJlcy5tZXNzYWdlIGFzIE1lc3NhZ2U7XG5cbiAgICBjb25zdCBzaGFyZWRLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEp3a0tleShtZXNzYWdlLnNoYXJlZEtleS5pZCk7XG5cbiAgICAvLyBUaGUgc2VuZGVyIHdvdWxkIGJlIGdldHRpbmcgdGhlIFByayBiYWNrLiBUaGUgcmVjZWl2ZXIgZ2V0cyB0aGUgUGJrIGJhY2suXG4gICAgLy8gQnV0IG9ubHkgdGhlIFBiayBpcyBuZWVkZWQgaGVyZSB0byB2ZXJpZnkgc2lnbmF0dXJlLlxuICAgIC8vIFNvIGJvdGggc2VuZGVyIGFuZCByZWNlaXZlciBjYW4gYWNjZXNzIHRoaXMgbWVzc2FnZS5cbiAgICBjb25zdCBzZW5kZXJTaWdQYmsgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEp3a0tleShtZXNzYWdlLnNlbmRlclNpZ1Biay5pZCk7XG5cbiAgICAvLyBUZXN0IGJhZCBzaWduYXR1cmVcbiAgICAvLyBzZW5kZXJTaWdQYmsgPSBzZW5kZXJTaWdQYmsudG9KU09OKCk7XG4gICAgLy8gc2VuZGVyU2lnUGJrLm4gPSBcInhcIiArIHNlbmRlclNpZ1Biay5uLnN1YnN0cmluZygxKTtcbiAgICAvLyBzZW5kZXJTaWdQYmsgPSBhd2FpdCBLRlMuYXNLZXkoc2VuZGVyU2lnUGJrKTtcblxuICAgIGF3YWl0IHRoaXMuZGVjcnlwdE1lc3NhZ2UobWVzc2FnZSwge1xuICAgICAgc2hhcmVkS2V5LFxuICAgICAgc2VuZGVyU2lnUGJrLFxuICAgIH0pO1xuXG4gICAgaWYgKG1lc3NhZ2UucGxhaW5NZXNzYWdlKSB7XG4gICAgICBtZXNzYWdlLnBsYWluTWVzc2FnZUpzb24gPSBKU09OLnBhcnNlKG1lc3NhZ2UucGxhaW5NZXNzYWdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzLm1lc3NhZ2U7XG4gIH1cbn1cbiJdfQ==
1
+ import { __awaiter } from "tslib";
2
+ import { Injectable } from '@angular/core';
3
+ import gql from 'graphql-tag';
4
+ import { EncryptionService } from '../cryptography/encryption.service';
5
+ import { KeyGraphService } from '../cryptography/key-graph.service';
6
+ import { KeyGraphFragment } from '../_common/queries.gql';
7
+ import { KeyExchangeService } from './key-exchange.service';
8
+ import { LrApolloService } from './lr-apollo.service';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "./lr-apollo.service";
11
+ import * as i2 from "../cryptography/key-graph.service";
12
+ import * as i3 from "../cryptography/encryption.service";
13
+ import * as i4 from "./key-exchange.service";
14
+ export const SendMessageMutation = gql `
15
+ mutation SendMessage($input: SendMessageInput!) {
16
+ sendMessage(input: $input) {
17
+ message {
18
+ id
19
+ }
20
+ }
21
+ }
22
+ `;
23
+ export const MessageQuery = gql `
24
+ query Message($id: LrRelayIdInput!) {
25
+ message(id: $id) {
26
+ id
27
+ sender {
28
+ username
29
+ }
30
+ receiver {
31
+ username
32
+ }
33
+ plainMessage
34
+ signedCipherMessage
35
+ sharedKey {
36
+ id
37
+ }
38
+ senderSigPbk {
39
+ id
40
+ }
41
+ }
42
+ keyGraph {
43
+ ...KeyGraphFragment
44
+ }
45
+ }
46
+ ${KeyGraphFragment}
47
+ `;
48
+ export class MessageService {
49
+ constructor(lrApollo, keyGraph, encryptionService, keyExchangeService) {
50
+ this.lrApollo = lrApollo;
51
+ this.keyGraph = keyGraph;
52
+ this.encryptionService = encryptionService;
53
+ this.keyExchangeService = keyExchangeService;
54
+ this.encrypt = this.encryptionService.encrypt.bind(this.encryptionService);
55
+ this.decrypt = this.encryptionService.decrypt.bind(this.encryptionService);
56
+ this.sign = this.encryptionService.sign.bind(this.encryptionService);
57
+ this.verify = this.encryptionService.verify.bind(this.encryptionService);
58
+ }
59
+ sendMessage({ username, userId, plainMessageJson, plainCipherMessageJson, }) {
60
+ return __awaiter(this, void 0, void 0, function* () {
61
+ const userSharedKey = yield this.keyExchangeService.currentUserSharedKey({
62
+ username,
63
+ userId,
64
+ });
65
+ const input = {
66
+ receiverUsername: username,
67
+ receiverId: userId,
68
+ sharedKeyId: userSharedKey.sharedKey.id,
69
+ senderSigPbkId: userSharedKey.userSigPrk.id,
70
+ };
71
+ if (plainCipherMessageJson) {
72
+ const sharedKey = yield this.keyGraph.getJwkKey(userSharedKey.sharedKey.id);
73
+ const cipherMessage = yield this.encrypt(sharedKey, plainCipherMessageJson);
74
+ const senderSigPrk = yield this.keyGraph.getJwkKey(userSharedKey.userSigPrk.id);
75
+ const signedCipherMessage = yield this.sign(senderSigPrk, cipherMessage);
76
+ input.signedCipherMessage = JSON.stringify(signedCipherMessage);
77
+ }
78
+ if (plainMessageJson) {
79
+ input.plainMessage = JSON.stringify(plainMessageJson);
80
+ }
81
+ const res = yield this.lrApollo.query({
82
+ query: SendMessageMutation,
83
+ variables: {
84
+ input,
85
+ },
86
+ });
87
+ return res.sendMessage;
88
+ });
89
+ }
90
+ decryptMessage(message, { sharedKey, senderSigPbk }) {
91
+ return __awaiter(this, void 0, void 0, function* () {
92
+ const signedCipherMessage = yield this.verify(senderSigPbk, JSON.parse(message.signedCipherMessage));
93
+ message.plainSignedCipherMessageJson = yield this.decrypt(sharedKey, signedCipherMessage);
94
+ });
95
+ }
96
+ getMessage(id) {
97
+ return __awaiter(this, void 0, void 0, function* () {
98
+ const res = yield this.lrApollo.query({
99
+ query: MessageQuery,
100
+ variables: {
101
+ id,
102
+ },
103
+ });
104
+ this.keyGraph.addKeys(res.keyGraph);
105
+ const message = res.message;
106
+ const sharedKey = yield this.keyGraph.getJwkKey(message.sharedKey.id);
107
+ // The sender would be getting the Prk back. The receiver gets the Pbk back.
108
+ // But only the Pbk is needed here to verify signature.
109
+ // So both sender and receiver can access this message.
110
+ const senderSigPbk = yield this.keyGraph.getJwkKey(message.senderSigPbk.id);
111
+ // Test bad signature
112
+ // senderSigPbk = senderSigPbk.toJSON();
113
+ // senderSigPbk.n = "x" + senderSigPbk.n.substring(1);
114
+ // senderSigPbk = await KFS.asKey(senderSigPbk);
115
+ yield this.decryptMessage(message, {
116
+ sharedKey,
117
+ senderSigPbk,
118
+ });
119
+ if (message.plainMessage) {
120
+ message.plainMessageJson = JSON.parse(message.plainMessage);
121
+ }
122
+ return res.message;
123
+ });
124
+ }
125
+ }
126
+ MessageService.ɵprov = i0.ɵɵdefineInjectable({ factory: function MessageService_Factory() { return new MessageService(i0.ɵɵinject(i1.LrApolloService), i0.ɵɵinject(i2.KeyGraphService), i0.ɵɵinject(i3.EncryptionService), i0.ɵɵinject(i4.KeyExchangeService)); }, token: MessageService, providedIn: "root" });
127
+ MessageService.decorators = [
128
+ { type: Injectable, args: [{
129
+ providedIn: 'root',
130
+ },] }
131
+ ];
132
+ MessageService.ctorParameters = () => [
133
+ { type: LrApolloService },
134
+ { type: KeyGraphService },
135
+ { type: EncryptionService },
136
+ { type: KeyExchangeService }
137
+ ];
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IkM6L1Byb2plY3RzL25ld3JlcG8va2MtY2xpZW50L3Byb2plY3RzL2NvcmUvc3JjLyIsInNvdXJjZXMiOlsibGliL2FwaS9tZXNzYWdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxHQUFHLE1BQU0sYUFBYSxDQUFDO0FBRTlCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7OztBQUd0RCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUE7Ozs7Ozs7O0NBUXJDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQXVCM0IsZ0JBQWdCO0NBQ25CLENBQUM7QUE2Q0YsTUFBTSxPQUFPLGNBQWM7SUFjekIsWUFDVSxRQUF5QixFQUN6QixRQUF5QixFQUN6QixpQkFBb0MsRUFDcEMsa0JBQXNDO1FBSHRDLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQWpCL0IsWUFBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUM1RCxJQUFJLENBQUMsaUJBQWlCLENBQ3ZCLENBQUM7UUFD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QUV2QyxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFdEUsNEVBQTRFO1lBQzVFLHVEQUF1RDtZQUN2RCx1REFBdUQ7WUFDdkQsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRTVFLHFCQUFxQjtZQUNyQix3Q0FBd0M7WUFDeEMsc0RBQXNEO1lBQ3RELGdEQUFnRDtZQUVoRCxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFO2dCQUNqQyxTQUFTO2dCQUNULFlBQVk7YUFDYixDQUFDLENBQUM7WUFFSCxJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQUU7Z0JBQ3hCLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUM3RDtZQUVELE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUNyQixDQUFDO0tBQUE7Ozs7WUExSEYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUFqRlEsZUFBZTtZQUhmLGVBQWU7WUFEZixpQkFBaUI7WUFHakIsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgZ3FsIGZyb20gJ2dyYXBocWwtdGFnJztcclxuaW1wb3J0IHsgSldLIH0gZnJvbSAnbm9kZS1qb3NlJztcclxuaW1wb3J0IHsgRW5jcnlwdGlvblNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkvZW5jcnlwdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgS2V5R3JhcGhTZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2tleS1ncmFwaC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgS2V5R3JhcGhGcmFnbWVudCB9IGZyb20gJy4uL19jb21tb24vcXVlcmllcy5ncWwnO1xyXG5pbXBvcnQgeyBLZXlFeGNoYW5nZVNlcnZpY2UgfSBmcm9tICcuL2tleS1leGNoYW5nZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTHJBcG9sbG9TZXJ2aWNlIH0gZnJvbSAnLi9sci1hcG9sbG8uc2VydmljZSc7XHJcbmltcG9ydCB7IEtleUZhY3RvcnlTZXJ2aWNlIGFzIEtGUyB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9rZXktZmFjdG9yeS5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjb25zdCBTZW5kTWVzc2FnZU11dGF0aW9uID0gZ3FsYFxyXG4gIG11dGF0aW9uIFNlbmRNZXNzYWdlKCRpbnB1dDogU2VuZE1lc3NhZ2VJbnB1dCEpIHtcclxuICAgIHNlbmRNZXNzYWdlKGlucHV0OiAkaW5wdXQpIHtcclxuICAgICAgbWVzc2FnZSB7XHJcbiAgICAgICAgaWRcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuYDtcclxuXHJcbmV4cG9ydCBjb25zdCBNZXNzYWdlUXVlcnkgPSBncWxgXHJcbiAgcXVlcnkgTWVzc2FnZSgkaWQ6IExyUmVsYXlJZElucHV0ISkge1xyXG4gICAgbWVzc2FnZShpZDogJGlkKSB7XHJcbiAgICAgIGlkXHJcbiAgICAgIHNlbmRlciB7XHJcbiAgICAgICAgdXNlcm5hbWVcclxuICAgICAgfVxyXG4gICAgICByZWNlaXZlciB7XHJcbiAgICAgICAgdXNlcm5hbWVcclxuICAgICAgfVxyXG4gICAgICBwbGFpbk1lc3NhZ2VcclxuICAgICAgc2lnbmVkQ2lwaGVyTWVzc2FnZVxyXG4gICAgICBzaGFyZWRLZXkge1xyXG4gICAgICAgIGlkXHJcbiAgICAgIH1cclxuICAgICAgc2VuZGVyU2lnUGJrIHtcclxuICAgICAgICBpZFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBrZXlHcmFwaCB7XHJcbiAgICAgIC4uLktleUdyYXBoRnJhZ21lbnRcclxuICAgIH1cclxuICB9XHJcbiAgJHtLZXlHcmFwaEZyYWdtZW50fVxyXG5gO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTZW5kTWVzc2FnZSB7XHJcbiAgbWVzc2FnZToge1xyXG4gICAgaWQ6IHN0cmluZztcclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlbmRNZXNzYWdlSW5wdXQge1xyXG4gIHVzZXJuYW1lPzogc3RyaW5nO1xyXG4gIHVzZXJJZD86IHN0cmluZztcclxuICBwbGFpbk1lc3NhZ2VKc29uPzogYW55O1xyXG4gIHBsYWluQ2lwaGVyTWVzc2FnZUpzb24/OiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZSB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBzZW5kZXI6IHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgICB1c2VybmFtZTogc3RyaW5nO1xyXG4gIH07XHJcbiAgcmVjZWl2ZXI6IHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgICB1c2VybmFtZTogc3RyaW5nO1xyXG4gIH07XHJcbiAgcGxhaW5NZXNzYWdlOiBzdHJpbmc7XHJcbiAgcGxhaW5NZXNzYWdlSnNvbj86IGFueTtcclxuICBzaWduZWRDaXBoZXJNZXNzYWdlOiBzdHJpbmc7XHJcbiAgcGxhaW5TaWduZWRDaXBoZXJNZXNzYWdlSnNvbj86IGFueTtcclxuICBzZW5kZXJTaWdQYms6IHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgfTtcclxuICBzaGFyZWRLZXk6IHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgfTtcclxufVxyXG5cclxuaW50ZXJmYWNlIERlY3J5cHRNZXNzYWdlT3B0aW9ucyB7XHJcbiAgc2hhcmVkS2V5OiBKV0suS2V5O1xyXG4gIHNlbmRlclNpZ1BiazogSldLLktleTtcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VTZXJ2aWNlIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGVuY3J5cHQgPSB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHQuYmluZChcclxuICAgIHRoaXMuZW5jcnlwdGlvblNlcnZpY2VcclxuICApO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVjcnlwdCA9IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZGVjcnlwdC5iaW5kKFxyXG4gICAgdGhpcy5lbmNyeXB0aW9uU2VydmljZVxyXG4gICk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBzaWduID0gdGhpcy5lbmNyeXB0aW9uU2VydmljZS5zaWduLmJpbmQoXHJcbiAgICB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlXHJcbiAgKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHZlcmlmeSA9IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UudmVyaWZ5LmJpbmQoXHJcbiAgICB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlXHJcbiAgKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGxyQXBvbGxvOiBMckFwb2xsb1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGtleUdyYXBoOiBLZXlHcmFwaFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVuY3J5cHRpb25TZXJ2aWNlOiBFbmNyeXB0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUga2V5RXhjaGFuZ2VTZXJ2aWNlOiBLZXlFeGNoYW5nZVNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIGFzeW5jIHNlbmRNZXNzYWdlKHtcclxuICAgIHVzZXJuYW1lLFxyXG4gICAgdXNlcklkLFxyXG4gICAgcGxhaW5NZXNzYWdlSnNvbixcclxuICAgIHBsYWluQ2lwaGVyTWVzc2FnZUpzb24sXHJcbiAgfTogU2VuZE1lc3NhZ2VJbnB1dCk6IFByb21pc2U8U2VuZE1lc3NhZ2U+IHtcclxuICAgIGNvbnN0IHVzZXJTaGFyZWRLZXkgPSBhd2FpdCB0aGlzLmtleUV4Y2hhbmdlU2VydmljZS5jdXJyZW50VXNlclNoYXJlZEtleSh7XHJcbiAgICAgIHVzZXJuYW1lLFxyXG4gICAgICB1c2VySWQsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBpbnB1dDogYW55ID0ge1xyXG4gICAgICByZWNlaXZlclVzZXJuYW1lOiB1c2VybmFtZSxcclxuICAgICAgcmVjZWl2ZXJJZDogdXNlcklkLFxyXG4gICAgICBzaGFyZWRLZXlJZDogdXNlclNoYXJlZEtleS5zaGFyZWRLZXkuaWQsXHJcbiAgICAgIHNlbmRlclNpZ1Bia0lkOiB1c2VyU2hhcmVkS2V5LnVzZXJTaWdQcmsuaWQsXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChwbGFpbkNpcGhlck1lc3NhZ2VKc29uKSB7XHJcbiAgICAgIGNvbnN0IHNoYXJlZEtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0SndrS2V5KFxyXG4gICAgICAgIHVzZXJTaGFyZWRLZXkuc2hhcmVkS2V5LmlkXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGNpcGhlck1lc3NhZ2UgPSBhd2FpdCB0aGlzLmVuY3J5cHQoXHJcbiAgICAgICAgc2hhcmVkS2V5LFxyXG4gICAgICAgIHBsYWluQ2lwaGVyTWVzc2FnZUpzb25cclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IHNlbmRlclNpZ1ByayA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0SndrS2V5KFxyXG4gICAgICAgIHVzZXJTaGFyZWRLZXkudXNlclNpZ1Byay5pZFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBzaWduZWRDaXBoZXJNZXNzYWdlID0gYXdhaXQgdGhpcy5zaWduKHNlbmRlclNpZ1ByaywgY2lwaGVyTWVzc2FnZSk7XHJcblxyXG4gICAgICBpbnB1dC5zaWduZWRDaXBoZXJNZXNzYWdlID0gSlNPTi5zdHJpbmdpZnkoc2lnbmVkQ2lwaGVyTWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBsYWluTWVzc2FnZUpzb24pIHtcclxuICAgICAgaW5wdXQucGxhaW5NZXNzYWdlID0gSlNPTi5zdHJpbmdpZnkocGxhaW5NZXNzYWdlSnNvbik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5sckFwb2xsby5xdWVyeTxhbnk+KHtcclxuICAgICAgcXVlcnk6IFNlbmRNZXNzYWdlTXV0YXRpb24sXHJcbiAgICAgIHZhcmlhYmxlczoge1xyXG4gICAgICAgIGlucHV0LFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHJlcy5zZW5kTWVzc2FnZTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRlY3J5cHRNZXNzYWdlKFxyXG4gICAgbWVzc2FnZTogTWVzc2FnZSxcclxuICAgIHsgc2hhcmVkS2V5LCBzZW5kZXJTaWdQYmsgfTogRGVjcnlwdE1lc3NhZ2VPcHRpb25zXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBzaWduZWRDaXBoZXJNZXNzYWdlID0gYXdhaXQgdGhpcy52ZXJpZnkoXHJcbiAgICAgIHNlbmRlclNpZ1BiayxcclxuICAgICAgSlNPTi5wYXJzZShtZXNzYWdlLnNpZ25lZENpcGhlck1lc3NhZ2UpXHJcbiAgICApO1xyXG5cclxuICAgIG1lc3NhZ2UucGxhaW5TaWduZWRDaXBoZXJNZXNzYWdlSnNvbiA9IGF3YWl0IHRoaXMuZGVjcnlwdChcclxuICAgICAgc2hhcmVkS2V5LFxyXG4gICAgICBzaWduZWRDaXBoZXJNZXNzYWdlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0TWVzc2FnZShpZDogc3RyaW5nKTogUHJvbWlzZTxNZXNzYWdlPiB7XHJcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmxyQXBvbGxvLnF1ZXJ5PGFueT4oe1xyXG4gICAgICBxdWVyeTogTWVzc2FnZVF1ZXJ5LFxyXG4gICAgICB2YXJpYWJsZXM6IHtcclxuICAgICAgICBpZCxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMua2V5R3JhcGguYWRkS2V5cyhyZXMua2V5R3JhcGgpO1xyXG5cclxuICAgIGNvbnN0IG1lc3NhZ2UgPSByZXMubWVzc2FnZSBhcyBNZXNzYWdlO1xyXG5cclxuICAgIGNvbnN0IHNoYXJlZEtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0SndrS2V5KG1lc3NhZ2Uuc2hhcmVkS2V5LmlkKTtcclxuXHJcbiAgICAvLyBUaGUgc2VuZGVyIHdvdWxkIGJlIGdldHRpbmcgdGhlIFByayBiYWNrLiBUaGUgcmVjZWl2ZXIgZ2V0cyB0aGUgUGJrIGJhY2suXHJcbiAgICAvLyBCdXQgb25seSB0aGUgUGJrIGlzIG5lZWRlZCBoZXJlIHRvIHZlcmlmeSBzaWduYXR1cmUuXHJcbiAgICAvLyBTbyBib3RoIHNlbmRlciBhbmQgcmVjZWl2ZXIgY2FuIGFjY2VzcyB0aGlzIG1lc3NhZ2UuXHJcbiAgICBjb25zdCBzZW5kZXJTaWdQYmsgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEp3a0tleShtZXNzYWdlLnNlbmRlclNpZ1Biay5pZCk7XHJcblxyXG4gICAgLy8gVGVzdCBiYWQgc2lnbmF0dXJlXHJcbiAgICAvLyBzZW5kZXJTaWdQYmsgPSBzZW5kZXJTaWdQYmsudG9KU09OKCk7XHJcbiAgICAvLyBzZW5kZXJTaWdQYmsubiA9IFwieFwiICsgc2VuZGVyU2lnUGJrLm4uc3Vic3RyaW5nKDEpO1xyXG4gICAgLy8gc2VuZGVyU2lnUGJrID0gYXdhaXQgS0ZTLmFzS2V5KHNlbmRlclNpZ1Biayk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5kZWNyeXB0TWVzc2FnZShtZXNzYWdlLCB7XHJcbiAgICAgIHNoYXJlZEtleSxcclxuICAgICAgc2VuZGVyU2lnUGJrLFxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKG1lc3NhZ2UucGxhaW5NZXNzYWdlKSB7XHJcbiAgICAgIG1lc3NhZ2UucGxhaW5NZXNzYWdlSnNvbiA9IEpTT04ucGFyc2UobWVzc2FnZS5wbGFpbk1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXMubWVzc2FnZTtcclxuICB9XHJcbn1cclxuIl19