Skip to content

Commit 6fc24df

Browse files
andrewshellclaude
andcommitted
Pre-production cleanup for 2.2.0 release
High Priority Fixes: - Remove debug logging from client.js and services files - Fix hardcoded timeout in services/notify-one.js to use config.requestTimeout - Remove deprecated MongoDB useUnifiedTopology option - Remove unused moment.js file after Day.js migration Code Quality Improvements: - Add error handling to controllers/docs.js for file operations - Standardize async/await patterns in controllers/rpc2.js and controllers/please-notify.js - Parallelize resource validation in services/please-notify.js for better performance Validation: - All tests pass ✓ - ESLint passes with zero issues ✓ - Zero security vulnerabilities ✓ Ready for production deployment of 2.2.0 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent dc4eb2f commit 6fc24df

File tree

15 files changed

+106
-611
lines changed

15 files changed

+106
-611
lines changed

.prettierrc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22
"tabWidth": 4,
33
"useTabs": false,
44
"semi": true,
5-
"singleQuote": false,
5+
"singleQuote": true,
66
"quoteProps": "as-needed",
7-
"trailingComma": "es5",
7+
"trailingComma": false,
88
"bracketSpacing": true,
99
"bracketSameLine": false,
1010
"arrowParens": "avoid",
1111
"printWidth": 80,
1212
"endOfLine": "lf"
13-
}
13+
}

app.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ app.use(require('./controllers'));
5959
async function startServer() {
6060
await initializeDayjs();
6161
await mongodb.connect('rsscloud', config.mongodbUri);
62-
62+
6363
server = app.listen(config.port, () => {
6464
app.locals.host = config.domain;
6565
app.locals.port = server.address().port;

client.js

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ require('console-stamp')(console, 'HH:MM:ss.l');
1919
nconf
2020
.overrides({
2121
'APP_NAME': 'rssCloudClient',
22-
'APP_VERSION': packageJson.version,
22+
'APP_VERSION': packageJson.version
2323
})
2424
.argv()
2525
.env()
2626
.defaults({
27-
"DOMAIN": "localhost",
28-
"PORT": 9000
27+
'DOMAIN': 'localhost',
28+
'PORT': 9000
2929
});
3030

3131
console.log(`${nconf.get('APP_NAME')} ${nconf.get('APP_VERSION')}`);
@@ -44,21 +44,15 @@ app.use(express.static('public', {
4444
}));
4545

4646
app.post('/RPC2', textParser, (req, res) => {
47-
console.log('rpc');
48-
console.dir(req.body);
4947
res.send('');
5048
});
5149

5250
app.get('/*', (req, res) => {
53-
const challenge = req.query.challenge || "";
54-
console.log('get');
55-
console.dir(req.query);
51+
const challenge = req.query.challenge || '';
5652
res.send(challenge);
5753
});
5854

5955
app.post('/*', urlencodedParser, (req, res) => {
60-
console.log('post');
61-
console.dir(req.body);
6256
res.send('');
6357
});
6458

config.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,19 @@ const nconf = require('nconf'),
99
nconf
1010
.overrides({
1111
'APP_NAME': 'rssCloudServer',
12-
'APP_VERSION': packageJson.version,
12+
'APP_VERSION': packageJson.version
1313
})
1414
.argv()
1515
.env()
1616
.defaults({
17-
"DOMAIN": "localhost",
18-
"PORT": 5337,
19-
"MONGODB_URI": "mongodb://localhost:27017/rsscloud",
20-
"MAX_CONSECUTIVE_ERRORS": 3,
21-
"MAX_RESOURCE_SIZE": 256000,
22-
"CT_SECS_RESOURCE_EXPIRE": 90000,
23-
"MIN_SECS_BETWEEN_PINGS": 0,
24-
"REQUEST_TIMEOUT": 4000
17+
'DOMAIN': 'localhost',
18+
'PORT': 5337,
19+
'MONGODB_URI': 'mongodb://localhost:27017/rsscloud',
20+
'MAX_CONSECUTIVE_ERRORS': 3,
21+
'MAX_RESOURCE_SIZE': 256000,
22+
'CT_SECS_RESOURCE_EXPIRE': 90000,
23+
'MIN_SECS_BETWEEN_PINGS': 0,
24+
'REQUEST_TIMEOUT': 4000
2525
});
2626

2727
module.exports = {

controllers/docs.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,15 @@ const express = require('express'),
66
router.get('/', (req, res) => {
77
switch (req.accepts('html')) {
88
case 'html': {
9-
const vals = {
10-
htmltext: md.render(fs.readFileSync('README.md', { encoding: 'utf8' }))
11-
};
12-
res.render('docs', vals);
9+
try {
10+
const vals = {
11+
htmltext: md.render(fs.readFileSync('README.md', { encoding: 'utf8' }))
12+
};
13+
res.render('docs', vals);
14+
} catch (err) {
15+
console.error('Error reading README.md:', err.message);
16+
res.status(500).send('Internal Server Error');
17+
}
1318
break;
1419
}
1520
default:

controllers/please-notify.js

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,20 @@ function handleError(req, res, err) {
3434
processResponse(req, res, errorResult(err.message));
3535
}
3636

37-
router.post('/', urlencodedParser, function(req, res) {
38-
const params = parseNotifyParams.rest(req);
39-
pleaseNotify(
40-
params.notifyProcedure,
41-
params.apiurl,
42-
params.protocol,
43-
params.urlList,
44-
params.diffDomain
45-
)
46-
.then(result => processResponse(req, res, result))
47-
.catch(err => handleError(req, res, err));
37+
router.post('/', urlencodedParser, async function(req, res) {
38+
try {
39+
const params = parseNotifyParams.rest(req);
40+
const result = await pleaseNotify(
41+
params.notifyProcedure,
42+
params.apiurl,
43+
params.protocol,
44+
params.urlList,
45+
params.diffDomain
46+
);
47+
processResponse(req, res, result);
48+
} catch (err) {
49+
handleError(req, res, err);
50+
}
4851
});
4952

5053
module.exports = router;

controllers/rpc2.js

Lines changed: 49 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -36,54 +36,59 @@ function handleError(req, res, err) {
3636
router.post('/', textParser, async function(req, res) {
3737
let params;
3838
const dayjs = await getDayjs();
39-
parseRpcRequest(req)
40-
.then(request => {
41-
logEvent(
42-
'XmlRpc',
43-
request.methodName,
44-
dayjs().format('x')
45-
);
4639

47-
switch (request.methodName) {
48-
case 'rssCloud.hello':
49-
processResponse(req, res, rpcReturnSuccess(true));
50-
break;
51-
case 'rssCloud.pleaseNotify':
52-
try {
53-
params = parseNotifyParams.rpc(req, request.params);
54-
pleaseNotify(
55-
params.notifyProcedure,
56-
params.apiurl,
57-
params.protocol,
58-
params.urlList,
59-
params.diffDomain
60-
)
61-
.then(result => processResponse(req, res, rpcReturnSuccess(result.success)))
62-
.catch(err => handleError(req, res, err));
63-
} catch (err) {
64-
handleError(req, res, err);
65-
}
66-
break;
67-
case 'rssCloud.ping':
40+
try {
41+
const request = await parseRpcRequest(req);
42+
43+
logEvent(
44+
'XmlRpc',
45+
request.methodName,
46+
dayjs().format('x')
47+
);
48+
49+
switch (request.methodName) {
50+
case 'rssCloud.hello':
51+
processResponse(req, res, rpcReturnSuccess(true));
52+
break;
53+
case 'rssCloud.pleaseNotify':
54+
try {
55+
params = parseNotifyParams.rpc(req, request.params);
56+
const result = await pleaseNotify(
57+
params.notifyProcedure,
58+
params.apiurl,
59+
params.protocol,
60+
params.urlList,
61+
params.diffDomain
62+
);
63+
processResponse(req, res, rpcReturnSuccess(result.success));
64+
} catch (err) {
65+
handleError(req, res, err);
66+
}
67+
break;
68+
case 'rssCloud.ping':
69+
try {
70+
params = parsePingParams.rpc(req, request.params);
71+
// Dave's rssCloud server always returns true whether it succeeded or not
6872
try {
69-
params = parsePingParams.rpc(req, request.params);
70-
// Dave's rssCloud server always returns true whether it succeeded or not
71-
ping(params.url)
72-
.then(result => processResponse(req, res, rpcReturnSuccess(result.success)))
73-
.catch(_err => processResponse(req, res, rpcReturnSuccess(true)));
74-
} catch (err) {
75-
handleError(req, res, err);
73+
const result = await ping(params.url);
74+
processResponse(req, res, rpcReturnSuccess(result.success));
75+
} catch {
76+
processResponse(req, res, rpcReturnSuccess(true));
7677
}
77-
break;
78-
default:
79-
handleError(
80-
req,
81-
res,
82-
new Error(`Can't make the call because "${request.methodName}" is not defined.`)
83-
);
78+
} catch (err) {
79+
handleError(req, res, err);
8480
}
85-
})
86-
.catch(err => handleError(req, res, err));
81+
break;
82+
default:
83+
handleError(
84+
req,
85+
res,
86+
new Error(`Can't make the call because "${request.methodName}" is not defined.`)
87+
);
88+
}
89+
} catch (err) {
90+
handleError(req, res, err);
91+
}
8792
});
8893

8994
module.exports = router;

eslint.config.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ module.exports = [
4545
'keyword-spacing': 'error',
4646
'space-infix-ops': 'error',
4747
'space-unary-ops': 'error',
48-
48+
4949
// Code quality
5050
'no-unused-vars': ['error', { 'argsIgnorePattern': '^_' }],
5151
'no-console': 'off',
@@ -58,10 +58,10 @@ module.exports = [
5858
'no-extra-bind': 'error',
5959
'no-multi-spaces': 'error',
6060
'no-global-assign': 'error',
61-
61+
6262
// Your custom overrides
6363
'no-underscore-dangle': 'off',
6464
'no-continue': 'off'
6565
}
6666
}
67-
];
67+
];

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"start": "nodemon --use_strict ./app.js",
88
"client": "nodemon --use_strict ./client.js",
99
"import-data": "node ./bin/import-data.js",
10-
"lint": "eslint --fix controllers/ services/ test/",
10+
"lint": "eslint --fix controllers/ services/ test/ *.js",
1111
"format": "prettier --write .",
1212
"test": "mocha",
1313
"test-api": "docker-compose up --build --abort-on-container-exit"

public/js/moment-with-locales.min.js

Lines changed: 0 additions & 505 deletions
This file was deleted.

0 commit comments

Comments
 (0)