@secrecy/lib 1.6.0 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/dist/BaseClient-ca94a07f.d.ts +405 -0
  2. package/dist/BaseClient.cjs +2 -0
  3. package/dist/BaseClient.cjs.map +1 -0
  4. package/dist/BaseClient.d.ts +16 -111
  5. package/dist/BaseClient.js +2 -506
  6. package/dist/BaseClient.js.map +1 -0
  7. package/dist/PopupTools.cjs +2 -0
  8. package/dist/PopupTools.cjs.map +1 -0
  9. package/dist/PopupTools.d.ts +5 -4
  10. package/dist/PopupTools.js +2 -195
  11. package/dist/PopupTools.js.map +1 -0
  12. package/dist/ZeusThunder.cjs +2 -0
  13. package/dist/ZeusThunder.cjs.map +1 -0
  14. package/dist/ZeusThunder.d.ts +6 -2
  15. package/dist/ZeusThunder.js +2 -65
  16. package/dist/ZeusThunder.js.map +1 -0
  17. package/dist/cache.cjs +2 -0
  18. package/dist/cache.cjs.map +1 -0
  19. package/dist/cache.d.ts +22 -4
  20. package/dist/cache.js +2 -4
  21. package/dist/cache.js.map +1 -0
  22. package/dist/client/SecrecyAppClient.cjs +2 -0
  23. package/dist/client/SecrecyAppClient.cjs.map +1 -0
  24. package/dist/client/SecrecyAppClient.d.ts +16 -17
  25. package/dist/client/SecrecyAppClient.js +2 -226
  26. package/dist/client/SecrecyAppClient.js.map +1 -0
  27. package/dist/client/SecrecyCloudClient.cjs +2 -0
  28. package/dist/client/SecrecyCloudClient.cjs.map +1 -0
  29. package/dist/client/SecrecyCloudClient.d.ts +16 -89
  30. package/dist/client/SecrecyCloudClient.js +2 -1405
  31. package/dist/client/SecrecyCloudClient.js.map +1 -0
  32. package/dist/client/SecrecyDbClient.cjs +2 -0
  33. package/dist/client/SecrecyDbClient.cjs.map +1 -0
  34. package/dist/client/SecrecyDbClient.d.ts +16 -48
  35. package/dist/client/SecrecyDbClient.js +2 -419
  36. package/dist/client/SecrecyDbClient.js.map +1 -0
  37. package/dist/client/SecrecyMailClient.cjs +2 -0
  38. package/dist/client/SecrecyMailClient.cjs.map +1 -0
  39. package/dist/client/SecrecyMailClient.d.ts +16 -42
  40. package/dist/client/SecrecyMailClient.js +2 -1022
  41. package/dist/client/SecrecyMailClient.js.map +1 -0
  42. package/dist/client/SecrecyPayClient.cjs +2 -0
  43. package/dist/client/SecrecyPayClient.cjs.map +1 -0
  44. package/dist/client/SecrecyPayClient.d.ts +16 -28
  45. package/dist/client/SecrecyPayClient.js +2 -68
  46. package/dist/client/SecrecyPayClient.js.map +1 -0
  47. package/dist/client/SecrecyWalletClient.cjs +2 -0
  48. package/dist/client/SecrecyWalletClient.cjs.map +1 -0
  49. package/dist/client/SecrecyWalletClient.d.ts +16 -30
  50. package/dist/client/SecrecyWalletClient.js +2 -73
  51. package/dist/client/SecrecyWalletClient.js.map +1 -0
  52. package/dist/client/convert/file.cjs +2 -0
  53. package/dist/client/convert/file.cjs.map +1 -0
  54. package/dist/client/convert/file.d.ts +11 -5
  55. package/dist/client/convert/file.js +2 -33
  56. package/dist/client/convert/file.js.map +1 -0
  57. package/dist/client/convert/mail.cjs +2 -0
  58. package/dist/client/convert/mail.cjs.map +1 -0
  59. package/dist/client/convert/mail.d.ts +13 -3
  60. package/dist/client/convert/mail.js +2 -42
  61. package/dist/client/convert/mail.js.map +1 -0
  62. package/dist/client/convert/node.cjs +2 -0
  63. package/dist/client/convert/node.cjs.map +1 -0
  64. package/dist/client/convert/node.d.ts +18 -9
  65. package/dist/client/convert/node.js +2 -87
  66. package/dist/client/convert/node.js.map +1 -0
  67. package/dist/client/helpers.cjs +2 -0
  68. package/dist/client/helpers.cjs.map +1 -0
  69. package/dist/client/helpers.d.ts +16 -28
  70. package/dist/client/helpers.js +2 -119
  71. package/dist/client/helpers.js.map +1 -0
  72. package/dist/client/index.cjs +2 -0
  73. package/dist/client/index.cjs.map +1 -0
  74. package/dist/client/index.d.ts +16 -34
  75. package/dist/client/index.js +2 -46
  76. package/dist/client/index.js.map +1 -0
  77. package/dist/client/storage.cjs +2 -0
  78. package/dist/client/storage.cjs.map +1 -0
  79. package/dist/client/storage.d.ts +6 -3
  80. package/dist/client/storage.js +2 -12
  81. package/dist/client/storage.js.map +1 -0
  82. package/dist/client/types/File.cjs +1 -0
  83. package/dist/client/types/File.cjs.map +1 -0
  84. package/dist/client/types/File.d.ts +9 -5
  85. package/dist/client/types/File.js +1 -3
  86. package/dist/client/types/File.js.map +1 -0
  87. package/dist/client/types/Inputs.cjs +1 -0
  88. package/dist/client/types/Inputs.cjs.map +1 -0
  89. package/dist/client/types/Inputs.d.ts +6 -4
  90. package/dist/client/types/Inputs.js +1 -3
  91. package/dist/client/types/Inputs.js.map +1 -0
  92. package/dist/client/types/Node.cjs +1 -0
  93. package/dist/client/types/Node.cjs.map +1 -0
  94. package/dist/client/types/Node.d.ts +9 -56
  95. package/dist/client/types/Node.js +1 -3
  96. package/dist/client/types/Node.js.map +1 -0
  97. package/dist/client/types/UserAppNotifications.cjs +1 -0
  98. package/dist/client/types/UserAppNotifications.cjs.map +1 -0
  99. package/dist/client/types/UserAppNotifications.d.ts +3 -1
  100. package/dist/client/types/UserAppNotifications.js +1 -3
  101. package/dist/client/types/UserAppNotifications.js.map +1 -0
  102. package/dist/client/types/UserAppSettings.cjs +1 -0
  103. package/dist/client/types/UserAppSettings.cjs.map +1 -0
  104. package/dist/client/types/UserAppSettings.d.ts +3 -1
  105. package/dist/client/types/UserAppSettings.js +1 -3
  106. package/dist/client/types/UserAppSettings.js.map +1 -0
  107. package/dist/client/types/index.cjs +2 -0
  108. package/dist/client/types/index.cjs.map +1 -0
  109. package/dist/client/types/index.d.ts +86 -30
  110. package/dist/client/types/index.js +2 -8
  111. package/dist/client/types/index.js.map +1 -0
  112. package/dist/client/types/selectors.cjs +2 -0
  113. package/dist/client/types/selectors.cjs.map +1 -0
  114. package/dist/client/types/selectors.d.ts +7 -5
  115. package/dist/client/types/selectors.js +2 -135
  116. package/dist/client/types/selectors.js.map +1 -0
  117. package/dist/crypto/file.cjs +2 -0
  118. package/dist/crypto/file.cjs.map +1 -0
  119. package/dist/crypto/file.d.ts +8 -6
  120. package/dist/crypto/file.js +2 -195
  121. package/dist/crypto/file.js.map +1 -0
  122. package/dist/crypto/index.cjs +2 -0
  123. package/dist/crypto/index.cjs.map +1 -0
  124. package/dist/crypto/index.d.ts +11 -9
  125. package/dist/crypto/index.js +2 -45
  126. package/dist/crypto/index.js.map +1 -0
  127. package/dist/error.cjs +1 -0
  128. package/dist/error.cjs.map +1 -0
  129. package/dist/error.d.ts +13 -11
  130. package/dist/error.js +1 -3
  131. package/dist/error.js.map +1 -0
  132. package/dist/index.cjs +2 -0
  133. package/dist/index.cjs.map +1 -0
  134. package/dist/index.d.ts +19 -14
  135. package/dist/index.js +2 -10
  136. package/dist/index.js.map +1 -0
  137. package/dist/minify/index.cjs +2 -0
  138. package/dist/minify/index.cjs.map +1 -0
  139. package/dist/minify/index.d.ts +4 -2
  140. package/dist/minify/index.js +2 -23
  141. package/dist/minify/index.js.map +1 -0
  142. package/dist/minify/lz4.cjs +3 -0
  143. package/dist/minify/lz4.cjs.map +1 -0
  144. package/dist/minify/lz4.d.ts +7 -5
  145. package/dist/minify/lz4.js +2 -538
  146. package/dist/minify/lz4.js.map +1 -0
  147. package/dist/sodium.cjs +2 -0
  148. package/dist/sodium.cjs.map +1 -0
  149. package/dist/sodium.d.ts +5 -3
  150. package/dist/sodium.js +2 -6
  151. package/dist/sodium.js.map +1 -0
  152. package/dist/utils/encoders.cjs +2 -0
  153. package/dist/utils/encoders.cjs.map +1 -0
  154. package/dist/utils/encoders.d.ts +6 -4
  155. package/dist/utils/encoders.js +2 -18
  156. package/dist/utils/encoders.js.map +1 -0
  157. package/dist/utils/store-buddy.cjs +2 -0
  158. package/dist/utils/store-buddy.cjs.map +1 -0
  159. package/dist/utils/store-buddy.d.ts +4 -3
  160. package/dist/utils/store-buddy.js +2 -58
  161. package/dist/utils/store-buddy.js.map +1 -0
  162. package/dist/utils/time.cjs +2 -0
  163. package/dist/utils/time.cjs.map +1 -0
  164. package/dist/utils/time.d.ts +4 -2
  165. package/dist/utils/time.js +2 -12
  166. package/dist/utils/time.js.map +1 -0
  167. package/dist/utils/utils.cjs +2 -0
  168. package/dist/utils/utils.cjs.map +1 -0
  169. package/dist/utils/utils.d.ts +6 -4
  170. package/dist/utils/utils.js +2 -47
  171. package/dist/utils/utils.js.map +1 -0
  172. package/dist/worker/md5.cjs +2 -0
  173. package/dist/worker/md5.cjs.map +1 -0
  174. package/dist/worker/md5.d.ts +3 -1
  175. package/dist/worker/md5.js +2 -24
  176. package/dist/worker/md5.js.map +1 -0
  177. package/dist/worker/sodium.cjs +2 -0
  178. package/dist/worker/sodium.cjs.map +1 -0
  179. package/dist/worker/sodium.d.ts +6 -3
  180. package/dist/worker/sodium.js +2 -118
  181. package/dist/worker/sodium.js.map +1 -0
  182. package/dist/worker/workerCodes.cjs +254 -0
  183. package/dist/worker/workerCodes.cjs.map +1 -0
  184. package/dist/worker/workerCodes.d.ts +4 -2
  185. package/dist/worker/workerCodes.js +4 -5
  186. package/dist/worker/workerCodes.js.map +1 -0
  187. package/dist/zeus/const.cjs +2 -0
  188. package/dist/zeus/const.cjs.map +1 -0
  189. package/dist/zeus/const.d.ts +5 -3
  190. package/dist/zeus/const.js +2 -1846
  191. package/dist/zeus/const.js.map +1 -0
  192. package/dist/zeus/index.cjs +5 -0
  193. package/dist/zeus/index.cjs.map +1 -0
  194. package/dist/zeus/index.d.ts +91 -89
  195. package/dist/zeus/index.js +5 -642
  196. package/dist/zeus/index.js.map +1 -0
  197. package/package.json +2 -2
@@ -1,419 +1,2 @@
1
- import _classPrivateFieldLooseBase from "@babel/runtime/helpers/classPrivateFieldLooseBase";
2
- import _classPrivateFieldLooseKey from "@babel/runtime/helpers/classPrivateFieldLooseKey";
3
- /* eslint-disable @typescript-eslint/naming-convention */
4
-
5
- import { encoders } from "../utils/encoders.js";
6
- import { serialize } from "bson";
7
- var _thunder = /*#__PURE__*/_classPrivateFieldLooseKey("thunder");
8
- export class SecrecyDbClient {
9
- // #client: SecrecyClient;
10
-
11
- // #keys: KeyPair;
12
-
13
- constructor(_client, _keys, thunder) {
14
- Object.defineProperty(this, _thunder, {
15
- writable: true,
16
- value: void 0
17
- });
18
- // this.#client = client;
19
- // this.#keys = keys;
20
- _classPrivateFieldLooseBase(this, _thunder)[_thunder] = thunder;
21
- }
22
-
23
- /**
24
- * Get the DbConfig by "env", it can be either "dev" or "prod".
25
- */
26
- async getDbConfig(_ref) {
27
- let {
28
- appId,
29
- env
30
- } = _ref;
31
- const {
32
- dbConfig
33
- } = await _classPrivateFieldLooseBase(this, _thunder)[_thunder]("query", {
34
- scalars: {
35
- Json: encoders.json
36
- }
37
- })({
38
- dbConfig: [{
39
- appId,
40
- env
41
- }, {
42
- "...on ErrorAccessDenied": {
43
- __typename: true,
44
- message: true
45
- },
46
- "...on ErrorNotFound": {
47
- __typename: true,
48
- message: true
49
- },
50
- "...on DbConfigResponse": {
51
- __typename: true,
52
- json: true
53
- }
54
- }]
55
- });
56
- if (!dbConfig) {
57
- return null;
58
- }
59
- if (dbConfig.__typename === "ErrorAccessDenied") {
60
- return dbConfig;
61
- }
62
- if (dbConfig.__typename === "ErrorNotFound") {
63
- return dbConfig;
64
- }
65
- return {
66
- __typename: "SuccessResponse",
67
- data: dbConfig.json
68
- };
69
- }
70
-
71
- /**
72
- * Get the difference recipe between two DB configurations.
73
- */
74
- async dbGetDiff(_ref2) {
75
- let {
76
- appId,
77
- env,
78
- config
79
- } = _ref2;
80
- const {
81
- dbGetDiff
82
- } = await _classPrivateFieldLooseBase(this, _thunder)[_thunder]("query", {
83
- scalars: {
84
- Json: encoders.json
85
- }
86
- })({
87
- dbGetDiff: [{
88
- appId,
89
- env,
90
- config
91
- }, {
92
- "...on ErrorBasic": {
93
- __typename: true,
94
- message: true
95
- },
96
- "...on ErrorAccessDenied": {
97
- __typename: true,
98
- message: true
99
- },
100
- "...on DbGetDiffConfigResponse": {
101
- __typename: true,
102
- dbGetDiffConfig: {
103
- env: true,
104
- current: true,
105
- next: true,
106
- diff: true,
107
- hash: true
108
- }
109
- }
110
- }]
111
- });
112
- if (!dbGetDiff) {
113
- return null;
114
- }
115
- if (dbGetDiff.__typename === "ErrorBasic") {
116
- return dbGetDiff;
117
- }
118
- if (dbGetDiff.__typename === "ErrorAccessDenied") {
119
- return dbGetDiff;
120
- }
121
- return {
122
- __typename: "SuccessResponse",
123
- data: dbGetDiff.dbGetDiffConfig
124
- };
125
- }
126
-
127
- /**
128
- * Set the DbConfig by "env", it can be either "dev" or "prod".
129
- *
130
- * Mostly used for hotfixes on production or common changes on development.
131
- */
132
- async setDbConfig(_ref3) {
133
- let {
134
- appId,
135
- env,
136
- config
137
- } = _ref3;
138
- const {
139
- dbConfigMutation
140
- } = await _classPrivateFieldLooseBase(this, _thunder)[_thunder]("mutation", {
141
- scalars: {
142
- Json: encoders.json
143
- }
144
- })({
145
- dbConfigMutation: [{
146
- appId,
147
- env,
148
- config
149
- }, {
150
- "...on ErrorAccessDenied": {
151
- __typename: true,
152
- message: true
153
- },
154
- "...on ErrorBasic": {
155
- __typename: true,
156
- message: true
157
- },
158
- "...on DbConfigMutationResponse": {
159
- __typename: true,
160
- dbConfigMutation: true
161
- }
162
- }]
163
- });
164
- if (!dbConfigMutation) {
165
- return null;
166
- }
167
- if (dbConfigMutation.__typename === "ErrorBasic") {
168
- return dbConfigMutation;
169
- }
170
- if (dbConfigMutation.__typename === "ErrorAccessDenied") {
171
- return dbConfigMutation;
172
- }
173
- return {
174
- __typename: "SuccessResponse",
175
- data: dbConfigMutation.dbConfigMutation
176
- };
177
- }
178
-
179
- /**
180
- * Push the dbConfigDev to the dbCongigProd.
181
- *
182
- * It requires a diffHash to verify that the developer has validated his changes.
183
- */
184
- async dbConfigPushToProd(_ref4) {
185
- let {
186
- appId,
187
- diffHash
188
- } = _ref4;
189
- const {
190
- dbConfigToProdMutation
191
- } = await _classPrivateFieldLooseBase(this, _thunder)[_thunder]("mutation", {
192
- scalars: {
193
- Json: encoders.json
194
- }
195
- })({
196
- dbConfigToProdMutation: [{
197
- appId,
198
- diffHash
199
- }, {
200
- "...on ErrorAccessDenied": {
201
- __typename: true,
202
- message: true
203
- },
204
- "...on ErrorBasic": {
205
- __typename: true,
206
- message: true
207
- },
208
- "...on DbConfigToProdMutationResponse": {
209
- __typename: true,
210
- dbConfigToProdMutation: true
211
- }
212
- }]
213
- });
214
- if (!dbConfigToProdMutation) {
215
- return null;
216
- }
217
- if (dbConfigToProdMutation.__typename === "ErrorBasic") {
218
- return dbConfigToProdMutation;
219
- }
220
- if (dbConfigToProdMutation.__typename === "ErrorAccessDenied") {
221
- return dbConfigToProdMutation;
222
- }
223
- return {
224
- __typename: "SuccessResponse",
225
- data: dbConfigToProdMutation.dbConfigToProdMutation
226
- };
227
- }
228
-
229
- /**
230
- * Get the value of a field.
231
- */
232
- async get(_ref5) {
233
- let {
234
- field,
235
- appId,
236
- userId,
237
- env
238
- } = _ref5;
239
- const {
240
- dbGet
241
- } = await _classPrivateFieldLooseBase(this, _thunder)[_thunder]("query")({
242
- dbGet: [{
243
- field,
244
- appId,
245
- userId,
246
- env
247
- }, {
248
- "...on ErrorAccessDenied": {
249
- __typename: true,
250
- message: true
251
- },
252
- "...on ErrorBasic": {
253
- __typename: true,
254
- message: true
255
- },
256
- "...on ErrorNotExist": {
257
- __typename: true,
258
- message: true
259
- },
260
- "...on ErrorNotFound": {
261
- __typename: true,
262
- message: true
263
- },
264
- "...on DbGetResponse": {
265
- __typename: true,
266
- json: true
267
- }
268
- }]
269
- });
270
- if (!dbGet) {
271
- return null;
272
- }
273
- if (dbGet.__typename === "ErrorAccessDenied") {
274
- return dbGet;
275
- }
276
- if (dbGet.__typename === "ErrorBasic") {
277
- return dbGet;
278
- }
279
- if (dbGet.__typename === "ErrorNotExist") {
280
- return dbGet;
281
- }
282
- if (dbGet.__typename === "ErrorNotFound") {
283
- return dbGet;
284
- }
285
- return {
286
- __typename: "SuccessResponse",
287
- data: dbGet.json.res
288
- };
289
- }
290
-
291
- /**
292
- * Set an user document.
293
- */
294
- async set(_ref6) {
295
- let {
296
- value,
297
- appId,
298
- env,
299
- userId
300
- } = _ref6;
301
- if (typeof value !== "object") {
302
- throw new Error(`value should be an object including fields you want to update.`);
303
- }
304
- const {
305
- dbSet
306
- } = await _classPrivateFieldLooseBase(this, _thunder)[_thunder]("mutation")({
307
- dbSet: [{
308
- userId,
309
- appId,
310
- env,
311
- value: serialize(value).toString("base64")
312
- }, {
313
- "...on ErrorAccessDenied": {
314
- __typename: true,
315
- message: true
316
- },
317
- "...on ErrorBasic": {
318
- __typename: true,
319
- message: true
320
- },
321
- "...on ErrorNotFound": {
322
- __typename: true,
323
- message: true
324
- },
325
- "...on DbSetResponse": {
326
- __typename: true,
327
- dbSet: true
328
- }
329
- }]
330
- });
331
- if (!dbSet) {
332
- return null;
333
- }
334
- if (dbSet.__typename === "ErrorAccessDenied") {
335
- return dbSet;
336
- }
337
- if (dbSet.__typename === "ErrorNotFound") {
338
- return dbSet;
339
- }
340
- if (dbSet.__typename === "ErrorBasic") {
341
- return dbSet;
342
- }
343
- if (!dbSet.dbSet) {
344
- return null;
345
- }
346
- return {
347
- __typename: "SuccessResponse",
348
- data: dbSet.dbSet.res
349
- };
350
- }
351
-
352
- /**
353
- * Searches for user fields that match the search arguments.
354
- */
355
- async search(_ref7) {
356
- let {
357
- appId,
358
- env,
359
- search,
360
- field,
361
- take,
362
- skip,
363
- orderBy
364
- } = _ref7;
365
- const {
366
- dbSearch
367
- } = await _classPrivateFieldLooseBase(this, _thunder)[_thunder]("query", {
368
- scalars: {
369
- Json: encoders.json,
370
- DateTime: encoders.dateTime,
371
- BigInt: encoders.bigInt
372
- }
373
- })({
374
- dbSearch: [{
375
- appId,
376
- env,
377
- field,
378
- search,
379
- take,
380
- skip,
381
- orderBy
382
- }, {
383
- "...on ErrorAccessDenied": {
384
- __typename: true,
385
- message: true
386
- },
387
- "...on ErrorBasic": {
388
- __typename: true,
389
- message: true
390
- },
391
- "...on ErrorNotExist": {
392
- __typename: true,
393
- message: true
394
- },
395
- "...on DbSearchResponse": {
396
- __typename: true,
397
- json: true
398
- }
399
- }]
400
- });
401
- if (!dbSearch) {
402
- return null;
403
- }
404
- if (dbSearch.__typename === "ErrorAccessDenied") {
405
- return dbSearch;
406
- }
407
- if (dbSearch.__typename === "ErrorBasic") {
408
- return dbSearch;
409
- }
410
- if (dbSearch.__typename === "ErrorNotExist") {
411
- return dbSearch;
412
- }
413
- return {
414
- __typename: "SuccessResponse",
415
- data: dbSearch.json
416
- };
417
- }
418
- }
419
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbmNvZGVycyIsInNlcmlhbGl6ZSIsIlNlY3JlY3lEYkNsaWVudCIsImNvbnN0cnVjdG9yIiwiX2NsaWVudCIsIl9rZXlzIiwidGh1bmRlciIsImdldERiQ29uZmlnIiwiYXBwSWQiLCJlbnYiLCJkYkNvbmZpZyIsInNjYWxhcnMiLCJKc29uIiwianNvbiIsIl9fdHlwZW5hbWUiLCJtZXNzYWdlIiwiZGF0YSIsImRiR2V0RGlmZiIsImNvbmZpZyIsImRiR2V0RGlmZkNvbmZpZyIsImN1cnJlbnQiLCJuZXh0IiwiZGlmZiIsImhhc2giLCJzZXREYkNvbmZpZyIsImRiQ29uZmlnTXV0YXRpb24iLCJkYkNvbmZpZ1B1c2hUb1Byb2QiLCJkaWZmSGFzaCIsImRiQ29uZmlnVG9Qcm9kTXV0YXRpb24iLCJnZXQiLCJmaWVsZCIsInVzZXJJZCIsImRiR2V0IiwicmVzIiwic2V0IiwidmFsdWUiLCJFcnJvciIsImRiU2V0IiwidG9TdHJpbmciLCJzZWFyY2giLCJ0YWtlIiwic2tpcCIsIm9yZGVyQnkiLCJkYlNlYXJjaCIsIkRhdGVUaW1lIiwiZGF0ZVRpbWUiLCJCaWdJbnQiLCJiaWdJbnQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L1NlY3JlY3lEYkNsaWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gKi9cbmltcG9ydCB0eXBlIHsgU2VjcmVjeUNsaWVudCwgU3VjY2Vzc1Jlc3BvbnNlLCBVc2VyRGF0YSB9IGZyb20gXCIuLi9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBLZXlQYWlyIH0gZnJvbSBcIi4uL2NyeXB0by9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUge1xuICBFcnJvckFjY2Vzc0RlbmllZCxcbiAgRXJyb3JCYXNpYyxcbiAgRXJyb3JOb3RFeGlzdCxcbiAgRXJyb3JOb3RGb3VuZFxufSBmcm9tIFwiLi4vZXJyb3IuanNcIjtcbmltcG9ydCB7IGVuY29kZXJzIH0gZnJvbSBcIi4uL3V0aWxzL2VuY29kZXJzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IE1vbmdvRGJFbnYsIFRodW5kZXIgfSBmcm9tIFwiLi4vemV1cy9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBEb2N1bWVudCB9IGZyb20gXCJic29uXCI7XG5pbXBvcnQgeyBzZXJpYWxpemUgfSBmcm9tIFwiYnNvblwiO1xuXG5leHBvcnQgY2xhc3MgU2VjcmVjeURiQ2xpZW50IHtcbiAgLy8gI2NsaWVudDogU2VjcmVjeUNsaWVudDtcblxuICAvLyAja2V5czogS2V5UGFpcjtcblxuICAjdGh1bmRlcjogUmV0dXJuVHlwZTx0eXBlb2YgVGh1bmRlcj47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgX2NsaWVudDogU2VjcmVjeUNsaWVudCxcbiAgICBfa2V5czogS2V5UGFpcixcbiAgICB0aHVuZGVyOiBSZXR1cm5UeXBlPHR5cGVvZiBUaHVuZGVyPlxuICApIHtcbiAgICAvLyB0aGlzLiNjbGllbnQgPSBjbGllbnQ7XG4gICAgLy8gdGhpcy4ja2V5cyA9IGtleXM7XG4gICAgdGhpcy4jdGh1bmRlciA9IHRodW5kZXI7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBEYkNvbmZpZyBieSBcImVudlwiLCBpdCBjYW4gYmUgZWl0aGVyIFwiZGV2XCIgb3IgXCJwcm9kXCIuXG4gICAqL1xuICBhc3luYyBnZXREYkNvbmZpZzxUPih7XG4gICAgYXBwSWQsXG4gICAgZW52XG4gIH06IHtcbiAgICBhcHBJZDogc3RyaW5nO1xuICAgIGVudjogTW9uZ29EYkVudjtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPFQ+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBFcnJvck5vdEZvdW5kIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZGJDb25maWcgfSA9IGF3YWl0IHRoaXMuI3RodW5kZXIoXCJxdWVyeVwiLCB7XG4gICAgICBzY2FsYXJzOiB7XG4gICAgICAgIEpzb246IGVuY29kZXJzLmpzb25cbiAgICAgIH1cbiAgICB9KSh7XG4gICAgICBkYkNvbmZpZzogW1xuICAgICAgICB7XG4gICAgICAgICAgYXBwSWQsXG4gICAgICAgICAgZW52XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJDb25maWdSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAganNvbjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkYkNvbmZpZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRiQ29uZmlnLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRiQ29uZmlnO1xuICAgIH1cblxuICAgIGlmIChkYkNvbmZpZy5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIGRiQ29uZmlnO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGJDb25maWcuanNvbiBhcyBUXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRpZmZlcmVuY2UgcmVjaXBlIGJldHdlZW4gdHdvIERCIGNvbmZpZ3VyYXRpb25zLlxuICAgKi9cbiAgYXN5bmMgZGJHZXREaWZmPFQ+KHtcbiAgICBhcHBJZCxcbiAgICBlbnYsXG4gICAgY29uZmlnXG4gIH06IHtcbiAgICBhcHBJZDogc3RyaW5nO1xuICAgIGVudjogTW9uZ29EYkVudjtcbiAgICBjb25maWc6IHN0cmluZztcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPFQ+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBFcnJvckJhc2ljIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZGJHZXREaWZmIH0gPSBhd2FpdCB0aGlzLiN0aHVuZGVyKFwicXVlcnlcIiwge1xuICAgICAgc2NhbGFyczoge1xuICAgICAgICBKc29uOiBlbmNvZGVycy5qc29uXG4gICAgICB9XG4gICAgfSkoe1xuICAgICAgZGJHZXREaWZmOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhcHBJZCxcbiAgICAgICAgICBlbnYsXG4gICAgICAgICAgY29uZmlnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQmFzaWNcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJHZXREaWZmQ29uZmlnUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGRiR2V0RGlmZkNvbmZpZzoge1xuICAgICAgICAgICAgICBlbnY6IHRydWUsXG4gICAgICAgICAgICAgIGN1cnJlbnQ6IHRydWUsXG4gICAgICAgICAgICAgIG5leHQ6IHRydWUsXG4gICAgICAgICAgICAgIGRpZmY6IHRydWUsXG4gICAgICAgICAgICAgIGhhc2g6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGJHZXREaWZmKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGJHZXREaWZmLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JCYXNpY1wiKSB7XG4gICAgICByZXR1cm4gZGJHZXREaWZmO1xuICAgIH1cblxuICAgIGlmIChkYkdldERpZmYuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGJHZXREaWZmO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGJHZXREaWZmLmRiR2V0RGlmZkNvbmZpZyBhcyBUXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIERiQ29uZmlnIGJ5IFwiZW52XCIsIGl0IGNhbiBiZSBlaXRoZXIgXCJkZXZcIiBvciBcInByb2RcIi5cbiAgICpcbiAgICogTW9zdGx5IHVzZWQgZm9yIGhvdGZpeGVzIG9uIHByb2R1Y3Rpb24gb3IgY29tbW9uIGNoYW5nZXMgb24gZGV2ZWxvcG1lbnQuXG4gICAqL1xuICBhc3luYyBzZXREYkNvbmZpZzxUPih7XG4gICAgYXBwSWQsXG4gICAgZW52LFxuICAgIGNvbmZpZ1xuICB9OiB7XG4gICAgYXBwSWQ6IHN0cmluZztcbiAgICBlbnY6IE1vbmdvRGJFbnY7XG4gICAgY29uZmlnOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxUPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JCYXNpYyB8IG51bGw+IHtcbiAgICBjb25zdCB7IGRiQ29uZmlnTXV0YXRpb24gfSA9IGF3YWl0IHRoaXMuI3RodW5kZXIoXCJtdXRhdGlvblwiLCB7XG4gICAgICBzY2FsYXJzOiB7XG4gICAgICAgIEpzb246IGVuY29kZXJzLmpzb25cbiAgICAgIH1cbiAgICB9KSh7XG4gICAgICBkYkNvbmZpZ011dGF0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhcHBJZCxcbiAgICAgICAgICBlbnYsXG4gICAgICAgICAgY29uZmlnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQmFzaWNcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJDb25maWdNdXRhdGlvblJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkYkNvbmZpZ011dGF0aW9uOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRiQ29uZmlnTXV0YXRpb24pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkYkNvbmZpZ011dGF0aW9uLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JCYXNpY1wiKSB7XG4gICAgICByZXR1cm4gZGJDb25maWdNdXRhdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoZGJDb25maWdNdXRhdGlvbi5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkYkNvbmZpZ011dGF0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGJDb25maWdNdXRhdGlvbi5kYkNvbmZpZ011dGF0aW9uIGFzIFRcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFB1c2ggdGhlIGRiQ29uZmlnRGV2IHRvIHRoZSBkYkNvbmdpZ1Byb2QuXG4gICAqXG4gICAqIEl0IHJlcXVpcmVzIGEgZGlmZkhhc2ggdG8gdmVyaWZ5IHRoYXQgdGhlIGRldmVsb3BlciBoYXMgdmFsaWRhdGVkIGhpcyBjaGFuZ2VzLlxuICAgKi9cbiAgYXN5bmMgZGJDb25maWdQdXNoVG9Qcm9kPFQ+KHtcbiAgICBhcHBJZCxcbiAgICBkaWZmSGFzaFxuICB9OiB7XG4gICAgYXBwSWQ6IHN0cmluZztcbiAgICBkaWZmSGFzaDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8VD4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yQmFzaWMgfCBudWxsPiB7XG4gICAgY29uc3QgeyBkYkNvbmZpZ1RvUHJvZE11dGF0aW9uIH0gPSBhd2FpdCB0aGlzLiN0aHVuZGVyKFwibXV0YXRpb25cIiwge1xuICAgICAgc2NhbGFyczoge1xuICAgICAgICBKc29uOiBlbmNvZGVycy5qc29uXG4gICAgICB9XG4gICAgfSkoe1xuICAgICAgZGJDb25maWdUb1Byb2RNdXRhdGlvbjogW1xuICAgICAgICB7XG4gICAgICAgICAgYXBwSWQsXG4gICAgICAgICAgZGlmZkhhc2hcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEYkNvbmZpZ1RvUHJvZE11dGF0aW9uUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGRiQ29uZmlnVG9Qcm9kTXV0YXRpb246IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGJDb25maWdUb1Byb2RNdXRhdGlvbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRiQ29uZmlnVG9Qcm9kTXV0YXRpb24uX190eXBlbmFtZSA9PT0gXCJFcnJvckJhc2ljXCIpIHtcbiAgICAgIHJldHVybiBkYkNvbmZpZ1RvUHJvZE11dGF0aW9uO1xuICAgIH1cblxuICAgIGlmIChkYkNvbmZpZ1RvUHJvZE11dGF0aW9uLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRiQ29uZmlnVG9Qcm9kTXV0YXRpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkYkNvbmZpZ1RvUHJvZE11dGF0aW9uLmRiQ29uZmlnVG9Qcm9kTXV0YXRpb24gYXMgVFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB2YWx1ZSBvZiBhIGZpZWxkLlxuICAgKi9cbiAgYXN5bmMgZ2V0PFU+KHtcbiAgICBmaWVsZCxcbiAgICBhcHBJZCxcbiAgICB1c2VySWQsXG4gICAgZW52XG4gIH06IHtcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIGFwcElkOiBzdHJpbmc7XG4gICAgZW52OiBNb25nb0RiRW52O1xuICAgIHVzZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFxuICAgIHwgU3VjY2Vzc1Jlc3BvbnNlPFU+XG4gICAgfCBFcnJvckFjY2Vzc0RlbmllZFxuICAgIHwgRXJyb3JCYXNpY1xuICAgIHwgRXJyb3JOb3RFeGlzdFxuICAgIHwgRXJyb3JOb3RGb3VuZFxuICAgIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IGRiR2V0IH0gPSBhd2FpdCB0aGlzLiN0aHVuZGVyKFwicXVlcnlcIikoe1xuICAgICAgZGJHZXQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgIGFwcElkLFxuICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICBlbnZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEV4aXN0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJHZXRSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAganNvbjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkYkdldCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRiR2V0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRiR2V0O1xuICAgIH1cblxuICAgIGlmIChkYkdldC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIGRiR2V0O1xuICAgIH1cblxuICAgIGlmIChkYkdldC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGRiR2V0O1xuICAgIH1cblxuICAgIGlmIChkYkdldC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIGRiR2V0O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogKGRiR2V0Lmpzb24gYXMgeyByZXM6IFUgfSkucmVzXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYW4gdXNlciBkb2N1bWVudC5cbiAgICovXG4gIGFzeW5jIHNldDxUIGV4dGVuZHMgVXNlckRhdGEsIFUgZXh0ZW5kcyBEb2N1bWVudD4oe1xuICAgIHZhbHVlLFxuICAgIGFwcElkLFxuICAgIGVudixcbiAgICB1c2VySWRcbiAgfToge1xuICAgIHZhbHVlOiBVO1xuICAgIGFwcElkOiBzdHJpbmc7XG4gICAgZW52OiBNb25nb0RiRW52O1xuICAgIHVzZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxUPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JCYXNpYyB8IEVycm9yTm90Rm91bmQgfCBudWxsXG4gID4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHZhbHVlIHNob3VsZCBiZSBhbiBvYmplY3QgaW5jbHVkaW5nIGZpZWxkcyB5b3Ugd2FudCB0byB1cGRhdGUuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGRiU2V0IH0gPSBhd2FpdCB0aGlzLiN0aHVuZGVyKFwibXV0YXRpb25cIikoe1xuICAgICAgZGJTZXQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICBhcHBJZCxcbiAgICAgICAgICBlbnYsXG4gICAgICAgICAgdmFsdWU6IHNlcmlhbGl6ZSh2YWx1ZSkudG9TdHJpbmcoXCJiYXNlNjRcIilcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERiU2V0UmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGRiU2V0OiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRiU2V0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGJTZXQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGJTZXQ7XG4gICAgfVxuXG4gICAgaWYgKGRiU2V0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gZGJTZXQ7XG4gICAgfVxuXG4gICAgaWYgKGRiU2V0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JCYXNpY1wiKSB7XG4gICAgICByZXR1cm4gZGJTZXQ7XG4gICAgfVxuXG4gICAgaWYgKCFkYlNldC5kYlNldCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiAoZGJTZXQuZGJTZXQgYXMgeyByZXM6IFQgfSkucmVzXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyBmb3IgdXNlciBmaWVsZHMgdGhhdCBtYXRjaCB0aGUgc2VhcmNoIGFyZ3VtZW50cy5cbiAgICovXG4gIGFzeW5jIHNlYXJjaDxUPih7XG4gICAgYXBwSWQsXG4gICAgZW52LFxuICAgIHNlYXJjaCxcbiAgICBmaWVsZCxcbiAgICB0YWtlLFxuICAgIHNraXAsXG4gICAgb3JkZXJCeVxuICB9OiB7XG4gICAgYXBwSWQ6IHN0cmluZztcbiAgICBlbnY6IE1vbmdvRGJFbnY7XG4gICAgZmllbGQ6IHN0cmluZztcbiAgICBzZWFyY2g6IHN0cmluZztcbiAgICB0YWtlPzogbnVtYmVyO1xuICAgIHNraXA/OiBudW1iZXI7XG4gICAgb3JkZXJCeT86IFwiY3JlYXRlZEF0X0FTQ1wiIHwgXCJjcmVhdGVkQXRfREVTQ1wiO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8VFtdPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JCYXNpYyB8IEVycm9yTm90RXhpc3QgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZGJTZWFyY2ggfSA9IGF3YWl0IHRoaXMuI3RodW5kZXIoXCJxdWVyeVwiLCB7XG4gICAgICBzY2FsYXJzOiB7XG4gICAgICAgIEpzb246IGVuY29kZXJzLmpzb24sXG4gICAgICAgIERhdGVUaW1lOiBlbmNvZGVycy5kYXRlVGltZSxcbiAgICAgICAgQmlnSW50OiBlbmNvZGVycy5iaWdJbnRcbiAgICAgIH1cbiAgICB9KSh7XG4gICAgICBkYlNlYXJjaDogW1xuICAgICAgICB7XG4gICAgICAgICAgYXBwSWQsXG4gICAgICAgICAgZW52LFxuICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgIHNlYXJjaCxcbiAgICAgICAgICB0YWtlLFxuICAgICAgICAgIHNraXAsXG4gICAgICAgICAgb3JkZXJCeVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvckJhc2ljXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90RXhpc3RcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJTZWFyY2hSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAganNvbjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkYlNlYXJjaCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRiU2VhcmNoLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRiU2VhcmNoO1xuICAgIH1cblxuICAgIGlmIChkYlNlYXJjaC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIGRiU2VhcmNoO1xuICAgIH1cblxuICAgIGlmIChkYlNlYXJjaC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGRiU2VhcmNoO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGJTZWFyY2guanNvbiBhcyB1bmtub3duIGFzIFRbXVxuICAgIH07XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7QUFTQSxTQUFTQSxRQUFRLFFBQVEsc0JBQXNCO0FBRy9DLFNBQVNDLFNBQVMsUUFBUSxNQUFNO0FBQUM7QUFFakMsT0FBTyxNQUFNQyxlQUFlLENBQUM7RUFDM0I7O0VBRUE7O0VBSUFDLFdBQVcsQ0FDVEMsT0FBc0IsRUFDdEJDLEtBQWMsRUFDZEMsT0FBbUMsRUFDbkM7SUFBQTtNQUFBO01BQUE7SUFBQTtJQUNBO0lBQ0E7SUFDQSxnQ0FBSSx3QkFBWUEsT0FBTztFQUN6Qjs7RUFFQTtBQUNGO0FBQ0E7RUFDRSxNQUFNQyxXQUFXLE9BTTBEO0lBQUEsSUFOdEQ7TUFDbkJDLEtBQUs7TUFDTEM7SUFJRixDQUFDO0lBQ0MsTUFBTTtNQUFFQztJQUFTLENBQUMsR0FBRyxNQUFNLGdDQUFJLHNCQUFVLE9BQU8sRUFBRTtNQUNoREMsT0FBTyxFQUFFO1FBQ1BDLElBQUksRUFBRVosUUFBUSxDQUFDYTtNQUNqQjtJQUNGLENBQUMsRUFBRTtNQUNESCxRQUFRLEVBQUUsQ0FDUjtRQUNFRixLQUFLO1FBQ0xDO01BQ0YsQ0FBQyxFQUNEO1FBQ0UseUJBQXlCLEVBQUU7VUFDekJLLFVBQVUsRUFBRSxJQUFJO1VBQ2hCQyxPQUFPLEVBQUU7UUFDWCxDQUFDO1FBQ0QscUJBQXFCLEVBQUU7VUFDckJELFVBQVUsRUFBRSxJQUFJO1VBQ2hCQyxPQUFPLEVBQUU7UUFDWCxDQUFDO1FBQ0Qsd0JBQXdCLEVBQUU7VUFDeEJELFVBQVUsRUFBRSxJQUFJO1VBQ2hCRCxJQUFJLEVBQUU7UUFDUjtNQUNGLENBQUM7SUFFTCxDQUFDLENBQUM7SUFFRixJQUFJLENBQUNILFFBQVEsRUFBRTtNQUNiLE9BQU8sSUFBSTtJQUNiO0lBRUEsSUFBSUEsUUFBUSxDQUFDSSxVQUFVLEtBQUssbUJBQW1CLEVBQUU7TUFD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
1
+ import{encoders as a}from"../utils/encoders.js";import{serialize as c}from"bson";class m{#e;constructor(t,s,e){this.#e=e}async getDbConfig({appId:t,env:s}){const{dbConfig:e}=await this.#e("query",{scalars:{Json:a.json}})({dbConfig:[{appId:t,env:s},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on DbConfigResponse":{__typename:!0,json:!0}}]});return e?e.__typename==="ErrorAccessDenied"||e.__typename==="ErrorNotFound"?e:{__typename:"SuccessResponse",data:e.json}:null}async dbGetDiff({appId:t,env:s,config:e}){const{dbGetDiff:n}=await this.#e("query",{scalars:{Json:a.json}})({dbGetDiff:[{appId:t,env:s,config:e},{"...on ErrorBasic":{__typename:!0,message:!0},"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DbGetDiffConfigResponse":{__typename:!0,dbGetDiffConfig:{env:!0,current:!0,next:!0,diff:!0,hash:!0}}}]});return n?n.__typename==="ErrorBasic"||n.__typename==="ErrorAccessDenied"?n:{__typename:"SuccessResponse",data:n.dbGetDiffConfig}:null}async setDbConfig({appId:t,env:s,config:e}){const{dbConfigMutation:n}=await this.#e("mutation",{scalars:{Json:a.json}})({dbConfigMutation:[{appId:t,env:s,config:e},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on DbConfigMutationResponse":{__typename:!0,dbConfigMutation:!0}}]});return n?n.__typename==="ErrorBasic"||n.__typename==="ErrorAccessDenied"?n:{__typename:"SuccessResponse",data:n.dbConfigMutation}:null}async dbConfigPushToProd({appId:t,diffHash:s}){const{dbConfigToProdMutation:e}=await this.#e("mutation",{scalars:{Json:a.json}})({dbConfigToProdMutation:[{appId:t,diffHash:s},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on DbConfigToProdMutationResponse":{__typename:!0,dbConfigToProdMutation:!0}}]});return e?e.__typename==="ErrorBasic"||e.__typename==="ErrorAccessDenied"?e:{__typename:"SuccessResponse",data:e.dbConfigToProdMutation}:null}async get({field:t,appId:s,userId:e,env:n}){const{dbGet:r}=await this.#e("query")({dbGet:[{field:t,appId:s,userId:e,env:n},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on DbGetResponse":{__typename:!0,json:!0}}]});return r?r.__typename==="ErrorAccessDenied"||r.__typename==="ErrorBasic"||r.__typename==="ErrorNotExist"||r.__typename==="ErrorNotFound"?r:{__typename:"SuccessResponse",data:r.json.res}:null}async set({value:t,appId:s,env:e,userId:n}){if(typeof t!="object")throw new Error("value should be an object including fields you want to update.");const{dbSet:r}=await this.#e("mutation")({dbSet:[{userId:n,appId:s,env:e,value:c(t).toString("base64")},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on DbSetResponse":{__typename:!0,dbSet:!0}}]});return r?r.__typename==="ErrorAccessDenied"||r.__typename==="ErrorNotFound"||r.__typename==="ErrorBasic"?r:r.dbSet?{__typename:"SuccessResponse",data:r.dbSet.res}:null:null}async search({appId:t,env:s,search:e,field:n,take:r,skip:i,orderBy:u}){const{dbSearch:o}=await this.#e("query",{scalars:{Json:a.json,DateTime:a.dateTime,BigInt:a.bigInt}})({dbSearch:[{appId:t,env:s,field:n,search:e,take:r,skip:i,orderBy:u},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on DbSearchResponse":{__typename:!0,json:!0}}]});return o?o.__typename==="ErrorAccessDenied"||o.__typename==="ErrorBasic"||o.__typename==="ErrorNotExist"?o:{__typename:"SuccessResponse",data:o.json}:null}}export{m as SecrecyDbClient};
2
+ //# sourceMappingURL=SecrecyDbClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/client/SecrecyDbClient.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport type { SecrecyClient, SuccessResponse, UserData } from \"../index.js\";\nimport type { KeyPair } from \"../crypto/index.js\";\nimport type {\n ErrorAccessDenied,\n ErrorBasic,\n ErrorNotExist,\n ErrorNotFound\n} from \"../error.js\";\nimport { encoders } from \"../utils/encoders.js\";\nimport type { MongoDbEnv, Thunder } from \"../zeus/index.js\";\nimport type { Document } from \"bson\";\nimport { serialize } from \"bson\";\n\nexport class SecrecyDbClient {\n // #client: SecrecyClient;\n\n // #keys: KeyPair;\n\n #thunder: ReturnType<typeof Thunder>;\n\n constructor(\n _client: SecrecyClient,\n _keys: KeyPair,\n thunder: ReturnType<typeof Thunder>\n ) {\n // this.#client = client;\n // this.#keys = keys;\n this.#thunder = thunder;\n }\n\n /**\n * Get the DbConfig by \"env\", it can be either \"dev\" or \"prod\".\n */\n async getDbConfig<T>({\n appId,\n env\n }: {\n appId: string;\n env: MongoDbEnv;\n }): Promise<SuccessResponse<T> | ErrorAccessDenied | ErrorNotFound | null> {\n const { dbConfig } = await this.#thunder(\"query\", {\n scalars: {\n Json: encoders.json\n }\n })({\n dbConfig: [\n {\n appId,\n env\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on DbConfigResponse\": {\n __typename: true,\n json: true\n }\n }\n ]\n });\n\n if (!dbConfig) {\n return null;\n }\n\n if (dbConfig.__typename === \"ErrorAccessDenied\") {\n return dbConfig;\n }\n\n if (dbConfig.__typename === \"ErrorNotFound\") {\n return dbConfig;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: dbConfig.json as T\n };\n }\n\n /**\n * Get the difference recipe between two DB configurations.\n */\n async dbGetDiff<T>({\n appId,\n env,\n config\n }: {\n appId: string;\n env: MongoDbEnv;\n config: string;\n }): Promise<SuccessResponse<T> | ErrorAccessDenied | ErrorBasic | null> {\n const { dbGetDiff } = await this.#thunder(\"query\", {\n scalars: {\n Json: encoders.json\n }\n })({\n dbGetDiff: [\n {\n appId,\n env,\n config\n },\n {\n \"...on ErrorBasic\": {\n __typename: true,\n message: true\n },\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DbGetDiffConfigResponse\": {\n __typename: true,\n dbGetDiffConfig: {\n env: true,\n current: true,\n next: true,\n diff: true,\n hash: true\n }\n }\n }\n ]\n });\n\n if (!dbGetDiff) {\n return null;\n }\n\n if (dbGetDiff.__typename === \"ErrorBasic\") {\n return dbGetDiff;\n }\n\n if (dbGetDiff.__typename === \"ErrorAccessDenied\") {\n return dbGetDiff;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: dbGetDiff.dbGetDiffConfig as T\n };\n }\n\n /**\n * Set the DbConfig by \"env\", it can be either \"dev\" or \"prod\".\n *\n * Mostly used for hotfixes on production or common changes on development.\n */\n async setDbConfig<T>({\n appId,\n env,\n config\n }: {\n appId: string;\n env: MongoDbEnv;\n config: string;\n }): Promise<SuccessResponse<T> | ErrorAccessDenied | ErrorBasic | null> {\n const { dbConfigMutation } = await this.#thunder(\"mutation\", {\n scalars: {\n Json: encoders.json\n }\n })({\n dbConfigMutation: [\n {\n appId,\n env,\n config\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorBasic\": {\n __typename: true,\n message: true\n },\n \"...on DbConfigMutationResponse\": {\n __typename: true,\n dbConfigMutation: true\n }\n }\n ]\n });\n\n if (!dbConfigMutation) {\n return null;\n }\n\n if (dbConfigMutation.__typename === \"ErrorBasic\") {\n return dbConfigMutation;\n }\n\n if (dbConfigMutation.__typename === \"ErrorAccessDenied\") {\n return dbConfigMutation;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: dbConfigMutation.dbConfigMutation as T\n };\n }\n\n /**\n * Push the dbConfigDev to the dbCongigProd.\n *\n * It requires a diffHash to verify that the developer has validated his changes.\n */\n async dbConfigPushToProd<T>({\n appId,\n diffHash\n }: {\n appId: string;\n diffHash: string;\n }): Promise<SuccessResponse<T> | ErrorAccessDenied | ErrorBasic | null> {\n const { dbConfigToProdMutation } = await this.#thunder(\"mutation\", {\n scalars: {\n Json: encoders.json\n }\n })({\n dbConfigToProdMutation: [\n {\n appId,\n diffHash\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorBasic\": {\n __typename: true,\n message: true\n },\n \"...on DbConfigToProdMutationResponse\": {\n __typename: true,\n dbConfigToProdMutation: true\n }\n }\n ]\n });\n\n if (!dbConfigToProdMutation) {\n return null;\n }\n\n if (dbConfigToProdMutation.__typename === \"ErrorBasic\") {\n return dbConfigToProdMutation;\n }\n\n if (dbConfigToProdMutation.__typename === \"ErrorAccessDenied\") {\n return dbConfigToProdMutation;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: dbConfigToProdMutation.dbConfigToProdMutation as T\n };\n }\n\n /**\n * Get the value of a field.\n */\n async get<U>({\n field,\n appId,\n userId,\n env\n }: {\n field: string;\n appId: string;\n env: MongoDbEnv;\n userId?: string | null | undefined;\n }): Promise<\n | SuccessResponse<U>\n | ErrorAccessDenied\n | ErrorBasic\n | ErrorNotExist\n | ErrorNotFound\n | null\n > {\n const { dbGet } = await this.#thunder(\"query\")({\n dbGet: [\n {\n field,\n appId,\n userId,\n env\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorBasic\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on DbGetResponse\": {\n __typename: true,\n json: true\n }\n }\n ]\n });\n\n if (!dbGet) {\n return null;\n }\n\n if (dbGet.__typename === \"ErrorAccessDenied\") {\n return dbGet;\n }\n\n if (dbGet.__typename === \"ErrorBasic\") {\n return dbGet;\n }\n\n if (dbGet.__typename === \"ErrorNotExist\") {\n return dbGet;\n }\n\n if (dbGet.__typename === \"ErrorNotFound\") {\n return dbGet;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: (dbGet.json as { res: U }).res\n };\n }\n\n /**\n * Set an user document.\n */\n async set<T extends UserData, U extends Document>({\n value,\n appId,\n env,\n userId\n }: {\n value: U;\n appId: string;\n env: MongoDbEnv;\n userId?: string | null | undefined;\n }): Promise<\n SuccessResponse<T> | ErrorAccessDenied | ErrorBasic | ErrorNotFound | null\n > {\n if (typeof value !== \"object\") {\n throw new Error(\n `value should be an object including fields you want to update.`\n );\n }\n\n const { dbSet } = await this.#thunder(\"mutation\")({\n dbSet: [\n {\n userId,\n appId,\n env,\n value: serialize(value).toString(\"base64\")\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorBasic\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on DbSetResponse\": {\n __typename: true,\n dbSet: true\n }\n }\n ]\n });\n\n if (!dbSet) {\n return null;\n }\n\n if (dbSet.__typename === \"ErrorAccessDenied\") {\n return dbSet;\n }\n\n if (dbSet.__typename === \"ErrorNotFound\") {\n return dbSet;\n }\n\n if (dbSet.__typename === \"ErrorBasic\") {\n return dbSet;\n }\n\n if (!dbSet.dbSet) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: (dbSet.dbSet as { res: T }).res\n };\n }\n\n /**\n * Searches for user fields that match the search arguments.\n */\n async search<T>({\n appId,\n env,\n search,\n field,\n take,\n skip,\n orderBy\n }: {\n appId: string;\n env: MongoDbEnv;\n field: string;\n search: string;\n take?: number;\n skip?: number;\n orderBy?: \"createdAt_ASC\" | \"createdAt_DESC\";\n }): Promise<\n SuccessResponse<T[]> | ErrorAccessDenied | ErrorBasic | ErrorNotExist | null\n > {\n const { dbSearch } = await this.#thunder(\"query\", {\n scalars: {\n Json: encoders.json,\n DateTime: encoders.dateTime,\n BigInt: encoders.bigInt\n }\n })({\n dbSearch: [\n {\n appId,\n env,\n field,\n search,\n take,\n skip,\n orderBy\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorBasic\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on DbSearchResponse\": {\n __typename: true,\n json: true\n }\n }\n ]\n });\n\n if (!dbSearch) {\n return null;\n }\n\n if (dbSearch.__typename === \"ErrorAccessDenied\") {\n return dbSearch;\n }\n\n if (dbSearch.__typename === \"ErrorBasic\") {\n return dbSearch;\n }\n\n if (dbSearch.__typename === \"ErrorNotExist\") {\n return dbSearch;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: dbSearch.json as unknown as T[]\n };\n }\n}\n"],"mappings":"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","names":["encoders","serialize","SecrecyDbClient","#thunder","_client","_keys","thunder","appId","env","dbConfig","config","dbGetDiff","dbConfigMutation","diffHash","dbConfigToProdMutation","field","userId","dbGet","value","dbSet","search","take","skip","orderBy","dbSearch"]}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }var _shortid = require('shortid');var _cachejs = require('../cache.js');var _indexjs = require('../index.js');var _mailjs = require('./convert/mail.js');var _selectorsjs = require('./types/selectors.js');class b{#t;#e;#r;constructor(r,e,t){;b.prototype.__init.call(this);this.#t=r,this.#e=e,this.#r=t}async get({id:r}){const{mail:e}=await this.#r("query",{scalars:{DateTime:{decode:s=>new Date(s),encode:s=>s.toISOString()}}})({mail:[{id:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on QueryMailResponse":{__typename:!0,mail:_selectorsjs.mailSelector}}]});if(!e)return null;if(e.__typename==="ErrorAccessDenied")return e;if(!e.mail)return null;const t=_mailjs.convertInternalMailToExternal.call(void 0, e.mail,this.#e);return t?{__typename:"SuccessResponse",data:t}:null}async recover({mailId:r}){const{recoverMail:e}=await this.#r("mutation")({recoverMail:[{mailId:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on RecoverMailResponse":{__typename:!0,recoverMail:!0}}]});return e?e.__typename==="ErrorAccessDenied"||e.__typename==="ErrorBasic"?e:{__typename:"SuccessResponse",data:e.recoverMail}:null}async deletedMails({mailType:r}){const{deletedMails:e}=await this.#r("query",{scalars:{DateTime:{decode:s=>new Date(s),encode:s=>s.toISOString()}}})({deletedMails:[{mailType:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DeletedMailsResponse":{__typename:!0,deletedMails:_selectorsjs.mailSelector}}]});if(!e)return null;if(e.__typename==="ErrorAccessDenied")return e;const t=new Array;for(const s of e.deletedMails){const i=_mailjs.convertInternalMailToExternal.call(void 0, s,this.#e);i&&t.push(i)}return{__typename:"SuccessResponse",data:t}}async create(r,e){const t=await this.createDraft(r);if(!t)return{__typename:"SuccessResponse",data:!1};if(t.__typename==="ErrorBasic"||t.__typename==="ErrorAccessDenied")return t;const s=await this.sendDraft(t.data.mailIntegrityId,e);return s?s.__typename==="ErrorAccessDenied"||s.__typename==="ErrorBasic"?s:{__typename:"SuccessResponse",data:s.data}:null}async waitingReceivedMails(){const{user:r}=await this.#r("query")({user:[{},{"...on ErrorNotFound":{__typename:!0,message:!0},"...on UserResponse":{__typename:!0,user:{waitingReceivedMails:{date:!0,attachmentsCount:!0,sender:{id:!0,firstname:!0,lastname:!0,email:!0,publicKey:!0},recipients:{id:!0,firstname:!0,lastname:!0,email:!0,publicKey:!0},temporaryRecipients:{email:!0}}}}}]});return r?r.__typename==="ErrorNotFound"?r:r.user?{__typename:"SuccessResponse",data:r.user.waitingReceivedMails.map(t=>({id:_shortid.generate.call(void 0, ),...t,date:new Date(t.date)}))}:null:null}async updateDraft(r,{body:e,subject:t,files:s,recipientsIds:i,replyTo:m}){const a=await this.draftMails();if(!a)return null;if(a.__typename!=="SuccessResponse")return a;if(!a.data.find(o=>o.mailIntegrityId===r))throw new Error(`Invalid draft ${r}`);let u=null,M=null;(e||t)&&(u=_indexjs.sodium.randombytes_buf(_indexjs.sodium.crypto_generichash_KEYBYTES,"hex"),M=_indexjs.sodium.crypto_generichash(_indexjs.sodium.crypto_generichash_BYTES,JSON.stringify({body:e,subject:t}),u,"hex"));const l=new Array;if(s)for(const o of s){let h=_cachejs.filesCache.get(o.id);if(!h&&(await this.#t.cloud.fileMetadata({id:o.id}),h=_cachejs.filesCache.get(o.id),!h))throw new Error(`File ${o.name} (${o.id}) does not exists`);l.push({id:h.id,fileKey:_indexjs.sodium.to_hex(_indexjs.encryptCryptoBox.call(void 0, _indexjs.sodium.from_string(h.key),this.#e.publicKey,this.#e.privateKey)),name:_indexjs.sodium.to_hex(_indexjs.encryptCryptoBox.call(void 0, _indexjs.sodium.from_string(o.name),this.#e.publicKey,this.#e.privateKey))})}const{updateDraftMail:d}=await this.#r("mutation",{scalars:{Json:{encode:o=>JSON.stringify(o),decode:o=>JSON.parse(o)},DateTime:{decode:o=>new Date(o),encode:o=>o.toISOString()},BigInt:{decode:o=>BigInt(o),encode:o=>o.toString()}}})({updateDraftMail:[{draftId:r,recipients:i,replyTo:m,body:e?_indexjs.sodium.to_hex(_indexjs.encryptCryptoBox.call(void 0, _indexjs.sodium.from_string(e),this.#e.publicKey,this.#e.privateKey)):null,subject:t?_indexjs.sodium.to_hex(_indexjs.encryptCryptoBox.call(void 0, _indexjs.sodium.from_string(t),this.#e.publicKey,this.#e.privateKey)):null,senderFiles:l,hash:M,hashKey:u},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on UpdateDraftMailResponse":{__typename:!0,updateDraftMail:_selectorsjs.mailSelector}}]});return d?d.__typename==="ErrorAccessDenied"||d.__typename==="ErrorBasic"?d:d.updateDraftMail?{__typename:"SuccessResponse",data:_mailjs.convertInternalMailToExternal.call(void 0, d.updateDraftMail,this.#e)}:null:null}async deleteDraft(r){const{deleteDraftMail:e}=await this.#r("mutation")({deleteDraftMail:[{draftId:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DeleteDraftMailResponse":{__typename:!0,deleteDraftMail:!0}}]});return e?e.__typename==="ErrorAccessDenied"?e:e.deleteDraftMail?{__typename:"SuccessResponse",data:_nullishCoalesce(e.deleteDraftMail, () => (!1))}:null:null}async deleteTrash({ids:r}){const{deleteMailTrash:e}=await this.#r("mutation")({deleteMailTrash:[{ids:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DeleteMailTrashResponse":{__typename:!0,deleteMailTrash:!0}}]});return e?e.__typename==="ErrorAccessDenied"?e:e.deleteMailTrash?{__typename:"SuccessResponse",data:e.deleteMailTrash}:null:null}async emptyTrash(){const{emptyMailTrash:r}=await this.#r("mutation")({emptyMailTrash:{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on EmptyMailTrashResponse":{__typename:!0,emptyMailTrash:!0}}});return r?r.__typename==="ErrorAccessDenied"?r:r.emptyMailTrash?{__typename:"SuccessResponse",data:r.emptyMailTrash}:null:null}async delete({mailId:r}){const{deleteMail:e}=await this.#r("mutation")({deleteMail:[{mailId:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DeleteMailResponse":{__typename:!0,deleteMail:!0}}]});return e?e.__typename==="ErrorAccessDenied"?e:{__typename:"SuccessResponse",data:e.deleteMail}:null}async sendDraft(r,e){const t=await this.draftMails();if(!t)return{__typename:"SuccessResponse",data:!1};if(t.__typename!=="SuccessResponse")return{__typename:"SuccessResponse",data:!1};const s=t.data.find(c=>c.mailIntegrityId===r);if(!s)return{__typename:"SuccessResponse",data:!1};const i=new Array,m=new Array;for(const{email:c}of s.temporaryRecipients){if(!c)continue;const u=await this._eachUser(s.files,s.subject,s.body,c);u?i.push(u):m.push(c)}for(const{id:c}of s.recipients){const u=await this._eachUser(s.files,s.subject,s.body,c);u?i.push(u):m.push(c)}const{sendDraftMail:a}=await this.#r("mutation")({sendDraftMail:[{temporaryRecipients:m,recipients:i,draftMailId:s.mailIntegrityId,customMessage:e},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on SendDraftMailResponse":{__typename:!0,sendDraftMail:!0}}]});return a?a.__typename==="ErrorAccessDenied"||a.__typename==="ErrorBasic"?a:a.sendDraftMail?{__typename:"SuccessResponse",data:a.sendDraftMail}:null:null}async sendWaitingEmails(){const r=await this.sentMails();if(!r)return{__typename:"SuccessResponse",data:!1};if(r.__typename!=="SuccessResponse")return{__typename:"SuccessResponse",data:!1};const e=r.data.filter(t=>t.temporaryRecipients.length>0);for(const t of e)for(const{email:s}of t.temporaryRecipients)if(!!s)try{const i=await this._eachUser(t.files,t.subject,t.body,s);if(!i)continue;await this.#r("mutation")({sendOneMail:[{mailIntegrityId:t.mailIntegrityId,recipient:i},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on RecoverNodeResponse":{__typename:!0,recoverNode:!0}}]})}catch (e3){continue}return{__typename:"SuccessResponse",data:!1}}async createDraft({body:r,subject:e,files:t,recipientsIds:s,replyTo:i}){const m=_indexjs.sodium.randombytes_buf(_indexjs.sodium.crypto_generichash_KEYBYTES,"hex"),a=_indexjs.sodium.crypto_generichash(_indexjs.sodium.crypto_generichash_BYTES,JSON.stringify({body:r,subject:e}),m,"hex"),c=new Array;for(const l of t){let d=_cachejs.filesCache.get(l.id);if(!d&&(await this.#t.cloud.fileMetadata({id:l.id}),d=_cachejs.filesCache.get(l.id),!d))throw new Error(`File ${l.name} (${l.id}) does not exists`);c.push({id:d.id,fileKey:_indexjs.sodium.to_hex(_indexjs.encryptCryptoBox.call(void 0, _indexjs.sodium.from_string(d.key),this.#e.publicKey,this.#e.privateKey)),name:_indexjs.sodium.to_hex(_indexjs.encryptCryptoBox.call(void 0, _indexjs.sodium.from_string(l.name),this.#e.publicKey,this.#e.privateKey))})}const{createDraftMail:u}=await this.#r("mutation",{scalars:{DateTime:{decode:l=>new Date(l),encode:l=>l.toISOString()}}})({createDraftMail:[{recipients:s,replyTo:i,body:_indexjs.sodium.to_hex(_indexjs.encryptCryptoBox.call(void 0, _indexjs.sodium.from_string(r),this.#e.publicKey,this.#e.privateKey)),subject:_indexjs.sodium.to_hex(_indexjs.encryptCryptoBox.call(void 0, _indexjs.sodium.from_string(e),this.#e.publicKey,this.#e.privateKey)),senderFiles:c,hash:a,hashKey:m},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on CreateDraftMailResponse":{__typename:!0,createDraftMail:_selectorsjs.mailSelector}}]});return u?u.__typename==="ErrorAccessDenied"||u.__typename==="ErrorBasic"?u:u.createDraftMail?{__typename:"SuccessResponse",data:_mailjs.convertInternalMailToExternal.call(void 0, u.createDraftMail,this.#e)}:null:null}async read({mailId:r}){const{readMail:e}=await this.#r("mutation")({readMail:[{mailId:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on ReadMailResponse":{__typename:!0,readMail:!0}}]});return e?e.__typename==="ErrorAccessDenied"||e.__typename==="ErrorBasic"||e.__typename==="ErrorNotFound"?e:e.readMail?{__typename:"SuccessResponse",data:e.readMail}:null:null}async unread({mailId:r}){const{unreadMail:e}=await this.#r("mutation")({unreadMail:[{mailId:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on UnreadMailResponse":{__typename:!0,unreadMail:!0}}]});return e?e.__typename==="ErrorAccessDenied"||e.__typename==="ErrorBasic"||e.__typename==="ErrorNotFound"?e:e.unreadMail?{__typename:"SuccessResponse",data:e.unreadMail}:null:null}async receivedMails(){const{user:r}=await this.#r("query",{scalars:{DateTime:{decode:t=>new Date(t),encode:t=>t.toISOString()}}})({user:[{},{"...on ErrorNotFound":{__typename:!0,message:!0},"...on UserResponse":{__typename:!0,user:{receivedMails:_selectorsjs.mailSelector}}}]});if(!r)return null;if(r.__typename==="ErrorNotFound")return r;if(!r.user)return null;const e=new Array;for(const t of r.user.receivedMails){const s=_mailjs.convertInternalMailToExternal.call(void 0, t,this.#e);s&&e.push(s)}return{__typename:"SuccessResponse",data:e}}async sentMails(){const{user:r}=await this.#r("query",{scalars:{DateTime:{decode:t=>new Date(t),encode:t=>t.toISOString()}}})({user:[{},{"...on ErrorNotFound":{__typename:!0,message:!0},"...on UserResponse":{__typename:!0,user:{sentMails:_selectorsjs.mailSelector}}}]});if(!r)return null;if(r.__typename==="ErrorNotFound")return r;if(!r.user)return null;const e=new Array;for(const t of r.user.sentMails){const s=_mailjs.convertInternalMailToExternal.call(void 0, t,this.#e);s&&e.push(s)}return{__typename:"SuccessResponse",data:e}}async draftMails(){const{user:r}=await this.#r("query",{scalars:{DateTime:{decode:t=>new Date(t),encode:t=>t.toISOString()}}})({user:[{},{"...on ErrorNotFound":{__typename:!0,message:!0},"...on UserResponse":{__typename:!0,user:{draftMails:_selectorsjs.mailSelector}}}]});if(!r)return null;if(r.__typename==="ErrorNotFound")return r;if(!r.user)return null;const e=new Array;for(const t of r.user.draftMails){const s=_mailjs.convertInternalMailToExternal.call(void 0, t,this.#e);s&&e.push(s)}return{__typename:"SuccessResponse",data:e}}async unreadReceivedMailsCount(){const{unreadReceivedMailsCount:r}=await this.#r("query")({unreadReceivedMailsCount:{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on UnreadReceivedMailsCountResponse":{__typename:!0,count:!0}}});return r?r.__typename==="ErrorAccessDenied"?r:{__typename:"SuccessResponse",data:r.count}:null}__init() {this._eachUser=async(r,e,t,s)=>{let i=_cachejs.usersCache.get(s);if(!i||!("publicKey"in i)){try{const a=await this.#t.user({userId:s,withPublicKey:!0});if(!a||a.__typename!=="SuccessResponse")return null;i=a.data}catch (e4){return null}if(!i)return null}if(!("publicKey"in i))throw new Error(`User ${s} have no public key`);const m=new Array;for(const a of r){let c=_cachejs.filesCache.get(a.id);if(!c&&(await this.#t.cloud.fileMetadata({id:a.id}),c=_cachejs.filesCache.get(a.id),!c))throw new Error(`File ${a.name} (${a.id}) does not exists`);const u=c.key;m.push({id:a.id,name:_indexjs.sodium.to_hex(_indexjs.encryptCryptoBox.call(void 0, _indexjs.sodium.from_string(a.name),i.publicKey,this.#e.privateKey)),fileKey:_indexjs.sodium.to_hex(_indexjs.encryptCryptoBox.call(void 0, _indexjs.sodium.from_hex(u),i.publicKey,this.#e.privateKey))})}return{recipientId:i.id,body:_indexjs.sodium.to_hex(_indexjs.encryptCryptoBox.call(void 0, _indexjs.sodium.from_string(t),i.publicKey,this.#e.privateKey)),subject:_indexjs.sodium.to_hex(_indexjs.encryptCryptoBox.call(void 0, _indexjs.sodium.from_string(e),i.publicKey,this.#e.privateKey)),files:m}}}}exports.SecrecyMailClient = b;
2
+ //# sourceMappingURL=SecrecyMailClient.cjs.map