@lifeready/core 1.0.12 → 1.0.15

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 (219) hide show
  1. package/README.md +62 -62
  2. package/bundles/lifeready-core.umd.js +14315 -14315
  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 +52 -52
  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/key-exchange.gql.js +188 -188
  18. package/esm2015/lib/api/key-exchange.service.js +442 -442
  19. package/esm2015/lib/api/key-exchange.types.js +18 -18
  20. package/esm2015/lib/api/key-exchange2.gql.js +171 -171
  21. package/esm2015/lib/api/key-exchange2.service.js +479 -479
  22. package/esm2015/lib/api/lock.gql.js +40 -40
  23. package/esm2015/lib/api/lock.service.js +64 -64
  24. package/esm2015/lib/api/lr-apollo.service.js +46 -46
  25. package/esm2015/lib/api/lr-graphql/index.js +6 -6
  26. package/esm2015/lib/api/lr-graphql/lr-graphql.service.js +155 -155
  27. package/esm2015/lib/api/lr-graphql/lr-merged-mutation.js +213 -213
  28. package/esm2015/lib/api/lr-graphql/lr-mutation-base.js +51 -51
  29. package/esm2015/lib/api/lr-graphql/lr-mutation.js +48 -48
  30. package/esm2015/lib/api/lr-graphql/lr.service.js +18 -18
  31. package/esm2015/lib/api/message.service.js +138 -138
  32. package/esm2015/lib/api/persist.service.js +181 -181
  33. package/esm2015/lib/api/query-processor/common-processors.service.js +93 -93
  34. package/esm2015/lib/api/query-processor/index.js +3 -3
  35. package/esm2015/lib/api/query-processor/query-processor.service.js +262 -262
  36. package/esm2015/lib/api/query-processor/tp-password-reset-processor.service.js +109 -109
  37. package/esm2015/lib/api/shared-contact-card.service.js +119 -119
  38. package/esm2015/lib/api/shared-contact-card2.gql.js +41 -41
  39. package/esm2015/lib/api/shared-contact-card2.service.js +117 -117
  40. package/esm2015/lib/api/time.service.js +146 -146
  41. package/esm2015/lib/api/types/graphql.types.js +7 -7
  42. package/esm2015/lib/api/types/index.js +3 -3
  43. package/esm2015/lib/api/types/lr-graphql.types.js +101 -101
  44. package/esm2015/lib/auth/auth.config.js +57 -57
  45. package/esm2015/lib/auth/auth.gql.js +48 -48
  46. package/esm2015/lib/auth/auth.types.js +27 -27
  47. package/esm2015/lib/auth/idle.service.js +168 -168
  48. package/esm2015/lib/auth/idle.types.js +7 -7
  49. package/esm2015/lib/auth/lbop.service.js +355 -355
  50. package/esm2015/lib/auth/life-ready-auth.service.js +488 -488
  51. package/esm2015/lib/auth/password.service.js +320 -320
  52. package/esm2015/lib/auth/register.service.js +172 -172
  53. package/esm2015/lib/auth/two-factor.service.js +74 -74
  54. package/esm2015/lib/category/category-meta.service.js +99 -99
  55. package/esm2015/lib/category/category.gql.js +406 -406
  56. package/esm2015/lib/category/category.service.js +390 -390
  57. package/esm2015/lib/category/category.types.js +29 -29
  58. package/esm2015/lib/cryptography/cryptography.types.js +11 -11
  59. package/esm2015/lib/cryptography/encryption.service.js +189 -189
  60. package/esm2015/lib/cryptography/key-factory.service.js +237 -237
  61. package/esm2015/lib/cryptography/key-graph.service.js +299 -299
  62. package/esm2015/lib/cryptography/key-meta.service.js +200 -200
  63. package/esm2015/lib/cryptography/key.service.js +124 -124
  64. package/esm2015/lib/cryptography/slip39.service.js +169 -169
  65. package/esm2015/lib/cryptography/web-crypto.service.js +29 -29
  66. package/esm2015/lib/items2/item2.gql.js +139 -139
  67. package/esm2015/lib/items2/item2.service.js +498 -498
  68. package/esm2015/lib/items2/item2.types.js +1 -1
  69. package/esm2015/lib/life-ready.config.js +84 -84
  70. package/esm2015/lib/life-ready.module.js +74 -74
  71. package/esm2015/lib/notification/notification.gql.js +43 -43
  72. package/esm2015/lib/notification/notification.service.js +118 -118
  73. package/esm2015/lib/plan/plan.gql.js +123 -123
  74. package/esm2015/lib/plan/plan.service.js +149 -149
  75. package/esm2015/lib/plan/plan.types.js +11 -11
  76. package/esm2015/lib/record/record-attachment.service.js +101 -101
  77. package/esm2015/lib/record/record.gql.js +179 -179
  78. package/esm2015/lib/record/record.service.js +206 -206
  79. package/esm2015/lib/record/record.types.js +15 -15
  80. package/esm2015/lib/record-type/record-type.service.js +75 -75
  81. package/esm2015/lib/record-type/record-type.types.js +28 -28
  82. package/esm2015/lib/scenario/scenario.constants.js +2 -2
  83. package/esm2015/lib/scenario/scenario.controller.js +34 -34
  84. package/esm2015/lib/scenario/scenario.gql.js +72 -72
  85. package/esm2015/lib/scenario/scenario.gql.private.js +198 -198
  86. package/esm2015/lib/scenario/scenario.service.js +538 -538
  87. package/esm2015/lib/scenario/scenario.types.js +1 -1
  88. package/esm2015/lib/trusted-parties/tp-assembly.gql.private.js +22 -22
  89. package/esm2015/lib/trusted-parties/tp-assembly.js +362 -362
  90. package/esm2015/lib/trusted-parties/tp-assembly.types.js +1 -1
  91. package/esm2015/lib/trusted-parties/tp-password-reset-request.service.js +113 -113
  92. package/esm2015/lib/trusted-parties/tp-password-reset-user.service.js +129 -129
  93. package/esm2015/lib/trusted-parties/tp-password-reset.constants.js +4 -4
  94. package/esm2015/lib/trusted-parties/tp-password-reset.controller.js +34 -34
  95. package/esm2015/lib/trusted-parties/tp-password-reset.gql.js +236 -236
  96. package/esm2015/lib/trusted-parties/tp-password-reset.service.js +95 -95
  97. package/esm2015/lib/trusted-parties/trusted-party.gql.js +148 -148
  98. package/esm2015/lib/trusted-parties/trusted-party.service.js +326 -326
  99. package/esm2015/lib/trusted-parties/trusted-party.types.js +41 -41
  100. package/esm2015/lib/trusted-parties/trusted-party2.gql.js +87 -87
  101. package/esm2015/lib/trusted-parties/trusted-party2.service.js +215 -215
  102. package/esm2015/lib/users/profile-details.service.js +214 -214
  103. package/esm2015/lib/users/profile.gql.js +97 -97
  104. package/esm2015/lib/users/profile.service.js +169 -169
  105. package/esm2015/lib/users/profile.types.js +34 -34
  106. package/esm2015/lib/users/user.gql.js +60 -60
  107. package/esm2015/lib/users/user.service.js +79 -79
  108. package/esm2015/lib/users/user.types.js +5 -5
  109. package/esm2015/lifeready-core.js +13 -13
  110. package/esm2015/public-api.js +71 -71
  111. package/fesm2015/lifeready-core.js +12258 -12258
  112. package/fesm2015/lifeready-core.js.map +1 -1
  113. package/lib/_common/ast.d.ts +11 -11
  114. package/lib/_common/deferred-promise.d.ts +12 -12
  115. package/lib/_common/exceptions.d.ts +109 -109
  116. package/lib/_common/queries.gql.d.ts +10 -10
  117. package/lib/_common/run-outside-angular.d.ts +14 -14
  118. package/lib/_common/types.d.ts +10 -10
  119. package/lib/_common/utils.d.ts +9 -9
  120. package/lib/api/contact-card.gql.d.ts +7 -7
  121. package/lib/api/contact-card.service.d.ts +52 -52
  122. package/lib/api/contact-card2.gql.d.ts +34 -34
  123. package/lib/api/contact-card2.service.d.ts +49 -49
  124. package/lib/api/file.service.d.ts +18 -18
  125. package/lib/api/key-exchange.gql.d.ts +9 -9
  126. package/lib/api/key-exchange.service.d.ts +39 -39
  127. package/lib/api/key-exchange.types.d.ts +196 -196
  128. package/lib/api/key-exchange2.gql.d.ts +125 -125
  129. package/lib/api/key-exchange2.service.d.ts +187 -187
  130. package/lib/api/lock.gql.d.ts +27 -27
  131. package/lib/api/lock.service.d.ts +34 -34
  132. package/lib/api/lr-apollo.service.d.ts +15 -15
  133. package/lib/api/lr-graphql/index.d.ts +5 -5
  134. package/lib/api/lr-graphql/lr-graphql.service.d.ts +60 -60
  135. package/lib/api/lr-graphql/lr-merged-mutation.d.ts +28 -28
  136. package/lib/api/lr-graphql/lr-mutation-base.d.ts +28 -28
  137. package/lib/api/lr-graphql/lr-mutation.d.ts +8 -8
  138. package/lib/api/lr-graphql/lr.service.d.ts +9 -9
  139. package/lib/api/message.service.d.ts +58 -58
  140. package/lib/api/persist.service.d.ts +31 -31
  141. package/lib/api/query-processor/common-processors.service.d.ts +36 -36
  142. package/lib/api/query-processor/index.d.ts +2 -2
  143. package/lib/api/query-processor/query-processor.service.d.ts +18 -18
  144. package/lib/api/query-processor/tp-password-reset-processor.service.d.ts +15 -15
  145. package/lib/api/shared-contact-card.service.d.ts +33 -33
  146. package/lib/api/shared-contact-card2.gql.d.ts +36 -36
  147. package/lib/api/shared-contact-card2.service.d.ts +45 -45
  148. package/lib/api/time.service.d.ts +16 -16
  149. package/lib/api/types/graphql.types.d.ts +29 -29
  150. package/lib/api/types/index.d.ts +2 -2
  151. package/lib/api/types/lr-graphql.types.d.ts +502 -502
  152. package/lib/auth/auth.config.d.ts +5 -5
  153. package/lib/auth/auth.gql.d.ts +15 -15
  154. package/lib/auth/auth.types.d.ts +66 -66
  155. package/lib/auth/idle.service.d.ts +40 -40
  156. package/lib/auth/idle.types.d.ts +10 -10
  157. package/lib/auth/lbop.service.d.ts +91 -91
  158. package/lib/auth/life-ready-auth.service.d.ts +61 -61
  159. package/lib/auth/password.service.d.ts +78 -78
  160. package/lib/auth/register.service.d.ts +25 -25
  161. package/lib/auth/two-factor.service.d.ts +15 -15
  162. package/lib/category/category-meta.service.d.ts +23 -23
  163. package/lib/category/category.gql.d.ts +45 -45
  164. package/lib/category/category.service.d.ts +67 -67
  165. package/lib/category/category.types.d.ts +79 -79
  166. package/lib/cryptography/cryptography.types.d.ts +83 -83
  167. package/lib/cryptography/encryption.service.d.ts +41 -41
  168. package/lib/cryptography/key-factory.service.d.ts +38 -38
  169. package/lib/cryptography/key-graph.service.d.ts +41 -41
  170. package/lib/cryptography/key-meta.service.d.ts +44 -44
  171. package/lib/cryptography/key.service.d.ts +36 -36
  172. package/lib/cryptography/slip39.service.d.ts +43 -43
  173. package/lib/cryptography/web-crypto.service.d.ts +5 -5
  174. package/lib/items2/item2.gql.d.ts +123 -123
  175. package/lib/items2/item2.service.d.ts +203 -203
  176. package/lib/items2/item2.types.d.ts +70 -70
  177. package/lib/life-ready.config.d.ts +14 -14
  178. package/lib/life-ready.module.d.ts +5 -5
  179. package/lib/notification/notification.gql.d.ts +37 -37
  180. package/lib/notification/notification.service.d.ts +63 -63
  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/scenario.constants.d.ts +1 -1
  191. package/lib/scenario/scenario.controller.d.ts +10 -10
  192. package/lib/scenario/scenario.gql.d.ts +62 -62
  193. package/lib/scenario/scenario.gql.private.d.ts +16 -16
  194. package/lib/scenario/scenario.service.d.ts +233 -233
  195. package/lib/scenario/scenario.types.d.ts +50 -50
  196. package/lib/trusted-parties/tp-assembly.d.ts +177 -177
  197. package/lib/trusted-parties/tp-assembly.gql.private.d.ts +5 -5
  198. package/lib/trusted-parties/tp-assembly.types.d.ts +38 -38
  199. package/lib/trusted-parties/tp-password-reset-request.service.d.ts +20 -20
  200. package/lib/trusted-parties/tp-password-reset-user.service.d.ts +35 -35
  201. package/lib/trusted-parties/tp-password-reset.constants.d.ts +3 -3
  202. package/lib/trusted-parties/tp-password-reset.controller.d.ts +10 -10
  203. package/lib/trusted-parties/tp-password-reset.gql.d.ts +223 -223
  204. package/lib/trusted-parties/tp-password-reset.service.d.ts +188 -188
  205. package/lib/trusted-parties/trusted-party.gql.d.ts +9 -9
  206. package/lib/trusted-parties/trusted-party.service.d.ts +44 -44
  207. package/lib/trusted-parties/trusted-party.types.d.ts +102 -102
  208. package/lib/trusted-parties/trusted-party2.gql.d.ts +79 -79
  209. package/lib/trusted-parties/trusted-party2.service.d.ts +114 -114
  210. package/lib/users/profile-details.service.d.ts +21 -21
  211. package/lib/users/profile.gql.d.ts +11 -11
  212. package/lib/users/profile.service.d.ts +35 -35
  213. package/lib/users/profile.types.d.ts +96 -96
  214. package/lib/users/user.gql.d.ts +9 -9
  215. package/lib/users/user.service.d.ts +12 -12
  216. package/lib/users/user.types.d.ts +23 -23
  217. package/lifeready-core.d.ts +12 -12
  218. package/package.json +1 -1
  219. package/public-api.d.ts +67 -67
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHItbXV0YXRpb24tYmFzZS5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9qZWN0cy9rYy1jbGllbnQvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvYXBpL2xyLWdyYXBocWwvbHItbXV0YXRpb24tYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEdBQUcsTUFBTSxhQUFhLENBQUM7QUFDOUIsT0FBTyxFQUFFLFFBQVEsRUFBcUIsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFPL0QsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQTs7OztDQUlyRCxDQUFDLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQXVCLENBQUM7QUFFcEQsMkNBQTJDO0FBQzNDLHlFQUF5RTtBQUV6RTs7Ozs7O0dBTUc7QUFDSCxNQUFNLE9BQWdCLGNBQWM7SUFBcEM7UUFHRSxrQ0FBa0M7UUFDeEIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUU1QixpREFBaUQ7UUFDakMsb0JBQWUsR0FBRyxJQUFJLGVBQWUsRUFBSyxDQUFDO0lBK0I3RCxDQUFDO0lBN0JDLElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUM7SUFDdEMsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFRO1FBQ2QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFZO1FBQ2pCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTztZQUNMLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDMUIsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsTUFBTSxJQUFJLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLENBQUM7U0FDbkQ7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGVyYXRpb25WYXJpYWJsZXMgfSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlJztcclxuaW1wb3J0IHsgRnJhZ21lbnRTcHJlYWROb2RlIH0gZnJvbSAnZ3JhcGhxbCc7XHJcbmltcG9ydCBncWwgZnJvbSAnZ3JhcGhxbC10YWcnO1xyXG5pbXBvcnQgeyBnZXRRdWVyeSwgVHlwZWREb2N1bWVudE5vZGUgfSBmcm9tICcuLi8uLi9fY29tbW9uL2FzdCc7XHJcbmltcG9ydCB7IERlZmVycmVkUHJvbWlzZSB9IGZyb20gJy4uLy4uL19jb21tb24vZGVmZXJyZWQtcHJvbWlzZSc7XHJcbmltcG9ydCB7IExyQmFkU3RhdGVFeGNlcHRpb24gfSBmcm9tICcuLi8uLi9fY29tbW9uL2V4Y2VwdGlvbnMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMck11dGF0aW9uRGF0YTxULCBUVmFyaWFibGVzID0gT3BlcmF0aW9uVmFyaWFibGVzPiB7XHJcbiAgbXV0YXRpb246IFR5cGVkRG9jdW1lbnROb2RlPFQ+O1xyXG4gIHZhcmlhYmxlcz86IFRWYXJpYWJsZXM7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBmcmFnbWVudFNwcmVhZEFzdFNlbGVjdGlvbiA9IGdldFF1ZXJ5KGdxbGBcclxuICBxdWVyeSB7XHJcbiAgICAuLi5GcmFnbWVudE5hbWVcclxuICB9XHJcbmApLnNlbGVjdGlvblNldC5zZWxlY3Rpb25zWzBdIGFzIEZyYWdtZW50U3ByZWFkTm9kZTtcclxuXHJcbi8vIGNvbnN0IGZyYWdtZW50U3ByZWFkQXN0U2VsZWN0aW9uID0gKCkgPT5cclxuLy8gICBsb2Rhc2guZGVlcENsb25lKF9mcmFnbWVudFNwcmVhZEFzdFNlbGVjdGlvbikgYXMgRnJhZ21lbnRTcHJlYWROb2RlO1xyXG5cclxuLyoqXHJcbiAqIERFQ0lTSU9OOiBMck11dGF0aW9uQmFzZSBkb2VzIG5vdCBwcm92aWRlIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGNhbGwgbHJHcmFwaFFMLmxyTXV0YXRlKClcclxuICogYmVjYXVzZSB0aGlzIGNsYXNzIGNvdWxkIGJlIG1hZGUgaW5kZXBlbmRlbnQgb2Ygd2hhdCBsaWIgaXMgdXNlZCB0byBjYWxsIHRoZSBBUEkuIElmIHdlXHJcbiAqIHByb3ZpZGVkIGEgY29uZmlndXJhYmxlIGNhbGwgYmFjayB0byBtYWtlIHRoZSBBUEkgY2FsbCwgdGhlbiB0aGUgdHlwaW5nIGZvciB0aGF0IGNhbGxiYWNrXHJcbiAqIG5lZWRzIHRvIGJlIGtub3duLiBCdXQgc2luY2UgdGhlIEFQSSBsaWIgKGVnLiBBcG9sbG8pIGhhcyBpdCdzIG93biB1bmlxdWUgcmV0dXJuIHR5cGUsIHNvXHJcbiAqIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGRvIGluIGdlbmVyYWwuXHJcbiAqL1xyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTHJNdXRhdGlvbkJhc2U8VCwgVFZhcmlhYmxlcyA9IE9wZXJhdGlvblZhcmlhYmxlcz4ge1xyXG4gIHByb3RlY3RlZCBtdXRhdGlvbjogVHlwZWREb2N1bWVudE5vZGU8VD47XHJcbiAgcHJvdGVjdGVkIHZhcmlhYmxlcz86IFRWYXJpYWJsZXM7XHJcbiAgLyogdHNsaW50OmRpc2FibGU6dmFyaWFibGUtbmFtZSAqL1xyXG4gIHByb3RlY3RlZCBfZXhlY3V0ZWQgPSBmYWxzZTtcclxuXHJcbiAgLy8gcHJvdGVjdGVkIHByb21pc2VzOiBEZWZlcnJlZFByb21pc2U8VD5bXSA9IFtdO1xyXG4gIHB1YmxpYyByZWFkb25seSBkZWZlcnJlZFByb21pc2UgPSBuZXcgRGVmZXJyZWRQcm9taXNlPFQ+KCk7XHJcblxyXG4gIGdldCBwcm9taXNlKCk6IFByb21pc2U8VD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGVmZXJyZWRQcm9taXNlLnByb21pc2U7XHJcbiAgfVxyXG5cclxuICByZXNvbHZlKHZhbHVlOiBUKSB7XHJcbiAgICB0aGlzLmRlZmVycmVkUHJvbWlzZS5yZXNvbHZlKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHJlamVjdChyZWFzb24/OiBhbnkpIHtcclxuICAgIHRoaXMuZGVmZXJyZWRQcm9taXNlLnJlamVjdChyZWFzb24pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGxyTXV0YXRpb25EYXRhKCk6IExyTXV0YXRpb25EYXRhPFQsIFRWYXJpYWJsZXM+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG11dGF0aW9uOiB0aGlzLm11dGF0aW9uLFxyXG4gICAgICB2YXJpYWJsZXM6IHRoaXMudmFyaWFibGVzLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGdldCBleGVjdXRlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9leGVjdXRlZDtcclxuICB9XHJcblxyXG4gIHNldEV4ZWN1dGVkKCkge1xyXG4gICAgaWYgKHRoaXMuX2V4ZWN1dGVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBMckJhZFN0YXRlRXhjZXB0aW9uKCdBbHJlYWR5IGV4ZWN1dGVkJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9leGVjdXRlZCA9IHRydWU7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHItbXV0YXRpb24uanMiLCJzb3VyY2VSb290IjoiQzovUHJvamVjdHMva2MtY2xpZW50L3Byb2plY3RzL2NvcmUvc3JjLyIsInNvdXJjZXMiOlsibGliL2FwaS9sci1ncmFwaHFsL2xyLW11dGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBR2pDLE9BQU8sRUFDTCxjQUFjLEVBQ2QsWUFBWSxFQUNaLFdBQVcsR0FFWixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sS0FBSyxHQUFHLE1BQU0sbUJBQW1CLENBQUM7QUFFekMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWhGLE1BQU0sT0FBTyxVQUdYLFNBQVEsY0FBNkI7SUFDckMsWUFBWSxPQUFzQztRQUNoRCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7SUFDckMsQ0FBQztJQUVELE1BQU0sQ0FBVSxTQUFxQztRQUNuRCwyQkFBMkI7UUFDM0IsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFpQixDQUFDO1FBQ3BFLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU5QyxNQUFNLFdBQVcsR0FBRyxFQUErQyxDQUFDO1FBQ3BFLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFnQyxFQUFFLEVBQUU7WUFDbkUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLFNBQW9CLEVBQUUsRUFBRTtZQUNyRCxNQUFNLEtBQUssR0FBRyxTQUFzQixDQUFDO1lBQ3JDLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QyxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFeEMsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDYixPQUFPO2FBQ1I7WUFFRCx3REFBd0Q7WUFDeEQsd0RBQXdEO1lBQ3hELHFEQUFxRDtZQUNyRCxLQUFLLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRztnREFFekIsMEJBQTBCLEtBQzdCLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQzthQUU1QixDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBRUYsWUFBWSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDekQsSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtnQkFDOUIscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDbEM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxVQUFVLENBQUM7WUFDcEIsUUFBUSxFQUFFLGdDQUNMLFdBQVcsS0FDZCxXQUFXLEVBQUU7b0JBQ1gsZ0NBQWdDO29CQUNoQyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUMvQixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxvQkFBb0IsQ0FDM0M7b0JBQ0QsR0FBRyxTQUFTLENBQUMsV0FBVztpQkFDekIsR0FDNEI7WUFDL0IsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQzFCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGxvZGFzaCBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBPcGVyYXRpb25WYXJpYWJsZXMgfSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlJztcclxuaW1wb3J0IHsgRG9jdW1lbnROb2RlLCBGaWVsZE5vZGUsIEZyYWdtZW50RGVmaW5pdGlvbk5vZGUgfSBmcm9tICdncmFwaHFsJztcclxuaW1wb3J0IHtcclxuICBnZXRBbGlhc09yTmFtZSxcclxuICBnZXRGcmFnbWVudHMsXHJcbiAgZ2V0TXV0YXRpb24sXHJcbiAgVHlwZWREb2N1bWVudE5vZGUsXHJcbn0gZnJvbSAnLi4vLi4vX2NvbW1vbi9hc3QnO1xyXG5pbXBvcnQgKiBhcyBhc3QgZnJvbSAnLi4vLi4vX2NvbW1vbi9hc3QnO1xyXG5pbXBvcnQgeyBMck11dGF0aW9uRGF0YSB9IGZyb20gJy4vbHItbXV0YXRpb24tYmFzZSc7XHJcbmltcG9ydCB7IGZyYWdtZW50U3ByZWFkQXN0U2VsZWN0aW9uLCBMck11dGF0aW9uQmFzZSB9IGZyb20gJy4vbHItbXV0YXRpb24tYmFzZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgTHJNdXRhdGlvbjxcclxuICBUIGV4dGVuZHMgYW55LFxyXG4gIFRWYXJpYWJsZXMgPSBPcGVyYXRpb25WYXJpYWJsZXNcclxuPiBleHRlbmRzIExyTXV0YXRpb25CYXNlPFQsIFRWYXJpYWJsZXM+IHtcclxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBMck11dGF0aW9uRGF0YTxULCBUVmFyaWFibGVzPikge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMubXV0YXRpb24gPSBvcHRpb25zLm11dGF0aW9uO1xyXG4gICAgdGhpcy52YXJpYWJsZXMgPSBvcHRpb25zLnZhcmlhYmxlcztcclxuICB9XHJcblxyXG4gIHNlbGVjdDxUUmVzdWx0PihmcmFnbWVudHM6IFR5cGVkRG9jdW1lbnROb2RlPFRSZXN1bHQ+KSB7XHJcbiAgICAvLyBEb24ndCB0b3VjaCB0aGUgb3JpZ2luYWxcclxuICAgIGNvbnN0IG11dGF0aW9uRG9jID0gbG9kYXNoLmNsb25lRGVlcCh0aGlzLm11dGF0aW9uKSBhcyBEb2N1bWVudE5vZGU7XHJcbiAgICBjb25zdCBtdXRhdGlvbk5vZGUgPSBnZXRNdXRhdGlvbihtdXRhdGlvbkRvYyk7XHJcblxyXG4gICAgY29uc3QgZnJhZ21lbnRNYXAgPSB7fSBhcyB7IFtrZXk6IHN0cmluZ106IEZyYWdtZW50RGVmaW5pdGlvbk5vZGUgfTtcclxuICAgIGdldEZyYWdtZW50cyhmcmFnbWVudHMpLmZvckVhY2goKGZyYWdtZW50OiBGcmFnbWVudERlZmluaXRpb25Ob2RlKSA9PiB7XHJcbiAgICAgIGZyYWdtZW50TWFwW2ZyYWdtZW50Lm5hbWUudmFsdWVdID0gZnJhZ21lbnQ7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCByZXBsYWNlRmllbGRTZWxlY3Rpb24gPSAoc2VsZWN0aW9uOiBGaWVsZE5vZGUpID0+IHtcclxuICAgICAgY29uc3QgZmllbGQgPSBzZWxlY3Rpb24gYXMgRmllbGROb2RlO1xyXG4gICAgICBjb25zdCBmaWVsZE5hbWUgPSBnZXRBbGlhc09yTmFtZShmaWVsZCk7XHJcbiAgICAgIGNvbnN0IGZyYWdtZW50ID0gZnJhZ21lbnRNYXBbZmllbGROYW1lXTtcclxuXHJcbiAgICAgIGlmICghZnJhZ21lbnQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE1ha2UgdGhlIGVudGlyZSBzZWxlY3Rpb24gb2YgdGhlIG11dGF0aW9uIGEgc3ByZWFkIG9mXHJcbiAgICAgIC8vIGEgZnJhZ21lbnQgdXNpbmcgdGhlIHNhbWUgbmFtZSBhcyB0aGUgbXV0YXRpb24gZmllbGQuXHJcbiAgICAgIC8vIFdlIHdpbGwgYWxzbyByZW5hbWUgdGhlIGZyYWdtZW50IHRvIHRoZSBzYW1lIG5hbWUuXHJcbiAgICAgIGZpZWxkLnNlbGVjdGlvblNldC5zZWxlY3Rpb25zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIC4uLmZyYWdtZW50U3ByZWFkQXN0U2VsZWN0aW9uLFxyXG4gICAgICAgICAgbmFtZTogYXN0Lm5hbWUoZmllbGROYW1lKSxcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG4gICAgfTtcclxuXHJcbiAgICBtdXRhdGlvbk5vZGUuc2VsZWN0aW9uU2V0LnNlbGVjdGlvbnMuZm9yRWFjaCgoc2VsZWN0aW9uKSA9PiB7XHJcbiAgICAgIGlmIChzZWxlY3Rpb24ua2luZCA9PT0gJ0ZpZWxkJykge1xyXG4gICAgICAgIHJlcGxhY2VGaWVsZFNlbGVjdGlvbihzZWxlY3Rpb24pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xyXG4gICAgICBtdXRhdGlvbjoge1xyXG4gICAgICAgIC4uLm11dGF0aW9uRG9jLFxyXG4gICAgICAgIGRlZmluaXRpb25zOiBbXHJcbiAgICAgICAgICAvLyBSZW1vdmUgYWxsIGV4aXN0aW5nIGZyYWdtZW50c1xyXG4gICAgICAgICAgLi4ubXV0YXRpb25Eb2MuZGVmaW5pdGlvbnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoZGVmKSA9PiBkZWYua2luZCAhPT0gJ0ZyYWdtZW50RGVmaW5pdGlvbidcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICAuLi5mcmFnbWVudHMuZGVmaW5pdGlvbnMsXHJcbiAgICAgICAgXSxcclxuICAgICAgfSBhcyBUeXBlZERvY3VtZW50Tm9kZTxUUmVzdWx0PixcclxuICAgICAgdmFyaWFibGVzOiB0aGlzLnZhcmlhYmxlcyxcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9qZWN0cy9rYy1jbGllbnQvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvYXBpL2xyLWdyYXBocWwvbHIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUNMLGdCQUFnQixHQUdqQixNQUFNLHNCQUFzQixDQUFDO0FBRzlCLE1BQU0sT0FBTyxTQUFTO0lBR3BCLFlBQVksUUFBa0I7UUFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVlLE1BQU0sQ0FDcEIsVUFFMEMsRUFDMUMsT0FBMEM7O1lBRTFDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELENBQUM7S0FBQTtJQUVlLEtBQUssQ0FBTyxPQUE2Qjs7WUFDdkQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxDQUFDO0tBQUE7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgTHJHcmFwaFFMU2VydmljZSxcclxuICBMck11dGF0aW9uT3B0aW9ucyxcclxuICBMclF1ZXJ5T3B0aW9ucyxcclxufSBmcm9tICcuL2xyLWdyYXBocWwuc2VydmljZSc7XHJcbmltcG9ydCB7IExyTXV0YXRpb25CYXNlIH0gZnJvbSAnLi9sci1tdXRhdGlvbi1iYXNlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMclNlcnZpY2Uge1xyXG4gIHByb3RlY3RlZCBsckdyYXBoUUw6IExyR3JhcGhRTFNlcnZpY2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgdGhpcy5sckdyYXBoUUwgPSBpbmplY3Rvci5nZXQoTHJHcmFwaFFMU2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgYXN5bmMgbXV0YXRlPFQsIFRWYXJpYWJsZXM+KFxyXG4gICAgbHJNdXRhdGlvbjpcclxuICAgICAgfCBMck11dGF0aW9uQmFzZTxULCBUVmFyaWFibGVzPlxyXG4gICAgICB8IFByb21pc2U8THJNdXRhdGlvbkJhc2U8VCwgVFZhcmlhYmxlcz4+LFxyXG4gICAgb3B0aW9ucz86IExyTXV0YXRpb25PcHRpb25zPFQsIFRWYXJpYWJsZXM+XHJcbiAgKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sckdyYXBoUUwubHJNdXRhdGUobHJNdXRhdGlvbiwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgYXN5bmMgcXVlcnk8VCwgVj4ob3B0aW9uczogTHJRdWVyeU9wdGlvbnM8VCwgVj4pIHtcclxuICAgIHJldHVybiB0aGlzLmxyR3JhcGhRTC5xdWVyeShvcHRpb25zKTtcclxuICB9XHJcbn1cclxuIl19
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IkM6L1Byb2plY3RzL2tjLWNsaWVudC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9hcGkvbWVzc2FnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sR0FBRyxNQUFNLGFBQWEsQ0FBQztBQUU5QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7QUFHdEQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFBOzs7Ozs7OztDQVFyQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUF1QjNCLGdCQUFnQjtDQUNuQixDQUFDO0FBNkNGLE1BQU0sT0FBTyxjQUFjO0lBY3pCLFlBQ1UsUUFBeUIsRUFDekIsUUFBeUIsRUFDekIsaUJBQW9DLEVBQ3BDLGtCQUFzQztRQUh0QyxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFqQi9CLFlBQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDNUQsSUFBSSxDQUFDLGlCQUFpQixDQUN2QixDQUFDO1FBQ2UsWUFBTyxH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TSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRXRFLDRFQUE0RTtZQUM1RSx1REFBdUQ7WUFDdkQsdURBQXVEO1lBQ3ZELE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUU1RSxxQkFBcUI7WUFDckIsd0NBQXdDO1lBQ3hDLHNEQUFzRDtZQUN0RCxnREFBZ0Q7WUFFaEQsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRTtnQkFDakMsU0FBUztnQkFDVCxZQUFZO2FBQ2IsQ0FBQyxDQUFDO1lBRUgsSUFBSSxPQUFPLENBQUMsWUFBWSxFQUFFO2dCQUN4QixPQUFPLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDN0Q7WUFFRCxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDckIsQ0FBQztLQUFBOzs7O1lBMUhGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBakZRLGVBQWU7WUFIZixlQUFlO1lBRGYsaUJBQWlCO1lBR2pCLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IGdxbCBmcm9tICdncmFwaHFsLXRhZyc7XHJcbmltcG9ydCB7IEpXSyB9IGZyb20gJ25vZGUtam9zZSc7XHJcbmltcG9ydCB7IEVuY3J5cHRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2VuY3J5cHRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEtleUdyYXBoU2VydmljZSB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9rZXktZ3JhcGguc2VydmljZSc7XHJcbmltcG9ydCB7IEtleUdyYXBoRnJhZ21lbnQgfSBmcm9tICcuLi9fY29tbW9uL3F1ZXJpZXMuZ3FsJztcclxuaW1wb3J0IHsgS2V5RXhjaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi9rZXktZXhjaGFuZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IExyQXBvbGxvU2VydmljZSB9IGZyb20gJy4vbHItYXBvbGxvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBLZXlGYWN0b3J5U2VydmljZSBhcyBLRlMgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkva2V5LWZhY3Rvcnkuc2VydmljZSc7XHJcblxyXG5leHBvcnQgY29uc3QgU2VuZE1lc3NhZ2VNdXRhdGlvbiA9IGdxbGBcclxuICBtdXRhdGlvbiBTZW5kTWVzc2FnZSgkaW5wdXQ6IFNlbmRNZXNzYWdlSW5wdXQhKSB7XHJcbiAgICBzZW5kTWVzc2FnZShpbnB1dDogJGlucHV0KSB7XHJcbiAgICAgIG1lc3NhZ2Uge1xyXG4gICAgICAgIGlkXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbmA7XHJcblxyXG5leHBvcnQgY29uc3QgTWVzc2FnZVF1ZXJ5ID0gZ3FsYFxyXG4gIHF1ZXJ5IE1lc3NhZ2UoJGlkOiBMclJlbGF5SWRJbnB1dCEpIHtcclxuICAgIG1lc3NhZ2UoaWQ6ICRpZCkge1xyXG4gICAgICBpZFxyXG4gICAgICBzZW5kZXIge1xyXG4gICAgICAgIHVzZXJuYW1lXHJcbiAgICAgIH1cclxuICAgICAgcmVjZWl2ZXIge1xyXG4gICAgICAgIHVzZXJuYW1lXHJcbiAgICAgIH1cclxuICAgICAgcGxhaW5NZXNzYWdlXHJcbiAgICAgIHNpZ25lZENpcGhlck1lc3NhZ2VcclxuICAgICAgc2hhcmVkS2V5IHtcclxuICAgICAgICBpZFxyXG4gICAgICB9XHJcbiAgICAgIHNlbmRlclNpZ1BiayB7XHJcbiAgICAgICAgaWRcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAga2V5R3JhcGgge1xyXG4gICAgICAuLi5LZXlHcmFwaEZyYWdtZW50XHJcbiAgICB9XHJcbiAgfVxyXG4gICR7S2V5R3JhcGhGcmFnbWVudH1cclxuYDtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2VuZE1lc3NhZ2Uge1xyXG4gIG1lc3NhZ2U6IHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgfTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTZW5kTWVzc2FnZUlucHV0IHtcclxuICB1c2VybmFtZT86IHN0cmluZztcclxuICB1c2VySWQ/OiBzdHJpbmc7XHJcbiAgcGxhaW5NZXNzYWdlSnNvbj86IGFueTtcclxuICBwbGFpbkNpcGhlck1lc3NhZ2VKc29uPzogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2Uge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgc2VuZGVyOiB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gICAgdXNlcm5hbWU6IHN0cmluZztcclxuICB9O1xyXG4gIHJlY2VpdmVyOiB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gICAgdXNlcm5hbWU6IHN0cmluZztcclxuICB9O1xyXG4gIHBsYWluTWVzc2FnZTogc3RyaW5nO1xyXG4gIHBsYWluTWVzc2FnZUpzb24/OiBhbnk7XHJcbiAgc2lnbmVkQ2lwaGVyTWVzc2FnZTogc3RyaW5nO1xyXG4gIHBsYWluU2lnbmVkQ2lwaGVyTWVzc2FnZUpzb24/OiBhbnk7XHJcbiAgc2VuZGVyU2lnUGJrOiB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gIH07XHJcbiAgc2hhcmVkS2V5OiB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gIH07XHJcbn1cclxuXHJcbmludGVyZmFjZSBEZWNyeXB0TWVzc2FnZU9wdGlvbnMge1xyXG4gIHNoYXJlZEtleTogSldLLktleTtcclxuICBzZW5kZXJTaWdQYms6IEpXSy5LZXk7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZXNzYWdlU2VydmljZSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBlbmNyeXB0ID0gdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0LmJpbmQoXHJcbiAgICB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlXHJcbiAgKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlY3J5cHQgPSB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmRlY3J5cHQuYmluZChcclxuICAgIHRoaXMuZW5jcnlwdGlvblNlcnZpY2VcclxuICApO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgc2lnbiA9IHRoaXMuZW5jcnlwdGlvblNlcnZpY2Uuc2lnbi5iaW5kKFxyXG4gICAgdGhpcy5lbmNyeXB0aW9uU2VydmljZVxyXG4gICk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSB2ZXJpZnkgPSB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLnZlcmlmeS5iaW5kKFxyXG4gICAgdGhpcy5lbmNyeXB0aW9uU2VydmljZVxyXG4gICk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBsckFwb2xsbzogTHJBcG9sbG9TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBrZXlHcmFwaDogS2V5R3JhcGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlbmNyeXB0aW9uU2VydmljZTogRW5jcnlwdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGtleUV4Y2hhbmdlU2VydmljZTogS2V5RXhjaGFuZ2VTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBhc3luYyBzZW5kTWVzc2FnZSh7XHJcbiAgICB1c2VybmFtZSxcclxuICAgIHVzZXJJZCxcclxuICAgIHBsYWluTWVzc2FnZUpzb24sXHJcbiAgICBwbGFpbkNpcGhlck1lc3NhZ2VKc29uLFxyXG4gIH06IFNlbmRNZXNzYWdlSW5wdXQpOiBQcm9taXNlPFNlbmRNZXNzYWdlPiB7XHJcbiAgICBjb25zdCB1c2VyU2hhcmVkS2V5ID0gYXdhaXQgdGhpcy5rZXlFeGNoYW5nZVNlcnZpY2UuY3VycmVudFVzZXJTaGFyZWRLZXkoe1xyXG4gICAgICB1c2VybmFtZSxcclxuICAgICAgdXNlcklkLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgaW5wdXQ6IGFueSA9IHtcclxuICAgICAgcmVjZWl2ZXJVc2VybmFtZTogdXNlcm5hbWUsXHJcbiAgICAgIHJlY2VpdmVySWQ6IHVzZXJJZCxcclxuICAgICAgc2hhcmVkS2V5SWQ6IHVzZXJTaGFyZWRLZXkuc2hhcmVkS2V5LmlkLFxyXG4gICAgICBzZW5kZXJTaWdQYmtJZDogdXNlclNoYXJlZEtleS51c2VyU2lnUHJrLmlkLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAocGxhaW5DaXBoZXJNZXNzYWdlSnNvbikge1xyXG4gICAgICBjb25zdCBzaGFyZWRLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEp3a0tleShcclxuICAgICAgICB1c2VyU2hhcmVkS2V5LnNoYXJlZEtleS5pZFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBjaXBoZXJNZXNzYWdlID0gYXdhaXQgdGhpcy5lbmNyeXB0KFxyXG4gICAgICAgIHNoYXJlZEtleSxcclxuICAgICAgICBwbGFpbkNpcGhlck1lc3NhZ2VKc29uXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCBzZW5kZXJTaWdQcmsgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEp3a0tleShcclxuICAgICAgICB1c2VyU2hhcmVkS2V5LnVzZXJTaWdQcmsuaWRcclxuICAgICAgKTtcclxuICAgICAgY29uc3Qgc2lnbmVkQ2lwaGVyTWVzc2FnZSA9IGF3YWl0IHRoaXMuc2lnbihzZW5kZXJTaWdQcmssIGNpcGhlck1lc3NhZ2UpO1xyXG5cclxuICAgICAgaW5wdXQuc2lnbmVkQ2lwaGVyTWVzc2FnZSA9IEpTT04uc3RyaW5naWZ5KHNpZ25lZENpcGhlck1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwbGFpbk1lc3NhZ2VKc29uKSB7XHJcbiAgICAgIGlucHV0LnBsYWluTWVzc2FnZSA9IEpTT04uc3RyaW5naWZ5KHBsYWluTWVzc2FnZUpzb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMubHJBcG9sbG8ucXVlcnk8YW55Pih7XHJcbiAgICAgIHF1ZXJ5OiBTZW5kTWVzc2FnZU11dGF0aW9uLFxyXG4gICAgICB2YXJpYWJsZXM6IHtcclxuICAgICAgICBpbnB1dCxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiByZXMuc2VuZE1lc3NhZ2U7XHJcbiAgfVxyXG5cclxuICBhc3luYyBkZWNyeXB0TWVzc2FnZShcclxuICAgIG1lc3NhZ2U6IE1lc3NhZ2UsXHJcbiAgICB7IHNoYXJlZEtleSwgc2VuZGVyU2lnUGJrIH06IERlY3J5cHRNZXNzYWdlT3B0aW9uc1xyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3Qgc2lnbmVkQ2lwaGVyTWVzc2FnZSA9IGF3YWl0IHRoaXMudmVyaWZ5KFxyXG4gICAgICBzZW5kZXJTaWdQYmssXHJcbiAgICAgIEpTT04ucGFyc2UobWVzc2FnZS5zaWduZWRDaXBoZXJNZXNzYWdlKVxyXG4gICAgKTtcclxuXHJcbiAgICBtZXNzYWdlLnBsYWluU2lnbmVkQ2lwaGVyTWVzc2FnZUpzb24gPSBhd2FpdCB0aGlzLmRlY3J5cHQoXHJcbiAgICAgIHNoYXJlZEtleSxcclxuICAgICAgc2lnbmVkQ2lwaGVyTWVzc2FnZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldE1lc3NhZ2UoaWQ6IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZT4ge1xyXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5sckFwb2xsby5xdWVyeTxhbnk+KHtcclxuICAgICAgcXVlcnk6IE1lc3NhZ2VRdWVyeSxcclxuICAgICAgdmFyaWFibGVzOiB7XHJcbiAgICAgICAgaWQsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmtleUdyYXBoLmFkZEtleXMocmVzLmtleUdyYXBoKTtcclxuXHJcbiAgICBjb25zdCBtZXNzYWdlID0gcmVzLm1lc3NhZ2UgYXMgTWVzc2FnZTtcclxuXHJcbiAgICBjb25zdCBzaGFyZWRLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEp3a0tleShtZXNzYWdlLnNoYXJlZEtleS5pZCk7XHJcblxyXG4gICAgLy8gVGhlIHNlbmRlciB3b3VsZCBiZSBnZXR0aW5nIHRoZSBQcmsgYmFjay4gVGhlIHJlY2VpdmVyIGdldHMgdGhlIFBiayBiYWNrLlxyXG4gICAgLy8gQnV0IG9ubHkgdGhlIFBiayBpcyBuZWVkZWQgaGVyZSB0byB2ZXJpZnkgc2lnbmF0dXJlLlxyXG4gICAgLy8gU28gYm90aCBzZW5kZXIgYW5kIHJlY2VpdmVyIGNhbiBhY2Nlc3MgdGhpcyBtZXNzYWdlLlxyXG4gICAgY29uc3Qgc2VuZGVyU2lnUGJrID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRKd2tLZXkobWVzc2FnZS5zZW5kZXJTaWdQYmsuaWQpO1xyXG5cclxuICAgIC8vIFRlc3QgYmFkIHNpZ25hdHVyZVxyXG4gICAgLy8gc2VuZGVyU2lnUGJrID0gc2VuZGVyU2lnUGJrLnRvSlNPTigpO1xyXG4gICAgLy8gc2VuZGVyU2lnUGJrLm4gPSBcInhcIiArIHNlbmRlclNpZ1Biay5uLnN1YnN0cmluZygxKTtcclxuICAgIC8vIHNlbmRlclNpZ1BiayA9IGF3YWl0IEtGUy5hc0tleShzZW5kZXJTaWdQYmspO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuZGVjcnlwdE1lc3NhZ2UobWVzc2FnZSwge1xyXG4gICAgICBzaGFyZWRLZXksXHJcbiAgICAgIHNlbmRlclNpZ1BiayxcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChtZXNzYWdlLnBsYWluTWVzc2FnZSkge1xyXG4gICAgICBtZXNzYWdlLnBsYWluTWVzc2FnZUpzb24gPSBKU09OLnBhcnNlKG1lc3NhZ2UucGxhaW5NZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzLm1lc3NhZ2U7XHJcbiAgfVxyXG59XHJcbiJdfQ==