velocious 1.0.130 → 1.0.132
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +103 -0
- package/build/src/configuration.d.ts +8 -0
- package/build/src/configuration.d.ts.map +1 -1
- package/build/src/configuration.js +13 -1
- package/build/src/database/drivers/base-table.d.ts +5 -0
- package/build/src/database/drivers/base-table.d.ts.map +1 -1
- package/build/src/database/drivers/base-table.js +11 -1
- package/build/src/database/drivers/base.d.ts +9 -0
- package/build/src/database/drivers/base.d.ts.map +1 -1
- package/build/src/database/drivers/base.js +12 -1
- package/build/src/database/drivers/mssql/index.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/index.js +7 -3
- package/build/src/database/drivers/mysql/index.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/index.js +2 -1
- package/build/src/database/drivers/pgsql/index.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/index.js +2 -1
- package/build/src/database/drivers/sqlite/base.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/base.js +3 -2
- package/build/src/database/migration/index.d.ts.map +1 -1
- package/build/src/database/migration/index.js +11 -2
- package/build/src/database/record/index.d.ts.map +1 -1
- package/build/src/database/record/index.js +15 -2
- package/build/src/database/table-data/index.d.ts +24 -24
- package/build/src/database/table-data/index.d.ts.map +1 -1
- package/build/src/database/table-data/index.js +13 -13
- package/build/src/http-client/response.d.ts +4 -0
- package/build/src/http-client/response.d.ts.map +1 -1
- package/build/src/http-client/response.js +19 -17
- package/build/src/http-client/websocket-client.d.ts +105 -0
- package/build/src/http-client/websocket-client.d.ts.map +1 -0
- package/build/src/http-client/websocket-client.js +237 -0
- package/build/src/http-server/client/index.d.ts +14 -0
- package/build/src/http-server/client/index.d.ts.map +1 -1
- package/build/src/http-server/client/index.js +72 -1
- package/build/src/http-server/client/params-to-object.d.ts +7 -7
- package/build/src/http-server/client/params-to-object.d.ts.map +1 -1
- package/build/src/http-server/client/params-to-object.js +4 -4
- package/build/src/http-server/client/request-buffer/form-data-part.d.ts +21 -2
- package/build/src/http-server/client/request-buffer/form-data-part.d.ts.map +1 -1
- package/build/src/http-server/client/request-buffer/form-data-part.js +62 -4
- package/build/src/http-server/client/request-parser.js +2 -2
- package/build/src/http-server/client/request-runner.d.ts +4 -4
- package/build/src/http-server/client/request-runner.d.ts.map +1 -1
- package/build/src/http-server/client/request-runner.js +2 -2
- package/build/src/http-server/client/uploaded-file/memory-uploaded-file.d.ts +21 -0
- package/build/src/http-server/client/uploaded-file/memory-uploaded-file.d.ts.map +1 -0
- package/build/src/http-server/client/uploaded-file/memory-uploaded-file.js +26 -0
- package/build/src/http-server/client/uploaded-file/temporary-uploaded-file.d.ts +21 -0
- package/build/src/http-server/client/uploaded-file/temporary-uploaded-file.d.ts.map +1 -0
- package/build/src/http-server/client/uploaded-file/temporary-uploaded-file.js +26 -0
- package/build/src/http-server/client/uploaded-file/uploaded-file.d.ts +29 -0
- package/build/src/http-server/client/uploaded-file/uploaded-file.d.ts.map +1 -0
- package/build/src/http-server/client/uploaded-file/uploaded-file.js +34 -0
- package/build/src/http-server/client/websocket-request.d.ts +40 -0
- package/build/src/http-server/client/websocket-request.d.ts.map +1 -0
- package/build/src/http-server/client/websocket-request.js +88 -0
- package/build/src/http-server/client/websocket-session.d.ts +73 -0
- package/build/src/http-server/client/websocket-session.d.ts.map +1 -0
- package/build/src/http-server/client/websocket-session.js +231 -0
- package/build/src/http-server/server-client.d.ts.map +1 -1
- package/build/src/http-server/server-client.js +6 -3
- package/build/src/http-server/websocket-events-host.d.ts +22 -0
- package/build/src/http-server/websocket-events-host.d.ts.map +1 -0
- package/build/src/http-server/websocket-events-host.js +29 -0
- package/build/src/http-server/websocket-events.d.ts +20 -0
- package/build/src/http-server/websocket-events.d.ts.map +1 -0
- package/build/src/http-server/websocket-events.js +23 -0
- package/build/src/http-server/worker-handler/index.d.ts +19 -4
- package/build/src/http-server/worker-handler/index.d.ts.map +1 -1
- package/build/src/http-server/worker-handler/index.js +24 -3
- package/build/src/http-server/worker-handler/worker-thread.d.ts +18 -2
- package/build/src/http-server/worker-handler/worker-thread.d.ts.map +1 -1
- package/build/src/http-server/worker-handler/worker-thread.js +23 -2
- package/build/src/routes/resolver.d.ts +5 -0
- package/build/src/routes/resolver.d.ts.map +1 -1
- package/build/src/routes/resolver.js +28 -2
- package/package.json +1 -1
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
// @ts-check
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import { tmpdir } from "os";
|
|
5
|
+
import MemoryUploadedFile from "../uploaded-file/memory-uploaded-file.js";
|
|
6
|
+
import TemporaryUploadedFile from "../uploaded-file/temporary-uploaded-file.js";
|
|
7
|
+
const MAX_IN_MEMORY_FILE_SIZE = 2 * 1024 * 1024;
|
|
2
8
|
export default class FormDataPart {
|
|
3
9
|
/** @type {Record<string, import("./header.js").default>} */
|
|
4
10
|
headers = {};
|
|
@@ -11,9 +17,10 @@ export default class FormDataPart {
|
|
|
11
17
|
const name = header.formattedName;
|
|
12
18
|
this.headers[name] = header;
|
|
13
19
|
if (name == "content-disposition") {
|
|
14
|
-
const match = header.value.match(/^form-data
|
|
20
|
+
const match = header.value.match(/^form-data;\s*name="(.+?)"(?:;\s*filename="(.+?)")?$/);
|
|
15
21
|
if (match) {
|
|
16
22
|
this.name = match[1];
|
|
23
|
+
this.filename = match[2];
|
|
17
24
|
}
|
|
18
25
|
else {
|
|
19
26
|
console.error(`Couldn't match name from content-disposition: ${header.value}`);
|
|
@@ -22,9 +29,59 @@ export default class FormDataPart {
|
|
|
22
29
|
else if (name == "content-length") {
|
|
23
30
|
this.contentLength = parseInt(header.value);
|
|
24
31
|
}
|
|
32
|
+
else if (name == "content-type") {
|
|
33
|
+
this.contentType = header.value;
|
|
34
|
+
}
|
|
25
35
|
}
|
|
26
36
|
finish() {
|
|
27
|
-
|
|
37
|
+
const buffer = Buffer.from(this.body);
|
|
38
|
+
this.size = buffer.length;
|
|
39
|
+
if (this.isFile()) {
|
|
40
|
+
this.value = this.buildUploadedFile(buffer);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
this.value = buffer.toString();
|
|
44
|
+
}
|
|
45
|
+
this.body = [];
|
|
46
|
+
}
|
|
47
|
+
buildUploadedFile(buffer) {
|
|
48
|
+
const filename = this._sanitizeFilename(this.filename) || "upload";
|
|
49
|
+
const fieldName = this.getName();
|
|
50
|
+
const commonArgs = {
|
|
51
|
+
contentType: this.contentType,
|
|
52
|
+
fieldName,
|
|
53
|
+
filename,
|
|
54
|
+
size: this.size || buffer.length
|
|
55
|
+
};
|
|
56
|
+
if (buffer.length <= MAX_IN_MEMORY_FILE_SIZE) {
|
|
57
|
+
return new MemoryUploadedFile({ ...commonArgs, buffer });
|
|
58
|
+
}
|
|
59
|
+
const tempFilePath = this.createTempFile(buffer, filename);
|
|
60
|
+
return new TemporaryUploadedFile({ ...commonArgs, path: tempFilePath });
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* @param {Buffer} buffer
|
|
64
|
+
* @param {string} filename
|
|
65
|
+
* @returns {string}
|
|
66
|
+
*/
|
|
67
|
+
createTempFile(buffer, filename) {
|
|
68
|
+
const tempDirectory = fs.mkdtempSync(path.join(tmpdir(), "velocious-upload-"));
|
|
69
|
+
const tempFilePath = path.join(tempDirectory, filename);
|
|
70
|
+
fs.writeFileSync(tempFilePath, buffer);
|
|
71
|
+
return tempFilePath;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Prevent path traversal/absolute paths from filenames coming from headers.
|
|
75
|
+
* @param {string | undefined} filename
|
|
76
|
+
* @returns {string}
|
|
77
|
+
*/
|
|
78
|
+
_sanitizeFilename(filename) {
|
|
79
|
+
if (!filename)
|
|
80
|
+
return "";
|
|
81
|
+
const base = path.basename(filename);
|
|
82
|
+
if (base === "." || base === ".." || base === "")
|
|
83
|
+
return "upload";
|
|
84
|
+
return base;
|
|
28
85
|
}
|
|
29
86
|
getName() {
|
|
30
87
|
if (!this.name)
|
|
@@ -32,10 +89,11 @@ export default class FormDataPart {
|
|
|
32
89
|
return this.name;
|
|
33
90
|
}
|
|
34
91
|
getValue() {
|
|
35
|
-
if (
|
|
92
|
+
if (typeof this.value === "undefined")
|
|
36
93
|
throw new Error("Value hasn't been set");
|
|
37
94
|
return this.value;
|
|
38
95
|
}
|
|
96
|
+
isFile() { return Boolean(this.filename); }
|
|
39
97
|
/**
|
|
40
98
|
* @param {string} text
|
|
41
99
|
*/
|
|
@@ -43,4 +101,4 @@ export default class FormDataPart {
|
|
|
43
101
|
this.body = this.body.slice(0, this.body.length - text.length);
|
|
44
102
|
}
|
|
45
103
|
}
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1kYXRhLXBhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QtYnVmZmVyL2Zvcm0tZGF0YS1wYXJ0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUE7QUFDbkIsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFBO0FBQ3ZCLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxJQUFJLENBQUE7QUFDekIsT0FBTyxrQkFBa0IsTUFBTSwwQ0FBMEMsQ0FBQTtBQUN6RSxPQUFPLHFCQUFxQixNQUFNLDZDQUE2QyxDQUFBO0FBRS9FLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUE7QUFFL0MsTUFBTSxDQUFDLE9BQU8sT0FBTyxZQUFZO0lBQy9CLDREQUE0RDtJQUM1RCxPQUFPLEdBQUcsRUFBRSxDQUFBO0lBRVosdUJBQXVCO0lBQ3ZCLElBQUksR0FBRyxFQUFFLENBQUE7SUFFVDs7T0FFRztJQUNILFNBQVMsQ0FBQyxNQUFNO1FBQ2QsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQTtRQUVqQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQTtRQUUzQixJQUFJLElBQUksSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUE7WUFFeEYsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDMUIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FB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QUFzQixDQUFDLENBQUE7UUFFdkQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFBO0lBQ2xCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssV0FBVztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtRQUUvRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUE7SUFDbkIsQ0FBQztJQUVELE1BQU0sS0FBSyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBRTFDOztPQUVHO0lBQ0gsY0FBYyxDQUFDLElBQUk7UUFDakIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2hFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgZnMgZnJvbSBcImZzXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCB7dG1wZGlyfSBmcm9tIFwib3NcIlxuaW1wb3J0IE1lbW9yeVVwbG9hZGVkRmlsZSBmcm9tIFwiLi4vdXBsb2FkZWQtZmlsZS9tZW1vcnktdXBsb2FkZWQtZmlsZS5qc1wiXG5pbXBvcnQgVGVtcG9yYXJ5VXBsb2FkZWRGaWxlIGZyb20gXCIuLi91cGxvYWRlZC1maWxlL3RlbXBvcmFyeS11cGxvYWRlZC1maWxlLmpzXCJcblxuY29uc3QgTUFYX0lOX01FTU9SWV9GSUxFX1NJWkUgPSAyICogMTAyNCAqIDEwMjRcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRm9ybURhdGFQYXJ0IHtcbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuL2hlYWRlci5qc1wiKS5kZWZhdWx0Pn0gKi9cbiAgaGVhZGVycyA9IHt9XG5cbiAgLyoqIEB0eXBlIHtudW1iZXJbXX0gKi9cbiAgYm9keSA9IFtdXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9oZWFkZXIuanNcIikuZGVmYXVsdH0gaGVhZGVyXG4gICAqL1xuICBhZGRIZWFkZXIoaGVhZGVyKSB7XG4gICAgY29uc3QgbmFtZSA9IGhlYWRlci5mb3JtYXR0ZWROYW1lXG5cbiAgICB0aGlzLmhlYWRlcnNbbmFtZV0gPSBoZWFkZXJcblxuICAgIGlmIChuYW1lID09IFwiY29udGVudC1kaXNwb3NpdGlvblwiKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IGhlYWRlci52YWx1ZS5tYXRjaCgvXmZvcm0tZGF0YTtcXHMqbmFtZT1cIiguKz8pXCIoPzo7XFxzKmZpbGVuYW1lPVwiKC4rPylcIik/JC8pXG5cbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICB0aGlzLm5hbWUgPSBtYXRjaFsxXVxuICAgICAgICB0aGlzLmZpbGVuYW1lID0gbWF0Y2hbMl1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYENvdWxkbid0IG1hdGNoIG5hbWUgZnJvbSBjb250ZW50LWRpc3Bvc2l0aW9uOiAke2hlYWRlci52YWx1ZX1gKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmFtZSA9PSBcImNvbnRlbnQtbGVuZ3RoXCIpIHtcbiAgICAgIHRoaXMuY29udGVudExlbmd0aCA9IHBhcnNlSW50KGhlYWRlci52YWx1ZSlcbiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gXCJjb250ZW50LXR5cGVcIikge1xuICAgICAgdGhpcy5jb250ZW50VHlwZSA9IGhlYWRlci52YWx1ZVxuICAgIH1cbiAgfVxuXG4gIGZpbmlzaCgpIHtcbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh0aGlzLmJvZHkpXG5cbiAgICB0aGlzLnNpemUgPSBidWZmZXIubGVuZ3RoXG5cbiAgICBpZiAodGhpcy5pc0ZpbGUoKSkge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuYnVpbGRVcGxvYWRlZEZpbGUoYnVmZmVyKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0gYnVmZmVyLnRvU3RyaW5nKClcbiAgICB9XG5cbiAgICB0aGlzLmJvZHkgPSBbXVxuICB9XG5cbiAgYnVpbGRVcGxvYWRlZEZpbGUoYnVmZmVyKSB7XG4gICAgY29uc3QgZmlsZW5hbWUgPSB0aGlzLl9zYW5pdGl6ZUZpbGVuYW1lKHRoaXMuZmlsZW5hbWUpIHx8IFwidXBsb2FkXCJcbiAgICBjb25zdCBmaWVsZE5hbWUgPSB0aGlzLmdldE5hbWUoKVxuICAgIGNvbnN0IGNvbW1vbkFyZ3MgPSB7XG4gICAgICBjb250ZW50VHlwZTogdGhpcy5jb250ZW50VHlwZSxcbiAgICAgIGZpZWxkTmFtZSxcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgc2l6ZTogdGhpcy5zaXplIHx8IGJ1ZmZlci5sZW5ndGhcbiAgICB9XG5cbiAgICBpZiAoYnVmZmVyLmxlbmd0aCA8PSBNQVhfSU5fTUVNT1JZX0ZJTEVfU0laRSkge1xuICAgICAgcmV0dXJuIG5ldyBNZW1vcnlVcGxvYWRlZEZpbGUoey4uLmNvbW1vbkFyZ3MsIGJ1ZmZlcn0pXG4gICAgfVxuXG4gICAgY29uc3QgdGVtcEZpbGVQYXRoID0gdGhpcy5jcmVhdGVUZW1wRmlsZShidWZmZXIsIGZpbGVuYW1lKVxuXG4gICAgcmV0dXJuIG5ldyBUZW1wb3JhcnlVcGxvYWRlZEZpbGUoey4uLmNvbW1vbkFyZ3MsIHBhdGg6IHRlbXBGaWxlUGF0aH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWVcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGNyZWF0ZVRlbXBGaWxlKGJ1ZmZlciwgZmlsZW5hbWUpIHtcbiAgICBjb25zdCB0ZW1wRGlyZWN0b3J5ID0gZnMubWtkdGVtcFN5bmMocGF0aC5qb2luKHRtcGRpcigpLCBcInZlbG9jaW91cy11cGxvYWQtXCIpKVxuICAgIGNvbnN0IHRlbXBGaWxlUGF0aCA9IHBhdGguam9pbih0ZW1wRGlyZWN0b3J5LCBmaWxlbmFtZSlcblxuICAgIGZzLndyaXRlRmlsZVN5bmModGVtcEZpbGVQYXRoLCBidWZmZXIpXG5cbiAgICByZXR1cm4gdGVtcEZpbGVQYXRoXG4gIH1cblxuICAvKipcbiAgICogUHJldmVudCBwYXRoIHRyYXZlcnNhbC9hYnNvbHV0ZSBwYXRocyBmcm9tIGZpbGVuYW1lcyBjb21pbmcgZnJvbSBoZWFkZXJzLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gZmlsZW5hbWVcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIF9zYW5pdGl6ZUZpbGVuYW1lKGZpbGVuYW1lKSB7XG4gICAgaWYgKCFmaWxlbmFtZSkgcmV0dXJuIFwiXCJcblxuICAgIGNvbnN0IGJhc2UgPSBwYXRoLmJhc2VuYW1lKGZpbGVuYW1lKVxuXG4gICAgaWYgKGJhc2UgPT09IFwiLlwiIHx8IGJhc2UgPT09IFwiLi5cIiB8fCBiYXNlID09PSBcIlwiKSByZXR1cm4gXCJ1cGxvYWRcIlxuXG4gICAgcmV0dXJuIGJhc2VcbiAgfVxuXG4gIGdldE5hbWUoKSB7XG4gICAgaWYgKCF0aGlzLm5hbWUpIHRocm93IG5ldyBFcnJvcihcIk5hbWUgaGFzbid0IGJlZW4gc2V0XCIpXG5cbiAgICByZXR1cm4gdGhpcy5uYW1lXG4gIH1cblxuICBnZXRWYWx1ZSgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMudmFsdWUgPT09IFwidW5kZWZpbmVkXCIpIHRocm93IG5ldyBFcnJvcihcIlZhbHVlIGhhc24ndCBiZWVuIHNldFwiKVxuXG4gICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgfVxuXG4gIGlzRmlsZSgpIHsgcmV0dXJuIEJvb2xlYW4odGhpcy5maWxlbmFtZSkgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICAgKi9cbiAgcmVtb3ZlRnJvbUJvZHkodGV4dCkge1xuICAgIHRoaXMuYm9keSA9IHRoaXMuYm9keS5zbGljZSgwLCB0aGlzLmJvZHkubGVuZ3RoIC0gdGV4dC5sZW5ndGgpXG4gIH1cbn1cbiJdfQ==
|
|
@@ -33,7 +33,7 @@ export default class VelociousHttpServerClientRequestParser {
|
|
|
33
33
|
* @returns {void}
|
|
34
34
|
*/
|
|
35
35
|
onFormDataPart = (formDataPart) => {
|
|
36
|
-
/** @type {Record<string,
|
|
36
|
+
/** @type {Record<string, any>} */
|
|
37
37
|
const unorderedParams = {};
|
|
38
38
|
unorderedParams[formDataPart.getName()] = formDataPart.getValue();
|
|
39
39
|
const paramsToObject = new ParamsToObject(unorderedParams);
|
|
@@ -103,4 +103,4 @@ export default class VelociousHttpServerClientRequestParser {
|
|
|
103
103
|
this.events.emit("done");
|
|
104
104
|
};
|
|
105
105
|
}
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QtcGFyc2VyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQzlCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxRQUFRLENBQUE7QUFDbkMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUN4QyxPQUFPLGNBQWMsTUFBTSx1QkFBdUIsQ0FBQTtBQUNsRCxPQUFPLGFBQWEsTUFBTSwyQkFBMkIsQ0FBQTtBQUVyRCxNQUFNLENBQUMsT0FBTyxPQUFPLHNDQUFzQztJQUN6RDs7O09BR0c7SUFDSCxZQUFZLEVBQUMsYUFBYSxFQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO1FBRTdELElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO1FBQ2xDLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFBO1FBQ2QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFBO1FBQ2hDLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFBO1FBRWhCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxhQUFhLENBQUMsRUFBQyxhQUFhLEVBQUMsQ0FBQyxDQUFBO1FBQ3ZELElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQzNELElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDbkUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFB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Z30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQge0V2ZW50RW1pdHRlcn0gZnJvbSBcImV2ZW50c1wiXG5pbXBvcnQge2luY29ycG9yYXRlfSBmcm9tIFwiaW5jb3Jwb3JhdG9yXCJcbmltcG9ydCBQYXJhbXNUb09iamVjdCBmcm9tIFwiLi9wYXJhbXMtdG8tb2JqZWN0LmpzXCJcbmltcG9ydCBSZXF1ZXN0QnVmZmVyIGZyb20gXCIuL3JlcXVlc3QtYnVmZmVyL2luZGV4LmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzSHR0cFNlcnZlckNsaWVudFJlcXVlc3RQYXJzZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3NcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvblxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZ3VyYXRpb259KSB7XG4gICAgaWYgKCFjb25maWd1cmF0aW9uKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25maWd1cmF0aW9uIGdpdmVuXCIpXG5cbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uXG4gICAgdGhpcy5kYXRhID0gW11cbiAgICB0aGlzLmV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICAgIHRoaXMucGFyYW1zID0ge31cblxuICAgIHRoaXMucmVxdWVzdEJ1ZmZlciA9IG5ldyBSZXF1ZXN0QnVmZmVyKHtjb25maWd1cmF0aW9ufSlcbiAgICB0aGlzLnJlcXVlc3RCdWZmZXIuZXZlbnRzLm9uKFwiY29tcGxldGVkXCIsIHRoaXMucmVxdWVzdERvbmUpXG4gICAgdGhpcy5yZXF1ZXN0QnVmZmVyLmV2ZW50cy5vbihcImZvcm0tZGF0YS1wYXJ0XCIsIHRoaXMub25Gb3JtRGF0YVBhcnQpXG4gICAgdGhpcy5yZXF1ZXN0QnVmZmVyLmV2ZW50cy5vbihcInJlcXVlc3QtZG9uZVwiLCB0aGlzLnJlcXVlc3REb25lKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMucmVxdWVzdEJ1ZmZlci5ldmVudHMub2ZmKFwiY29tcGxldGVkXCIsIHRoaXMucmVxdWVzdERvbmUpXG4gICAgdGhpcy5yZXF1ZXN0QnVmZmVyLmV2ZW50cy5vZmYoXCJmb3JtLWRhdGEtcGFydFwiLCB0aGlzLm9uRm9ybURhdGFQYXJ0KVxuICAgIHRoaXMucmVxdWVzdEJ1ZmZlci5ldmVudHMub2ZmKFwicmVxdWVzdC1kb25lXCIsIHRoaXMucmVxdWVzdERvbmUpXG4gICAgdGhpcy5yZXF1ZXN0QnVmZmVyLmRlc3Ryb3koKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9yZXF1ZXN0LWJ1ZmZlci9mb3JtLWRhdGEtcGFydC5qc1wiKS5kZWZhdWx0fSBmb3JtRGF0YVBhcnRcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbkZvcm1EYXRhUGFydCA9IChmb3JtRGF0YVBhcnQpID0+IHtcbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGFueT59ICovXG4gICAgY29uc3QgdW5vcmRlcmVkUGFyYW1zID0ge31cblxuICAgIHVub3JkZXJlZFBhcmFtc1tmb3JtRGF0YVBhcnQuZ2V0TmFtZSgpXSA9IGZvcm1EYXRhUGFydC5nZXRWYWx1ZSgpXG5cbiAgICBjb25zdCBwYXJhbXNUb09iamVjdCA9IG5ldyBQYXJhbXNUb09iamVjdCh1bm9yZGVyZWRQYXJhbXMpXG4gICAgY29uc3QgbmV3UGFyYW1zID0gcGFyYW1zVG9PYmplY3QudG9PYmplY3QoKVxuXG4gICAgaW5jb3Jwb3JhdGUodGhpcy5wYXJhbXMsIG5ld1BhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gZGF0YVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZlZWQgPSAoZGF0YSkgPT4gdGhpcy5yZXF1ZXN0QnVmZmVyLmZlZWQoZGF0YSlcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGdldEhlYWRlcihuYW1lKSB7IHJldHVybiB0aGlzLnJlcXVlc3RCdWZmZXIuZ2V0SGVhZGVyKG5hbWUpPy52YWx1ZSB9XG5cbiAgLyoqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICBnZXRIZWFkZXJzKCkgeyByZXR1cm4gdGhpcy5yZXF1ZXN0QnVmZmVyLmdldEhlYWRlcnNIYXNoKCkgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nfSAqL1xuICBnZXRIdHRwTWV0aG9kKCkgeyByZXR1cm4gZGlnZyh0aGlzLCBcInJlcXVlc3RCdWZmZXJcIiwgXCJodHRwTWV0aG9kXCIpIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZ30gKi9cbiAgZ2V0SHR0cFZlcnNpb24oKSB7IHJldHVybiBkaWdnKHRoaXMsIFwicmVxdWVzdEJ1ZmZlclwiLCBcImh0dHBWZXJzaW9uXCIpIH1cblxuICAvKiogQHJldHVybnMge3tob3N0OiBzdHJpbmcsIHBvcnQ6IHN0cmluZywgcHJvdG9jb2w6IHN0cmluZ30gfCBudWxsfSAqL1xuICBfZ2V0SG9zdE1hdGNoKCkge1xuICAgIGNvbnN0IHJhd0hvc3QgPSB0aGlzLnJlcXVlc3RCdWZmZXIuZ2V0SGVhZGVyKFwib3JpZ2luXCIpPy52YWx1ZVxuXG4gICAgaWYgKCFyYXdIb3N0KSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgbWF0Y2ggPSByYXdIb3N0Lm1hdGNoKC9eKC4rKTpcXC9cXC8oLispKHw6KFxcZCspKS8pXG5cbiAgICBpZiAoIW1hdGNoKSB0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IG1hdGNoIGhvc3Q6ICR7cmF3SG9zdH1gKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3RvY29sOiBtYXRjaFsxXSxcbiAgICAgIGhvc3Q6IG1hdGNoWzJdLFxuICAgICAgcG9ydDogbWF0Y2hbNF1cbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZyB8IHZvaWR9ICovXG4gIGdldEhvc3QoKSB7XG4gICAgY29uc3QgcmF3SG9zdFNwbGl0ID0gdGhpcy5yZXF1ZXN0QnVmZmVyLmdldEhlYWRlcihcImhvc3RcIik/LnZhbHVlPy5zcGxpdChcIjpcIilcblxuICAgIGlmIChyYXdIb3N0U3BsaXQgJiYgcmF3SG9zdFNwbGl0WzBdKSByZXR1cm4gcmF3SG9zdFNwbGl0WzBdXG4gIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZ30gKi9cbiAgZ2V0UGF0aCgpIHsgcmV0dXJuIGRpZ2codGhpcywgXCJyZXF1ZXN0QnVmZmVyXCIsIFwicGF0aFwiKSB9XG5cbiAgLyoqIEByZXR1cm5zIHtudW1iZXIgfCB2b2lkfSAqL1xuICBnZXRQb3J0KCkge1xuICAgIGNvbnN0IHJhd0hvc3RTcGxpdCA9IHRoaXMucmVxdWVzdEJ1ZmZlci5nZXRIZWFkZXIoXCJob3N0XCIpPy52YWx1ZT8uc3BsaXQoXCI6XCIpXG4gICAgY29uc3QgaHR0cE1ldGhvZCA9IHRoaXMuZ2V0SHR0cE1ldGhvZCgpXG5cbiAgICBpZiAocmF3SG9zdFNwbGl0ICYmIHJhd0hvc3RTcGxpdFsxXSkge1xuICAgICAgcmV0dXJuIHBhcnNlSW50KHJhd0hvc3RTcGxpdFsxXSlcbiAgICB9IGVsc2UgaWYgKGh0dHBNZXRob2QgPT0gXCJodHRwXCIpIHtcbiAgICAgIHJldHVybiA4MFxuICAgIH0gZWxzZSBpZiAoaHR0cE1ldGhvZCA9PSBcImh0dHBzXCIpIHtcbiAgICAgIHJldHVybiA0NDNcbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZyB8IG51bGx9ICovXG4gIGdldFByb3RvY29sKCkgeyByZXR1cm4gdGhpcy5fZ2V0SG9zdE1hdGNoKCk/LnByb3RvY29sIH1cblxuICAvKiogQHJldHVybnMge1JlcXVlc3RCdWZmZXJ9ICovXG4gIGdldFJlcXVlc3RCdWZmZXIoKSB7IHJldHVybiB0aGlzLnJlcXVlc3RCdWZmZXIgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgcmVxdWVzdERvbmUgPSAoKSA9PiB7XG4gICAgaW5jb3Jwb3JhdGUodGhpcy5wYXJhbXMsIHRoaXMucmVxdWVzdEJ1ZmZlci5wYXJhbXMpXG5cbiAgICB0aGlzLnN0YXRlID0gXCJkb25lXCJcbiAgICB0aGlzLmV2ZW50cy5lbWl0KFwiZG9uZVwiKVxuICB9XG59XG4iXX0=
|
|
@@ -2,19 +2,19 @@ export default class VelociousHttpServerClientRequestRunner {
|
|
|
2
2
|
/**
|
|
3
3
|
* @param {object} args
|
|
4
4
|
* @param {import("../../configuration.js").default} args.configuration
|
|
5
|
-
* @param {
|
|
5
|
+
* @param {any} args.request
|
|
6
6
|
*/
|
|
7
7
|
constructor({ configuration, request }: {
|
|
8
8
|
configuration: import("../../configuration.js").default;
|
|
9
|
-
request:
|
|
9
|
+
request: any;
|
|
10
10
|
});
|
|
11
11
|
events: EventEmitter<[never]>;
|
|
12
12
|
logger: Logger;
|
|
13
13
|
configuration: import("../../configuration.js").default;
|
|
14
|
-
request:
|
|
14
|
+
request: any;
|
|
15
15
|
response: Response;
|
|
16
16
|
state: string;
|
|
17
|
-
getRequest():
|
|
17
|
+
getRequest(): any;
|
|
18
18
|
getState(): string;
|
|
19
19
|
run(): Promise<void>;
|
|
20
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-runner.d.ts","sourceRoot":"","sources":["../../../../src/http-server/client/request-runner.js"],"names":[],"mappings":"AASA;IAGE;;;;OAIG;IACH,wCAHG;QAAuD,aAAa,EAA5D,OAAO,wBAAwB,EAAE,OAAO;
|
|
1
|
+
{"version":3,"file":"request-runner.d.ts","sourceRoot":"","sources":["../../../../src/http-server/client/request-runner.js"],"names":[],"mappings":"AASA;IAGE;;;;OAIG;IACH,wCAHG;QAAuD,aAAa,EAA5D,OAAO,wBAAwB,EAAE,OAAO;QAC9B,OAAO,EAAjB,GAAG;KACb,EAUA;IAhBD,8BAA2B;IAWzB,eAA8B;IAC9B,wDAAkC;IAClC,aAAsB;IACtB,mBAA6C;IAC7C,cAAsB;IAGxB,kBAAoC;IACpC,mBAAgC;IAEhC,qBAmCC;CACF;yBA/DwB,QAAQ;uBACZ,iBAAiB;qBACjB,eAAe"}
|
|
@@ -10,7 +10,7 @@ export default class VelociousHttpServerClientRequestRunner {
|
|
|
10
10
|
/**
|
|
11
11
|
* @param {object} args
|
|
12
12
|
* @param {import("../../configuration.js").default} args.configuration
|
|
13
|
-
* @param {
|
|
13
|
+
* @param {any} args.request
|
|
14
14
|
*/
|
|
15
15
|
constructor({ configuration, request }) {
|
|
16
16
|
if (!configuration)
|
|
@@ -56,4 +56,4 @@ export default class VelociousHttpServerClientRequestRunner {
|
|
|
56
56
|
this.events.emit("done", this);
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1ydW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QtcnVubmVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLGdCQUFnQixNQUFNLGtDQUFrQyxDQUFBO0FBQy9ELE9BQU8sV0FBVyxNQUFNLDZCQUE2QixDQUFBO0FBQ3JELE9BQU8sWUFBWSxNQUFNLFFBQVEsQ0FBQTtBQUNqQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0saUJBQWlCLENBQUE7QUFDdEMsT0FBTyxRQUFRLE1BQU0sZUFBZSxDQUFBO0FBQ3BDLE9BQU8sY0FBYyxNQUFNLDBCQUEwQixDQUFBO0FBRXJELE1BQU0sQ0FBQyxPQUFPLE9BQU8sc0NBQXNDO0lBQ3pELE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFBO0lBRTNCOzs7O09BSUc7SUFDSCxZQUFZLEVBQUMsYUFBYSxFQUFFLE9BQU8sRUFBQztRQUNsQyxJQUFJLENBQUMsYUFBYTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQTtRQUM3RCxJQUFJLENBQUMsT0FBTztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtRQUVqRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO1FBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUMsRUFBQyxhQUFhLEVBQUMsQ0FBQyxDQUFBO1FBQzdDLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFBO0lBQ3hCLENBQUM7SUFFRCxVQUFVLEtBQUssT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFBLENBQUMsQ0FBQztJQUNwQyxRQUFRLEtBQUssT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFBLENBQUMsQ0FBQztJQUVoQyxLQUFLLENBQUMsR0FBRztRQUNQLE1BQU0sRUFBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBQyxHQUFHLElBQUksQ0FBQTtRQUUvQyxJQUFJLENBQUMsT0FBTztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUE7UUFFNUMsSUFBSSxDQUFDO1lBQ0gsMkdBQTJHO1lBQzNHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUE7WUFFL0gsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFBO1lBRXBDLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ1QsTUFBTSxJQUFJLENBQUMsRUFBQyxPQUFPLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQTtZQUNqQyxDQUFDO1lBRUQsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLElBQUksU0FBUyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDcEYsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtnQkFDdkIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUN0QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQTtnQkFDdEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQUMsRUFBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQUE7Z0JBRTdFLE1BQU0sY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFBO1lBQ2hDLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUU1QixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsZ0NBQWdDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtZQUUxRyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ3ZCLFFBQVEsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDOUIsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFBO1FBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUNoQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEJhY2t0cmFjZUNsZWFuZXIgZnJvbSBcIi4uLy4uL3V0aWxzL2JhY2t0cmFjZS1jbGVhbmVyLmpzXCJcbmltcG9ydCBlbnN1cmVFcnJvciBmcm9tIFwiLi4vLi4vdXRpbHMvZW5zdXJlLWVycm9yLmpzXCJcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50c1wiXG5pbXBvcnQge0xvZ2dlcn0gZnJvbSBcIi4uLy4uL2xvZ2dlci5qc1wiXG5pbXBvcnQgUmVzcG9uc2UgZnJvbSBcIi4vcmVzcG9uc2UuanNcIlxuaW1wb3J0IFJvdXRlc1Jlc29sdmVyIGZyb20gXCIuLi8uLi9yb3V0ZXMvcmVzb2x2ZXIuanNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNIdHRwU2VydmVyQ2xpZW50UmVxdWVzdFJ1bm5lciB7XG4gIGV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gYXJncy5jb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSB7YW55fSBhcmdzLnJlcXVlc3RcbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjb25maWd1cmF0aW9uLCByZXF1ZXN0fSkge1xuICAgIGlmICghY29uZmlndXJhdGlvbikgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29uZmlndXJhdGlvbiBnaXZlblwiKVxuICAgIGlmICghcmVxdWVzdCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVxdWVzdCBnaXZlblwiKVxuXG4gICAgdGhpcy5sb2dnZXIgPSBuZXcgTG9nZ2VyKHRoaXMpXG4gICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvblxuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3RcbiAgICB0aGlzLnJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKHtjb25maWd1cmF0aW9ufSlcbiAgICB0aGlzLnN0YXRlID0gXCJydW5uaW5nXCJcbiAgfVxuXG4gIGdldFJlcXVlc3QoKSB7IHJldHVybiB0aGlzLnJlcXVlc3QgfVxuICBnZXRTdGF0ZSgpIHsgcmV0dXJuIHRoaXMuc3RhdGUgfVxuXG4gIGFzeW5jIHJ1bigpIHtcbiAgICBjb25zdCB7Y29uZmlndXJhdGlvbiwgcmVxdWVzdCwgcmVzcG9uc2V9ID0gdGhpc1xuXG4gICAgaWYgKCFyZXF1ZXN0KSB0aHJvdyBuZXcgRXJyb3IoXCJObyByZXF1ZXN0P1wiKVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEJlZm9yZSB3ZSBjaGVja2VkIGlmIHRoZSBzZWMtZmV0Y2gtbW9kZSB3YXMgXCJjb3JzXCIsIGJ1dCBpdCBzZWVtcyB0aGUgc2VjLWZldGNoLW1vZGUgaXNuJ3QgYWx3YXlzIHByZXNlbnRcbiAgICAgIGF3YWl0IHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcIlJ1biBDT1JTXCIsIHtodHRwTWV0aG9kOiByZXF1ZXN0Lmh0dHBNZXRob2QoKSwgc2VjRmV0Y2hNb2RlOiByZXF1ZXN0LmhlYWRlcihcInNlYy1mZXRjaC1tb2RlXCIpfV0pXG5cbiAgICAgIGNvbnN0IGNvcnMgPSBjb25maWd1cmF0aW9uLmdldENvcnMoKVxuXG4gICAgICBpZiAoY29ycykge1xuICAgICAgICBhd2FpdCBjb3JzKHtyZXF1ZXN0LCByZXNwb25zZX0pXG4gICAgICB9XG5cbiAgICAgIGlmIChyZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSBcIk9QVElPTlNcIiAmJiByZXF1ZXN0LmhlYWRlcihcInNlYy1mZXRjaC1tb2RlXCIpID09IFwiY29yc1wiKSB7XG4gICAgICAgIHJlc3BvbnNlLnNldFN0YXR1cygyMDApXG4gICAgICAgIHJlc3BvbnNlLnNldEJvZHkoXCJcIilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9nZ2VyLmRlYnVnKFwiUnVuIHJlcXVlc3RcIilcbiAgICAgICAgY29uc3Qgcm91dGVzUmVzb2x2ZXIgPSBuZXcgUm91dGVzUmVzb2x2ZXIoe2NvbmZpZ3VyYXRpb24sIHJlcXVlc3QsIHJlc3BvbnNlfSlcblxuICAgICAgICBhd2FpdCByb3V0ZXNSZXNvbHZlci5yZXNvbHZlKClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGVuc3VyZUVycm9yKGUpXG5cbiAgICAgIGF3YWl0IHRoaXMubG9nZ2VyLmVycm9yKCgpID0+IFtgRXJyb3Igd2hpbGUgcnVubmluZyByZXF1ZXN0OiAke0JhY2t0cmFjZUNsZWFuZXIuZ2V0Q2xlYW5lZFN0YWNrKGVycm9yKX1gXSlcblxuICAgICAgcmVzcG9uc2Uuc2V0U3RhdHVzKDUwMClcbiAgICAgIHJlc3BvbnNlLnNldEVycm9yQm9keShlcnJvcilcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gXCJkb25lXCJcbiAgICB0aGlzLmV2ZW50cy5lbWl0KFwiZG9uZVwiLCB0aGlzKVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export default class MemoryUploadedFile extends UploadedFile {
|
|
2
|
+
/**
|
|
3
|
+
* @param {object} args
|
|
4
|
+
* @param {Buffer} args.buffer
|
|
5
|
+
* @param {string} args.fieldName
|
|
6
|
+
* @param {string} args.filename
|
|
7
|
+
* @param {string | undefined} args.contentType
|
|
8
|
+
* @param {number} args.size
|
|
9
|
+
*/
|
|
10
|
+
constructor({ buffer, contentType, fieldName, filename, size }: {
|
|
11
|
+
buffer: Buffer;
|
|
12
|
+
fieldName: string;
|
|
13
|
+
filename: string;
|
|
14
|
+
contentType: string | undefined;
|
|
15
|
+
size: number;
|
|
16
|
+
});
|
|
17
|
+
buffer: Buffer<ArrayBufferLike>;
|
|
18
|
+
getBuffer(): Buffer<ArrayBufferLike>;
|
|
19
|
+
}
|
|
20
|
+
import UploadedFile from "./uploaded-file.js";
|
|
21
|
+
//# sourceMappingURL=memory-uploaded-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-uploaded-file.d.ts","sourceRoot":"","sources":["../../../../../src/http-server/client/uploaded-file/memory-uploaded-file.js"],"names":[],"mappings":"AAKA;IACE;;;;;;;OAOG;IACH,gEANG;QAAqB,MAAM,EAAnB,MAAM;QACO,SAAS,EAAtB,MAAM;QACO,QAAQ,EAArB,MAAM;QACmB,WAAW,EAApC,MAAM,GAAG,SAAS;QACL,IAAI,EAAjB,MAAM;KAChB,EAKA;IADC,gCAAoB;IAGtB,qCAAkC;CASnC;yBA1BwB,oBAAoB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
import fs from "fs/promises";
|
|
3
|
+
import UploadedFile from "./uploaded-file.js";
|
|
4
|
+
export default class MemoryUploadedFile extends UploadedFile {
|
|
5
|
+
/**
|
|
6
|
+
* @param {object} args
|
|
7
|
+
* @param {Buffer} args.buffer
|
|
8
|
+
* @param {string} args.fieldName
|
|
9
|
+
* @param {string} args.filename
|
|
10
|
+
* @param {string | undefined} args.contentType
|
|
11
|
+
* @param {number} args.size
|
|
12
|
+
*/
|
|
13
|
+
constructor({ buffer, contentType, fieldName, filename, size }) {
|
|
14
|
+
super({ contentType, fieldName, filename, size });
|
|
15
|
+
this.buffer = buffer;
|
|
16
|
+
}
|
|
17
|
+
getBuffer() { return this.buffer; }
|
|
18
|
+
/**
|
|
19
|
+
* @param {string} destinationPath
|
|
20
|
+
* @returns {Promise<void>}
|
|
21
|
+
*/
|
|
22
|
+
async saveTo(destinationPath) {
|
|
23
|
+
await fs.writeFile(destinationPath, this.buffer);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LXVwbG9hZGVkLWZpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvaHR0cC1zZXJ2ZXIvY2xpZW50L3VwbG9hZGVkLWZpbGUvbWVtb3J5LXVwbG9hZGVkLWZpbGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUM1QixPQUFPLFlBQVksTUFBTSxvQkFBb0IsQ0FBQTtBQUU3QyxNQUFNLENBQUMsT0FBTyxPQUFPLGtCQUFtQixTQUFRLFlBQVk7SUFDMUQ7Ozs7Ozs7T0FPRztJQUNILFlBQVksRUFBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFDO1FBQzFELEtBQUssQ0FBQyxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFFL0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7SUFDdEIsQ0FBQztJQUVELFNBQVMsS0FBSyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUEsQ0FBQyxDQUFDO0lBRWxDOzs7T0FHRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsZUFBZTtRQUMxQixNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNsRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IGZzIGZyb20gXCJmcy9wcm9taXNlc1wiXG5pbXBvcnQgVXBsb2FkZWRGaWxlIGZyb20gXCIuL3VwbG9hZGVkLWZpbGUuanNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZW1vcnlVcGxvYWRlZEZpbGUgZXh0ZW5kcyBVcGxvYWRlZEZpbGUge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3NcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGFyZ3MuYnVmZmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmZpZWxkTmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5maWxlbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gYXJncy5jb250ZW50VHlwZVxuICAgKiBAcGFyYW0ge251bWJlcn0gYXJncy5zaXplXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7YnVmZmVyLCBjb250ZW50VHlwZSwgZmllbGROYW1lLCBmaWxlbmFtZSwgc2l6ZX0pIHtcbiAgICBzdXBlcih7Y29udGVudFR5cGUsIGZpZWxkTmFtZSwgZmlsZW5hbWUsIHNpemV9KVxuXG4gICAgdGhpcy5idWZmZXIgPSBidWZmZXJcbiAgfVxuXG4gIGdldEJ1ZmZlcigpIHsgcmV0dXJuIHRoaXMuYnVmZmVyIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRlc3RpbmF0aW9uUGF0aFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHNhdmVUbyhkZXN0aW5hdGlvblBhdGgpIHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZGVzdGluYXRpb25QYXRoLCB0aGlzLmJ1ZmZlcilcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export default class TemporaryUploadedFile extends UploadedFile {
|
|
2
|
+
/**
|
|
3
|
+
* @param {object} args
|
|
4
|
+
* @param {string} args.path
|
|
5
|
+
* @param {string} args.fieldName
|
|
6
|
+
* @param {string} args.filename
|
|
7
|
+
* @param {string | undefined} args.contentType
|
|
8
|
+
* @param {number} args.size
|
|
9
|
+
*/
|
|
10
|
+
constructor({ contentType, fieldName, filename, path, size }: {
|
|
11
|
+
path: string;
|
|
12
|
+
fieldName: string;
|
|
13
|
+
filename: string;
|
|
14
|
+
contentType: string | undefined;
|
|
15
|
+
size: number;
|
|
16
|
+
});
|
|
17
|
+
pathValue: string;
|
|
18
|
+
getPath(): string;
|
|
19
|
+
}
|
|
20
|
+
import UploadedFile from "./uploaded-file.js";
|
|
21
|
+
//# sourceMappingURL=temporary-uploaded-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"temporary-uploaded-file.d.ts","sourceRoot":"","sources":["../../../../../src/http-server/client/uploaded-file/temporary-uploaded-file.js"],"names":[],"mappings":"AAKA;IACE;;;;;;;OAOG;IACH,8DANG;QAAqB,IAAI,EAAjB,MAAM;QACO,SAAS,EAAtB,MAAM;QACO,QAAQ,EAArB,MAAM;QACmB,WAAW,EAApC,MAAM,GAAG,SAAS;QACL,IAAI,EAAjB,MAAM;KAChB,EAKA;IADC,kBAAqB;IAGvB,kBAAmC;CASpC;yBA1BwB,oBAAoB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
import fs from "fs/promises";
|
|
3
|
+
import UploadedFile from "./uploaded-file.js";
|
|
4
|
+
export default class TemporaryUploadedFile extends UploadedFile {
|
|
5
|
+
/**
|
|
6
|
+
* @param {object} args
|
|
7
|
+
* @param {string} args.path
|
|
8
|
+
* @param {string} args.fieldName
|
|
9
|
+
* @param {string} args.filename
|
|
10
|
+
* @param {string | undefined} args.contentType
|
|
11
|
+
* @param {number} args.size
|
|
12
|
+
*/
|
|
13
|
+
constructor({ contentType, fieldName, filename, path, size }) {
|
|
14
|
+
super({ contentType, fieldName, filename, size });
|
|
15
|
+
this.pathValue = path;
|
|
16
|
+
}
|
|
17
|
+
getPath() { return this.pathValue; }
|
|
18
|
+
/**
|
|
19
|
+
* @param {string} destinationPath
|
|
20
|
+
* @returns {Promise<void>}
|
|
21
|
+
*/
|
|
22
|
+
async saveTo(destinationPath) {
|
|
23
|
+
await fs.copyFile(this.pathValue, destinationPath);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcG9yYXJ5LXVwbG9hZGVkLWZpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvaHR0cC1zZXJ2ZXIvY2xpZW50L3VwbG9hZGVkLWZpbGUvdGVtcG9yYXJ5LXVwbG9hZGVkLWZpbGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUM1QixPQUFPLFlBQVksTUFBTSxvQkFBb0IsQ0FBQTtBQUU3QyxNQUFNLENBQUMsT0FBTyxPQUFPLHFCQUFzQixTQUFRLFlBQVk7SUFDN0Q7Ozs7Ozs7T0FPRztJQUNILFlBQVksRUFBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFDO1FBQ3hELEtBQUssQ0FBQyxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFFL0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUE7SUFDdkIsQ0FBQztJQUVELE9BQU8sS0FBSyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUEsQ0FBQyxDQUFDO0lBRW5DOzs7T0FHRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsZUFBZTtRQUMxQixNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQTtJQUNwRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IGZzIGZyb20gXCJmcy9wcm9taXNlc1wiXG5pbXBvcnQgVXBsb2FkZWRGaWxlIGZyb20gXCIuL3VwbG9hZGVkLWZpbGUuanNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZW1wb3JhcnlVcGxvYWRlZEZpbGUgZXh0ZW5kcyBVcGxvYWRlZEZpbGUge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3NcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MucGF0aFxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5maWVsZE5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuZmlsZW5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IGFyZ3MuY29udGVudFR5cGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFyZ3Muc2l6ZVxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbnRlbnRUeXBlLCBmaWVsZE5hbWUsIGZpbGVuYW1lLCBwYXRoLCBzaXplfSkge1xuICAgIHN1cGVyKHtjb250ZW50VHlwZSwgZmllbGROYW1lLCBmaWxlbmFtZSwgc2l6ZX0pXG5cbiAgICB0aGlzLnBhdGhWYWx1ZSA9IHBhdGhcbiAgfVxuXG4gIGdldFBhdGgoKSB7IHJldHVybiB0aGlzLnBhdGhWYWx1ZSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkZXN0aW5hdGlvblBhdGhcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBzYXZlVG8oZGVzdGluYXRpb25QYXRoKSB7XG4gICAgYXdhaXQgZnMuY29weUZpbGUodGhpcy5wYXRoVmFsdWUsIGRlc3RpbmF0aW9uUGF0aClcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export default class UploadedFile {
|
|
2
|
+
/**
|
|
3
|
+
* @param {object} args
|
|
4
|
+
* @param {string} args.fieldName
|
|
5
|
+
* @param {string} args.filename
|
|
6
|
+
* @param {string | undefined} args.contentType
|
|
7
|
+
* @param {number} args.size
|
|
8
|
+
*/
|
|
9
|
+
constructor({ contentType, fieldName, filename, size }: {
|
|
10
|
+
fieldName: string;
|
|
11
|
+
filename: string;
|
|
12
|
+
contentType: string | undefined;
|
|
13
|
+
size: number;
|
|
14
|
+
});
|
|
15
|
+
contentTypeValue: string;
|
|
16
|
+
fieldNameValue: string;
|
|
17
|
+
filenameValue: string;
|
|
18
|
+
sizeValue: number;
|
|
19
|
+
contentType(): string;
|
|
20
|
+
fieldName(): string;
|
|
21
|
+
filename(): string;
|
|
22
|
+
size(): number;
|
|
23
|
+
/**
|
|
24
|
+
* @param {string} _destinationPath
|
|
25
|
+
* @returns {Promise<void>}
|
|
26
|
+
*/
|
|
27
|
+
saveTo(_destinationPath: string): Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=uploaded-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uploaded-file.d.ts","sourceRoot":"","sources":["../../../../../src/http-server/client/uploaded-file/uploaded-file.js"],"names":[],"mappings":"AAEA;IACE;;;;;;OAMG;IACH,wDALG;QAAqB,SAAS,EAAtB,MAAM;QACO,QAAQ,EAArB,MAAM;QACmB,WAAW,EAApC,MAAM,GAAG,SAAS;QACL,IAAI,EAAjB,MAAM;KAChB,EAUA;IAJC,yBAAmC;IACnC,uBAA+B;IAC/B,sBAA6B;IAC7B,kBAAqB;IAGvB,sBAA8C;IAC9C,oBAA0C;IAC1C,mBAAwC;IACxC,eAAgC;IAEhC;;;OAGG;IACH,yBAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAIzB;CACF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
export default class UploadedFile {
|
|
3
|
+
/**
|
|
4
|
+
* @param {object} args
|
|
5
|
+
* @param {string} args.fieldName
|
|
6
|
+
* @param {string} args.filename
|
|
7
|
+
* @param {string | undefined} args.contentType
|
|
8
|
+
* @param {number} args.size
|
|
9
|
+
*/
|
|
10
|
+
constructor({ contentType, fieldName, filename, size }) {
|
|
11
|
+
if (!fieldName)
|
|
12
|
+
throw new Error("fieldName is required");
|
|
13
|
+
if (!filename)
|
|
14
|
+
throw new Error("filename is required");
|
|
15
|
+
if (typeof size !== "number")
|
|
16
|
+
throw new Error("size is required");
|
|
17
|
+
this.contentTypeValue = contentType;
|
|
18
|
+
this.fieldNameValue = fieldName;
|
|
19
|
+
this.filenameValue = filename;
|
|
20
|
+
this.sizeValue = size;
|
|
21
|
+
}
|
|
22
|
+
contentType() { return this.contentTypeValue; }
|
|
23
|
+
fieldName() { return this.fieldNameValue; }
|
|
24
|
+
filename() { return this.filenameValue; }
|
|
25
|
+
size() { return this.sizeValue; }
|
|
26
|
+
/**
|
|
27
|
+
* @param {string} _destinationPath
|
|
28
|
+
* @returns {Promise<void>}
|
|
29
|
+
*/
|
|
30
|
+
async saveTo(_destinationPath) {
|
|
31
|
+
throw new Error("Not implemented");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkZWQtZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9odHRwLXNlcnZlci9jbGllbnQvdXBsb2FkZWQtZmlsZS91cGxvYWRlZC1maWxlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixNQUFNLENBQUMsT0FBTyxPQUFPLFlBQVk7SUFDL0I7Ozs7OztPQU1HO0lBQ0gsWUFBWSxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBQztRQUNsRCxJQUFJLENBQUMsU0FBUztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtRQUN4RCxJQUFJLENBQUMsUUFBUTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtRQUN0RCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUE7UUFFakUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFdBQVcsQ0FBQTtRQUNuQyxJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQTtRQUMvQixJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQTtRQUM3QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTtJQUN2QixDQUFDO0lBRUQsV0FBVyxLQUFLLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFBLENBQUMsQ0FBQztJQUM5QyxTQUFTLEtBQUssT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFBLENBQUMsQ0FBQztJQUMxQyxRQUFRLEtBQUssT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFBLENBQUMsQ0FBQztJQUN4QyxJQUFJLEtBQUssT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFBLENBQUMsQ0FBQztJQUVoQzs7O09BR0c7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLGdCQUFnQjtRQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUE7SUFDcEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVwbG9hZGVkRmlsZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5maWVsZE5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuZmlsZW5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IGFyZ3MuY29udGVudFR5cGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFyZ3Muc2l6ZVxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbnRlbnRUeXBlLCBmaWVsZE5hbWUsIGZpbGVuYW1lLCBzaXplfSkge1xuICAgIGlmICghZmllbGROYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJmaWVsZE5hbWUgaXMgcmVxdWlyZWRcIilcbiAgICBpZiAoIWZpbGVuYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJmaWxlbmFtZSBpcyByZXF1aXJlZFwiKVxuICAgIGlmICh0eXBlb2Ygc2l6ZSAhPT0gXCJudW1iZXJcIikgdGhyb3cgbmV3IEVycm9yKFwic2l6ZSBpcyByZXF1aXJlZFwiKVxuXG4gICAgdGhpcy5jb250ZW50VHlwZVZhbHVlID0gY29udGVudFR5cGVcbiAgICB0aGlzLmZpZWxkTmFtZVZhbHVlID0gZmllbGROYW1lXG4gICAgdGhpcy5maWxlbmFtZVZhbHVlID0gZmlsZW5hbWVcbiAgICB0aGlzLnNpemVWYWx1ZSA9IHNpemVcbiAgfVxuXG4gIGNvbnRlbnRUeXBlKCkgeyByZXR1cm4gdGhpcy5jb250ZW50VHlwZVZhbHVlIH1cbiAgZmllbGROYW1lKCkgeyByZXR1cm4gdGhpcy5maWVsZE5hbWVWYWx1ZSB9XG4gIGZpbGVuYW1lKCkgeyByZXR1cm4gdGhpcy5maWxlbmFtZVZhbHVlIH1cbiAgc2l6ZSgpIHsgcmV0dXJuIHRoaXMuc2l6ZVZhbHVlIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IF9kZXN0aW5hdGlvblBhdGhcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBzYXZlVG8oX2Rlc3RpbmF0aW9uUGF0aCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpXG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export default class VelociousHttpServerClientWebsocketRequest {
|
|
2
|
+
/**
|
|
3
|
+
* @param {object} args
|
|
4
|
+
* @param {any} [args.body]
|
|
5
|
+
* @param {Record<string, string>} [args.headers]
|
|
6
|
+
* @param {string} args.method
|
|
7
|
+
* @param {string} args.path
|
|
8
|
+
* @param {Record<string, any>} [args.params]
|
|
9
|
+
* @param {string} [args.remoteAddress]
|
|
10
|
+
*/
|
|
11
|
+
constructor({ body, headers, method, params, path, remoteAddress }: {
|
|
12
|
+
body?: any;
|
|
13
|
+
headers?: Record<string, string>;
|
|
14
|
+
method: string;
|
|
15
|
+
path: string;
|
|
16
|
+
params?: Record<string, any>;
|
|
17
|
+
remoteAddress?: string;
|
|
18
|
+
});
|
|
19
|
+
body: any;
|
|
20
|
+
headersMap: {};
|
|
21
|
+
method: string;
|
|
22
|
+
paramsObject: any;
|
|
23
|
+
_path: string;
|
|
24
|
+
remoteAddressValue: string;
|
|
25
|
+
baseURL(): string;
|
|
26
|
+
header(name: any): any;
|
|
27
|
+
headers(): {};
|
|
28
|
+
httpMethod(): string;
|
|
29
|
+
httpVersion(): string;
|
|
30
|
+
host(): any;
|
|
31
|
+
hostWithPort(): any;
|
|
32
|
+
origin(): any;
|
|
33
|
+
path(): string;
|
|
34
|
+
params(): any;
|
|
35
|
+
port(): number;
|
|
36
|
+
protocol(): any;
|
|
37
|
+
remoteAddress(): string;
|
|
38
|
+
_parseQueryParams(): Record<string, any>;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=websocket-request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-request.d.ts","sourceRoot":"","sources":["../../../../src/http-server/client/websocket-request.js"],"names":[],"mappings":"AAIA;IACE;;;;;;;;OAQG;IACH,oEAPG;QAAmB,IAAI,GAAf,GAAG;QAC2B,OAAO,GAArC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;QACT,MAAM,EAAnB,MAAM;QACO,IAAI,EAAjB,MAAM;QACqB,MAAM,GAAjC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;QACL,aAAa,GAA3B,MAAM;KAAsB,EA4BtC;IAtBC,UAAgB;IAChB,eAAoB;IACpB,eAAkC;IAClC,kBAAsB;IACtB,cAAiB;IACjB,2BAAuC;IAmBzC,kBAKC;IAED,uBAAmE;IAEnE,cAAoC;IAEpC,qBAAmC;IAEnC,sBAAoC;IAEpC,YAAkD;IAElD,oBAQC;IAED,cAAyC;IAEzC,eAA4B;IAE5B,cAAqC;IAErC,eAKC;IAED,gBAKC;IAED,wBAAkD;IAElD,yCAeC;CACF"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
import querystring from "querystring";
|
|
3
|
+
export default class VelociousHttpServerClientWebsocketRequest {
|
|
4
|
+
/**
|
|
5
|
+
* @param {object} args
|
|
6
|
+
* @param {any} [args.body]
|
|
7
|
+
* @param {Record<string, string>} [args.headers]
|
|
8
|
+
* @param {string} args.method
|
|
9
|
+
* @param {string} args.path
|
|
10
|
+
* @param {Record<string, any>} [args.params]
|
|
11
|
+
* @param {string} [args.remoteAddress]
|
|
12
|
+
*/
|
|
13
|
+
constructor({ body, headers, method, params, path, remoteAddress }) {
|
|
14
|
+
if (!method)
|
|
15
|
+
throw new Error("method is required");
|
|
16
|
+
if (!path)
|
|
17
|
+
throw new Error("path is required");
|
|
18
|
+
this.body = body;
|
|
19
|
+
this.headersMap = {};
|
|
20
|
+
this.method = method.toUpperCase();
|
|
21
|
+
this.paramsObject = {};
|
|
22
|
+
this._path = path;
|
|
23
|
+
this.remoteAddressValue = remoteAddress;
|
|
24
|
+
if (headers) {
|
|
25
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
26
|
+
this.headersMap[key.toLowerCase()] = value;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
if (params)
|
|
30
|
+
this.paramsObject = { ...params };
|
|
31
|
+
if (this.body && typeof this.body === "object")
|
|
32
|
+
this.paramsObject = { ...this.paramsObject, ...this.body };
|
|
33
|
+
if (this.body && typeof this.body === "object" && !this.headersMap["content-type"]) {
|
|
34
|
+
this.headersMap["content-type"] = "application/json";
|
|
35
|
+
}
|
|
36
|
+
const queryParams = this._parseQueryParams();
|
|
37
|
+
this.paramsObject = { ...queryParams, ...this.paramsObject };
|
|
38
|
+
}
|
|
39
|
+
baseURL() {
|
|
40
|
+
const protocol = this.protocol();
|
|
41
|
+
const host = this.hostWithPort();
|
|
42
|
+
if (protocol && host)
|
|
43
|
+
return `${protocol}://${host}`;
|
|
44
|
+
}
|
|
45
|
+
header(name) { return this.headersMap[name.toLowerCase()] || null; }
|
|
46
|
+
headers() { return this.headersMap; }
|
|
47
|
+
httpMethod() { return this.method; }
|
|
48
|
+
httpVersion() { return "websocket"; }
|
|
49
|
+
host() { return this.header("host") || undefined; }
|
|
50
|
+
hostWithPort() {
|
|
51
|
+
const host = this.host();
|
|
52
|
+
const port = this.port();
|
|
53
|
+
if (!host)
|
|
54
|
+
return;
|
|
55
|
+
if (!port)
|
|
56
|
+
return host;
|
|
57
|
+
return `${host}:${port}`;
|
|
58
|
+
}
|
|
59
|
+
origin() { return this.header("origin"); }
|
|
60
|
+
path() { return this._path; }
|
|
61
|
+
params() { return this.paramsObject; }
|
|
62
|
+
port() {
|
|
63
|
+
const hostHeader = this.header("host");
|
|
64
|
+
const match = hostHeader?.match(/:(\d+)$/);
|
|
65
|
+
if (match)
|
|
66
|
+
return parseInt(match[1]);
|
|
67
|
+
}
|
|
68
|
+
protocol() {
|
|
69
|
+
const origin = this.origin();
|
|
70
|
+
const match = origin?.match(/^(.+):\/\//);
|
|
71
|
+
return match?.[1];
|
|
72
|
+
}
|
|
73
|
+
remoteAddress() { return this.remoteAddressValue; }
|
|
74
|
+
_parseQueryParams() {
|
|
75
|
+
const query = this._path.split("?")[1];
|
|
76
|
+
if (!query)
|
|
77
|
+
return {};
|
|
78
|
+
/** @type {Record<string, any>} */
|
|
79
|
+
const unparsedParams = querystring.parse(query);
|
|
80
|
+
/** @type {Record<string, any>} */
|
|
81
|
+
const params = {};
|
|
82
|
+
for (const key of Object.keys(unparsedParams)) {
|
|
83
|
+
params[key] = unparsedParams[key];
|
|
84
|
+
}
|
|
85
|
+
return params;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LXJlcXVlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLFdBQVcsTUFBTSxhQUFhLENBQUE7QUFFckMsTUFBTSxDQUFDLE9BQU8sT0FBTyx5Q0FBeUM7SUFDNUQ7Ozs7Ozs7O09BUUc7SUFDSCxZQUFZLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUM7UUFDOUQsSUFBSSxDQUFDLE1BQU07WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUE7UUFDbEQsSUFBSSxDQUFDLElBQUk7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUE7UUFFOUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7UUFDaEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUE7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUE7UUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUE7UUFDakIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGFBQWEsQ0FBQTtRQUV2QyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUE7WUFDNUMsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLE1BQU07WUFBRSxJQUFJ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SUFFbEQsaUJBQWlCO1FBQ2YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFFdEMsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLEVBQUUsQ0FBQTtRQUVyQixrQ0FBa0M7UUFDbEMsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUMvQyxrQ0FBa0M7UUFDbEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFBO1FBRWpCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDbkMsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBxdWVyeXN0cmluZyBmcm9tIFwicXVlcnlzdHJpbmdcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNIdHRwU2VydmVyQ2xpZW50V2Vic29ja2V0UmVxdWVzdCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0ge2FueX0gW2FyZ3MuYm9keV1cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBbYXJncy5oZWFkZXJzXVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXRob2RcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MucGF0aFxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IFthcmdzLnBhcmFtc11cbiAgICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnJlbW90ZUFkZHJlc3NdXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7Ym9keSwgaGVhZGVycywgbWV0aG9kLCBwYXJhbXMsIHBhdGgsIHJlbW90ZUFkZHJlc3N9KSB7XG4gICAgaWYgKCFtZXRob2QpIHRocm93IG5ldyBFcnJvcihcIm1ldGhvZCBpcyByZXF1aXJlZFwiKVxuICAgIGlmICghcGF0aCkgdGhyb3cgbmV3IEVycm9yKFwicGF0aCBpcyByZXF1aXJlZFwiKVxuXG4gICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIHRoaXMuaGVhZGVyc01hcCA9IHt9XG4gICAgdGhpcy5tZXRob2QgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuICAgIHRoaXMucGFyYW1zT2JqZWN0ID0ge31cbiAgICB0aGlzLl9wYXRoID0gcGF0aFxuICAgIHRoaXMucmVtb3RlQWRkcmVzc1ZhbHVlID0gcmVtb3RlQWRkcmVzc1xuXG4gICAgaWYgKGhlYWRlcnMpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpKSB7XG4gICAgICAgIHRoaXMuaGVhZGVyc01hcFtrZXkudG9Mb3dlckNhc2UoKV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwYXJhbXMpIHRoaXMucGFyYW1zT2JqZWN0ID0gey4uLnBhcmFtc31cbiAgICBpZiAodGhpcy5ib2R5ICYmIHR5cGVvZiB0aGlzLmJvZHkgPT09IFwib2JqZWN0XCIpIHRoaXMucGFyYW1zT2JqZWN0ID0gey4uLnRoaXMucGFyYW1zT2JqZWN0LCAuLi50aGlzLmJvZHl9XG4gICAgaWYgKHRoaXMuYm9keSAmJiB0eXBlb2YgdGhpcy5ib2R5ID09PSBcIm9iamVjdFwiICYmICF0aGlzLmhlYWRlcnNNYXBbXCJjb250ZW50LXR5cGVcIl0pIHtcbiAgICAgIHRoaXMuaGVhZGVyc01hcFtcImNvbnRlbnQtdHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKClcblxuICAgIHRoaXMucGFyYW1zT2JqZWN0ID0gey4uLnF1ZXJ5UGFyYW1zLCAuLi50aGlzLnBhcmFtc09iamVjdH1cbiAgfVxuXG4gIGJhc2VVUkwoKSB7XG4gICAgY29uc3QgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sKClcbiAgICBjb25zdCBob3N0ID0gdGhpcy5ob3N0V2l0aFBvcnQoKVxuXG4gICAgaWYgKHByb3RvY29sICYmIGhvc3QpIHJldHVybiBgJHtwcm90b2NvbH06Ly8ke2hvc3R9YFxuICB9XG5cbiAgaGVhZGVyKG5hbWUpIHsgcmV0dXJuIHRoaXMuaGVhZGVyc01hcFtuYW1lLnRvTG93ZXJDYXNlKCldIHx8IG51bGwgfVxuXG4gIGhlYWRlcnMoKSB7IHJldHVybiB0aGlzLmhlYWRlcnNNYXAgfVxuXG4gIGh0dHBNZXRob2QoKSB7IHJldHVybiB0aGlzLm1ldGhvZCB9XG5cbiAgaHR0cFZlcnNpb24oKSB7IHJldHVybiBcIndlYnNvY2tldFwiIH1cblxuICBob3N0KCkgeyByZXR1cm4gdGhpcy5oZWFkZXIoXCJob3N0XCIpIHx8IHVuZGVmaW5lZCB9XG5cbiAgaG9zdFdpdGhQb3J0KCkge1xuICAgIGNvbnN0IGhvc3QgPSB0aGlzLmhvc3QoKVxuICAgIGNvbnN0IHBvcnQgPSB0aGlzLnBvcnQoKVxuXG4gICAgaWYgKCFob3N0KSByZXR1cm5cbiAgICBpZiAoIXBvcnQpIHJldHVybiBob3N0XG5cbiAgICByZXR1cm4gYCR7aG9zdH06JHtwb3J0fWBcbiAgfVxuXG4gIG9yaWdpbigpIHsgcmV0dXJuIHRoaXMuaGVhZGVyKFwib3JpZ2luXCIpIH1cblxuICBwYXRoKCkgeyByZXR1cm4gdGhpcy5fcGF0aCB9XG5cbiAgcGFyYW1zKCkgeyByZXR1cm4gdGhpcy5wYXJhbXNPYmplY3QgfVxuXG4gIHBvcnQoKSB7XG4gICAgY29uc3QgaG9zdEhlYWRlciA9IHRoaXMuaGVhZGVyKFwiaG9zdFwiKVxuICAgIGNvbnN0IG1hdGNoID0gaG9zdEhlYWRlcj8ubWF0Y2goLzooXFxkKykkLylcblxuICAgIGlmIChtYXRjaCkgcmV0dXJuIHBhcnNlSW50KG1hdGNoWzFdKVxuICB9XG5cbiAgcHJvdG9jb2woKSB7XG4gICAgY29uc3Qgb3JpZ2luID0gdGhpcy5vcmlnaW4oKVxuICAgIGNvbnN0IG1hdGNoID0gb3JpZ2luPy5tYXRjaCgvXiguKyk6XFwvXFwvLylcblxuICAgIHJldHVybiBtYXRjaD8uWzFdXG4gIH1cblxuICByZW1vdGVBZGRyZXNzKCkgeyByZXR1cm4gdGhpcy5yZW1vdGVBZGRyZXNzVmFsdWUgfVxuXG4gIF9wYXJzZVF1ZXJ5UGFyYW1zKCkge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5fcGF0aC5zcGxpdChcIj9cIilbMV1cblxuICAgIGlmICghcXVlcnkpIHJldHVybiB7fVxuXG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAqL1xuICAgIGNvbnN0IHVucGFyc2VkUGFyYW1zID0gcXVlcnlzdHJpbmcucGFyc2UocXVlcnkpXG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAqL1xuICAgIGNvbnN0IHBhcmFtcyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh1bnBhcnNlZFBhcmFtcykpIHtcbiAgICAgIHBhcmFtc1trZXldID0gdW5wYXJzZWRQYXJhbXNba2V5XVxuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXNcbiAgfVxufVxuIl19
|