From 950f554d46e8ee3324e3ef80b09c8baa0024ae42 Mon Sep 17 00:00:00 2001 From: ado24 Date: Thu, 23 Jan 2025 12:26:08 -0500 Subject: [PATCH 1/6] Adding module type to `package.json` --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index a2f2b62..88373d3 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "1.0.0", "description": "NAD C338 REST API, with Express.js proxy", "main": "api-server/server.js", + "type": "module", "scripts": { "start-servers": "concurrently \"npm run api-server\" \"npm run tcp-server\"", "api-server": "node api-server/server.js", From fb351afa305833577f8a716b4efc9c99f9fe8feb Mon Sep 17 00:00:00 2001 From: ado24 Date: Mon, 27 Jan 2025 12:12:59 -0500 Subject: [PATCH 2/6] Latest changes to server, OpenAPI spec and updated readme # server.js - Fixed excessive listener attachment issues observed on testing - Added exports to `connectToServer` `attemptReconnect` # package.json - Added workspaces: - `tcp-server` - `api-server` - Added `run-tests` script - Added dev dependencies # nad-c338-api.yaml - Moved file to new `api` directory - Updated `server` entry with updated `ip` and `port` variables --- README.md | 2 +- nad-c338-api.yaml => api/nad-c338-api.yaml | 8 +++++++- package.json | 18 ++++++++++++++++-- tcp-server/server.js | 14 +++++++++----- 4 files changed, 33 insertions(+), 9 deletions(-) rename nad-c338-api.yaml => api/nad-c338-api.yaml (97%) diff --git a/README.md b/README.md index 9377b4d..8361921 100644 --- a/README.md +++ b/README.md @@ -17,4 +17,4 @@ Run `npm run tcp-server` to start the TCP server. Use Ctrl+C to stop the server. Ensure the binding on port 30001 is available. ## Client usage -See nad-c338-api for OpenAPI specification \ No newline at end of file +See [nad-c338-api.yaml](api/nad-c338-api.yaml) for OpenAPI specification for the RESTful API in use \ No newline at end of file diff --git a/nad-c338-api.yaml b/api/nad-c338-api.yaml similarity index 97% rename from nad-c338-api.yaml rename to api/nad-c338-api.yaml index 4f12505..ce060c7 100644 --- a/nad-c338-api.yaml +++ b/api/nad-c338-api.yaml @@ -4,7 +4,13 @@ info: version: 1.0.0 description: API for controlling NAD C338 amplifier servers: - - url: http://localhost:3000 + - url: http://{ip}:{port} + description: NAD C338 Amplifier + variables: + ip: + default: localhost + port: + default: 3000 paths: /power: get: diff --git a/package.json b/package.json index 88373d3..e069f79 100644 --- a/package.json +++ b/package.json @@ -7,11 +7,25 @@ "scripts": { "start-servers": "concurrently \"npm run api-server\" \"npm run tcp-server\"", "api-server": "node api-server/server.js", - "tcp-server": "node tcp-server/server.js" + "tcp-server": "node tcp-server/server.js", + "run-test": "jest --verbose --coverage" }, + "workspaces": [ + "api-server", + "tcp-server" + ], "dependencies": { "concurrently": "^9.1.2", "dotenv": "^16.4.7", "express": "^4.21.2" + }, + "devDependencies": { + "@jest/globals": "^29.7.0", + "@babel/preset-env": "^7.26.0", + "babel-jest": "^29.7.0", + "jest": "^29.7.0", + "nock": "^13.5.6", + "node": "^18.20.6", + "supertest": "^7.0.0" } -} \ No newline at end of file +} diff --git a/tcp-server/server.js b/tcp-server/server.js index 7dd3fc2..cb4f388 100644 --- a/tcp-server/server.js +++ b/tcp-server/server.js @@ -6,14 +6,14 @@ dotenv.config({'path': './tcp-server/properties.env'}); let client; let reconnectAttempts = 0; -const nadTcpPort = process.env.NAD_TCP_PORT; +const nadTcpPort = parseInt(process.env.NAD_TCP_PORT); const maxReconnectAttempts = process.env.MAX_RECONNECT_ATTEMPTS; const reconnectInterval = process.env.RECONNECT_INTERVAL; // 5 seconds const maxListeners = parseInt(process.env.MAX_LISTENERS); const errorCodes = ["ECONNRESET", "ECONNREFUSED", "ENETUNREACH", "ETIMEDOUT"]; -const connectToServer = async (ip, port) => { +export const connectToServer = async (ip, port) => { return new Promise((resolve, reject) => { client = net.createConnection({ port: port, host: ip }, () => { client.setMaxListeners(maxListeners); @@ -39,7 +39,7 @@ const connectToServer = async (ip, port) => { }); }; -const attemptReconnect = (ip, port) => { +export const attemptReconnect = (ip, port) => { if (reconnectAttempts < maxReconnectAttempts) { console.log(`Reconnection attempt ${++reconnectAttempts}...`); setTimeout(() => connectToServer(ip, port), reconnectInterval); @@ -80,11 +80,15 @@ const requestHandler = async (req, res) => { client.write(cmd + '\n'); - client.on('data', data => { + // Remove existing listeners to avoid adding multiple listeners + client.removeAllListeners('data'); + client.removeAllListeners('error'); + + client.once('data', data => { res.end(data.toString()); }); - client.on('error', err => { + client.once('error', err => { res.statusCode = 500; console.error(`Error: ${err}`); res.end('Error: ' + err.message); From aea1954c5edce490f8aceac88db30f6720fbde48 Mon Sep 17 00:00:00 2001 From: ado24 Date: Mon, 31 Mar 2025 13:32:03 -0400 Subject: [PATCH 3/6] Updated certs and keys --- certs/server.crt | 56 +++++++++++++------------- keys/server.key | 100 +++++++++++++++++++++++------------------------ 2 files changed, 78 insertions(+), 78 deletions(-) diff --git a/certs/server.crt b/certs/server.crt index 133dd94..587919b 100644 --- a/certs/server.crt +++ b/certs/server.crt @@ -1,32 +1,32 @@ -----BEGIN CERTIFICATE----- -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 -lTGdAnvW3AEutII657DJK/AI8VKZTsqF +AOATNCkWRD6M4T4G8ThZmI7QNtBZ+4xQ9Fc1OqLgI5813N+/GM+g40HmjUq++5X3 +p91KbR802oSGl6/s+Hy5YWzffA8NhcjbJRY4A0Gehtqw4Wr8NUIbF+utADAMAREU +1DFRmx2NhRj9A+5yXo4QgQ53ZO75SO8zWk1piiXnBKthufOtBMwNR23//ronb9U9 +TCvzEnuRMl2bObcVVjyMWxbe27kyb/0DFFfabownt3a8yUtoIVuBec/k3g+giOnQ +jhcyyDYoUf+7sHu6jKXl9/ZZBk6LEEu6gLmin+0y6gVxRm6jSQCkZZAlHNpOB6R+ +PHEjGjMcJmiXu3/oZCWdQjamtAW9dWhD0eB34kc6A2dOMcNcVEKqfGwnlQGKRRfw +io/I/+/DoZfMMF31G0qB5A2rKfw0r+1f5GUaivY4GpoOsUdvL13re0Y0j5UVlmtF +WvNkIW4GTA0Sao+FPQ+TTfj8JrgxrvBx21Wqb3/ogbFiNWtVzdb5v4s2gpFSsTAR +zPsRmLZBNsBf2DN7RAFC3zIf0ngmrOf/J5nYlBM1yTUf7y9OsHcVPtbk65b/Wj4v +K1MpPFKsBcQSuNc1JH2qBT1ddrgLG6KW4Cn91WUORjS5x4RkvO/AHUtldThdgUF3 +cHLwkt43TZPECxBoZjZuOVnnlVS+Araz41Zj2MWr5Q8jAgMBAAGjeDB2MB0GA1Ud +DgQWBBRrZFXoDcG6qNHDlNhjj+/36SHK2DAfBgNVHSMEGDAWgBRrZFXoDcG6qNHD +lNhjj+/36SHK2DAPBgNVHRMBAf8EBTADAQH/MCMGA1UdEQQcMBqCB2xlZ2lvbjeC +CWxvY2FsaG9zdIcECgAABDANBgkqhkiG9w0BAQ0FAAOCAgEAdbP9JqGjWTr53zME +cYEpcAuexXOUJngoJ3RI756L++IDARQdI6K+VchrITQEe/btbks7C8YAp6LkfREZ +x7+IX47nUCAyTp+CKWe2CbxZS+7WWVS/vb+DnmTw69nKUaWrA4bEyq4MNbt5qWFf +DdCw6uZiNvKvkM/4yJrSriQ+cYa0BZ2moL4iJbxa37700rlJaBKWzBC86GXntDa7 +RxB+lbKN+J28wADS/5JrnZFjbAKsvjx7pGiO5HY2j0CzHX9Cv0zmFCqYTO+29l0v +2PwO0MHMKNBI9kS/QFfUD5fQ5Z6K/rdNpE+C7Imy/ftHRtP4ROeJgScP55x2Y2F/ +eDPkkbRhfS7P3RTClKFsOSnvdQEsIEZIJSx27sN5tf8EO4d2+vF2SohnJyGJ/SEd +haNoQYvD6vZVH8/WBQoU268CE5Qs3FDBLF/toWFKU7efI+NvHfe5YR9t//akFetJ +A3Hk146v5ocFoqTvdQosw+cjAs4hoXZIxAI3o2mCfnXxCpjtCaPHHI5GTUQArpIR +Ztt+zCv7jMkqqUx+vMC+n/euLRnYpeJf5UWnB6OOTkpuxzNXZiFC22PTWD6lNCPU +7JnSz+DEntbLtBazFxI/3cPkZ6VZSvWzUGF7Gs4huZ5d+vb1XfxN7P+nYWrjQkmK +lr1F98szsX/HYZXOpPcM2E9pnjY= -----END CERTIFICATE----- diff --git a/keys/server.key b/keys/server.key index 053f74d..2538789 100644 --- a/keys/server.key +++ b/keys/server.key @@ -1,52 +1,52 @@ -----BEGIN PRIVATE KEY----- -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 -Zo0caJBSUPBGA69acVnBOSMAG8q9yQ== +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 +TwScgdOyIqBWRmFz8S+MxK1kZhYJIXyrbA== -----END PRIVATE KEY----- From e08537fae82067b8f972d95b34ff4906766a3ad1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 May 2025 17:05:58 +0000 Subject: [PATCH 4/6] Bump node from 23.11.1 to 24.0.2 Bumps [node](https://github.com/aredridel/node-bin-gen) from 23.11.1 to 24.0.2. - [Commits](https://github.com/aredridel/node-bin-gen/commits) --- updated-dependencies: - dependency-name: node dependency-version: 24.0.2 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 977932f..4a250c0 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "gulp-babel": "^8.0.0", "jest": "^29.7.0", "nock": "^14.0.0", - "node": "^23.7.0", + "node": "^24.0.2", "supertest": "^7.0.0" } } From b297176183cc787f9c537afae988261b98850a52 Mon Sep 17 00:00:00 2001 From: ado24 Date: Tue, 20 May 2025 13:04:18 -0400 Subject: [PATCH 5/6] Potential fix for code scanning alert no. 18: Workflow does not contain permissions Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> --- .github/workflows/npm-gulp.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/npm-gulp.yml b/.github/workflows/npm-gulp.yml index 6d04c0d..190148c 100644 --- a/.github/workflows/npm-gulp.yml +++ b/.github/workflows/npm-gulp.yml @@ -6,6 +6,9 @@ on: pull_request: branches: [ "master" ] +permissions: + contents: read + jobs: build: runs-on: ubuntu-latest From d607e5b348857ee86f79f36a1aafaf8dd92bed7c Mon Sep 17 00:00:00 2001 From: ado24 Date: Wed, 5 Nov 2025 19:33:18 -0500 Subject: [PATCH 6/6] Updated headers to allow for autoplay --- api-server/package.json | 1 + tcp-server/package.json | 5 ++++- tcp-server/server.js | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/api-server/package.json b/api-server/package.json index a4b415b..ef513fd 100644 --- a/api-server/package.json +++ b/api-server/package.json @@ -14,6 +14,7 @@ }, "private": true, "dependencies": { + "api-server": "file:", "cors": "^2.8.5" } } diff --git a/tcp-server/package.json b/tcp-server/package.json index a606524..68e8a99 100644 --- a/tcp-server/package.json +++ b/tcp-server/package.json @@ -10,5 +10,8 @@ }, "keywords": [], "author": "", - "license": "ISC" + "license": "ISC", + "dependencies": { + "tcp-server": "file:" + } } diff --git a/tcp-server/server.js b/tcp-server/server.js index c554bb9..18b348e 100644 --- a/tcp-server/server.js +++ b/tcp-server/server.js @@ -58,6 +58,8 @@ const requestHandler = async (req, res) => { res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization'); + res.setHeader('Feature-Policy', "autoplay *; camera 'none'; microphone 'none'"); + res.setHeader('Permissions-Policy', "autoplay=(self), camera=(), microphone=()"); if (req.method === 'OPTIONS') { res.writeHead(204);