diff --git a/node-notifier/node-notifier-test.ts b/node-notifier/node-notifier-test.ts
new file mode 100644
index 0000000000..dfc4963ac7
--- /dev/null
+++ b/node-notifier/node-notifier-test.ts
@@ -0,0 +1,162 @@
+///
+'use strict';
+
+import notifier = require('node-notifier');
+import * as path from 'path';
+
+notifier.notify({
+ title: 'My awesome title',
+ message: 'Hello from node, Mr. User!',
+ icon: path.join(__dirname, 'coulson.jpg'), // absolute path (not balloons)
+ sound: true, // Only Notification Center or Windows Toasters
+ wait: true // wait with callback until user action is taken on notification
+}, function (err: any, response: any) {
+ // response is response from notification
+});
+
+notifier.on('click', function (notifierObject: any, options: any) {
+ // Happens if `wait: true` and user clicks notification
+});
+
+notifier.on('timeout', function (notifierObject: any, options: any) {
+ // Happens if `wait: true` and notification closes
+});
+
+const options = { };
+
+
+import NotificationCenter = require('node-notifier/notifiers/notificationcenter');
+new NotificationCenter(options).notify();
+
+import NotifySend = require('node-notifier/notifiers/notifysend');
+new NotifySend(options).notify();
+
+import WindowsToaster = require('node-notifier/notifiers/toaster');
+new WindowsToaster(options).notify();
+
+import Growl = require('node-notifier/notifiers/growl');
+new Growl(options).notify();
+
+import WindowsBalloon = require('node-notifier/notifiers/balloon');
+new WindowsBalloon(options).notify();
+
+
+var nn = require('node-notifier');
+
+new nn.NotificationCenter(options).notify();
+new nn.NotifySend(options).notify();
+new nn.WindowsToaster(options).notify(options);
+new nn.WindowsBalloon(options).notify(options);
+new nn.Growl(options).notify(options);
+
+
+//
+// All notification options with their defaults:
+//
+
+var NotificationCenter2 = require('node-notifier').NotificationCenter;
+
+var notifier2 = new NotificationCenter2({
+ withFallback: false, // use Growl if <= 10.8?
+ customPath: void 0 // Relative path if you want to use your fork of terminal-notifier
+});
+
+notifier2.notify({
+ 'title': void 0,
+ 'subtitle': void 0,
+ 'message': void 0,
+ 'sound': false, // Case Sensitive string of sound file (see below)
+ 'icon': 'Terminal Icon', // Set icon? (Absolute path to image)
+ 'contentImage': void 0, // Attach image? (Absolute path)
+ 'open': void 0, // URL to open on click
+ 'wait': false // if wait for notification to end
+}, function(error: any, response: any) {
+ console.log(response);
+});
+
+//
+// Usage WindowsToaster
+//
+
+var WindowsToaster2 = require('node-notifier').WindowsToaster;
+
+var notifier3 = new WindowsToaster2({
+ withFallback: false, // Fallback to Growl or Balloons?
+ customPath: void 0 // Relative path if you want to use your fork of toast.exe
+});
+
+notifier3.notify({
+ title: void 0,
+ message: void 0,
+ icon: void 0, // absolute path to an icon
+ sound: false, // true | false.
+ wait: false, // if wait for notification to end
+}, function(error: any, response: any) {
+ console.log(response);
+});
+
+//
+// Usage Growl
+//
+
+var Growl2 = require('node-notifier').Growl;
+import * as fs from 'fs';
+
+var notifier4 = new Growl2({
+ name: 'Growl Name Used', // Defaults as 'Node'
+ host: 'localhost',
+ port: 23053
+});
+
+notifier4.notify({
+ title: 'Foo',
+ message: 'Hello World',
+ icon: fs.readFileSync(__dirname + "/coulson.jpg"),
+ wait: false, // if wait for user interaction
+
+ // and other growl options like sticky etc.
+ sticky: false,
+ label: void 0,
+ priority: void 0
+});
+
+//
+// Usage WindowsBalloon
+//
+
+var WindowsBalloon2 = require('node-notifier').WindowsBalloon;
+
+var notifier5 = new WindowsBalloon2({
+ withFallback: false, // Try Windows 8 and Growl first?
+ customPath: void 0 // Relative path if you want to use your fork of notifu
+});
+
+notifier5.notify({
+ title: void 0,
+ message: void 0,
+ sound: false, // true | false.
+ time: 5000, // How long to show balloons in ms
+ wait: false, // if wait for notification to end
+}, function(error: any, response: any) {
+ console.log(response);
+});
+
+//
+// Usage NotifySend
+//
+
+var NotifySend2 = require('node-notifier').NotifySend;
+
+var notifier6 = new NotifySend2();
+
+notifier6.notify({
+ title: 'Foo',
+ message: 'Hello World',
+ icon: __dirname + "/coulson.jpg",
+
+ // .. and other notify-send flags:
+ urgency: void 0,
+ time: void 0,
+ category: void 0,
+ hint: void 0,
+});
diff --git a/node-notifier/node-notifier.d.ts b/node-notifier/node-notifier.d.ts
new file mode 100644
index 0000000000..d003001a35
--- /dev/null
+++ b/node-notifier/node-notifier.d.ts
@@ -0,0 +1,167 @@
+// Type definitions for node-notifier
+// Project: https://github.com/mikaelbr/node-notifier
+// Definitions by: Qubo
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+///
+///
+
+declare module "node-notifier" {
+ import NotificationCenter = require('node-notifier/notifiers/notificationcenter');
+ import NotifySend = require("node-notifier/notifiers/notifysend");
+ import WindowsToaster = require("node-notifier/notifiers/toaster");
+ import WindowsBalloon = require("node-notifier/notifiers/balloon");
+ import Growl = require("node-notifier/notifiers/growl");
+
+ namespace nodeNotifier {
+ interface NodeNotifier extends NodeJS.EventEmitter {
+ notify(notification?: Notification, callback?: NotificationCallback): NodeNotifier;
+ NotificationCenter: NotificationCenter;
+ NotifySend: NotifySend;
+ WindowsToaster: WindowsToaster;
+ WindowsBalloon: WindowsBalloon;
+ Growl: Growl;
+ }
+
+ interface Notification {
+ title?: string;
+ message?: string;
+ /** Absolute path (not balloons) */
+ icon?: string;
+ /** Only Notification Center or Windows Toasters */
+ sound?: boolean;
+ /** Wait with callback until user action is taken on notification */
+ wait?: boolean;
+ }
+
+ interface NotificationCallback {
+ (err: any, response: any): any;
+ }
+
+ interface Option {
+ withFallback?: boolean;
+ customPath?: string;
+ }
+ }
+
+ var nodeNotifier: nodeNotifier.NodeNotifier;
+
+ export = nodeNotifier;
+}
+
+declare module "node-notifier/notifiers/notificationcenter" {
+ import notifier = require('node-notifier');
+
+ class NotificationCenter {
+ constructor(option?: notifier.Option);
+ notify(notification?: NotificationCenter.Notification, callback?: notifier.NotificationCallback): NotificationCenter;
+ }
+
+ namespace NotificationCenter {
+ interface Notification extends notifier.Notification {
+ subtitle?: string;
+ /** Attach image? (Absolute path) */
+ contentImage?: string;
+ /** URL to open on click */
+ open?: string;
+ }
+ }
+
+ export = NotificationCenter;
+}
+
+declare module "node-notifier/notifiers/notifysend" {
+ import notifier = require('node-notifier');
+
+ class NotifySend {
+ constructor(option?: notifier.Option);
+ notify(notification?: NotifySend.Notification, callback?: notifier.NotificationCallback): NotifySend;
+ }
+
+ namespace NotifySend {
+ interface Notification {
+ title?: string;
+ message?: string;
+ icon?: string;
+ /** Specifies the urgency level (low, normal, critical). */
+ urgency?: string;
+ /** Specifies the timeout in milliseconds at which to expire the notification */
+ time?: number;
+ /** Specifies the notification category */
+ category?: string;
+ /** Specifies basic extra data to pass. Valid types are int, double, string and byte. */
+ hint?: string;
+ }
+ }
+
+ export = NotifySend;
+}
+
+declare module "node-notifier/notifiers/toaster" {
+ import notifier = require('node-notifier');
+
+ class WindowsToaster {
+ constructor(option?: notifier.Option);
+ notify(notification?: notifier.Notification, callback?: notifier.NotificationCallback): WindowsToaster;
+ }
+
+ export = WindowsToaster;
+}
+
+declare module "node-notifier/notifiers/growl" {
+ import notifier = require('node-notifier');
+
+ class Growl {
+ constructor(option?: Growl.Option);
+ notify(notification?: Growl.Notification, callback?: notifier.NotificationCallback): Growl;
+ }
+
+ namespace Growl {
+ interface Option {
+ name?: string;
+ host?: string;
+ port?: number;
+ }
+
+ interface Notification {
+ title?: string;
+ message?: string;
+ /** Absolute path (not balloons) */
+ icon?: string;
+ /** Wait with callback until user action is taken on notification */
+ wait?: boolean;
+ /** whether or not to sticky the notification (defaults to false) */
+ sticky?: boolean;
+ /** type of notification to use (defaults to the first registered type) */
+ label: string;
+ /** the priority of the notification from lowest (-2) to highest (2) */
+ priority: number;
+ }
+ }
+
+ export = Growl;
+}
+
+declare module "node-notifier/notifiers/balloon" {
+ import notifier = require('node-notifier');
+
+ class WindowsBalloon {
+ constructor(option?: notifier.Option);
+ notify(notification?: WindowsBalloon.Notification, callback?: notifier.NotificationCallback): WindowsBalloon;
+ }
+
+ namespace WindowsBalloon {
+ interface Notification {
+ title?: string;
+ message?: string;
+ /** Only Notification Center or Windows Toasters */
+ sound?: boolean;
+ /** How long to show balloons in ms */
+ time?: number;
+ /** Wait with callback until user action is taken on notification */
+ wait?: boolean;
+ }
+ }
+
+ export = WindowsBalloon;
+}