11import Koa from 'koa' ;
2- import { koaBody } from 'koa-body' ;
3- import Router from 'koa-router' ;
2+ import Router from '@koa/router' ;
3+ import { multer } from './multer'
4+
45// @ts -ignore - no types
56import { setHttpCallback } from '@citizenfx/http-wrapper' ;
67
78import FormData from 'form-data' ;
89import fetch from 'node-fetch' ;
910import { CaptureOptions , DataType } from './types' ;
1011import { UploadStore } from './upload-store' ;
11- import { readFile , unlink } from 'fs/promises' ;
1212
1313export async function createServer ( uploadStore : UploadStore ) {
1414 const app = new Koa ( ) ;
1515 const router = new Router ( ) ;
16+ const upload = multer ( {
17+ storage : multer . memoryStorage ( )
18+ } ) ;
1619
17- router . post ( '/image' , async ( ctx ) => {
20+ router . post ( '/image' , upload . single ( "file" ) as any , async ( ctx ) => {
1821 const token = ctx . request . headers [ 'x-screencapture-token' ] as string ;
1922 if ( ! token ) {
2023 ctx . status = 401 ;
@@ -25,25 +28,16 @@ export async function createServer(uploadStore: UploadStore) {
2528 const { callback, dataType, isRemote, remoteConfig, url, playerSource, correlationId } =
2629 uploadStore . getUpload ( token ) ;
2730
28- const files = ctx . request . files ;
29- if ( ! files ) {
30- ctx . status = 400 ;
31- ctx . body = { status : 'error' , message : 'No files provided' } ;
32- return ;
33- }
34-
35- // dont blame me, but node runtime does not like formidable for some reason
36- const file = files [ 'file' ] as any ;
31+ const file = ctx . file ;
3732 if ( ! file ) {
3833 ctx . status = 400 ;
3934 ctx . body = { status : 'error' , message : 'No file provided' } ;
4035 return ;
4136 }
4237
4338 try {
44- const d = await readFile ( file . filepath ) ;
45- const buf = await buffer ( dataType , d ) ;
46- await unlink ( file . filepath ) ;
39+
40+ const buf = await buffer ( dataType , file . buffer ) ;
4741
4842 if ( isRemote ) {
4943 const response = await uploadFile ( url , remoteConfig , buf , dataType ) ;
@@ -71,12 +65,7 @@ export async function createServer(uploadStore: UploadStore) {
7165 }
7266 } ) ;
7367
74- const koaMiddle = koaBody ( {
75- multipart : true ,
76- patchKoa : true ,
77- } ) ;
78-
79- app . use ( koaMiddle ) . use ( router . routes ( ) ) . use ( router . allowedMethods ( ) ) ;
68+ app . use ( router . routes ( ) ) . use ( router . allowedMethods ( ) ) ;
8069
8170 setHttpCallback ( app . callback ( ) ) ;
8271}
0 commit comments