
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
@ghalex/tus-node-server
Advanced tools
tus is a new open protocol for resumable uploads built on HTTP. This is the tus protocol 1.0.0 node.js server implementation.
$ npm install tus-node-server
Local File Storage
server.datastore = new tus.FileStore({
path: '/files'
});
Google Cloud Storage
server.datastore = new tus.GCSDataStore({
path: '/files',
projectId: 'project-id',
keyFilename: 'path/to/your/keyfile.json',
bucket: 'bucket-name',
});
Amazon S3
server.datastore = new tus.S3Store({
path: '/files',
bucket: 'bucket-name',
accessKeyId: 'access-key-id',
secretAccessKey: 'secret-access-key',
region: 'eu-west-1',
partSize: 8 * 1024 * 1024, // each uploaded part will have ~8MB,
tmpDirPrefix: 'tus-s3-store',
});
$ docker run -p 49160:8080 -d bhstahl/tus-node-deploy
const tus = require('tus-node-server');
const server = new tus.Server();
server.datastore = new tus.FileStore({
path: '/files'
});
const host = '127.0.0.1';
const port = 8000;
server.listen({ host, port }, () => {
console.log(`[${new Date().toLocaleTimeString()}] tus server listening at http://${host}:${port}`);
});
const tus = require('tus-node-server');
const server = new tus.Server();
server.datastore = new tus.FileStore({
path: '/files'
});
var app = express();
const uploadApp = express();
uploadApp.all('*', server.handle.bind(server));
app.use('/uploads', uploadApp);
app.listen(port, host);
const http = require('http');
const url = require('url');
const Koa = require('koa')
const tus = require('tus-node-server');
const tusServer = new tus.Server();
const app = new Koa();
const appCallback = app.callback();
const port = 8000;
tusServer.datastore = new tus.FileStore({
path: '/files',
});
const server = http.createServer((req, res) => {
const urlPath = url.parse(req.url).pathname;
// handle any requests with the `/files/*` pattern
if (/^\/files\/.+/.test(urlPath.toLowerCase())) {
return tusServer.handle(req, res);
}
appCallback(req, res);
});
server.listen(port)
Execute code when lifecycle events happen by adding event handlers to your server.
const Server = require('tus-node-server').Server;
const EVENTS = require('tus-node-server').EVENTS;
const server = new Server();
server.on(EVENTS.EVENT_UPLOAD_COMPLETE, (event) => {
console.log(`Upload complete for file ${event.file.id}`);
});
EVENT_FILE_CREATED: Fired when a POST request successfully creates a new file
Example payload:
{
file: {
id: '7b26bf4d22cf7198d3b3706bf0379794',
upload_length: '41767441',
upload_metadata: 'filename NDFfbWIubXA0'
}
}
EVENT_ENDPOINT_CREATED: Fired when a POST request successfully creates a new upload endpoint
Example payload:
{
url: 'http://localhost:8000/files/7b26bf4d22cf7198d3b3706bf0379794'
}
EVENT_UPLOAD_COMPLETE: Fired when a PATCH request finishes writing the file
Example payload:
{
file: {
id: '7b26bf4d22cf7198d3b3706bf0379794',
upload_length: '41767441',
upload_metadata: 'filename NDFfbWIubXA0'
}
}
GET handlers:Add custom GET handlers to suit your needs, similar to Express routing.
const server = new Server();
server.get('/uploads', (req, res) => {
// Read from your DataStore
fs.readdir(server.datastore.path, (err, files) => {
// Format the JSON response and send it
}
});
const fileNameFromUrl = (req) => {
return req.url.replace(/\//g, '-');
}
server.datastore = new tus.FileStore({
path: '/files',
namingFunction: fileNameFromUrl
});
Start the demo server using Local File Storage
$ npm run demo
Or start up the demo server using Google Cloud Storage
$ npm run gcs_demo
Then navigate to the demo (localhost:8000) which uses tus-js-client
FAQs
Node.js tus server
We found that @ghalex/tus-node-server demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.