fix so that 'npm run dev' can launch the app

This commit is contained in:
Luk 2026-01-06 17:57:40 +08:00
parent a59c1988d0
commit a398cdb7fe
6 changed files with 64 additions and 5 deletions

6
.env
View File

@ -20,3 +20,9 @@ _DEVELOPER_URL_BTOA="aHR0cHM6Ly9rcm1yLmx0ZC8"
CONNECTORS="metaMask, walletConnect, injected" CONNECTORS="metaMask, walletConnect, injected"
CHAINS="sepolia-testnet" CHAINS="sepolia-testnet"
DEFAULT_CHAIN_ID=11155111 DEFAULT_CHAIN_ID=11155111
ALCHEMY_API_KEY=SOME-STRING-OF-CHARS
INFURA_API_KEY=SOME-STRING-OF-CHARS
JSON_RPC_URL="https://eth-goerli.alchemy.com"
NETWORK="goerli"

21
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,21 @@
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "socialfi",
"runtimeExecutable": "node",
"runtimeArgs": ["--preserve-symlinks"],
"cwd": "${workspaceFolder}/server",
"program": "${workspaceFolder}/server/app.js",
"restart": true,
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"skipFiles": ["<node_internals>/**"],
"env": {
"NODE_ENV": "development"
}
}
]
}

View File

@ -4,7 +4,7 @@
"version": "0.2.3", "version": "0.2.3",
"scripts": { "scripts": {
"dev": "concurrently \"node server/app.js\" \" vite --port 3000\"", "dev": "concurrently \"node server/app.js\" \" vite --port 3000\"",
"build": "concurrently \"node server/server.js\" \" vite build\"" "build": "concurrently \"node server/app.js\" \" vite build\""
}, },
"dependencies": { "dependencies": {
"@alch/alchemy-web3": "^1.4.7", "@alch/alchemy-web3": "^1.4.7",

View File

@ -59,4 +59,11 @@ app.get('*', middleware.ensureLoggedIn(), (req, res) => {
app.listen(port, () => console.log(`App listening on ${port}!`)); app.listen(port, () => console.log(`App listening on ${port}!`));
node_media_server.run(); node_media_server.run();
thumbnail_generator.start(); // Start thumbnail cron after a short delay to ensure media server APIs are mounted
setTimeout(() => {
try {
thumbnail_generator.start();
} catch (e) {
console.log('Failed to start thumbnail generator:', e.message);
}
}, 1000);

View File

@ -16,6 +16,15 @@ const config = {
mediaroot: './server/media', mediaroot: './server/media',
allow_origin: '*' allow_origin: '*'
}, },
auth: {
jwt: {
// local JWT user used for internal API calls
users: [
{ username: 'local', password: 'localdev' }
],
algorithm: 'HS256'
}
},
trans: { trans: {
ffmpeg: '/usr/bin/ffmpeg', ffmpeg: '/usr/bin/ffmpeg',
tasks: [ tasks: [

View File

@ -1,11 +1,27 @@
const CronJob = require('cron').CronJob, const CronJob = require('cron').CronJob,
axios = require('axios'), axios = require('axios'),
jwt = require('jsonwebtoken'),
crypto = require('crypto'),
helpers = require('../helpers/helpers'), helpers = require('../helpers/helpers'),
config = require('../config/default'), config = require('../config/default'),
port = config.rtmp_server.http.port; port = config.rtmp_server.http.port;
const job = new CronJob('*/5 * * * * *', function () { const job = new CronJob('*/5 * * * * *', function () {
axios.get('http://127.0.0.1:' + port + '/api/streams') // Use node-media-server API v1 with a signed token (internal use)
// Compute secret the same way node-media-server does (sha256 of first user password)
const jwtConfig = config.rtmp_server.auth && config.rtmp_server.auth.jwt;
let token = null;
try {
if (jwtConfig && jwtConfig.users && jwtConfig.users.length > 0) {
const secret = crypto.createHash('sha256').update(jwtConfig.users[0].password).digest('hex');
token = jwt.sign({}, secret, { algorithm: jwtConfig.algorithm || 'HS256' });
}
} catch (e) {
console.log('Failed to generate JWT for node-media-server api:', e.message);
}
const apiUrl = 'http://127.0.0.1:' + port + '/api/v1/streams' + (token ? ('?token=' + token) : '');
axios.get(apiUrl)
.then(response => { .then(response => {
let streams = response.data; let streams = response.data;
if (typeof (streams['live'] !== undefined)) { if (typeof (streams['live'] !== undefined)) {
@ -19,6 +35,6 @@ const job = new CronJob('*/5 * * * * *', function () {
.catch(error => { .catch(error => {
console.log(error); console.log(error);
}); });
}, null, true); }, null, false);
module.exports = job; module.exports = job;