diff --git a/.changeset/chilly-ends-shave.md b/.changeset/chilly-ends-shave.md new file mode 100644 index 00000000..46437539 --- /dev/null +++ b/.changeset/chilly-ends-shave.md @@ -0,0 +1,5 @@ +--- +"@tus/server": patch +--- + +Bump srvx from 0.8.9 to 0.11.13 diff --git a/package-lock.json b/package-lock.json index ecab6ab1..20b68a02 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3336,12 +3336,6 @@ "node": ">= 0.6" } }, - "node_modules/cookie-es": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-2.0.0.tgz", - "integrity": "sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==", - "license": "MIT" - }, "node_modules/cookie-signature": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", @@ -5539,13 +5533,10 @@ "license": "BSD-3-Clause" }, "node_modules/srvx": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/srvx/-/srvx-0.8.9.tgz", - "integrity": "sha512-wYc3VLZHRzwYrWJhkEqkhLb31TI0SOkfYZDkUhXdp3NoCnNS0FqajiQszZZjfow/VYEuc6Q5sZh9nM6kPy2NBQ==", + "version": "0.11.15", + "resolved": "https://registry.npmjs.org/srvx/-/srvx-0.11.15.tgz", + "integrity": "sha512-iXsux0UcOjdvs0LCMa2Ws3WwcDUozA3JN3BquNXkaFPP7TpRqgunKdEgoZ/uwb1J6xaYHfxtz9Twlh6yzwM6Tg==", "license": "MIT", - "dependencies": { - "cookie-es": "^2.0.0" - }, "bin": { "srvx": "bin/srvx.mjs" }, @@ -6227,7 +6218,7 @@ "debug": "^4.3.4", "lodash.throttle": "^4.1.1", "set-cookie-parser": "^2.7.1", - "srvx": "~0.8.9" + "srvx": "~0.11.15" }, "devDependencies": { "@types/debug": "^4.1.12", diff --git a/packages/server/package.json b/packages/server/package.json index 9c69210c..581ee25d 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -25,7 +25,7 @@ "debug": "^4.3.4", "lodash.throttle": "^4.1.1", "set-cookie-parser": "^2.7.1", - "srvx": "~0.8.9" + "srvx": "~0.11.15" }, "devDependencies": { "@types/debug": "^4.1.12", diff --git a/packages/server/src/server.ts b/packages/server/src/server.ts index d66dbdbe..953573cf 100644 --- a/packages/server/src/server.ts +++ b/packages/server/src/server.ts @@ -1,21 +1,19 @@ -import http from 'node:http' import {EventEmitter} from 'node:events' - -import type {ServerRequest} from 'srvx' -import {toNodeHandler} from 'srvx/node' +import http from 'node:http' +import type {CancellationContext, DataStore, Upload} from '@tus/utils' +import {ERRORS, EVENTS, HEADERS, REQUEST_METHODS, TUS_RESUMABLE} from '@tus/utils' import debug from 'debug' -import {EVENTS, ERRORS, REQUEST_METHODS, TUS_RESUMABLE, HEADERS} from '@tus/utils' -import type {DataStore, Upload, CancellationContext} from '@tus/utils' - +import type {ServerRequest} from 'srvx' +import {NodeRequest, sendNodeResponse} from 'srvx/node' +import {DeleteHandler} from './handlers/DeleteHandler.js' import {GetHandler} from './handlers/GetHandler.js' import {HeadHandler} from './handlers/HeadHandler.js' import {OptionsHandler} from './handlers/OptionsHandler.js' import {PatchHandler} from './handlers/PatchHandler.js' import {PostHandler} from './handlers/PostHandler.js' -import {DeleteHandler} from './handlers/DeleteHandler.js' -import {validateHeader} from './validators/HeaderValidator.js' -import type {ServerOptions, RouteHandler, WithOptional} from './types.js' import {MemoryLocker} from './lockers/index.js' +import type {RouteHandler, ServerOptions, WithOptional} from './types.js' +import {validateHeader} from './validators/HeaderValidator.js' type Handlers = { GET: InstanceType @@ -123,7 +121,9 @@ export class Server extends EventEmitter { } async handle(req: http.IncomingMessage, res: http.ServerResponse) { - return toNodeHandler(this.handler.bind(this))(req, res) + const request = new NodeRequest({req, res}) + const response = await this.handler(request) + return sendNodeResponse(res, response) } async handleWeb(req: Request) { diff --git a/packages/server/src/test/Server.test.ts b/packages/server/src/test/Server.test.ts index 7955e7eb..7f03c5c3 100644 --- a/packages/server/src/test/Server.test.ts +++ b/packages/server/src/test/Server.test.ts @@ -1,20 +1,17 @@ -/* eslint-disable @typescript-eslint/no-non-null-assertion */ -/* eslint-disable no-throw-literal */ import 'should' import {strict as assert} from 'node:assert' -import http from 'node:http' import fs from 'node:fs/promises' +import http from 'node:http' import path from 'node:path' - -import request from 'supertest' -import Throttle from 'throttle' - -import {Server} from '@tus/server' import {FileStore} from '@tus/file-store' -import {TUS_RESUMABLE, EVENTS, DataStore, Metadata} from '@tus/utils' +import {Server} from '@tus/server' +import {DataStore, EVENTS, Metadata, TUS_RESUMABLE} from '@tus/utils' import httpMocks from 'node-mocks-http' import sinon from 'sinon' +import type {ServerRequest} from 'srvx' +import request from 'supertest' +import Throttle from 'throttle' // Test server crashes on http://{some-ip} so we remove the protocol... const removeProtocol = (location: string) => location.slice(6) @@ -438,6 +435,10 @@ describe('Server', () => { it('should preserve custom request', (done) => { const userData = {username: 'admin'} + const requestHeaders = { + 'Tus-Resumable': TUS_RESUMABLE, + 'Upload-Length': '12345678', + } const server = new Server({ path: '/test/output', datastore: new FileStore({directory}), @@ -455,16 +456,13 @@ describe('Server', () => { const req = httpMocks.createRequest({ method: 'POST', url: server.options.path, - headers: { - 'tus-resumable': TUS_RESUMABLE, - 'upload-length': '12345678', - }, + headers: requestHeaders, + rawHeaders: Object.entries(requestHeaders).flat(), }) - // Add custom property like Express middleware would req.user = userData - const res = httpMocks.createResponse({req}) + server.handle(req, res) })