Skip to content

Commit b73bcdc

Browse files
phoenix-serverclaudeCopilotcameri
authored
chore: inline 5 dependencies, removing external packages (#500)
* chore: remove 5 dependencies by inlining their functionality - bech32: inline encode/decode in transform.ts (~75 lines) - accepts: replace with request.headers.accept?.includes() check - tor-control-ts: inline Tor control protocol via net.Socket (TorClient class) - helmet: inline Content-Security-Policy header construction - dotenv: use Node.js --env-file-if-exists flag in npm scripts Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * revert: restore accepts library, removing inline header check Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * chore: merge main into chore/inline-dependencies, resolve conflicts * fix: address inline review comments — multi-line Tor parsing, bech32 validation, type deps, engines, await closeTorClient, TorClient tests Agent-Logs-Url: https://github.com/cameri/nostream/sessions/f56791f2-7216-4d11-b88a-63b5d2c432e5 Co-authored-by: cameri <378886+cameri@users.noreply.github.com> * chore: use node version from .nvmrc in engines field Agent-Logs-Url: https://github.com/cameri/nostream/sessions/40ebf88c-b9ee-415d-85b0-248f84afbb78 Co-authored-by: cameri <378886+cameri@users.noreply.github.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: cameri <378886+cameri@users.noreply.github.com>
1 parent 14eacf0 commit b73bcdc

12 files changed

Lines changed: 502 additions & 132 deletions

File tree

package-lock.json

Lines changed: 14 additions & 34 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@
2424
],
2525
"main": "src/index.ts",
2626
"scripts": {
27-
"dev": "node -r ts-node/register src/index.ts",
28-
"clean-db": "node -r ts-node/register src/clean-db.ts",
27+
"dev": "node --env-file-if-exists=.env -r ts-node/register src/index.ts",
28+
"clean-db": "node --env-file-if-exists=.env -r ts-node/register src/clean-db.ts",
2929
"clean": "rimraf ./{dist,.nyc_output,.test-reports,.coverage}",
3030
"build": "tsc --project tsconfig.build.json",
3131
"prestart": "npm run build",
32-
"start": "cd dist && node src/index.js",
32+
"start": "cd dist && node --env-file-if-exists=../.env src/index.js",
3333
"build:check": "npm run build -- --noEmit",
3434
"knip": "knip --config .knip.json --production --include files,dependencies --no-progress --reporter compact",
3535
"lint": "biome lint ./src ./test",
@@ -38,7 +38,7 @@
3838
"lint:fix": "npm run lint -- --write",
3939
"format": "biome format --write ./src ./test",
4040
"format:check": "biome format ./src ./test",
41-
"import": "node -r ts-node/register src/import-events.ts",
41+
"import": "node --env-file-if-exists=.env -r ts-node/register src/import-events.ts",
4242
"db:migrate": "knex migrate:latest",
4343
"db:migrate:rollback": "knex migrate:rollback",
4444
"db:seed": "knex seed:run",
@@ -51,7 +51,7 @@
5151
"test:load": "node -r ts-node/register ./scripts/security-load-test.ts",
5252
"test:integration": "cucumber-js",
5353
"cover:integration": "nyc --report-dir .coverage/integration npm run test:integration -- -p cover",
54-
"export": "node -r ts-node/register src/scripts/export-events.ts",
54+
"export": "node --env-file-if-exists=.env -r ts-node/register src/scripts/export-events.ts",
5555
"docker:compose:start": "./scripts/start",
5656
"docker:compose:stop": "./scripts/stop",
5757
"docker:compose:clean": "./scripts/clean",
@@ -90,6 +90,7 @@
9090
"@semantic-release/github": "8.1.0",
9191
"@semantic-release/npm": "13.1.5",
9292
"@semantic-release/release-notes-generator": "10.0.3",
93+
"@types/accepts": "^1.3.7",
9394
"@types/chai": "^4.3.1",
9495
"@types/chai-as-promised": "^7.1.5",
9596
"@types/debug": "4.1.7",
@@ -123,22 +124,21 @@
123124
"typescript": "~5.7.3",
124125
"uuid": "^8.3.2"
125126
},
127+
"engines": {
128+
"node": ">=24.14.1"
129+
},
126130
"dependencies": {
127131
"@noble/secp256k1": "1.7.1",
128132
"accepts": "^1.3.8",
129133
"axios": "^1.15.0",
130-
"bech32": "2.0.0",
131134
"debug": "4.3.4",
132-
"dotenv": "16.0.3",
133135
"express": "4.22.1",
134-
"helmet": "6.0.1",
135136
"js-yaml": "4.1.1",
136137
"knex": "2.4.2",
137138
"pg": "8.9.0",
138139
"pg-query-stream": "4.3.0",
139140
"ramda": "0.28.0",
140141
"redis": "4.5.1",
141-
"tor-control-ts": "^1.0.0",
142142
"ws": "^8.18.0",
143143
"zod": "^3.22.4"
144144
},

src/clean-db.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
import { createInterface } from 'readline'
2-
import dotenv from 'dotenv'
32
import { Knex } from 'knex'
43

54
import { getMasterDbClient } from './database/client'
65

7-
dotenv.config()
8-
96
type CleanDbOptions = {
107
all: boolean
118
dryRun: boolean

src/factories/web-app-factory.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import express from 'express'
2-
import helmet from 'helmet'
32
import { randomBytes } from 'crypto'
43

54
import { createSettings } from './settings-factory'
@@ -34,7 +33,11 @@ export const createWebApp = () => {
3433
'font-src': ["'self'", 'https://cdn.jsdelivr.net/npm/'],
3534
}
3635

37-
return helmet.contentSecurityPolicy({ directives })(req, res, next)
36+
const csp = Object.entries(directives)
37+
.map(([key, values]) => `${key} ${values.join(' ')}`)
38+
.join('; ')
39+
res.setHeader('Content-Security-Policy', csp)
40+
return next()
3841
})
3942
.use('/favicon.ico', express.static('./resources/favicon.ico'))
4043
.use('/css', express.static('./resources/css'))

src/handlers/request-handlers/root-request-handler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1+
import accepts from 'accepts'
12
import { NextFunction, Request, Response } from 'express'
23
import { path, pathEq } from 'ramda'
3-
import accepts from 'accepts'
44
import { createSettings } from '../../factories/settings-factory'
55
import { escapeHtml } from '../../utils/html'
66
import { FeeSchedule } from '../../@types/settings'

src/import-events.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,6 @@ import { extname, resolve } from 'path'
22

33
import fs from 'fs'
44

5-
import dotenv from 'dotenv'
6-
7-
dotenv.config()
8-
95
import {
106
createEventBatchPersister,
117
EventImportLineError,

src/index.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
import cluster from 'cluster'
2-
import dotenv from 'dotenv'
3-
dotenv.config()
42

53
import { appFactory } from './factories/app-factory'
64
import { maintenanceWorkerFactory } from './factories/maintenance-worker-factory'

src/scripts/export-events.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
import 'pg-query-stream'
2-
import dotenv from 'dotenv'
3-
dotenv.config()
42

53
import fs from 'fs'
64
import path from 'path'

0 commit comments

Comments
 (0)