This took me some time but I finaly figured it out. 
First step (saving to the db):
Have to get the entire stream data and read it like this: 
export const readStream = async (stream, encoding = 'utf8') => {
  stream.setEncoding('base64');
  return new Promise((resolve, reject) => {
    let data = '';
    // eslint-disable-next-line no-return-assign
    stream.on('data', chunk => (data += chunk));
    stream.on('end', () => resolve(data));
    stream.on('error', error => reject(error));
  });
};
use like this: 
const streamData = await readStream(stream);
Before saving I tur the stream into a buffer: 
const buff = Buffer.from(streamData);
Finaly the save part: 
db.images.create(
            {
              Name: filename,
              imageData: buff,
              Length: stream.bytesRead,
              Type: mimetype,
            },
            { transaction: param }
          );
Note that I added Length and Type parameter, this is needed if you like to return a stream when you return the image. 
Step 2 (Retrieving the image).
As @xadm said multiple times you can not return an image from GRAPHQL and after some time I had to accept that fact, hopefully graphql will remedy this in the future. 
S What I needed to do is set up a route on my fastify backend, send a image Id to this route, fetch the image and then return it. 
I had a few diffirent approaches to this but in the end I simpy returned a binary and on the fronted I encoded it to base64. 
Backend part: 
const handler = async (req, reply) => {
  const p: postParams = req.params;
  const parser = uuIdParserT();
  const img = await db.images.findByPk(parser.setValueAsBIN(p.id));
  const binary = img.dataValues.imageData.toString('binary');
  const b = Buffer.from(binary);
  const myStream = new Readable({
    read() {
      this.push(Buffer.from(binary));
      this.push(null);
    },
  });
  reply.send(myStream);
};
export default (server: FastifyInstance) =>
  server.get<null, any>('/:id', opts, handler);
Frontend part: 
  useEffect(() => {
     // axiosState is the obj that holds the image
    if (!axiosState.loading && axiosState.data) {
      // @ts-ignore
      const b64toBlob = (b64Data, contentType = '', sliceSize = 512) => {
        const byteCharacters = atob(b64Data);
        const byteArrays = [];
        for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
          const slice = byteCharacters.slice(offset, offset + sliceSize);
          const byteNumbers = new Array(slice.length);
          // @ts-ignore
          // eslint-disable-next-line no-plusplus
          for (let i = 0; i < slice.length; i++) {
            byteNumbers[i] = slice.charCodeAt(i);
          }
          const byteArray = new Uint8Array(byteNumbers);
          byteArrays.push(byteArray);
        }
        const blob = new Blob(byteArrays, { type: contentType });
        return blob;
      };
      const blob = b64toBlob(axiosState.data, 'image/jpg');
      const urlCreator = window.URL || window.webkitURL;
      const imageUrl = urlCreator.createObjectURL(blob);
      setimgUpl(imageUrl);
    }
  }, [axiosState]);
and finaly in the html: 
   <img src={imgUpl} alt="NO" className="imageUpload" />
OTHER: 
For anyone who is attempting the same NOTE that this is not a best practice thing to do. 
Almost every article I found saved the images on the sever and save an image Id and other metadata in the datbase. For the exact pros and cons for this I have found the following helpful: 
Storing Images in DB - Yea or Nay?
I was focusing on finding out how to do it if for some reason I want to save an image in the datbase and finaly solved it.