@secrecy/lib 1.0.0-dev.6 → 1.0.0-dev.60

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 (126) hide show
  1. package/README.md +1 -1
  2. package/dist/BaseClient.d.ts +123 -0
  3. package/dist/BaseClient.js +569 -0
  4. package/{lib → dist}/PopupTools.d.ts +1 -1
  5. package/dist/PopupTools.js +216 -0
  6. package/{lib → dist}/ZeusThunder.d.ts +0 -0
  7. package/dist/ZeusThunder.js +79 -0
  8. package/dist/cache.d.ts +6 -0
  9. package/dist/cache.js +4 -0
  10. package/dist/client/SecrecyAppClient.d.ts +17 -0
  11. package/dist/client/SecrecyAppClient.js +256 -0
  12. package/dist/client/SecrecyCloudClient.d.ts +89 -0
  13. package/dist/client/SecrecyCloudClient.js +1627 -0
  14. package/dist/client/SecrecyDbClient.d.ts +21 -0
  15. package/dist/client/SecrecyDbClient.js +198 -0
  16. package/dist/client/SecrecyMailClient.d.ts +42 -0
  17. package/dist/client/SecrecyMailClient.js +1187 -0
  18. package/dist/client/SecrecyPayClient.d.ts +7 -0
  19. package/dist/client/SecrecyPayClient.js +37 -0
  20. package/dist/client/SecrecyWalletClient.d.ts +30 -0
  21. package/dist/client/SecrecyWalletClient.js +76 -0
  22. package/{lib → dist}/client/convert/file.d.ts +3 -3
  23. package/dist/client/convert/file.js +34 -0
  24. package/dist/client/convert/mail.d.ts +3 -0
  25. package/dist/client/convert/mail.js +48 -0
  26. package/dist/client/convert/node.d.ts +9 -0
  27. package/dist/client/convert/node.js +100 -0
  28. package/{lib → dist}/client/helpers.d.ts +6 -1
  29. package/dist/client/helpers.js +126 -0
  30. package/dist/client/index.d.ts +34 -0
  31. package/dist/client/index.js +52 -0
  32. package/{lib → dist}/client/storage.d.ts +0 -0
  33. package/dist/client/storage.js +12 -0
  34. package/dist/client/types/File.d.ts +14 -0
  35. package/dist/client/types/File.js +3 -0
  36. package/{lib → dist}/client/types/Inputs.d.ts +2 -7
  37. package/dist/client/types/Inputs.js +3 -0
  38. package/dist/client/types/Node.d.ts +56 -0
  39. package/dist/client/types/Node.js +3 -0
  40. package/dist/client/types/UserAppNotifications.d.ts +6 -0
  41. package/dist/client/types/UserAppNotifications.js +3 -0
  42. package/{lib → dist}/client/types/UserAppSettings.d.ts +1 -3
  43. package/dist/client/types/UserAppSettings.js +3 -0
  44. package/{lib → dist}/client/types/index.d.ts +10 -43
  45. package/dist/client/types/index.js +8 -0
  46. package/dist/client/types/selectors.d.ts +400 -0
  47. package/dist/client/types/selectors.js +138 -0
  48. package/{lib → dist}/crypto/file.d.ts +0 -0
  49. package/dist/crypto/file.js +210 -0
  50. package/{lib → dist}/crypto/index.d.ts +0 -0
  51. package/dist/crypto/index.js +47 -0
  52. package/dist/error.d.ts +30 -0
  53. package/dist/error.js +3 -0
  54. package/dist/index.d.ts +11 -0
  55. package/dist/index.js +9 -0
  56. package/{lib → dist}/minify/index.d.ts +0 -0
  57. package/dist/minify/index.js +28 -0
  58. package/{lib → dist}/minify/lz4.d.ts +0 -0
  59. package/dist/minify/lz4.js +627 -0
  60. package/{lib → dist}/sodium.d.ts +0 -0
  61. package/dist/sodium.js +6 -0
  62. package/{lib → dist}/utils/store-buddy.d.ts +0 -0
  63. package/dist/utils/store-buddy.js +65 -0
  64. package/{lib → dist}/utils/time.d.ts +0 -0
  65. package/dist/utils/time.js +14 -0
  66. package/{lib → dist/utils}/utils.d.ts +0 -0
  67. package/dist/utils/utils.js +57 -0
  68. package/{lib → dist}/worker/md5.d.ts +0 -0
  69. package/dist/worker/md5.js +25 -0
  70. package/{lib → dist}/worker/sodium.d.ts +0 -0
  71. package/dist/worker/sodium.js +120 -0
  72. package/{lib → dist}/worker/workerCodes.d.ts +0 -0
  73. package/dist/worker/workerCodes.js +255 -0
  74. package/{lib → dist}/zeus/const.d.ts +5 -0
  75. package/dist/zeus/const.js +1286 -0
  76. package/dist/zeus/index.d.ts +6119 -0
  77. package/dist/zeus/index.js +687 -0
  78. package/package.json +60 -52
  79. package/lib/BaseClient.d.ts +0 -266
  80. package/lib/BaseClient.js +0 -1332
  81. package/lib/PopupTools.js +0 -213
  82. package/lib/ZeusThunder.js +0 -112
  83. package/lib/cache.d.ts +0 -7
  84. package/lib/cache.js +0 -5
  85. package/lib/client/convert/file.js +0 -39
  86. package/lib/client/convert/folder.d.ts +0 -8
  87. package/lib/client/convert/folder.js +0 -264
  88. package/lib/client/convert/mail.d.ts +0 -3
  89. package/lib/client/convert/mail.js +0 -46
  90. package/lib/client/convert/vFile.d.ts +0 -5
  91. package/lib/client/convert/vFile.js +0 -164
  92. package/lib/client/helpers.js +0 -116
  93. package/lib/client/index.d.ts +0 -166
  94. package/lib/client/index.js +0 -3697
  95. package/lib/client/storage.js +0 -12
  96. package/lib/client/types/File.d.ts +0 -21
  97. package/lib/client/types/File.js +0 -2
  98. package/lib/client/types/FilesOnUsersOnApplications.d.ts +0 -9
  99. package/lib/client/types/FilesOnUsersOnApplications.js +0 -2
  100. package/lib/client/types/Folder.d.ts +0 -68
  101. package/lib/client/types/Folder.js +0 -7
  102. package/lib/client/types/Inputs.js +0 -2
  103. package/lib/client/types/UserAppSettings.js +0 -2
  104. package/lib/client/types/VFile.d.ts +0 -62
  105. package/lib/client/types/VFile.js +0 -4
  106. package/lib/client/types/index.js +0 -8
  107. package/lib/client/types/queries.d.ts +0 -535
  108. package/lib/client/types/queries.js +0 -192
  109. package/lib/crypto/file.js +0 -291
  110. package/lib/crypto/index.js +0 -37
  111. package/lib/index.d.ts +0 -11
  112. package/lib/index.js +0 -40
  113. package/lib/minify/index.js +0 -28
  114. package/lib/minify/lz4.js +0 -633
  115. package/lib/sodium.js +0 -28
  116. package/lib/utils/store-buddy.js +0 -69
  117. package/lib/utils/time.js +0 -22
  118. package/lib/utils.js +0 -188
  119. package/lib/worker/__mock__/sodium.worker.d.ts +0 -19
  120. package/lib/worker/__mock__/sodium.worker.js +0 -57
  121. package/lib/worker/md5.js +0 -43
  122. package/lib/worker/sodium.js +0 -155
  123. package/lib/worker/workerCodes.js +0 -3
  124. package/lib/zeus/const.js +0 -1609
  125. package/lib/zeus/index.d.ts +0 -26113
  126. package/lib/zeus/index.js +0 -552
@@ -0,0 +1,216 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+
3
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4
+
5
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6
+
7
+ /**
8
+ * TS Rewrite of https://github.com/enhancv/popup-tools
9
+ */
10
+ const defaultOptions = {
11
+ width: 700,
12
+ height: 520,
13
+ menubar: "no",
14
+ resizable: "yes",
15
+ location: "yes",
16
+ scrollbars: "no",
17
+ centered: true
18
+ };
19
+ let popupCount = 1;
20
+ /**
21
+ * Return options converted to a string
22
+ *
23
+ * @param {Object} options
24
+ * @return {String}
25
+ */
26
+
27
+ function optionsToString(options) {
28
+ return Object.entries(options).map(_ref => {
29
+ let [k, v] = _ref;
30
+ return `${k}=${v}`;
31
+ }).join(",");
32
+ }
33
+ /**
34
+ * Get a unique name on each call
35
+ * @return {String}
36
+ */
37
+
38
+
39
+ function defaultPopupName() {
40
+ popupCount += 1;
41
+ return `Popup ${popupCount}`;
42
+ }
43
+ /**
44
+ * Convert "centered: true" key into concrete left and top arguments
45
+ * Both can be overwritten
46
+ *
47
+ * @param {Object} options
48
+ * @return {Object}
49
+ */
50
+
51
+
52
+ function optionsResolveCentered(options) {
53
+ if (!options.width || !options.height) {
54
+ throw new Error("Should have width and height");
55
+ }
56
+
57
+ const result = _objectSpread({}, options);
58
+
59
+ const width = window.outerWidth - options.width;
60
+ const height = window.outerHeight - options.height;
61
+
62
+ if (options.centered) {
63
+ result.left = options.left || Math.round(window.screenX + width / 2);
64
+ result.top = options.top || Math.round(window.screenY + height / 2.5);
65
+ delete result.centered;
66
+ }
67
+
68
+ return result;
69
+ }
70
+ /**
71
+ * Create a form element, add hidden inputs for all the post data
72
+ * and post it into a newly opened popup
73
+ *
74
+ * @param {String} url
75
+ * @param {Object} postData
76
+ * @param {String} name
77
+ * @param {Object} options
78
+ * @return {Object}
79
+ */
80
+
81
+
82
+ function openPopupWithPost(url, postData, name, options) {
83
+ var _win;
84
+
85
+ const form = document.createElement("form");
86
+ let win = null;
87
+ form.setAttribute("method", "post");
88
+ form.setAttribute("action", url);
89
+ form.setAttribute("target", name);
90
+ Object.keys(postData).forEach(function addFormItem(key) {
91
+ const input = document.createElement("input");
92
+ input.type = "hidden";
93
+ input.name = key;
94
+ input.value = postData[key];
95
+ form.appendChild(input);
96
+ });
97
+ document.body.appendChild(form);
98
+ win = window.open("/", name, options);
99
+ (_win = win) == null ? void 0 : _win.document.write("Loading...");
100
+ form.submit();
101
+ document.body.removeChild(form);
102
+ return win;
103
+ }
104
+ /**
105
+ * Open a popup using the first argument. Wait for it to close.
106
+ * Returns the window object
107
+ *
108
+ * @param {Function}
109
+ * @param {String}
110
+ * @param {String}
111
+ * @param {Object}
112
+ * @param {Function}
113
+ * @return {Object}
114
+ */
115
+
116
+
117
+ function popupExecute(execute, url, name, options, callback) {
118
+ const popupName = name || defaultPopupName();
119
+ const popupOptions = optionsResolveCentered(Object.assign({}, defaultOptions, options));
120
+
121
+ const popupCallback = callback || function noop() {//
122
+ };
123
+
124
+ const optionsString = optionsToString(popupOptions);
125
+ const win = execute(url, popupName, optionsString);
126
+ let isMessageSent = false;
127
+ let interval;
128
+
129
+ function popupCallbackOnce(err, data) {
130
+ if (!isMessageSent) {
131
+ isMessageSent = true;
132
+ popupCallback(err, data);
133
+ }
134
+ }
135
+
136
+ function onMessage(message) {
137
+ const data = message ? message.data : undefined;
138
+
139
+ if (data && data.id === popupName) {
140
+ popupCallbackOnce(undefined, data);
141
+ window.removeEventListener("message", onMessage);
142
+ clearInterval(interval);
143
+ }
144
+ }
145
+
146
+ window.addEventListener("message", onMessage, false);
147
+
148
+ if (win) {
149
+ interval = window.setInterval(function closePopupCallback() {
150
+ if (win === null || win.closed) {
151
+ setTimeout(function delayWindowClosing() {
152
+ clearInterval(interval);
153
+ popupCallbackOnce(new Error("Popup closed"));
154
+ }, 500);
155
+ }
156
+ }, 100);
157
+ } else {
158
+ popupCallbackOnce(new Error("Popup blocked"));
159
+ }
160
+
161
+ return win;
162
+ }
163
+ /**
164
+ * Open a popup using the first argument.
165
+ * Wait for it to close and call the callback.
166
+ * Set the options string using the options object
167
+ * Returns the window object
168
+ *
169
+ * @param {String} url
170
+ * @param {String} name
171
+ * @param {Object} options
172
+ * @param {Function} callback
173
+ * @return {Object}
174
+ */
175
+
176
+
177
+ export function popup(url, name, options, callback) {
178
+ return popupExecute(window.open, url, name, options, callback);
179
+ }
180
+ /**
181
+ * Open a popup using the first argument.
182
+ * Post the data into the open popup.
183
+ * Wait for it to close and call the callback.
184
+ * Set the options string using the options object
185
+ * Returns the window object
186
+ *
187
+ * @param {String} url
188
+ * @param {Object} postData
189
+ * @param {String} name
190
+ * @param {Object} options
191
+ * @param {Function} callback
192
+ * @return {Object}
193
+ */
194
+
195
+ export function popupWithPost(url, postData, name, options, callback) {
196
+ function openWithPostData(popupUrl, popupName, optionsString) {
197
+ return openPopupWithPost(popupUrl, postData, popupName, optionsString);
198
+ }
199
+
200
+ return popupExecute(openWithPostData, url, name, options, callback);
201
+ }
202
+ /**
203
+ * Return html that when executed, will trigger the popup to callback with a response
204
+ *
205
+ * @param {Object}
206
+ * @return {String}
207
+ */
208
+
209
+ export function popupResponse(id, data) {
210
+ const jsonData = JSON.stringify({
211
+ id,
212
+ data
213
+ });
214
+ return `<script>window.opener.postMessage(${jsonData}, "*");setTimeout(function() { window.close(); }, 50);</script>`;
215
+ }
216
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZWZhdWx0T3B0aW9ucyIsIndpZHRoIiwiaGVpZ2h0IiwibWVudWJhciIsInJlc2l6YWJsZSIsImxvY2F0aW9uIiwic2Nyb2xsYmFycyIsImNlbnRlcmVkIiwicG9wdXBDb3VudCIsIm9wdGlvbnNUb1N0cmluZyIsIm9wdGlvbnMiLCJPYmplY3QiLCJlbnRyaWVzIiwibWFwIiwiayIsInYiLCJqb2luIiwiZGVmYXVsdFBvcHVwTmFtZSIsIm9wdGlvbnNSZXNvbHZlQ2VudGVyZWQiLCJFcnJvciIsInJlc3VsdCIsIndpbmRvdyIsIm91dGVyV2lkdGgiLCJvdXRlckhlaWdodCIsImxlZnQiLCJNYXRoIiwicm91bmQiLCJzY3JlZW5YIiwidG9wIiwic2NyZWVuWSIsIm9wZW5Qb3B1cFdpdGhQb3N0IiwidXJsIiwicG9zdERhdGEiLCJuYW1lIiwiZm9ybSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsIndpbiIsInNldEF0dHJpYnV0ZSIsImtleXMiLCJmb3JFYWNoIiwiYWRkRm9ybUl0ZW0iLCJrZXkiLCJpbnB1dCIsInR5cGUiLCJ2YWx1ZSIsImFwcGVuZENoaWxkIiwiYm9keSIsIm9wZW4iLCJ3cml0ZSIsInN1Ym1pdCIsInJlbW92ZUNoaWxkIiwicG9wdXBFeGVjdXRlIiwiZXhlY3V0ZSIsImNhbGxiYWNrIiwicG9wdXBOYW1lIiwicG9wdXBPcHRpb25zIiwiYXNzaWduIiwicG9wdXBDYWxsYmFjayIsIm5vb3AiLCJvcHRpb25zU3RyaW5nIiwiaXNNZXNzYWdlU2VudCIsImludGVydmFsIiwicG9wdXBDYWxsYmFja09uY2UiLCJlcnIiLCJkYXRhIiwib25NZXNzYWdlIiwibWVzc2FnZSIsInVuZGVmaW5lZCIsImlkIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImNsZWFySW50ZXJ2YWwiLCJhZGRFdmVudExpc3RlbmVyIiwic2V0SW50ZXJ2YWwiLCJjbG9zZVBvcHVwQ2FsbGJhY2siLCJjbG9zZWQiLCJzZXRUaW1lb3V0IiwiZGVsYXlXaW5kb3dDbG9zaW5nIiwicG9wdXAiLCJwb3B1cFdpdGhQb3N0Iiwib3BlbldpdGhQb3N0RGF0YSIsInBvcHVwVXJsIiwicG9wdXBSZXNwb25zZSIsImpzb25EYXRhIiwiSlNPTiIsInN0cmluZ2lmeSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9Qb3B1cFRvb2xzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVFMgUmV3cml0ZSBvZiBodHRwczovL2dpdGh1Yi5jb20vZW5oYW5jdi9wb3B1cC10b29sc1xuICovXG5cbnR5cGUgWWVzTm8gPSBcInllc1wiIHwgXCJub1wiO1xudHlwZSBPcHRpb25zID0ge1xuICB3aWR0aD86IG51bWJlcjtcbiAgaGVpZ2h0PzogbnVtYmVyO1xuICBtZW51YmFyOiBZZXNObztcbiAgcmVzaXphYmxlOiBZZXNObztcbiAgbG9jYXRpb246IFllc05vO1xuICBzY3JvbGxiYXJzOiBZZXNObztcbiAgY2VudGVyZWQ/OiBib29sZWFuO1xuICBsZWZ0PzogbnVtYmVyO1xuICB0b3A/OiBudW1iZXI7XG59O1xuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogT3B0aW9ucyA9IHtcbiAgd2lkdGg6IDcwMCxcbiAgaGVpZ2h0OiA1MjAsXG4gIG1lbnViYXI6IFwibm9cIixcbiAgcmVzaXphYmxlOiBcInllc1wiLFxuICBsb2NhdGlvbjogXCJ5ZXNcIixcbiAgc2Nyb2xsYmFyczogXCJub1wiLFxuICBjZW50ZXJlZDogdHJ1ZVxufTtcblxudHlwZSBDYWxsYmFjayA9IChlcnI/OiBFcnJvciwgZGF0YT86IHVua25vd24pID0+IHZvaWQ7XG5cbnR5cGUgV2luZG93T3BlbiA9IChcbiAgcG9wdXBVcmw6IHN0cmluZyxcbiAgcG9wdXBOYW1lOiBzdHJpbmcsXG4gIG9wdGlvbnNTdHJpbmc6IHN0cmluZ1xuKSA9PiBXaW5kb3cgfCBudWxsO1xuXG5sZXQgcG9wdXBDb3VudCA9IDE7XG5cbi8qKlxuICogUmV0dXJuIG9wdGlvbnMgY29udmVydGVkIHRvIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIG9wdGlvbnNUb1N0cmluZzxUIGV4dGVuZHMgT3B0aW9ucz4ob3B0aW9uczogVCk6IHN0cmluZyB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhvcHRpb25zKVxuICAgIC5tYXAoKFtrLCB2XSkgPT4gYCR7a309JHt2fWApXG4gICAgLmpvaW4oXCIsXCIpO1xufVxuXG4vKipcbiAqIEdldCBhIHVuaXF1ZSBuYW1lIG9uIGVhY2ggY2FsbFxuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5mdW5jdGlvbiBkZWZhdWx0UG9wdXBOYW1lKCk6IHN0cmluZyB7XG4gIHBvcHVwQ291bnQgKz0gMTtcbiAgcmV0dXJuIGBQb3B1cCAke3BvcHVwQ291bnR9YDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IFwiY2VudGVyZWQ6IHRydWVcIiBrZXkgaW50byBjb25jcmV0ZSBsZWZ0IGFuZCB0b3AgYXJndW1lbnRzXG4gKiBCb3RoIGNhbiBiZSBvdmVyd3JpdHRlblxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBvcHRpb25zUmVzb2x2ZUNlbnRlcmVkKG9wdGlvbnM6IE9wdGlvbnMpOiBPcHRpb25zIHtcbiAgaWYgKCFvcHRpb25zLndpZHRoIHx8ICFvcHRpb25zLmhlaWdodCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlNob3VsZCBoYXZlIHdpZHRoIGFuZCBoZWlnaHRcIik7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0geyAuLi5vcHRpb25zIH07XG4gIGNvbnN0IHdpZHRoID0gd2luZG93Lm91dGVyV2lkdGggLSBvcHRpb25zLndpZHRoO1xuICBjb25zdCBoZWlnaHQgPSB3aW5kb3cub3V0ZXJIZWlnaHQgLSBvcHRpb25zLmhlaWdodDtcblxuICBpZiAob3B0aW9ucy5jZW50ZXJlZCkge1xuICAgIHJlc3VsdC5sZWZ0ID0gb3B0aW9ucy5sZWZ0IHx8IE1hdGgucm91bmQod2luZG93LnNjcmVlblggKyB3aWR0aCAvIDIpO1xuICAgIHJlc3VsdC50b3AgPSBvcHRpb25zLnRvcCB8fCBNYXRoLnJvdW5kKHdpbmRvdy5zY3JlZW5ZICsgaGVpZ2h0IC8gMi41KTtcbiAgICBkZWxldGUgcmVzdWx0LmNlbnRlcmVkO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgZm9ybSBlbGVtZW50LCBhZGQgaGlkZGVuIGlucHV0cyBmb3IgYWxsIHRoZSBwb3N0IGRhdGFcbiAqIGFuZCBwb3N0IGl0IGludG8gYSBuZXdseSBvcGVuZWQgcG9wdXBcbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHVybFxuICogQHBhcmFtICB7T2JqZWN0fSBwb3N0RGF0YVxuICogQHBhcmFtICB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gb3BlblBvcHVwV2l0aFBvc3QoXG4gIHVybDogc3RyaW5nLFxuICBwb3N0RGF0YTogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgbmFtZTogc3RyaW5nLFxuICBvcHRpb25zOiBzdHJpbmdcbik6IFdpbmRvdyB8IG51bGwge1xuICBjb25zdCBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZvcm1cIik7XG4gIGxldCB3aW46IFdpbmRvdyB8IG51bGwgPSBudWxsO1xuXG4gIGZvcm0uc2V0QXR0cmlidXRlKFwibWV0aG9kXCIsIFwicG9zdFwiKTtcbiAgZm9ybS5zZXRBdHRyaWJ1dGUoXCJhY3Rpb25cIiwgdXJsKTtcbiAgZm9ybS5zZXRBdHRyaWJ1dGUoXCJ0YXJnZXRcIiwgbmFtZSk7XG5cbiAgT2JqZWN0LmtleXMocG9zdERhdGEpLmZvckVhY2goZnVuY3Rpb24gYWRkRm9ybUl0ZW0oa2V5KSB7XG4gICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgaW5wdXQudHlwZSA9IFwiaGlkZGVuXCI7XG4gICAgaW5wdXQubmFtZSA9IGtleTtcbiAgICBpbnB1dC52YWx1ZSA9IHBvc3REYXRhW2tleV07XG4gICAgZm9ybS5hcHBlbmRDaGlsZChpbnB1dCk7XG4gIH0pO1xuXG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZm9ybSk7XG5cbiAgd2luID0gd2luZG93Lm9wZW4oXCIvXCIsIG5hbWUsIG9wdGlvbnMpO1xuICB3aW4/LmRvY3VtZW50LndyaXRlKFwiTG9hZGluZy4uLlwiKTtcblxuICBmb3JtLnN1Ym1pdCgpO1xuICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGZvcm0pO1xuXG4gIHJldHVybiB3aW47XG59XG5cbi8qKlxuICogT3BlbiBhIHBvcHVwIHVzaW5nIHRoZSBmaXJzdCBhcmd1bWVudC4gV2FpdCBmb3IgaXQgdG8gY2xvc2UuXG4gKiBSZXR1cm5zIHRoZSB3aW5kb3cgb2JqZWN0XG4gKlxuICogQHBhcmFtICB7RnVuY3Rpb259XG4gKiBAcGFyYW0gIHtTdHJpbmd9XG4gKiBAcGFyYW0gIHtTdHJpbmd9XG4gKiBAcGFyYW0gIHtPYmplY3R9XG4gKiBAcGFyYW0gIHtGdW5jdGlvbn1cbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gcG9wdXBFeGVjdXRlKFxuICBleGVjdXRlOiBXaW5kb3dPcGVuLFxuICB1cmw6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBvcHRpb25zOiBQYXJ0aWFsPE9wdGlvbnM+LFxuICBjYWxsYmFjazogQ2FsbGJhY2tcbik6IFdpbmRvdyB8IG51bGwge1xuICBjb25zdCBwb3B1cE5hbWUgPSBuYW1lIHx8IGRlZmF1bHRQb3B1cE5hbWUoKTtcbiAgY29uc3QgcG9wdXBPcHRpb25zID0gb3B0aW9uc1Jlc29sdmVDZW50ZXJlZChcbiAgICBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucylcbiAgKTtcbiAgY29uc3QgcG9wdXBDYWxsYmFjayA9XG4gICAgY2FsbGJhY2sgfHxcbiAgICBmdW5jdGlvbiBub29wKCk6IHZvaWQge1xuICAgICAgLy9cbiAgICB9O1xuICBjb25zdCBvcHRpb25zU3RyaW5nID0gb3B0aW9uc1RvU3RyaW5nKHBvcHVwT3B0aW9ucyk7XG4gIGNvbnN0IHdpbiA9IGV4ZWN1dGUodXJsLCBwb3B1cE5hbWUsIG9wdGlvbnNTdHJpbmcpO1xuICBsZXQgaXNNZXNzYWdlU2VudCA9IGZhbHNlO1xuICBsZXQgaW50ZXJ2YWw6IG51bWJlcjtcblxuICBmdW5jdGlvbiBwb3B1cENhbGxiYWNrT25jZShlcnI/OiBFcnJvciwgZGF0YT86IHVua25vd24pOiB2b2lkIHtcbiAgICBpZiAoIWlzTWVzc2FnZVNlbnQpIHtcbiAgICAgIGlzTWVzc2FnZVNlbnQgPSB0cnVlO1xuICAgICAgcG9wdXBDYWxsYmFjayhlcnIsIGRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uTWVzc2FnZShtZXNzYWdlPzogTWVzc2FnZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZGF0YSA9IG1lc3NhZ2UgPyBtZXNzYWdlLmRhdGEgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZGF0YSAmJiBkYXRhLmlkID09PSBwb3B1cE5hbWUpIHtcbiAgICAgIHBvcHVwQ2FsbGJhY2tPbmNlKHVuZGVmaW5lZCwgZGF0YSk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgb25NZXNzYWdlKTtcbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgIH1cbiAgfVxuXG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBvbk1lc3NhZ2UsIGZhbHNlKTtcblxuICBpZiAod2luKSB7XG4gICAgaW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoZnVuY3Rpb24gY2xvc2VQb3B1cENhbGxiYWNrKCkge1xuICAgICAgaWYgKHdpbiA9PT0gbnVsbCB8fCB3aW4uY2xvc2VkKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gZGVsYXlXaW5kb3dDbG9zaW5nKCkge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICAgIHBvcHVwQ2FsbGJhY2tPbmNlKG5ldyBFcnJvcihcIlBvcHVwIGNsb3NlZFwiKSk7XG4gICAgICAgIH0sIDUwMCk7XG4gICAgICB9XG4gICAgfSwgMTAwKTtcbiAgfSBlbHNlIHtcbiAgICBwb3B1cENhbGxiYWNrT25jZShuZXcgRXJyb3IoXCJQb3B1cCBibG9ja2VkXCIpKTtcbiAgfVxuXG4gIHJldHVybiB3aW47XG59XG5cbi8qKlxuICogT3BlbiBhIHBvcHVwIHVzaW5nIHRoZSBmaXJzdCBhcmd1bWVudC5cbiAqIFdhaXQgZm9yIGl0IHRvIGNsb3NlIGFuZCBjYWxsIHRoZSBjYWxsYmFjay5cbiAqIFNldCB0aGUgb3B0aW9ucyBzdHJpbmcgdXNpbmcgdGhlIG9wdGlvbnMgb2JqZWN0XG4gKiBSZXR1cm5zIHRoZSB3aW5kb3cgb2JqZWN0XG4gKlxuICogQHBhcmFtICB7U3RyaW5nfSB1cmxcbiAqIEBwYXJhbSAge1N0cmluZ30gbmFtZVxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvcHVwKFxuICB1cmw6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBvcHRpb25zOiBQYXJ0aWFsPE9wdGlvbnM+LFxuICBjYWxsYmFjazogQ2FsbGJhY2tcbik6IFdpbmRvdyB8IG51bGwge1xuICByZXR1cm4gcG9wdXBFeGVjdXRlKHdpbmRvdy5vcGVuLCB1cmwsIG5hbWUsIG9wdGlvbnMsIGNhbGxiYWNrKTtcbn1cblxuLyoqXG4gKiBPcGVuIGEgcG9wdXAgdXNpbmcgdGhlIGZpcnN0IGFyZ3VtZW50LlxuICogUG9zdCB0aGUgZGF0YSBpbnRvIHRoZSBvcGVuIHBvcHVwLlxuICogV2FpdCBmb3IgaXQgdG8gY2xvc2UgYW5kIGNhbGwgdGhlIGNhbGxiYWNrLlxuICogU2V0IHRoZSBvcHRpb25zIHN0cmluZyB1c2luZyB0aGUgb3B0aW9ucyBvYmplY3RcbiAqIFJldHVybnMgdGhlIHdpbmRvdyBvYmplY3RcbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHVybFxuICogQHBhcmFtICB7T2JqZWN0fSBwb3N0RGF0YVxuICogQHBhcmFtICB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcG9wdXBXaXRoUG9zdChcbiAgdXJsOiBzdHJpbmcsXG4gIHBvc3REYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBuYW1lOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFBhcnRpYWw8T3B0aW9ucz4sXG4gIGNhbGxiYWNrOiBDYWxsYmFja1xuKTogV2luZG93IHwgbnVsbCB7XG4gIGZ1bmN0aW9uIG9wZW5XaXRoUG9zdERhdGEoXG4gICAgcG9wdXBVcmw6IHN0cmluZyxcbiAgICBwb3B1cE5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zU3RyaW5nOiBzdHJpbmdcbiAgKTogV2luZG93IHwgbnVsbCB7XG4gICAgcmV0dXJuIG9wZW5Qb3B1cFdpdGhQb3N0KHBvcHVwVXJsLCBwb3N0RGF0YSwgcG9wdXBOYW1lLCBvcHRpb25zU3RyaW5nKTtcbiAgfVxuXG4gIHJldHVybiBwb3B1cEV4ZWN1dGUob3BlbldpdGhQb3N0RGF0YSwgdXJsLCBuYW1lLCBvcHRpb25zLCBjYWxsYmFjayk7XG59XG5cbi8qKlxuICogUmV0dXJuIGh0bWwgdGhhdCB3aGVuIGV4ZWN1dGVkLCB3aWxsIHRyaWdnZXIgdGhlIHBvcHVwIHRvIGNhbGxiYWNrIHdpdGggYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSAge09iamVjdH1cbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvcHVwUmVzcG9uc2U8VD4oaWQ6IHN0cmluZywgZGF0YTogVCk6IHN0cmluZyB7XG4gIGNvbnN0IGpzb25EYXRhID0gSlNPTi5zdHJpbmdpZnkoeyBpZCwgZGF0YSB9KTtcblxuICByZXR1cm4gYDxzY3JpcHQ+d2luZG93Lm9wZW5lci5wb3N0TWVzc2FnZSgke2pzb25EYXRhfSwgXCIqXCIpO3NldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHdpbmRvdy5jbG9zZSgpOyB9LCA1MCk7PC9zY3JpcHQ+YDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBZUEsTUFBTUEsY0FBdUIsR0FBRztFQUM5QkMsS0FBSyxFQUFFLEdBRHVCO0VBRTlCQyxNQUFNLEVBQUUsR0FGc0I7RUFHOUJDLE9BQU8sRUFBRSxJQUhxQjtFQUk5QkMsU0FBUyxFQUFFLEtBSm1CO0VBSzlCQyxRQUFRLEVBQUUsS0FMb0I7RUFNOUJDLFVBQVUsRUFBRSxJQU5rQjtFQU85QkMsUUFBUSxFQUFFO0FBUG9CLENBQWhDO0FBa0JBLElBQUlDLFVBQVUsR0FBRyxDQUFqQjtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxTQUFTQyxlQUFULENBQTRDQyxPQUE1QyxFQUFnRTtFQUM5RCxPQUFPQyxNQUFNLENBQUNDLE9BQVAsQ0FBZUYsT0FBZixFQUNKRyxHQURJLENBQ0E7SUFBQSxJQUFDLENBQUNDLENBQUQsRUFBSUMsQ0FBSixDQUFEO0lBQUEsT0FBYSxHQUFFRCxDQUFFLElBQUdDLENBQUUsRUFBdEI7RUFBQSxDQURBLEVBRUpDLElBRkksQ0FFQyxHQUZELENBQVA7QUFHRDtBQUVEO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxTQUFTQyxnQkFBVCxHQUFvQztFQUNsQ1QsVUFBVSxJQUFJLENBQWQ7RUFDQSxPQUFRLFNBQVFBLFVBQVcsRUFBM0I7QUFDRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxTQUFTVSxzQkFBVCxDQUFnQ1IsT0FBaEMsRUFBMkQ7RUFDekQsSUFBSSxDQUFDQSxPQUFPLENBQUNULEtBQVQs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
File without changes
@@ -0,0 +1,79 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+
3
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4
+
5
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6
+
7
+ import { GraphQLError, Thunder } from "./zeus/index.js";
8
+
9
+ const handleFetchResponse = response => {
10
+ if (!response.ok) {
11
+ return new Promise((_, reject) => {
12
+ response.text().then(text => {
13
+ try {
14
+ reject(JSON.parse(text));
15
+ } catch (err) {
16
+ reject(text);
17
+ }
18
+ }).catch(reject);
19
+ });
20
+ }
21
+
22
+ return response.json();
23
+ };
24
+
25
+ const apiFetch = (options, session) => async function (query, variables) {
26
+ if (variables === void 0) {
27
+ variables = {};
28
+ }
29
+
30
+ const fetchFunction = fetch;
31
+ let queryString = query;
32
+ const fetchOptions = options[1] || {};
33
+
34
+ if (fetchOptions.method && fetchOptions.method === "GET") {
35
+ queryString = encodeURIComponent(query);
36
+ return fetchFunction(`${options[0]}?query=${queryString}`, fetchOptions).then(handleFetchResponse).then(response => {
37
+ if (response.errors) {
38
+ throw new GraphQLError(response);
39
+ }
40
+
41
+ return response.data;
42
+ });
43
+ }
44
+
45
+ const headers = {
46
+ "content-type": "application/json",
47
+ "accept-language": navigator.language
48
+ };
49
+
50
+ if (session) {
51
+ headers["secrecy-session"] = session;
52
+ }
53
+
54
+ const controller = new AbortController();
55
+ const id = setTimeout(() => controller.abort(), 20000);
56
+ const res = await fetchFunction(`${options[0]}`, _objectSpread({
57
+ body: JSON.stringify({
58
+ query: queryString,
59
+ variables
60
+ }),
61
+ method: "POST",
62
+ headers,
63
+ signal: controller.signal
64
+ }, fetchOptions)).then(handleFetchResponse).then(response => {
65
+ if (response.errors) {
66
+ throw new GraphQLError(response);
67
+ }
68
+
69
+ return response.data;
70
+ });
71
+ clearTimeout(id);
72
+ return res;
73
+ };
74
+
75
+ export const createThunder = (url, session) => Thunder(apiFetch([url, {
76
+ mode: "cors",
77
+ credentials: "same-origin"
78
+ }], session));
79
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJHcmFwaFFMRXJyb3IiLCJUaHVuZGVyIiwiaGFuZGxlRmV0Y2hSZXNwb25zZSIsInJlc3BvbnNlIiwib2siLCJQcm9taXNlIiwiXyIsInJlamVjdCIsInRleHQiLCJ0aGVuIiwiSlNPTiIsInBhcnNlIiwiZXJyIiwiY2F0Y2giLCJqc29uIiwiYXBpRmV0Y2giLCJvcHRpb25zIiwic2Vzc2lvbiIsInF1ZXJ5IiwidmFyaWFibGVzIiwiZmV0Y2hGdW5jdGlvbiIsImZldGNoIiwicXVlcnlTdHJpbmciLCJmZXRjaE9wdGlvbnMiLCJtZXRob2QiLCJlbmNvZGVVUklDb21wb25lbnQiLCJlcnJvcnMiLCJkYXRhIiwiaGVhZGVycyIsIm5hdmlnYXRvciIsImxhbmd1YWdlIiwiY29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsImlkIiwic2V0VGltZW91dCIsImFib3J0IiwicmVzIiwiYm9keSIsInN0cmluZ2lmeSIsInNpZ25hbCIsImNsZWFyVGltZW91dCIsImNyZWF0ZVRodW5kZXIiLCJ1cmwiLCJtb2RlIiwiY3JlZGVudGlhbHMiXSwic291cmNlcyI6WyIuLi9zcmMvWmV1c1RodW5kZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBmZXRjaE9wdGlvbnMsIEdyYXBoUUxSZXNwb25zZSB9IGZyb20gXCIuL3pldXMvaW5kZXguanNcIjtcbmltcG9ydCB7IEdyYXBoUUxFcnJvciwgVGh1bmRlciB9IGZyb20gXCIuL3pldXMvaW5kZXguanNcIjtcblxuY29uc3QgaGFuZGxlRmV0Y2hSZXNwb25zZSA9IChcbiAgcmVzcG9uc2U6IFBhcmFtZXRlcnM8XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHlwZXNcbiAgICBFeHRyYWN0PFBhcmFtZXRlcnM8UmV0dXJuVHlwZTx0eXBlb2YgZmV0Y2g+W1widGhlblwiXT5bMF0sIEZ1bmN0aW9uPlxuICA+WzBdXG4pOiBQcm9taXNlPEdyYXBoUUxSZXNwb25zZT4gPT4ge1xuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcbiAgICAgIHJlc3BvbnNlXG4gICAgICAgIC50ZXh0KClcbiAgICAgICAgLnRoZW4odGV4dCA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlamVjdChKU09OLnBhcnNlKHRleHQpKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHJlamVjdCh0ZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiByZXNwb25zZS5qc29uKCkgYXMgUHJvbWlzZTxHcmFwaFFMUmVzcG9uc2U+O1xufTtcblxuY29uc3QgYXBpRmV0Y2ggPVxuICAob3B0aW9uczogZmV0Y2hPcHRpb25zLCBzZXNzaW9uPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCkgPT5cbiAgYXN5bmMgKFxuICAgIHF1ZXJ5OiBzdHJpbmcsXG4gICAgdmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge31cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgY29uc3QgZmV0Y2hGdW5jdGlvbiA9IGZldGNoO1xuICAgIGxldCBxdWVyeVN0cmluZyA9IHF1ZXJ5O1xuICAgIGNvbnN0IGZldGNoT3B0aW9ucyA9IG9wdGlvbnNbMV0gfHwge307XG4gICAgaWYgKGZldGNoT3B0aW9ucy5tZXRob2QgJiYgZmV0Y2hPcHRpb25zLm1ldGhvZCA9PT0gXCJHRVRcIikge1xuICAgICAgcXVlcnlTdHJpbmcgPSBlbmNvZGVVUklDb21wb25lbnQocXVlcnkpO1xuICAgICAgcmV0dXJuIGZldGNoRnVuY3Rpb24oYCR7b3B0aW9uc1swXX0/cXVlcnk9JHtxdWVyeVN0cmluZ31gLCBmZXRjaE9wdGlvbnMpXG4gICAgICAgIC50aGVuKGhhbmRsZUZldGNoUmVzcG9uc2UpXG4gICAgICAgIC50aGVuKChyZXNwb25zZTogR3JhcGhRTFJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlLmVycm9ycykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEdyYXBoUUxFcnJvcihyZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgXCJhY2NlcHQtbGFuZ3VhZ2VcIjogbmF2aWdhdG9yLmxhbmd1YWdlXG4gICAgfTtcblxuICAgIGlmIChzZXNzaW9uKSB7XG4gICAgICBoZWFkZXJzW1wic2VjcmVjeS1zZXNzaW9uXCJdID0gc2Vzc2lvbjtcbiAgICB9XG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBjb25zdCBpZCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCAyMDAwMCk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2hGdW5jdGlvbihgJHtvcHRpb25zWzBdfWAsIHtcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgcXVlcnk6IHF1ZXJ5U3RyaW5nLCB2YXJpYWJsZXMgfSksXG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgaGVhZGVycyxcbiAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgICAuLi5mZXRjaE9wdGlvbnNcbiAgICB9KVxuICAgICAgLnRoZW4oaGFuZGxlRmV0Y2hSZXNwb25zZSlcbiAgICAgIC50aGVuKChyZXNwb25zZTogR3JhcGhRTFJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZS5lcnJvcnMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgR3JhcGhRTEVycm9yKHJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICAgIH0pO1xuICAgIGNsZWFyVGltZW91dChpZCk7XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVRodW5kZXIgPSAoXG4gIHVybDogc3RyaW5nLFxuICBzZXNzaW9uPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogUmV0dXJuVHlwZTx0eXBlb2YgVGh1bmRlcj4gPT5cbiAgVGh1bmRlcihcbiAgICBhcGlGZXRjaChcbiAgICAgIFtcbiAgICAgICAgdXJsLFxuICAgICAgICB7XG4gICAgICAgICAgbW9kZTogXCJjb3JzXCIsXG4gICAgICAgICAgY3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgc2Vzc2lvblxuICAgIClcbiAgKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsU0FBU0EsWUFBVCxFQUF1QkMsT0FBdkIsUUFBc0MsaUJBQXRDOztBQUVBLE1BQU1DLG1CQUFtQixHQUN2QkMsUUFEMEIsSUFLRztFQUM3QixJQUFJLENBQUNBLFFBQVEsQ0FBQ0MsRUFBZCxFQUFrQjtJQUNoQixPQUFPLElBQUlDLE9BQUosQ0FBWSxDQUFDQyxDQUFELEVBQUlDLE1BQUosS0FBZTtNQUNoQ0osUUFBUSxDQUNMSyxJQURILEdBRUdDLElBRkgsQ0FFUUQsSUFBSSxJQUFJO1FBQ1osSUFBSTtVQUNGRCxNQUFNLENBQUNHLElBQUksQ0FBQ0MsS0FBTCxDQUFXSCxJQUFYLENBQUQsQ0FBTjtRQUNELENBRkQsQ0FFRSxPQUFPSSxHQUFQLEVBQVk7VUFDWkwsTUFBTSxDQUFDQyxJQUFELENBQU47UUFDRDtNQUNGLENBUkgsRUFTR0ssS0FUSCxDQVNTTixNQVRUO0lBVUQsQ0FYTSxDQUFQO0VBWUQ7O0VBQ0QsT0FBT0osUUFBUSxDQUFDVyxJQUFULEVBQVA7QUFDRCxDQXJCRDs7QUF1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
@@ -0,0 +1,6 @@
1
+ import type { InternalNode, InternalFile, InternalNodeFull } from "./client/types/index.js";
2
+ export declare const filesCache: Map<string, InternalFile>;
3
+ export declare const nodesCache: Map<string, InternalNode | InternalNodeFull>;
4
+ export declare const usersCache: Map<string, import("./BaseClient.js").UserBase | (import("./BaseClient.js").UserBase & {
5
+ publicKey: string;
6
+ })>;
package/dist/cache.js ADDED
@@ -0,0 +1,4 @@
1
+ export const filesCache = new Map();
2
+ export const nodesCache = new Map();
3
+ export const usersCache = new Map();
4
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaWxlc0NhY2hlIiwiTWFwIiwibm9kZXNDYWNoZSIsInVzZXJzQ2FjaGUiXSwic291cmNlcyI6WyIuLi9zcmMvY2FjaGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBVc2VyIH0gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgSW50ZXJuYWxOb2RlLFxuICBJbnRlcm5hbEZpbGUsXG4gIEludGVybmFsTm9kZUZ1bGxcbn0gZnJvbSBcIi4vY2xpZW50L3R5cGVzL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBjb25zdCBmaWxlc0NhY2hlID0gbmV3IE1hcDxzdHJpbmcsIEludGVybmFsRmlsZT4oKTtcblxuZXhwb3J0IGNvbnN0IG5vZGVzQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgSW50ZXJuYWxOb2RlIHwgSW50ZXJuYWxOb2RlRnVsbD4oKTtcblxuZXhwb3J0IGNvbnN0IHVzZXJzQ2FjaGUgPSBuZXcgTWFwPFxuICBzdHJpbmcsXG4gIFVzZXIgfCBVc2VyPHsgd2l0aFB1YmxpY0tleTogdHJ1ZSB9PlxuPigpO1xuIl0sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLE1BQU1BLFVBQVUsR0FBRyxJQUFJQyxHQUFKLEVBQW5CO0FBRVAsT0FBTyxNQUFNQyxVQUFVLEdBQUcsSUFBSUQsR0FBSixFQUFuQjtBQUVQLE9BQU8sTUFBTUUsVUFBVSxHQUFHLElBQUlGLEdBQUosRUFBbkIifQ==
@@ -0,0 +1,17 @@
1
+ import type { SecrecyClient, SuccessResponse, UserAppNotifications, UserAppSettings } from "../index.js";
2
+ import type { KeyPair } from "../crypto/index.js";
3
+ import type { ErrorAccessDenied, ErrorBasic, ErrorNotFound } from "../error.js";
4
+ import type { Thunder } from "../zeus/index.js";
5
+ import type { JwtPayload } from "jsonwebtoken";
6
+ export declare class SecrecyAppClient {
7
+ #private;
8
+ jwt: string;
9
+ jwtDecoded: JwtPayload;
10
+ constructor(uaJwt: string, _client: SecrecyClient, _keys: KeyPair, thunder: ReturnType<typeof Thunder>);
11
+ get userId(): string;
12
+ getJwt(): Promise<string>;
13
+ updateNotifications(notifications: Partial<UserAppNotifications>): Promise<SuccessResponse<UserAppNotifications> | ErrorAccessDenied | null>;
14
+ notifications(): Promise<SuccessResponse<UserAppNotifications> | ErrorAccessDenied | ErrorNotFound | null>;
15
+ settings(): Promise<SuccessResponse<UserAppSettings> | ErrorNotFound | null>;
16
+ updateSettings(settings: Partial<UserAppSettings>): Promise<SuccessResponse<UserAppSettings> | ErrorAccessDenied | ErrorBasic | null>;
17
+ }
@@ -0,0 +1,256 @@
1
+ import _classPrivateFieldLooseBase from "@babel/runtime/helpers/classPrivateFieldLooseBase";
2
+ import _classPrivateFieldLooseKey from "@babel/runtime/helpers/classPrivateFieldLooseKey";
3
+
4
+ /* eslint-disable @typescript-eslint/naming-convention */
5
+ import { decode } from "jsonwebtoken";
6
+ import { getStorage } from "./storage.js";
7
+
8
+ var _thunder = /*#__PURE__*/_classPrivateFieldLooseKey("thunder");
9
+
10
+ export class SecrecyAppClient {
11
+ // #client: SecrecyClient;
12
+ // #keys: KeyPair;
13
+ constructor(uaJwt, _client, _keys, thunder) {
14
+ Object.defineProperty(this, _thunder, {
15
+ writable: true,
16
+ value: void 0
17
+ });
18
+ this.jwt = uaJwt;
19
+ this.jwtDecoded = decode(uaJwt); // this.#client = client;
20
+ // this.#keys = keys;
21
+
22
+ _classPrivateFieldLooseBase(this, _thunder)[_thunder] = thunder;
23
+ }
24
+
25
+ get userId() {
26
+ return this.jwtDecoded.sub ?? "";
27
+ }
28
+
29
+ async getJwt() {
30
+ // TODO useful?
31
+ // if (this.jwtDecoded.exp && this.jwtDecoded.exp * 1000 < Date.now()) {
32
+ // return this.jwt;
33
+ // }
34
+ const {
35
+ getJwt
36
+ } = await _classPrivateFieldLooseBase(this, _thunder)[_thunder]("query")({
37
+ getJwt: [{
38
+ includeEmail: !!this.jwtDecoded.email
39
+ }, {
40
+ "...on ErrorAccessDenied": {
41
+ __typename: true,
42
+ message: true
43
+ },
44
+ "...on JwtResponse": {
45
+ __typename: true,
46
+ jwt: true
47
+ }
48
+ }]
49
+ });
50
+
51
+ if (!getJwt) {
52
+ return this.jwt;
53
+ }
54
+
55
+ if (getJwt.__typename === "ErrorAccessDenied") {
56
+ throw new Error(getJwt.message);
57
+ }
58
+
59
+ this.jwt = getJwt.jwt;
60
+ this.jwtDecoded = decode(getJwt.jwt);
61
+ const sessionStorage = getStorage(true);
62
+ const localStorage = getStorage(false);
63
+ const sessionJwt = sessionStorage.jwt.load();
64
+ const localJwt = localStorage.jwt.load();
65
+
66
+ if (sessionJwt) {
67
+ sessionStorage.jwt.save(getJwt.jwt);
68
+ }
69
+
70
+ if (localJwt) {
71
+ localStorage.jwt.save(getJwt.jwt);
72
+ }
73
+
74
+ return getJwt.jwt;
75
+ }
76
+
77
+ async updateNotifications(notifications) {
78
+ const {
79
+ updateAppNotifications
80
+ } = await _classPrivateFieldLooseBase(this, _thunder)[_thunder]("mutation", {
81
+ scalars: {
82
+ DateTime: {
83
+ decode: e => new Date(e),
84
+ encode: e => e.toISOString()
85
+ }
86
+ }
87
+ })({
88
+ updateAppNotifications: [notifications, {
89
+ "...on ErrorAccessDenied": {
90
+ __typename: true,
91
+ message: true
92
+ },
93
+ "...on UpdateAppNotificationsResponse": {
94
+ __typename: true,
95
+ updateAppNotifications: {
96
+ enableAll: true,
97
+ mail: true,
98
+ cloud: true,
99
+ disableAllUntil: true
100
+ }
101
+ }
102
+ }]
103
+ });
104
+
105
+ if (!updateAppNotifications) {
106
+ return null;
107
+ }
108
+
109
+ if (updateAppNotifications.__typename === "ErrorAccessDenied") {
110
+ return updateAppNotifications;
111
+ }
112
+
113
+ if (!updateAppNotifications.updateAppNotifications) {
114
+ return null;
115
+ }
116
+
117
+ return {
118
+ __typename: "SuccessResponse",
119
+ data: updateAppNotifications.updateAppNotifications
120
+ };
121
+ }
122
+
123
+ async notifications() {
124
+ const {
125
+ appNotifications
126
+ } = await _classPrivateFieldLooseBase(this, _thunder)[_thunder]("query", {
127
+ scalars: {
128
+ DateTime: {
129
+ decode: e => new Date(e),
130
+ encode: e => e.toISOString()
131
+ }
132
+ }
133
+ })({
134
+ appNotifications: {
135
+ "...on ErrorAccessDenied": {
136
+ __typename: true,
137
+ message: true
138
+ },
139
+ "...on ErrorNotFound": {
140
+ __typename: true,
141
+ message: true
142
+ },
143
+ "...on UserAppNotifications": {
144
+ __typename: true,
145
+ enableAll: true,
146
+ mail: true,
147
+ cloud: true,
148
+ disableAllUntil: true
149
+ }
150
+ }
151
+ });
152
+
153
+ if (!appNotifications) {
154
+ return null;
155
+ }
156
+
157
+ if (appNotifications.__typename === "ErrorAccessDenied") {
158
+ return appNotifications;
159
+ }
160
+
161
+ if (appNotifications.__typename === "ErrorNotFound") {
162
+ return appNotifications;
163
+ }
164
+
165
+ return {
166
+ __typename: "SuccessResponse",
167
+ data: appNotifications
168
+ };
169
+ }
170
+
171
+ async settings() {
172
+ var _user$user;
173
+
174
+ const {
175
+ user
176
+ } = await _classPrivateFieldLooseBase(this, _thunder)[_thunder]("query")({
177
+ user: [{}, {
178
+ "...on ErrorNotFound": {
179
+ __typename: true,
180
+ message: true
181
+ },
182
+ "...on UserResponse": {
183
+ __typename: true,
184
+ user: {
185
+ appSettings: {
186
+ cloudNodeDaysForDelete: true,
187
+ historyFileDaysForDelete: true,
188
+ historyMaxFileCount: true
189
+ }
190
+ }
191
+ }
192
+ }]
193
+ });
194
+
195
+ if (!user) {
196
+ return null;
197
+ }
198
+
199
+ if (user.__typename === "ErrorNotFound") {
200
+ return user;
201
+ }
202
+
203
+ if (!((_user$user = user.user) != null && _user$user.appSettings)) {
204
+ return null;
205
+ }
206
+
207
+ return {
208
+ __typename: "SuccessResponse",
209
+ data: user.user.appSettings
210
+ };
211
+ }
212
+
213
+ async updateSettings(settings) {
214
+ const {
215
+ updateAppSettings
216
+ } = await _classPrivateFieldLooseBase(this, _thunder)[_thunder]("mutation")({
217
+ updateAppSettings: [settings, {
218
+ "...on ErrorAccessDenied": {
219
+ __typename: true,
220
+ message: true
221
+ },
222
+ "...on ErrorBasic": {
223
+ __typename: true,
224
+ message: true
225
+ },
226
+ "...on UpdateAppSettingsResponse": {
227
+ __typename: true,
228
+ updateAppSettings: {
229
+ cloudNodeDaysForDelete: true,
230
+ historyFileDaysForDelete: true,
231
+ historyMaxFileCount: true
232
+ }
233
+ }
234
+ }]
235
+ });
236
+
237
+ if (!updateAppSettings) {
238
+ return null;
239
+ }
240
+
241
+ if (updateAppSettings.__typename === "ErrorAccessDenied") {
242
+ return updateAppSettings;
243
+ }
244
+
245
+ if (updateAppSettings.__typename === "ErrorBasic") {
246
+ return updateAppSettings;
247
+ }
248
+
249
+ return {
250
+ __typename: "SuccessResponse",
251
+ data: updateAppSettings.updateAppSettings
252
+ };
253
+ }
254
+
255
+ }
256
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZWNvZGUiLCJnZXRTdG9yYWdlIiwiU2VjcmVjeUFwcENsaWVudCIsImNvbnN0cnVjdG9yIiwidWFKd3QiLCJfY2xpZW50IiwiX2tleXMiLCJ0aHVuZGVyIiwiand0Iiwiand0RGVjb2RlZCIsInVzZXJJZCIsInN1YiIsImdldEp3dCIsImluY2x1ZGVFbWFpbCIsImVtYWlsIiwiX190eXBlbmFtZSIsIm1lc3NhZ2UiLCJFcnJvciIsInNlc3Npb25TdG9yYWdlIiwibG9jYWxTdG9yYWdlIiwic2Vzc2lvbkp3dCIsImxvYWQiLCJsb2NhbEp3dCIsInNhdmUiLCJ1cGRhdGVOb3RpZmljYXRpb25zIiwibm90aWZpY2F0aW9ucyIsInVwZGF0ZUFwcE5vdGlmaWNhdGlvbnMiLCJzY2FsYXJzIiwiRGF0ZVRpbWUiLCJlIiwiRGF0ZSIsImVuY29kZSIsInRvSVNPU3RyaW5nIiwiZW5hYmxlQWxsIiwibWFpbCIsImNsb3VkIiwiZGlzYWJsZUFsbFVudGlsIiwiZGF0YSIsImFwcE5vdGlmaWNhdGlvbnMiLCJzZXR0aW5ncyIsInVzZXIiLCJhcHBTZXR0aW5ncyIsImNsb3VkTm9kZURheXNGb3JEZWxldGUiLCJoaXN0b3J5RmlsZURheXNGb3JEZWxldGUiLCJoaXN0b3J5TWF4RmlsZUNvdW50IiwidXBkYXRlU2V0dGluZ3MiLCJ1cGRhdGVBcHBTZXR0aW5ncyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvU2VjcmVjeUFwcENsaWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gKi9cbmltcG9ydCB0eXBlIHtcbiAgU2VjcmVjeUNsaWVudCxcbiAgU3VjY2Vzc1Jlc3BvbnNlLFxuICBVc2VyQXBwTm90aWZpY2F0aW9ucyxcbiAgVXNlckFwcFNldHRpbmdzXG59IGZyb20gXCIuLi9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBLZXlQYWlyIH0gZnJvbSBcIi4uL2NyeXB0by9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFcnJvckFjY2Vzc0RlbmllZCwgRXJyb3JCYXNpYywgRXJyb3JOb3RGb3VuZCB9IGZyb20gXCIuLi9lcnJvci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBUaHVuZGVyIH0gZnJvbSBcIi4uL3pldXMvaW5kZXguanNcIjtcbmltcG9ydCB0eXBlIHsgSnd0UGF5bG9hZCB9IGZyb20gXCJqc29ud2VidG9rZW5cIjtcbmltcG9ydCB7IGRlY29kZSB9IGZyb20gXCJqc29ud2VidG9rZW5cIjtcbmltcG9ydCB7IGdldFN0b3JhZ2UgfSBmcm9tIFwiLi9zdG9yYWdlLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBTZWNyZWN5QXBwQ2xpZW50IHtcbiAgand0OiBzdHJpbmc7XG5cbiAgand0RGVjb2RlZDogSnd0UGF5bG9hZDtcblxuICAvLyAjY2xpZW50OiBTZWNyZWN5Q2xpZW50O1xuXG4gIC8vICNrZXlzOiBLZXlQYWlyO1xuXG4gICN0aHVuZGVyOiBSZXR1cm5UeXBlPHR5cGVvZiBUaHVuZGVyPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICB1YUp3dDogc3RyaW5nLFxuICAgIF9jbGllbnQ6IFNlY3JlY3lDbGllbnQsXG4gICAgX2tleXM6IEtleVBhaXIsXG4gICAgdGh1bmRlcjogUmV0dXJuVHlwZTx0eXBlb2YgVGh1bmRlcj5cbiAgKSB7XG4gICAgdGhpcy5qd3QgPSB1YUp3dDtcbiAgICB0aGlzLmp3dERlY29kZWQgPSBkZWNvZGUodWFKd3QpIGFzIEp3dFBheWxvYWQ7XG4gICAgLy8gdGhpcy4jY2xpZW50ID0gY2xpZW50O1xuICAgIC8vIHRoaXMuI2tleXMgPSBrZXlzO1xuICAgIHRoaXMuI3RodW5kZXIgPSB0aHVuZGVyO1xuICB9XG5cbiAgZ2V0IHVzZXJJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmp3dERlY29kZWQuc3ViID8/IFwiXCI7XG4gIH1cblxuICBhc3luYyBnZXRKd3QoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAvLyBUT0RPIHVzZWZ1bD9cbiAgICAvLyBpZiAodGhpcy5qd3REZWNvZGVkLmV4cCAmJiB0aGlzLmp3dERlY29kZWQuZXhwICogMTAwMCA8IERhdGUubm93KCkpIHtcbiAgICAvLyAgIHJldHVybiB0aGlzLmp3dDtcbiAgICAvLyB9XG5cbiAgICBjb25zdCB7IGdldEp3dCB9ID0gYXdhaXQgdGhpcy4jdGh1bmRlcihcInF1ZXJ5XCIpKHtcbiAgICAgIGdldEp3dDogW1xuICAgICAgICB7XG4gICAgICAgICAgaW5jbHVkZUVtYWlsOiAhIXRoaXMuand0RGVjb2RlZC5lbWFpbFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBKd3RSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgand0OiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWdldEp3dCkge1xuICAgICAgcmV0dXJuIHRoaXMuand0O1xuICAgIH1cblxuICAgIGlmIChnZXRKd3QuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZ2V0Snd0Lm1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHRoaXMuand0ID0gZ2V0Snd0Lmp3dDtcbiAgICB0aGlzLmp3dERlY29kZWQgPSBkZWNvZGUoZ2V0Snd0Lmp3dCkgYXMgSnd0UGF5bG9hZDtcblxuICAgIGNvbnN0IHNlc3Npb25TdG9yYWdlID0gZ2V0U3RvcmFnZSh0cnVlKTtcbiAgICBjb25zdCBsb2NhbFN0b3JhZ2UgPSBnZXRTdG9yYWdlKGZhbHNlKTtcblxuICAgIGNvbnN0IHNlc3Npb25Kd3QgPSBzZXNzaW9uU3RvcmFnZS5qd3QubG9hZCgpO1xuICAgIGNvbnN0IGxvY2FsSnd0ID0gbG9jYWxTdG9yYWdlLmp3dC5sb2FkKCk7XG5cbiAgICBpZiAoc2Vzc2lvbkp3dCkge1xuICAgICAgc2Vzc2lvblN0b3JhZ2Uuand0LnNhdmUoZ2V0Snd0Lmp3dCk7XG4gICAgfVxuXG4gICAgaWYgKGxvY2FsSnd0KSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuand0LnNhdmUoZ2V0Snd0Lmp3dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldEp3dC5qd3Q7XG4gIH1cblxuICBhc3luYyB1cGRhdGVOb3RpZmljYXRpb25zKFxuICAgIG5vdGlmaWNhdGlvbnM6IFBhcnRpYWw8VXNlckFwcE5vdGlmaWNhdGlvbnM+XG4gICk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPFVzZXJBcHBOb3RpZmljYXRpb25zPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgdXBkYXRlQXBwTm90aWZpY2F0aW9ucyB9ID0gYXdhaXQgdGhpcy4jdGh1bmRlcihcIm11dGF0aW9uXCIsIHtcbiAgICAgIHNjYWxhcnM6IHtcbiAgICAgICAgRGF0ZVRpbWU6IHtcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBuZXcgRGF0ZShlIGFzIHN0cmluZyksXG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gKGUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoe1xuICAgICAgdXBkYXRlQXBwTm90aWZpY2F0aW9uczogW1xuICAgICAgICBub3RpZmljYXRpb25zLFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVcGRhdGVBcHBOb3RpZmljYXRpb25zUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHVwZGF0ZUFwcE5vdGlmaWNhdGlvbnM6IHtcbiAgICAgICAgICAgICAgZW5hYmxlQWxsOiB0cnVlLFxuICAgICAgICAgICAgICBtYWlsOiB0cnVlLFxuICAgICAgICAgICAgICBjbG91ZDogdHJ1ZSxcbiAgICAgICAgICAgICAgZGlzYWJsZUFsbFVudGlsOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVwZGF0ZUFwcE5vdGlmaWNhdGlvbnMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh1cGRhdGVBcHBOb3RpZmljYXRpb25zLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHVwZGF0ZUFwcE5vdGlmaWNhdGlvbnM7XG4gICAgfVxuXG4gICAgaWYgKCF1cGRhdGVBcHBOb3RpZmljYXRpb25zLnVwZGF0ZUFwcE5vdGlmaWNhdGlvbnMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogdXBkYXRlQXBwTm90aWZpY2F0aW9ucy51cGRhdGVBcHBOb3RpZmljYXRpb25zXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIG5vdGlmaWNhdGlvbnMoKTogUHJvbWlzZTxcbiAgICB8IFN1Y2Nlc3NSZXNwb25zZTxVc2VyQXBwTm90aWZpY2F0aW9ucz5cbiAgICB8IEVycm9yQWNjZXNzRGVuaWVkXG4gICAgfCBFcnJvck5vdEZvdW5kXG4gICAgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgYXBwTm90aWZpY2F0aW9ucyB9ID0gYXdhaXQgdGhpcy4jdGh1bmRlcihcInF1ZXJ5XCIsIHtcbiAgICAgIHNjYWxhcnM6IHtcbiAgICAgICAgRGF0ZVRpbWU6IHtcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBuZXcgRGF0ZShlIGFzIHN0cmluZyksXG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gKGUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoe1xuICAgICAgYXBwTm90aWZpY2F0aW9uczoge1xuICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCIuLi5vbiBVc2VyQXBwTm90aWZpY2F0aW9uc1wiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBlbmFibGVBbGw6IHRydWUsXG4gICAgICAgICAgbWFpbDogdHJ1ZSxcbiAgICAgICAgICBjbG91ZDogdHJ1ZSxcbiAgICAgICAgICBkaXNhYmxlQWxsVW50aWw6IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFhcHBOb3RpZmljYXRpb25zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoYXBwTm90aWZpY2F0aW9ucy5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBhcHBOb3RpZmljYXRpb25zO1xuICAgIH1cblxuICAgIGlmIChhcHBOb3RpZmljYXRpb25zLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gYXBwTm90aWZpY2F0aW9ucztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGFwcE5vdGlmaWNhdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgc2V0dGluZ3MoKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8VXNlckFwcFNldHRpbmdzPiB8IEVycm9yTm90Rm91bmQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgdXNlciB9ID0gYXdhaXQgdGhpcy4jdGh1bmRlcihcInF1ZXJ5XCIpKHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gVXNlclJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICB1c2VyOiB7XG4gICAgICAgICAgICAgIGFwcFNldHRpbmdzOiB7XG4gICAgICAgICAgICAgICAgY2xvdWROb2RlRGF5c0ZvckRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoaXN0b3J5RmlsZURheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgICAgICAgaGlzdG9yeU1heEZpbGVDb3VudDogdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh1c2VyLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gdXNlcjtcbiAgICB9XG5cbiAgICBpZiAoIXVzZXIudXNlcj8uYXBwU2V0dGluZ3MpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogdXNlci51c2VyLmFwcFNldHRpbmdzXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVNldHRpbmdzKFxuICAgIHNldHRpbmdzOiBQYXJ0aWFsPFVzZXJBcHBTZXR0aW5ncz5cbiAgKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8VXNlckFwcFNldHRpbmdzPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JCYXNpYyB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyB1cGRhdGVBcHBTZXR0aW5ncyB9ID0gYXdhaXQgdGhpcy4jdGh1bmRlcihcIm11dGF0aW9uXCIpKHtcbiAgICAgIHVwZGF0ZUFwcFNldHRpbmdzOiBbXG4gICAgICAgIHNldHRpbmdzLFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvckJhc2ljXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFVwZGF0ZUFwcFNldHRpbmdzUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHVwZGF0ZUFwcFNldHRpbmdzOiB7XG4gICAgICAgICAgICAgIGNsb3VkTm9kZURheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgICAgIGhpc3RvcnlGaWxlRGF5c0ZvckRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgaGlzdG9yeU1heEZpbGVDb3VudDogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVBcHBTZXR0aW5ncykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZUFwcFNldHRpbmdzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHVwZGF0ZUFwcFNldHRpbmdzO1xuICAgIH1cblxuICAgIGlmICh1cGRhdGVBcHBTZXR0aW5ncy5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIHVwZGF0ZUFwcFNldHRpbmdzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogdXBkYXRlQXBwU2V0dGluZ3MudXBkYXRlQXBwU2V0dGluZ3NcbiAgICB9O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7OztBQUFBO0FBV0EsU0FBU0EsTUFBVCxRQUF1QixjQUF2QjtBQUNBLFNBQVNDLFVBQVQsUUFBMkIsY0FBM0I7Ozs7QUFFQSxPQUFPLE1BQU1DLGdCQUFOLENBQXVCO0VBSzVCO0VBRUE7RUFJQUMsV0FBVyxDQUNUQyxLQURTLEVBRVRDLE9BRlMsRUFHVEMsS0FIUyxFQUlUQyxPQUpTLEVBS1Q7SUFBQTtNQUFBO01BQUE7SUFBQTtJQUNBLEtBQUtDLEdBQUwsR0FBV0osS0FBWDtJQUNBLEtBQUtLLFVBQUwsR0FBa0JULE1BQU0sQ0FBQ0ksS0FBRCxDQUF4QixDQUZBLENBR0E7SUFDQTs7SUFDQSx3REFBZ0JHLE9BQWhCO0VBQ0Q7O0VBRVMsSUFBTkcsTUFBTSxHQUFXO0lBQ25CLE9BQU8sS0FBS0QsVUFBTCxDQUFnQkUsR0FBaEIsSUFBdUIsRUFBOUI7RUFDRDs7RUFFVyxNQUFOQyxNQUFNLEdBQW9CO0lBQzlCO0lBQ0E7SUFDQTtJQUNBO0lBRUEsTUFBTTtNQUFFQTtJQUFGLElBQWEsTUFBTSxzREFBYyxPQUFkLEVBQXVC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