@arikajs/http 0.0.4 → 0.0.5
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 +33 -11
- package/dist/HttpKernel.d.ts +40 -0
- package/dist/HttpKernel.d.ts.map +1 -0
- package/dist/HttpKernel.js +75 -0
- package/dist/HttpKernel.js.map +1 -0
- package/dist/HttpServiceProvider.d.ts +13 -0
- package/dist/HttpServiceProvider.d.ts.map +1 -0
- package/dist/HttpServiceProvider.js +25 -0
- package/dist/HttpServiceProvider.js.map +1 -0
- package/dist/Middleware/BodyParserMiddleware.d.ts.map +1 -1
- package/dist/Middleware/BodyParserMiddleware.js +30 -2
- package/dist/Middleware/BodyParserMiddleware.js.map +1 -1
- package/dist/Middleware/SecurityHeaders.d.ts +12 -0
- package/dist/Middleware/SecurityHeaders.d.ts.map +1 -0
- package/dist/Middleware/SecurityHeaders.js +31 -0
- package/dist/Middleware/SecurityHeaders.js.map +1 -0
- package/dist/Middleware/ServeStaticMiddleware.d.ts +8 -0
- package/dist/Middleware/ServeStaticMiddleware.d.ts.map +1 -0
- package/dist/Middleware/ServeStaticMiddleware.js +35 -0
- package/dist/Middleware/ServeStaticMiddleware.js.map +1 -0
- package/dist/Middleware/Throttle.d.ts +17 -0
- package/dist/Middleware/Throttle.d.ts.map +1 -0
- package/dist/Middleware/Throttle.js +61 -0
- package/dist/Middleware/Throttle.js.map +1 -0
- package/dist/ObjectPool.d.ts +27 -0
- package/dist/ObjectPool.d.ts.map +1 -0
- package/dist/ObjectPool.js +50 -0
- package/dist/ObjectPool.js.map +1 -0
- package/dist/Pipeline.d.ts +23 -0
- package/dist/Pipeline.d.ts.map +1 -0
- package/dist/Pipeline.js +61 -0
- package/dist/Pipeline.js.map +1 -0
- package/dist/RawResponse.d.ts +9 -0
- package/dist/RawResponse.d.ts.map +1 -0
- package/dist/RawResponse.js +27 -0
- package/dist/RawResponse.js.map +1 -0
- package/dist/Request.d.ts +53 -3
- package/dist/Request.d.ts.map +1 -1
- package/dist/Request.js +170 -7
- package/dist/Request.js.map +1 -1
- package/dist/Response.d.ts +20 -3
- package/dist/Response.d.ts.map +1 -1
- package/dist/Response.js +48 -4
- package/dist/Response.js.map +1 -1
- package/dist/Router.d.ts +34 -0
- package/dist/Router.d.ts.map +1 -0
- package/dist/Router.js +150 -0
- package/dist/Router.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/package.json +13 -6
package/dist/Pipeline.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Pipeline = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Pipeline executes a stack of middleware for HTTP requests.
|
|
6
|
+
*/
|
|
7
|
+
class Pipeline {
|
|
8
|
+
constructor(container) {
|
|
9
|
+
this.container = container;
|
|
10
|
+
this.handlers = [];
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Add middleware to the pipeline.
|
|
14
|
+
*/
|
|
15
|
+
pipe(middleware) {
|
|
16
|
+
if (Array.isArray(middleware)) {
|
|
17
|
+
this.handlers.push(...middleware);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
this.handlers.push(middleware);
|
|
21
|
+
}
|
|
22
|
+
return this;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Run the pipeline through the given destination.
|
|
26
|
+
*/
|
|
27
|
+
async handle(request, destination, response) {
|
|
28
|
+
const invoke = async (index, req) => {
|
|
29
|
+
if (index >= this.handlers.length) {
|
|
30
|
+
return destination(req, response);
|
|
31
|
+
}
|
|
32
|
+
const handler = this.resolve(this.handlers[index]);
|
|
33
|
+
if (typeof handler === 'function') {
|
|
34
|
+
return handler(req, (nextReq) => invoke(index + 1, nextReq), response);
|
|
35
|
+
}
|
|
36
|
+
if (typeof handler === 'object' && 'handle' in handler && typeof handler.handle === 'function') {
|
|
37
|
+
return handler.handle(req, (nextReq) => invoke(index + 1, nextReq), response);
|
|
38
|
+
}
|
|
39
|
+
throw new Error(`Invalid middleware handler at index ${index}`);
|
|
40
|
+
};
|
|
41
|
+
return invoke(0, request);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Resolve the middleware handler.
|
|
45
|
+
*/
|
|
46
|
+
resolve(handler) {
|
|
47
|
+
if (typeof handler === 'string' && this.container) {
|
|
48
|
+
return this.container.make(handler);
|
|
49
|
+
}
|
|
50
|
+
if (typeof handler === 'function') {
|
|
51
|
+
const isClass = /^\s*class\s+/.test(handler.toString()) ||
|
|
52
|
+
(handler.prototype && typeof handler.prototype.handle === 'function');
|
|
53
|
+
if (isClass) {
|
|
54
|
+
return this.container ? this.container.make(handler) : new handler();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return handler;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
exports.Pipeline = Pipeline;
|
|
61
|
+
//# sourceMappingURL=Pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Pipeline.js","sourceRoot":"","sources":["../src/Pipeline.ts"],"names":[],"mappings":";;;AAGA;;GAEG;AACH,MAAa,QAAQ;IAGjB,YAAoB,SAAe;QAAf,cAAS,GAAT,SAAS,CAAM;QAF3B,aAAQ,GAAU,EAAE,CAAC;IAEU,CAAC;IAExC;;OAEG;IACI,IAAI,CAAC,UAAuB;QAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,MAAM,CACf,OAAgB,EAChB,WAAoF,EACpF,QAAmB;QAEnB,MAAM,MAAM,GAAG,KAAK,EAAE,KAAa,EAAE,GAAY,EAAqB,EAAE;YACpE,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAChC,OAAO,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YACtC,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YAEnD,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;gBAChC,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;YACpF,CAAC;YAED,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,QAAQ,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBAC7F,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;YAC3F,CAAC;YAED,MAAM,IAAI,KAAK,CAAC,uCAAuC,KAAK,EAAE,CAAC,CAAC;QACpE,CAAC,CAAC;QAEF,OAAO,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACK,OAAO,CAAC,OAAY;QACxB,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAChD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACnD,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,OAAO,CAAC,SAAS,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;YAE1E,IAAI,OAAO,EAAE,CAAC;gBACV,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAK,OAAe,EAAE,CAAC;YAClF,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ;AAjED,4BAiEC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import http from 'http';
|
|
2
|
+
export declare class RawResponse {
|
|
3
|
+
private res;
|
|
4
|
+
static dateCache: string;
|
|
5
|
+
constructor(res: http.ServerResponse);
|
|
6
|
+
static setupDateUpdater(): void;
|
|
7
|
+
sendUltra(body: Buffer | string): void;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=RawResponse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RawResponse.d.ts","sourceRoot":"","sources":["../src/RawResponse.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,qBAAa,WAAW;IACpB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAc,SAAS,EAAE,MAAM,CAA4B;gBAE/C,GAAG,EAAE,IAAI,CAAC,cAAc;WAItB,gBAAgB;IAMvB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAWhD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RawResponse = void 0;
|
|
4
|
+
class RawResponse {
|
|
5
|
+
constructor(res) {
|
|
6
|
+
this.res = res;
|
|
7
|
+
}
|
|
8
|
+
static setupDateUpdater() {
|
|
9
|
+
setInterval(() => {
|
|
10
|
+
RawResponse.dateCache = new Date().toUTCString();
|
|
11
|
+
}, 1000).unref();
|
|
12
|
+
}
|
|
13
|
+
sendUltra(body) {
|
|
14
|
+
const bodyBuffer = typeof body === 'string' ? Buffer.from(body) : body;
|
|
15
|
+
this.res.writeHead(200, {
|
|
16
|
+
'Content-Type': 'application/json',
|
|
17
|
+
'Content-Length': bodyBuffer.length,
|
|
18
|
+
'Date': RawResponse.dateCache,
|
|
19
|
+
'Connection': 'keep-alive'
|
|
20
|
+
});
|
|
21
|
+
this.res.end(bodyBuffer);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.RawResponse = RawResponse;
|
|
25
|
+
RawResponse.dateCache = new Date().toUTCString();
|
|
26
|
+
RawResponse.setupDateUpdater();
|
|
27
|
+
//# sourceMappingURL=RawResponse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RawResponse.js","sourceRoot":"","sources":["../src/RawResponse.ts"],"names":[],"mappings":";;;AAEA,MAAa,WAAW;IAIpB,YAAY,GAAwB;QAChC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACnB,CAAC;IAEM,MAAM,CAAC,gBAAgB;QAC1B,WAAW,CAAC,GAAG,EAAE;YACb,WAAW,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrD,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAEM,SAAS,CAAC,IAAqB;QAClC,MAAM,UAAU,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEvE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;YACpB,cAAc,EAAE,kBAAkB;YAClC,gBAAgB,EAAE,UAAU,CAAC,MAAM;YACnC,MAAM,EAAE,WAAW,CAAC,SAAS;YAC7B,YAAY,EAAE,YAAY;SAC7B,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC7B,CAAC;;AAxBL,kCAyBC;AAvBiB,qBAAS,GAAW,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAyB/D,WAAW,CAAC,gBAAgB,EAAE,CAAC"}
|
package/dist/Request.d.ts
CHANGED
|
@@ -1,13 +1,29 @@
|
|
|
1
1
|
import { Application } from './Contracts/Application';
|
|
2
2
|
import { IncomingMessage } from 'node:http';
|
|
3
3
|
export declare class Request {
|
|
4
|
-
private
|
|
5
|
-
private
|
|
6
|
-
private
|
|
4
|
+
private app;
|
|
5
|
+
private req;
|
|
6
|
+
private _session;
|
|
7
|
+
searchParams: URLSearchParams;
|
|
7
8
|
private _cookies;
|
|
8
9
|
private _body;
|
|
9
10
|
private _params;
|
|
11
|
+
private _auth;
|
|
12
|
+
private _view;
|
|
10
13
|
constructor(app: Application, req: IncomingMessage);
|
|
14
|
+
private _baseUrl;
|
|
15
|
+
reset(req: IncomingMessage | null): void;
|
|
16
|
+
/**
|
|
17
|
+
* Get the view engine instance.
|
|
18
|
+
*/
|
|
19
|
+
get view(): any;
|
|
20
|
+
set view(value: any);
|
|
21
|
+
/**
|
|
22
|
+
* Get the authentication context for the request.
|
|
23
|
+
*/
|
|
24
|
+
get auth(): any;
|
|
25
|
+
set auth(value: any);
|
|
26
|
+
private ensureSearchParams;
|
|
11
27
|
/**
|
|
12
28
|
* Get the base URL (scheme + host) of the request.
|
|
13
29
|
* Falls back to app.url config if host header is missing.
|
|
@@ -33,6 +49,10 @@ export declare class Request {
|
|
|
33
49
|
* Get all headers.
|
|
34
50
|
*/
|
|
35
51
|
headers(): Record<string, string | string[] | undefined>;
|
|
52
|
+
/**
|
|
53
|
+
* Get the client IP address.
|
|
54
|
+
*/
|
|
55
|
+
ip(): string | undefined;
|
|
36
56
|
/**
|
|
37
57
|
* Get a specific header.
|
|
38
58
|
*/
|
|
@@ -77,5 +97,35 @@ export declare class Request {
|
|
|
77
97
|
* Get all input (query + body).
|
|
78
98
|
*/
|
|
79
99
|
all(): any;
|
|
100
|
+
/**
|
|
101
|
+
* Get a subset of the input data.
|
|
102
|
+
*/
|
|
103
|
+
only(keys: string[]): Record<string, any>;
|
|
104
|
+
get session(): any;
|
|
105
|
+
set session(value: any);
|
|
106
|
+
/**
|
|
107
|
+
* Get all input data except for a specified array of keys.
|
|
108
|
+
*/
|
|
109
|
+
except(keys: string[]): Record<string, any>;
|
|
110
|
+
/**
|
|
111
|
+
* Get the original incoming message.
|
|
112
|
+
*/
|
|
113
|
+
getIncomingMessage(): IncomingMessage;
|
|
114
|
+
/**
|
|
115
|
+
* Determine if the current request is asking for JSON.
|
|
116
|
+
*/
|
|
117
|
+
wantsJson(): boolean;
|
|
118
|
+
/**
|
|
119
|
+
* Determine if the current request is an AJAX request.
|
|
120
|
+
*/
|
|
121
|
+
ajax(): boolean;
|
|
122
|
+
/**
|
|
123
|
+
* Determine if the current request expects a JSON response.
|
|
124
|
+
*/
|
|
125
|
+
expectsJson(): boolean;
|
|
126
|
+
/**
|
|
127
|
+
* Validate the request with the given rules.
|
|
128
|
+
*/
|
|
129
|
+
validate(rules: Record<string, any>, messages?: Record<string, any>): Promise<any>;
|
|
80
130
|
}
|
|
81
131
|
//# sourceMappingURL=Request.d.ts.map
|
package/dist/Request.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Request.d.ts","sourceRoot":"","sources":["../src/Request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"Request.d.ts","sourceRoot":"","sources":["../src/Request.ts"],"names":[],"mappings":"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"}
|
package/dist/Request.js
CHANGED
|
@@ -34,30 +34,101 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.Request = void 0;
|
|
37
|
-
const node_url_1 = require("node:url");
|
|
38
37
|
const cookie = __importStar(require("cookie"));
|
|
38
|
+
const validation_1 = require("@arikajs/validation");
|
|
39
39
|
class Request {
|
|
40
40
|
constructor(app, req) {
|
|
41
|
+
this._session = null;
|
|
41
42
|
this._cookies = null;
|
|
42
43
|
this._body = null;
|
|
43
44
|
this._params = {};
|
|
45
|
+
this._auth = null;
|
|
46
|
+
this._view = null;
|
|
47
|
+
this._baseUrl = null;
|
|
44
48
|
this.app = app;
|
|
49
|
+
if (req) {
|
|
50
|
+
this.reset(req);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
reset(req) {
|
|
54
|
+
if (!req) {
|
|
55
|
+
this.req = null;
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
45
58
|
this.req = req;
|
|
46
|
-
|
|
47
|
-
this.
|
|
59
|
+
this.searchParams = null;
|
|
60
|
+
this._cookies = null;
|
|
61
|
+
this._body = null;
|
|
62
|
+
this._params = {};
|
|
63
|
+
this._baseUrl = null;
|
|
64
|
+
this._session = null;
|
|
65
|
+
this._auth = null;
|
|
66
|
+
this._view = null;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Get the view engine instance.
|
|
70
|
+
*/
|
|
71
|
+
get view() {
|
|
72
|
+
if (!this._view) {
|
|
73
|
+
try {
|
|
74
|
+
this._view = this.app.make('view');
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return this._view;
|
|
81
|
+
}
|
|
82
|
+
set view(value) {
|
|
83
|
+
this._view = value;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Get the authentication context for the request.
|
|
87
|
+
*/
|
|
88
|
+
get auth() {
|
|
89
|
+
if (!this._auth) {
|
|
90
|
+
try {
|
|
91
|
+
const authManager = this.app.make('auth');
|
|
92
|
+
this._auth = authManager.createContext(this);
|
|
93
|
+
}
|
|
94
|
+
catch (e) {
|
|
95
|
+
// Auth manager not registered
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return this._auth;
|
|
100
|
+
}
|
|
101
|
+
set auth(value) {
|
|
102
|
+
this._auth = value;
|
|
103
|
+
}
|
|
104
|
+
ensureSearchParams() {
|
|
105
|
+
if (!this.searchParams && this.req) {
|
|
106
|
+
const url = this.req.url || '/';
|
|
107
|
+
const queryIndex = url.indexOf('?');
|
|
108
|
+
if (queryIndex === -1) {
|
|
109
|
+
this.searchParams = new URLSearchParams();
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
this.searchParams = new URLSearchParams(url.slice(queryIndex + 1));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
48
115
|
}
|
|
49
116
|
/**
|
|
50
117
|
* Get the base URL (scheme + host) of the request.
|
|
51
118
|
* Falls back to app.url config if host header is missing.
|
|
52
119
|
*/
|
|
53
120
|
baseUrl() {
|
|
121
|
+
if (this._baseUrl)
|
|
122
|
+
return this._baseUrl;
|
|
54
123
|
const trustProxy = this.app.config().get('http.trustProxy', false);
|
|
55
124
|
const protocol = trustProxy ? (this.header('x-forwarded-proto') || 'http') : 'http';
|
|
56
125
|
const host = trustProxy ? (this.header('x-forwarded-host') || this.req.headers.host) : this.req.headers.host;
|
|
57
126
|
if (host) {
|
|
58
|
-
|
|
127
|
+
this._baseUrl = `${protocol}://${host}`;
|
|
128
|
+
return this._baseUrl;
|
|
59
129
|
}
|
|
60
|
-
|
|
130
|
+
this._baseUrl = this.app.config().get('app.url', 'http://localhost');
|
|
131
|
+
return this._baseUrl;
|
|
61
132
|
}
|
|
62
133
|
/**
|
|
63
134
|
* Get the application instance.
|
|
@@ -81,8 +152,9 @@ class Request {
|
|
|
81
152
|
* Get the request path.
|
|
82
153
|
*/
|
|
83
154
|
path() {
|
|
84
|
-
const url =
|
|
85
|
-
|
|
155
|
+
const url = this.req.url || '/';
|
|
156
|
+
const queryIndex = url.indexOf('?');
|
|
157
|
+
return queryIndex === -1 ? url : url.slice(0, queryIndex);
|
|
86
158
|
}
|
|
87
159
|
/**
|
|
88
160
|
* Get all headers.
|
|
@@ -90,6 +162,19 @@ class Request {
|
|
|
90
162
|
headers() {
|
|
91
163
|
return this.req.headers;
|
|
92
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* Get the client IP address.
|
|
167
|
+
*/
|
|
168
|
+
ip() {
|
|
169
|
+
const trustProxy = this.app.config().get('http.trustProxy', false);
|
|
170
|
+
if (trustProxy) {
|
|
171
|
+
const forwardedFor = this.header('x-forwarded-for');
|
|
172
|
+
if (typeof forwardedFor === 'string') {
|
|
173
|
+
return forwardedFor.split(',')[0].trim();
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return this.req.socket.remoteAddress;
|
|
177
|
+
}
|
|
93
178
|
/**
|
|
94
179
|
* Get a specific header.
|
|
95
180
|
*/
|
|
@@ -116,6 +201,7 @@ class Request {
|
|
|
116
201
|
* Get a query parameter.
|
|
117
202
|
*/
|
|
118
203
|
query(key) {
|
|
204
|
+
this.ensureSearchParams();
|
|
119
205
|
return this.searchParams.get(key);
|
|
120
206
|
}
|
|
121
207
|
/**
|
|
@@ -167,10 +253,87 @@ class Request {
|
|
|
167
253
|
* Get all input (query + body).
|
|
168
254
|
*/
|
|
169
255
|
all() {
|
|
256
|
+
this.ensureSearchParams();
|
|
170
257
|
const query = Object.fromEntries(this.searchParams.entries());
|
|
171
258
|
const body = typeof this._body === 'object' && this._body !== null ? this._body : {};
|
|
172
259
|
return { ...query, ...body };
|
|
173
260
|
}
|
|
261
|
+
/**
|
|
262
|
+
* Get a subset of the input data.
|
|
263
|
+
*/
|
|
264
|
+
only(keys) {
|
|
265
|
+
const all = this.all();
|
|
266
|
+
const result = {};
|
|
267
|
+
keys.forEach(key => {
|
|
268
|
+
if (key in all) {
|
|
269
|
+
result[key] = all[key];
|
|
270
|
+
}
|
|
271
|
+
});
|
|
272
|
+
return result;
|
|
273
|
+
}
|
|
274
|
+
get session() {
|
|
275
|
+
if (!this._session) {
|
|
276
|
+
const store = {};
|
|
277
|
+
this._session = {
|
|
278
|
+
get: (key) => store[key] ?? null,
|
|
279
|
+
put: (key, value) => { store[key] = value; },
|
|
280
|
+
forget: (key) => { delete store[key]; },
|
|
281
|
+
has: (key) => key in store,
|
|
282
|
+
all: () => ({ ...store }),
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
return this._session;
|
|
286
|
+
}
|
|
287
|
+
set session(value) {
|
|
288
|
+
this._session = value;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Get all input data except for a specified array of keys.
|
|
292
|
+
*/
|
|
293
|
+
except(keys) {
|
|
294
|
+
const all = this.all();
|
|
295
|
+
const result = { ...all };
|
|
296
|
+
keys.forEach(key => {
|
|
297
|
+
delete result[key];
|
|
298
|
+
});
|
|
299
|
+
return result;
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Get the original incoming message.
|
|
303
|
+
*/
|
|
304
|
+
getIncomingMessage() {
|
|
305
|
+
return this.req;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Determine if the current request is asking for JSON.
|
|
309
|
+
*/
|
|
310
|
+
wantsJson() {
|
|
311
|
+
const acceptable = this.header('accept');
|
|
312
|
+
return typeof acceptable === 'string' &&
|
|
313
|
+
(acceptable.includes('application/json') || acceptable.includes('+json'));
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Determine if the current request is an AJAX request.
|
|
317
|
+
*/
|
|
318
|
+
ajax() {
|
|
319
|
+
return this.header('x-requested-with') === 'XMLHttpRequest';
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Determine if the current request expects a JSON response.
|
|
323
|
+
*/
|
|
324
|
+
expectsJson() {
|
|
325
|
+
return this.ajax() || this.wantsJson();
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Validate the request with the given rules.
|
|
329
|
+
*/
|
|
330
|
+
async validate(rules, messages = {}) {
|
|
331
|
+
const validator = new validation_1.Validator(this.all(), rules, messages);
|
|
332
|
+
if (await validator.fails()) {
|
|
333
|
+
throw new validation_1.ValidationError(validator.errors());
|
|
334
|
+
}
|
|
335
|
+
return validator.validated();
|
|
336
|
+
}
|
|
174
337
|
}
|
|
175
338
|
exports.Request = Request;
|
|
176
339
|
//# sourceMappingURL=Request.js.map
|
package/dist/Request.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Request.js","sourceRoot":"","sources":["../src/Request.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"Request.js","sourceRoot":"","sources":["../src/Request.ts"],"names":[],"mappings":"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"}
|
package/dist/Response.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { ServerResponse } from 'node:http';
|
|
2
2
|
import * as cookie from 'cookie';
|
|
3
3
|
export declare class Response {
|
|
4
|
-
private
|
|
4
|
+
private res;
|
|
5
5
|
private _status;
|
|
6
6
|
private _headers;
|
|
7
7
|
private _cookies;
|
|
8
8
|
private _content;
|
|
9
9
|
constructor(res: ServerResponse);
|
|
10
|
+
reset(res: ServerResponse | null): void;
|
|
10
11
|
/**
|
|
11
12
|
* Set the HTTP status code.
|
|
12
13
|
*/
|
|
@@ -42,11 +43,19 @@ export declare class Response {
|
|
|
42
43
|
/**
|
|
43
44
|
* Set the response content as JSON.
|
|
44
45
|
*/
|
|
45
|
-
json(data: any): this;
|
|
46
|
+
json(data: any, status?: number): this;
|
|
46
47
|
/**
|
|
47
48
|
* Set the response content as plain text or HTML.
|
|
48
49
|
*/
|
|
49
|
-
send(content: string | Buffer): this;
|
|
50
|
+
send(content: string | Buffer, status?: number): this;
|
|
51
|
+
/**
|
|
52
|
+
* Redirect to a specific URL.
|
|
53
|
+
*/
|
|
54
|
+
redirect(url: string, status?: number): this;
|
|
55
|
+
/**
|
|
56
|
+
* Redirect to the previous URL.
|
|
57
|
+
*/
|
|
58
|
+
back(request: any, fallback?: string, status?: number): this;
|
|
50
59
|
/**
|
|
51
60
|
* Set the response content.
|
|
52
61
|
*/
|
|
@@ -68,5 +77,13 @@ export declare class Response {
|
|
|
68
77
|
* This is called by the Kernel.
|
|
69
78
|
*/
|
|
70
79
|
terminate(): void;
|
|
80
|
+
/**
|
|
81
|
+
* Get the underlying Node response.
|
|
82
|
+
*/
|
|
83
|
+
getOriginalResponse(): ServerResponse;
|
|
84
|
+
/**
|
|
85
|
+
* Get the underlying Node response (alias for getOriginalResponse)
|
|
86
|
+
*/
|
|
87
|
+
get raw(): ServerResponse;
|
|
71
88
|
}
|
|
72
89
|
//# sourceMappingURL=Response.d.ts.map
|
package/dist/Response.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Response.d.ts","sourceRoot":"","sources":["../src/Response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,qBAAa,QAAQ;IACjB,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"Response.d.ts","sourceRoot":"","sources":["../src/Response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,qBAAa,QAAQ;IACjB,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,QAAQ,CAAkD;IAClE,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,QAAQ,CAAgC;gBAEpC,GAAG,EAAE,cAAc;IAIxB,KAAK,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI;IAQvC;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK1B;;OAEG;IACH,EAAE,IAAI,IAAI;IAIV;;OAEG;IACH,OAAO,IAAI,IAAI;IAIf;;OAEG;IACH,SAAS,IAAI,IAAI;IAIjB;;OAEG;IACH,SAAS,IAAI,IAAI;IAIjB;;OAEG;IACH,QAAQ,IAAI,IAAI;IAIhB;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAK7D;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,gBAAqB,GAAG,IAAI;IAQhF;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAStC;;OAEG;IACI,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAW5D;;OAEG;IACI,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,MAAY,GAAG,IAAI;IAOxD;;OAEG;IACI,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAE,MAAY,EAAE,MAAM,GAAE,MAAY,GAAG,IAAI;IAK7E;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAK1C;;OAEG;IACH,UAAU,IAAI,MAAM,GAAG,MAAM,GAAG,IAAI;IAIpC;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;IAIxD;;;OAGG;IACH,SAAS,IAAI,IAAI;IAwBjB;;OAEG;IACH,mBAAmB,IAAI,cAAc;IAIrC;;OAEG;IACH,IAAI,GAAG,IAAI,cAAc,CAExB;CACJ"}
|
package/dist/Response.js
CHANGED
|
@@ -41,7 +41,15 @@ class Response {
|
|
|
41
41
|
this._headers = {};
|
|
42
42
|
this._cookies = [];
|
|
43
43
|
this._content = null;
|
|
44
|
+
if (res)
|
|
45
|
+
this.reset(res);
|
|
46
|
+
}
|
|
47
|
+
reset(res) {
|
|
44
48
|
this.res = res;
|
|
49
|
+
this._status = 200;
|
|
50
|
+
this._headers = {};
|
|
51
|
+
this._cookies = [];
|
|
52
|
+
this._content = null;
|
|
45
53
|
}
|
|
46
54
|
/**
|
|
47
55
|
* Set the HTTP status code.
|
|
@@ -100,7 +108,10 @@ class Response {
|
|
|
100
108
|
/**
|
|
101
109
|
* Set the response content as JSON.
|
|
102
110
|
*/
|
|
103
|
-
json(data) {
|
|
111
|
+
json(data, status) {
|
|
112
|
+
if (status) {
|
|
113
|
+
this.status(status);
|
|
114
|
+
}
|
|
104
115
|
this._content = JSON.stringify(data);
|
|
105
116
|
this.header('Content-Type', 'application/json');
|
|
106
117
|
return this;
|
|
@@ -108,13 +119,32 @@ class Response {
|
|
|
108
119
|
/**
|
|
109
120
|
* Set the response content as plain text or HTML.
|
|
110
121
|
*/
|
|
111
|
-
send(content) {
|
|
122
|
+
send(content, status) {
|
|
123
|
+
if (status) {
|
|
124
|
+
this.status(status);
|
|
125
|
+
}
|
|
112
126
|
this._content = content;
|
|
113
127
|
if (typeof content === 'string' && !this._headers['Content-Type']) {
|
|
114
128
|
this.header('Content-Type', content.startsWith('<') ? 'text/html' : 'text/plain');
|
|
115
129
|
}
|
|
116
130
|
return this;
|
|
117
131
|
}
|
|
132
|
+
/**
|
|
133
|
+
* Redirect to a specific URL.
|
|
134
|
+
*/
|
|
135
|
+
redirect(url, status = 302) {
|
|
136
|
+
this.status(status);
|
|
137
|
+
this.header('Location', url);
|
|
138
|
+
this._content = `Redirecting to ${url}`;
|
|
139
|
+
return this;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Redirect to the previous URL.
|
|
143
|
+
*/
|
|
144
|
+
back(request, fallback = '/', status = 302) {
|
|
145
|
+
const url = request.header('referer') || request.header('referrer') || fallback;
|
|
146
|
+
return this.redirect(url, status);
|
|
147
|
+
}
|
|
118
148
|
/**
|
|
119
149
|
* Set the response content.
|
|
120
150
|
*/
|
|
@@ -151,8 +181,10 @@ class Response {
|
|
|
151
181
|
// 1. Set Status
|
|
152
182
|
this.res.statusCode = this._status;
|
|
153
183
|
// 2. Set Headers
|
|
154
|
-
|
|
155
|
-
|
|
184
|
+
const headerKeys = Object.keys(this._headers);
|
|
185
|
+
for (let i = 0; i < headerKeys.length; i++) {
|
|
186
|
+
const key = headerKeys[i];
|
|
187
|
+
this.res.setHeader(key, this._headers[key]);
|
|
156
188
|
}
|
|
157
189
|
// 3. Set Cookies
|
|
158
190
|
if (this._cookies.length > 0) {
|
|
@@ -161,6 +193,18 @@ class Response {
|
|
|
161
193
|
// 4. Send body and end
|
|
162
194
|
this.res.end(this._content ?? '');
|
|
163
195
|
}
|
|
196
|
+
/**
|
|
197
|
+
* Get the underlying Node response.
|
|
198
|
+
*/
|
|
199
|
+
getOriginalResponse() {
|
|
200
|
+
return this.res;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Get the underlying Node response (alias for getOriginalResponse)
|
|
204
|
+
*/
|
|
205
|
+
get raw() {
|
|
206
|
+
return this.res;
|
|
207
|
+
}
|
|
164
208
|
}
|
|
165
209
|
exports.Response = Response;
|
|
166
210
|
//# sourceMappingURL=Response.js.map
|
package/dist/Response.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Response.js","sourceRoot":"","sources":["../src/Response.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,+CAAiC;AAEjC,MAAa,QAAQ;IAOjB,YAAY,GAAmB;QALvB,YAAO,GAAW,GAAG,CAAC;QACtB,aAAQ,GAA+C,EAAE,CAAC;QAC1D,aAAQ,GAAa,EAAE,CAAC;QACxB,aAAQ,GAA2B,IAAI,CAAC;QAG5C,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"Response.js","sourceRoot":"","sources":["../src/Response.ts"],"names":[],"mappings":"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"}
|