diff --git a/tests/monster_test_grpc.js b/tests/monster_test_grpc.js
index c12d789..34f8cb2 100644
--- a/tests/monster_test_grpc.js
+++ b/tests/monster_test_grpc.js
@@ -1,30 +1,31 @@
 // Generated GRPC code for FlatBuffers TS *** DO NOT EDIT ***
-import { flatbuffers } from 'flatbuffers';
-import *  as MonsterStorage_fbs from './monster_test_generated';
+import * as flatbuffers from 'flatbuffers';
+import { Stat as MyGame_Example_Stat } from './my-game/example/stat';
+import { Monster as MyGame_Example_Monster } from './my-game/example/monster';
 
-var grpc = require('grpc');
+var grpc = require('@grpc/grpc-js');
 
-function serialize_Stat(buffer_args) {
-  if (!(buffer_args instanceof MonsterStorage_fbs.Stat)) {
-    throw new Error('Expected argument of type MonsterStorage_fbs.Stat');
+function serialize_MyGame_Example_Stat(buffer_args) {
+  if (!(buffer_args instanceof MyGame_Example_Stat)) {
+    throw new Error('Expected argument of type Stat');
   }
-  return buffer_args.serialize();
+  return Buffer.from(buffer_args.serialize());
 }
 
-function deserialize_Stat(buffer) {
-  return MonsterStorage_fbs.Stat.getRootAsStat(new flatbuffers.ByteBuffer(buffer))
+function deserialize_MyGame_Example_Stat(buffer) {
+  return MyGame_Example_Stat.getRootAsStat(new flatbuffers.ByteBuffer(buffer))
 }
 
 
-function serialize_Monster(buffer_args) {
-  if (!(buffer_args instanceof MonsterStorage_fbs.Monster)) {
-    throw new Error('Expected argument of type MonsterStorage_fbs.Monster');
+function serialize_MyGame_Example_Monster(buffer_args) {
+  if (!(buffer_args instanceof MyGame_Example_Monster)) {
+    throw new Error('Expected argument of type Monster');
   }
-  return buffer_args.serialize();
+  return Buffer.from(buffer_args.serialize());
 }
 
-function deserialize_Monster(buffer) {
-  return MonsterStorage_fbs.Monster.getRootAsMonster(new flatbuffers.ByteBuffer(buffer))
+function deserialize_MyGame_Example_Monster(buffer) {
+  return MyGame_Example_Monster.getRootAsMonster(new flatbuffers.ByteBuffer(buffer))
 }
 
 
@@ -36,44 +37,44 @@
     requestStream: false,
     responseStream: false,
     requestType: flatbuffers.ByteBuffer,
-    responseType: MonsterStorage_fbs.Stat,
-    requestSerialize: serialize_Monster,
-    requestDeserialize: deserialize_Monster,
-    responseSerialize: serialize_Stat,
-    responseDeserialize: deserialize_Stat,
+    responseType: MyGame_Example_Stat,
+    requestSerialize: serialize_MyGame_Example_Monster,
+    requestDeserialize: deserialize_MyGame_Example_Monster,
+    responseSerialize: serialize_MyGame_Example_Stat,
+    responseDeserialize: deserialize_MyGame_Example_Stat,
   },
   Retrieve: {
     path: '/MyGame.Example.MonsterStorage/Retrieve',
     requestStream: false,
     responseStream: true,
     requestType: flatbuffers.ByteBuffer,
-    responseType: MonsterStorage_fbs.Monster,
-    requestSerialize: serialize_Stat,
-    requestDeserialize: deserialize_Stat,
-    responseSerialize: serialize_Monster,
-    responseDeserialize: deserialize_Monster,
+    responseType: MyGame_Example_Monster,
+    requestSerialize: serialize_MyGame_Example_Stat,
+    requestDeserialize: deserialize_MyGame_Example_Stat,
+    responseSerialize: serialize_MyGame_Example_Monster,
+    responseDeserialize: deserialize_MyGame_Example_Monster,
   },
   GetMaxHitPoint: {
     path: '/MyGame.Example.MonsterStorage/GetMaxHitPoint',
     requestStream: true,
     responseStream: false,
     requestType: flatbuffers.ByteBuffer,
-    responseType: MonsterStorage_fbs.Stat,
-    requestSerialize: serialize_Monster,
-    requestDeserialize: deserialize_Monster,
-    responseSerialize: serialize_Stat,
-    responseDeserialize: deserialize_Stat,
+    responseType: MyGame_Example_Stat,
+    requestSerialize: serialize_MyGame_Example_Monster,
+    requestDeserialize: deserialize_MyGame_Example_Monster,
+    responseSerialize: serialize_MyGame_Example_Stat,
+    responseDeserialize: deserialize_MyGame_Example_Stat,
   },
   GetMinMaxHitPoints: {
     path: '/MyGame.Example.MonsterStorage/GetMinMaxHitPoints',
     requestStream: true,
     responseStream: true,
     requestType: flatbuffers.ByteBuffer,
-    responseType: MonsterStorage_fbs.Stat,
-    requestSerialize: serialize_Monster,
-    requestDeserialize: deserialize_Monster,
-    responseSerialize: serialize_Stat,
-    responseDeserialize: deserialize_Stat,
+    responseType: MyGame_Example_Stat,
+    requestSerialize: serialize_MyGame_Example_Monster,
+    requestDeserialize: deserialize_MyGame_Example_Monster,
+    responseSerialize: serialize_MyGame_Example_Stat,
+    responseDeserialize: deserialize_MyGame_Example_Stat,
   },
 };
 exports.MonsterStorageClient = grpc.makeGenericClientConstructor(MonsterStorageService);
