@secrecy/lib 1.0.0-dev.6 → 1.0.0-dev.61
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.
- package/README.md +1 -1
- package/dist/BaseClient.d.ts +123 -0
- package/dist/BaseClient.js +569 -0
- package/{lib → dist}/PopupTools.d.ts +1 -1
- package/dist/PopupTools.js +221 -0
- package/{lib → dist}/ZeusThunder.d.ts +0 -0
- package/dist/ZeusThunder.js +79 -0
- package/dist/cache.d.ts +6 -0
- package/dist/cache.js +4 -0
- package/dist/client/SecrecyAppClient.d.ts +17 -0
- package/dist/client/SecrecyAppClient.js +256 -0
- package/dist/client/SecrecyCloudClient.d.ts +89 -0
- package/dist/client/SecrecyCloudClient.js +1627 -0
- package/dist/client/SecrecyDbClient.d.ts +21 -0
- package/dist/client/SecrecyDbClient.js +198 -0
- package/dist/client/SecrecyMailClient.d.ts +42 -0
- package/dist/client/SecrecyMailClient.js +1187 -0
- package/dist/client/SecrecyPayClient.d.ts +7 -0
- package/dist/client/SecrecyPayClient.js +37 -0
- package/dist/client/SecrecyWalletClient.d.ts +30 -0
- package/dist/client/SecrecyWalletClient.js +76 -0
- package/{lib → dist}/client/convert/file.d.ts +3 -3
- package/dist/client/convert/file.js +34 -0
- package/dist/client/convert/mail.d.ts +3 -0
- package/dist/client/convert/mail.js +48 -0
- package/dist/client/convert/node.d.ts +9 -0
- package/dist/client/convert/node.js +100 -0
- package/{lib → dist}/client/helpers.d.ts +6 -1
- package/dist/client/helpers.js +126 -0
- package/dist/client/index.d.ts +34 -0
- package/dist/client/index.js +52 -0
- package/{lib → dist}/client/storage.d.ts +0 -0
- package/dist/client/storage.js +12 -0
- package/dist/client/types/File.d.ts +14 -0
- package/dist/client/types/File.js +3 -0
- package/{lib → dist}/client/types/Inputs.d.ts +2 -7
- package/dist/client/types/Inputs.js +3 -0
- package/dist/client/types/Node.d.ts +56 -0
- package/dist/client/types/Node.js +3 -0
- package/dist/client/types/UserAppNotifications.d.ts +6 -0
- package/dist/client/types/UserAppNotifications.js +3 -0
- package/{lib → dist}/client/types/UserAppSettings.d.ts +1 -3
- package/dist/client/types/UserAppSettings.js +3 -0
- package/{lib → dist}/client/types/index.d.ts +10 -43
- package/dist/client/types/index.js +8 -0
- package/dist/client/types/selectors.d.ts +400 -0
- package/dist/client/types/selectors.js +138 -0
- package/{lib → dist}/crypto/file.d.ts +0 -0
- package/dist/crypto/file.js +210 -0
- package/{lib → dist}/crypto/index.d.ts +0 -0
- package/dist/crypto/index.js +47 -0
- package/dist/error.d.ts +30 -0
- package/dist/error.js +3 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +9 -0
- package/{lib → dist}/minify/index.d.ts +0 -0
- package/dist/minify/index.js +28 -0
- package/{lib → dist}/minify/lz4.d.ts +0 -0
- package/dist/minify/lz4.js +627 -0
- package/{lib → dist}/sodium.d.ts +0 -0
- package/dist/sodium.js +6 -0
- package/{lib → dist}/utils/store-buddy.d.ts +0 -0
- package/dist/utils/store-buddy.js +65 -0
- package/{lib → dist}/utils/time.d.ts +0 -0
- package/dist/utils/time.js +14 -0
- package/{lib → dist/utils}/utils.d.ts +0 -0
- package/dist/utils/utils.js +57 -0
- package/{lib → dist}/worker/md5.d.ts +0 -0
- package/dist/worker/md5.js +25 -0
- package/{lib → dist}/worker/sodium.d.ts +0 -0
- package/dist/worker/sodium.js +120 -0
- package/{lib → dist}/worker/workerCodes.d.ts +0 -0
- package/dist/worker/workerCodes.js +255 -0
- package/{lib → dist}/zeus/const.d.ts +5 -0
- package/dist/zeus/const.js +1286 -0
- package/dist/zeus/index.d.ts +6119 -0
- package/dist/zeus/index.js +687 -0
- package/package.json +60 -52
- package/lib/BaseClient.d.ts +0 -266
- package/lib/BaseClient.js +0 -1332
- package/lib/PopupTools.js +0 -213
- package/lib/ZeusThunder.js +0 -112
- package/lib/cache.d.ts +0 -7
- package/lib/cache.js +0 -5
- package/lib/client/convert/file.js +0 -39
- package/lib/client/convert/folder.d.ts +0 -8
- package/lib/client/convert/folder.js +0 -264
- package/lib/client/convert/mail.d.ts +0 -3
- package/lib/client/convert/mail.js +0 -46
- package/lib/client/convert/vFile.d.ts +0 -5
- package/lib/client/convert/vFile.js +0 -164
- package/lib/client/helpers.js +0 -116
- package/lib/client/index.d.ts +0 -166
- package/lib/client/index.js +0 -3697
- package/lib/client/storage.js +0 -12
- package/lib/client/types/File.d.ts +0 -21
- package/lib/client/types/File.js +0 -2
- package/lib/client/types/FilesOnUsersOnApplications.d.ts +0 -9
- package/lib/client/types/FilesOnUsersOnApplications.js +0 -2
- package/lib/client/types/Folder.d.ts +0 -68
- package/lib/client/types/Folder.js +0 -7
- package/lib/client/types/Inputs.js +0 -2
- package/lib/client/types/UserAppSettings.js +0 -2
- package/lib/client/types/VFile.d.ts +0 -62
- package/lib/client/types/VFile.js +0 -4
- package/lib/client/types/index.js +0 -8
- package/lib/client/types/queries.d.ts +0 -535
- package/lib/client/types/queries.js +0 -192
- package/lib/crypto/file.js +0 -291
- package/lib/crypto/index.js +0 -37
- package/lib/index.d.ts +0 -11
- package/lib/index.js +0 -40
- package/lib/minify/index.js +0 -28
- package/lib/minify/lz4.js +0 -633
- package/lib/sodium.js +0 -28
- package/lib/utils/store-buddy.js +0 -69
- package/lib/utils/time.js +0 -22
- package/lib/utils.js +0 -188
- package/lib/worker/__mock__/sodium.worker.d.ts +0 -19
- package/lib/worker/__mock__/sodium.worker.js +0 -57
- package/lib/worker/md5.js +0 -43
- package/lib/worker/sodium.js +0 -155
- package/lib/worker/workerCodes.js +0 -3
- package/lib/zeus/const.js +0 -1609
- package/lib/zeus/index.d.ts +0 -26113
- package/lib/zeus/index.js +0 -552
|
@@ -0,0 +1,221 @@
|
|
|
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
|
+
console.dir({
|
|
139
|
+
message
|
|
140
|
+
}, {
|
|
141
|
+
depth: Infinity
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
if (data && data.id === popupName) {
|
|
145
|
+
popupCallbackOnce(undefined, data);
|
|
146
|
+
window.removeEventListener("message", onMessage);
|
|
147
|
+
clearInterval(interval);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
window.addEventListener("message", onMessage, false);
|
|
152
|
+
|
|
153
|
+
if (win) {
|
|
154
|
+
interval = window.setInterval(function closePopupCallback() {
|
|
155
|
+
if (win === null || win.closed) {
|
|
156
|
+
setTimeout(function delayWindowClosing() {
|
|
157
|
+
clearInterval(interval);
|
|
158
|
+
popupCallbackOnce(new Error("Popup closed"));
|
|
159
|
+
}, 500);
|
|
160
|
+
}
|
|
161
|
+
}, 100);
|
|
162
|
+
} else {
|
|
163
|
+
popupCallbackOnce(new Error("Popup blocked"));
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return win;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Open a popup using the first argument.
|
|
170
|
+
* Wait for it to close and call the callback.
|
|
171
|
+
* Set the options string using the options object
|
|
172
|
+
* Returns the window object
|
|
173
|
+
*
|
|
174
|
+
* @param {String} url
|
|
175
|
+
* @param {String} name
|
|
176
|
+
* @param {Object} options
|
|
177
|
+
* @param {Function} callback
|
|
178
|
+
* @return {Object}
|
|
179
|
+
*/
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
export function popup(url, name, options, callback) {
|
|
183
|
+
return popupExecute(window.open, url, name, options, callback);
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Open a popup using the first argument.
|
|
187
|
+
* Post the data into the open popup.
|
|
188
|
+
* Wait for it to close and call the callback.
|
|
189
|
+
* Set the options string using the options object
|
|
190
|
+
* Returns the window object
|
|
191
|
+
*
|
|
192
|
+
* @param {String} url
|
|
193
|
+
* @param {Object} postData
|
|
194
|
+
* @param {String} name
|
|
195
|
+
* @param {Object} options
|
|
196
|
+
* @param {Function} callback
|
|
197
|
+
* @return {Object}
|
|
198
|
+
*/
|
|
199
|
+
|
|
200
|
+
export function popupWithPost(url, postData, name, options, callback) {
|
|
201
|
+
function openWithPostData(popupUrl, popupName, optionsString) {
|
|
202
|
+
return openPopupWithPost(popupUrl, postData, popupName, optionsString);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
return popupExecute(openWithPostData, url, name, options, callback);
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Return html that when executed, will trigger the popup to callback with a response
|
|
209
|
+
*
|
|
210
|
+
* @param {Object}
|
|
211
|
+
* @return {String}
|
|
212
|
+
*/
|
|
213
|
+
|
|
214
|
+
export function popupResponse(id, data) {
|
|
215
|
+
const jsonData = JSON.stringify({
|
|
216
|
+
id,
|
|
217
|
+
data
|
|
218
|
+
});
|
|
219
|
+
return `<script>window.opener.postMessage(${jsonData}, "*");setTimeout(function() { window.close(); }, 50);</script>`;
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZWZhdWx0T3B0aW9ucyIsIndpZHRoIiwiaGVpZ2h0IiwibWVudWJhciIsInJlc2l6YWJsZSIsImxvY2F0aW9uIiwic2Nyb2xsYmFycyIsImNlbnRlcmVkIiwicG9wdXBDb3VudCIsIm9wdGlvbnNUb1N0cmluZyIsIm9wdGlvbnMiLCJPYmplY3QiLCJlbnRyaWVzIiwibWFwIiwiayIsInYiLCJqb2luIiwiZGVmYXVsdFBvcHVwTmFtZSIsIm9wdGlvbnNSZXNvbHZlQ2VudGVyZWQiLCJFcnJvciIsInJlc3VsdCIsIndpbmRvdyIsIm91dGVyV2lkdGgiLCJvdXRlckhlaWdodCIsImxlZnQiLCJNYXRoIiwicm91bmQiLCJzY3JlZW5YIiwidG9wIiwic2NyZWVuWSIsIm9wZW5Qb3B1cFdpdGhQb3N0IiwidXJsIiwicG9zdERhdGEiLCJuYW1lIiwiZm9ybSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsIndpbiIsInNldEF0dHJpYnV0ZSIsImtleXMiLCJmb3JFYWNoIiwiYWRkRm9ybUl0ZW0iLCJrZXkiLCJpbnB1dCIsInR5cGUiLCJ2YWx1ZSIsImFwcGVuZENoaWxkIiwiYm9keSIsIm9wZW4iLCJ3cml0ZSIsInN1Ym1pdCIsInJlbW92ZUNoaWxkIiwicG9wdXBFeGVjdXRlIiwiZXhlY3V0ZSIsImNhbGxiYWNrIiwicG9wdXBOYW1lIiwicG9wdXBPcHRpb25zIiwiYXNzaWduIiwicG9wdXBDYWxsYmFjayIsIm5vb3AiLCJvcHRpb25zU3RyaW5nIiwiaXNNZXNzYWdlU2VudCIsImludGVydmFsIiwicG9wdXBDYWxsYmFja09uY2UiLCJlcnIiLCJkYXRhIiwib25NZXNzYWdlIiwibWVzc2FnZSIsInVuZGVmaW5lZCIsImNvbnNvbGUiLCJkaXIiLCJkZXB0aCIsIkluZmluaXR5IiwiaWQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY2xlYXJJbnRlcnZhbCIsImFkZEV2ZW50TGlzdGVuZXIiLCJzZXRJbnRlcnZhbCIsImNsb3NlUG9wdXBDYWxsYmFjayIsImNsb3NlZCIsInNldFRpbWVvdXQiLCJkZWxheVdpbmRvd0Nsb3NpbmciLCJwb3B1cCIsInBvcHVwV2l0aFBvc3QiLCJvcGVuV2l0aFBvc3REYXRhIiwicG9wdXBVcmwiLCJwb3B1cFJlc3BvbnNlIiwianNvbkRhdGEiLCJKU09OIiwic3RyaW5naWZ5Il0sInNvdXJjZXMiOlsiLi4vc3JjL1BvcHVwVG9vbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUUyBSZXdyaXRlIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9lbmhhbmN2L3BvcHVwLXRvb2xzXG4gKi9cblxudHlwZSBZZXNObyA9IFwieWVzXCIgfCBcIm5vXCI7XG50eXBlIE9wdGlvbnMgPSB7XG4gIHdpZHRoPzogbnVtYmVyO1xuICBoZWlnaHQ/OiBudW1iZXI7XG4gIG1lbnViYXI6IFllc05vO1xuICByZXNpemFibGU6IFllc05vO1xuICBsb2NhdGlvbjogWWVzTm87XG4gIHNjcm9sbGJhcnM6IFllc05vO1xuICBjZW50ZXJlZD86IGJvb2xlYW47XG4gIGxlZnQ/OiBudW1iZXI7XG4gIHRvcD86IG51bWJlcjtcbn07XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBPcHRpb25zID0ge1xuICB3aWR0aDogNzAwLFxuICBoZWlnaHQ6IDUyMCxcbiAgbWVudWJhcjogXCJub1wiLFxuICByZXNpemFibGU6IFwieWVzXCIsXG4gIGxvY2F0aW9uOiBcInllc1wiLFxuICBzY3JvbGxiYXJzOiBcIm5vXCIsXG4gIGNlbnRlcmVkOiB0cnVlXG59O1xuXG50eXBlIENhbGxiYWNrID0gKGVycj86IEVycm9yLCBkYXRhPzogdW5rbm93bikgPT4gdm9pZDtcblxudHlwZSBXaW5kb3dPcGVuID0gKFxuICBwb3B1cFVybDogc3RyaW5nLFxuICBwb3B1cE5hbWU6IHN0cmluZyxcbiAgb3B0aW9uc1N0cmluZzogc3RyaW5nXG4pID0+IFdpbmRvdyB8IG51bGw7XG5cbmxldCBwb3B1cENvdW50ID0gMTtcblxuLyoqXG4gKiBSZXR1cm4gb3B0aW9ucyBjb252ZXJ0ZWQgdG8gYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gb3B0aW9uc1RvU3RyaW5nPFQgZXh0ZW5kcyBPcHRpb25zPihvcHRpb25zOiBUKTogc3RyaW5nIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMpXG4gICAgLm1hcCgoW2ssIHZdKSA9PiBgJHtrfT0ke3Z9YClcbiAgICAuam9pbihcIixcIik7XG59XG5cbi8qKlxuICogR2V0IGEgdW5pcXVlIG5hbWUgb24gZWFjaCBjYWxsXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGRlZmF1bHRQb3B1cE5hbWUoKTogc3RyaW5nIHtcbiAgcG9wdXBDb3VudCArPSAxO1xuICByZXR1cm4gYFBvcHVwICR7cG9wdXBDb3VudH1gO1xufVxuXG4vKipcbiAqIENvbnZlcnQgXCJjZW50ZXJlZDogdHJ1ZVwiIGtleSBpbnRvIGNvbmNyZXRlIGxlZnQgYW5kIHRvcCBhcmd1bWVudHNcbiAqIEJvdGggY2FuIGJlIG92ZXJ3cml0dGVuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIG9wdGlvbnNSZXNvbHZlQ2VudGVyZWQob3B0aW9uczogT3B0aW9ucyk6IE9wdGlvbnMge1xuICBpZiAoIW9wdGlvbnMud2lkdGggfHwgIW9wdGlvbnMuaGVpZ2h0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU2hvdWxkIGhhdmUgd2lkdGggYW5kIGhlaWdodFwiKTtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7IC4uLm9wdGlvbnMgfTtcbiAgY29uc3Qgd2lkdGggPSB3aW5kb3cub3V0ZXJXaWR0aCAtIG9wdGlvbnMud2lkdGg7XG4gIGNvbnN0IGhlaWdodCA9IHdpbmRvdy5vdXRlckhlaWdodCAtIG9wdGlvbnMuaGVpZ2h0O1xuXG4gIGlmIChvcHRpb25zLmNlbnRlcmVkKSB7XG4gICAgcmVzdWx0LmxlZnQgPSBvcHRpb25zLmxlZnQgfHwgTWF0aC5yb3VuZCh3aW5kb3cuc2NyZWVuWCArIHdpZHRoIC8gMik7XG4gICAgcmVzdWx0LnRvcCA9IG9wdGlvbnMudG9wIHx8IE1hdGgucm91bmQod2luZG93LnNjcmVlblkgKyBoZWlnaHQgLyAyLjUpO1xuICAgIGRlbGV0ZSByZXN1bHQuY2VudGVyZWQ7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBmb3JtIGVsZW1lbnQsIGFkZCBoaWRkZW4gaW5wdXRzIGZvciBhbGwgdGhlIHBvc3QgZGF0YVxuICogYW5kIHBvc3QgaXQgaW50byBhIG5ld2x5IG9wZW5lZCBwb3B1cFxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gdXJsXG4gKiBAcGFyYW0gIHtPYmplY3R9IHBvc3REYXRhXG4gKiBAcGFyYW0gIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBvcGVuUG9wdXBXaXRoUG9zdChcbiAgdXJsOiBzdHJpbmcsXG4gIHBvc3REYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBuYW1lOiBzdHJpbmcsXG4gIG9wdGlvbnM6IHN0cmluZ1xuKTogV2luZG93IHwgbnVsbCB7XG4gIGNvbnN0IGZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiKTtcbiAgbGV0IHdpbjogV2luZG93IHwgbnVsbCA9IG51bGw7XG5cbiAgZm9ybS5zZXRBdHRyaWJ1dGUoXCJtZXRob2RcIiwgXCJwb3N0XCIpO1xuICBmb3JtLnNldEF0dHJpYnV0ZShcImFjdGlvblwiLCB1cmwpO1xuICBmb3JtLnNldEF0dHJpYnV0ZShcInRhcmdldFwiLCBuYW1lKTtcblxuICBPYmplY3Qua2V5cyhwb3N0RGF0YSkuZm9yRWFjaChmdW5jdGlvbiBhZGRGb3JtSXRlbShrZXkpIHtcbiAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICBpbnB1dC50eXBlID0gXCJoaWRkZW5cIjtcbiAgICBpbnB1dC5uYW1lID0ga2V5O1xuICAgIGlucHV0LnZhbHVlID0gcG9zdERhdGFba2V5XTtcbiAgICBmb3JtLmFwcGVuZENoaWxkKGlucHV0KTtcbiAgfSk7XG5cbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmb3JtKTtcblxuICB3aW4gPSB3aW5kb3cub3BlbihcIi9cIiwgbmFtZSwgb3B0aW9ucyk7XG4gIHdpbj8uZG9jdW1lbnQud3JpdGUoXCJMb2FkaW5nLi4uXCIpO1xuXG4gIGZvcm0uc3VibWl0KCk7XG4gIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZm9ybSk7XG5cbiAgcmV0dXJuIHdpbjtcbn1cblxuLyoqXG4gKiBPcGVuIGEgcG9wdXAgdXNpbmcgdGhlIGZpcnN0IGFyZ3VtZW50LiBXYWl0IGZvciBpdCB0byBjbG9zZS5cbiAqIFJldHVybnMgdGhlIHdpbmRvdyBvYmplY3RcbiAqXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn1cbiAqIEBwYXJhbSAge1N0cmluZ31cbiAqIEBwYXJhbSAge1N0cmluZ31cbiAqIEBwYXJhbSAge09iamVjdH1cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufVxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBwb3B1cEV4ZWN1dGUoXG4gIGV4ZWN1dGU6IFdpbmRvd09wZW4sXG4gIHVybDogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFBhcnRpYWw8T3B0aW9ucz4sXG4gIGNhbGxiYWNrOiBDYWxsYmFja1xuKTogV2luZG93IHwgbnVsbCB7XG4gIGNvbnN0IHBvcHVwTmFtZSA9IG5hbWUgfHwgZGVmYXVsdFBvcHVwTmFtZSgpO1xuICBjb25zdCBwb3B1cE9wdGlvbnMgPSBvcHRpb25zUmVzb2x2ZUNlbnRlcmVkKFxuICAgIE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKVxuICApO1xuICBjb25zdCBwb3B1cENhbGxiYWNrID1cbiAgICBjYWxsYmFjayB8fFxuICAgIGZ1bmN0aW9uIG5vb3AoKTogdm9pZCB7XG4gICAgICAvL1xuICAgIH07XG4gIGNvbnN0IG9wdGlvbnNTdHJpbmcgPSBvcHRpb25zVG9TdHJpbmcocG9wdXBPcHRpb25zKTtcbiAgY29uc3Qgd2luID0gZXhlY3V0ZSh1cmwsIHBvcHVwTmFtZSwgb3B0aW9uc1N0cmluZyk7XG4gIGxldCBpc01lc3NhZ2VTZW50ID0gZmFsc2U7XG4gIGxldCBpbnRlcnZhbDogbnVtYmVyO1xuXG4gIGZ1bmN0aW9uIHBvcHVwQ2FsbGJhY2tPbmNlKGVycj86IEVycm9yLCBkYXRhPzogdW5rbm93bik6IHZvaWQge1xuICAgIGlmICghaXNNZXNzYWdlU2VudCkge1xuICAgICAgaXNNZXNzYWdlU2VudCA9IHRydWU7XG4gICAgICBwb3B1cENhbGxiYWNrKGVyciwgZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25NZXNzYWdlKG1lc3NhZ2U/OiBNZXNzYWdlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhID0gbWVzc2FnZSA/IG1lc3NhZ2UuZGF0YSA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnNvbGUuZGlyKHsgbWVzc2FnZSB9LCB7IGRlcHRoOiBJbmZpbml0eSB9KTtcblxuICAgIGlmIChkYXRhICYmIGRhdGEuaWQgPT09IHBvcHVwTmFtZSkge1xuICAgICAgcG9wdXBDYWxsYmFja09uY2UodW5kZWZpbmVkLCBkYXRhKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBvbk1lc3NhZ2UpO1xuICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgfVxuICB9XG5cbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG9uTWVzc2FnZSwgZmFsc2UpO1xuXG4gIGlmICh3aW4pIHtcbiAgICBpbnRlcnZhbCA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbiBjbG9zZVBvcHVwQ2FsbGJhY2soKSB7XG4gICAgICBpZiAod2luID09PSBudWxsIHx8IHdpbi5jbG9zZWQpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiBkZWxheVdpbmRvd0Nsb3NpbmcoKSB7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICAgICAgcG9wdXBDYWxsYmFja09uY2UobmV3IEVycm9yKFwiUG9wdXAgY2xvc2VkXCIpKTtcbiAgICAgICAgfSwgNTAwKTtcbiAgICAgIH1cbiAgICB9LCAxMDApO1xuICB9IGVsc2Uge1xuICAgIHBvcHVwQ2FsbGJhY2tPbmNlKG5ldyBFcnJvcihcIlBvcHVwIGJsb2NrZWRcIikpO1xuICB9XG5cbiAgcmV0dXJuIHdpbjtcbn1cblxuLyoqXG4gKiBPcGVuIGEgcG9wdXAgdXNpbmcgdGhlIGZpcnN0IGFyZ3VtZW50LlxuICogV2FpdCBmb3IgaXQgdG8gY2xvc2UgYW5kIGNhbGwgdGhlIGNhbGxiYWNrLlxuICogU2V0IHRoZSBvcHRpb25zIHN0cmluZyB1c2luZyB0aGUgb3B0aW9ucyBvYmplY3RcbiAqIFJldHVybnMgdGhlIHdpbmRvdyBvYmplY3RcbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHVybFxuICogQHBhcmFtICB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcG9wdXAoXG4gIHVybDogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFBhcnRpYWw8T3B0aW9ucz4sXG4gIGNhbGxiYWNrOiBDYWxsYmFja1xuKTogV2luZG93IHwgbnVsbCB7XG4gIHJldHVybiBwb3B1cEV4ZWN1dGUod2luZG93Lm9wZW4sIHVybCwgbmFtZSwgb3B0aW9ucywgY2FsbGJhY2spO1xufVxuXG4vKipcbiAqIE9wZW4gYSBwb3B1cCB1c2luZyB0aGUgZmlyc3QgYXJndW1lbnQuXG4gKiBQb3N0IHRoZSBkYXRhIGludG8gdGhlIG9wZW4gcG9wdXAuXG4gKiBXYWl0IGZvciBpdCB0byBjbG9zZSBhbmQgY2FsbCB0aGUgY2FsbGJhY2suXG4gKiBTZXQgdGhlIG9wdGlvbnMgc3RyaW5nIHVzaW5nIHRoZSBvcHRpb25zIG9iamVjdFxuICogUmV0dXJucyB0aGUgd2luZG93IG9iamVjdFxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gdXJsXG4gKiBAcGFyYW0gIHtPYmplY3R9IHBvc3REYXRhXG4gKiBAcGFyYW0gIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb3B1cFdpdGhQb3N0KFxuICB1cmw6IHN0cmluZyxcbiAgcG9zdERhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIG5hbWU6IHN0cmluZyxcbiAgb3B0aW9uczogUGFydGlhbDxPcHRpb25zPixcbiAgY2FsbGJhY2s6IENhbGxiYWNrXG4pOiBXaW5kb3cgfCBudWxsIHtcbiAgZnVuY3Rpb24gb3BlbldpdGhQb3N0RGF0YShcbiAgICBwb3B1cFVybDogc3RyaW5nLFxuICAgIHBvcHVwTmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnNTdHJpbmc6IHN0cmluZ1xuICApOiBXaW5kb3cgfCBudWxsIHtcbiAgICByZXR1cm4gb3BlblBvcHVwV2l0aFBvc3QocG9wdXBVcmwsIHBvc3REYXRhLCBwb3B1cE5hbWUsIG9wdGlvbnNTdHJpbmcpO1xuICB9XG5cbiAgcmV0dXJuIHBvcHVwRXhlY3V0ZShvcGVuV2l0aFBvc3REYXRhLCB1cmwsIG5hbWUsIG9wdGlvbnMsIGNhbGxiYWNrKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gaHRtbCB0aGF0IHdoZW4gZXhlY3V0ZWQsIHdpbGwgdHJpZ2dlciB0aGUgcG9wdXAgdG8gY2FsbGJhY2sgd2l0aCBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fVxuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcG9wdXBSZXNwb25zZTxUPihpZDogc3RyaW5nLCBkYXRhOiBUKTogc3RyaW5nIHtcbiAgY29uc3QganNvbkRhdGEgPSBKU09OLnN0cmluZ2lmeSh7IGlkLCBkYXRhIH0pO1xuXG4gIHJldHVybiBgPHNjcmlwdD53aW5kb3cub3BlbmVyLnBvc3RNZXNzYWdlKCR7anNvbkRhdGF9LCBcIipcIik7c2V0VGltZW91dChmdW5jdGlvbigpIHsgd2luZG93LmNsb3NlKCk7IH0sIDUwKTs8L3NjcmlwdD5gO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFlQSxNQUFNQSxjQUF1QixHQUFHO0VBQzlCQyxLQUFLLEVBQUUsR0FEdUI7RUFFOUJDLE1BQU0sRUFBRSxHQUZzQjtFQUc5QkMsT0FBTyxFQUFFLElBSHFCO0VBSTlCQyxTQUFTLEVBQUUsS0FKbUI7RUFLOUJDLFFBQVEsRUFBRSxLQUxvQjtFQU05QkMsVUFBVSxFQUFFLElBTmtCO0VBTzlCQyxRQUFRLEVBQUU7QUFQb0IsQ0FBaEM7QUFrQkEsSUFBSUMsVUFBVSxHQUFHLENBQWpCO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLFNBQVNDLGVBQVQsQ0FBNENDLE9BQTVDLEVBQWdFO0VBQzlELE9BQU9DLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlRixPQUFmLEVBQ0pHLEdBREksQ0FDQTtJQUFBLElBQUMsQ0FBQ0MsQ0FBRCxFQUFJQyxDQUFKLENBQUQ7SUFBQSxPQUFhLEdBQUVELENBQUUsSUFBR0MsQ0FBRSxFQUF0QjtFQUFBLENBREEsRUFFSkMsSUFGSSxDQUVDLEdBRkQsQ0FBUDtBQUdEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFNBQVNDLGdCQUFULEdBQW9DO0VBQ2xDVCxVQUFVLElBQUksQ0FBZDtFQUNBLE9BQVEsU0FBUUEsVUFBVyxFQUEzQjtBQUNEO0FBRUQ7QUFDQTtBQUNBO0FB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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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
|
package/dist/cache.d.ts
ADDED
|
@@ -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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
|