@secrecy/lib 1.0.0-dev.64 → 1.0.0-dev.66

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 (196) hide show
  1. package/dist/BaseClient-7c38f650.d.ts +351 -0
  2. package/dist/BaseClient.cjs +2 -0
  3. package/dist/BaseClient.cjs.map +1 -0
  4. package/dist/BaseClient.d.ts +16 -104
  5. package/dist/BaseClient.js +2 -430
  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 -196
  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/chunk-5WPCTUWH.cjs +2 -0
  23. package/dist/chunk-5WPCTUWH.cjs.map +1 -0
  24. package/dist/chunk-KMTF2BZE.js +2 -0
  25. package/dist/chunk-KMTF2BZE.js.map +1 -0
  26. package/dist/client/SecrecyAppClient.cjs +2 -0
  27. package/dist/client/SecrecyAppClient.cjs.map +1 -0
  28. package/dist/client/SecrecyAppClient.d.ts +16 -17
  29. package/dist/client/SecrecyAppClient.js +2 -227
  30. package/dist/client/SecrecyAppClient.js.map +1 -0
  31. package/dist/client/SecrecyCloudClient.cjs +2 -0
  32. package/dist/client/SecrecyCloudClient.cjs.map +1 -0
  33. package/dist/client/SecrecyCloudClient.d.ts +16 -89
  34. package/dist/client/SecrecyCloudClient.js +2 -1411
  35. package/dist/client/SecrecyCloudClient.js.map +1 -0
  36. package/dist/client/SecrecyDbClient.cjs +2 -0
  37. package/dist/client/SecrecyDbClient.cjs.map +1 -0
  38. package/dist/client/SecrecyDbClient.d.ts +16 -21
  39. package/dist/client/SecrecyDbClient.js +2 -177
  40. package/dist/client/SecrecyDbClient.js.map +1 -0
  41. package/dist/client/SecrecyMailClient.cjs +2 -0
  42. package/dist/client/SecrecyMailClient.cjs.map +1 -0
  43. package/dist/client/SecrecyMailClient.d.ts +16 -42
  44. package/dist/client/SecrecyMailClient.js +2 -1022
  45. package/dist/client/SecrecyMailClient.js.map +1 -0
  46. package/dist/client/SecrecyPayClient.cjs +2 -0
  47. package/dist/client/SecrecyPayClient.cjs.map +1 -0
  48. package/dist/client/SecrecyPayClient.d.ts +16 -7
  49. package/dist/client/SecrecyPayClient.js +2 -36
  50. package/dist/client/SecrecyPayClient.js.map +1 -0
  51. package/dist/client/SecrecyWalletClient.cjs +2 -0
  52. package/dist/client/SecrecyWalletClient.cjs.map +1 -0
  53. package/dist/client/SecrecyWalletClient.d.ts +16 -30
  54. package/dist/client/SecrecyWalletClient.js +2 -73
  55. package/dist/client/SecrecyWalletClient.js.map +1 -0
  56. package/dist/client/convert/file.cjs +2 -0
  57. package/dist/client/convert/file.cjs.map +1 -0
  58. package/dist/client/convert/file.d.ts +11 -5
  59. package/dist/client/convert/file.js +2 -33
  60. package/dist/client/convert/file.js.map +1 -0
  61. package/dist/client/convert/mail.cjs +2 -0
  62. package/dist/client/convert/mail.cjs.map +1 -0
  63. package/dist/client/convert/mail.d.ts +13 -3
  64. package/dist/client/convert/mail.js +2 -43
  65. package/dist/client/convert/mail.js.map +1 -0
  66. package/dist/client/convert/node.cjs +2 -0
  67. package/dist/client/convert/node.cjs.map +1 -0
  68. package/dist/client/convert/node.d.ts +18 -9
  69. package/dist/client/convert/node.js +2 -88
  70. package/dist/client/convert/node.js.map +1 -0
  71. package/dist/client/helpers.cjs +2 -0
  72. package/dist/client/helpers.cjs.map +1 -0
  73. package/dist/client/helpers.d.ts +16 -28
  74. package/dist/client/helpers.js +2 -113
  75. package/dist/client/helpers.js.map +1 -0
  76. package/dist/client/index.cjs +2 -0
  77. package/dist/client/index.cjs.map +1 -0
  78. package/dist/client/index.d.ts +16 -34
  79. package/dist/client/index.js +2 -46
  80. package/dist/client/index.js.map +1 -0
  81. package/dist/client/storage.cjs +2 -0
  82. package/dist/client/storage.cjs.map +1 -0
  83. package/dist/client/storage.d.ts +6 -3
  84. package/dist/client/storage.js +2 -12
  85. package/dist/client/storage.js.map +1 -0
  86. package/dist/client/types/File.cjs +1 -0
  87. package/dist/client/types/File.cjs.map +1 -0
  88. package/dist/client/types/File.d.ts +9 -5
  89. package/dist/client/types/File.js +1 -3
  90. package/dist/client/types/File.js.map +1 -0
  91. package/dist/client/types/Inputs.cjs +1 -0
  92. package/dist/client/types/Inputs.cjs.map +1 -0
  93. package/dist/client/types/Inputs.d.ts +6 -4
  94. package/dist/client/types/Inputs.js +1 -3
  95. package/dist/client/types/Inputs.js.map +1 -0
  96. package/dist/client/types/Node.cjs +1 -0
  97. package/dist/client/types/Node.cjs.map +1 -0
  98. package/dist/client/types/Node.d.ts +9 -56
  99. package/dist/client/types/Node.js +1 -3
  100. package/dist/client/types/Node.js.map +1 -0
  101. package/dist/client/types/UserAppNotifications.cjs +1 -0
  102. package/dist/client/types/UserAppNotifications.cjs.map +1 -0
  103. package/dist/client/types/UserAppNotifications.d.ts +3 -1
  104. package/dist/client/types/UserAppNotifications.js +1 -3
  105. package/dist/client/types/UserAppNotifications.js.map +1 -0
  106. package/dist/client/types/UserAppSettings.cjs +1 -0
  107. package/dist/client/types/UserAppSettings.cjs.map +1 -0
  108. package/dist/client/types/UserAppSettings.d.ts +3 -1
  109. package/dist/client/types/UserAppSettings.js +1 -3
  110. package/dist/client/types/UserAppSettings.js.map +1 -0
  111. package/dist/client/types/index.cjs +2 -0
  112. package/dist/client/types/index.cjs.map +1 -0
  113. package/dist/client/types/index.d.ts +86 -30
  114. package/dist/client/types/index.js +2 -8
  115. package/dist/client/types/index.js.map +1 -0
  116. package/dist/client/types/selectors.cjs +2 -0
  117. package/dist/client/types/selectors.cjs.map +1 -0
  118. package/dist/client/types/selectors.d.ts +7 -5
  119. package/dist/client/types/selectors.js +2 -135
  120. package/dist/client/types/selectors.js.map +1 -0
  121. package/dist/crypto/file.cjs +2 -0
  122. package/dist/crypto/file.cjs.map +1 -0
  123. package/dist/crypto/file.d.ts +8 -6
  124. package/dist/crypto/file.js +2 -195
  125. package/dist/crypto/file.js.map +1 -0
  126. package/dist/crypto/index.cjs +2 -0
  127. package/dist/crypto/index.cjs.map +1 -0
  128. package/dist/crypto/index.d.ts +11 -9
  129. package/dist/crypto/index.js +2 -45
  130. package/dist/crypto/index.js.map +1 -0
  131. package/dist/error.cjs +1 -0
  132. package/dist/error.cjs.map +1 -0
  133. package/dist/error.d.ts +15 -10
  134. package/dist/error.js +1 -3
  135. package/dist/error.js.map +1 -0
  136. package/dist/index.cjs +2 -0
  137. package/dist/index.cjs.map +1 -0
  138. package/dist/index.d.ts +19 -11
  139. package/dist/index.js +2 -9
  140. package/dist/index.js.map +1 -0
  141. package/dist/minify/index.cjs +2 -0
  142. package/dist/minify/index.cjs.map +1 -0
  143. package/dist/minify/index.d.ts +4 -2
  144. package/dist/minify/index.js +2 -23
  145. package/dist/minify/index.js.map +1 -0
  146. package/dist/minify/lz4.cjs +3 -0
  147. package/dist/minify/lz4.cjs.map +1 -0
  148. package/dist/minify/lz4.d.ts +7 -5
  149. package/dist/minify/lz4.js +3 -539
  150. package/dist/minify/lz4.js.map +1 -0
  151. package/dist/sodium.cjs +2 -0
  152. package/dist/sodium.cjs.map +1 -0
  153. package/dist/sodium.d.ts +5 -3
  154. package/dist/sodium.js +2 -6
  155. package/dist/sodium.js.map +1 -0
  156. package/dist/utils/store-buddy.cjs +2 -0
  157. package/dist/utils/store-buddy.cjs.map +1 -0
  158. package/dist/utils/store-buddy.d.ts +4 -3
  159. package/dist/utils/store-buddy.js +2 -58
  160. package/dist/utils/store-buddy.js.map +1 -0
  161. package/dist/utils/time.cjs +2 -0
  162. package/dist/utils/time.cjs.map +1 -0
  163. package/dist/utils/time.d.ts +4 -2
  164. package/dist/utils/time.js +2 -12
  165. package/dist/utils/time.js.map +1 -0
  166. package/dist/utils/utils.cjs +2 -0
  167. package/dist/utils/utils.cjs.map +1 -0
  168. package/dist/utils/utils.d.ts +6 -4
  169. package/dist/utils/utils.js +2 -47
  170. package/dist/utils/utils.js.map +1 -0
  171. package/dist/worker/md5.cjs +2 -0
  172. package/dist/worker/md5.cjs.map +1 -0
  173. package/dist/worker/md5.d.ts +3 -1
  174. package/dist/worker/md5.js +2 -24
  175. package/dist/worker/md5.js.map +1 -0
  176. package/dist/worker/sodium.cjs +2 -0
  177. package/dist/worker/sodium.cjs.map +1 -0
  178. package/dist/worker/sodium.d.ts +6 -3
  179. package/dist/worker/sodium.js +2 -118
  180. package/dist/worker/sodium.js.map +1 -0
  181. package/dist/worker/workerCodes.cjs +254 -0
  182. package/dist/worker/workerCodes.cjs.map +1 -0
  183. package/dist/worker/workerCodes.d.ts +4 -2
  184. package/dist/worker/workerCodes.js +4 -5
  185. package/dist/worker/workerCodes.js.map +1 -0
  186. package/dist/zeus/const.cjs +2 -0
  187. package/dist/zeus/const.cjs.map +1 -0
  188. package/dist/zeus/const.d.ts +5 -3
  189. package/dist/zeus/const.js +2 -1287
  190. package/dist/zeus/const.js.map +1 -0
  191. package/dist/zeus/index.cjs +5 -0
  192. package/dist/zeus/index.cjs.map +1 -0
  193. package/dist/zeus/index.d.ts +2215 -116
  194. package/dist/zeus/index.js +5 -562
  195. package/dist/zeus/index.js.map +1 -0
  196. package/package.json +21 -21
@@ -1,430 +1,2 @@
1
- /* eslint-disable @typescript-eslint/naming-convention */
2
-
3
- import { getLink } from "@secrecy/lib-utils";
4
- import { usersCache } from "./cache.js";
5
- import { getStorage } from "./client/storage.js";
6
- import { InfuraNetwork } from "./zeus/index.js";
7
- import { Selector } from "./zeus/index.js";
8
- import { createThunder } from "./ZeusThunder.js";
9
- const getUserSelector = (userId, withPublicKey) => {
10
- const {
11
- user
12
- } = Selector("Query")({
13
- user: [{
14
- userId
15
- }, {
16
- "...on ErrorNotFound": {
17
- __typename: true,
18
- message: true,
19
- field: true
20
- },
21
- "...on UserResponse": {
22
- __typename: true,
23
- user: {
24
- id: true,
25
- firstname: true,
26
- lastname: true,
27
- lang: true,
28
- publicKey: withPublicKey ? true : undefined,
29
- email: true,
30
- phone: true,
31
- role: true,
32
- deletedAt: true,
33
- lastLogin: true
34
- }
35
- }
36
- }]
37
- });
38
- return user;
39
- };
40
- async function getUser(params) {
41
- const selector = getUserSelector(params.userId ?? params.userEmail, params.withPublicKey);
42
- const {
43
- user: userResponse
44
- } = await params.client("query", {
45
- scalars: {
46
- Json: {
47
- encode: e => JSON.stringify(e),
48
- decode: e => JSON.parse(e)
49
- },
50
- DateTime: {
51
- decode: e => new Date(e),
52
- encode: e => e.toISOString()
53
- },
54
- BigInt: {
55
- decode: e => BigInt(e),
56
- encode: e => e.toString()
57
- }
58
- }
59
- })({
60
- user: selector
61
- });
62
- if (!userResponse) {
63
- return null;
64
- }
65
- if (userResponse.__typename === "ErrorNotFound") {
66
- return userResponse;
67
- }
68
- if (!userResponse.user) {
69
- return null;
70
- }
71
- return {
72
- __typename: "SuccessResponse",
73
- data: userResponse.user
74
- };
75
- }
76
- export class BaseClient {
77
- constructor(session, env) {
78
- this.sessionId = session;
79
- this.thunder = BaseClient.getBaseClient(env, session);
80
- }
81
- async logout(sessionId) {
82
- if (!sessionId) {
83
- const local = getStorage(false);
84
- const session = getStorage(true);
85
- local.jwt.clear();
86
- local.userAppKeys.clear();
87
- local.userAppSession.clear();
88
- session.jwt.clear();
89
- session.userAppKeys.clear();
90
- session.userAppSession.clear();
91
- usersCache.clear();
92
- }
93
- try {
94
- await this.thunder("mutation")({
95
- logout: [{
96
- sessionId: sessionId
97
- }, {
98
- "...on ErrorAccessDenied": {
99
- __typename: true,
100
- message: true
101
- },
102
- "...on ErrorBasic": {
103
- __typename: true,
104
- message: true
105
- },
106
- "...on LogoutResponse": {
107
- __typename: true,
108
- logout: true
109
- }
110
- }]
111
- });
112
- } catch {
113
- //
114
- }
115
- }
116
- async me(params) {
117
- return this.user(params || {
118
- withPublicKey: true
119
- });
120
- }
121
- static async user(params, sessionId) {
122
- const user = await getUser({
123
- client: this.getBaseClient(params.env, sessionId),
124
- userId: params.userId ?? params.userEmail,
125
- withPublicKey: params.withPublicKey
126
- });
127
- if (!user) {
128
- return null;
129
- }
130
- if (user.__typename === "ErrorNotFound") {
131
- return user;
132
- }
133
- if (user) {
134
- usersCache.set(user.data.id, user.data);
135
- }
136
- return user;
137
- }
138
- async user(params) {
139
- const user = await getUser({
140
- client: this.thunder,
141
- userId: params.userId ?? params.userEmail,
142
- withPublicKey: params.withPublicKey
143
- });
144
- if (!user) {
145
- return null;
146
- }
147
- if (user.__typename === "ErrorNotFound") {
148
- return user;
149
- }
150
- if (user) {
151
- usersCache.set(user.data.id, user.data);
152
- }
153
- return user;
154
- }
155
- async updateProfile(_ref) {
156
- let {
157
- firstname,
158
- lastname,
159
- lang
160
- } = _ref;
161
- const {
162
- updateProfile
163
- } = await this.thunder("mutation", {
164
- scalars: {
165
- Json: {
166
- encode: e => JSON.stringify(e),
167
- decode: e => JSON.parse(e)
168
- },
169
- DateTime: {
170
- decode: e => new Date(e),
171
- encode: e => e.toISOString()
172
- },
173
- BigInt: {
174
- decode: e => BigInt(e),
175
- encode: e => e.toString()
176
- }
177
- }
178
- })({
179
- updateProfile: [{
180
- firstname,
181
- lastname,
182
- lang
183
- }, {
184
- "...on ErrorAccessDenied": {
185
- __typename: true,
186
- message: true
187
- },
188
- "...on ErrorNotFound": {
189
- __typename: true,
190
- message: true
191
- },
192
- "...on UpdateProfileResponse": {
193
- __typename: true,
194
- updateProfile: {
195
- id: true,
196
- firstname: true,
197
- lastname: true,
198
- lang: true,
199
- email: true,
200
- phone: true,
201
- role: true,
202
- deletedAt: true,
203
- lastLogin: true
204
- }
205
- }
206
- }]
207
- });
208
- if (!updateProfile) {
209
- return null;
210
- }
211
- if (updateProfile.__typename === "ErrorAccessDenied") {
212
- return updateProfile;
213
- }
214
- if (updateProfile.__typename === "ErrorNotFound") {
215
- return updateProfile;
216
- }
217
- if (!updateProfile.updateProfile) {
218
- return null;
219
- }
220
- return {
221
- __typename: "SuccessResponse",
222
- data: updateProfile.updateProfile
223
- };
224
- }
225
- static async isCryptoTransactionDone(_ref2) {
226
- let {
227
- env,
228
- idOrHash,
229
- network = InfuraNetwork.mainnet
230
- } = _ref2;
231
- const {
232
- isCryptoTransactionDone
233
- } = await BaseClient.getBaseClient(env)("query")({
234
- isCryptoTransactionDone: [{
235
- idOrHash,
236
- network
237
- }, {
238
- __typename: true,
239
- "...on IsCryptoTransactionDoneResponse": {
240
- done: true
241
- },
242
- "...on ErrorNotExist": {
243
- message: true
244
- }
245
- }]
246
- });
247
- if (!isCryptoTransactionDone) {
248
- return false;
249
- }
250
- return isCryptoTransactionDone.__typename === "IsCryptoTransactionDoneResponse" ? isCryptoTransactionDone.done : false;
251
- }
252
- async limits() {
253
- const {
254
- limits
255
- } = await this.thunder("query", {
256
- scalars: {
257
- Json: {
258
- encode: e => JSON.stringify(e),
259
- decode: e => JSON.parse(e)
260
- },
261
- DateTime: {
262
- decode: e => new Date(e),
263
- encode: e => e.toISOString()
264
- },
265
- BigInt: {
266
- decode: e => BigInt(e),
267
- encode: e => e.toString()
268
- }
269
- }
270
- })({
271
- limits: {
272
- "...on ErrorAccessDenied": {
273
- __typename: true,
274
- message: true
275
- },
276
- "...on ErrorLimit": {
277
- __typename: true,
278
- message: true
279
- },
280
- "...on ErrorNotExist": {
281
- __typename: true,
282
- message: true
283
- },
284
- "...on ErrorNotFound": {
285
- __typename: true,
286
- message: true
287
- },
288
- "...on QueryLimits": {
289
- __typename: true,
290
- cloud: {
291
- size: true,
292
- maxSize: true,
293
- count: true,
294
- maxCount: true
295
- },
296
- mail: {
297
- received: {
298
- count: true,
299
- maxCount: true,
300
- fileCount: true,
301
- maxFileCount: true,
302
- fileSize: true,
303
- maxFileSize: true
304
- },
305
- sent: {
306
- count: true,
307
- maxCount: true,
308
- fileCount: true,
309
- maxFileCount: true,
310
- fileSize: true,
311
- maxFileSize: true
312
- }
313
- }
314
- }
315
- }
316
- });
317
- if (!limits) {
318
- return null;
319
- }
320
- if (limits.__typename === "ErrorAccessDenied") {
321
- return limits;
322
- }
323
- if (limits.__typename === "ErrorNotExist") {
324
- return limits;
325
- }
326
- if (limits.__typename === "ErrorLimit") {
327
- return limits;
328
- }
329
- if (limits.__typename === "ErrorNotFound") {
330
- return limits;
331
- }
332
- return {
333
- __typename: "SuccessResponse",
334
- data: limits
335
- };
336
- }
337
- async reportUser(reportedUserId, customMessage) {
338
- const {
339
- sendReport
340
- } = await this.thunder("mutation")({
341
- sendReport: [{
342
- reportedUserId,
343
- customMessage
344
- }, {
345
- "...on ErrorAccessDenied": {
346
- __typename: true,
347
- message: true
348
- },
349
- "...on ErrorNotFound": {
350
- __typename: true,
351
- message: true
352
- },
353
- "...on SendReportResponse": {
354
- __typename: true,
355
- sendReport: {
356
- id: true,
357
- customMessage: true,
358
- user: {
359
- id: true,
360
- firstname: true,
361
- lastname: true,
362
- email: true
363
- },
364
- reportedUser: {
365
- id: true,
366
- firstname: true,
367
- lastname: true,
368
- email: true
369
- }
370
- }
371
- }
372
- }]
373
- });
374
- if (!sendReport) {
375
- return null;
376
- }
377
- if (sendReport.__typename === "ErrorAccessDenied") {
378
- return sendReport;
379
- }
380
- if (sendReport.__typename === "ErrorNotFound") {
381
- return sendReport;
382
- }
383
- if (!sendReport.sendReport) {
384
- return null;
385
- }
386
- return {
387
- __typename: "SuccessResponse",
388
- data: sendReport.sendReport
389
- };
390
- }
391
- async getSponsorshipLink(_ref3) {
392
- let {
393
- backUrl
394
- } = _ref3;
395
- const me = await this.me({
396
- withPublicKey: false
397
- });
398
- if (!me) {
399
- return null;
400
- }
401
- if (me.__typename === "ErrorNotFound") {
402
- return null;
403
- }
404
- return getLink({
405
- app: "auth",
406
- path: `/sign-up?gf=${btoa(me.data.email)}&au=${btoa(backUrl)}`
407
- });
408
- }
409
- }
410
- BaseClient.getBaseUrl = function (env, graphcdn) {
411
- if (env === void 0) {
412
- env = "prod";
413
- }
414
- if (graphcdn === void 0) {
415
- graphcdn = true;
416
- }
417
- const apiUrl = process.env.NEXT_PUBLIC_SECRECY_API_URL;
418
- if (apiUrl) {
419
- return apiUrl;
420
- }
421
- switch (env) {
422
- case "prod":
423
- return graphcdn ? "https://secrecy.graphcdn.app" : "https://api.secrecy.me/graphql";
424
- case "dev":
425
- default:
426
- return "https://api.dev.secrecy.me/graphql";
427
- }
428
- };
429
- BaseClient.getBaseClient = (env, session) => createThunder(BaseClient.getBaseUrl(env), session);
430
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRMaW5rIiwidXNlcnNDYWNoZSIsImdldFN0b3JhZ2UiLCJJbmZ1cmFOZXR3b3JrIiwiU2VsZWN0b3IiLCJjcmVhdGVUaHVuZGVyIiwiZ2V0VXNlclNlbGVjdG9yIiwidXNlcklkIiwid2l0aFB1YmxpY0tleSIsInVzZXIiLCJfX3R5cGVuYW1lIiwibWVzc2FnZSIsImZpZWxkIiwiaWQiLCJmaXJzdG5hbWUiLCJsYXN0bmFtZSIsImxhbmciLCJwdWJsaWNLZXkiLCJ1bmRlZmluZWQiLCJlbWFpbCIsInBob25lIiwicm9sZSIsImRlbGV0ZWRBdCIsImxhc3RMb2dpbiIsImdldFVzZXIiLCJwYXJhbXMiLCJzZWxlY3RvciIsInVzZXJFbWFpbCIsInVzZXJSZXNwb25zZSIsImNsaWVudCIsInNjYWxhcnMiLCJKc29uIiwiZW5jb2RlIiwiZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWNvZGUiLCJwYXJzZSIsIkRhdGVUaW1lIiwiRGF0ZSIsInRvSVNPU3RyaW5nIiwiQmlnSW50IiwidG9TdHJpbmciLCJkYXRhIiwiQmFzZUNsaWVudCIsImNvbnN0cnVjdG9yIiwic2Vzc2lvbiIsImVudiIsInNlc3Npb25JZCIsInRodW5kZXIiLCJnZXRCYXNlQ2xpZW50IiwibG9nb3V0IiwibG9jYWwiLCJqd3QiLCJjbGVhciIsInVzZXJBcHBLZXlzIiwidXNlckFwcFNlc3Npb24iLCJtZSIsInNldCIsInVwZGF0ZVByb2ZpbGUiLCJpc0NyeXB0b1RyYW5zYWN0aW9uRG9uZSIsImlkT3JIYXNoIiwibmV0d29yayIsIm1haW5uZXQiLCJkb25lIiwibGltaXRzIiwiY2xvdWQiLCJzaXplIiwibWF4U2l6ZSIsImNvdW50IiwibWF4Q291bnQiLCJtYWlsIiwicmVjZWl2ZWQiLCJmaWxlQ291bnQiLCJtYXhGaWxlQ291bnQiLCJmaWxlU2l6ZSIsIm1heEZpbGVTaXplIiwic2VudCIsInJlcG9ydFVzZXIiLCJyZXBvcnRlZFVzZXJJZCIsImN1c3RvbU1lc3NhZ2UiLCJzZW5kUmVwb3J0IiwicmVwb3J0ZWRVc2VyIiwiZ2V0U3BvbnNvcnNoaXBMaW5rIiwiYmFja1VybCIsImFwcCIsInBhdGgiLCJidG9hIiwiZ2V0QmFzZVVybCIsImdyYXBoY2RuIiwiYXBpVXJsIiwicHJvY2VzcyIsIk5FWFRfUFVCTElDX1NFQ1JFQ1lfQVBJX1VSTCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXNlQ2xpZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xuaW1wb3J0IHR5cGUgeyBEb3dubG9hZFByb2dyZXNzIGFzIERMUHJvZ3Jlc3MgfSBmcm9tIFwia3lcIjtcbmltcG9ydCB7IGdldExpbmsgfSBmcm9tIFwiQHNlY3JlY3kvbGliLXV0aWxzXCI7XG5pbXBvcnQgeyB1c2Vyc0NhY2hlIH0gZnJvbSBcIi4vY2FjaGUuanNcIjtcbmltcG9ydCB0eXBlIHsgU2VjcmVjeUVudiB9IGZyb20gXCIuL2NsaWVudC9oZWxwZXJzLmpzXCI7XG5pbXBvcnQgeyBnZXRTdG9yYWdlIH0gZnJvbSBcIi4vY2xpZW50L3N0b3JhZ2UuanNcIjtcbmltcG9ydCB0eXBlIHsgTGFuZywgVGh1bmRlciwgVXNlclJvbGUgfSBmcm9tIFwiLi96ZXVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBJbmZ1cmFOZXR3b3JrIH0gZnJvbSBcIi4vemV1cy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tIFwiLi96ZXVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVUaHVuZGVyIH0gZnJvbSBcIi4vWmV1c1RodW5kZXIuanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgRXJyb3JBY2Nlc3NEZW5pZWQsXG4gIEVycm9yTGltaXQsXG4gIEVycm9yTm90Rm91bmQsXG4gIEVycm9yTm90RXhpc3Rcbn0gZnJvbSBcIi4vZXJyb3IuanNcIjtcblxuZXhwb3J0IHR5cGUgU3VjY2Vzc1Jlc3BvbnNlPFQ+ID0ge1xuICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiO1xuICBkYXRhOiBUO1xufTtcblxuZXhwb3J0IHR5cGUgRG93bmxvYWRQcm9ncmVzcyA9IERMUHJvZ3Jlc3M7XG5cbmV4cG9ydCB0eXBlIFNlbmRSZXBvcnQgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHVzZXI6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGZpcnN0bmFtZTogc3RyaW5nO1xuICAgIGxhc3RuYW1lOiBzdHJpbmc7XG4gICAgZW1haWw6IHN0cmluZztcbiAgfTtcbiAgcmVwb3J0ZWRVc2VyOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBmaXJzdG5hbWU6IHN0cmluZztcbiAgICBsYXN0bmFtZTogc3RyaW5nO1xuICAgIGVtYWlsOiBzdHJpbmc7XG4gIH07XG4gIGN1c3RvbU1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBVc2VyRGF0YTxcbiAgVCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbj4gPSB7XG4gIGlzU3VwZXJ1c2VyOiBib29sZWFuO1xuICBpc1NlYXJjaGFibGU6IGJvb2xlYW47XG59ICYgVDtcblxuY29uc3QgZ2V0VXNlclNlbGVjdG9yID0gKFxuICB1c2VySWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIHdpdGhQdWJsaWNLZXk6IGJvb2xlYW4gfCB1bmRlZmluZWRcbikgPT4ge1xuICBjb25zdCB7IHVzZXIgfSA9IFNlbGVjdG9yKFwiUXVlcnlcIikoe1xuICAgIHVzZXI6IFtcbiAgICAgIHsgdXNlcklkIH0sXG4gICAgICB7XG4gICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlLFxuICAgICAgICAgIGZpZWxkOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gVXNlclJlc3BvbnNlXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICBsYW5nOiB0cnVlLFxuICAgICAgICAgICAgcHVibGljS2V5OiB3aXRoUHVibGljS2V5ID8gdHJ1ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICAgICAgcGhvbmU6IHRydWUsXG4gICAgICAgICAgICByb2xlOiB0cnVlLFxuICAgICAgICAgICAgZGVsZXRlZEF0OiB0cnVlLFxuICAgICAgICAgICAgbGFzdExvZ2luOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9KTtcbiAgcmV0dXJuIHVzZXI7XG59O1xuXG5leHBvcnQgdHlwZSBVc2VyQmFzZSA9IHtcbiAgZW1haWw6IHN0cmluZztcbiAgcGhvbmU6IHN0cmluZztcbiAgbGFzdG5hbWU6IHN0cmluZztcbiAgcm9sZTogVXNlclJvbGU7XG4gIGZpcnN0bmFtZTogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xuICBkZWxldGVkQXQ/OiBEYXRlO1xuICBsYXN0TG9naW46IERhdGU7XG4gIGxhbmc6IExhbmc7XG59O1xuXG50eXBlIFdpdGhQdWJsaWNLZXkgPSB7IHdpdGhQdWJsaWNLZXk/OiBib29sZWFuIH07XG5cbmV4cG9ydCB0eXBlIFVzZXI8VCBleHRlbmRzIFdpdGhQdWJsaWNLZXkgPSBXaXRoUHVibGljS2V5PiA9IFQgZXh0ZW5kcyB7XG4gIHdpdGhQdWJsaWNLZXk6IHRydWU7XG59XG4gID8gVXNlckJhc2UgJiB7IHB1YmxpY0tleTogc3RyaW5nIH1cbiAgOiBVc2VyQmFzZTtcblxudHlwZSBDbGFzc0dldFVzZXJQYXJhbXMgPSBXaXRoUHVibGljS2V5ICYge1xuICB1c2VySWQ/OiBzdHJpbmc7XG4gIHVzZXJFbWFpbD86IHN0cmluZztcbn07XG50eXBlIEdldFVzZXJQYXJhbXMgPSBDbGFzc0dldFVzZXJQYXJhbXMgJiB7XG4gIGNsaWVudDogUmV0dXJuVHlwZTx0eXBlb2YgVGh1bmRlcj47XG59O1xuXG50eXBlIFN0YXRpY0dldFVzZXJQYXJhbXMgPSBDbGFzc0dldFVzZXJQYXJhbXMgJiB7XG4gIGVudjogU2VjcmVjeUVudjtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFVzZXI8VSBleHRlbmRzIFdpdGhQdWJsaWNLZXk+KFxuICBwYXJhbXM6IEdldFVzZXJQYXJhbXNcbik6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPFVzZXI8VT4+IHwgRXJyb3JOb3RGb3VuZCB8IG51bGw+IHtcbiAgY29uc3Qgc2VsZWN0b3IgPSBnZXRVc2VyU2VsZWN0b3IoXG4gICAgcGFyYW1zLnVzZXJJZCA/PyBwYXJhbXMudXNlckVtYWlsLFxuICAgIHBhcmFtcy53aXRoUHVibGljS2V5XG4gICk7XG4gIGNvbnN0IHsgdXNlcjogdXNlclJlc3BvbnNlIH0gPSBhd2FpdCBwYXJhbXMuY2xpZW50KFwicXVlcnlcIiwge1xuICAgIHNjYWxhcnM6IHtcbiAgICAgIEpzb246IHtcbiAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gSlNPTi5zdHJpbmdpZnkoZSksXG4gICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IEpTT04ucGFyc2UoZSBhcyBzdHJpbmcpXG4gICAgICB9LFxuICAgICAgRGF0ZVRpbWU6IHtcbiAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBEYXRlKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAgQmlnSW50OiB7XG4gICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IEJpZ0ludChlIGFzIHN0cmluZyksXG4gICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIGJpZ2ludCkudG9TdHJpbmcoKVxuICAgICAgfVxuICAgIH1cbiAgfSkoe1xuICAgIHVzZXI6IHNlbGVjdG9yXG4gIH0pO1xuXG4gIGlmICghdXNlclJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodXNlclJlc3BvbnNlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgcmV0dXJuIHVzZXJSZXNwb25zZTtcbiAgfVxuXG4gIGlmICghdXNlclJlc3BvbnNlLnVzZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICBkYXRhOiB1c2VyUmVzcG9uc2UudXNlclxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBDbG91ZExpbWl0cyA9IHtcbiAgY291bnQ6IGJpZ2ludDtcbiAgbWF4Q291bnQ/OiBiaWdpbnQgfCB1bmRlZmluZWQ7XG4gIHNpemU6IGJpZ2ludDtcbiAgbWF4U2l6ZT86IGJpZ2ludCB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCB0eXBlIE1haWxMaW1pdHNWYWx1ZXMgPSB7XG4gIGNvdW50OiBiaWdpbnQ7XG4gIG1heENvdW50PzogYmlnaW50IHwgdW5kZWZpbmVkO1xuICBmaWxlU2l6ZTogYmlnaW50O1xuICBtYXhGaWxlU2l6ZT86IGJpZ2ludCB8IHVuZGVmaW5lZDtcbiAgZmlsZUNvdW50OiBiaWdpbnQ7XG4gIG1heEZpbGVDb3VudD86IGJpZ2ludCB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5TGltaXRzID0ge1xuICBjbG91ZDogQ2xvdWRMaW1pdHM7XG4gIG1haWw6IHtcbiAgICBzZW50OiBNYWlsTGltaXRzVmFsdWVzO1xuICAgIHJlY2VpdmVkOiBNYWlsTGltaXRzVmFsdWVzO1xuICB9O1xufTtcblxuZXhwb3J0IGNsYXNzIEJhc2VDbGllbnQge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGdldEJhc2VVcmwgPSAoXG4gICAgZW52OiBTZWNyZWN5RW52ID0gXCJwcm9kXCIsXG4gICAgZ3JhcGhjZG4gPSB0cnVlXG4gICk6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgYXBpVXJsID0gcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfU0VDUkVDWV9BUElfVVJMO1xuICAgIGlmIChhcGlVcmwpIHtcbiAgICAgIHJldHVybiBhcGlVcmw7XG4gICAgfVxuXG4gICAgc3dpdGNoIChlbnYpIHtcbiAgICAgIGNhc2UgXCJwcm9kXCI6XG4gICAgICAgIHJldHVybiBncmFwaGNkblxuICAgICAgICAgID8gXCJodHRwczovL3NlY3JlY3kuZ3JhcGhjZG4uYXBwXCJcbiAgICAgICAgICA6IFwiaHR0cHM6Ly9hcGkuc2VjcmVjeS5tZS9ncmFwaHFsXCI7XG4gICAgICBjYXNlIFwiZGV2XCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gXCJodHRwczovL2FwaS5kZXYuc2VjcmVjeS5tZS9ncmFwaHFsXCI7XG4gICAgfVxuICB9O1xuXG4gIHN0YXRpYyByZWFkb25seSBnZXRCYXNlQ2xpZW50ID0gKFxuICAgIGVudjogU2VjcmVjeUVudixcbiAgICBzZXNzaW9uPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuICApOiBSZXR1cm5UeXBlPHR5cGVvZiBUaHVuZGVyPiA9PlxuICAgIGNyZWF0ZVRodW5kZXIoQmFzZUNsaWVudC5nZXRCYXNlVXJsKGVudiksIHNlc3Npb24pO1xuXG4gIHByb3RlY3RlZCB0aHVuZGVyOiBSZXR1cm5UeXBlPHR5cGVvZiBUaHVuZGVyPjtcblxuICBwdWJsaWMgc2Vzc2lvbklkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2Vzc2lvbjogc3RyaW5nLCBlbnY6IFNlY3JlY3lFbnYpIHtcbiAgICB0aGlzLnNlc3Npb25JZCA9IHNlc3Npb247XG4gICAgdGhpcy50aHVuZGVyID0gQmFzZUNsaWVudC5nZXRCYXNlQ2xpZW50KGVudiwgc2Vzc2lvbik7XG4gIH1cblxuICBhc3luYyBsb2dvdXQoc2Vzc2lvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghc2Vzc2lvbklkKSB7XG4gICAgICBjb25zdCBsb2NhbCA9IGdldFN0b3JhZ2UoZmFsc2UpO1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IGdldFN0b3JhZ2UodHJ1ZSk7XG4gICAgICBsb2NhbC5qd3QuY2xlYXIoKTtcbiAgICAgIGxvY2FsLnVzZXJBcHBLZXlzLmNsZWFyKCk7XG4gICAgICBsb2NhbC51c2VyQXBwU2Vzc2lvbi5jbGVhcigpO1xuICAgICAgc2Vzc2lvbi5qd3QuY2xlYXIoKTtcbiAgICAgIHNlc3Npb24udXNlckFwcEtleXMuY2xlYXIoKTtcbiAgICAgIHNlc3Npb24udXNlckFwcFNlc3Npb24uY2xlYXIoKTtcbiAgICAgIHVzZXJzQ2FjaGUuY2xlYXIoKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMudGh1bmRlcihcIm11dGF0aW9uXCIpKHtcbiAgICAgICAgbG9nb3V0OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uSWRcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCIuLi5vbiBFcnJvckJhc2ljXCI6IHtcbiAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiLi4ub24gTG9nb3V0UmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBsb2dvdXQ6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy9cbiAgICB9XG4gIH1cblxuICBhc3luYyBtZTxUIGV4dGVuZHMgV2l0aFB1YmxpY0tleSA9IFdpdGhQdWJsaWNLZXk+KFxuICAgIHBhcmFtcz86IFRcbiAgKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8VXNlcjxUPj4gfCBFcnJvck5vdEZvdW5kIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLnVzZXIocGFyYW1zIHx8ICh7IHdpdGhQdWJsaWNLZXk6IHRydWUgfSBhcyBUKSk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgdXNlcjxUIGV4dGVuZHMgU3RhdGljR2V0VXNlclBhcmFtcz4oXG4gICAgcGFyYW1zOiBULFxuICAgIHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8VXNlcjxUPj4gfCBFcnJvck5vdEZvdW5kIHwgbnVsbD4ge1xuICAgIGNvbnN0IHVzZXIgPSBhd2FpdCBnZXRVc2VyPFQ+KHtcbiAgICAgIGNsaWVudDogdGhpcy5nZXRCYXNlQ2xpZW50KHBhcmFtcy5lbnYsIHNlc3Npb25JZCksXG4gICAgICB1c2VySWQ6IHBhcmFtcy51c2VySWQgPz8gcGFyYW1zLnVzZXJFbWFpbCxcbiAgICAgIHdpdGhQdWJsaWNLZXk6IHBhcmFtcy53aXRoUHVibGljS2V5XG4gICAgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh1c2VyLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gdXNlcjtcbiAgICB9XG5cbiAgICBpZiAodXNlcikge1xuICAgICAgdXNlcnNDYWNoZS5zZXQodXNlci5kYXRhLmlkLCB1c2VyLmRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiB1c2VyO1xuICB9XG5cbiAgYXN5bmMgdXNlcjxUIGV4dGVuZHMgQ2xhc3NHZXRVc2VyUGFyYW1zPihcbiAgICBwYXJhbXM6IFRcbiAgKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8VXNlcjxUPj4gfCBFcnJvck5vdEZvdW5kIHwgbnVsbD4ge1xuICAgIGNvbnN0IHVzZXIgPSBhd2FpdCBnZXRVc2VyPFQ+KHtcbiAgICAgIGNsaWVudDogdGhpcy50aHVuZGVyLFxuICAgICAgdXNlcklkOiBwYXJhbXMudXNlcklkID8/IHBhcmFtcy51c2VyRW1haWwsXG4gICAgICB3aXRoUHVibGljS2V5OiBwYXJhbXMud2l0aFB1YmxpY0tleVxuICAgIH0pO1xuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXNlci5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIpIHtcbiAgICAgIHVzZXJzQ2FjaGUuc2V0KHVzZXIuZGF0YS5pZCwgdXNlci5kYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNlcjtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVByb2ZpbGUoe1xuICAgIGZpcnN0bmFtZSxcbiAgICBsYXN0bmFtZSxcbiAgICBsYW5nXG4gIH06IHtcbiAgICBmaXJzdG5hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgbGFzdG5hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgbGFuZzogTGFuZyB8IG51bGw7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxVc2VyPiB8IEVycm9yTm90Rm91bmQgfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyB1cGRhdGVQcm9maWxlIH0gPSBhd2FpdCB0aGlzLnRodW5kZXIoXCJtdXRhdGlvblwiLCB7XG4gICAgICBzY2FsYXJzOiB7XG4gICAgICAgIEpzb246IHtcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiBKU09OLnN0cmluZ2lmeShlKSxcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBKU09OLnBhcnNlKGUgYXMgc3RyaW5nKVxuICAgICAgICB9LFxuICAgICAgICBEYXRlVGltZToge1xuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IG5ldyBEYXRlKGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBEYXRlKS50b0lTT1N0cmluZygpXG4gICAgICAgIH0sXG4gICAgICAgIEJpZ0ludDoge1xuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IEJpZ0ludChlIGFzIHN0cmluZyksXG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gKGUgYXMgYmlnaW50KS50b1N0cmluZygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSh7XG4gICAgICB1cGRhdGVQcm9maWxlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaXJzdG5hbWUsXG4gICAgICAgICAgbGFzdG5hbWUsXG4gICAgICAgICAgbGFuZ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFVwZGF0ZVByb2ZpbGVSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdXBkYXRlUHJvZmlsZToge1xuICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBsYXN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbGFuZzogdHJ1ZSxcbiAgICAgICAgICAgICAgZW1haWw6IHRydWUsXG4gICAgICAgICAgICAgIHBob25lOiB0cnVlLFxuICAgICAgICAgICAgICByb2xlOiB0cnVlLFxuICAgICAgICAgICAgICBkZWxldGVkQXQ6IHRydWUsXG4gICAgICAgICAgICAgIGxhc3RMb2dpbjogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVQcm9maWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlUHJvZmlsZS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiB1cGRhdGVQcm9maWxlO1xuICAgIH1cblxuICAgIGlmICh1cGRhdGVQcm9maWxlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gdXBkYXRlUHJvZmlsZTtcbiAgICB9XG5cbiAgICBpZiAoIXVwZGF0ZVByb2ZpbGUudXBkYXRlUHJvZmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiB1cGRhdGVQcm9maWxlLnVwZGF0ZVByb2ZpbGVcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGlzQ3J5cHRvVHJhbnNhY3Rpb25Eb25lKHtcbiAgICBlbnYsXG4gICAgaWRPckhhc2gsXG4gICAgbmV0d29yayA9IEluZnVyYU5ldHdvcmsubWFpbm5ldFxuICB9OiB7XG4gICAgZW52OiBTZWNyZWN5RW52O1xuICAgIGlkT3JIYXNoOiBzdHJpbmc7XG4gICAgbmV0d29yaz86IEluZnVyYU5ldHdvcms7XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGlzQ3J5cHRvVHJhbnNhY3Rpb25Eb25lIH0gPSBhd2FpdCBCYXNlQ2xpZW50LmdldEJhc2VDbGllbnQoZW52KShcbiAgICAgIFwicXVlcnlcIlxuICAgICkoe1xuICAgICAgaXNDcnlwdG9UcmFuc2FjdGlvbkRvbmU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkT3JIYXNoLFxuICAgICAgICAgIG5ldHdvcmtcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgXCIuLi5vbiBJc0NyeXB0b1RyYW5zYWN0aW9uRG9uZVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIGRvbmU6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWlzQ3J5cHRvVHJhbnNhY3Rpb25Eb25lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzQ3J5cHRvVHJhbnNhY3Rpb25Eb25lLl9fdHlwZW5hbWUgPT09XG4gICAgICBcIklzQ3J5cHRvVHJhbnNhY3Rpb25Eb25lUmVzcG9uc2VcIlxuICAgICAgPyBpc0NyeXB0b1RyYW5zYWN0aW9uRG9uZS5kb25lXG4gICAgICA6IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgbGltaXRzKCk6IFByb21pc2U8XG4gICAgfCBTdWNjZXNzUmVzcG9uc2U8UXVlcnlMaW1pdHM+XG4gICAgfCBFcnJvckFjY2Vzc0RlbmllZFxuICAgIHwgRXJyb3JOb3RFeGlzdFxuICAgIHwgRXJyb3JMaW1pdFxuICAgIHwgRXJyb3JOb3RGb3VuZFxuICAgIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IGxpbWl0cyB9ID0gYXdhaXQgdGhpcy50aHVuZGVyKFwicXVlcnlcIiwge1xuICAgICAgc2NhbGFyczoge1xuICAgICAgICBKc29uOiB7XG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gSlNPTi5zdHJpbmdpZnkoZSksXG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gSlNPTi5wYXJzZShlIGFzIHN0cmluZylcbiAgICAgICAgfSxcbiAgICAgICAgRGF0ZVRpbWU6IHtcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBuZXcgRGF0ZShlIGFzIHN0cmluZyksXG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gKGUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKVxuICAgICAgICB9LFxuICAgICAgICBCaWdJbnQ6IHtcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBCaWdJbnQoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIGJpZ2ludCkudG9TdHJpbmcoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoe1xuICAgICAgbGltaXRzOiB7XG4gICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIEVycm9yTGltaXRcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIEVycm9yTm90RXhpc3RcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIFF1ZXJ5TGltaXRzXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIGNsb3VkOiB7XG4gICAgICAgICAgICBzaXplOiB0cnVlLFxuICAgICAgICAgICAgbWF4U2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvdW50OiB0cnVlLFxuICAgICAgICAgICAgbWF4Q291bnQ6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1haWw6IHtcbiAgICAgICAgICAgIHJlY2VpdmVkOiB7XG4gICAgICAgICAgICAgIGNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICBtYXhDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICBtYXhGaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgICBtYXhGaWxlU2l6ZTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlbnQ6IHtcbiAgICAgICAgICAgICAgY291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIG1heENvdW50OiB0cnVlLFxuICAgICAgICAgICAgICBmaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIG1heEZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmlsZVNpemU6IHRydWUsXG4gICAgICAgICAgICAgIG1heEZpbGVTaXplOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIWxpbWl0cykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGxpbWl0cy5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBsaW1pdHM7XG4gICAgfVxuICAgIGlmIChsaW1pdHMuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiBsaW1pdHM7XG4gICAgfVxuICAgIGlmIChsaW1pdHMuX190eXBlbmFtZSA9PT0gXCJFcnJvckxpbWl0XCIpIHtcbiAgICAgIHJldHVybiBsaW1pdHM7XG4gICAgfVxuICAgIGlmIChsaW1pdHMuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBsaW1pdHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBsaW1pdHNcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgcmVwb3J0VXNlcihcbiAgICByZXBvcnRlZFVzZXJJZDogc3RyaW5nLFxuICAgIGN1c3RvbU1lc3NhZ2U/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8U2VuZFJlcG9ydD4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yTm90Rm91bmQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgc2VuZFJlcG9ydCB9ID0gYXdhaXQgdGhpcy50aHVuZGVyKFwibXV0YXRpb25cIikoe1xuICAgICAgc2VuZFJlcG9ydDogW1xuICAgICAgICB7XG4gICAgICAgICAgcmVwb3J0ZWRVc2VySWQsXG4gICAgICAgICAgY3VzdG9tTWVzc2FnZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFNlbmRSZXBvcnRSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgc2VuZFJlcG9ydDoge1xuICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgY3VzdG9tTWVzc2FnZTogdHJ1ZSxcbiAgICAgICAgICAgICAgdXNlcjoge1xuICAgICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbWFpbDogdHJ1ZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICByZXBvcnRlZFVzZXI6IHtcbiAgICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgZW1haWw6IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFzZW5kUmVwb3J0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoc2VuZFJlcG9ydC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBzZW5kUmVwb3J0O1xuICAgIH1cblxuICAgIGlmIChzZW5kUmVwb3J0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gc2VuZFJlcG9ydDtcbiAgICB9XG5cbiAgICBpZiAoIXNlbmRSZXBvcnQuc2VuZFJlcG9ydCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBzZW5kUmVwb3J0LnNlbmRSZXBvcnRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZ2V0U3BvbnNvcnNoaXBMaW5rKHtcbiAgICBiYWNrVXJsXG4gIH06IHtcbiAgICBiYWNrVXJsOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICBjb25zdCBtZSA9IGF3YWl0IHRoaXMubWUoeyB3aXRoUHVibGljS2V5OiBmYWxzZSB9KTtcblxuICAgIGlmICghbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChtZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldExpbmsoe1xuICAgICAgYXBwOiBcImF1dGhcIixcbiAgICAgIHBhdGg6IGAvc2lnbi11cD9nZj0ke2J0b2EobWUuZGF0YS5lbWFpbCl9JmF1PSR7YnRvYShiYWNrVXJsKX1gXG4gICAgfSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsU0FBU0EsT0FBTyxRQUFRLG9CQUFvQjtBQUM1QyxTQUFTQyxVQUFVLFFBQVEsWUFBWTtBQUV2QyxTQUFTQyxVQUFVLFFBQVEscUJBQXFCO0FBRWhELFNBQVNDLGFBQWEsUUFBUSxpQkFBaUI7QUFDL0MsU0FBU0MsUUFBUSxRQUFRLGlCQUFpQjtBQUMxQyxTQUFTQyxhQUFhLFFBQVEsa0JBQWtCO0FBdUNoRCxNQUFNQyxlQUFlLEdBQUcsQ0FDdEJDLE1BQWlDLEVBQ2pDQyxhQUFrQyxLQUMvQjtFQUNILE1BQU07SUFBRUM7RUFBSyxDQUFDLEdBQUdMLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQ0ssSUFBSSxFQUFFLENBQ0o7TUFBRUY7SUFBTyxDQUFDLEVBQ1Y7TUFDRSxxQkFBcUIsRUFBRTtRQUNyQkcsVUFBVSxFQUFFLElBQUk7UUFDaEJDLE9BQU8sRUFBRSxJQUFJO1FBQ2JDLEtBQUssRUFBRTtNQUNULENBQUM7TUFDRCxvQkFBb0IsRUFBRTtRQUNwQkYsVUFB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
1
+ import{c as o}from"./chunk-KMTF2BZE.js";import{getLink as p}from"@secrecy/lib-utils";import{usersCache as l}from"./cache.js";import{getStorage as c}from"./client/storage.js";import{InfuraNetwork as m}from"./zeus/index.js";import{Selector as g}from"./zeus/index.js";import{createThunder as y}from"./ZeusThunder.js";const f=(i,r)=>{const{user:e}=g("Query")({user:[{userId:i},{"...on ErrorNotFound":{__typename:!0,message:!0,field:!0},"...on UserResponse":{__typename:!0,user:{id:!0,firstname:!0,lastname:!0,lang:!0,publicKey:r?!0:void 0,email:!0,phone:!0,role:!0,deletedAt:!0,lastLogin:!0}}}]});return e};async function d(i){var t;const r=f((t=i.userId)!=null?t:i.userEmail,i.withPublicKey),{user:e}=await i.client("query",{scalars:{Json:{encode:n=>JSON.stringify(n),decode:n=>JSON.parse(n)},DateTime:{decode:n=>new Date(n),encode:n=>n.toISOString()},BigInt:{decode:n=>BigInt(n),encode:n=>n.toString()}}})({user:r});return e?e.__typename==="ErrorNotFound"?e:e.user?{__typename:"SuccessResponse",data:e.user}:null:null}const u=class{constructor(r,e){o(this,"thunder");o(this,"sessionId");this.sessionId=r,this.thunder=u.getBaseClient(e,r)}async logout(r){if(!r){const e=c(!1),t=c(!0);e.jwt.clear(),e.userAppKeys.clear(),e.userAppSession.clear(),t.jwt.clear(),t.userAppKeys.clear(),t.userAppSession.clear(),l.clear()}try{await this.thunder("mutation")({logout:[{sessionId:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on LogoutResponse":{__typename:!0,logout:!0}}]})}catch(e){}}async me(r){return this.user(r||{withPublicKey:!0})}static async user(r,e){var n;const t=await d({client:this.getBaseClient(r.env,e),userId:(n=r.userId)!=null?n:r.userEmail,withPublicKey:r.withPublicKey});return t?(t.__typename==="ErrorNotFound"||t&&l.set(t.data.id,t.data),t):null}async user(r){var t;const e=await d({client:this.thunder,userId:(t=r.userId)!=null?t:r.userEmail,withPublicKey:r.withPublicKey});return e?(e.__typename==="ErrorNotFound"||e&&l.set(e.data.id,e.data),e):null}async updateProfile({firstname:r,lastname:e,lang:t}){const{updateProfile:n}=await this.thunder("mutation",{scalars:{Json:{encode:s=>JSON.stringify(s),decode:s=>JSON.parse(s)},DateTime:{decode:s=>new Date(s),encode:s=>s.toISOString()},BigInt:{decode:s=>BigInt(s),encode:s=>s.toString()}}})({updateProfile:[{firstname:r,lastname:e,lang:t},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on UpdateProfileResponse":{__typename:!0,updateProfile:{id:!0,firstname:!0,lastname:!0,lang:!0,email:!0,phone:!0,role:!0,deletedAt:!0,lastLogin:!0}}}]});return n?n.__typename==="ErrorAccessDenied"||n.__typename==="ErrorNotFound"?n:n.updateProfile?{__typename:"SuccessResponse",data:n.updateProfile}:null:null}static async isCryptoTransactionDone({env:r,idOrHash:e,network:t=m.mainnet}){const{isCryptoTransactionDone:n}=await u.getBaseClient(r)("query")({isCryptoTransactionDone:[{idOrHash:e,network:t},{__typename:!0,"...on IsCryptoTransactionDoneResponse":{done:!0},"...on ErrorNotExist":{message:!0}}]});return n&&n.__typename==="IsCryptoTransactionDoneResponse"?n.done:!1}async limits(){const{limits:r}=await this.thunder("query",{scalars:{Json:{encode:e=>JSON.stringify(e),decode:e=>JSON.parse(e)},DateTime:{decode:e=>new Date(e),encode:e=>e.toISOString()},BigInt:{decode:e=>BigInt(e),encode:e=>e.toString()}}})({limits:{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorLimit":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on QueryLimits":{__typename:!0,cloud:{size:!0,maxSize:!0,count:!0,maxCount:!0},mail:{received:{count:!0,maxCount:!0,fileCount:!0,maxFileCount:!0,fileSize:!0,maxFileSize:!0},sent:{count:!0,maxCount:!0,fileCount:!0,maxFileCount:!0,fileSize:!0,maxFileSize:!0}}}}});return r?r.__typename==="ErrorAccessDenied"||r.__typename==="ErrorNotExist"||r.__typename==="ErrorLimit"||r.__typename==="ErrorNotFound"?r:{__typename:"SuccessResponse",data:r}:null}async reportUser(r,e){const{sendReport:t}=await this.thunder("mutation")({sendReport:[{reportedUserId:r,customMessage:e},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on SendReportResponse":{__typename:!0,sendReport:{id:!0,customMessage:!0,user:{id:!0,firstname:!0,lastname:!0,email:!0},reportedUser:{id:!0,firstname:!0,lastname:!0,email:!0}}}}]});return t?t.__typename==="ErrorAccessDenied"||t.__typename==="ErrorNotFound"?t:t.sendReport?{__typename:"SuccessResponse",data:t.sendReport}:null:null}async getSponsorshipLink({backUrl:r}){const e=await this.me({withPublicKey:!1});return!e||e.__typename==="ErrorNotFound"?null:p({app:"auth",path:`/sign-up?gf=${btoa(e.data.email)}&au=${btoa(r)}`})}};let a=u;o(a,"getBaseUrl",(r="prod",e=!0)=>{const t=process.env.NEXT_PUBLIC_SECRECY_API_URL;if(t)return t;switch(r){case"prod":return e?"https://secrecy.graphcdn.app":"https://api.secrecy.me/graphql";case"dev":default:return"https://api.dev.secrecy.me/graphql"}}),o(a,"getBaseClient",(r,e)=>y(u.getBaseUrl(r),e));export{a as BaseClient};
2
+ //# sourceMappingURL=BaseClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/BaseClient.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport type { DownloadProgress as DLProgress } from \"ky\";\nimport { getLink } from \"@secrecy/lib-utils\";\nimport { usersCache } from \"./cache.js\";\nimport type { SecrecyEnv } from \"./client/helpers.js\";\nimport { getStorage } from \"./client/storage.js\";\nimport type { Lang, Thunder, UserRole } from \"./zeus/index.js\";\nimport { InfuraNetwork } from \"./zeus/index.js\";\nimport { Selector } from \"./zeus/index.js\";\nimport { createThunder } from \"./ZeusThunder.js\";\nimport type {\n ErrorAccessDenied,\n ErrorLimit,\n ErrorNotFound,\n ErrorNotExist\n} from \"./error.js\";\n\nexport type SuccessResponse<T> = {\n __typename: \"SuccessResponse\";\n data: T;\n};\n\nexport type DownloadProgress = DLProgress;\n\nexport type SendReport = {\n id: string;\n user: {\n id: string;\n firstname: string;\n lastname: string;\n email: string;\n };\n reportedUser: {\n id: string;\n firstname: string;\n lastname: string;\n email: string;\n };\n customMessage?: string | undefined;\n};\n\nexport type UserData<\n T extends Record<string, unknown> = Record<string, unknown>\n> = {\n isSuperuser: boolean;\n isSearchable: boolean;\n} & T;\n\nconst getUserSelector = (\n userId: string | null | undefined,\n withPublicKey: boolean | undefined\n) => {\n const { user } = Selector(\"Query\")({\n user: [\n { userId },\n {\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true,\n field: true\n },\n \"...on UserResponse\": {\n __typename: true,\n user: {\n id: true,\n firstname: true,\n lastname: true,\n lang: true,\n publicKey: withPublicKey ? true : undefined,\n email: true,\n phone: true,\n role: true,\n deletedAt: true,\n lastLogin: true\n }\n }\n }\n ]\n });\n return user;\n};\n\nexport type UserBase = {\n email: string;\n phone: string;\n lastname: string;\n role: UserRole;\n firstname: string;\n id: string;\n deletedAt?: Date;\n lastLogin: Date;\n lang: Lang;\n};\n\ntype WithPublicKey = { withPublicKey?: boolean };\n\nexport type User<T extends WithPublicKey = WithPublicKey> = T extends {\n withPublicKey: true;\n}\n ? UserBase & { publicKey: string }\n : UserBase;\n\ntype ClassGetUserParams = WithPublicKey & {\n userId?: string;\n userEmail?: string;\n};\ntype GetUserParams = ClassGetUserParams & {\n client: ReturnType<typeof Thunder>;\n};\n\ntype StaticGetUserParams = ClassGetUserParams & {\n env: SecrecyEnv;\n};\n\nasync function getUser<U extends WithPublicKey>(\n params: GetUserParams\n): Promise<SuccessResponse<User<U>> | ErrorNotFound | null> {\n const selector = getUserSelector(\n params.userId ?? params.userEmail,\n params.withPublicKey\n );\n const { user: userResponse } = await params.client(\"query\", {\n scalars: {\n Json: {\n encode: (e: unknown) => JSON.stringify(e),\n decode: (e: unknown) => JSON.parse(e as string)\n },\n DateTime: {\n decode: (e: unknown) => new Date(e as string),\n encode: (e: unknown) => (e as Date).toISOString()\n },\n BigInt: {\n decode: (e: unknown) => BigInt(e as string),\n encode: (e: unknown) => (e as bigint).toString()\n }\n }\n })({\n user: selector\n });\n\n if (!userResponse) {\n return null;\n }\n\n if (userResponse.__typename === \"ErrorNotFound\") {\n return userResponse;\n }\n\n if (!userResponse.user) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: userResponse.user\n };\n}\n\nexport type CloudLimits = {\n count: bigint;\n maxCount?: bigint | undefined;\n size: bigint;\n maxSize?: bigint | undefined;\n};\n\nexport type MailLimitsValues = {\n count: bigint;\n maxCount?: bigint | undefined;\n fileSize: bigint;\n maxFileSize?: bigint | undefined;\n fileCount: bigint;\n maxFileCount?: bigint | undefined;\n};\n\nexport type QueryLimits = {\n cloud: CloudLimits;\n mail: {\n sent: MailLimitsValues;\n received: MailLimitsValues;\n };\n};\n\nexport class BaseClient {\n public static readonly getBaseUrl = (\n env: SecrecyEnv = \"prod\",\n graphcdn = true\n ): string => {\n const apiUrl = process.env.NEXT_PUBLIC_SECRECY_API_URL;\n if (apiUrl) {\n return apiUrl;\n }\n\n switch (env) {\n case \"prod\":\n return graphcdn\n ? \"https://secrecy.graphcdn.app\"\n : \"https://api.secrecy.me/graphql\";\n case \"dev\":\n default:\n return \"https://api.dev.secrecy.me/graphql\";\n }\n };\n\n static readonly getBaseClient = (\n env: SecrecyEnv,\n session?: string | null | undefined\n ): ReturnType<typeof Thunder> =>\n createThunder(BaseClient.getBaseUrl(env), session);\n\n protected thunder: ReturnType<typeof Thunder>;\n\n public sessionId: string;\n\n constructor(session: string, env: SecrecyEnv) {\n this.sessionId = session;\n this.thunder = BaseClient.getBaseClient(env, session);\n }\n\n async logout(sessionId?: string | null | undefined): Promise<void> {\n if (!sessionId) {\n const local = getStorage(false);\n const session = getStorage(true);\n local.jwt.clear();\n local.userAppKeys.clear();\n local.userAppSession.clear();\n session.jwt.clear();\n session.userAppKeys.clear();\n session.userAppSession.clear();\n usersCache.clear();\n }\n try {\n await this.thunder(\"mutation\")({\n logout: [\n {\n sessionId: sessionId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorBasic\": {\n __typename: true,\n message: true\n },\n \"...on LogoutResponse\": {\n __typename: true,\n logout: true\n }\n }\n ]\n });\n } catch {\n //\n }\n }\n\n async me<T extends WithPublicKey = WithPublicKey>(\n params?: T\n ): Promise<SuccessResponse<User<T>> | ErrorNotFound | null> {\n return this.user(params || ({ withPublicKey: true } as T));\n }\n\n static async user<T extends StaticGetUserParams>(\n params: T,\n sessionId?: string | null | undefined\n ): Promise<SuccessResponse<User<T>> | ErrorNotFound | null> {\n const user = await getUser<T>({\n client: this.getBaseClient(params.env, sessionId),\n userId: params.userId ?? params.userEmail,\n withPublicKey: params.withPublicKey\n });\n\n if (!user) {\n return null;\n }\n\n if (user.__typename === \"ErrorNotFound\") {\n return user;\n }\n\n if (user) {\n usersCache.set(user.data.id, user.data);\n }\n\n return user;\n }\n\n async user<T extends ClassGetUserParams>(\n params: T\n ): Promise<SuccessResponse<User<T>> | ErrorNotFound | null> {\n const user = await getUser<T>({\n client: this.thunder,\n userId: params.userId ?? params.userEmail,\n withPublicKey: params.withPublicKey\n });\n\n if (!user) {\n return null;\n }\n\n if (user.__typename === \"ErrorNotFound\") {\n return user;\n }\n\n if (user) {\n usersCache.set(user.data.id, user.data);\n }\n\n return user;\n }\n\n async updateProfile({\n firstname,\n lastname,\n lang\n }: {\n firstname: string | null;\n lastname: string | null;\n lang: Lang | null;\n }): Promise<\n SuccessResponse<User> | ErrorNotFound | ErrorAccessDenied | null\n > {\n const { updateProfile } = await this.thunder(\"mutation\", {\n scalars: {\n Json: {\n encode: (e: unknown) => JSON.stringify(e),\n decode: (e: unknown) => JSON.parse(e as string)\n },\n DateTime: {\n decode: (e: unknown) => new Date(e as string),\n encode: (e: unknown) => (e as Date).toISOString()\n },\n BigInt: {\n decode: (e: unknown) => BigInt(e as string),\n encode: (e: unknown) => (e as bigint).toString()\n }\n }\n })({\n updateProfile: [\n {\n firstname,\n lastname,\n lang\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on UpdateProfileResponse\": {\n __typename: true,\n updateProfile: {\n id: true,\n firstname: true,\n lastname: true,\n lang: true,\n email: true,\n phone: true,\n role: true,\n deletedAt: true,\n lastLogin: true\n }\n }\n }\n ]\n });\n\n if (!updateProfile) {\n return null;\n }\n\n if (updateProfile.__typename === \"ErrorAccessDenied\") {\n return updateProfile;\n }\n\n if (updateProfile.__typename === \"ErrorNotFound\") {\n return updateProfile;\n }\n\n if (!updateProfile.updateProfile) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: updateProfile.updateProfile\n };\n }\n\n static async isCryptoTransactionDone({\n env,\n idOrHash,\n network = InfuraNetwork.mainnet\n }: {\n env: SecrecyEnv;\n idOrHash: string;\n network?: InfuraNetwork;\n }): Promise<boolean> {\n const { isCryptoTransactionDone } = await BaseClient.getBaseClient(env)(\n \"query\"\n )({\n isCryptoTransactionDone: [\n {\n idOrHash,\n network\n },\n {\n __typename: true,\n \"...on IsCryptoTransactionDoneResponse\": {\n done: true\n },\n \"...on ErrorNotExist\": {\n message: true\n }\n }\n ]\n });\n\n if (!isCryptoTransactionDone) {\n return false;\n }\n\n return isCryptoTransactionDone.__typename ===\n \"IsCryptoTransactionDoneResponse\"\n ? isCryptoTransactionDone.done\n : false;\n }\n\n async limits(): Promise<\n | SuccessResponse<QueryLimits>\n | ErrorAccessDenied\n | ErrorNotExist\n | ErrorLimit\n | ErrorNotFound\n | null\n > {\n const { limits } = await this.thunder(\"query\", {\n scalars: {\n Json: {\n encode: (e: unknown) => JSON.stringify(e),\n decode: (e: unknown) => JSON.parse(e as string)\n },\n DateTime: {\n decode: (e: unknown) => new Date(e as string),\n encode: (e: unknown) => (e as Date).toISOString()\n },\n BigInt: {\n decode: (e: unknown) => BigInt(e as string),\n encode: (e: unknown) => (e as bigint).toString()\n }\n }\n })({\n limits: {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorLimit\": {\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 QueryLimits\": {\n __typename: true,\n cloud: {\n size: true,\n maxSize: true,\n count: true,\n maxCount: true\n },\n mail: {\n received: {\n count: true,\n maxCount: true,\n fileCount: true,\n maxFileCount: true,\n fileSize: true,\n maxFileSize: true\n },\n sent: {\n count: true,\n maxCount: true,\n fileCount: true,\n maxFileCount: true,\n fileSize: true,\n maxFileSize: true\n }\n }\n }\n }\n });\n\n if (!limits) {\n return null;\n }\n\n if (limits.__typename === \"ErrorAccessDenied\") {\n return limits;\n }\n if (limits.__typename === \"ErrorNotExist\") {\n return limits;\n }\n if (limits.__typename === \"ErrorLimit\") {\n return limits;\n }\n if (limits.__typename === \"ErrorNotFound\") {\n return limits;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: limits\n };\n }\n\n async reportUser(\n reportedUserId: string,\n customMessage?: string\n ): Promise<\n SuccessResponse<SendReport> | ErrorAccessDenied | ErrorNotFound | null\n > {\n const { sendReport } = await this.thunder(\"mutation\")({\n sendReport: [\n {\n reportedUserId,\n customMessage\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on SendReportResponse\": {\n __typename: true,\n sendReport: {\n id: true,\n customMessage: true,\n user: {\n id: true,\n firstname: true,\n lastname: true,\n email: true\n },\n reportedUser: {\n id: true,\n firstname: true,\n lastname: true,\n email: true\n }\n }\n }\n }\n ]\n });\n\n if (!sendReport) {\n return null;\n }\n\n if (sendReport.__typename === \"ErrorAccessDenied\") {\n return sendReport;\n }\n\n if (sendReport.__typename === \"ErrorNotFound\") {\n return sendReport;\n }\n\n if (!sendReport.sendReport) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: sendReport.sendReport\n };\n }\n\n async getSponsorshipLink({\n backUrl\n }: {\n backUrl: string;\n }): Promise<string | null> {\n const me = await this.me({ withPublicKey: false });\n\n if (!me) {\n return null;\n }\n\n if (me.__typename === \"ErrorNotFound\") {\n return null;\n }\n\n return getLink({\n app: \"auth\",\n path: `/sign-up?gf=${btoa(me.data.email)}&au=${btoa(backUrl)}`\n });\n }\n}\n"],"mappings":"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","names":["getLink","usersCache","getStorage","InfuraNetwork","Selector","createThunder","getUserSelector","userId","withPublicKey","user","getUser","params","_a","selector","userResponse","e","_BaseClient","session","env","__publicField","sessionId","local","firstname","lastname","lang","updateProfile","idOrHash","network","isCryptoTransactionDone","limits","reportedUserId","customMessage","sendReport","backUrl","me","BaseClient","graphcdn","apiUrl"]}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunk5WPCTUWHcjs = require('./chunk-5WPCTUWH.cjs');const O={width:700,height:520,menubar:"no",resizable:"yes",location:"yes",scrollbars:"no",centered:!0};let b=1;function v(n){return Object.entries(n).map(([t,e])=>`${t}=${e}`).join(",")}function W(){return b+=1,`Popup ${b}`}function C(n){if(!n.width||!n.height)throw new Error("Should have width and height");const t=_chunk5WPCTUWHcjs.a.call(void 0, {},n),e=window.outerWidth-n.width,r=window.outerHeight-n.height;return n.centered&&(t.left=n.left||Math.round(window.screenX+e/2),t.top=n.top||Math.round(window.screenY+r/2.5),delete t.centered),t}function y(n,t,e,r){const o=document.createElement("form");let i=null;return o.setAttribute("method","post"),o.setAttribute("action",n),o.setAttribute("target",e),Object.keys(t).forEach(function(u){const s=document.createElement("input");s.type="hidden",s.name=u,s.value=t[u],o.appendChild(s)}),document.body.appendChild(o),i=window.open("/",e,r),i==null||i.document.write("Loading..."),o.submit(),document.body.removeChild(o),i}function m(n,t,e,r,o){const i=e||W(),l=C(Object.assign({},O,r)),u=o||function(){},s=v(l),a=n(t,i,s);let g=!1,c;function w(p,d){g||(g=!0,u(p,d))}function f(p){const d=p?p.data:void 0;d&&d.id===i&&(w(void 0,d.data),window.removeEventListener("message",f),clearInterval(c))}return window.addEventListener("message",f,!1),a?c=window.setInterval(function(){(a===null||a.closed)&&setTimeout(function(){clearInterval(c),w(new Error("Popup closed"))},500)},100):w(new Error("Popup blocked")),a}function E(n,t,e,r){return m(window.open,n,t,e,r)}function P(n,t,e,r,o){function i(l,u,s){return y(l,t,u,s)}return m(i,n,e,r,o)}function k(n,t){return`<script>window.opener.postMessage(${JSON.stringify({id:n,data:t})}, "*");setTimeout(function() { window.close(); }, 50);<\/script>`}exports.popup = E; exports.popupResponse = k; exports.popupWithPost = P;
2
+ //# sourceMappingURL=PopupTools.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/PopupTools.ts"],"names":["defaultOptions","popupCount","optionsToString","options","k","v","defaultPopupName","optionsResolveCentered","result","__spreadValues","width","height","openPopupWithPost","url","postData","name","form","win","key","input","popupExecute","execute","callback","popupName","popupOptions","popupCallback","optionsString","isMessageSent","interval","popupCallbackOnce","err","data","onMessage","message","popup","popupWithPost","openWithPostData","popupUrl","popupResponse","id"],"mappings":"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","sourcesContent":["/**\n * TS Rewrite of https://github.com/enhancv/popup-tools\n */\n\ntype YesNo = \"yes\" | \"no\";\ntype Options = {\n width?: number;\n height?: number;\n menubar: YesNo;\n resizable: YesNo;\n location: YesNo;\n scrollbars: YesNo;\n centered?: boolean;\n left?: number;\n top?: number;\n};\n\nconst defaultOptions: Options = {\n width: 700,\n height: 520,\n menubar: \"no\",\n resizable: \"yes\",\n location: \"yes\",\n scrollbars: \"no\",\n centered: true\n};\n\ntype Callback = (err?: Error, data?: unknown) => void;\n\ntype WindowOpen = (\n popupUrl: string,\n popupName: string,\n optionsString: string\n) => Window | null;\n\nlet popupCount = 1;\n\n/**\n * Return options converted to a string\n *\n * @param {Object} options\n * @return {String}\n */\nfunction optionsToString<T extends Options>(options: T): string {\n return Object.entries(options)\n .map(([k, v]) => `${k}=${v}`)\n .join(\",\");\n}\n\n/**\n * Get a unique name on each call\n * @return {String}\n */\nfunction defaultPopupName(): string {\n popupCount += 1;\n return `Popup ${popupCount}`;\n}\n\n/**\n * Convert \"centered: true\" key into concrete left and top arguments\n * Both can be overwritten\n *\n * @param {Object} options\n * @return {Object}\n */\nfunction optionsResolveCentered(options: Options): Options {\n if (!options.width || !options.height) {\n throw new Error(\"Should have width and height\");\n }\n const result = { ...options };\n const width = window.outerWidth - options.width;\n const height = window.outerHeight - options.height;\n\n if (options.centered) {\n result.left = options.left || Math.round(window.screenX + width / 2);\n result.top = options.top || Math.round(window.screenY + height / 2.5);\n delete result.centered;\n }\n return result;\n}\n\n/**\n * Create a form element, add hidden inputs for all the post data\n * and post it into a newly opened popup\n *\n * @param {String} url\n * @param {Object} postData\n * @param {String} name\n * @param {Object} options\n * @return {Object}\n */\nfunction openPopupWithPost(\n url: string,\n postData: Record<string, string>,\n name: string,\n options: string\n): Window | null {\n const form = document.createElement(\"form\");\n let win: Window | null = null;\n\n form.setAttribute(\"method\", \"post\");\n form.setAttribute(\"action\", url);\n form.setAttribute(\"target\", name);\n\n Object.keys(postData).forEach(function addFormItem(key) {\n const input = document.createElement(\"input\");\n input.type = \"hidden\";\n input.name = key;\n input.value = postData[key];\n form.appendChild(input);\n });\n\n document.body.appendChild(form);\n\n win = window.open(\"/\", name, options);\n win?.document.write(\"Loading...\");\n\n form.submit();\n document.body.removeChild(form);\n\n return win;\n}\n\n/**\n * Open a popup using the first argument. Wait for it to close.\n * Returns the window object\n *\n * @param {Function}\n * @param {String}\n * @param {String}\n * @param {Object}\n * @param {Function}\n * @return {Object}\n */\nfunction popupExecute(\n execute: WindowOpen,\n url: string,\n name: string,\n options: Partial<Options>,\n callback: Callback\n): Window | null {\n const popupName = name || defaultPopupName();\n const popupOptions = optionsResolveCentered(\n Object.assign({}, defaultOptions, options)\n );\n const popupCallback =\n callback ||\n function noop(): void {\n //\n };\n const optionsString = optionsToString(popupOptions);\n const win = execute(url, popupName, optionsString);\n let isMessageSent = false;\n let interval: number;\n\n function popupCallbackOnce(err?: Error, data?: unknown): void {\n if (!isMessageSent) {\n isMessageSent = true;\n popupCallback(err, data);\n }\n }\n\n function onMessage(message?: MessageEvent): void {\n const data = message ? message.data : undefined;\n\n if (data && data.id === popupName) {\n popupCallbackOnce(undefined, data.data);\n window.removeEventListener(\"message\", onMessage);\n clearInterval(interval);\n }\n }\n\n window.addEventListener(\"message\", onMessage, false);\n\n if (win) {\n interval = window.setInterval(function closePopupCallback() {\n if (win === null || win.closed) {\n setTimeout(function delayWindowClosing() {\n clearInterval(interval);\n popupCallbackOnce(new Error(\"Popup closed\"));\n }, 500);\n }\n }, 100);\n } else {\n popupCallbackOnce(new Error(\"Popup blocked\"));\n }\n\n return win;\n}\n\n/**\n * Open a popup using the first argument.\n * Wait for it to close and call the callback.\n * Set the options string using the options object\n * Returns the window object\n *\n * @param {String} url\n * @param {String} name\n * @param {Object} options\n * @param {Function} callback\n * @return {Object}\n */\nexport function popup(\n url: string,\n name: string,\n options: Partial<Options>,\n callback: Callback\n): Window | null {\n return popupExecute(window.open, url, name, options, callback);\n}\n\n/**\n * Open a popup using the first argument.\n * Post the data into the open popup.\n * Wait for it to close and call the callback.\n * Set the options string using the options object\n * Returns the window object\n *\n * @param {String} url\n * @param {Object} postData\n * @param {String} name\n * @param {Object} options\n * @param {Function} callback\n * @return {Object}\n */\nexport function popupWithPost(\n url: string,\n postData: Record<string, string>,\n name: string,\n options: Partial<Options>,\n callback: Callback\n): Window | null {\n function openWithPostData(\n popupUrl: string,\n popupName: string,\n optionsString: string\n ): Window | null {\n return openPopupWithPost(popupUrl, postData, popupName, optionsString);\n }\n\n return popupExecute(openWithPostData, url, name, options, callback);\n}\n\n/**\n * Return html that when executed, will trigger the popup to callback with a response\n *\n * @param {Object}\n * @return {String}\n */\nexport function popupResponse<T>(id: string, data: T): string {\n const jsonData = JSON.stringify({ id, data });\n\n return `<script>window.opener.postMessage(${jsonData}, \"*\");setTimeout(function() { window.close(); }, 50);</script>`;\n}\n"]}
@@ -11,7 +11,8 @@ declare type Options = {
11
11
  top?: number;
12
12
  };
13
13
  declare type Callback = (err?: Error, data?: unknown) => void;
14
- export declare function popup(url: string, name: string, options: Partial<Options>, callback: Callback): Window | null;
15
- export declare function popupWithPost(url: string, postData: Record<string, string>, name: string, options: Partial<Options>, callback: Callback): Window | null;
16
- export declare function popupResponse<T>(id: string, data: T): string;
17
- export {};
14
+ declare function popup(url: string, name: string, options: Partial<Options>, callback: Callback): Window | null;
15
+ declare function popupWithPost(url: string, postData: Record<string, string>, name: string, options: Partial<Options>, callback: Callback): Window | null;
16
+ declare function popupResponse<T>(id: string, data: T): string;
17
+
18
+ export { popup, popupResponse, popupWithPost };