diff --git a/js-base64/js-base64-test.ts b/js-base64/js-base64-test.ts
new file mode 100644
index 0000000000..c10943df2e
--- /dev/null
+++ b/js-base64/js-base64-test.ts
@@ -0,0 +1,12 @@
+///
+
+import { Base64 } from 'js-base64'
+
+Base64.encode('dankogai'); // ZGFua29nYWk=
+Base64.encode('小飼弾'); // 5bCP6aO85by+
+Base64.encodeURI('小飼弾'); // 5bCP6aO85by-
+
+Base64.decode('ZGFua29nYWk='); // dankogai
+Base64.decode('5bCP6aO85by+'); // 小飼弾
+// note .decodeURI() is unnecessary since it accepts both flavors
+Base64.decode('5bCP6aO85by-'); // 小飼弾
diff --git a/js-base64/js-base64.d.ts b/js-base64/js-base64.d.ts
new file mode 100644
index 0000000000..30fd18620d
--- /dev/null
+++ b/js-base64/js-base64.d.ts
@@ -0,0 +1,52 @@
+// Type definitions for js-base64 v2.1.9
+// Project: https://github.com/dankogai/js-base64
+// Definitions by: Denis Carriere
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+/**
+## TODO
+
+add methods:
+- [x] encode
+- [x] encodeURI
+- [x] decode
+- [ ] atob
+- [ ] btoa
+- [ ] fromBase64
+- [ ] toBase64
+- [ ] utob
+- [ ] btou
+- [ ] noConflict
+ */
+
+interface Base64 {
+ /**
+ * .encode
+ * @param {String} string
+ * @return {String}
+ */
+ encode(base64: string): string;
+
+ /**
+ * .encodeURI
+ * @param {String} string
+ * @return {String}
+ */
+ encodeURI(base64: string): string
+
+ /**
+ * .decode
+ * @param {String} string
+ * @return {String}
+ */
+ decode(base64: string): string
+
+ /**
+ * Library version
+ */
+ VERSION:string
+}
+
+declare module 'js-base64' {
+ const Base64: Base64
+}
\ No newline at end of file