zsyp 1.3.0 → 1.3.1
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/index.js +1 -3
- package/lib/app.js +1 -5
- package/lib/converter.js +3 -5
- package/lib/filter.js +1 -3
- package/lib/from.js +3 -8
- package/lib/logger.js +6 -5
- package/lib/router.js +8 -12
- package/lib/source-map.js +6 -10
- package/package.json +3 -3
package/index.js
CHANGED
package/lib/app.js
CHANGED
|
@@ -6,10 +6,7 @@ const event = require('./event');
|
|
|
6
6
|
|
|
7
7
|
module.exports = makeApp;
|
|
8
8
|
|
|
9
|
-
const {
|
|
10
|
-
ZSYP_DOMAINS: domains,
|
|
11
|
-
ZSYP_DB: database = 'mongodb://localhost/zsyp'
|
|
12
|
-
} = process.env;
|
|
9
|
+
const { ZSYP_DOMAINS: domains, ZSYP_DB: database = 'mongodb://localhost/zsyp' } = process.env;
|
|
13
10
|
|
|
14
11
|
function makeApp(opts = {}) {
|
|
15
12
|
const app = connect();
|
|
@@ -23,4 +20,3 @@ function makeApp(opts = {}) {
|
|
|
23
20
|
|
|
24
21
|
return app;
|
|
25
22
|
}
|
|
26
|
-
|
package/lib/converter.js
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
module.exports = makeConverter;
|
|
2
2
|
|
|
3
3
|
function makeConverter({ converter }) {
|
|
4
|
-
|
|
5
|
-
async function convert(req, res, next) {
|
|
4
|
+
async function convert(req, _res, next) {
|
|
6
5
|
try {
|
|
7
6
|
const { item, meta } = await converter(req.body);
|
|
8
7
|
req.item = item;
|
|
9
8
|
req.meta = meta;
|
|
10
9
|
return next();
|
|
11
|
-
} catch(e) {
|
|
10
|
+
} catch (e) {
|
|
12
11
|
return next(e);
|
|
13
12
|
}
|
|
14
13
|
}
|
|
@@ -16,8 +15,7 @@ function makeConverter({ converter }) {
|
|
|
16
15
|
return converter ? convert : keep;
|
|
17
16
|
}
|
|
18
17
|
|
|
19
|
-
function keep(req,
|
|
18
|
+
function keep(req, _res, next) {
|
|
20
19
|
req.item = req.body;
|
|
21
20
|
return next();
|
|
22
21
|
}
|
|
23
|
-
|
package/lib/filter.js
CHANGED
|
@@ -3,7 +3,6 @@ module.exports = makeFilter;
|
|
|
3
3
|
/* global URL */
|
|
4
4
|
|
|
5
5
|
function makeFilter({ domains }) {
|
|
6
|
-
|
|
7
6
|
if (!domains) {
|
|
8
7
|
return;
|
|
9
8
|
}
|
|
@@ -11,7 +10,7 @@ function makeFilter({ domains }) {
|
|
|
11
10
|
const domainRe = domains && new RegExp(domains);
|
|
12
11
|
return filter;
|
|
13
12
|
|
|
14
|
-
function filter({ body: csp },
|
|
13
|
+
function filter({ body: csp }, _res, next) {
|
|
15
14
|
const uri = csp['csp-report']['document-uri'];
|
|
16
15
|
const { hostname } = new URL(uri);
|
|
17
16
|
if (domainRe.test(hostname)) {
|
|
@@ -19,4 +18,3 @@ function makeFilter({ domains }) {
|
|
|
19
18
|
}
|
|
20
19
|
}
|
|
21
20
|
}
|
|
22
|
-
|
package/lib/from.js
CHANGED
|
@@ -2,15 +2,10 @@ const { parse } = require('useragent');
|
|
|
2
2
|
|
|
3
3
|
module.exports = from;
|
|
4
4
|
|
|
5
|
-
function from(req,
|
|
5
|
+
function from(req, _res, next) {
|
|
6
6
|
const { headers, body } = req;
|
|
7
|
-
const ua = body?.from?.ua ??
|
|
8
|
-
const {
|
|
9
|
-
family,
|
|
10
|
-
major,
|
|
11
|
-
os,
|
|
12
|
-
device
|
|
13
|
-
} = parse(ua);
|
|
7
|
+
const ua = body?.from?.ua ?? headers['user-agent'];
|
|
8
|
+
const { family, major, os, device } = parse(ua);
|
|
14
9
|
const data = {
|
|
15
10
|
ua,
|
|
16
11
|
browser: {
|
package/lib/logger.js
CHANGED
|
@@ -5,18 +5,19 @@ module.exports = makeLogger;
|
|
|
5
5
|
function makeLogger({ db, name }) {
|
|
6
6
|
const cache = Object.create(null);
|
|
7
7
|
|
|
8
|
-
const getCollection =
|
|
9
|
-
() => collectionFromCache(name) :
|
|
10
|
-
({ name }) => collectionFromCache(name);
|
|
8
|
+
const getCollection = name ? () => collectionFromCache(name) : ({ name }) => collectionFromCache(name);
|
|
11
9
|
|
|
12
10
|
return log;
|
|
13
11
|
|
|
14
|
-
function log({ from, item, meta },
|
|
12
|
+
function log({ from, item, meta }, _res, next) {
|
|
15
13
|
debug('saving %j', item);
|
|
16
14
|
getCollection(meta)
|
|
17
15
|
.insertOne({ ...item, from })
|
|
18
16
|
.then(() => next())
|
|
19
|
-
.catch(err => {
|
|
17
|
+
.catch(err => {
|
|
18
|
+
console.error(err);
|
|
19
|
+
next();
|
|
20
|
+
});
|
|
20
21
|
}
|
|
21
22
|
|
|
22
23
|
function collectionFromCache(name) {
|
package/lib/router.js
CHANGED
|
@@ -3,22 +3,18 @@ const makeFilter = require('./filter');
|
|
|
3
3
|
const makeConverter = require('./converter');
|
|
4
4
|
const makeLogger = require('./logger');
|
|
5
5
|
|
|
6
|
-
module.exports =
|
|
7
|
-
const stack = [
|
|
8
|
-
respond,
|
|
9
|
-
from,
|
|
10
|
-
makeFilter(opts),
|
|
11
|
-
makeConverter(opts),
|
|
12
|
-
makeLogger(opts),
|
|
13
|
-
opts.finalMiddleware
|
|
14
|
-
].filter(Boolean);
|
|
6
|
+
module.exports = router;
|
|
15
7
|
|
|
16
|
-
|
|
17
|
-
|
|
8
|
+
function router(opts) {
|
|
9
|
+
const stack = [respond, from, makeFilter(opts), makeConverter(opts), makeLogger(opts), opts.finalMiddleware].filter(
|
|
10
|
+
Boolean
|
|
11
|
+
);
|
|
18
12
|
|
|
13
|
+
return loop(stack);
|
|
14
|
+
}
|
|
19
15
|
|
|
20
16
|
function loop(stack) {
|
|
21
|
-
return
|
|
17
|
+
return (req, res, next) => {
|
|
22
18
|
let i = 0;
|
|
23
19
|
fn();
|
|
24
20
|
|
package/lib/source-map.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const { readFile } = require('fs').promises;
|
|
2
|
-
const path = require('path');
|
|
1
|
+
const { readFile } = require('node:fs').promises;
|
|
2
|
+
const path = require('node:path');
|
|
3
3
|
const { SourceMapConsumer } = require('source-map');
|
|
4
4
|
const { LRUCache: LRU } = require('lru-cache');
|
|
5
5
|
|
|
@@ -8,20 +8,16 @@ module.exports = {
|
|
|
8
8
|
clear
|
|
9
9
|
};
|
|
10
10
|
|
|
11
|
-
const {
|
|
12
|
-
ZSYP_SOURCE_MAP_DIR = '/var/lib/zsyp',
|
|
13
|
-
ZSYP_SOURCE_MAP_CACHE_SIZE = 30
|
|
14
|
-
} = process.env;
|
|
15
|
-
|
|
11
|
+
const { ZSYP_SOURCE_MAP_DIR = '/var/lib/zsyp', ZSYP_SOURCE_MAP_CACHE_SIZE = 30 } = process.env;
|
|
16
12
|
|
|
17
13
|
const cache = new LRU({
|
|
18
14
|
max: ZSYP_SOURCE_MAP_CACHE_SIZE,
|
|
19
15
|
fetchMethod: fetchSourceMap,
|
|
20
|
-
dispose: smc => smc
|
|
16
|
+
dispose: smc => smc?.destroy()
|
|
21
17
|
});
|
|
22
18
|
|
|
23
19
|
async function resolve({ an, av }, frame) {
|
|
24
|
-
const [source, line, column
|
|
20
|
+
const [source, line, column] = frame;
|
|
25
21
|
const smc = await loadSourceMap(an, av, source);
|
|
26
22
|
if (!smc) {
|
|
27
23
|
return frame;
|
|
@@ -48,7 +44,7 @@ function loadSourceMap(app, version, source) {
|
|
|
48
44
|
|
|
49
45
|
async function fetchSourceMap(filename) {
|
|
50
46
|
try {
|
|
51
|
-
const txt = await readFile(filename
|
|
47
|
+
const txt = await readFile(`${filename}.map`);
|
|
52
48
|
const map = JSON.parse(txt);
|
|
53
49
|
return new SourceMapConsumer(map);
|
|
54
50
|
} catch {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zsyp",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.1",
|
|
4
4
|
"description": "CSP violation reports logger.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Damian Krzeminski",
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
"useragent": "^2.3.0"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
|
-
"@
|
|
31
|
-
"supertest": "~
|
|
30
|
+
"@biomejs/biome": "^1.9.4",
|
|
31
|
+
"supertest-fetch": "~2"
|
|
32
32
|
},
|
|
33
33
|
"scripts": {
|
|
34
34
|
"test": "make check"
|