diff --git a/.gitignore b/.gitignore
index 1808fde75b77c3d4640300bb8e9c422525b948f1..155f50e2725e1c6623f957b22e8828a19be34ccd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -36,14 +36,15 @@ coverage/
 # typecode
 typedoc/
 
+# files generated by tsc
 /index.js*
 /index.d.ts
 /server.js*
 /server.d.ts
-app/**/*.js*
+*/**/*.js*
 app/**/*.d.ts
+neon/lib/*.d.ts
 test/**/*.d.ts
-test/**/*.js*
 
 # files generated by neon tests
 test2.bin.gz
diff --git a/neon/lib/crypto.js b/neon/lib/crypto.js
deleted file mode 100644
index 18537334af2af98897fb0606c86521de3c20891f..0000000000000000000000000000000000000000
--- a/neon/lib/crypto.js
+++ /dev/null
@@ -1,20 +0,0 @@
-const addon = require('../native/index.node');
-
-const { Ed25519Signator, generateRandomSeed, seedToSecretKey, sha256, verify } = addon;
-
-class KeyPairBuilder {
-
-    static fromSeed(seed) {
-        return new Ed25519Signator(seed);
-    }
-
-    static fromSecretKey(secretKey) {
-        return new Ed25519Signator(secretKey);
-    }
-
-    static random() {
-        return addon.generateRandomSeed();
-    }
-}
-
-module.exports = { Ed25519Signator, KeyPairBuilder, generateRandomSeed, seedToSecretKey, sha256, verify };
diff --git a/neon/lib/crypto.ts b/neon/lib/crypto.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5643b375f621a284dbaa5e12a7f4bc45c6451b3b
--- /dev/null
+++ b/neon/lib/crypto.ts
@@ -0,0 +1,17 @@
+
+import { Ed25519Signator, generateRandomSeed } from "../native";
+
+export class KeyPairBuilder {
+
+    static fromSeed(seed: Buffer): Ed25519Signator {
+        return new Ed25519Signator(seed);
+    }
+
+    static fromSecretKey(secretKey: string): Ed25519Signator {
+        return new Ed25519Signator(secretKey);
+    }
+
+    static random(): Ed25519Signator {
+        return new Ed25519Signator(generateRandomSeed());
+    }
+}
diff --git a/neon/lib/index.js b/neon/lib/index.js
deleted file mode 100644
index 7ebb99a4cf67244f5fc17cfc96799a3baec2ed43..0000000000000000000000000000000000000000
--- a/neon/lib/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-const { Wot, WotBuilder } = require('./wot');
-const { Ed25519Signator, KeyPairBuilder, generateRandomSeed, seedToSecretKey, sha256, verify } = require('./crypto');
-
-module.exports = { Ed25519Signator, KeyPairBuilder, generateRandomSeed, seedToSecretKey, sha256, verify, Wot, WotBuilder };
diff --git a/neon/lib/index.ts b/neon/lib/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..48fdad95ce394d4af0b1875f0940595960e531aa
--- /dev/null
+++ b/neon/lib/index.ts
@@ -0,0 +1,3 @@
+export { Ed25519Signator, generateRandomSeed, seedToSecretKey, sha256, verify, Wot } from "../native";
+export { KeyPairBuilder } from "./crypto";
+export { WotBuilder } from "./wot";
diff --git a/neon/lib/wot.js b/neon/lib/wot.js
deleted file mode 100644
index f2ae9703d6f841a80fb1efebb56b680bd34638f6..0000000000000000000000000000000000000000
--- a/neon/lib/wot.js
+++ /dev/null
@@ -1,16 +0,0 @@
-const addon = require('../native/index.node');
-
-const { Wot } = addon;
-
-class WotBuilder {
-
-    static fromWot(wot) {
-        return new Wot(wot.toBytes());
-    }
-
-    static fromFile(filePath) {
-        return new Wot(filePath)
-    }
-}
-
-module.exports = { Wot, WotBuilder };
diff --git a/neon/lib/wot.ts b/neon/lib/wot.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e62942455cf52747878d629bf63450456d75b366
--- /dev/null
+++ b/neon/lib/wot.ts
@@ -0,0 +1,12 @@
+import { Wot } from "../native";
+
+export class WotBuilder {
+
+    static fromWot(wot: Wot): Wot {
+        return new Wot(wot.toBytes());
+    }
+
+    static fromFile(filePath: string): Wot {
+        return new Wot(filePath)
+    }
+}
diff --git a/neon/lib/crypto.d.ts b/neon/native/crypto.d.ts
similarity index 66%
rename from neon/lib/crypto.d.ts
rename to neon/native/crypto.d.ts
index d1a18ea9a056c46bd740376d3647861599e518ad..ba6c22595cbef4d9e69367203e3c7f0981f7d993 100644
--- a/neon/lib/crypto.d.ts
+++ b/neon/native/crypto.d.ts
@@ -1,16 +1,9 @@
 /* tslint:disable */
 
-export class KeyPairBuilder {
-
-    static fromSeed(seed: Buffer): Ed25519Signator;
-
-    static fromSecretKey(secretKey: string): Ed25519Signator;
-
-    static random(): Ed25519Signator;
-}
-
 export class Ed25519Signator {
 
+    constructor(seedOrSecretKey: Buffer | string);
+
     getPublicKey(): string;
 
     sign(message: Buffer | string): string;
diff --git a/neon/lib/index.d.ts b/neon/native/index.d.ts
similarity index 79%
rename from neon/lib/index.d.ts
rename to neon/native/index.d.ts
index 227ff4931a5d81a4f916fd6f5a1161db5e414b57..e31c8cbdf33858186239385d59905349669bc4d6 100644
--- a/neon/lib/index.d.ts
+++ b/neon/native/index.d.ts
@@ -3,7 +3,6 @@
 import * as _crypto from './crypto';
 import * as _wot from './wot';
 
-export import KeyPairBuilder = _crypto.KeyPairBuilder;
 export import Ed25519Signator = _crypto.Ed25519Signator;
 export import generateRandomSeed = _crypto.generateRandomSeed;
 export import seedToSecretKey = _crypto.seedToSecretKey;
@@ -11,4 +10,4 @@ export import sha256 = _crypto.sha256;
 export import verify = _crypto.verify;
 
 export import Wot = _wot.Wot;
-export import WotBuilder = _wot.WotBuilder;
+export import DetailedDistance = _wot.DetailedDistance;
diff --git a/neon/lib/wot.d.ts b/neon/native/wot.d.ts
similarity index 90%
rename from neon/lib/wot.d.ts
rename to neon/native/wot.d.ts
index 86ebf1264b24ea85c294cfd6224c0145157ef5ee..fe40b3646dc24828f2196286e1772fbc2c88b04a 100644
--- a/neon/lib/wot.d.ts
+++ b/neon/native/wot.d.ts
@@ -9,14 +9,8 @@ export class DetailedDistance {
     isOutdistanced: number;
 }
 
-export class WotBuilder {
-    static fromWot(wot: Wot): Wot;
-
-    static fromFile(filePath: string): Wot;
-}
-
 export class Wot {
-    constructor(maxCert: number);
+    constructor(maxCertOrFilePathOrBytes: number | string | Buffer);
 
     clear(): void;
 
@@ -66,5 +60,7 @@ export class Wot {
 
     writeInFile(file_path: string): boolean;
 
+    toBytes(): Buffer;
+
     dump(): string;
 }