@secrecy/lib 1.7.0 → 1.8.0

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 (152) hide show
  1. package/LICENSE +1 -1
  2. package/dist/lib/base-client.js +91 -0
  3. package/dist/lib/cache.js +4 -0
  4. package/dist/lib/client/SecrecryCareClient.js +19 -0
  5. package/dist/lib/client/SecrecyAppClient.js +87 -0
  6. package/dist/lib/client/SecrecyCloudClient.js +475 -0
  7. package/dist/lib/client/SecrecyDbClient.js +10 -0
  8. package/dist/lib/client/SecrecyMailClient.js +283 -0
  9. package/dist/lib/client/SecrecyPayClient.js +34 -0
  10. package/dist/lib/client/SecrecyUserClient.js +27 -0
  11. package/dist/lib/client/SecrecyWalletClient.js +50 -0
  12. package/dist/lib/client/convert/file.js +29 -0
  13. package/dist/lib/client/convert/mail.js +42 -0
  14. package/dist/lib/client/convert/node.js +100 -0
  15. package/dist/lib/client/helpers.js +103 -0
  16. package/dist/lib/client/index.js +49 -0
  17. package/dist/lib/client/storage.js +7 -0
  18. package/dist/lib/client/types/app.js +1 -0
  19. package/dist/lib/client/types/file.js +1 -0
  20. package/dist/lib/client/types/index.js +15 -0
  21. package/dist/lib/client/types/mail.js +1 -0
  22. package/dist/lib/client/types/node.js +1 -0
  23. package/dist/lib/client/types/user.js +1 -0
  24. package/dist/lib/client.js +47 -0
  25. package/dist/lib/crypto/file.js +184 -0
  26. package/dist/lib/crypto/index.js +41 -0
  27. package/dist/lib/error/client.js +10 -0
  28. package/dist/lib/error/index.js +10 -0
  29. package/dist/lib/error/server.js +27 -0
  30. package/dist/lib/index.js +10 -0
  31. package/dist/lib/minify/index.js +23 -0
  32. package/dist/lib/minify/lz4.js +517 -0
  33. package/dist/lib/sodium.js +5 -0
  34. package/dist/lib/types.js +1 -0
  35. package/dist/lib/utils/array.js +25 -0
  36. package/dist/lib/utils/base64.js +2 -0
  37. package/dist/lib/utils/popup-tools.js +180 -0
  38. package/dist/lib/utils/promise.js +20 -0
  39. package/dist/lib/utils/store-buddy.js +60 -0
  40. package/dist/lib/utils/time.js +13 -0
  41. package/dist/lib/worker/md5.js +18 -0
  42. package/dist/lib/worker/sodium.js +95 -0
  43. package/dist/lib/worker/workerCodes.js +254 -0
  44. package/dist/types/base-client.d.ts +28 -0
  45. package/dist/types/cache.d.ts +11 -0
  46. package/dist/types/client/SecrecryCareClient.d.ts +9 -0
  47. package/dist/types/client/SecrecyAppClient.d.ts +20 -0
  48. package/dist/types/client/SecrecyCloudClient.d.ts +88 -0
  49. package/dist/types/client/SecrecyDbClient.d.ts +7 -0
  50. package/dist/types/client/SecrecyMailClient.d.ts +42 -0
  51. package/dist/types/client/SecrecyPayClient.d.ts +27 -0
  52. package/dist/types/client/SecrecyUserClient.d.ts +14 -0
  53. package/dist/{client → types/client}/SecrecyWalletClient.d.ts +9 -12
  54. package/dist/types/client/convert/file.d.ts +4 -0
  55. package/dist/types/client/convert/mail.d.ts +8 -0
  56. package/dist/types/client/convert/node.d.ts +7 -0
  57. package/dist/types/client/helpers.d.ts +26 -0
  58. package/dist/types/client/index.d.ts +29 -0
  59. package/dist/{client → types/client}/storage.d.ts +2 -2
  60. package/dist/types/client/types/app.d.ts +2 -0
  61. package/dist/types/client/types/file.d.ts +6 -0
  62. package/dist/types/client/types/index.d.ts +46 -0
  63. package/dist/types/client/types/mail.d.ts +87 -0
  64. package/dist/{client/types/Node.d.ts → types/client/types/node.d.ts} +20 -25
  65. package/dist/types/client/types/user.d.ts +3 -0
  66. package/dist/types/client.d.ts +12138 -0
  67. package/dist/{crypto → types/crypto}/file.d.ts +4 -4
  68. package/dist/{crypto → types/crypto}/index.d.ts +1 -4
  69. package/dist/types/error/client.d.ts +22 -0
  70. package/dist/types/error/index.d.ts +40 -0
  71. package/dist/types/error/server.d.ts +26 -0
  72. package/dist/types/index.d.ts +13 -0
  73. package/dist/{minify → types/minify}/index.d.ts +1 -1
  74. package/dist/types/minify/lz4.d.ts +35 -0
  75. package/dist/{sodium.d.ts → types/sodium.d.ts} +1 -1
  76. package/dist/types/types.d.ts +10 -0
  77. package/dist/{utils/utils.d.ts → types/utils/array.d.ts} +0 -1
  78. package/dist/types/utils/base64.d.ts +1 -0
  79. package/dist/types/utils/popup-tools.d.ts +52 -0
  80. package/dist/types/utils/promise.d.ts +1 -0
  81. package/dist/types/utils/store-buddy.d.ts +130 -0
  82. package/dist/{worker → types/worker}/sodium.d.ts +1 -1
  83. package/package.json +48 -73
  84. package/dist/BaseClient.d.ts +0 -111
  85. package/dist/BaseClient.js +0 -506
  86. package/dist/PopupTools.d.ts +0 -17
  87. package/dist/PopupTools.js +0 -195
  88. package/dist/ZeusThunder.d.ts +0 -2
  89. package/dist/ZeusThunder.js +0 -65
  90. package/dist/cache.d.ts +0 -6
  91. package/dist/cache.js +0 -4
  92. package/dist/client/SecrecyAppClient.d.ts +0 -17
  93. package/dist/client/SecrecyAppClient.js +0 -226
  94. package/dist/client/SecrecyCloudClient.d.ts +0 -89
  95. package/dist/client/SecrecyCloudClient.js +0 -1405
  96. package/dist/client/SecrecyDbClient.d.ts +0 -48
  97. package/dist/client/SecrecyDbClient.js +0 -419
  98. package/dist/client/SecrecyMailClient.d.ts +0 -42
  99. package/dist/client/SecrecyMailClient.js +0 -1022
  100. package/dist/client/SecrecyPayClient.d.ts +0 -28
  101. package/dist/client/SecrecyPayClient.js +0 -68
  102. package/dist/client/SecrecyWalletClient.js +0 -73
  103. package/dist/client/convert/file.d.ts +0 -5
  104. package/dist/client/convert/file.js +0 -33
  105. package/dist/client/convert/mail.d.ts +0 -3
  106. package/dist/client/convert/mail.js +0 -42
  107. package/dist/client/convert/node.d.ts +0 -9
  108. package/dist/client/convert/node.js +0 -87
  109. package/dist/client/helpers.d.ts +0 -28
  110. package/dist/client/helpers.js +0 -119
  111. package/dist/client/index.d.ts +0 -34
  112. package/dist/client/index.js +0 -46
  113. package/dist/client/storage.js +0 -12
  114. package/dist/client/types/File.d.ts +0 -14
  115. package/dist/client/types/File.js +0 -3
  116. package/dist/client/types/Inputs.d.ts +0 -16
  117. package/dist/client/types/Inputs.js +0 -3
  118. package/dist/client/types/Node.js +0 -3
  119. package/dist/client/types/UserAppNotifications.d.ts +0 -6
  120. package/dist/client/types/UserAppNotifications.js +0 -3
  121. package/dist/client/types/UserAppSettings.d.ts +0 -5
  122. package/dist/client/types/UserAppSettings.js +0 -3
  123. package/dist/client/types/index.d.ts +0 -120
  124. package/dist/client/types/index.js +0 -8
  125. package/dist/client/types/selectors.d.ts +0 -400
  126. package/dist/client/types/selectors.js +0 -135
  127. package/dist/crypto/file.js +0 -195
  128. package/dist/crypto/index.js +0 -45
  129. package/dist/error.d.ts +0 -33
  130. package/dist/error.js +0 -3
  131. package/dist/index.d.ts +0 -14
  132. package/dist/index.js +0 -10
  133. package/dist/minify/index.js +0 -23
  134. package/dist/minify/lz4.d.ts +0 -5
  135. package/dist/minify/lz4.js +0 -539
  136. package/dist/sodium.js +0 -6
  137. package/dist/utils/encoders.d.ts +0 -26
  138. package/dist/utils/encoders.js +0 -18
  139. package/dist/utils/store-buddy.d.ts +0 -14
  140. package/dist/utils/store-buddy.js +0 -58
  141. package/dist/utils/time.js +0 -12
  142. package/dist/utils/utils.js +0 -47
  143. package/dist/worker/md5.js +0 -24
  144. package/dist/worker/sodium.js +0 -118
  145. package/dist/worker/workerCodes.js +0 -255
  146. package/dist/zeus/const.d.ts +0 -7
  147. package/dist/zeus/const.js +0 -1846
  148. package/dist/zeus/index.d.ts +0 -8721
  149. package/dist/zeus/index.js +0 -642
  150. /package/dist/{utils → types/utils}/time.d.ts +0 -0
  151. /package/dist/{worker → types/worker}/md5.d.ts +0 -0
  152. /package/dist/{worker → types/worker}/workerCodes.d.ts +0 -0
@@ -1,48 +0,0 @@
1
- import type { SecrecyClient, SuccessResponse, UserData } from "../index.js";
2
- import type { KeyPair } from "../crypto/index.js";
3
- import type { ErrorAccessDenied, ErrorBasic, ErrorNotExist, ErrorNotFound } from "../error.js";
4
- import type { MongoDbEnv, Thunder } from "../zeus/index.js";
5
- import type { Document } from "bson";
6
- export declare class SecrecyDbClient {
7
- #private;
8
- constructor(_client: SecrecyClient, _keys: KeyPair, thunder: ReturnType<typeof Thunder>);
9
- getDbConfig<T>({ appId, env }: {
10
- appId: string;
11
- env: MongoDbEnv;
12
- }): Promise<SuccessResponse<T> | ErrorAccessDenied | ErrorNotFound | null>;
13
- dbGetDiff<T>({ appId, env, config }: {
14
- appId: string;
15
- env: MongoDbEnv;
16
- config: string;
17
- }): Promise<SuccessResponse<T> | ErrorAccessDenied | ErrorBasic | null>;
18
- setDbConfig<T>({ appId, env, config }: {
19
- appId: string;
20
- env: MongoDbEnv;
21
- config: string;
22
- }): Promise<SuccessResponse<T> | ErrorAccessDenied | ErrorBasic | null>;
23
- dbConfigPushToProd<T>({ appId, diffHash }: {
24
- appId: string;
25
- diffHash: string;
26
- }): Promise<SuccessResponse<T> | ErrorAccessDenied | ErrorBasic | null>;
27
- get<U>({ field, appId, userId, env }: {
28
- field: string;
29
- appId: string;
30
- env: MongoDbEnv;
31
- userId?: string | null | undefined;
32
- }): Promise<SuccessResponse<U> | ErrorAccessDenied | ErrorBasic | ErrorNotExist | ErrorNotFound | null>;
33
- set<T extends UserData, U extends Document>({ value, appId, env, userId }: {
34
- value: U;
35
- appId: string;
36
- env: MongoDbEnv;
37
- userId?: string | null | undefined;
38
- }): Promise<SuccessResponse<T> | ErrorAccessDenied | ErrorBasic | ErrorNotFound | null>;
39
- search<T>({ appId, env, search, field, take, skip, orderBy }: {
40
- appId: string;
41
- env: MongoDbEnv;
42
- field: string;
43
- search: string;
44
- take?: number;
45
- skip?: number;
46
- orderBy?: "createdAt_ASC" | "createdAt_DESC";
47
- }): Promise<SuccessResponse<T[]> | ErrorAccessDenied | ErrorBasic | ErrorNotExist | null>;
48
- }
@@ -1,419 +0,0 @@
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,42 +0,0 @@
1
- import type { ErrorAccessDenied, ErrorBasic, ErrorNotFound } from "../error.js";
2
- import type { SuccessResponse, KeyPair, NewMail, SecrecyClient } from "../index.js";
3
- import type { MailType, Thunder } from "../zeus/index.js";
4
- import type { DraftMail, Mail, ReceivedMail, SentMail, WaitingReceivedMail } from "./types/index.js";
5
- export declare class SecrecyMailClient {
6
- #private;
7
- constructor(client: SecrecyClient, keys: KeyPair, thunder: ReturnType<typeof Thunder>);
8
- get({ id }: {
9
- id: string;
10
- }): Promise<SuccessResponse<Mail> | ErrorAccessDenied | null>;
11
- recover({ mailId }: {
12
- mailId: string;
13
- }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | ErrorBasic | null>;
14
- deletedMails({ mailType }: {
15
- mailType: MailType;
16
- }): Promise<SuccessResponse<Mail[]> | ErrorAccessDenied | null>;
17
- create(data: NewMail, customMessage?: string | null | undefined): Promise<SuccessResponse<boolean> | ErrorBasic | ErrorAccessDenied | null>;
18
- waitingReceivedMails(): Promise<SuccessResponse<WaitingReceivedMail[]> | ErrorNotFound | null>;
19
- updateDraft(draftId: string, { body, subject, files, recipientsIds, replyTo }: Partial<NewMail>): Promise<SuccessResponse<DraftMail> | ErrorNotFound | ErrorAccessDenied | ErrorBasic | null>;
20
- deleteDraft(draftId: string): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null>;
21
- deleteTrash({ ids }: {
22
- ids: Array<string>;
23
- }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null>;
24
- emptyTrash(): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null>;
25
- delete({ mailId }: {
26
- mailId: string;
27
- }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null>;
28
- sendDraft(draftId: string, customMessage?: string | null | undefined): Promise<SuccessResponse<boolean> | ErrorAccessDenied | ErrorBasic | null>;
29
- sendWaitingEmails(): Promise<SuccessResponse<boolean> | ErrorAccessDenied | ErrorBasic | null>;
30
- createDraft({ body, subject, files, recipientsIds, replyTo }: NewMail): Promise<SuccessResponse<DraftMail> | ErrorAccessDenied | ErrorBasic | null>;
31
- read({ mailId }: {
32
- mailId: string;
33
- }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | ErrorBasic | ErrorNotFound | null>;
34
- unread({ mailId }: {
35
- mailId: string;
36
- }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | ErrorBasic | ErrorNotFound | null>;
37
- receivedMails(): Promise<SuccessResponse<ReceivedMail[]> | ErrorNotFound | null>;
38
- sentMails(): Promise<SuccessResponse<SentMail[]> | ErrorNotFound | null>;
39
- draftMails(): Promise<SuccessResponse<DraftMail[]> | ErrorNotFound | null>;
40
- unreadReceivedMailsCount(): Promise<SuccessResponse<number> | ErrorAccessDenied | null>;
41
- private _eachUser;
42
- }