velocious 1.0.683 → 1.0.684

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.
@@ -3,6 +3,15 @@ export default class VelociousHttpServerClientRequest {
3
3
  client: import("./index.js").default;
4
4
  configuration: import("../../configuration.js").default;
5
5
  requestParser: RequestParser;
6
+ /**
7
+ * Whether the owning client connection was torn down while this request
8
+ * was still running. Set once by the client on socket teardown and read
9
+ * by handlers that need to settle in-flight work (e.g. admission queue
10
+ * positions) without waiting for the response to be sent.
11
+ * @type {boolean} */
12
+ clientDisconnected: boolean;
13
+ /** @type {Set<() => void>} */
14
+ clientDisconnectCallbacks: Set<() => void>;
6
15
  /**
7
16
  * Runs constructor.
8
17
  * @param {object} args - Options object.
@@ -58,6 +67,24 @@ export default class VelociousHttpServerClientRequest {
58
67
  */
59
68
  rawBody(): Buffer;
60
69
  socketRemoteAddress(): string | undefined;
70
+ /**
71
+ * Marks this request as client-disconnected and runs every registered
72
+ * disconnect callback exactly once. The owning client invokes it when the
73
+ * socket tears down; handlers that register afterwards learn of the
74
+ * disconnect through the `clientDisconnected` field instead.
75
+ * @returns {void}
76
+ */
77
+ markClientDisconnected(): void;
78
+ /**
79
+ * Registers a callback that fires once when the client connection tears
80
+ * down while this request is still running. Buffered requests cannot rely
81
+ * on the streaming response's `onStreamClose` for that: no stream has
82
+ * been opened yet, so a queued request's queue position is otherwise
83
+ * stranded until its admission deadline.
84
+ * @param {() => void} callback - Disconnect callback.
85
+ * @returns {void}
86
+ */
87
+ onClientDisconnect(callback: () => void): void;
61
88
  getRequestBuffer(): import("./request-buffer/index.js").default;
62
89
  getRequestParser(): RequestParser;
63
90
  }
@@ -1 +1 @@
1
- {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../../src/http-server/client/request.js"],"names":[],"mappings":"AAIA,OAAO,aAAa,MAAM,qBAAqB,CAAA;AAI/C,MAAM,CAAC,OAAO,OAAO,gCAAgC;IAU5C,MAAM;IACN,aAAa;IACb,aAAa;IAXpB;;;;;OAKG;IACH,YAAY,EAAC,MAAM,EAAE,aAAa,EAAE,GAAG,QAAQ,EAAC,EAH7C;QAA2C,MAAM,EAAzC,OAAO,YAAY,EAAE,OAAO,CACpC;QAAuD,aAAa,EAA5D,OAAO,wBAAwB,EAAE,OAAO,CAClD;KAC+C,EAM/C;IAED,OAAO,WAA2D;IAElE;;;;OAIG;IACH,IAAI,CAAC,IAAI,EAHE,MAGF,GAFI,MAAM,GAAG,SAAS,CAEoB;IAEnD;;;;OAIG;IACH,MAAM,CAAC,UAAU,EAHN,MAGM,GAFJ,MAAM,GAAG,IAAI,CAE6D;IACvF,OAAO,2BAAsD;IAC7D,UAAU,WAAgD;IAC1D,WAAW,WAAiD;IAC5D,IAAI,kBAA0C;IAC9C;;;;OAIG;IACH,QAAQ,CAAC,GAAG,AAHT,CACA,EADQ,MAGC,GAFC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAMzC;IAED,YAAY,WAcX;IAED,MAAM,kBAAmC;IACzC,IAAI,WAA0C;IAC9C;;;OAGG;IACH,MAAM,IAFO,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAExF;IACzD,IAAI,kBAA0C;IAE9C;;;OAGG;IACH,WAAW,IAFE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAoB7C;IACD,QAAQ,kBAA8C;IACtD,aAAa,uBAMZ;IACD;;;OAGG;IACH,OAAO,IAFM,MAAM,CAEsC;IACzD,mBAAmB,uBAAwC;IAE3D,gBAAgB,gDAAwD;IACxE,gBAAgB,kBAAgC;CACjD"}
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../../src/http-server/client/request.js"],"names":[],"mappings":"AAIA,OAAO,aAAa,MAAM,qBAAqB,CAAA;AAI/C,MAAM,CAAC,OAAO,OAAO,gCAAgC;IAU5C,MAAM;IACN,aAAa;IACb,aAAa;IAElB;;;;;yBAKqB;IAChB,kBAAkB,EADb,OAAO;IAGjB,8BAA8B;IACzB,yBAAyB,EADnB,GAAG,CAAC,MAAM,IAAI,CAAC;IArB5B;;;;;OAKG;IACH,YAAY,EAAC,MAAM,EAAE,aAAa,EAAE,GAAG,QAAQ,EAAC,EAH7C;QAA2C,MAAM,EAAzC,OAAO,YAAY,EAAE,OAAO,CACpC;QAAuD,aAAa,EAA5D,OAAO,wBAAwB,EAAE,OAAO,CAClD;KAC+C,EAiB/C;IAED,OAAO,WAA2D;IAElE;;;;OAIG;IACH,IAAI,CAAC,IAAI,EAHE,MAGF,GAFI,MAAM,GAAG,SAAS,CAEoB;IAEnD;;;;OAIG;IACH,MAAM,CAAC,UAAU,EAHN,MAGM,GAFJ,MAAM,GAAG,IAAI,CAE6D;IACvF,OAAO,2BAAsD;IAC7D,UAAU,WAAgD;IAC1D,WAAW,WAAiD;IAC5D,IAAI,kBAA0C;IAC9C;;;;OAIG;IACH,QAAQ,CAAC,GAAG,AAHT,CACA,EADQ,MAGC,GAFC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAMzC;IAED,YAAY,WAcX;IAED,MAAM,kBAAmC;IACzC,IAAI,WAA0C;IAC9C;;;OAGG;IACH,MAAM,IAFO,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAExF;IACzD,IAAI,kBAA0C;IAE9C;;;OAGG;IACH,WAAW,IAFE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAoB7C;IACD,QAAQ,kBAA8C;IACtD,aAAa,uBAMZ;IACD;;;OAGG;IACH,OAAO,IAFM,MAAM,CAEsC;IACzD,mBAAmB,uBAAwC;IAE3D;;;;;;OAMG;IACH,sBAAsB,IAFT,IAAI,CAShB;IAED;;;;;;;;OAQG;IACH,kBAAkB,CAAC,QAAQ,EAHhB,MAAM,IAGU,GAFd,IAAI,CAQhB;IAED,gBAAgB,gDAAwD;IACxE,gBAAgB,kBAAgC;CACjD"}
@@ -16,6 +16,15 @@ export default class VelociousHttpServerClientRequest {
16
16
  this.client = client;
17
17
  this.configuration = configuration;
18
18
  this.requestParser = new RequestParser({ configuration });
19
+ /**
20
+ * Whether the owning client connection was torn down while this request
21
+ * was still running. Set once by the client on socket teardown and read
22
+ * by handlers that need to settle in-flight work (e.g. admission queue
23
+ * positions) without waiting for the response to be sent.
24
+ * @type {boolean} */
25
+ this.clientDisconnected = false;
26
+ /** @type {Set<() => void>} */
27
+ this.clientDisconnectCallbacks = new Set();
19
28
  }
20
29
  baseURL() { return `${this.protocol()}://${this.hostWithPort()}`; }
21
30
  /**
@@ -101,7 +110,39 @@ export default class VelociousHttpServerClientRequest {
101
110
  */
102
111
  rawBody() { return this.getRequestBuffer().getRawBody(); }
103
112
  socketRemoteAddress() { return this.client?.remoteAddress; }
113
+ /**
114
+ * Marks this request as client-disconnected and runs every registered
115
+ * disconnect callback exactly once. The owning client invokes it when the
116
+ * socket tears down; handlers that register afterwards learn of the
117
+ * disconnect through the `clientDisconnected` field instead.
118
+ * @returns {void}
119
+ */
120
+ markClientDisconnected() {
121
+ if (this.clientDisconnected)
122
+ return;
123
+ this.clientDisconnected = true;
124
+ for (const callback of this.clientDisconnectCallbacks) {
125
+ callback();
126
+ }
127
+ this.clientDisconnectCallbacks.clear();
128
+ }
129
+ /**
130
+ * Registers a callback that fires once when the client connection tears
131
+ * down while this request is still running. Buffered requests cannot rely
132
+ * on the streaming response's `onStreamClose` for that: no stream has
133
+ * been opened yet, so a queued request's queue position is otherwise
134
+ * stranded until its admission deadline.
135
+ * @param {() => void} callback - Disconnect callback.
136
+ * @returns {void}
137
+ */
138
+ onClientDisconnect(callback) {
139
+ if (this.clientDisconnected) {
140
+ callback();
141
+ return;
142
+ }
143
+ this.clientDisconnectCallbacks.add(callback);
144
+ }
104
145
  getRequestBuffer() { return this.getRequestParser().getRequestBuffer(); }
105
146
  getRequestParser() { return this.requestParser; }
106
147
  }
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUM5QixPQUFPLFdBQVcsTUFBTSxhQUFhLENBQUE7QUFDckMsT0FBTyxhQUFhLE1BQU0scUJBQXFCLENBQUE7QUFDL0MsT0FBTyxvQkFBb0IsTUFBTSxzQkFBc0IsQ0FBQTtBQUN2RCxPQUFPLGFBQWEsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUUxRCxNQUFNLENBQUMsT0FBTyxPQUFPLGdDQUFnQztJQUNuRDs7Ozs7T0FLRztJQUNILFlBQVksRUFBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsUUFBUSxFQUFDO1FBQzlDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUV2QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQTtRQUNsQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksYUFBYSxDQUFDLEVBQUMsYUFBYSxFQUFDLENBQUMsQ0FBQTtJQUN6RCxDQUFDO0lBRUQsT0FBTyxLQUFLLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUEsQ0FBQyxDQUFDO0lBRWxFOzs7O09BSUc7SUFDSCxJQUFJLENBQUMsSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBRW5EOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsVUFBVSxJQUFJLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFBLENBQUMsQ0FB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LEVBQUU7U0FDaEQsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUNEOzs7T0FHRztJQUNILE9BQU8sS0FBSyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFBLENBQUMsQ0FBQztJQUN6RCxtQkFBbUIsS0FBSyxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFBLENBQUMsQ0FBQztJQUUzRCxnQkFBZ0IsS0FBSyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLGdCQUFnQixFQUFFLENBQUEsQ0FBQyxDQUFDO0lBQ3hFLGdCQUFnQixLQUFLLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQSxDQUFDLENBQUM7Q0FDakQiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtkaWdnfSBmcm9tIFwiZGlnZ2VyaXplXCJcbmltcG9ydCBxdWVyeXN0cmluZyBmcm9tIFwicXVlcnlzdHJpbmdcIlxuaW1wb3J0IFJlcXVlc3RQYXJzZXIgZnJvbSBcIi4vcmVxdWVzdC1wYXJzZXIuanNcIlxuaW1wb3J0IHJlc29sdmVSZW1vdGVBZGRyZXNzIGZyb20gXCIuLi9yZW1vdGUtYWRkcmVzcy5qc1wiXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzSHR0cFNlcnZlckNsaWVudFJlcXVlc3Qge1xuICAvKipcbiAgICogUnVucyBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3MuY2xpZW50IC0gQ2xpZW50IGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gYXJncy5jb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjbGllbnQsIGNvbmZpZ3VyYXRpb24sIC4uLnJlc3RBcmdzfSkge1xuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudFxuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLnJlcXVlc3RQYXJzZXIgPSBuZXcgUmVxdWVzdFBhcnNlcih7Y29uZmlndXJhdGlvbn0pXG4gIH1cblxuICBiYXNlVVJMKCkgeyByZXR1cm4gYCR7dGhpcy5wcm90b2NvbCgpfTovLyR7dGhpcy5ob3N0V2l0aFBvcnQoKX1gIH1cblxuICAvKipcbiAgICogUnVucyBmZWVkLlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gZGF0YSAtIERhdGEgcGF5bG9hZC5cbiAgICogQHJldHVybnMge0J1ZmZlciB8IHVuZGVmaW5lZH0gLSBSZW1haW5pbmcgZGF0YSwgaWYgYW55LlxuICAgKi9cbiAgZmVlZChkYXRhKSB7IHJldHVybiB0aGlzLnJlcXVlc3RQYXJzZXIuZmVlZChkYXRhKSB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgaGVhZGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVyTmFtZSAtIEhlYWRlciBuYW1lLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgbnVsbH0gLSBUaGUgaGVhZGVyLlxuICAgKi9cbiAgaGVhZGVyKGhlYWRlck5hbWUpIHsgcmV0dXJuIHRoaXMuZ2V0UmVxdWVzdEJ1ZmZlcigpLmdldEhlYWRlcihoZWFkZXJOYW1lKT8uZ2V0VmFsdWUoKSB9XG4gIGhlYWRlcnMoKSB7IHJldHVybiB0aGlzLmdldFJlcXVlc3RCdWZmZXIoKS5nZXRIZWFkZXJzSGFzaCgpIH1cbiAgaHR0cE1ldGhvZCgpIHsgcmV0dXJuIHRoaXMucmVxdWVzdFBhcnNlci5nZXRIdHRwTWV0aG9kKCkgfVxuICBodHRwVmVyc2lvbigpIHsgcmV0dXJuIHRoaXMucmVxdWVzdFBhcnNlci5nZXRIdHRwVmVyc2lvbigpIH1cbiAgaG9zdCgpIHsgcmV0dXJuIHRoaXMucmVxdWVzdFBhcnNlci5nZXRIb3N0KCkgfVxuICAvKipcbiAgICogUnVucyBtZXRhZGF0YS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtrZXldIC0gTWV0YWRhdGEga2V5LlxuICAgKiBAcmV0dXJucyB7UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59IC0gTWV0YWRhdGEgdmFsdWUgZm9yIGEga2V5LCBvciB0aGUgZnVsbCBtZXRhZGF0YSBvYmplY3QuXG4gICAqL1xuICBtZXRhZGF0YShrZXkpIHtcbiAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWRcblxuICAgIHJldHVybiB7fVxuICB9XG5cbiAgaG9zdFdpdGhQb3J0KCkge1xuICAgIGNvbnN0IHBvcnQgPSB0aGlzLnBvcnQoKVxuICAgIGNvbnN0IHByb3RvY29sID0gdGhpcy5wcm90b2NvbCgpXG4gICAgbGV0IGhvc3RXaXRoUG9ydCA9IGAke3RoaXMuaG9zdCgpfWBcblxuICAgIGlmIChwb3J0ID09IDgwICYmIHByb3RvY29sID09IFwiaHR0cFwiKSB7XG4gICAgICAvLyBEbyBub3RoaW5nXG4gICAgfSBlbHNlIGlmIChwb3J0ID09IDQ0MyAmJiBwcm90b2NvbCA9PSBcImh0dHBzXCIpIHtcbiAgICAgIC8vIERvIG5vdGhpbmdcbiAgICB9IGVsc2UgaWYgKHBvcnQpIHtcbiAgICAgIGhvc3RXaXRoUG9ydCArPSBgOiR7cG9ydH1gXG4gICAgfVxuXG4gICAgcmV0dXJuIGhvc3RXaXRoUG9ydFxuICB9XG5cbiAgb3JpZ2luKCkgeyByZXR1cm4gdGhpcy5oZWFkZXIoXCJvcmlnaW5cIikgfVxuICBwYXRoKCkgeyByZXR1cm4gdGhpcy5yZXF1ZXN0UGFyc2VyLmdldFBhdGgoKSB9XG4gIC8qKlxuICAgKiBSdW5zIHBhcmFtcy5cbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHwgUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+IHwgQXJyYXk8UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+Pn0gLSBUaGUgcmVxdWVzdCBwYXJhbXMuXG4gICAqL1xuICBwYXJhbXMoKSB7IHJldHVybiBkaWdnKHRoaXMsIFwicmVxdWVzdFBhcnNlclwiLCBcInBhcmFtc1wiKSB9XG4gIHBvcnQoKSB7IHJldHVybiB0aGlzLnJlcXVlc3RQYXJzZXIuZ2V0UG9ydCgpIH1cblxuICAvKipcbiAgICogUnVucyBxdWVyeSBwYXJhbXMuXG4gICAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT59IC0gUGFyc2VkIHF1ZXJ5IHBhcmFtZXRlcnMgZnJvbSB0aGUgVVJMLlxuICAgKi9cbiAgcXVlcnlQYXJhbXMoKSB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLnBhdGgoKS5zcGxpdChcIj9cIilbMV1cblxuICAgIGlmICghcXVlcnkpIHJldHVybiBPYmplY3QuY3JlYXRlKG51bGwpXG5cbiAgICBjb25zdCBwYXJzZWQgPSBxdWVyeXN0cmluZy5wYXJzZShxdWVyeSlcbiAgICAvKipcbiAgICAgKiBQYXJhbXMuXG4gICAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdPn0gKi9cbiAgICBjb25zdCBwYXJhbXMgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwYXJzZWQpKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHBhcmFtc1trZXldID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zXG4gIH1cbiAgcHJvdG9jb2woKSB7IHJldHVybiB0aGlzLnJlcXVlc3RQYXJzZXIuZ2V0UHJvdG9jb2woKSB9XG4gIHJlbW90ZUFkZHJlc3MoKSB7XG4gICAgcmV0dXJuIHJlc29sdmVSZW1vdGVBZGRyZXNzKHtcbiAgICAgIGNvbmZpZ3VyYXRpb246IHRoaXMuY29uZmlndXJhdGlvbixcbiAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycygpLFxuICAgICAgc29ja2V0UmVtb3RlQWRkcmVzczogdGhpcy5zb2NrZXRSZW1vdGVBZGRyZXNzKClcbiAgICB9KVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGV4YWN0IGJvZHkgYnl0ZXMgZm9yIHJlcXVlc3RzIHdob3NlIGhlYWRlci1zdGFnZSBib2R5IHBvbGljeSBzZWxlY3RlZCByYXcgbW9kZS5cbiAgICogQHJldHVybnMge0J1ZmZlcn0gLSBBIGNvcHkgb2YgdGhlIGV4YWN0IHJlcXVlc3QgYm9keSBieXRlcy5cbiAgICovXG4gIHJhd0JvZHkoKSB7IHJldHVybiB0aGlzLmdldFJlcXVlc3RCdWZmZXIoKS5nZXRSYXdCb2R5KCkgfVxuICBzb2NrZXRSZW1vdGVBZGRyZXNzKCkgeyByZXR1cm4gdGhpcy5jbGllbnQ/LnJlbW90ZUFkZHJlc3MgfVxuXG4gIGdldFJlcXVlc3RCdWZmZXIoKSB7IHJldHVybiB0aGlzLmdldFJlcXVlc3RQYXJzZXIoKS5nZXRSZXF1ZXN0QnVmZmVyKCkgfVxuICBnZXRSZXF1ZXN0UGFyc2VyKCkgeyByZXR1cm4gdGhpcy5yZXF1ZXN0UGFyc2VyIH1cbn1cbiJdfQ==
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUM5QixPQUFPLFdBQVcsTUFBTSxhQUFhLENBQUE7QUFDckMsT0FBTyxhQUFhLE1BQU0scUJBQXFCLENBQUE7QUFDL0MsT0FBTyxvQkFBb0IsTUFBTSxzQkFBc0IsQ0FBQTtBQUN2RCxPQUFPLGFBQWEsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUUxRCxNQUFNLENBQUMsT0FBTyxPQUFPLGdDQUFnQztJQUNuRDs7Ozs7T0FLRztJQUNILFlBQVksRUFBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsUUFBUSxFQUFDO1FBQzlDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUV2QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQTtRQUNsQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksYUFBYSxDQUFDLEVBQUMsYUFBYSxFQUFDLENBQUMsQ0FBQTtRQUV2RDs7Ozs7NkJBS3FCO1FBQ3JCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUE7UUFFL0IsOEJBQThCO1FBQzlCLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQzVDLENBQUM7SUFFRCxPQUFPLEtBQUssT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQSxDQUFDLENBQUM7SUFFbEU7Ozs7T0FJRztJQUNILElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFF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fSBmcm9tIFwiZGlnZ2VyaXplXCJcbmltcG9ydCBxdWVyeXN0cmluZyBmcm9tIFwicXVlcnlzdHJpbmdcIlxuaW1wb3J0IFJlcXVlc3RQYXJzZXIgZnJvbSBcIi4vcmVxdWVzdC1wYXJzZXIuanNcIlxuaW1wb3J0IHJlc29sdmVSZW1vdGVBZGRyZXNzIGZyb20gXCIuLi9yZW1vdGUtYWRkcmVzcy5qc1wiXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzSHR0cFNlcnZlckNsaWVudFJlcXVlc3Qge1xuICAvKipcbiAgICogUnVucyBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3MuY2xpZW50IC0gQ2xpZW50IGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gYXJncy5jb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjbGllbnQsIGNvbmZpZ3VyYXRpb24sIC4uLnJlc3RBcmdzfSkge1xuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudFxuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLnJlcXVlc3RQYXJzZXIgPSBuZXcgUmVxdWVzdFBhcnNlcih7Y29uZmlndXJhdGlvbn0pXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBvd25pbmcgY2xpZW50IGNvbm5lY3Rpb24gd2FzIHRvcm4gZG93biB3aGlsZSB0aGlzIHJlcXVlc3RcbiAgICAgKiB3YXMgc3RpbGwgcnVubmluZy4gU2V0IG9uY2UgYnkgdGhlIGNsaWVudCBvbiBzb2NrZXQgdGVhcmRvd24gYW5kIHJlYWRcbiAgICAgKiBieSBoYW5kbGVycyB0aGF0IG5lZWQgdG8gc2V0dGxlIGluLWZsaWdodCB3b3JrIChlLmcuIGFkbWlzc2lvbiBxdWV1ZVxuICAgICAqIHBvc2l0aW9ucykgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgcmVzcG9uc2UgdG8gYmUgc2VudC5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgICB0aGlzLmNsaWVudERpc2Nvbm5lY3RlZCA9IGZhbHNlXG5cbiAgICAvKiogQHR5cGUge1NldDwoKSA9PiB2b2lkPn0gKi9cbiAgICB0aGlzLmNsaWVudERpc2Nvbm5lY3RDYWxsYmFja3MgPSBuZXcgU2V0KClcbiAgfVxuXG4gIGJhc2VVUkwoKSB7IHJldHVybiBgJHt0aGlzLnByb3RvY29sKCl9Oi8vJHt0aGlzLmhvc3RXaXRoUG9ydCgpfWAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGZlZWQuXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBkYXRhIC0gRGF0YSBwYXlsb2FkLlxuICAgKiBAcmV0dXJucyB7QnVmZmVyIHwgdW5kZWZpbmVkfSAtIFJlbWFpbmluZyBkYXRhLCBpZiBhbnkuXG4gICAqL1xuICBmZWVkKGRhdGEpIHsgcmV0dXJuIHRoaXMucmVxdWVzdFBhcnNlci5mZWVkKGRhdGEpIH1cblxuICAvKipcbiAgICogUnVucyBoZWFkZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXJOYW1lIC0gSGVhZGVyIG5hbWUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCBudWxsfSAtIFRoZSBoZWFkZXIuXG4gICAqL1xuICBoZWFkZXIoaGVhZGVyTmFtZSkgeyByZXR1cm4gdGhpcy5nZXRSZXF1ZXN0QnVmZmVyKCkuZ2V0SGVhZGVyKGhlYWRlck5hbWUpPy5nZXRWYWx1ZSgpIH1cbiAgaGVhZGVycygpIHsgcmV0dXJuIHRoaXMuZ2V0UmVxdWVzdEJ1ZmZlcigpLmdldEhlYWRlcnNIYXNoKCkgfVxuICBodHRwTWV0aG9kKCkgeyByZXR1cm4gdGhpcy5yZXF1ZXN0UGFyc2VyLmdldEh0dHBNZXRob2QoKSB9XG4gIGh0dHBWZXJzaW9uKCkgeyByZXR1cm4gdGhpcy5yZXF1ZXN0UGFyc2VyLmdldEh0dHBWZXJzaW9uKCkgfVxuICBob3N0KCkgeyByZXR1cm4gdGhpcy5yZXF1ZXN0UGFyc2VyLmdldEhvc3QoKSB9XG4gIC8qKlxuICAgKiBSdW5zIG1ldGFkYXRhLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gLSBNZXRhZGF0YSBrZXkuXG4gICAqIEByZXR1cm5zIHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gLSBNZXRhZGF0YSB2YWx1ZSBmb3IgYSBrZXksIG9yIHRoZSBmdWxsIG1ldGFkYXRhIG9iamVjdC5cbiAgICovXG4gIG1ldGFkYXRhKGtleSkge1xuICAgIGlmIChrZXkgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgcmV0dXJuIHt9XG4gIH1cblxuICBob3N0V2l0aFBvcnQoKSB7XG4gICAgY29uc3QgcG9ydCA9IHRoaXMucG9ydCgpXG4gICAgY29uc3QgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sKClcbiAgICBsZXQgaG9zdFdpdGhQb3J0ID0gYCR7dGhpcy5ob3N0KCl9YFxuXG4gICAgaWYgKHBvcnQgPT0gODAgJiYgcHJvdG9jb2wgPT0gXCJodHRwXCIpIHtcbiAgICAgIC8vIERvIG5vdGhpbmdcbiAgICB9IGVsc2UgaWYgKHBvcnQgPT0gNDQzICYmIHByb3RvY29sID09IFwiaHR0cHNcIikge1xuICAgICAgLy8gRG8gbm90aGluZ1xuICAgIH0gZWxzZSBpZiAocG9ydCkge1xuICAgICAgaG9zdFdpdGhQb3J0ICs9IGA6JHtwb3J0fWBcbiAgICB9XG5cbiAgICByZXR1cm4gaG9zdFdpdGhQb3J0XG4gIH1cblxuICBvcmlnaW4oKSB7IHJldHVybiB0aGlzLmhlYWRlcihcIm9yaWdpblwiKSB9XG4gIHBhdGgoKSB7IHJldHVybiB0aGlzLnJlcXVlc3RQYXJzZXIuZ2V0UGF0aCgpIH1cbiAgLyoqXG4gICAqIFJ1bnMgcGFyYW1zLlxuICAgKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQgfCBSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4gfCBBcnJheTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4+fSAtIFRoZSByZXF1ZXN0IHBhcmFtcy5cbiAgICovXG4gIHBhcmFtcygpIHsgcmV0dXJuIGRpZ2codGhpcywgXCJyZXF1ZXN0UGFyc2VyXCIsIFwicGFyYW1zXCIpIH1cbiAgcG9ydCgpIHsgcmV0dXJuIHRoaXMucmVxdWVzdFBhcnNlci5nZXRQb3J0KCkgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHF1ZXJ5IHBhcmFtcy5cbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdPn0gLSBQYXJzZWQgcXVlcnkgcGFyYW1ldGVycyBmcm9tIHRoZSBVUkwuXG4gICAqL1xuICBxdWVyeVBhcmFtcygpIHtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMucGF0aCgpLnNwbGl0KFwiP1wiKVsxXVxuXG4gICAgaWYgKCFxdWVyeSkgcmV0dXJuIE9iamVjdC5jcmVhdGUobnVsbClcblxuICAgIGNvbnN0IHBhcnNlZCA9IHF1ZXJ5c3RyaW5nLnBhcnNlKHF1ZXJ5KVxuICAgIC8qKlxuICAgICAqIFBhcmFtcy5cbiAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+fSAqL1xuICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5jcmVhdGUobnVsbClcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHBhcnNlZCkpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcGFyYW1zW2tleV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXNcbiAgfVxuICBwcm90b2NvbCgpIHsgcmV0dXJuIHRoaXMucmVxdWVzdFBhcnNlci5nZXRQcm90b2NvbCgpIH1cbiAgcmVtb3RlQWRkcmVzcygpIHtcbiAgICByZXR1cm4gcmVzb2x2ZVJlbW90ZUFkZHJlc3Moe1xuICAgICAgY29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9uLFxuICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzKCksXG4gICAgICBzb2NrZXRSZW1vdGVBZGRyZXNzOiB0aGlzLnNvY2tldFJlbW90ZUFkZHJlc3MoKVxuICAgIH0pXG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgZXhhY3QgYm9keSBieXRlcyBmb3IgcmVxdWVzdHMgd2hvc2UgaGVhZGVyLXN0YWdlIGJvZHkgcG9saWN5IHNlbGVjdGVkIHJhdyBtb2RlLlxuICAgKiBAcmV0dXJucyB7QnVmZmVyfSAtIEEgY29weSBvZiB0aGUgZXhhY3QgcmVxdWVzdCBib2R5IGJ5dGVzLlxuICAgKi9cbiAgcmF3Qm9keSgpIHsgcmV0dXJuIHRoaXMuZ2V0UmVxdWVzdEJ1ZmZlcigpLmdldFJhd0JvZHkoKSB9XG4gIHNvY2tldFJlbW90ZUFkZHJlc3MoKSB7IHJldHVybiB0aGlzLmNsaWVudD8ucmVtb3RlQWRkcmVzcyB9XG5cbiAgLyoqXG4gICAqIE1hcmtzIHRoaXMgcmVxdWVzdCBhcyBjbGllbnQtZGlzY29ubmVjdGVkIGFuZCBydW5zIGV2ZXJ5IHJlZ2lzdGVyZWRcbiAgICogZGlzY29ubmVjdCBjYWxsYmFjayBleGFjdGx5IG9uY2UuIFRoZSBvd25pbmcgY2xpZW50IGludm9rZXMgaXQgd2hlbiB0aGVcbiAgICogc29ja2V0IHRlYXJzIGRvd247IGhhbmRsZXJzIHRoYXQgcmVnaXN0ZXIgYWZ0ZXJ3YXJkcyBsZWFybiBvZiB0aGVcbiAgICogZGlzY29ubmVjdCB0aHJvdWdoIHRoZSBgY2xpZW50RGlzY29ubmVjdGVkYCBmaWVsZCBpbnN0ZWFkLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG1hcmtDbGllbnREaXNjb25uZWN0ZWQoKSB7XG4gICAgaWYgKHRoaXMuY2xpZW50RGlzY29ubmVjdGVkKSByZXR1cm5cbiAgICB0aGlzLmNsaWVudERpc2Nvbm5lY3RlZCA9IHRydWVcbiAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIHRoaXMuY2xpZW50RGlzY29ubmVjdENhbGxiYWNrcykge1xuICAgICAgY2FsbGJhY2soKVxuICAgIH1cbiAgICB0aGlzLmNsaWVudERpc2Nvbm5lY3RDYWxsYmFja3MuY2xlYXIoKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIHRoYXQgZmlyZXMgb25jZSB3aGVuIHRoZSBjbGllbnQgY29ubmVjdGlvbiB0ZWFyc1xuICAgKiBkb3duIHdoaWxlIHRoaXMgcmVxdWVzdCBpcyBzdGlsbCBydW5uaW5nLiBCdWZmZXJlZCByZXF1ZXN0cyBjYW5ub3QgcmVseVxuICAgKiBvbiB0aGUgc3RyZWFtaW5nIHJlc3BvbnNlJ3MgYG9uU3RyZWFtQ2xvc2VgIGZvciB0aGF0OiBubyBzdHJlYW0gaGFzXG4gICAqIGJlZW4gb3BlbmVkIHlldCwgc28gYSBxdWV1ZWQgcmVxdWVzdCdzIHF1ZXVlIHBvc2l0aW9uIGlzIG90aGVyd2lzZVxuICAgKiBzdHJhbmRlZCB1bnRpbCBpdHMgYWRtaXNzaW9uIGRlYWRsaW5lLlxuICAgKiBAcGFyYW0geygpID0+IHZvaWR9IGNhbGxiYWNrIC0gRGlzY29ubmVjdCBjYWxsYmFjay5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbkNsaWVudERpc2Nvbm5lY3QoY2FsbGJhY2spIHtcbiAgICBpZiAodGhpcy5jbGllbnREaXNjb25uZWN0ZWQpIHtcbiAgICAgIGNhbGxiYWNrKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLmNsaWVudERpc2Nvbm5lY3RDYWxsYmFja3MuYWRkKGNhbGxiYWNrKVxuICB9XG5cbiAgZ2V0UmVxdWVzdEJ1ZmZlcigpIHsgcmV0dXJuIHRoaXMuZ2V0UmVxdWVzdFBhcnNlcigpLmdldFJlcXVlc3RCdWZmZXIoKSB9XG4gIGdldFJlcXVlc3RQYXJzZXIoKSB7IHJldHVybiB0aGlzLnJlcXVlc3RQYXJzZXIgfVxufVxuIl19
@@ -15,6 +15,15 @@ export default class VelociousHttpServerClientWebsocketRequest {
15
15
  paramsObject: Record<string, ReturnType<typeof JSON.parse>>;
16
16
  _path: string;
17
17
  remoteAddressValue: string | undefined;
18
+ /**
19
+ * Whether the owning client connection was torn down while this request
20
+ * was still running. Websocket requests are session-owned and never
21
+ * enter the client's in-flight request list, so this stays false for
22
+ * them; the field exists so the request union shares one surface.
23
+ * @type {boolean} */
24
+ clientDisconnected: boolean;
25
+ /** @type {Set<() => void>} */
26
+ clientDisconnectCallbacks: Set<() => void>;
18
27
  /**
19
28
  * Runs constructor.
20
29
  * @param {object} args - Options object.
@@ -35,6 +44,25 @@ export default class VelociousHttpServerClientWebsocketRequest {
35
44
  params?: Record<string, ReturnType<typeof JSON.parse>>;
36
45
  remoteAddress?: string;
37
46
  });
47
+ /**
48
+ * Marks this request as client-disconnected and runs every registered
49
+ * disconnect callback exactly once. The owning client invokes it when the
50
+ * socket tears down; handlers that register afterwards learn of the
51
+ * disconnect through the `clientDisconnected` field instead. Websocket
52
+ * requests are session-owned and never enter the client's in-flight
53
+ * request list, so this is inert for them; the shared surface keeps the
54
+ * request union uniform.
55
+ * @returns {void}
56
+ */
57
+ markClientDisconnected(): void;
58
+ /**
59
+ * Registers a callback that fires once when the client connection tears
60
+ * down while this request is still running. See the HTTP request's
61
+ * {@linkcode markClientDisconnected} for the shared-surface note.
62
+ * @param {() => void} callback - Disconnect callback.
63
+ * @returns {void}
64
+ */
65
+ onClientDisconnect(callback: () => void): void;
38
66
  baseURL(): string | undefined;
39
67
  /**
40
68
  * Runs header.
@@ -1 +1 @@
1
- {"version":3,"file":"websocket-request.d.ts","sourceRoot":"","sources":["../../../../src/http-server/client/websocket-request.js"],"names":[],"mappings":"AAIA,MAAM,CAAC,OAAO,OAAO,yCAAyC;IAgBrD,IAAI;IACT;;wCAEoC;IAC/B,UAAU,EADL,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAEhC;;+DAE2D;IACtD,cAAc,EADT,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IAElD,MAAM;IACX;;+DAE2D;IACtD,YAAY,EADP,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IAElD,KAAK;IACL,kBAAkB;IA9BzB;;;;;;;;;;OAUG;IACH,YAAY,EAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAC,EARvE;QAA6C,IAAI,AAAjD,CACA,EADQ,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CACrC;QAAsC,OAAO,AAA7C,CACA,EADQ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAC9B;QAA6D,QAAQ,AAArE,CACA,EADQ,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CACrD;QAAqB,MAAM,EAAnB,MAAM,CACd;QAAqB,IAAI,EAAjB,MAAM,CACd;QAA6D,MAAM,AAAnE,CACA,EADQ,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CACrD;QAAsB,aAAa,AAAnC,CACF,EADU,MAAM,CAChB;KACyE,EAoCzE;IAED,OAAO,uBAKN;IAED;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAHA,MAGA,GAFE,MAAM,GAAG,IAAI,CAEyC;IAEnE,OAAO,2BAA6B;IAEpC,UAAU,WAAyB;IAEnC,WAAW,WAAyB;IAEpC,IAAI,uBAA8C;IAElD;;;;OAIG;IACH,QAAQ,CAAC,GAAG,AAHT,CACA,EADQ,MAGC,GAFC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAMzC;IAED,YAAY,uBAQX;IAED,MAAM,kBAAmC;IAEzC,IAAI,WAAwB;IAE5B,MAAM,wBAA+B;IAErC,IAAI,uBAKH;IAED,QAAQ,uBAKP;IAED;;;OAGG;IACH,WAAW,IAFE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAEG;IAEjD,aAAa,uBAAqC;IAElD,iBAAiB,QAoBhB;CACF"}
1
+ {"version":3,"file":"websocket-request.d.ts","sourceRoot":"","sources":["../../../../src/http-server/client/websocket-request.js"],"names":[],"mappings":"AAIA,MAAM,CAAC,OAAO,OAAO,yCAAyC;IAgBrD,IAAI;IACT;;wCAEoC;IAC/B,UAAU,EADL,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAEhC;;+DAE2D;IACtD,cAAc,EADT,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IAElD,MAAM;IACX;;+DAE2D;IACtD,YAAY,EADP,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IAElD,KAAK;IACL,kBAAkB;IAkBvB;;;;;yBAKqB;IAChB,kBAAkB,EADb,OAAO;IAGjB,8BAA8B;IACzB,yBAAyB,EADnB,GAAG,CAAC,MAAM,IAAI,CAAC;IAxD5B;;;;;;;;;;OAUG;IACH,YAAY,EAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAC,EARvE;QAA6C,IAAI,AAAjD,CACA,EADQ,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CACrC;QAAsC,OAAO,AAA7C,CACA,EADQ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAC9B;QAA6D,QAAQ,AAArE,CACA,EADQ,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CACrD;QAAqB,MAAM,EAAnB,MAAM,CACd;QAAqB,IAAI,EAAjB,MAAM,CACd;QAA6D,MAAM,AAAnE,CACA,EADQ,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CACrD;QAAsB,aAAa,AAAnC,CACF,EADU,MAAM,CAChB;KACyE,EA+CzE;IAED;;;;;;;;;OASG;IACH,sBAAsB,IAFT,IAAI,CAShB;IAED;;;;;;OAMG;IACH,kBAAkB,CAAC,QAAQ,EAHhB,MAAM,IAGU,GAFd,IAAI,CAQhB;IAED,OAAO,uBAKN;IAED;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAHA,MAGA,GAFE,MAAM,GAAG,IAAI,CAEyC;IAEnE,OAAO,2BAA6B;IAEpC,UAAU,WAAyB;IAEnC,WAAW,WAAyB;IAEpC,IAAI,uBAA8C;IAElD;;;;OAIG;IACH,QAAQ,CAAC,GAAG,AAHT,CACA,EADQ,MAGC,GAFC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAMzC;IAED,YAAY,uBAQX;IAED,MAAM,kBAAmC;IAEzC,IAAI,WAAwB;IAE5B,MAAM,wBAA+B;IAErC,IAAI,uBAKH;IAED,QAAQ,uBAKP;IAED;;;OAGG;IACH,WAAW,IAFE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAEG;IAEjD,aAAa,uBAAqC;IAElD,iBAAiB,QAoBhB;CACF"}
@@ -47,6 +47,48 @@ export default class VelociousHttpServerClientWebsocketRequest {
47
47
  }
48
48
  const queryParams = this._parseQueryParams();
49
49
  this.paramsObject = { ...queryParams, ...this.paramsObject };
50
+ /**
51
+ * Whether the owning client connection was torn down while this request
52
+ * was still running. Websocket requests are session-owned and never
53
+ * enter the client's in-flight request list, so this stays false for
54
+ * them; the field exists so the request union shares one surface.
55
+ * @type {boolean} */
56
+ this.clientDisconnected = false;
57
+ /** @type {Set<() => void>} */
58
+ this.clientDisconnectCallbacks = new Set();
59
+ }
60
+ /**
61
+ * Marks this request as client-disconnected and runs every registered
62
+ * disconnect callback exactly once. The owning client invokes it when the
63
+ * socket tears down; handlers that register afterwards learn of the
64
+ * disconnect through the `clientDisconnected` field instead. Websocket
65
+ * requests are session-owned and never enter the client's in-flight
66
+ * request list, so this is inert for them; the shared surface keeps the
67
+ * request union uniform.
68
+ * @returns {void}
69
+ */
70
+ markClientDisconnected() {
71
+ if (this.clientDisconnected)
72
+ return;
73
+ this.clientDisconnected = true;
74
+ for (const callback of this.clientDisconnectCallbacks) {
75
+ callback();
76
+ }
77
+ this.clientDisconnectCallbacks.clear();
78
+ }
79
+ /**
80
+ * Registers a callback that fires once when the client connection tears
81
+ * down while this request is still running. See the HTTP request's
82
+ * {@linkcode markClientDisconnected} for the shared-surface note.
83
+ * @param {() => void} callback - Disconnect callback.
84
+ * @returns {void}
85
+ */
86
+ onClientDisconnect(callback) {
87
+ if (this.clientDisconnected) {
88
+ callback();
89
+ return;
90
+ }
91
+ this.clientDisconnectCallbacks.add(callback);
50
92
  }
51
93
  baseURL() {
52
94
  const protocol = this.protocol();
@@ -121,4 +163,4 @@ export default class VelociousHttpServerClientWebsocketRequest {
121
163
  return params;
122
164
  }
123
165
  }
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LXJlcXVlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLFdBQVcsTUFBTSxhQUFhLENBQUE7QUFFckMsTUFBTSxDQUFDLE9BQU8sT0FBTyx5Q0FBeUM7SUFDNUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILFlBQVksRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUM7UUFDeEUsSUFBSSxDQUFDLE1BQU07WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUE7UUFDbEQsSUFBSSxDQUFDLElBQUk7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUE7UUFFOUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7UUFDaEI7OzRDQUVvQztRQUNwQyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQTtRQUNwQjs7bUVBRTJEO1FBQzNELElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsUUFBUSxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUNuRCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUNsQzs7bUVBRTJEO1FBQzNELElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFBO1FBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO1FBQ2pCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxhQUFhLENBQUE7UUFFdkMsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENB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QUFNLENBQUE7SUFDZixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHF1ZXJ5c3RyaW5nIGZyb20gXCJxdWVyeXN0cmluZ1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0h0dHBTZXJ2ZXJDbGllbnRXZWJzb2NrZXRSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIFJ1bnMgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59IFthcmdzLmJvZHldIC0gUmVxdWVzdCBib2R5LlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IFthcmdzLmhlYWRlcnNdIC0gSGVhZGVyIGxpc3QuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBbYXJncy5tZXRhZGF0YV0gLSBTZXNzaW9uIG1ldGFkYXRhLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXRob2QgLSBIVFRQIG1ldGhvZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MucGF0aCAtIFBhdGguXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBbYXJncy5wYXJhbXNdIC0gUGFyYW1ldGVycyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5yZW1vdGVBZGRyZXNzXSAtIFJlbW90ZSBhZGRyZXNzLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2JvZHksIGhlYWRlcnMsIG1ldGFkYXRhLCBtZXRob2QsIHBhcmFtcywgcGF0aCwgcmVtb3RlQWRkcmVzc30pIHtcbiAgICBpZiAoIW1ldGhvZCkgdGhyb3cgbmV3IEVycm9yKFwibWV0aG9kIGlzIHJlcXVpcmVkXCIpXG4gICAgaWYgKCFwYXRoKSB0aHJvdyBuZXcgRXJyb3IoXCJwYXRoIGlzIHJlcXVpcmVkXCIpXG5cbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gICAgLyoqXG4gICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICAgIHRoaXMuaGVhZGVyc01hcCA9IHt9XG4gICAgLyoqXG4gICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59ICovXG4gICAgdGhpcy5tZXRhZGF0YU9iamVjdCA9IG1ldGFkYXRhID8gey4uLm1ldGFkYXRhfSA6IHt9XG4gICAgdGhpcy5tZXRob2QgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuICAgIC8qKlxuICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSAqL1xuICAgIHRoaXMucGFyYW1zT2JqZWN0ID0ge31cbiAgICB0aGlzLl9wYXRoID0gcGF0aFxuICAgIHRoaXMucmVtb3RlQWRkcmVzc1ZhbHVlID0gcmVtb3RlQWRkcmVzc1xuXG4gICAgaWYgKGhlYWRlcnMpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpKSB7XG4gICAgICAgIHRoaXMuaGVhZGVyc01hcFtrZXkudG9Mb3dlckNhc2UoKV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwYXJhbXMpIHRoaXMucGFyYW1zT2JqZWN0ID0gey4uLnBhcmFtc31cbiAgICBpZiAodGhpcy5ib2R5ICYmIHR5cGVvZiB0aGlzLmJvZHkgPT09IFwib2JqZWN0XCIpIHRoaXMucGFyYW1zT2JqZWN0ID0gey4uLnRoaXMucGFyYW1zT2JqZWN0LCAuLi50aGlzLmJvZHl9XG4gICAgaWYgKHRoaXMuYm9keSAmJiB0eXBlb2YgdGhpcy5ib2R5ID09PSBcIm9iamVjdFwiICYmICF0aGlzLmhlYWRlcnNNYXBbXCJjb250ZW50LXR5cGVcIl0pIHtcbiAgICAgIHRoaXMuaGVhZGVyc01hcFtcImNvbnRlbnQtdHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKClcblxuICAgIHRoaXMucGFyYW1zT2JqZWN0ID0gey4uLnF1ZXJ5UGFyYW1zLCAuLi50aGlzLnBhcmFtc09iamVjdH1cbiAgfVxuXG4gIGJhc2VVUkwoKSB7XG4gICAgY29uc3QgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sKClcbiAgICBjb25zdCBob3N0ID0gdGhpcy5ob3N0V2l0aFBvcnQoKVxuXG4gICAgaWYgKHByb3RvY29sICYmIGhvc3QpIHJldHVybiBgJHtwcm90b2NvbH06Ly8ke2hvc3R9YFxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgaGVhZGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIEhlYWRlciBuYW1lLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgbnVsbH0gLSBIZWFkZXIgdmFsdWUuXG4gICAqL1xuICBoZWFkZXIobmFtZSkgeyByZXR1cm4gdGhpcy5oZWFkZXJzTWFwW25hbWUudG9Mb3dlckNhc2UoKV0gfHwgbnVsbCB9XG5cbiAgaGVhZGVycygpIHsgcmV0dXJuIHRoaXMuaGVhZGVyc01hcCB9XG5cbiAgaHR0cE1ldGhvZCgpIHsgcmV0dXJuIHRoaXMubWV0aG9kIH1cblxuICBodHRwVmVyc2lvbigpIHsgcmV0dXJuIFwid2Vic29ja2V0XCIgfVxuXG4gIGhvc3QoKSB7IHJldHVybiB0aGlzLmhlYWRlcihcImhvc3RcIikgfHwgdW5kZWZpbmVkIH1cblxuICAvKipcbiAgICogUnVucyBtZXRhZGF0YS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtrZXldIC0gTWV0YWRhdGEga2V5LlxuICAgKiBAcmV0dXJucyB7UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59IC0gTWV0YWRhdGEgdmFsdWUgZm9yIGEga2V5LCBvciB0aGUgZnVsbCBtZXRhZGF0YSBvYmplY3QuXG4gICAqL1xuICBtZXRhZGF0YShrZXkpIHtcbiAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLm1ldGFkYXRhT2JqZWN0W2tleV1cblxuICAgIHJldHVybiB7Li4udGhpcy5tZXRhZGF0YU9iamVjdH1cbiAgfVxuXG4gIGhvc3RXaXRoUG9ydCgpIHtcbiAgICBjb25zdCBob3N0ID0gdGhpcy5ob3N0KClcbiAgICBjb25zdCBwb3J0ID0gdGhpcy5wb3J0KClcblxuICAgIGlmICghaG9zdCkgcmV0dXJuXG4gICAgaWYgKCFwb3J0KSByZXR1cm4gaG9zdFxuXG4gICAgcmV0dXJuIGAke2hvc3R9OiR7cG9ydH1gXG4gIH1cblxuICBvcmlnaW4oKSB7IHJldHVybiB0aGlzLmhlYWRlcihcIm9yaWdpblwiKSB9XG5cbiAgcGF0aCgpIHsgcmV0dXJuIHRoaXMuX3BhdGggfVxuXG4gIHBhcmFtcygpIHsgcmV0dXJuIHRoaXMucGFyYW1zT2JqZWN0IH1cblxuICBwb3J0KCkge1xuICAgIGNvbnN0IGhvc3RIZWFkZXIgPSB0aGlzLmhlYWRlcihcImhvc3RcIilcbiAgICBjb25zdCBtYXRjaCA9IGhvc3RIZWFkZXI/Lm1hdGNoKC86KFxcZCspJC8pXG5cbiAgICBpZiAobWF0Y2gpIHJldHVybiBwYXJzZUludChtYXRjaFsxXSlcbiAgfVxuXG4gIHByb3RvY29sKCkge1xuICAgIGNvbnN0IG9yaWdpbiA9IHRoaXMub3JpZ2luKClcbiAgICBjb25zdCBtYXRjaCA9IG9yaWdpbj8ubWF0Y2goL14oLispOlxcL1xcLy8pXG5cbiAgICByZXR1cm4gbWF0Y2g/LlsxXVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgcXVlcnkgcGFyYW1zLlxuICAgKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+fSAtIFBhcnNlZCBxdWVyeSBwYXJhbWV0ZXJzIGZyb20gdGhlIFVSTC5cbiAgICovXG4gIHF1ZXJ5UGFyYW1zKCkgeyByZXR1cm4gdGhpcy5fcGFyc2VRdWVyeVBhcmFtcygpIH1cblxuICByZW1vdGVBZGRyZXNzKCkgeyByZXR1cm4gdGhpcy5yZW1vdGVBZGRyZXNzVmFsdWUgfVxuXG4gIF9wYXJzZVF1ZXJ5UGFyYW1zKCkge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5fcGF0aC5zcGxpdChcIj9cIilbMV1cblxuICAgIGlmICghcXVlcnkpIHJldHVybiBPYmplY3QuY3JlYXRlKG51bGwpXG5cbiAgICBjb25zdCBwYXJzZWRRdWVyeSA9IHF1ZXJ5c3RyaW5nLnBhcnNlKHF1ZXJ5KVxuICAgIC8qKlxuICAgICAqIFBhcmFtcy5cbiAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+fSAqL1xuICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5jcmVhdGUobnVsbClcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHBhcnNlZFF1ZXJ5KSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZWRRdWVyeVtrZXldXG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcGFyYW1zW2tleV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXNcbiAgfVxufVxuIl19
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LXJlcXVlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLFdBQVcsTUFBTSxhQUFhLENBQUE7QUFFckMsTUFBTSxDQUFDLE9BQU8sT0FBTyx5Q0FBeUM7SUFDNUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILFlBQVksRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUM7UUFDeEUsSUFBSSxDQUFDLE1BQU07WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUE7UUFDbEQsSUFBSSxDQUFDLElBQUk7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUE7UUFFOUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7UUFDaEI7OzRDQUVvQztRQUNwQyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQTtRQUNwQjs7bUVBRTJEO1FBQzNELElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsUUFBUSxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUNuRCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUNsQzs7bUVBRTJEO1FBQzNELElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFBO1FBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO1FBQ2pCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxhQUFhLENBQUE7UUFFdkMsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENB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QUFDLGtCQUFrQixDQUFBLENBQUMsQ0FBQztJQUVsRCxpQkFBaUI7UUFDZixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUV0QyxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUV0QyxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzVDOzt1REFFK0M7UUFDL0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUVsQyxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUE7WUFFOUIsSUFBSSxPQUFPLEtBQUssS0FBSyxXQUFXLEVBQUUsQ0FBQztnQkFDakMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQTtZQUNyQixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBxdWVyeXN0cmluZyBmcm9tIFwicXVlcnlzdHJpbmdcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNIdHRwU2VydmVyQ2xpZW50V2Vic29ja2V0UmVxdWVzdCB7XG4gIC8qKlxuICAgKiBSdW5zIGNvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSBbYXJncy5ib2R5XSAtIFJlcXVlc3QgYm9keS5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBbYXJncy5oZWFkZXJzXSAtIEhlYWRlciBsaXN0LlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gW2FyZ3MubWV0YWRhdGFdIC0gU2Vzc2lvbiBtZXRhZGF0YS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWV0aG9kIC0gSFRUUCBtZXRob2QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnBhdGggLSBQYXRoLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gW2FyZ3MucGFyYW1zXSAtIFBhcmFtZXRlcnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MucmVtb3RlQWRkcmVzc10gLSBSZW1vdGUgYWRkcmVzcy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtib2R5LCBoZWFkZXJzLCBtZXRhZGF0YSwgbWV0aG9kLCBwYXJhbXMsIHBhdGgsIHJlbW90ZUFkZHJlc3N9KSB7XG4gICAgaWYgKCFtZXRob2QpIHRocm93IG5ldyBFcnJvcihcIm1ldGhvZCBpcyByZXF1aXJlZFwiKVxuICAgIGlmICghcGF0aCkgdGhyb3cgbmV3IEVycm9yKFwicGF0aCBpcyByZXF1aXJlZFwiKVxuXG4gICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIC8qKlxuICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgICB0aGlzLmhlYWRlcnNNYXAgPSB7fVxuICAgIC8qKlxuICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSAqL1xuICAgIHRoaXMubWV0YWRhdGFPYmplY3QgPSBtZXRhZGF0YSA/IHsuLi5tZXRhZGF0YX0gOiB7fVxuICAgIHRoaXMubWV0aG9kID0gbWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICAvKipcbiAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gKi9cbiAgICB0aGlzLnBhcmFtc09iamVjdCA9IHt9XG4gICAgdGhpcy5fcGF0aCA9IHBhdGhcbiAgICB0aGlzLnJlbW90ZUFkZHJlc3NWYWx1ZSA9IHJlbW90ZUFkZHJlc3NcblxuICAgIGlmIChoZWFkZXJzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhoZWFkZXJzKSkge1xuICAgICAgICB0aGlzLmhlYWRlcnNNYXBba2V5LnRvTG93ZXJDYXNlKCldID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGFyYW1zKSB0aGlzLnBhcmFtc09iamVjdCA9IHsuLi5wYXJhbXN9XG4gICAgaWYgKHRoaXMuYm9keSAmJiB0eXBlb2YgdGhpcy5ib2R5ID09PSBcIm9iamVjdFwiKSB0aGlzLnBhcmFtc09iamVjdCA9IHsuLi50aGlzLnBhcmFtc09iamVjdCwgLi4udGhpcy5ib2R5fVxuICAgIGlmICh0aGlzLmJvZHkgJiYgdHlwZW9mIHRoaXMuYm9keSA9PT0gXCJvYmplY3RcIiAmJiAhdGhpcy5oZWFkZXJzTWFwW1wiY29udGVudC10eXBlXCJdKSB7XG4gICAgICB0aGlzLmhlYWRlcnNNYXBbXCJjb250ZW50LXR5cGVcIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5fcGFyc2VRdWVyeVBhcmFtcygpXG5cbiAgICB0aGlzLnBhcmFtc09iamVjdCA9IHsuLi5xdWVyeVBhcmFtcywgLi4udGhpcy5wYXJhbXNPYmplY3R9XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBvd25pbmcgY2xpZW50IGNvbm5lY3Rpb24gd2FzIHRvcm4gZG93biB3aGlsZSB0aGlzIHJlcXVlc3RcbiAgICAgKiB3YXMgc3RpbGwgcnVubmluZy4gV2Vic29ja2V0IHJlcXVlc3RzIGFyZSBzZXNzaW9uLW93bmVkIGFuZCBuZXZlclxuICAgICAqIGVudGVyIHRoZSBjbGllbnQncyBpbi1mbGlnaHQgcmVxdWVzdCBsaXN0LCBzbyB0aGlzIHN0YXlzIGZhbHNlIGZvclxuICAgICAqIHRoZW07IHRoZSBmaWVsZCBleGlzdHMgc28gdGhlIHJlcXVlc3QgdW5pb24gc2hhcmVzIG9uZSBzdXJmYWNlLlxuICAgICAqIEB0eXBlIHtib29sZWFufSAqL1xuICAgIHRoaXMuY2xpZW50RGlzY29ubmVjdGVkID0gZmFsc2VcblxuICAgIC8qKiBAdHlwZSB7U2V0PCgpID0+IHZvaWQ+fSAqL1xuICAgIHRoaXMuY2xpZW50RGlzY29ubmVjdENhbGxiYWNrcyA9IG5ldyBTZXQoKVxuICB9XG5cbiAgLyoqXG4gICAqIE1hcmtzIHRoaXMgcmVxdWVzdCBhcyBjbGllbnQtZGlzY29ubmVjdGVkIGFuZCBydW5zIGV2ZXJ5IHJlZ2lzdGVyZWRcbiAgICogZGlzY29ubmVjdCBjYWxsYmFjayBleGFjdGx5IG9uY2UuIFRoZSBvd25pbmcgY2xpZW50IGludm9rZXMgaXQgd2hlbiB0aGVcbiAgICogc29ja2V0IHRlYXJzIGRvd247IGhhbmRsZXJzIHRoYXQgcmVnaXN0ZXIgYWZ0ZXJ3YXJkcyBsZWFybiBvZiB0aGVcbiAgICogZGlzY29ubmVjdCB0aHJvdWdoIHRoZSBgY2xpZW50RGlzY29ubmVjdGVkYCBmaWVsZCBpbnN0ZWFkLiBXZWJzb2NrZXRcbiAgICogcmVxdWVzdHMgYXJlIHNlc3Npb24tb3duZWQgYW5kIG5ldmVyIGVudGVyIHRoZSBjbGllbnQncyBpbi1mbGlnaHRcbiAgICogcmVxdWVzdCBsaXN0LCBzbyB0aGlzIGlzIGluZXJ0IGZvciB0aGVtOyB0aGUgc2hhcmVkIHN1cmZhY2Uga2VlcHMgdGhlXG4gICAqIHJlcXVlc3QgdW5pb24gdW5pZm9ybS5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBtYXJrQ2xpZW50RGlzY29ubmVjdGVkKCkge1xuICAgIGlmICh0aGlzLmNsaWVudERpc2Nvbm5lY3RlZCkgcmV0dXJuXG4gICAgdGhpcy5jbGllbnREaXNjb25uZWN0ZWQgPSB0cnVlXG4gICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiB0aGlzLmNsaWVudERpc2Nvbm5lY3RDYWxsYmFja3MpIHtcbiAgICAgIGNhbGxiYWNrKClcbiAgICB9XG4gICAgdGhpcy5jbGllbnREaXNjb25uZWN0Q2FsbGJhY2tzLmNsZWFyKClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBjYWxsYmFjayB0aGF0IGZpcmVzIG9uY2Ugd2hlbiB0aGUgY2xpZW50IGNvbm5lY3Rpb24gdGVhcnNcbiAgICogZG93biB3aGlsZSB0aGlzIHJlcXVlc3QgaXMgc3RpbGwgcnVubmluZy4gU2VlIHRoZSBIVFRQIHJlcXVlc3Qnc1xuICAgKiB7QGxpbmtjb2RlIG1hcmtDbGllbnREaXNjb25uZWN0ZWR9IGZvciB0aGUgc2hhcmVkLXN1cmZhY2Ugbm90ZS5cbiAgICogQHBhcmFtIHsoKSA9PiB2b2lkfSBjYWxsYmFjayAtIERpc2Nvbm5lY3QgY2FsbGJhY2suXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25DbGllbnREaXNjb25uZWN0KGNhbGxiYWNrKSB7XG4gICAgaWYgKHRoaXMuY2xpZW50RGlzY29ubmVjdGVkKSB7XG4gICAgICBjYWxsYmFjaygpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5jbGllbnREaXNjb25uZWN0Q2FsbGJhY2tzLmFkZChjYWxsYmFjaylcbiAgfVxuXG4gIGJhc2VVUkwoKSB7XG4gICAgY29uc3QgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sKClcbiAgICBjb25zdCBob3N0ID0gdGhpcy5ob3N0V2l0aFBvcnQoKVxuXG4gICAgaWYgKHByb3RvY29sICYmIGhvc3QpIHJldHVybiBgJHtwcm90b2NvbH06Ly8ke2hvc3R9YFxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgaGVhZGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIEhlYWRlciBuYW1lLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgbnVsbH0gLSBIZWFkZXIgdmFsdWUuXG4gICAqL1xuICBoZWFkZXIobmFtZSkgeyByZXR1cm4gdGhpcy5oZWFkZXJzTWFwW25hbWUudG9Mb3dlckNhc2UoKV0gfHwgbnVsbCB9XG5cbiAgaGVhZGVycygpIHsgcmV0dXJuIHRoaXMuaGVhZGVyc01hcCB9XG5cbiAgaHR0cE1ldGhvZCgpIHsgcmV0dXJuIHRoaXMubWV0aG9kIH1cblxuICBodHRwVmVyc2lvbigpIHsgcmV0dXJuIFwid2Vic29ja2V0XCIgfVxuXG4gIGhvc3QoKSB7IHJldHVybiB0aGlzLmhlYWRlcihcImhvc3RcIikgfHwgdW5kZWZpbmVkIH1cblxuICAvKipcbiAgICogUnVucyBtZXRhZGF0YS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtrZXldIC0gTWV0YWRhdGEga2V5LlxuICAgKiBAcmV0dXJucyB7UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59IC0gTWV0YWRhdGEgdmFsdWUgZm9yIGEga2V5LCBvciB0aGUgZnVsbCBtZXRhZGF0YSBvYmplY3QuXG4gICAqL1xuICBtZXRhZGF0YShrZXkpIHtcbiAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLm1ldGFkYXRhT2JqZWN0W2tleV1cblxuICAgIHJldHVybiB7Li4udGhpcy5tZXRhZGF0YU9iamVjdH1cbiAgfVxuXG4gIGhvc3RXaXRoUG9ydCgpIHtcbiAgICBjb25zdCBob3N0ID0gdGhpcy5ob3N0KClcbiAgICBjb25zdCBwb3J0ID0gdGhpcy5wb3J0KClcblxuICAgIGlmICghaG9zdCkgcmV0dXJuXG4gICAgaWYgKCFwb3J0KSByZXR1cm4gaG9zdFxuXG4gICAgcmV0dXJuIGAke2hvc3R9OiR7cG9ydH1gXG4gIH1cblxuICBvcmlnaW4oKSB7IHJldHVybiB0aGlzLmhlYWRlcihcIm9yaWdpblwiKSB9XG5cbiAgcGF0aCgpIHsgcmV0dXJuIHRoaXMuX3BhdGggfVxuXG4gIHBhcmFtcygpIHsgcmV0dXJuIHRoaXMucGFyYW1zT2JqZWN0IH1cblxuICBwb3J0KCkge1xuICAgIGNvbnN0IGhvc3RIZWFkZXIgPSB0aGlzLmhlYWRlcihcImhvc3RcIilcbiAgICBjb25zdCBtYXRjaCA9IGhvc3RIZWFkZXI/Lm1hdGNoKC86KFxcZCspJC8pXG5cbiAgICBpZiAobWF0Y2gpIHJldHVybiBwYXJzZUludChtYXRjaFsxXSlcbiAgfVxuXG4gIHByb3RvY29sKCkge1xuICAgIGNvbnN0IG9yaWdpbiA9IHRoaXMub3JpZ2luKClcbiAgICBjb25zdCBtYXRjaCA9IG9yaWdpbj8ubWF0Y2goL14oLispOlxcL1xcLy8pXG5cbiAgICByZXR1cm4gbWF0Y2g/LlsxXVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgcXVlcnkgcGFyYW1zLlxuICAgKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+fSAtIFBhcnNlZCBxdWVyeSBwYXJhbWV0ZXJzIGZyb20gdGhlIFVSTC5cbiAgICovXG4gIHF1ZXJ5UGFyYW1zKCkgeyByZXR1cm4gdGhpcy5fcGFyc2VRdWVyeVBhcmFtcygpIH1cblxuICByZW1vdGVBZGRyZXNzKCkgeyByZXR1cm4gdGhpcy5yZW1vdGVBZGRyZXNzVmFsdWUgfVxuXG4gIF9wYXJzZVF1ZXJ5UGFyYW1zKCkge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5fcGF0aC5zcGxpdChcIj9cIilbMV1cblxuICAgIGlmICghcXVlcnkpIHJldHVybiBPYmplY3QuY3JlYXRlKG51bGwpXG5cbiAgICBjb25zdCBwYXJzZWRRdWVyeSA9IHF1ZXJ5c3RyaW5nLnBhcnNlKHF1ZXJ5KVxuICAgIC8qKlxuICAgICAqIFBhcmFtcy5cbiAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+fSAqL1xuICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5jcmVhdGUobnVsbClcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHBhcnNlZFF1ZXJ5KSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZWRRdWVyeVtrZXldXG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcGFyYW1zW2tleV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXNcbiAgfVxufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"in-process.d.ts","sourceRoot":"","sources":["../../../../src/http-server/worker-handler/in-process.js"],"names":[],"mappings":"AAEA,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,mBAAmB,MAAM,6BAA6B,CAAA;AAE7D,OAAO,MAAM,MAAM,iBAAiB,CAAA;AAGpC;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,mCAAmC;IAQ/C,aAAa;IAElB;;+IAE2I;IACtI,OAAO,EADF,MAAM,CAAC,MAAM,EAAE;QAAC,aAAa,EAAE,mBAAmB,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,OAAO,qBAAqB,EAAE,OAAO,CAAA;KAAC,CAAC;IAGvI,iCAAiC;IAC5B,0BAA0B,EADpB,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAGxB,MAAM;IACN,WAAW;IACX,wBAAwB;IACxB,SAAS;IApBhB;;;;;OAKG;IACH,YAAY,EAAC,aAAa,EAAE,WAAW,EAAC,EAHrC;QAAuD,aAAa,EAA5D,OAAO,wBAAwB,EAAE,OAAO,CAChD;QAAqB,WAAW,EAAxB,MAAM,CAChB;KACuC,EAevC;IAED;;kCAE8B;IACxB,KAAK,IADE,OAAO,CAAC,IAAI,CAAC,CAGzB;IAED;;;;OAIG;IACH,mBAAmB,CAAC,YAAY,EAHrB,OAAO,qBAAqB,EAAE,OAGT,GAFnB,IAAI,CAkGhB;IAED;;;;;;OAMG;IACH,4BAA4B,CAAC,EAAC,WAAW,EAAE,KAAK,EAAC,EAJ9C;QAAqB,WAAW,EAAxB,MAAM,CACd;QAAoB,KAAK,EAAjB,KAAK,CACb;KAE8C,GAFpC,IAAI,CAWhB;IAED;;kCAE8B;IACxB,IAAI,IADG,OAAO,CAAC,IAAI,CAAC,CAsBzB;IAED;;;;;;;;;;OAUG;IACH,4BAA4B,CAAC,EAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAC,EANnE;QAAqB,OAAO,EAApB,MAAM,CACd;QAA4D,eAAe,EAAnE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CACrD;QAA4C,IAAI,EAAxC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CACrC;QAAsB,OAAO,AAA7B,CACA,EADQ,MAAM,CACd;KAEmE,GAFzD,IAAI,CAMhB;IAED;;;OAGG;IACH,+BAA+B,IAFlB,OAAO,wBAAwB,EAAE,OAAO,CAIpD;IAED;;;;;;;;OAQG;IACH,sBAAsB,CAAC,EAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAC,EAN1D;QAAqB,OAAO,EAApB,MAAM,CACd;QAAsB,SAAS,AAA/B,CACA,EADQ,MAAM,CACd;QAAsB,OAAO,AAA7B,CACA,EADQ,MAAM,CACd;QAA4C,OAAO,EAA3C,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CACrC;KAE0D,GAFhD,IAAI,CAiBhB;CACF"}
1
+ {"version":3,"file":"in-process.d.ts","sourceRoot":"","sources":["../../../../src/http-server/worker-handler/in-process.js"],"names":[],"mappings":"AAEA,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,mBAAmB,MAAM,6BAA6B,CAAA;AAE7D,OAAO,MAAM,MAAM,iBAAiB,CAAA;AAGpC;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,mCAAmC;IAQ/C,aAAa;IAElB;;+IAE2I;IACtI,OAAO,EADF,MAAM,CAAC,MAAM,EAAE;QAAC,aAAa,EAAE,mBAAmB,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,OAAO,qBAAqB,EAAE,OAAO,CAAA;KAAC,CAAC;IAGvI,iCAAiC;IAC5B,0BAA0B,EADpB,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAGxB,MAAM;IACN,WAAW;IACX,wBAAwB;IACxB,SAAS;IApBhB;;;;;OAKG;IACH,YAAY,EAAC,aAAa,EAAE,WAAW,EAAC,EAHrC;QAAuD,aAAa,EAA5D,OAAO,wBAAwB,EAAE,OAAO,CAChD;QAAqB,WAAW,EAAxB,MAAM,CAChB;KACuC,EAevC;IAED;;kCAE8B;IACxB,KAAK,IADE,OAAO,CAAC,IAAI,CAAC,CAGzB;IAED;;;;OAIG;IACH,mBAAmB,CAAC,YAAY,EAHrB,OAAO,qBAAqB,EAAE,OAGT,GAFnB,IAAI,CAwGhB;IAED;;;;;;OAMG;IACH,4BAA4B,CAAC,EAAC,WAAW,EAAE,KAAK,EAAC,EAJ9C;QAAqB,WAAW,EAAxB,MAAM,CACd;QAAoB,KAAK,EAAjB,KAAK,CACb;KAE8C,GAFpC,IAAI,CAWhB;IAED;;kCAE8B;IACxB,IAAI,IADG,OAAO,CAAC,IAAI,CAAC,CAsBzB;IAED;;;;;;;;;;OAUG;IACH,4BAA4B,CAAC,EAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAC,EANnE;QAAqB,OAAO,EAApB,MAAM,CACd;QAA4D,eAAe,EAAnE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CACrD;QAA4C,IAAI,EAAxC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CACrC;QAAsB,OAAO,AAA7B,CACA,EADQ,MAAM,CACd;KAEmE,GAFzD,IAAI,CAMhB;IAED;;;OAGG;IACH,+BAA+B,IAFlB,OAAO,wBAAwB,EAAE,OAAO,CAIpD;IAED;;;;;;;;OAQG;IACH,sBAAsB,CAAC,EAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAC,EAN1D;QAAqB,OAAO,EAApB,MAAM,CACd;QAAsB,SAAS,AAA/B,CACA,EADQ,MAAM,CACd;QAAsB,OAAO,AAA7B,CACA,EADQ,MAAM,CACd;QAA4C,OAAO,EAA3C,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CACrC;KAE0D,GAFhD,IAAI,CAiBhB;CACF"}
@@ -101,7 +101,13 @@ export default class VelociousHttpServerInProcessHandler {
101
101
  httpClient.abortPendingFileResponses(),
102
102
  httpClient.abortStreamResponses()
103
103
  ])
104
- .then(() => { })
104
+ .then(() => {
105
+ // Buffered responses have no stream to abort, so their in-flight
106
+ // handlers never hear about the socket teardown through the
107
+ // streaming path: notify the running requests directly so they can
108
+ // settle resources (e.g. admission queue positions) in-process.
109
+ httpClient.notifyClientDisconnect();
110
+ })
105
111
  .catch((error) => {
106
112
  this.logger.warn("Failed to abort responses after client close", error);
107
113
  })
@@ -210,4 +216,4 @@ export default class VelociousHttpServerInProcessHandler {
210
216
  }
211
217
  }
212
218
  }
213
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW4tcHJvY2Vzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9odHRwLXNlcnZlci93b3JrZXItaGFuZGxlci9pbi1wcm9jZXNzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLE1BQU0sTUFBTSxvQkFBb0IsQ0FBQTtBQUN2QyxPQUFPLG1CQUFtQixNQUFNLDZCQUE2QixDQUFBO0FBQzdELE9BQU8sMEJBQTBCLE1BQU0sa0NBQWtDLENBQUE7QUFDekUsT0FBTyxNQUFNLE1BQU0saUJBQWlCLENBQUE7QUFDcEMsT0FBTyxtQkFBbUIsTUFBTSw2QkFBNkIsQ0FBQTtBQUU3RDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sbUNBQW1DO0lBQ3REOzs7OztPQUtHO0lBQ0gsWUFBWSxFQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUM7UUFDdEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7UUFFbEM7O21KQUUySTtRQUMzSSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQTtRQUVqQixpQ0FBaUM7UUFDakMsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7UUFFM0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQTtRQUM5QixJQUFJLENBQUMsd0JBQXdCLEdBQUcsbUJBQW1CLENBQUMsUUFBUSxDQUFDLDRDQUE0QyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUNqSCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQTtJQUN4QixDQUFDO0lBRUQ7O2tDQUU4QjtJQUM5QixLQUFLLENBQUMsS0FBSztRQUNULE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsc0JBQXNCLElBQUksQ0FB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RSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUE7UUFDakksQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQ2xpZW50IGZyb20gXCIuLi9jbGllbnQvaW5kZXguanNcIlxuaW1wb3J0IENsaWVudERlbGl2ZXJ5UXVldWUgZnJvbSBcIi4uL2NsaWVudC1kZWxpdmVyeS1xdWV1ZS5qc1wiXG5pbXBvcnQgZGlzcGF0Y2hDaGFubmVsU3Vic2NyaWJlcnMgZnJvbSBcIi4vY2hhbm5lbC1zdWJzY3JpYmVyLWRpc3BhdGNoLmpzXCJcbmltcG9ydCBMb2dnZXIgZnJvbSBcIi4uLy4uL2xvZ2dlci5qc1wiXG5pbXBvcnQgd2Vic29ja2V0RXZlbnRzSG9zdCBmcm9tIFwiLi4vd2Vic29ja2V0LWV2ZW50cy1ob3N0LmpzXCJcblxuLyoqXG4gKiBJbi1wcm9jZXNzIHdvcmtlciBoYW5kbGVyIHRoYXQgcHJvY2Vzc2VzIEhUVFAgcmVxdWVzdHMgaW4gdGhlIG1haW4gdGhyZWFkXG4gKiBpbnN0ZWFkIG9mIHNwYXduaW5nIGEgV29ya2VyIHRocmVhZC4gVGhpcyBhbGxvd3MgdGhlIHRlc3QgcnVubmVyJ3MgZGF0YWJhc2VcbiAqIGNvbm5lY3Rpb24gY29udGV4dCB0byBiZSBzaGFyZWQgd2l0aCBIVFRQIHJlcXVlc3QgaGFuZGxlcnMsIHNvIG1vZGVsLWNyZWF0ZWRcbiAqIHJlY29yZHMgaW4gdGVzdHMgYXJlIHZpc2libGUgdG8gSFRUUCBlbmRwb2ludHMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0h0dHBTZXJ2ZXJJblByb2Nlc3NIYW5kbGVyIHtcbiAgLyoqXG4gICAqIFJ1bnMgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBhcmdzLmNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gYXJncy53b3JrZXJDb3VudCAtIFdvcmtlciBjb3VudC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjb25maWd1cmF0aW9uLCB3b3JrZXJDb3VudH0pIHtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uXG5cbiAgICAvKipcbiAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICogQHR5cGUge1JlY29yZDxudW1iZXIsIHtkZWxpdmVyeVF1ZXVlOiBDbGllbnREZWxpdmVyeVF1ZXVlLCBodHRwQ2xpZW50OiBDbGllbnQsIHNlcnZlckNsaWVudDogaW1wb3J0KFwiLi4vc2VydmVyLWNsaWVudC5qc1wiKS5kZWZhdWx0fT59ICovXG4gICAgdGhpcy5jbGllbnRzID0ge31cblxuICAgIC8qKiBAdHlwZSB7U2V0PFByb21pc2U8dm9pZD4+fSAqL1xuICAgIHRoaXMucGVuZGluZ0NsaWVudENsb3NlQ2xlYW51cHMgPSBuZXcgU2V0KClcblxuICAgIHRoaXMubG9nZ2VyID0gbmV3IExvZ2dlcih0aGlzKVxuICAgIHRoaXMud29ya2VyQ291bnQgPSB3b3JrZXJDb3VudFxuICAgIHRoaXMudW5yZWdpc3RlckZyb21FdmVudHNIb3N0ID0gd2Vic29ja2V0RXZlbnRzSG9zdC5yZWdpc3RlcigvKiogQHR5cGUge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSAqLyAodGhpcykpXG4gICAgdGhpcy5fc3RvcHBpbmcgPSBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc3RhcnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAqL1xuICBhc3luYyBzdGFydCgpIHtcbiAgICBhd2FpdCB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBgSW4tcHJvY2VzcyBoYW5kbGVyICR7dGhpcy53b3JrZXJDb3VudH0gc3RhcnRlZGApXG4gIH1cblxuICAvKipcbiAgICogUnVucyBhZGQgc29ja2V0IGNvbm5lY3Rpb24uXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VydmVyLWNsaWVudC5qc1wiKS5kZWZhdWx0fSBzZXJ2ZXJDbGllbnQgLSBTZXJ2ZXIgY2xpZW50IGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGFkZFNvY2tldENvbm5lY3Rpb24oc2VydmVyQ2xpZW50KSB7XG4gICAgY29uc3QgY2xpZW50Q291bnQgPSBzZXJ2ZXJDbGllbnQuY2xpZW50Q291bnRcblxuICAgIGNvbnN0IGh0dHBDbGllbnQgPSBuZXcgQ2xpZW50KHtcbiAgICAgIGNsaWVudENvdW50LFxuICAgICAgY29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9uLFxuICAgICAgcmVtb3RlQWRkcmVzczogc2VydmVyQ2xpZW50LnJlbW90ZUFkZHJlc3NcbiAgICB9KVxuXG4gICAgY29uc3Qge21heEJ5dGVzLCBtYXhGcmFtZXN9ID0gdGhpcy5jb25maWd1cmF0aW9uLmdldFdlYnNvY2tldE91dGJvdW5kUXVldWVMaW1pdHMoKVxuICAgIGNvbnN0IGRlbGl2ZXJ5UXVldWUgPSBuZXcgQ2xpZW50RGVsaXZlcnlRdWV1ZSh7XG4gICAgICBjbGllbnRDb3VudCxcbiAgICAgIG1heEJ5dGVzLFxuICAgICAgbWF4RnJhbWVzLFxuICAgICAgb25PdmVyZmxvdzogKGVycm9yKSA9PiB7XG4gICAgICAgIGRlbGl2ZXJ5UXVldWUuZGVzdHJveSgpXG4gICAgICAgIHNlcnZlckNsaWVudC5kZXN0cm95KGVycm9yKVxuICAgICAgICB0aGlzLl9yZXBvcnRPdXRib3VuZFF1ZXVlT3ZlcmZsb3coe2NsaWVudENvdW50LCBlcnJvcn0pXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIFN0cmVhbWluZyByZXNwb25zZXMgZW1pdCBjaHVua3Mgd2hpbGUgdGhlIHJlcXVlc3QgaXMgcnVubmluZy4gUm91dGVcbiAgICAvLyB0aGVpciBmcmFtZWQgb3V0cHV0IHRocm91Z2ggdGhlIGNvdW50ZWQgZGVsaXZlcnkgcGF0aCBzbyBhIHN0YWxsZWRcbiAgICAvLyBjbGllbnQgY2Fubm90IGJ1ZmZlciBlbmdpbmUgY2h1bmtzIHVuYm91bmRlZGx5OiBlYWNoIGNodW5rIHNldHRsZXMgb25seVxuICAgIC8vIGFmdGVyIGl0IGhhcyBiZWVuIGRlbGl2ZXJlZCB0byB0aGUgc29ja2V0LCB3aGljaCBnaXZlcyB0aGUgaGFuZGxlclxuICAgIC8vIGJhY2twcmVzc3VyZSwgYW5kIHRoZSBieXRlL2ZyYW1lIGxpbWl0cyBib3VuZCB3aGF0IGEgc2lsZW50IGNsaWVudCBjYW5cbiAgICAvLyByZXRhaW4gYmVmb3JlIHRoZSBjb25uZWN0aW9uIGlzIHRvcm4gZG93bi5cbiAgICBodHRwQ2xpZW50LnN0cmVhbU91dHB1dFNpbmsgPSAob3V0cHV0KSA9PiBkZWxpdmVyeVF1ZXVlLmVucXVldWVGcmFtZSh7XG4gICAgICBieXRlTGVuZ3RoOiBCdWZmZXIuYnl0ZUxlbmd0aChvdXRwdXQpLFxuICAgICAgZGVsaXZlcnk6ICgpID0+IHNlcnZlckNsaWVudC5zZW5kKG91dHB1dClcbiAgICB9KVxuXG4gICAgaHR0cENsaWVudC5ldmVudHMub24oXCJvdXRwdXRcIiwgKG91dHB1dCwge3dlYnNvY2tldEZyYW1lID0gZmFsc2V9ID0ge30pID0+IHtcbiAgICAgIGlmIChvdXRwdXQgIT09IG51bGwgJiYgb3V0cHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgZGVsaXZlcnkgPSAoKSA9PiBzZXJ2ZXJDbGllbnQuc2VuZChvdXRwdXQpXG4gICAgICAgIGNvbnN0IHF1ZXVlZCA9IHdlYnNvY2tldEZyYW1lXG4gICAgICAgICAgPyBkZWxpdmVyeVF1ZXVlLmVucXVldWVGcmFtZSh7XG4gICAgICAgICAgICBieXRlTGVuZ3RoOiB0eXBlb2Ygb3V0cHV0ID09PSBcInN0cmluZ1wiID8gQnVmZmVyLmJ5dGVMZW5ndGgob3V0cHV0KSA6IG91dHB1dC5ieXRlTGVuZ3RoLFxuICAgICAgICAgICAgZGVsaXZlcnlcbiAgICAgICAgICB9KVxuICAgICAgICAgIDogZGVsaXZlcnlRdWV1ZS5lbnF1ZXVlQ29udHJvbChkZWxpdmVyeSlcblxuICAgICAgICB2b2lkIHF1ZXVlZC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcigoKSA9PiBbXCJGYWlsZWQgdG8gZGVsaXZlciBjbGllbnQgb3V0cHV0XCIsIHtjbGllbnRDb3VudH0sIGVycm9yXSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgaHR0cENsaWVudC5ldmVudHMub24oXCJmaWxlXCIsICh7ZmlsZVBhdGgsIHNlbmRCb2R5LCBzZXR0bGV9KSA9PiB7XG4gICAgICB2b2lkIGRlbGl2ZXJ5UXVldWUuZW5xdWV1ZUNvbnRyb2woYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBzZXR0bGUoYXdhaXQgc2VydmVyQ2xpZW50LnNlbmRGaWxlKGZpbGVQYXRoLCBzZW5kQm9keSkpXG4gICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoKCkgPT4gW1wiRmFpbGVkIHRvIGRlbGl2ZXIgZmlsZSByZXNwb25zZVwiLCB7Y2xpZW50Q291bnQsIGZpbGVQYXRofSwgZXJyb3JdKVxuICAgICAgICB2b2lkIHNldHRsZShcImFib3J0ZWRcIilcbiAgICAgIH0pXG4gICAgfSlcblxuICAgIGh0dHBDbGllbnQuZXZlbnRzLm9uKFwiY2xvc2VcIiwgKCkgPT4ge1xuICAgICAgdm9pZCBkZWxpdmVyeVF1ZXVlLmVucXVldWVDb250cm9sKCgpID0+IHNlcnZlckNsaWVudC5lbmQoKSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4gZGVsZXRlIHRoaXMuY2xpZW50c1tjbGllbnRDb3VudF0pXG4gICAgfSlcblxuICAgIHNlcnZlckNsaWVudC5ldmVudHMub24oXCJjbG9zZVwiLCAoKSA9PiB7XG4gICAgICBkZWxpdmVyeVF1ZXVlLmRlc3Ryb3koKVxuICAgICAgY29uc3QgY2xlYW51cCA9IFByb21pc2UuYWxsKFtcbiAgICAgICAgaHR0cENsaWVudC5hYm9ydFBlbmRpbmdGaWxlUmVzcG9uc2VzKCksXG4gICAgICAgIGh0dHBDbGllbnQuYWJvcnRTdHJlYW1SZXNwb25zZXMoKVxuICAgICAgXSlcbiAgICAgICAgLnRoZW4oKCkgPT4ge30pXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFwiRmFpbGVkIHRvIGFib3J0IHJlc3BvbnNlcyBhZnRlciBjbGllbnQgY2xvc2VcIiwgZXJyb3IpXG4gICAgICAgIH0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnBlbmRpbmdDbGllbnRDbG9zZUNsZWFudXBzLmRlbGV0ZShjbGVhbnVwKVxuICAgICAgICAgIGRlbGV0ZSB0aGlzLmNsaWVudHNbY2xpZW50Q291bnRdXG4gICAgICAgIH0pXG5cbiAgICAgIHRoaXMucGVuZGluZ0NsaWVudENsb3NlQ2xlYW51cHMuYWRkKGNsZWFudXApXG4gICAgfSlcblxuICAgIHRoaXMuY2xpZW50c1tjbGllbnRDb3VudF0gPSB7ZGVsaXZlcnlRdWV1ZSwgaHR0cENsaWVudCwgc2VydmVyQ2xpZW50fVxuXG4gICAgLy8gQ3JlYXRlIGEgbWVzc2FnZS1wb3J0IHNoaW0gc28gU2VydmVyQ2xpZW50Lm9uU29ja2V0RGF0YSBjYW4gcm91dGUgZGF0YVxuICAgIC8vIHRvIHRoZSBpbi1wcm9jZXNzIEhUVFAgQ2xpZW50IHdpdGhvdXQgbmVlZGluZyBhIHJlYWwgd29ya2VyIHRocmVhZC5cbiAgICBjb25zdCBtZXNzYWdlUG9ydFNoaW0gPSAvKiogQHR5cGUge2ltcG9ydChcIndvcmtlcl90aHJlYWRzXCIpLldvcmtlcn0gKi8gKC8qKiBAdHlwZSB7UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59ICovICh7XG4gICAgICBwb3N0TWVzc2FnZTogKC8qKiBAdHlwZSB7e2NvbW1hbmQ6IHN0cmluZywgY2h1bms/OiBCdWZmZXIgfCBVaW50OEFycmF5IHwgc3RyaW5nLCBjbGllbnRDb3VudD86IG51bWJlcn19ICovIGRhdGEpID0+IHtcbiAgICAgICAgaWYgKGRhdGEuY29tbWFuZCA9PT0gXCJjbGllbnRXcml0ZVwiICYmIGRhdGEuY2h1bmspIHtcbiAgICAgICAgICBjb25zdCBjaHVuayA9IHR5cGVvZiBkYXRhLmNodW5rID09PSBcInN0cmluZ1wiID8gQnVmZmVyLmZyb20oZGF0YS5jaHVuaykgOiBCdWZmZXIuZnJvbShkYXRhLmNodW5rKVxuXG4gICAgICAgICAgaHR0cENsaWVudC5vbldyaXRlKGNodW5rKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpXG5cbiAgICBzZXJ2ZXJDbGllbnQuc2V0V29ya2VyKG1lc3NhZ2VQb3J0U2hpbSlcbiAgICBzZXJ2ZXJDbGllbnQubGlzdGVuKClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBvcnRzIGEgcGVyLWNsaWVudCBvdXRib3VuZCBxdWV1ZSBvdmVyZmxvdy5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPdmVyZmxvdyBkZXRhaWxzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gYXJncy5jbGllbnRDb3VudCAtIEFmZmVjdGVkIGNsaWVudC5cbiAgICogQHBhcmFtIHtFcnJvcn0gYXJncy5lcnJvciAtIE92ZXJmbG93IGVycm9yLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIF9yZXBvcnRPdXRib3VuZFF1ZXVlT3ZlcmZsb3coe2NsaWVudENvdW50LCBlcnJvcn0pIHtcbiAgICBjb25zdCBlcnJvclBheWxvYWQgPSB7XG4gICAgICBjb250ZXh0OiB7Y2xpZW50Q291bnQsIHdlYnNvY2tldE91dGJvdW5kUXVldWVPdmVyZmxvdzogdHJ1ZSwgd29ya2VyQ291bnQ6IHRoaXMud29ya2VyQ291bnR9LFxuICAgICAgZXJyb3JcbiAgICB9XG4gICAgY29uc3QgZXJyb3JFdmVudHMgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0RXJyb3JFdmVudHMoKVxuXG4gICAgZXJyb3JFdmVudHMuZW1pdChcImZyYW1ld29yay1lcnJvclwiLCBlcnJvclBheWxvYWQpXG4gICAgZXJyb3JFdmVudHMuZW1pdChcImFsbC1lcnJvclwiLCB7Li4uZXJyb3JQYXlsb2FkLCBlcnJvclR5cGU6IFwiZnJhbWV3b3JrLWVycm9yXCJ9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc3RvcC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59ICovXG4gIGFzeW5jIHN0b3AoKSB7XG4gICAgdGhpcy5fc3RvcHBpbmcgPSB0cnVlXG5cbiAgICBmb3IgKGNvbnN0IHtodHRwQ2xpZW50LCBzZXJ2ZXJDbGllbnR9IG9mIE9iamVjdC52YWx1ZXModGhpcy5jbGllbnRzKSkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBodHRwQ2xpZW50LmFib3J0UGVuZGluZ0ZpbGVSZXNwb25zZXMoKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFwiRmFpbGVkIHRvIGFib3J0IGZpbGUgcmVzcG9uc2VzIGR1cmluZyBzaHV0ZG93blwiLCBlcnJvcilcbiAgICAgICAgfSksXG4gICAgICAgIGh0dHBDbGllbnQuYWJvcnRTdHJlYW1SZXNwb25zZXMoKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFwiRmFpbGVkIHRvIGFib3J0IHN0cmVhbWluZyByZXNwb25zZXMgZHVyaW5nIHNodXRkb3duXCIsIGVycm9yKVxuICAgICAgICB9KSxcbiAgICAgICAgc2VydmVyQ2xpZW50LmVuZCgpLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJGYWlsZWQgdG8gY2xvc2UgY2xpZW50IGR1cmluZyBzaHV0ZG93blwiLCBlcnJvcilcbiAgICAgICAgfSlcbiAgICAgIF0pXG4gICAgfVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5wZW5kaW5nQ2xpZW50Q2xvc2VDbGVhbnVwcylcblxuICAgIHRoaXMuY2xpZW50cyA9IHt9XG4gICAgdGhpcy51bnJlZ2lzdGVyRnJvbUV2ZW50c0hvc3Q/LigpXG4gIH1cblxuICAvKipcbiAgICogSW4tcHJvY2VzcyBoYW5kbGVyIHBhdGggZm9yIFYyIGNoYW5uZWwgYnJvYWRjYXN0cy4gTm8gd29ya2VyXG4gICAqIGJvdW5kYXJ5IHRvIGNyb3NzIOKAlCBkaXNwYXRjaCBkaXJlY3RseSB0byBhbnkgbWF0Y2hpbmcgbGl2ZVxuICAgKiBzdWJzY3JpcHRpb25zIG9uIHRoZSBzaGFyZWQgY29uZmlndXJhdGlvbi5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuY2hhbm5lbCAtIENoYW5uZWwgbmFtZS5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59IGFyZ3MuYnJvYWRjYXN0UGFyYW1zIC0gUm91dGluZyBmaWx0ZXIgcGFyYW1zLlxuICAgKiBAcGFyYW0ge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSBhcmdzLmJvZHkgLSBNZXNzYWdlIGJvZHkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5ldmVudElkXSAtIFBlcnNpc3RlZCBldmVudCBpZCBmb3IgcmVwbGF5LlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGRpc3BhdGNoV2Vic29ja2V0VjJCcm9hZGNhc3Qoe2JvZHksIGJyb2FkY2FzdFBhcmFtcywgY2hhbm5lbCwgZXZlbnRJZH0pIHtcbiAgICBpZiAoIXRoaXMuY29uZmlndXJhdGlvbikgcmV0dXJuXG5cbiAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uLl9icm9hZGNhc3RUb0NoYW5uZWxMb2NhbChjaGFubmVsLCBicm9hZGNhc3RQYXJhbXMsIGJvZHksIHtldmVudElkfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjb25maWd1cmF0aW9uLXdpZGUgVjIgYnJvYWRjYXN0IHRhcmdldCBzaGFyZWQgYnkgaW4tcHJvY2VzcyBoYW5kbGVycy5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gLSBTaGFyZWQgY29uZmlndXJhdGlvbiB0YXJnZXQuXG4gICAqL1xuICB3ZWJzb2NrZXRWMkJyb2FkY2FzdERpc3BhdGNoS2V5KCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb25cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGRpc3BhdGNoIHdlYnNvY2tldCBldmVudC5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuY2hhbm5lbCAtIENoYW5uZWwgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmNyZWF0ZWRBdF0gLSBFdmVudCBjcmVhdGlvbiB0aW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuZXZlbnRJZF0gLSBFdmVudCBpZGVudGlmaWVyLlxuICAgKiBAcGFyYW0ge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSBhcmdzLnBheWxvYWQgLSBQYXlsb2FkIGRhdGEuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZGlzcGF0Y2hXZWJzb2NrZXRFdmVudCh7Y2hhbm5lbCwgY3JlYXRlZEF0LCBldmVudElkLCBwYXlsb2FkfSkge1xuICAgIGZvciAoY29uc3Qge2h0dHBDbGllbnR9IG9mIE9iamVjdC52YWx1ZXModGhpcy5jbGllbnRzKSkge1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IGh0dHBDbGllbnQud2Vic29ja2V0U2Vzc2lvblxuXG4gICAgICBpZiAoIXNlc3Npb24pIGNvbnRpbnVlXG5cbiAgICAgIHZvaWQgc2Vzc2lvbi5zZW5kRXZlbnQoY2hhbm5lbCwgcGF5bG9hZCwge2NyZWF0ZWRBdCwgZXZlbnRJZH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbikge1xuICAgICAgLy8gSXNvbGF0ZSBzdWJzY3JpYmVyIGZhaWx1cmVzIGZyb20gYnJlYWtpbmcgdGhlIGluLXByb2Nlc3MgaGFuZGxlcixcbiAgICAgIC8vIGJ1dCBzdGlsbCBzdXJmYWNlIHRoZW0gdG8gdGhlIGZyYW1ld29yayBlcnJvciBldmVudHMgc28gYnVnXG4gICAgICAvLyByZXBvcnRlcnMgY2FuIHBpY2sgdGhlbSB1cC5cbiAgICAgIHZvaWQgZGlzcGF0Y2hDaGFubmVsU3Vic2NyaWJlcnMoe2NoYW5uZWwsIGNvbmZpZ3VyYXRpb246IHRoaXMuY29uZmlndXJhdGlvbiwgY3JlYXRlZEF0LCBldmVudElkLCBsb2dnZXI6IHRoaXMubG9nZ2VyLCBwYXlsb2FkfSlcbiAgICB9XG4gIH1cbn1cbiJdfQ==
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW4tcHJvY2Vzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9odHRwLXNlcnZlci93b3JrZXItaGFuZGxlci9pbi1wcm9jZXNzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLE1BQU0sTUFBTSxvQkFBb0IsQ0FBQTtBQUN2QyxPQUFPLG1CQUFtQixNQUFNLDZCQUE2QixDQUFBO0FBQzdELE9BQU8sMEJBQTBCLE1BQU0sa0NBQWtDLENBQUE7QUFDekUsT0FBTyxNQUFNLE1BQU0saUJBQWlCLENBQUE7QUFDcEMsT0FBTyxtQkFBbUIsTUFBTSw2QkFBNkIsQ0FBQTtBQUU3RDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sbUNBQW1DO0lBQ3REOzs7OztPQUtHO0lBQ0gsWUFBWSxFQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUM7UUFDdEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7UUFFbEM7O21KQUUySTtRQUMzSSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQTtRQUVqQixpQ0FBaUM7UUFDakMsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7UUFFM0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQTtRQUM5QixJQUFJLENBQUMsd0JBQXdCLEdBQUcsbUJBQW1CLENBQUMsUUFBUSxDQUFDLDRDQUE0QyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUNqSCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQTtJQUN4QixDQUFDO0lBRUQ7O2tDQUU4QjtJQUM5QixLQUFLLENBQUMsS0FBSztRQUNULE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsc0JBQXNCLElBQUksQ0FBQyxXQUFXLFVBQVUsQ0FBQyxDQUFBO0lBQ2pGLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsbUJBQW1CLENBQUMsWUFBWTtRQUM5QixNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFBO1FBRTVDLE1BQU0sVUFBVSxHQUFHLElBQUksTUFBTSxDQUFDO1lBQzVCLFdBQVc7WUFDWCxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDakMsYUFBYSxFQUFFLFlBQVksQ0FBQyxhQUFhO1NBQzFDLENBQUMsQ0FBQTtRQUVGLE1BQU0sRUFBQyxRQUFRLEVBQUUsU0FBUyxFQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQywrQkFBK0IsRUFBRSxDQUFBO1FBQ2xGLE1BQU0sYUFBYSxHQUFHLElBQUksbUJBQW1CLENBQUM7WUFDNUMsV0FBVztZQUNYLFFBQVE7WUFDUixTQUFTO1lBQ1QsVUFBVSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ3BCLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtnQkFDdkIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFDM0IsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEVBQUMsV0FBVyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUE7WUFDekQsQ0FBQztTQUNGLENBQUMsQ0FBQTtRQUVGLHNFQUFzRTtRQUN0RSxxRUFBcUU7UUFDckUsMEVBQTBFO1FBQzFFLHFFQUFxRTtRQUNyRSx5RUFBeUU7UUFDekUsNkNBQTZDO1FBQzdDLFVBQVUsQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQztZQUNuRSxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDckMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQzFDLENBQUMsQ0FBQTtRQUVGLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFDLGNBQWMsR0FBRyxLQUFLLEVBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRTtZQUN2RSxJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM1QyxNQUFNLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUNoRCxNQUFNLE1BQU0sR0FBRyxjQUFjO29CQUMzQixDQUFDLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQzt3QkFDM0IsVUFBVSxFQUFFLE9BQU8sTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVU7d0JBQ3RGLFFBQVE7cUJBQ1QsQ0FBQztvQkFDRixDQUFDLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQTtnQkFFMUMsS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsaUNBQWlDLEVBQUUsRUFBQyxXQUFXLEVBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO2dCQUNwRixDQUFDLENBQUMsQ0FBQTtZQUNKLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQTtRQUVGLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUMsRUFBRSxFQUFFO1lBQzVELEtBQUssYUFBYSxDQUFDLGNBQWMsQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDM0MsTUFBTSxNQUFNLENBQUMsTUFBTSxZQUFZLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO1lBQy9ELENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLGlDQUFpQyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7Z0JBQzVGLEtBQUssTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQ3hCLENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFDLENBQUE7UUFFRixVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO1lBQ2pDLEtBQUssYUFBYSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7aUJBQ3hELE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQTtRQUNwRCxDQUFDLENBQUMsQ0FBQTtRQUVGLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDbkMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFBO1lBQ3ZCLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQzFCLFVBQVUsQ0FBQyx5QkFBeUIsRUFBRTtnQkFDdEMsVUFBVSxDQUFDLG9CQUFvQixFQUFFO2FBQ2xDLENBQUM7aUJBQ0MsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDVCxpRUFBaUU7Z0JBQ2pFLDREQUE0RDtnQkFDNUQsbUVBQW1FO2dCQUNuRSxnRUFBZ0U7Z0JBQ2hFLFVBQVUsQ0FBQyxzQkFBc0IsRUFBRSxDQUFBO1lBQ3JDLENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDZixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyw4Q0FBOEMsRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUN6RSxDQUFDLENBQUM7aUJBQ0QsT0FBTyxDQUFDLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsMEJBQTBCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUMvQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUE7WUFDbEMsQ0FBQyxDQUFDLENBQUE7WUFFSixJQUFJLENBQUMsMEJBQTBCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQzlDLENBQUMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFDLENBQUE7UUFFckUseUVBQXlFO1FBQ3pFLHNFQUFzRTtRQUN0RSxNQUFNLGVBQWUsR0FBRyw4Q0FBOEMsQ0FBQyxFQUFDLDRDQUE2QyxDQUFDO1lBQ3BILFdBQVcsRUFBRSxDQUFDLDRGQUE0RixDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNqSCxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssYUFBYSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDakQsTUFBTSxLQUFLLEdBQUcsT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO29CQUVoRyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUMzQixDQUFDO1lBQ0gsQ0FBQztTQUNGLENBQUMsQ0FBQyxDQUFBO1FBRUgsWUFBWSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUN2QyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUE7SUFDdkIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILDRCQUE0QixDQUFDLEVBQUMsV0FBVyxFQUFFLEtBQUssRUFBQztRQUMvQyxNQUFNLFlBQVksR0FBRztZQUNuQixPQUFPLEVBQUUsRUFBQyxXQUFXLEVBQUUsOEJBQThCLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFDO1lBQzNGLEtBQUs7U0FDTixDQUFBO1FBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUV2RCxXQUFXLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFlBQVksQ0FBQyxDQUFBO1FBQ2pELFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUMsR0FBRyxZQUFZLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFDLENBQUMsQ0FBQTtJQUNoRixDQUFDO0lBRUQ7O2tDQUU4QjtJQUM5QixLQUFLLENBQUMsSUFBSTtRQUNSLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFBO1FBRXJCLEtBQUssTUFBTSxFQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3JFLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDaEIsVUFBVSxDQUFDLHlCQUF5QixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQ3JELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdEQUFnRCxFQUFFLEtBQUssQ0FBQyxDQUFBO2dCQUMzRSxDQUFDLENBQUM7Z0JBQ0YsVUFBVSxDQUFDLG9CQUFvQixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHFEQUFxRCxFQUFFLEtBQUssQ0FBQyxDQUFBO2dCQUNoRixDQUFDLENBQUM7Z0JBQ0YsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx3Q0FBd0MsRUFBRSxLQUFLLENBQUMsQ0FBQTtnQkFDbkUsQ0FBQyxDQUFDO2FBQ0gsQ0FBQyxDQUFBO1FBQ0osQ0FBQztRQUVELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQTtRQUVsRCxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQTtRQUNqQixJQUFJLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFBO0lBQ25DLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsNEJBQTRCLENBQUMsRUFBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUM7UUFDcEUsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTTtRQUUvQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsRUFBQyxPQUFPLEVBQUMsQ0FBQyxDQUFBO0lBQy9GLENBQUM7SUFFRDs7O09BR0c7SUFDSCwrQkFBK0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFBO0lBQzNCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILHNCQUFzQixDQUFDLEVBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFDO1FBQzNELEtBQUssTUFBTSxFQUFDLFVBQVUsRUFBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDdkQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLGdCQUFnQixDQUFBO1lBRTNDLElBQUksQ0FBQyxPQUFPO2dCQUFFLFNBQVE7WUFFdEIsS0FBSyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBQyxTQUFTLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQTtRQUNoRSxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsb0VBQW9FO1lBQ3BFLDhEQUE4RDtZQUM5RCw4QkFBOEI7WUFDOUIsS0FBSywwQkFBMEIsQ0FBQyxFQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUE7UUFDakksQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQ2xpZW50IGZyb20gXCIuLi9jbGllbnQvaW5kZXguanNcIlxuaW1wb3J0IENsaWVudERlbGl2ZXJ5UXVldWUgZnJvbSBcIi4uL2NsaWVudC1kZWxpdmVyeS1xdWV1ZS5qc1wiXG5pbXBvcnQgZGlzcGF0Y2hDaGFubmVsU3Vic2NyaWJlcnMgZnJvbSBcIi4vY2hhbm5lbC1zdWJzY3JpYmVyLWRpc3BhdGNoLmpzXCJcbmltcG9ydCBMb2dnZXIgZnJvbSBcIi4uLy4uL2xvZ2dlci5qc1wiXG5pbXBvcnQgd2Vic29ja2V0RXZlbnRzSG9zdCBmcm9tIFwiLi4vd2Vic29ja2V0LWV2ZW50cy1ob3N0LmpzXCJcblxuLyoqXG4gKiBJbi1wcm9jZXNzIHdvcmtlciBoYW5kbGVyIHRoYXQgcHJvY2Vzc2VzIEhUVFAgcmVxdWVzdHMgaW4gdGhlIG1haW4gdGhyZWFkXG4gKiBpbnN0ZWFkIG9mIHNwYXduaW5nIGEgV29ya2VyIHRocmVhZC4gVGhpcyBhbGxvd3MgdGhlIHRlc3QgcnVubmVyJ3MgZGF0YWJhc2VcbiAqIGNvbm5lY3Rpb24gY29udGV4dCB0byBiZSBzaGFyZWQgd2l0aCBIVFRQIHJlcXVlc3QgaGFuZGxlcnMsIHNvIG1vZGVsLWNyZWF0ZWRcbiAqIHJlY29yZHMgaW4gdGVzdHMgYXJlIHZpc2libGUgdG8gSFRUUCBlbmRwb2ludHMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0h0dHBTZXJ2ZXJJblByb2Nlc3NIYW5kbGVyIHtcbiAgLyoqXG4gICAqIFJ1bnMgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBhcmdzLmNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gYXJncy53b3JrZXJDb3VudCAtIFdvcmtlciBjb3VudC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjb25maWd1cmF0aW9uLCB3b3JrZXJDb3VudH0pIHtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uXG5cbiAgICAvKipcbiAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICogQHR5cGUge1JlY29yZDxudW1iZXIsIHtkZWxpdmVyeVF1ZXVlOiBDbGllbnREZWxpdmVyeVF1ZXVlLCBodHRwQ2xpZW50OiBDbGllbnQsIHNlcnZlckNsaWVudDogaW1wb3J0KFwiLi4vc2VydmVyLWNsaWVudC5qc1wiKS5kZWZhdWx0fT59ICovXG4gICAgdGhpcy5jbGllbnRzID0ge31cblxuICAgIC8qKiBAdHlwZSB7U2V0PFByb21pc2U8dm9pZD4+fSAqL1xuICAgIHRoaXMucGVuZGluZ0NsaWVudENsb3NlQ2xlYW51cHMgPSBuZXcgU2V0KClcblxuICAgIHRoaXMubG9nZ2VyID0gbmV3IExvZ2dlcih0aGlzKVxuICAgIHRoaXMud29ya2VyQ291bnQgPSB3b3JrZXJDb3VudFxuICAgIHRoaXMudW5yZWdpc3RlckZyb21FdmVudHNIb3N0ID0gd2Vic29ja2V0RXZlbnRzSG9zdC5yZWdpc3RlcigvKiogQHR5cGUge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSAqLyAodGhpcykpXG4gICAgdGhpcy5fc3RvcHBpbmcgPSBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc3RhcnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAqL1xuICBhc3luYyBzdGFydCgpIHtcbiAgICBhd2FpdCB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBgSW4tcHJvY2VzcyBoYW5kbGVyICR7dGhpcy53b3JrZXJDb3VudH0gc3RhcnRlZGApXG4gIH1cblxuICAvKipcbiAgICogUnVucyBhZGQgc29ja2V0IGNvbm5lY3Rpb24uXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VydmVyLWNsaWVudC5qc1wiKS5kZWZhdWx0fSBzZXJ2ZXJDbGllbnQgLSBTZXJ2ZXIgY2xpZW50IGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGFkZFNvY2tldENvbm5lY3Rpb24oc2VydmVyQ2xpZW50KSB7XG4gICAgY29uc3QgY2xpZW50Q291bnQgPSBzZXJ2ZXJDbGllbnQuY2xpZW50Q291bnRcblxuICAgIGNvbnN0IGh0dHBDbGllbnQgPSBuZXcgQ2xpZW50KHtcbiAgICAgIGNsaWVudENvdW50LFxuICAgICAgY29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9uLFxuICAgICAgcmVtb3RlQWRkcmVzczogc2VydmVyQ2xpZW50LnJlbW90ZUFkZHJlc3NcbiAgICB9KVxuXG4gICAgY29uc3Qge21heEJ5dGVzLCBtYXhGcmFtZXN9ID0gdGhpcy5jb25maWd1cmF0aW9uLmdldFdlYnNvY2tldE91dGJvdW5kUXVldWVMaW1pdHMoKVxuICAgIGNvbnN0IGRlbGl2ZXJ5UXVldWUgPSBuZXcgQ2xpZW50RGVsaXZlcnlRdWV1ZSh7XG4gICAgICBjbGllbnRDb3VudCxcbiAgICAgIG1heEJ5dGVzLFxuICAgICAgbWF4RnJhbWVzLFxuICAgICAgb25PdmVyZmxvdzogKGVycm9yKSA9PiB7XG4gICAgICAgIGRlbGl2ZXJ5UXVldWUuZGVzdHJveSgpXG4gICAgICAgIHNlcnZlckNsaWVudC5kZXN0cm95KGVycm9yKVxuICAgICAgICB0aGlzLl9yZXBvcnRPdXRib3VuZFF1ZXVlT3ZlcmZsb3coe2NsaWVudENvdW50LCBlcnJvcn0pXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIFN0cmVhbWluZyByZXNwb25zZXMgZW1pdCBjaHVua3Mgd2hpbGUgdGhlIHJlcXVlc3QgaXMgcnVubmluZy4gUm91dGVcbiAgICAvLyB0aGVpciBmcmFtZWQgb3V0cHV0IHRocm91Z2ggdGhlIGNvdW50ZWQgZGVsaXZlcnkgcGF0aCBzbyBhIHN0YWxsZWRcbiAgICAvLyBjbGllbnQgY2Fubm90IGJ1ZmZlciBlbmdpbmUgY2h1bmtzIHVuYm91bmRlZGx5OiBlYWNoIGNodW5rIHNldHRsZXMgb25seVxuICAgIC8vIGFmdGVyIGl0IGhhcyBiZWVuIGRlbGl2ZXJlZCB0byB0aGUgc29ja2V0LCB3aGljaCBnaXZlcyB0aGUgaGFuZGxlclxuICAgIC8vIGJhY2twcmVzc3VyZSwgYW5kIHRoZSBieXRlL2ZyYW1lIGxpbWl0cyBib3VuZCB3aGF0IGEgc2lsZW50IGNsaWVudCBjYW5cbiAgICAvLyByZXRhaW4gYmVmb3JlIHRoZSBjb25uZWN0aW9uIGlzIHRvcm4gZG93bi5cbiAgICBodHRwQ2xpZW50LnN0cmVhbU91dHB1dFNpbmsgPSAob3V0cHV0KSA9PiBkZWxpdmVyeVF1ZXVlLmVucXVldWVGcmFtZSh7XG4gICAgICBieXRlTGVuZ3RoOiBCdWZmZXIuYnl0ZUxlbmd0aChvdXRwdXQpLFxuICAgICAgZGVsaXZlcnk6ICgpID0+IHNlcnZlckNsaWVudC5zZW5kKG91dHB1dClcbiAgICB9KVxuXG4gICAgaHR0cENsaWVudC5ldmVudHMub24oXCJvdXRwdXRcIiwgKG91dHB1dCwge3dlYnNvY2tldEZyYW1lID0gZmFsc2V9ID0ge30pID0+IHtcbiAgICAgIGlmIChvdXRwdXQgIT09IG51bGwgJiYgb3V0cHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgZGVsaXZlcnkgPSAoKSA9PiBzZXJ2ZXJDbGllbnQuc2VuZChvdXRwdXQpXG4gICAgICAgIGNvbnN0IHF1ZXVlZCA9IHdlYnNvY2tldEZyYW1lXG4gICAgICAgICAgPyBkZWxpdmVyeVF1ZXVlLmVucXVldWVGcmFtZSh7XG4gICAgICAgICAgICBieXRlTGVuZ3RoOiB0eXBlb2Ygb3V0cHV0ID09PSBcInN0cmluZ1wiID8gQnVmZmVyLmJ5dGVMZW5ndGgob3V0cHV0KSA6IG91dHB1dC5ieXRlTGVuZ3RoLFxuICAgICAgICAgICAgZGVsaXZlcnlcbiAgICAgICAgICB9KVxuICAgICAgICAgIDogZGVsaXZlcnlRdWV1ZS5lbnF1ZXVlQ29udHJvbChkZWxpdmVyeSlcblxuICAgICAgICB2b2lkIHF1ZXVlZC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcigoKSA9PiBbXCJGYWlsZWQgdG8gZGVsaXZlciBjbGllbnQgb3V0cHV0XCIsIHtjbGllbnRDb3VudH0sIGVycm9yXSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgaHR0cENsaWVudC5ldmVudHMub24oXCJmaWxlXCIsICh7ZmlsZVBhdGgsIHNlbmRCb2R5LCBzZXR0bGV9KSA9PiB7XG4gICAgICB2b2lkIGRlbGl2ZXJ5UXVldWUuZW5xdWV1ZUNvbnRyb2woYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBzZXR0bGUoYXdhaXQgc2VydmVyQ2xpZW50LnNlbmRGaWxlKGZpbGVQYXRoLCBzZW5kQm9keSkpXG4gICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoKCkgPT4gW1wiRmFpbGVkIHRvIGRlbGl2ZXIgZmlsZSByZXNwb25zZVwiLCB7Y2xpZW50Q291bnQsIGZpbGVQYXRofSwgZXJyb3JdKVxuICAgICAgICB2b2lkIHNldHRsZShcImFib3J0ZWRcIilcbiAgICAgIH0pXG4gICAgfSlcblxuICAgIGh0dHBDbGllbnQuZXZlbnRzLm9uKFwiY2xvc2VcIiwgKCkgPT4ge1xuICAgICAgdm9pZCBkZWxpdmVyeVF1ZXVlLmVucXVldWVDb250cm9sKCgpID0+IHNlcnZlckNsaWVudC5lbmQoKSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4gZGVsZXRlIHRoaXMuY2xpZW50c1tjbGllbnRDb3VudF0pXG4gICAgfSlcblxuICAgIHNlcnZlckNsaWVudC5ldmVudHMub24oXCJjbG9zZVwiLCAoKSA9PiB7XG4gICAgICBkZWxpdmVyeVF1ZXVlLmRlc3Ryb3koKVxuICAgICAgY29uc3QgY2xlYW51cCA9IFByb21pc2UuYWxsKFtcbiAgICAgICAgaHR0cENsaWVudC5hYm9ydFBlbmRpbmdGaWxlUmVzcG9uc2VzKCksXG4gICAgICAgIGh0dHBDbGllbnQuYWJvcnRTdHJlYW1SZXNwb25zZXMoKVxuICAgICAgXSlcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIC8vIEJ1ZmZlcmVkIHJlc3BvbnNlcyBoYXZlIG5vIHN0cmVhbSB0byBhYm9ydCwgc28gdGhlaXIgaW4tZmxpZ2h0XG4gICAgICAgICAgLy8gaGFuZGxlcnMgbmV2ZXIgaGVhciBhYm91dCB0aGUgc29ja2V0IHRlYXJkb3duIHRocm91Z2ggdGhlXG4gICAgICAgICAgLy8gc3RyZWFtaW5nIHBhdGg6IG5vdGlmeSB0aGUgcnVubmluZyByZXF1ZXN0cyBkaXJlY3RseSBzbyB0aGV5IGNhblxuICAgICAgICAgIC8vIHNldHRsZSByZXNvdXJjZXMgKGUuZy4gYWRtaXNzaW9uIHF1ZXVlIHBvc2l0aW9ucykgaW4tcHJvY2Vzcy5cbiAgICAgICAgICBodHRwQ2xpZW50Lm5vdGlmeUNsaWVudERpc2Nvbm5lY3QoKVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcIkZhaWxlZCB0byBhYm9ydCByZXNwb25zZXMgYWZ0ZXIgY2xpZW50IGNsb3NlXCIsIGVycm9yKVxuICAgICAgICB9KVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5wZW5kaW5nQ2xpZW50Q2xvc2VDbGVhbnVwcy5kZWxldGUoY2xlYW51cClcbiAgICAgICAgICBkZWxldGUgdGhpcy5jbGllbnRzW2NsaWVudENvdW50XVxuICAgICAgICB9KVxuXG4gICAgICB0aGlzLnBlbmRpbmdDbGllbnRDbG9zZUNsZWFudXBzLmFkZChjbGVhbnVwKVxuICAgIH0pXG5cbiAgICB0aGlzLmNsaWVudHNbY2xpZW50Q291bnRdID0ge2RlbGl2ZXJ5UXVldWUsIGh0dHBDbGllbnQsIHNlcnZlckNsaWVudH1cblxuICAgIC8vIENyZWF0ZSBhIG1lc3NhZ2UtcG9ydCBzaGltIHNvIFNlcnZlckNsaWVudC5vblNvY2tldERhdGEgY2FuIHJvdXRlIGRhdGFcbiAgICAvLyB0byB0aGUgaW4tcHJvY2VzcyBIVFRQIENsaWVudCB3aXRob3V0IG5lZWRpbmcgYSByZWFsIHdvcmtlciB0aHJlYWQuXG4gICAgY29uc3QgbWVzc2FnZVBvcnRTaGltID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJ3b3JrZXJfdGhyZWFkc1wiKS5Xb3JrZXJ9ICovICgvKiogQHR5cGUge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSAqLyAoe1xuICAgICAgcG9zdE1lc3NhZ2U6ICgvKiogQHR5cGUge3tjb21tYW5kOiBzdHJpbmcsIGNodW5rPzogQnVmZmVyIHwgVWludDhBcnJheSB8IHN0cmluZywgY2xpZW50Q291bnQ/OiBudW1iZXJ9fSAqLyBkYXRhKSA9PiB7XG4gICAgICAgIGlmIChkYXRhLmNvbW1hbmQgPT09IFwiY2xpZW50V3JpdGVcIiAmJiBkYXRhLmNodW5rKSB7XG4gICAgICAgICAgY29uc3QgY2h1bmsgPSB0eXBlb2YgZGF0YS5jaHVuayA9PT0gXCJzdHJpbmdcIiA/IEJ1ZmZlci5mcm9tKGRhdGEuY2h1bmspIDogQnVmZmVyLmZyb20oZGF0YS5jaHVuaylcblxuICAgICAgICAgIGh0dHBDbGllbnQub25Xcml0ZShjaHVuaylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKVxuXG4gICAgc2VydmVyQ2xpZW50LnNldFdvcmtlcihtZXNzYWdlUG9ydFNoaW0pXG4gICAgc2VydmVyQ2xpZW50Lmxpc3RlbigpXG4gIH1cblxuICAvKipcbiAgICogUmVwb3J0cyBhIHBlci1jbGllbnQgb3V0Ym91bmQgcXVldWUgb3ZlcmZsb3cuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3ZlcmZsb3cgZGV0YWlscy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGFyZ3MuY2xpZW50Q291bnQgLSBBZmZlY3RlZCBjbGllbnQuXG4gICAqIEBwYXJhbSB7RXJyb3J9IGFyZ3MuZXJyb3IgLSBPdmVyZmxvdyBlcnJvci5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBfcmVwb3J0T3V0Ym91bmRRdWV1ZU92ZXJmbG93KHtjbGllbnRDb3VudCwgZXJyb3J9KSB7XG4gICAgY29uc3QgZXJyb3JQYXlsb2FkID0ge1xuICAgICAgY29udGV4dDoge2NsaWVudENvdW50LCB3ZWJzb2NrZXRPdXRib3VuZFF1ZXVlT3ZlcmZsb3c6IHRydWUsIHdvcmtlckNvdW50OiB0aGlzLndvcmtlckNvdW50fSxcbiAgICAgIGVycm9yXG4gICAgfVxuICAgIGNvbnN0IGVycm9yRXZlbnRzID0gdGhpcy5jb25maWd1cmF0aW9uLmdldEVycm9yRXZlbnRzKClcblxuICAgIGVycm9yRXZlbnRzLmVtaXQoXCJmcmFtZXdvcmstZXJyb3JcIiwgZXJyb3JQYXlsb2FkKVxuICAgIGVycm9yRXZlbnRzLmVtaXQoXCJhbGwtZXJyb3JcIiwgey4uLmVycm9yUGF5bG9hZCwgZXJyb3JUeXBlOiBcImZyYW1ld29yay1lcnJvclwifSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHN0b3AuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAqL1xuICBhc3luYyBzdG9wKCkge1xuICAgIHRoaXMuX3N0b3BwaW5nID0gdHJ1ZVxuXG4gICAgZm9yIChjb25zdCB7aHR0cENsaWVudCwgc2VydmVyQ2xpZW50fSBvZiBPYmplY3QudmFsdWVzKHRoaXMuY2xpZW50cykpIHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgaHR0cENsaWVudC5hYm9ydFBlbmRpbmdGaWxlUmVzcG9uc2VzKCkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcIkZhaWxlZCB0byBhYm9ydCBmaWxlIHJlc3BvbnNlcyBkdXJpbmcgc2h1dGRvd25cIiwgZXJyb3IpXG4gICAgICAgIH0pLFxuICAgICAgICBodHRwQ2xpZW50LmFib3J0U3RyZWFtUmVzcG9uc2VzKCkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcIkZhaWxlZCB0byBhYm9ydCBzdHJlYW1pbmcgcmVzcG9uc2VzIGR1cmluZyBzaHV0ZG93blwiLCBlcnJvcilcbiAgICAgICAgfSksXG4gICAgICAgIHNlcnZlckNsaWVudC5lbmQoKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFwiRmFpbGVkIHRvIGNsb3NlIGNsaWVudCBkdXJpbmcgc2h1dGRvd25cIiwgZXJyb3IpXG4gICAgICAgIH0pXG4gICAgICBdKVxuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMucGVuZGluZ0NsaWVudENsb3NlQ2xlYW51cHMpXG5cbiAgICB0aGlzLmNsaWVudHMgPSB7fVxuICAgIHRoaXMudW5yZWdpc3RlckZyb21FdmVudHNIb3N0Py4oKVxuICB9XG5cbiAgLyoqXG4gICAqIEluLXByb2Nlc3MgaGFuZGxlciBwYXRoIGZvciBWMiBjaGFubmVsIGJyb2FkY2FzdHMuIE5vIHdvcmtlclxuICAgKiBib3VuZGFyeSB0byBjcm9zcyDigJQgZGlzcGF0Y2ggZGlyZWN0bHkgdG8gYW55IG1hdGNoaW5nIGxpdmVcbiAgICogc3Vic2NyaXB0aW9ucyBvbiB0aGUgc2hhcmVkIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmNoYW5uZWwgLSBDaGFubmVsIG5hbWUuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBhcmdzLmJyb2FkY2FzdFBhcmFtcyAtIFJvdXRpbmcgZmlsdGVyIHBhcmFtcy5cbiAgICogQHBhcmFtIHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gYXJncy5ib2R5IC0gTWVzc2FnZSBib2R5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuZXZlbnRJZF0gLSBQZXJzaXN0ZWQgZXZlbnQgaWQgZm9yIHJlcGxheS5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBkaXNwYXRjaFdlYnNvY2tldFYyQnJvYWRjYXN0KHtib2R5LCBicm9hZGNhc3RQYXJhbXMsIGNoYW5uZWwsIGV2ZW50SWR9KSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRpb24pIHJldHVyblxuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi5fYnJvYWRjYXN0VG9DaGFubmVsTG9jYWwoY2hhbm5lbCwgYnJvYWRjYXN0UGFyYW1zLCBib2R5LCB7ZXZlbnRJZH0pXG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY29uZmlndXJhdGlvbi13aWRlIFYyIGJyb2FkY2FzdCB0YXJnZXQgc2hhcmVkIGJ5IGluLXByb2Nlc3MgaGFuZGxlcnMuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi8uLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IC0gU2hhcmVkIGNvbmZpZ3VyYXRpb24gdGFyZ2V0LlxuICAgKi9cbiAgd2Vic29ja2V0VjJCcm9hZGNhc3REaXNwYXRjaEtleSgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uXG4gIH1cblxuICAvKipcbiAgICogUnVucyBkaXNwYXRjaCB3ZWJzb2NrZXQgZXZlbnQuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmNoYW5uZWwgLSBDaGFubmVsIG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5jcmVhdGVkQXRdIC0gRXZlbnQgY3JlYXRpb24gdGltZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmV2ZW50SWRdIC0gRXZlbnQgaWRlbnRpZmllci5cbiAgICogQHBhcmFtIHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gYXJncy5wYXlsb2FkIC0gUGF5bG9hZCBkYXRhLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGRpc3BhdGNoV2Vic29ja2V0RXZlbnQoe2NoYW5uZWwsIGNyZWF0ZWRBdCwgZXZlbnRJZCwgcGF5bG9hZH0pIHtcbiAgICBmb3IgKGNvbnN0IHtodHRwQ2xpZW50fSBvZiBPYmplY3QudmFsdWVzKHRoaXMuY2xpZW50cykpIHtcbiAgICAgIGNvbnN0IHNlc3Npb24gPSBodHRwQ2xpZW50LndlYnNvY2tldFNlc3Npb25cblxuICAgICAgaWYgKCFzZXNzaW9uKSBjb250aW51ZVxuXG4gICAgICB2b2lkIHNlc3Npb24uc2VuZEV2ZW50KGNoYW5uZWwsIHBheWxvYWQsIHtjcmVhdGVkQXQsIGV2ZW50SWR9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24pIHtcbiAgICAgIC8vIElzb2xhdGUgc3Vic2NyaWJlciBmYWlsdXJlcyBmcm9tIGJyZWFraW5nIHRoZSBpbi1wcm9jZXNzIGhhbmRsZXIsXG4gICAgICAvLyBidXQgc3RpbGwgc3VyZmFjZSB0aGVtIHRvIHRoZSBmcmFtZXdvcmsgZXJyb3IgZXZlbnRzIHNvIGJ1Z1xuICAgICAgLy8gcmVwb3J0ZXJzIGNhbiBwaWNrIHRoZW0gdXAuXG4gICAgICB2b2lkIGRpc3BhdGNoQ2hhbm5lbFN1YnNjcmliZXJzKHtjaGFubmVsLCBjb25maWd1cmF0aW9uOiB0aGlzLmNvbmZpZ3VyYXRpb24sIGNyZWF0ZWRBdCwgZXZlbnRJZCwgbG9nZ2VyOiB0aGlzLmxvZ2dlciwgcGF5bG9hZH0pXG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"worker-thread.d.ts","sourceRoot":"","sources":["../../../../src/http-server/worker-handler/worker-thread.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker-thread.d.ts","sourceRoot":"","sources":["../../../../src/http-server/worker-handler/worker-thread.js"],"names":[],"mappings":"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"}