@mojojs/core 0.19.1 → 0.19.2
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/lib/logger.d.ts +69 -0
- package/lib/logger.js +63 -0
- package/lib/logger.js.map +1 -1
- package/lib/router/pattern.d.ts +33 -0
- package/lib/router/pattern.js +24 -0
- package/lib/router/pattern.js.map +1 -1
- package/lib/session.d.ts +35 -0
- package/lib/session.js +35 -0
- package/lib/session.js.map +1 -1
- package/lib/static.d.ts +19 -0
- package/lib/static.js +19 -0
- package/lib/static.js.map +1 -1
- package/package.json +1 -1
package/lib/logger.d.ts
CHANGED
|
@@ -11,9 +11,21 @@ interface LogEvent extends LogContext {
|
|
|
11
11
|
msg: string;
|
|
12
12
|
}
|
|
13
13
|
declare type LogFormatter = (data: LogEvent) => string;
|
|
14
|
+
/**
|
|
15
|
+
* A simple logger class.
|
|
16
|
+
*/
|
|
14
17
|
export declare class Logger {
|
|
18
|
+
/**
|
|
19
|
+
* Log destination stream.
|
|
20
|
+
*/
|
|
15
21
|
destination: NodeJS.WritableStream;
|
|
22
|
+
/**
|
|
23
|
+
* Log formatter.
|
|
24
|
+
*/
|
|
16
25
|
formatter: LogFormatter;
|
|
26
|
+
/**
|
|
27
|
+
* The last few logged messages.
|
|
28
|
+
*/
|
|
17
29
|
history: LogEvent[];
|
|
18
30
|
_historySize: number;
|
|
19
31
|
_level: number;
|
|
@@ -23,30 +35,87 @@ export declare class Logger {
|
|
|
23
35
|
historySize?: number;
|
|
24
36
|
level?: string;
|
|
25
37
|
});
|
|
38
|
+
/**
|
|
39
|
+
* Create a child logger that will include context information with every log message.
|
|
40
|
+
*/
|
|
26
41
|
child(context: LogContext): ChildLogger;
|
|
42
|
+
/**
|
|
43
|
+
* Log formatter with color highlighting.
|
|
44
|
+
*/
|
|
27
45
|
static colorFormatter(data: LogEvent): string;
|
|
46
|
+
/**
|
|
47
|
+
* Log `debug` message.
|
|
48
|
+
*/
|
|
28
49
|
debug(msg: string, context?: LogContext): void;
|
|
50
|
+
/**
|
|
51
|
+
* Log formatter without color highlighting.
|
|
52
|
+
*/
|
|
29
53
|
static stringFormatter(data: LogEvent): string;
|
|
54
|
+
/**
|
|
55
|
+
* Log formatter for systemd.
|
|
56
|
+
*/
|
|
30
57
|
static systemdFormatter(data: LogEvent): string;
|
|
58
|
+
/**
|
|
59
|
+
* Log `error` message.
|
|
60
|
+
*/
|
|
31
61
|
error(msg: string, context?: LogContext): void;
|
|
62
|
+
/**
|
|
63
|
+
* Log `fatal` message.
|
|
64
|
+
*/
|
|
32
65
|
fatal(msg: string, context?: LogContext): void;
|
|
66
|
+
/**
|
|
67
|
+
* Log `infor` message.
|
|
68
|
+
*/
|
|
33
69
|
info(msg: string, context?: LogContext): void;
|
|
70
|
+
/**
|
|
71
|
+
* JSON log formatter.
|
|
72
|
+
*/
|
|
34
73
|
static jsonFormatter(data: LogEvent): string;
|
|
74
|
+
/**
|
|
75
|
+
* Currently active log level.
|
|
76
|
+
*/
|
|
35
77
|
get level(): string;
|
|
36
78
|
set level(level: string);
|
|
79
|
+
/**
|
|
80
|
+
* Log `trace` message.
|
|
81
|
+
*/
|
|
37
82
|
trace(msg: string, context?: LogContext): void;
|
|
83
|
+
/**
|
|
84
|
+
* Log `warn` message.
|
|
85
|
+
*/
|
|
38
86
|
warn(msg: string, context?: LogContext): void;
|
|
39
87
|
_log(level: string, msg: string, context?: LogContext): void;
|
|
40
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* Child logger class.
|
|
91
|
+
*/
|
|
41
92
|
export declare class ChildLogger {
|
|
42
93
|
parent: Logger;
|
|
43
94
|
context: LogContext;
|
|
44
95
|
constructor(parent: Logger, context: LogContext);
|
|
96
|
+
/**
|
|
97
|
+
* Log `debug` message.
|
|
98
|
+
*/
|
|
45
99
|
debug(msg: string): void;
|
|
100
|
+
/**
|
|
101
|
+
* Log `error` message.
|
|
102
|
+
*/
|
|
46
103
|
error(msg: string): void;
|
|
104
|
+
/**
|
|
105
|
+
* Log `fatal` message.
|
|
106
|
+
*/
|
|
47
107
|
fatal(msg: string): void;
|
|
108
|
+
/**
|
|
109
|
+
* Log `info` message.
|
|
110
|
+
*/
|
|
48
111
|
info(msg: string): void;
|
|
112
|
+
/**
|
|
113
|
+
* Log `trace` message.
|
|
114
|
+
*/
|
|
49
115
|
trace(msg: string): void;
|
|
116
|
+
/**
|
|
117
|
+
* Log `warn` message.
|
|
118
|
+
*/
|
|
50
119
|
warn(msg: string): void;
|
|
51
120
|
}
|
|
52
121
|
export {};
|
package/lib/logger.js
CHANGED
|
@@ -8,8 +8,14 @@ const LEVEL = {
|
|
|
8
8
|
debug: 6,
|
|
9
9
|
trace: 7
|
|
10
10
|
};
|
|
11
|
+
/**
|
|
12
|
+
* A simple logger class.
|
|
13
|
+
*/
|
|
11
14
|
export class Logger {
|
|
12
15
|
constructor(options = {}) {
|
|
16
|
+
/**
|
|
17
|
+
* The last few logged messages.
|
|
18
|
+
*/
|
|
13
19
|
this.history = [];
|
|
14
20
|
this._level = 7;
|
|
15
21
|
this.destination = options.destination ?? process.stderr;
|
|
@@ -17,9 +23,15 @@ export class Logger {
|
|
|
17
23
|
this.level = process.env.MOJO_LOG_LEVEL ?? options.level ?? 'trace';
|
|
18
24
|
this._historySize = options.historySize ?? 0;
|
|
19
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Create a child logger that will include context information with every log message.
|
|
28
|
+
*/
|
|
20
29
|
child(context) {
|
|
21
30
|
return new ChildLogger(this, context);
|
|
22
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Log formatter with color highlighting.
|
|
34
|
+
*/
|
|
23
35
|
static colorFormatter(data) {
|
|
24
36
|
const formatted = Logger.stringFormatter(data);
|
|
25
37
|
if (data.level === 'error' || data.level === 'fatal')
|
|
@@ -28,35 +40,59 @@ export class Logger {
|
|
|
28
40
|
return chalk.yellow(formatted);
|
|
29
41
|
return formatted;
|
|
30
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Log `debug` message.
|
|
45
|
+
*/
|
|
31
46
|
debug(msg, context) {
|
|
32
47
|
if (this._level >= LEVEL.debug)
|
|
33
48
|
this._log('debug', msg, context);
|
|
34
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* Log formatter without color highlighting.
|
|
52
|
+
*/
|
|
35
53
|
static stringFormatter(data) {
|
|
36
54
|
if (data.requestId !== undefined)
|
|
37
55
|
return `[${data.time}] [${data.level}] [${data.requestId}] ${data.msg}\n`;
|
|
38
56
|
return `[${data.time}] [${data.level}] ${data.msg}\n`;
|
|
39
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Log formatter for systemd.
|
|
60
|
+
*/
|
|
40
61
|
static systemdFormatter(data) {
|
|
41
62
|
if (data.requestId === undefined)
|
|
42
63
|
return `<${LEVEL[data.level]}>[${data.level.substring(0, 1)}] ${data.msg}\n`;
|
|
43
64
|
return `<${LEVEL[data.level]}>[${data.level.substring(0, 1)}] [${data.requestId}] ${data.msg}\n`;
|
|
44
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Log `error` message.
|
|
68
|
+
*/
|
|
45
69
|
error(msg, context) {
|
|
46
70
|
if (this._level >= LEVEL.error)
|
|
47
71
|
this._log('error', msg, context);
|
|
48
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Log `fatal` message.
|
|
75
|
+
*/
|
|
49
76
|
fatal(msg, context) {
|
|
50
77
|
if (this._level >= LEVEL.fatal)
|
|
51
78
|
this._log('fatal', msg, context);
|
|
52
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* Log `infor` message.
|
|
82
|
+
*/
|
|
53
83
|
info(msg, context) {
|
|
54
84
|
if (this._level >= LEVEL.info)
|
|
55
85
|
this._log('info', msg, context);
|
|
56
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* JSON log formatter.
|
|
89
|
+
*/
|
|
57
90
|
static jsonFormatter(data) {
|
|
58
91
|
return JSON.stringify(data);
|
|
59
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Currently active log level.
|
|
95
|
+
*/
|
|
60
96
|
get level() {
|
|
61
97
|
return Object.keys(LEVEL).find(key => LEVEL[key] === this._level);
|
|
62
98
|
}
|
|
@@ -64,10 +100,16 @@ export class Logger {
|
|
|
64
100
|
assert(LEVEL[level] !== undefined, `Unsupported log level "${level}"`);
|
|
65
101
|
this._level = LEVEL[level];
|
|
66
102
|
}
|
|
103
|
+
/**
|
|
104
|
+
* Log `trace` message.
|
|
105
|
+
*/
|
|
67
106
|
trace(msg, context) {
|
|
68
107
|
if (this._level >= LEVEL.trace)
|
|
69
108
|
this._log('trace', msg, context);
|
|
70
109
|
}
|
|
110
|
+
/**
|
|
111
|
+
* Log `warn` message.
|
|
112
|
+
*/
|
|
71
113
|
warn(msg, context) {
|
|
72
114
|
if (this._level >= LEVEL.warn)
|
|
73
115
|
this._log('warn', msg, context);
|
|
@@ -88,26 +130,47 @@ export class Logger {
|
|
|
88
130
|
}
|
|
89
131
|
}
|
|
90
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* Child logger class.
|
|
135
|
+
*/
|
|
91
136
|
export class ChildLogger {
|
|
92
137
|
constructor(parent, context) {
|
|
93
138
|
this.parent = parent;
|
|
94
139
|
this.context = context;
|
|
95
140
|
}
|
|
141
|
+
/**
|
|
142
|
+
* Log `debug` message.
|
|
143
|
+
*/
|
|
96
144
|
debug(msg) {
|
|
97
145
|
this.parent.debug(msg, this.context);
|
|
98
146
|
}
|
|
147
|
+
/**
|
|
148
|
+
* Log `error` message.
|
|
149
|
+
*/
|
|
99
150
|
error(msg) {
|
|
100
151
|
this.parent.error(msg, this.context);
|
|
101
152
|
}
|
|
153
|
+
/**
|
|
154
|
+
* Log `fatal` message.
|
|
155
|
+
*/
|
|
102
156
|
fatal(msg) {
|
|
103
157
|
this.parent.fatal(msg, this.context);
|
|
104
158
|
}
|
|
159
|
+
/**
|
|
160
|
+
* Log `info` message.
|
|
161
|
+
*/
|
|
105
162
|
info(msg) {
|
|
106
163
|
this.parent.info(msg, this.context);
|
|
107
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* Log `trace` message.
|
|
167
|
+
*/
|
|
108
168
|
trace(msg) {
|
|
109
169
|
this.parent.trace(msg, this.context);
|
|
110
170
|
}
|
|
171
|
+
/**
|
|
172
|
+
* Log `warn` message.
|
|
173
|
+
*/
|
|
111
174
|
warn(msg) {
|
|
112
175
|
this.parent.warn(msg, this.context);
|
|
113
176
|
}
|
package/lib/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAEA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,MAAM,OAAO,CAAC;AAa1B,MAAM,KAAK,GAA2B;IACpC,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,MAAM,OAAO,MAAM;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
|
package/lib/router/pattern.d.ts
CHANGED
|
@@ -6,12 +6,33 @@ interface PlaceholderTypes {
|
|
|
6
6
|
[name: string]: PlaceholderType;
|
|
7
7
|
}
|
|
8
8
|
declare type ASTNode = [symbol, ...string[]];
|
|
9
|
+
/**
|
|
10
|
+
* Route pattern class.
|
|
11
|
+
*/
|
|
9
12
|
export declare class Pattern {
|
|
13
|
+
/**
|
|
14
|
+
* Pattern constraints.
|
|
15
|
+
*/
|
|
10
16
|
constraints: PlaceholderTypes;
|
|
17
|
+
/**
|
|
18
|
+
* Pattern default values.
|
|
19
|
+
*/
|
|
11
20
|
defaults: Record<string, any>;
|
|
21
|
+
/**
|
|
22
|
+
* Placeholder names.
|
|
23
|
+
*/
|
|
12
24
|
placeholders: string[];
|
|
25
|
+
/**
|
|
26
|
+
* Pattern in compiled regular expression form.
|
|
27
|
+
*/
|
|
13
28
|
regex: RegExp | undefined;
|
|
29
|
+
/**
|
|
30
|
+
* Placeholder types.
|
|
31
|
+
*/
|
|
14
32
|
types: PlaceholderTypes;
|
|
33
|
+
/**
|
|
34
|
+
* Raw unparsed pattern.
|
|
35
|
+
*/
|
|
15
36
|
unparsed: string;
|
|
16
37
|
_ast: ASTNode[];
|
|
17
38
|
constructor(path?: string, options?: {
|
|
@@ -19,11 +40,23 @@ export declare class Pattern {
|
|
|
19
40
|
defaults?: Record<string, any>;
|
|
20
41
|
types?: PlaceholderTypes;
|
|
21
42
|
});
|
|
43
|
+
/**
|
|
44
|
+
* Match pattern against entire path.
|
|
45
|
+
*/
|
|
22
46
|
match(path: string, options: MatchOptions): Record<string, any> | null;
|
|
47
|
+
/**
|
|
48
|
+
* Match pattern against path and return the remainder.
|
|
49
|
+
*/
|
|
23
50
|
matchPartial(path: string, options: MatchOptions): (Record<string, any> & {
|
|
24
51
|
remainder: string;
|
|
25
52
|
}) | null;
|
|
53
|
+
/**
|
|
54
|
+
* Parse pattern.
|
|
55
|
+
*/
|
|
26
56
|
parse(path?: string): this;
|
|
57
|
+
/**
|
|
58
|
+
* Render pattern into a path with parameters.
|
|
59
|
+
*/
|
|
27
60
|
render(values: Record<string, string>, options: MatchOptions): string;
|
|
28
61
|
_compile(withExtension: boolean): RegExp;
|
|
29
62
|
_compileExtension(ext: PlaceholderType, withDefault: boolean): string;
|
package/lib/router/pattern.js
CHANGED
|
@@ -6,10 +6,22 @@ const OP = {
|
|
|
6
6
|
text: Symbol('text'),
|
|
7
7
|
wildcard: Symbol('wildcard')
|
|
8
8
|
};
|
|
9
|
+
/**
|
|
10
|
+
* Route pattern class.
|
|
11
|
+
*/
|
|
9
12
|
export class Pattern {
|
|
10
13
|
constructor(path, options = {}) {
|
|
14
|
+
/**
|
|
15
|
+
* Placeholder names.
|
|
16
|
+
*/
|
|
11
17
|
this.placeholders = [];
|
|
18
|
+
/**
|
|
19
|
+
* Pattern in compiled regular expression form.
|
|
20
|
+
*/
|
|
12
21
|
this.regex = undefined;
|
|
22
|
+
/**
|
|
23
|
+
* Raw unparsed pattern.
|
|
24
|
+
*/
|
|
13
25
|
this.unparsed = '';
|
|
14
26
|
this._ast = [];
|
|
15
27
|
this.constraints = options.constraints ?? {};
|
|
@@ -18,12 +30,18 @@ export class Pattern {
|
|
|
18
30
|
if (path !== undefined)
|
|
19
31
|
this.parse(path);
|
|
20
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Match pattern against entire path.
|
|
35
|
+
*/
|
|
21
36
|
match(path, options) {
|
|
22
37
|
const result = this.matchPartial(path, options);
|
|
23
38
|
if (result === null || (result.remainder.length > 0 && result.remainder !== '/'))
|
|
24
39
|
return null;
|
|
25
40
|
return result.captures;
|
|
26
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Match pattern against path and return the remainder.
|
|
44
|
+
*/
|
|
27
45
|
matchPartial(path, options) {
|
|
28
46
|
if (this.regex === undefined)
|
|
29
47
|
this.regex = this._compile(options.isEndpoint);
|
|
@@ -41,11 +59,17 @@ export class Pattern {
|
|
|
41
59
|
}
|
|
42
60
|
return { remainder: path.replace(prefix, ''), captures };
|
|
43
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Parse pattern.
|
|
64
|
+
*/
|
|
44
65
|
parse(path = '') {
|
|
45
66
|
this.unparsed = path.replace(/^\/*|\/+/g, '/').replace(/\/$/, '');
|
|
46
67
|
this._tokenize();
|
|
47
68
|
return this;
|
|
48
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Render pattern into a path with parameters.
|
|
72
|
+
*/
|
|
49
73
|
render(values, options) {
|
|
50
74
|
let optional = values.ext == null;
|
|
51
75
|
const parts = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pattern.js","sourceRoot":"","sources":["../../src/router/pattern.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,aAAa,CAAC;AAEzC,MAAM,EAAE,GAAG;IACT,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC;CAC7B,CAAC;AAWF,MAAM,OAAO,OAAO;
|
|
1
|
+
{"version":3,"file":"pattern.js","sourceRoot":"","sources":["../../src/router/pattern.ts"],"names":[],"mappings":"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"}
|
package/lib/session.d.ts
CHANGED
|
@@ -1,17 +1,52 @@
|
|
|
1
1
|
import type { App } from './app.js';
|
|
2
2
|
import type { Context } from './context.js';
|
|
3
3
|
import type { SessionData } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Session manager class.
|
|
6
|
+
*/
|
|
4
7
|
export declare class Session {
|
|
8
|
+
/**
|
|
9
|
+
* Name for session cookies, defaults to `mojo`.
|
|
10
|
+
*/
|
|
5
11
|
cookieName: string;
|
|
12
|
+
/**
|
|
13
|
+
* Path for session cookies, defaults to `/`.
|
|
14
|
+
*/
|
|
6
15
|
cookiePath: string;
|
|
16
|
+
/**
|
|
17
|
+
* Default time for sessions to expire in seconds from now, defaults to `3600`. The expiration timeout gets refreshed
|
|
18
|
+
* for every request. Setting the value to `0` will allow sessions to persist until the browser window is closed,
|
|
19
|
+
* this can have security implications though.
|
|
20
|
+
*/
|
|
7
21
|
expiration: number;
|
|
22
|
+
/**
|
|
23
|
+
* Set the `HttpOnly` value on all session cookies.
|
|
24
|
+
*/
|
|
8
25
|
httpOnly: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Set the `SameSite` value on all session cookies, defaults to `lax`.
|
|
28
|
+
*/
|
|
9
29
|
sameSite: 'lax' | 'strict' | 'none';
|
|
30
|
+
/**
|
|
31
|
+
* Set the secure flag on all session cookies, so that browsers send them only over HTTPS connections.
|
|
32
|
+
*/
|
|
10
33
|
secure: boolean;
|
|
11
34
|
_app: WeakRef<App>;
|
|
12
35
|
constructor(app: App);
|
|
36
|
+
/**
|
|
37
|
+
* Decrypt cookie.
|
|
38
|
+
*/
|
|
13
39
|
static decrypt(secrets: string[], encrypted: string): Promise<string | null>;
|
|
40
|
+
/**
|
|
41
|
+
* Encrypt cookie.
|
|
42
|
+
*/
|
|
14
43
|
static encrypt(secret: string, value: string): Promise<string>;
|
|
44
|
+
/**
|
|
45
|
+
* Load session data from encrypted cookie.
|
|
46
|
+
*/
|
|
15
47
|
load(ctx: Context): Promise<SessionData | null>;
|
|
48
|
+
/**
|
|
49
|
+
* Store session data in encrypted cookie.
|
|
50
|
+
*/
|
|
16
51
|
store(ctx: Context, data: SessionData): Promise<void>;
|
|
17
52
|
}
|
package/lib/session.js
CHANGED
|
@@ -2,16 +2,42 @@ import crypto from 'crypto';
|
|
|
2
2
|
import { promisify } from 'util';
|
|
3
3
|
const scrypt = promisify(crypto.scrypt);
|
|
4
4
|
const randomBytes = promisify(crypto.randomBytes);
|
|
5
|
+
/**
|
|
6
|
+
* Session manager class.
|
|
7
|
+
*/
|
|
5
8
|
export class Session {
|
|
6
9
|
constructor(app) {
|
|
10
|
+
/**
|
|
11
|
+
* Name for session cookies, defaults to `mojo`.
|
|
12
|
+
*/
|
|
7
13
|
this.cookieName = 'mojo';
|
|
14
|
+
/**
|
|
15
|
+
* Path for session cookies, defaults to `/`.
|
|
16
|
+
*/
|
|
8
17
|
this.cookiePath = '/';
|
|
18
|
+
/**
|
|
19
|
+
* Default time for sessions to expire in seconds from now, defaults to `3600`. The expiration timeout gets refreshed
|
|
20
|
+
* for every request. Setting the value to `0` will allow sessions to persist until the browser window is closed,
|
|
21
|
+
* this can have security implications though.
|
|
22
|
+
*/
|
|
9
23
|
this.expiration = 3600;
|
|
24
|
+
/**
|
|
25
|
+
* Set the `HttpOnly` value on all session cookies.
|
|
26
|
+
*/
|
|
10
27
|
this.httpOnly = true;
|
|
28
|
+
/**
|
|
29
|
+
* Set the `SameSite` value on all session cookies, defaults to `lax`.
|
|
30
|
+
*/
|
|
11
31
|
this.sameSite = 'lax';
|
|
32
|
+
/**
|
|
33
|
+
* Set the secure flag on all session cookies, so that browsers send them only over HTTPS connections.
|
|
34
|
+
*/
|
|
12
35
|
this.secure = false;
|
|
13
36
|
this._app = new WeakRef(app);
|
|
14
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Decrypt cookie.
|
|
40
|
+
*/
|
|
15
41
|
static async decrypt(secrets, encrypted) {
|
|
16
42
|
const match = encrypted.match(/^([^-]+)--([^-]+)--([^-]+)$/);
|
|
17
43
|
if (match === null)
|
|
@@ -33,6 +59,9 @@ export class Session {
|
|
|
33
59
|
}
|
|
34
60
|
return null;
|
|
35
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Encrypt cookie.
|
|
64
|
+
*/
|
|
36
65
|
static async encrypt(secret, value) {
|
|
37
66
|
const key = await scrypt(secret, 'salt', 32);
|
|
38
67
|
const iv = await randomBytes(12);
|
|
@@ -40,6 +69,9 @@ export class Session {
|
|
|
40
69
|
const encrypted = cipher.update(value, 'utf8', 'base64') + cipher.final('base64');
|
|
41
70
|
return encrypted + '--' + iv.toString('base64') + '--' + cipher.getAuthTag().toString('base64');
|
|
42
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Load session data from encrypted cookie.
|
|
74
|
+
*/
|
|
43
75
|
async load(ctx) {
|
|
44
76
|
const cookie = ctx.req.getCookie(this.cookieName);
|
|
45
77
|
if (cookie === null)
|
|
@@ -61,6 +93,9 @@ export class Session {
|
|
|
61
93
|
}
|
|
62
94
|
return data;
|
|
63
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* Store session data in encrypted cookie.
|
|
98
|
+
*/
|
|
64
99
|
async store(ctx, data) {
|
|
65
100
|
if (typeof data.expires !== 'number') {
|
|
66
101
|
const expiration = data.expiration ?? this.expiration;
|
package/lib/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAGA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAC,SAAS,EAAC,MAAM,MAAM,CAAC;AAE/B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACxC,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAElD,MAAM,OAAO,OAAO;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
package/lib/static.d.ts
CHANGED
|
@@ -1,14 +1,33 @@
|
|
|
1
1
|
import type { MojoContext } from './types.js';
|
|
2
2
|
import Path from '@mojojs/path';
|
|
3
|
+
/**
|
|
4
|
+
* Static file server class.
|
|
5
|
+
*/
|
|
3
6
|
export declare class Static {
|
|
7
|
+
/**
|
|
8
|
+
* Prefix to use for all static files.
|
|
9
|
+
*/
|
|
4
10
|
prefix: string;
|
|
11
|
+
/**
|
|
12
|
+
* Directories to serve static files from, first one has the highest precedence.
|
|
13
|
+
*/
|
|
5
14
|
publicPaths: string[];
|
|
6
15
|
dispatch(ctx: MojoContext): Promise<boolean>;
|
|
16
|
+
/**
|
|
17
|
+
* Get static file path with prefix.
|
|
18
|
+
*/
|
|
7
19
|
filePath(path: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Check freshness of request by comparing the `If-None-Match` and `If-Modified-Since` request headers to the `ETag`
|
|
22
|
+
* and `Last-Modified` response headers.
|
|
23
|
+
*/
|
|
8
24
|
isFresh(ctx: MojoContext, options?: {
|
|
9
25
|
etag?: string;
|
|
10
26
|
lastModified?: Date;
|
|
11
27
|
}): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Serve a specific file.
|
|
30
|
+
*/
|
|
12
31
|
serveFile(ctx: MojoContext, file: Path): Promise<void>;
|
|
13
32
|
_rangeNotSatisfiable(ctx: MojoContext): Promise<void>;
|
|
14
33
|
}
|
package/lib/static.js
CHANGED
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
import crypto from 'crypto';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import Path from '@mojojs/path';
|
|
4
|
+
/**
|
|
5
|
+
* Static file server class.
|
|
6
|
+
*/
|
|
4
7
|
export class Static {
|
|
5
8
|
constructor() {
|
|
9
|
+
/**
|
|
10
|
+
* Prefix to use for all static files.
|
|
11
|
+
*/
|
|
6
12
|
this.prefix = '/public';
|
|
13
|
+
/**
|
|
14
|
+
* Directories to serve static files from, first one has the highest precedence.
|
|
15
|
+
*/
|
|
7
16
|
this.publicPaths = [Path.currentFile().sibling('..', 'vendor', 'public').toString()];
|
|
8
17
|
}
|
|
9
18
|
async dispatch(ctx) {
|
|
@@ -26,11 +35,18 @@ export class Static {
|
|
|
26
35
|
}
|
|
27
36
|
return false;
|
|
28
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Get static file path with prefix.
|
|
40
|
+
*/
|
|
29
41
|
filePath(path) {
|
|
30
42
|
if (path.startsWith('/') === false)
|
|
31
43
|
path = '/' + path;
|
|
32
44
|
return this.prefix + path;
|
|
33
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Check freshness of request by comparing the `If-None-Match` and `If-Modified-Since` request headers to the `ETag`
|
|
48
|
+
* and `Last-Modified` response headers.
|
|
49
|
+
*/
|
|
34
50
|
isFresh(ctx, options = {}) {
|
|
35
51
|
const etag = options.etag;
|
|
36
52
|
const lastModified = options.lastModified;
|
|
@@ -60,6 +76,9 @@ export class Static {
|
|
|
60
76
|
}
|
|
61
77
|
return false;
|
|
62
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* Serve a specific file.
|
|
81
|
+
*/
|
|
63
82
|
async serveFile(ctx, file) {
|
|
64
83
|
const app = ctx.app;
|
|
65
84
|
if ((await app.hooks.runHook('static:before', ctx, file)) === true)
|
package/lib/static.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static.js","sourceRoot":"","sources":["../src/static.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,IAAI,MAAM,cAAc,CAAC;AAEhC,MAAM,OAAO,MAAM;IAAnB;QACE,WAAM,GAAG,SAAS,CAAC;QACnB,gBAAW,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"static.js","sourceRoot":"","sources":["../src/static.ts"],"names":[],"mappings":"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"}
|