diff --git a/speakeasy/speakeasy-test.ts b/speakeasy/speakeasy-test.ts
new file mode 100644
index 0000000000..ae483bb8ee
--- /dev/null
+++ b/speakeasy/speakeasy-test.ts
@@ -0,0 +1,26 @@
+///
+
+import speakeasy = require('speakeasy');
+
+speakeasy.generate_key({length: 20, google_auth_qr: true});
+
+// normal use.
+speakeasy.hotp({key: 'secret', counter: 582});
+
+// use a custom length.
+speakeasy.hotp({key: 'secret', counter: 582, length: 8});
+
+// use a custom encoding.
+speakeasy.hotp({key: 'AJFIEJGEHIFIU7148SF', counter: 147, encoding: 'base32'});
+
+// normal use.
+speakeasy.totp({key: 'secret'});
+
+// use a custom time step.
+speakeasy.totp({key: 'secret', step: 60});
+
+// use a custom time.
+speakeasy.totp({key: 'secret', time: 159183717});
+
+// use a initial time.
+speakeasy.totp({key: 'secret', initial_time: 4182881485});
diff --git a/speakeasy/speakeasy.d.ts b/speakeasy/speakeasy.d.ts
new file mode 100644
index 0000000000..4017c4f7eb
--- /dev/null
+++ b/speakeasy/speakeasy.d.ts
@@ -0,0 +1,51 @@
+// Type definitions for speakeasy v1.0.4
+// Project: https://github.com/markbao/speakeasy
+// Definitions by: Lucas Woo
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+declare module "speakeasy" {
+
+ interface IKey {
+ ascii: string;
+ base32: string;
+ hex: string;
+ qr_code_ascii: string;
+ qr_code_hex: string;
+ qr_code_base32: string;
+ google_auth_qr: string;
+ }
+
+ interface GenerateOptions {
+ length?: number;
+ symbols?: boolean;
+ qr_codes?: boolean;
+ google_auth_qr?: boolean;
+ name?: string;
+ }
+
+ interface TotpOptions {
+ key: string;
+ step?: number;
+ time?: number;
+ initial_time?: number;
+ length?: number;
+ encoding?: string;
+ }
+
+ interface HotpOptions {
+ key: string;
+ counter: number;
+ length?: number;
+ encoding?: string;
+ }
+
+ export function generate_key(options: GenerateOptions): IKey;
+
+ export function hotp(options: HotpOptions): string;
+
+ export function counter(options: HotpOptions): string;
+
+ export function totp(options: TotpOptions): string;
+
+ export function time(options: TotpOptions): string;
+}