socket-function 1.2.2 → 1.2.4
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/SocketFunction.d.ts +1 -1
- package/SocketFunctionTypes.d.ts +1 -1
- package/hot/HotReloadController.d.ts +3 -3
- package/index.d.ts +25 -10
- package/package.json +1 -1
- package/require/CSSShim.d.ts +1 -1
- package/require/RequireController.d.ts +2 -2
- package/require/compileFlags.d.ts +1 -1
- package/require/require.d.ts +1 -1
- package/src/callManager.d.ts +1 -1
- package/test.ts +5 -11
- package/time/trueTimeShim.d.ts +16 -1
- package/time/trueTimeShim.ts +43 -7
- package/dist/SetProcessVariables.ts.cache +0 -9
- package/dist/SocketFunction.ts.cache +0 -467
- package/hot/dist/HotReloadController.ts.cache +0 -252
- package/require/dist/RequireController.ts.cache +0 -386
- package/require/dist/compileFlags.ts.cache +0 -41
- package/require/dist/extMapper.ts.cache +0 -368
- package/require/dist/require.ts.cache +0 -676
- package/src/JSONLACKS/dist/JSONLACKS.ts.cache +0 -469
- package/src/dist/CallFactory.ts.cache +0 -930
- package/src/dist/Zip.ts.cache +0 -156
- package/src/dist/batching.ts.cache +0 -377
- package/src/dist/bits.ts.cache +0 -121
- package/src/dist/buffers.ts.cache +0 -76
- package/src/dist/caching.ts.cache +0 -302
- package/src/dist/callHTTPHandler.ts.cache +0 -264
- package/src/dist/callManager.ts.cache +0 -159
- package/src/dist/certStore.ts.cache +0 -59
- package/src/dist/createSingleton.ts.cache +0 -62
- package/src/dist/fixLargeNetworkCalls.ts.cache +0 -17
- package/src/dist/forwardPort.ts.cache +0 -222
- package/src/dist/https.ts.cache +0 -141
- package/src/dist/misc.ts.cache +0 -499
- package/src/dist/nodeCache.ts.cache +0 -136
- package/src/dist/nodeProxy.ts.cache +0 -57
- package/src/dist/protocolNegotiation.ts.cache +0 -101
- package/src/dist/tlsParsing.ts.cache +0 -85
- package/src/dist/types.ts.cache +0 -9
- package/src/dist/webSocketServer.ts.cache +0 -365
- package/src/dist/websocketFactory.ts.cache +0 -53
- package/src/formatting/dist/colors.ts.cache +0 -98
- package/src/formatting/dist/format.ts.cache +0 -396
- package/src/formatting/dist/logColors.ts.cache +0 -28
- package/src/lz4/dist/LZ4.ts.cache +0 -53
- package/src/profiling/dist/getOwnTime.ts.cache +0 -100
- package/src/profiling/dist/measure.ts.cache +0 -338
- package/src/profiling/dist/stats.ts.cache +0 -202
- package/src/profiling/dist/statsFormat.ts.cache +0 -45
- package/time/dist/trueTimeShim.ts.cache +0 -707
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
"use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
3
|
-
//exports.createSingleton = void 0;
|
|
4
|
-
// A namespace on globalThis that holds state shared across every copy of this package that
|
|
5
|
-
// happens to be loaded in the same process. When two (type-compatible) versions of
|
|
6
|
-
// socket-function end up installed at once - ex, as nested dependencies - each gets its own
|
|
7
|
-
// set of module instances, so module-level registries (exposed classes, the node connection
|
|
8
|
-
// cache, mount state, ...) would otherwise be split into disconnected copies, and a call
|
|
9
|
-
// routed through one copy wouldn't see a class registered through the other. Every copy of
|
|
10
|
-
// this file references the same string literal below, so they all read and write the same
|
|
11
|
-
// underlying store, letting compatible versions share that state instead.
|
|
12
|
-
const GLOBAL_KEY = "__socketFunctionSingletons__";
|
|
13
|
-
function getStore() {
|
|
14
|
-
let store = globalThis[GLOBAL_KEY];
|
|
15
|
-
if (!store) {
|
|
16
|
-
store = { values: Object.create(null), versions: Object.create(null) };
|
|
17
|
-
globalThis[GLOBAL_KEY] = store;
|
|
18
|
-
}
|
|
19
|
-
return store;
|
|
20
|
-
}
|
|
21
|
-
/** Stores a value on globalThis so it is shared across every copy of socket-function loaded in
|
|
22
|
-
* the process, provided each copy passes the same name and version. Use this only for state
|
|
23
|
-
* that MUST be process-global to stay correct when multiple compatible versions are installed
|
|
24
|
-
* at once - ex, the registry of exposed classes, the node connection cache, and mount state.
|
|
25
|
-
* Regular config and caches that are fine to keep per-copy should NOT use this.
|
|
26
|
-
* - version is part of the identity. Bump it only when the shape of the stored value changes in a
|
|
27
|
-
* way that makes an old and a new copy unable to safely share it. Copies that disagree on the
|
|
28
|
-
* version get separate slots (so they will NOT share), which is the correct outcome, as they
|
|
29
|
-
* can't interoperate - and we warn so the situation is visible.
|
|
30
|
-
* - getDefault runs at most once per name+version, lazily, the first time get() is called.
|
|
31
|
-
* - For a value that is mutated in place (a Map/Set/array/object), just call get() once and keep
|
|
32
|
-
* the reference. For a value that gets reassigned (a primitive, or a whole-object swap), use
|
|
33
|
-
* get()/set() at each access so every copy sees the latest.
|
|
34
|
-
*/
|
|
35
|
-
function createSingleton(name, version, getDefault) {
|
|
36
|
-
const store = getStore();
|
|
37
|
-
const versionStr = String(version);
|
|
38
|
-
const key = `${name}@${versionStr}`;
|
|
39
|
-
let seenVersions = store.versions[name];
|
|
40
|
-
if (!seenVersions) {
|
|
41
|
-
seenVersions = store.versions[name] = new Set();
|
|
42
|
-
}
|
|
43
|
-
seenVersions.add(versionStr);
|
|
44
|
-
if (seenVersions.size > 1) {
|
|
45
|
-
console.warn(`socket-function: singleton ${JSON.stringify(name)} requested at multiple versions (${Array.from(seenVersions).join(", ")}). These copies will NOT share state, which usually means incompatible versions of a package are loaded at once.`);
|
|
46
|
-
}
|
|
47
|
-
return {
|
|
48
|
-
get() {
|
|
49
|
-
const values = store.values;
|
|
50
|
-
if (!(key in values)) {
|
|
51
|
-
values[key] = getDefault();
|
|
52
|
-
}
|
|
53
|
-
return values[key];
|
|
54
|
-
},
|
|
55
|
-
set(value) {
|
|
56
|
-
store.values[key] = value;
|
|
57
|
-
},
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
exports.createSingleton = createSingleton;
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlU2luZ2xldG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY3JlYXRlU2luZ2xldG9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJGQUEyRjtBQUMzRixvRkFBb0Y7QUFDcEYsNkZBQTZGO0FBQzdGLDZGQUE2RjtBQUM3RiwwRkFBMEY7QUFDMUYsNEZBQTRGO0FBQzVGLDJGQUEyRjtBQUMzRiwyRUFBMkU7QUFDM0UsTUFBTSxVQUFVLEdBQUcsOEJBQThCLENBQUM7QUFTbEQsU0FBUyxRQUFRO0lBQ2IsSUFBSSxLQUFLLEdBQUksVUFBa0IsQ0FBQyxVQUFVLENBQStCLENBQUM7SUFDMUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1QsS0FBSyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN0RSxVQUFrQixDQUFDLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUM1QyxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQztBQU9EOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxTQUFnQixlQUFlLENBQzNCLElBQVksRUFDWixPQUF3QixFQUN4QixVQUFtQjtJQUVuQixNQUFNLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQztJQUN6QixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksVUFBVSxFQUFFLENBQUM7SUFFcEMsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDaEIsWUFBWSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBQ0QsWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM3QixJQUFJLFlBQVksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsb0NBQW9DLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrSEFBa0gsQ0FBQyxDQUFDO0lBQzlQLENBQUM7SUFFRCxPQUFPO1FBQ0gsR0FBRztZQUNDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDNUIsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ25CLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQztZQUMvQixDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFNLENBQUM7UUFDNUIsQ0FBQztRQUNELEdBQUcsQ0FBQyxLQUFRO1lBQ1IsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDOUIsQ0FBQztLQUNKLENBQUM7QUFDTixDQUFDO0FBOUJELDBDQThCQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEEgbmFtZXNwYWNlIG9uIGdsb2JhbFRoaXMgdGhhdCBob2xkcyBzdGF0ZSBzaGFyZWQgYWNyb3NzIGV2ZXJ5IGNvcHkgb2YgdGhpcyBwYWNrYWdlIHRoYXRcbi8vICBoYXBwZW5zIHRvIGJlIGxvYWRlZCBpbiB0aGUgc2FtZSBwcm9jZXNzLiBXaGVuIHR3byAodHlwZS1jb21wYXRpYmxlKSB2ZXJzaW9ucyBvZlxuLy8gIHNvY2tldC1mdW5jdGlvbiBlbmQgdXAgaW5zdGFsbGVkIGF0IG9uY2UgLSBleCwgYXMgbmVzdGVkIGRlcGVuZGVuY2llcyAtIGVhY2ggZ2V0cyBpdHMgb3duXG4vLyAgc2V0IG9mIG1vZHVsZSBpbnN0YW5jZXMsIHNvIG1vZHVsZS1sZXZlbCByZWdpc3RyaWVzIChleHBvc2VkIGNsYXNzZXMsIHRoZSBub2RlIGNvbm5lY3Rpb25cbi8vICBjYWNoZSwgbW91bnQgc3RhdGUsIC4uLikgd291bGQgb3RoZXJ3aXNlIGJlIHNwbGl0IGludG8gZGlzY29ubmVjdGVkIGNvcGllcywgYW5kIGEgY2FsbFxuLy8gIHJvdXRlZCB0aHJvdWdoIG9uZSBjb3B5IHdvdWxkbid0IHNlZSBhIGNsYXNzIHJlZ2lzdGVyZWQgdGhyb3VnaCB0aGUgb3RoZXIuIEV2ZXJ5IGNvcHkgb2Zcbi8vICB0aGlzIGZpbGUgcmVmZXJlbmNlcyB0aGUgc2FtZSBzdHJpbmcgbGl0ZXJhbCBiZWxvdywgc28gdGhleSBhbGwgcmVhZCBhbmQgd3JpdGUgdGhlIHNhbWVcbi8vICB1bmRlcmx5aW5nIHN0b3JlLCBsZXR0aW5nIGNvbXBhdGlibGUgdmVyc2lvbnMgc2hhcmUgdGhhdCBzdGF0ZSBpbnN0ZWFkLlxuY29uc3QgR0xPQkFMX0tFWSA9IFwiX19zb2NrZXRGdW5jdGlvblNpbmdsZXRvbnNfX1wiO1xuXG5pbnRlcmZhY2UgU2luZ2xldG9uU3RvcmUge1xuICAgIHZhbHVlczogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH07XG4gICAgLy8gbmFtZSA9PiB0aGUgc2V0IG9mIHZlcnNpb25zIHRoYXQgaGF2ZSBiZWVuIHJlcXVlc3RlZCwgc28gd2UgY2FuIHdhcm4gd2hlbiBpbmNvbXBhdGlibGVcbiAgICAvLyAgdmVyc2lvbnMgYXJlIGxvYWRlZCB0b2dldGhlciAod2hpY2ggaXMgdGhlIHNpdHVhdGlvbiB0aGF0IG1ha2VzIHNoYXJpbmcgaW1wb3NzaWJsZSkuXG4gICAgdmVyc2lvbnM6IHsgW25hbWU6IHN0cmluZ106IFNldDxzdHJpbmc+IH07XG59XG5cbmZ1bmN0aW9uIGdldFN0b3JlKCk6IFNpbmdsZXRvblN0b3JlIHtcbiAgICBsZXQgc3RvcmUgPSAoZ2xvYmFsVGhpcyBhcyBhbnkpW0dMT0JBTF9LRVldIGFzIFNpbmdsZXRvblN0b3JlIHwgdW5kZWZpbmVkO1xuICAgIGlmICghc3RvcmUpIHtcbiAgICAgICAgc3RvcmUgPSB7IHZhbHVlczogT2JqZWN0LmNyZWF0ZShudWxsKSwgdmVyc2lvbnM6IE9iamVjdC5jcmVhdGUobnVsbCkgfTtcbiAgICAgICAgKGdsb2JhbFRoaXMgYXMgYW55KVtHTE9CQUxfS0VZXSA9IHN0b3JlO1xuICAgIH1cbiAgICByZXR1cm4gc3RvcmU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2luZ2xldG9uPFQ+IHtcbiAgICBnZXQoKTogVDtcbiAgICBzZXQodmFsdWU6IFQpOiB2b2lkO1xufVxuXG4vKiogU3RvcmVzIGEgdmFsdWUgb24gZ2xvYmFsVGhpcyBzbyBpdCBpcyBzaGFyZWQgYWNyb3NzIGV2ZXJ5IGNvcHkgb2Ygc29ja2V0LWZ1bmN0aW9uIGxvYWRlZCBpblxuICogICAgICB0aGUgcHJvY2VzcywgcHJvdmlkZWQgZWFjaCBjb3B5IHBhc3NlcyB0aGUgc2FtZSBuYW1lIGFuZCB2ZXJzaW9uLiBVc2UgdGhpcyBvbmx5IGZvciBzdGF0ZVxuICogICAgICB0aGF0IE1VU1QgYmUgcHJvY2Vzcy1nbG9iYWwgdG8gc3RheSBjb3JyZWN0IHdoZW4gbXVsdGlwbGUgY29tcGF0aWJsZSB2ZXJzaW9ucyBhcmUgaW5zdGFsbGVkXG4gKiAgICAgIGF0IG9uY2UgLSBleCwgdGhlIHJlZ2lzdHJ5IG9mIGV4cG9zZWQgY2xhc3NlcywgdGhlIG5vZGUgY29ubmVjdGlvbiBjYWNoZSwgYW5kIG1vdW50IHN0YXRlLlxuICogICAgICBSZWd1bGFyIGNvbmZpZyBhbmQgY2FjaGVzIHRoYXQgYXJlIGZpbmUgdG8ga2VlcCBwZXItY29weSBzaG91bGQgTk9UIHVzZSB0aGlzLlxuICogIC0gdmVyc2lvbiBpcyBwYXJ0IG9mIHRoZSBpZGVudGl0eS4gQnVtcCBpdCBvbmx5IHdoZW4gdGhlIHNoYXBlIG9mIHRoZSBzdG9yZWQgdmFsdWUgY2hhbmdlcyBpbiBhXG4gKiAgICAgIHdheSB0aGF0IG1ha2VzIGFuIG9sZCBhbmQgYSBuZXcgY29weSB1bmFibGUgdG8gc2FmZWx5IHNoYXJlIGl0LiBDb3BpZXMgdGhhdCBkaXNhZ3JlZSBvbiB0aGVcbiAqICAgICAgdmVyc2lvbiBnZXQgc2VwYXJhdGUgc2xvdHMgKHNvIHRoZXkgd2lsbCBOT1Qgc2hhcmUpLCB3aGljaCBpcyB0aGUgY29ycmVjdCBvdXRjb21lLCBhcyB0aGV5XG4gKiAgICAgIGNhbid0IGludGVyb3BlcmF0ZSAtIGFuZCB3ZSB3YXJuIHNvIHRoZSBzaXR1YXRpb24gaXMgdmlzaWJsZS5cbiAqICAtIGdldERlZmF1bHQgcnVucyBhdCBtb3N0IG9uY2UgcGVyIG5hbWUrdmVyc2lvbiwgbGF6aWx5LCB0aGUgZmlyc3QgdGltZSBnZXQoKSBpcyBjYWxsZWQuXG4gKiAgLSBGb3IgYSB2YWx1ZSB0aGF0IGlzIG11dGF0ZWQgaW4gcGxhY2UgKGEgTWFwL1NldC9hcnJheS9vYmplY3QpLCBqdXN0IGNhbGwgZ2V0KCkgb25jZSBhbmQga2VlcFxuICogICAgICB0aGUgcmVmZXJlbmNlLiBGb3IgYSB2YWx1ZSB0aGF0IGdldHMgcmVhc3NpZ25lZCAoYSBwcmltaXRpdmUsIG9yIGEgd2hvbGUtb2JqZWN0IHN3YXApLCB1c2VcbiAqICAgICAgZ2V0KCkvc2V0KCkgYXQgZWFjaCBhY2Nlc3Mgc28gZXZlcnkgY29weSBzZWVzIHRoZSBsYXRlc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTaW5nbGV0b248VD4oXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHZlcnNpb246IHN0cmluZyB8IG51bWJlcixcbiAgICBnZXREZWZhdWx0OiAoKSA9PiBULFxuKTogU2luZ2xldG9uPFQ+IHtcbiAgICBjb25zdCBzdG9yZSA9IGdldFN0b3JlKCk7XG4gICAgY29uc3QgdmVyc2lvblN0ciA9IFN0cmluZyh2ZXJzaW9uKTtcbiAgICBjb25zdCBrZXkgPSBgJHtuYW1lfUAke3ZlcnNpb25TdHJ9YDtcblxuICAgIGxldCBzZWVuVmVyc2lvbnMgPSBzdG9yZS52ZXJzaW9uc1tuYW1lXTtcbiAgICBpZiAoIXNlZW5WZXJzaW9ucykge1xuICAgICAgICBzZWVuVmVyc2lvbnMgPSBzdG9yZS52ZXJzaW9uc1tuYW1lXSA9IG5ldyBTZXQoKTtcbiAgICB9XG4gICAgc2VlblZlcnNpb25zLmFkZCh2ZXJzaW9uU3RyKTtcbiAgICBpZiAoc2VlblZlcnNpb25zLnNpemUgPiAxKSB7XG4gICAgICAgIGNvbnNvbGUud2Fybihgc29ja2V0LWZ1bmN0aW9uOiBzaW5nbGV0b24gJHtKU09OLnN0cmluZ2lmeShuYW1lKX0gcmVxdWVzdGVkIGF0IG11bHRpcGxlIHZlcnNpb25zICgke0FycmF5LmZyb20oc2VlblZlcnNpb25zKS5qb2luKFwiLCBcIil9KS4gVGhlc2UgY29waWVzIHdpbGwgTk9UIHNoYXJlIHN0YXRlLCB3aGljaCB1c3VhbGx5IG1lYW5zIGluY29tcGF0aWJsZSB2ZXJzaW9ucyBvZiBhIHBhY2thZ2UgYXJlIGxvYWRlZCBhdCBvbmNlLmApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIGdldCgpOiBUIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHN0b3JlLnZhbHVlcztcbiAgICAgICAgICAgIGlmICghKGtleSBpbiB2YWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVzW2tleV0gPSBnZXREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWVzW2tleV0gYXMgVDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0KHZhbHVlOiBUKSB7XG4gICAgICAgICAgICBzdG9yZS52YWx1ZXNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9LFxuICAgIH07XG59XG4iXX0=
|
|
62
|
-
/* _JS_SOURCE_HASH = "a892ab533c6b6ed410c61efba8c9af78ee40cd8157e7bb9b7cb8a7323f193a4c"; */
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
3
|
-
//exports.isSplitableArray = exports.markArrayAsSplitable = void 0;
|
|
4
|
-
const arrayIsSplitable = Symbol.for("arrayIsSplitable");
|
|
5
|
-
function markArrayAsSplitable(data) {
|
|
6
|
-
data[arrayIsSplitable] = true;
|
|
7
|
-
return data;
|
|
8
|
-
}
|
|
9
|
-
exports.markArrayAsSplitable = markArrayAsSplitable;
|
|
10
|
-
function isSplitableArray(data) {
|
|
11
|
-
if (!Array.isArray(data))
|
|
12
|
-
return false;
|
|
13
|
-
return !!data[arrayIsSplitable];
|
|
14
|
-
}
|
|
15
|
-
exports.isSplitableArray = isSplitableArray;
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4TGFyZ2VOZXR3b3JrQ2FsbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmaXhMYXJnZU5ldHdvcmtDYWxscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUN4RCxTQUFnQixvQkFBb0IsQ0FBSSxJQUFTO0lBQzVDLElBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUN2QyxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBSEQsb0RBR0M7QUFDRCxTQUFnQixnQkFBZ0IsQ0FBSSxJQUFPO0lBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3ZDLE9BQU8sQ0FBQyxDQUFFLElBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFIRCw0Q0FHQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGFycmF5SXNTcGxpdGFibGUgPSBTeW1ib2wuZm9yKFwiYXJyYXlJc1NwbGl0YWJsZVwiKTtcbmV4cG9ydCBmdW5jdGlvbiBtYXJrQXJyYXlBc1NwbGl0YWJsZTxUPihkYXRhOiBUW10pOiBUW10ge1xuICAgIChkYXRhIGFzIGFueSlbYXJyYXlJc1NwbGl0YWJsZV0gPSB0cnVlO1xuICAgIHJldHVybiBkYXRhO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzU3BsaXRhYmxlQXJyYXk8VD4oZGF0YTogVCk6IGRhdGEgaXMgVCAmICh1bmtub3duW10pIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gISEoZGF0YSBhcyBhbnkpW2FycmF5SXNTcGxpdGFibGVdO1xufSJdfQ==
|
|
17
|
-
/* _JS_SOURCE_HASH = "edc0c53332c059c1a810b585bdd24234514d8e884feb51ab15f31f61af1293f9"; */
|
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
"use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
-
return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
|
|
27
|
-
};
|
|
28
|
-
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
29
|
-
exports.forwardPort = void 0;
|
|
30
|
-
const dgram = __importStar(require("dgram"));
|
|
31
|
-
const os_1 = __importDefault(require("os"));
|
|
32
|
-
const misc_1 = require("./misc");
|
|
33
|
-
const SSDP_DISCOVER_MX = 2;
|
|
34
|
-
const SSDP_DISCOVER_MSG = `M-SEARCH * HTTP/1.1\r\nHOST: 239.255.255.250:1900\r\nMAN: "ssdp:discover"\r\nMX: ${SSDP_DISCOVER_MX}\r\nST: urn:schemas-upnp-org:device:InternetGatewayDevice:1\r\n\r\n`;
|
|
35
|
-
async function forwardPort(config) {
|
|
36
|
-
var _a;
|
|
37
|
-
// On linux, just return, the server probably doesn't require forwarding, and if it does,
|
|
38
|
-
// it probably this code probably won't work anyways.
|
|
39
|
-
if (os_1.default.platform() === "linux")
|
|
40
|
-
return;
|
|
41
|
-
try {
|
|
42
|
-
const { externalPort, internalPort } = config;
|
|
43
|
-
let duration = (_a = config.duration) !== null && _a !== void 0 ? _a : misc_1.timeInHour;
|
|
44
|
-
const localObj = getLocalInterfaceAddress();
|
|
45
|
-
if (!localObj)
|
|
46
|
-
throw new Error("Could not find the local address / gateway");
|
|
47
|
-
const { internalIP, gatewayIP } = localObj;
|
|
48
|
-
console.log(`Local IP: ${internalIP}, Gateway IP: ${gatewayIP}`);
|
|
49
|
-
let gateway = await discoverGateway(internalIP);
|
|
50
|
-
let controlURLs = await getControlPaths(gateway);
|
|
51
|
-
let controlPort = Number(new URL(gateway).port);
|
|
52
|
-
for (let controlURL of controlURLs) {
|
|
53
|
-
try {
|
|
54
|
-
await createPortMapping({
|
|
55
|
-
externalPort, internalPort,
|
|
56
|
-
gatewayIP,
|
|
57
|
-
controlPort,
|
|
58
|
-
controlPath: controlURL,
|
|
59
|
-
internalIP,
|
|
60
|
-
duration,
|
|
61
|
-
});
|
|
62
|
-
console.log(`Port mapping created on ${gatewayIP}:${externalPort} -> ${internalIP}:${internalPort}`);
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
catch (e) {
|
|
66
|
-
console.error(`Failed to create port mapping using controlURL ${controlURL}`, e);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
console.error("Failed to create port mapping, could not find controlURL");
|
|
70
|
-
}
|
|
71
|
-
catch (e) {
|
|
72
|
-
console.error("Error in forwardPort", e);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
exports.forwardPort = forwardPort;
|
|
76
|
-
function getLocalInterfaceAddress() {
|
|
77
|
-
let looksLikeRouter = (ip) => ip.startsWith("10.0.0") || ip.startsWith("10.0.1") || ip.startsWith("192.168.0");
|
|
78
|
-
// On windows, run `ipconfig` and parse the output
|
|
79
|
-
// Otherwise, ifconfig
|
|
80
|
-
if (os_1.default.platform() === "win32") {
|
|
81
|
-
let output = require("child_process").execSync("ipconfig").toString();
|
|
82
|
-
let sections = output.split("\r\n\r\n");
|
|
83
|
-
for (let section of sections) {
|
|
84
|
-
if (section.includes("IPv4 Address")) {
|
|
85
|
-
let ipv4Match = section.match(/IPv4 Address[.\s]*: ([\d.]+)/);
|
|
86
|
-
let gatewayMatch = section.match(/Default Gateway[.\s]*: ([\d.]+)/);
|
|
87
|
-
if (ipv4Match && gatewayMatch && looksLikeRouter(gatewayMatch[1])) {
|
|
88
|
-
return {
|
|
89
|
-
internalIP: ipv4Match[1],
|
|
90
|
-
gatewayIP: gatewayMatch[1]
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
let gatewayMatch;
|
|
98
|
-
try {
|
|
99
|
-
// Attempt to get the gateway using "ip route" command (more universal)
|
|
100
|
-
const routeOutput = require("child_process").execSync("ip route show default").toString();
|
|
101
|
-
gatewayMatch = routeOutput.match(/default via (\d+\.\d+\.\d+\.\d+)/);
|
|
102
|
-
}
|
|
103
|
-
catch (err) {
|
|
104
|
-
console.error("Failed to execute 'ip route show default', trying fallback", err);
|
|
105
|
-
}
|
|
106
|
-
if (!gatewayMatch) {
|
|
107
|
-
try {
|
|
108
|
-
// Fallback to "netstat -rn" for older systems
|
|
109
|
-
const netstatOutput = require("child_process").execSync("netstat -rn").toString();
|
|
110
|
-
gatewayMatch = netstatOutput.match(/default\s+(\d+\.\d+\.\d+\.\d+)/);
|
|
111
|
-
}
|
|
112
|
-
catch (err) {
|
|
113
|
-
console.error("Failed to execute 'netstat -rn', unable to find gateway", err);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
if (gatewayMatch) {
|
|
117
|
-
try {
|
|
118
|
-
// Use "ip addr" to get internal IP (more universal)
|
|
119
|
-
const ipOutput = require("child_process").execSync("ip addr").toString();
|
|
120
|
-
const ipMatch = ipOutput.match(/inet (?!127\.0\.0\.1)(\d+\.\d+\.\d+\.\d+)\//);
|
|
121
|
-
if (ipMatch) {
|
|
122
|
-
return {
|
|
123
|
-
internalIP: ipMatch[1],
|
|
124
|
-
gatewayIP: gatewayMatch[1]
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
console.error("Failed to match internal IP");
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
catch (err) {
|
|
132
|
-
console.error("Failed to execute 'ip addr'", err);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
return undefined;
|
|
137
|
-
}
|
|
138
|
-
function discoverGateway(localAddress) {
|
|
139
|
-
return new Promise((resolve, reject) => {
|
|
140
|
-
const socket = dgram.createSocket("udp4");
|
|
141
|
-
let isResolved = false;
|
|
142
|
-
if (!localAddress) {
|
|
143
|
-
reject(new Error("Could not find a suitable local address"));
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
socket.on("message", (msg) => {
|
|
147
|
-
const response = msg.toString();
|
|
148
|
-
const location = response.match(/LOCATION: (.*)\r\n/i);
|
|
149
|
-
if (location && location[1]) {
|
|
150
|
-
isResolved = true;
|
|
151
|
-
socket.close();
|
|
152
|
-
resolve(location[1]);
|
|
153
|
-
}
|
|
154
|
-
});
|
|
155
|
-
socket.on("error", (err) => {
|
|
156
|
-
socket.close();
|
|
157
|
-
if (!isResolved) {
|
|
158
|
-
reject(err);
|
|
159
|
-
}
|
|
160
|
-
});
|
|
161
|
-
socket.on("listening", () => {
|
|
162
|
-
socket.addMembership("239.255.255.250", localAddress);
|
|
163
|
-
});
|
|
164
|
-
socket.bind({ address: localAddress }, () => {
|
|
165
|
-
socket.setBroadcast(true);
|
|
166
|
-
socket.send(SSDP_DISCOVER_MSG, 0, SSDP_DISCOVER_MSG.length, 1900, "239.255.255.250");
|
|
167
|
-
});
|
|
168
|
-
setTimeout(() => {
|
|
169
|
-
if (!isResolved) {
|
|
170
|
-
socket.close();
|
|
171
|
-
reject(new Error(`SSDP discovery timeout. Search on ${localAddress}`));
|
|
172
|
-
}
|
|
173
|
-
}, SSDP_DISCOVER_MX * 1000);
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
async function getControlPaths(gateway) {
|
|
177
|
-
let xml = await (await fetch(gateway)).text();
|
|
178
|
-
const controlURLRegex = /<controlURL>(.*?)<\/controlURL>/g;
|
|
179
|
-
const matches = [];
|
|
180
|
-
let match;
|
|
181
|
-
while ((match = controlURLRegex.exec(xml)) !== null) {
|
|
182
|
-
matches.push(match[1]);
|
|
183
|
-
}
|
|
184
|
-
matches.reverse();
|
|
185
|
-
return matches;
|
|
186
|
-
}
|
|
187
|
-
async function createPortMapping(config) {
|
|
188
|
-
const { externalPort, internalPort, internalIP, controlPath, controlPort, gatewayIP } = config;
|
|
189
|
-
const action = "\"urn:schemas-upnp-org:service:WANIPConnection:1#AddPortMapping\"";
|
|
190
|
-
const soapBody = `
|
|
191
|
-
<?xml version="1.0"?>
|
|
192
|
-
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
|
|
193
|
-
<s:Body>
|
|
194
|
-
<u:AddPortMapping xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1">
|
|
195
|
-
<NewRemoteHost></NewRemoteHost>
|
|
196
|
-
<NewExternalPort>${externalPort}</NewExternalPort>
|
|
197
|
-
<NewProtocol>TCP</NewProtocol>
|
|
198
|
-
<NewInternalPort>${internalPort}</NewInternalPort>
|
|
199
|
-
<NewInternalClient>${internalIP}</NewInternalClient>
|
|
200
|
-
<NewEnabled>1</NewEnabled>
|
|
201
|
-
<NewPortMappingDescription>My Port Mapping</NewPortMappingDescription>
|
|
202
|
-
<NewLeaseDuration>${Math.ceil(config.duration / 1000)}</NewLeaseDuration>
|
|
203
|
-
</u:AddPortMapping>
|
|
204
|
-
</s:Body>
|
|
205
|
-
</s:Envelope>
|
|
206
|
-
`;
|
|
207
|
-
const res = await fetch(`http://${gatewayIP}:${controlPort}${controlPath}`, {
|
|
208
|
-
method: "POST",
|
|
209
|
-
headers: {
|
|
210
|
-
"Content-Type": "text/xml; charset=\"utf-8\"",
|
|
211
|
-
"SOAPAction": action,
|
|
212
|
-
"Content-Length": Buffer.byteLength(soapBody) + "",
|
|
213
|
-
},
|
|
214
|
-
body: soapBody
|
|
215
|
-
});
|
|
216
|
-
if (res.status !== 200) {
|
|
217
|
-
const data = await res.text();
|
|
218
|
-
throw new Error(`Failed to create port mapping: ${data}`);
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yd2FyZFBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmb3J3YXJkUG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLDZDQUErQjtBQUMvQiw0Q0FBb0I7QUFDcEIsaUNBQW9DO0FBRXBDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLE1BQU0saUJBQWlCLEdBQUcsb0ZBQW9GLGdCQUFnQixxRUFBcUUsQ0FBQztBQUU3TCxLQUFLLFVBQVUsV0FBVyxDQUFDLE1BSWpDOztJQUNHLHlGQUF5RjtJQUN6RixzREFBc0Q7SUFDdEQsSUFBSSxZQUFFLENBQUMsUUFBUSxFQUFFLEtBQUssT0FBTztRQUFFLE9BQU87SUFDdEMsSUFBSSxDQUFDO1FBQ0QsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDOUMsSUFBSSxRQUFRLEdBQUcsTUFBQSxNQUFNLENBQUMsUUFBUSxtQ0FBSSxpQkFBVSxDQUFDO1FBRTdDLE1BQU0sUUFBUSxHQUFHLHdCQUF3QixFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLFFBQVE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7UUFFN0UsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsR0FBRyxRQUFRLENBQUM7UUFDM0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLFVBQVUsaUJBQWlCLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDakUsSUFBSSxPQUFPLEdBQUcsTUFBTSxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEQsSUFBSSxXQUFXLEdBQUcsTUFBTSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakQsSUFBSSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhELEtBQUssSUFBSSxVQUFV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QUNWLFVBQVU7Ozt3Q0FHWCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDOzs7O0tBSXBFLENBQUM7SUFFRixNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxVQUFVLFNBQVMsSUFBSSxXQUFXLEdBQUcsV0FBVyxFQUFFLEVBQUU7UUFDeEUsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUU7WUFDTCxjQUFjLEVBQUUsNkJBQTZCO1lBQzdDLFlBQVksRUFBRSxNQUFNO1lBQ3BCLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRTtTQUNyRDtRQUNELElBQUksRUFBRSxRQUFRO0tBQ2pCLENBQUMsQ0FBQztJQUVILElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNyQixNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlYnVnYnJlYWsgZnJvbSBcImRlYnVnYnJlYWtcIjtcbmltcG9ydCAqIGFzIGRncmFtIGZyb20gXCJkZ3JhbVwiO1xuaW1wb3J0IG9zIGZyb20gXCJvc1wiO1xuaW1wb3J0IHsgdGltZUluSG91ciB9IGZyb20gXCIuL21pc2NcIjtcblxuY29uc3QgU1NEUF9ESVNDT1ZFUl9NWCA9IDI7XG5jb25zdCBTU0RQX0RJU0NPVkVSX01TRyA9IGBNLVNFQVJDSCAqIEhUVFAvMS4xXFxyXFxuSE9TVDogMjM5LjI1NS4yNTUuMjUwOjE5MDBcXHJcXG5NQU46IFwic3NkcDpkaXNjb3ZlclwiXFxyXFxuTVg6ICR7U1NEUF9ESVNDT1ZFUl9NWH1cXHJcXG5TVDogdXJuOnNjaGVtYXMtdXBucC1vcmc6ZGV2aWNlOkludGVybmV0R2F0ZXdheURldmljZToxXFxyXFxuXFxyXFxuYDtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZvcndhcmRQb3J0KGNvbmZpZzoge1xuICAgIGV4dGVybmFsUG9ydDogbnVtYmVyO1xuICAgIGludGVybmFsUG9ydDogbnVtYmVyO1xuICAgIGR1cmF0aW9uPzogbnVtYmVyO1xufSkge1xuICAgIC8vIE9uIGxpbnV4LCBqdXN0IHJldHVybiwgdGhlIHNlcnZlciBwcm9iYWJseSBkb2Vzbid0IHJlcXVpcmUgZm9yd2FyZGluZywgYW5kIGlmIGl0IGRvZXMsXG4gICAgLy8gIGl0IHByb2JhYmx5IHRoaXMgY29kZSBwcm9iYWJseSB3b24ndCB3b3JrIGFueXdheXMuXG4gICAgaWYgKG9zLnBsYXRmb3JtKCkgPT09IFwibGludXhcIikgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgZXh0ZXJuYWxQb3J0LCBpbnRlcm5hbFBvcnQgfSA9IGNvbmZpZztcbiAgICAgICAgbGV0IGR1cmF0aW9uID0gY29uZmlnLmR1cmF0aW9uID8/IHRpbWVJbkhvdXI7XG5cbiAgICAgICAgY29uc3QgbG9jYWxPYmogPSBnZXRMb2NhbEludGVyZmFjZUFkZHJlc3MoKTtcbiAgICAgICAgaWYgKCFsb2NhbE9iaikgdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGZpbmQgdGhlIGxvY2FsIGFkZHJlc3MgLyBnYXRld2F5XCIpO1xuXG4gICAgICAgIGNvbnN0IHsgaW50ZXJuYWxJUCwgZ2F0ZXdheUlQIH0gPSBsb2NhbE9iajtcbiAgICAgICAgY29uc29sZS5sb2coYExvY2FsIElQOiAke2ludGVybmFsSVB9LCBHYXRld2F5IElQOiAke2dhdGV3YXlJUH1gKTtcbiAgICAgICAgbGV0IGdhdGV3YXkgPSBhd2FpdCBkaXNjb3ZlckdhdGV3YXkoaW50ZXJuYWxJUCk7XG4gICAgICAgIGxldCBjb250cm9sVVJMcyA9IGF3YWl0IGdldENvbnRyb2xQYXRocyhnYXRld2F5KTtcbiAgICAgICAgbGV0IGNvbnRyb2xQb3J0ID0gTnVtYmVyKG5ldyBVUkwoZ2F0ZXdheSkucG9ydCk7XG5cbiAgICAgICAgZm9yIChsZXQgY29udHJvbFVSTCBvZiBjb250cm9sVVJMcykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBjcmVhdGVQb3J0TWFwcGluZyh7XG4gICAgICAgICAgICAgICAgICAgIGV4dGVybmFsUG9ydCwgaW50ZXJuYWxQb3J0LFxuICAgICAgICAgICAgICAgICAgICBnYXRld2F5SVAsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xQb3J0LFxuICAgICAgICAgICAgICAgICAgICBjb250cm9sUGF0aDogY29udHJvbFVSTCxcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxJUCxcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFBvcnQgbWFwcGluZyBjcmVhdGVkIG9uICR7Z2F0ZXdheUlQfToke2V4dGVybmFsUG9ydH0gLT4gJHtpbnRlcm5hbElQfToke2ludGVybmFsUG9ydH1gKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBwb3J0IG1hcHBpbmcgdXNpbmcgY29udHJvbFVSTCAke2NvbnRyb2xVUkx9YCwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgcG9ydCBtYXBwaW5nLCBjb3VsZCBub3QgZmluZCBjb250cm9sVVJMXCIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGluIGZvcndhcmRQb3J0XCIsIGUpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0TG9jYWxJbnRlcmZhY2VBZGRyZXNzKCk6IHsgaW50ZXJuYWxJUDogc3RyaW5nOyBnYXRld2F5SVA6IHN0cmluZzsgfSB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGxvb2tzTGlrZVJvdXRlciA9IChpcDogc3RyaW5nKSA9PiBpcC5zdGFydHNXaXRoKFwiMTAuMC4wXCIpIHx8IGlwLnN0YXJ0c1dpdGgoXCIxMC4wLjFcIikgfHwgaXAuc3RhcnRzV2l0aChcIjE5Mi4xNjguMFwiKTtcblxuICAgIC8vIE9uIHdpbmRvd3MsIHJ1biBgaXBjb25maWdgIGFuZCBwYXJzZSB0aGUgb3V0cHV0XG4gICAgLy8gT3RoZXJ3aXNlLCBpZmNvbmZpZ1xuICAgIGlmIChvcy5wbGF0Zm9ybSgpID09PSBcIndpbjMyXCIpIHtcbiAgICAgICAgbGV0IG91dHB1dCA9IHJlcXVpcmUoXCJjaGlsZF9wcm9jZXNzXCIpLmV4ZWNTeW5jKFwiaXBjb25maWdcIikudG9TdHJpbmcoKTtcbiAgICAgICAgbGV0IHNlY3Rpb25zID0gb3V0cHV0LnNwbGl0KFwiXFxyXFxuXFxyXFxuXCIpO1xuXG4gICAgICAgIGZvciAobGV0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChzZWN0aW9uLmluY2x1ZGVzKFwiSVB2NCBBZGRyZXNzXCIpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGlwdjRNYXRjaCA9IHNlY3Rpb24ubWF0Y2goL0lQdjQgQWRkcmVzc1suXFxzXSo6IChbXFxkLl0rKS8pO1xuICAgICAgICAgICAgICAgIGxldCBnYXRld2F5TWF0Y2ggPSBzZWN0aW9uLm1hdGNoKC9EZWZhdWx0IEdhdGV3YXlbLlxcc10qOiAoW1xcZC5dKykvKTtcblxuICAgICAgICAgICAgICAgIGlmIChpcHY0TWF0Y2ggJiYgZ2F0ZXdheU1hdGNoICYmIGxvb2tzTGlrZVJvdXRlcihnYXRld2F5TWF0Y2hbMV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbElQOiBpcHY0TWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnYXRld2F5SVA6IGdhdGV3YXlNYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBnYXRld2F5TWF0Y2g6IFJlZ0V4cE1hdGNoQXJyYXkgfCB1bmRlZmluZWQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBBdHRlbXB0IHRvIGdldCB0aGUgZ2F0ZXdheSB1c2luZyBcImlwIHJvdXRlXCIgY29tbWFuZCAobW9yZSB1bml2ZXJzYWwpXG4gICAgICAgICAgICBjb25zdCByb3V0ZU91dHB1dCA9IHJlcXVpcmUoXCJjaGlsZF9wcm9jZXNzXCIpLmV4ZWNTeW5jKFwiaXAgcm91dGUgc2hvdyBkZWZhdWx0XCIpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBnYXRld2F5TWF0Y2ggPSByb3V0ZU91dHB1dC5tYXRjaCgvZGVmYXVsdCB2aWEgKFxcZCtcXC5cXGQrXFwuXFxkK1xcLlxcZCspLyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdpcCByb3V0ZSBzaG93IGRlZmF1bHQnLCB0cnlpbmcgZmFsbGJhY2tcIiwgZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZ2F0ZXdheU1hdGNoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIFwibmV0c3RhdCAtcm5cIiBmb3Igb2xkZXIgc3lzdGVtc1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ldHN0YXRPdXRwdXQgPSByZXF1aXJlKFwiY2hpbGRfcHJvY2Vzc1wiKS5leGVjU3luYyhcIm5ldHN0YXQgLXJuXCIpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgZ2F0ZXdheU1hdGNoID0gbmV0c3RhdE91dHB1dC5tYXRjaCgvZGVmYXVsdFxccysoXFxkK1xcLlxcZCtcXC5cXGQrXFwuXFxkKykvKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnbmV0c3RhdCAtcm4nLCB1bmFibGUgdG8gZmluZCBnYXRld2F5XCIsIGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZ2F0ZXdheU1hdGNoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIFVzZSBcImlwIGFkZHJcIiB0byBnZXQgaW50ZXJuYWwgSVAgKG1vcmUgdW5pdmVyc2FsKVxuICAgICAgICAgICAgICAgIGNvbnN0IGlwT3V0cHV0ID0gcmVxdWlyZShcImNoaWxkX3Byb2Nlc3NcIikuZXhlY1N5bmMoXCJpcCBhZGRyXCIpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXBNYXRjaCA9IGlwT3V0cHV0Lm1hdGNoKC9pbmV0ICg/ITEyN1xcLjBcXC4wXFwuMSkoXFxkK1xcLlxcZCtcXC5cXGQrXFwuXFxkKylcXC8vKTtcblxuICAgICAgICAgICAgICAgIGlmIChpcE1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbElQOiBpcE1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheUlQOiBnYXRld2F5TWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIG1hdGNoIGludGVybmFsIElQXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnaXAgYWRkcidcIiwgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGRpc2NvdmVyR2F0ZXdheShsb2NhbEFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3Qgc29ja2V0ID0gZGdyYW0uY3JlYXRlU29ja2V0KFwidWRwNFwiKTtcbiAgICAgICAgbGV0IGlzUmVzb2x2ZWQgPSBmYWxzZTtcblxuICAgICAgICBpZiAoIWxvY2FsQWRkcmVzcykge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIkNvdWxkIG5vdCBmaW5kIGEgc3VpdGFibGUgbG9jYWwgYWRkcmVzc1wiKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzb2NrZXQub24oXCJtZXNzYWdlXCIsIChtc2cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gbXNnLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHJlc3BvbnNlLm1hdGNoKC9MT0NBVElPTjogKC4qKVxcclxcbi9pKTtcbiAgICAgICAgICAgIGlmIChsb2NhdGlvbiAmJiBsb2NhdGlvblsxXSkge1xuICAgICAgICAgICAgICAgIGlzUmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHNvY2tldC5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUobG9jYXRpb25bMV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBzb2NrZXQub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICBzb2NrZXQuY2xvc2UoKTtcbiAgICAgICAgICAgIGlmICghaXNSZXNvbHZlZCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBzb2NrZXQub24oXCJsaXN0ZW5pbmdcIiwgKCkgPT4ge1xuICAgICAgICAgICAgc29ja2V0LmFkZE1lbWJlcnNoaXAoXCIyMzkuMjU1LjI1NS4yNTBcIiwgbG9jYWxBZGRyZXNzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc29ja2V0LmJpbmQoeyBhZGRyZXNzOiBsb2NhbEFkZHJlc3MgfSwgKCkgPT4ge1xuICAgICAgICAgICAgc29ja2V0LnNldEJyb2FkY2FzdCh0cnVlKTtcbiAgICAgICAgICAgIHNvY2tldC5zZW5kKFNTRFBfRElTQ09WRVJfTVNHLCAwLCBTU0RQX0RJU0NPVkVSX01TRy5sZW5ndGgsIDE5MDAsIFwiMjM5LjI1NS4yNTUuMjUwXCIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghaXNSZXNvbHZlZCkge1xuICAgICAgICAgICAgICAgIHNvY2tldC5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFNTRFAgZGlzY292ZXJ5IHRpbWVvdXQuIFNlYXJjaCBvbiAke2xvY2FsQWRkcmVzc31gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIFNTRFBfRElTQ09WRVJfTVggKiAxMDAwKTtcbiAgICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0Q29udHJvbFBhdGhzKGdhdGV3YXk6IHN0cmluZykge1xuICAgIGxldCB4bWwgPSBhd2FpdCAoYXdhaXQgZmV0Y2goZ2F0ZXdheSkpLnRleHQoKTtcbiAgICBjb25zdCBjb250cm9sVVJMUmVnZXggPSAvPGNvbnRyb2xVUkw+KC4qPyk8XFwvY29udHJvbFVSTD4vZztcbiAgICBjb25zdCBtYXRjaGVzID0gW107XG4gICAgbGV0IG1hdGNoO1xuICAgIHdoaWxlICgobWF0Y2ggPSBjb250cm9sVVJMUmVnZXguZXhlYyh4bWwpKSAhPT0gbnVsbCkge1xuICAgICAgICBtYXRjaGVzLnB1c2gobWF0Y2hbMV0pO1xuICAgIH1cbiAgICBtYXRjaGVzLnJldmVyc2UoKTtcbiAgICByZXR1cm4gbWF0Y2hlcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlUG9ydE1hcHBpbmcoY29uZmlnOiB7XG4gICAgZXh0ZXJuYWxQb3J0OiBudW1iZXI7XG4gICAgaW50ZXJuYWxQb3J0OiBudW1iZXI7XG4gICAgZ2F0ZXdheUlQOiBzdHJpbmc7XG4gICAgY29udHJvbFBvcnQ6IG51bWJlcjtcbiAgICBjb250cm9sUGF0aDogc3RyaW5nO1xuICAgIGludGVybmFsSVA6IHN0cmluZztcbiAgICBkdXJhdGlvbjogbnVtYmVyO1xufSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgZXh0ZXJuYWxQb3J0LCBpbnRlcm5hbFBvcnQsIGludGVybmFsSVAsIGNvbnRyb2xQYXRoLCBjb250cm9sUG9ydCwgZ2F0ZXdheUlQIH0gPSBjb25maWc7XG4gICAgY29uc3QgYWN0aW9uID0gXCJcXFwidXJuOnNjaGVtYXMtdXBucC1vcmc6c2VydmljZTpXQU5JUENvbm5lY3Rpb246MSNBZGRQb3J0TWFwcGluZ1xcXCJcIjtcblxuICAgIGNvbnN0IHNvYXBCb2R5ID0gYFxuICAgICAgICA8P3htbCB2ZXJzaW9uPVwiMS4wXCI/PlxuICAgICAgICA8czpFbnZlbG9wZSB4bWxuczpzPVwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS9cIiBzOmVuY29kaW5nU3R5bGU9XCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nL1wiPlxuICAgICAgICAgICAgPHM6Qm9keT5cbiAgICAgICAgICAgICAgICA8dTpBZGRQb3J0TWFwcGluZyB4bWxuczp1PVwidXJuOnNjaGVtYXMtdXBucC1vcmc6c2VydmljZTpXQU5JUENvbm5lY3Rpb246MVwiPlxuICAgICAgICAgICAgICAgICAgICA8TmV3UmVtb3RlSG9zdD48L05ld1JlbW90ZUhvc3Q+XG4gICAgICAgICAgICAgICAgICAgIDxOZXdFeHRlcm5hbFBvcnQ+JHtleHRlcm5hbFBvcnR9PC9OZXdFeHRlcm5hbFBvcnQ+XG4gICAgICAgICAgICAgICAgICAgIDxOZXdQcm90b2NvbD5UQ1A8L05ld1Byb3RvY29sPlxuICAgICAgICAgICAgICAgICAgICA8TmV3SW50ZXJuYWxQb3J0PiR7aW50ZXJuYWxQb3J0fTwvTmV3SW50ZXJuYWxQb3J0PlxuICAgICAgICAgICAgICAgICAgICA8TmV3SW50ZXJuYWxDbGllbnQ+JHtpbnRlcm5hbElQfTwvTmV3SW50ZXJuYWxDbGllbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxOZXdFbmFibGVkPjE8L05ld0VuYWJsZWQ+XG4gICAgICAgICAgICAgICAgICAgIDxOZXdQb3J0TWFwcGluZ0Rlc2NyaXB0aW9uPk15IFBvcnQgTWFwcGluZzwvTmV3UG9ydE1hcHBpbmdEZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPE5ld0xlYXNlRHVyYXRpb24+JHtNYXRoLmNlaWwoY29uZmlnLmR1cmF0aW9uIC8gMTAwMCl9PC9OZXdMZWFzZUR1cmF0aW9uPlxuICAgICAgICAgICAgICAgIDwvdTpBZGRQb3J0TWFwcGluZz5cbiAgICAgICAgICAgIDwvczpCb2R5PlxuICAgICAgICA8L3M6RW52ZWxvcGU+XG4gICAgYDtcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGBodHRwOi8vJHtnYXRld2F5SVB9OiR7Y29udHJvbFBvcnR9JHtjb250cm9sUGF0aH1gLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwidGV4dC94bWw7IGNoYXJzZXQ9XFxcInV0Zi04XFxcIlwiLFxuICAgICAgICAgICAgXCJTT0FQQWN0aW9uXCI6IGFjdGlvbixcbiAgICAgICAgICAgIFwiQ29udGVudC1MZW5ndGhcIjogQnVmZmVyLmJ5dGVMZW5ndGgoc29hcEJvZHkpICsgXCJcIixcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogc29hcEJvZHlcbiAgICB9KTtcblxuICAgIGlmIChyZXMuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy50ZXh0KCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBwb3J0IG1hcHBpbmc6ICR7ZGF0YX1gKTtcbiAgICB9XG59XG4iXX0=
|
|
222
|
-
/* _JS_SOURCE_HASH = "d0a3ea2a8e0f9055b18b54cd0663f8ae2c4e2e077dda0ff9292e0323c1ed0472"; */
|
package/src/dist/https.ts.cache
DELETED
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
"use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
26
|
-
exports.httpsRequest = void 0;
|
|
27
|
-
const https = __importStar(require("https"));
|
|
28
|
-
const http = __importStar(require("http"));
|
|
29
|
-
const misc_1 = require("./misc");
|
|
30
|
-
const textEncoder = new TextEncoder();
|
|
31
|
-
const textDecoder = new TextDecoder();
|
|
32
|
-
function httpsRequest(url, payload, method = "GET", sendSessionCookies = true, config) {
|
|
33
|
-
if ((0, misc_1.isNode)()) {
|
|
34
|
-
return (async () => {
|
|
35
|
-
let urlObj = new URL(url);
|
|
36
|
-
let requestor = url.startsWith("https") ? https : http;
|
|
37
|
-
let port = url.startsWith("https") ? 443 : 80;
|
|
38
|
-
if (urlObj.port) {
|
|
39
|
-
port = +urlObj.port;
|
|
40
|
-
}
|
|
41
|
-
return new Promise((resolve, reject) => {
|
|
42
|
-
let httpRequest = requestor.request(urlObj + "", {
|
|
43
|
-
method,
|
|
44
|
-
headers: config === null || config === void 0 ? void 0 : config.headers,
|
|
45
|
-
// NOTE: We get a lot of backblaze errors when we try to re-use connections. It might be faster,
|
|
46
|
-
// but... anything that cares about speed should use websockets anyways...
|
|
47
|
-
agent: new requestor.Agent({ keepAlive: false }),
|
|
48
|
-
}, async (httpResponse) => {
|
|
49
|
-
var _a;
|
|
50
|
-
let data = [];
|
|
51
|
-
httpResponse.on("data", chunk => {
|
|
52
|
-
data.push(chunk);
|
|
53
|
-
});
|
|
54
|
-
await new Promise(resolve => {
|
|
55
|
-
httpResponse.on("end", () => {
|
|
56
|
-
resolve();
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
if (!((_a = httpResponse.statusCode) === null || _a === void 0 ? void 0 : _a.toString().startsWith("2"))) {
|
|
60
|
-
reject(new Error(`Error for ${url}, ${httpResponse.statusCode} ${httpResponse.statusMessage}\n` + Buffer.concat(data).toString()));
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
resolve(Buffer.concat(data));
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
if (config === null || config === void 0 ? void 0 : config.cancel) {
|
|
67
|
-
void config.cancel.finally(() => {
|
|
68
|
-
httpRequest.destroy();
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
httpRequest.on("error", reject);
|
|
72
|
-
if (payload) {
|
|
73
|
-
if (Array.isArray(payload)) {
|
|
74
|
-
payload = Buffer.concat(payload);
|
|
75
|
-
}
|
|
76
|
-
httpRequest.write(payload);
|
|
77
|
-
}
|
|
78
|
-
httpRequest.end();
|
|
79
|
-
});
|
|
80
|
-
})();
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
var request = new XMLHttpRequest();
|
|
84
|
-
request.open(method, url, true);
|
|
85
|
-
if (config === null || config === void 0 ? void 0 : config.headers) {
|
|
86
|
-
for (let [key, value] of Object.entries(config.headers)) {
|
|
87
|
-
if (value === undefined)
|
|
88
|
-
continue;
|
|
89
|
-
request.setRequestHeader(key, value);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
if (config === null || config === void 0 ? void 0 : config.cancel) {
|
|
93
|
-
void config.cancel.finally(() => {
|
|
94
|
-
request.abort();
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
request.responseType = "arraybuffer";
|
|
98
|
-
request.withCredentials = sendSessionCookies;
|
|
99
|
-
if (payload) {
|
|
100
|
-
if (Array.isArray(payload)) {
|
|
101
|
-
payload = Buffer.concat(payload);
|
|
102
|
-
}
|
|
103
|
-
request.send(payload);
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
request.send();
|
|
107
|
-
}
|
|
108
|
-
return new Promise((resolve, reject) => {
|
|
109
|
-
request.onload = () => {
|
|
110
|
-
if (!request.status.toString().startsWith("2")) {
|
|
111
|
-
try {
|
|
112
|
-
// It should be an error.stack. But if it isn't... just throw the status text...
|
|
113
|
-
let responseText = textDecoder.decode(request.response);
|
|
114
|
-
let message = responseText.split("\n")[0];
|
|
115
|
-
let error = new Error(`For ${url}, ` + message);
|
|
116
|
-
error.stack = `For ${url}, ` + responseText;
|
|
117
|
-
reject(error);
|
|
118
|
-
}
|
|
119
|
-
catch (e) {
|
|
120
|
-
reject(new Error(`For ${url}, ` + request.statusText));
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
resolve(Buffer.from(request.response));
|
|
125
|
-
}
|
|
126
|
-
};
|
|
127
|
-
request.onerror = (e) => {
|
|
128
|
-
reject(new Error(`Network error for request at ${url}`));
|
|
129
|
-
};
|
|
130
|
-
request.ontimeout = (e) => {
|
|
131
|
-
reject(new Error(`Network timeout for request at ${url}`));
|
|
132
|
-
};
|
|
133
|
-
request.onabort = (e) => {
|
|
134
|
-
reject(new Error(`Network abort for request at ${url}`));
|
|
135
|
-
};
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
exports.httpsRequest = httpsRequest;
|
|
140
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJodHRwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQUErQjtBQUMvQiwyQ0FBNkI7QUFDN0IsaUNBQWdDO0FBRWhDLE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7QUFDdEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUV0QyxTQUFnQixZQUFZLENBQ3hCLEdBQVcsRUFDWCxPQUEyQixFQUMzQixNQUFNLEdBQUcsS0FBSyxFQUNkLGtCQUFrQixHQUFHLElBQUksRUFDekIsTUFHQztJQUVELElBQUksSUFBQSxhQUFNLEdBQUUsRUFBRSxDQUFDO1FBQ1gsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ2YsSUFBSSxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFMUIsSUFBSSxTQUFTLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDdkQsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDOUMsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2QsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztZQUN4QixDQUFDO1lBQ0QsT0FBTyxJQUFJLE9BQU8sQ0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDM0MsSUFBSSxXQUFXLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FDL0IsTUFBTSxHQUFHLEVBQUUsRUFDWDtvQkFDSSxNQUFNO29CQUNOLE9BQU8sRUFBRSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENB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LEVBQUUsQ0FBQzt3QkFDZCxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztvQkFDM0QsQ0FBQztnQkFDTCxDQUFDO3FCQUFNLENBQUM7b0JBQ0osT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQzNDLENBQUM7WUFDTCxDQUFDLENBQUM7WUFFRixPQUFPLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3BCLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzdELENBQUMsQ0FBQztZQUNGLE9BQU8sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDdEIsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLGtDQUFrQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDL0QsQ0FBQyxDQUFDO1lBQ0YsT0FBTyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNwQixNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsZ0NBQWdDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM3RCxDQUFDLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7QUFDTCxDQUFDO0FBekhELG9DQXlIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGh0dHBzIGZyb20gXCJodHRwc1wiO1xuaW1wb3J0ICogYXMgaHR0cCBmcm9tIFwiaHR0cFwiO1xuaW1wb3J0IHsgaXNOb2RlIH0gZnJvbSBcIi4vbWlzY1wiO1xuXG5jb25zdCB0ZXh0RW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuY29uc3QgdGV4dERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGh0dHBzUmVxdWVzdChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBwYXlsb2FkPzogQnVmZmVyIHwgQnVmZmVyW10sXG4gICAgbWV0aG9kID0gXCJHRVRcIixcbiAgICBzZW5kU2Vzc2lvbkNvb2tpZXMgPSB0cnVlLFxuICAgIGNvbmZpZz86IHtcbiAgICAgICAgaGVhZGVycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0sXG4gICAgICAgIGNhbmNlbD86IFByb21pc2U8dm9pZD47XG4gICAgfVxuKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICBpZiAoaXNOb2RlKCkpIHtcbiAgICAgICAgcmV0dXJuIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgdXJsT2JqID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgICAgICAgICBsZXQgcmVxdWVzdG9yID0gdXJsLnN0YXJ0c1dpdGgoXCJodHRwc1wiKSA/IGh0dHBzIDogaHR0cDtcbiAgICAgICAgICAgIGxldCBwb3J0ID0gdXJsLnN0YXJ0c1dpdGgoXCJodHRwc1wiKSA/IDQ0MyA6IDgwO1xuICAgICAgICAgICAgaWYgKHVybE9iai5wb3J0KSB7XG4gICAgICAgICAgICAgICAgcG9ydCA9ICt1cmxPYmoucG9ydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxCdWZmZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgaHR0cFJlcXVlc3QgPSByZXF1ZXN0b3IucmVxdWVzdChcbiAgICAgICAgICAgICAgICAgICAgdXJsT2JqICsgXCJcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogY29uZmlnPy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogV2UgZ2V0IGEgbG90IG9mIGJhY2tibGF6ZSBlcnJvcnMgd2hlbiB3ZSB0cnkgdG8gcmUtdXNlIGNvbm5lY3Rpb25zLiBJdCBtaWdodCBiZSBmYXN0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgYnV0Li4uIGFueXRoaW5nIHRoYXQgY2FyZXMgYWJvdXQgc3BlZWQgc2hvdWxkIHVzZSB3ZWJzb2NrZXRzIGFueXdheXMuLi5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFnZW50OiBuZXcgcmVxdWVzdG9yLkFnZW50KHsga2VlcEFsaXZlOiBmYWxzZSB9KSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMgaHR0cFJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhOiBCdWZmZXJbXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cFJlc3BvbnNlLm9uKFwiZGF0YVwiLCBjaHVuayA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wdXNoKGNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwUmVzcG9uc2Uub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFodHRwUmVzcG9uc2Uuc3RhdHVzQ29kZT8udG9TdHJpbmcoKS5zdGFydHNXaXRoKFwiMlwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYEVycm9yIGZvciAke3VybH0sICR7aHR0cFJlc3BvbnNlLnN0YXR1c0NvZGV9ICR7aHR0cFJlc3BvbnNlLnN0YXR1c01lc3NhZ2V9XFxuYCArIEJ1ZmZlci5jb25jYXQoZGF0YSkudG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKEJ1ZmZlci5jb25jYXQoZGF0YSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnPy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdm9pZCBjb25maWcuY2FuY2VsLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cFJlcXVlc3QuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaHR0cFJlcXVlc3Qub24oXCJlcnJvclwiLCByZWplY3QpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGF5bG9hZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQgPSBCdWZmZXIuY29uY2F0KHBheWxvYWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGh0dHBSZXF1ZXN0LndyaXRlKHBheWxvYWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBodHRwUmVxdWVzdC5lbmQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KSgpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgcmVxdWVzdC5vcGVuKG1ldGhvZCwgdXJsLCB0cnVlKTtcbiAgICAgICAgaWYgKGNvbmZpZz8uaGVhZGVycykge1xuICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZy5oZWFkZXJzKSkge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZz8uY2FuY2VsKSB7XG4gICAgICAgICAgICB2b2lkIGNvbmZpZy5jYW5jZWwuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSBcImFycmF5YnVmZmVyXCI7XG4gICAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gc2VuZFNlc3Npb25Db29raWVzO1xuICAgICAgICBpZiAocGF5bG9hZCkge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGF5bG9hZCkpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gQnVmZmVyLmNvbmNhdChwYXlsb2FkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcXVlc3Quc2VuZChwYXlsb2FkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcXVlc3Quc2VuZCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICByZXF1ZXN0Lm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlcXVlc3Quc3RhdHVzLnRvU3RyaW5nKCkuc3RhcnRzV2l0aChcIjJcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEl0IHNob3VsZCBiZSBhbiBlcnJvci5zdGFjay4gQnV0IGlmIGl0IGlzbid0Li4uIGp1c3QgdGhyb3cgdGhlIHN0YXR1cyB0ZXh0Li4uXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2VUZXh0ID0gdGV4dERlY29kZXIuZGVjb2RlKHJlcXVlc3QucmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSByZXNwb25zZVRleHQuc3BsaXQoXCJcXG5cIilbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlcnJvciA9IG5ldyBFcnJvcihgRm9yICR7dXJsfSwgYCArIG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Iuc3RhY2sgPSBgRm9yICR7dXJsfSwgYCArIHJlc3BvbnNlVGV4dDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcblxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYEZvciAke3VybH0sIGAgKyByZXF1ZXN0LnN0YXR1c1RleHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoQnVmZmVyLmZyb20ocmVxdWVzdC5yZXNwb25zZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJlcXVlc3Qub25lcnJvciA9IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgTmV0d29yayBlcnJvciBmb3IgcmVxdWVzdCBhdCAke3VybH1gKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVxdWVzdC5vbnRpbWVvdXQgPSAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYE5ldHdvcmsgdGltZW91dCBmb3IgcmVxdWVzdCBhdCAke3VybH1gKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVxdWVzdC5vbmFib3J0ID0gKGUpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBOZXR3b3JrIGFib3J0IGZvciByZXF1ZXN0IGF0ICR7dXJsfWApKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cbn0iXX0=
|
|
141
|
-
/* _JS_SOURCE_HASH = "c547d265cc518b241beefedf9b206e2d27800fcf7db35c1a770c9d554a3aea02"; */
|