diff --git a/cordova-plugin-ouralabs/cordova-plugin-ouralabs-tests.ts b/cordova-plugin-ouralabs/cordova-plugin-ouralabs-tests.ts
new file mode 100644
index 0000000000..5f26cb77e6
--- /dev/null
+++ b/cordova-plugin-ouralabs/cordova-plugin-ouralabs-tests.ts
@@ -0,0 +1,92 @@
+///
+
+var traceLevel: number = OuralabsPlugin.LogLevel.TRACE;
+var debugLevel: number = OuralabsPlugin.LogLevel.DEBUG;
+var infoLevel: number = OuralabsPlugin.LogLevel.INFO;
+var warnLevel: number = OuralabsPlugin.LogLevel.WARN;
+var errorLevel: number = OuralabsPlugin.LogLevel.ERROR;
+var fatalLevel: number = OuralabsPlugin.LogLevel.FATAL;
+
+OuralabsPlugin.init("a");
+OuralabsPlugin.init("a", () => {});
+OuralabsPlugin.init("a", () => {}, (error: string) => {});
+
+OuralabsPlugin.setAttributes("a");
+OuralabsPlugin.setAttributes("a", "b");
+OuralabsPlugin.setAttributes("a", "b", "c");
+OuralabsPlugin.setAttributes("a", null, "c");
+OuralabsPlugin.setAttributes("a", "b", "c");
+OuralabsPlugin.setAttributes("a", "b", "c", () => {});
+OuralabsPlugin.setAttributes("a", "b", "c", () => {}, (error: string) => {});
+
+OuralabsPlugin.logTrace("a", "b");
+OuralabsPlugin.logTrace("a", "b", { "whoa": "yep" });
+OuralabsPlugin.logTrace("a", "b", { "whoa": "yep" }, () => {});
+OuralabsPlugin.logTrace("a", "b", { "whoa": "yep" }, () => {}, (error: string) => {});
+OuralabsPlugin.logTrace("a", "b", null, () => {}, (error: string) => {});
+
+OuralabsPlugin.logDebug("a", "b");
+OuralabsPlugin.logDebug("a", "b", { "whoa": "yep" });
+OuralabsPlugin.logDebug("a", "b", { "whoa": "yep" }, () => {});
+OuralabsPlugin.logDebug("a", "b", { "whoa": "yep" }, () => {}, (error: string) => {});
+OuralabsPlugin.logDebug("a", "b", null, () => {}, (error: string) => {});
+
+OuralabsPlugin.logInfo("a", "b");
+OuralabsPlugin.logInfo("a", "b", { "whoa": "yep" });
+OuralabsPlugin.logInfo("a", "b", { "whoa": "yep" }, () => {});
+OuralabsPlugin.logInfo("a", "b", { "whoa": "yep" }, () => {}, (error: string) => {});
+OuralabsPlugin.logInfo("a", "b", null, () => {}, (error: string) => {});
+
+OuralabsPlugin.logWarn("a", "b");
+OuralabsPlugin.logWarn("a", "b", { "whoa": "yep" });
+OuralabsPlugin.logWarn("a", "b", { "whoa": "yep" }, () => {});
+OuralabsPlugin.logWarn("a", "b", { "whoa": "yep" }, () => {}, (error: string) => {});
+OuralabsPlugin.logWarn("a", "b", null, () => {}, (error: string) => {});
+
+OuralabsPlugin.logError("a", "b");
+OuralabsPlugin.logError("a", "b", { "whoa": "yep" });
+OuralabsPlugin.logError("a", "b", { "whoa": "yep" }, () => {});
+OuralabsPlugin.logError("a", "b", { "whoa": "yep" }, () => {}, (error: string) => {});
+OuralabsPlugin.logError("a", "b", null, () => {}, (error: string) => {});
+
+OuralabsPlugin.logFatal("a", "b");
+OuralabsPlugin.logFatal("a", "b", { "whoa": "yep" });
+OuralabsPlugin.logFatal("a", "b", { "whoa": "yep" }, () => {});
+OuralabsPlugin.logFatal("a", "b", { "whoa": "yep" }, () => {}, (error: string) => {});
+OuralabsPlugin.logFatal("a", "b", null, () => {}, (error: string) => {});
+
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.TRACE, "a", "b");
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.TRACE, "a", "b", { "whoa": "yep" });
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.TRACE, "a", "b", { "whoa": "yep" }, () => {});
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.TRACE, "a", "b", { "whoa": "yep" }, () => {}, (error: string) => {});
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.TRACE, "a", "b", null, () => {}, (error: string) => {});
+
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.DEBUG, "a", "b");
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.DEBUG, "a", "b", { "whoa": "yep" });
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.DEBUG, "a", "b", { "whoa": "yep" }, () => {});
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.DEBUG, "a", "b", { "whoa": "yep" }, () => {}, (error: string) => {});
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.DEBUG, "a", "b", null, () => {}, (error: string) => {});
+
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.INFO, "a", "b");
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.INFO, "a", "b", { "whoa": "yep" });
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.INFO, "a", "b", { "whoa": "yep" }, () => {});
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.INFO, "a", "b", { "whoa": "yep" }, () => {}, (error: string) => {});
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.INFO, "a", "b", null, () => {}, (error: string) => {});
+
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.WARN, "a", "b");
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.WARN, "a", "b", { "whoa": "yep" });
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.WARN, "a", "b", { "whoa": "yep" }, () => {});
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.WARN, "a", "b", { "whoa": "yep" }, () => {}, (error: string) => {});
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.WARN, "a", "b", null, () => {}, (error: string) => {});
+
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.ERROR, "a", "b");
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.ERROR, "a", "b", { "whoa": "yep" });
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.ERROR, "a", "b", { "whoa": "yep" }, () => {});
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.ERROR, "a", "b", { "whoa": "yep" }, () => {}, (error: string) => {});
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.ERROR, "a", "b", null, () => {}, (error: string) => {});
+
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.FATAL, "a", "b");
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.FATAL, "a", "b", { "whoa": "yep" });
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.FATAL, "a", "b", { "whoa": "yep" }, () => {});
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.FATAL, "a", "b", { "whoa": "yep" }, () => {}, (error: string) => {});
+OuralabsPlugin.log(OuralabsPlugin.LogLevel.FATAL, "a", "b", null, () => {}, (error: string) => {});
\ No newline at end of file
diff --git a/cordova-plugin-ouralabs/cordova-plugin-ouralabs.d.ts b/cordova-plugin-ouralabs/cordova-plugin-ouralabs.d.ts
new file mode 100644
index 0000000000..d079ded7bf
--- /dev/null
+++ b/cordova-plugin-ouralabs/cordova-plugin-ouralabs.d.ts
@@ -0,0 +1,39 @@
+// Type definitions for cordova-plugin-ouralabs 1.0.0
+// Project: https://github.com/Justin-Credible/cordova-plugin-ouralabs
+// Definitions by: Justin Unterreiner
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+declare module OuralabsPlugin {
+
+ interface OuralabsStatic {
+
+ LogLevel: {
+ TRACE: number,
+ DEBUG: number,
+ INFO: number,
+ WARN: number,
+ ERROR: number,
+ FATAL: number
+ }
+
+ init(channelId: string, successCallback?: () => void, failureCallback?: (error: string) => void): void;
+
+ setAttributes(attribute1?: string, attribute2?: string, attribute3?: string, successCallback?: () => void, errorCallback?: (error: string) => void): void;
+
+ logTrace(tag: string, message: string, metadata?: any, successCallback?: () => void, failureCallback?: (error: string) => void): void;
+
+ logDebug(tag: string, message: string, metadata?: any, successCallback?: () => void, failureCallback?: (error: string) => void): void;
+
+ logInfo(tag: string, message: string, metadata?: any, successCallback?: () => void, failureCallback?: (error: string) => void): void;
+
+ logWarn(tag: string, message: string, metadata?: any, successCallback?: () => void, failureCallback?: (error: string) => void): void;
+
+ logError(tag: string, message: string, metadata?: any, successCallback?: () => void, failureCallback?: (error: string) => void): void;
+
+ logFatal(tag: string, message: string, metadata?: any, successCallback?: () => void, failureCallback?: (error: string) => void): void;
+
+ log(logLevel: number, tag: string, message: string, metadata?: any, successCallback?: () => void, failureCallback?: (error: string) => void): void;
+ }
+}
+
+declare var OuralabsPlugin: OuralabsPlugin.OuralabsStatic
\ No newline at end of file