diff --git a/TypeScript/14AfterDBLoadHook/.eslintignore b/TypeScript/14AfterDBLoadHook/.eslintignore
new file mode 100644
index 0000000..9922d9a
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/.eslintignore
@@ -0,0 +1,9 @@
+# Exclude these folders from linting
+node_modules
+dist/
+types/
+
+# Exclude these filetypes from linting
+*.json
+*.txt
+*.exe
\ No newline at end of file
diff --git a/TypeScript/14AfterDBLoadHook/.eslintrc.json b/TypeScript/14AfterDBLoadHook/.eslintrc.json
new file mode 100644
index 0000000..c505160
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/.eslintrc.json
@@ -0,0 +1,75 @@
+{
+  "root": true,
+  "parser": "@typescript-eslint/parser",
+  "plugins": [
+    "@typescript-eslint"
+  ],
+  "extends": [
+    "eslint:recommended",
+    "plugin:@typescript-eslint/eslint-recommended",
+    "plugin:@typescript-eslint/recommended"
+  ],
+  "rules": {
+    "@typescript-eslint/no-explicit-any": 0,
+    "@typescript-eslint/no-unused-vars": 1,
+    "@typescript-eslint/no-empty-interface": 0,
+    "@typescript-eslint/no-namespace": 0,
+    "@typescript-eslint/comma-dangle": 1,
+    "@typescript-eslint/func-call-spacing": 2,
+    "@typescript-eslint/quotes": 1,
+    "@typescript-eslint/brace-style": [
+      "warn",
+      "allman"
+    ],
+    "@typescript-eslint/naming-convention": [
+      "warn",
+      {
+        "selector": "default",
+        "format": ["camelCase"],
+        "leadingUnderscore": "allow"
+      },
+      {
+        "selector": "typeLike",
+        "format": ["PascalCase"]
+      },
+      {
+        "selector": "objectLiteralProperty",
+        "format": ["PascalCase", "camelCase"],
+        "leadingUnderscore": "allow"
+      },
+      {
+        "selector": "typeProperty",
+        "format": ["PascalCase", "camelCase"],
+        "leadingUnderscore": "allow"
+      },
+      {
+        "selector": "enumMember",
+        "format": ["UPPER_CASE"]
+      }
+    ],
+    "@typescript-eslint/indent": [
+      "warn",
+      4
+    ],
+    "@typescript-eslint/no-unused-expressions": [
+      "warn",
+      { 
+        "allowShortCircuit": false,
+        "allowTernary": false
+      }
+    ],
+    "@typescript-eslint/keyword-spacing": [
+      "warn",
+      {
+        "before": true,
+        "after": true
+      }
+    ],
+    "@typescript-eslint/explicit-module-boundary-types": [
+      "warn",
+      {
+        "allowArgumentsExplicitlyTypedAsAny": true
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/TypeScript/14AfterDBLoadHook/README.md b/TypeScript/14AfterDBLoadHook/README.md
new file mode 100644
index 0000000..efc31a4
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/README.md
@@ -0,0 +1,64 @@
+
+This project was created to automate most parts of building and setting up an environment.
+
+## **NodeJS 14.15.3:**
+
+The first step would be to install nodejs on your pc, the version you NEED is **14.15.3**
+
+That version is the one that has been used to test the mod templates and build scripts.
+
+It can be downloaded from here: https://nodejs.org/download/release/v14.15.3/
+
+A system reboot may be needed after install.
+
+## **IDE:**
+
+The second step is having an IDE ready. For the currect purpose we've setup a VSCodium workspace file.
+
+You CAN use Visual Studio Code if you so desire, just keep in mind that our dev tests on the mod files was done using VSCodium.
+
+You can get VSCodium here: https://vscodium.com/#install
+
+## **Workspace:**
+
+Once you have NodeJS and VSCodium ready, open the mod.code-workspace file with VSCodium (File->Open Worspace from File...).
+
+Once the project loads into VSCodium you will be recommended to install the ESLint plugin. This is HIGHLY recommended.
+
+## **Environment Setup:**
+
+There is a task that will automatically setup your environment to use typescript.
+
+To run it, you just need to go to: 
+
+> Terminal->Run Task...->Show All Tasks...->npm: install
+
+After running this task, your environment will be ready to start coding.
+
+DO NOT remove the node_modules folder, this is an auto generated directory that has the required dependencies to be able to use typescript and more.
+
+## **IMPORTANT:**
+
+Before starting to work on your mod, we suggest you read about Dependency Injection and Inversion of Control as this is the adopted architecture SPT-AKI has adopted.
+
+It will be difficult to understand some of the problems you may be having if you dont understand the basics of it.
+
+A guide explaining all the essentials will be available on the hub on release for you to read about.
+
+## **Coding:**
+
+All your work should be centered around the mod.ts file as an entry point.
+You can ONLY change the following properties from the package.json file: `"name"`, `"version"`, `"license"`: `"MIT"`, `"author"`, `"akiVersion"`.
+
+If you have never used typescript before, you can read about it here: https://www.typescriptlang.org/docs/
+
+## **Distributing your mod:**
+
+The project has been set up with an automatic task that will copy and zip ALL required files for your mod to work on SPT-AKI.
+To run this task you just need to go to: 
+
+> Terminal->Run Task...->Show All Tasks...->npm: build:zip
+
+The output will be a mod.zip file that will appear on the root of the project.
+
+Always verify that all files were included into the zip file.
\ No newline at end of file
diff --git a/TypeScript/14AfterDBLoadHook/mod.code-workspace b/TypeScript/14AfterDBLoadHook/mod.code-workspace
new file mode 100644
index 0000000..6732c67
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/mod.code-workspace
@@ -0,0 +1,12 @@
+{
+	"folders": [
+		{
+			"path": "."
+		}
+	],
+	"extensions": {
+		"recommendations": [
+			"dbaeumer.vscode-eslint"
+		]
+	}
+}
\ No newline at end of file
diff --git a/TypeScript/14AfterDBLoadHook/package.json b/TypeScript/14AfterDBLoadHook/package.json
new file mode 100644
index 0000000..b5223bf
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/package.json
@@ -0,0 +1,25 @@
+{
+    "name": "AfterDBLoadHook",
+    "version": "1.0.0",
+    "main": "src/mod.js",
+    "license": "MIT",
+    "author": "Chomp",
+    "akiVersion": "3.0.0",
+    "scripts": {
+        "setup:environment": "npm i",
+        "build:unzipped": "copyfiles -e \"./node_modules/**/*.*\" -e \"./dist/**/*.*\" -e \"./package-lock.json\" -e \"./tsconfig.json\" -e \"./README.txt\" -e \"./mod.code-workspace\" \"./**/*.*\" ./dist",
+        "zip:files": "cd dist/ && bestzip ../mod.zip *",
+        "build:zip": "npm run clean:environment && npm run build:unzipped && npm run zip:files",
+        "clean:environment": "node -e \"require('fs').rm('mod.zip', ()=>{})\" && node -e \"require('fs').rmdir('./dist/',{recursive:true},()=>{})\""
+    },
+    "devDependencies": {
+        "@types/node": "^14.15.3",
+        "@typescript-eslint/eslint-plugin": "^4.33.0",
+        "@typescript-eslint/parser": "^4.33.0",
+        "copyfiles": "2.4.1",
+        "eslint": "7.26.0",
+        "tsyringe": "4.6.0",
+        "typescript": "4.6.4",
+        "bestzip": "2.2.1"
+    }
+}
diff --git a/TypeScript/14AfterDBLoadHook/src/mod.js b/TypeScript/14AfterDBLoadHook/src/mod.js
new file mode 100644
index 0000000..e378aa8
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/src/mod.js
@@ -0,0 +1,37 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const LogTextColor_1 = require("../../../../obj/models/spt/logging/LogTextColor");
+const LogBackgroundColor_1 = require("../../../../obj/models/spt/logging/LogBackgroundColor");
+class Mod {
+    load(container) {
+        // Database will be empty in here
+        const databaseServer = container.resolve("DatabaseServer");
+        const logger = container.resolve("WinstonLogger");
+        logger.logWithColor(`Database item table state: ${databaseServer.getTables().templates} (<<< should be null)`, LogTextColor_1.LogTextColor.red, LogBackgroundColor_1.LogBackgroundColor.yellow);
+    }
+    loadAfterDbInit(container) {
+        // Database will be loaded, this is the fresh state of the DB so NOTHING from the AKI
+        // logic has modified anything yet. This is the DB loaded straight from the JSON files
+        const databaseServer = container.resolve("DatabaseServer");
+        const logger = container.resolve("WinstonLogger");
+        logger.logWithColor(`Database item size: ${Object.entries(databaseServer.getTables().templates.items).length}`, LogTextColor_1.LogTextColor.red, LogBackgroundColor_1.LogBackgroundColor.yellow);
+        // lets do a quick modification and see how this reflect later on, on the delayedLoad()
+        // find the nvgs item by its Id
+        const nvgs = databaseServer.getTables().templates.items["5c0558060db834001b735271"];
+        // Lets log the state before the modification:
+        logger.logWithColor(`NVGs default CanSellOnRagfair: ${nvgs._props.CanSellOnRagfair}`, LogTextColor_1.LogTextColor.red, LogBackgroundColor_1.LogBackgroundColor.yellow);
+        // update one of its properties to be true
+        nvgs._props.CanSellOnRagfair = true;
+    }
+    delayedLoad(container) {
+        // The modification we made above would have been processed by now by AKI, so any values we changed had
+        // already been passed through the initial lifecycles (OnLoad) of AKI.
+        const databaseServer = container.resolve("DatabaseServer");
+        const logger = container.resolve("WinstonLogger");
+        // find the nvgs item again by its Id
+        const nvgs = databaseServer.getTables().templates.items["5c0558060db834001b735271"];
+        // Lets log the state, this value should be true:
+        logger.logWithColor(`NVGs modified CanSellOnRagfair: ${nvgs._props.CanSellOnRagfair}`, LogTextColor_1.LogTextColor.red, LogBackgroundColor_1.LogBackgroundColor.yellow);
+    }
+}
+module.exports = { mod: new Mod() };
diff --git a/TypeScript/14AfterDBLoadHook/src/mod.ts b/TypeScript/14AfterDBLoadHook/src/mod.ts
new file mode 100644
index 0000000..03375db
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/src/mod.ts
@@ -0,0 +1,52 @@
+import { DependencyContainer } from "tsyringe";
+
+import { IAfterDBLoadMod } from "@spt-aki/models/external/IAfterDBLoadMod";
+import { IMod } from "@spt-aki/models/external/mod";
+import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
+import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
+import { LogTextColor } from "@spt-aki/models/spt/logging/LogTextColor";
+import { LogBackgroundColor } from "@spt-aki/models/spt/logging/LogBackgroundColor";
+
+
+class Mod implements IMod, IAfterDBLoadMod
+{    
+    public load(container: DependencyContainer): void
+    {
+        // Database will be empty in here
+        const databaseServer = container.resolve<DatabaseServer>("DatabaseServer");
+        const logger = container.resolve<ILogger>("WinstonLogger");
+        logger.logWithColor(`Database item table state: ${databaseServer.getTables().templates} (<<< should be undefined)`, LogTextColor.red, LogBackgroundColor.yellow);
+    }
+
+    public loadAfterDbInit(container: DependencyContainer): void 
+    {
+        // Database will be loaded, this is the fresh state of the DB so NOTHING from the AKI
+        // logic has modified anything yet. This is the DB loaded straight from the JSON files
+        const databaseServer = container.resolve<DatabaseServer>("DatabaseServer");
+        const logger = container.resolve<ILogger>("WinstonLogger");
+        logger.logWithColor(`Database item size: ${Object.entries(databaseServer.getTables().templates.items).length}`, LogTextColor.red, LogBackgroundColor.yellow);
+        // lets do a quick modification and see how this reflect later on, on the delayedLoad()
+        
+        // find the nvgs item by its Id
+        const nvgs = databaseServer.getTables().templates.items["5c0558060db834001b735271"];
+        // Lets log the state before the modification:
+        logger.logWithColor(`NVGs default CanSellOnRagfair: ${nvgs._props.CanSellOnRagfair}`, LogTextColor.red, LogBackgroundColor.yellow);
+        // update one of its properties to be true
+        nvgs._props.CanSellOnRagfair = true;
+    }
+
+    public delayedLoad(container: DependencyContainer): void
+    {
+        // The modification we made above would have been processed by now by AKI, so any values we changed had
+        // already been passed through the initial lifecycles (OnLoad) of AKI.
+        const databaseServer = container.resolve<DatabaseServer>("DatabaseServer");
+        const logger = container.resolve<ILogger>("WinstonLogger");
+
+        // find the nvgs item again by its Id
+        const nvgs = databaseServer.getTables().templates.items["5c0558060db834001b735271"];
+        // Lets log the state, this value should be true:
+        logger.logWithColor(`NVGs modified CanSellOnRagfair: ${nvgs._props.CanSellOnRagfair}`, LogTextColor.red, LogBackgroundColor.yellow);
+    }
+}
+
+module.exports = { mod: new Mod() }
\ No newline at end of file
diff --git a/TypeScript/14AfterDBLoadHook/tsconfig.json b/TypeScript/14AfterDBLoadHook/tsconfig.json
new file mode 100644
index 0000000..8151310
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/tsconfig.json
@@ -0,0 +1,25 @@
+{
+    "compilerOptions": {
+        "allowJs": true,
+        "module": "CommonJS",
+        "target": "es2020",
+        "moduleResolution": "node",
+        "esModuleInterop": true,
+        "downlevelIteration": true,
+        "experimentalDecorators": true,
+        "emitDecoratorMetadata": true,
+        "resolveJsonModule": true,
+        "outDir": "tmp",
+        "baseUrl": ".",
+        "paths": {
+            "@spt-aki/*": ["./types/*"]
+        }
+    },
+    "lib": [
+        "es2020"
+    ],
+    "include": [
+        "src/*",
+        "src/**/*"
+    ]
+}
\ No newline at end of file
diff --git a/TypeScript/14AfterDBLoadHook/types/Program.d.ts b/TypeScript/14AfterDBLoadHook/types/Program.d.ts
new file mode 100644
index 0000000..d4b71b9
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/Program.d.ts
@@ -0,0 +1,4 @@
+export declare class Program {
+    constructor();
+    start(): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/TYPES.d.ts b/TypeScript/14AfterDBLoadHook/types/TYPES.d.ts
new file mode 100644
index 0000000..6407c3a
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/TYPES.d.ts
@@ -0,0 +1,3 @@
+export declare const TYPES: {
+    [name: string]: symbol;
+};
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/BotCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/BotCallbacks.d.ts
new file mode 100644
index 0000000..2db60dc
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/BotCallbacks.d.ts
@@ -0,0 +1,15 @@
+import { BotController } from "../controllers/BotController";
+import { IGenerateBotsRequestData } from "../models/eft/bot/IGenerateBotsRequestData";
+import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
+import { IBotBase } from "../models/eft/common/tables/IBotBase";
+import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+export declare class BotCallbacks {
+    protected botController: BotController;
+    protected httpResponse: HttpResponseUtil;
+    constructor(botController: BotController, httpResponse: HttpResponseUtil);
+    getBotLimit(url: string, info: IEmptyRequestData, sessionID: string): string;
+    getBotDifficulty(url: string, info: IEmptyRequestData, sessionID: string): string;
+    generateBots(url: string, info: IGenerateBotsRequestData, sessionID: string): IGetBodyResponseData<IBotBase[]>;
+    getBotCap(): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/BundleCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/BundleCallbacks.d.ts
new file mode 100644
index 0000000..b28abe1
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/BundleCallbacks.d.ts
@@ -0,0 +1,18 @@
+import { BundleLoader } from "../loaders/BundleLoader";
+import { IHttpConfig } from "../models/spt/config/IHttpConfig";
+import { IHttpServer } from "../models/spt/server/IHttpServer";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ConfigServer } from "../servers/ConfigServer";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+export declare class BundleCallbacks {
+    protected logger: ILogger;
+    protected httpResponse: HttpResponseUtil;
+    protected httpServer: IHttpServer;
+    protected bundleLoader: BundleLoader;
+    protected configServer: ConfigServer;
+    protected httpConfig: IHttpConfig;
+    constructor(logger: ILogger, httpResponse: HttpResponseUtil, httpServer: IHttpServer, bundleLoader: BundleLoader, configServer: ConfigServer);
+    sendBundle(sessionID: string, req: any, resp: any, body: any): any;
+    getBundles(url: string, info: any, sessionID: string): string;
+    getBundle(url: string, info: any, sessionID: string): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/CustomizationCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/CustomizationCallbacks.d.ts
new file mode 100644
index 0000000..3bab8c0
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/CustomizationCallbacks.d.ts
@@ -0,0 +1,23 @@
+import { CustomizationController } from "../controllers/CustomizationController";
+import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { ISuit } from "../models/eft/common/tables/ITrader";
+import { IBuyClothingRequestData } from "../models/eft/customization/IBuyClothingRequestData";
+import { IWearClothingRequestData } from "../models/eft/customization/IWearClothingRequestData";
+import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { SaveServer } from "../servers/SaveServer";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+export declare class CustomizationCallbacks {
+    protected customizationController: CustomizationController;
+    protected saveServer: SaveServer;
+    protected httpResponse: HttpResponseUtil;
+    constructor(customizationController: CustomizationController, saveServer: SaveServer, httpResponse: HttpResponseUtil);
+    getSuits(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<{
+        _id: string;
+        suites: string[];
+    }>;
+    getTraderSuits(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ISuit[]>;
+    wearClothing(pmcData: IPmcData, body: IWearClothingRequestData, sessionID: string): IItemEventRouterResponse;
+    buyClothing(pmcData: IPmcData, body: IBuyClothingRequestData, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/DataCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/DataCallbacks.d.ts
new file mode 100644
index 0000000..cfb1c16
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/DataCallbacks.d.ts
@@ -0,0 +1,32 @@
+import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
+import { IGlobals } from "../models/eft/common/IGlobals";
+import { ICustomizationItem } from "../models/eft/common/tables/ICustomizationItem";
+import { IQuest } from "../models/eft/common/tables/IQuest";
+import { IHideoutArea } from "../models/eft/hideout/IHideoutArea";
+import { IHideoutProduction } from "../models/eft/hideout/IHideoutProduction";
+import { IHideoutScavCase } from "../models/eft/hideout/IHideoutScavCase";
+import { IHideoutSettingsBase } from "../models/eft/hideout/IHideoutSettingsBase";
+import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
+import { ILanguageBase } from "../models/spt/server/ILocaleBase";
+import { ISettingsBase } from "../models/spt/server/ISettingsBase";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+export declare class DataCallbacks {
+    protected httpResponse: HttpResponseUtil;
+    protected databaseServer: DatabaseServer;
+    constructor(httpResponse: HttpResponseUtil, databaseServer: DatabaseServer);
+    getSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ISettingsBase>;
+    getGlobals(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGlobals>;
+    getTemplateItems(url: string, info: IEmptyRequestData, sessionID: string): string;
+    getTemplateHandbook(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
+    getTemplateSuits(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<Record<string, ICustomizationItem>>;
+    getTemplateCharacter(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<string[]>;
+    getTemplateQuests(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IQuest[]>;
+    getHideoutSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IHideoutSettingsBase>;
+    getHideoutAreas(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IHideoutArea[]>;
+    gethideoutProduction(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IHideoutProduction[]>;
+    getHideoutScavcase(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IHideoutScavCase[]>;
+    getLocalesLanguages(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ILanguageBase[]>;
+    getLocalesMenu(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
+    getLocalesGlobal(url: string, info: IEmptyRequestData, sessionID: string): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/DialogueCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/DialogueCallbacks.d.ts
new file mode 100644
index 0000000..634f90b
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/DialogueCallbacks.d.ts
@@ -0,0 +1,45 @@
+import { DialogueController } from "../controllers/DialogueController";
+import { OnUpdate } from "../di/OnUpdate";
+import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
+import { IFriendRequestData } from "../models/eft/dialog/IFriendRequestData";
+import { IGetAllAttachmentsRequestData } from "../models/eft/dialog/IGetAllAttachmentsRequestData";
+import { IGetAllAttachmentsResponse } from "../models/eft/dialog/IGetAllAttachmentsResponse";
+import { IGetChatServerListRequestData } from "../models/eft/dialog/IGetChatServerListRequestData";
+import { IGetFriendListDataResponse } from "../models/eft/dialog/IGetFriendListDataResponse";
+import { IGetMailDialogInfoRequestData } from "../models/eft/dialog/IGetMailDialogInfoRequestData";
+import { IGetMailDialogListRequestData } from "../models/eft/dialog/IGetMailDialogListRequestData";
+import { IGetMailDialogViewRequestData } from "../models/eft/dialog/IGetMailDialogViewRequestData";
+import { IGetMailDialogViewResponseData } from "../models/eft/dialog/IGetMailDialogViewResponseData";
+import { IPinDialogRequestData } from "../models/eft/dialog/IPinDialogRequestData";
+import { IRemoveDialogRequestData } from "../models/eft/dialog/IRemoveDialogRequestData";
+import { ISendMessageRequest } from "../models/eft/dialog/ISendMessageRequest";
+import { ISetDialogReadRequestData } from "../models/eft/dialog/ISetDialogReadRequestData";
+import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
+import { INullResponseData } from "../models/eft/httpResponse/INullResponseData";
+import { DialogueInfo } from "../models/eft/profile/IAkiProfile";
+import { HashUtil } from "../utils/HashUtil";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+import { TimeUtil } from "../utils/TimeUtil";
+export declare class DialogueCallbacks extends OnUpdate {
+    protected hashUtil: HashUtil;
+    protected timeUtil: TimeUtil;
+    protected httpResponse: HttpResponseUtil;
+    protected dialogueController: DialogueController;
+    constructor(hashUtil: HashUtil, timeUtil: TimeUtil, httpResponse: HttpResponseUtil, dialogueController: DialogueController);
+    getFriendList(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetFriendListDataResponse>;
+    getChatServerList(url: string, info: IGetChatServerListRequestData, sessionID: string): IGetBodyResponseData<any[]>;
+    getMailDialogList(url: string, info: IGetMailDialogListRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo[]>;
+    getMailDialogView(url: string, info: IGetMailDialogViewRequestData, sessionID: string): IGetBodyResponseData<IGetMailDialogViewResponseData>;
+    getMailDialogInfo(url: string, info: IGetMailDialogInfoRequestData, sessionID: string): IGetBodyResponseData<any>;
+    removeDialog(url: string, info: IRemoveDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
+    pinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
+    unpinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
+    setRead(url: string, info: ISetDialogReadRequestData, sessionID: string): IGetBodyResponseData<any[]>;
+    getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData<IGetAllAttachmentsResponse>;
+    listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
+    listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
+    friendRequest(url: string, request: IFriendRequestData, sessionID: string): INullResponseData;
+    sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData<number>;
+    onUpdate(timeSinceLastRun: number): boolean;
+    getRoute(): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/GameCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/GameCallbacks.d.ts
new file mode 100644
index 0000000..d5cad76
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/GameCallbacks.d.ts
@@ -0,0 +1,24 @@
+import { GameController } from "../controllers/GameController";
+import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
+import { IGameConfigResponse } from "../models/eft/game/IGameConfigResponse";
+import { IGameEmptyCrcRequestData } from "../models/eft/game/IGameEmptyCrcRequestData";
+import { IVersionValidateRequestData } from "../models/eft/game/IVersionValidateRequestData";
+import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
+import { INullResponseData } from "../models/eft/httpResponse/INullResponseData";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+import { Watermark } from "../utils/Watermark";
+declare class GameCallbacks {
+    protected httpResponse: HttpResponseUtil;
+    protected watermark: Watermark;
+    protected gameController: GameController;
+    constructor(httpResponse: HttpResponseUtil, watermark: Watermark, gameController: GameController);
+    versionValidate(url: string, info: IVersionValidateRequestData, sessionID: string): INullResponseData;
+    gameStart(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
+    gameLogout(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
+    getGameConfig(url: string, info: IGameEmptyCrcRequestData, sessionID: string): IGetBodyResponseData<IGameConfigResponse>;
+    getServer(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
+    validateGameVersion(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
+    gameKeepalive(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
+    getVersion(url: string, info: IEmptyRequestData, sessionID: string): string;
+}
+export { GameCallbacks };
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/HandbookCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/HandbookCallbacks.d.ts
new file mode 100644
index 0000000..891e375
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/HandbookCallbacks.d.ts
@@ -0,0 +1,8 @@
+import { HandbookController } from "../controllers/HandbookController";
+import { OnLoad } from "../di/OnLoad";
+export declare class HandbookCallbacks extends OnLoad {
+    protected handbookController: HandbookController;
+    constructor(handbookController: HandbookController);
+    onLoad(): void;
+    getRoute(): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/HealthCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/HealthCallbacks.d.ts
new file mode 100644
index 0000000..8f7b89d
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/HealthCallbacks.d.ts
@@ -0,0 +1,20 @@
+import { HealthController } from "../controllers/HealthController";
+import { ProfileHelper } from "../helpers/ProfileHelper";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { IHealthTreatmentRequestData } from "../models/eft/health/IHealthTreatmentRequestData";
+import { IOffraidEatRequestData } from "../models/eft/health/IOffraidEatRequestData";
+import { IOffraidHealRequestData } from "../models/eft/health/IOffraidHealRequestData";
+import { ISyncHealthRequestData } from "../models/eft/health/ISyncHealthRequestData";
+import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+export declare class HealthCallbacks {
+    protected httpResponse: HttpResponseUtil;
+    protected profileHelper: ProfileHelper;
+    protected healthController: HealthController;
+    constructor(httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, healthController: HealthController);
+    syncHealth(url: string, info: ISyncHealthRequestData, sessionID: string): IGetBodyResponseData<string>;
+    offraidEat(pmcData: IPmcData, body: IOffraidEatRequestData, sessionID: string): IItemEventRouterResponse;
+    offraidHeal(pmcData: IPmcData, body: IOffraidHealRequestData, sessionID: string): IItemEventRouterResponse;
+    healthTreatment(pmcData: IPmcData, info: IHealthTreatmentRequestData, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/HideoutCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/HideoutCallbacks.d.ts
new file mode 100644
index 0000000..99ab4c9
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/HideoutCallbacks.d.ts
@@ -0,0 +1,33 @@
+import { HideoutController } from "../controllers/HideoutController";
+import { OnUpdate } from "../di/OnUpdate";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { IHideoutContinousProductionStartRequestData } from "../models/eft/hideout/IHideoutContinousProductionStartRequestData";
+import { IHideoutPutItemInRequestData } from "../models/eft/hideout/IHideoutPutItemInRequestData";
+import { IHideoutScavCaseStartRequestData } from "../models/eft/hideout/IHideoutScavCaseStartRequestData";
+import { IHideoutSingleProductionStartRequestData } from "../models/eft/hideout/IHideoutSingleProductionStartRequestData";
+import { IHideoutTakeItemOutRequestData } from "../models/eft/hideout/IHideoutTakeItemOutRequestData";
+import { IHideoutTakeProductionRequestData } from "../models/eft/hideout/IHideoutTakeProductionRequestData";
+import { IHideoutToggleAreaRequestData } from "../models/eft/hideout/IHideoutToggleAreaRequestData";
+import { IHideoutUpgradeCompleteRequestData } from "../models/eft/hideout/IHideoutUpgradeCompleteRequestData";
+import { IHideoutUpgradeRequestData } from "../models/eft/hideout/IHideoutUpgradeRequestData";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { IHideoutConfig } from "../models/spt/config/IHideoutConfig";
+import { ConfigServer } from "../servers/ConfigServer";
+export declare class HideoutCallbacks extends OnUpdate {
+    protected hideoutController: HideoutController;
+    protected configServer: ConfigServer;
+    protected hideoutConfig: IHideoutConfig;
+    constructor(hideoutController: HideoutController, // TODO: delay needed
+    configServer: ConfigServer);
+    upgrade(pmcData: IPmcData, body: IHideoutUpgradeRequestData, sessionID: string): IItemEventRouterResponse;
+    upgradeComplete(pmcData: IPmcData, body: IHideoutUpgradeCompleteRequestData, sessionID: string): IItemEventRouterResponse;
+    putItemsInAreaSlots(pmcData: IPmcData, body: IHideoutPutItemInRequestData, sessionID: string): IItemEventRouterResponse;
+    takeItemsFromAreaSlots(pmcData: IPmcData, body: IHideoutTakeItemOutRequestData, sessionID: string): IItemEventRouterResponse;
+    toggleArea(pmcData: IPmcData, body: IHideoutToggleAreaRequestData, sessionID: string): IItemEventRouterResponse;
+    singleProductionStart(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
+    scavCaseProductionStart(pmcData: IPmcData, body: IHideoutScavCaseStartRequestData, sessionID: string): IItemEventRouterResponse;
+    continuousProductionStart(pmcData: IPmcData, body: IHideoutContinousProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
+    takeProduction(pmcData: IPmcData, body: IHideoutTakeProductionRequestData, sessionID: string): IItemEventRouterResponse;
+    onUpdate(timeSinceLastRun: number): boolean;
+    getRoute(): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/HttpCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/HttpCallbacks.d.ts
new file mode 100644
index 0000000..94c97bd
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/HttpCallbacks.d.ts
@@ -0,0 +1,9 @@
+import { OnLoad } from "../di/OnLoad";
+import { IHttpServer } from "../models/spt/server/IHttpServer";
+export declare class HttpCallbacks extends OnLoad {
+    protected httpServer: IHttpServer;
+    constructor(httpServer: IHttpServer);
+    onLoad(): void;
+    getRoute(): string;
+    getImage(): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/InraidCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/InraidCallbacks.d.ts
new file mode 100644
index 0000000..05bcce4
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/InraidCallbacks.d.ts
@@ -0,0 +1,23 @@
+import { InraidController } from "../controllers/InraidController";
+import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
+import { INullResponseData } from "../models/eft/httpResponse/INullResponseData";
+import { IRegisterPlayerRequestData } from "../models/eft/inRaid/IRegisterPlayerRequestData";
+import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData";
+import { IAirdropConfig } from "../models/spt/config/IAirdropConfig";
+import { IInRaidConfig } from "../models/spt/config/IInRaidConfig";
+import { ConfigServer } from "../servers/ConfigServer";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+export declare class InraidCallbacks {
+    protected inraidController: InraidController;
+    protected httpResponse: HttpResponseUtil;
+    protected configServer: ConfigServer;
+    protected airdropConfig: IAirdropConfig;
+    protected inraidConfig: IInRaidConfig;
+    constructor(inraidController: InraidController, httpResponse: HttpResponseUtil, configServer: ConfigServer);
+    registerPlayer(url: string, info: IRegisterPlayerRequestData, sessionID: string): INullResponseData;
+    saveProgress(url: string, info: ISaveProgressRequestData, sessionID: string): INullResponseData;
+    getRaidEndState(): string;
+    getRaidMenuSettings(url: string, info: IEmptyRequestData, sessionID: string): string;
+    getWeaponDurability(url: string, info: any, sessionID: string): string;
+    getAirdropConfig(url: string, info: any, sessionID: string): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/InsuranceCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/InsuranceCallbacks.d.ts
new file mode 100644
index 0000000..520d0eb
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/InsuranceCallbacks.d.ts
@@ -0,0 +1,24 @@
+import { InsuranceController } from "../controllers/InsuranceController";
+import { OnLoadOnUpdate } from "../di/OnLoadOnUpdate";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
+import { IGetInsuranceCostRequestData } from "../models/eft/insurance/IGetInsuranceCostRequestData";
+import { IInsureRequestData } from "../models/eft/insurance/IInsureRequestData";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { IInsuranceConfig } from "../models/spt/config/IInsuranceConfig";
+import { ConfigServer } from "../servers/ConfigServer";
+import { InsuranceService } from "../services/InsuranceService";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+export declare class InsuranceCallbacks extends OnLoadOnUpdate {
+    protected insuranceController: InsuranceController;
+    protected insuranceService: InsuranceService;
+    protected httpResponse: HttpResponseUtil;
+    protected configServer: ConfigServer;
+    protected insuranceConfig: IInsuranceConfig;
+    constructor(insuranceController: InsuranceController, insuranceService: InsuranceService, httpResponse: HttpResponseUtil, configServer: ConfigServer);
+    onLoad(): void;
+    getInsuranceCost(url: string, info: IGetInsuranceCostRequestData, sessionID: string): IGetBodyResponseData<any>;
+    insure(pmcData: IPmcData, body: IInsureRequestData, sessionID: string): IItemEventRouterResponse;
+    onUpdate(secondsSinceLastRun: number): boolean;
+    getRoute(): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/InventoryCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/InventoryCallbacks.d.ts
new file mode 100644
index 0000000..9ab1486
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/InventoryCallbacks.d.ts
@@ -0,0 +1,39 @@
+import { InventoryController } from "../controllers/InventoryController";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { IInventoryBindRequestData } from "../models/eft/inventory/IInventoryBindRequestData";
+import { IInventoryCreateMarkerRequestData } from "../models/eft/inventory/IInventoryCreateMarkerRequestData";
+import { IInventoryDeleteMarkerRequestData } from "../models/eft/inventory/IInventoryDeleteMarkerRequestData";
+import { IInventoryEditMarkerRequestData } from "../models/eft/inventory/IInventoryEditMarkerRequestData";
+import { IInventoryExamineRequestData } from "../models/eft/inventory/IInventoryExamineRequestData";
+import { IInventoryFoldRequestData } from "../models/eft/inventory/IInventoryFoldRequestData";
+import { IInventoryMergeRequestData } from "../models/eft/inventory/IInventoryMergeRequestData";
+import { IInventoryMoveRequestData } from "../models/eft/inventory/IInventoryMoveRequestData";
+import { IInventoryReadEncyclopediaRequestData } from "../models/eft/inventory/IInventoryReadEncyclopediaRequestData";
+import { IInventoryRemoveRequestData } from "../models/eft/inventory/IInventoryRemoveRequestData";
+import { IInventorySortRequestData } from "../models/eft/inventory/IInventorySortRequestData";
+import { IInventorySplitRequestData } from "../models/eft/inventory/IInventorySplitRequestData";
+import { IInventorySwapRequestData } from "../models/eft/inventory/IInventorySwapRequestData";
+import { IInventoryTagRequestData } from "../models/eft/inventory/IInventoryTagRequestData";
+import { IInventoryToggleRequestData } from "../models/eft/inventory/IInventoryToggleRequestData";
+import { IInventoryTransferRequestData } from "../models/eft/inventory/IInventoryTransferRequestData";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+export declare class InventoryCallbacks {
+    protected inventoryController: InventoryController;
+    constructor(inventoryController: InventoryController);
+    moveItem(pmcData: IPmcData, body: IInventoryMoveRequestData, sessionID: string): IItemEventRouterResponse;
+    removeItem(pmcData: IPmcData, body: IInventoryRemoveRequestData, sessionID: string): IItemEventRouterResponse;
+    splitItem(pmcData: IPmcData, body: IInventorySplitRequestData, sessionID: string): IItemEventRouterResponse;
+    mergeItem(pmcData: IPmcData, body: IInventoryMergeRequestData, sessionID: string): IItemEventRouterResponse;
+    transferItem(pmcData: IPmcData, body: IInventoryTransferRequestData, sessionID: string): IItemEventRouterResponse;
+    swapItem(pmcData: IPmcData, body: IInventorySwapRequestData, sessionID: string): IItemEventRouterResponse;
+    foldItem(pmcData: IPmcData, body: IInventoryFoldRequestData, sessionID: string): IItemEventRouterResponse;
+    toggleItem(pmcData: IPmcData, body: IInventoryToggleRequestData, sessionID: string): IItemEventRouterResponse;
+    tagItem(pmcData: IPmcData, body: IInventoryTagRequestData, sessionID: string): IItemEventRouterResponse;
+    bindItem(pmcData: IPmcData, body: IInventoryBindRequestData, sessionID: string): IItemEventRouterResponse;
+    examineItem(pmcData: IPmcData, body: IInventoryExamineRequestData, sessionID: string): IItemEventRouterResponse;
+    readEncyclopedia(pmcData: IPmcData, body: IInventoryReadEncyclopediaRequestData, sessionID: string): IItemEventRouterResponse;
+    sortInventory(pmcData: IPmcData, body: IInventorySortRequestData, sessionID: string): IItemEventRouterResponse;
+    createMapMarker(pmcData: IPmcData, body: IInventoryCreateMarkerRequestData, sessionID: string): IItemEventRouterResponse;
+    deleteMapMarker(pmcData: IPmcData, body: IInventoryDeleteMarkerRequestData, sessionID: string): IItemEventRouterResponse;
+    editMapMarker(pmcData: IPmcData, body: IInventoryEditMarkerRequestData, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/ItemEventCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/ItemEventCallbacks.d.ts
new file mode 100644
index 0000000..f4f04f9
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/ItemEventCallbacks.d.ts
@@ -0,0 +1,11 @@
+import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
+import { IItemEventRouterRequest } from "../models/eft/itemEvent/IItemEventRouterRequest";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { ItemEventRouter } from "../routers/ItemEventRouter";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+export declare class ItemEventCallbacks {
+    protected httpResponse: HttpResponseUtil;
+    protected itemEventRouter: ItemEventRouter;
+    constructor(httpResponse: HttpResponseUtil, itemEventRouter: ItemEventRouter);
+    handleEvents(url: string, info: IItemEventRouterRequest, sessionID: string): IGetBodyResponseData<IItemEventRouterResponse>;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/LauncherCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/LauncherCallbacks.d.ts
new file mode 100644
index 0000000..c022325
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/LauncherCallbacks.d.ts
@@ -0,0 +1,28 @@
+import { LauncherController } from "../controllers/LauncherController";
+import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
+import { IChangeRequestData } from "../models/eft/launcher/IChangeRequestData";
+import { ILoginRequestData } from "../models/eft/launcher/ILoginRequestData";
+import { IRegisterData } from "../models/eft/launcher/IRegisterData";
+import { IRemoveProfileData } from "../models/eft/launcher/IRemoveProfileData";
+import { SaveServer } from "../servers/SaveServer";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+import { Watermark } from "../utils/Watermark";
+declare class LauncherCallbacks {
+    protected httpResponse: HttpResponseUtil;
+    protected launcherController: LauncherController;
+    protected saveServer: SaveServer;
+    protected watermark: Watermark;
+    constructor(httpResponse: HttpResponseUtil, launcherController: LauncherController, saveServer: SaveServer, watermark: Watermark);
+    connect(): string;
+    login(url: string, info: ILoginRequestData, sessionID: string): string;
+    register(url: string, info: IRegisterData, sessionID: string): "FAILED" | "OK";
+    get(url: string, info: ILoginRequestData, sessionID: string): string;
+    changeUsername(url: string, info: IChangeRequestData, sessionID: string): "FAILED" | "OK";
+    changePassword(url: string, info: IChangeRequestData, sessionID: string): "FAILED" | "OK";
+    wipe(url: string, info: IRegisterData, sessionID: string): "FAILED" | "OK";
+    getServerVersion(): string;
+    ping(url: string, info: IEmptyRequestData, sessionID: string): string;
+    removeProfile(url: string, info: IRemoveProfileData, sessionID: string): string;
+    getCompatibleTarkovVersion(): string;
+}
+export { LauncherCallbacks };
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/LocationCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/LocationCallbacks.d.ts
new file mode 100644
index 0000000..cc69369
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/LocationCallbacks.d.ts
@@ -0,0 +1,14 @@
+import { LocationController } from "../controllers/LocationController";
+import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
+import { ILocationBase } from "../models/eft/common/ILocationBase";
+import { ILocationsGenerateAllResponse } from "../models/eft/common/ILocationsSourceDestinationBase";
+import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
+import { IGetLocationRequestData } from "../models/eft/location/IGetLocationRequestData";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+export declare class LocationCallbacks {
+    protected httpResponse: HttpResponseUtil;
+    protected locationController: LocationController;
+    constructor(httpResponse: HttpResponseUtil, locationController: LocationController);
+    getLocationData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ILocationsGenerateAllResponse>;
+    getLocation(url: string, info: IGetLocationRequestData, sessionID: string): IGetBodyResponseData<ILocationBase>;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/MatchCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/MatchCallbacks.d.ts
new file mode 100644
index 0000000..083c1f5
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/MatchCallbacks.d.ts
@@ -0,0 +1,35 @@
+import { MatchController } from "../controllers/MatchController";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
+import { INullResponseData } from "../models/eft/httpResponse/INullResponseData";
+import { IEndOfflineRaidRequestData } from "../models/eft/match/IEndOfflineRaidRequestData";
+import { IGetProfileRequestData } from "../models/eft/match/IGetProfileRequestData";
+import { IStartOfflineRaidRequestData } from "../models/eft/match/IStartOffineRaidRequestData";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+import { JsonUtil } from "../utils/JsonUtil";
+export declare class MatchCallbacks {
+    protected httpResponse: HttpResponseUtil;
+    protected jsonUtil: JsonUtil;
+    protected matchController: MatchController;
+    protected databaseServer: DatabaseServer;
+    constructor(httpResponse: HttpResponseUtil, jsonUtil: JsonUtil, matchController: MatchController, databaseServer: DatabaseServer);
+    updatePing(url: string, info: any, sessionID: string): INullResponseData;
+    exitMatch(url: string, info: any, sessionID: string): INullResponseData;
+    exitToMenu(url: string, info: any, sessionID: string): INullResponseData;
+    startGroupSearch(url: string, info: any, sessionID: string): INullResponseData;
+    stopGroupSearch(url: string, info: any, sessionID: string): INullResponseData;
+    sendGroupInvite(url: string, info: any, sessionID: string): INullResponseData;
+    acceptGroupInvite(url: string, info: any, sessionID: string): INullResponseData;
+    cancelGroupInvite(url: string, info: any, sessionID: string): INullResponseData;
+    putMetrics(url: string, info: any, sessionID: string): INullResponseData;
+    getProfile(url: string, info: IGetProfileRequestData, sessionID: string): IGetBodyResponseData<IPmcData[]>;
+    serverAvailable(url: string, info: any, sessionID: string): IGetBodyResponseData<any> | IGetBodyResponseData<true>;
+    joinMatch(url: string, info: any, sessionID: string): IGetBodyResponseData<any>;
+    getMetrics(url: string, info: any, sessionID: string): IGetBodyResponseData<string>;
+    getGroupStatus(url: string, info: any, sessionID: string): IGetBodyResponseData<any>;
+    createGroup(url: string, info: any, sessionID: string): IGetBodyResponseData<any>;
+    deleteGroup(url: string, info: any, sessionID: string): INullResponseData;
+    startOfflineRaid(url: string, info: IStartOfflineRaidRequestData, sessionID: string): INullResponseData;
+    endOfflineRaid(url: string, info: IEndOfflineRaidRequestData, sessionID: string): INullResponseData;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/ModCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/ModCallbacks.d.ts
new file mode 100644
index 0000000..866abf7
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/ModCallbacks.d.ts
@@ -0,0 +1,22 @@
+import { OnLoad } from "../di/OnLoad";
+import { DelayedModLoader } from "../loaders/DelayedModLoader";
+import { IHttpConfig } from "../models/spt/config/IHttpConfig";
+import { IHttpServer } from "../models/spt/server/IHttpServer";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ConfigServer } from "../servers/ConfigServer";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+declare class ModCallbacks extends OnLoad {
+    protected logger: ILogger;
+    protected httpResponse: HttpResponseUtil;
+    protected httpServer: IHttpServer;
+    protected modLoader: DelayedModLoader;
+    protected configServer: ConfigServer;
+    protected httpConfig: IHttpConfig;
+    constructor(logger: ILogger, httpResponse: HttpResponseUtil, httpServer: IHttpServer, modLoader: DelayedModLoader, configServer: ConfigServer);
+    onLoad(): void;
+    getRoute(): string;
+    sendBundle(sessionID: string, req: any, resp: any, body: any): void;
+    getBundles(url: string, info: any, sessionID: string): string;
+    getBundle(url: string, info: any, sessionID: string): string;
+}
+export { ModCallbacks };
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/NoteCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/NoteCallbacks.d.ts
new file mode 100644
index 0000000..d39d400
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/NoteCallbacks.d.ts
@@ -0,0 +1,11 @@
+import { NoteController } from "../controllers/NoteController";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { INoteActionData } from "../models/eft/notes/INoteActionData";
+export declare class NoteCallbacks {
+    protected noteController: NoteController;
+    constructor(noteController: NoteController);
+    addNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse;
+    editNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse;
+    deleteNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/NotifierCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/NotifierCallbacks.d.ts
new file mode 100644
index 0000000..cd1e736
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/NotifierCallbacks.d.ts
@@ -0,0 +1,24 @@
+import { NotifierController } from "../controllers/NotifierController";
+import { HttpServerHelper } from "../helpers/HttpServerHelper";
+import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
+import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
+import { INotifierChannel } from "../models/eft/notifier/INotifier";
+import { ISelectProfileRequestData } from "../models/eft/notifier/ISelectProfileRequestData";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+export declare class NotifierCallbacks {
+    protected httpServerHelper: HttpServerHelper;
+    protected httpResponse: HttpResponseUtil;
+    protected notifierController: NotifierController;
+    constructor(httpServerHelper: HttpServerHelper, httpResponse: HttpResponseUtil, notifierController: NotifierController);
+    /**
+     * If we don't have anything to send, it's ok to not send anything back
+     * because notification requests can be long-polling. In fact, we SHOULD wait
+     * until we actually have something to send because otherwise we'd spam the client
+     * and the client would abort the connection due to spam.
+     */
+    sendNotification(_sessionID: string, req: any, resp: any, _data: any): void;
+    getNotifier(url: string, info: any, sessionID: string): IGetBodyResponseData<any[]>;
+    createNotifierChannel(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<INotifierChannel>;
+    selectProfile(url: string, info: ISelectProfileRequestData, sessionID: string): IGetBodyResponseData<any>;
+    notify(url: string, info: any, sessionID: string): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/PresetBuildCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/PresetBuildCallbacks.d.ts
new file mode 100644
index 0000000..8a0c155
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/PresetBuildCallbacks.d.ts
@@ -0,0 +1,15 @@
+import { PresetBuildController } from "../controllers/PresetBuildController";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { IPresetBuildActionRequestData } from "../models/eft/presetBuild/IPresetBuildActionRequestData";
+import { WeaponBuild } from "../models/eft/profile/IAkiProfile";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+export declare class PresetBuildCallbacks {
+    protected httpResponse: HttpResponseUtil;
+    protected presetBuildController: PresetBuildController;
+    constructor(httpResponse: HttpResponseUtil, presetBuildController: PresetBuildController);
+    getHandbookUserlist(url: string, info: any, sessionID: string): IGetBodyResponseData<WeaponBuild[]>;
+    saveBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse;
+    removeBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/PresetCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/PresetCallbacks.d.ts
new file mode 100644
index 0000000..4553f8f
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/PresetCallbacks.d.ts
@@ -0,0 +1,8 @@
+import { PresetController } from "../controllers/PresetController";
+import { OnLoad } from "../di/OnLoad";
+export declare class PresetCallbacks extends OnLoad {
+    protected presetController: PresetController;
+    constructor(presetController: PresetController);
+    onLoad(): void;
+    getRoute(): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/ProfileCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/ProfileCallbacks.d.ts
new file mode 100644
index 0000000..116e7c5
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/ProfileCallbacks.d.ts
@@ -0,0 +1,30 @@
+import { ProfileController } from "../controllers/ProfileController";
+import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
+import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
+import { INullResponseData } from "../models/eft/httpResponse/INullResponseData";
+import { IGetMiniProfileRequestData } from "../models/eft/launcher/IGetMiniProfileRequestData";
+import { IProfileChangeNicknameRequestData } from "../models/eft/profile/IProfileChangeNicknameRequestData";
+import { IProfileChangeVoiceRequestData } from "../models/eft/profile/IProfileChangeVoiceRequestData";
+import { IProfileCreateRequestData } from "../models/eft/profile/IProfileCreateRequestData";
+import { ISearchFriendRequestData } from "../models/eft/profile/ISearchFriendRequestData";
+import { ISearchFriendResponse } from "../models/eft/profile/ISearchFriendResponse";
+import { IValidateNicknameRequestData } from "../models/eft/profile/IValidateNicknameRequestData";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+import { TimeUtil } from "../utils/TimeUtil";
+export declare class ProfileCallbacks {
+    protected httpResponse: HttpResponseUtil;
+    protected timeUtil: TimeUtil;
+    protected profileController: ProfileController;
+    constructor(httpResponse: HttpResponseUtil, timeUtil: TimeUtil, profileController: ProfileController);
+    createProfile(url: string, info: IProfileCreateRequestData, sessionID: string): IGetBodyResponseData<any>;
+    getProfileData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
+    regenerateScav(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
+    changeVoice(url: string, info: IProfileChangeVoiceRequestData, sessionID: string): INullResponseData;
+    changeNickname(url: string, info: IProfileChangeNicknameRequestData, sessionID: string): IGetBodyResponseData<any>;
+    validateNickname(url: string, info: IValidateNicknameRequestData, sessionID: string): IGetBodyResponseData<any>;
+    getReservedNickname(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<string>;
+    getProfileStatus(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
+    searchFriend(url: string, info: ISearchFriendRequestData, sessionID: string): IGetBodyResponseData<ISearchFriendResponse[]>;
+    getMiniProfile(url: string, info: IGetMiniProfileRequestData, sessionID: string): string;
+    getAllMiniProfiles(url: string, info: any, sessionID: string): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/QuestCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/QuestCallbacks.d.ts
new file mode 100644
index 0000000..559c29e
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/QuestCallbacks.d.ts
@@ -0,0 +1,26 @@
+import { QuestController } from "../controllers/QuestController";
+import { RepeatableQuestController } from "../controllers/RepeatableQuestController";
+import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { IQuest } from "../models/eft/common/tables/IQuest";
+import { IPmcDataRepeatableQuest } from "../models/eft/common/tables/IRepeatableQuests";
+import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { IAcceptQuestRequestData } from "../models/eft/quests/IAcceptQuestRequestData";
+import { ICompleteQuestRequestData } from "../models/eft/quests/ICompleteQuestRequestData";
+import { IHandoverQuestRequestData } from "../models/eft/quests/IHandoverQuestRequestData";
+import { IListQuestsRequestData } from "../models/eft/quests/IListQuestsRequestData";
+import { IRepeatableQuestChangeRequest } from "../models/eft/quests/IRepeatableQuestChangeRequest";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+export declare class QuestCallbacks {
+    protected httpResponse: HttpResponseUtil;
+    protected questController: QuestController;
+    protected repeatableQuestController: RepeatableQuestController;
+    constructor(httpResponse: HttpResponseUtil, questController: QuestController, repeatableQuestController: RepeatableQuestController);
+    changeRepeatableQuest(pmcData: IPmcData, body: IRepeatableQuestChangeRequest, sessionID: string): IItemEventRouterResponse;
+    acceptQuest(pmcData: IPmcData, body: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse;
+    completeQuest(pmcData: IPmcData, body: ICompleteQuestRequestData, sessionID: string): IItemEventRouterResponse;
+    handoverQuest(pmcData: IPmcData, body: IHandoverQuestRequestData, sessionID: string): IItemEventRouterResponse;
+    listQuests(url: string, info: IListQuestsRequestData, sessionID: string): IGetBodyResponseData<IQuest[]>;
+    activityPeriods(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IPmcDataRepeatableQuest[]>;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/RagfairCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/RagfairCallbacks.d.ts
new file mode 100644
index 0000000..d5bab8b
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/RagfairCallbacks.d.ts
@@ -0,0 +1,39 @@
+import { RagfairController } from "../controllers/RagfairController";
+import { OnLoadOnUpdate } from "../di/OnLoadOnUpdate";
+import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
+import { INullResponseData } from "../models/eft/httpResponse/INullResponseData";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { IAddOfferRequestData } from "../models/eft/ragfair/IAddOfferRequestData";
+import { IExtendOfferRequestData } from "../models/eft/ragfair/IExtendOfferRequestData";
+import { IGetItemPriceResult } from "../models/eft/ragfair/IGetItemPriceResult";
+import { IGetMarketPriceRequestData } from "../models/eft/ragfair/IGetMarketPriceRequestData";
+import { IRemoveOfferRequestData } from "../models/eft/ragfair/IRemoveOfferRequestData";
+import { ISearchRequestData } from "../models/eft/ragfair/ISearchRequestData";
+import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ConfigServer } from "../servers/ConfigServer";
+import { RagfairServer } from "../servers/RagfairServer";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+import { JsonUtil } from "../utils/JsonUtil";
+export declare class RagfairCallbacks extends OnLoadOnUpdate {
+    protected httpResponse: HttpResponseUtil;
+    protected logger: ILogger;
+    protected jsonUtil: JsonUtil;
+    protected ragfairServer: RagfairServer;
+    protected ragfairController: RagfairController;
+    protected configServer: ConfigServer;
+    protected ragfairConfig: IRagfairConfig;
+    constructor(httpResponse: HttpResponseUtil, logger: ILogger, jsonUtil: JsonUtil, ragfairServer: RagfairServer, ragfairController: RagfairController, configServer: ConfigServer);
+    onLoad(): void;
+    getRoute(): string;
+    search(url: string, info: ISearchRequestData, sessionID: string): IGetBodyResponseData<any>;
+    getMarketPrice(url: string, info: IGetMarketPriceRequestData, sessionID: string): IGetBodyResponseData<IGetItemPriceResult>;
+    getItemPrices(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
+    addOffer(pmcData: IPmcData, info: IAddOfferRequestData, sessionID: string): IItemEventRouterResponse;
+    removeOffer(pmcData: IPmcData, info: IRemoveOfferRequestData, sessionID: string): IItemEventRouterResponse;
+    extendOffer(pmcData: IPmcData, info: IExtendOfferRequestData, sessionID: string): IItemEventRouterResponse;
+    onUpdate(timeSinceLastRun: number): boolean;
+    sendReport(url: string, info: any, sessionID: string): INullResponseData;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/RepairCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/RepairCallbacks.d.ts
new file mode 100644
index 0000000..63733fa
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/RepairCallbacks.d.ts
@@ -0,0 +1,11 @@
+import { RepairController } from "../controllers/RepairController";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { IRepairActionDataRequest } from "../models/eft/repair/IRepairActionDataRequest";
+import { ITraderRepairActionDataRequest } from "../models/eft/repair/ITraderRepairActionDataRequest";
+export declare class RepairCallbacks {
+    protected repairController: RepairController;
+    constructor(repairController: RepairController);
+    traderRepair(pmcData: IPmcData, body: ITraderRepairActionDataRequest, sessionID: string): IItemEventRouterResponse;
+    repair(pmcData: IPmcData, body: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/SaveCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/SaveCallbacks.d.ts
new file mode 100644
index 0000000..bbb6e53
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/SaveCallbacks.d.ts
@@ -0,0 +1,9 @@
+import { OnLoadOnUpdate } from "../di/OnLoadOnUpdate";
+import { SaveServer } from "../servers/SaveServer";
+export declare class SaveCallbacks extends OnLoadOnUpdate {
+    protected saveServer: SaveServer;
+    constructor(saveServer: SaveServer);
+    onLoad(): void;
+    getRoute(): string;
+    onUpdate(secondsSinceLastRun: number): boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/TradeCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/TradeCallbacks.d.ts
new file mode 100644
index 0000000..272ae46
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/TradeCallbacks.d.ts
@@ -0,0 +1,11 @@
+import { TradeController } from "../controllers/TradeController";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { IProcessBaseTradeRequestData } from "../models/eft/trade/IProcessBaseTradeRequestData";
+import { IProcessRagfairTradeRequestData } from "../models/eft/trade/IProcessRagfairTradeRequestData";
+export declare class TradeCallbacks {
+    protected tradeController: TradeController;
+    constructor(tradeController: TradeController);
+    processTrade(pmcData: IPmcData, body: IProcessBaseTradeRequestData, sessionID: string): IItemEventRouterResponse;
+    processRagfairTrade(pmcData: IPmcData, body: IProcessRagfairTradeRequestData, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/TraderCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/TraderCallbacks.d.ts
new file mode 100644
index 0000000..128d9b2
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/TraderCallbacks.d.ts
@@ -0,0 +1,18 @@
+import { TraderController } from "../controllers/TraderController";
+import { OnLoadOnUpdate } from "../di/OnLoadOnUpdate";
+import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
+import { IBarterScheme, ITraderAssort, ITraderBase } from "../models/eft/common/tables/ITrader";
+import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+export declare class TraderCallbacks extends OnLoadOnUpdate {
+    protected httpResponse: HttpResponseUtil;
+    protected traderController: TraderController;
+    constructor(httpResponse: HttpResponseUtil, traderController: TraderController);
+    onLoad(): void;
+    getRoute(): string;
+    getTraderSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ITraderBase[]>;
+    getProfilePurchases(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<Record<string, IBarterScheme[][]>>;
+    getTrader(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ITraderBase>;
+    getAssort(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ITraderAssort>;
+    onUpdate(): boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/WeatherCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/WeatherCallbacks.d.ts
new file mode 100644
index 0000000..ae784c8
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/WeatherCallbacks.d.ts
@@ -0,0 +1,10 @@
+import { WeatherController } from "../controllers/WeatherController";
+import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
+import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+export declare class WeatherCallbacks {
+    protected httpResponse: HttpResponseUtil;
+    protected weatherController: WeatherController;
+    constructor(httpResponse: HttpResponseUtil, weatherController: WeatherController);
+    getWeather(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/callbacks/WishlistCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/callbacks/WishlistCallbacks.d.ts
new file mode 100644
index 0000000..c2cc2a8
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/callbacks/WishlistCallbacks.d.ts
@@ -0,0 +1,10 @@
+import { WishlistController } from "../controllers/WishlistController";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { IWishlistActionData } from "../models/eft/wishlist/IWishlistActionData";
+export declare class WishlistCallbacks {
+    protected wishlistController: WishlistController;
+    constructor(wishlistController: WishlistController);
+    addToWishlist(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse;
+    removeFromWishlist(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/controllers/BotController.d.ts b/TypeScript/14AfterDBLoadHook/types/controllers/BotController.d.ts
new file mode 100644
index 0000000..09a1788
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/controllers/BotController.d.ts
@@ -0,0 +1,35 @@
+import { BotGenerator } from "../generators/BotGenerator";
+import { BotHelper } from "../helpers/BotHelper";
+import { IGenerateBotsRequestData } from "../models/eft/bot/IGenerateBotsRequestData";
+import { IBotBase } from "../models/eft/common/tables/IBotBase";
+import { IBotCore } from "../models/eft/common/tables/IBotCore";
+import { Difficulty } from "../models/eft/common/tables/IBotType";
+import { IBotConfig } from "../models/spt/config/IBotConfig";
+import { ConfigServer } from "../servers/ConfigServer";
+import { DatabaseServer } from "../servers/DatabaseServer";
+export declare class BotController {
+    protected databaseServer: DatabaseServer;
+    protected botGenerator: BotGenerator;
+    protected botHelper: BotHelper;
+    protected configServer: ConfigServer;
+    protected botConfig: IBotConfig;
+    constructor(databaseServer: DatabaseServer, botGenerator: BotGenerator, botHelper: BotHelper, configServer: ConfigServer);
+    /**
+     * Return the number of bot loadout varieties to be generated
+     * @param type bot Type we want the loadout gen count for
+     * @returns
+     */
+    getBotPresetGenerationLimit(type: string): number;
+    getBotCoreDifficulty(): IBotCore;
+    /**
+     * Get bot difficulty settings
+     * adjust PMC settings to ensure they engage the correct bot types
+     * @param type what bot the server is requesting settings for
+     * @param difficulty difficulty level server requested settings for
+     * @returns Difficulty object
+     */
+    getBotDifficulty(type: string, difficulty: string): Difficulty;
+    protected getPmcDifficultySettings(pmcType: "bear" | "usec", difficulty: string): Difficulty;
+    generate(info: IGenerateBotsRequestData, playerScav?: boolean): IBotBase[];
+    getBotCap(): number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/controllers/CustomizationController.d.ts b/TypeScript/14AfterDBLoadHook/types/controllers/CustomizationController.d.ts
new file mode 100644
index 0000000..a6c4730
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/controllers/CustomizationController.d.ts
@@ -0,0 +1,22 @@
+import { ProfileHelper } from "../helpers/ProfileHelper";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { ISuit } from "../models/eft/common/tables/ITrader";
+import { IBuyClothingRequestData } from "../models/eft/customization/IBuyClothingRequestData";
+import { IWearClothingRequestData } from "../models/eft/customization/IWearClothingRequestData";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ItemEventRouter } from "../routers/ItemEventRouter";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { SaveServer } from "../servers/SaveServer";
+export declare class CustomizationController {
+    protected logger: ILogger;
+    protected itemEventRouter: ItemEventRouter;
+    protected databaseServer: DatabaseServer;
+    protected saveServer: SaveServer;
+    protected profileHelper: ProfileHelper;
+    constructor(logger: ILogger, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, saveServer: SaveServer, profileHelper: ProfileHelper);
+    getTraderSuits(traderID: string, sessionID: string): ISuit[];
+    wearClothing(pmcData: IPmcData, body: IWearClothingRequestData, sessionID: string): IItemEventRouterResponse;
+    buyClothing(pmcData: IPmcData, body: IBuyClothingRequestData, sessionID: string): IItemEventRouterResponse;
+    protected getAllTraderSuits(sessionID: string): ISuit[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/controllers/DialogueController.d.ts b/TypeScript/14AfterDBLoadHook/types/controllers/DialogueController.d.ts
new file mode 100644
index 0000000..b15c4b6
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/controllers/DialogueController.d.ts
@@ -0,0 +1,25 @@
+import { DialogueHelper } from "../helpers/DialogueHelper";
+import { IGetAllAttachmentsResponse } from "../models/eft/dialog/IGetAllAttachmentsResponse";
+import { IGetFriendListDataResponse } from "../models/eft/dialog/IGetFriendListDataResponse";
+import { IGetMailDialogViewResponseData } from "../models/eft/dialog/IGetMailDialogViewResponseData";
+import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
+import { DialogueInfo, Message } from "../models/eft/profile/IAkiProfile";
+import { SaveServer } from "../servers/SaveServer";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+export declare class DialogueController {
+    protected httpResponse: HttpResponseUtil;
+    protected saveServer: SaveServer;
+    protected dialogueHelper: DialogueHelper;
+    constructor(httpResponse: HttpResponseUtil, saveServer: SaveServer, dialogueHelper: DialogueHelper);
+    getFriendList(sessionID: string): IGetFriendListDataResponse;
+    generateDialogueList(sessionID: string): IGetBodyResponseData<DialogueInfo[]>;
+    getDialogueInfo(dialogueID: string, sessionID: string): DialogueInfo;
+    generateDialogueView(dialogueID: string, sessionID: string): IGetMailDialogViewResponseData;
+    removeDialogue(dialogueID: string, sessionID: string): void;
+    setDialoguePin(dialogueID: string, shouldPin: boolean, sessionID: string): void;
+    setRead(dialogueIDs: string[], sessionID: string): void;
+    getAllAttachments(dialogueID: string, sessionID: string): IGetAllAttachmentsResponse;
+    protected messagesHaveUncollectedRewards(messages: Message[]): boolean;
+    protected removeExpiredItems(sessionID: string): void;
+    update(): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/controllers/GameController.d.ts b/TypeScript/14AfterDBLoadHook/types/controllers/GameController.d.ts
new file mode 100644
index 0000000..5f516de
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/controllers/GameController.d.ts
@@ -0,0 +1,37 @@
+import { GameHelper } from "../helpers/GameHelper";
+import { HttpServerHelper } from "../helpers/HttpServerHelper";
+import { ProfileHelper } from "../helpers/ProfileHelper";
+import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { IPmcDataRepeatableQuest, IRepeatableQuest } from "../models/eft/common/tables/IRepeatableQuests";
+import { IGameConfigResponse } from "../models/eft/game/IGameConfigResponse";
+import { IAkiProfile } from "../models/eft/profile/IAkiProfile";
+import { ICoreConfig } from "../models/spt/config/ICoreConfig";
+import { IHttpConfig } from "../models/spt/config/IHttpConfig";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ConfigServer } from "../servers/ConfigServer";
+import { LocaleService } from "../services/LocaleService";
+import { Watermark } from "../utils/Watermark";
+export declare class GameController {
+    protected logger: ILogger;
+    protected watermark: Watermark;
+    protected httpServerHelper: HttpServerHelper;
+    protected localeService: LocaleService;
+    protected profileHelper: ProfileHelper;
+    protected gameHelper: GameHelper;
+    protected configServer: ConfigServer;
+    protected httpConfig: IHttpConfig;
+    protected coreConfig: ICoreConfig;
+    constructor(logger: ILogger, watermark: Watermark, httpServerHelper: HttpServerHelper, localeService: LocaleService, profileHelper: ProfileHelper, gameHelper: GameHelper, configServer: ConfigServer);
+    gameStart(_url: string, _info: IEmptyRequestData, sessionID: string): void;
+    protected addMissingBonusesProperty(pmcProfile: IPmcData): void;
+    protected addMissingRepeatableQuestsProperty(pmcProfile: IPmcData): void;
+    protected addMissingWeaponRepairSkill(pmcProfile: IPmcData): void;
+    protected addMissingAkiVersionTagToProfile(fullProfile: IAkiProfile): void;
+    protected addMissingArmorRepairSkill(pmcProfile: IPmcData): void;
+    protected fixNullTraderSalesSums(pmcProfile: IPmcData): void;
+    protected removeDanglingBackendCounters(pmcProfile: IPmcData): void;
+    getGameConfig(sessionID: string): IGameConfigResponse;
+    getServer(): any[];
+    protected getActiveRepeatableQuests(repeatableQuests: IPmcDataRepeatableQuest[]): IRepeatableQuest[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/controllers/HandbookController.d.ts b/TypeScript/14AfterDBLoadHook/types/controllers/HandbookController.d.ts
new file mode 100644
index 0000000..52d2dd8
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/controllers/HandbookController.d.ts
@@ -0,0 +1,8 @@
+import { HandbookHelper } from "../helpers/HandbookHelper";
+import { DatabaseServer } from "../servers/DatabaseServer";
+export declare class HandbookController {
+    protected databaseServer: DatabaseServer;
+    protected handbookHelper: HandbookHelper;
+    constructor(databaseServer: DatabaseServer, handbookHelper: HandbookHelper);
+    load(): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/controllers/HealthController.d.ts b/TypeScript/14AfterDBLoadHook/types/controllers/HealthController.d.ts
new file mode 100644
index 0000000..aafb8df
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/controllers/HealthController.d.ts
@@ -0,0 +1,25 @@
+import { ItemHelper } from "../helpers/ItemHelper";
+import { PaymentService } from "../services/PaymentService";
+import { InventoryHelper } from "../helpers/InventoryHelper";
+import { HealthHelper } from "../helpers/HealthHelper";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { IHealthTreatmentRequestData } from "../models/eft/health/IHealthTreatmentRequestData";
+import { IOffraidEatRequestData } from "../models/eft/health/IOffraidEatRequestData";
+import { IOffraidHealRequestData } from "../models/eft/health/IOffraidHealRequestData";
+import { ISyncHealthRequestData } from "../models/eft/health/ISyncHealthRequestData";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { ItemEventRouter } from "../routers/ItemEventRouter";
+import { ILogger } from "../models/spt/utils/ILogger";
+export declare class HealthController {
+    protected logger: ILogger;
+    protected itemEventRouter: ItemEventRouter;
+    protected itemHelper: ItemHelper;
+    protected paymentService: PaymentService;
+    protected inventoryHelper: InventoryHelper;
+    protected healthHelper: HealthHelper;
+    constructor(logger: ILogger, itemEventRouter: ItemEventRouter, itemHelper: ItemHelper, paymentService: PaymentService, inventoryHelper: InventoryHelper, healthHelper: HealthHelper);
+    saveVitality(pmcData: IPmcData, info: ISyncHealthRequestData, sessionID: string): void;
+    offraidHeal(pmcData: IPmcData, body: IOffraidHealRequestData, sessionID: string): IItemEventRouterResponse;
+    offraidEat(pmcData: IPmcData, body: IOffraidEatRequestData, sessionID: string): IItemEventRouterResponse;
+    healthTreatment(pmcData: IPmcData, info: IHealthTreatmentRequestData, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/controllers/HideoutController.d.ts b/TypeScript/14AfterDBLoadHook/types/controllers/HideoutController.d.ts
new file mode 100644
index 0000000..f2930ff
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/controllers/HideoutController.d.ts
@@ -0,0 +1,68 @@
+import { HideoutHelper } from "../helpers/HideoutHelper";
+import { InventoryHelper } from "../helpers/InventoryHelper";
+import { PaymentHelper } from "../helpers/PaymentHelper";
+import { PresetHelper } from "../helpers/PresetHelper";
+import { ProfileHelper } from "../helpers/ProfileHelper";
+import { HideoutArea, IPmcData, Product } from "../models/eft/common/IPmcData";
+import { HideoutUpgradeCompleteRequestData } from "../models/eft/hideout/HideoutUpgradeCompleteRequestData";
+import { IHideoutContinousProductionStartRequestData } from "../models/eft/hideout/IHideoutContinousProductionStartRequestData";
+import { IHideoutProduction } from "../models/eft/hideout/IHideoutProduction";
+import { IHideoutPutItemInRequestData } from "../models/eft/hideout/IHideoutPutItemInRequestData";
+import { IHideoutScavCase } from "../models/eft/hideout/IHideoutScavCase";
+import { IHideoutScavCaseStartRequestData } from "../models/eft/hideout/IHideoutScavCaseStartRequestData";
+import { IHideoutSingleProductionStartRequestData } from "../models/eft/hideout/IHideoutSingleProductionStartRequestData";
+import { IHideoutTakeItemOutRequestData } from "../models/eft/hideout/IHideoutTakeItemOutRequestData";
+import { IHideoutTakeProductionRequestData } from "../models/eft/hideout/IHideoutTakeProductionRequestData";
+import { IHideoutToggleAreaRequestData } from "../models/eft/hideout/IHideoutToggleAreaRequestData";
+import { IHideoutUpgradeRequestData } from "../models/eft/hideout/IHideoutUpgradeRequestData";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { IHideoutConfig } from "../models/spt/config/IHideoutConfig";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ItemEventRouter } from "../routers/ItemEventRouter";
+import { ConfigServer } from "../servers/ConfigServer";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { SaveServer } from "../servers/SaveServer";
+import { PlayerService } from "../services/PlayerService";
+import { HashUtil } from "../utils/HashUtil";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+import { RandomUtil } from "../utils/RandomUtil";
+import { TimeUtil } from "../utils/TimeUtil";
+export declare class HideoutController {
+    protected logger: ILogger;
+    protected hashUtil: HashUtil;
+    protected timeUtil: TimeUtil;
+    protected databaseServer: DatabaseServer;
+    protected randomUtil: RandomUtil;
+    protected inventoryHelper: InventoryHelper;
+    protected saveServer: SaveServer;
+    protected playerService: PlayerService;
+    protected presetHelper: PresetHelper;
+    protected paymentHelper: PaymentHelper;
+    protected itemEventRouter: ItemEventRouter;
+    protected httpResponse: HttpResponseUtil;
+    protected profileHelper: ProfileHelper;
+    protected hideoutHelper: HideoutHelper;
+    protected configServer: ConfigServer;
+    protected hideoutConfig: IHideoutConfig;
+    constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, inventoryHelper: InventoryHelper, saveServer: SaveServer, playerService: PlayerService, presetHelper: PresetHelper, paymentHelper: PaymentHelper, itemEventRouter: ItemEventRouter, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, hideoutHelper: HideoutHelper, configServer: ConfigServer);
+    upgrade(pmcData: IPmcData, body: IHideoutUpgradeRequestData, sessionID: string): IItemEventRouterResponse;
+    upgradeComplete(pmcData: IPmcData, body: HideoutUpgradeCompleteRequestData, sessionID: string): IItemEventRouterResponse;
+    putItemsInAreaSlots(pmcData: IPmcData, body: IHideoutPutItemInRequestData, sessionID: string): IItemEventRouterResponse;
+    takeItemsFromAreaSlots(pmcData: IPmcData, body: IHideoutTakeItemOutRequestData, sessionID: string): IItemEventRouterResponse;
+    protected removeItemFromGenerator(sessionID: string, pmcData: IPmcData, body: IHideoutTakeItemOutRequestData, output: IItemEventRouterResponse, hideoutArea: HideoutArea): IItemEventRouterResponse;
+    toggleArea(pmcData: IPmcData, body: IHideoutToggleAreaRequestData, sessionID: string): IItemEventRouterResponse;
+    singleProductionStart(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
+    scavCaseProductionStart(pmcData: IPmcData, body: IHideoutScavCaseStartRequestData, sessionID: string): IItemEventRouterResponse;
+    protected getRandomisedItemRarityCounter(recipe: IHideoutScavCase): {
+        [x: string]: number;
+    };
+    protected getRandomisedScavRewards(rarityItemCounter: {
+        [x: string]: number;
+    }): Product[];
+    continuousProductionStart(pmcData: IPmcData, body: IHideoutContinousProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
+    takeProduction(pmcData: IPmcData, body: IHideoutTakeProductionRequestData, sessionID: string): IItemEventRouterResponse;
+    protected handleRecipie(sessionID: string, recipe: IHideoutProduction, pmcData: IPmcData, body: IHideoutTakeProductionRequestData, output: IItemEventRouterResponse): IItemEventRouterResponse;
+    protected handleScavCase(sessionID: string, pmcData: IPmcData, body: IHideoutTakeProductionRequestData, output: IItemEventRouterResponse): IItemEventRouterResponse;
+    registerProduction(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData | IHideoutContinousProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
+    update(): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/controllers/InraidController.d.ts b/TypeScript/14AfterDBLoadHook/types/controllers/InraidController.d.ts
new file mode 100644
index 0000000..7f2036c
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/controllers/InraidController.d.ts
@@ -0,0 +1,31 @@
+import { ExtendedProfileHelper } from "../helpers/ExtendedProfileHelper";
+import { HealthHelper } from "../helpers/HealthHelper";
+import { InRaidHelper } from "../helpers/InRaidHelper";
+import { ItemHelper } from "../helpers/ItemHelper";
+import { QuestHelper } from "../helpers/QuestHelper";
+import { TraderHelper } from "../helpers/TraderHelper";
+import { IRegisterPlayerRequestData } from "../models/eft/inRaid/IRegisterPlayerRequestData";
+import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData";
+import { IInRaidConfig } from "../models/spt/config/IInRaidConfig";
+import { ConfigServer } from "../servers/ConfigServer";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { SaveServer } from "../servers/SaveServer";
+import { InsuranceService } from "../services/InsuranceService";
+import { JsonUtil } from "../utils/JsonUtil";
+export declare class InraidController {
+    protected saveServer: SaveServer;
+    protected jsonUtil: JsonUtil;
+    protected databaseServer: DatabaseServer;
+    protected questHelper: QuestHelper;
+    protected itemHelper: ItemHelper;
+    protected extendedProfileHelper: ExtendedProfileHelper;
+    protected healthHelper: HealthHelper;
+    protected traderHelper: TraderHelper;
+    protected insuranceService: InsuranceService;
+    protected inRaidHelper: InRaidHelper;
+    protected configServer: ConfigServer;
+    protected inraidConfig: IInRaidConfig;
+    constructor(saveServer: SaveServer, jsonUtil: JsonUtil, databaseServer: DatabaseServer, questHelper: QuestHelper, itemHelper: ItemHelper, extendedProfileHelper: ExtendedProfileHelper, healthHelper: HealthHelper, traderHelper: TraderHelper, insuranceService: InsuranceService, inRaidHelper: InRaidHelper, configServer: ConfigServer);
+    addPlayer(sessionID: string, info: IRegisterPlayerRequestData): void;
+    saveProgress(offraidData: ISaveProgressRequestData, sessionID: string): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/controllers/InsuranceController.d.ts b/TypeScript/14AfterDBLoadHook/types/controllers/InsuranceController.d.ts
new file mode 100644
index 0000000..db2c567
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/controllers/InsuranceController.d.ts
@@ -0,0 +1,38 @@
+import { DialogueHelper } from "../helpers/DialogueHelper";
+import { ItemHelper } from "../helpers/ItemHelper";
+import { ProfileHelper } from "../helpers/ProfileHelper";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { IGetInsuranceCostRequestData } from "../models/eft/insurance/IGetInsuranceCostRequestData";
+import { IInsureRequestData } from "../models/eft/insurance/IInsureRequestData";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { IInsuranceConfig } from "../models/spt/config/IInsuranceConfig";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ItemEventRouter } from "../routers/ItemEventRouter";
+import { ConfigServer } from "../servers/ConfigServer";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { SaveServer } from "../servers/SaveServer";
+import { InsuranceService } from "../services/InsuranceService";
+import { PaymentService } from "../services/PaymentService";
+import { RandomUtil } from "../utils/RandomUtil";
+import { TimeUtil } from "../utils/TimeUtil";
+export declare class InsuranceController {
+    protected logger: ILogger;
+    protected randomUtil: RandomUtil;
+    protected itemEventRouter: ItemEventRouter;
+    protected timeUtil: TimeUtil;
+    protected saveServer: SaveServer;
+    protected databaseServer: DatabaseServer;
+    protected itemHelper: ItemHelper;
+    protected profileHelper: ProfileHelper;
+    protected dialogueHelper: DialogueHelper;
+    protected paymentService: PaymentService;
+    protected insuranceService: InsuranceService;
+    protected configServer: ConfigServer;
+    protected insuranceConfig: IInsuranceConfig;
+    constructor(logger: ILogger, randomUtil: RandomUtil, itemEventRouter: ItemEventRouter, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, paymentService: PaymentService, // TODO: delay required
+    insuranceService: InsuranceService, configServer: ConfigServer);
+    processReturn(): void;
+    insure(pmcData: IPmcData, body: IInsureRequestData, sessionID: string): IItemEventRouterResponse;
+    cost(info: IGetInsuranceCostRequestData, sessionID: string): any;
+    doAbsolutelyNothing(): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/controllers/InventoryController.d.ts b/TypeScript/14AfterDBLoadHook/types/controllers/InventoryController.d.ts
new file mode 100644
index 0000000..b732aa9
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/controllers/InventoryController.d.ts
@@ -0,0 +1,107 @@
+import { InventoryHelper } from "../helpers/InventoryHelper";
+import { PaymentHelper } from "../helpers/PaymentHelper";
+import { PresetHelper } from "../helpers/PresetHelper";
+import { ProfileHelper } from "../helpers/ProfileHelper";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { IAddItemRequestData } from "../models/eft/inventory/IAddItemRequestData";
+import { IInventoryBindRequestData } from "../models/eft/inventory/IInventoryBindRequestData";
+import { IInventoryCreateMarkerRequestData } from "../models/eft/inventory/IInventoryCreateMarkerRequestData";
+import { IInventoryDeleteMarkerRequestData } from "../models/eft/inventory/IInventoryDeleteMarkerRequestData";
+import { IInventoryEditMarkerRequestData } from "../models/eft/inventory/IInventoryEditMarkerRequestData";
+import { IInventoryExamineRequestData } from "../models/eft/inventory/IInventoryExamineRequestData";
+import { IInventoryFoldRequestData } from "../models/eft/inventory/IInventoryFoldRequestData";
+import { IInventoryMergeRequestData } from "../models/eft/inventory/IInventoryMergeRequestData";
+import { IInventoryMoveRequestData } from "../models/eft/inventory/IInventoryMoveRequestData";
+import { IInventoryReadEncyclopediaRequestData } from "../models/eft/inventory/IInventoryReadEncyclopediaRequestData";
+import { IInventoryRemoveRequestData } from "../models/eft/inventory/IInventoryRemoveRequestData";
+import { IInventorySortRequestData } from "../models/eft/inventory/IInventorySortRequestData";
+import { IInventorySplitRequestData } from "../models/eft/inventory/IInventorySplitRequestData";
+import { IInventorySwapRequestData } from "../models/eft/inventory/IInventorySwapRequestData";
+import { IInventoryTagRequestData } from "../models/eft/inventory/IInventoryTagRequestData";
+import { IInventoryToggleRequestData } from "../models/eft/inventory/IInventoryToggleRequestData";
+import { IInventoryTransferRequestData } from "../models/eft/inventory/IInventoryTransferRequestData";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ItemEventRouter } from "../routers/ItemEventRouter";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { HashUtil } from "../utils/HashUtil";
+import { JsonUtil } from "../utils/JsonUtil";
+export declare class InventoryController {
+    protected logger: ILogger;
+    protected hashUtil: HashUtil;
+    protected jsonUtil: JsonUtil;
+    protected databaseServer: DatabaseServer;
+    protected presetHelper: PresetHelper;
+    protected inventoryHelper: InventoryHelper;
+    protected profileHelper: ProfileHelper;
+    protected paymentHelper: PaymentHelper;
+    protected itemEventRouter: ItemEventRouter;
+    constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, presetHelper: PresetHelper, inventoryHelper: InventoryHelper, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, itemEventRouter: ItemEventRouter);
+    /**
+    * Move Item
+    * change location of item with parentId and slotId
+    * transfers items from one profile to another if fromOwner/toOwner is set in the body.
+    * otherwise, move is contained within the same profile_f.
+    */
+    moveItem(pmcData: IPmcData, body: IInventoryMoveRequestData, sessionID: string): IItemEventRouterResponse;
+    /**
+    * Remove Item from Profile
+    * Deep tree item deletion, also removes items from insurance list
+    */
+    removeItem(pmcData: IPmcData, itemId: string, sessionID: string, output?: IItemEventRouterResponse): IItemEventRouterResponse;
+    /**
+     * Implements functionality "Discard" from Main menu (Stash etc.)
+     * Removes item from PMC Profile
+     */
+    discardItem(pmcData: IPmcData, body: IInventoryRemoveRequestData, sessionID: string): IItemEventRouterResponse;
+    /**
+    * Split Item
+    * spliting 1 item-stack into 2 separate items ...
+    */
+    splitItem(pmcData: IPmcData, body: IInventorySplitRequestData, sessionID: string): IItemEventRouterResponse;
+    /**
+     * Merge Item
+     * merges 2 items into one, deletes item from `body.item` and adding number of stacks into `body.with`
+     */
+    mergeItem(pmcData: IPmcData, body: IInventoryMergeRequestData, sessionID: string): IItemEventRouterResponse;
+    /**
+    * Transfer item
+    * Used to take items from scav inventory into stash or to insert ammo into mags (shotgun ones) and reloading weapon by clicking "Reload"
+    */
+    transferItem(pmcData: IPmcData, body: IInventoryTransferRequestData, sessionID: string): IItemEventRouterResponse;
+    /**
+    * Swap Item
+    * its used for "reload" if you have weapon in hands and magazine is somewhere else in rig or backpack in equipment
+    */
+    swapItem(pmcData: IPmcData, body: IInventorySwapRequestData, sessionID: string): IItemEventRouterResponse;
+    /**
+    * Give Item
+    * its used for "add" item like gifts etc.
+    */
+    addItem(pmcData: IPmcData, body: IAddItemRequestData, output: IItemEventRouterResponse, sessionID: string, callback: any, foundInRaid?: boolean, addUpd?: any): IItemEventRouterResponse;
+    /**
+     * Handles folding of Weapons
+     */
+    foldItem(pmcData: IPmcData, body: IInventoryFoldRequestData, sessionID: string): IItemEventRouterResponse;
+    /**
+     * Toggles "Toggleable" items like night vision goggles and face shields.
+     */
+    toggleItem(pmcData: IPmcData, body: IInventoryToggleRequestData, sessionID: string): IItemEventRouterResponse;
+    /**
+     * Handles Tagging of items (primary Containers).
+     */
+    tagItem(pmcData: IPmcData, body: IInventoryTagRequestData, sessionID: string): IItemEventRouterResponse;
+    bindItem(pmcData: IPmcData, body: IInventoryBindRequestData, sessionID: string): IItemEventRouterResponse;
+    /**
+     * Handles examining of the item     *
+     */
+    examineItem(pmcData: IPmcData, body: IInventoryExamineRequestData, sessionID: string): IItemEventRouterResponse;
+    readEncyclopedia(pmcData: IPmcData, body: IInventoryReadEncyclopediaRequestData, sessionID: string): IItemEventRouterResponse;
+    /**
+     * Handles sorting of Inventory.
+     */
+    sortInventory(pmcData: IPmcData, body: IInventorySortRequestData, sessionID: string): IItemEventRouterResponse;
+    createMapMarker(pmcData: IPmcData, body: IInventoryCreateMarkerRequestData, sessionID: string): IItemEventRouterResponse;
+    deleteMapMarker(pmcData: IPmcData, body: IInventoryDeleteMarkerRequestData, sessionID: string): IItemEventRouterResponse;
+    editMapMarker(pmcData: IPmcData, body: IInventoryEditMarkerRequestData, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/controllers/LauncherController.d.ts b/TypeScript/14AfterDBLoadHook/types/controllers/LauncherController.d.ts
new file mode 100644
index 0000000..1af1f56
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/controllers/LauncherController.d.ts
@@ -0,0 +1,28 @@
+import { HttpServerHelper } from "../helpers/HttpServerHelper";
+import { IChangeRequestData } from "../models/eft/launcher/IChangeRequestData";
+import { ILoginRequestData } from "../models/eft/launcher/ILoginRequestData";
+import { IRegisterData } from "../models/eft/launcher/IRegisterData";
+import { Info } from "../models/eft/profile/IAkiProfile";
+import { ICoreConfig } from "../models/spt/config/ICoreConfig";
+import { ConfigServer } from "../servers/ConfigServer";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { SaveServer } from "../servers/SaveServer";
+import { HashUtil } from "../utils/HashUtil";
+export declare class LauncherController {
+    protected hashUtil: HashUtil;
+    protected saveServer: SaveServer;
+    protected httpServerHelper: HttpServerHelper;
+    protected databaseServer: DatabaseServer;
+    protected configServer: ConfigServer;
+    protected coreConfig: ICoreConfig;
+    constructor(hashUtil: HashUtil, saveServer: SaveServer, httpServerHelper: HttpServerHelper, databaseServer: DatabaseServer, configServer: ConfigServer);
+    connect(): any;
+    find(sessionIdKey: string): Info;
+    login(info: ILoginRequestData): string;
+    register(info: IRegisterData): string;
+    protected createAccount(info: IRegisterData): string;
+    changeUsername(info: IChangeRequestData): string;
+    changePassword(info: IChangeRequestData): string;
+    wipe(info: IRegisterData): string;
+    getCompatibleTarkovVersion(): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/controllers/LocationController.d.ts b/TypeScript/14AfterDBLoadHook/types/controllers/LocationController.d.ts
new file mode 100644
index 0000000..90b6d7a
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/controllers/LocationController.d.ts
@@ -0,0 +1,18 @@
+import { LocationGenerator } from "../generators/LocationGenerator";
+import { ILocationBase } from "../models/eft/common/ILocationBase";
+import { ILocationsGenerateAllResponse } from "../models/eft/common/ILocationsSourceDestinationBase";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { JsonUtil } from "../utils/JsonUtil";
+import { TimeUtil } from "../utils/TimeUtil";
+export declare class LocationController {
+    protected jsonUtil: JsonUtil;
+    protected logger: ILogger;
+    protected locationGenerator: LocationGenerator;
+    protected databaseServer: DatabaseServer;
+    protected timeUtil: TimeUtil;
+    constructor(jsonUtil: JsonUtil, logger: ILogger, locationGenerator: LocationGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil);
+    get(location: string): ILocationBase;
+    generate(name: string): ILocationBase;
+    generateAll(): ILocationsGenerateAllResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/controllers/MatchController.d.ts b/TypeScript/14AfterDBLoadHook/types/controllers/MatchController.d.ts
new file mode 100644
index 0000000..c322d96
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/controllers/MatchController.d.ts
@@ -0,0 +1,30 @@
+import { ProfileHelper } from "../helpers/ProfileHelper";
+import { TraderHelper } from "../helpers/TraderHelper";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { IEndOfflineRaidRequestData } from "../models/eft/match/IEndOfflineRaidRequestData";
+import { IGetProfileRequestData } from "../models/eft/match/IGetProfileRequestData";
+import { IStartOfflineRaidRequestData } from "../models/eft/match/IStartOffineRaidRequestData";
+import { IInRaidConfig } from "../models/spt/config/IInRaidConfig";
+import { IMatchConfig } from "../models/spt/config/IMatchConfig";
+import { ConfigServer } from "../servers/ConfigServer";
+import { SaveServer } from "../servers/SaveServer";
+import { MatchLocationService } from "../services/MatchLocationService";
+export declare class MatchController {
+    protected saveServer: SaveServer;
+    protected profileHelper: ProfileHelper;
+    protected matchLocationService: MatchLocationService;
+    protected traderHelper: TraderHelper;
+    protected configServer: ConfigServer;
+    protected matchConfig: IMatchConfig;
+    protected inraidConfig: IInRaidConfig;
+    constructor(saveServer: SaveServer, profileHelper: ProfileHelper, matchLocationService: MatchLocationService, traderHelper: TraderHelper, configServer: ConfigServer);
+    getEnabled(): boolean;
+    getProfile(info: IGetProfileRequestData): IPmcData[];
+    protected getMatch(location: any): any;
+    createGroup(sessionID: string, info: any): any;
+    deleteGroup(info: any): void;
+    joinMatch(info: any, sessionID: string): any[];
+    getGroupStatus(info: any): any;
+    startOfflineRaid(info: IStartOfflineRaidRequestData, sessionID: string): void;
+    endOfflineRaid(info: IEndOfflineRaidRequestData, sessionID: string): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/controllers/NoteController.d.ts b/TypeScript/14AfterDBLoadHook/types/controllers/NoteController.d.ts
new file mode 100644
index 0000000..cc78383
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/controllers/NoteController.d.ts
@@ -0,0 +1,12 @@
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { INoteActionData } from "../models/eft/notes/INoteActionData";
+import { ItemEventRouter } from "../routers/ItemEventRouter";
+declare class NoteController {
+    protected itemEventRouter: ItemEventRouter;
+    constructor(itemEventRouter: ItemEventRouter);
+    addNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse;
+    editNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse;
+    deleteNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse;
+}
+export { NoteController };
diff --git a/TypeScript/14AfterDBLoadHook/types/controllers/NotifierController.d.ts b/TypeScript/14AfterDBLoadHook/types/controllers/NotifierController.d.ts
new file mode 100644
index 0000000..31d7bfe
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/controllers/NotifierController.d.ts
@@ -0,0 +1,22 @@
+import { NotifierHelper } from "../helpers/NotifierHelper";
+import { NotificationService } from "../services/NotificationService";
+import { INotifierChannel } from "../models/eft/notifier/INotifier";
+import { HttpServerHelper } from "../helpers/HttpServerHelper";
+export declare class NotifierController {
+    protected notifierHelper: NotifierHelper;
+    protected httpServerHelper: HttpServerHelper;
+    protected notificationService: NotificationService;
+    protected pollInterval: number;
+    protected timeout: number;
+    constructor(notifierHelper: NotifierHelper, httpServerHelper: HttpServerHelper, notificationService: NotificationService);
+    /**
+     * Resolve an array of session notifications.
+     *
+     * If no notifications are currently queued then intermittently check for new notifications until either
+     * one or more appear or when a timeout expires.
+     * If no notifications are available after the timeout, use a default message.
+     */
+    notifyAsync(sessionID: string): Promise<unknown>;
+    getServer(sessionID: string): string;
+    getChannel(sessionID: string): INotifierChannel;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/controllers/PresetBuildController.d.ts b/TypeScript/14AfterDBLoadHook/types/controllers/PresetBuildController.d.ts
new file mode 100644
index 0000000..adf4084
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/controllers/PresetBuildController.d.ts
@@ -0,0 +1,18 @@
+import { ItemHelper } from "../helpers/ItemHelper";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { IPresetBuildActionRequestData } from "../models/eft/presetBuild/IPresetBuildActionRequestData";
+import { WeaponBuild } from "../models/eft/profile/IAkiProfile";
+import { ItemEventRouter } from "../routers/ItemEventRouter";
+import { SaveServer } from "../servers/SaveServer";
+import { HashUtil } from "../utils/HashUtil";
+export declare class PresetBuildController {
+    protected hashUtil: HashUtil;
+    protected itemEventRouter: ItemEventRouter;
+    protected itemHelper: ItemHelper;
+    protected saveServer: SaveServer;
+    constructor(hashUtil: HashUtil, itemEventRouter: ItemEventRouter, itemHelper: ItemHelper, saveServer: SaveServer);
+    getUserBuilds(sessionID: string): WeaponBuild[];
+    saveBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse;
+    removeBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/controllers/PresetController.d.ts b/TypeScript/14AfterDBLoadHook/types/controllers/PresetController.d.ts
new file mode 100644
index 0000000..ca1af1a
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/controllers/PresetController.d.ts
@@ -0,0 +1,8 @@
+import { PresetHelper } from "../helpers/PresetHelper";
+import { DatabaseServer } from "../servers/DatabaseServer";
+export declare class PresetController {
+    protected presetHelper: PresetHelper;
+    protected databaseServer: DatabaseServer;
+    constructor(presetHelper: PresetHelper, databaseServer: DatabaseServer);
+    initialize(): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/controllers/ProfileController.d.ts b/TypeScript/14AfterDBLoadHook/types/controllers/ProfileController.d.ts
new file mode 100644
index 0000000..9b7a6d5
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/controllers/ProfileController.d.ts
@@ -0,0 +1,34 @@
+import { ExtendedProfileHelper } from "../helpers/ExtendedProfileHelper";
+import { ItemHelper } from "../helpers/ItemHelper";
+import { TraderHelper } from "../helpers/TraderHelper";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { IMiniProfile } from "../models/eft/launcher/IMiniProfile";
+import { IProfileChangeNicknameRequestData } from "../models/eft/profile/IProfileChangeNicknameRequestData";
+import { IProfileChangeVoiceRequestData } from "../models/eft/profile/IProfileChangeVoiceRequestData";
+import { IProfileCreateRequestData } from "../models/eft/profile/IProfileCreateRequestData";
+import { ISearchFriendRequestData } from "../models/eft/profile/ISearchFriendRequestData";
+import { ISearchFriendResponse } from "../models/eft/profile/ISearchFriendResponse";
+import { IValidateNicknameRequestData } from "../models/eft/profile/IValidateNicknameRequestData";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { SaveServer } from "../servers/SaveServer";
+import { HashUtil } from "../utils/HashUtil";
+import { TimeUtil } from "../utils/TimeUtil";
+export declare class ProfileController {
+    protected hashUtil: HashUtil;
+    protected timeUtil: TimeUtil;
+    protected saveServer: SaveServer;
+    protected databaseServer: DatabaseServer;
+    protected itemHelper: ItemHelper;
+    protected traderHelper: TraderHelper;
+    protected extendedProfileHelper: ExtendedProfileHelper;
+    constructor(hashUtil: HashUtil, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, traderHelper: TraderHelper, extendedProfileHelper: ExtendedProfileHelper);
+    getMiniProfiles(): IMiniProfile[];
+    getMiniProfile(sessionID: string): any;
+    getCompleteProfile(sessionID: string): IPmcData[];
+    createProfile(info: IProfileCreateRequestData, sessionID: string): void;
+    generatePlayerScav(sessionID: string): IPmcData;
+    validateNickname(info: IValidateNicknameRequestData, sessionID: string): string;
+    changeNickname(info: IProfileChangeNicknameRequestData, sessionID: string): string;
+    changeVoice(info: IProfileChangeVoiceRequestData, sessionID: string): void;
+    getFriends(info: ISearchFriendRequestData, sessionID: string): ISearchFriendResponse[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/controllers/QuestController.d.ts b/TypeScript/14AfterDBLoadHook/types/controllers/QuestController.d.ts
new file mode 100644
index 0000000..2cbccfb
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/controllers/QuestController.d.ts
@@ -0,0 +1,76 @@
+import { DialogueHelper } from "../helpers/DialogueHelper";
+import { ItemHelper } from "../helpers/ItemHelper";
+import { ProfileHelper } from "../helpers/ProfileHelper";
+import { QuestConditionHelper } from "../helpers/QuestConditionHelper";
+import { QuestHelper } from "../helpers/QuestHelper";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { IQuest, Reward } from "../models/eft/common/tables/IQuest";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { IAcceptQuestRequestData } from "../models/eft/quests/IAcceptQuestRequestData";
+import { ICompleteQuestRequestData } from "../models/eft/quests/ICompleteQuestRequestData";
+import { IHandoverQuestRequestData } from "../models/eft/quests/IHandoverQuestRequestData";
+import { IQuestConfig } from "../models/spt/config/IQuestConfig";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ItemEventRouter } from "../routers/ItemEventRouter";
+import { ConfigServer } from "../servers/ConfigServer";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { LocaleService } from "../services/LocaleService";
+import { PlayerService } from "../services/PlayerService";
+import { TimeUtil } from "../utils/TimeUtil";
+export declare class QuestController {
+    protected logger: ILogger;
+    protected timeUtil: TimeUtil;
+    protected itemEventRouter: ItemEventRouter;
+    protected databaseServer: DatabaseServer;
+    protected itemHelper: ItemHelper;
+    protected dialogueHelper: DialogueHelper;
+    protected profileHelper: ProfileHelper;
+    protected questHelper: QuestHelper;
+    protected questConditionHelper: QuestConditionHelper;
+    protected playerService: PlayerService;
+    protected localeService: LocaleService;
+    protected configServer: ConfigServer;
+    protected questConfig: IQuestConfig;
+    constructor(logger: ILogger, timeUtil: TimeUtil, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, itemHelper: ItemHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, questHelper: QuestHelper, questConditionHelper: QuestConditionHelper, playerService: PlayerService, localeService: LocaleService, configServer: ConfigServer);
+    /**
+     * Get all quests visible to player
+     * Exclude quests with incomplete preconditions (level/loyalty)
+     * @param sessionID session id
+     * @returns array of IQuest
+     */
+    getClientQuests(sessionID: string): IQuest[];
+    acceptQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse;
+    acceptRepeatableQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse;
+    /**
+     * Remove completed quest from profile
+     * Add newly unlocked quests to profile
+     * Also recalculate thier level due to exp rewards
+     * @param pmcData Player profile
+     * @param body completed quest request
+     * @param sessionID session id
+     * @returns ItemEvent response
+     */
+    completeQuest(pmcData: IPmcData, body: ICompleteQuestRequestData, sessionID: string): IItemEventRouterResponse;
+    /**
+     * Send a popup to player on completion of a quest
+     * @param sessionID session id
+     * @param pmcData player profile
+     * @param completedQuestId completed quest id
+     * @param questRewards rewards given to player
+     */
+    protected sendDialogMessageOnQuestComplete(sessionID: string, pmcData: IPmcData, completedQuestId: string, questRewards: Reward[]): void;
+    /**
+     * Returns a list of quests that should be failed when a quest is completed
+     * @param completedQuestId quest completed id
+     * @returns array of quests
+     */
+    protected getQuestsFailedByCompletingQuest(completedQuestId: string): IQuest[];
+    /**
+     * Fail the quests provided
+     * @param sessionID session id
+     * @param pmcData player profile
+     * @param questsToFail quests to fail
+     */
+    protected failQuests(sessionID: string, pmcData: IPmcData, questsToFail: IQuest[]): void;
+    handoverQuest(pmcData: IPmcData, body: IHandoverQuestRequestData, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/controllers/RagfairController.d.ts b/TypeScript/14AfterDBLoadHook/types/controllers/RagfairController.d.ts
new file mode 100644
index 0000000..c758593
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/controllers/RagfairController.d.ts
@@ -0,0 +1,70 @@
+import { RagfairOfferGenerator } from "../generators/RagfairOfferGenerator";
+import { HandbookHelper } from "../helpers/HandbookHelper";
+import { InventoryHelper } from "../helpers/InventoryHelper";
+import { ItemHelper } from "../helpers/ItemHelper";
+import { PaymentHelper } from "../helpers/PaymentHelper";
+import { ProfileHelper } from "../helpers/ProfileHelper";
+import { RagfairHelper } from "../helpers/RagfairHelper";
+import { RagfairOfferHelper } from "../helpers/RagfairOfferHelper";
+import { RagfairSellHelper } from "../helpers/RagfairSellHelper";
+import { RagfairSortHelper } from "../helpers/RagfairSortHelper";
+import { RagfairTaxHelper } from "../helpers/RagfairTaxHelper";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { Item } from "../models/eft/common/tables/IItem";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { IAkiProfile } from "../models/eft/profile/IAkiProfile";
+import { IAddOfferRequestData, Requirement } from "../models/eft/ragfair/IAddOfferRequestData";
+import { IExtendOfferRequestData } from "../models/eft/ragfair/IExtendOfferRequestData";
+import { IGetItemPriceResult } from "../models/eft/ragfair/IGetItemPriceResult";
+import { IGetMarketPriceRequestData } from "../models/eft/ragfair/IGetMarketPriceRequestData";
+import { IGetOffersResult } from "../models/eft/ragfair/IGetOffersResult";
+import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer";
+import { ISearchRequestData } from "../models/eft/ragfair/ISearchRequestData";
+import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ItemEventRouter } from "../routers/ItemEventRouter";
+import { ConfigServer } from "../servers/ConfigServer";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { RagfairServer } from "../servers/RagfairServer";
+import { SaveServer } from "../servers/SaveServer";
+import { PaymentService } from "../services/PaymentService";
+import { RagfairOfferService } from "../services/RagfairOfferService";
+import { RagfairPriceService } from "../services/RagfairPriceService";
+import { RagfairRequiredItemsService } from "../services/RagfairRequiredItemsService";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+import { TimeUtil } from "../utils/TimeUtil";
+export declare class RagfairController {
+    protected logger: ILogger;
+    protected timeUtil: TimeUtil;
+    protected httpResponse: HttpResponseUtil;
+    protected itemEventRouter: ItemEventRouter;
+    protected ragfairServer: RagfairServer;
+    protected ragfairPriceService: RagfairPriceService;
+    protected databaseServer: DatabaseServer;
+    protected itemHelper: ItemHelper;
+    protected saveServer: SaveServer;
+    protected ragfairSellHelper: RagfairSellHelper;
+    protected ragfairTaxHelper: RagfairTaxHelper;
+    protected ragfairSortHelper: RagfairSortHelper;
+    protected ragfairOfferHelper: RagfairOfferHelper;
+    protected profileHelper: ProfileHelper;
+    protected paymentService: PaymentService;
+    protected handbookHelper: HandbookHelper;
+    protected paymentHelper: PaymentHelper;
+    protected inventoryHelper: InventoryHelper;
+    protected ragfairHelper: RagfairHelper;
+    protected ragfairOfferService: RagfairOfferService;
+    protected ragfairRequiredItemsService: RagfairRequiredItemsService;
+    protected ragfairOfferGenerator: RagfairOfferGenerator;
+    protected configServer: ConfigServer;
+    protected ragfairConfig: IRagfairConfig;
+    constructor(logger: ILogger, timeUtil: TimeUtil, httpResponse: HttpResponseUtil, itemEventRouter: ItemEventRouter, ragfairServer: RagfairServer, ragfairPriceService: RagfairPriceService, databaseServer: DatabaseServer, itemHelper: ItemHelper, saveServer: SaveServer, ragfairSellHelper: RagfairSellHelper, ragfairTaxHelper: RagfairTaxHelper, ragfairSortHelper: RagfairSortHelper, ragfairOfferHelper: RagfairOfferHelper, profileHelper: ProfileHelper, paymentService: PaymentService, handbookHelper: HandbookHelper, paymentHelper: PaymentHelper, inventoryHelper: InventoryHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, ragfairRequiredItemsService: RagfairRequiredItemsService, ragfairOfferGenerator: RagfairOfferGenerator, configServer: ConfigServer);
+    getOffers(sessionID: string, info: ISearchRequestData): IGetOffersResult;
+    update(): void;
+    getItemPrice(info: IGetMarketPriceRequestData): IGetItemPriceResult;
+    addPlayerOffer(pmcData: IPmcData, info: IAddOfferRequestData, sessionID: string): IItemEventRouterResponse;
+    createPlayerOffer(profile: IAkiProfile, requirements: Requirement[], items: Item[], sellInOnePiece: boolean, amountToSend: number): IRagfairOffer;
+    getAllFleaPrices(): Record<string, number>;
+    removeOffer(offerId: string, sessionID: string): IItemEventRouterResponse;
+    extendOffer(info: IExtendOfferRequestData, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/controllers/RepairController.d.ts b/TypeScript/14AfterDBLoadHook/types/controllers/RepairController.d.ts
new file mode 100644
index 0000000..330684d
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/controllers/RepairController.d.ts
@@ -0,0 +1,42 @@
+import { QuestHelper } from "../helpers/QuestHelper";
+import { RepairHelper } from "../helpers/RepairHelper";
+import { TraderHelper } from "../helpers/TraderHelper";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { IRepairActionDataRequest } from "../models/eft/repair/IRepairActionDataRequest";
+import { ITraderRepairActionDataRequest } from "../models/eft/repair/ITraderRepairActionDataRequest";
+import { IRepairConfig } from "../models/spt/config/IRepairConfig";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ItemEventRouter } from "../routers/ItemEventRouter";
+import { ConfigServer } from "../servers/ConfigServer";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { PaymentService } from "../services/PaymentService";
+export declare class RepairController {
+    protected logger: ILogger;
+    protected itemEventRouter: ItemEventRouter;
+    protected databaseServer: DatabaseServer;
+    protected questHelper: QuestHelper;
+    protected traderHelper: TraderHelper;
+    protected paymentService: PaymentService;
+    protected repairHelper: RepairHelper;
+    protected configServer: ConfigServer;
+    protected repairConfig: IRepairConfig;
+    protected readonly WEAPON_SKILL_REPAIR_GAIN: number;
+    constructor(logger: ILogger, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, questHelper: QuestHelper, traderHelper: TraderHelper, paymentService: PaymentService, repairHelper: RepairHelper, configServer: ConfigServer);
+    /**
+     * Repair with trader
+     * @param pmcData player profile
+     * @param body endpoint request data
+     * @param sessionID session id
+     * @returns item event router action
+     */
+    traderRepair(pmcData: IPmcData, body: ITraderRepairActionDataRequest, sessionID: string): IItemEventRouterResponse;
+    /**
+     * Repair with repair kit
+     * @param pmcData player profile
+     * @param body endpoint request data
+     * @param sessionID session id
+     * @returns item event router action
+     */
+    repairWithKit(pmcData: IPmcData, body: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/controllers/RepeatableQuestController.d.ts b/TypeScript/14AfterDBLoadHook/types/controllers/RepeatableQuestController.d.ts
new file mode 100644
index 0000000..9aa9590
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/controllers/RepeatableQuestController.d.ts
@@ -0,0 +1,219 @@
+import { GameHelper } from "../helpers/GameHelper";
+import { ItemHelper } from "../helpers/ItemHelper";
+import { PresetHelper } from "../helpers/PresetHelper";
+import { ProfileHelper } from "../helpers/ProfileHelper";
+import { RagfairServerHelper } from "../helpers/RagfairServerHelper";
+import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
+import { Exit } from "../models/eft/common/ILocationBase";
+import { IPmcData, TraderInfo } from "../models/eft/common/IPmcData";
+import { ICompletion, ICompletionAvailableFor, IElimination, IEliminationCondition, IExploration, IExplorationCondition, IPmcDataRepeatableQuest, IRepeatableQuest, IReward, IRewards } from "../models/eft/common/tables/IRepeatableQuests";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { IRepeatableQuestChangeRequest } from "../models/eft/quests/IRepeatableQuestChangeRequest";
+import { ELocationName } from "../models/enums/ELocationName";
+import { IQuestConfig, IRepeatableQuestConfig } from "../models/spt/config/IQuestConfig";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ItemEventRouter } from "../routers/ItemEventRouter";
+import { ConfigServer } from "../servers/ConfigServer";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { PaymentService } from "../services/PaymentService";
+import { JsonUtil } from "../utils/JsonUtil";
+import { MathUtil } from "../utils/MathUtil";
+import { ObjectId } from "../utils/ObjectId";
+import { ProbabilityObject, ProbabilityObjectArray, RandomUtil } from "../utils/RandomUtil";
+import { TimeUtil } from "../utils/TimeUtil";
+export interface IQuestTypePool {
+    types: string[];
+    pool: IQuestPool;
+}
+export interface IQuestPool {
+    Exploration: IExplorationPool;
+    Elimination: IEliminationPool;
+}
+export interface IExplorationPool {
+    locations: Partial<Record<ELocationName, string[]>>;
+}
+export interface IEliminationPool {
+    targets: IEliminationTargetPool;
+}
+export interface IEliminationTargetPool {
+    Savage?: ITargetLocation;
+    AnyPmc?: ITargetLocation;
+    bossBully?: ITargetLocation;
+    bossGluhar?: ITargetLocation;
+    bossKilla?: ITargetLocation;
+    bossSanitar?: ITargetLocation;
+    bossTagilla?: ITargetLocation;
+    bossKojaniy?: ITargetLocation;
+}
+export interface ITargetLocation {
+    locations: string[];
+}
+export declare class RepeatableQuestController {
+    protected timeUtil: TimeUtil;
+    protected logger: ILogger;
+    protected randomUtil: RandomUtil;
+    protected mathUtil: MathUtil;
+    protected jsonUtil: JsonUtil;
+    protected databaseServer: DatabaseServer;
+    protected itemHelper: ItemHelper;
+    protected presetHelper: PresetHelper;
+    protected profileHelper: ProfileHelper;
+    protected gameHelper: GameHelper;
+    protected ragfairServerHelper: RagfairServerHelper;
+    protected itemEventRouter: ItemEventRouter;
+    protected paymentService: PaymentService;
+    protected objectId: ObjectId;
+    protected configServer: ConfigServer;
+    protected questConfig: IQuestConfig;
+    constructor(timeUtil: TimeUtil, logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, gameHelper: GameHelper, ragfairServerHelper: RagfairServerHelper, itemEventRouter: ItemEventRouter, paymentService: PaymentService, objectId: ObjectId, configServer: ConfigServer);
+    /**
+     * This is the method reached by the /client/repeatalbeQuests/activityPeriods endpoint
+     * Returns an array of objects in the format of repeatable quests to the client.
+     * repeatableQuestObject = {
+     *  id: Unique Id,
+     *  name: "Daily",
+     *  endTime: the time when the quests expire
+     *  activeQuests: currently available quests in an array. Each element of quest type format (see assets/database/templates/repeatableQuests.json).
+     *  inactiveQuests: the quests which were previously active (required by client to fail them if they are not completed)
+     * }
+     *
+     * The method checks if the player level requirement for repeatable quests (e.g. daily lvl5, weekly lvl15) is met and if the previously active quests
+     * are still valid. This ischecked by endTime persisted in profile accordning to the resetTime configured for each repeatable kind (daily, weekly)
+     * in QuestCondig.js
+     *
+     * If the condition is met, new repeatableQuests are created, old quests (which are persisted in the profile.RepeatableQuests[i].activeQuests) are
+     * moved to profile.RepeatableQuests[i].inactiveQuests. This memory is required to get rid of old repeatable quest data in the profile, otherwise
+     * they'll litter the profile's Quests field.
+     * (if the are on "Succeed" but not "Completed" we keep them, to allow the player to complete them and get the rewards)
+     * The new quests generated are again persisted in profile.RepeatableQuests
+     *
+     *
+     * @param   {string}    sessionId       Player's session id
+     * @returns  {array}                    array of "repeatableQuestObjects" as descibed above
+     */
+    getClientRepeatableQuests(_info: IEmptyRequestData, sessionID: string): IPmcDataRepeatableQuest[];
+    /**
+     * This method is called by GetClientRepeatableQuests and creates one element of quest type format (see assets/database/templates/repeatableQuests.json).
+     * It randomly draws a quest type (currently Elimination, Completion or Exploration) as well as a trader who is providing the quest
+     */
+    generateRepeatableQuest(pmcLevel: number, pmcTraderInfo: Record<string, TraderInfo>, questTypePool: IQuestTypePool, repeatableConfig: IRepeatableQuestConfig): IRepeatableQuest;
+    /**
+     * Just for debug reasons. Draws dailies a random assort of dailies extracted from dumps
+     */
+    generateDebugDailies(dailiesPool: any, factory: any, number: any): any;
+    /**
+     * Generates the base object of quest type format given as templates in assets/database/templates/repeatableQuests.json
+     * The templates include Elimination, Completion and Extraction quest types
+     *
+     * @param   {string}    type            quest type: "Elimination", "Completion" or "Extraction"
+     * @param   {string}    traderId        trader from which the quest will be provided
+     * @returns {object}                    a object which contains the base elements for repeatable quests of the requests type
+     *                                      (needs to be filled with reward and conditions by called to make a valid quest)
+     */
+    generateRepeatableTemplate(type: string, traderId: string): IRepeatableQuest;
+    /**
+     * Generates a valid Exploration quest
+     *
+     * @param   {integer}   pmcLevel            player's level for reward generation
+     * @param   {string}    traderId            trader from which the quest will be provided
+     * @param   {object}    questTypePool       Pools for quests (used to avoid redundant quests)
+     * @param   {object}    repeatableConfig    The configuration for the repeatably kind (daily, weekly) as configured in QuestConfig for the requestd quest
+     * @returns {object}                        object of quest type format for "Exploration" (see assets/database/templates/repeatableQuests.json)
+     */
+    generateExplorationQuest(pmcLevel: number, traderId: string, questTypePool: IQuestTypePool, repeatableConfig: IRepeatableQuestConfig): IExploration;
+    /**
+     * Generates a valid Completion quest
+     *
+     * @param   {integer}   pmcLevel            player's level for requested items and reward generation
+     * @param   {string}    traderId            trader from which the quest will be provided
+     * @param   {object}    repeatableConfig    The configuration for the repeatably kind (daily, weekly) as configured in QuestConfig for the requestd quest
+     * @returns {object}                        object of quest type format for "Completion" (see assets/database/templates/repeatableQuests.json)
+     */
+    generateCompletionQuest(pmcLevel: number, traderId: string, repeatableConfig: IRepeatableQuestConfig): ICompletion;
+    /**
+     * Generates a valid Elimination quest
+     *
+     * @param   {integer}   pmcLevel            player's level for requested items and reward generation
+     * @param   {string}    traderId            trader from which the quest will be provided
+     * @param   {object}    questTypePool       Pools for quests (used to avoid redundant quests)
+     * @param   {object}    repeatableConfig    The configuration for the repeatably kind (daily, weekly) as configured in QuestConfig for the requestd quest
+     * @returns {object}                        object of quest type format for "Elimination" (see assets/database/templates/repeatableQuests.json)
+     */
+    generateEliminationQuest(pmcLevel: number, traderId: string, questTypePool: IQuestTypePool, repeatableConfig: IRepeatableQuestConfig): IElimination;
+    /**
+     * Exploration repeatable quests can specify a required extraction point.
+     * This method creates the according object which will be appended to the conditions array
+     *
+     * @param   {string}        exit                The exit name to generate the condition for
+     * @returns {object}                            Exit condition
+     */
+    generateExplorationExitCondition(exit: Exit): IExplorationCondition;
+    /**
+     * A repeatable quest, besides some more or less static components, exists of reward and condition (see assets/database/templates/repeatableQuests.json)
+     * This is a helper method for GenerateCompletionQuest to create a completion condition (of which a completion quest theoretically can have many)
+     *
+     * @param   {string}    targetItemId    id of the item to request
+     * @param   {integer}   value           amount of items of this specific type to request
+     * @returns {object}                    object of "Completion"-condition
+     */
+    generateCompletionAvailableForFinish(targetItemId: string, value: number): ICompletionAvailableFor;
+    /**
+     * A repeatable quest, besides some more or less static components, exists of reward and condition (see assets/database/templates/repeatableQuests.json)
+     * This is a helper method for GenerateEliminationQuest to create a location condition.
+     *
+     * @param   {string}    location        the location on which to fulfill the elimination quest
+     * @returns {object}                    object of "Elimination"-location-subcondition
+     */
+    generateEliminationLocation(location: string[]): IEliminationCondition;
+    /**
+     * A repeatable quest, besides some more or less static components, exists of reward and condition (see assets/database/templates/repeatableQuests.json)
+     * This is a helper method for GenerateEliminationQuest to create a kill condition.
+     *
+     * @param   {string}    target          array of target npcs e.g. "AnyPmc", "Savage"
+     * @param   {array}     bodyParts       array of body parts with which to kill e.g. ["stomach", "thorax"]
+     * @param   {number}    distance        distance from which to kill (currently only >= supported)
+     * @returns {object}                    object of "Elimination"-kill-subcondition
+     */
+    generateEliminationCondition(target: string, bodyPart: string[], distance: number): IEliminationCondition;
+    /**
+     * Used to create a quest pool during each cycle of repeatable quest generation. The pool will be subsequently
+     * narrowed down during quest generation to avoid duplicate quests. Like duplicate extractions or elimination quests
+     * where you have to e.g. kill scavs in same locations.
+     *
+     * @returns {object}                    the quest pool
+     */
+    generateQuestPool(repeatableConfig: IRepeatableQuestConfig): IQuestTypePool;
+    /**
+     * Generate the reward for a mission. A reward can consist of
+     * - Experience
+     * - Money
+     * - Items
+     * - Trader Reputation
+     *
+     * The reward is dependent on the player level as given by the wiki. The exact mapping of pmcLevel to
+     * experience / money / items / trader reputation can be defined in QuestConfig.js
+     *
+     * There's also a random variation of the reward the spread of which can be also defined in the config.
+     *
+     * Additonaly, a scaling factor w.r.t. quest difficulty going from 0.2...1 can be used
+     *
+     * @param   {integer}   pmcLevel            player's level
+     * @param   {number}    difficulty          a reward scaling factor goint from 0.2 to 1
+     * @param   {string}    traderId            the trader for reputation gain (and possible in the future filtering of reward item type based on trader)
+     * @param   {object}    repeatableConfig    The configuration for the repeatably kind (daily, weekly) as configured in QuestConfig for the requestd quest
+     * @returns {object}                        object of "Reward"-type that can be given for a repeatable mission
+     */
+    generateReward(pmcLevel: number, difficulty: number, traderId: string, repeatableConfig: IRepeatableQuestConfig): IRewards;
+    /**
+     * Helper to create a reward item structured as required by the client
+     *
+     * @param   {string}    tpl             itemId of the rewarded item
+     * @param   {integer}   value           amount of items to give
+     * @param   {integer}   index           all rewards will be appended to a list, for unkown reasons the client wants the index
+     * @returns {object}                    object of "Reward"-item-type
+     */
+    generateRewardItem(tpl: string, value: number, index: number, preset?: any): IReward;
+    debugLogRepeatableQuestIds(pmcData: IPmcData): void;
+    probabilityObjectArray<K, V>(configArrayInput: ProbabilityObject<K, V>[]): ProbabilityObjectArray<K, V>;
+    changeRepeatableQuest(pmcDataIn: IPmcData, body: IRepeatableQuestChangeRequest, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/controllers/TradeController.d.ts b/TypeScript/14AfterDBLoadHook/types/controllers/TradeController.d.ts
new file mode 100644
index 0000000..c86745c
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/controllers/TradeController.d.ts
@@ -0,0 +1,21 @@
+import { RagfairServer } from "../servers/RagfairServer";
+import { ProfileHelper } from "../helpers/ProfileHelper";
+import { TradeHelper } from "../helpers/TradeHelper";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { IProcessRagfairTradeRequestData } from "../models/eft/trade/IProcessRagfairTradeRequestData";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { Upd } from "../models/eft/common/tables/IItem";
+import { IProcessBaseTradeRequestData } from "../models/eft/trade/IProcessBaseTradeRequestData";
+import { ItemEventRouter } from "../routers/ItemEventRouter";
+import { ILogger } from "../models/spt/utils/ILogger";
+declare class TradeController {
+    protected logger: ILogger;
+    protected itemEventRouter: ItemEventRouter;
+    protected tradeHelper: TradeHelper;
+    protected profileHelper: ProfileHelper;
+    protected ragfairServer: RagfairServer;
+    constructor(logger: ILogger, itemEventRouter: ItemEventRouter, tradeHelper: TradeHelper, profileHelper: ProfileHelper, ragfairServer: RagfairServer);
+    confirmTrading(pmcData: IPmcData, body: IProcessBaseTradeRequestData, sessionID: string, foundInRaid?: boolean, upd?: Upd): IItemEventRouterResponse;
+    confirmRagfairTrading(pmcData: IPmcData, body: IProcessRagfairTradeRequestData, sessionID: string): IItemEventRouterResponse;
+}
+export { TradeController };
diff --git a/TypeScript/14AfterDBLoadHook/types/controllers/TraderController.d.ts b/TypeScript/14AfterDBLoadHook/types/controllers/TraderController.d.ts
new file mode 100644
index 0000000..7bab158
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/controllers/TraderController.d.ts
@@ -0,0 +1,26 @@
+import { ProfileHelper } from "../helpers/ProfileHelper";
+import { TraderAssortHelper } from "../helpers/TraderAssortHelper";
+import { TraderHelper } from "../helpers/TraderHelper";
+import { IBarterScheme, ITraderAssort, ITraderBase } from "../models/eft/common/tables/ITrader";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { TraderAssortService } from "../services/TraderAssortService";
+import { JsonUtil } from "../utils/JsonUtil";
+import { TimeUtil } from "../utils/TimeUtil";
+export declare class TraderController {
+    protected logger: ILogger;
+    protected databaseServer: DatabaseServer;
+    protected traderAssortHelper: TraderAssortHelper;
+    protected profileHelper: ProfileHelper;
+    protected traderHelper: TraderHelper;
+    protected timeUtil: TimeUtil;
+    protected traderAssortService: TraderAssortService;
+    protected jsonUtil: JsonUtil;
+    constructor(logger: ILogger, databaseServer: DatabaseServer, traderAssortHelper: TraderAssortHelper, profileHelper: ProfileHelper, traderHelper: TraderHelper, timeUtil: TimeUtil, traderAssortService: TraderAssortService, jsonUtil: JsonUtil);
+    load(): void;
+    getTrader(traderID: string, sessionID: string): ITraderBase;
+    getAllTraders(sessionID: string): ITraderBase[];
+    updateTraders(): boolean;
+    getAssort(sessionId: string, traderId: string): ITraderAssort;
+    getPurchasesData(traderID: string, sessionID: string): Record<string, IBarterScheme[][]>;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/controllers/WeatherController.d.ts b/TypeScript/14AfterDBLoadHook/types/controllers/WeatherController.d.ts
new file mode 100644
index 0000000..ca7f5eb
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/controllers/WeatherController.d.ts
@@ -0,0 +1,11 @@
+import { WeatherGenerator } from "../generators/WeatherGenerator";
+import { IWeatherData } from "../models/eft/weather/IWeatherData";
+import { IWeatherConfig } from "../models/spt/config/IWeatherConfig";
+import { ConfigServer } from "../servers/ConfigServer";
+export declare class WeatherController {
+    protected weatherGenerator: WeatherGenerator;
+    protected configServer: ConfigServer;
+    protected weatherConfig: IWeatherConfig;
+    constructor(weatherGenerator: WeatherGenerator, configServer: ConfigServer);
+    generate(): IWeatherData;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/controllers/WishlistController.d.ts b/TypeScript/14AfterDBLoadHook/types/controllers/WishlistController.d.ts
new file mode 100644
index 0000000..a96c522
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/controllers/WishlistController.d.ts
@@ -0,0 +1,10 @@
+import { ItemEventRouter } from "../routers/ItemEventRouter";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { IWishlistActionData } from "../models/eft/wishlist/IWishlistActionData";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+export declare class WishlistController {
+    protected itemEvenRouter: ItemEventRouter;
+    constructor(itemEvenRouter: ItemEventRouter);
+    addToWishList(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse;
+    removeFromWishList(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/di/Container.d.ts b/TypeScript/14AfterDBLoadHook/types/di/Container.d.ts
new file mode 100644
index 0000000..17791b0
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/di/Container.d.ts
@@ -0,0 +1,14 @@
+import { DependencyContainer } from "tsyringe";
+export declare class Container {
+    static registerTypes(depContainer: DependencyContainer): void;
+    static registerListTypes(depContainer: DependencyContainer): void;
+    private static registerUtils;
+    private static registerRouters;
+    private static registerGenerators;
+    private static registerHelpers;
+    private static registerLoaders;
+    private static registerCallbacks;
+    private static registerServices;
+    private static registerServers;
+    private static registerControllers;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/di/OnLoad.d.ts b/TypeScript/14AfterDBLoadHook/types/di/OnLoad.d.ts
new file mode 100644
index 0000000..064d07d
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/di/OnLoad.d.ts
@@ -0,0 +1,4 @@
+export declare class OnLoad {
+    onLoad(): void;
+    getRoute(): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/di/OnLoadOnUpdate.d.ts b/TypeScript/14AfterDBLoadHook/types/di/OnLoadOnUpdate.d.ts
new file mode 100644
index 0000000..8bd3dc3
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/di/OnLoadOnUpdate.d.ts
@@ -0,0 +1,7 @@
+import { OnLoad } from "./OnLoad";
+import { OnUpdate } from "./OnUpdate";
+export declare class OnLoadOnUpdate implements OnLoad, OnUpdate {
+    onUpdate(timeSinceLastRun: number): boolean;
+    onLoad(): void;
+    getRoute(): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/di/OnUpdate.d.ts b/TypeScript/14AfterDBLoadHook/types/di/OnUpdate.d.ts
new file mode 100644
index 0000000..7fbbe09
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/di/OnUpdate.d.ts
@@ -0,0 +1,4 @@
+export declare class OnUpdate {
+    onUpdate(timeSinceLastRun: number): boolean;
+    getRoute(): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/di/Router.d.ts b/TypeScript/14AfterDBLoadHook/types/di/Router.d.ts
new file mode 100644
index 0000000..2fb98e0
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/di/Router.d.ts
@@ -0,0 +1,40 @@
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { IAkiProfile } from "../models/eft/profile/IAkiProfile";
+export declare class Router {
+    private handledRoutes;
+    getTopLevelRoute(): string;
+    protected getHandledRoutes(): HandledRoute[];
+    private getInternalHandledRoutes;
+    canHandle(url: string, partialMatch?: boolean): boolean;
+}
+export declare class StaticRouter extends Router {
+    private routes;
+    constructor(routes: RouteAction[]);
+    handleStatic(url: string, info: any, sessionID: string, output: string): any;
+    getHandledRoutes(): HandledRoute[];
+}
+export declare class DynamicRouter extends Router {
+    private routes;
+    constructor(routes: RouteAction[]);
+    handleDynamic(url: string, info: any, sessionID: string, output: string): any;
+    getHandledRoutes(): HandledRoute[];
+}
+export declare class ItemEventRouterDefinition extends Router {
+    constructor();
+    handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse;
+}
+export declare class SaveLoadRouter extends Router {
+    constructor();
+    handleLoad(profile: IAkiProfile): IAkiProfile;
+}
+export declare class HandledRoute {
+    route: string;
+    dynamic: boolean;
+    constructor(route: string, dynamic: boolean);
+}
+export declare class RouteAction {
+    url: string;
+    action: (url: string, info: any, sessionID: string, output: string) => any;
+    constructor(url: string, action: (url: string, info: any, sessionID: string, output: string) => any);
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/di/Serializer.d.ts b/TypeScript/14AfterDBLoadHook/types/di/Serializer.d.ts
new file mode 100644
index 0000000..70aa7c5
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/di/Serializer.d.ts
@@ -0,0 +1,5 @@
+import { IHttpServer } from "../models/spt/server/IHttpServer";
+export declare class Serializer {
+    serialize(sessionID: string, req: any, resp: any, body: any, httpServer: IHttpServer): void;
+    canHandle(something: string): boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/generators/BotGenerator.d.ts b/TypeScript/14AfterDBLoadHook/types/generators/BotGenerator.d.ts
new file mode 100644
index 0000000..88a8014
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/generators/BotGenerator.d.ts
@@ -0,0 +1,46 @@
+import { BotHelper } from "../helpers/BotHelper";
+import { GameEventHelper } from "../helpers/GameEventHelper";
+import { IGenerateBotsRequestData } from "../models/eft/bot/IGenerateBotsRequestData";
+import { Health as PmcHealth } from "../models/eft/common/IPmcData";
+import { IBotBase } from "../models/eft/common/tables/IBotBase";
+import { Health, Inventory, Skills } from "../models/eft/common/tables/IBotType";
+import { IBotConfig } from "../models/spt/config/IBotConfig";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ConfigServer } from "../servers/ConfigServer";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { HashUtil } from "../utils/HashUtil";
+import { JsonUtil } from "../utils/JsonUtil";
+import { RandomUtil } from "../utils/RandomUtil";
+import { BotInventoryGenerator } from "./BotInventoryGenerator";
+declare namespace BotGenerator {
+    interface IRandomisedBotLevelResult {
+        level: number;
+        exp: number;
+    }
+}
+export declare class BotGenerator {
+    protected logger: ILogger;
+    protected hashUtil: HashUtil;
+    protected randomUtil: RandomUtil;
+    protected jsonUtil: JsonUtil;
+    protected databaseServer: DatabaseServer;
+    protected botInventoryGenerator: BotInventoryGenerator;
+    protected botHelper: BotHelper;
+    protected gameEventHelper: GameEventHelper;
+    protected configServer: ConfigServer;
+    protected botConfig: IBotConfig;
+    constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botHelper: BotHelper, gameEventHelper: GameEventHelper, configServer: ConfigServer);
+    generate(info: IGenerateBotsRequestData, playerScav?: boolean): IBotBase[];
+    protected generateBot(bot: IBotBase, role: string, isPmc: boolean): IBotBase;
+    protected generateRandomLevel(min: number, max: number): BotGenerator.IRandomisedBotLevelResult;
+    /** Converts health object to the required format */
+    protected generateHealth(healthObj: Health, playerScav?: boolean): PmcHealth;
+    protected generateSkills(skillsObj: Skills): Skills;
+    protected getPmcRole(pmcSide: string): string;
+    protected removeChristmasItemsFromBotInventory(nodeInventory: Inventory): void;
+    protected generateId(bot: IBotBase): IBotBase;
+    protected generateInventoryID(profile: IBotBase): IBotBase;
+    protected getPMCDifficulty(requestedDifficulty: string): string;
+    protected generateDogtag(bot: IBotBase): IBotBase;
+}
+export {};
diff --git a/TypeScript/14AfterDBLoadHook/types/generators/BotInventoryGenerator.d.ts b/TypeScript/14AfterDBLoadHook/types/generators/BotInventoryGenerator.d.ts
new file mode 100644
index 0000000..783d0c5
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/generators/BotInventoryGenerator.d.ts
@@ -0,0 +1,24 @@
+import { Inventory as PmcInventory } from "../models/eft/common/IPmcData";
+import { Inventory, Chances, Generation, Mods } from "../models/eft/common/tables/IBotType";
+import { HashUtil } from "../utils/HashUtil";
+import { RandomUtil } from "../utils/RandomUtil";
+import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper";
+import { BotWeaponGenerator } from "./BotWeaponGenerator";
+import { BotLootGenerator } from "./BotLootGenerator";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper";
+export declare class BotInventoryGenerator {
+    protected logger: ILogger;
+    protected hashUtil: HashUtil;
+    protected randomUtil: RandomUtil;
+    protected databaseServer: DatabaseServer;
+    protected botWeaponGenerator: BotWeaponGenerator;
+    protected botLootGenerator: BotLootGenerator;
+    protected botGeneratorHelper: BotGeneratorHelper;
+    protected weightedRandomHelper: WeightedRandomHelper;
+    constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, botWeaponGenerator: BotWeaponGenerator, botLootGenerator: BotLootGenerator, botGeneratorHelper: BotGeneratorHelper, weightedRandomHelper: WeightedRandomHelper);
+    generateInventory(templateInventory: Inventory, equipmentChances: Chances, generation: Generation, botRole: string, isPmc: boolean): PmcInventory;
+    protected generateEquipment(equipmentSlot: string, equipmentPool: Record<string, number>, modPool: Mods, spawnChances: Chances, botRole: string, inventory: PmcInventory): void;
+    protected generateInventoryBase(): PmcInventory;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/generators/BotLootGenerator.d.ts b/TypeScript/14AfterDBLoadHook/types/generators/BotLootGenerator.d.ts
new file mode 100644
index 0000000..1d91836
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/generators/BotLootGenerator.d.ts
@@ -0,0 +1,29 @@
+import { PMCLootGenerator } from "../generators/PMCLootGenerator";
+import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper";
+import { HandbookHelper } from "../helpers/HandbookHelper";
+import { Inventory as PmcInventory } from "../models/eft/common/IPmcData";
+import { ItemMinMax, Items } from "../models/eft/common/tables/IBotType";
+import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
+import { IBotConfig } from "../models/spt/config/IBotConfig";
+import { ConfigServer } from "../servers/ConfigServer";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { HashUtil } from "../utils/HashUtil";
+import { JsonUtil } from "../utils/JsonUtil";
+import { RandomUtil } from "../utils/RandomUtil";
+export declare class BotLootGenerator {
+    protected jsonUtil: JsonUtil;
+    protected hashUtil: HashUtil;
+    protected randomUtil: RandomUtil;
+    protected databaseServer: DatabaseServer;
+    protected handbookHelper: HandbookHelper;
+    protected botGeneratorHelper: BotGeneratorHelper;
+    protected pmcLootGenerator: PMCLootGenerator;
+    protected configServer: ConfigServer;
+    protected botConfig: IBotConfig;
+    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, botGeneratorHelper: BotGeneratorHelper, pmcLootGenerator: PMCLootGenerator, configServer: ConfigServer);
+    generateLoot(lootPool: Items, itemCounts: ItemMinMax, isPmc: boolean, inventory: PmcInventory): void;
+    protected getRandomisedCount(min: number, max: number, nValue: number): number;
+    protected addLootFromPool(pool: ITemplateItem[], equipmentSlots: string[], count: number, inventory: PmcInventory, totalValueLimit?: number, useLimits?: boolean): void;
+    /** Compares two item templates by their price to spawn chance ratio */
+    protected compareByValue(a: ITemplateItem, b: ITemplateItem): number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/generators/BotWeaponGenerator.d.ts b/TypeScript/14AfterDBLoadHook/types/generators/BotWeaponGenerator.d.ts
new file mode 100644
index 0000000..a43b18c
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/generators/BotWeaponGenerator.d.ts
@@ -0,0 +1,88 @@
+import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper";
+import { ItemHelper } from "../helpers/ItemHelper";
+import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper";
+import { Inventory as PmcInventory } from "../models/eft/common/IPmcData";
+import { Inventory, MinMax, ModsChances } from "../models/eft/common/tables/IBotType";
+import { Item } from "../models/eft/common/tables/IItem";
+import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { HashUtil } from "../utils/HashUtil";
+import { RandomUtil } from "../utils/RandomUtil";
+export declare class BotWeaponGenerator {
+    protected logger: ILogger;
+    protected hashUtil: HashUtil;
+    protected databaseServer: DatabaseServer;
+    protected itemHelper: ItemHelper;
+    protected weightedRandomHelper: WeightedRandomHelper;
+    protected botGeneratorHelper: BotGeneratorHelper;
+    protected randomUtil: RandomUtil;
+    private readonly modMagazineSlotId;
+    constructor(logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, weightedRandomHelper: WeightedRandomHelper, botGeneratorHelper: BotGeneratorHelper, randomUtil: RandomUtil);
+    generateWeapon(equipmentSlot: string, templateInventory: Inventory, modChances: ModsChances, magCounts: MinMax, botRole: string, isPmc: boolean, inventory: PmcInventory): void;
+    /**
+     * Get the mods necessary to kit out a weapon to its preset level
+     * @param weaponTpl weapon to find preset for
+     * @param equipmentSlot the slot the weapon will be placed in
+     * @param weaponParentId
+     * @returns array of weapon mods
+     */
+    protected getPresetWeaponMods(weaponTpl: string, equipmentSlot: string, weaponParentId: string, itemTemplate: ITemplateItem, botRole: string): Item[];
+    /** Checks if all required slots are occupied on a weapon and all it's mods */
+    protected isWeaponValid(itemList: Item[]): boolean;
+    /**
+     * Generates extra magazines or bullets (if magazine is internal) and adds them to TacticalVest and Pockets.
+     * Additionally, adds extra bullets to SecuredContainer
+     * @param weaponMods
+     * @param weaponTemplate
+     * @param magCounts
+     * @param ammoTpl
+     * @param inventory
+     * @returns
+     */
+    protected generateExtraMagazines(weaponMods: Item[], weaponTemplate: ITemplateItem, magCounts: MinMax, ammoTpl: string, inventory: PmcInventory): void;
+    /**
+     * Get a randomised count of magazines
+     * @param magCounts min and max value returned value can be between
+     * @returns numberical value of magazine count
+     */
+    protected getRandomisedMagazineCount(magCounts: MinMax): number;
+    /**
+     * Add ammo to the secure container
+     * @param stackCount How many stacks of ammo to add
+     * @param ammoTpl Ammo type to add
+     * @param stackSize Size of the ammo stack to add
+     * @param inventory Player inventory
+     */
+    protected addAmmoToSecureContainer(stackCount: number, ammoTpl: string, stackSize: number, inventory: PmcInventory): void;
+    /**
+     * Get a weapons magazine tpl from a weapon template
+     * @param weaponMods mods from a weapon template
+     * @param weaponTemplate Weapon to get magazine tpl for
+     * @returns magazine tpl string
+     */
+    protected getMagazineTplFromWeaponTemplate(weaponMods: Item[], weaponTemplate: ITemplateItem): string;
+    protected addBulletsToVestAndPockets(ammoTpl: string, bulletCount: number, inventory: PmcInventory): void;
+    /**
+     * Finds and returns compatible ammo tpl
+     *
+     * @param {*} weaponMods
+     * @param {*} weaponTemplate
+     * @returns compatible ammo tpl
+     */
+    protected getCompatibleAmmo(weaponMods: Item[], weaponTemplate: ITemplateItem): string;
+    /**
+     * Fill existing magazines to full, while replacing their contents with specified ammo
+     * @param weaponMods
+     * @param magazine
+     * @param ammoTpl
+     */
+    protected fillExistingMagazines(weaponMods: Item[], magazine: Item, ammoTpl: string): void;
+    /**
+     * Fill each Camora with a bullet
+     * @param weaponMods Weapon mods to find and update camora mod(s) from
+     * @param magazineId magazine id to find and add to
+     * @param ammoTpl ammo template id to hydate with
+     */
+    protected fillCamorasWithAmmo(weaponMods: Item[], magazineId: string, ammoTpl: string): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/generators/LocationGenerator.d.ts b/TypeScript/14AfterDBLoadHook/types/generators/LocationGenerator.d.ts
new file mode 100644
index 0000000..bd368b5
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/generators/LocationGenerator.d.ts
@@ -0,0 +1,46 @@
+import { ContainerHelper } from "../helpers/ContainerHelper";
+import { GameEventHelper } from "../helpers/GameEventHelper";
+import { ItemHelper } from "../helpers/ItemHelper";
+import { PresetHelper } from "../helpers/PresetHelper";
+import { RagfairServerHelper } from "../helpers/RagfairServerHelper";
+import { ILooseLoot, SpawnpointTemplate } from "../models/eft/common/ILooseLoot";
+import { Item } from "../models/eft/common/tables/IItem";
+import { IStaticAmmoDetails, IStaticContainerProps, IStaticForcedProps, IStaticLootDetails } from "../models/eft/common/tables/ILootBase";
+import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
+import { ILocationConfig } from "../models/spt/config/ILocationConfig";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ConfigServer } from "../servers/ConfigServer";
+import { JsonUtil } from "../utils/JsonUtil";
+import { MathUtil } from "../utils/MathUtil";
+import { ObjectId } from "../utils/ObjectId";
+import { RandomUtil } from "../utils/RandomUtil";
+export interface IContainerItem {
+    items: Item[];
+    width: number;
+    height: number;
+}
+export declare class LocationGenerator {
+    protected logger: ILogger;
+    protected jsonUtil: JsonUtil;
+    protected objectId: ObjectId;
+    protected randomUtil: RandomUtil;
+    protected ragfairServerHelper: RagfairServerHelper;
+    protected itemHelper: ItemHelper;
+    protected mathUtil: MathUtil;
+    protected gameEventHelper: GameEventHelper;
+    protected containerHelper: ContainerHelper;
+    protected presetHelper: PresetHelper;
+    protected configServer: ConfigServer;
+    protected locationConfig: ILocationConfig;
+    constructor(logger: ILogger, jsonUtil: JsonUtil, objectId: ObjectId, randomUtil: RandomUtil, ragfairServerHelper: RagfairServerHelper, itemHelper: ItemHelper, mathUtil: MathUtil, gameEventHelper: GameEventHelper, containerHelper: ContainerHelper, presetHelper: PresetHelper, configServer: ConfigServer);
+    generateContainerLoot(containerIn: IStaticContainerProps, staticForced: IStaticForcedProps[], staticLootDist: Record<string, IStaticLootDetails>, staticAmmoDist: Record<string, IStaticAmmoDetails[]>, locationName: string): IStaticContainerProps;
+    protected getLooseLootMultiplerForLocation(location: string): number;
+    protected getStaticLootMultiplerForLocation(location: string): number;
+    generateDynamicLoot(dynamicLootDist: ILooseLoot, staticAmmoDist: Record<string, IStaticAmmoDetails[]>, locationName: string): SpawnpointTemplate[];
+    protected createItem(tpl: string, staticAmmoDist: Record<string, IStaticAmmoDetails[]>, parentId?: string): IContainerItem;
+    protected getRandomCompatibleCaliberTemplateId(item: ITemplateItem): string;
+    protected getRandomValidCaliber(magTemplate: ITemplateItem): string;
+    protected drawAmmoTpl(caliber: string, staticAmmoDist: Record<string, IStaticAmmoDetails[]>): string;
+    protected createRandomMagCartridges(magTemplate: ITemplateItem, parentId: string, staticAmmoDist: Record<string, IStaticAmmoDetails[]>, caliber?: string): Item;
+    protected createCartidges(parentId: string, ammoTpl: string, stackCount: number): Item;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/generators/PMCLootGenerator.d.ts b/TypeScript/14AfterDBLoadHook/types/generators/PMCLootGenerator.d.ts
new file mode 100644
index 0000000..64e6f7f
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/generators/PMCLootGenerator.d.ts
@@ -0,0 +1,15 @@
+import { ItemHelper } from "../helpers/ItemHelper";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { ConfigServer } from "../servers/ConfigServer";
+import { IBotConfig } from "../models/spt/config/IBotConfig";
+export declare class PMCLootGenerator {
+    protected itemHelper: ItemHelper;
+    protected databaseServer: DatabaseServer;
+    protected configServer: ConfigServer;
+    protected pocketLootPool: string[];
+    protected backpackLootPool: string[];
+    protected botConfig: IBotConfig;
+    constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer);
+    generatePMCPocketLootPool(): string[];
+    generatePMCBackpackLootPool(): string[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/generators/RagfairAssortGenerator.d.ts b/TypeScript/14AfterDBLoadHook/types/generators/RagfairAssortGenerator.d.ts
new file mode 100644
index 0000000..cbdd7f2
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/generators/RagfairAssortGenerator.d.ts
@@ -0,0 +1,25 @@
+import { ItemHelper } from "../helpers/ItemHelper";
+import { Item } from "../models/eft/common/tables/IItem";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { HashUtil } from "../utils/HashUtil";
+import { JsonUtil } from "../utils/JsonUtil";
+export declare class RagfairAssortGenerator {
+    protected jsonUtil: JsonUtil;
+    protected hashUtil: HashUtil;
+    protected itemHelper: ItemHelper;
+    protected databaseServer: DatabaseServer;
+    protected generatedAssortItems: Item[];
+    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer);
+    /**
+     * Get an array of unique items that can be sold on the flea
+     * @returns array of unique items
+     */
+    getAssortItems(): Item[];
+    protected assortsAreGenerated(): boolean;
+    /**
+     * Generate an array of items the flea can sell
+     * @returns array of unique items
+     */
+    protected generateRagfairAssortItems(): Item[];
+    protected createRagfairAssortItem(tplId: string, id?: string): Item;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/generators/RagfairOfferGenerator.d.ts b/TypeScript/14AfterDBLoadHook/types/generators/RagfairOfferGenerator.d.ts
new file mode 100644
index 0000000..de53ea9
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/generators/RagfairOfferGenerator.d.ts
@@ -0,0 +1,60 @@
+import { ItemHelper } from "../helpers/ItemHelper";
+import { PresetHelper } from "../helpers/PresetHelper";
+import { RagfairServerHelper } from "../helpers/RagfairServerHelper";
+import { Item } from "../models/eft/common/tables/IItem";
+import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
+import { IBarterScheme } from "../models/eft/common/tables/ITrader";
+import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer";
+import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ConfigServer } from "../servers/ConfigServer";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { SaveServer } from "../servers/SaveServer";
+import { FenceService } from "../services/FenceService";
+import { RagfairOfferService } from "../services/RagfairOfferService";
+import { RagfairPriceService } from "../services/RagfairPriceService";
+import { HashUtil } from "../utils/HashUtil";
+import { JsonUtil } from "../utils/JsonUtil";
+import { RandomUtil } from "../utils/RandomUtil";
+import { TimeUtil } from "../utils/TimeUtil";
+import { RagfairAssortGenerator } from "./RagfairAssortGenerator";
+export declare class RagfairOfferGenerator {
+    protected logger: ILogger;
+    protected jsonUtil: JsonUtil;
+    protected hashUtil: HashUtil;
+    protected randomUtil: RandomUtil;
+    protected timeUtil: TimeUtil;
+    protected databaseServer: DatabaseServer;
+    protected ragfairServerHelper: RagfairServerHelper;
+    protected saveServer: SaveServer;
+    protected presetHelper: PresetHelper;
+    protected ragfairAssortGenerator: RagfairAssortGenerator;
+    protected ragfairOfferService: RagfairOfferService;
+    protected ragfairPriceService: RagfairPriceService;
+    protected fenceService: FenceService;
+    protected itemHelper: ItemHelper;
+    protected configServer: ConfigServer;
+    protected ragfairConfig: IRagfairConfig;
+    constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, ragfairServerHelper: RagfairServerHelper, saveServer: SaveServer, presetHelper: PresetHelper, ragfairAssortGenerator: RagfairAssortGenerator, ragfairOfferService: RagfairOfferService, ragfairPriceService: RagfairPriceService, fenceService: FenceService, itemHelper: ItemHelper, configServer: ConfigServer);
+    createOffer(userID: string, time: number, items: Item[], barterScheme: IBarterScheme[], loyalLevel: number, price: number, sellInOnePiece?: boolean): IRagfairOffer;
+    protected getTraderId(userID: string): string;
+    protected getRating(userID: string): number;
+    protected getRatingGrowing(userID: string): boolean;
+    protected getOfferEndTime(userID: string, time: number): number;
+    /**
+     * Create multiple offers for items by using a unique list of items we've generated previously
+     * @param expiredOffers
+     */
+    generateDynamicOffers(expiredOffers?: Item[]): void;
+    generateTraderOffers(traderID: string): void;
+    protected getItemCondition(userID: string, items: Item[], itemDetails: ITemplateItem): Item[];
+    protected addMissingCondition(item: Item): Item;
+    protected getOfferRequirements(items: Item[]): {
+        count: number;
+        _tpl: string;
+    }[];
+    /**
+     * Create a flea offer and store it in the Ragfair server offers array
+     */
+    createFleaOffer(userID: string, time: number, items: Item[], barterScheme: IBarterScheme[], loyalLevel: number, price: number, sellInOnePiece?: boolean): IRagfairOffer;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/generators/WeatherGenerator.d.ts b/TypeScript/14AfterDBLoadHook/types/generators/WeatherGenerator.d.ts
new file mode 100644
index 0000000..44cecbb
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/generators/WeatherGenerator.d.ts
@@ -0,0 +1,33 @@
+import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper";
+import { ConfigServer } from "../servers/ConfigServer";
+import { IWeatherData } from "../models/eft/weather/IWeatherData";
+import { IWeatherConfig } from "../models/spt/config/IWeatherConfig";
+import { RandomUtil } from "../utils/RandomUtil";
+import { TimeUtil } from "../utils/TimeUtil";
+export declare class WeatherGenerator {
+    protected weightedRandomHelper: WeightedRandomHelper;
+    protected randomUtil: RandomUtil;
+    protected timeUtil: TimeUtil;
+    protected configServer: ConfigServer;
+    protected weatherConfig: IWeatherConfig;
+    constructor(weightedRandomHelper: WeightedRandomHelper, randomUtil: RandomUtil, timeUtil: TimeUtil, configServer: ConfigServer);
+    calculateTime(data: IWeatherData): IWeatherData;
+    /**
+     * Get server uptime seconds multiplied by a multiplier and add to current time as seconds
+     * Format to BSGs requirements
+     * @param computedDate current date
+     * @returns formatted time
+     */
+    protected getAcceleratedTime(computedDate: Date): string;
+    /**
+     * Get current time formatted to fit BSGs requirement
+     * @param computedDate
+     * @returns
+     */
+    protected getNormalTime(computedDate: Date): string;
+    generateWeather(data: IWeatherData): IWeatherData;
+    protected getWeightedFog(): string;
+    protected getWeightedRain(): number;
+    protected getRandomFloat(node: string): number;
+    protected getRandomInt(node: string): number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/AssortHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/AssortHelper.d.ts
new file mode 100644
index 0000000..15586b9
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/AssortHelper.d.ts
@@ -0,0 +1,36 @@
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { ITraderAssort } from "../models/eft/common/tables/ITrader";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { ItemHelper } from "./ItemHelper";
+import { QuestHelper } from "./QuestHelper";
+export declare class AssortHelper {
+    protected logger: ILogger;
+    protected itemHelper: ItemHelper;
+    protected databaseServer: DatabaseServer;
+    protected questHelper: QuestHelper;
+    constructor(logger: ILogger, itemHelper: ItemHelper, databaseServer: DatabaseServer, questHelper: QuestHelper);
+    /**
+     * Remove assorts from a trader that have not been unlocked yet
+     * @param pmcProfile player profile
+     * @param traderId traders id
+     * @param assort assort items from a trader
+     * @returns assort items minus locked quest assorts
+     */
+    stripLockedQuestAssort(pmcProfile: IPmcData, traderId: string, assort: ITraderAssort): ITraderAssort;
+    /**
+     * Remove assorts from a trader that have not been unlocked yet
+     * @param pmcProfile player profile
+     * @param traderId traders id
+     * @param assort traders assorts
+     * @returns traders assorts minus locked loyality assorts
+     */
+    stripLockedLoyaltyAssort(pmcProfile: IPmcData, traderId: string, assort: ITraderAssort): ITraderAssort;
+    /**
+     * Remove an item from an assort
+     * @param assort assort to modify
+     * @param itemID item id to remove from asort
+     * @returns Modified assort
+     */
+    removeItemFromAssort(assort: ITraderAssort, itemID: string): ITraderAssort;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/BotGeneratorHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/BotGeneratorHelper.d.ts
new file mode 100644
index 0000000..e4b0c11
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/BotGeneratorHelper.d.ts
@@ -0,0 +1,125 @@
+import { DurabilityLimitsHelper } from "../helpers/DurabilityLimitsHelper";
+import { Inventory as PmcInventory } from "../models/eft/common/IPmcData";
+import { Mods, ModsChances } from "../models/eft/common/tables/IBotType";
+import { Item, Repairable, Upd } from "../models/eft/common/tables/IItem";
+import { Grid, ITemplateItem, Slot } from "../models/eft/common/tables/ITemplateItem";
+import { IBotConfig } from "../models/spt/config/IBotConfig";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ConfigServer } from "../servers/ConfigServer";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { HashUtil } from "../utils/HashUtil";
+import { JsonUtil } from "../utils/JsonUtil";
+import { RandomUtil } from "../utils/RandomUtil";
+import { ContainerHelper } from "./ContainerHelper";
+import { InventoryHelper } from "./InventoryHelper";
+import { ItemHelper } from "./ItemHelper";
+import { ProbabilityHelper } from "./ProbabilityHelper";
+export declare class BotGeneratorHelper {
+    protected logger: ILogger;
+    protected jsonUtil: JsonUtil;
+    protected hashUtil: HashUtil;
+    protected randomUtil: RandomUtil;
+    protected probabilityHelper: ProbabilityHelper;
+    protected databaseServer: DatabaseServer;
+    protected durabilityLimitsHelper: DurabilityLimitsHelper;
+    protected itemHelper: ItemHelper;
+    protected inventoryHelper: InventoryHelper;
+    protected containerHelper: ContainerHelper;
+    protected configServer: ConfigServer;
+    protected botConfig: IBotConfig;
+    constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, probabilityHelper: ProbabilityHelper, databaseServer: DatabaseServer, durabilityLimitsHelper: DurabilityLimitsHelper, itemHelper: ItemHelper, inventoryHelper: InventoryHelper, containerHelper: ContainerHelper, configServer: ConfigServer);
+    generateModsForItem(items: Item[], modPool: Mods, parentId: string, parentTemplate: ITemplateItem, modSpawnChances: ModsChances, isPmc?: boolean): Item[];
+    /**
+     * Get a list of non black-listed cartridges from the PMC bot config
+     * @param modSlot mod item slot
+     * @param itemModPool
+     * @returns string array of cartridges PMCs can use
+     */
+    protected getNonBlacklistedCartridges(modSlot: string, itemModPool: Record<string, string[]>): string[];
+    /**
+     * randomly choose if a mod should be spawned, 100% for required mods OR mod is ammo slot
+     * never return true for an item that has 0% spawn chance
+     * @param itemSlot slot the item sits in
+     * @param modSlot slot the mod sits in
+     * @param modSpawnChances Chances for various mod spawns
+     * @returns boolean true if it should spawn
+     */
+    protected shouldModBeSpawned(itemSlot: Slot, modSlot: string, modSpawnChances: ModsChances): boolean;
+    /**
+     * Get a list of containers that hold ammo
+     * @returns string array
+     */
+    protected getAmmoContainers(): string[];
+    /**
+     * Get the slot details for an item (chamber/cartridge/slot)
+     * @param modSlot e.g patron_in_weapon
+     * @param parentTemplate item template
+     * @returns
+     */
+    protected getModItemSlot(modSlot: string, parentTemplate: ITemplateItem): Slot;
+    /**
+     * With the shotgun revolver (60db29ce99594040e04c4a27) 12.12 introduced CylinderMagazines.
+     * Those magazines (e.g. 60dc519adf4c47305f6d410d) have a "Cartridges" entry with a _max_count=0.
+     * Ammo is not put into the magazine directly but assigned to the magazine's slots: The "camora_xxx" slots.
+     * This function is a helper called by generateModsForItem for mods with parent type "CylinderMagazine"
+     *
+     * @param {object}      items               The items where the CylinderMagazine's camora are appended to
+     * @param {object}      modPool             modPool which should include available cartrigdes
+     * @param {string}      parentId            The CylinderMagazine's UID
+     * @param {object}      parentTemplate      The CylinderMagazine's template
+     */
+    protected fillCamora(items: Item[], modPool: Mods, parentId: string, parentTemplate: ITemplateItem): void;
+    generateExtraPropertiesForItem(itemTemplate: ITemplateItem, botRole?: any): {
+        upd?: Upd;
+    };
+    /**
+     * Create a repairable object for a weapon that containers durability + max durability properties
+     * @param itemTemplate weapon object being generated for
+     * @param botRole type of bot being generated for
+     * @returns Repairable object
+     */
+    protected generateWeaponRepairableProperties(itemTemplate: ITemplateItem, botRole: string): Repairable;
+    /**
+     * Create a repairable object for an armor that containers durability + max durability properties
+     * @param itemTemplate weapon object being generated for
+     * @param botRole type of bot being generated for
+     * @returns Repairable object
+     */
+    protected generateArmorRepairableProperties(itemTemplate: ITemplateItem, botRole: string): Repairable;
+    protected getModTplFromItemDb(modTpl: string, parentSlot: Slot, modSlot: string, items: Item[]): string;
+    /**
+     * Sort by spawn chance, highest to lowest, higher is more common
+     * @param unsortedModArray String array to sort
+     * @returns Sorted string array
+     */
+    protected sortModArray(unsortedModArray: string[]): string[];
+    /**
+     * Can an item be added to an item without issue
+     * @param items
+     * @param tplToCheck
+     * @param equipmentSlot
+     * @returns true if possible
+     */
+    isItemIncompatibleWithCurrentItems(items: Item[], tplToCheck: string, equipmentSlot: string): boolean;
+    /**
+     * Adds an item with all its childern into specified equipmentSlots, wherever it fits.
+     * @param equipmentSlots
+     * @param parentId
+     * @param parentTpl
+     * @param itemWithChildren
+     * @param inventory
+     * @returns a `boolean` indicating item was added
+     */
+    addItemWithChildrenToEquipmentSlot(equipmentSlots: string[], parentId: string, parentTpl: string, itemWithChildren: Item[], inventory: PmcInventory): boolean;
+    protected itemAllowedInContainer(slot: Grid, itemTpl: string): boolean;
+}
+export declare class ExhaustableArray<T> {
+    private itemPool;
+    private randomUtil;
+    private jsonUtil;
+    private pool;
+    constructor(itemPool: T[], randomUtil: RandomUtil, jsonUtil: JsonUtil);
+    getRandomValue(): T;
+    getFirstValue(): T;
+    hasValues(): boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/BotHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/BotHelper.d.ts
new file mode 100644
index 0000000..6b92566
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/BotHelper.d.ts
@@ -0,0 +1,44 @@
+import { Difficulty } from "../models/eft/common/tables/IBotType";
+import { IBotConfig } from "../models/spt/config/IBotConfig";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ConfigServer } from "../servers/ConfigServer";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { JsonUtil } from "../utils/JsonUtil";
+import { RandomUtil } from "../utils/RandomUtil";
+export declare class BotHelper {
+    protected logger: ILogger;
+    protected jsonUtil: JsonUtil;
+    protected databaseServer: DatabaseServer;
+    protected randomUtil: RandomUtil;
+    protected configServer: ConfigServer;
+    protected botConfig: IBotConfig;
+    constructor(logger: ILogger, jsonUtil: JsonUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, configServer: ConfigServer);
+    getBotDifficultySettings(type: string, difficulty: string): Difficulty;
+    getPmcDifficultySettings(type: string, difficulty: string): Difficulty;
+    /**
+     * Randomise the chance the PMC will attack their own side
+     * @param difficultySettings pmc difficulty settings
+     */
+    randomisePmcHostility(difficultySettings: Difficulty): void;
+    isBotPmc(botRole: string): boolean;
+    isBotBoss(botRole: string): boolean;
+    isBotFollower(botRole: string): boolean;
+    /**
+     * Add a bot to the FRIENDLY_BOT_TYPES array
+     * @param difficultySettings bot settings to alter
+     * @param typeToAdd bot type to add to friendly list
+     */
+    addBotToFriendlyList(difficultySettings: Difficulty, typeToAdd: string): void;
+    /**
+     * Add a bot to the ENEMY_BOT_TYPES array
+     * @param difficultySettings bot settings to alter
+     * @param typesToAdd bot type to add to enemy list
+     */
+    addBotToEnemyList(difficultySettings: Difficulty, typesToAdd: string[], typeBeingEdited: string): void;
+    /**
+     * Add a bot to the REVENGE_BOT_TYPES array
+     * @param difficultySettings bot settings to alter
+     * @param typesToAdd bot type to add to revenge list
+     */
+    addBotToRevengeList(difficultySettings: Difficulty, typesToAdd: string[]): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/ContainerHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/ContainerHelper.d.ts
new file mode 100644
index 0000000..3c2ee93
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/ContainerHelper.d.ts
@@ -0,0 +1,12 @@
+export declare class FindSlotResult {
+    success: boolean;
+    x: any;
+    y: any;
+    rotation: boolean;
+    constructor(success?: boolean, x?: any, y?: any, rotation?: boolean);
+}
+export declare class ContainerHelper {
+    protected locateSlot(container2D: number[][], containerX: number, containerY: number, x: number, y: number, itemW: number, itemH: number): boolean;
+    findSlotForItem(container2D: number[][], itemWidth: number, itemHeight: number): FindSlotResult;
+    fillContainerMapWithItem(container2D: number[][], x: number, y: number, itemW: number, itemH: number, rotate: boolean): any;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/DialogueHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/DialogueHelper.d.ts
new file mode 100644
index 0000000..9776c6a
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/DialogueHelper.d.ts
@@ -0,0 +1,21 @@
+import { Dialogue, MessageContent, MessagePreview } from "../models/eft/profile/IAkiProfile";
+import { MessageType } from "../models/enums/MessageType";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { SaveServer } from "../servers/SaveServer";
+import { HashUtil } from "../utils/HashUtil";
+import { ItemHelper } from "./ItemHelper";
+import { NotificationSendHelper } from "./NotificationSendHelper";
+import { NotifierHelper } from "./NotifierHelper";
+export declare class DialogueHelper {
+    protected hashUtil: HashUtil;
+    protected saveServer: SaveServer;
+    protected databaseServer: DatabaseServer;
+    protected notifierHelper: NotifierHelper;
+    protected notificationSendHelper: NotificationSendHelper;
+    protected itemHelper: ItemHelper;
+    constructor(hashUtil: HashUtil, saveServer: SaveServer, databaseServer: DatabaseServer, notifierHelper: NotifierHelper, notificationSendHelper: NotificationSendHelper, itemHelper: ItemHelper);
+    createMessageContext(templateId: string, messageType: MessageType, maxStoreTime: number): MessageContent;
+    addDialogueMessage(dialogueID: string, messageContent: MessageContent, sessionID: string, rewards?: any[]): void;
+    getMessagePreview(dialogue: Dialogue): MessagePreview;
+    getMessageItemContents(messageID: string, sessionID: string): any[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/DurabilityLimitsHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/DurabilityLimitsHelper.d.ts
new file mode 100644
index 0000000..07a5db1
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/DurabilityLimitsHelper.d.ts
@@ -0,0 +1,26 @@
+import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
+import { IBotConfig } from "../models/spt/config/IBotConfig";
+import { ConfigServer } from "../servers/ConfigServer";
+import { RandomUtil } from "../utils/RandomUtil";
+import { BotHelper } from "./BotHelper";
+export declare class DurabilityLimitsHelper {
+    protected randomUtil: RandomUtil;
+    protected botHelper: BotHelper;
+    protected configServer: ConfigServer;
+    protected botConfig: IBotConfig;
+    constructor(randomUtil: RandomUtil, botHelper: BotHelper, configServer: ConfigServer);
+    getRandomisedMaxWeaponDurability(itemTemplate: ITemplateItem, botRole: string): number;
+    getRandomisedMaxArmorDurability(itemTemplate: ITemplateItem, botRole: string): number;
+    getRandomisedWeaponDurability(itemTemplate: ITemplateItem, botRole: string, maxDurability: number): number;
+    getRandomisedArmorDurability(itemTemplate: ITemplateItem, botRole: string, maxDurability: number): number;
+    protected generateMaxWeaponDurability(botRole: string): number;
+    protected generateMaxPmcArmorDurability(itemMaxDurability: number): number;
+    protected getLowestMaxWeaponFromConfig(botRole: string): number;
+    protected getHighestMaxWeaponDurabilityFromConfig(botRole: string): number;
+    protected generateWeaponDurability(botRole: string, maxDurability: number): number;
+    protected generateArmorDurability(botRole: string, maxDurability: number): number;
+    protected getMinWeaponDeltaFromConfig(botRole: string): number;
+    protected getMaxWeaponDeltaFromConfig(botRole: string): number;
+    protected getMinArmorDeltaFromConfig(botRole: string): number;
+    protected getMaxArmorDeltaFromConfig(botRole: string): number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/ExtendedProfileHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/ExtendedProfileHelper.d.ts
new file mode 100644
index 0000000..d8b754d
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/ExtendedProfileHelper.d.ts
@@ -0,0 +1,22 @@
+import { BotGenerator } from "../generators/BotGenerator";
+import { IPmcData, Skills, Stats } from "../models/eft/common/IPmcData";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { SaveServer } from "../servers/SaveServer";
+import { FenceService } from "../services/FenceService";
+import { JsonUtil } from "../utils/JsonUtil";
+import { TimeUtil } from "../utils/TimeUtil";
+import { Watermark } from "../utils/Watermark";
+import { ItemHelper } from "./ItemHelper";
+import { ProfileHelper } from "./ProfileHelper";
+export declare class ExtendedProfileHelper extends ProfileHelper {
+    protected botGenerator: BotGenerator;
+    constructor(jsonUtil: JsonUtil, watermark: Watermark, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, fenceService: FenceService, botGenerator: BotGenerator);
+    generatePlayerScav(sessionID: string): IPmcData;
+    protected getScavSkills(sessionID: string): Skills;
+    protected removeSecureContainer(profile: IPmcData): IPmcData;
+    protected getDefaultScavSkills(): Skills;
+    protected getScavStats(sessionID: string): Stats;
+    protected getScavLevel(sessionID: string): number;
+    protected getScavExperience(sessionID: string): number;
+    protected setScavCooldownTimer(profile: IPmcData, pmcData: IPmcData): IPmcData;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/GameEventHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/GameEventHelper.d.ts
new file mode 100644
index 0000000..b2d6377
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/GameEventHelper.d.ts
@@ -0,0 +1,9 @@
+import { DatabaseServer } from "../servers/DatabaseServer";
+export declare class GameEventHelper {
+    protected databaseServer: DatabaseServer;
+    constructor(databaseServer: DatabaseServer);
+    get EVENT(): Record<string, string>;
+    get christmasEventItems(): string[];
+    itemIsChristmasRelated(itemId: string): boolean;
+    christmasEventEnabled(): boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/GameHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/GameHelper.d.ts
new file mode 100644
index 0000000..fd49e84
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/GameHelper.d.ts
@@ -0,0 +1,11 @@
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { ILogger } from "../models/spt/utils/ILogger";
+export declare class GameHelper {
+    protected logger: ILogger;
+    constructor(logger: ILogger);
+    /**
+     * Remove condition conters no longer used
+     * @param pmcProfile profile to remove old counters from
+     */
+    removeDanglingConditionCounters(pmcProfile: IPmcData): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/HandbookHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/HandbookHelper.d.ts
new file mode 100644
index 0000000..b47d466
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/HandbookHelper.d.ts
@@ -0,0 +1,33 @@
+declare class LookupItem {
+    byId: Record<number, string>;
+    byParent: Record<string, string[]>;
+    constructor();
+}
+export declare class LookupCollection {
+    items: LookupItem;
+    categories: LookupItem;
+    constructor();
+}
+export declare class HandbookHelper {
+    protected lookup: LookupCollection;
+    hydrateLookup(lookup: LookupCollection): void;
+    getTemplatePrice(x: string): number;
+    templatesWithParent(x: string): string[];
+    isCategory(x: string): boolean;
+    childrenCategories(x: string): string[];
+    /**
+    * Gets Currency to Ruble conversion Value
+    * @param {number} value
+    * @param {string} currencyFrom
+    * @returns number
+    */
+    inRUB(value: number, currencyFrom: string): number;
+    /**
+     * Gets Ruble to Currency conversion Value
+     * @param {number} value
+     * @param {string} currencyTo
+     * @returns number
+     */
+    fromRUB(value: number, currencyTo: string): number;
+}
+export {};
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/HealthHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/HealthHelper.d.ts
new file mode 100644
index 0000000..518c23f
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/HealthHelper.d.ts
@@ -0,0 +1,27 @@
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { ISyncHealthRequestData } from "../models/eft/health/ISyncHealthRequestData";
+import { IAkiProfile } from "../models/eft/profile/IAkiProfile";
+import { IHealthConfig } from "../models/spt/config/IHealthConfig";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ConfigServer } from "../servers/ConfigServer";
+import { SaveServer } from "../servers/SaveServer";
+import { JsonUtil } from "../utils/JsonUtil";
+import { TimeUtil } from "../utils/TimeUtil";
+export declare class HealthHelper {
+    protected jsonUtil: JsonUtil;
+    protected logger: ILogger;
+    protected timeUtil: TimeUtil;
+    protected saveServer: SaveServer;
+    protected configServer: ConfigServer;
+    protected healthConfig: IHealthConfig;
+    constructor(jsonUtil: JsonUtil, logger: ILogger, timeUtil: TimeUtil, saveServer: SaveServer, configServer: ConfigServer);
+    resetVitality(sessionID: string): IAkiProfile;
+    saveVitality(pmcData: IPmcData, info: ISyncHealthRequestData, sessionID: string): void;
+    protected saveHealth(pmcData: IPmcData, sessionID: string): void;
+    protected saveEffects(pmcData: IPmcData, sessionID: string): void;
+    protected addEffect(pmcData: IPmcData, sessionID: string, effect: {
+        bodyPart: string;
+        effectType: string;
+    }): void;
+    protected isEmpty(map: any): boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/HideoutHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/HideoutHelper.d.ts
new file mode 100644
index 0000000..76b337f
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/HideoutHelper.d.ts
@@ -0,0 +1,68 @@
+import { Common, HideoutArea, IPmcData, Production, Productive } from "../models/eft/common/IPmcData";
+import { Upd } from "../models/eft/common/tables/IItem";
+import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
+import { StageBonus } from "../models/eft/hideout/IHideoutArea";
+import { IHideoutContinousProductionStartRequestData } from "../models/eft/hideout/IHideoutContinousProductionStartRequestData";
+import { IHideoutSingleProductionStartRequestData } from "../models/eft/hideout/IHideoutSingleProductionStartRequestData";
+import { IHideoutTakeProductionRequestData } from "../models/eft/hideout/IHideoutTakeProductionRequestData";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { IHideoutConfig } from "../models/spt/config/IHideoutConfig";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ItemEventRouter } from "../routers/ItemEventRouter";
+import { ConfigServer } from "../servers/ConfigServer";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { PlayerService } from "../services/PlayerService";
+import { HashUtil } from "../utils/HashUtil";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+import { RandomUtil } from "../utils/RandomUtil";
+import { TimeUtil } from "../utils/TimeUtil";
+import { InventoryHelper } from "./InventoryHelper";
+import { ProfileHelper } from "./ProfileHelper";
+export declare class HideoutHelper {
+    protected logger: ILogger;
+    protected hashUtil: HashUtil;
+    protected timeUtil: TimeUtil;
+    protected randomUtil: RandomUtil;
+    protected databaseServer: DatabaseServer;
+    protected itemEventRouter: ItemEventRouter;
+    protected httpResponse: HttpResponseUtil;
+    protected profileHelper: ProfileHelper;
+    protected inventoryHelper: InventoryHelper;
+    protected playerService: PlayerService;
+    protected configServer: ConfigServer;
+    static BITCOIN_FARM: string;
+    protected WATER_COLLECTOR: string;
+    protected BITCOIN: string;
+    protected EXPEDITIONARY_FUEL_TANK: string;
+    static NAME_BACKENDCOUNTERS_CRAFTING: string;
+    static SKILL_NAME_HIDEOUT: string;
+    static HOUR_FOR_SKILL_CRAFTING: number;
+    static SKILL_NAME_CRAFITING: string;
+    protected hideoutConfig: IHideoutConfig;
+    constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, itemEventRouter: ItemEventRouter, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, inventoryHelper: InventoryHelper, playerService: PlayerService, configServer: ConfigServer);
+    registerProduction(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData | IHideoutContinousProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
+    /**
+     * This convinience function intialies new Production Object
+     * with all the constants.
+     */
+    initProduction(recipeId: string, productionTime: number): Production;
+    isProductionType(productive: Productive): productive is Production;
+    applyPlayerUpgradesBonuses(pmcData: IPmcData, bonus: StageBonus): void;
+    protected applySkillXPBoost(pmcData: IPmcData, bonus: StageBonus): void;
+    updatePlayerHideout(sessionID: string): void;
+    protected updateWaterCollector(sessionId: string, pmcData: IPmcData, area: HideoutArea, isGeneratorOn: boolean): void;
+    protected doesWaterCollectorHaveFilter(waterCollector: HideoutArea): boolean;
+    protected updateFuel(generatorArea: HideoutArea, pmcData: IPmcData): HideoutArea;
+    protected updateWaterFilters(waterFilterArea: HideoutArea, pwProd: Production, isGeneratorOn: boolean, pmcData: IPmcData): HideoutArea;
+    protected getAreaUpdObject(stackCount: number, resourceValue: number, resourceUnitsConsumed: number): Upd;
+    protected updateAirFilters(airFilterArea: HideoutArea, pmcData: IPmcData): HideoutArea;
+    protected updateBitcoinFarm(pmcData: IPmcData, btcFarmCGs: number, isGeneratorOn: boolean): Production;
+    protected getBTCSlots(pmcData: IPmcData): number;
+    protected getManagementSkillsSlots(): number;
+    protected hasManagementSkillSlots(pmcData: IPmcData): boolean;
+    protected getHideoutManagementSkill(pmcData: IPmcData): Common;
+    protected getHideoutManagementConsumptionBonus(pmcData: IPmcData): number;
+    isProduction(productive: Productive): productive is Production;
+    getBTC(pmcData: IPmcData, body: IHideoutTakeProductionRequestData, sessionID: string): IItemEventRouterResponse;
+    getRandomAmountRewardForScavCase(itemToCalculate: ITemplateItem): number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/HttpServerHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/HttpServerHelper.d.ts
new file mode 100644
index 0000000..c6e5296
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/HttpServerHelper.d.ts
@@ -0,0 +1,23 @@
+import { IHttpConfig } from "../models/spt/config/IHttpConfig";
+import { ConfigServer } from "../servers/ConfigServer";
+export declare class HttpServerHelper {
+    protected configServer: ConfigServer;
+    protected httpConfig: IHttpConfig;
+    protected mime: {
+        css: string;
+        bin: string;
+        html: string;
+        jpg: string;
+        js: string;
+        json: string;
+        png: string;
+        svg: string;
+        txt: string;
+    };
+    constructor(configServer: ConfigServer);
+    getMimeText(key: string): string;
+    buildUrl(): string;
+    getBackendUrl(): string;
+    getWebsocketUrl(): string;
+    sendTextJson(resp: any, output: any): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/InRaidHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/InRaidHelper.d.ts
new file mode 100644
index 0000000..05b6fdf
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/InRaidHelper.d.ts
@@ -0,0 +1,33 @@
+import { IPmcData, Victim } from "../models/eft/common/IPmcData";
+import { Item } from "../models/eft/common/tables/IItem";
+import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { SaveServer } from "../servers/SaveServer";
+import { JsonUtil } from "../utils/JsonUtil";
+import { InventoryHelper } from "./InventoryHelper";
+import { PaymentHelper } from "./PaymentHelper";
+export declare class InRaidHelper {
+    protected logger: ILogger;
+    protected saveServer: SaveServer;
+    protected jsonUtil: JsonUtil;
+    protected databaseServer: DatabaseServer;
+    protected inventoryHelper: InventoryHelper;
+    protected paymentHelper: PaymentHelper;
+    constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, databaseServer: DatabaseServer, inventoryHelper: InventoryHelper, paymentHelper: PaymentHelper);
+    protected removePlayer(sessionID: string): void;
+    protected removeMapAccessKey(offraidData: ISaveProgressRequestData, sessionID: string): void;
+    addUpdToMoneyFromRaid(items: Item[]): void;
+    /**
+     * Add positive karma for PMC kills
+     * @param {*} existingFenceStanding
+     * @param {*} victims
+     */
+    calculateFenceStandingChangeFromKills(existingFenceStanding: number, victims: Victim[]): void;
+    setBaseStats(profileData: IPmcData, offraidData: ISaveProgressRequestData, sessionID: string): IPmcData;
+    markFoundItems(pmcData: IPmcData, profile: IPmcData, isPlayerScav: boolean): IPmcData;
+    removeFoundInRaidStatusFromItems(profile: IPmcData): IPmcData;
+    setInventory(sessionID: string, pmcData: IPmcData, profile: IPmcData): IPmcData;
+    deleteInventory(pmcData: IPmcData, sessionID: string): IPmcData;
+    getPlayerGear(items: Item[]): Item[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/InventoryHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/InventoryHelper.d.ts
new file mode 100644
index 0000000..dc7cbca
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/InventoryHelper.d.ts
@@ -0,0 +1,85 @@
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { Item } from "../models/eft/common/tables/IItem";
+import { IAddItemRequestData } from "../models/eft/inventory/IAddItemRequestData";
+import { IInventoryMergeRequestData } from "../models/eft/inventory/IInventoryMergeRequestData";
+import { IInventoryMoveRequestData } from "../models/eft/inventory/IInventoryMoveRequestData";
+import { IInventorySplitRequestData } from "../models/eft/inventory/IInventorySplitRequestData";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { IInventoryConfig } from "../models/spt/config/IInventoryConfig";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ConfigServer } from "../servers/ConfigServer";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { FenceService } from "../services/FenceService";
+import { HashUtil } from "../utils/HashUtil";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+import { JsonUtil } from "../utils/JsonUtil";
+import { ContainerHelper } from "./ContainerHelper";
+import { DialogueHelper } from "./DialogueHelper";
+import { ItemHelper } from "./ItemHelper";
+import { PaymentHelper } from "./PaymentHelper";
+import { ProfileHelper } from "./ProfileHelper";
+import { TraderAssortHelper } from "./TraderAssortHelper";
+export interface OwnerInventoryItems {
+    from: Item[];
+    to: Item[];
+    sameInventory: boolean;
+    isMail: boolean;
+}
+export declare class InventoryHelper {
+    protected logger: ILogger;
+    protected jsonUtil: JsonUtil;
+    protected hashUtil: HashUtil;
+    protected httpResponse: HttpResponseUtil;
+    protected fenceService: FenceService;
+    protected databaseServer: DatabaseServer;
+    protected paymentHelper: PaymentHelper;
+    protected traderAssortHelper: TraderAssortHelper;
+    protected dialogueHelper: DialogueHelper;
+    protected itemHelper: ItemHelper;
+    protected containerHelper: ContainerHelper;
+    protected profileHelper: ProfileHelper;
+    protected configServer: ConfigServer;
+    protected inventoryConfig: IInventoryConfig;
+    constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, httpResponse: HttpResponseUtil, fenceService: FenceService, databaseServer: DatabaseServer, paymentHelper: PaymentHelper, traderAssortHelper: TraderAssortHelper, dialogueHelper: DialogueHelper, itemHelper: ItemHelper, containerHelper: ContainerHelper, profileHelper: ProfileHelper, configServer: ConfigServer);
+    addItem(pmcData: IPmcData, body: IAddItemRequestData, output: IItemEventRouterResponse, sessionID: string, callback: any, foundInRaid?: boolean, addUpd?: any): IItemEventRouterResponse;
+    removeItem(pmcData: IPmcData, itemId: string, sessionID: string, output?: IItemEventRouterResponse): IItemEventRouterResponse;
+    getItemSize(itemTpl: string, itemID: string, inventoryItem: Item[]): Record<number, number>;
+    protected getSizeByInventoryItemHash(itemTpl: string, itemID: string, inventoryItemHash: InventoryHelper.InventoryItemHash): Record<number, number>;
+    protected getInventoryItemHash(inventoryItem: Item[]): InventoryHelper.InventoryItemHash;
+    getContainerMap(containerW: number, containerH: number, itemList: Item[], containerId: string): number[][];
+    /**
+     * Based on the item action, determine whose inventories we should be looking at for from and to.
+     */
+    getOwnerInventoryItems(body: IInventoryMoveRequestData | IInventorySplitRequestData | IInventoryMergeRequestData, sessionID: string): OwnerInventoryItems;
+    /**
+     * Made a 2d array table with 0 - free slot and 1 - used slot
+     * @param {Object} pmcData
+     * @param {string} sessionID
+     * @returns Array
+     */
+    protected getStashSlotMap(pmcData: IPmcData, sessionID: string): number[][];
+    protected getStashType(sessionID: string): string;
+    protected getPlayerStashSize(sessionID: string): Record<number, number>;
+    /**
+    * Internal helper function to transfer an item from one profile to another.
+    * fromProfileData: Profile of the source.
+    * toProfileData: Profile of the destination.
+    * body: Move request
+    */
+    moveItemToProfile(fromItems: Item[], toItems: Item[], body: IInventoryMoveRequestData): void;
+    /**
+    * Internal helper function to move item within the same profile_f.
+    */
+    moveItemInternal(inventoryItems: Item[], body: IInventoryMoveRequestData): void;
+    /**
+    * Internal helper function to handle cartridges in inventory if any of them exist.
+    */
+    protected handleCartridges(items: Item[], body: IInventoryMoveRequestData): void;
+}
+declare namespace InventoryHelper {
+    interface InventoryItemHash {
+        byItemId: Record<string, Item>;
+        byParentId: Record<string, Item[]>;
+    }
+}
+export {};
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/ItemHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/ItemHelper.d.ts
new file mode 100644
index 0000000..4fff11e
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/ItemHelper.d.ts
@@ -0,0 +1,152 @@
+import { InsuredItem, IPmcData } from "../models/eft/common/IPmcData";
+import { Item } from "../models/eft/common/tables/IItem";
+import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { HashUtil } from "../utils/HashUtil";
+import { JsonUtil } from "../utils/JsonUtil";
+declare class ItemHelper {
+    protected logger: ILogger;
+    protected hashUtil: HashUtil;
+    protected jsonUtil: JsonUtil;
+    protected databaseServer: DatabaseServer;
+    constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer);
+    /**
+     * Checks if a id is a valid item. Valid meaning that it's an item that be stored in stash
+     * @param       {string}    tpl       the template id / tpl
+     * @returns                             boolean; true for items that may be in player posession and not quest items
+     */
+    isValidItem(tpl: string, invalidBaseTypes?: string[]): boolean;
+    /**
+     * Checks if a id is a valid item. Valid meaning that it's an item that may be a reward
+     * or content of bot loot. Items that are tested as valid may be in a player backpack or stash.
+     * @param {*} tpl template id of item to check
+     * @returns boolean: true if item is valid reward
+     */
+    isValidRewardItem(tpl: string): boolean;
+    /**
+     * Picks rewardable items from items.json. This means they need to fit into the inventory and they shouldn't be keys (debatable)
+     * @returns     a list of rewardable items [[_tpl, itemTemplate],...]
+     */
+    getRewardableItems(): [string, ITemplateItem][];
+    /**
+     * Check if the tpl / template Id provided is a descendent of the baseclass
+     *
+     * @param   {string}    tpl             the item template id to check
+     * @param   {string}    baseclassTpl    the baseclass to check for
+     * @return  {boolean}                   is the tpl a descendent?
+     */
+    isOfBaseclass(tpl: string, baseclassTpl: string): any;
+    /**
+     * Returns the item price based on the handbook or as a fallback from the prices.json if the item is not
+     * found in the handbook. If the price can't be found at all return 0
+     *
+     * @param {string}      tpl           the item template to check
+     * @returns {integer}                   The price of the item or 0 if not found
+     */
+    getItemPrice(tpl: string): number;
+    fixItemStackCount(item: Item): Item;
+    /**
+     * AmmoBoxes contain StackSlots which need to be filled for the AmmoBox to have content.
+     * Here's what a filled AmmoBox looks like:
+     *   {
+     *       "_id": "b1bbe982daa00ac841d4ae4d",
+     *       "_tpl": "57372c89245977685d4159b1",
+     *       "parentId": "5fe49a0e2694b0755a504876",
+     *       "slotId": "hideout",
+     *       "location": {
+     *           "x": 3,
+     *           "y": 4,
+     *           "r": 0
+     *       },
+     *       "upd": {
+     *           "StackObjectsCount": 1
+     *       }
+     *   },
+     *   {
+     *       "_id": "b997b4117199033afd274a06",
+     *       "_tpl": "56dff061d2720bb5668b4567",
+     *       "parentId": "b1bbe982daa00ac841d4ae4d",
+     *       "slotId": "cartridges",
+     *       "location": 0,
+     *       "upd": {
+     *           "StackObjectsCount": 30
+     *       }
+     *   }
+     * Given the AmmoBox Item (first object) this function generates the StackSlot (second object) and returns it.
+     * StackSlots are only used for AmmoBoxes which only have one element in StackSlots. However, it seems to be generic
+     * to possibly also have more than one StackSlot. As good as possible, without seeing items having more than one
+     * StackSlot, this function takes account of this and creates and returns an array of StackSlotItems
+     *
+     * @param {object}      item            The item template of the AmmoBox as given in items.json
+     * @param {string}      parentId        The id of the AmmoBox instance these StackSlotItems should be children of
+     * @returns {array}                     The array of StackSlotItems
+     */
+    generateItemsFromStackSlot(item: ITemplateItem, parentId: string): Item[];
+    getItem(tpl: string): [boolean, ITemplateItem];
+    /**
+     * get normalized value (0-1) based on item condition
+     * @param item
+     * @returns number between 0 and 1
+     */
+    getItemQualityModifier(item: Item): number;
+    findAndReturnChildrenByItems(items: Item[], itemID: string): string[];
+    /**
+     * A variant of findAndReturnChildren where the output is list of item objects instead of their ids.
+     */
+    findAndReturnChildrenAsItems(items: Item[], baseItemId: string): Item[];
+    /**
+     * find children of the item in a given assort (weapons parts for example, need recursive loop function)
+     */
+    findAndReturnChildrenByAssort(itemIdToFind: string, assort: Item[]): Item[];
+    hasBuyRestrictions(itemToCheck: Item): boolean;
+    /**
+     * Is Dogtag
+     * Checks if an item is a dogtag. Used under profile_f.js to modify preparePrice based
+     * on the level of the dogtag
+     */
+    isDogtag(tpl: string): boolean;
+    isNotSellable(tpl: string): boolean;
+    getChildId(item: Item): string;
+    isItemTplStackable(tpl: string): boolean;
+    /**
+     * split item stack if it exceeds StackMaxSize
+     */
+    splitStack(item: Item): Item[];
+    /**
+     * Find Barter items in the inventory
+     * @param {string} by
+     * @param {Object} pmcData
+     * @param {string} barter_itemID
+     * @returns Array
+     */
+    findBarterItems(by: string, pmcData: IPmcData, barter_itemID: string): any[];
+    /**
+     * @param {Object} pmcData
+     * @param {Array} items
+     * @param {Object} fastPanel
+     * @returns Array
+     */
+    replaceIDs(pmcData: IPmcData, items: Item[], insuredItems?: InsuredItem[], fastPanel?: any): any[];
+    /**
+     * Recursivly loop down through an items hierarchy to see if any of the ids match the supplied list, return true if any do
+     * @param {string} tpl
+     * @param {Array} tplsToCheck
+     * @returns boolean
+     */
+    doesItemOrParentsIdMatch(tpl: string, tplsToCheck: string[]): boolean;
+    /**
+     * Return true if item is a quest item
+     * @param {string} tpl
+     * @returns boolean
+     */
+    isQuestItem(tpl: string): boolean;
+    getItemSize(items: Item[], rootItemId: string): ItemHelper.ItemSize;
+}
+declare namespace ItemHelper {
+    interface ItemSize {
+        width: number;
+        height: number;
+    }
+}
+export { ItemHelper };
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/NotificationSendHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/NotificationSendHelper.d.ts
new file mode 100644
index 0000000..34e62d9
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/NotificationSendHelper.d.ts
@@ -0,0 +1,12 @@
+import { INotification } from "../models/eft/notifier/INotifier";
+import { IHttpServer } from "../models/spt/server/IHttpServer";
+import { NotificationService } from "../services/NotificationService";
+export declare class NotificationSendHelper {
+    protected httpServer: IHttpServer;
+    protected notificationService: NotificationService;
+    constructor(httpServer: IHttpServer, notificationService: NotificationService);
+    /**
+     * Send notification message to the appropiate channel
+     */
+    sendMessage(sessionID: string, notificationMessage: INotification): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/NotifierHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/NotifierHelper.d.ts
new file mode 100644
index 0000000..738b69a
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/NotifierHelper.d.ts
@@ -0,0 +1,17 @@
+import { INotification } from "../models/eft/notifier/INotifier";
+import { Message, MessageContentRagfair } from "../models/eft/profile/IAkiProfile";
+import { HttpServerHelper } from "./HttpServerHelper";
+export declare class NotifierHelper {
+    protected httpServerHelper: HttpServerHelper;
+    /**
+     * The default notification sent when waiting times out.
+     */
+    protected defaultNotification: INotification;
+    constructor(httpServerHelper: HttpServerHelper);
+    getDefaultNotification(): INotification;
+    /** Creates a new notification that displays the "Your offer was sold!" prompt and removes sold offer from "My Offers" on clientside */
+    createRagfairOfferSoldNotification(dialogueMessage: Message, ragfairData: MessageContentRagfair): INotification;
+    /** Creates a new notification with the specified dialogueMessage object. */
+    createNewMessageNotification(dialogueMessage: Message): INotification;
+    getWebSocketServer(sessionID: string): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/PaymentHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/PaymentHelper.d.ts
new file mode 100644
index 0000000..2d068a4
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/PaymentHelper.d.ts
@@ -0,0 +1,14 @@
+export declare class PaymentHelper {
+    /**
+     * Check whether tpl is Money
+     * @param {string} tpl
+     * @returns void
+     */
+    isMoneyTpl(tpl: string): boolean;
+    /**
+    * Gets currency TPL from TAG
+    * @param {string} currency
+    * @returns string
+    */
+    getCurrency(currency: string): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/PresetHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/PresetHelper.d.ts
new file mode 100644
index 0000000..0371886
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/PresetHelper.d.ts
@@ -0,0 +1,14 @@
+import { Preset } from "../models/eft/common/IGlobals";
+import { DatabaseServer } from "../servers/DatabaseServer";
+export declare class PresetHelper {
+    protected databaseServer: DatabaseServer;
+    protected lookup: Record<string, string[]>;
+    constructor(databaseServer: DatabaseServer);
+    hydratePresetStore(input: Record<string, string[]>): void;
+    isPreset(id: string): boolean;
+    hasPreset(templateId: string): boolean;
+    getPreset(id: string): Preset;
+    getPresets(templateId: string): Preset[];
+    getDefaultPreset(templateId: string): Preset;
+    getBaseItemTpl(presetId: string): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/ProbabilityHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/ProbabilityHelper.d.ts
new file mode 100644
index 0000000..7a0676c
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/ProbabilityHelper.d.ts
@@ -0,0 +1,14 @@
+import { ILogger } from "../models/spt/utils/ILogger";
+import { RandomUtil } from "../utils/RandomUtil";
+export declare class ProbabilityHelper {
+    protected logger: ILogger;
+    protected randomUtil: RandomUtil;
+    constructor(logger: ILogger, randomUtil: RandomUtil);
+    /**
+     * Chance to roll a number out of 100
+     * @param chance Percentage chance roll should success
+     * @param scale scale of chance to allow support of numbers > 1-100
+     * @returns true if success
+     */
+    rollChance(chance: number, scale?: number): boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/ProfileHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/ProfileHelper.d.ts
new file mode 100644
index 0000000..6a64291
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/ProfileHelper.d.ts
@@ -0,0 +1,33 @@
+import { IPmcData, Stats } from "../models/eft/common/IPmcData";
+import { IAkiProfile } from "../models/eft/profile/IAkiProfile";
+import { IValidateNicknameRequestData } from "../models/eft/profile/IValidateNicknameRequestData";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { SaveServer } from "../servers/SaveServer";
+import { FenceService } from "../services/FenceService";
+import { JsonUtil } from "../utils/JsonUtil";
+import { TimeUtil } from "../utils/TimeUtil";
+import { Watermark } from "../utils/Watermark";
+import { ItemHelper } from "./ItemHelper";
+export declare class ProfileHelper {
+    protected jsonUtil: JsonUtil;
+    protected watermark: Watermark;
+    protected timeUtil: TimeUtil;
+    protected saveServer: SaveServer;
+    protected databaseServer: DatabaseServer;
+    protected itemHelper: ItemHelper;
+    protected fenceService: FenceService;
+    constructor(jsonUtil: JsonUtil, watermark: Watermark, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, fenceService: FenceService);
+    resetProfileQuestCondition(sessionID: string, conditionId: string): void;
+    getCompleteProfile(sessionID: string): IPmcData[];
+    isNicknameTaken(info: IValidateNicknameRequestData, sessionID: string): boolean;
+    getProfileByPmcId(pmcId: string): IPmcData;
+    getExperience(level: number): number;
+    getMaxLevel(): number;
+    getDefaultAkiDataObject(): any;
+    getFullProfile(sessionID: string): IAkiProfile;
+    getPmcProfile(sessionID: string): IPmcData;
+    getScavProfile(sessionID: string): IPmcData;
+    getDefaultCounters(): Stats;
+    protected isWiped(sessionID: string): boolean;
+    protected getServerVersion(): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/QuestConditionHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/QuestConditionHelper.d.ts
new file mode 100644
index 0000000..90ee560
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/QuestConditionHelper.d.ts
@@ -0,0 +1,7 @@
+import { AvailableForConditions } from "../models/eft/common/tables/IQuest";
+export declare class QuestConditionHelper {
+    getQuestConditions(q: AvailableForConditions[], furtherFilter?: (a: AvailableForConditions) => AvailableForConditions[]): AvailableForConditions[];
+    getLevelConditions(q: AvailableForConditions[], furtherFilter?: (a: AvailableForConditions) => AvailableForConditions[]): AvailableForConditions[];
+    getLoyaltyConditions(q: AvailableForConditions[], furtherFilter?: (a: AvailableForConditions) => AvailableForConditions[]): AvailableForConditions[];
+    protected filterConditions(q: AvailableForConditions[], questType: string, furtherFilter?: (a: AvailableForConditions) => AvailableForConditions[]): AvailableForConditions[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/QuestHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/QuestHelper.d.ts
new file mode 100644
index 0000000..d6e382b
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/QuestHelper.d.ts
@@ -0,0 +1,88 @@
+import { IPmcData, Quest } from "../models/eft/common/IPmcData";
+import { AvailableForConditions, AvailableForProps, IQuest, Reward } from "../models/eft/common/tables/IQuest";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { IAcceptQuestRequestData } from "../models/eft/quests/IAcceptQuestRequestData";
+import { ICompleteQuestRequestData } from "../models/eft/quests/ICompleteQuestRequestData";
+import { IQuestConfig } from "../models/spt/config/IQuestConfig";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ItemEventRouter } from "../routers/ItemEventRouter";
+import { ConfigServer } from "../servers/ConfigServer";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { LocaleService } from "../services/LocaleService";
+import { HashUtil } from "../utils/HashUtil";
+import { JsonUtil } from "../utils/JsonUtil";
+import { TimeUtil } from "../utils/TimeUtil";
+import { DialogueHelper } from "./DialogueHelper";
+import { ItemHelper } from "./ItemHelper";
+import { PaymentHelper } from "./PaymentHelper";
+import { ProfileHelper } from "./ProfileHelper";
+import { RagfairServerHelper } from "./RagfairServerHelper";
+import { TraderHelper } from "./TraderHelper";
+export declare class QuestHelper {
+    protected logger: ILogger;
+    protected jsonUtil: JsonUtil;
+    protected timeUtil: TimeUtil;
+    protected hashUtil: HashUtil;
+    protected itemHelper: ItemHelper;
+    protected itemEventRouter: ItemEventRouter;
+    protected databaseServer: DatabaseServer;
+    protected localeService: LocaleService;
+    protected ragfairServerHelper: RagfairServerHelper;
+    protected dialogueHelper: DialogueHelper;
+    protected profileHelper: ProfileHelper;
+    protected paymentHelper: PaymentHelper;
+    protected traderHelper: TraderHelper;
+    protected configServer: ConfigServer;
+    protected questConfig: IQuestConfig;
+    constructor(logger: ILogger, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, itemHelper: ItemHelper, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, localeService: LocaleService, ragfairServerHelper: RagfairServerHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, traderHelper: TraderHelper, configServer: ConfigServer);
+    static get STATUS(): Record<string, number>;
+    questStatus(pmcData: IPmcData, questID: string): string;
+    /**
+     * returns true is the condition is satisfied
+     */
+    evaluateLevel(pmcProfile: IPmcData, cond: AvailableForConditions): boolean;
+    getDeltaQuests(before: IQuest[], after: IQuest[]): IQuest[];
+    rewardSkillPoints(sessionID: string, pmcData: IPmcData, output: IItemEventRouterResponse, skillName: string, progress: number): void;
+    getQuestLocale(questId: string): any;
+    /**
+     * Debug Routine for showing some information on the
+     * quest list in question.
+     */
+    dumpQuests(quests: any, label?: any): void;
+    loyaltyRequirementCheck(loyaltyRequirementProperties: AvailableForProps, profile: IPmcData): boolean;
+    protected processReward(reward: Reward): any[];
+    getQuestRewardItems(quest: IQuest, state: string): Reward[];
+    addQuestToPMCData(pmcData: IPmcData, quest: Quest, newState: string, acceptedQuest: IAcceptQuestRequestData): void;
+    acceptedUnlocked(acceptedQuestId: string, sessionID: string): IQuest[];
+    failedUnlocked(failedQuestId: string, sessionID: string): IQuest[];
+    applyMoneyBoost(quest: IQuest, moneyBoost: number): IQuest;
+    changeItemStack(pmcData: IPmcData, id: string, value: number, sessionID: string, output: any): void;
+    /**
+     * Get List of All Quests as an array
+     * @returns Array of IQuest objects
+     */
+    questValues(): IQuest[];
+    /**
+     * Reest AvailableForStart conditions for quests
+     * @param quests queststo clean
+     * @returns quest array without conditions
+     */
+    protected cleanQuestList(quests: IQuest[]): IQuest[];
+    /**
+     * Reset AvailableForStart conditions on a quest
+     * @param quest quest to clean
+     * @returns reset IQuest object
+     */
+    cleanQuestConditions(quest: IQuest): IQuest;
+    failQuest(pmcData: IPmcData, body: any, sessionID: string): any;
+    getQuestFromDb(questId: string, pmcData: IPmcData): IQuest;
+    getQuestLocaleIdFromDb(messageId: string): string;
+    applyQuestReward(pmcData: IPmcData, body: ICompleteQuestRequestData, state: string, sessionID: string): Reward[];
+    /**
+     * Get the intel center bonus a player has
+     * @param pmcData player profile
+     * @returns bonus in percent
+     */
+    protected getIntelCenterRewardBonus(pmcData: IPmcData): number;
+    getFindItemIdForQuestItem(itemTpl: string): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/RagfairHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/RagfairHelper.d.ts
new file mode 100644
index 0000000..2c8dbb5
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/RagfairHelper.d.ts
@@ -0,0 +1,43 @@
+import { Item } from "../models/eft/common/tables/IItem";
+import { ITraderAssort } from "../models/eft/common/tables/ITrader";
+import { IGetOffersResult } from "../models/eft/ragfair/IGetOffersResult";
+import { ISearchRequestData } from "../models/eft/ragfair/ISearchRequestData";
+import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ConfigServer } from "../servers/ConfigServer";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { RagfairLinkedItemService } from "../services/RagfairLinkedItemService";
+import { JsonUtil } from "../utils/JsonUtil";
+import { HandbookHelper } from "./HandbookHelper";
+import { ItemHelper } from "./ItemHelper";
+import { TraderAssortHelper } from "./TraderAssortHelper";
+import { UtilityHelper } from "./UtilityHelper";
+export declare class RagfairHelper {
+    protected logger: ILogger;
+    protected jsonUtil: JsonUtil;
+    protected traderAssortHelper: TraderAssortHelper;
+    protected databaseServer: DatabaseServer;
+    protected handbookHelper: HandbookHelper;
+    protected itemHelper: ItemHelper;
+    protected ragfairLinkedItemService: RagfairLinkedItemService;
+    protected utilityHelper: UtilityHelper;
+    protected configServer: ConfigServer;
+    protected ragfairConfig: IRagfairConfig;
+    constructor(logger: ILogger, jsonUtil: JsonUtil, traderAssortHelper: TraderAssortHelper, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, itemHelper: ItemHelper, ragfairLinkedItemService: RagfairLinkedItemService, utilityHelper: UtilityHelper, configServer: ConfigServer);
+    /**
+    * Gets currency TAG from TPL
+    * @param {string} currency
+    * @returns string
+    */
+    getCurrencyTag(currency: string): string;
+    filterCategories(sessionID: string, info: ISearchRequestData): string[];
+    getDisplayableAssorts(sessionID: string): Record<string, ITraderAssort>;
+    protected getCategoryList(handbookId: string): string[];
+    countCategories(result: IGetOffersResult): void;
+    /**
+     * Merges Root Items
+     * Ragfair allows abnormally large stacks.
+     */
+    mergeStackable(items: Item[]): Item[];
+    getCurrencySymbol(currencyTpl: string): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/RagfairOfferHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/RagfairOfferHelper.d.ts
new file mode 100644
index 0000000..5a77e13
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/RagfairOfferHelper.d.ts
@@ -0,0 +1,54 @@
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { ITraderAssort } from "../models/eft/common/tables/ITrader";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer";
+import { ISearchRequestData } from "../models/eft/ragfair/ISearchRequestData";
+import { IQuestConfig } from "../models/spt/config/IQuestConfig";
+import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ItemEventRouter } from "../routers/ItemEventRouter";
+import { ConfigServer } from "../servers/ConfigServer";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { SaveServer } from "../servers/SaveServer";
+import { LocaleService } from "../services/LocaleService";
+import { RagfairOfferService } from "../services/RagfairOfferService";
+import { HashUtil } from "../utils/HashUtil";
+import { TimeUtil } from "../utils/TimeUtil";
+import { DialogueHelper } from "./DialogueHelper";
+import { ItemHelper } from "./ItemHelper";
+import { PaymentHelper } from "./PaymentHelper";
+import { PresetHelper } from "./PresetHelper";
+import { ProfileHelper } from "./ProfileHelper";
+import { RagfairHelper } from "./RagfairHelper";
+import { RagfairServerHelper } from "./RagfairServerHelper";
+import { RagfairSortHelper } from "./RagfairSortHelper";
+export declare class RagfairOfferHelper {
+    protected logger: ILogger;
+    protected timeUtil: TimeUtil;
+    protected hashUtil: HashUtil;
+    protected itemEventRouter: ItemEventRouter;
+    protected databaseServer: DatabaseServer;
+    protected saveServer: SaveServer;
+    protected dialogueHelper: DialogueHelper;
+    protected itemHelper: ItemHelper;
+    protected paymentHelper: PaymentHelper;
+    protected presetHelper: PresetHelper;
+    protected profileHelper: ProfileHelper;
+    protected ragfairServerHelper: RagfairServerHelper;
+    protected ragfairSortHelper: RagfairSortHelper;
+    protected ragfairHelper: RagfairHelper;
+    protected ragfairOfferService: RagfairOfferService;
+    protected localeService: LocaleService;
+    protected configServer: ConfigServer;
+    protected static TPL_GOODS_SOLD: string;
+    protected ragfairConfig: IRagfairConfig;
+    protected questConfig: IQuestConfig;
+    constructor(logger: ILogger, timeUtil: TimeUtil, hashUtil: HashUtil, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, saveServer: SaveServer, dialogueHelper: DialogueHelper, itemHelper: ItemHelper, paymentHelper: PaymentHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, ragfairServerHelper: RagfairServerHelper, ragfairSortHelper: RagfairSortHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, localeService: LocaleService, configServer: ConfigServer);
+    getValidOffers(info: ISearchRequestData, itemsToAdd: string[], assorts: Record<string, ITraderAssort>, pmcProfile: IPmcData): IRagfairOffer[];
+    getOffersForBuild(info: ISearchRequestData, itemsToAdd: string[], assorts: Record<string, ITraderAssort>, pmcProfile: IPmcData): IRagfairOffer[];
+    processOffers(sessionID: string): boolean;
+    protected getProfileOffers(sessionID: string): IRagfairOffer[];
+    protected deleteOfferByOfferId(sessionID: string, offerId: string): void;
+    protected completeOffer(sessionID: string, offer: IRagfairOffer, boughtAmount: number): IItemEventRouterResponse;
+    isDisplayableOffer(info: ISearchRequestData, itemsToAdd: string[], assorts: Record<string, ITraderAssort>, offer: IRagfairOffer, pmcProfile: IPmcData): boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/RagfairSellHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/RagfairSellHelper.d.ts
new file mode 100644
index 0000000..6ec004a
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/RagfairSellHelper.d.ts
@@ -0,0 +1,16 @@
+import { SellResult } from "../models/eft/ragfair/IRagfairOffer";
+import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ConfigServer } from "../servers/ConfigServer";
+import { RandomUtil } from "../utils/RandomUtil";
+import { TimeUtil } from "../utils/TimeUtil";
+export declare class RagfairSellHelper {
+    protected logger: ILogger;
+    protected randomUtil: RandomUtil;
+    protected timeUtil: TimeUtil;
+    protected configServer: ConfigServer;
+    protected ragfairConfig: IRagfairConfig;
+    constructor(logger: ILogger, randomUtil: RandomUtil, timeUtil: TimeUtil, configServer: ConfigServer);
+    calculateSellChance(baseChance: number, offerPrice: number, requirementsPriceInRub: number): number;
+    rollForSale(sellChance: number, count: number): SellResult[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/RagfairServerHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/RagfairServerHelper.d.ts
new file mode 100644
index 0000000..a52306b
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/RagfairServerHelper.d.ts
@@ -0,0 +1,48 @@
+import { Item } from "../models/eft/common/tables/IItem";
+import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
+import { MemberCategory } from "../models/enums/MemberCategory";
+import { IQuestConfig } from "../models/spt/config/IQuestConfig";
+import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
+import { ConfigServer } from "../servers/ConfigServer";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { SaveServer } from "../servers/SaveServer";
+import { LocaleService } from "../services/LocaleService";
+import { HashUtil } from "../utils/HashUtil";
+import { JsonUtil } from "../utils/JsonUtil";
+import { RandomUtil } from "../utils/RandomUtil";
+import { DialogueHelper } from "./DialogueHelper";
+import { ItemHelper } from "./ItemHelper";
+import { ProfileHelper } from "./ProfileHelper";
+export declare class RagfairServerHelper {
+    protected randomUtil: RandomUtil;
+    protected hashUtil: HashUtil;
+    protected saveServer: SaveServer;
+    protected databaseServer: DatabaseServer;
+    protected profileHelper: ProfileHelper;
+    protected itemHelper: ItemHelper;
+    protected localeService: LocaleService;
+    protected dialogueHelper: DialogueHelper;
+    protected jsonUtil: JsonUtil;
+    protected configServer: ConfigServer;
+    protected ragfairConfig: IRagfairConfig;
+    protected questConfig: IQuestConfig;
+    protected static TPL_GOODS_RETURNED: string;
+    constructor(randomUtil: RandomUtil, hashUtil: HashUtil, saveServer: SaveServer, databaseServer: DatabaseServer, profileHelper: ProfileHelper, itemHelper: ItemHelper, localeService: LocaleService, dialogueHelper: DialogueHelper, jsonUtil: JsonUtil, configServer: ConfigServer);
+    /**
+     * Is item valid / on blacklist / quest item
+     * @param itemDetails
+     * @returns boolean
+     */
+    isItemValidRagfairItem(itemDetails: [boolean, ITemplateItem]): boolean;
+    protected isItemBlacklisted(itemTemplateId: string): boolean;
+    isTrader(userID: string): boolean;
+    isPlayer(userID: string): boolean;
+    returnItems(sessionID: string, items: any[]): void;
+    calculateDynamicStackCount(tplId: string, isWeaponPreset: boolean): number;
+    getDynamicOfferCurrency(): string;
+    getMemberType(userID: string): MemberCategory;
+    getNickname(userID: string): string;
+    getPresetItems(item: any): Item[];
+    getPresetItemsByTpl(item: Item): Item[];
+    reparentPresets(item: Item, preset: Item[]): Item[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/RagfairSortHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/RagfairSortHelper.d.ts
new file mode 100644
index 0000000..d20e10c
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/RagfairSortHelper.d.ts
@@ -0,0 +1,14 @@
+import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { LocaleService } from "../services/LocaleService";
+export declare class RagfairSortHelper {
+    protected databaseServer: DatabaseServer;
+    protected localeService: LocaleService;
+    constructor(databaseServer: DatabaseServer, localeService: LocaleService);
+    sortOffers(offers: IRagfairOffer[], type: number, direction?: number): IRagfairOffer[];
+    protected sortOffersByID(a: IRagfairOffer, b: IRagfairOffer): number;
+    protected sortOffersByRating(a: IRagfairOffer, b: IRagfairOffer): number;
+    protected sortOffersByName(a: IRagfairOffer, b: IRagfairOffer): number;
+    protected sortOffersByPrice(a: IRagfairOffer, b: IRagfairOffer): number;
+    protected sortOffersByExpiry(a: IRagfairOffer, b: IRagfairOffer): number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/RagfairTaxHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/RagfairTaxHelper.d.ts
new file mode 100644
index 0000000..820facb
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/RagfairTaxHelper.d.ts
@@ -0,0 +1,16 @@
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { Item } from "../models/eft/common/tables/IItem";
+import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { RagfairPriceService } from "../services/RagfairPriceService";
+import { ItemHelper } from "./ItemHelper";
+import { ILogger } from "../models/spt/utils/ILogger";
+export declare class RagfairTaxHelper {
+    protected logger: ILogger;
+    protected databaseServer: DatabaseServer;
+    protected ragfairPriceService: RagfairPriceService;
+    protected itemHelper: ItemHelper;
+    constructor(logger: ILogger, databaseServer: DatabaseServer, ragfairPriceService: RagfairPriceService, itemHelper: ItemHelper);
+    calculateTax(item: Item, pmcData: IPmcData, requirementsValue: number, offerItemCount: number, sellInOnePiece: boolean): number;
+    protected calculateItemWorth(item: Item, itemTemplate: ITemplateItem, itemCount: number, pmcData: IPmcData, isRootItem?: boolean): number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/RepairHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/RepairHelper.d.ts
new file mode 100644
index 0000000..545108e
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/RepairHelper.d.ts
@@ -0,0 +1,21 @@
+import { Item } from "../models/eft/common/tables/IItem";
+import { ITemplateItem, Props } from "../models/eft/common/tables/ITemplateItem";
+import { IRepairConfig } from "../models/spt/config/IRepairConfig";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ConfigServer } from "../servers/ConfigServer";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { JsonUtil } from "../utils/JsonUtil";
+import { RandomUtil } from "../utils/RandomUtil";
+export declare class RepairHelper {
+    protected logger: ILogger;
+    protected jsonUtil: JsonUtil;
+    protected randomUtil: RandomUtil;
+    protected databaseServer: DatabaseServer;
+    protected configServer: ConfigServer;
+    protected repairConfig: IRepairConfig;
+    constructor(logger: ILogger, jsonUtil: JsonUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, configServer: ConfigServer);
+    updateItemDurability(itemToRepair: Item, itemToRepairDetails: ITemplateItem, isArmor: boolean, amountToRepair: number, useRepairKit?: boolean): Item;
+    protected getRandomisedArmorRepairDegredationValue(armorMaterial: string, isRepairKit: boolean, armorMax: number): number;
+    protected getRandomisedWeaponRepairDegredationValue(itemProps: Props, isRepairKit: boolean, armorMax: number): number;
+    isWeaponTemplate(tpl: string): boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/SecureContainerHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/SecureContainerHelper.d.ts
new file mode 100644
index 0000000..9e2bc32
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/SecureContainerHelper.d.ts
@@ -0,0 +1,13 @@
+import { Item } from "../models/eft/common/tables/IItem";
+import { ItemHelper } from "./ItemHelper";
+export interface OwnerInventoryItems {
+    from: Item[];
+    to: Item[];
+    sameInventory: boolean;
+    isMail: boolean;
+}
+export declare class SecureContainerHelper {
+    protected itemHelper: ItemHelper;
+    constructor(itemHelper: ItemHelper);
+    getSecureContainerItems(items: Item[]): string[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/TradeHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/TradeHelper.d.ts
new file mode 100644
index 0000000..975062b
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/TradeHelper.d.ts
@@ -0,0 +1,44 @@
+import { InventoryHelper } from "../helpers/InventoryHelper";
+import { ItemHelper } from "../helpers/ItemHelper";
+import { TraderHelper } from "../helpers/TraderHelper";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { Item, Upd } from "../models/eft/common/tables/IItem";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { IProcessBuyTradeRequestData } from "../models/eft/trade/IProcessBuyTradeRequestData";
+import { IProcessSellTradeRequestData } from "../models/eft/trade/IProcessSellTradeRequestData";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ItemEventRouter } from "../routers/ItemEventRouter";
+import { RagfairServer } from "../servers/RagfairServer";
+import { FenceService } from "../services/FenceService";
+import { PaymentService } from "../services/PaymentService";
+export declare class TradeHelper {
+    protected logger: ILogger;
+    protected itemEventRouter: ItemEventRouter;
+    protected traderHelper: TraderHelper;
+    protected itemHelper: ItemHelper;
+    protected paymentService: PaymentService;
+    protected fenceService: FenceService;
+    protected inventoryHelper: InventoryHelper;
+    protected ragfairServer: RagfairServer;
+    constructor(logger: ILogger, itemEventRouter: ItemEventRouter, traderHelper: TraderHelper, itemHelper: ItemHelper, paymentService: PaymentService, fenceService: FenceService, inventoryHelper: InventoryHelper, ragfairServer: RagfairServer);
+    /**
+     * Buy item from flea or trader
+     * @param pmcData
+     * @param buyRequestData data from client
+     * @param sessionID
+     * @param foundInRaid
+     * @param upd optional item details used when buying from flea
+     * @returns
+     */
+    buyItem(pmcData: IPmcData, buyRequestData: IProcessBuyTradeRequestData, sessionID: string, foundInRaid: boolean, upd: Upd): IItemEventRouterResponse;
+    /**
+     * Sell item to trader
+     * @param pmcData
+     * @param body
+     * @param sessionID
+     * @returns
+     */
+    sellItem(pmcData: IPmcData, body: IProcessSellTradeRequestData, sessionID: string): IItemEventRouterResponse;
+    protected incrementAssortBuyCount(assortBeingPurchased: Item, itemsPurchasedCount: number): void;
+    protected checkPurchaseIsWithinTraderItemLimit(assortBeingPurchased: Item, assortId: string, count: number): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/TraderAssortHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/TraderAssortHelper.d.ts
new file mode 100644
index 0000000..4f41ac2
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/TraderAssortHelper.d.ts
@@ -0,0 +1,42 @@
+import { RagfairAssortGenerator } from "../generators/RagfairAssortGenerator";
+import { RagfairOfferGenerator } from "../generators/RagfairOfferGenerator";
+import { Item } from "../models/eft/common/tables/IItem";
+import { ITraderAssort } from "../models/eft/common/tables/ITrader";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { FenceService } from "../services/FenceService";
+import { TraderAssortService } from "../services/TraderAssortService";
+import { JsonUtil } from "../utils/JsonUtil";
+import { AssortHelper } from "./AssortHelper";
+import { ProfileHelper } from "./ProfileHelper";
+export declare class TraderAssortHelper {
+    protected logger: ILogger;
+    protected jsonUtil: JsonUtil;
+    protected databaseServer: DatabaseServer;
+    protected profileHelper: ProfileHelper;
+    protected assortHelper: AssortHelper;
+    protected ragfairAssortGenerator: RagfairAssortGenerator;
+    protected ragfairOfferGenerator: RagfairOfferGenerator;
+    protected traderAssortService: TraderAssortService;
+    protected fenceService: FenceService;
+    constructor(logger: ILogger, jsonUtil: JsonUtil, databaseServer: DatabaseServer, profileHelper: ProfileHelper, assortHelper: AssortHelper, ragfairAssortGenerator: RagfairAssortGenerator, ragfairOfferGenerator: RagfairOfferGenerator, traderAssortService: TraderAssortService, fenceService: FenceService);
+    /**
+     * Get a traders assorts
+     * Can be used for returning ragfair / fence assorts
+     * @param sessionId session id
+     * @param traderId trader id
+     * @returns a traders assorts
+     */
+    getAssort(sessionId: string, traderId: string): ITraderAssort;
+    /**
+     * Get an array of pristine trader items prior to any alteration by player
+     * @param traderId trader id
+     * @returns array of Items
+     */
+    protected getPristineTraderAssorts(traderId: string): Item[];
+    /**
+     * Returns generated ragfair offers in a trader assort format
+     * @returns Trader assort object
+     */
+    protected getRagfairDataAsTraderAssort(): ITraderAssort;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/TraderHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/TraderHelper.d.ts
new file mode 100644
index 0000000..717351f
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/TraderHelper.d.ts
@@ -0,0 +1,96 @@
+import { FenceLevel } from "../models/eft/common/IGlobals";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { Item } from "../models/eft/common/tables/IItem";
+import { IBarterScheme, ITraderAssort, ITraderBase, LoyaltyLevel } from "../models/eft/common/tables/ITrader";
+import { ITraderConfig } from "../models/spt/config/ITraderConfig";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ConfigServer } from "../servers/ConfigServer";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { SaveServer } from "../servers/SaveServer";
+import { FenceService } from "../services/FenceService";
+import { PlayerService } from "../services/PlayerService";
+import { HandbookHelper } from "./HandbookHelper";
+import { ItemHelper } from "./ItemHelper";
+import { PaymentHelper } from "./PaymentHelper";
+import { ProfileHelper } from "./ProfileHelper";
+export declare class TraderHelper {
+    protected logger: ILogger;
+    protected databaseServer: DatabaseServer;
+    protected saveServer: SaveServer;
+    protected profileHelper: ProfileHelper;
+    protected paymentHelper: PaymentHelper;
+    protected itemHelper: ItemHelper;
+    protected handbookHelper: HandbookHelper;
+    protected playerService: PlayerService;
+    protected fenceService: FenceService;
+    protected configServer: ConfigServer;
+    protected traderConfig: ITraderConfig;
+    constructor(logger: ILogger, databaseServer: DatabaseServer, saveServer: SaveServer, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, itemHelper: ItemHelper, handbookHelper: HandbookHelper, playerService: PlayerService, fenceService: FenceService, configServer: ConfigServer);
+    getTrader(traderID: string, sessionID: string): ITraderBase;
+    getTraderAssortsById(traderId: string): ITraderAssort;
+    /**
+     * Reset a trader back to its initial state as seen by a level 1 player
+     * Does NOT take into account different profile levels
+     * @param sessionID session id
+     * @param traderID trader id to reset
+     */
+    resetTrader(sessionID: string, traderID: string): void;
+    changeTraderDisplay(traderID: string, status: boolean, sessionID: string): void;
+    /**
+     * Get a list of items and their prices from player inventory that can be sold to a trader
+     * @param traderID trader id being traded with
+     * @param sessionID session id
+     * @returns IBarterScheme[][]
+     */
+    getPurchasesData(traderID: string, sessionID: string): Record<string, IBarterScheme[][]>;
+    /**
+     * Should item be skipped when selling to trader according to its sell categories and other checks
+     * @param pmcData
+     * @param item
+     * @param sellCategory
+     * @returns true if should NOT be sold to trader
+     */
+    protected isItemUnSellableToTrader(pmcData: IPmcData, item: Item, sellCategory: string[]): boolean;
+    /**
+     * Can this weapon be sold to a trader with its current durabiltiy level
+     * @param traderID
+     * @param item
+     * @returns boolean
+     */
+    protected isWeaponAndBelowTraderBuyDurability(traderID: string, item: Item): boolean;
+    /**
+     * Get the price of an item and all of its attached children
+     * Take into account bonuses/adjsutments e.g. discounts
+     * @param pmcData profile data
+     * @param item item to calculate price of
+     * @param buyPriceCoefficient
+     * @param fenceInfo fence data
+     * @param traderBase trader details
+     * @param currencyTpl Currency to get price as
+     * @returns price of item + children
+     */
+    protected getAdjustedItemPrice(pmcData: IPmcData, item: Item, buyPriceCoefficient: number, fenceInfo: FenceLevel, traderBase: ITraderBase, currencyTpl: string): number;
+    /**
+     * Get the raw price of item+child items from handbook without any modification
+     * @param pmcData profile data
+     * @param item item to calculate price of
+     * @returns price as number
+     */
+    protected getRawItemPrice(pmcData: IPmcData, item: Item): number;
+    protected getTraderDiscount(trader: ITraderBase, buyPriceCoefficient: number, fenceInfo: FenceLevel, traderID: string): number;
+    /**
+     * Calculate traders level based on exp amount and increment level if over threshold
+     * @param traderID trader to process
+     * @param sessionID session id
+     */
+    lvlUp(traderID: string, sessionID: string): void;
+    getTraderUpdateSeconds(traderId: string): number;
+    /**
+    * check if an item is allowed to be sold to a trader
+    * @param traderFilters array of allowed categories
+    * @param tplToCheck itemTpl of inventory
+    * @returns boolean
+    */
+    traderFilter(traderFilters: string[], tplToCheck: string): boolean;
+    getLoyaltyLevel(traderID: string, pmcData: IPmcData): LoyaltyLevel;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/UtilityHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/UtilityHelper.d.ts
new file mode 100644
index 0000000..5d9f482
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/UtilityHelper.d.ts
@@ -0,0 +1,3 @@
+export declare class UtilityHelper {
+    arrayIntersect<T>(a: T[], b: T[]): T[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/WeightedRandomHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/WeightedRandomHelper.d.ts
new file mode 100644
index 0000000..9aa0d29
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/WeightedRandomHelper.d.ts
@@ -0,0 +1,28 @@
+export declare class WeightedRandomHelper {
+    /**
+     * Gets a tplId from a weighted dictionary
+     * @param {tplId: weighting[]} itemArray
+     * @returns tplId
+     */
+    getWeightedInventoryItem(itemArray: {
+        [tplId: string]: unknown;
+    } | ArrayLike<unknown>): string;
+    /**
+     * Picks the random item based on its weight.
+     * The items with higher weight will be picked more often (with a higher probability).
+     *
+     * For example:
+     * - items = ['banana', 'orange', 'apple']
+     * - weights = [0, 0.2, 0.8]
+     * - weightedRandom(items, weights) in 80% of cases will return 'apple', in 20% of cases will return
+     * 'orange' and it will never return 'banana' (because probability of picking the banana is 0%)
+     *
+     * @param {any[]} items
+     * @param {number[]} weights
+     * @returns {{item: any, index: number}}
+     */
+    weightedRandom(items: string | any[], weights: string | any[]): {
+        item: any;
+        index: number;
+    };
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/ide/BleedingEdgeEntry.d.ts b/TypeScript/14AfterDBLoadHook/types/ide/BleedingEdgeEntry.d.ts
new file mode 100644
index 0000000..fded23a
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/ide/BleedingEdgeEntry.d.ts
@@ -0,0 +1 @@
+import "reflect-metadata";
diff --git a/TypeScript/14AfterDBLoadHook/types/ide/Compiler.d.ts b/TypeScript/14AfterDBLoadHook/types/ide/Compiler.d.ts
new file mode 100644
index 0000000..fded23a
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/ide/Compiler.d.ts
@@ -0,0 +1 @@
+import "reflect-metadata";
diff --git a/TypeScript/14AfterDBLoadHook/types/ide/DebugEntry.d.ts b/TypeScript/14AfterDBLoadHook/types/ide/DebugEntry.d.ts
new file mode 100644
index 0000000..fded23a
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/ide/DebugEntry.d.ts
@@ -0,0 +1 @@
+import "reflect-metadata";
diff --git a/TypeScript/14AfterDBLoadHook/types/ide/ReleaseEntry.d.ts b/TypeScript/14AfterDBLoadHook/types/ide/ReleaseEntry.d.ts
new file mode 100644
index 0000000..fded23a
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/ide/ReleaseEntry.d.ts
@@ -0,0 +1 @@
+import "reflect-metadata";
diff --git a/TypeScript/14AfterDBLoadHook/types/ide/TestEntry.d.ts b/TypeScript/14AfterDBLoadHook/types/ide/TestEntry.d.ts
new file mode 100644
index 0000000..fded23a
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/ide/TestEntry.d.ts
@@ -0,0 +1 @@
+import "reflect-metadata";
diff --git a/TypeScript/14AfterDBLoadHook/types/loaders/AfterDbModLoader.d.ts b/TypeScript/14AfterDBLoadHook/types/loaders/AfterDbModLoader.d.ts
new file mode 100644
index 0000000..a9fc286
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/loaders/AfterDbModLoader.d.ts
@@ -0,0 +1,11 @@
+import { DependencyContainer } from "tsyringe";
+import { OnLoad } from "../di/OnLoad";
+import { InitialModLoader } from "./InitialModLoader";
+export declare class AfterDbModLoader implements OnLoad {
+    protected initialModLoader: InitialModLoader;
+    constructor(initialModLoader: InitialModLoader);
+    onLoad(): void;
+    getRoute(): string;
+    getModPath(mod: string): string;
+    protected executeMods(container: DependencyContainer): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/loaders/BundleLoader.d.ts b/TypeScript/14AfterDBLoadHook/types/loaders/BundleLoader.d.ts
new file mode 100644
index 0000000..06ad698
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/loaders/BundleLoader.d.ts
@@ -0,0 +1,22 @@
+import { HttpServerHelper } from "../helpers/HttpServerHelper";
+import { JsonUtil } from "../utils/JsonUtil";
+import { VFS } from "../utils/VFS";
+declare class BundleInfo {
+    modPath: string;
+    key: string;
+    path: string;
+    filepath: string;
+    dependencyKeys: string[];
+    constructor(modpath: string, bundle: any, bundlePath: string, bundleFilepath: string);
+}
+export declare class BundleLoader {
+    protected httpServerHelper: HttpServerHelper;
+    protected vfs: VFS;
+    protected jsonUtil: JsonUtil;
+    protected bundles: Record<string, BundleInfo>;
+    constructor(httpServerHelper: HttpServerHelper, vfs: VFS, jsonUtil: JsonUtil);
+    getBundles(local: boolean): BundleInfo[];
+    getBundle(key: string, local: boolean): BundleInfo;
+    addBundles(modpath: string): void;
+}
+export {};
diff --git a/TypeScript/14AfterDBLoadHook/types/loaders/DelayedModLoader.d.ts b/TypeScript/14AfterDBLoadHook/types/loaders/DelayedModLoader.d.ts
new file mode 100644
index 0000000..2a05604
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/loaders/DelayedModLoader.d.ts
@@ -0,0 +1,21 @@
+import { DependencyContainer } from "tsyringe";
+import { HandbookController } from "../controllers/HandbookController";
+import { IModLoader } from "../models/spt/mod/IModLoader";
+import { ModCompilerService } from "../services/ModCompilerService";
+import { VFS } from "../utils/VFS";
+import { BundleLoader } from "./BundleLoader";
+import { InitialModLoader } from "./InitialModLoader";
+export declare class DelayedModLoader implements IModLoader {
+    protected bundleLoader: BundleLoader;
+    protected handbookController: HandbookController;
+    protected vfs: VFS;
+    protected modCompilerService: ModCompilerService;
+    protected initialModLoader: InitialModLoader;
+    constructor(bundleLoader: BundleLoader, handbookController: HandbookController, vfs: VFS, modCompilerService: ModCompilerService, initialModLoader: InitialModLoader);
+    getBundles(local: boolean): string;
+    getBundle(key: string, local: boolean): void;
+    getModPath(mod: string): string;
+    load(): void;
+    protected executeMods(container: DependencyContainer): void;
+    protected addBundles(): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/loaders/InitialModLoader.d.ts b/TypeScript/14AfterDBLoadHook/types/loaders/InitialModLoader.d.ts
new file mode 100644
index 0000000..9a99dcc
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/loaders/InitialModLoader.d.ts
@@ -0,0 +1,64 @@
+import { DependencyContainer } from "tsyringe";
+import { ICoreConfig } from "../models/spt/config/ICoreConfig";
+import { ModLoader } from "../models/spt/mod/IMod";
+import { IModLoader } from "../models/spt/mod/IModLoader";
+import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ConfigServer } from "../servers/ConfigServer";
+import { ModCompilerService } from "../services/ModCompilerService";
+import { JsonUtil } from "../utils/JsonUtil";
+import { VFS } from "../utils/VFS";
+import { BundleLoader } from "./BundleLoader";
+export declare class InitialModLoader implements IModLoader {
+    protected logger: ILogger;
+    protected vfs: VFS;
+    protected jsonUtil: JsonUtil;
+    protected modCompilerService: ModCompilerService;
+    protected bundleLoader: BundleLoader;
+    protected configServer: ConfigServer;
+    protected static container: DependencyContainer;
+    protected readonly basepath = "user/mods/";
+    protected imported: Record<string, ModLoader.IMod>;
+    protected akiConfig: ICoreConfig;
+    constructor(logger: ILogger, vfs: VFS, jsonUtil: JsonUtil, modCompilerService: ModCompilerService, bundleLoader: BundleLoader, configServer: ConfigServer);
+    load(container: DependencyContainer): Promise<void>;
+    getBundles(local: boolean): string;
+    getBundle(key: string, local: boolean): void;
+    /**
+     * Returns a list of mods with preserved load order
+     * @returns Array of mod names in load order
+     */
+    getImportedModsNames(): string[];
+    getModPath(mod: string): string;
+    protected importClass(name: string, filepath: string, container: DependencyContainer): void;
+    protected importMods(): Promise<void>;
+    /**
+     *
+     * @param mods Get an array of broken/invalid mods by name
+     * @returns Mod names array
+     */
+    protected getBrokenMods(mods: string[]): string[];
+    /**
+     * Get packageJson data for mods
+     * @param mods mods to get packageJson for
+     * @returns dictionary <modName - package.json>
+     */
+    protected getModsPackageData(mods: string[]): Record<string, IPackageJsonData>;
+    /**
+     * Does mod have "delayedLoad(" string in its entry class
+     * @param modFolderName folder name
+     * @param modToValidate package.json details
+     * @returns boolean
+     */
+    protected isModSpt300Compatible(modFolderName: string, modToValidate: IPackageJsonData): boolean;
+    protected isModCombatibleWithAki(mod: IPackageJsonData): boolean;
+    protected executeMods(container: DependencyContainer): void;
+    sortModsLoadOrder(): string[];
+    protected addMod(mod: string): Promise<void>;
+    protected areModDependenciesFulfilled(pkg: IPackageJsonData, loadedMods: Record<string, IPackageJsonData>): boolean;
+    protected isModCompatible(mod: IPackageJsonData, loadedMods: Record<string, IPackageJsonData>): boolean;
+    protected validMod(mod: string): boolean;
+    protected getLoadOrderRecursive(mod: string, result: Record<string, string>, visited: Record<string, string>): void;
+    protected getLoadOrder(mods: Record<string, ModLoader.IMod>): Record<string, string>;
+    getContainer(): DependencyContainer;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/bot/IGenerateBotsRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/bot/IGenerateBotsRequestData.d.ts
new file mode 100644
index 0000000..c49cef7
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/bot/IGenerateBotsRequestData.d.ts
@@ -0,0 +1,8 @@
+export interface IGenerateBotsRequestData {
+    conditions: Condition[];
+}
+export interface Condition {
+    Role: string;
+    Limit: number;
+    Difficulty: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/common/IEmptyRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/common/IEmptyRequestData.d.ts
new file mode 100644
index 0000000..284d16e
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/common/IEmptyRequestData.d.ts
@@ -0,0 +1,2 @@
+export interface IEmptyRequestData {
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/common/IGlobals.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/common/IGlobals.d.ts
new file mode 100644
index 0000000..456895c
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/common/IGlobals.d.ts
@@ -0,0 +1,1176 @@
+import { Item } from "./tables/IItem";
+export interface IGlobals {
+    time: number;
+    config: Config;
+    bot_presets: BotPreset[];
+    BotWeaponScatterings: BotWeaponScattering[];
+    ItemPresets: Record<string, Preset>;
+}
+export interface Config {
+    content: Content;
+    AimPunchMagnitude: number;
+    WeaponSkillProgressRate: number;
+    SkillAtrophy: boolean;
+    exp: Exp;
+    t_base_looting: number;
+    t_base_lockpicking: number;
+    armor: Armor;
+    SessionsToShowHotKeys: number;
+    MaxBotsAliveOnMap: number;
+    SavagePlayCooldown: number;
+    SavagePlayCooldownNdaFree: number;
+    MarksmanAccuracy: number;
+    SavagePlayCooldownDevelop: number;
+    TODSkyDate: string;
+    Mastering: Mastering[];
+    GlobalItemPriceModifier: number;
+    TradingUnlimitedItems: boolean;
+    MaxLoyaltyLevelForAll: boolean;
+    GlobalLootChanceModifier: number;
+    TimeBeforeDeploy: number;
+    TimeBeforeDeployLocal: number;
+    LoadTimeSpeedProgress: number;
+    BaseLoadTime: number;
+    BaseUnloadTime: number;
+    BaseCheckTime: number;
+    Customization: Customization;
+    UncheckOnShot: boolean;
+    BotsEnabled: boolean;
+    ArmorMaterials: ArmorMaterials;
+    LegsOverdamage: number;
+    HandsOverdamage: number;
+    StomachOverdamage: number;
+    Health: Health;
+    rating: Rating;
+    tournament: Tournament;
+    RagFair: RagFair;
+    handbook: Handbook;
+    FractureCausedByFalling: Probability;
+    FractureCausedByBulletHit: Probability;
+    WAVE_COEF_LOW: number;
+    WAVE_COEF_MID: number;
+    WAVE_COEF_HIGH: number;
+    WAVE_COEF_HORDE: number;
+    Stamina: Stamina;
+    StaminaRestoration: StaminaRestoration;
+    StaminaDrain: StaminaDrain;
+    RequirementReferences: RequirementReferences;
+    RepairKitSettings: RepairKitSettings;
+    RestrictionsInRaid: RestrictionsInRaid[];
+    SkillMinEffectiveness: number;
+    SkillFatiguePerPoint: number;
+    SkillFreshEffectiveness: number;
+    SkillFreshPoints: number;
+    SkillPointsBeforeFatigue: number;
+    SkillFatigueReset: number;
+    DiscardLimitsEnabled: boolean;
+    EventType: string[];
+    WalkSpeed: xyz;
+    SprintSpeed: xyz;
+    SkillEnduranceWeightThreshold: number;
+    TeamSearchingTimeout: number;
+    Insurance: Insurance;
+    SkillExpPerLevel: number;
+    GameSearchingTimeout: number;
+    WallContusionAbsorption: xyz;
+    SkillsSettings: SkillsSettings;
+    AzimuthPanelShowsPlayerOrientation: boolean;
+    Aiming: Aiming;
+    Malfunction: Malfunction;
+    Overheat: Overheat;
+    FenceSettings: FenceSettings;
+    TestValue: number;
+    Inertia: Inertia;
+    Ballistic: Ballistic;
+}
+export interface Content {
+    ip: string;
+    port: number;
+    root: string;
+}
+export interface Exp {
+    heal: Heal;
+    match_end: MatchEnd;
+    kill: Kill;
+    level: Level;
+    loot_attempts: LootAttempt[];
+    expForLockedDoorOpen: number;
+    expForLockedDoorBreach: number;
+    triggerMult: number;
+}
+export interface Heal {
+    expForHeal: number;
+    expForHydration: number;
+    expForEnergy: number;
+}
+export interface MatchEnd {
+    README: string;
+    survived_exp_requirement: number;
+    survived_seconds_requirement: number;
+    survived_exp_reward: number;
+    mia_exp_reward: number;
+    runner_exp_reward: number;
+    leftMult: number;
+    miaMult: number;
+    survivedMult: number;
+    runnerMult: number;
+    killedMult: number;
+}
+export interface Kill {
+    combo: Combo[];
+    victimLevelExp: number;
+    headShotMult: number;
+    expOnDamageAllHealth: number;
+    longShotDistance: number;
+    bloodLossToLitre: number;
+    victimBotLevelExp: number;
+}
+export interface Combo {
+    percent: number;
+}
+export interface Level {
+    exp_table: ExpTable[];
+    trade_level: number;
+    savage_level: number;
+    clan_level: number;
+    mastering1: number;
+    mastering2: number;
+}
+export interface ExpTable {
+    exp: number;
+}
+export interface LootAttempt {
+    k_exp: number;
+}
+export interface Armor {
+    class: Class[];
+}
+export interface Class {
+    resistance: number;
+}
+export interface Mastering {
+    Name: string;
+    Templates: string[];
+    Level2: number;
+    Level3: number;
+}
+export interface Customization {
+    SavageHead: SavageHead;
+    SavageBody: SavageBody;
+    SavageFeet: SavageFeet;
+    CustomizationVoice: CustomizationVoice[];
+    BodyParts: BodyParts;
+}
+export interface SavageHead {
+    wild_head_1: WildHead;
+    wild_head_2: WildHead;
+    wild_head_3: WildHead;
+    Wild_Dealmaker_head: WildHead;
+    Wild_Killa_head: WildHead;
+    bear_head: WildHead;
+    bear_head_1: WildHead;
+    usec_head_1: WildHead;
+    Head_BOSS_Glukhar: WildHead;
+    Wild_Head_nonMesh: WildHead;
+    Head_BOSS_Sanitar: WildHead;
+    wild_head_drozd: WildHead;
+    wild_head_misha: WildHead;
+    head_cultist_01: WildHead;
+    head_cultist_02: WildHead;
+    head_cultist_03: WildHead;
+    DefaultUsecHead: WildHead;
+    usec_head_3: WildHead;
+    usec_head_4: WildHead;
+    usec_head_5: WildHead;
+}
+export interface WildHead {
+    head: string;
+    isNotRandom: boolean;
+    NotRandom: boolean;
+}
+export interface SavageBody {
+    wild_body: WildBody;
+    wild_body_1: WildBody;
+    wild_body_2: WildBody;
+    wild_body_3: WildBody;
+    Wild_Dealmaker_body: WildBody;
+    wild_security_body_1: WildBody;
+    wild_security_body_2: WildBody;
+    wild_Killa_body: WildBody;
+    wild_pmcBot_body: WildBody;
+    wild_Shturman_body: WildBody;
+    wild_Gluhar_body: WildBody;
+    Tshirt_security_TshirtTatu_01: WildBody;
+    Tshirt_security_TshirtTatu_02: WildBody;
+    Top_security_Husky: WildBody;
+    Top_security_Gorka4: WildBody;
+    scav_kit_upper_meteor: WildBody;
+    wild_body_russia1: WildBody;
+    Top_BOSS_Sanitar: WildBody;
+    wild_body_motocross: WildBody;
+    top_cultist_01: WildBody;
+    top_cultist_02: WildBody;
+    wild_body_rainparka: WildBody;
+    wild_body_underarmour: WildBody;
+    top_boss_tagilla: WildBody;
+    DefaultUsecBody: WildBody;
+    usec_upper_acu: WildBody;
+    usec_upper_commando: WildBody;
+    usec_upper_aggressor: WildBody;
+    usec_upper_hoody: WildBody;
+    usec_upper_pcuironsight: WildBody;
+    usec_top_beltstaff: WildBody;
+    usec_upper_flexion: WildBody;
+    usec_upper_tier3: WildBody;
+    usec_upper_pcsmulticam: WildBody;
+    usec_upper_tier_2: WildBody;
+    usec_upper_infiltrator: WildBody;
+    user_upper_NightPatrol: WildBody;
+    wild_body_bomber: WildBody;
+    wild_top_yellowcoat: WildBody;
+}
+export interface WildBody {
+    body: string;
+    hands: string;
+    isNotRandom: boolean;
+}
+export interface SavageFeet {
+    wild_feet: WildFeet;
+    wild_feet_1: WildFeet;
+    wild_feet_2: WildFeet;
+    Wild_Dealmaker_feet: WildFeet;
+    wild_security_feet_1: WildFeet;
+    Wild_Killa_feet: WildFeet;
+    wild_pmcBot_feet: WildFeet;
+    Pants_BOSS_Glukhar: WildFeet;
+    Pants_BOSS_Shturman: WildFeet;
+    Pants_security_Gorka4: WildFeet;
+    Pants_security_Flora: WildFeet;
+    scav_kit_lower_sklon: WildFeet;
+    Pants_BOSS_Sanitar: WildFeet;
+    wild_feet_sweatpants: WildFeet;
+    wild_feet_wasatch: WildFeet;
+    wild_feet_slimPants: WildFeet;
+    pants_cultist_01: WildFeet;
+    pants_cultist_02: WildFeet;
+    wild_feet_scavelite_taclite: WildFeet;
+    pants_boss_tagilla: WildFeet;
+    wild_feet_bomber: WildFeet;
+    wild_pants_yellowcoat: WildFeet;
+}
+export interface WildFeet {
+    feet: string;
+    isNotRandom: boolean;
+    NotRandom: boolean;
+}
+export interface CustomizationVoice {
+    voice: string;
+    side: string[];
+    isNotRandom: boolean;
+}
+export interface BodyParts {
+    Head: string;
+    Body: string;
+    Feet: string;
+    Hands: string;
+}
+export interface ArmorMaterials {
+    UHMWPE: ArmorType;
+    Aramid: ArmorType;
+    Combined: ArmorType;
+    Titan: ArmorType;
+    Aluminium: ArmorType;
+    ArmoredSteel: ArmorType;
+    Ceramic: ArmorType;
+    Glass: ArmorType;
+}
+export interface ArmorType {
+    Destructibility: number;
+    MinRepairDegradation: number;
+    MaxRepairDegradation: number;
+    ExplosionDestructibility: number;
+    MinRepairKitDegradation: number;
+    MaxRepairKitDegradation: number;
+}
+export interface Health {
+    Falling: Falling;
+    Effects: Effects;
+    HealPrice: HealPrice;
+    ProfileHealthSettings: ProfileHealthSettings;
+}
+export interface Falling {
+    DamagePerMeter: number;
+    SafeHeight: number;
+}
+export interface Effects {
+    Existence: Existence;
+    Dehydration: Dehydration;
+    BreakPart: BreakPart;
+    Contusion: Contusion;
+    Disorientation: Disorientation;
+    Exhaustion: Exhaustion;
+    LowEdgeHealth: LowEdgeHealth;
+    RadExposure: RadExposure;
+    Stun: Stun;
+    Intoxication: Intoxication;
+    Regeneration: Regeneration;
+    Wound: Wound;
+    Berserk: Berserk;
+    Flash: Flash;
+    MedEffect: MedEffect;
+    Pain: Pain;
+    PainKiller: PainKiller;
+    SandingScreen: SandingScreen;
+    Stimulator: Stimulator;
+    Tremor: Tremor;
+    ChronicStaminaFatigue: ChronicStaminaFatigue;
+    Fracture: Fracture2;
+    HeavyBleeding: HeavyBleeding2;
+    LightBleeding: LightBleeding2;
+    BodyTemperature: BodyTemperature;
+}
+export interface Existence {
+    EnergyLoopTime: number;
+    HydrationLoopTime: number;
+    EnergyDamage: number;
+    HydrationDamage: number;
+    DestroyedStomachEnergyTimeFactor: number;
+    DestroyedStomachHydrationTimeFactor: number;
+}
+export interface Dehydration {
+    DefaultDelay: number;
+    DefaultResidueTime: number;
+    BleedingHealth: number;
+    BleedingLoopTime: number;
+    BleedingLifeTime: number;
+    DamageOnStrongDehydration: number;
+    StrongDehydrationLoopTime: number;
+}
+export interface BreakPart {
+    DefaultDelay: number;
+    DefaultResidueTime: number;
+    HealExperience: number;
+    OfflineDurationMin: number;
+    OfflineDurationMax: number;
+    RemovePrice: number;
+    RemovedAfterDeath: boolean;
+    BulletHitProbability: Probability;
+    FallingProbability: Probability;
+}
+export interface Contusion {
+    Dummy: number;
+}
+export interface Disorientation {
+    Dummy: number;
+}
+export interface Exhaustion {
+    DefaultDelay: number;
+    DefaultResidueTime: number;
+    Damage: number;
+    DamageLoopTime: number;
+}
+export interface LowEdgeHealth {
+    DefaultDelay: number;
+    DefaultResidueTime: number;
+    StartCommonHealth: number;
+}
+export interface RadExposure {
+    Damage: number;
+    DamageLoopTime: number;
+}
+export interface Stun {
+    Dummy: number;
+}
+export interface Intoxication {
+    DefaultDelay: number;
+    DefaultResidueTime: number;
+    DamageHealth: number;
+    HealthLoopTime: number;
+    OfflineDurationMin: number;
+    OfflineDurationMax: number;
+    RemovedAfterDeath: boolean;
+    HealExperience: number;
+    RemovePrice: number;
+}
+export interface Regeneration {
+    LoopTime: number;
+    MinimumHealthPercentage: number;
+    Energy: number;
+    Hydration: number;
+    BodyHealth: BodyHealth;
+    Influences: Influences;
+}
+export interface BodyHealth {
+    Head: BodyHealthValue;
+    Chest: BodyHealthValue;
+    Stomach: BodyHealthValue;
+    LeftArm: BodyHealthValue;
+    RightArm: BodyHealthValue;
+    LeftLeg: BodyHealthValue;
+    RightLeg: BodyHealthValue;
+}
+export interface BodyHealthValue {
+    Value: number;
+}
+export interface Influences {
+    LightBleeding: Influence;
+    HeavyBleeding: Influence;
+    Fracture: Influence;
+    RadExposure: Influence;
+    Intoxication: Influence;
+}
+export interface Influence {
+    HealthSlowDownPercentage: number;
+    EnergySlowDownPercentage: number;
+    HydrationSlowDownPercentage: number;
+}
+export interface Wound {
+    WorkingTime: number;
+    ThresholdMin: number;
+    ThresholdMax: number;
+}
+export interface Berserk {
+    DefaultDelay: number;
+    WorkingTime: number;
+    DefaultResidueTime: number;
+}
+export interface Flash {
+    Dummy: number;
+}
+export interface MedEffect {
+    LoopTime: number;
+    StartDelay: number;
+    DrinkStartDelay: number;
+    FoodStartDelay: number;
+    DrugsStartDelay: number;
+    MedKitStartDelay: number;
+    MedicalStartDelay: number;
+    StimulatorStartDelay: number;
+}
+export interface Pain {
+    TremorDelay: number;
+    HealExperience: number;
+}
+export interface PainKiller {
+    Dummy: number;
+}
+export interface SandingScreen {
+    Dummy: number;
+}
+export interface Stimulator {
+    BuffLoopTime: number;
+    Buffs: Buffs;
+}
+export interface Buffs {
+    BuffsSJ1TGLabs: Buff[];
+    BuffsSJ6TGLabs: Buff[];
+    BuffsPropital: Buff[];
+    BuffsZagustin: Buff[];
+    BuffseTGchange: Buff[];
+    BuffsAdrenaline: Buff[];
+    BuffsGoldenStarBalm: Buff[];
+    Buffs_drink_aquamari: Buff[];
+    Buffs_drink_maxenergy: Buff[];
+    Buffs_drink_milk: Buff[];
+    Buffs_drink_tarcola: Buff[];
+    Buffs_drink_hotrod: Buff[];
+    Buffs_drink_juice_army: Buff[];
+    Buffs_drink_water: Buff[];
+    Buffs_food_borodinskiye: Buff[];
+    Buffs_food_condensed_milk: Buff[];
+    Buffs_food_emelya: Buff[];
+    Buffs_food_mayonez: Buff[];
+    Buffs_food_mre: Buff[];
+    Buffs_food_sugar: Buff[];
+    Buffs_drink_vodka: Buff[];
+    Buffs_drink_jack: Buff[];
+    Buffs_drink_moonshine: Buff[];
+    Buffs_drink_purewater: Buff[];
+    Buffs_3bTG: Buff[];
+    Buffs_AHF1M: Buff[];
+    Buffs_L1: Buff[];
+    Buffs_MULE: Buff[];
+    Buffs_Meldonin: Buff[];
+    Buffs_Obdolbos: Buff[];
+    Buffs_P22: Buff[];
+    Buffs_KultistsToxin: Buff[];
+    Buffs_BodyTemperature: Buff[];
+    Buffs_Antidote: Buff[];
+    Buffs_melee_bleed: Buff[];
+    Buffs_melee_blunt: Buff[];
+    Buffs_hultafors: Buff[];
+    Buffs_drink_vodka_BAD: Buff[];
+    Buffs_food_alyonka: Buff[];
+    Buffs_food_slippers: Buff[];
+    Buffs_knife: Buff[];
+}
+export interface Buff {
+    BuffType: string;
+    Chance: number;
+    Delay: number;
+    Duration: number;
+    Value: number;
+    AbsoluteValue: boolean;
+    SkillName: string;
+}
+export interface Tremor {
+    DefaultDelay: number;
+    DefaultResidueTime: number;
+}
+export interface ChronicStaminaFatigue {
+    EnergyRate: number;
+    WorkingTime: number;
+    TicksEvery: number;
+    EnergyRatePerStack: number;
+}
+export interface Fracture2 {
+    DefaultDelay: number;
+    DefaultResidueTime: number;
+    HealExperience: number;
+    OfflineDurationMin: number;
+    OfflineDurationMax: number;
+    RemovePrice: number;
+    RemovedAfterDeath: boolean;
+    BulletHitProbability: Probability;
+    FallingProbability: Probability;
+}
+export interface HeavyBleeding2 {
+    DefaultDelay: number;
+    DefaultResidueTime: number;
+    DamageEnergy: number;
+    DamageHealth: number;
+    EnergyLoopTime: number;
+    HealthLoopTime: number;
+    DamageHealthDehydrated: number;
+    HealthLoopTimeDehydrated: number;
+    LifeTimeDehydrated: number;
+    EliteVitalityDuration: number;
+    HealExperience: number;
+    OfflineDurationMin: number;
+    OfflineDurationMax: number;
+    RemovePrice: number;
+    RemovedAfterDeath: boolean;
+    Probability: Probability;
+}
+export interface Probability {
+    FunctionType: string;
+    K: number;
+    B: number;
+    Threshold: number;
+}
+export interface LightBleeding2 {
+    DefaultDelay: number;
+    DefaultResidueTime: number;
+    DamageEnergy: number;
+    DamageHealth: number;
+    EnergyLoopTime: number;
+    HealthLoopTime: number;
+    DamageHealthDehydrated: number;
+    HealthLoopTimeDehydrated: number;
+    LifeTimeDehydrated: number;
+    EliteVitalityDuration: number;
+    HealExperience: number;
+    OfflineDurationMin: number;
+    OfflineDurationMax: number;
+    RemovePrice: number;
+    RemovedAfterDeath: boolean;
+    Probability: Probability;
+}
+export interface BodyTemperature {
+    DefaultBuildUpTime: number;
+    DefaultResidueTime: number;
+    LoopTime: number;
+}
+export interface HealPrice {
+    HealthPointPrice: number;
+    HydrationPointPrice: number;
+    EnergyPointPrice: number;
+    TrialLevels: number;
+    TrialRaids: number;
+}
+export interface ProfileHealthSettings {
+    BodyPartsSettings: BodyPartsSettings;
+    HealthFactorsSettings: HealthFactorsSettings;
+}
+export interface BodyPartsSettings {
+    Head: BodyPartsSetting;
+    Chest: BodyPartsSetting;
+    Stomach: BodyPartsSetting;
+    LeftArm: BodyPartsSetting;
+    RightArm: BodyPartsSetting;
+    LeftLeg: BodyPartsSetting;
+    RightLeg: BodyPartsSetting;
+}
+export interface BodyPartsSetting {
+    Minimum: number;
+    Maximum: number;
+    Default: number;
+    OverDamageReceivedMultiplier: number;
+}
+export interface HealthFactorsSettings {
+    Energy: HealthFactorSetting;
+    Hydration: HealthFactorSetting;
+    Temperature: HealthFactorSetting;
+    Poisoning: HealthFactorSetting;
+    Radiation: HealthFactorSetting;
+}
+export interface HealthFactorSetting {
+    Minimum: number;
+    Maximum: number;
+    Default: number;
+}
+export interface Rating {
+    levelRequired: number;
+    limit: number;
+    categories: Categories;
+}
+export interface Categories {
+    experience: boolean;
+    kd: boolean;
+    surviveRatio: boolean;
+    avgEarnings: boolean;
+    kills: boolean;
+    raidCount: boolean;
+    longestShot: boolean;
+    timeOnline: boolean;
+    inventoryFullCost: boolean;
+    ragFairStanding: boolean;
+}
+export interface Tournament {
+    categories: Categories2;
+    limit: number;
+    levelRequired: number;
+}
+export interface Categories2 {
+    dogtags: boolean;
+}
+export interface RagFair {
+    enabled: boolean;
+    priceStabilizerEnabled: boolean;
+    includePveTraderSales: boolean;
+    priceStabilizerStartIntervalInHours: number;
+    minUserLevel: number;
+    communityTax: number;
+    communityItemTax: number;
+    communityRequirementTax: number;
+    offerPriorityCost: number;
+    offerDurationTimeInHour: number;
+    offerDurationTimeInHourAfterRemove: number;
+    priorityTimeModifier: number;
+    maxRenewOfferTimeInHour: number;
+    renewPricePerHour: number;
+    maxActiveOfferCount: MaxActiveOfferCount[];
+    balancerRemovePriceCoefficient: number;
+    balancerMinPriceCount: number;
+    balancerAveragePriceCoefficient: number;
+    delaySinceOfferAdd: number;
+    uniqueBuyerTimeoutInDays: number;
+    ratingSumForIncrease: number;
+    ratingIncreaseCount: number;
+    ratingSumForDecrease: number;
+    ratingDecreaseCount: number;
+    maxSumForIncreaseRatingPerOneSale: number;
+    maxSumForDecreaseRatingPerOneSale: number;
+    maxSumForRarity: MaxSumForRarity;
+    ChangePriceCoef: number;
+    balancerUserItemSaleCooldownEnabled: boolean;
+    balancerUserItemSaleCooldown: number;
+    youSellOfferMaxStorageTimeInHour: number;
+    yourOfferDidNotSellMaxStorageTimeInHour: number;
+    isOnlyFoundInRaidAllowed: boolean;
+    sellInOnePiece: number;
+}
+export interface MaxActiveOfferCount {
+    from: number;
+    to: number;
+    count: number;
+}
+export interface MaxSumForRarity {
+    Common: RarityMaxSum;
+    Rare: RarityMaxSum;
+    Superrare: RarityMaxSum;
+    Not_exist: RarityMaxSum;
+}
+export interface RarityMaxSum {
+    value: number;
+}
+export interface Handbook {
+    defaultCategory: string;
+}
+export interface Stamina {
+    Capacity: number;
+    SprintDrainRate: number;
+    BaseRestorationRate: number;
+    JumpConsumption: number;
+    GrenadeHighThrow: number;
+    GrenadeLowThrow: number;
+    AimDrainRate: number;
+    AimRangeFinderDrainRate: number;
+    OxygenCapacity: number;
+    OxygenRestoration: number;
+    WalkOverweightLimits: xyz;
+    BaseOverweightLimits: xyz;
+    SprintOverweightLimits: xyz;
+    WalkSpeedOverweightLimits: xyz;
+    CrouchConsumption: xyz;
+    WalkConsumption: xyz;
+    StandupConsumption: xyz;
+    TransitionSpeed: xyz;
+    SprintAccelerationLowerLimit: number;
+    SprintSpeedLowerLimit: number;
+    SprintSensitivityLowerLimit: number;
+    AimConsumptionByPose: xyz;
+    RestorationMultiplierByPose: xyz;
+    OverweightConsumptionByPose: xyz;
+    AimingSpeedMultiplier: number;
+    WalkVisualEffectMultiplier: number;
+    HandsCapacity: number;
+    HandsRestoration: number;
+    ProneConsumption: number;
+    BaseHoldBreathConsumption: number;
+    SoundRadius: xyz;
+    ExhaustedMeleeSpeed: number;
+    FatigueRestorationRate: number;
+    FatigueAmountToCreateEffect: number;
+    ExhaustedMeleeDamageMultiplier: number;
+    FallDamageMultiplier: number;
+    SafeHeightOverweight: number;
+    SitToStandConsumption: number;
+    StaminaExhaustionCausesJiggle: boolean;
+    StaminaExhaustionStartsBreathSound: boolean;
+    StaminaExhaustionRocksCamera: boolean;
+    HoldBreathStaminaMultiplier: xyz;
+    PoseLevelIncreaseSpeed: xyz;
+    PoseLevelDecreaseSpeed: xyz;
+    PoseLevelConsumptionPerNotch: xyz;
+}
+export interface StaminaRestoration {
+    LowerLeftPoint: number;
+    LowerRightPoint: number;
+    LeftPlatoPoint: number;
+    RightPlatoPoint: number;
+    RightLimit: number;
+    ZeroValue: number;
+}
+export interface StaminaDrain {
+    LowerLeftPoint: number;
+    LowerRightPoint: number;
+    LeftPlatoPoint: number;
+    RightPlatoPoint: number;
+    RightLimit: number;
+    ZeroValue: number;
+}
+export interface RequirementReferences {
+    Alpinist: Alpinist[];
+}
+export interface Alpinist {
+    Requirement: string;
+    Id: string;
+    Count: number;
+    RequiredSlot: string;
+    RequirementTip: string;
+}
+export interface RestrictionsInRaid {
+    TemplateId: string;
+    Value: number;
+}
+export interface Insurance {
+    MaxStorageTimeInHour: number;
+}
+export interface SkillsSettings {
+    SkillProgressRate: number;
+    WeaponSkillProgressRate: number;
+    WeaponSkillRecoilBonusPerLevel: number;
+    HideoutManagement: HideoutManagement;
+    Crafting: Crafting;
+    Metabolism: Metabolism;
+    Immunity: Immunity;
+    Endurance: Endurance;
+    Strength: Strength;
+    Vitality: Vitality;
+    Health: Health2;
+    StressResistance: StressResistance;
+    Throwing: Throwing;
+    RecoilControl: RecoilControl;
+    Pistol: WeaponSkills;
+    Revolver: WeaponSkills;
+    SMG: any[];
+    Assault: WeaponSkills;
+    Shotgun: WeaponSkills;
+    Sniper: WeaponSkills;
+    LMG: any[];
+    HMG: any[];
+    Launcher: any[];
+    AttachedLauncher: any[];
+    Melee: any[];
+    DMR: WeaponSkills;
+    BearAssaultoperations: any[];
+    BearAuthority: any[];
+    BearAksystems: any[];
+    BearHeavycaliber: any[];
+    BearRawpower: any[];
+    UsecArsystems: any[];
+    UsecDeepweaponmodding_Settings: any[];
+    UsecLongrangeoptics_Settings: any[];
+    UsecNegotiations: any[];
+    UsecTactics: any[];
+    BotReload: any[];
+    CovertMovement: CovertMovement;
+    FieldMedicine: any[];
+    Search: Search;
+    Sniping: any[];
+    ProneMovement: any[];
+    FirstAid: any[];
+    LightVests: ArmorSkills;
+    HeavyVests: ArmorSkills;
+    WeaponModding: any[];
+    AdvancedModding: any[];
+    NightOps: any[];
+    SilentOps: any[];
+    Lockpicking: any[];
+    WeaponTreatment: WeaponTreatment;
+    MagDrills: MagDrills;
+    Freetrading: any[];
+    Auctions: any[];
+    Cleanoperations: any[];
+    Barter: any[];
+    Shadowconnections: any[];
+    Taskperformance: any[];
+    Perception: Perception;
+    Intellect: Intellect;
+    Attention: Attention;
+    Charisma: Charisma;
+    Memory: Memory;
+    Surgery: Surgery;
+    AimDrills: AimDrills;
+    BotSound: any[];
+    TroubleShooting: TroubleShooting;
+}
+export interface ArmorSkills {
+    WearAmountRepairLVestsReducePerLevel: number;
+    WearChanceRepairLVestsReduceEliteLevel: number;
+}
+export interface HideoutManagement {
+    SkillPointsPerAreaUpgrade: number;
+    SkillPointsPerCraft: number;
+    ConsumptionReductionPerLevel: number;
+    SkillBoostPercent: number;
+    SkillPointsRate: SkillPointsRate;
+    EliteSlots: EliteSlots;
+}
+export interface SkillPointsRate {
+    Generator: Generator;
+    AirFilteringUnit: SkillPointRate;
+    WaterCollector: SkillPointRate;
+    SolarPower: SkillPointRate;
+}
+export interface SkillPointRate {
+    ResourceSpent: number;
+    PointsGained: number;
+}
+export interface EliteSlots {
+    Generator: EliteSlot;
+    AirFilteringUnit: EliteSlot;
+    WaterCollector: EliteSlot;
+    BitcoinFarm: EliteSlot;
+}
+export interface EliteSlot {
+    Slots: number;
+    Container: number;
+}
+export interface Crafting {
+    PointsPerCraftingCycle: number;
+    CraftingCycleHours: number;
+    PointsPerUniqueCraftCycle: number;
+    UniqueCraftsPerCycle: number;
+    CraftTimeReductionPerLevel: number;
+    ProductionTimeReductionPerLevel: number;
+    EliteExtraProductions: number;
+    CraftingPointsToInteligence: number;
+}
+export interface Metabolism {
+    HydrationRecoveryRate: number;
+    EnergyRecoveryRate: number;
+    IncreasePositiveEffectDurationRate: number;
+    DecreaseNegativeEffectDurationRate: number;
+    DecreasePoisonDurationRate: number;
+}
+export interface Immunity {
+    ImmunityMiscEffects: number;
+    ImmunityPoisonBuff: number;
+    ImmunityPainKiller: number;
+    HealthNegativeEffect: number;
+    StimulatorNegativeBuff: number;
+}
+export interface Endurance {
+    MovementAction: number;
+    SprintAction: number;
+    GainPerFatigueStack: number;
+}
+export interface Strength {
+    SprintActionMin: number;
+    SprintActionMax: number;
+    MovementActionMin: number;
+    MovementActionMax: number;
+    PushUpMin: number;
+    PushUpMax: number;
+    FistfightAction: number;
+    ThrowAction: number;
+}
+export interface Vitality {
+    DamageTakenAction: number;
+    HealthNegativeEffect: number;
+}
+export interface Health2 {
+    SkillProgress: number;
+}
+export interface StressResistance {
+    HealthNegativeEffect: number;
+    LowHPDuration: number;
+}
+export interface Throwing {
+    ThrowAction: number;
+}
+export interface RecoilControl {
+    RecoilAction: number;
+    RecoilBonusPerLevel: number;
+}
+export interface WeaponSkills {
+    WeaponReloadAction: number;
+    WeaponShotAction: number;
+    WeaponFixAction: number;
+    WeaponChamberAction: number;
+}
+export interface CovertMovement {
+    MovementAction: number;
+}
+export interface Search {
+    SearchAction: number;
+    FindAction: number;
+}
+export interface WeaponTreatment {
+    DurLossReducePerLevel: number;
+    SkillPointsPerRepair: number;
+    Filter: any[];
+    WearAmountRepairGunsReducePerLevel: number;
+    WearChanceRepairGunsReduceEliteLevel: number;
+}
+export interface MagDrills {
+    RaidLoadedAmmoAction: number;
+    RaidUnloadedAmmoAction: number;
+    MagazineCheckAction: number;
+}
+export interface Perception {
+    OnlineAction: number;
+    UniqueLoot: number;
+}
+export interface Intellect {
+    ExamineAction: number;
+    SkillProgress: number;
+    RepairAction: number;
+    WearAmountReducePerLevel: number;
+    WearChanceReduceEliteLevel: number;
+    RepairPointsCostReduction: number;
+}
+export interface Attention {
+    ExamineWithInstruction: number;
+    FindActionFalse: number;
+    FindActionTrue: number;
+}
+export interface Charisma {
+    SkillProgressInt: number;
+    SkillProgressAtn: number;
+    SkillProgressPer: number;
+}
+export interface Memory {
+    AnySkillUp: number;
+    SkillProgress: number;
+}
+export interface Surgery {
+    SurgeryAction: number;
+    SkillProgress: number;
+}
+export interface AimDrills {
+    WeaponShotAction: number;
+}
+export interface TroubleShooting {
+    MalfRepairSpeedBonusPerLevel: number;
+    SkillPointsPerMalfFix: number;
+    EliteDurabilityChanceReduceMult: number;
+    EliteAmmoChanceReduceMult: number;
+    EliteMagChanceReduceMult: number;
+}
+export interface Aiming {
+    ProceduralIntensityByPose: xyz;
+    AimProceduralIntensity: number;
+    HeavyWeight: number;
+    LightWeight: number;
+    MaxTimeHeavy: number;
+    MinTimeHeavy: number;
+    MaxTimeLight: number;
+    MinTimeLight: number;
+    RecoilScaling: number;
+    RecoilDamping: number;
+    CameraSnapGlobalMult: number;
+    RecoilXIntensityByPose: xyz;
+    RecoilYIntensityByPose: xyz;
+    RecoilZIntensityByPose: xyz;
+    RecoilCrank: boolean;
+    RecoilHandDamping: number;
+    RecoilConvergenceMult: number;
+    RecoilVertBonus: number;
+    RecoilBackBonus: number;
+}
+export interface Malfunction {
+    AmmoMalfChanceMult: number;
+    MagazineMalfChanceMult: number;
+    MalfRepairHardSlideMult: number;
+    MalfRepairOneHandBrokenMult: number;
+    MalfRepairTwoHandsBrokenMult: number;
+    AllowMalfForBots: boolean;
+    ShowGlowAttemptsCount: number;
+    OutToIdleSpeedMultForPistol: number;
+    IdleToOutSpeedMultOnMalf: number;
+    TimeToQuickdrawPistol: number;
+    DurRangeToIgnoreMalfs: xyz;
+    DurFeedWt: number;
+    DurMisfireWt: number;
+    DurJamWt: number;
+    DurSoftSlideWt: number;
+    DurHardSlideMinWt: number;
+    DurHardSlideMaxWt: number;
+    AmmoMisfireWt: number;
+    AmmoFeedWt: number;
+    AmmoJamWt: number;
+    OverheatFeedWt: number;
+    OverheatJamWt: number;
+    OverheatSoftSlideWt: number;
+    OverheatHardSlideMinWt: number;
+    OverheatHardSlideMaxWt: number;
+}
+export interface Overheat {
+    MinOverheat: number;
+    MaxOverheat: number;
+    OverheatProblemsStart: number;
+    ModHeatFactor: number;
+    ModCoolFactor: number;
+    MinWearOnOverheat: number;
+    MaxWearOnOverheat: number;
+    MinWearOnMaxOverheat: number;
+    MaxWearOnMaxOverheat: number;
+    OverheatWearLimit: number;
+    MaxCOIIncreaseMult: number;
+    MinMalfChance: number;
+    MaxMalfChance: number;
+    DurReduceMinMult: number;
+    DurReduceMaxMult: number;
+    BarrelMoveRndDuration: number;
+    BarrelMoveMaxMult: number;
+    FireratePitchMult: number;
+    FirerateReduceMinMult: number;
+    FirerateReduceMaxMult: number;
+    FirerateOverheatBorder: number;
+    EnableSlideOnMaxOverheat: boolean;
+    StartSlideOverheat: number;
+    FixSlideOverheat: number;
+    AutoshotMinOverheat: number;
+    AutoshotChance: number;
+    AutoshotPossibilityDuration: number;
+    MaxOverheatCoolCoef: number;
+}
+export interface FenceSettings {
+    FenceId: string;
+    Levels: Record<string, FenceLevel>;
+    paidExitStandingNumerator: number;
+}
+export interface FenceLevel {
+    SavageCooldownModifier: number;
+    ScavCaseTimeModifier: number;
+    PaidExitCostModifier: number;
+    BotFollowChance: number;
+    ScavEquipmentSpawnChanceModifier: number;
+    PriceModifier: number;
+    HostileBosses: boolean;
+    HostileScavs: boolean;
+    ScavAttackSupport: boolean;
+    ExfiltrationPriceModifier: number;
+    AvailableExits: number;
+}
+export interface Inertia {
+    InertiaLimits: xyz;
+    InertiaLimitsStep: number;
+    ExitMovementStateSpeedThreshold: xyz;
+    WalkInertia: xyz;
+    FallThreshold: number;
+    SpeedLimitAfterFallMin: xyz;
+    SpeedLimitAfterFallMax: xyz;
+    SpeedLimitDurationMin: xyz;
+    SpeedLimitDurationMax: xyz;
+    SpeedInertiaAfterJump: xyz;
+    BaseJumpPenaltyDuration: number;
+    DurationPower: number;
+    BaseJumpPenalty: number;
+    PenaltyPower: number;
+    InertiaTiltCurveMin: xyz;
+    InertiaTiltCurveMax: xyz;
+    InertiaBackwardCoef: xyz;
+    TiltInertiaMaxSpeed: xyz;
+    TiltStartSideBackSpeed: xyz;
+    TiltMaxSideBackSpeed: xyz;
+    TiltAcceleration: xyz;
+    AverageRotationFrameSpan: number;
+    SprintSpeedInertiaCurveMin: xyz;
+    SprintSpeedInertiaCurveMax: xyz;
+    SprintBrakeInertia: xyz;
+    SprintTransitionMotionPreservation: xyz;
+    WeaponFlipSpeed: xyz;
+    PreSprintAccelerationLimits: xyz;
+    SprintAccelerationLimits: xyz;
+    SideTime: xyz;
+    DiagonalTime: xyz;
+    MinDirectionBlendTime: number;
+    MoveTime: number;
+    MinMovementAccelerationRangeRight: xyz;
+    MaxMovementAccelerationRangeRight: xyz;
+}
+export interface xyz {
+    x: number;
+    y: number;
+    z: number;
+}
+export interface Ballistic {
+    GlobalDamageDegradationCoefficient: number;
+}
+export interface RepairKitSettings {
+    armorClassDivisor: number;
+    durabilityPointCostArmor: number;
+    durabilityPointCostGuns: number;
+}
+export interface BotPreset {
+    UseThis: boolean;
+    Role: string;
+    BotDifficulty: string;
+    VisibleAngle: number;
+    VisibleDistance: number;
+    ScatteringPerMeter: number;
+    HearingSense: number;
+    SCATTERING_DIST_MODIF: number;
+    MAX_AIMING_UPGRADE_BY_TIME: number;
+    FIRST_CONTACT_ADD_SEC: number;
+    COEF_IF_MOVE: number;
+}
+export interface BotWeaponScattering {
+    Name: string;
+    PriorityScatter1meter: number;
+    PriorityScatter10meter: number;
+    PriorityScatter100meter: number;
+}
+export interface Preset {
+    _id: string;
+    _type: string;
+    _changeWeaponName: boolean;
+    _name: string;
+    _parent: string;
+    _items: Item[];
+    _encyclopedia?: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/common/ILocation.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/common/ILocation.d.ts
new file mode 100644
index 0000000..42fac06
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/common/ILocation.d.ts
@@ -0,0 +1,6 @@
+import { ILocationBase } from "./ILocationBase";
+import { ILooseLoot } from "./ILooseLoot";
+export interface ILocation {
+    base: ILocationBase;
+    looseLoot: ILooseLoot;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/common/ILocationBase.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/common/ILocationBase.d.ts
new file mode 100644
index 0000000..ad48d32
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/common/ILocationBase.d.ts
@@ -0,0 +1,198 @@
+export interface ILocationBase {
+    AccessKeys: string[];
+    AirdropParameters: AirdropParameter[];
+    Area: number;
+    AveragePlayTime: number;
+    AveragePlayerLevel: number;
+    Banners: Banner[];
+    BossLocationSpawn: BossLocationSpawn[];
+    BotAssault: number;
+    BotEasy: number;
+    BotHard: number;
+    BotImpossible: number;
+    BotLocationModifier: BotLocationModifier;
+    BotMarksman: number;
+    BotMax: number;
+    BotMaxPlayer: number;
+    BotMaxTimePlayer: number;
+    BotNormal: number;
+    BotSpawnTimeOffMax: number;
+    BotSpawnTimeOffMin: number;
+    BotSpawnTimeOnMax: number;
+    BotSpawnTimeOnMin: number;
+    BotStart: number;
+    BotStop: number;
+    Description: string;
+    DisabledForScav: boolean;
+    DisabledScavExits: string;
+    Enabled: boolean;
+    GlobalLootChanceModifier: number;
+    IconX: number;
+    IconY: number;
+    Id: string;
+    Insurance: boolean;
+    IsSecret: boolean;
+    Locked: boolean;
+    Loot: any[];
+    MaxBotPerZone: number;
+    MaxDistToFreePoint: number;
+    MaxPlayers: number;
+    MinDistToExitPoint: number;
+    MinDistToFreePoint: number;
+    MinMaxBots: MinMaxBot[];
+    MinPlayers: number;
+    Name: string;
+    NewSpawn: boolean;
+    OcculsionCullingEnabled: boolean;
+    OldSpawn: boolean;
+    OpenZones: string;
+    Preview: Preview;
+    RequiredPlayerLevel: number;
+    Rules: string;
+    SafeLocation: boolean;
+    Scene: Scene;
+    SpawnPointParams: SpawnPointParam[];
+    UnixDateTime: number;
+    _Id: string;
+    doors: any[];
+    escape_time_limit: number;
+    exit_access_time: number;
+    exit_count: number;
+    exit_time: number;
+    exits: Exit[];
+    filter_ex: string[];
+    limits: ILimit[];
+    matching_min_seconds: number;
+    maxItemCountInLocation: MaxItemCountInLocation[];
+    sav_summon_seconds: number;
+    tmp_location_field_remove_me: number;
+    users_gather_seconds: number;
+    users_spawn_seconds_n: number;
+    users_spawn_seconds_n2: number;
+    users_summon_seconds: number;
+    waves: Wave[];
+}
+export interface ILimit {
+    min: number;
+    max: number;
+    items: any[];
+}
+export interface AirdropParameter {
+    AirdropPointDeactivateDistance: number;
+    MinPlayersCountToSpawnAirdrop: number;
+    PlaneAirdropChance: number;
+    PlaneAirdropCooldownMax: number;
+    PlaneAirdropCooldownMin: number;
+    PlaneAirdropEnd: number;
+    PlaneAirdropMax: number;
+    PlaneAirdropStartMax: number;
+    PlaneAirdropStartMin: number;
+    UnsuccessfulTryPenalty: number;
+}
+export interface Banner {
+    id: string;
+    pic: Pic;
+}
+export interface Pic {
+    path: string;
+    rcid: string;
+}
+export interface BossLocationSpawn {
+    BossChance: number;
+    BossDifficult: string;
+    BossEscortAmount: string;
+    BossEscortDifficult: string;
+    BossEscortType: string;
+    BossName: string;
+    BossPlayer: boolean;
+    BossZone: string;
+    Time: number;
+    TriggerId: string;
+    TriggerName: string;
+    Delay?: number;
+    Supports?: BossSupport[];
+}
+export interface BossSupport {
+    BossEscortAmount: string;
+    BossEscortDifficult: string[];
+    BossEscortType: string;
+}
+export interface BotLocationModifier {
+    AccuracySpeed: number;
+    DistToActivate: number;
+    DistToPersueAxemanCoef: number;
+    DistToSleep: number;
+    GainSight: number;
+    KhorovodChance: number;
+    MagnetPower: number;
+    MarksmanAccuratyCoef: number;
+    Scattering: number;
+    VisibleDistance: number;
+}
+export interface MinMaxBot {
+    WildSpawnType: string;
+    max: number;
+    min: number;
+}
+export interface Preview {
+    path: string;
+    rcid: string;
+}
+export interface Scene {
+    path: string;
+    rcid: string;
+}
+export interface SpawnPointParam {
+    BotZoneName: string;
+    Categories: string[];
+    ColliderParams: ColliderParams;
+    DelayToCanSpawnSec: number;
+    Id: string;
+    Infiltration: string;
+    Position: xyz;
+    Rotation: number;
+    Sides: string[];
+}
+export interface ColliderParams {
+    _parent: string;
+    _props: Props;
+}
+export interface Props {
+    Center: xyz;
+    Radius: number;
+}
+export interface xyz {
+    x: number;
+    y: number;
+    z: number;
+}
+export interface Exit {
+    Chance: number;
+    Count: number;
+    EntryPoints: string;
+    ExfiltrationTime: number;
+    ExfiltrationType: string;
+    Id: string;
+    MaxTime: number;
+    MinTime: number;
+    Name: string;
+    PassageRequirement: string;
+    PlayersCount: number;
+    RequirementTip: string;
+}
+export interface MaxItemCountInLocation {
+    TemplateId: string;
+    Value: number;
+}
+export interface Wave {
+    BotPreset: string;
+    BotSide: string;
+    SpawnPoints: string;
+    WildSpawnType: string;
+    isPlayers: boolean;
+    number: number;
+    slots_max: number;
+    slots_min: number;
+    time_max: number;
+    time_min: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/common/ILocationsSourceDestinationBase.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/common/ILocationsSourceDestinationBase.d.ts
new file mode 100644
index 0000000..7f8d915
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/common/ILocationsSourceDestinationBase.d.ts
@@ -0,0 +1,9 @@
+import { ILocations } from "../../spt/server/ILocations";
+export interface ILocationsGenerateAllResponse {
+    locations: ILocations;
+    paths: Path[];
+}
+export interface Path {
+    Source: string;
+    Destination: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/common/ILooseLoot.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/common/ILooseLoot.d.ts
new file mode 100644
index 0000000..14b795e
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/common/ILooseLoot.d.ts
@@ -0,0 +1,45 @@
+export interface ILooseLoot {
+    spawnpointCount: SpawnpointCount;
+    spawnpointsForced: SpawnpointsForced[];
+    spawnpoints: Spawnpoint[];
+}
+export interface SpawnpointCount {
+    mean: number;
+    std: number;
+}
+export interface SpawnpointsForced {
+    locationId: string;
+    probability: number;
+    template: SpawnpointTemplate;
+}
+export interface SpawnpointTemplate {
+    Id: string;
+    IsStatic: boolean;
+    useGravity: boolean;
+    randomRotation: boolean;
+    Position: Xyz;
+    Rotation: Xyz;
+    IsGroupPosition: boolean;
+    GroupPositions: any[];
+    Root: any;
+    Items: Item[];
+}
+export interface Item {
+    _id: string;
+    _tpl?: string;
+}
+export interface Spawnpoint {
+    locationId: string;
+    probability: number;
+    template: SpawnpointTemplate;
+    itemDistribution: ItemDistribution[];
+}
+export interface Xyz {
+    x: number;
+    y: number;
+    z: number;
+}
+export interface ItemDistribution {
+    tpl: string;
+    relativeProbability: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/common/IMetricsTableData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/common/IMetricsTableData.d.ts
new file mode 100644
index 0000000..873ef82
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/common/IMetricsTableData.d.ts
@@ -0,0 +1,7 @@
+export interface IMetricsTableData {
+    Keys: number[];
+    NetProcessingBins: number[];
+    RenderBins: number[];
+    GameUpdateBins: number[];
+    MemoryMeasureInterval: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/common/IPmcData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/common/IPmcData.d.ts
new file mode 100644
index 0000000..adc2aa5
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/common/IPmcData.d.ts
@@ -0,0 +1,341 @@
+import { IRagfairOffer } from "../ragfair/IRagfairOffer";
+import { IPmcDataRepeatableQuest } from "./tables/IRepeatableQuests";
+import { Item, Upd } from "./tables/IItem";
+import { HideoutAreas } from "../../enums/HideoutAreas";
+import { MemberCategory } from "../../enums/MemberCategory";
+export interface IPmcData {
+    _id: string;
+    aid: string;
+    savage: string;
+    Info: Info;
+    Customization: Customization;
+    Health: Health;
+    Inventory: Inventory;
+    Skills: Skills;
+    Stats: Stats;
+    Encyclopedia: Record<string, boolean>;
+    ConditionCounters: ConditionCounters;
+    BackendCounters: Record<string, BackendCounter>;
+    InsuredItems: InsuredItem[];
+    Hideout: Hideout;
+    Bonuses: Bonus[];
+    Notes: Notes;
+    Quests: Quest[];
+    TradersInfo: Record<string, TraderInfo>;
+    RagfairInfo: RagfairInfo;
+    WishList: string[];
+    RepeatableQuests: IPmcDataRepeatableQuest[];
+    CarExtractCounts: CarExtractCounts;
+    SurvivorClass: SurvivorClass;
+}
+export declare enum SurvivorClass {
+    Unknown = 0,
+    Neutralizer = 1,
+    Marauder = 2,
+    Paramedic = 3,
+    Survivor = 4
+}
+export interface Info {
+    EntryPoint: string;
+    Nickname: string;
+    LowerNickname: string;
+    Side: string;
+    Voice: string;
+    Level: number;
+    Experience: number;
+    RegistrationDate: number;
+    GameVersion: string;
+    AccountType: number;
+    MemberCategory: MemberCategory;
+    lockedMoveCommands: boolean;
+    SavageLockTime: number;
+    LastTimePlayedAsSavage: number;
+    Settings: Settings;
+    NicknameChangeDate: number;
+    IsStreamerModeAvailable: boolean;
+    Bans: IBan[];
+    BannedState: boolean;
+    BannedUntil: number;
+}
+export interface Settings {
+    Role: string;
+    BotDifficulty: string;
+    Experience: number;
+    StandingForKill: number;
+    AggressorBonus: number;
+}
+export interface IBan {
+    type: BanType;
+    dateTime: number;
+}
+export declare enum BanType {
+    Chat = 0,
+    RagFair = 1,
+    Voip = 2,
+    Trading = 3,
+    Online = 4,
+    Friends = 5,
+    ChangeNickname = 6
+}
+export interface Notes {
+    Notes: Note[];
+}
+export interface Note {
+    Time: number;
+    Text: string;
+}
+export interface Customization {
+    Head: string;
+    Body: string;
+    Feet: string;
+    Hands: string;
+}
+export interface Health {
+    Hydration: CurrentMax;
+    Energy: CurrentMax;
+    Temperature: CurrentMax;
+    BodyParts: BodyPartsHealth;
+    UpdateTime: number;
+}
+export interface BodyPartsHealth {
+    Head: BodyPartHealth;
+    Chest: BodyPartHealth;
+    Stomach: BodyPartHealth;
+    LeftArm: BodyPartHealth;
+    RightArm: BodyPartHealth;
+    LeftLeg: BodyPartHealth;
+    RightLeg: BodyPartHealth;
+}
+export interface BodyPartHealth {
+    Health: CurrentMax;
+    Effects?: Record<string, number>;
+}
+export interface CurrentMax {
+    Current: number;
+    Maximum: number;
+}
+export interface Inventory {
+    items: Item[];
+    equipment: string;
+    stash: string;
+    sortingTable: string;
+    questRaidItems: string;
+    questStashItems: string;
+    fastPanel: FastPanel;
+}
+export interface FastPanel {
+}
+export interface Skills {
+    Common: Common[];
+    Mastering: Mastering[];
+    Bonuses?: any[];
+    Points: number;
+}
+export interface Common {
+    Id: string;
+    Progress: number;
+    PointsEarnedDuringSession: number;
+    LastAccess: number;
+}
+export interface Mastering {
+    Id: string;
+    Progress: number;
+}
+export interface Stats {
+    CarriedQuestItems: string[];
+    Victims: Victim[];
+    TotalSessionExperience: number;
+    LastSessionDate: number;
+    SessionCounters: SessionCounters;
+    OverallCounters: OverallCounters;
+    SessionExperienceMult?: number;
+    ExperienceBonusMult?: number;
+    Aggressor?: Aggressor;
+    DroppedItems?: IDroppedItem[];
+    FoundInRaidItems?: FoundInRaidItem[];
+    DamageHistory?: DamageHistory;
+    DeathCause?: DeathCause;
+    LastPlayerState?: LastPlayerState;
+    TotalInGameTime: number;
+    SurvivorClass?: string;
+}
+export interface IDroppedItem {
+    QuestId: string;
+    ItemId: string;
+    ZoneId: string;
+}
+export interface FoundInRaidItem {
+    QuestId: string;
+    ItemId: string;
+}
+export interface Victim {
+    AccountId: string;
+    ProfileId: string;
+    Name: string;
+    Side: string;
+    BodyPart: string;
+    Time: string;
+    Distance: number;
+    Level: number;
+    Weapon: string;
+    Role: string;
+}
+export interface SessionCounters {
+    Items: CounterKeyValue[];
+}
+export interface OverallCounters {
+    Items: CounterKeyValue[];
+}
+export interface CounterKeyValue {
+    Key: string[];
+    Value: number;
+}
+export interface Aggressor {
+    AccountId: string;
+    ProfileId: string;
+    MainProfileNickname: string;
+    Name: string;
+    Side: string;
+    BodyPart: string;
+    HeadSegment: string;
+    WeaponName: string;
+    Category: string;
+}
+export interface DamageHistory {
+    LethalDamagePart: string;
+    LethalDamage: LethalDamage;
+    BodyParts: BodyPartsDamageHistory;
+}
+export interface LethalDamage {
+    Amount: number;
+    Type: string;
+    SourceId: string;
+    OverDamageFrom: string;
+    Blunt: boolean;
+    ImpactsCount: number;
+}
+export interface BodyPartsDamageHistory {
+    Head: DamageStats[];
+    Chest: DamageStats[];
+    Stomach: DamageStats[];
+    LeftArm: DamageStats[];
+    RightArm: DamageStats[];
+    LeftLeg: DamageStats[];
+    RightLeg: DamageStats[];
+    Common: DamageStats[];
+}
+export interface DamageStats {
+    Amount: number;
+    Type: string;
+    SourceId: string;
+    OverDamageFrom: string;
+    Blunt: boolean;
+    ImpactsCount: number;
+}
+export interface DeathCause {
+    DamageType: string;
+    Side: string;
+    Role: string;
+    WeaponId: string;
+}
+export interface LastPlayerState {
+    Info: LastPlayerStateInfo;
+    Customization: Record<string, string>;
+    Equipment: any;
+}
+export interface LastPlayerStateInfo {
+    Nickname: string;
+    Side: string;
+    Level: number;
+    MemberCategory: string;
+}
+export interface ConditionCounters {
+    Counters: Counter[];
+}
+export interface Counter {
+    id: string;
+    value: number;
+    qid: string;
+}
+export interface BackendCounter {
+    id: string;
+    qid?: string;
+    value: number;
+}
+export interface InsuredItem {
+    tid: string;
+    itemId: string;
+}
+export interface Hideout {
+    Production: Record<string, Productive>;
+    Areas: HideoutArea[];
+}
+export interface Productive {
+    Products: Product[];
+    Progress?: number;
+    inProgress?: boolean;
+    StartTimestamp?: number;
+}
+export interface Product {
+    _id: string;
+    _tpl: string;
+    upd?: Upd;
+}
+export interface ScavCase extends Productive {
+}
+export interface Production extends Productive {
+    RecipeId: string;
+    SkipTime: number;
+    ProductionTime: number;
+}
+export interface HideoutArea {
+    type: HideoutAreas;
+    level: number;
+    active: boolean;
+    passiveBonusesEnabled: boolean;
+    completeTime: number;
+    constructing: boolean;
+    slots: HideoutSlot[];
+    lastRecipe: string;
+}
+export interface HideoutSlot {
+    item: HideoutItem[];
+}
+export interface HideoutItem {
+    _id: string;
+    _tpl: string;
+    upd?: Upd;
+}
+export interface Bonus {
+    type: string;
+    templateId?: string;
+    passive?: boolean;
+    production?: boolean;
+    visible?: boolean;
+    value?: number;
+    icon?: string;
+}
+export interface Quest {
+    qid: string;
+    startTime: number;
+    status: string;
+    statusTimers?: StatusTimer;
+    completedConditions?: string[];
+}
+export interface StatusTimer {
+    AvailableForStart?: number;
+}
+export interface TraderInfo {
+    loyaltyLevel: number;
+    salesSum: number;
+    standing: number;
+    nextResupply: number;
+    unlocked: boolean;
+}
+export interface RagfairInfo {
+    rating: number;
+    isRatingGrowing: boolean;
+    offers: IRagfairOffer[];
+}
+export interface CarExtractCounts {
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/common/request/IBaseInteractionRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/common/request/IBaseInteractionRequestData.d.ts
new file mode 100644
index 0000000..7303275
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/common/request/IBaseInteractionRequestData.d.ts
@@ -0,0 +1,9 @@
+export interface IBaseInteractionRequestData {
+    Action: string;
+    fromOwner?: OwnerInfo;
+    toOwner?: OwnerInfo;
+}
+export interface OwnerInfo {
+    id: string;
+    type: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/IBotBase.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/IBotBase.d.ts
new file mode 100644
index 0000000..677fd49
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/IBotBase.d.ts
@@ -0,0 +1,101 @@
+import { BackendCounter, Bonus } from "../IPmcData";
+import { Item } from "./IItem";
+export interface IBotBase {
+    _id: string;
+    aid: string;
+    savage: any;
+    Info: Info;
+    Customization: Customization;
+    Health: Health;
+    Inventory: Inventory;
+    Skills: Skills;
+    Stats: Stats;
+    Encyclopedia: any;
+    ConditionCounters: ConditionCounters;
+    BackendCounters: Record<string, BackendCounter>;
+    InsuredItems: any[];
+    Hideout: Hideout;
+    Bonuses: Bonus[];
+}
+export interface Info {
+    Nickname: string;
+    LowerNickname: string;
+    Side: string;
+    Voice: string;
+    Level: number;
+    Experience: number;
+    RegistrationDate: number;
+    GameVersion: string;
+    AccountType: number;
+    MemberCategory: number;
+    lockedMoveCommands: boolean;
+    SavageLockTime: number;
+    LastTimePlayedAsSavage: number;
+    Settings: Settings;
+    NicknameChangeDate: number;
+    NeedWipeOptions: any[];
+    lastCompletedWipe: any;
+    BannedState: boolean;
+    BannedUntil: number;
+    IsStreamerModeAvailable: boolean;
+}
+export interface Settings {
+    Role: string;
+    BotDifficulty: string;
+    Experience: number;
+    StandingForKill: number;
+    AggressorBonus: number;
+}
+export interface Customization {
+    Head: string;
+    Body: string;
+    Feet: string;
+    Hands: string;
+}
+export interface Health {
+}
+export interface Inventory {
+    items: Item[];
+    equipment: string;
+    stash: string;
+    sortingTable: string;
+    questRaidItems: string;
+    questStashItems: string;
+    fastPanel: FastPanel;
+}
+export interface FastPanel {
+}
+export interface Skills {
+    Common: any[];
+    Mastering: any[];
+    Points: number;
+}
+export interface Stats {
+    SessionCounters: SessionCounters;
+    OverallCounters: OverallCounters;
+}
+export interface SessionCounters {
+    Items: any[];
+}
+export interface OverallCounters {
+    Items: any[];
+}
+export interface ConditionCounters {
+    Counters: any[];
+}
+export interface Hideout {
+    Production: Production;
+    Areas: Area[];
+}
+export interface Production {
+}
+export interface Area {
+    type: number;
+    level: number;
+    active: boolean;
+    passiveBonusesEnabled: boolean;
+    completeTime: number;
+    constructing: boolean;
+    slots: any[];
+    lastRecipe: any;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/IBotCore.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/IBotCore.d.ts
new file mode 100644
index 0000000..16a782d
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/IBotCore.d.ts
@@ -0,0 +1,133 @@
+export interface IBotCore {
+    SAVAGE_KILL_DIST: number;
+    SOUND_DOOR_BREACH_METERS: number;
+    SOUND_DOOR_OPEN_METERS: number;
+    STEP_NOISE_DELTA: number;
+    JUMP_NOISE_DELTA: number;
+    GUNSHOT_SPREAD: number;
+    GUNSHOT_SPREAD_SILENCE: number;
+    BASE_WALK_SPEREAD2: number;
+    MOVE_SPEED_COEF_MAX: number;
+    SPEED_SERV_SOUND_COEF_A: number;
+    SPEED_SERV_SOUND_COEF_B: number;
+    G: number;
+    STAY_COEF: number;
+    SIT_COEF: number;
+    LAY_COEF: number;
+    MAX_ITERATIONS: number;
+    START_DIST_TO_COV: number;
+    MAX_DIST_TO_COV: number;
+    STAY_HEIGHT: number;
+    CLOSE_POINTS: number;
+    COUNT_TURNS: number;
+    SIMPLE_POINT_LIFE_TIME_SEC: number;
+    DANGER_POINT_LIFE_TIME_SEC: number;
+    DANGER_POWER: number;
+    COVER_DIST_CLOSE: number;
+    GOOD_DIST_TO_POINT: number;
+    COVER_TOOFAR_FROM_BOSS: number;
+    COVER_TOOFAR_FROM_BOSS_SQRT: number;
+    MAX_Y_DIFF_TO_PROTECT: number;
+    FLARE_POWER: number;
+    MOVE_COEF: number;
+    PRONE_POSE: number;
+    LOWER_POSE: number;
+    MAX_POSE: number;
+    FLARE_TIME: number;
+    MAX_REQUESTS__PER_GROUP: number;
+    UPDATE_GOAL_TIMER_SEC: number;
+    DIST_NOT_TO_GROUP: number;
+    DIST_NOT_TO_GROUP_SQR: number;
+    LAST_SEEN_POS_LIFETIME: number;
+    DELTA_GRENADE_START_TIME: number;
+    DELTA_GRENADE_END_TIME: number;
+    DELTA_GRENADE_RUN_DIST: number;
+    DELTA_GRENADE_RUN_DIST_SQRT: number;
+    PATROL_MIN_LIGHT_DIST: number;
+    HOLD_MIN_LIGHT_DIST: number;
+    STANDART_BOT_PAUSE_DOOR: number;
+    ARMOR_CLASS_COEF: number;
+    SHOTGUN_POWER: number;
+    RIFLE_POWER: number;
+    PISTOL_POWER: number;
+    SMG_POWER: number;
+    SNIPE_POWER: number;
+    GESTUS_PERIOD_SEC: number;
+    GESTUS_AIMING_DELAY: number;
+    GESTUS_REQUEST_LIFETIME: number;
+    GESTUS_FIRST_STAGE_MAX_TIME: number;
+    GESTUS_SECOND_STAGE_MAX_TIME: number;
+    GESTUS_MAX_ANSWERS: number;
+    GESTUS_FUCK_TO_SHOOT: number;
+    GESTUS_DIST_ANSWERS: number;
+    GESTUS_DIST_ANSWERS_SQRT: number;
+    GESTUS_ANYWAY_CHANCE: number;
+    TALK_DELAY: number;
+    CAN_SHOOT_TO_HEAD: boolean;
+    CAN_TILT: boolean;
+    TILT_CHANCE: number;
+    MIN_BLOCK_DIST: number;
+    MIN_BLOCK_TIME: number;
+    COVER_SECONDS_AFTER_LOSE_VISION: number;
+    MIN_ARG_COEF: number;
+    MAX_ARG_COEF: number;
+    DEAD_AGR_DIST: number;
+    MAX_DANGER_CARE_DIST_SQRT: number;
+    MAX_DANGER_CARE_DIST: number;
+    MIN_MAX_PERSON_SEARCH: number;
+    PERCENT_PERSON_SEARCH: number;
+    LOOK_ANYSIDE_BY_WALL_SEC_OF_ENEMY: number;
+    CLOSE_TO_WALL_ROTATE_BY_WALL_SQRT: number;
+    SHOOT_TO_CHANGE_RND_PART_MIN: number;
+    SHOOT_TO_CHANGE_RND_PART_MAX: number;
+    SHOOT_TO_CHANGE_RND_PART_DELTA: number;
+    FORMUL_COEF_DELTA_DIST: number;
+    FORMUL_COEF_DELTA_SHOOT: number;
+    FORMUL_COEF_DELTA_FRIEND_COVER: number;
+    SUSPETION_POINT_DIST_CHECK: number;
+    MAX_BASE_REQUESTS_PER_PLAYER: number;
+    MAX_HOLD_REQUESTS_PER_PLAYER: number;
+    MAX_GO_TO_REQUESTS_PER_PLAYER: number;
+    MAX_COME_WITH_ME_REQUESTS_PER_PLAYER: number;
+    CORE_POINT_MAX_VALUE: number;
+    CORE_POINTS_MAX: number;
+    CORE_POINTS_MIN: number;
+    BORN_POISTS_FREE_ONLY_FAREST_BOT: boolean;
+    BORN_POINSTS_FREE_ONLY_FAREST_PLAYER: boolean;
+    SCAV_GROUPS_TOGETHER: boolean;
+    LAY_DOWN_ANG_SHOOT: number;
+    HOLD_REQUEST_TIME_SEC: number;
+    TRIGGERS_DOWN_TO_RUN_WHEN_MOVE: number;
+    MIN_DIST_TO_RUN_WHILE_ATTACK_MOVING: number;
+    MIN_DIST_TO_RUN_WHILE_ATTACK_MOVING_OTHER_ENEMIS: number;
+    MIN_DIST_TO_STOP_RUN: number;
+    JUMP_SPREAD_DIST: number;
+    LOOK_TIMES_TO_KILL: number;
+    COME_INSIDE_TIMES: number;
+    TOTAL_TIME_KILL: number;
+    TOTAL_TIME_KILL_AFTER_WARN: number;
+    MOVING_AIM_COEF: number;
+    VERTICAL_DIST_TO_IGNORE_SOUND: number;
+    DEFENCE_LEVEL_SHIFT: number;
+    MIN_DIST_CLOSE_DEF: number;
+    USE_ID_PRIOR_WHO_GO: boolean;
+    SMOKE_GRENADE_RADIUS_COEF: number;
+    GRENADE_PRECISION: number;
+    MAX_WARNS_BEFORE_KILL: number;
+    CARE_ENEMY_ONLY_TIME: number;
+    MIDDLE_POINT_COEF: number;
+    MAIN_TACTIC_ONLY_ATTACK: boolean;
+    LAST_DAMAGE_ACTIVE: number;
+    SHALL_DIE_IF_NOT_INITED: boolean;
+    CHECK_BOT_INIT_TIME_SEC: number;
+    WEAPON_ROOT_Y_OFFSET: number;
+    DELTA_SUPRESS_DISTANCE_SQRT: number;
+    DELTA_SUPRESS_DISTANCE: number;
+    WAVE_COEF_LOW: number;
+    WAVE_COEF_MID: number;
+    WAVE_COEF_HIGH: number;
+    WAVE_COEF_HORDE: number;
+    WAVE_ONLY_AS_ONLINE: boolean;
+    LOCAL_BOTS_COUNT: number;
+    AXE_MAN_KILLS_END: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/IBotType.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/IBotType.d.ts
new file mode 100644
index 0000000..01be0be
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/IBotType.d.ts
@@ -0,0 +1,176 @@
+export interface IBotType {
+    appearance: Appearance;
+    chances: Chances;
+    difficulty: Difficulties;
+    experience: Experience;
+    firstName: string[];
+    generation: Generation;
+    health: Health;
+    inventory: Inventory;
+    lastName: string[];
+    skills: Skills;
+}
+export interface Appearance {
+    body: string[];
+    feet: string[];
+    hands: string[];
+    head: string[];
+    voice: string[];
+}
+export interface Chances {
+    equipment: EquipmentChances;
+    mods: ModsChances;
+}
+export interface EquipmentChances {
+    ArmBand: number;
+    ArmorVest: number;
+    Backpack: number;
+    Earpiece: number;
+    Eyewear: number;
+    FaceCover: number;
+    FirstPrimaryWeapon: number;
+    Headwear: number;
+    Holster: number;
+    Pockets: number;
+    Scabbard: number;
+    SecondPrimaryWeapon: number;
+    SecuredContainer: number;
+    TacticalVest: number;
+}
+export interface ModsChances {
+    mod_charge: number;
+    mod_equipment: number;
+    mod_equipment_000: number;
+    mod_equipment_001: number;
+    mod_equipment_002: number;
+    mod_flashlight: number;
+    mod_foregrip: number;
+    mod_launcher: number;
+    mod_magazine: number;
+    mod_mount: number;
+    mod_mount_000: number;
+    mod_mount_001: number;
+    mod_muzzle: number;
+    mod_nvg: number;
+    mod_pistol_grip: number;
+    mod_reciever: number;
+    mod_scope: number;
+    mod_sight_front: number;
+    mod_sight_rear: number;
+    mod_stock: number;
+    mod_stock_000: number;
+    mod_stock_akms: number;
+    mod_tactical: number;
+    mod_tactical_000: number;
+    mod_tactical_001: number;
+    mod_tactical_002: number;
+    mod_tactical_003: number;
+}
+export interface Difficulties {
+    easy: Difficulty;
+    normal: Difficulty;
+    hard: Difficulty;
+    impossible: Difficulty;
+}
+export interface Difficulty {
+    Aiming: Record<string, string | number | boolean>;
+    Boss: Record<string, string | number | boolean>;
+    Change: Record<string, string | number | boolean>;
+    Core: Record<string, string | number | boolean>;
+    Cover: Record<string, string | number | boolean>;
+    Grenade: Record<string, string | number | boolean>;
+    Hearing: Record<string, string | number | boolean>;
+    Lay: Record<string, string | number | boolean>;
+    Look: Record<string, string | number | boolean>;
+    Mind: Record<string, string | number | boolean | string[]>;
+    Move: Record<string, string | number | boolean>;
+    Patrol: Record<string, string | number | boolean>;
+    Scattering: Record<string, string | number | boolean>;
+    Shoot: Record<string, string | number | boolean>;
+}
+export interface Experience {
+    aggressorBonus: number;
+    level: MinMax;
+    reward: MinMax;
+    standingForKill: number;
+}
+export interface Generation {
+    items: ItemMinMax;
+}
+export interface ItemMinMax {
+    grenades: MinMax;
+    healing: MinMax;
+    drugs: MinMax;
+    stims: MinMax;
+    looseLoot: MinMax;
+    magazines: MinMax;
+    specialItems: MinMax;
+}
+export interface Health {
+    BodyParts: BodyPart[];
+    Energy: MinMax;
+    Hydration: MinMax;
+    Temperature: MinMax;
+}
+export interface BodyPart {
+    Chest: MinMax;
+    Head: MinMax;
+    LeftArm: MinMax;
+    LeftLeg: MinMax;
+    RightArm: MinMax;
+    RightLeg: MinMax;
+    Stomach: MinMax;
+}
+export interface MinMax {
+    max: number;
+    min: number;
+}
+export interface Inventory {
+    equipment: Equipment;
+    items: Items;
+    mods: Mods;
+}
+export interface Equipment {
+    ArmBand: Record<string, number>;
+    ArmorVest: Record<string, number>;
+    Backpack: Record<string, number>;
+    Earpiece: Record<string, number>;
+    Eyewear: Record<string, number>;
+    FaceCover: Record<string, number>;
+    FirstPrimaryWeapon: Record<string, number>;
+    Headwear: Record<string, number>;
+    Holster: Record<string, number>;
+    Pockets: Record<string, number>;
+    Scabbard: Record<string, number>;
+    SecondPrimaryWeapon: Record<string, number>;
+    SecuredContainer: Record<string, number>;
+    TacticalVest: Record<string, number>;
+}
+export interface Items {
+    Backpack: string[];
+    Pockets: string[];
+    SecuredContainer: string[];
+    SpecialLoot: string[];
+    TacticalVest: string[];
+}
+export declare type Mods = Record<string, Record<string, string[]>>;
+export interface Skills {
+    Common: Common[];
+    Bonuses?: any;
+    Mastering: Mastering[];
+    Points: number;
+}
+export interface Mastering {
+    Id: string;
+    Progress: number;
+    max?: number;
+    min?: number;
+}
+export interface Common {
+    Id: string;
+    Progress: number;
+    PointsEarnedDuringSession?: number;
+    LastAccess?: number;
+    max?: number;
+    min?: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/ICustomizationItem.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/ICustomizationItem.d.ts
new file mode 100644
index 0000000..8bfeece
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/ICustomizationItem.d.ts
@@ -0,0 +1,33 @@
+export interface ICustomizationItem {
+    _id: string;
+    _name: string;
+    _parent: string;
+    _type: string;
+    _props: Props;
+    _proto: string;
+}
+export interface Props {
+    Name: string;
+    ShortName: string;
+    Description: string;
+    Side: string[];
+    BodyPart: string;
+    AvailableAsDefault?: boolean;
+    Body: string;
+    Hands: string;
+    Feet: string;
+    Prefab: Prefab;
+    WatchPrefab: Prefab;
+    IntegratedArmorVest: boolean;
+    WatchPosition: Xyz;
+    WatchRotation: Xyz;
+}
+export interface Prefab {
+    path: string;
+    rcid: string;
+}
+export interface Xyz {
+    x: number;
+    y: number;
+    z: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/IHandbookBase.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/IHandbookBase.d.ts
new file mode 100644
index 0000000..7d7db07
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/IHandbookBase.d.ts
@@ -0,0 +1,16 @@
+export interface IHandbookBase {
+    Categories: Category[];
+    Items: HandbookItem[];
+}
+export interface Category {
+    Id: string;
+    ParentId?: string;
+    Icon: string;
+    Color: string;
+    Order: string;
+}
+export interface HandbookItem {
+    Id: string;
+    ParentId: string;
+    Price: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/IItem.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/IItem.d.ts
new file mode 100644
index 0000000..2dd2c03
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/IItem.d.ts
@@ -0,0 +1,108 @@
+export interface Item {
+    _id: string;
+    _tpl: string;
+    parentId?: string;
+    slotId?: string;
+    location?: Location | number;
+    upd?: Upd;
+}
+export interface Upd {
+    OriginalStackObjectsCount?: number;
+    Togglable?: Togglable;
+    Map?: Map;
+    Tag?: Tag;
+    sptPresetId?: string;
+    FaceShield?: FaceShield;
+    StackObjectsCount?: number;
+    UnlimitedCount?: boolean;
+    Repairable?: Repairable;
+    FireMode?: FireMode;
+    SpawnedInSession?: boolean;
+    Light?: Light;
+    Key?: Key;
+    Resource?: Resource;
+    Sight?: Sight;
+    MedKit?: MedKit;
+    FoodDrink?: FoodDrink;
+    Dogtag?: Dogtag;
+    BuyRestrictionMax?: number;
+    BuyRestrictionCurrent?: number;
+    Foldable?: Foldable;
+    SideEffect?: SideEffect;
+    RepairKit?: RepairKit;
+}
+export interface Togglable {
+    On: boolean;
+}
+export interface Map {
+    Markers: MapMarker[];
+}
+export interface MapMarker {
+    X: number;
+    Y: number;
+}
+export interface Tag {
+    Color: number;
+    Name: string;
+}
+export interface FaceShield {
+    Hits: number;
+}
+export interface Repairable {
+    Durability: number;
+    MaxDurability: number;
+}
+export interface MedKit {
+    HpResource: number;
+}
+export interface Sight {
+    ScopesCurrentCalibPointIndexes: number[];
+    ScopesSelectedModes: number[];
+    SelectedScope: number;
+}
+export interface Foldable {
+    Folded: boolean;
+}
+export interface FireMode {
+    FireMode: string;
+}
+export interface FoodDrink {
+    HpPercent: number;
+}
+export interface Key {
+    NumberOfUsages: number;
+}
+export interface Resource {
+    Value: number;
+    UnitsConsumed: number;
+}
+export interface Light {
+    IsActive: boolean;
+    SelectedMode: number;
+}
+export interface Dogtag {
+    AccountId: string;
+    ProfileId: string;
+    Nickname: string;
+    Side: string;
+    Level: number;
+    Time: string;
+    Status: string;
+    KillerAccountId: string;
+    KillerProfileId: string;
+    KillerName: string;
+    WeaponName: string;
+}
+export interface Location {
+    x: number;
+    y: number;
+    r: string | number;
+    isSearched?: boolean;
+    rotation?: string;
+}
+export interface SideEffect {
+    Value: number;
+}
+export interface RepairKit {
+    Resource: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/ILocationsBase.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/ILocationsBase.d.ts
new file mode 100644
index 0000000..2c96af3
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/ILocationsBase.d.ts
@@ -0,0 +1,10 @@
+export interface ILocationsBase {
+    locations: Locations;
+    paths: Path[];
+}
+export interface Locations {
+}
+export interface Path {
+    Source: string;
+    Destination: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/ILootBase.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/ILootBase.d.ts
new file mode 100644
index 0000000..e4baac5
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/ILootBase.d.ts
@@ -0,0 +1,64 @@
+import { Item } from "./IItem";
+export interface ILootBase {
+    staticAmmo: Record<string, IStaticAmmoDetails[]>;
+    staticContainers: Record<string, IStaticContainerDetails>;
+    staticLoot: Record<string, IStaticLootDetails>;
+}
+export interface IStaticAmmoDetails {
+    tpl: string;
+    relativeProbability: number;
+}
+export interface IStaticContainerDetails {
+    staticWeapons: IStaticWeaponProps[];
+    staticContainers: IStaticContainerProps[];
+    staticForced: IStaticForcedProps[];
+}
+export interface IStaticWeaponProps {
+    Id: string;
+    IsStatic: boolean;
+    useGravity: boolean;
+    randomRotation: boolean;
+    Position: Xyz;
+    Rotation: Xyz;
+    IsGroupPosition: boolean;
+    GroupPositions: any[];
+    Root: string;
+    Items: Item[];
+}
+export interface IStaticContainerProps {
+    Id: string;
+    IsStatic: boolean;
+    useGravity: boolean;
+    randomRotation: boolean;
+    Position: Xyz;
+    Rotation: Xyz;
+    IsGroupPosition: boolean;
+    GroupPositions: any[];
+    Root: any;
+    Items: StaticItem[];
+}
+export interface Xyz {
+    x: number;
+    y: number;
+    z: number;
+}
+export interface StaticItem {
+    _id: any;
+    _tpl: string;
+}
+export interface IStaticForcedProps {
+    containerId: string;
+    itemTpl: string;
+}
+export interface IStaticLootDetails {
+    itemcountDistribution: ItemCountDistribution[];
+    itemDistribution: ItemDistribution[];
+}
+export interface ItemCountDistribution {
+    count: number;
+    relativeProbability: number;
+}
+export interface ItemDistribution {
+    tpl: string;
+    relativeProbability: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/IMatch.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/IMatch.d.ts
new file mode 100644
index 0000000..c30cb48
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/IMatch.d.ts
@@ -0,0 +1,10 @@
+export interface IMatch {
+    metrics: Metrics;
+}
+export interface Metrics {
+    Keys: number[];
+    NetProcessingBins: number[];
+    RenderBins: number[];
+    GameUpdateBins: number[];
+    MemoryMeasureInterval: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/IQuest.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/IQuest.d.ts
new file mode 100644
index 0000000..e1fc888
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/IQuest.d.ts
@@ -0,0 +1,110 @@
+import { Item } from "./IItem";
+export interface IQuest {
+    QuestName: string;
+    _id: string;
+    canShowNotificationsInGame: boolean;
+    conditions: Conditions;
+    description: string;
+    failMessageText: string;
+    name: string;
+    note: string;
+    traderId: string;
+    location: string;
+    image: string;
+    type: string;
+    isKey: boolean;
+    restartable: boolean;
+    instantComplete: boolean;
+    secretQuest: boolean;
+    startedMessageText: string;
+    successMessageText: string;
+    templateId: string;
+    rewards: Rewards;
+    status: string;
+    KeyQuest: boolean;
+    changeQuestMessageText: string;
+}
+export interface Conditions {
+    Started: AvailableForConditions[];
+    AvailableForFinish: AvailableForConditions[];
+    AvailableForStart: AvailableForConditions[];
+    Success: AvailableForConditions[];
+    Fail: AvailableForConditions[];
+}
+export interface AvailableForConditions {
+    _parent: string;
+    _props: AvailableForProps;
+    dynamicLocale: boolean;
+}
+export interface AvailableForProps {
+    id: string;
+    index: number;
+    parentId: string;
+    dynamicLocale: boolean;
+    value?: number;
+    compareMethod?: string;
+    visibilityConditions?: VisibilityCondition[];
+    target?: string | string[];
+    status?: number[];
+    onlyFoundInRaid?: boolean;
+    oneSessionOnly?: boolean;
+    doNotResetIfCounterCompleted?: boolean;
+    dogtagLevel?: number;
+    maxDurability?: number;
+    minDurability?: number;
+    counter?: AvailableForCounter;
+    plantTime?: number;
+    zoneId?: string;
+    type?: boolean;
+}
+export interface AvailableForCounter {
+    id: string;
+    conditions: CounterCondition[];
+}
+export interface CounterCondition {
+    _parent: string;
+    _props: CounterProps;
+}
+export interface CounterProps {
+    id: string;
+    target: string[] | string;
+    compareMethod?: string;
+    value?: string;
+    weapon?: string[];
+    equipmentInclusive?: string[][];
+    weaponModsInclusive?: string[][];
+    status?: string[];
+    bodyPart?: string[];
+    daytime?: DaytimeCounter;
+}
+export interface DaytimeCounter {
+    from: number;
+    to: number;
+}
+export interface VisibilityCondition {
+    id: string;
+    value: number;
+    dynamicLocale: boolean;
+    oneSessionOnly: boolean;
+}
+export interface Rewards {
+    AvailableForStart: Reward[];
+    AvailableForFinish: Reward[];
+    Started: Reward[];
+    Success: Reward[];
+    Fail: Reward[];
+    FailRestartable: Reward[];
+    Expired: Reward[];
+}
+export interface Reward {
+    value?: string;
+    id: string;
+    type: string;
+    index: number;
+    target?: string;
+    items?: Item[];
+    loyaltyLevel?: number;
+    traderId?: string;
+    unknown?: boolean;
+    findInRaid?: boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/IRepeatableQuests.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/IRepeatableQuests.d.ts
new file mode 100644
index 0000000..e23ec73
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/IRepeatableQuests.d.ts
@@ -0,0 +1,219 @@
+import { Item } from "./IItem";
+export interface IReward {
+    index: number;
+    type: string;
+    value: number;
+    target?: string;
+    items?: Item[];
+}
+export interface IRepeatableQuestDatabase {
+    templates: ITemplates;
+    rewards: IRewardOptions;
+    data: IOptions;
+    samples: ISampleQuests[];
+}
+export interface ITemplates {
+    Elimination: IRepeatableQuest;
+    Completion: IRepeatableQuest;
+    Exploration: IRepeatableQuest;
+}
+export interface IPmcDataRepeatableQuest {
+    id?: string;
+    name: string;
+    activeQuests: IRepeatableQuest[];
+    inactiveQuests: IRepeatableQuest[];
+    endTime: number;
+    changeRequirement: TChangeRequirementRecord;
+}
+export declare type TChangeRequirementRecord = Record<string, IChangeRequirement>;
+export interface IChangeRequirement {
+    changeCost: IChangeCost[];
+    changeStandingCost: number;
+}
+export interface IChangeCost {
+    templateId: string;
+    count: number;
+}
+export interface IRepeatableQuest {
+    _id: any;
+    traderId: string;
+    location: any;
+    image: string;
+    type: string;
+    isKey: boolean;
+    restartable: boolean;
+    instantComplete: boolean;
+    secretQuest: boolean;
+    canShowNotificationsInGame: boolean;
+    rewards: IRewards;
+    conditions: IConditions;
+    name: string;
+    note: string;
+    description: string;
+    successMessageText: string;
+    failMessageText: string;
+    startedMessageText: string;
+    changeQuestMessageText: string;
+    templateId: string;
+    changeCost: IChangeCost[];
+    changeStandingCost: number;
+}
+export interface IRewards {
+    Started: IReward[];
+    Success: IReward[];
+    Fail: IReward[];
+}
+export interface IConditions {
+    AvailableForStart: any[];
+    AvailableForFinish: IAvailableFor[];
+    Fail: any[];
+}
+export interface IAvailableFor {
+    _props: IAvailableForProps;
+    _parent: string;
+    dynamicLocale: boolean;
+}
+export interface IAvailableForProps {
+    id: string;
+    parentId: string;
+    dynamicLocale: boolean;
+    index: number;
+    visibilityConditions: IVisibilityCondition[];
+    value: number;
+}
+export interface IVisibilityCondition {
+    id: string;
+    oneSessionOnly: boolean;
+    value: number;
+    index: number;
+    dynamicLocale: boolean;
+}
+export interface IAvailableForPropsCounter extends IAvailableForProps {
+    type: string;
+    oneSessionOnly: boolean;
+    doNotResetIfCounterCompleted: boolean;
+    counter: ICounter;
+}
+export interface ICounter {
+    id: string;
+    conditions: ICondition[];
+}
+export interface ICondition {
+    _props: IConditionProps;
+    _parent: string;
+}
+export interface IConditionProps {
+    id: string;
+    dynamicLocale: boolean;
+}
+export interface IElimination extends IRepeatableQuest {
+    conditions: IEliminationConditions;
+}
+export interface IEliminationConditions extends IConditions {
+    AvailableForFinish: IEliminationAvailableFor[];
+}
+export interface IEliminationAvailableFor extends IAvailableFor {
+    _props: IEliminationAvailableForProps;
+}
+export interface IEliminationAvailableForProps extends IAvailableForPropsCounter {
+    counter: IEliminationCounter;
+}
+export interface IEliminationCounter extends ICounter {
+    conditions: IEliminationCondition[];
+}
+export interface IEliminationCondition extends ICondition {
+    _props: ILocationConditionProps | IKillConditionProps;
+}
+export interface IExploration extends IRepeatableQuest {
+    conditions: IExplorationConditions;
+}
+export interface IExplorationConditions extends IConditions {
+    AvailableForFinish: IExplorationAvailableFor[];
+}
+export interface IExplorationAvailableFor extends IAvailableFor {
+    _props: IExplorationAvailableForProps;
+}
+export interface IExplorationAvailableForProps extends IAvailableForPropsCounter {
+    counter: IExplorationCounter;
+}
+export interface IExplorationCounter extends ICounter {
+    conditions: IExplorationCondition[];
+}
+export interface IExplorationCondition extends ICondition {
+    _props: ILocationConditionProps | IExitStatusConditionProps | IExitNameConditionProps;
+}
+export interface ICompletion extends IRepeatableQuest {
+    conditions: ICompletionConditions;
+}
+export interface ICompletionConditions extends IConditions {
+    AvailableForFinish: ICompletionAvailableFor[];
+}
+export interface ICompletionAvailableFor extends IAvailableFor {
+    _props: ICompletionAvailableForProps;
+}
+export interface ICompletionAvailableForProps extends IAvailableForProps {
+    target: string[];
+    minDurability: number;
+    maxDurability: number;
+    dogtagLevel: number;
+    onlyFoundInRaid: boolean;
+}
+export interface ILocationConditionProps extends IConditionProps {
+    target: string[];
+}
+export interface IKillConditionProps extends IConditionProps {
+    target: string;
+    value: number;
+    savageRole?: string[];
+    bodyPart?: string[];
+    distance?: IDistanceCheck;
+}
+export interface IDistanceCheck {
+    compareMethod: string;
+    value: number;
+}
+export interface IExitStatusConditionProps extends IConditionProps {
+    status: string[];
+}
+export interface IExitNameConditionProps extends IConditionProps {
+    exitName: string;
+}
+export interface IRewardOptions {
+    itemsBlacklist: string[];
+}
+export interface IOptions {
+    Completion: ICompletionFilter;
+}
+export interface ICompletionFilter {
+    itemsBlacklist: ItemsBlacklist[];
+    itemsWhitelist: ItemsWhitelist[];
+}
+export interface ItemsBlacklist {
+    minPlayerLevel: number;
+    itemIds: string[];
+}
+export interface ItemsWhitelist {
+    minPlayerLevel: number;
+    itemIds: string[];
+}
+export interface ISampleQuests {
+    _id: string;
+    traderId: string;
+    location: string;
+    image: string;
+    type: string;
+    isKey: boolean;
+    restartable: boolean;
+    instantComplete: boolean;
+    secretQuest: boolean;
+    canShowNotificationsInGame: boolean;
+    rewards: IRewards;
+    conditions: IConditions;
+    name: string;
+    note: string;
+    description: string;
+    successMessageText: string;
+    failMessageText: string;
+    startedMessageText: string;
+    templateId: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/ITemplateItem.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/ITemplateItem.d.ts
new file mode 100644
index 0000000..934ea7d
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/ITemplateItem.d.ts
@@ -0,0 +1,451 @@
+export interface ITemplateItem {
+    _id: string;
+    _name: string;
+    _parent: string;
+    _type: string;
+    _props: Props;
+    _proto: string;
+}
+export interface Props {
+    Name?: string;
+    ShortName?: string;
+    Description?: string;
+    Weight?: number;
+    BackgroundColor?: string;
+    Width?: number;
+    Height?: number;
+    StackMaxSize?: number;
+    Rarity?: string;
+    SpawnChance?: number;
+    CreditsPrice?: number;
+    ItemSound?: string;
+    Prefab?: Prefab;
+    UsePrefab?: Prefab;
+    StackObjectsCount?: number;
+    NotShownInSlot?: boolean;
+    ExaminedByDefault?: boolean;
+    ExamineTime?: number;
+    IsUndiscardable?: boolean;
+    IsUnsaleable?: boolean;
+    IsUnbuyable?: boolean;
+    IsUngivable?: boolean;
+    IsLockedafterEquip?: boolean;
+    QuestItem?: boolean;
+    LootExperience?: number;
+    ExamineExperience?: number;
+    HideEntrails?: boolean;
+    RepairCost?: number;
+    RepairSpeed?: number;
+    ExtraSizeLeft?: number;
+    ExtraSizeRight?: number;
+    ExtraSizeUp?: number;
+    ExtraSizeDown?: number;
+    ExtraSizeForceAdd?: boolean;
+    MergesWithChildren?: boolean;
+    CanSellOnRagfair?: boolean;
+    CanRequireOnRagfair?: boolean;
+    ConflictingItems?: string[];
+    Unlootable?: boolean;
+    UnlootableFromSlot?: string;
+    UnlootableFromSide?: string[];
+    AnimationVariantsNumber?: number;
+    DiscardingBlock?: boolean;
+    RagFairCommissionModifier?: number;
+    IsAlwaysAvailableForInsurance?: boolean;
+    DiscardLimit?: number;
+    MaxResource?: number;
+    Resource?: number;
+    DogTagQualities?: boolean;
+    Grids?: Grid[];
+    Slots?: Slot[];
+    CanPutIntoDuringTheRaid?: boolean;
+    CantRemoveFromSlotsDuringRaid?: string[];
+    KeyIds?: string[];
+    TagColor?: number;
+    TagName?: string;
+    Durability?: number;
+    Accuracy?: number;
+    Recoil?: number;
+    Loudness?: number;
+    EffectiveDistance?: number;
+    Ergonomics?: number;
+    Velocity?: number;
+    RaidModdable?: boolean;
+    ToolModdable?: boolean;
+    BlocksFolding?: boolean;
+    BlocksCollapsible?: boolean;
+    IsAnimated?: boolean;
+    HasShoulderContact?: boolean;
+    SightingRange?: number;
+    DoubleActionAccuracyPenaltyMult?: number;
+    ModesCount: any;
+    DurabilityBurnModificator?: number;
+    HeatFactor?: number;
+    CoolFactor?: number;
+    muzzleModType?: string;
+    CustomAimPlane?: string;
+    sightModType?: string;
+    aimingSensitivity?: number;
+    SightModesCount?: number;
+    OpticCalibrationDistances?: number[];
+    ScopesCount?: number;
+    AimSensitivity: any;
+    Zooms?: number[][];
+    CalibrationDistances?: number[][];
+    Intensity?: number;
+    Mask?: string;
+    MaskSize?: number;
+    NoiseIntensity?: number;
+    NoiseScale?: number;
+    Color?: Color;
+    DiffuseIntensity?: number;
+    HasHinge?: boolean;
+    RampPalette?: string;
+    DepthFade?: number;
+    RoughnessCoef?: number;
+    SpecularCoef?: number;
+    MainTexColorCoef?: number;
+    MinimumTemperatureValue?: number;
+    RampShift?: number;
+    HeatMin?: number;
+    ColdMax?: number;
+    IsNoisy?: boolean;
+    IsFpsStuck?: boolean;
+    IsGlitch?: boolean;
+    IsMotionBlurred?: boolean;
+    IsPixelated?: boolean;
+    PixelationBlockCount?: number;
+    ShiftsAimCamera?: number;
+    magAnimationIndex?: number;
+    Cartridges?: Slot[];
+    CanFast?: boolean;
+    CanHit?: boolean;
+    CanAdmin?: boolean;
+    LoadUnloadModifier?: number;
+    CheckTimeModifier?: number;
+    CheckOverride?: number;
+    ReloadMagType?: string;
+    VisibleAmmoRangesString?: string;
+    MalfunctionChance?: number;
+    IsShoulderContact?: boolean;
+    Foldable?: boolean;
+    Retractable?: boolean;
+    SizeReduceRight?: number;
+    CenterOfImpact?: number;
+    ShotgunDispersion?: number;
+    IsSilencer?: boolean;
+    DeviationCurve?: number;
+    DeviationMax?: number;
+    SearchSound?: string;
+    BlocksArmorVest?: boolean;
+    speedPenaltyPercent?: number;
+    GridLayoutName?: string;
+    SpawnFilter?: any[];
+    containType?: any[];
+    sizeWidth?: number;
+    sizeHeight?: number;
+    isSecured?: boolean;
+    spawnTypes?: string;
+    lootFilter?: any[];
+    spawnRarity?: string;
+    minCountSpawn?: number;
+    maxCountSpawn?: number;
+    openedByKeyID?: any[];
+    RigLayoutName?: string;
+    MaxDurability?: number;
+    armorZone?: string[];
+    armorClass: any;
+    mousePenalty?: number;
+    weaponErgonomicPenalty?: number;
+    BluntThroughput?: number;
+    ArmorMaterial?: string;
+    weapClass?: string;
+    weapUseType?: string;
+    ammoCaliber?: string;
+    OperatingResource?: number;
+    RepairComplexity?: number;
+    durabSpawnMin?: number;
+    durabSpawnMax?: number;
+    isFastReload?: boolean;
+    RecoilForceUp?: number;
+    RecoilForceBack?: number;
+    Convergence?: number;
+    RecoilAngle?: number;
+    weapFireType?: string[];
+    RecolDispersion?: number;
+    SingleFireRate?: number;
+    CanQueueSecondShot?: boolean;
+    bFirerate?: number;
+    bEffDist?: number;
+    bHearDist?: number;
+    isChamberLoad?: boolean;
+    chamberAmmoCount?: number;
+    isBoltCatch?: boolean;
+    defMagType?: string;
+    defAmmo?: string;
+    AdjustCollimatorsToTrajectory?: boolean;
+    shotgunDispersion?: number;
+    Chambers?: Slot[];
+    CameraRecoil?: number;
+    CameraSnap?: number;
+    ReloadMode?: string;
+    AimPlane?: number;
+    TacticalReloadStiffnes?: Xyz;
+    TacticalReloadFixation?: number;
+    RecoilCenter?: Xyz;
+    RotationCenter?: Xyz;
+    RotationCenterNoStock?: Xyz;
+    FoldedSlot?: string;
+    CompactHandling?: boolean;
+    MinRepairDegradation?: number;
+    MaxRepairDegradation?: number;
+    IronSightRange?: number;
+    MustBoltBeOpennedForExternalReload?: boolean;
+    MustBoltBeOpennedForInternalReload?: boolean;
+    BoltAction?: boolean;
+    HipAccuracyRestorationDelay?: number;
+    HipAccuracyRestorationSpeed?: number;
+    HipInnaccuracyGain?: number;
+    ManualBoltCatch?: boolean;
+    BurstShotsCount?: number;
+    BaseMalfunctionChance?: number;
+    AllowJam?: boolean;
+    AllowFeed?: boolean;
+    AllowMisfire?: boolean;
+    AllowSlide?: boolean;
+    DurabilityBurnRatio?: number;
+    HeatFactorGun?: number;
+    CoolFactorGun?: number;
+    CoolFactorGunMods?: number;
+    HeatFactorByShot?: number;
+    AllowOverheat?: boolean;
+    DoubleActionAccuracyPenalty?: number;
+    RecoilPosZMult?: number;
+    MinRepairKitDegradation?: number;
+    MaxRepairKitDegradation?: number;
+    BlocksEarpiece?: boolean;
+    BlocksEyewear?: boolean;
+    BlocksHeadwear?: boolean;
+    BlocksFaceCover?: boolean;
+    Indestructibility?: number;
+    headSegments?: string[];
+    FaceShieldComponent?: boolean;
+    FaceShieldMask?: string;
+    MaterialType?: string;
+    RicochetParams?: Xyz;
+    DeafStrength?: string;
+    BlindnessProtection?: number;
+    Distortion?: number;
+    CompressorTreshold?: number;
+    CompressorAttack?: number;
+    CompressorRelease?: number;
+    CompressorGain?: number;
+    CutoffFreq?: number;
+    Resonance?: number;
+    CompressorVolume?: number;
+    AmbientVolume?: number;
+    DryVolume?: number;
+    foodUseTime?: number;
+    foodEffectType?: string;
+    StimulatorBuffs?: string;
+    effects_health: any;
+    effects_damage: any;
+    MaximumNumberOfUsage?: number;
+    knifeHitDelay?: number;
+    knifeHitSlashRate?: number;
+    knifeHitStabRate?: number;
+    knifeHitRadius?: number;
+    knifeHitSlashDam?: number;
+    knifeHitStabDam?: number;
+    knifeDurab?: number;
+    PrimaryDistance?: number;
+    SecondryDistance?: number;
+    SlashPenetration?: number;
+    StabPenetration?: number;
+    PrimaryConsumption?: number;
+    SecondryConsumption?: number;
+    DeflectionConsumption?: number;
+    AppliedTrunkRotation?: Xyz;
+    AppliedHeadRotation?: Xyz;
+    DisplayOnModel?: boolean;
+    AdditionalAnimationLayer?: number;
+    StaminaBurnRate?: number;
+    ColliderScaleMultiplier?: Xyz;
+    ConfigPathStr?: string;
+    MaxMarkersCount?: number;
+    scaleMin?: number;
+    scaleMax?: number;
+    medUseTime?: number;
+    medEffectType?: string;
+    MaxHpResource?: number;
+    hpResourceRate?: number;
+    apResource?: number;
+    krResource?: number;
+    MaxOpticZoom?: number;
+    MaxRepairResource?: number;
+    TargetItemFilter?: string[];
+    RepairQuality?: number;
+    RepairType?: string;
+    StackMinRandom?: number;
+    StackMaxRandom?: number;
+    ammoType?: string;
+    InitialSpeed?: number;
+    BallisticCoeficient?: number;
+    BulletMassGram?: number;
+    BulletDiameterMilimeters?: number;
+    Damage?: number;
+    ammoAccr?: number;
+    ammoRec?: number;
+    ammoDist?: number;
+    buckshotBullets?: number;
+    PenetrationPower?: number;
+    PenetrationPowerDiviation?: number;
+    ammoHear?: number;
+    ammoSfx?: string;
+    MisfireChance?: number;
+    MinFragmentsCount?: number;
+    MaxFragmentsCount?: number;
+    ammoShiftChance?: number;
+    casingName?: string;
+    casingEjectPower?: number;
+    casingMass?: number;
+    casingSounds?: string;
+    ProjectileCount?: number;
+    PenetrationChance?: number;
+    RicochetChance?: number;
+    FragmentationChance?: number;
+    Deterioration?: number;
+    SpeedRetardation?: number;
+    Tracer?: boolean;
+    TracerColor?: string;
+    TracerDistance?: number;
+    ArmorDamage?: number;
+    Caliber?: string;
+    StaminaBurnPerDamage?: number;
+    HeavyBleedingDelta?: number;
+    LightBleedingDelta?: number;
+    ShowBullet?: boolean;
+    HasGrenaderComponent?: boolean;
+    FuzeArmTimeSec?: number;
+    ExplosionStrength?: number;
+    MinExplosionDistance?: number;
+    MaxExplosionDistance?: number;
+    FragmentsCount?: number;
+    FragmentType?: string;
+    ShowHitEffectOnExplode?: boolean;
+    ExplosionType?: string;
+    AmmoLifeTimeSec?: number;
+    Contusion?: Xyz;
+    ArmorDistanceDistanceDamage?: Xyz;
+    Blindness?: Xyz;
+    IsLightAndSoundShot?: boolean;
+    LightAndSoundShotAngle?: number;
+    LightAndSoundShotSelfContusionTime?: number;
+    LightAndSoundShotSelfContusionStrength?: number;
+    MalfMisfireChance?: number;
+    MalfFeedChance?: number;
+    StackSlots?: StackSlot[];
+    type?: string;
+    eqMin?: number;
+    eqMax?: number;
+    rate?: number;
+    ThrowType?: string;
+    ExplDelay?: number;
+    Strength?: number;
+    ContusionDistance?: number;
+    throwDamMax?: number;
+    explDelay?: number;
+    EmitTime?: number;
+    CanBeHiddenDuringThrow?: boolean;
+    MinTimeToContactExplode?: number;
+    ExplosionEffectType?: string;
+}
+export interface Prefab {
+    path: string;
+    rcid: string;
+}
+export interface Grid {
+    _name: string;
+    _id: string;
+    _parent: string;
+    _props: GridProps;
+    _proto: string;
+}
+export interface GridProps {
+    filters: GridFilter[];
+    cellsH: number;
+    cellsV: number;
+    minCount: number;
+    maxCount: number;
+    maxWeight: number;
+    isSortingTable: boolean;
+}
+export interface GridFilter {
+    Filter: string[];
+    ExcludedFilter: string[];
+}
+export interface Slot {
+    _name: string;
+    _id: string;
+    _parent: string;
+    _props: SlotProps;
+    _max_count?: number;
+    _required: boolean;
+    _mergeSlotWithChildren: boolean;
+    _proto: string;
+}
+export interface SlotProps {
+    filters: SlotFilter[];
+}
+export interface SlotFilter {
+    Shift?: number;
+    Filter: string[];
+    AnimationIndex?: number;
+}
+export interface Xyz {
+    x: number;
+    y: number;
+    z: number;
+}
+export interface StackSlot {
+    _name?: string;
+    _id: string;
+    _parent: string;
+    _max_count: number;
+    _props: StackSlotProps;
+    _proto: string;
+    upd: any;
+}
+export interface StackSlotProps {
+    filters: SlotFilter[];
+}
+export interface EffectsHealth {
+    Energy: EffectsHealthProps;
+    Hydration: EffectsHealthProps;
+}
+export interface EffectsHealthProps {
+    value: number;
+}
+export interface EffectsDamage {
+    Pain: EffectDamageProps;
+    LightBleeding: EffectDamageProps;
+    HeavyBleeding: EffectDamageProps;
+    Contusion: EffectDamageProps;
+    RadExposure: EffectDamageProps;
+    Fracture: EffectDamageProps;
+    DestroyedPart: EffectDamageProps;
+}
+export interface EffectDamageProps {
+    delay: number;
+    duration: number;
+    fadeOut: number;
+    cost?: number;
+    healthPenaltyMin?: number;
+    healthPenaltyMax?: number;
+}
+export interface Color {
+    r: number;
+    g: number;
+    b: number;
+    a: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/ITrader.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/ITrader.d.ts
new file mode 100644
index 0000000..f0fe2b5
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/ITrader.d.ts
@@ -0,0 +1,90 @@
+import { Item } from "./IItem";
+export interface ITrader {
+    assort: ITraderAssort;
+    base: ITraderBase;
+    dialogue?: Record<string, string[]>;
+    questassort: Record<string, Record<string, string>>;
+    suits?: ISuit[];
+}
+export interface ITraderBase {
+    refreshAssort: boolean;
+    _id: string;
+    avatar: string;
+    balance_dol: number;
+    balance_eur: number;
+    balance_rub: number;
+    buyer_up: boolean;
+    currency: string;
+    customization_seller: boolean;
+    discount: number;
+    discount_end: number;
+    gridHeight: number;
+    insurance: Insurance;
+    location: string;
+    loyaltyLevels: LoyaltyLevel[];
+    medic: boolean;
+    name: string;
+    nextResupply: number;
+    nickname: string;
+    repair: Repair;
+    sell_category: string[];
+    surname: string;
+    unlockedByDefault: boolean;
+}
+export interface Insurance {
+    availability: boolean;
+    excluded_category: string[];
+    max_return_hour: number;
+    max_storage_time: number;
+    min_payment: number;
+    min_return_hour: number;
+}
+export interface LoyaltyLevel {
+    buy_price_coef: number;
+    exchange_price_coef: number;
+    heal_price_coef: number;
+    insurance_price_coef: number;
+    minLevel: number;
+    minSalesSum: number;
+    minStanding: number;
+    repair_price_coef: number;
+}
+export interface Repair {
+    availability: boolean;
+    currency: string;
+    currency_coefficient: number;
+    excluded_category: string[];
+    excluded_id_list: any[];
+    quality: string;
+}
+export interface ITraderAssort {
+    nextResupply?: number;
+    items: Item[];
+    barter_scheme: Record<string, IBarterScheme[][]>;
+    loyal_level_items: Record<string, number>;
+}
+export interface IBarterScheme {
+    count: number;
+    _tpl: string;
+    onlyFunctional?: boolean;
+}
+export interface ISuit {
+    _id: string;
+    tid: string;
+    suiteId: string;
+    isActive: boolean;
+    requirements: Requirements;
+}
+export interface Requirements {
+    loyaltyLevel: number;
+    profileLevel: number;
+    standing: number;
+    skillRequirements: string[];
+    questRequirements: string[];
+    itemRequirements: ItemRequirement[];
+}
+export interface ItemRequirement {
+    count: number;
+    _tpl: string;
+    onlyFunctional: boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/customization/IBuyClothingRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/customization/IBuyClothingRequestData.d.ts
new file mode 100644
index 0000000..d19b70d
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/customization/IBuyClothingRequestData.d.ts
@@ -0,0 +1,10 @@
+export interface IBuyClothingRequestData {
+    Action: "CustomizationBuy";
+    offer: string;
+    items: ClothingItem[];
+}
+export interface ClothingItem {
+    del: boolean;
+    id: string;
+    count: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/customization/IWearClothingRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/customization/IWearClothingRequestData.d.ts
new file mode 100644
index 0000000..122d9cf
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/customization/IWearClothingRequestData.d.ts
@@ -0,0 +1,4 @@
+export interface IWearClothingRequestData {
+    Action: "CustomizationWear";
+    suites: string[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IFriendRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IFriendRequestData.d.ts
new file mode 100644
index 0000000..9c326ac
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IFriendRequestData.d.ts
@@ -0,0 +1,3 @@
+export interface IFriendRequestData {
+    to: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IGetAllAttachmentsRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IGetAllAttachmentsRequestData.d.ts
new file mode 100644
index 0000000..53d8289
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IGetAllAttachmentsRequestData.d.ts
@@ -0,0 +1,3 @@
+export interface IGetAllAttachmentsRequestData {
+    dialogId: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IGetAllAttachmentsResponse.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IGetAllAttachmentsResponse.d.ts
new file mode 100644
index 0000000..076d414
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IGetAllAttachmentsResponse.d.ts
@@ -0,0 +1,6 @@
+import { Message } from "../profile/IAkiProfile";
+export interface IGetAllAttachmentsResponse {
+    messages: Message[];
+    profiles: any[];
+    hasMessagesWithRewards: boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IGetChatServerListRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IGetChatServerListRequestData.d.ts
new file mode 100644
index 0000000..8f1beac
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IGetChatServerListRequestData.d.ts
@@ -0,0 +1,3 @@
+export interface IGetChatServerListRequestData {
+    VersionId: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IGetFriendListDataResponse.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IGetFriendListDataResponse.d.ts
new file mode 100644
index 0000000..1d0c0e8
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IGetFriendListDataResponse.d.ts
@@ -0,0 +1,16 @@
+import { MemberCategory } from "../../enums/MemberCategory";
+export interface IGetFriendListDataResponse {
+    Friends: Friend[];
+    Ignore: any[];
+    InIgnoreList: any[];
+}
+export interface Friend {
+    _id: string;
+    Info: Info;
+}
+export interface Info {
+    Nickname: string;
+    Side: string;
+    Level: number;
+    MemberCategory: MemberCategory;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IGetMailDialogInfoRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IGetMailDialogInfoRequestData.d.ts
new file mode 100644
index 0000000..eed84b1
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IGetMailDialogInfoRequestData.d.ts
@@ -0,0 +1,3 @@
+export interface IGetMailDialogInfoRequestData {
+    dialogId: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IGetMailDialogListRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IGetMailDialogListRequestData.d.ts
new file mode 100644
index 0000000..f8fbf5d
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IGetMailDialogListRequestData.d.ts
@@ -0,0 +1,4 @@
+export interface IGetMailDialogListRequestData {
+    limit: number;
+    offset: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IGetMailDialogViewRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IGetMailDialogViewRequestData.d.ts
new file mode 100644
index 0000000..43d416e
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IGetMailDialogViewRequestData.d.ts
@@ -0,0 +1,7 @@
+import { MessageType } from "../../enums/MessageType";
+export interface IGetMailDialogViewRequestData {
+    type: MessageType;
+    dialogId: string;
+    limit: number;
+    time: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IGetMailDialogViewResponseData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IGetMailDialogViewResponseData.d.ts
new file mode 100644
index 0000000..4f8b946
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IGetMailDialogViewResponseData.d.ts
@@ -0,0 +1,7 @@
+import { IPmcData } from "../common/IPmcData";
+import { Message } from "../profile/IAkiProfile";
+export interface IGetMailDialogViewResponseData {
+    messages: Message[];
+    profiles: IPmcData[];
+    hasMessagesWithRewards: boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IPinDialogRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IPinDialogRequestData.d.ts
new file mode 100644
index 0000000..57b8a00
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IPinDialogRequestData.d.ts
@@ -0,0 +1,3 @@
+export interface IPinDialogRequestData {
+    dialogId: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IRemoveDialogRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IRemoveDialogRequestData.d.ts
new file mode 100644
index 0000000..874b828
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/IRemoveDialogRequestData.d.ts
@@ -0,0 +1,3 @@
+export interface IRemoveDialogRequestData {
+    dialogId: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/ISendMessageRequest.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/ISendMessageRequest.d.ts
new file mode 100644
index 0000000..dd79deb
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/ISendMessageRequest.d.ts
@@ -0,0 +1,7 @@
+import { MessageType } from "../../enums/MessageType";
+export interface ISendMessageRequest {
+    dialogId: string;
+    type: MessageType;
+    text: string;
+    replyTo: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/ISetDialogReadRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/ISetDialogReadRequestData.d.ts
new file mode 100644
index 0000000..2076232
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/dialog/ISetDialogReadRequestData.d.ts
@@ -0,0 +1,3 @@
+export interface ISetDialogReadRequestData {
+    dialogs: string[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/game/IGameConfigResponse.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/game/IGameConfigResponse.d.ts
new file mode 100644
index 0000000..eb37a39
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/game/IGameConfigResponse.d.ts
@@ -0,0 +1,19 @@
+export interface IGameConfigResponse {
+    aid: string;
+    lang: string;
+    languages: Record<string, string>;
+    ndaFree: boolean;
+    taxonomy: number;
+    activeProfileId: string;
+    backend: Backend;
+    utc_time: number;
+    totalInGame: number;
+    reportAvailable: boolean;
+    twitchEventMember: boolean;
+}
+export interface Backend {
+    Trading: string;
+    Messaging: string;
+    Main: string;
+    RagFair: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/game/IGameEmptyCrcRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/game/IGameEmptyCrcRequestData.d.ts
new file mode 100644
index 0000000..a3ecad9
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/game/IGameEmptyCrcRequestData.d.ts
@@ -0,0 +1,3 @@
+export interface IGameEmptyCrcRequestData {
+    crc: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/game/IVersionValidateRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/game/IVersionValidateRequestData.d.ts
new file mode 100644
index 0000000..0aa0fed
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/game/IVersionValidateRequestData.d.ts
@@ -0,0 +1,11 @@
+export interface IVersionValidateRequestData {
+    version: Version;
+    develop: boolean;
+}
+export interface Version {
+    major: string;
+    minor: string;
+    game: string;
+    backend: string;
+    taxonomy: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/health/IHealthTreatmentRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/health/IHealthTreatmentRequestData.d.ts
new file mode 100644
index 0000000..7fb80a8
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/health/IHealthTreatmentRequestData.d.ts
@@ -0,0 +1,29 @@
+export interface IHealthTreatmentRequestData {
+    Action: "RestoreHealth";
+    trader: string;
+    items: Item[];
+    difference: Difference;
+    timestamp: number;
+}
+export interface Item {
+    id: string;
+    count: number;
+}
+export interface Difference {
+    BodyParts: BodyParts;
+    Energy: number;
+    Hydration: number;
+}
+export interface BodyParts {
+    Head: BodyPart;
+    Chest: BodyPart;
+    Stomach: BodyPart;
+    LeftArm: BodyPart;
+    RightArm: BodyPart;
+    LeftLeg: BodyPart;
+    RightLeg: BodyPart;
+}
+export interface BodyPart {
+    Health: number;
+    Effects: string[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/health/IOffraidEatRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/health/IOffraidEatRequestData.d.ts
new file mode 100644
index 0000000..8e2b6c3
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/health/IOffraidEatRequestData.d.ts
@@ -0,0 +1,7 @@
+import { IBaseInteractionRequestData } from "../common/request/IBaseInteractionRequestData";
+export interface IOffraidEatRequestData extends IBaseInteractionRequestData {
+    Action: "Eat";
+    item: string;
+    count: number;
+    time: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/health/IOffraidHealRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/health/IOffraidHealRequestData.d.ts
new file mode 100644
index 0000000..c242300
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/health/IOffraidHealRequestData.d.ts
@@ -0,0 +1,18 @@
+import { IBaseInteractionRequestData } from "../common/request/IBaseInteractionRequestData";
+export interface IOffraidHealRequestData extends IBaseInteractionRequestData {
+    Action: "Heal";
+    item: string;
+    part: BodyPart;
+    count: number;
+    time: number;
+}
+export declare enum BodyPart {
+    Head = 0,
+    Chest = 1,
+    Stomach = 2,
+    LeftArm = 3,
+    RightArm = 4,
+    LeftLeg = 5,
+    RightLeg = 6,
+    Common = 7
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/health/ISyncHealthRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/health/ISyncHealthRequestData.d.ts
new file mode 100644
index 0000000..20e32f6
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/health/ISyncHealthRequestData.d.ts
@@ -0,0 +1,21 @@
+export interface ISyncHealthRequestData {
+    Health: Health;
+    IsAlive: boolean;
+    Hydration?: number;
+    Energy?: number;
+    Temperature?: number;
+}
+export interface Health {
+    Head?: BodyPartHealth;
+    Chest?: BodyPartHealth;
+    Stomach?: BodyPartHealth;
+    LeftArm?: BodyPartHealth;
+    RightArm?: BodyPartHealth;
+    LeftLeg?: BodyPartHealth;
+    RightLeg?: BodyPartHealth;
+}
+export interface BodyPartHealth {
+    Maximum: number;
+    Current: number;
+    Effects: Record<string, number>;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/HideoutUpgradeCompleteRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/HideoutUpgradeCompleteRequestData.d.ts
new file mode 100644
index 0000000..8583e8d
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/HideoutUpgradeCompleteRequestData.d.ts
@@ -0,0 +1,5 @@
+export interface HideoutUpgradeCompleteRequestData {
+    Action: string;
+    areaType: number;
+    timestamp: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutArea.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutArea.d.ts
new file mode 100644
index 0000000..d9fd2bf
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutArea.d.ts
@@ -0,0 +1,40 @@
+export interface IHideoutArea {
+    _id: string;
+    type: number;
+    enabled: boolean;
+    needsFuel: boolean;
+    takeFromSlotLocked: boolean;
+    craftGivesExp: boolean;
+    stages: Record<string, Stage>;
+}
+export interface Stage {
+    requirements: Requirement[];
+    bonuses: StageBonus[];
+    slots: number;
+    constructionTime: number;
+    description: string;
+}
+export interface Requirement {
+    areaType?: number;
+    requiredLevel?: number;
+    type: string;
+    templateId?: string;
+    count?: number;
+    isFunctional?: boolean;
+    traderId?: string;
+    loyaltyLevel?: number;
+    skillName?: string;
+    skillLevel?: number;
+}
+export interface StageBonus {
+    value: number;
+    passive: boolean;
+    production: boolean;
+    visible: boolean;
+    skillType?: string;
+    type: string;
+    filter?: string[];
+    icon?: string;
+    id?: string;
+    templateId?: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutContinousProductionStartRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutContinousProductionStartRequestData.d.ts
new file mode 100644
index 0000000..dba83eb
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutContinousProductionStartRequestData.d.ts
@@ -0,0 +1,5 @@
+export interface IHideoutContinousProductionStartRequestData {
+    Action: "HideoutContinuousProductionStart";
+    recipeId: string;
+    timestamp: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutProduction.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutProduction.d.ts
new file mode 100644
index 0000000..ce878be
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutProduction.d.ts
@@ -0,0 +1,20 @@
+export interface IHideoutProduction {
+    _id: string;
+    areaType: number;
+    requirements: Requirement[];
+    productionTime: number;
+    boosters: any;
+    endProduct: string;
+    continuous: boolean;
+    count: number;
+    productionLimitCount: number;
+}
+export interface Requirement {
+    templateId?: string;
+    count?: number;
+    isFunctional?: boolean;
+    type: string;
+    areaType?: number;
+    requiredLevel?: number;
+    resource?: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutPutItemInRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutPutItemInRequestData.d.ts
new file mode 100644
index 0000000..8326c55
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutPutItemInRequestData.d.ts
@@ -0,0 +1,10 @@
+export interface IHideoutPutItemInRequestData {
+    Action: "HideoutPutItemsInAreaSlots";
+    areaType: number;
+    items: Record<string, ItemDetails>;
+    timestamp: number;
+}
+export interface ItemDetails {
+    count: number;
+    id: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutScavCase.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutScavCase.d.ts
new file mode 100644
index 0000000..25abcf3
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutScavCase.d.ts
@@ -0,0 +1,21 @@
+export interface IHideoutScavCase {
+    _id: string;
+    ProductionTime: number;
+    Requirements: Requirement[];
+    EndProducts: EndProducts;
+}
+export interface Requirement {
+    templateId: string;
+    count: number;
+    isFunctional: boolean;
+    type: string;
+}
+export interface EndProducts {
+    Common: MinMax;
+    Rare: MinMax;
+    Superrare: MinMax;
+}
+export interface MinMax {
+    min: string;
+    max: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutScavCaseStartRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutScavCaseStartRequestData.d.ts
new file mode 100644
index 0000000..72fda86
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutScavCaseStartRequestData.d.ts
@@ -0,0 +1,15 @@
+export interface IHideoutScavCaseStartRequestData {
+    Action: "HideoutScavCaseProductionStart";
+    recipeId: string;
+    items: HideoutItem[];
+    tools: Tool[];
+    timestamp: number;
+}
+export interface HideoutItem {
+    id: string;
+    count: number;
+}
+export interface Tool {
+    id: string;
+    count: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutSettingsBase.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutSettingsBase.d.ts
new file mode 100644
index 0000000..8e45939
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutSettingsBase.d.ts
@@ -0,0 +1,6 @@
+export interface IHideoutSettingsBase {
+    generatorSpeedWithoutFuel: number;
+    generatorFuelFlowRate: number;
+    airFilterUnitFlowRate: number;
+    gpuBoostRate: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutSingleProductionStartRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutSingleProductionStartRequestData.d.ts
new file mode 100644
index 0000000..1ed542a
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutSingleProductionStartRequestData.d.ts
@@ -0,0 +1,10 @@
+export interface IHideoutSingleProductionStartRequestData {
+    Action: "HideoutSingleProductionStart";
+    recipeId: string;
+    items: Item[];
+    timestamp: number;
+}
+export interface Item {
+    id: string;
+    count: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutTakeItemOutRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutTakeItemOutRequestData.d.ts
new file mode 100644
index 0000000..83a740a
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutTakeItemOutRequestData.d.ts
@@ -0,0 +1,6 @@
+export interface IHideoutTakeItemOutRequestData {
+    Action: "HideoutTakeItemsFromAreaSlots";
+    areaType: number;
+    slots: number[];
+    timestamp: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutTakeProductionRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutTakeProductionRequestData.d.ts
new file mode 100644
index 0000000..a6847ef
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutTakeProductionRequestData.d.ts
@@ -0,0 +1,5 @@
+export interface IHideoutTakeProductionRequestData {
+    Action: "HideoutTakeProduction";
+    recipeId: string;
+    timestamp: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutToggleAreaRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutToggleAreaRequestData.d.ts
new file mode 100644
index 0000000..cdea513
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutToggleAreaRequestData.d.ts
@@ -0,0 +1,6 @@
+export interface IHideoutToggleAreaRequestData {
+    Action: "HideoutToggleArea";
+    areaType: number;
+    enabled: boolean;
+    timestamp: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutUpgradeCompleteRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutUpgradeCompleteRequestData.d.ts
new file mode 100644
index 0000000..545311e
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutUpgradeCompleteRequestData.d.ts
@@ -0,0 +1,5 @@
+export interface IHideoutUpgradeCompleteRequestData {
+    Action: "HideoutUpgradeComplete";
+    areaType: number;
+    timestamp: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutUpgradeRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutUpgradeRequestData.d.ts
new file mode 100644
index 0000000..dfbfdca
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/hideout/IHideoutUpgradeRequestData.d.ts
@@ -0,0 +1,10 @@
+export interface IHideoutUpgradeRequestData {
+    Action: "HideoutUpgrade";
+    areaType: number;
+    items: HideoutItem[];
+    timestamp: number;
+}
+export interface HideoutItem {
+    count: number;
+    id: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/httpResponse/IGetBodyResponseData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/httpResponse/IGetBodyResponseData.d.ts
new file mode 100644
index 0000000..b5dc5c1
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/httpResponse/IGetBodyResponseData.d.ts
@@ -0,0 +1,5 @@
+export interface IGetBodyResponseData<Type> {
+    err: number;
+    errmsg: any;
+    (data: Type): Type;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/httpResponse/INullResponseData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/httpResponse/INullResponseData.d.ts
new file mode 100644
index 0000000..a3ae838
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/httpResponse/INullResponseData.d.ts
@@ -0,0 +1,5 @@
+export interface INullResponseData {
+    err: number;
+    errmsg: any;
+    data: null;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/inRaid/IRegisterPlayerRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/inRaid/IRegisterPlayerRequestData.d.ts
new file mode 100644
index 0000000..e2d9cf1
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/inRaid/IRegisterPlayerRequestData.d.ts
@@ -0,0 +1,5 @@
+export interface IRegisterPlayerRequestData {
+    crc: number;
+    locationId: string;
+    variantId: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/inRaid/ISaveProgressRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/inRaid/ISaveProgressRequestData.d.ts
new file mode 100644
index 0000000..6930261
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/inRaid/ISaveProgressRequestData.d.ts
@@ -0,0 +1,8 @@
+import { IPmcData } from "../common/IPmcData";
+import { ISyncHealthRequestData } from "../health/ISyncHealthRequestData";
+export interface ISaveProgressRequestData {
+    exit: string;
+    profile: IPmcData;
+    isPlayerScav: boolean;
+    health: ISyncHealthRequestData;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/insurance/IGetInsuranceCostRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/insurance/IGetInsuranceCostRequestData.d.ts
new file mode 100644
index 0000000..0e32e96
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/insurance/IGetInsuranceCostRequestData.d.ts
@@ -0,0 +1,4 @@
+export interface IGetInsuranceCostRequestData {
+    traders: string[];
+    items: string[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/insurance/IInsureRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/insurance/IInsureRequestData.d.ts
new file mode 100644
index 0000000..f657bb7
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/insurance/IInsureRequestData.d.ts
@@ -0,0 +1,6 @@
+import { IBaseInteractionRequestData } from "../common/request/IBaseInteractionRequestData";
+export interface IInsureRequestData extends IBaseInteractionRequestData {
+    Action: "Insure";
+    tid: string;
+    items: string[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IAddItemRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IAddItemRequestData.d.ts
new file mode 100644
index 0000000..53db97a
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IAddItemRequestData.d.ts
@@ -0,0 +1,4 @@
+export interface IAddItemRequestData {
+    tid: string;
+    items: any[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryAddRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryAddRequestData.d.ts
new file mode 100644
index 0000000..462e0de
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryAddRequestData.d.ts
@@ -0,0 +1,6 @@
+import { Container, IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData";
+export interface IInventoryAddRequestData extends IInventoryBaseActionRequestData {
+    Action: "Add";
+    item: string;
+    container: Container;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryBaseActionRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryBaseActionRequestData.d.ts
new file mode 100644
index 0000000..b45e459
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryBaseActionRequestData.d.ts
@@ -0,0 +1,27 @@
+import { IBaseInteractionRequestData } from "../common/request/IBaseInteractionRequestData";
+export interface IInventoryBaseActionRequestData extends IBaseInteractionRequestData {
+}
+export interface To {
+    id: string;
+    container: string;
+    location?: ToLocation | number;
+}
+export interface ToLocation {
+    x: number;
+    y: number;
+    r: string;
+    rotation?: string;
+    isSearched: boolean;
+}
+export interface Container {
+    id: string;
+    container: string;
+    location: Location | number;
+}
+export interface Location {
+    x: number;
+    y: number;
+    r: string;
+    rotation?: string;
+    isSearched: boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryBindRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryBindRequestData.d.ts
new file mode 100644
index 0000000..ff35066
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryBindRequestData.d.ts
@@ -0,0 +1,6 @@
+import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData";
+export interface IInventoryBindRequestData extends IInventoryBaseActionRequestData {
+    Action: "Bind";
+    item: string;
+    index: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryCreateMarkerRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryCreateMarkerRequestData.d.ts
new file mode 100644
index 0000000..1e1ecef
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryCreateMarkerRequestData.d.ts
@@ -0,0 +1,12 @@
+import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData";
+export interface IInventoryCreateMarkerRequestData extends IInventoryBaseActionRequestData {
+    Action: "CreateMapMarker";
+    item: string;
+    mapMarker: MapMarker;
+}
+export interface MapMarker {
+    Type: string;
+    X: number;
+    Y: number;
+    Note: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryDeleteMarkerRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryDeleteMarkerRequestData.d.ts
new file mode 100644
index 0000000..0657e1b
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryDeleteMarkerRequestData.d.ts
@@ -0,0 +1,7 @@
+import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData";
+export interface IInventoryDeleteMarkerRequestData extends IInventoryBaseActionRequestData {
+    Action: "DeleteMapMarker";
+    item: string;
+    X: number;
+    Y: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryEditMarkerRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryEditMarkerRequestData.d.ts
new file mode 100644
index 0000000..e2857e1
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryEditMarkerRequestData.d.ts
@@ -0,0 +1,14 @@
+import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData";
+export interface IInventoryEditMarkerRequestData extends IInventoryBaseActionRequestData {
+    Action: "EditMapMarker";
+    item: string;
+    X: number;
+    Y: number;
+    mapMarker: MapMarker;
+}
+export interface MapMarker {
+    Type: string;
+    X: number;
+    Y: number;
+    Note: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryExamineRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryExamineRequestData.d.ts
new file mode 100644
index 0000000..614711f
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryExamineRequestData.d.ts
@@ -0,0 +1,10 @@
+import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData";
+export interface IInventoryExamineRequestData extends IInventoryBaseActionRequestData {
+    Action: "Examine";
+    item: string;
+    fromOwner: IFromOwner;
+}
+export interface IFromOwner {
+    id: string;
+    type: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryFoldRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryFoldRequestData.d.ts
new file mode 100644
index 0000000..a5fb2a1
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryFoldRequestData.d.ts
@@ -0,0 +1,6 @@
+import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData";
+export interface IInventoryFoldRequestData extends IInventoryBaseActionRequestData {
+    Action: "Fold";
+    item: string;
+    value: boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryMergeRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryMergeRequestData.d.ts
new file mode 100644
index 0000000..3fcfa35
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryMergeRequestData.d.ts
@@ -0,0 +1,6 @@
+import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData";
+export interface IInventoryMergeRequestData extends IInventoryBaseActionRequestData {
+    Action: "Merge";
+    item: string;
+    with: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryMoveRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryMoveRequestData.d.ts
new file mode 100644
index 0000000..b767908
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryMoveRequestData.d.ts
@@ -0,0 +1,6 @@
+import { IInventoryBaseActionRequestData, To } from "./IInventoryBaseActionRequestData";
+export interface IInventoryMoveRequestData extends IInventoryBaseActionRequestData {
+    Action: "Move";
+    item: string;
+    to: To;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryReadEncyclopediaRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryReadEncyclopediaRequestData.d.ts
new file mode 100644
index 0000000..5487b20
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryReadEncyclopediaRequestData.d.ts
@@ -0,0 +1,5 @@
+import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData";
+export interface IInventoryReadEncyclopediaRequestData extends IInventoryBaseActionRequestData {
+    Action: "ReadEncyclopedia";
+    ids: string[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryRemoveRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryRemoveRequestData.d.ts
new file mode 100644
index 0000000..07d1a52
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryRemoveRequestData.d.ts
@@ -0,0 +1,5 @@
+import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData";
+export interface IInventoryRemoveRequestData extends IInventoryBaseActionRequestData {
+    Action: "Remove";
+    item: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventorySortRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventorySortRequestData.d.ts
new file mode 100644
index 0000000..a0b7928
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventorySortRequestData.d.ts
@@ -0,0 +1,20 @@
+import { Upd } from "../common/tables/IItem";
+import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData";
+export interface IInventorySortRequestData extends IInventoryBaseActionRequestData {
+    Action: "ApplyInventoryChanges";
+    changedItems: ChangedItem[];
+}
+export interface ChangedItem {
+    _id: string;
+    _tpl: string;
+    parentId: string;
+    slotId: string;
+    location: Location;
+    upd: Upd;
+}
+export interface Location {
+    x: number;
+    y: number;
+    r: string;
+    isSearched: boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventorySplitRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventorySplitRequestData.d.ts
new file mode 100644
index 0000000..730ae71
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventorySplitRequestData.d.ts
@@ -0,0 +1,7 @@
+import { Container, IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData";
+export interface IInventorySplitRequestData extends IInventoryBaseActionRequestData {
+    Action: "Split";
+    item: string;
+    container: Container;
+    count: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventorySwapRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventorySwapRequestData.d.ts
new file mode 100644
index 0000000..1b0464d
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventorySwapRequestData.d.ts
@@ -0,0 +1,11 @@
+import { OwnerInfo } from "../common/request/IBaseInteractionRequestData";
+import { IInventoryBaseActionRequestData, To } from "./IInventoryBaseActionRequestData";
+export interface IInventorySwapRequestData extends IInventoryBaseActionRequestData {
+    Action: "Swap";
+    item: string;
+    to: To;
+    item2: string;
+    to2: To;
+    fromOwner2: OwnerInfo;
+    toOwner2: OwnerInfo;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryTagRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryTagRequestData.d.ts
new file mode 100644
index 0000000..f021661
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryTagRequestData.d.ts
@@ -0,0 +1,7 @@
+import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData";
+export interface IInventoryTagRequestData extends IInventoryBaseActionRequestData {
+    Action: "Tag";
+    item: string;
+    TagName: string;
+    TagColor: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryToggleRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryToggleRequestData.d.ts
new file mode 100644
index 0000000..0955440
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryToggleRequestData.d.ts
@@ -0,0 +1,6 @@
+import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData";
+export interface IInventoryToggleRequestData extends IInventoryBaseActionRequestData {
+    Action: "Toggle";
+    item: string;
+    value: boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryTransferRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryTransferRequestData.d.ts
new file mode 100644
index 0000000..cf4391b
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/inventory/IInventoryTransferRequestData.d.ts
@@ -0,0 +1,7 @@
+import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData";
+export interface IInventoryTransferRequestData extends IInventoryBaseActionRequestData {
+    Action: "Transfer";
+    item: string;
+    with: string;
+    count: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/itemEvent/IEmptyItemEventRouterResponse.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/itemEvent/IEmptyItemEventRouterResponse.d.ts
new file mode 100644
index 0000000..689fe75
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/itemEvent/IEmptyItemEventRouterResponse.d.ts
@@ -0,0 +1,4 @@
+import { IItemEventRouterBase } from "./IItemEventRouterBase";
+export interface IEmptyItemEventRouterResponse extends IItemEventRouterBase {
+    profileChanges: "";
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/itemEvent/IItemEventRouterBase.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/itemEvent/IItemEventRouterBase.d.ts
new file mode 100644
index 0000000..31e62fe
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/itemEvent/IItemEventRouterBase.d.ts
@@ -0,0 +1,67 @@
+import { Skills } from "../common/IPmcData";
+import { Item, Upd } from "../common/tables/IItem";
+import { IQuest } from "../common/tables/IQuest";
+import { IPmcDataRepeatableQuest } from "../common/tables/IRepeatableQuests";
+import { IRagfairOffer } from "../ragfair/IRagfairOffer";
+export interface IItemEventRouterBase {
+    warnings: Warning[];
+    profileChanges: TProfileChanges | "";
+}
+export declare type TProfileChanges = Record<string, ProfileChange>;
+export interface Warning {
+    index: number;
+    err: string;
+    errmsg: string;
+}
+export interface ProfileChange {
+    _id: string;
+    experience: number;
+    quests: IQuest[];
+    ragFairOffers: IRagfairOffer[];
+    builds: BuildChange[];
+    items: ItemChanges;
+    production: Record<string, Production>;
+    skills: Skills;
+    traderRelations: Record<string, TraderRelations>;
+    repeatableQuests?: IPmcDataRepeatableQuest[];
+}
+export interface BuildChange {
+    id: string;
+    name: string;
+    root: string;
+    items: Item[];
+}
+export interface ItemChanges {
+    new: Product[];
+    change: Product[];
+    del: Product[];
+}
+export interface Production {
+    Progress: number;
+    StartTimestamp: number;
+    ProductionTime: number;
+    inProgress: boolean;
+    RecipeId: string;
+    Products: Product[];
+}
+export interface Product {
+    _id: string;
+    _tpl?: string;
+    parentId?: string;
+    slotId?: string;
+    location?: ItemChangeLocation;
+    upd?: Upd;
+}
+export interface ItemChangeLocation {
+    x: number;
+    y: number;
+    r: number;
+    isSearched?: boolean;
+}
+export interface TraderRelations {
+    salesSum?: number;
+    standing?: number;
+    loyalty?: number;
+    unlocked?: boolean;
+    disabled?: boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/itemEvent/IItemEventRouterRequest.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/itemEvent/IItemEventRouterRequest.d.ts
new file mode 100644
index 0000000..515b49a
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/itemEvent/IItemEventRouterRequest.d.ts
@@ -0,0 +1,21 @@
+export interface IItemEventRouterRequest {
+    data: Daum[];
+    tm: number;
+    reload: number;
+}
+export interface Daum {
+    Action: string;
+    item: string;
+    to: To;
+}
+export interface To {
+    id: string;
+    container: string;
+    location?: Location;
+}
+export interface Location {
+    x: number;
+    y: number;
+    r: string;
+    isSearched: boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/itemEvent/IItemEventRouterResponse.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/itemEvent/IItemEventRouterResponse.d.ts
new file mode 100644
index 0000000..72a9b5b
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/itemEvent/IItemEventRouterResponse.d.ts
@@ -0,0 +1,3 @@
+import { IItemEventRouterBase } from "./IItemEventRouterBase";
+export interface IItemEventRouterResponse extends IItemEventRouterBase {
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/launcher/IChangeRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/launcher/IChangeRequestData.d.ts
new file mode 100644
index 0000000..f0a7838
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/launcher/IChangeRequestData.d.ts
@@ -0,0 +1,4 @@
+import { ILoginRequestData } from "./ILoginRequestData";
+export interface IChangeRequestData extends ILoginRequestData {
+    change: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/launcher/IGetMiniProfileRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/launcher/IGetMiniProfileRequestData.d.ts
new file mode 100644
index 0000000..a14c7c9
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/launcher/IGetMiniProfileRequestData.d.ts
@@ -0,0 +1,4 @@
+export interface IGetMiniProfileRequestData {
+    username: string;
+    password: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/launcher/ILoginRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/launcher/ILoginRequestData.d.ts
new file mode 100644
index 0000000..e965813
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/launcher/ILoginRequestData.d.ts
@@ -0,0 +1,4 @@
+export interface ILoginRequestData {
+    username: string;
+    password: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/launcher/IMiniProfile.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/launcher/IMiniProfile.d.ts
new file mode 100644
index 0000000..c12661a
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/launcher/IMiniProfile.d.ts
@@ -0,0 +1,14 @@
+export interface IMiniProfile {
+    username: string;
+    nickname: string;
+    side: string;
+    currlvl: number;
+    currexp: number;
+    prevexp: number;
+    nextlvl: number;
+    maxlvl: number;
+    akiData: AkiData;
+}
+export interface AkiData {
+    version: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/launcher/IRegisterData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/launcher/IRegisterData.d.ts
new file mode 100644
index 0000000..61a8bbe
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/launcher/IRegisterData.d.ts
@@ -0,0 +1,4 @@
+import { ILoginRequestData } from "./ILoginRequestData";
+export interface IRegisterData extends ILoginRequestData {
+    edition: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/launcher/IRemoveProfileData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/launcher/IRemoveProfileData.d.ts
new file mode 100644
index 0000000..d31c9ac
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/launcher/IRemoveProfileData.d.ts
@@ -0,0 +1,2 @@
+import { ILoginRequestData } from "./ILoginRequestData";
+export declare type IRemoveProfileData = ILoginRequestData;
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/location/IGetLocationRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/location/IGetLocationRequestData.d.ts
new file mode 100644
index 0000000..04e84d9
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/location/IGetLocationRequestData.d.ts
@@ -0,0 +1,5 @@
+export interface IGetLocationRequestData {
+    crc: number;
+    locationId: string;
+    variantId: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/match/IEndOfflineRaidRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/match/IEndOfflineRaidRequestData.d.ts
new file mode 100644
index 0000000..811e9a2
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/match/IEndOfflineRaidRequestData.d.ts
@@ -0,0 +1,6 @@
+export interface IEndOfflineRaidRequestData {
+    crc: number;
+    exitStatus: string;
+    exitName: any;
+    raidSeconds: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/match/IGetProfileRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/match/IGetProfileRequestData.d.ts
new file mode 100644
index 0000000..86b5bbd
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/match/IGetProfileRequestData.d.ts
@@ -0,0 +1,3 @@
+export interface IGetProfileRequestData {
+    profileId: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/match/IStartOffineRaidRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/match/IStartOffineRaidRequestData.d.ts
new file mode 100644
index 0000000..84bccc8
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/match/IStartOffineRaidRequestData.d.ts
@@ -0,0 +1,27 @@
+export interface IStartOfflineRaidRequestData {
+    locationName: string;
+    entryPoint: string;
+    startTime: number;
+    dateTime: string;
+    gameSettings: GameSettings;
+}
+export interface GameSettings {
+    timeAndWeatherSettings: TimeAndWeatherSettings;
+    botsSettings: BotsSettings;
+    wavesSettings: WavesSettings;
+}
+export interface TimeAndWeatherSettings {
+    isRandomTime: boolean;
+    isRandomWeather: boolean;
+}
+export interface BotsSettings {
+    isEnabled: boolean;
+    isScavWars: boolean;
+    botAmount: string;
+}
+export interface WavesSettings {
+    botDifficulty: string;
+    isBosses: boolean;
+    isTaggedAndCursed: boolean;
+    wavesBotAmount: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/notes/INoteActionData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/notes/INoteActionData.d.ts
new file mode 100644
index 0000000..610657f
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/notes/INoteActionData.d.ts
@@ -0,0 +1,10 @@
+import { IBaseInteractionRequestData } from "../common/request/IBaseInteractionRequestData";
+export interface INoteActionData extends IBaseInteractionRequestData {
+    Action: string;
+    index: number;
+    note: INote;
+}
+export interface INote {
+    Time: number;
+    Text: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/notifier/INotifier.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/notifier/INotifier.d.ts
new file mode 100644
index 0000000..8c48260
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/notifier/INotifier.d.ts
@@ -0,0 +1,14 @@
+export interface INotifierChannel {
+    "server": string;
+    "channel_id": string;
+    "url": string;
+    "notifierServer": string;
+    "ws": string;
+}
+import { Message } from "../profile/IAkiProfile";
+export interface INotification {
+    type: "RagfairOfferSold" | "new_message" | "ping";
+    eventId: string;
+    dialogId?: string;
+    message?: Message;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/notifier/ISelectProfileRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/notifier/ISelectProfileRequestData.d.ts
new file mode 100644
index 0000000..2bc3d1e
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/notifier/ISelectProfileRequestData.d.ts
@@ -0,0 +1,3 @@
+export interface ISelectProfileRequestData {
+    uid: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/player/IPlayerIncrementSkillLevelRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/player/IPlayerIncrementSkillLevelRequestData.d.ts
new file mode 100644
index 0000000..dcd14a2
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/player/IPlayerIncrementSkillLevelRequestData.d.ts
@@ -0,0 +1,21 @@
+import { Skills } from "../common/IPmcData";
+export interface IPlayerIncrementSkillLevelRequestData {
+    _id: string;
+    experience: number;
+    quests: any[];
+    ragFairOffers: any[];
+    builds: any[];
+    items: Items;
+    production: Production;
+    skills: Skills;
+    traderRelations: TraderRelations;
+}
+export interface Items {
+    new: any[];
+    change: any[];
+    del: any[];
+}
+export interface Production {
+}
+export interface TraderRelations {
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/presetBuild/IPresetBuildActionRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/presetBuild/IPresetBuildActionRequestData.d.ts
new file mode 100644
index 0000000..99c61f1
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/presetBuild/IPresetBuildActionRequestData.d.ts
@@ -0,0 +1,25 @@
+export interface IPresetBuildActionRequestData {
+    Action: string;
+    id: string;
+    name: string;
+    root: string;
+    items: Item[];
+}
+export interface Item {
+    _id: string;
+    _tpl: string;
+    upd?: Upd;
+    parentId?: string;
+    slotId?: string;
+}
+export interface Upd {
+    Repairable: Repairable;
+    FireMode: FireMode;
+}
+export interface Repairable {
+    MaxDurability: number;
+    Durability: number;
+}
+export interface FireMode {
+    FireMode: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/profile/IAkiProfile.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/profile/IAkiProfile.d.ts
new file mode 100644
index 0000000..3e0b319
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/profile/IAkiProfile.d.ts
@@ -0,0 +1,167 @@
+import { MessageType } from "../../enums/MessageType";
+import { IPmcData } from "../common/IPmcData";
+import { Item } from "../common/tables/IItem";
+export interface IAkiProfile {
+    info: Info;
+    characters: Characters;
+    suits: string[];
+    weaponbuilds: WeaponBuild[];
+    dialogues: Record<string, Dialogue>;
+    aki: Aki;
+    vitality: Vitality;
+    inraid: Inraid;
+    insurance: Insurance[];
+}
+export interface Info {
+    id: string;
+    username: string;
+    password: string;
+    wipe: boolean;
+    edition: string;
+}
+export interface Characters {
+    pmc: IPmcData;
+    scav: IPmcData;
+}
+export interface WeaponBuild {
+    id: string;
+    name: string;
+    root: string;
+    items: Item[];
+}
+export interface Dialogue {
+    _id: string;
+    messages: Message[];
+    pinned: boolean;
+    new: number;
+    attachmentsNew: number;
+}
+export interface DialogueInfo {
+    _id: string;
+    type: MessageType;
+    message: MessagePreview;
+    pinned: boolean;
+    new: number;
+    attachmentsNew: number;
+}
+export interface Message {
+    _id: string;
+    uid: string;
+    type: MessageType;
+    dt: number;
+    localDateTime: number;
+    UtcDateTime?: number;
+    Member?: IUpdatableChatMember;
+    templateId: string;
+    text?: string;
+    hasRewards: boolean;
+    rewardCollected: boolean;
+    items: Items;
+    maxStorageTime?: number;
+    systemData?: ISystemData;
+}
+export interface MessagePreview {
+    uid: string;
+    type: MessageType;
+    dt: number;
+    templateId: string;
+    text?: string;
+}
+export interface Items {
+    stash?: string;
+    data?: Item[];
+}
+export interface ISystemData {
+    date?: string;
+    time?: string;
+    location?: string;
+    buyerNickname?: string;
+    soldItem?: string;
+    itemCount?: number;
+}
+export interface IUpdatableChatMember {
+    Nickname: string;
+    Side: string;
+    Level: number;
+    MemberCategory: string;
+    Ignored: boolean;
+    Banned: boolean;
+}
+export interface DateTime {
+    date: string;
+    time: string;
+}
+export interface Aki {
+    version: string;
+}
+export interface Vitality {
+    health: Health;
+    effects: Effects;
+}
+export interface Health {
+    Hydration: number;
+    Energy: number;
+    Temperature: number;
+    Head: number;
+    Chest: number;
+    Stomach: number;
+    LeftArm: number;
+    RightArm: number;
+    LeftLeg: number;
+    RightLeg: number;
+}
+export interface Effects {
+    Head: Head;
+    Chest: Chest;
+    Stomach: Stomach;
+    LeftArm: LeftArm;
+    RightArm: RightArm;
+    LeftLeg: LeftLeg;
+    RightLeg: RightLeg;
+}
+export interface Head {
+}
+export interface Chest {
+}
+export interface Stomach {
+}
+export interface LeftArm {
+    Fracture?: number;
+}
+export interface RightArm {
+    Fracture?: number;
+}
+export interface LeftLeg {
+    Fracture?: number;
+}
+export interface RightLeg {
+    Fracture?: number;
+}
+export interface Inraid {
+    location: string;
+    character: string;
+}
+export interface Insurance {
+    scheduledTime: number;
+    traderId: string;
+    messageContent: MessageContent;
+    items: Item[];
+}
+export interface MessageContent {
+    ragfair?: MessageContentRagfair;
+    text?: string;
+    templateId: string;
+    type: MessageType;
+    maxStorageTime?: number;
+    systemData?: MessageContentData;
+}
+export interface MessageContentRagfair {
+    offerId: string;
+    count: number;
+    handbookId: string;
+}
+export interface MessageContentData {
+    date: string;
+    time: string;
+    location: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/profile/IProfileChangeNicknameRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/profile/IProfileChangeNicknameRequestData.d.ts
new file mode 100644
index 0000000..4a61196
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/profile/IProfileChangeNicknameRequestData.d.ts
@@ -0,0 +1,3 @@
+export interface IProfileChangeNicknameRequestData {
+    nickname: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/profile/IProfileChangeVoiceRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/profile/IProfileChangeVoiceRequestData.d.ts
new file mode 100644
index 0000000..91058ce
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/profile/IProfileChangeVoiceRequestData.d.ts
@@ -0,0 +1,3 @@
+export interface IProfileChangeVoiceRequestData {
+    voice: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/profile/IProfileCreateRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/profile/IProfileCreateRequestData.d.ts
new file mode 100644
index 0000000..93cc656
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/profile/IProfileCreateRequestData.d.ts
@@ -0,0 +1,6 @@
+export interface IProfileCreateRequestData {
+    side: string;
+    nickname: string;
+    headId: string;
+    voiceId: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/profile/ISearchFriendRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/profile/ISearchFriendRequestData.d.ts
new file mode 100644
index 0000000..e63e386
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/profile/ISearchFriendRequestData.d.ts
@@ -0,0 +1,3 @@
+export interface ISearchFriendRequestData {
+    nickname: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/profile/ISearchFriendResponse.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/profile/ISearchFriendResponse.d.ts
new file mode 100644
index 0000000..96d88b2
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/profile/ISearchFriendResponse.d.ts
@@ -0,0 +1,9 @@
+export interface ISearchFriendResponse {
+    _id: string;
+    Info: Info;
+}
+export interface Info {
+    Nickname: string;
+    Side: string;
+    Level: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/profile/IValidateNicknameRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/profile/IValidateNicknameRequestData.d.ts
new file mode 100644
index 0000000..9cca7e7
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/profile/IValidateNicknameRequestData.d.ts
@@ -0,0 +1,3 @@
+export interface IValidateNicknameRequestData {
+    nickname: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/quests/IAcceptQuestRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/quests/IAcceptQuestRequestData.d.ts
new file mode 100644
index 0000000..0e4821a
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/quests/IAcceptQuestRequestData.d.ts
@@ -0,0 +1,5 @@
+export interface IAcceptQuestRequestData {
+    Action: "QuestAccept";
+    qid: string;
+    type: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/quests/ICompleteQuestRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/quests/ICompleteQuestRequestData.d.ts
new file mode 100644
index 0000000..cc67404
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/quests/ICompleteQuestRequestData.d.ts
@@ -0,0 +1,5 @@
+export interface ICompleteQuestRequestData {
+    Action: string;
+    qid: string;
+    removeExcessItems: boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/quests/IHandoverQuestRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/quests/IHandoverQuestRequestData.d.ts
new file mode 100644
index 0000000..63f10a8
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/quests/IHandoverQuestRequestData.d.ts
@@ -0,0 +1,10 @@
+export interface IHandoverQuestRequestData {
+    Action: "QuestHandover";
+    qid: string;
+    conditionId: string;
+    items: Item[];
+}
+export interface Item {
+    id: string;
+    count: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/quests/IListQuestsRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/quests/IListQuestsRequestData.d.ts
new file mode 100644
index 0000000..91f0b8c
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/quests/IListQuestsRequestData.d.ts
@@ -0,0 +1,3 @@
+export interface IListQuestsRequestData {
+    completed: boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/quests/IRepeatableQuestChangeRequest.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/quests/IRepeatableQuestChangeRequest.d.ts
new file mode 100644
index 0000000..015f58e
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/quests/IRepeatableQuestChangeRequest.d.ts
@@ -0,0 +1,4 @@
+export interface IRepeatableQuestChangeRequest {
+    Action: "RepeatableQuestChange";
+    qid: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/ragfair/IAddOfferRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/ragfair/IAddOfferRequestData.d.ts
new file mode 100644
index 0000000..465ee02
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/ragfair/IAddOfferRequestData.d.ts
@@ -0,0 +1,13 @@
+export interface IAddOfferRequestData {
+    Action: string;
+    sellInOnePiece: boolean;
+    items: string[];
+    requirements: Requirement[];
+}
+export interface Requirement {
+    _tpl: string;
+    count: number;
+    level: number;
+    side: number;
+    onlyFunctional: boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/ragfair/IExtendOfferRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/ragfair/IExtendOfferRequestData.d.ts
new file mode 100644
index 0000000..2a4a876
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/ragfair/IExtendOfferRequestData.d.ts
@@ -0,0 +1,4 @@
+export interface IExtendOfferRequestData {
+    offerId: string;
+    renewalTime: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/ragfair/IGetItemPriceResult.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/ragfair/IGetItemPriceResult.d.ts
new file mode 100644
index 0000000..676322a
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/ragfair/IGetItemPriceResult.d.ts
@@ -0,0 +1,5 @@
+export interface IGetItemPriceResult {
+    avg: number;
+    min: number;
+    max: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/ragfair/IGetMarketPriceRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/ragfair/IGetMarketPriceRequestData.d.ts
new file mode 100644
index 0000000..00f8f17
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/ragfair/IGetMarketPriceRequestData.d.ts
@@ -0,0 +1,3 @@
+export interface IGetMarketPriceRequestData {
+    templateId: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/ragfair/IGetOffersResult.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/ragfair/IGetOffersResult.d.ts
new file mode 100644
index 0000000..1c11422
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/ragfair/IGetOffersResult.d.ts
@@ -0,0 +1,7 @@
+import { IRagfairOffer } from "./IRagfairOffer";
+export interface IGetOffersResult {
+    categories: Record<string, number>;
+    offers: IRagfairOffer[];
+    offersCount: number;
+    selectedCategory: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/ragfair/IRagfairOffer.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/ragfair/IRagfairOffer.d.ts
new file mode 100644
index 0000000..63f655e
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/ragfair/IRagfairOffer.d.ts
@@ -0,0 +1,42 @@
+import { MemberCategory } from "../../enums/MemberCategory";
+import { Item } from "../common/tables/IItem";
+export interface IRagfairOffer {
+    sellResult?: SellResult[];
+    _id: string;
+    items: Item[];
+    requirements: OfferRequirement[];
+    root: string;
+    intId: number;
+    itemsCost: number;
+    requirementsCost: number;
+    startTime: number;
+    endTime: number;
+    sellInOnePiece: boolean;
+    name?: string;
+    shortName?: string;
+    loyaltyLevel: number;
+    locked: boolean;
+    unlimitedCount: boolean;
+    summaryCost: number;
+    user: IRagfairOfferUser;
+    notAvailable: boolean;
+    CurrentItemCount: number;
+    priority: boolean;
+}
+export interface OfferRequirement {
+    _tpl: string;
+    count: number;
+    onlyFunctional: boolean;
+}
+export interface IRagfairOfferUser {
+    id: string;
+    nickname: string;
+    rating: number;
+    memberType: MemberCategory;
+    avatar: string;
+    isRatingGrowing: boolean;
+}
+export interface SellResult {
+    sellTime: number;
+    amount: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/ragfair/IRemoveOfferRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/ragfair/IRemoveOfferRequestData.d.ts
new file mode 100644
index 0000000..d926615
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/ragfair/IRemoveOfferRequestData.d.ts
@@ -0,0 +1,4 @@
+export interface IRemoveOfferRequestData {
+    Action: string;
+    offerId: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/ragfair/ISearchRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/ragfair/ISearchRequestData.d.ts
new file mode 100644
index 0000000..08e7fd3
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/ragfair/ISearchRequestData.d.ts
@@ -0,0 +1,32 @@
+export interface ISearchRequestData {
+    page: number;
+    limit: number;
+    sortType: number;
+    sortDirection: number;
+    currency: number;
+    priceFrom: number;
+    priceTo: number;
+    quantityFrom: number;
+    quantityTo: number;
+    conditionFrom: number;
+    conditionTo: number;
+    oneHourExpiration: boolean;
+    removeBartering: boolean;
+    offerOwnerType: OfferOwnerType;
+    onlyFunctional: boolean;
+    updateOfferCount: boolean;
+    handbookId: string;
+    linkedSearchId: string;
+    neededSearchId: string;
+    buildItems: BuildItems;
+    buildCount: number;
+    tm: number;
+    reload: number;
+}
+export declare enum OfferOwnerType {
+    ANYOWNERTYPE = 0,
+    TRADEROWNERTYPE = 1,
+    PLAYEROWNERTYPE = 2
+}
+export interface BuildItems {
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/repair/IBaseRepairActionDataRequest.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/repair/IBaseRepairActionDataRequest.d.ts
new file mode 100644
index 0000000..e645fb3
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/repair/IBaseRepairActionDataRequest.d.ts
@@ -0,0 +1,3 @@
+export interface IBaseRepairActionDataRequest {
+    Action: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/repair/IRepairActionDataRequest.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/repair/IRepairActionDataRequest.d.ts
new file mode 100644
index 0000000..263d400
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/repair/IRepairActionDataRequest.d.ts
@@ -0,0 +1,10 @@
+import { IBaseRepairActionDataRequest } from "./IBaseRepairActionDataRequest";
+export interface IRepairActionDataRequest extends IBaseRepairActionDataRequest {
+    Action: "Repair";
+    repairKitsInfo: RepairKitsInfo[];
+    target: string;
+}
+export interface RepairKitsInfo {
+    _id: string;
+    count: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/repair/ITraderRepairActionDataRequest.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/repair/ITraderRepairActionDataRequest.d.ts
new file mode 100644
index 0000000..e3d469d
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/repair/ITraderRepairActionDataRequest.d.ts
@@ -0,0 +1,10 @@
+import { IBaseRepairActionDataRequest } from "./IBaseRepairActionDataRequest";
+export interface ITraderRepairActionDataRequest extends IBaseRepairActionDataRequest {
+    Action: "TraderRepair";
+    tid: string;
+    repairItems: RepairItem[];
+}
+export interface RepairItem {
+    _id: string;
+    count: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/trade/IProcessBaseTradeRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/trade/IProcessBaseTradeRequestData.d.ts
new file mode 100644
index 0000000..a9ef757
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/trade/IProcessBaseTradeRequestData.d.ts
@@ -0,0 +1,5 @@
+export interface IProcessBaseTradeRequestData {
+    Action: string;
+    type: string;
+    tid: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/trade/IProcessBuyTradeRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/trade/IProcessBuyTradeRequestData.d.ts
new file mode 100644
index 0000000..a9e4c17
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/trade/IProcessBuyTradeRequestData.d.ts
@@ -0,0 +1,14 @@
+import { IProcessBaseTradeRequestData } from "./IProcessBaseTradeRequestData";
+export interface IProcessBuyTradeRequestData extends IProcessBaseTradeRequestData {
+    Action: "buy_from_trader" | "TradingConfirm" | "RestoreHealth" | "";
+    type: string;
+    tid: string;
+    item_id: string;
+    count: number;
+    scheme_id: number;
+    scheme_items: SchemeItem[];
+}
+export interface SchemeItem {
+    id: string;
+    count: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/trade/IProcessRagfairTradeRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/trade/IProcessRagfairTradeRequestData.d.ts
new file mode 100644
index 0000000..889dfd1
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/trade/IProcessRagfairTradeRequestData.d.ts
@@ -0,0 +1,13 @@
+export interface IProcessRagfairTradeRequestData {
+    Action: string;
+    offers: Offer[];
+}
+export interface Offer {
+    id: string;
+    count: number;
+    items: Item[];
+}
+export interface Item {
+    id: string;
+    count: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/trade/IProcessSellTradeRequestData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/trade/IProcessSellTradeRequestData.d.ts
new file mode 100644
index 0000000..f1d555f
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/trade/IProcessSellTradeRequestData.d.ts
@@ -0,0 +1,12 @@
+import { IProcessBaseTradeRequestData } from "./IProcessBaseTradeRequestData";
+export interface IProcessSellTradeRequestData extends IProcessBaseTradeRequestData {
+    Action: "sell_to_trader";
+    type: string;
+    tid: string;
+    items: Item[];
+}
+export interface Item {
+    id: string;
+    count: number;
+    scheme_id: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/weather/IWeatherData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/weather/IWeatherData.d.ts
new file mode 100644
index 0000000..ecc96ce
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/weather/IWeatherData.d.ts
@@ -0,0 +1,20 @@
+export interface IWeatherData {
+    acceleration: number;
+    time: string;
+    date: string;
+    weather: IWeather;
+}
+export interface IWeather {
+    pressure: number;
+    temp: number;
+    fog: string;
+    rain_intensity: number;
+    rain: any;
+    wind_gustiness: number;
+    wind_direction: any;
+    wind_speed: number;
+    cloud: number;
+    time: string;
+    date: string;
+    timestamp: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/wishlist/IWishlistActionData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/wishlist/IWishlistActionData.d.ts
new file mode 100644
index 0000000..9217864
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/wishlist/IWishlistActionData.d.ts
@@ -0,0 +1,4 @@
+export interface IWishlistActionData {
+    Action: string;
+    templateId: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/enums/BaseClasses.d.ts b/TypeScript/14AfterDBLoadHook/types/models/enums/BaseClasses.d.ts
new file mode 100644
index 0000000..e733bca
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/enums/BaseClasses.d.ts
@@ -0,0 +1,84 @@
+export declare enum BaseClasses {
+    WEAPON = "5422acb9af1c889c16000029",
+    ARMOR = "5448e54d4bdc2dcc718b4568",
+    VEST = "5448e5284bdc2dcb718b4567",
+    BACKPACK = "5448e53e4bdc2d60728b4567",
+    VISORS = "5448e5724bdc2ddf718b4568",
+    FOOD = "5448e8d04bdc2ddf718b4569",
+    DRINK = "5448e8d64bdc2dce718b4568",
+    BARTER_ITEM = "5448eb774bdc2d0a728b4567",
+    INFO = "5448ecbe4bdc2d60728b4568",
+    MEDKIT = "5448f39d4bdc2d0a728b4568",
+    DRUGS = "5448f3a14bdc2d27728b4569",
+    STIMULATOR = "5448f3a64bdc2d60728b456a",
+    MEDICAL = "5448f3ac4bdc2dce718b4569",
+    MEDICAL_SUPPLIES = "57864c8c245977548867e7f1",
+    MOD = "5448fe124bdc2da5018b4567",
+    FUNCTIONAL_MOD = "550aa4154bdc2dd8348b456b",
+    FUEL = "5d650c3e815116009f6201d2",
+    GEAR_MOD = "55802f3e4bdc2de7118b4584",
+    STOCK = "55818a594bdc2db9688b456a",
+    FOREGRIP = "55818af64bdc2d5b648b4570",
+    MASTER_MOD = "55802f4a4bdc2ddb688b4569",
+    MOUNT = "55818b224bdc2dde698b456f",
+    MUZZLE = "5448fe394bdc2d0d028b456c",
+    SIGHTS = "5448fe7a4bdc2d6f028b456b",
+    MEDS = "543be5664bdc2dd4348b4569",
+    MONEY = "543be5dd4bdc2deb348b4569",
+    KEY = "543be5e94bdc2df1348b4568",
+    KEY_MECHANICAL = "5c99f98d86f7745c314214b3",
+    KEYCARD = "5c164d2286f774194c5e69fa",
+    EQUIPMENT = "543be5f84bdc2dd4348b456a",
+    THROW_WEAPON = "543be6564bdc2df4348b4568",
+    FOOD_DRINK = "543be6674bdc2df1348b4569",
+    PISTOL = "5447b5cf4bdc2d65278b4567",
+    SMG = "5447b5e04bdc2d62278b4567",
+    ASSAULT_RIFLE = "5447b5f14bdc2d61278b4567",
+    ASSAULT_CARBINE = "5447b5fc4bdc2d87278b4567",
+    SHOTGUN = "5447b6094bdc2dc3278b4567",
+    MARKSMAN_RIFLE = "5447b6194bdc2d67278b4567",
+    SNIPER_RIFLE = "5447b6254bdc2dc3278b4568",
+    MACHINE_GUN = "5447bed64bdc2d97278b4568",
+    GRENADE_LAUNCHER = "5447bedf4bdc2d87278b4568",
+    SPECIAL_WEAPON = "5447bee84bdc2dc3278b4569",
+    SPEC_ITEM = "5447e0e74bdc2d3c308b4567",
+    KNIFE = "5447e1d04bdc2dff2f8b4567",
+    AMMO = "5485a8684bdc2da71d8b4567",
+    AMMO_BOX = "543be5cb4bdc2deb348b4568",
+    LOOT_CONTAINER = "566965d44bdc2d814c8b4571",
+    MOD_CONTAINER = "5448bf274bdc2dfc2f8b456a",
+    SEARCHABLE_ITEM = "566168634bdc2d144c8b456c",
+    STASH = "566abbb64bdc2d144c8b457d",
+    SORTING_TABLE = "6050cac987d3f925bf016837",
+    LOCKABLE_CONTAINER = "5671435f4bdc2d96058b4569",
+    SIMPLE_CONTAINER = "5795f317245977243854e041",
+    INVENTORY = "55d720f24bdc2d88028b456d",
+    STATIONARY_CONTAINER = "567583764bdc2d98058b456e",
+    POCKETS = "557596e64bdc2dc2118b4571",
+    ARMBAND = "5b3f15d486f77432d0509248",
+    DOG_TAG_USEC = "59f32c3b86f77472a31742f0",
+    DOG_TAG_BEAR = "59f32bb586f774757e1e8442",
+    JEWELRY = "57864a3d24597754843f8721",
+    ELECTRONICS = "57864a66245977548f04a81f",
+    BUILDING_MATERIAL = "57864ada245977548638de91",
+    TOOL = "57864bb7245977548b3b66c2",
+    HOUSEHOLD_GOODS = "57864c322459775490116fbf",
+    LUBRICANT = "57864e4c24597754843f8723",
+    BATTERY = "57864ee62459775490116fc1",
+    ASSAULT_SCOPE = "55818add4bdc2d5b648b456f",
+    REFLEX_SIGHT = "55818ad54bdc2ddc698b4569",
+    TACTICAL_COMBO = "55818b164bdc2ddc698b456c",
+    MAGAZINE = "5448bc234bdc2d3c308b4569",
+    LIGHT_LASER = "55818b0e4bdc2dde698b456e",
+    FLASH_HIDER = "550aa4bf4bdc2dd6348b456b",
+    COLLIMATOR = "55818ad54bdc2ddc698b4569",
+    COMPACT_COLLIMATOR = "55818acf4bdc2dde698b456b",
+    COMPENSATOR = "550aa4af4bdc2dd4348b456e",
+    OPTIC_SCOPE = "55818ae44bdc2dde698b456c",
+    SPECIAL_SCOPE = "55818aeb4bdc2ddc698b456a",
+    OTHER = "590c745b86f7743cc433c5f2",
+    SILENCER = "550aa4cd4bdc2dd8348b456c",
+    PORTABLE_RANGE_FINDER = "61605ddea09d851a0a0c1bbc",
+    ITEM = "54009119af1c881c07000029",
+    CYLINDER_MAGAZINE = "610720f290b75a49ff2e5e25"
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/enums/ConfigTypes.d.ts b/TypeScript/14AfterDBLoadHook/types/models/enums/ConfigTypes.d.ts
new file mode 100644
index 0000000..1c49e62
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/enums/ConfigTypes.d.ts
@@ -0,0 +1,19 @@
+export declare enum ConfigTypes {
+    AIRDROP = "aki-airdrop",
+    BOT = "aki-bot",
+    CORE = "aki-core",
+    HEALTH = "aki-health",
+    HIDEOUT = "aki-hideout",
+    HTTP = "aki-http",
+    IN_RAID = "aki-inraid",
+    INSURANCE = "aki-insurance",
+    INVENTORY = "aki-inventory",
+    LOCALE = "aki-locale",
+    LOCATION = "aki-location",
+    MATCH = "aki-match",
+    QUEST = "aki-quest",
+    RAGFAIR = "aki-ragfair",
+    REPAIR = "aki-repair",
+    TRADER = "aki-trader",
+    WEATHER = "aki-weather"
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/enums/ELocationName.d.ts b/TypeScript/14AfterDBLoadHook/types/models/enums/ELocationName.d.ts
new file mode 100644
index 0000000..b56cc08
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/enums/ELocationName.d.ts
@@ -0,0 +1,11 @@
+export declare enum ELocationName {
+    FACTORY_DAY = "factory4_day",
+    BIGMAP = "bigmap",
+    WOODS = "Woods",
+    SHORELINE = "Shoreline",
+    INTERCHANGE = "Interchange",
+    LIGHTHOUSE = "Lighthouse",
+    LABORATORY = "laboratory",
+    RESERVE = "RezervBase",
+    ANY = "any"
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/enums/EquipmentSlots.d.ts b/TypeScript/14AfterDBLoadHook/types/models/enums/EquipmentSlots.d.ts
new file mode 100644
index 0000000..35c18ff
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/enums/EquipmentSlots.d.ts
@@ -0,0 +1,16 @@
+export declare enum EquipmentSlots {
+    HEADWEAR = "Headwear",
+    EARPIECE = "Earpiece",
+    FACE_COVER = "FaceCover",
+    ARMOR_VEST = "ArmorVest",
+    EYEWEAR = "Eyewear",
+    ARM_BAND = "ArmBand",
+    TACTICAL_VEST = "TacticalVest",
+    POCKETS = "Pockets",
+    BACKPACK = "Backpack",
+    SECURED_CONTAINER = "SecuredContainer",
+    FIRST_PRIMARY_WEAPON = "FirstPrimaryWeapon",
+    SECOND_PRIMARY_WEAPON = "SecondPrimaryWeapon",
+    HOLSTER = "Holster",
+    SCABBARD = "Scabbard"
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/enums/HideoutAreas.d.ts b/TypeScript/14AfterDBLoadHook/types/models/enums/HideoutAreas.d.ts
new file mode 100644
index 0000000..b44a20a
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/enums/HideoutAreas.d.ts
@@ -0,0 +1,25 @@
+export declare enum HideoutAreas {
+    NOTSET = -1,
+    VENTS = 0,
+    SECURITY = 1,
+    LAVATORY = 2,
+    STASH = 3,
+    GENERATOR = 4,
+    HEATING = 5,
+    WATER_COLLECTOR = 6,
+    MEDSTATION = 7,
+    NUTRITION_UNIT = 8,
+    REST_SPACE = 9,
+    WORKBENCH = 10,
+    INTEL_CENTER = 11,
+    SHOOTING_RANGE = 12,
+    LIBRARY = 13,
+    SCAV_CASE = 14,
+    ILLUMINATION = 15,
+    PLACE_OF_FAME = 16,
+    AIR_FILTERING = 17,
+    SOLAR_POWER = 18,
+    BOOZE_GENERATOR = 19,
+    BITCOIN_FARM = 20,
+    CHRISTMAS_TREE = 21
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/enums/MemberCategory.d.ts b/TypeScript/14AfterDBLoadHook/types/models/enums/MemberCategory.d.ts
new file mode 100644
index 0000000..3bd9a21
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/enums/MemberCategory.d.ts
@@ -0,0 +1,13 @@
+export declare enum MemberCategory {
+    Default = 0,
+    Developer = 1,
+    UniqueId = 2,
+    Trader = 4,
+    Group = 8,
+    System = 16,
+    ChatModerator = 32,
+    ChatModeratorWithPermanentBan = 64,
+    UnitTest = 128,
+    Sherpa = 256,
+    Emissary = 512
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/enums/MessageType.d.ts b/TypeScript/14AfterDBLoadHook/types/models/enums/MessageType.d.ts
new file mode 100644
index 0000000..1b0c649
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/enums/MessageType.d.ts
@@ -0,0 +1,16 @@
+export declare enum MessageType {
+    USER_MESSAGE = 1,
+    NPC_TRADER = 2,
+    AUCTION_MESSAGE = 3,
+    FLEAMARKET_MESSAGE = 4,
+    ADMIN_MESSAGE = 5,
+    GROUP_CHAT_MESSAGE = 6,
+    SYSTEM_MESSAGE = 7,
+    INSURANCE_RETURN = 8,
+    GLOBAL_CHAT = 9,
+    QUEST_START = 10,
+    QUEST_FAIL = 11,
+    QUEST_SUCCESS = 12,
+    MESSAGE_WITH_ITEMS = 13,
+    INITIAL_SUPPORT = 14
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/enums/Money.d.ts b/TypeScript/14AfterDBLoadHook/types/models/enums/Money.d.ts
new file mode 100644
index 0000000..0d39613
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/enums/Money.d.ts
@@ -0,0 +1,5 @@
+export declare enum Money {
+    ROUBLES = "5449016a4bdc2d6f028b456f",
+    EUROS = "569668774bdc2da2298b4568",
+    DOLLARS = "5696686a4bdc2da3298b456a"
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/enums/QuestStatus.d.ts b/TypeScript/14AfterDBLoadHook/types/models/enums/QuestStatus.d.ts
new file mode 100644
index 0000000..6335c73
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/enums/QuestStatus.d.ts
@@ -0,0 +1,10 @@
+export declare enum QuestStatus {
+    Locked = 0,
+    AvailableForStart = 1,
+    Started = 2,
+    AvailableForFinish = 3,
+    Success = 4,
+    Fail = 5,
+    FailRestartable = 6,
+    MarkedAsFailed = 7
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/enums/Traders.d.ts b/TypeScript/14AfterDBLoadHook/types/models/enums/Traders.d.ts
new file mode 100644
index 0000000..163cd71
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/enums/Traders.d.ts
@@ -0,0 +1,10 @@
+export declare enum Traders {
+    PRAPOR = "54cb50c76803fa8b248b4571",
+    THERAPIST = "54cb57776803fa99248b456e",
+    FENCE = "579dc571d53a0658a154fbec",
+    SKIER = "58330581ace78e27b8b10cee",
+    PEACEKEEPER = "5935c25fb3acc3127c3d8cd9",
+    MECHANIC = "5a7c2eca46aef81a7ca2145d",
+    RAGMAN = "5ac3b934156ae10c4430e83c",
+    JAEGER = "5c0647fdd443bc2504c2d371"
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/external/IAfterDBLoadMod.d.ts b/TypeScript/14AfterDBLoadHook/types/models/external/IAfterDBLoadMod.d.ts
new file mode 100644
index 0000000..7f08b9e
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/external/IAfterDBLoadMod.d.ts
@@ -0,0 +1,4 @@
+import { DependencyContainer } from "./tsyringe";
+export interface IAfterDBLoadMod {
+    loadAfterDbInit(container: DependencyContainer): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/external/mod.d.ts b/TypeScript/14AfterDBLoadHook/types/models/external/mod.d.ts
new file mode 100644
index 0000000..47939e9
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/external/mod.d.ts
@@ -0,0 +1,5 @@
+import { DependencyContainer } from "./tsyringe";
+export interface IMod {
+    load(container: DependencyContainer): void;
+    delayedLoad(container: DependencyContainer): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/external/tsyringe.d.ts b/TypeScript/14AfterDBLoadHook/types/models/external/tsyringe.d.ts
new file mode 100644
index 0000000..56a7e58
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/external/tsyringe.d.ts
@@ -0,0 +1,2 @@
+import type { DependencyContainer } from "tsyringe";
+export type { DependencyContainer };
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/bindings/Route.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/bindings/Route.d.ts
new file mode 100644
index 0000000..1b29d7d
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/bindings/Route.d.ts
@@ -0,0 +1,3 @@
+export interface IRoute {
+    aki: any;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IBotCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IBotCallbacks.d.ts
new file mode 100644
index 0000000..2c42813
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IBotCallbacks.d.ts
@@ -0,0 +1,10 @@
+import { IGenerateBotsRequestData } from "../../eft/bot/IGenerateBotsRequestData";
+import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData";
+import { IBotBase } from "../../eft/common/tables/IBotBase";
+import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData";
+export interface IBotCallbacks {
+    getBotLimit(url: string, info: IEmptyRequestData, sessionID: string): string;
+    getBotDifficulty(url: string, info: IEmptyRequestData, sessionID: string): string;
+    generateBots(url: string, info: IGenerateBotsRequestData, sessionID: string): IGetBodyResponseData<IBotBase[]>;
+    getBotCap(): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IBundleCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IBundleCallbacks.d.ts
new file mode 100644
index 0000000..7e37c6e
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IBundleCallbacks.d.ts
@@ -0,0 +1,5 @@
+export interface IBundleCallbacks {
+    sendBundle(sessionID: string, req: any, resp: any, body: any): any;
+    getBundles(url: string, info: any, sessionID: string): string;
+    getBundle(url: string, info: any, sessionID: string): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/ICustomizationCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/ICustomizationCallbacks.d.ts
new file mode 100644
index 0000000..d10027f
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/ICustomizationCallbacks.d.ts
@@ -0,0 +1,12 @@
+import { IPmcData } from "../../eft/common/IPmcData";
+import { IBuyClothingRequestData } from "../../eft/customization/IBuyClothingRequestData";
+import { IWearClothingRequestData } from "../../eft/customization/IWearClothingRequestData";
+import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData";
+import { ISuit } from "../../eft/common/tables/ITrader";
+import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse";
+export interface ICustomizationCallbacks {
+    getSuits(url: string, info: any, sessionID: string): IGetBodyResponseData<any>;
+    getTraderSuits(url: string, info: any, sessionID: string): IGetBodyResponseData<ISuit[]>;
+    wearClothing(pmcData: IPmcData, body: IWearClothingRequestData, sessionID: string): IItemEventRouterResponse;
+    buyClothing(pmcData: IPmcData, body: IBuyClothingRequestData, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IDataCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IDataCallbacks.d.ts
new file mode 100644
index 0000000..a098560
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IDataCallbacks.d.ts
@@ -0,0 +1,26 @@
+import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData";
+import { IGlobals } from "../../eft/common/IGlobals";
+import { IQuest } from "../../eft/common/tables/IQuest";
+import { IHideoutArea } from "../../eft/hideout/IHideoutArea";
+import { IHideoutProduction } from "../../eft/hideout/IHideoutProduction";
+import { IHideoutScavCase } from "../../eft/hideout/IHideoutScavCase";
+import { IHideoutSettingsBase } from "../../eft/hideout/IHideoutSettingsBase";
+import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData";
+import { ILanguageBase } from "../server/ILocaleBase";
+import { ISettingsBase } from "../server/ISettingsBase";
+export interface IDataCallbacks {
+    getSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ISettingsBase>;
+    getGlobals(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGlobals>;
+    getTemplateItems(url: string, info: IEmptyRequestData, sessionID: string): string;
+    getTemplateHandbook(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
+    getTemplateSuits(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
+    getTemplateCharacter(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<string[]>;
+    getTemplateQuests(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IQuest[]>;
+    getHideoutSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IHideoutSettingsBase>;
+    getHideoutAreas(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IHideoutArea[]>;
+    gethideoutProduction(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IHideoutProduction[]>;
+    getHideoutScavcase(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IHideoutScavCase[]>;
+    getLocalesLanguages(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ILanguageBase[]>;
+    getLocalesMenu(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
+    getLocalesGlobal(url: string, info: IEmptyRequestData, sessionID: string): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IDialogueCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IDialogueCallbacks.d.ts
new file mode 100644
index 0000000..fe2115a
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IDialogueCallbacks.d.ts
@@ -0,0 +1,34 @@
+import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData";
+import { INullResponseData } from "../../eft/httpResponse/INullResponseData";
+import { IGetMailDialogViewRequestData } from "../../eft/dialog/IGetMailDialogViewRequestData";
+import { IGetMailDialogInfoRequestData } from "../../eft/dialog/IGetMailDialogInfoRequestData";
+import { IRemoveDialogRequestData } from "../../eft/dialog/IRemoveDialogRequestData";
+import { IGetMailDialogListRequestData } from "../../eft/dialog/IGetMailDialogListRequestData";
+import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData";
+import { IFriendRequestData } from "../../eft/dialog/IFriendRequestData";
+import { IPinDialogRequestData } from "../../eft/dialog/IPinDialogRequestData";
+import { ISetDialogReadRequestData } from "../../eft/dialog/ISetDialogReadRequestData";
+import { IGetAllAttachmentsRequestData } from "../../eft/dialog/IGetAllAttachmentsRequestData";
+import { IGetChatServerListRequestData } from "../../eft/dialog/IGetChatServerListRequestData";
+import { IGetFriendListDataResponse } from "../../eft/dialog/IGetFriendListDataResponse";
+import { ISendMessageRequest } from "../../eft/dialog/ISendMessageRequest";
+import { IGetMailDialogViewResponseData } from "../../eft/dialog/IGetMailDialogViewResponseData";
+import { IGetAllAttachmentsResponse } from "../../eft/dialog/IGetAllAttachmentsResponse";
+import { DialogueInfo } from "../../eft/profile/IAkiProfile";
+export interface IDialogueCallbacks {
+    getFriendList(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetFriendListDataResponse>;
+    getChatServerList(url: string, info: IGetChatServerListRequestData, sessionID: string): IGetBodyResponseData<any[]>;
+    getMailDialogList(url: string, info: IGetMailDialogListRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo[]>;
+    getMailDialogView(url: string, info: IGetMailDialogViewRequestData, sessionID: string): IGetBodyResponseData<IGetMailDialogViewResponseData>;
+    getMailDialogInfo(url: string, info: IGetMailDialogInfoRequestData, sessionID: string): IGetBodyResponseData<any>;
+    removeDialog(url: string, info: IRemoveDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
+    pinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
+    unpinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
+    setRead(url: string, info: ISetDialogReadRequestData, sessionID: string): IGetBodyResponseData<any[]>;
+    getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData<IGetAllAttachmentsResponse>;
+    listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
+    listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
+    friendRequest(url: string, request: IFriendRequestData, sessionID: string): INullResponseData;
+    sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData<number>;
+    update(): boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IGameCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IGameCallbacks.d.ts
new file mode 100644
index 0000000..38ebc5f
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IGameCallbacks.d.ts
@@ -0,0 +1,16 @@
+import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData";
+import { IGameEmptyCrcRequestData } from "../../eft/game/IGameEmptyCrcRequestData";
+import { IVersionValidateRequestData } from "../../eft/game/IVersionValidateRequestData";
+import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData";
+import { INullResponseData } from "../../eft/httpResponse/INullResponseData";
+import { IGameConfigResponse } from "../../eft/game/IGameConfigResponse";
+export interface IGameCallbacks {
+    versionValidate(url: string, info: IVersionValidateRequestData, sessionID: string): INullResponseData;
+    gameStart(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
+    gameLogout(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
+    getGameConfig(url: string, info: IGameEmptyCrcRequestData, sessionID: string): IGetBodyResponseData<IGameConfigResponse>;
+    getServer(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
+    validateGameVersion(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
+    gameKeepalive(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
+    getVersion(url: string, info: IEmptyRequestData, sessionID: string): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IHandbookCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IHandbookCallbacks.d.ts
new file mode 100644
index 0000000..5857a3e
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IHandbookCallbacks.d.ts
@@ -0,0 +1,3 @@
+export interface IHandbookCallbacks {
+    load(): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IHealthCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IHealthCallbacks.d.ts
new file mode 100644
index 0000000..d238c7a
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IHealthCallbacks.d.ts
@@ -0,0 +1,13 @@
+import { IPmcData } from "../../eft/common/IPmcData";
+import { IAkiProfile } from "../../eft/profile/IAkiProfile";
+import { ISyncHealthRequestData } from "../../eft/health/ISyncHealthRequestData";
+import { IOffraidEatRequestData } from "../../eft/health/IOffraidEatRequestData";
+import { IOffraidHealRequestData } from "../../eft/health/IOffraidHealRequestData";
+import { IHealthTreatmentRequestData } from "../../eft/health/IHealthTreatmentRequestData";
+export interface IHealthCallbacks {
+    onLoad(sessionID: string): IAkiProfile;
+    syncHealth(url: string, info: ISyncHealthRequestData, sessionID: string): any;
+    offraidEat(pmcData: IPmcData, body: IOffraidEatRequestData, sessionID: string): any;
+    offraidHeal(pmcData: IPmcData, body: IOffraidHealRequestData, sessionID: string): any;
+    healthTreatment(pmcData: IPmcData, info: IHealthTreatmentRequestData, sessionID: string): any;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IHideoutCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IHideoutCallbacks.d.ts
new file mode 100644
index 0000000..e9badb6
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IHideoutCallbacks.d.ts
@@ -0,0 +1,23 @@
+import { IPmcData } from "../../eft/common/IPmcData";
+import { IHideoutUpgradeRequestData } from "../../eft/hideout/IHideoutUpgradeRequestData";
+import { IHideoutUpgradeCompleteRequestData } from "../../eft/hideout/IHideoutUpgradeCompleteRequestData";
+import { IHideoutScavCaseStartRequestData } from "../../eft/hideout/IHideoutScavCaseStartRequestData";
+import { IHideoutPutItemInRequestData } from "../../eft/hideout/IHideoutPutItemInRequestData";
+import { IHideoutTakeItemOutRequestData } from "../../eft/hideout/IHideoutTakeItemOutRequestData";
+import { IHideoutToggleAreaRequestData } from "../../eft/hideout/IHideoutToggleAreaRequestData";
+import { IHideoutSingleProductionStartRequestData } from "../../eft/hideout/IHideoutSingleProductionStartRequestData";
+import { IHideoutContinousProductionStartRequestData } from "../../eft/hideout/IHideoutContinousProductionStartRequestData";
+import { IHideoutTakeProductionRequestData } from "../../eft/hideout/IHideoutTakeProductionRequestData";
+import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse";
+export interface IHideoutCallbacks {
+    upgrade(pmcData: IPmcData, body: IHideoutUpgradeRequestData, sessionID: string): IItemEventRouterResponse;
+    upgradeComplete(pmcData: IPmcData, body: IHideoutUpgradeCompleteRequestData, sessionID: string): IItemEventRouterResponse;
+    putItemsInAreaSlots(pmcData: IPmcData, body: IHideoutPutItemInRequestData, sessionID: string): IItemEventRouterResponse;
+    takeItemsFromAreaSlots(pmcData: IPmcData, body: IHideoutTakeItemOutRequestData, sessionID: string): IItemEventRouterResponse;
+    toggleArea(pmcData: IPmcData, body: IHideoutToggleAreaRequestData, sessionID: string): IItemEventRouterResponse;
+    singleProductionStart(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
+    scavCaseProductionStart(pmcData: IPmcData, body: IHideoutScavCaseStartRequestData, sessionID: string): IItemEventRouterResponse;
+    continuousProductionStart(pmcData: IPmcData, body: IHideoutContinousProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
+    takeProduction(pmcData: IPmcData, body: IHideoutTakeProductionRequestData, sessionID: string): IItemEventRouterResponse;
+    update(timeSinceLastRun: number): boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IHttpCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IHttpCallbacks.d.ts
new file mode 100644
index 0000000..3ecd945
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IHttpCallbacks.d.ts
@@ -0,0 +1,5 @@
+export interface IHttpCallbacks {
+    load(): void;
+    sendImage(sessionID: string, req: any, resp: any, body: any): void;
+    getImage(): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IInraidCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IInraidCallbacks.d.ts
new file mode 100644
index 0000000..e959b98
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IInraidCallbacks.d.ts
@@ -0,0 +1,14 @@
+import { INullResponseData } from "../../eft/httpResponse/INullResponseData";
+import { IAkiProfile } from "../../eft/profile/IAkiProfile";
+import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData";
+import { IRegisterPlayerRequestData } from "../../eft/inRaid/IRegisterPlayerRequestData";
+import { ISaveProgressRequestData } from "../../eft/inRaid/ISaveProgressRequestData";
+export interface IInraidCallbacks {
+    onLoad(sessionID: string): IAkiProfile;
+    registerPlayer(url: string, info: IRegisterPlayerRequestData, sessionID: string): INullResponseData;
+    saveProgress(url: string, info: ISaveProgressRequestData, sessionID: string): INullResponseData;
+    getRaidEndState(): string;
+    getRaidMenuSettings(url: string, info: IEmptyRequestData, sessionID: string): string;
+    getWeaponDurability(url: string, info: any, sessionID: string): string;
+    getAirdropConfig(url: string, info: any, sessionID: string): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IInsuranceCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IInsuranceCallbacks.d.ts
new file mode 100644
index 0000000..082112d
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IInsuranceCallbacks.d.ts
@@ -0,0 +1,10 @@
+import { IPmcData } from "../../eft/common/IPmcData";
+import { IAkiProfile } from "../../eft/profile/IAkiProfile";
+import { IGetInsuranceCostRequestData } from "../../eft/insurance/IGetInsuranceCostRequestData";
+import { IInsureRequestData } from "../../eft/insurance/IInsureRequestData";
+export interface IInsuranceCallbacks {
+    onLoad(sessionID: string): IAkiProfile;
+    getInsuranceCost(url: string, info: IGetInsuranceCostRequestData, sessionID: string): any;
+    insure(pmcData: IPmcData, body: IInsureRequestData, sessionID: string): any;
+    update(secondsSinceLastRun: number): boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IInventoryCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IInventoryCallbacks.d.ts
new file mode 100644
index 0000000..e53f7d0
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IInventoryCallbacks.d.ts
@@ -0,0 +1,36 @@
+import { IPmcData } from "../../eft/common/IPmcData";
+import { IInventoryFoldRequestData } from "../../eft/inventory/IInventoryFoldRequestData";
+import { IInventorySplitRequestData } from "../../eft/inventory/IInventorySplitRequestData";
+import { IInventoryMoveRequestData } from "../../eft/inventory/IInventoryMoveRequestData";
+import { IInventoryMergeRequestData } from "../../eft/inventory/IInventoryMergeRequestData";
+import { IInventoryRemoveRequestData } from "../../eft/inventory/IInventoryRemoveRequestData";
+import { IInventoryTransferRequestData } from "../../eft/inventory/IInventoryTransferRequestData";
+import { IInventorySwapRequestData } from "../../eft/inventory/IInventorySwapRequestData";
+import { IInventoryToggleRequestData } from "../../eft/inventory/IInventoryToggleRequestData";
+import { IInventoryTagRequestData } from "../../eft/inventory/IInventoryTagRequestData";
+import { IInventoryBindRequestData } from "../../eft/inventory/IInventoryBindRequestData";
+import { IInventoryExamineRequestData } from "../../eft/inventory/IInventoryExamineRequestData";
+import { IInventoryReadEncyclopediaRequestData } from "../../eft/inventory/IInventoryReadEncyclopediaRequestData";
+import { IInventorySortRequestData } from "../../eft/inventory/IInventorySortRequestData";
+import { IInventoryCreateMarkerRequestData } from "../../eft/inventory/IInventoryCreateMarkerRequestData";
+import { IInventoryDeleteMarkerRequestData } from "../../eft/inventory/IInventoryDeleteMarkerRequestData";
+import { IInventoryEditMarkerRequestData } from "../../eft/inventory/IInventoryEditMarkerRequestData";
+import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse";
+export interface IInventoryCallbacks {
+    moveItem(pmcData: IPmcData, body: IInventoryMoveRequestData, sessionID: string): IItemEventRouterResponse;
+    removeItem(pmcData: IPmcData, body: IInventoryRemoveRequestData, sessionID: string): IItemEventRouterResponse;
+    splitItem(pmcData: IPmcData, body: IInventorySplitRequestData, sessionID: string): IItemEventRouterResponse;
+    mergeItem(pmcData: IPmcData, body: IInventoryMergeRequestData, sessionID: string): IItemEventRouterResponse;
+    transferItem(pmcData: IPmcData, body: IInventoryTransferRequestData, sessionID: string): IItemEventRouterResponse;
+    swapItem(pmcData: IPmcData, body: IInventorySwapRequestData, sessionID: string): IItemEventRouterResponse;
+    foldItem(pmcData: IPmcData, body: IInventoryFoldRequestData, sessionID: string): IItemEventRouterResponse;
+    toggleItem(pmcData: IPmcData, body: IInventoryToggleRequestData, sessionID: string): IItemEventRouterResponse;
+    tagItem(pmcData: IPmcData, body: IInventoryTagRequestData, sessionID: string): IItemEventRouterResponse;
+    bindItem(pmcData: IPmcData, body: IInventoryBindRequestData, sessionID: string): IItemEventRouterResponse;
+    examineItem(pmcData: IPmcData, body: IInventoryExamineRequestData, sessionID: string): IItemEventRouterResponse;
+    readEncyclopedia(pmcData: IPmcData, body: IInventoryReadEncyclopediaRequestData, sessionID: string): IItemEventRouterResponse;
+    sortInventory(pmcData: IPmcData, body: IInventorySortRequestData, sessionID: string): IItemEventRouterResponse;
+    createMapMarker(pmcData: IPmcData, body: IInventoryCreateMarkerRequestData, sessionID: string): IItemEventRouterResponse;
+    deleteMapMarker(pmcData: IPmcData, body: IInventoryDeleteMarkerRequestData, sessionID: string): IItemEventRouterResponse;
+    editMapMarker(pmcData: IPmcData, body: IInventoryEditMarkerRequestData, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IItemEventCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IItemEventCallbacks.d.ts
new file mode 100644
index 0000000..59db771
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IItemEventCallbacks.d.ts
@@ -0,0 +1,6 @@
+import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData";
+import { IItemEventRouterRequest } from "../../eft/itemEvent/IItemEventRouterRequest";
+import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse";
+export interface IItemEventCallbacks {
+    handleEvents(url: string, info: IItemEventRouterRequest, sessionID: string): IGetBodyResponseData<IItemEventRouterResponse>;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/ILauncherCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/ILauncherCallbacks.d.ts
new file mode 100644
index 0000000..52dfec6
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/ILauncherCallbacks.d.ts
@@ -0,0 +1,20 @@
+import { IRegisterData } from "../../eft/launcher/IRegisterData";
+import { IRemoveProfileData } from "../../eft/launcher/IRemoveProfileData";
+import { ILoginRequestData } from "../../eft/launcher/ILoginRequestData";
+import { IChangeRequestData } from "../../eft/launcher/IChangeRequestData";
+import { IGetMiniProfileRequestData } from "../../eft/launcher/IGetMiniProfileRequestData.js";
+export interface ILauncherCallbacks {
+    connect(): string;
+    login(url: string, info: ILoginRequestData, sessionID: string): string;
+    register(url: string, info: IRegisterData, sessionID: string): "FAILED" | "OK";
+    get(url: string, info: ILoginRequestData, sessionID: string): string;
+    changeUsername(url: string, info: IChangeRequestData, sessionID: string): "FAILED" | "OK";
+    changePassword(url: string, info: IChangeRequestData, sessionID: string): "FAILED" | "OK";
+    wipe(url: string, info: IRegisterData, sessionID: string): "FAILED" | "OK";
+    getMiniProfile(url: string, info: IGetMiniProfileRequestData, sessionID: string): string;
+    getAllMiniProfiles(url: string, info: any, sessionID: string): string;
+    getServerVersion(): string;
+    ping(url: string, info: any, sessionID: string): string;
+    removeProfile(url: string, info: IRemoveProfileData, sessionID: string): string;
+    getCompatibleTarkovVersion(): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/ILocationCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/ILocationCallbacks.d.ts
new file mode 100644
index 0000000..71656a4
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/ILocationCallbacks.d.ts
@@ -0,0 +1,8 @@
+import { IGetLocationRequestData } from "../../eft/location/IGetLocationRequestData";
+import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData";
+import { ILocationsGenerateAllResponse } from "../../eft/common/ILocationsSourceDestinationBase";
+import { ILocationBase } from "../../eft/common/ILocationBase";
+export interface ILocationCallbacks {
+    getLocationData(url: string, info: any, sessionID: string): IGetBodyResponseData<ILocationsGenerateAllResponse>;
+    getLocation(url: string, info: IGetLocationRequestData, sessionID: string): IGetBodyResponseData<ILocationBase>;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IMatchCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IMatchCallbacks.d.ts
new file mode 100644
index 0000000..fcbf173
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IMatchCallbacks.d.ts
@@ -0,0 +1,25 @@
+import { IStartOfflineRaidRequestData } from "../../eft/match/IStartOffineRaidRequestData";
+import { IEndOfflineRaidRequestData } from "../../eft/match/IEndOfflineRaidRequestData";
+import { INullResponseData } from "../../eft/httpResponse/INullResponseData";
+import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData";
+import { IPmcData } from "../../eft/common/IPmcData";
+export interface IMatchCallbacks {
+    updatePing(url: string, info: any, sessionID: string): INullResponseData;
+    exitMatch(url: string, info: any, sessionID: string): INullResponseData;
+    exitToMenu(url: string, info: any, sessionID: string): INullResponseData;
+    startGroupSearch(url: string, info: any, sessionID: string): INullResponseData;
+    stopGroupSearch(url: string, info: any, sessionID: string): INullResponseData;
+    sendGroupInvite(url: string, info: any, sessionID: string): INullResponseData;
+    acceptGroupInvite(url: string, info: any, sessionID: string): INullResponseData;
+    cancelGroupInvite(url: string, info: any, sessionID: string): INullResponseData;
+    putMetrics(url: string, info: any, sessionID: string): INullResponseData;
+    getProfile(url: string, info: any, sessionID: string): IGetBodyResponseData<IPmcData[]>;
+    serverAvailable(url: string, info: any, sessionID: string): IGetBodyResponseData<any> | IGetBodyResponseData<true>;
+    joinMatch(url: string, info: any, sessionID: string): IGetBodyResponseData<any>;
+    getMetrics(url: string, info: any, sessionID: string): IGetBodyResponseData<string>;
+    getGroupStatus(url: string, info: any, sessionID: string): IGetBodyResponseData<any>;
+    createGroup(url: string, info: any, sessionID: string): IGetBodyResponseData<any>;
+    deleteGroup(url: string, info: any, sessionID: string): INullResponseData;
+    startOfflineRaid(url: string, info: IStartOfflineRaidRequestData, sessionID: string): INullResponseData;
+    endOfflineRaid(url: string, info: IEndOfflineRaidRequestData, sessionID: string): INullResponseData;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IModCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IModCallbacks.d.ts
new file mode 100644
index 0000000..1a4cd7b
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IModCallbacks.d.ts
@@ -0,0 +1,6 @@
+export interface IModCallbacks {
+    load(): void;
+    sendBundle(sessionID: string, req: any, resp: any, body: any): void;
+    getBundles(url: string, info: any, sessionID: string): string;
+    getBundle(url: string, info: any, sessionID: string): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/INoteCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/INoteCallbacks.d.ts
new file mode 100644
index 0000000..8453a4f
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/INoteCallbacks.d.ts
@@ -0,0 +1,8 @@
+import { IPmcData } from "../../eft/common/IPmcData";
+import { INoteActionData } from "../../eft/notes/INoteActionData";
+import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse";
+export interface INoteCallbacks {
+    addNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse;
+    editNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse;
+    deleteNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/INotifierCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/INotifierCallbacks.d.ts
new file mode 100644
index 0000000..a211310
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/INotifierCallbacks.d.ts
@@ -0,0 +1,17 @@
+import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData";
+import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData";
+import { INotifierChannel } from "../../eft/notifier/INotifier";
+import { ISelectProfileRequestData } from "../../eft/notifier/ISelectProfileRequestData";
+export interface INotifierCallbacks {
+    /**
+     * If we don't have anything to send, it's ok to not send anything back
+     * because notification requests can be long-polling. In fact, we SHOULD wait
+     * until we actually have something to send because otherwise we'd spam the client
+     * and the client would abort the connection due to spam.
+     */
+    sendNotification(sessionID: string, req: any, resp: any, data: any): void;
+    getNotifier(url: string, info: any, sessionID: string): IGetBodyResponseData<any[]>;
+    createNotifierChannel(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<INotifierChannel>;
+    selectProfile(url: string, info: ISelectProfileRequestData, sessionID: string): IGetBodyResponseData<any>;
+    notify(url: string, info: any, sessionID: string): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IPresetBuildCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IPresetBuildCallbacks.d.ts
new file mode 100644
index 0000000..97c6487
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IPresetBuildCallbacks.d.ts
@@ -0,0 +1,10 @@
+import { IPmcData } from "../../eft/common/IPmcData";
+import { IPresetBuildActionRequestData } from "../../eft/presetBuild/IPresetBuildActionRequestData";
+import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse";
+import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData";
+import { WeaponBuild } from "../../eft/profile/IAkiProfile";
+export interface IPresetBuildCallbacks {
+    getHandbookUserlist(url: string, info: any, sessionID: string): IGetBodyResponseData<WeaponBuild[]>;
+    saveBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse;
+    removeBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IPresetCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IPresetCallbacks.d.ts
new file mode 100644
index 0000000..4169857
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IPresetCallbacks.d.ts
@@ -0,0 +1,3 @@
+export interface IPresetCallbacks {
+    load(): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IProfileCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IProfileCallbacks.d.ts
new file mode 100644
index 0000000..9d4d2df
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IProfileCallbacks.d.ts
@@ -0,0 +1,21 @@
+import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData";
+import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData";
+import { INullResponseData } from "../../eft/httpResponse/INullResponseData";
+import { IProfileChangeNicknameRequestData } from "../../eft/profile/IProfileChangeNicknameRequestData";
+import { IProfileChangeVoiceRequestData } from "../../eft/profile/IProfileChangeVoiceRequestData";
+import { IProfileCreateRequestData } from "../../eft/profile/IProfileCreateRequestData";
+import { IValidateNicknameRequestData } from "../../eft/profile/IValidateNicknameRequestData";
+import { ISearchFriendRequestData } from "../../eft/profile/ISearchFriendRequestData";
+import { ISearchFriendResponse } from "../../eft/profile/ISearchFriendResponse";
+export interface IProfileCallbacks {
+    onLoad(sessionID: string): any;
+    createProfile(url: string, info: IProfileCreateRequestData, sessionID: string): IGetBodyResponseData<any>;
+    getProfileData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
+    regenerateScav(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
+    changeVoice(url: string, info: IProfileChangeVoiceRequestData, sessionID: string): INullResponseData;
+    changeNickname(url: string, info: IProfileChangeNicknameRequestData, sessionID: string): IGetBodyResponseData<any>;
+    validateNickname(url: string, info: IValidateNicknameRequestData, sessionID: string): IGetBodyResponseData<any>;
+    getReservedNickname(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<string>;
+    getProfileStatus(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
+    searchFriend(url: string, info: ISearchFriendRequestData, sessionID: string): IGetBodyResponseData<ISearchFriendResponse>;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IQuestCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IQuestCallbacks.d.ts
new file mode 100644
index 0000000..1c4d0c3
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IQuestCallbacks.d.ts
@@ -0,0 +1,19 @@
+import { IPmcData } from "../../eft/common/IPmcData";
+import { IAcceptQuestRequestData } from "../../eft/quests/IAcceptQuestRequestData";
+import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData";
+import { IListQuestsRequestData } from "../../eft/quests/IListQuestsRequestData";
+import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData";
+import { ICompleteQuestRequestData } from "../../eft/quests/ICompleteQuestRequestData";
+import { IHandoverQuestRequestData } from "../../eft/quests/IHandoverQuestRequestData";
+import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse";
+import { IQuest } from "../../eft/common/tables/IQuest";
+import { IPmcDataRepeatableQuest } from "../../eft/common/tables/IRepeatableQuests";
+import { IRepeatableQuestChangeRequest } from "../../eft/quests/IRepeatableQuestChangeRequest";
+export interface IQuestCallbacks {
+    changeRepeatableQuest(pmcData: IPmcData, body: IRepeatableQuestChangeRequest, sessionID: string): IItemEventRouterResponse;
+    acceptQuest(pmcData: IPmcData, body: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse;
+    completeQuest(pmcData: IPmcData, body: ICompleteQuestRequestData, sessionID: string): IItemEventRouterResponse;
+    handoverQuest(pmcData: IPmcData, body: IHandoverQuestRequestData, sessionID: string): IItemEventRouterResponse;
+    listQuests(url: string, info: IListQuestsRequestData, sessionID: string): IGetBodyResponseData<IQuest[]>;
+    activityPeriods(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IPmcDataRepeatableQuest[]>;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IRagfairCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IRagfairCallbacks.d.ts
new file mode 100644
index 0000000..9282bd4
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IRagfairCallbacks.d.ts
@@ -0,0 +1,21 @@
+import { IPmcData } from "../../eft/common/IPmcData";
+import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData";
+import { ISearchRequestData } from "../../eft/ragfair/ISearchRequestData";
+import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData";
+import { IGetMarketPriceRequestData } from "../../eft/ragfair/IGetMarketPriceRequestData";
+import { IAddOfferRequestData } from "../../eft/ragfair/IAddOfferRequestData";
+import { IRemoveOfferRequestData } from "../../eft/ragfair/IRemoveOfferRequestData";
+import { IExtendOfferRequestData } from "../../eft/ragfair/IExtendOfferRequestData";
+import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse";
+import { IGetItemPriceResult } from "../../eft/ragfair/IGetItemPriceResult";
+export interface IRagfairCallbacks {
+    load(): void;
+    search(url: string, info: ISearchRequestData, sessionID: string): IGetBodyResponseData<any>;
+    getMarketPrice(url: string, info: IGetMarketPriceRequestData, sessionID: string): IGetBodyResponseData<IGetItemPriceResult>;
+    getItemPrices(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
+    addOffer(pmcData: IPmcData, info: IAddOfferRequestData, sessionID: string): IItemEventRouterResponse;
+    removeOffer(pmcData: IPmcData, info: IRemoveOfferRequestData, sessionID: string): IItemEventRouterResponse;
+    extendOffer(pmcData: IPmcData, info: IExtendOfferRequestData, sessionID: string): IItemEventRouterResponse;
+    update(timeSinceLastRun: number): boolean;
+    updatePlayer(timeSinceLastRun: number): boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IRepairCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IRepairCallbacks.d.ts
new file mode 100644
index 0000000..e8183c9
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IRepairCallbacks.d.ts
@@ -0,0 +1,8 @@
+import { IPmcData } from "../../eft/common/IPmcData";
+import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse";
+import { IRepairActionDataRequest } from "../../eft/repair/IRepairActionDataRequest";
+import { ITraderRepairActionDataRequest } from "../../eft/repair/ITraderRepairActionDataRequest";
+export interface IRepairCallbacks {
+    traderRepair(pmcData: IPmcData, body: ITraderRepairActionDataRequest, sessionID: string): IItemEventRouterResponse;
+    repair(pmcData: IPmcData, body: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/ISaveCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/ISaveCallbacks.d.ts
new file mode 100644
index 0000000..1ad3b82
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/ISaveCallbacks.d.ts
@@ -0,0 +1,4 @@
+export interface ISaveCallbacks {
+    load(): void;
+    update(secondsSinceLastRun: number): boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/ITradeCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/ITradeCallbacks.d.ts
new file mode 100644
index 0000000..2f41d54
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/ITradeCallbacks.d.ts
@@ -0,0 +1,8 @@
+import { IPmcData } from "../../eft/common/IPmcData";
+import { IProcessRagfairTradeRequestData } from "../../eft/trade/IProcessRagfairTradeRequestData";
+import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse";
+import { IProcessBaseTradeRequestData } from "../../eft/trade/IProcessBaseTradeRequestData";
+export interface ITradeCallbacks {
+    processTrade(pmcData: IPmcData, body: IProcessBaseTradeRequestData, sessionID: string): IItemEventRouterResponse;
+    processRagfairTrade(pmcData: IPmcData, body: IProcessRagfairTradeRequestData, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/ITraderCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/ITraderCallbacks.d.ts
new file mode 100644
index 0000000..e0d7d06
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/ITraderCallbacks.d.ts
@@ -0,0 +1,11 @@
+import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData";
+import { IBarterScheme, ITraderAssort, ITraderBase } from "../../eft/common/tables/ITrader";
+import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData";
+export interface ITraderCallbacks {
+    load(): void;
+    getTraderSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ITraderBase[]>;
+    getProfilePurchases(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<Record<string, IBarterScheme[][]>>;
+    getTrader(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ITraderBase>;
+    getAssort(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ITraderAssort>;
+    update(): boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IWeatherCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IWeatherCallbacks.d.ts
new file mode 100644
index 0000000..9ac72ae
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IWeatherCallbacks.d.ts
@@ -0,0 +1,5 @@
+import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData";
+import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData";
+export interface IWeatherCallbacks {
+    getWeather(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IWishlistCallbacks.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IWishlistCallbacks.d.ts
new file mode 100644
index 0000000..e5d519c
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/callbacks/IWishlistCallbacks.d.ts
@@ -0,0 +1,7 @@
+import { IPmcData } from "../../eft/common/IPmcData";
+import { IWishlistActionData } from "../../eft/wishlist/IWishlistActionData";
+import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse";
+export interface IWishlistCallbacks {
+    addToWishlist(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse;
+    removeFromWishlist(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/config/IAirdropConfig.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IAirdropConfig.d.ts
new file mode 100644
index 0000000..f4aee89
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IAirdropConfig.d.ts
@@ -0,0 +1,20 @@
+import { IBaseConfig } from "./IBaseConfig";
+export interface IAirdropConfig extends IBaseConfig {
+    kind: "aki-airdrop";
+    airdropChancePercent: AirdropChancePercent;
+    airdropMinOpenHeight: number;
+    airdropMaxOpenHeight: number;
+    planeMinFlyHeight: number;
+    planeMaxFlyHeight: number;
+    planeVolume: number;
+    airdropMinStartTimeSeconds: number;
+    airdropMaxStartTimeSeconds: number;
+}
+export interface AirdropChancePercent {
+    bigmap: number;
+    woods: number;
+    lighthouse: number;
+    shoreline: number;
+    interchange: number;
+    reserve: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/config/IBaseConfig.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IBaseConfig.d.ts
new file mode 100644
index 0000000..8b6ba88
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IBaseConfig.d.ts
@@ -0,0 +1,3 @@
+export interface IBaseConfig {
+    kind: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/config/IBotConfig.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IBotConfig.d.ts
new file mode 100644
index 0000000..5fb9d93
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IBotConfig.d.ts
@@ -0,0 +1,114 @@
+import { IBaseConfig } from "./IBaseConfig";
+export interface IBotConfig extends IBaseConfig {
+    kind: "aki-bot";
+    presetBatch: PresetBatch;
+    bosses: string[];
+    durability: Durability;
+    lootNValue: LootNvalue;
+    revenge: Record<string, string[]>;
+    pmc: PmcConfig;
+    showTypeInNickname: boolean;
+    maxBotCap: number;
+}
+export interface PresetBatch {
+    assault: number;
+    bossBully: number;
+    bossGluhar: number;
+    bossKilla: number;
+    bossKojaniy: number;
+    bossSanitar: number;
+    bossTagilla: number;
+    bossTest: number;
+    cursedAssault: number;
+    followerBully: number;
+    followerGluharAssault: number;
+    followerGluharScout: number;
+    followerGluharSecurity: number;
+    followerGluharSnipe: number;
+    followerKojaniy: number;
+    followerSanitar: number;
+    followerTagilla: number;
+    followerTest: number;
+    marksman: number;
+    pmcBot: number;
+    sectantPriest: number;
+    sectantWarrior: number;
+    gifter: number;
+    test: number;
+    exUsec: number;
+}
+export interface Durability {
+    default: DefaultDurability;
+    pmc: PmcDurability;
+    boss: BotDurability;
+    follower: BotDurability;
+    assault: BotDurability;
+    cursedassault: BotDurability;
+    marksman: BotDurability;
+    pmcbot: BotDurability;
+    exusec: BotDurability;
+    sectantpriest: BotDurability;
+    sectantwarrior: BotDurability;
+}
+export interface DefaultDurability {
+    armor: DefaultArmor;
+    weapon: WeaponDurability;
+}
+export interface DefaultArmor {
+    maxDelta: number;
+    minDelta: number;
+}
+export interface WeaponDurability {
+    lowestMax: number;
+    highestMax: number;
+    maxDelta: number;
+    minDelta: number;
+}
+export interface PmcDurability {
+    armor: PmcDurabilityArmor;
+    weapon: WeaponDurability;
+}
+export interface PmcDurabilityArmor {
+    lowestMaxPercent: number;
+    highestMaxPercent: number;
+    maxDelta: number;
+    minDelta: number;
+}
+export interface BotDurability {
+    armor: ArmorDurability;
+    weapon: WeaponDurability;
+}
+export interface ArmorDurability {
+    maxDelta: number;
+    minDelta: number;
+}
+export interface LootNvalue {
+    scav: number;
+    pmc: number;
+}
+export interface PmcConfig {
+    dynamicLoot: DynamicLoot;
+    cartridgeBlacklist: string[];
+    difficulty: string;
+    isUsec: number;
+    chanceSameSideIsHostilePercent: number;
+    usecType: string;
+    bearType: string;
+    maxBackpackLootTotalRub: number;
+    maxPocketLootTotalRub: number;
+    maxVestLootTotalRub: number;
+    types: Types;
+    enemyTypes: string[];
+}
+export interface DynamicLoot {
+    whitelist: string[];
+    blacklist: string[];
+    spawnLimits: Record<string, number>;
+    moneyStackLimits: Record<string, number>;
+}
+export interface Types {
+    assault: number;
+    cursedAssault: number;
+    pmcBot: number;
+    exUsec: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/config/ICoreConfig.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/config/ICoreConfig.d.ts
new file mode 100644
index 0000000..cfcaf61
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/config/ICoreConfig.d.ts
@@ -0,0 +1,7 @@
+import { IBaseConfig } from "./IBaseConfig";
+export interface ICoreConfig extends IBaseConfig {
+    kind: "aki-core";
+    akiVersion: string;
+    projectName: string;
+    compatibleTarkovVersion: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/config/IHealthConfig.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IHealthConfig.d.ts
new file mode 100644
index 0000000..fdbf656
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IHealthConfig.d.ts
@@ -0,0 +1,14 @@
+import { IBaseConfig } from "./IBaseConfig";
+export interface IHealthConfig extends IBaseConfig {
+    kind: "aki-health";
+    healthMultipliers: HealthMultipliers;
+    save: Save;
+}
+export interface HealthMultipliers {
+    death: number;
+    blacked: number;
+}
+export interface Save {
+    health: boolean;
+    effects: boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/config/IHideoutConfig.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IHideoutConfig.d.ts
new file mode 100644
index 0000000..4658fa6
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IHideoutConfig.d.ts
@@ -0,0 +1,27 @@
+import { IBaseConfig } from "./IBaseConfig";
+export interface IHideoutConfig extends IBaseConfig {
+    kind: "aki-hideout";
+    runIntervalSeconds: number;
+    scavCase: ScavCase;
+    fuelDrainRateMultipler: number;
+}
+export interface ScavCase {
+    rewardParentBlacklist: string[];
+    rewardItemBlacklist: any[];
+    ammoRewards: AmmoRewards;
+    moneyRewards: MoneyRewards;
+}
+export interface AmmoRewards {
+    giveMultipleOfTen: boolean;
+    minAmount: number;
+}
+export interface MoneyRewards {
+    enabled: boolean;
+    rub: MinMax;
+    usd: MinMax;
+    eur: MinMax;
+}
+export interface MinMax {
+    min: number;
+    max: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/config/IHttpConfig.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IHttpConfig.d.ts
new file mode 100644
index 0000000..c41d035
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IHttpConfig.d.ts
@@ -0,0 +1,6 @@
+import { IBaseConfig } from "./IBaseConfig";
+export interface IHttpConfig extends IBaseConfig {
+    kind: "aki-http";
+    ip: string;
+    port: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/config/IInRaidConfig.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IInRaidConfig.d.ts
new file mode 100644
index 0000000..baaf083
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IInRaidConfig.d.ts
@@ -0,0 +1,21 @@
+import { IBaseConfig } from "./IBaseConfig";
+export interface IInRaidConfig extends IBaseConfig {
+    kind: "aki-inraid";
+    MIAOnRaidEnd: boolean;
+    raidMenuSettings: RaidMenuSettings;
+    save: Save;
+    carExtracts: string[];
+    carExtractBaseStandingGain: number;
+    scavExtractGain: number;
+}
+export interface RaidMenuSettings {
+    aiAmount: string;
+    aiDifficulty: string;
+    bossEnabled: boolean;
+    scavWars: boolean;
+    taggedAndCursed: boolean;
+}
+export interface Save {
+    loot: boolean;
+    durability: boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/config/IInsuranceConfig.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IInsuranceConfig.d.ts
new file mode 100644
index 0000000..6e9c744
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IInsuranceConfig.d.ts
@@ -0,0 +1,7 @@
+import { IBaseConfig } from "./IBaseConfig";
+export interface IInsuranceConfig extends IBaseConfig {
+    kind: "aki-insurance";
+    insuranceMultiplier: Record<string, number>;
+    returnChancePercent: Record<string, number>;
+    runIntervalSeconds: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/config/IInventoryConfig.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IInventoryConfig.d.ts
new file mode 100644
index 0000000..ffffa41
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IInventoryConfig.d.ts
@@ -0,0 +1,5 @@
+import { IBaseConfig } from "./IBaseConfig";
+export interface IInventoryConfig extends IBaseConfig {
+    kind: "aki-inventory";
+    newItemsMarkedFound: boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/config/ILocaleConfig.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/config/ILocaleConfig.d.ts
new file mode 100644
index 0000000..fe9abf7
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/config/ILocaleConfig.d.ts
@@ -0,0 +1,5 @@
+import { IBaseConfig } from "./IBaseConfig";
+export interface ILocaleConfig extends IBaseConfig {
+    kind: "aki-locale";
+    desiredLocale: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/config/ILocationConfig.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/config/ILocationConfig.d.ts
new file mode 100644
index 0000000..0551d57
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/config/ILocationConfig.d.ts
@@ -0,0 +1,24 @@
+import { IBaseConfig } from "./IBaseConfig";
+export interface ILocationConfig extends IBaseConfig {
+    kind: "aki-location";
+    looseLootMultiplier: LootMultiplier;
+    staticLootMultiplier: LootMultiplier;
+}
+export interface LootMultiplier {
+    bigmap: number;
+    develop: number;
+    factory4_day: number;
+    factory4_night: number;
+    interchange: number;
+    laboratory: number;
+    rezervbase: number;
+    shoreline: number;
+    woods: number;
+    hideout: number;
+    lighthouse: number;
+    privatearea: number;
+    suburbs: number;
+    tarkovstreets: number;
+    terminal: number;
+    town: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/config/IMatchConfig.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IMatchConfig.d.ts
new file mode 100644
index 0000000..92c4d77
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IMatchConfig.d.ts
@@ -0,0 +1,5 @@
+import { IBaseConfig } from "./IBaseConfig";
+export interface IMatchConfig extends IBaseConfig {
+    kind: "aki-match";
+    enabled: boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/config/IQuestConfig.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IQuestConfig.d.ts
new file mode 100644
index 0000000..be4a97b
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IQuestConfig.d.ts
@@ -0,0 +1,77 @@
+import { ELocationName } from "../../enums/ELocationName";
+import { IBaseConfig } from "./IBaseConfig";
+export interface IQuestConfig extends IBaseConfig {
+    kind: "aki-quest";
+    redeemTime: number;
+    repeatableQuests: IRepeatableQuestConfig[];
+}
+export interface IRepeatableQuestConfig {
+    name: string;
+    types: string[];
+    resetTime: number;
+    numQuests: number;
+    minPlayerLevel: number;
+    rewardScaling: IRewardScaling;
+    locations: Record<ELocationName, string[]>;
+    traderWhitelist: ITraderWhitelist[];
+    questConfig: IQuestConfig;
+}
+export interface IRewardScaling {
+    levels: number[];
+    experience: number[];
+    roubles: number[];
+    items: number[];
+    reputation: number[];
+    rewardSpread: number;
+}
+export interface ITraderWhitelist {
+    traderId: string;
+    questTypes: string[];
+}
+export interface IQuestConfig {
+    Exploration: IExploration;
+    Completion: ICompletion;
+    Elimination: IElimination;
+}
+export interface IExploration {
+    maxExtracts: number;
+    specificExits: ISpecificExits;
+}
+export interface ISpecificExits {
+    probability: number;
+    passageRequirementWhitelist: string[];
+}
+export interface ICompletion {
+    minRequestedAmount: number;
+    maxRequestedAmount: number;
+    minRequestedBulletAmount: number;
+    maxRequestedBulletAmount: number;
+    useWhitelist: boolean;
+    useBlacklist: boolean;
+}
+export interface IElimination {
+    targets: ITarget[];
+    bodyPartProb: number;
+    bodyParts: IBodyPart[];
+    specificLocationProb: number;
+    distLocationBlacklist: string[];
+    distProb: number;
+    maxDist: number;
+    minDist: number;
+    maxKills: number;
+    minKills: number;
+}
+export interface IProbabilityObject {
+    key: string;
+    relativeProbability: number;
+    data?: any;
+}
+export interface ITarget extends IProbabilityObject {
+    data: IBossInfo;
+}
+export interface IBossInfo {
+    isBoss: boolean;
+}
+export interface IBodyPart extends IProbabilityObject {
+    data: string[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/config/IRagfairConfig.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IRagfairConfig.d.ts
new file mode 100644
index 0000000..2d151ca
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IRagfairConfig.d.ts
@@ -0,0 +1,59 @@
+import { IBaseConfig } from "./IBaseConfig";
+export interface IRagfairConfig extends IBaseConfig {
+    kind: "aki-ragfair";
+    runIntervalSeconds: number;
+    sell: Sell;
+    traders: Record<string, boolean>;
+    dynamic: Dynamic;
+}
+export interface Sell {
+    fees: boolean;
+    chance: Chance;
+    time: Time;
+    reputation: Reputation;
+}
+export interface Chance {
+    base: number;
+    overprices: number;
+    underpriced: number;
+}
+export interface Time {
+    base: number;
+    min: number;
+    max: number;
+}
+export interface Reputation {
+    gain: number;
+    loss: number;
+}
+export interface Dynamic {
+    expiredOfferThreshold: number;
+    offerItemCount: MinMax;
+    price: MinMax;
+    endTimeSeconds: MinMax;
+    condition: Condition;
+    stackablePercent: MinMax;
+    nonStackableCount: MinMax;
+    rating: MinMax;
+    currencies: Record<string, number>;
+    showAsSingleStack: string[];
+    blacklist: Blacklist;
+}
+export interface MinMax {
+    min: number;
+    max: number;
+}
+export interface Condition {
+    conditionChance: number;
+    min: number;
+    max: number;
+}
+export interface Blacklist {
+    /**
+     * show/hide trader items that are blacklisted by bsg
+     */
+    traderItems: boolean;
+    custom: string[];
+    enableBsgList: boolean;
+    enableQuestList: boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/config/IRepairConfig.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IRepairConfig.d.ts
new file mode 100644
index 0000000..4966eb5
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IRepairConfig.d.ts
@@ -0,0 +1,5 @@
+import { IBaseConfig } from "./IBaseConfig";
+export interface IRepairConfig extends IBaseConfig {
+    kind: "aki-repair";
+    priceMultiplier: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/config/ITraderConfig.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/config/ITraderConfig.d.ts
new file mode 100644
index 0000000..dab73e3
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/config/ITraderConfig.d.ts
@@ -0,0 +1,15 @@
+import { IBaseConfig } from "./IBaseConfig";
+export interface ITraderConfig extends IBaseConfig {
+    kind: "aki-trader";
+    updateTime: UpdateTime[];
+    updateTimeDefault: number;
+    fenceAssortSize: number;
+    fenceMaxPresetsCount: number;
+    fencePresetPriceMult: number;
+    minDurabilityForSale: number;
+    fenceItemIgnoreList: string[];
+}
+export interface UpdateTime {
+    traderId: string;
+    seconds: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/config/IWeatherConfig.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IWeatherConfig.d.ts
new file mode 100644
index 0000000..c52cab3
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IWeatherConfig.d.ts
@@ -0,0 +1,21 @@
+import { IBaseConfig } from "./IBaseConfig";
+export interface IWeatherConfig extends IBaseConfig {
+    kind: "aki-weather";
+    acceleration: number;
+    weather: Weather;
+}
+export interface Weather {
+    clouds: MinMax;
+    windSpeed: MinMax;
+    windDirection: MinMax;
+    windGustiness: MinMax;
+    rain: MinMax;
+    rainIntensity: MinMax;
+    fog: MinMax;
+    temp: MinMax;
+    pressure: MinMax;
+}
+export interface MinMax {
+    min: number;
+    max: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/controllers/IBotController.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/controllers/IBotController.d.ts
new file mode 100644
index 0000000..010e208
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/controllers/IBotController.d.ts
@@ -0,0 +1,13 @@
+import { IGenerateBotsRequestData } from "../../eft/bot/IGenerateBotsRequestData";
+import { IBotBase } from "../../eft/common/tables/IBotBase";
+import { IBotCore } from "../../eft/common/tables/IBotCore";
+import { Difficulty } from "../../eft/common/tables/IBotType";
+export interface IBotController {
+    getBotLimit(type: string): number;
+    getBotDifficulty(type: string, difficulty: string): IBotCore | Difficulty;
+    isBotPmc(botRole: string): boolean;
+    isBotBoss(botRole: string): boolean;
+    isBotFollower(botRole: string): boolean;
+    generate(info: IGenerateBotsRequestData, playerScav: boolean): IBotBase[];
+    getBotCap(): number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/generators/IBotGenerator.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/generators/IBotGenerator.d.ts
new file mode 100644
index 0000000..f3e8586
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/generators/IBotGenerator.d.ts
@@ -0,0 +1,10 @@
+import { Inventory as PmcInventory } from "../../eft/common/IPmcData";
+import { Inventory, Chances, Generation } from "../../eft/common/tables/IBotType";
+export interface IBotGenerator {
+    generateInventory(templateInventory: Inventory, equipmentChances: Chances, generation: Generation, botRole: string, isPmc: boolean): PmcInventory;
+}
+export interface IExhaustableArray<T> {
+    getRandomValue(): T;
+    getFirstValue(): T;
+    hasValues(): boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/generators/ILocationGenerator.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/generators/ILocationGenerator.d.ts
new file mode 100644
index 0000000..530ceca
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/generators/ILocationGenerator.d.ts
@@ -0,0 +1,6 @@
+import { IStaticContainerProps, IStaticLootDetails, IStaticAmmoDetails, IStaticForcedProps } from "../../eft/common/tables/ILootBase";
+import { ILooseLoot, SpawnpointTemplate } from "../../eft/common/ILooseLoot";
+export interface ILocationGenerator {
+    generateContainerLoot(containerIn: IStaticContainerProps, staticForced: IStaticForcedProps[], staticLootDist: Record<string, IStaticLootDetails>, staticAmmoDist: Record<string, IStaticAmmoDetails[]>, locationName: string): IStaticContainerProps;
+    generateDynamicLoot(dynamicLootDist: ILooseLoot, staticAmmoDist: Record<string, IStaticAmmoDetails[]>, locationName: string): SpawnpointTemplate[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/generators/IPMCLootGenerator.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/generators/IPMCLootGenerator.d.ts
new file mode 100644
index 0000000..a9db89b
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/generators/IPMCLootGenerator.d.ts
@@ -0,0 +1,4 @@
+export interface IPMCLootGenerator {
+    generatePMCPocketLootPool(): string[];
+    generatePMCBackpackLootPool(): string[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/generators/IRagfairAssortGenerator.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/generators/IRagfairAssortGenerator.d.ts
new file mode 100644
index 0000000..6670540
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/generators/IRagfairAssortGenerator.d.ts
@@ -0,0 +1,4 @@
+import { Item } from "../../eft/common/tables/IItem";
+export interface IRagfairAssortGenerator {
+    getAssortItems(): Item[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/generators/IRagfairOfferGenerator.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/generators/IRagfairOfferGenerator.d.ts
new file mode 100644
index 0000000..30b4be5
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/generators/IRagfairOfferGenerator.d.ts
@@ -0,0 +1,6 @@
+import { IBarterScheme } from "../../eft/common/tables/ITrader";
+import { IRagfairOffer } from "../../eft/ragfair/IRagfairOffer";
+import { Item } from "../../eft/common/tables/IItem";
+export interface IRagfairOfferGenerator {
+    createOffer(userID: string, time: number, items: Item[], barterScheme: IBarterScheme[], loyalLevel: number, price: number, sellInOnePiece: boolean): IRagfairOffer;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/logging/LogBackgroundColor.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/logging/LogBackgroundColor.d.ts
new file mode 100644
index 0000000..87e08a9
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/logging/LogBackgroundColor.d.ts
@@ -0,0 +1,11 @@
+export declare enum LogBackgroundColor {
+    default = "",
+    black = "blackBG",
+    red = "redBG",
+    green = "greenBG",
+    yellow = "yellowBG",
+    blue = "blueBG",
+    magenta = "magentaBG",
+    cyan = "cyanBG",
+    white = "whiteBG"
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/logging/LogTextColor.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/logging/LogTextColor.d.ts
new file mode 100644
index 0000000..7147ae3
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/logging/LogTextColor.d.ts
@@ -0,0 +1,11 @@
+export declare enum LogTextColor {
+    black = "black",
+    red = "red",
+    green = "green",
+    yellow = "yellow",
+    blue = "blue",
+    magenta = "magenta",
+    cyan = "cyan",
+    white = "white",
+    gray = ""
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/logging/SptLogger.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/logging/SptLogger.d.ts
new file mode 100644
index 0000000..ea1b3d8
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/logging/SptLogger.d.ts
@@ -0,0 +1,7 @@
+export interface SptLogger {
+    error: (msg: string | Record<string, unknown>) => void;
+    warn: (msg: string | Record<string, unknown>) => void;
+    succ?: (msg: string | Record<string, unknown>) => void;
+    info: (msg: string | Record<string, unknown>) => void;
+    debug: (msg: string | Record<string, unknown>) => void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/mod/IMod.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/mod/IMod.d.ts
new file mode 100644
index 0000000..e6eec79
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/mod/IMod.d.ts
@@ -0,0 +1,10 @@
+export declare namespace ModLoader {
+    interface IMod {
+        name: string;
+        version: string;
+        main?: string;
+        author?: string;
+        license: string;
+        dependencies?: Record<string, string>;
+    }
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/mod/IModLoader.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/mod/IModLoader.d.ts
new file mode 100644
index 0000000..40a5e19
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/mod/IModLoader.d.ts
@@ -0,0 +1,7 @@
+import { DependencyContainer } from "tsyringe";
+export interface IModLoader {
+    load(container: DependencyContainer): void;
+    getBundles(local: boolean): string;
+    getBundle(key: string, local: boolean): void;
+    getModPath(mod: string): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/mod/IPackageJsonData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/mod/IPackageJsonData.d.ts
new file mode 100644
index 0000000..99e4ef9
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/mod/IPackageJsonData.d.ts
@@ -0,0 +1,12 @@
+export interface IPackageJsonData {
+    incompatibilities?: string[];
+    dependencies?: string[];
+    modDependencies?: Record<string, string>;
+    name: string;
+    author: string;
+    version: string;
+    akiVersion: string;
+    licence: string;
+    main: string;
+    contributors: string[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/ragfair/IRagfairServerPrices.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/ragfair/IRagfairServerPrices.d.ts
new file mode 100644
index 0000000..c7d246a
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/ragfair/IRagfairServerPrices.d.ts
@@ -0,0 +1,4 @@
+export interface IRagfairServerPrices {
+    static: Record<string, number>;
+    dynamic: Record<string, number>;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/server/IDatabaseTables.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/server/IDatabaseTables.d.ts
new file mode 100644
index 0000000..e0d3fdd
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/server/IDatabaseTables.d.ts
@@ -0,0 +1,52 @@
+import { IGlobals } from "../../eft/common/IGlobals";
+import { IBotBase } from "../../eft/common/tables/IBotBase";
+import { IBotCore } from "../../eft/common/tables/IBotCore";
+import { IBotType } from "../../eft/common/tables/IBotType";
+import { ICustomizationItem } from "../../eft/common/tables/ICustomizationItem";
+import { IHandbookBase } from "../../eft/common/tables/IHandbookBase";
+import { ILootBase } from "../../eft/common/tables/ILootBase";
+import { IMatch } from "../../eft/common/tables/IMatch";
+import { IQuest } from "../../eft/common/tables/IQuest";
+import { IRepeatableQuestDatabase } from "../../eft/common/tables/IRepeatableQuests";
+import { ITemplateItem } from "../../eft/common/tables/ITemplateItem";
+import { ITrader } from "../../eft/common/tables/ITrader";
+import { IHideoutArea } from "../../eft/hideout/IHideoutArea";
+import { IHideoutProduction } from "../../eft/hideout/IHideoutProduction";
+import { IHideoutScavCase } from "../../eft/hideout/IHideoutScavCase";
+import { IHideoutSettingsBase } from "../../eft/hideout/IHideoutSettingsBase";
+import { ILocaleBase } from "./ILocaleBase";
+import { ILocations } from "./ILocations";
+import { IServerBase } from "./IServerBase";
+import { ISettingsBase } from "./ISettingsBase";
+export interface IDatabaseTables {
+    bots?: {
+        types: Record<string, IBotType>;
+        base: IBotBase;
+        core: IBotCore;
+    };
+    hideout?: {
+        areas: IHideoutArea[];
+        production: IHideoutProduction[];
+        scavcase: IHideoutScavCase[];
+        settings: IHideoutSettingsBase;
+    };
+    locales?: ILocaleBase;
+    locations?: ILocations;
+    loot?: ILootBase;
+    match?: IMatch;
+    templates?: {
+        character: string[];
+        items: Record<string, ITemplateItem>;
+        quests: IQuest[];
+        repeatableQuests: IRepeatableQuestDatabase;
+        clientItems: Record<string, ITemplateItem>;
+        handbook: IHandbookBase;
+        customization: Record<string, ICustomizationItem>;
+        profiles: any;
+        prices: Record<string, number>;
+    };
+    traders?: Record<string, ITrader>;
+    globals?: IGlobals;
+    server?: IServerBase;
+    settings?: ISettingsBase;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/server/IHttpServer.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/server/IHttpServer.d.ts
new file mode 100644
index 0000000..c828399
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/server/IHttpServer.d.ts
@@ -0,0 +1,12 @@
+/// <reference types="node" />
+/// <reference types="node" />
+import http, { ServerResponse } from "http";
+import { INotification } from "../../eft/notifier/INotifier";
+export interface IHttpServer {
+    load(): void;
+    getCookies(req: http.IncomingMessage): any;
+    sendFile(resp: ServerResponse, file: any): void;
+    isConnectionWebSocket(sessionID: string): boolean;
+    sendResponse(sessionID: string, req: any, resp: any, body: Buffer): void;
+    sendMessage(sessionID: string, output: INotification): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/server/ILocaleBase.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/server/ILocaleBase.d.ts
new file mode 100644
index 0000000..8887c06
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/server/ILocaleBase.d.ts
@@ -0,0 +1,61 @@
+export interface ILocaleBase {
+    global: Record<string, ILocaleGlobalBase>;
+    menu: Record<string, string>;
+    languages: ILanguageBase[];
+}
+export interface ILocaleGlobalBase {
+    interface: Record<string, string>;
+    enum: any[];
+    mail: Record<string, string>;
+    quest: Record<string, ILocaleQuest>;
+    preset: Record<string, ILocalePreset>;
+    handbook: Record<string, string>;
+    season: Record<string, string>;
+    customization: Record<string, ILocaleProps>;
+    repeatableQuest: Record<string, string>;
+    templates: ILocaleTemplateBase;
+    locations: ILocaleLocationsBase;
+    banners: ILocaleBannersBase;
+    trading: ILocaleTradingBase;
+}
+export interface ILocaleQuest {
+    name: string;
+    description: string;
+    note: string;
+    failMessageText: string;
+    startedMessageText: string;
+    successMessageText: string;
+    conditions: Record<string, string>;
+    location: string;
+}
+export interface ILocalePreset {
+    Name: string;
+}
+export interface ILocaleTemplateBase {
+    templates: Record<string, ILocaleProps>;
+}
+export interface ILocaleLocationsBase {
+    locations: Record<string, ILocaleProps>;
+}
+export interface ILocaleBannersBase {
+    locations: Record<string, ILocaleProps>;
+}
+export interface ILocaleProps {
+    Name: string;
+    ShortName: string;
+    Description: string;
+}
+export interface ILocaleTradingBase {
+    locations: Record<string, ILocaleTradingProps>;
+}
+export interface ILocaleTradingProps {
+    FullName: string;
+    FirstName: string;
+    Nickname: string;
+    Location: string;
+    Description: string;
+}
+export interface ILanguageBase {
+    ShortName: string;
+    Name: string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/server/ILocations.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/server/ILocations.d.ts
new file mode 100644
index 0000000..18f0262
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/server/ILocations.d.ts
@@ -0,0 +1,26 @@
+import { ILocationBase } from "../../eft/common/ILocationBase";
+import { ILooseLoot } from "../../eft/common/ILooseLoot";
+import { ILocationsBase } from "../../eft/common/tables/ILocationsBase";
+export interface ILocations {
+    bigmap?: ILocationData;
+    develop?: ILocationData;
+    factory4_day?: ILocationData;
+    factory4_night?: ILocationData;
+    hideout?: ILocationData;
+    interchange?: ILocationData;
+    laboratory?: ILocationData;
+    lighthouse?: ILocationData;
+    privatearea?: ILocationData;
+    rezervbase?: ILocationData;
+    shoreline?: ILocationData;
+    suburbs?: ILocationData;
+    tarkovstreets?: ILocationData;
+    terminal?: ILocationData;
+    town?: ILocationData;
+    woods?: ILocationData;
+    base?: ILocationsBase;
+}
+export interface ILocationData {
+    base: ILocationBase;
+    looseLoot?: ILooseLoot;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/server/IServerBase.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/server/IServerBase.d.ts
new file mode 100644
index 0000000..d033db3
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/server/IServerBase.d.ts
@@ -0,0 +1,4 @@
+export interface IServerBase {
+    ip: string;
+    port: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/server/ISettingsBase.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/server/ISettingsBase.d.ts
new file mode 100644
index 0000000..c067cda
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/server/ISettingsBase.d.ts
@@ -0,0 +1,43 @@
+export interface ISettingsBase {
+    config: Config;
+}
+export interface Config {
+    AFKTimeoutSeconds: number;
+    AdditionalRandomDelaySeconds: number;
+    ClientSendRateLimit: number;
+    CriticalRetriesCount: number;
+    DefaultRetriesCount: number;
+    FirstCycleDelaySeconds: number;
+    FramerateLimit: FramerateLimit;
+    GroupStatusInterval: number;
+    KeepAliveInterval: number;
+    Mark502and504AsNonImportant: boolean;
+    MemoryManagementSettings: MemoryManagementSettings;
+    NVidiaHighlights: boolean;
+    NextCycleDelaySeconds: number;
+    PingServerResultSendInterval: number;
+    PingServersInterval: number;
+    ReleaseProfiler: ReleaseProfiler;
+    SecondCycleDelaySeconds: number;
+    TurnOffLogging: boolean;
+    WeaponOverlapDistanceCulling: number;
+    WebDiagnosticsEnabled: boolean;
+}
+export interface FramerateLimit {
+    MaxFramerateGameLimit: number;
+    MaxFramerateLobbyLimit: number;
+    MinFramerateLimit: number;
+}
+export interface MemoryManagementSettings {
+    AggressiveGC: boolean;
+    GigabytesRequiredToDisableGCDuringRaid: number;
+    HeapPreAllocationEnabled: boolean;
+    HeapPreAllocationMB: number;
+    OverrideRamCleanerSettings: boolean;
+    RamCleanerEnabled: boolean;
+}
+export interface ReleaseProfiler {
+    Enabled: boolean;
+    MaxRecords: number;
+    RecordTriggerValue: number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/services/CustomPreset.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/services/CustomPreset.d.ts
new file mode 100644
index 0000000..f07382e
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/services/CustomPreset.d.ts
@@ -0,0 +1,5 @@
+import { Preset } from "../../eft/common/IGlobals";
+export interface CustomPreset {
+    key: string;
+    preset: Preset;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/services/CustomTraderAssortData.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/services/CustomTraderAssortData.d.ts
new file mode 100644
index 0000000..265a26a
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/services/CustomTraderAssortData.d.ts
@@ -0,0 +1,6 @@
+import { ITraderAssort } from "../../eft/common/tables/ITrader";
+import { Traders } from "../../enums/Traders";
+export interface CustomTraderAssortData {
+    traderId: Traders;
+    assorts: ITraderAssort;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/utils/IAsyncQueue.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/utils/IAsyncQueue.d.ts
new file mode 100644
index 0000000..2be801a
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/utils/IAsyncQueue.d.ts
@@ -0,0 +1,4 @@
+import { ICommand } from "./ICommand";
+export interface IAsyncQueue {
+    waitFor(command: ICommand): Promise<any>;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/utils/ICommand.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/utils/ICommand.d.ts
new file mode 100644
index 0000000..696bb83
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/utils/ICommand.d.ts
@@ -0,0 +1,4 @@
+export interface ICommand {
+    uuid: string;
+    cmd: () => Promise<any>;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/utils/ILogger.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/utils/ILogger.d.ts
new file mode 100644
index 0000000..2af3fac
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/utils/ILogger.d.ts
@@ -0,0 +1,13 @@
+import { Daum } from "../../eft/itemEvent/IItemEventRouterRequest";
+import { LogBackgroundColor } from "../logging/LogBackgroundColor";
+import { LogTextColor } from "../logging/LogTextColor";
+export interface ILogger {
+    writeToLogFile(data: string | Daum): void;
+    log(data: string | Record<string, unknown> | Error, color: string, backgroundColor?: string): void;
+    logWithColor(data: string | Record<string, unknown>, textColor: LogTextColor, backgroundColor?: LogBackgroundColor): void;
+    error(data: string): void;
+    warning(data: string): void;
+    success(data: string): void;
+    info(data: string): void;
+    debug(data: string | Record<string, unknown>, onlyShowInConsole?: boolean): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/utils/IUuidGenerator.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/utils/IUuidGenerator.d.ts
new file mode 100644
index 0000000..3870469
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/utils/IUuidGenerator.d.ts
@@ -0,0 +1,3 @@
+export interface IUUidGenerator {
+    generate(): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/HttpRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/HttpRouter.d.ts
new file mode 100644
index 0000000..f75a47d
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/HttpRouter.d.ts
@@ -0,0 +1,16 @@
+/// <reference types="node" />
+import { IncomingMessage } from "http";
+import { DynamicRouter, Router, StaticRouter } from "../di/Router";
+export declare class HttpRouter {
+    protected staticRouters: StaticRouter[];
+    protected dynamicRoutes: DynamicRouter[];
+    constructor(staticRouters: StaticRouter[], dynamicRoutes: DynamicRouter[]);
+    protected groupBy<T>(list: T[], keyGetter: (t: T) => string): Map<string, T[]>;
+    getResponse(req: IncomingMessage, info: any, sessionID: string): string;
+    protected handleRoute(url: string, info: any, sessionID: string, wrapper: ResponseWrapper, routers: Router[], dynamic: boolean): boolean;
+}
+declare class ResponseWrapper {
+    output: string;
+    constructor(output: string);
+}
+export {};
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/ImageRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/ImageRouter.d.ts
new file mode 100644
index 0000000..ab03977
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/ImageRouter.d.ts
@@ -0,0 +1,13 @@
+/// <reference types="node" />
+import { IncomingMessage, ServerResponse } from "http";
+import { IHttpServer } from "../models/spt/server/IHttpServer";
+import { ImageRouteService } from "../services/mod/image/ImageRouteService";
+import { VFS } from "../utils/VFS";
+export declare class ImageRouter {
+    protected vfs: VFS;
+    protected imageRouteService: ImageRouteService;
+    constructor(vfs: VFS, imageRouteService: ImageRouteService);
+    addRoute(key: string, valueToAdd: string): void;
+    sendImage(sessionID: string, req: IncomingMessage, resp: ServerResponse, body: any, httpServer: IHttpServer): void;
+    getImage(): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/ItemEventRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/ItemEventRouter.d.ts
new file mode 100644
index 0000000..b1ac5d9
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/ItemEventRouter.d.ts
@@ -0,0 +1,17 @@
+import { JsonUtil } from "../utils/JsonUtil";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { IItemEventRouterRequest } from "../models/eft/itemEvent/IItemEventRouterRequest";
+import { ProfileHelper } from "../helpers/ProfileHelper";
+import { ItemEventRouterDefinition } from "../di/Router";
+import { ILogger } from "../models/spt/utils/ILogger";
+export declare class ItemEventRouter {
+    protected logger: ILogger;
+    protected jsonUtil: JsonUtil;
+    protected profileHelper: ProfileHelper;
+    protected itemEventRouters: ItemEventRouterDefinition[];
+    constructor(logger: ILogger, jsonUtil: JsonUtil, profileHelper: ProfileHelper, itemEventRouters: ItemEventRouterDefinition[]);
+    protected output: IItemEventRouterResponse;
+    handleEvents(info: IItemEventRouterRequest, sessionID: string): IItemEventRouterResponse;
+    getOutput(sessionID: string): IItemEventRouterResponse;
+    protected resetOutput(sessionID: string): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/dynamic/BotDynamicRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/dynamic/BotDynamicRouter.d.ts
new file mode 100644
index 0000000..6d0ab4b
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/dynamic/BotDynamicRouter.d.ts
@@ -0,0 +1,6 @@
+import { BotCallbacks } from "../../callbacks/BotCallbacks";
+import { DynamicRouter } from "../../di/Router";
+export declare class BotDynamicRouter extends DynamicRouter {
+    protected botCallbacks: BotCallbacks;
+    constructor(botCallbacks: BotCallbacks);
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/dynamic/BundleDynamicRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/dynamic/BundleDynamicRouter.d.ts
new file mode 100644
index 0000000..a765410
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/dynamic/BundleDynamicRouter.d.ts
@@ -0,0 +1,6 @@
+import { BundleCallbacks } from "../../callbacks/BundleCallbacks";
+import { DynamicRouter } from "../../di/Router";
+export declare class BundleDynamicRouter extends DynamicRouter {
+    protected bundleCallbacks: BundleCallbacks;
+    constructor(bundleCallbacks: BundleCallbacks);
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/dynamic/CustomizationDynamicRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/dynamic/CustomizationDynamicRouter.d.ts
new file mode 100644
index 0000000..2db7cc5
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/dynamic/CustomizationDynamicRouter.d.ts
@@ -0,0 +1,6 @@
+import { CustomizationCallbacks } from "../../callbacks/CustomizationCallbacks";
+import { DynamicRouter } from "../../di/Router";
+export declare class CustomizationDynamicRouter extends DynamicRouter {
+    protected customizationCallbacks: CustomizationCallbacks;
+    constructor(customizationCallbacks: CustomizationCallbacks);
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/dynamic/DataDynamicRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/dynamic/DataDynamicRouter.d.ts
new file mode 100644
index 0000000..836ed8d
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/dynamic/DataDynamicRouter.d.ts
@@ -0,0 +1,6 @@
+import { DataCallbacks } from "../../callbacks/DataCallbacks";
+import { DynamicRouter } from "../../di/Router";
+export declare class DataDynamicRouter extends DynamicRouter {
+    protected dataCallbacks: DataCallbacks;
+    constructor(dataCallbacks: DataCallbacks);
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/dynamic/HttpDynamicRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/dynamic/HttpDynamicRouter.d.ts
new file mode 100644
index 0000000..a152b4d
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/dynamic/HttpDynamicRouter.d.ts
@@ -0,0 +1,6 @@
+import { DynamicRouter } from "../../di/Router";
+import { ImageRouter } from "../ImageRouter";
+export declare class HttpDynamicRouter extends DynamicRouter {
+    protected imageRouter: ImageRouter;
+    constructor(imageRouter: ImageRouter);
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/dynamic/InraidDynamicRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/dynamic/InraidDynamicRouter.d.ts
new file mode 100644
index 0000000..7c0561f
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/dynamic/InraidDynamicRouter.d.ts
@@ -0,0 +1,7 @@
+import { InraidCallbacks } from "../../callbacks/InraidCallbacks";
+import { DynamicRouter } from "../../di/Router";
+export declare class InraidDynamicRouter extends DynamicRouter {
+    protected inraidCallbacks: InraidCallbacks;
+    constructor(inraidCallbacks: InraidCallbacks);
+    getTopLevelRoute(): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/dynamic/LocationDynamicRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/dynamic/LocationDynamicRouter.d.ts
new file mode 100644
index 0000000..b8e5cdf
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/dynamic/LocationDynamicRouter.d.ts
@@ -0,0 +1,7 @@
+import { LocationCallbacks } from "../../callbacks/LocationCallbacks";
+import { DynamicRouter } from "../../di/Router";
+export declare class LocationDynamicRouter extends DynamicRouter {
+    protected locationCallbacks: LocationCallbacks;
+    constructor(locationCallbacks: LocationCallbacks);
+    getTopLevelRoute(): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/dynamic/NotifierDynamicRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/dynamic/NotifierDynamicRouter.d.ts
new file mode 100644
index 0000000..83c60c5
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/dynamic/NotifierDynamicRouter.d.ts
@@ -0,0 +1,6 @@
+import { NotifierCallbacks } from "../../callbacks/NotifierCallbacks";
+import { DynamicRouter } from "../../di/Router";
+export declare class NotifierDynamicRouter extends DynamicRouter {
+    protected notifierCallbacks: NotifierCallbacks;
+    constructor(notifierCallbacks: NotifierCallbacks);
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/dynamic/TraderDynamicRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/dynamic/TraderDynamicRouter.d.ts
new file mode 100644
index 0000000..5b7cc1b
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/dynamic/TraderDynamicRouter.d.ts
@@ -0,0 +1,6 @@
+import { TraderCallbacks } from "../../callbacks/TraderCallbacks";
+import { DynamicRouter } from "../../di/Router";
+export declare class TraderDynamicRouter extends DynamicRouter {
+    protected traderCallbacks: TraderCallbacks;
+    constructor(traderCallbacks: TraderCallbacks);
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/item_events/CustomizationItemEventRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/item_events/CustomizationItemEventRouter.d.ts
new file mode 100644
index 0000000..e78445e
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/item_events/CustomizationItemEventRouter.d.ts
@@ -0,0 +1,10 @@
+import { IPmcData } from "../../models/eft/common/IPmcData";
+import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse";
+import { CustomizationCallbacks } from "../../callbacks/CustomizationCallbacks";
+import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router";
+export declare class CustomizationItemEventRouter extends ItemEventRouterDefinition {
+    protected customizationCallbacks: CustomizationCallbacks;
+    constructor(customizationCallbacks: CustomizationCallbacks);
+    getHandledRoutes(): HandledRoute[];
+    handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/item_events/HealthItemEventRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/item_events/HealthItemEventRouter.d.ts
new file mode 100644
index 0000000..99847c6
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/item_events/HealthItemEventRouter.d.ts
@@ -0,0 +1,10 @@
+import { IPmcData } from "../../models/eft/common/IPmcData";
+import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse";
+import { HealthCallbacks } from "../../callbacks/HealthCallbacks";
+import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router";
+export declare class HealthItemEventRouter extends ItemEventRouterDefinition {
+    protected healthCallbacks: HealthCallbacks;
+    constructor(healthCallbacks: HealthCallbacks);
+    getHandledRoutes(): HandledRoute[];
+    handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/item_events/HideoutItemEventRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/item_events/HideoutItemEventRouter.d.ts
new file mode 100644
index 0000000..e1e98af
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/item_events/HideoutItemEventRouter.d.ts
@@ -0,0 +1,10 @@
+import { IPmcData } from "../../models/eft/common/IPmcData";
+import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse";
+import { HideoutCallbacks } from "../../callbacks/HideoutCallbacks";
+import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router";
+export declare class HideoutItemEventRouter extends ItemEventRouterDefinition {
+    protected hideoutCallbacks: HideoutCallbacks;
+    constructor(hideoutCallbacks: HideoutCallbacks);
+    getHandledRoutes(): HandledRoute[];
+    handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/item_events/InsuranceItemEventRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/item_events/InsuranceItemEventRouter.d.ts
new file mode 100644
index 0000000..a922cc0
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/item_events/InsuranceItemEventRouter.d.ts
@@ -0,0 +1,10 @@
+import { IPmcData } from "../../models/eft/common/IPmcData";
+import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse";
+import { InsuranceCallbacks } from "../../callbacks/InsuranceCallbacks";
+import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router";
+export declare class InsuranceItemEventRouter extends ItemEventRouterDefinition {
+    protected insuranceCallbacks: InsuranceCallbacks;
+    constructor(insuranceCallbacks: InsuranceCallbacks);
+    getHandledRoutes(): HandledRoute[];
+    handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/item_events/InventoryItemEventRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/item_events/InventoryItemEventRouter.d.ts
new file mode 100644
index 0000000..2619bb9
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/item_events/InventoryItemEventRouter.d.ts
@@ -0,0 +1,10 @@
+import { IPmcData } from "../../models/eft/common/IPmcData";
+import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse";
+import { InventoryCallbacks } from "../../callbacks/InventoryCallbacks";
+import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router";
+export declare class InventoryItemEventRouter extends ItemEventRouterDefinition {
+    protected inventoryCallbacks: InventoryCallbacks;
+    constructor(inventoryCallbacks: InventoryCallbacks);
+    getHandledRoutes(): HandledRoute[];
+    handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/item_events/NoteItemEventRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/item_events/NoteItemEventRouter.d.ts
new file mode 100644
index 0000000..59bf598
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/item_events/NoteItemEventRouter.d.ts
@@ -0,0 +1,10 @@
+import { IPmcData } from "../../models/eft/common/IPmcData";
+import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse";
+import { NoteCallbacks } from "../../callbacks/NoteCallbacks";
+import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router";
+export declare class NoteItemEventRouter extends ItemEventRouterDefinition {
+    protected noteCallbacks: NoteCallbacks;
+    constructor(noteCallbacks: NoteCallbacks);
+    getHandledRoutes(): HandledRoute[];
+    handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/item_events/PresetBuildItemEventRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/item_events/PresetBuildItemEventRouter.d.ts
new file mode 100644
index 0000000..277db44
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/item_events/PresetBuildItemEventRouter.d.ts
@@ -0,0 +1,10 @@
+import { IPmcData } from "../../models/eft/common/IPmcData";
+import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse";
+import { PresetBuildCallbacks } from "../../callbacks/PresetBuildCallbacks";
+import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router";
+export declare class PresetBuildItemEventRouter extends ItemEventRouterDefinition {
+    protected presetBuildCallbacks: PresetBuildCallbacks;
+    constructor(presetBuildCallbacks: PresetBuildCallbacks);
+    getHandledRoutes(): HandledRoute[];
+    handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/item_events/QuestItemEventRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/item_events/QuestItemEventRouter.d.ts
new file mode 100644
index 0000000..a092aa6
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/item_events/QuestItemEventRouter.d.ts
@@ -0,0 +1,12 @@
+import { QuestCallbacks } from "../../callbacks/QuestCallbacks";
+import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router";
+import { IPmcData } from "../../models/eft/common/IPmcData";
+import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse";
+import { ILogger } from "../../models/spt/utils/ILogger";
+export declare class QuestItemEventRouter extends ItemEventRouterDefinition {
+    protected logger: ILogger;
+    protected questCallbacks: QuestCallbacks;
+    constructor(logger: ILogger, questCallbacks: QuestCallbacks);
+    getHandledRoutes(): HandledRoute[];
+    handleItemEvent(eventAction: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/item_events/RagfairItemEventRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/item_events/RagfairItemEventRouter.d.ts
new file mode 100644
index 0000000..9216cc5
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/item_events/RagfairItemEventRouter.d.ts
@@ -0,0 +1,10 @@
+import { IPmcData } from "../../models/eft/common/IPmcData";
+import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse";
+import { RagfairCallbacks } from "../../callbacks/RagfairCallbacks";
+import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router";
+export declare class RagfairItemEventRouter extends ItemEventRouterDefinition {
+    protected ragfairCallbacks: RagfairCallbacks;
+    constructor(ragfairCallbacks: RagfairCallbacks);
+    getHandledRoutes(): HandledRoute[];
+    handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/item_events/RepairItemEventRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/item_events/RepairItemEventRouter.d.ts
new file mode 100644
index 0000000..5196ba9
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/item_events/RepairItemEventRouter.d.ts
@@ -0,0 +1,10 @@
+import { IPmcData } from "../../models/eft/common/IPmcData";
+import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse";
+import { RepairCallbacks } from "../../callbacks/RepairCallbacks";
+import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router";
+export declare class RepairItemEventRouter extends ItemEventRouterDefinition {
+    protected repairCallbacks: RepairCallbacks;
+    constructor(repairCallbacks: RepairCallbacks);
+    getHandledRoutes(): HandledRoute[];
+    handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/item_events/TradeItemEventRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/item_events/TradeItemEventRouter.d.ts
new file mode 100644
index 0000000..a43bb0a
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/item_events/TradeItemEventRouter.d.ts
@@ -0,0 +1,10 @@
+import { IPmcData } from "../../models/eft/common/IPmcData";
+import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse";
+import { TradeCallbacks } from "../../callbacks/TradeCallbacks";
+import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router";
+export declare class TradeItemEventRouter extends ItemEventRouterDefinition {
+    protected tradeCallbacks: TradeCallbacks;
+    constructor(tradeCallbacks: TradeCallbacks);
+    getHandledRoutes(): HandledRoute[];
+    handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/item_events/WishlistItemEventRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/item_events/WishlistItemEventRouter.d.ts
new file mode 100644
index 0000000..38497fb
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/item_events/WishlistItemEventRouter.d.ts
@@ -0,0 +1,10 @@
+import { IPmcData } from "../../models/eft/common/IPmcData";
+import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse";
+import { WishlistCallbacks } from "../../callbacks/WishlistCallbacks";
+import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router";
+export declare class WishlistItemEventRouter extends ItemEventRouterDefinition {
+    protected wishlistCallbacks: WishlistCallbacks;
+    constructor(wishlistCallbacks: WishlistCallbacks);
+    getHandledRoutes(): HandledRoute[];
+    handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/save_load/HealthSaveLoadRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/save_load/HealthSaveLoadRouter.d.ts
new file mode 100644
index 0000000..114f5b2
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/save_load/HealthSaveLoadRouter.d.ts
@@ -0,0 +1,7 @@
+import { IAkiProfile } from "../../models/eft/profile/IAkiProfile";
+import { HandledRoute, SaveLoadRouter } from "../../di/Router";
+export declare class HealthSaveLoadRouter extends SaveLoadRouter {
+    constructor();
+    getHandledRoutes(): HandledRoute[];
+    handleLoad(profile: IAkiProfile): IAkiProfile;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/save_load/InraidSaveLoadRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/save_load/InraidSaveLoadRouter.d.ts
new file mode 100644
index 0000000..4c00b40
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/save_load/InraidSaveLoadRouter.d.ts
@@ -0,0 +1,7 @@
+import { IAkiProfile } from "../../models/eft/profile/IAkiProfile";
+import { HandledRoute, SaveLoadRouter } from "../../di/Router";
+export declare class InraidSaveLoadRouter extends SaveLoadRouter {
+    constructor();
+    getHandledRoutes(): HandledRoute[];
+    handleLoad(profile: IAkiProfile): IAkiProfile;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/save_load/InsuranceSaveLoadRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/save_load/InsuranceSaveLoadRouter.d.ts
new file mode 100644
index 0000000..30ce98e
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/save_load/InsuranceSaveLoadRouter.d.ts
@@ -0,0 +1,7 @@
+import { IAkiProfile } from "../../models/eft/profile/IAkiProfile";
+import { HandledRoute, SaveLoadRouter } from "../../di/Router";
+export declare class InsuranceSaveLoadRouter extends SaveLoadRouter {
+    constructor();
+    getHandledRoutes(): HandledRoute[];
+    handleLoad(profile: IAkiProfile): IAkiProfile;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/save_load/ProfileSaveLoadRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/save_load/ProfileSaveLoadRouter.d.ts
new file mode 100644
index 0000000..16c7619
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/save_load/ProfileSaveLoadRouter.d.ts
@@ -0,0 +1,7 @@
+import { IAkiProfile } from "../../models/eft/profile/IAkiProfile";
+import { HandledRoute, SaveLoadRouter } from "../../di/Router";
+export declare class ProfileSaveLoadRouter extends SaveLoadRouter {
+    constructor();
+    getHandledRoutes(): HandledRoute[];
+    handleLoad(profile: IAkiProfile): IAkiProfile;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/serializers/BundleSerializer.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/serializers/BundleSerializer.d.ts
new file mode 100644
index 0000000..912db83
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/serializers/BundleSerializer.d.ts
@@ -0,0 +1,11 @@
+import { Serializer } from "../../di/Serializer";
+import { BundleLoader } from "../../loaders/BundleLoader";
+import { IHttpServer } from "../../models/spt/server/IHttpServer";
+import { ILogger } from "../../models/spt/utils/ILogger";
+export declare class BundleSerializer extends Serializer {
+    protected logger: ILogger;
+    protected bundleLoader: BundleLoader;
+    constructor(logger: ILogger, bundleLoader: BundleLoader);
+    serialize(sessionID: string, req: any, resp: any, body: any, httpServer: IHttpServer): void;
+    canHandle(route: string): boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/serializers/ImageSerializer.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/serializers/ImageSerializer.d.ts
new file mode 100644
index 0000000..0e040d4
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/serializers/ImageSerializer.d.ts
@@ -0,0 +1,9 @@
+import { IHttpServer } from "../../models/spt/server/IHttpServer";
+import { Serializer } from "../../di/Serializer";
+import { ImageRouter } from "../ImageRouter";
+export declare class ImageSerializer extends Serializer {
+    protected imageRouter: ImageRouter;
+    constructor(imageRouter: ImageRouter);
+    serialize(sessionID: string, req: any, resp: any, body: any, httpServer: IHttpServer): void;
+    canHandle(route: string): boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/serializers/NotifySerializer.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/serializers/NotifySerializer.d.ts
new file mode 100644
index 0000000..1779ac9
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/serializers/NotifySerializer.d.ts
@@ -0,0 +1,11 @@
+import { NotifierController } from "../../controllers/NotifierController";
+import { Serializer } from "../../di/Serializer";
+import { HttpServerHelper } from "../../helpers/HttpServerHelper";
+import { IHttpServer } from "../../models/spt/server/IHttpServer";
+export declare class NotifySerializer extends Serializer {
+    protected notifierController: NotifierController;
+    protected httpServerHelper: HttpServerHelper;
+    constructor(notifierController: NotifierController, httpServerHelper: HttpServerHelper);
+    serialize(_sessionID: string, req: any, resp: any, body: any, httpServer: IHttpServer): void;
+    canHandle(route: string): boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/static/BotStaticRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/static/BotStaticRouter.d.ts
new file mode 100644
index 0000000..aeea220
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/static/BotStaticRouter.d.ts
@@ -0,0 +1,6 @@
+import { BotCallbacks } from "../../callbacks/BotCallbacks";
+import { StaticRouter } from "../../di/Router";
+export declare class BotStaticRouter extends StaticRouter {
+    protected botCallbacks: BotCallbacks;
+    constructor(botCallbacks: BotCallbacks);
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/static/BundleStaticRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/static/BundleStaticRouter.d.ts
new file mode 100644
index 0000000..fb682fc
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/static/BundleStaticRouter.d.ts
@@ -0,0 +1,6 @@
+import { BundleCallbacks } from "../../callbacks/BundleCallbacks";
+import { StaticRouter } from "../../di/Router";
+export declare class BundleStaticRouter extends StaticRouter {
+    protected bundleCallbacks: BundleCallbacks;
+    constructor(bundleCallbacks: BundleCallbacks);
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/static/CustomizationStaticRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/static/CustomizationStaticRouter.d.ts
new file mode 100644
index 0000000..21bc4bb
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/static/CustomizationStaticRouter.d.ts
@@ -0,0 +1,6 @@
+import { CustomizationCallbacks } from "../../callbacks/CustomizationCallbacks";
+import { StaticRouter } from "../../di/Router";
+export declare class CustomizationStaticRouter extends StaticRouter {
+    protected customizationCallbacks: CustomizationCallbacks;
+    constructor(customizationCallbacks: CustomizationCallbacks);
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/static/DataStaticRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/static/DataStaticRouter.d.ts
new file mode 100644
index 0000000..84ba7fd
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/static/DataStaticRouter.d.ts
@@ -0,0 +1,6 @@
+import { DataCallbacks } from "../../callbacks/DataCallbacks";
+import { StaticRouter } from "../../di/Router";
+export declare class DataStaticRouter extends StaticRouter {
+    protected dataCallbacks: DataCallbacks;
+    constructor(dataCallbacks: DataCallbacks);
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/static/DialogStaticRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/static/DialogStaticRouter.d.ts
new file mode 100644
index 0000000..546cdf1
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/static/DialogStaticRouter.d.ts
@@ -0,0 +1,6 @@
+import { DialogueCallbacks } from "../../callbacks/DialogueCallbacks";
+import { StaticRouter } from "../../di/Router";
+export declare class DialogStaticRouter extends StaticRouter {
+    protected dialogueCallbacks: DialogueCallbacks;
+    constructor(dialogueCallbacks: DialogueCallbacks);
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/static/GameStaticRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/static/GameStaticRouter.d.ts
new file mode 100644
index 0000000..a9a7496
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/static/GameStaticRouter.d.ts
@@ -0,0 +1,6 @@
+import { GameCallbacks } from "../../callbacks/GameCallbacks";
+import { StaticRouter } from "../../di/Router";
+export declare class GameStaticRouter extends StaticRouter {
+    protected gameCallbacks: GameCallbacks;
+    constructor(gameCallbacks: GameCallbacks);
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/static/HealthStaticRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/static/HealthStaticRouter.d.ts
new file mode 100644
index 0000000..863fd5e
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/static/HealthStaticRouter.d.ts
@@ -0,0 +1,6 @@
+import { HealthCallbacks } from "../../callbacks/HealthCallbacks";
+import { StaticRouter } from "../../di/Router";
+export declare class HealthStaticRouter extends StaticRouter {
+    protected healthCallbacks: HealthCallbacks;
+    constructor(healthCallbacks: HealthCallbacks);
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/static/InraidStaticRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/static/InraidStaticRouter.d.ts
new file mode 100644
index 0000000..b29ad23
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/static/InraidStaticRouter.d.ts
@@ -0,0 +1,6 @@
+import { InraidCallbacks } from "../../callbacks/InraidCallbacks";
+import { StaticRouter } from "../../di/Router";
+export declare class InraidStaticRouter extends StaticRouter {
+    protected inraidCallbacks: InraidCallbacks;
+    constructor(inraidCallbacks: InraidCallbacks);
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/static/InsuranceStaticRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/static/InsuranceStaticRouter.d.ts
new file mode 100644
index 0000000..5676499
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/static/InsuranceStaticRouter.d.ts
@@ -0,0 +1,6 @@
+import { InsuranceCallbacks } from "../../callbacks/InsuranceCallbacks";
+import { StaticRouter } from "../../di/Router";
+export declare class InsuranceStaticRouter extends StaticRouter {
+    protected insuranceCallbacks: InsuranceCallbacks;
+    constructor(insuranceCallbacks: InsuranceCallbacks);
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/static/ItemEventStaticRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/static/ItemEventStaticRouter.d.ts
new file mode 100644
index 0000000..c30a7fc
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/static/ItemEventStaticRouter.d.ts
@@ -0,0 +1,6 @@
+import { ItemEventCallbacks } from "../../callbacks/ItemEventCallbacks";
+import { StaticRouter } from "../../di/Router";
+export declare class ItemEventStaticRouter extends StaticRouter {
+    protected itemEventCallbacks: ItemEventCallbacks;
+    constructor(itemEventCallbacks: ItemEventCallbacks);
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/static/LauncherStaticRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/static/LauncherStaticRouter.d.ts
new file mode 100644
index 0000000..0040cbd
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/static/LauncherStaticRouter.d.ts
@@ -0,0 +1,6 @@
+import { LauncherCallbacks } from "../../callbacks/LauncherCallbacks";
+import { StaticRouter } from "../../di/Router";
+export declare class LauncherStaticRouter extends StaticRouter {
+    protected launcherCallbacks: LauncherCallbacks;
+    constructor(launcherCallbacks: LauncherCallbacks);
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/static/LocationStaticRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/static/LocationStaticRouter.d.ts
new file mode 100644
index 0000000..b6de956
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/static/LocationStaticRouter.d.ts
@@ -0,0 +1,6 @@
+import { LocationCallbacks } from "../../callbacks/LocationCallbacks";
+import { StaticRouter } from "../../di/Router";
+export declare class LocationStaticRouter extends StaticRouter {
+    protected locationCallbacks: LocationCallbacks;
+    constructor(locationCallbacks: LocationCallbacks);
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/static/MatchStaticRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/static/MatchStaticRouter.d.ts
new file mode 100644
index 0000000..9920a92
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/static/MatchStaticRouter.d.ts
@@ -0,0 +1,6 @@
+import { MatchCallbacks } from "../../callbacks/MatchCallbacks";
+import { StaticRouter } from "../../di/Router";
+export declare class MatchStaticRouter extends StaticRouter {
+    protected matchCallbacks: MatchCallbacks;
+    constructor(matchCallbacks: MatchCallbacks);
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/static/NotifierStaticRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/static/NotifierStaticRouter.d.ts
new file mode 100644
index 0000000..8f1f5cc
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/static/NotifierStaticRouter.d.ts
@@ -0,0 +1,6 @@
+import { NotifierCallbacks } from "../../callbacks/NotifierCallbacks";
+import { StaticRouter } from "../../di/Router";
+export declare class NotifierStaticRouter extends StaticRouter {
+    protected notifierCallbacks: NotifierCallbacks;
+    constructor(notifierCallbacks: NotifierCallbacks);
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/static/PresetStaticRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/static/PresetStaticRouter.d.ts
new file mode 100644
index 0000000..a9e7458
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/static/PresetStaticRouter.d.ts
@@ -0,0 +1,6 @@
+import { PresetBuildCallbacks } from "../../callbacks/PresetBuildCallbacks";
+import { StaticRouter } from "../../di/Router";
+export declare class PresetStaticRouter extends StaticRouter {
+    protected presetCallbacks: PresetBuildCallbacks;
+    constructor(presetCallbacks: PresetBuildCallbacks);
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/static/ProfileStaticRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/static/ProfileStaticRouter.d.ts
new file mode 100644
index 0000000..83403f2
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/static/ProfileStaticRouter.d.ts
@@ -0,0 +1,6 @@
+import { ProfileCallbacks } from "../../callbacks/ProfileCallbacks";
+import { StaticRouter } from "../../di/Router";
+export declare class ProfileStaticRouter extends StaticRouter {
+    protected profileCallbacks: ProfileCallbacks;
+    constructor(profileCallbacks: ProfileCallbacks);
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/static/QuestStaticRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/static/QuestStaticRouter.d.ts
new file mode 100644
index 0000000..8f7ca0a
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/static/QuestStaticRouter.d.ts
@@ -0,0 +1,6 @@
+import { QuestCallbacks } from "../../callbacks/QuestCallbacks";
+import { StaticRouter } from "../../di/Router";
+export declare class QuestStaticRouter extends StaticRouter {
+    protected questCallbacks: QuestCallbacks;
+    constructor(questCallbacks: QuestCallbacks);
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/static/RagfairStaticRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/static/RagfairStaticRouter.d.ts
new file mode 100644
index 0000000..6c41467
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/static/RagfairStaticRouter.d.ts
@@ -0,0 +1,6 @@
+import { RagfairCallbacks } from "../../callbacks/RagfairCallbacks";
+import { StaticRouter } from "../../di/Router";
+export declare class RagfairStaticRouter extends StaticRouter {
+    protected ragfairCallbacks: RagfairCallbacks;
+    constructor(ragfairCallbacks: RagfairCallbacks);
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/static/TraderStaticRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/static/TraderStaticRouter.d.ts
new file mode 100644
index 0000000..41728a1
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/static/TraderStaticRouter.d.ts
@@ -0,0 +1,6 @@
+import { TraderCallbacks } from "../../callbacks/TraderCallbacks";
+import { StaticRouter } from "../../di/Router";
+export declare class TraderStaticRouter extends StaticRouter {
+    protected traderCallbacks: TraderCallbacks;
+    constructor(traderCallbacks: TraderCallbacks);
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/routers/static/WeatherStaticRouter.d.ts b/TypeScript/14AfterDBLoadHook/types/routers/static/WeatherStaticRouter.d.ts
new file mode 100644
index 0000000..72ed851
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/routers/static/WeatherStaticRouter.d.ts
@@ -0,0 +1,6 @@
+import { WeatherCallbacks } from "../../callbacks/WeatherCallbacks";
+import { StaticRouter } from "../../di/Router";
+export declare class WeatherStaticRouter extends StaticRouter {
+    protected weatherCallbacks: WeatherCallbacks;
+    constructor(weatherCallbacks: WeatherCallbacks);
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/servers/ConfigServer.d.ts b/TypeScript/14AfterDBLoadHook/types/servers/ConfigServer.d.ts
new file mode 100644
index 0000000..a079be8
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/servers/ConfigServer.d.ts
@@ -0,0 +1,14 @@
+import { JsonUtil } from "../utils/JsonUtil";
+import { VFS } from "../utils/VFS";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ConfigTypes } from "../models/enums/ConfigTypes";
+export declare class ConfigServer {
+    protected logger: ILogger;
+    protected vfs: VFS;
+    protected jsonUtil: JsonUtil;
+    protected configs: Record<string, any>;
+    constructor(logger: ILogger, vfs: VFS, jsonUtil: JsonUtil);
+    getConfig<T>(configType: ConfigTypes): T;
+    getConfigByString<T>(configType: string): T;
+    initialize(): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/servers/DatabaseServer.d.ts b/TypeScript/14AfterDBLoadHook/types/servers/DatabaseServer.d.ts
new file mode 100644
index 0000000..aa152d0
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/servers/DatabaseServer.d.ts
@@ -0,0 +1,6 @@
+import { IDatabaseTables } from "../models/spt/server/IDatabaseTables";
+export declare class DatabaseServer {
+    protected tableData: IDatabaseTables;
+    getTables(): IDatabaseTables;
+    setTables(any: any): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/servers/HttpServer.d.ts b/TypeScript/14AfterDBLoadHook/types/servers/HttpServer.d.ts
new file mode 100644
index 0000000..5234966
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/servers/HttpServer.d.ts
@@ -0,0 +1,49 @@
+/// <reference types="node" />
+/// <reference types="node" />
+import http, { ServerResponse } from "http";
+import { Serializer } from "../di/Serializer";
+import { HttpServerHelper } from "../helpers/HttpServerHelper";
+import { NotifierHelper } from "../helpers/NotifierHelper";
+import { INotification } from "../models/eft/notifier/INotifier";
+import { IHttpConfig } from "../models/spt/config/IHttpConfig";
+import { IHttpServer } from "../models/spt/server/IHttpServer";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { HttpRouter } from "../routers/HttpRouter";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+import { JsonUtil } from "../utils/JsonUtil";
+import { RandomUtil } from "../utils/RandomUtil";
+import { ConfigServer } from "./ConfigServer";
+import { DatabaseServer } from "./DatabaseServer";
+export declare class HttpServer implements IHttpServer {
+    protected httpRouter: HttpRouter;
+    protected logger: ILogger;
+    protected randomUtil: RandomUtil;
+    protected jsonUtil: JsonUtil;
+    protected httpResponse: HttpResponseUtil;
+    protected databaseServer: DatabaseServer;
+    protected notifierHelper: NotifierHelper;
+    protected httpServerHelper: HttpServerHelper;
+    protected serializers: Serializer[];
+    protected configServer: ConfigServer;
+    constructor(httpRouter: HttpRouter, // TODO: delay required
+    logger: ILogger, randomUtil: RandomUtil, jsonUtil: JsonUtil, httpResponse: HttpResponseUtil, databaseServer: DatabaseServer, notifierHelper: NotifierHelper, httpServerHelper: HttpServerHelper, serializers: Serializer[], configServer: ConfigServer);
+    protected buffers: {};
+    protected onReceive: {};
+    protected onRespond: {};
+    protected httpConfig: IHttpConfig;
+    protected webSockets: {};
+    protected websocketPingHandler: any;
+    getCookies(req: http.IncomingMessage): any;
+    resetBuffer(sessionID: string): void;
+    putInBuffer(sessionID: any, data: any, bufLength: number): boolean;
+    getFromBuffer(sessionID: string): any;
+    sendZlibJson(resp: any, output: any, sessionID: string): void;
+    sendMessage(sessionID: string, output: INotification): void;
+    sendFile(resp: ServerResponse, file: any): void;
+    isConnectionWebSocket(sessionID: string): boolean;
+    sendResponse(sessionID: string, req: any, resp: any, body: Buffer): void;
+    handleRequest(req: http.IncomingMessage, resp: http.ServerResponse): void;
+    load(): void;
+    protected getRandomisedMessage(): string;
+    wsOnConnection(ws: any, req: any): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/servers/RagfairServer.d.ts b/TypeScript/14AfterDBLoadHook/types/servers/RagfairServer.d.ts
new file mode 100644
index 0000000..60c92b5
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/servers/RagfairServer.d.ts
@@ -0,0 +1,31 @@
+import { RagfairOfferGenerator } from "../generators/RagfairOfferGenerator";
+import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer";
+import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { RagfairCategoriesService } from "../services/RagfairCategoriesService";
+import { RagfairOfferService } from "../services/RagfairOfferService";
+import { RagfairRequiredItemsService } from "../services/RagfairRequiredItemsService";
+import { ConfigServer } from "./ConfigServer";
+export declare class RagfairServer {
+    protected logger: ILogger;
+    protected ragfairOfferGenerator: RagfairOfferGenerator;
+    protected ragfairOfferService: RagfairOfferService;
+    protected ragfairCategoriesService: RagfairCategoriesService;
+    protected ragfairRequiredItemsService: RagfairRequiredItemsService;
+    protected configServer: ConfigServer;
+    protected ragfairConfig: IRagfairConfig;
+    constructor(logger: ILogger, ragfairOfferGenerator: RagfairOfferGenerator, ragfairOfferService: RagfairOfferService, ragfairCategoriesService: RagfairCategoriesService, ragfairRequiredItemsService: RagfairRequiredItemsService, configServer: ConfigServer);
+    load(): void;
+    update(): void;
+    getCategories(): Record<string, number>;
+    /**
+     * Disable/Hide an offer from flea
+     * @param offerId
+     */
+    hideOffer(offerId: string): void;
+    getOffer(offerID: string): IRagfairOffer;
+    getOffers(): IRagfairOffer[];
+    removeOfferStack(offerID: string, amount: number): void;
+    doesOfferExist(offerId: string): boolean;
+    addPlayerOffers(): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/servers/SaveServer.d.ts b/TypeScript/14AfterDBLoadHook/types/servers/SaveServer.d.ts
new file mode 100644
index 0000000..cb28f49
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/servers/SaveServer.d.ts
@@ -0,0 +1,28 @@
+import { IAkiProfile, Info } from "../models/eft/profile/IAkiProfile";
+import { HashUtil } from "../utils/HashUtil";
+import { JsonUtil } from "../utils/JsonUtil";
+import { VFS } from "../utils/VFS";
+import { SaveLoadRouter } from "../di/Router";
+import { ILogger } from "../models/spt/utils/ILogger";
+export declare class SaveServer {
+    protected vfs: VFS;
+    protected saveLoadRouters: SaveLoadRouter[];
+    protected jsonUtil: JsonUtil;
+    protected hashUtil: HashUtil;
+    protected logger: ILogger;
+    protected profileFilepath: string;
+    protected profiles: {};
+    protected onSave: {};
+    protected saveMd5: {};
+    constructor(vfs: VFS, saveLoadRouters: SaveLoadRouter[], jsonUtil: JsonUtil, hashUtil: HashUtil, logger: ILogger);
+    load(): void;
+    save(): void;
+    getProfile(sessionId: string): IAkiProfile;
+    getProfiles(): Record<string, IAkiProfile>;
+    deleteProfileById(sessionID: string): boolean;
+    createProfile(profileInfo: Info): void;
+    addProfile(profileDetails: IAkiProfile): void;
+    loadProfile(sessionID: string): void;
+    saveProfile(sessionID: string): void;
+    removeProfile(sessionID: string): boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/CustomHandbookItemService.d.ts b/TypeScript/14AfterDBLoadHook/types/services/CustomHandbookItemService.d.ts
new file mode 100644
index 0000000..1c25b99
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/services/CustomHandbookItemService.d.ts
@@ -0,0 +1,13 @@
+import { HandbookItem } from "../models/eft/common/tables/IHandbookBase";
+import { ILogger } from "../models/spt/utils/ILogger";
+export declare class CustomHandbookItemService {
+    protected logger: ILogger;
+    private customHandbookItems;
+    constructor(logger: ILogger);
+    /**
+     * Add handbook item
+     * @param handbookItem item to add
+    */
+    add(handbookItem: HandbookItem): void;
+    get(): HandbookItem[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/CustomItemService.d.ts b/TypeScript/14AfterDBLoadHook/types/services/CustomItemService.d.ts
new file mode 100644
index 0000000..d5806b4
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/services/CustomItemService.d.ts
@@ -0,0 +1,11 @@
+import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { DatabaseServer } from "../servers/DatabaseServer";
+export declare class CustomItemService {
+    protected logger: ILogger;
+    protected databaseServer: DatabaseServer;
+    private customItems;
+    constructor(logger: ILogger, databaseServer: DatabaseServer);
+    add(itemToAdd: ITemplateItem): void;
+    get(): ITemplateItem[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/CustomPresetService.d.ts b/TypeScript/14AfterDBLoadHook/types/services/CustomPresetService.d.ts
new file mode 100644
index 0000000..84a8baf
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/services/CustomPresetService.d.ts
@@ -0,0 +1,19 @@
+import { Preset } from "../models/eft/common/IGlobals";
+import { CustomPreset } from "../models/spt/services/CustomPreset";
+import { ILogger } from "../models/spt/utils/ILogger";
+export declare class CustomPresetService {
+    protected logger: ILogger;
+    private customPresets;
+    constructor(logger: ILogger);
+    /**
+     * Add custom preset to internal array
+     * @param presetKey presets key
+     * @param presetToAdd preset item to add
+     */
+    add(presetKey: string, presetToAdd: Preset): void;
+    /**
+     * Get all custom presets
+     * @returns
+     */
+    get(): CustomPreset[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/CustomTraderAssortService.d.ts b/TypeScript/14AfterDBLoadHook/types/services/CustomTraderAssortService.d.ts
new file mode 100644
index 0000000..e63d67b
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/services/CustomTraderAssortService.d.ts
@@ -0,0 +1,14 @@
+import { CustomTraderAssortData } from "../models/spt/services/CustomTraderAssortData";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { DatabaseServer } from "../servers/DatabaseServer";
+export declare class CustomTraderAssortService {
+    protected logger: ILogger;
+    protected databaseServer: DatabaseServer;
+    private customAssorts;
+    constructor(logger: ILogger, databaseServer: DatabaseServer);
+    /**
+     * Add assorts to a specific trader
+     */
+    add(assortsToAdd: CustomTraderAssortData): void;
+    get(): CustomTraderAssortData[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/FenceService.d.ts b/TypeScript/14AfterDBLoadHook/types/services/FenceService.d.ts
new file mode 100644
index 0000000..79058c6
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/services/FenceService.d.ts
@@ -0,0 +1,39 @@
+import { HandbookHelper } from "../helpers/HandbookHelper";
+import { ItemHelper } from "../helpers/ItemHelper";
+import { PresetHelper } from "../helpers/PresetHelper";
+import { FenceLevel } from "../models/eft/common/IGlobals";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { ITraderAssort } from "../models/eft/common/tables/ITrader";
+import { ITraderConfig } from "../models/spt/config/ITraderConfig";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ConfigServer } from "../servers/ConfigServer";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { HashUtil } from "../utils/HashUtil";
+import { JsonUtil } from "../utils/JsonUtil";
+import { RandomUtil } from "../utils/RandomUtil";
+export declare class FenceService {
+    protected logger: ILogger;
+    protected hashUtil: HashUtil;
+    protected jsonUtil: JsonUtil;
+    protected randomUtil: RandomUtil;
+    protected databaseServer: DatabaseServer;
+    protected handbookHelper: HandbookHelper;
+    protected itemHelper: ItemHelper;
+    protected presetHelper: PresetHelper;
+    protected configServer: ConfigServer;
+    protected fenceAssort: ITraderAssort;
+    protected traderConfig: ITraderConfig;
+    constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, itemHelper: ItemHelper, presetHelper: PresetHelper, configServer: ConfigServer);
+    protected setFenceAssort(fenceAssort: ITraderAssort): void;
+    getFenceAssorts(): ITraderAssort;
+    hasExpiredCache(refreshAssort: boolean): boolean;
+    generateFenceAssortCache(pmcData: IPmcData): void;
+    /**
+     * Get the fence level the passed in profile has
+     * @param pmcData Player profile
+     * @returns FenceLevel
+     */
+    getFenceInfo(pmcData: IPmcData): FenceLevel;
+    removeFenceOffer(assortIdToRemove: string): void;
+    updateFenceOffers(pmcData: IPmcData): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/HashCacheService.d.ts b/TypeScript/14AfterDBLoadHook/types/services/HashCacheService.d.ts
new file mode 100644
index 0000000..5320f28
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/services/HashCacheService.d.ts
@@ -0,0 +1,19 @@
+import { ILogger } from "../models/spt/utils/ILogger";
+import { HashUtil } from "../utils/HashUtil";
+import { JsonUtil } from "../utils/JsonUtil";
+import { VFS } from "../utils/VFS";
+export declare class HashCacheService {
+    protected vfs: VFS;
+    protected hashUtil: HashUtil;
+    protected jsonUtil: JsonUtil;
+    protected logger: ILogger;
+    protected jsonHashes: any;
+    protected modHashes: any;
+    protected readonly modCachePath = "./user/cache/modCache.json";
+    constructor(vfs: VFS, hashUtil: HashUtil, jsonUtil: JsonUtil, logger: ILogger);
+    getStoredModHash(modName: string): string;
+    modContentMatchesStoredHash(modName: string, modContent: string): boolean;
+    hashMatchesStoredHash(modName: string, modHash: string): boolean;
+    storeModContent(modName: string, modContent: string): void;
+    storeModHash(modName: string, modHash: string): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/InsuranceService.d.ts b/TypeScript/14AfterDBLoadHook/types/services/InsuranceService.d.ts
new file mode 100644
index 0000000..0219816
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/services/InsuranceService.d.ts
@@ -0,0 +1,42 @@
+import { DialogueHelper } from "../helpers/DialogueHelper";
+import { SecureContainerHelper } from "../helpers/SecureContainerHelper";
+import { TraderHelper } from "../helpers/TraderHelper";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { Item } from "../models/eft/common/tables/IItem";
+import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData";
+import { IInsuranceConfig } from "../models/spt/config/IInsuranceConfig";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ConfigServer } from "../servers/ConfigServer";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { SaveServer } from "../servers/SaveServer";
+import { RandomUtil } from "../utils/RandomUtil";
+import { TimeUtil } from "../utils/TimeUtil";
+export declare class InsuranceService {
+    protected logger: ILogger;
+    protected databaseServer: DatabaseServer;
+    protected secureContainerHelper: SecureContainerHelper;
+    protected randomUtil: RandomUtil;
+    protected timeUtil: TimeUtil;
+    protected saveServer: SaveServer;
+    protected traderHelper: TraderHelper;
+    protected dialogueHelper: DialogueHelper;
+    protected configServer: ConfigServer;
+    protected insured: Record<string, Record<string, Item[]>>;
+    protected templatesById: {};
+    protected insuranceConfig: IInsuranceConfig;
+    constructor(logger: ILogger, databaseServer: DatabaseServer, secureContainerHelper: SecureContainerHelper, randomUtil: RandomUtil, timeUtil: TimeUtil, saveServer: SaveServer, traderHelper: TraderHelper, dialogueHelper: DialogueHelper, configServer: ConfigServer);
+    insuranceExists(sessionId: string): boolean;
+    insuranceTraderArrayExists(sessionId: string, traderId: string): boolean;
+    getInsurance(sessionId: string): Record<string, Item[]>;
+    getInsuranceItems(sessionId: string, traderId: string): any[];
+    resetInsurance(sessionId: string): void;
+    resetInsuranceTraderArray(sessionId: string, traderId: string): void;
+    addInsuranceItemToArray(sessionId: string, traderId: string, itemToAdd: any): void;
+    getItemPrice(_tpl: string): number;
+    generateTemplatesById(): void;
+    sendInsuredItems(pmcData: IPmcData, sessionID: string): void;
+    storeLostGear(pmcData: IPmcData, offraidData: ISaveProgressRequestData, preRaidGear: Item[], sessionID: string): void;
+    storeInsuredItemsForReturn(pmcData: IPmcData, offraidData: ISaveProgressRequestData, preRaidGear: Item[], sessionID: string): void;
+    protected addGearToSend(pmcData: IPmcData, insuredItem: any, actualItem: any, sessionID: string): any;
+    getPremium(pmcData: IPmcData, inventoryItem: Item, traderId: string): number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/LocaleService.d.ts b/TypeScript/14AfterDBLoadHook/types/services/LocaleService.d.ts
new file mode 100644
index 0000000..33bea7b
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/services/LocaleService.d.ts
@@ -0,0 +1,14 @@
+import { ILocaleConfig } from "../models/spt/config/ILocaleConfig";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ConfigServer } from "../servers/ConfigServer";
+export declare class LocaleService {
+    protected logger: ILogger;
+    protected configServer: ConfigServer;
+    protected localeConfig: ILocaleConfig;
+    constructor(logger: ILogger, configServer: ConfigServer);
+    /**
+     * Gets the locale key from the locale.json file
+     * @returns locale e.g en/ge/cz/cn
+     */
+    getDesiredLocale(): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/MatchLocationService.d.ts b/TypeScript/14AfterDBLoadHook/types/services/MatchLocationService.d.ts
new file mode 100644
index 0000000..2b5fc0e
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/services/MatchLocationService.d.ts
@@ -0,0 +1,8 @@
+import { TimeUtil } from "../utils/TimeUtil";
+export declare class MatchLocationService {
+    protected timeUtil: TimeUtil;
+    protected locations: {};
+    constructor(timeUtil: TimeUtil);
+    createGroup(sessionID: string, info: any): any;
+    deleteGroup(info: any): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/ModCompilerService.d.ts b/TypeScript/14AfterDBLoadHook/types/services/ModCompilerService.d.ts
new file mode 100644
index 0000000..26cb4ac
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/services/ModCompilerService.d.ts
@@ -0,0 +1,20 @@
+import * as ts from "typescript";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { VFS } from "../utils/VFS";
+import { HashCacheService } from "./HashCacheService";
+export declare class ModCompilerService {
+    protected logger: ILogger;
+    protected hashCacheService: HashCacheService;
+    protected vfs: VFS;
+    constructor(logger: ILogger, hashCacheService: HashCacheService, vfs: VFS);
+    compileMod(modName: string, modPath: string, modTypeScriptFiles: string[]): Promise<void>;
+    protected compile(fileNames: string[], options: ts.CompilerOptions): Promise<void>;
+    protected buildDepth(depth: number): string;
+    protected getNodesModulesPath(depth: number): string;
+    protected getAkiPath(depth: number): string;
+    protected getAkiFolder(): string;
+    protected getNodesModulesFolder(): string;
+    protected calculateDepth(file: string): number;
+    protected areFilesReady(fileNames: string[]): boolean;
+    protected delay(ms: number): Promise<unknown>;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/NotificationService.d.ts b/TypeScript/14AfterDBLoadHook/types/services/NotificationService.d.ts
new file mode 100644
index 0000000..7e2a127
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/services/NotificationService.d.ts
@@ -0,0 +1,21 @@
+import { INotification } from "../models/eft/notifier/INotifier";
+export declare class NotificationService {
+    protected messageQueue: {};
+    getMessageQueue(): {};
+    getMessageFromQueue(sessionId: string): any;
+    updateMessageOnQueue(sessionId: string, value: any[]): void;
+    has(sessionID: string): boolean;
+    /**
+     * Pop first message from queue.
+     */
+    pop(sessionID: string): any;
+    /**
+     * Add message to queue
+     */
+    add(sessionID: string, message: INotification): void;
+    /**
+     * Get message queue for session
+     * @param sessionID
+     */
+    get(sessionID: string): any;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/PaymentService.d.ts b/TypeScript/14AfterDBLoadHook/types/services/PaymentService.d.ts
new file mode 100644
index 0000000..5834750
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/services/PaymentService.d.ts
@@ -0,0 +1,49 @@
+import { HandbookHelper } from "../helpers/HandbookHelper";
+import { InventoryHelper } from "../helpers/InventoryHelper";
+import { ItemHelper } from "../helpers/ItemHelper";
+import { PaymentHelper } from "../helpers/PaymentHelper";
+import { TraderHelper } from "../helpers/TraderHelper";
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { Item } from "../models/eft/common/tables/IItem";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { IProcessBuyTradeRequestData } from "../models/eft/trade/IProcessBuyTradeRequestData";
+import { IProcessSellTradeRequestData } from "../models/eft/trade/IProcessSellTradeRequestData";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+export declare class PaymentService {
+    protected logger: ILogger;
+    protected httpResponse: HttpResponseUtil;
+    protected databaseServer: DatabaseServer;
+    protected handbookHelper: HandbookHelper;
+    protected traderHelper: TraderHelper;
+    protected itemHelper: ItemHelper;
+    protected inventoryHelper: InventoryHelper;
+    protected paymentHelper: PaymentHelper;
+    constructor(logger: ILogger, httpResponse: HttpResponseUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, traderHelper: TraderHelper, itemHelper: ItemHelper, inventoryHelper: InventoryHelper, paymentHelper: PaymentHelper);
+    /**
+     * Take money and insert items into return to server request
+     * @param {Object} pmcData
+     * @param {Object} body
+     * @param {string} sessionID
+     * @returns Object
+     */
+    payMoney(pmcData: IPmcData, body: IProcessBuyTradeRequestData, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
+    /**
+     * Receive money back after selling
+     * @param {IPmcData} pmcData
+     * @param {number} amount
+     * @param {IProcessSellTradeRequestData} body
+     * @param {IItemEventRouterResponse} output
+     * @param {string} sessionID
+     * @returns IItemEventRouterResponse
+     */
+    getMoney(pmcData: IPmcData, amount: number, body: IProcessSellTradeRequestData, output: IItemEventRouterResponse, sessionID: string): IItemEventRouterResponse;
+    /**
+   * Recursively checks if the given item is
+   * inside the stash, that is it has the stash as
+   * ancestor with slotId=hideout
+   */
+    protected isItemInStash(pmcData: IPmcData, item: Item): boolean;
+    addPaymentToOutput(pmcData: IPmcData, currencyTpl: string, amountToPay: number, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/PlayerService.d.ts b/TypeScript/14AfterDBLoadHook/types/services/PlayerService.d.ts
new file mode 100644
index 0000000..519b7e5
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/services/PlayerService.d.ts
@@ -0,0 +1,22 @@
+import { IPmcData } from "../models/eft/common/IPmcData";
+import { IPlayerIncrementSkillLevelRequestData } from "../models/eft/player/IPlayerIncrementSkillLevelRequestData";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { DatabaseServer } from "../servers/DatabaseServer";
+export declare class PlayerService {
+    protected logger: ILogger;
+    protected databaseServer: DatabaseServer;
+    constructor(logger: ILogger, databaseServer: DatabaseServer);
+    /**
+     * increases the profile skill and updates any output
+     * @param {Object} pmcData
+     * @param {Object} output
+     * @param {String} skillName
+     * @param {Number} amount
+     */
+    incrementSkillLevel(pmcData: IPmcData, output: IPlayerIncrementSkillLevelRequestData, skillName: string, amount: number): void;
+    /**
+     * @param {Object} pmcData
+     * @returns number
+     */
+    calculateLevel(pmcData: IPmcData): number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/RagfairCategoriesService.d.ts b/TypeScript/14AfterDBLoadHook/types/services/RagfairCategoriesService.d.ts
new file mode 100644
index 0000000..09956cc
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/services/RagfairCategoriesService.d.ts
@@ -0,0 +1,10 @@
+import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer";
+export declare class RagfairCategoriesService {
+    updateCategories(offers: IRagfairOffer[]): void;
+    protected categories: Record<string, number>;
+    getCategories(): Record<string, number>;
+    getCategoryByItemId(itemId: string): number;
+    resetCategories(): void;
+    setCategoryValue(itemId: string, newValue: number): void;
+    incrementCategory(itemId: string): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/RagfairLinkedItemService.d.ts b/TypeScript/14AfterDBLoadHook/types/services/RagfairLinkedItemService.d.ts
new file mode 100644
index 0000000..6c34ee0
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/services/RagfairLinkedItemService.d.ts
@@ -0,0 +1,10 @@
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
+export declare class RagfairLinkedItemService {
+    protected databaseServer: DatabaseServer;
+    protected linkedItemsCache: Record<string, Iterable<string>>;
+    constructor(databaseServer: DatabaseServer);
+    getLinkedItems(linkedSearchId: string): Iterable<string>;
+    protected buildLinkedItemTable(): void;
+    protected getFilters(item: ITemplateItem, slot: string): string[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/RagfairOfferService.d.ts b/TypeScript/14AfterDBLoadHook/types/services/RagfairOfferService.d.ts
new file mode 100644
index 0000000..7afbf8c
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/services/RagfairOfferService.d.ts
@@ -0,0 +1,66 @@
+import { ProfileHelper } from "../helpers/ProfileHelper";
+import { RagfairServerHelper } from "../helpers/RagfairServerHelper";
+import { Item } from "../models/eft/common/tables/IItem";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer";
+import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ItemEventRouter } from "../routers/ItemEventRouter";
+import { ConfigServer } from "../servers/ConfigServer";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { SaveServer } from "../servers/SaveServer";
+import { HttpResponseUtil } from "../utils/HttpResponseUtil";
+import { TimeUtil } from "../utils/TimeUtil";
+export declare class RagfairOfferService {
+    protected logger: ILogger;
+    protected timeUtil: TimeUtil;
+    protected databaseServer: DatabaseServer;
+    protected saveServer: SaveServer;
+    protected ragfairServerHelper: RagfairServerHelper;
+    protected profileHelper: ProfileHelper;
+    protected itemEventRouter: ItemEventRouter;
+    protected httpResponse: HttpResponseUtil;
+    protected configServer: ConfigServer;
+    protected playerOffersLoaded: boolean;
+    protected toUpdate: Record<string, boolean>;
+    protected expiredOffers: Item[];
+    protected offers: IRagfairOffer[];
+    protected ragfairConfig: IRagfairConfig;
+    constructor(logger: ILogger, timeUtil: TimeUtil, databaseServer: DatabaseServer, saveServer: SaveServer, ragfairServerHelper: RagfairServerHelper, profileHelper: ProfileHelper, itemEventRouter: ItemEventRouter, httpResponse: HttpResponseUtil, configServer: ConfigServer);
+    getOffers(): IRagfairOffer[];
+    getOfferByOfferId(offerId: string): IRagfairOffer;
+    getOffersOfType(templateId: string): IRagfairOffer[];
+    addOffer(offer: IRagfairOffer): void;
+    addOfferToExpired(offer: Item): void;
+    setTraderUpdateStatus(traderId: string, shouldUpdate: boolean): void;
+    shouldTraderBeUpdated(traderID: string): boolean;
+    getExpiredOfferCount(): number;
+    /**
+     * Get an array of expired items not yet processed into new offers
+     * @returns items that need to be turned into offers
+     */
+    getExpiredOffers(): Item[];
+    resetExpiredOffers(): void;
+    /**
+     * Does the offer exist on the ragfair
+     * @param offerId offer id to check for
+     * @returns offer exists - true
+     */
+    doesOfferExist(offerId: string): boolean;
+    getTraders(): Record<string, boolean>;
+    flagTraderForUpdate(expiredOfferUserId: string): void;
+    removeOfferById(offerId: string): void;
+    removeOfferStack(offerID: string, amount: number): void;
+    removeAllOffersByTrader(traderId: string): void;
+    addTradersToUpdateList(): void;
+    addPlayerOffers(): void;
+    expireStaleOffers(): void;
+    /**
+     * Get an array of stale offers that are still shown to player
+     * @returns IRagfairOffer array
+     */
+    protected getStaleOffers(): IRagfairOffer[];
+    protected isStale(offer: IRagfairOffer, time: number): boolean;
+    protected processStaleOffer(staleOffer: IRagfairOffer): void;
+    protected returnPlayerOffer(offer: IRagfairOffer): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/RagfairPriceService.d.ts b/TypeScript/14AfterDBLoadHook/types/services/RagfairPriceService.d.ts
new file mode 100644
index 0000000..5256b99
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/services/RagfairPriceService.d.ts
@@ -0,0 +1,32 @@
+import { HandbookHelper } from "../helpers/HandbookHelper";
+import { ItemHelper } from "../helpers/ItemHelper";
+import { PresetHelper } from "../helpers/PresetHelper";
+import { Item } from "../models/eft/common/tables/IItem";
+import { IBarterScheme } from "../models/eft/common/tables/ITrader";
+import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
+import { IRagfairServerPrices } from "../models/spt/ragfair/IRagfairServerPrices";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ConfigServer } from "../servers/ConfigServer";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { RandomUtil } from "../utils/RandomUtil";
+export declare class RagfairPriceService {
+    protected handbookHelper: HandbookHelper;
+    protected databaseServer: DatabaseServer;
+    protected logger: ILogger;
+    protected itemHelper: ItemHelper;
+    protected presetHelper: PresetHelper;
+    protected randomUtil: RandomUtil;
+    protected configServer: ConfigServer;
+    protected ragfairConfig: IRagfairConfig;
+    protected prices: IRagfairServerPrices;
+    constructor(handbookHelper: HandbookHelper, databaseServer: DatabaseServer, logger: ILogger, itemHelper: ItemHelper, presetHelper: PresetHelper, randomUtil: RandomUtil, configServer: ConfigServer);
+    generateStaticPrices(): void;
+    generateDynamicPrices(): void;
+    hasDynamicPrices(): boolean;
+    getDynamicPrice(itemTpl: string): number;
+    getAllFleaPrices(): Record<string, number>;
+    getFleaPriceForItem(tplId: string): number;
+    getBarterPrice(barterScheme: IBarterScheme[]): number;
+    getDynamicOfferPrice(items: Item[], desiredCurrency: string): number;
+    getWeaponPresetPrice(item: Item, items: Item[], existingPrice: number): number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/RagfairRequiredItemsService.d.ts b/TypeScript/14AfterDBLoadHook/types/services/RagfairRequiredItemsService.d.ts
new file mode 100644
index 0000000..b05fc65
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/services/RagfairRequiredItemsService.d.ts
@@ -0,0 +1,12 @@
+import { PaymentHelper } from "../helpers/PaymentHelper";
+import { RagfairOfferService } from "../services/RagfairOfferService";
+import { ILogger } from "../models/spt/utils/ILogger";
+export declare class RagfairRequiredItemsService {
+    protected logger: ILogger;
+    protected paymentHelper: PaymentHelper;
+    protected ragfairOfferService: RagfairOfferService;
+    protected requiredItemsCache: {};
+    constructor(logger: ILogger, paymentHelper: PaymentHelper, ragfairOfferService: RagfairOfferService);
+    getRequiredItems(searchId: string): any;
+    buildRequiredItemTable(): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/TraderAssortService.d.ts b/TypeScript/14AfterDBLoadHook/types/services/TraderAssortService.d.ts
new file mode 100644
index 0000000..5ba2d05
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/services/TraderAssortService.d.ts
@@ -0,0 +1,6 @@
+import { ITraderAssort } from "../models/eft/common/tables/ITrader";
+export declare class TraderAssortService {
+    protected pristineTraderAssorts: Record<string, ITraderAssort>;
+    getPristineTraderAssort(traderId: string): ITraderAssort;
+    setPristineTraderAssort(traderId: string, assort: ITraderAssort): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/mod/dynamicRouter/DynamicRouterMod.d.ts b/TypeScript/14AfterDBLoadHook/types/services/mod/dynamicRouter/DynamicRouterMod.d.ts
new file mode 100644
index 0000000..abfe237
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/services/mod/dynamicRouter/DynamicRouterMod.d.ts
@@ -0,0 +1,6 @@
+import { DynamicRouter, RouteAction } from "../../../di/Router";
+export declare class DynamicRouterMod extends DynamicRouter {
+    private topLevelRoute;
+    constructor(routes: RouteAction[], topLevelRoute: string);
+    getTopLevelRoute(): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/mod/dynamicRouter/DynamicRouterModService.d.ts b/TypeScript/14AfterDBLoadHook/types/services/mod/dynamicRouter/DynamicRouterModService.d.ts
new file mode 100644
index 0000000..6742fc6
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/services/mod/dynamicRouter/DynamicRouterModService.d.ts
@@ -0,0 +1,7 @@
+import { DependencyContainer } from "tsyringe";
+import { RouteAction } from "../../../di/Router";
+export declare class DynamicRouterModService {
+    private container;
+    constructor(container: DependencyContainer);
+    registerDynamicRouter(name: string, routes: RouteAction[], topLevelRoute: string): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/mod/image/ImageRouteService.d.ts b/TypeScript/14AfterDBLoadHook/types/services/mod/image/ImageRouteService.d.ts
new file mode 100644
index 0000000..29569b2
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/services/mod/image/ImageRouteService.d.ts
@@ -0,0 +1,6 @@
+export declare class ImageRouteService {
+    protected routes: Record<string, string>;
+    addRoute(urlKey: string, route: string): void;
+    getByKey(urlKey: string): string;
+    existsByKey(urlKey: string): boolean;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/mod/onLoad/OnLoadMod.d.ts b/TypeScript/14AfterDBLoadHook/types/services/mod/onLoad/OnLoadMod.d.ts
new file mode 100644
index 0000000..53fb062
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/services/mod/onLoad/OnLoadMod.d.ts
@@ -0,0 +1,8 @@
+import { OnLoad } from "../../../di/OnLoad";
+export declare class OnLoadMod extends OnLoad {
+    private onLoadOverride;
+    private getRouteOverride;
+    constructor(onLoadOverride: () => void, getRouteOverride: () => string);
+    onLoad(): void;
+    getRoute(): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/mod/onLoad/OnLoadModService.d.ts b/TypeScript/14AfterDBLoadHook/types/services/mod/onLoad/OnLoadModService.d.ts
new file mode 100644
index 0000000..f402103
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/services/mod/onLoad/OnLoadModService.d.ts
@@ -0,0 +1,6 @@
+import { DependencyContainer } from "tsyringe";
+export declare class OnLoadModService {
+    protected container: DependencyContainer;
+    constructor(container: DependencyContainer);
+    registerOnLoad(name: string, onLoad: () => void, getRoute: () => string): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/mod/onUpdate/OnUpdateMod.d.ts b/TypeScript/14AfterDBLoadHook/types/services/mod/onUpdate/OnUpdateMod.d.ts
new file mode 100644
index 0000000..ee89043
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/services/mod/onUpdate/OnUpdateMod.d.ts
@@ -0,0 +1,8 @@
+import { OnUpdate } from "../../../di/OnUpdate";
+export declare class OnUpdateMod extends OnUpdate {
+    private onUpdateOverride;
+    private getRouteOverride;
+    constructor(onUpdateOverride: (timeSinceLastRun: number) => boolean, getRouteOverride: () => string);
+    onUpdate(timeSinceLastRun: number): boolean;
+    getRoute(): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/mod/onUpdate/OnUpdateModService.d.ts b/TypeScript/14AfterDBLoadHook/types/services/mod/onUpdate/OnUpdateModService.d.ts
new file mode 100644
index 0000000..05d735b
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/services/mod/onUpdate/OnUpdateModService.d.ts
@@ -0,0 +1,6 @@
+import { DependencyContainer } from "tsyringe";
+export declare class OnUpdateModService {
+    protected container: DependencyContainer;
+    constructor(container: DependencyContainer);
+    registerOnUpdate(name: string, onUpdate: (timeSinceLastRun: number) => boolean, getRoute: () => string): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/mod/staticRouter/StaticRouterMod.d.ts b/TypeScript/14AfterDBLoadHook/types/services/mod/staticRouter/StaticRouterMod.d.ts
new file mode 100644
index 0000000..1e62747
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/services/mod/staticRouter/StaticRouterMod.d.ts
@@ -0,0 +1,6 @@
+import { RouteAction, StaticRouter } from "../../../di/Router";
+export declare class StaticRouterMod extends StaticRouter {
+    private topLevelRoute;
+    constructor(routes: RouteAction[], topLevelRoute: string);
+    getTopLevelRoute(): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/mod/staticRouter/StaticRouterModService.d.ts b/TypeScript/14AfterDBLoadHook/types/services/mod/staticRouter/StaticRouterModService.d.ts
new file mode 100644
index 0000000..f28fd45
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/services/mod/staticRouter/StaticRouterModService.d.ts
@@ -0,0 +1,7 @@
+import { DependencyContainer } from "tsyringe";
+import { RouteAction } from "../../../di/Router";
+export declare class StaticRouterModService {
+    protected container: DependencyContainer;
+    constructor(container: DependencyContainer);
+    registerStaticRouter(name: string, routes: RouteAction[], topLevelRoute: string): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/utils/App.d.ts b/TypeScript/14AfterDBLoadHook/types/utils/App.d.ts
new file mode 100644
index 0000000..34c141e
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/utils/App.d.ts
@@ -0,0 +1,14 @@
+import { TimeUtil } from "./TimeUtil";
+import { OnLoad } from "../di/OnLoad";
+import { OnUpdate } from "../di/OnUpdate";
+import { ILogger } from "../models/spt/utils/ILogger";
+export declare class App {
+    protected logger: ILogger;
+    protected timeUtil: TimeUtil;
+    protected onLoadComponents: OnLoad[];
+    protected onUpdateComponents: OnUpdate[];
+    protected onUpdateLastRun: {};
+    constructor(logger: ILogger, timeUtil: TimeUtil, onLoadComponents: OnLoad[], onUpdateComponents: OnUpdate[]);
+    load(): void;
+    protected update(onUpdateComponents: OnUpdate[]): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/utils/AyncQueue.d.ts b/TypeScript/14AfterDBLoadHook/types/utils/AyncQueue.d.ts
new file mode 100644
index 0000000..da6ab18
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/utils/AyncQueue.d.ts
@@ -0,0 +1,7 @@
+import { IAsyncQueue } from "../models/spt/utils/IAsyncQueue";
+import { ICommand } from "../models/spt/utils/ICommand";
+export declare class AsyncQueue implements IAsyncQueue {
+    protected commandsQueue: ICommand[];
+    constructor();
+    waitFor(command: ICommand): Promise<any>;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/utils/DatabaseImporter.d.ts b/TypeScript/14AfterDBLoadHook/types/utils/DatabaseImporter.d.ts
new file mode 100644
index 0000000..b3156ea
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/utils/DatabaseImporter.d.ts
@@ -0,0 +1,52 @@
+import { OnLoad } from "../di/OnLoad";
+import { IDatabaseTables } from "../models/spt/server/IDatabaseTables";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ImageRouter } from "../routers/ImageRouter";
+import { DatabaseServer } from "../servers/DatabaseServer";
+import { CustomHandbookItemService } from "../services/CustomHandbookItemService";
+import { CustomItemService } from "../services/CustomItemService";
+import { CustomPresetService } from "../services/CustomPresetService";
+import { CustomTraderAssortService } from "../services/CustomTraderAssortService";
+import { JsonUtil } from "./JsonUtil";
+import { VFS } from "./VFS";
+export declare class DatabaseImporter extends OnLoad {
+    protected logger: ILogger;
+    protected vfs: VFS;
+    protected jsonUtil: JsonUtil;
+    protected databaseServer: DatabaseServer;
+    protected customItemService: CustomItemService;
+    protected customTraderAssortService: CustomTraderAssortService;
+    protected customHandbookItemService: CustomHandbookItemService;
+    protected customPresetService: CustomPresetService;
+    protected imageRouter: ImageRouter;
+    constructor(logger: ILogger, vfs: VFS, jsonUtil: JsonUtil, databaseServer: DatabaseServer, customItemService: CustomItemService, customTraderAssortService: CustomTraderAssortService, customHandbookItemService: CustomHandbookItemService, customPresetService: CustomPresetService, imageRouter: ImageRouter);
+    onLoad(): void;
+    /**
+     * Read all json files in database folder and map into a json object
+     * @param filepath path to database folder
+     */
+    protected hydrateDatabase(filepath: string): void;
+    /**
+     * Get all items added through CustomItemService and add to database.templates.items
+     * @param dataToImport db data to amend
+     */
+    protected addCustomItemsToDb(dataToImport: IDatabaseTables): void;
+    /**
+     * Get all assorts added through CustomTraderAssortService and add to database.traders[x].assort
+     * @param dataToImport db data to amend
+     */
+    protected addCustomTraderAssortsToDb(dataToImport: IDatabaseTables): void;
+    /**
+     * Get all custom handbook items added through CustomHandbookItemService and add to database.templates.handbook.items
+     * @param dataToImport db data to amend
+     */
+    protected addCustomHandbookItemsToDb(dataToImport: IDatabaseTables): void;
+    /**
+     * Get all custom preset items added through CustomPresetService and add to database.globals.ItemPresets
+     * @param dataToImport
+     */
+    protected addCustomPresetsToDb(dataToImport: IDatabaseTables): void;
+    getRoute(): string;
+    loadRecursive(filepath: string): IDatabaseTables;
+    loadImages(filepath: string): void;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/utils/HashUtil.d.ts b/TypeScript/14AfterDBLoadHook/types/utils/HashUtil.d.ts
new file mode 100644
index 0000000..bacbf2a
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/utils/HashUtil.d.ts
@@ -0,0 +1,11 @@
+/// <reference types="node" />
+import crypto from "crypto";
+import { TimeUtil } from "./TimeUtil";
+export declare class HashUtil {
+    protected timeUtil: TimeUtil;
+    constructor(timeUtil: TimeUtil);
+    generate(): string;
+    generateMd5ForData(data: string): string;
+    generateSha1ForData(data: string): string;
+    generateHashForData(algorithm: string, data: crypto.BinaryLike): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/utils/HttpResponseUtil.d.ts b/TypeScript/14AfterDBLoadHook/types/utils/HttpResponseUtil.d.ts
new file mode 100644
index 0000000..29502be
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/utils/HttpResponseUtil.d.ts
@@ -0,0 +1,16 @@
+import { JsonUtil } from "./JsonUtil";
+import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
+import { INullResponseData } from "../models/eft/httpResponse/INullResponseData";
+import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
+export declare class HttpResponseUtil {
+    protected jsonUtil: JsonUtil;
+    constructor(jsonUtil: JsonUtil);
+    protected clearString(s: string): any;
+    noBody(data: any): any;
+    getBody<T>(data: T, err?: number, errmsg?: any): IGetBodyResponseData<T>;
+    getUnclearedBody(data: any, err?: number, errmsg?: any): string;
+    emptyResponse(): IGetBodyResponseData<string>;
+    nullResponse(): INullResponseData;
+    emptyArrayResponse(): IGetBodyResponseData<any[]>;
+    appendErrorToOutput(output: IItemEventRouterResponse, message?: string, title?: string): IItemEventRouterResponse;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/utils/JsonUtil.d.ts b/TypeScript/14AfterDBLoadHook/types/utils/JsonUtil.d.ts
new file mode 100644
index 0000000..71e95f6
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/utils/JsonUtil.d.ts
@@ -0,0 +1,25 @@
+import { ILogger } from "../models/spt/utils/ILogger";
+import { HashUtil } from "./HashUtil";
+import { VFS } from "./VFS";
+export declare class JsonUtil {
+    protected vfs: VFS;
+    protected hashUtil: HashUtil;
+    protected logger: ILogger;
+    protected fileHashes: any;
+    constructor(vfs: VFS, hashUtil: HashUtil, logger: ILogger);
+    /**
+     * From object to string
+     * @param data object to turn into JSON
+     * @param prettify Should output be prettified?
+     * @returns string
+     */
+    serialize(data: any, prettify?: boolean): string;
+    /**
+     * From string to object
+     * @param jsonString json string to turn into object
+     * @returns object
+     */
+    deserialize(jsonString: string): any;
+    deserializeWithCacheCheck(jsonString: string, filePath: string): string;
+    clone<T>(data: T): T;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/utils/Logger.d.ts b/TypeScript/14AfterDBLoadHook/types/utils/Logger.d.ts
new file mode 100644
index 0000000..3d9013f
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/utils/Logger.d.ts
@@ -0,0 +1,58 @@
+/// <reference types="node" />
+import fs from "fs";
+import winston from "winston";
+import { Daum } from "../models/eft/itemEvent/IItemEventRouterRequest";
+import { LogBackgroundColor } from "../models/spt/logging/LogBackgroundColor";
+import { LogTextColor } from "../models/spt/logging/LogTextColor";
+import { SptLogger } from "../models/spt/logging/SptLogger";
+import { IAsyncQueue } from "../models/spt/utils/IAsyncQueue";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { IUUidGenerator } from "../models/spt/utils/IUuidGenerator";
+export declare class WinstonLogger implements ILogger {
+    protected asyncQueue: IAsyncQueue;
+    protected uuidGenerator: IUUidGenerator;
+    protected showDebugInConsole: boolean;
+    protected folderPath: string;
+    protected file: string;
+    protected filePath: string;
+    protected logLevels: {
+        levels: {
+            error: number;
+            warn: number;
+            succ: number;
+            info: number;
+            custom: number;
+            debug: number;
+        };
+        colors: {
+            error: string;
+            warn: string;
+            succ: string;
+            info: string;
+            custom: string;
+            debug: string;
+        };
+        bgColors: {
+            default: string;
+            blackBG: string;
+            redBG: string;
+            greenBG: string;
+            yellowBG: string;
+            blueBG: string;
+            magentaBG: string;
+            cyanBG: string;
+            whiteBG: string;
+        };
+    };
+    protected logger: winston.Logger & SptLogger;
+    protected writeFilePromisify: (path: fs.PathLike, data: string, options?: any) => Promise<void>;
+    constructor(asyncQueue: IAsyncQueue, uuidGenerator: IUUidGenerator);
+    writeToLogFile(data: string | Daum): Promise<void>;
+    log(data: string | Error | Record<string, unknown>, color: string, backgroundColor?: string): Promise<void>;
+    error(data: string | Record<string, unknown>): Promise<void>;
+    warning(data: string | Record<string, unknown>): Promise<void>;
+    success(data: string | Record<string, unknown>): Promise<void>;
+    info(data: string | Record<string, unknown>): Promise<void>;
+    logWithColor(data: string | Record<string, unknown>, textColor: LogTextColor, backgroundColor?: LogBackgroundColor): Promise<void>;
+    debug(data: string | Record<string, unknown>, onlyShowInConsole?: boolean): Promise<void>;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/utils/MathUtil.d.ts b/TypeScript/14AfterDBLoadHook/types/utils/MathUtil.d.ts
new file mode 100644
index 0000000..ea5fd69
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/utils/MathUtil.d.ts
@@ -0,0 +1,53 @@
+export declare class MathUtil {
+    /**
+     * Helper to create the sum of all array elements
+    * @param   {array}     values          The array with numbers of which to calculate the sum
+    * @return  {number}                    sum(values)
+    */
+    arraySum(values: number[]): number;
+    /**
+     * Helper to create the cumulative sum of all array elements
+     * arrayCumsum([1, 2, 3, 4]) = [1, 3, 6, 10]
+     * @param   {array}     values          The array with numbers of which to calculate the cumulative sum
+     * @return  {array}                     cumsum(values)
+     */
+    arrayCumsum(values: number[]): number[];
+    /**
+     * Helper to create the product of each element times factor
+     * @param   {array}     values          The array of numbers which shall be multiplied by the factor
+     * @return  {array}                     array times factor
+     */
+    arrayProd(values: number[], factor: number): number[];
+    /**
+     * Helper to add a constant to all array elements
+     * @param   {array}     values          The array of numbers to which the summand should be added
+     * @return  {array}                     array plus summand
+     */
+    arrayAdd(values: number[], summand: number): number[];
+    /**
+     * Map a value from an input range to an output range linearly
+     *
+     * Example:
+     *  a_min = 0; a_max=1;
+     *  b_min = 1; b_max=3;
+     *  MathUtil.mapToRange(0.5, a_min, a_max, b_min, b_max) // returns 2
+     *
+     * @param   {number}    x               The value from input range to be mapped to output range
+     * @param   {number}    minIn           min of input range
+     * @param   {number}    maxIn           max of input range
+     * @param   {number}    minOut          min of output range
+     * @param   {number}    maxOut          max of outout range
+     * @return  {number}                    the result of the mapping
+     */
+    mapToRange(x: number, minIn: number, maxIn: number, minOut: number, maxOut: number): number;
+    /**
+    * Linear interpolation
+    * e.g. used to do a continuous integration for quest rewards which are defined for specific support centers of pmcLevel
+    *
+    * @param   {string}    xp              the point of x at which to interpolate
+    * @param   {array}     x               support points in x (of same length as y)
+    * @param   {array}     y               support points in y (of same length as x)
+    * @return  {number}                    y(xp)
+    */
+    interp1(xp: number, x: number[], y: number[]): number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/utils/ObjectId.d.ts b/TypeScript/14AfterDBLoadHook/types/utils/ObjectId.d.ts
new file mode 100644
index 0000000..03aae56
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/utils/ObjectId.d.ts
@@ -0,0 +1,14 @@
+/// <reference types="node" />
+import { TimeUtil } from "./TimeUtil";
+export declare class ObjectId {
+    protected timeUtil: TimeUtil;
+    constructor(timeUtil: TimeUtil);
+    protected randomBytes: Buffer;
+    protected constglobalCounter: number;
+    protected consttime: number;
+    protected globalCounter: number;
+    protected time: number;
+    incGlobalCounter(): number;
+    toHexString(byteArray: string | any[] | Buffer): string;
+    generate(): string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/utils/RandomUtil.d.ts b/TypeScript/14AfterDBLoadHook/types/utils/RandomUtil.d.ts
new file mode 100644
index 0000000..c24dd60
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/utils/RandomUtil.d.ts
@@ -0,0 +1,153 @@
+import { ILogger } from "../models/spt/utils/ILogger";
+import { JsonUtil } from "./JsonUtil";
+import { MathUtil } from "./MathUtil";
+/**
+     * Array of ProbabilityObjectArray which allow to randomly draw of the contained objects
+     * based on the relative probability of each of its elements.
+     * The probabilities of the contained element is not required to be normalized.
+     *
+     * Example:
+     *   po = new ProbabilityObjectArray(
+     *          new ProbabilityObject("a", 5),
+     *          new ProbabilityObject("b", 1),
+     *          new ProbabilityObject("c", 1)
+     *   );
+     *   res = po.draw(10000);
+     *   // count the elements which should be distributed according to the relative probabilities
+     *   res.filter(x => x==="b").reduce((sum, x) => sum + 1 , 0)
+     */
+export declare class ProbabilityObjectArray<K, V = undefined> extends Array<ProbabilityObject<K, V>> {
+    private mathUtil;
+    constructor(mathUtil: MathUtil, ...items: ProbabilityObject<K, V>[]);
+    filter(callbackfn: (value: ProbabilityObject<K, V>, index: number, array: ProbabilityObject<K, V>[]) => any): ProbabilityObjectArray<K, V>;
+    /**
+     * Calculates the normalized cumulative probability of the ProbabilityObjectArray's elements normalized to 1
+     * @param       {array}                         probValues              The relative probability values of which to calculate the normalized cumulative sum
+     * @returns     {array}                                                 Cumulative Sum normalized to 1
+     */
+    cumulativeProbability(probValues: number[]): number[];
+    /**
+     * Clone this ProbabilitObjectArray
+     * @returns     {ProbabilityObjectArray}                                Deep Copy of this ProbabilityObjectArray
+     */
+    clone(): ProbabilityObjectArray<K, V>;
+    /**
+     * Drop an element from the ProbabilityObjectArray
+     *
+     * @param       {string}                        key                     The key of the element to drop
+     * @returns     {ProbabilityObjectArray}                                ProbabilityObjectArray without the dropped element
+     */
+    drop(key: K): ProbabilityObjectArray<K, V>;
+    /**
+     * Return the data field of a element of the ProbabilityObjectArray
+     * @param       {string}                        key                     The key of the element whose data shall be retrieved
+     * @returns     {object}                                                The data object
+     */
+    data(key: K): V;
+    /**
+     * Get the relative probability of an element by its key
+     *
+     * Example:
+     *  po = new ProbabilityObjectArray(new ProbabilityObject("a", 5), new ProbabilityObject("b", 1))
+     *  po.maxProbability() // returns 5
+     *
+     * @param       {string}                        key                     The key of the element whose relative probability shall be retrieved
+     * @return      {number}                                                The relative probability
+     */
+    probability(key: K): number;
+    /**
+     * Get the maximum relative probability out of a ProbabilityObjectArray
+     *
+     * Example:
+     *  po = new ProbabilityObjectArray(new ProbabilityObject("a", 5), new ProbabilityObject("b", 1))
+     *  po.maxProbability() // returns 5
+     *
+     * @return      {number}                                                the maximum value of all relative probabilities in this ProbabilityObjectArray
+     */
+    maxProbability(): number;
+    /**
+     * Get the minimum relative probability out of a ProbabilityObjectArray
+     *
+     * Example:
+     *  po = new ProbabilityObjectArray(new ProbabilityObject("a", 5), new ProbabilityObject("b", 1))
+     *  po.minProbability() // returns 1
+     *
+     * @return      {number}                                                the minimum value of all relative probabilities in this ProbabilityObjectArray
+     */
+    minProbability(): number;
+    /**
+     * Draw random element of the ProbabilityObject N times to return an array of N keys.
+     * Drawing can be with or without replacement
+     *
+     * @param       {integer}                       count                   The number of times we want to draw
+     * @param       {boolean}                       replacement             Draw with or without replacement from the input dict
+     * @param       {array}                         locklist                list keys which shall be replaced even if drawing without replacement
+     * @return      {array}                                                 Array consisting of N random keys for this ProbabilityObjectArray
+     */
+    draw(count?: number, replacement?: boolean, locklist?: Array<K>): K[];
+}
+/**
+     * A ProbabilityObject which is use as an element to the ProbabilityObjectArray array
+     * It contains a key, the relative probability as well as optional data.
+     */
+export declare class ProbabilityObject<K, V = undefined> {
+    key: K;
+    relativeProbability: number;
+    data: V;
+    /**
+      * Constructor for the ProbabilityObject
+      * @param       {string}                        key                         The key of the element
+      * @param       {number}                        relativeProbability         The relative probability of this element
+      * @param       {any}                           data                        Optional data attached to the element
+      */
+    constructor(key: K, relativeProbability: number, data?: V);
+}
+export declare class RandomUtil {
+    protected jsonUtil: JsonUtil;
+    protected logger: ILogger;
+    constructor(jsonUtil: JsonUtil, logger: ILogger);
+    getInt(min: number, max: number): number;
+    getIntEx(max: number): number;
+    getFloat(min: number, max: number): number;
+    getBool(): boolean;
+    getStringArrayValue(arr: string[]): string;
+    getArrayValue<T>(arr: T[]): T;
+    getKey(node: any): string;
+    getKeyValue(node: {
+        [x: string]: any;
+    }): any;
+    /**
+     * Draw from normal distribution
+     * @param   {number}    mu      Mean of the normal distribution
+     * @param   {number}    sigma   Standard deviation of the normal distribution
+     * @returns {number}            The value drawn
+     */
+    randn(mu: number, sigma: number): number;
+    /**
+     * Draw Random integer low inclusive, high exclusive
+     * if high is not set we draw from 0 to low (exclusive)
+     * @param   {integer}   low     Lower bound inclusive, when high is not set, this is high
+     * @param   {integer}   high    Higher bound exclusive
+     * @returns {integer}           The random integer in [low, high)
+     */
+    randInt(low: number, high?: number): number;
+    /**
+     * Draw a random element of the provided list N times to return an array of N random elements
+     * Drawing can be with or without replacement
+     * @param   {array}     list            The array we want to draw randomly from
+     * @param   {integer}   count               The number of times we want to draw
+     * @param   {boolean}   replacement     Draw with ot without replacement from the input array
+     * @return  {array}                     Array consisting of N random elements
+     */
+    drawRandomFromList<T>(list: Array<T>, count?: number, replacement?: boolean): Array<T>;
+    /**
+     * Draw a random (top level) element of the provided dictionary N times to return an array of N random dictionary keys
+     * Drawing can be with or without replacement
+     * @param   {any}       dict            The dictionary we want to draw randomly from
+     * @param   {integer}   count           The number of times we want to draw
+     * @param   {boolean}   replacement     Draw with ot without replacement from the input dict
+     * @return  {array}                     Array consisting of N random keys of the dictionary
+     */
+    drawRandomFromDict(dict: any, count?: number, replacement?: boolean): any[];
+    getBiasedRandomNumber(min: number, max: number, shift: number, n: number): number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/utils/TimeUtil.d.ts b/TypeScript/14AfterDBLoadHook/types/utils/TimeUtil.d.ts
new file mode 100644
index 0000000..9733be9
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/utils/TimeUtil.d.ts
@@ -0,0 +1,8 @@
+export declare class TimeUtil {
+    static readonly oneHourAsSeconds = 3600;
+    formatTime(date: Date): string;
+    formatDate(date: Date): string;
+    getDate(): string;
+    getTime(): string;
+    getTimestamp(): number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/utils/UUidGenerator.d.ts b/TypeScript/14AfterDBLoadHook/types/utils/UUidGenerator.d.ts
new file mode 100644
index 0000000..000b719
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/utils/UUidGenerator.d.ts
@@ -0,0 +1,4 @@
+import { IUUidGenerator } from "../models/spt/utils/IUuidGenerator";
+export declare class UUidGenerator implements IUUidGenerator {
+    generate: () => string;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/utils/VFS.d.ts b/TypeScript/14AfterDBLoadHook/types/utils/VFS.d.ts
new file mode 100644
index 0000000..e5eaf02
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/utils/VFS.d.ts
@@ -0,0 +1,55 @@
+/// <reference types="node" />
+/// <reference types="node" />
+import "reflect-metadata";
+import fs from "fs";
+import { IAsyncQueue } from "../models/spt/utils/IAsyncQueue";
+import { IUUidGenerator } from "../models/spt/utils/IUuidGenerator";
+export declare class VFS {
+    protected asyncQueue: IAsyncQueue;
+    protected uuidGenerator: IUUidGenerator;
+    accessFilePromisify: (path: fs.PathLike, mode?: number) => Promise<void>;
+    copyFilePromisify: (src: fs.PathLike, dst: fs.PathLike, flags?: number) => Promise<void>;
+    mkdirPromisify: (path: fs.PathLike, options: fs.MakeDirectoryOptions & {
+        recursive: true;
+    }) => Promise<string>;
+    readFilePromisify: (path: fs.PathLike) => Promise<Buffer>;
+    writeFilePromisify: (path: fs.PathLike, data: string, options?: any) => Promise<void>;
+    readdirPromisify: (path: fs.PathLike, options?: BufferEncoding | {
+        encoding: BufferEncoding;
+        withFileTypes?: false;
+    }) => Promise<string[]>;
+    statPromisify: (path: fs.PathLike, options?: fs.StatOptions & {
+        bigint?: false;
+    }) => Promise<fs.Stats>;
+    unlinkPromisify: (path: fs.PathLike) => Promise<void>;
+    rmdirPromisify: (path: fs.PathLike) => Promise<void>;
+    constructor(asyncQueue: IAsyncQueue, uuidGenerator: IUUidGenerator);
+    exists(filepath: fs.PathLike): boolean;
+    existsAsync(filepath: fs.PathLike): Promise<boolean>;
+    copyFile(filepath: fs.PathLike, target: fs.PathLike): void;
+    copyAsync(filepath: fs.PathLike, target: fs.PathLike): Promise<void>;
+    createDir(filepath: string): void;
+    createDirAsync(filepath: string): Promise<void>;
+    copyDir(filepath: string, target: string, fileExtensions?: string | string[]): void;
+    copyDirAsync(filepath: string, target: string, fileExtensions: string | string[]): Promise<void>;
+    readFile(filepath: string): any;
+    readFileAsync(filepath: string): Promise<any>;
+    writeFile(filepath: any, data?: string, append?: boolean, atomic?: boolean): void;
+    writeFileAsync(filepath: any, data?: string, append?: boolean, atomic?: boolean): Promise<void>;
+    getFiles(filepath: string): string[];
+    getFilesAsync(filepath: string): Promise<string[]>;
+    getDirs(filepath: string): string[];
+    getDirsAsync(filepath: string): Promise<string[]>;
+    removeFile(filepath: string): void;
+    removeFileAsync(filepath: string): Promise<void>;
+    removeDir(filepath: string): void;
+    removeDirAsync(filepath: string): Promise<void>;
+    private lockFileSync;
+    private checkFileSync;
+    private unlockFileSync;
+    getFileExtension(filepath: string): string;
+    stripExtension(filepath: string): string;
+    minifyAllJsonInDirRecursive(filepath: string): Promise<void>;
+    minifyAllJsonInDirRecursiveAsync(filepath: string): Promise<void>;
+    getFilesOfType(directory: string, fileType: string, files?: string[]): string[];
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/utils/Watermark.d.ts b/TypeScript/14AfterDBLoadHook/types/utils/Watermark.d.ts
new file mode 100644
index 0000000..111bdd0
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/utils/Watermark.d.ts
@@ -0,0 +1,41 @@
+import { ICoreConfig } from "../models/spt/config/ICoreConfig";
+import { ILogger } from "../models/spt/utils/ILogger";
+import { ConfigServer } from "../servers/ConfigServer";
+export declare class WatermarkLocale {
+    protected locales: {
+        "en-US": {
+            description: string[];
+            warning: string[];
+            modding: string[];
+        };
+        "zh-CN": {
+            description: string[];
+            warning: string[];
+            modding: string[];
+        };
+    };
+    getLocale(): string;
+    getDescription(): string[];
+    getWarning(): string[];
+    getModding(): string[];
+}
+export declare class Watermark {
+    protected logger: ILogger;
+    protected configServer: ConfigServer;
+    protected watermarkLocale?: WatermarkLocale;
+    protected akiConfig: ICoreConfig;
+    constructor(logger: ILogger, configServer: ConfigServer, watermarkLocale?: WatermarkLocale);
+    protected text: string[];
+    protected versionLabel: string;
+    initialize(): void;
+    getVersionTag(): string;
+    getVersionLabel(): string;
+    /** Set window title */
+    setTitle(): void;
+    /** Reset console cursor to top */
+    resetCursor(): void;
+    /** Draw the watermark */
+    draw(): void;
+    /** Caculate text length */
+    protected textLength(s: string): number;
+}
diff --git a/TypeScript/14AfterDBLoadHook/types/utils/decorators/Singleton.d.ts b/TypeScript/14AfterDBLoadHook/types/utils/decorators/Singleton.d.ts
new file mode 100644
index 0000000..7e89026
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/utils/decorators/Singleton.d.ts
@@ -0,0 +1,4 @@
+import type constructor from "./constructor";
+import { InjectionToken } from "tsyringe";
+declare function singleton<T>(token?: InjectionToken<T>): (target: constructor<T>) => void;
+export default singleton;
diff --git a/TypeScript/14AfterDBLoadHook/types/utils/decorators/constructor.d.ts b/TypeScript/14AfterDBLoadHook/types/utils/decorators/constructor.d.ts
new file mode 100644
index 0000000..416f354
--- /dev/null
+++ b/TypeScript/14AfterDBLoadHook/types/utils/decorators/constructor.d.ts
@@ -0,0 +1,4 @@
+declare type constructor<T> = {
+    new (...args: any[]): T;
+};
+export default constructor;