@entity-access/server-pages 1.0.29 → 1.0.31
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/.vscode/settings.json +1 -0
- package/dist/Content.d.ts +6 -6
- package/dist/Content.d.ts.map +1 -1
- package/dist/Content.js +21 -37
- package/dist/Content.js.map +1 -1
- package/dist/Page.d.ts +11 -40
- package/dist/Page.d.ts.map +1 -1
- package/dist/Page.js +5 -3
- package/dist/Page.js.map +1 -1
- package/dist/ServerPages.d.ts +13 -5
- package/dist/ServerPages.d.ts.map +1 -1
- package/dist/ServerPages.js +99 -81
- package/dist/ServerPages.js.map +1 -1
- package/dist/core/AsyncStream.d.ts +16 -0
- package/dist/core/AsyncStream.d.ts.map +1 -0
- package/dist/core/AsyncStream.js +55 -0
- package/dist/core/AsyncStream.js.map +1 -0
- package/dist/core/FileApi.d.ts +5 -0
- package/dist/core/FileApi.d.ts.map +1 -0
- package/dist/core/FileApi.js +95 -0
- package/dist/core/FileApi.js.map +1 -0
- package/dist/core/LocalFile.d.ts +2 -1
- package/dist/core/LocalFile.d.ts.map +1 -1
- package/dist/core/LocalFile.js +8 -0
- package/dist/core/LocalFile.js.map +1 -1
- package/dist/core/RouteTree.js +1 -1
- package/dist/core/RouteTree.js.map +1 -1
- package/dist/core/SessionUser.d.ts +2 -2
- package/dist/core/SessionUser.d.ts.map +1 -1
- package/dist/core/SessionUser.js.map +1 -1
- package/dist/core/Wrapped.d.ts +70 -0
- package/dist/core/Wrapped.d.ts.map +1 -0
- package/dist/core/Wrapped.js +253 -0
- package/dist/core/Wrapped.js.map +1 -0
- package/dist/core/cached.d.ts +2 -0
- package/dist/core/cached.d.ts.map +1 -0
- package/dist/core/cached.js +3 -0
- package/dist/core/cached.js.map +1 -0
- package/dist/decorators/Authorize.d.ts +2 -0
- package/dist/decorators/Authorize.d.ts.map +1 -0
- package/dist/decorators/Authorize.js +3 -0
- package/dist/decorators/Authorize.js.map +1 -0
- package/dist/parsers/json/jsonParser.d.ts +2 -0
- package/dist/parsers/json/jsonParser.d.ts.map +1 -0
- package/dist/parsers/json/jsonParser.js +3 -0
- package/dist/parsers/json/jsonParser.js.map +1 -0
- package/dist/services/CookieService.d.ts +3 -3
- package/dist/services/CookieService.d.ts.map +1 -1
- package/dist/services/CookieService.js +2 -4
- package/dist/services/CookieService.js.map +1 -1
- package/dist/ssl/ACME.d.ts +37 -0
- package/dist/ssl/ACME.d.ts.map +1 -0
- package/dist/ssl/ACME.js +200 -0
- package/dist/ssl/ACME.js.map +1 -0
- package/dist/ssl/ChallengeStore.d.ts +8 -0
- package/dist/ssl/ChallengeStore.d.ts.map +1 -0
- package/dist/ssl/ChallengeStore.js +34 -0
- package/dist/ssl/ChallengeStore.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -6
- package/self-signed/cert.crt +22 -0
- package/self-signed/key.pem +27 -0
- package/src/Content.tsx +28 -43
- package/src/Page.tsx +18 -62
- package/src/ServerPages.ts +114 -76
- package/src/core/AsyncStream.ts +83 -0
- package/src/core/FileApi.ts +52 -0
- package/src/core/LocalFile.ts +11 -2
- package/src/core/RouteTree.ts +1 -1
- package/src/core/SessionUser.ts +2 -2
- package/src/core/Wrapped.ts +359 -0
- package/src/core/cached.ts +3 -0
- package/src/decorators/Authorize.ts +3 -0
- package/src/parsers/json/jsonParser.ts +3 -0
- package/src/services/CookieService.ts +4 -6
- package/src/ssl/ACME.ts +247 -0
- package/src/ssl/ChallengeStore.ts +26 -0
- package/test.js +1 -3
package/.vscode/settings.json
CHANGED
package/dist/Content.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
import { Response } from "express";
|
|
3
2
|
import XNode from "./html/XNode.js";
|
|
4
3
|
import { LocalFile } from "./core/LocalFile.js";
|
|
5
4
|
import SessionUser from "./core/SessionUser.js";
|
|
5
|
+
import { WrappedResponse } from "./core/Wrapped.js";
|
|
6
6
|
export interface IPageResult {
|
|
7
|
-
send(res:
|
|
7
|
+
send(res: WrappedResponse): Promise<any>;
|
|
8
8
|
}
|
|
9
9
|
export declare class TempFileResult implements IPageResult {
|
|
10
10
|
private file;
|
|
@@ -14,7 +14,7 @@ export declare class TempFileResult implements IPageResult {
|
|
|
14
14
|
etag: boolean;
|
|
15
15
|
immutable: boolean;
|
|
16
16
|
constructor(file: LocalFile, { contentDisposition, cacheControl, maxAge, etag, immutable }?: Partial<TempFileResult>);
|
|
17
|
-
send(res:
|
|
17
|
+
send(res: WrappedResponse): Promise<void>;
|
|
18
18
|
}
|
|
19
19
|
export declare class FileResult implements IPageResult {
|
|
20
20
|
private filePath;
|
|
@@ -25,13 +25,13 @@ export declare class FileResult implements IPageResult {
|
|
|
25
25
|
immutable: boolean;
|
|
26
26
|
private fileName;
|
|
27
27
|
constructor(filePath: string, { contentDisposition, cacheControl, maxAge, etag, immutable }?: Partial<FileResult>);
|
|
28
|
-
send(res:
|
|
28
|
+
send(res: WrappedResponse): Promise<void>;
|
|
29
29
|
}
|
|
30
30
|
export declare class Redirect implements IPageResult {
|
|
31
31
|
location: string;
|
|
32
32
|
status: number;
|
|
33
33
|
constructor(location: string, status?: number);
|
|
34
|
-
send(res:
|
|
34
|
+
send(res: WrappedResponse): Promise<void>;
|
|
35
35
|
}
|
|
36
36
|
export default class Content implements IPageResult {
|
|
37
37
|
static json(json: any, status?: number): Content;
|
|
@@ -41,6 +41,6 @@ export default class Content implements IPageResult {
|
|
|
41
41
|
contentType: string;
|
|
42
42
|
body: string | Buffer | Blob | XNode;
|
|
43
43
|
private constructor();
|
|
44
|
-
send(res:
|
|
44
|
+
send(res: WrappedResponse, user?: SessionUser): Promise<void>;
|
|
45
45
|
}
|
|
46
46
|
//# sourceMappingURL=Content.d.ts.map
|
package/dist/Content.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Content.d.ts","sourceRoot":"","sources":["../src/Content.tsx"],"names":[],"mappings":";AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"Content.d.ts","sourceRoot":"","sources":["../src/Content.tsx"],"names":[],"mappings":";AAEA,OAAO,KAAK,MAAM,iBAAiB,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,WAAW,WAAW;IACxB,IAAI,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CAC5C;AAED,qBAAa,cAAe,YAAW,WAAW;IAQ1C,OAAO,CAAC,IAAI;IANT,kBAAkB,EAAE,QAAQ,GAAG,YAAY,CAAY;IACvD,YAAY,UAAQ;IACpB,MAAM,SAAW;IACjB,IAAI,UAAS;IACb,SAAS,UAAS;gBAEb,IAAI,EAAE,SAAS,EACvB,EACI,kBAA6B,EAC7B,YAAmB,EACnB,MAAgB,EAChB,IAAY,EACZ,SAAiB,EACpB,GAAE,OAAO,CAAC,cAAc,CAAM;IASnC,IAAI,CAAC,GAAG,EAAE,eAAe;CAe5B;AAED,qBAAa,UAAW,YAAW,WAAW;IAStC,OAAO,CAAC,QAAQ;IAPb,kBAAkB,EAAE,QAAQ,GAAG,YAAY,CAAY;IACvD,YAAY,UAAQ;IACpB,MAAM,SAAW;IACjB,IAAI,UAAS;IACb,SAAS,UAAS;IACzB,OAAO,CAAC,QAAQ,CAAC;gBAEL,QAAQ,EAAE,MAAM,EACxB,EACI,kBAA6B,EAC7B,YAAmB,EACnB,MAAgB,EAChB,IAAY,EACZ,SAAiB,EACpB,GAAE,OAAO,CAAC,UAAU,CAAM;IAW/B,IAAI,CAAC,GAAG,EAAE,eAAe;CAY5B;AAED,qBAAa,QAAS,YAAW,WAAW;IAErB,QAAQ,EAAE,MAAM;IAAS,MAAM;gBAA/B,QAAQ,EAAE,MAAM,EAAS,MAAM,SAAM;IAIlD,IAAI,CAAC,GAAG,EAAE,eAAe;CAIlC;AAED,MAAM,CAAC,OAAO,OAAO,OAAQ,YAAW,WAAW;WAEjC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,SAAM;WAQ5B,IAAI,CAAC,IAAI,KAAA,EAAE,MAAM,SAAM;WAQvB,MAAM,CAChB,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC;IAMnB,MAAM,EAAE,MAAM,CAAC;IAEf,WAAW,EAAE,MAAM,CAAC;IAEpB,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;IAE5C,OAAO;IAOM,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,CAAC,EAAE,WAAW;CA2B7D"}
|
package/dist/Content.js
CHANGED
|
@@ -15,25 +15,17 @@ export class TempFileResult {
|
|
|
15
15
|
this.immutable = immutable;
|
|
16
16
|
}
|
|
17
17
|
send(res) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
lastModified: false
|
|
30
|
-
}, (error) => {
|
|
31
|
-
if (error) {
|
|
32
|
-
reject(error);
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
resolve();
|
|
36
|
-
});
|
|
18
|
+
res.setHeader("content-disposition", `${this.contentDisposition};filename=${encodeURIComponent(this.file.fileName)}`);
|
|
19
|
+
return res.sendFile(this.file.path, {
|
|
20
|
+
headers: {
|
|
21
|
+
"content-type": this.file.contentType
|
|
22
|
+
},
|
|
23
|
+
acceptRanges: true,
|
|
24
|
+
cacheControl: this.cacheControl,
|
|
25
|
+
maxAge: this.maxAge,
|
|
26
|
+
etag: this.etag,
|
|
27
|
+
immutable: this.immutable,
|
|
28
|
+
lastModified: false
|
|
37
29
|
});
|
|
38
30
|
}
|
|
39
31
|
}
|
|
@@ -54,21 +46,13 @@ export class FileResult {
|
|
|
54
46
|
this.fileName = parsed.base;
|
|
55
47
|
}
|
|
56
48
|
send(res) {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
immutable: this.immutable
|
|
65
|
-
}, (error) => {
|
|
66
|
-
if (error) {
|
|
67
|
-
reject(error);
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
resolve();
|
|
71
|
-
});
|
|
49
|
+
res.setHeader("content-disposition", `${this.contentDisposition};filename=${encodeURIComponent(this.fileName)}`);
|
|
50
|
+
return res.sendFile(this.filePath, {
|
|
51
|
+
acceptRanges: true,
|
|
52
|
+
cacheControl: this.cacheControl,
|
|
53
|
+
maxAge: this.maxAge,
|
|
54
|
+
etag: this.etag,
|
|
55
|
+
immutable: this.immutable
|
|
72
56
|
});
|
|
73
57
|
}
|
|
74
58
|
}
|
|
@@ -78,7 +62,7 @@ export class Redirect {
|
|
|
78
62
|
this.status = status;
|
|
79
63
|
}
|
|
80
64
|
async send(res) {
|
|
81
|
-
res.
|
|
65
|
+
return res.sendRedirect(this.location);
|
|
82
66
|
}
|
|
83
67
|
}
|
|
84
68
|
export default class Content {
|
|
@@ -107,8 +91,8 @@ export default class Content {
|
|
|
107
91
|
}
|
|
108
92
|
async send(res, user) {
|
|
109
93
|
const { status, body, contentType } = this;
|
|
110
|
-
|
|
111
|
-
|
|
94
|
+
res.setHeader("content-type", contentType);
|
|
95
|
+
res.statusCode = status;
|
|
112
96
|
if (typeof body === "string") {
|
|
113
97
|
if (status >= 300) {
|
|
114
98
|
const u = user ? `User: ${user.userID},${user.userName}` : "User: Anonymous";
|
package/dist/Content.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Content.js","sourceRoot":"","sources":["../src/Content.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Content.js","sourceRoot":"","sources":["../src/Content.tsx"],"names":[],"mappings":"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"}
|
package/dist/Page.d.ts
CHANGED
|
@@ -2,49 +2,15 @@
|
|
|
2
2
|
import Content, { IPageResult, Redirect } from "./Content.js";
|
|
3
3
|
import { LocalFile } from "./core/LocalFile.js";
|
|
4
4
|
import SessionUser from "./core/SessionUser.js";
|
|
5
|
+
import { WrappedRequest, WrappedResponse } from "./core/Wrapped.js";
|
|
6
|
+
import { ServiceProvider } from "@entity-access/entity-access/dist/di/di.js";
|
|
5
7
|
export declare const isPage: unique symbol;
|
|
6
8
|
export interface IRouteCheck {
|
|
9
|
+
scope: ServiceProvider;
|
|
7
10
|
method: string;
|
|
8
11
|
current: string;
|
|
9
12
|
path: string[];
|
|
10
|
-
|
|
11
|
-
params: any;
|
|
12
|
-
}
|
|
13
|
-
export interface IPageContext {
|
|
14
|
-
/**
|
|
15
|
-
* path till the current folder where this page is located, including the name of current folder itself.
|
|
16
|
-
*/
|
|
17
|
-
currentPath: string[];
|
|
18
|
-
/**
|
|
19
|
-
* Path to the next children to be precessed.
|
|
20
|
-
*/
|
|
21
|
-
childPath: string[];
|
|
22
|
-
/**
|
|
23
|
-
* Query string if associated, empty object is always present.
|
|
24
|
-
*/
|
|
25
|
-
query: any;
|
|
26
|
-
body: any;
|
|
27
|
-
url: string;
|
|
28
|
-
signal: AbortSignal;
|
|
29
|
-
/**
|
|
30
|
-
* Request
|
|
31
|
-
*/
|
|
32
|
-
/**
|
|
33
|
-
* Response
|
|
34
|
-
*/
|
|
35
|
-
/**
|
|
36
|
-
* Request method
|
|
37
|
-
*/
|
|
38
|
-
method: string;
|
|
39
|
-
/**
|
|
40
|
-
* Currently logged in user
|
|
41
|
-
*/
|
|
42
|
-
sessionUser: SessionUser;
|
|
43
|
-
/**
|
|
44
|
-
* Actual file path of the page
|
|
45
|
-
*/
|
|
46
|
-
filePath: string;
|
|
47
|
-
disposables: Disposable[];
|
|
13
|
+
request: WrappedRequest;
|
|
48
14
|
}
|
|
49
15
|
export interface IFormData {
|
|
50
16
|
fields: {
|
|
@@ -55,14 +21,19 @@ export interface IFormData {
|
|
|
55
21
|
/**
|
|
56
22
|
* Page should not contain any reference to underlying request/response objects.
|
|
57
23
|
*/
|
|
58
|
-
export default class Page
|
|
24
|
+
export default class Page {
|
|
59
25
|
static [isPage]: boolean;
|
|
60
26
|
/**
|
|
61
27
|
* This static method determines if the path can be handled by this page or not.
|
|
62
28
|
* @param pageContext page related items
|
|
63
29
|
* @returns true if it can handle the path, default is true
|
|
64
30
|
*/
|
|
65
|
-
static canHandle(pageContext: IRouteCheck): boolean
|
|
31
|
+
static canHandle(pageContext: IRouteCheck): boolean | Promise<boolean>;
|
|
32
|
+
request: WrappedRequest;
|
|
33
|
+
response: WrappedResponse;
|
|
34
|
+
get params(): {
|
|
35
|
+
[key: string]: string;
|
|
36
|
+
};
|
|
66
37
|
signal: AbortSignal;
|
|
67
38
|
currentPath: string[];
|
|
68
39
|
childPath: string[];
|
package/dist/Page.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Page.d.ts","sourceRoot":"","sources":["../src/Page.tsx"],"names":[],"mappings":";AAGA,OAAO,OAAO,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Page.d.ts","sourceRoot":"","sources":["../src/Page.tsx"],"names":[],"mappings":";AAGA,OAAO,OAAO,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAE7E,eAAO,MAAM,MAAM,eAAmB,CAAC;AAGvC,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,eAAe,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,SAAS;IACtB,MAAM,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAC,CAAC;IACjC,KAAK,EAAE,SAAS,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,IAAI;IAErB,MAAM,CAAC,CAAC,MAAM,CAAC,UAAQ;IAGvB;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,WAAW,GAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAIvE,OAAO,EAAE,cAAc,CAAC;IAExB,QAAQ,EAAE,eAAe,CAAC;IAE1B,IAAI,MAAM;;MAET;IAED,MAAM,EAAE,WAAW,CAAC;IAEpB,WAAW,EAAE,MAAM,EAAE,CAAC;IAEtB,SAAS,EAAE,MAAM,EAAE,CAAC;IAEpB;;OAEG;IACH,YAAY,EAAE,MAAM,EAAE,CAAC;IAEvB,KAAK,EAAE,GAAG,CAAC;IAEX,IAAI,EAAE,GAAG,CAAC;IAEV,GAAG,EAAE,MAAM,CAAC;IAMZ,MAAM,EAAE,MAAM,CAAC;IAEf,WAAW,EAAE,WAAW,CAAC;IAEzB,QAAQ,EAAE,MAAM,CAAC;IAEjB,YAAY,EAAE,MAAM,CAAC;IAErB,WAAW,EAAE,UAAU,EAAE,CAAM;IAE/B,OAAO,CAAC,eAAe,CAAqB;;IAM5C,GAAG,CAAC,MAAM,EAAE,GAAG,GAAG,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAIpD,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;IAqClC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,SAAM,EAAE,WAAW,SAAc;IAIvE,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,SAAI;IAOjC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM;IAInC,SAAS,CAAC,QAAQ,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAchD,SAAS,CAAC,WAAW,CAAC,KAAK,KAAA,EAAE,MAAM,SAAM,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;CAczE"}
|
package/dist/Page.js
CHANGED
|
@@ -17,6 +17,9 @@ class Page {
|
|
|
17
17
|
static canHandle(pageContext) {
|
|
18
18
|
return true;
|
|
19
19
|
}
|
|
20
|
+
get params() {
|
|
21
|
+
return this.request?.query;
|
|
22
|
+
}
|
|
20
23
|
constructor() {
|
|
21
24
|
this.disposables = [];
|
|
22
25
|
this.cacheControl = "no-cache, no-store, max-age=0";
|
|
@@ -25,13 +28,13 @@ class Page {
|
|
|
25
28
|
return this.notFound();
|
|
26
29
|
}
|
|
27
30
|
readFormData() {
|
|
28
|
-
this.formDataPromise ??= (async () => {
|
|
31
|
+
return this.formDataPromise ??= (async () => {
|
|
29
32
|
let tempFolder;
|
|
30
33
|
const result = {
|
|
31
34
|
fields: {},
|
|
32
35
|
files: []
|
|
33
36
|
};
|
|
34
|
-
const req = this.
|
|
37
|
+
const req = this.request;
|
|
35
38
|
const bb = busboy({ headers: req.headers, defParamCharset: "utf8" });
|
|
36
39
|
const tasks = [];
|
|
37
40
|
await new Promise((resolve, reject) => {
|
|
@@ -55,7 +58,6 @@ class Page {
|
|
|
55
58
|
await Promise.all(tasks);
|
|
56
59
|
return result;
|
|
57
60
|
})();
|
|
58
|
-
return this.formDataPromise;
|
|
59
61
|
}
|
|
60
62
|
content(body, status = 200, contentType = "text/html") {
|
|
61
63
|
return Content.create({ body, status, contentType });
|
package/dist/Page.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Page.js","sourceRoot":"","sources":["../src/Page.tsx"],"names":[],"mappings":";AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,YAAY,MAAM,wBAAwB,CAAC;AAClD,OAAO,KAAK,MAAM,iBAAiB,CAAC;AACpC,OAAO,OAAO,EAAE,EAAe,QAAQ,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Page.js","sourceRoot":"","sources":["../src/Page.tsx"],"names":[],"mappings":"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"}
|
package/dist/ServerPages.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
4
|
import { ServiceProvider } from "@entity-access/entity-access/dist/di/di.js";
|
|
3
|
-
import { Request, Response } from "express";
|
|
4
5
|
import * as http from "http";
|
|
6
|
+
import * as http2 from "http2";
|
|
7
|
+
import { SecureContext } from "node:tls";
|
|
8
|
+
import { IAcmeOptions } from "./ssl/ACME.js";
|
|
5
9
|
export default class ServerPages {
|
|
6
10
|
static create(globalServiceProvider?: ServiceProvider): ServerPages;
|
|
7
11
|
private root;
|
|
@@ -16,10 +20,14 @@ export default class ServerPages {
|
|
|
16
20
|
* All services should be registered before calling build
|
|
17
21
|
* @param app Express App
|
|
18
22
|
*/
|
|
19
|
-
build(
|
|
23
|
+
build({ createSocketService, port, protocol, disableHttp2Warning, SNICallback, acmeOptions }: {
|
|
20
24
|
createSocketService?: boolean;
|
|
21
|
-
port
|
|
22
|
-
|
|
23
|
-
|
|
25
|
+
port: number;
|
|
26
|
+
disableHttp2Warning?: boolean;
|
|
27
|
+
protocol: "http" | "http2" | "https2";
|
|
28
|
+
SNICallback?: (servername: string, cb: (err: Error | null, ctx?: SecureContext) => void) => void;
|
|
29
|
+
acmeOptions?: IAcmeOptions;
|
|
30
|
+
}): Promise<http2.Http2Server | http.Server<typeof http.IncomingMessage, typeof http.ServerResponse>>;
|
|
31
|
+
protected process(req: any, resp: any): Promise<void>;
|
|
24
32
|
}
|
|
25
33
|
//# sourceMappingURL=ServerPages.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServerPages.d.ts","sourceRoot":"","sources":["../src/ServerPages.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ServerPages.d.ts","sourceRoot":"","sources":["../src/ServerPages.ts"],"names":[],"mappings":";;;AACA,OAAO,EAAqB,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAOhG,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGpD,MAAM,CAAC,OAAO,OAAO,WAAW;WAEd,MAAM,CAAC,qBAAqB,GAAE,eAAuC;IAKnF,OAAO,CAAC,IAAI,CAA8B;IAE1C;;;;OAIG;IACI,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAY;IASlD,oBAAoB;IAI3B;;;OAGG;IACU,KAAK,CAAC,EACf,mBAA0B,EAC1B,IAAW,EACX,QAAiB,EACjB,mBAA2B,EAC3B,WAAW,EACX,WAAW,EACd,EAAC;QACE,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,IAAI,EAAE,MAAM,CAAC;QACb,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;QACtC,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,aAAa,KAAK,IAAI,KAAK,IAAI,CAAC;QACjG,WAAW,CAAC,EAAE,YAAY,CAAA;KAC7B;cAoDe,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;CAgF9C"}
|
package/dist/ServerPages.js
CHANGED
|
@@ -45,18 +45,17 @@ var __disposeResources = (this && this.__disposeResources) || (function (Suppres
|
|
|
45
45
|
});
|
|
46
46
|
/* eslint-disable no-console */
|
|
47
47
|
import { RegisterSingleton, ServiceProvider } from "@entity-access/entity-access/dist/di/di.js";
|
|
48
|
-
import express from "express";
|
|
49
48
|
import Page from "./Page.js";
|
|
50
49
|
import Content from "./Content.js";
|
|
51
|
-
import SessionUser from "./core/SessionUser.js";
|
|
52
50
|
import RouteTree from "./core/RouteTree.js";
|
|
53
|
-
import CookieService from "./services/CookieService.js";
|
|
54
|
-
import cookieParser from "cookie-parser";
|
|
55
|
-
import bodyParser from "body-parser";
|
|
56
51
|
import { fileURLToPath } from "node:url";
|
|
57
52
|
import { dirname, join } from "node:path";
|
|
58
53
|
import { Server } from "socket.io";
|
|
54
|
+
import * as http from "http";
|
|
55
|
+
import * as http2 from "http2";
|
|
59
56
|
import SocketService from "./socket/SocketService.js";
|
|
57
|
+
import { Wrapped } from "./core/Wrapped.js";
|
|
58
|
+
import ACME from "./ssl/ACME.js";
|
|
60
59
|
RegisterSingleton;
|
|
61
60
|
export default class ServerPages {
|
|
62
61
|
constructor() {
|
|
@@ -86,12 +85,9 @@ export default class ServerPages {
|
|
|
86
85
|
* All services should be registered before calling build
|
|
87
86
|
* @param app Express App
|
|
88
87
|
*/
|
|
89
|
-
async build(
|
|
88
|
+
async build({ createSocketService = true, port = 8080, protocol = "http", disableHttp2Warning = false, SNICallback, acmeOptions }) {
|
|
90
89
|
try {
|
|
91
|
-
|
|
92
|
-
app.set("etag", false);
|
|
93
|
-
app.use(cookieParser());
|
|
94
|
-
app.use(bodyParser.json());
|
|
90
|
+
let httpServer = null;
|
|
95
91
|
let socketServer = null;
|
|
96
92
|
if (createSocketService) {
|
|
97
93
|
socketServer = new Server();
|
|
@@ -99,13 +95,36 @@ export default class ServerPages {
|
|
|
99
95
|
ss.attach(socketServer);
|
|
100
96
|
await ss.init();
|
|
101
97
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
98
|
+
switch (protocol) {
|
|
99
|
+
case "http":
|
|
100
|
+
httpServer = http.createServer((req, res) => this.process(req, res));
|
|
101
|
+
break;
|
|
102
|
+
case "https2":
|
|
103
|
+
let sc = null;
|
|
104
|
+
SNICallback ??= (name, cb) => {
|
|
105
|
+
const acme = ServiceProvider.resolve(this, ACME);
|
|
106
|
+
acme.getSecureContext({ ...(acmeOptions ?? {}), host: name }).then((v) => {
|
|
107
|
+
cb(null, v);
|
|
108
|
+
}, cb);
|
|
109
|
+
};
|
|
110
|
+
httpServer = http2.createSecureServer({
|
|
111
|
+
SNICallback
|
|
112
|
+
}, (req, res) => this.process(req, res));
|
|
113
|
+
break;
|
|
114
|
+
case "http2":
|
|
115
|
+
httpServer = http2.createSecureServer({}, (req, res) => this.process(req, res));
|
|
116
|
+
if (!disableHttp2Warning) {
|
|
117
|
+
console.warn("Http2 without SSL should not be used in production");
|
|
118
|
+
}
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
await new Promise((resolve, reject) => {
|
|
122
|
+
const server = httpServer.listen(port, () => {
|
|
123
|
+
resolve();
|
|
106
124
|
});
|
|
107
125
|
socketServer?.attach(server);
|
|
108
126
|
});
|
|
127
|
+
return httpServer;
|
|
109
128
|
}
|
|
110
129
|
catch (error) {
|
|
111
130
|
console.error(error);
|
|
@@ -113,84 +132,83 @@ export default class ServerPages {
|
|
|
113
132
|
return null;
|
|
114
133
|
}
|
|
115
134
|
async process(req, resp) {
|
|
116
|
-
|
|
135
|
+
req = Wrapped.request(req);
|
|
136
|
+
resp = Wrapped.response(req, resp);
|
|
137
|
+
req.response = resp;
|
|
138
|
+
if (req.processed) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
req.processed = true;
|
|
117
142
|
try {
|
|
118
|
-
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
req.processed = true;
|
|
122
|
-
// defaulting to no cache
|
|
123
|
-
// static content delivery should override this
|
|
124
|
-
resp.setHeader("cache-control", "no-cache");
|
|
125
|
-
const scope = __addDisposableResource(env_1, ServiceProvider.createScope(this), false);
|
|
126
|
-
let sent = false;
|
|
127
|
-
const acceptJson = req.accepts().some((s) => /\/json$/i.test(s));
|
|
143
|
+
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
128
144
|
try {
|
|
129
|
-
|
|
145
|
+
// defaulting to no cache
|
|
146
|
+
// static content delivery should override this
|
|
147
|
+
resp.setHeader("cache-control", "no-cache");
|
|
148
|
+
const scope = __addDisposableResource(env_1, ServiceProvider.createScope(this), false);
|
|
149
|
+
let sent = false;
|
|
150
|
+
const acceptJson = req.accepts().some((s) => /\/json$/i.test(s));
|
|
130
151
|
try {
|
|
131
|
-
|
|
152
|
+
const path = req.path.split("/").filter((x) => x);
|
|
153
|
+
const method = req.method;
|
|
154
|
+
const { pageClass, childPath } = (await this.root.getRoute({
|
|
155
|
+
scope,
|
|
156
|
+
method,
|
|
157
|
+
current: "",
|
|
158
|
+
path,
|
|
159
|
+
request: req
|
|
160
|
+
})) ?? {
|
|
161
|
+
pageClass: Page,
|
|
162
|
+
childPath: path
|
|
163
|
+
};
|
|
164
|
+
const page = scope.create(pageClass);
|
|
165
|
+
page.method = method;
|
|
166
|
+
page.childPath = childPath;
|
|
167
|
+
page.request = req;
|
|
168
|
+
page.response = resp;
|
|
169
|
+
const content = await page.all(page.params);
|
|
170
|
+
resp.setHeader("cache-control", page.cacheControl);
|
|
171
|
+
resp.removeHeader("etag");
|
|
172
|
+
sent = true;
|
|
173
|
+
await content.send(resp);
|
|
132
174
|
}
|
|
133
175
|
catch (error) {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
sessionUser
|
|
147
|
-
})) ?? {
|
|
148
|
-
pageClass: Page,
|
|
149
|
-
childPath: path
|
|
150
|
-
};
|
|
151
|
-
const page = scope.create(pageClass);
|
|
152
|
-
page.method = method;
|
|
153
|
-
page.childPath = childPath;
|
|
154
|
-
page.body = req.body;
|
|
155
|
-
page.query = req.query;
|
|
156
|
-
page.sessionUser = sessionUser;
|
|
157
|
-
page.req = req;
|
|
158
|
-
page.res = resp;
|
|
159
|
-
const content = await page.all(params);
|
|
160
|
-
resp.setHeader("cache-control", page.cacheControl);
|
|
161
|
-
resp.removeHeader("etag");
|
|
162
|
-
sent = true;
|
|
163
|
-
await content.send(resp);
|
|
164
|
-
}
|
|
165
|
-
catch (error) {
|
|
166
|
-
if (!sent) {
|
|
167
|
-
try {
|
|
168
|
-
if (acceptJson || error.errorModel) {
|
|
169
|
-
await Content.json({
|
|
170
|
-
...error.errorModel ?? {},
|
|
171
|
-
message: error.message ?? error,
|
|
172
|
-
detail: error.stack ?? error,
|
|
173
|
-
}, 500).send(resp);
|
|
174
|
-
return;
|
|
176
|
+
if (!sent) {
|
|
177
|
+
try {
|
|
178
|
+
if (acceptJson || error.errorModel) {
|
|
179
|
+
await Content.json({
|
|
180
|
+
...error.errorModel ?? {},
|
|
181
|
+
message: error.message ?? error,
|
|
182
|
+
detail: error.stack ?? error,
|
|
183
|
+
}, 500).send(resp);
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
const content = Content.html(`<!DOCTYPE html>\n<html><body><pre>Server Error for ${req.url}\r\n${error?.stack ?? error}</pre></body></html>`, 500);
|
|
187
|
+
await content.send(resp);
|
|
175
188
|
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
console.error(e1);
|
|
189
|
+
catch (e1) {
|
|
190
|
+
resp.send(e1.stack ?? e1, 500);
|
|
191
|
+
console.error(e1);
|
|
192
|
+
}
|
|
193
|
+
return;
|
|
182
194
|
}
|
|
183
|
-
|
|
195
|
+
console.error(error);
|
|
184
196
|
}
|
|
185
|
-
console.error(error);
|
|
186
197
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
198
|
+
catch (e_1) {
|
|
199
|
+
env_1.error = e_1;
|
|
200
|
+
env_1.hasError = true;
|
|
201
|
+
}
|
|
202
|
+
finally {
|
|
203
|
+
__disposeResources(env_1);
|
|
204
|
+
}
|
|
191
205
|
}
|
|
192
206
|
finally {
|
|
193
|
-
|
|
207
|
+
if (Array.isArray(req.disposables)) {
|
|
208
|
+
for (const iterator of req.disposables) {
|
|
209
|
+
iterator[Symbol.dispose]?.();
|
|
210
|
+
}
|
|
211
|
+
}
|
|
194
212
|
}
|
|
195
213
|
}
|
|
196
214
|
}
|
package/dist/ServerPages.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServerPages.js","sourceRoot":"","sources":["../src/ServerPages.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAA+B;AAC/B,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAChG,OAAO,
|
|
1
|
+
{"version":3,"file":"ServerPages.js","sourceRoot":"","sources":["../src/ServerPages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
export declare abstract class AsyncStream implements Disposable {
|
|
3
|
+
abstract read(n: number): Promise<Buffer>;
|
|
4
|
+
abstract [Symbol.dispose](): any;
|
|
5
|
+
}
|
|
6
|
+
export declare class AsyncFileStream extends AsyncStream {
|
|
7
|
+
private readonly filePath;
|
|
8
|
+
readPosition: number;
|
|
9
|
+
readonly size: number;
|
|
10
|
+
private fd;
|
|
11
|
+
private buffer;
|
|
12
|
+
constructor(filePath: string, readPosition?: number, lockFile?: boolean, bufferSize?: number);
|
|
13
|
+
read(): Promise<Buffer>;
|
|
14
|
+
[Symbol.dispose](): void;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=AsyncStream.d.ts.map
|