diff --git a/amqplib/amqplib-tests.ts b/amqplib/amqplib-tests.ts
new file mode 100644
index 0000000000..7a1f512002
--- /dev/null
+++ b/amqplib/amqplib-tests.ts
@@ -0,0 +1,21 @@
+///
+
+import amqp = require("amqplib");
+
+var msg = "Hello World";
+
+amqp.connect("amqp://localhost")
+ .then(connection => {
+ return connection.createChannel()
+ .tap(channel => channel.checkQueue("myQueue"))
+ .then(channel => channel.sendToQueue("myQueue", new Buffer(msg)))
+ .ensure(() => connection.close());
+ });
+
+amqp.connect("amqp://localhost")
+ .then(connection => {
+ return connection.createChannel()
+ .tap(channel => channel.checkQueue("myQueue"))
+ .then(channel => channel.consume("myQueue", newMsg => console.log("New Message: " + newMsg.content.toString())))
+ .ensure(() => connection.close());
+ });
diff --git a/amqplib/amqplib.d.ts b/amqplib/amqplib.d.ts
new file mode 100644
index 0000000000..0c7f0720a6
--- /dev/null
+++ b/amqplib/amqplib.d.ts
@@ -0,0 +1,144 @@
+// Type definitions for amqplib 0.3.x
+// Project: https://github.com/squaremo/amqp.node
+// Definitions by: Michael Nahkies
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+///
+///
+
+declare module "amqplib" {
+
+ import events = require("events");
+ import when = require("when");
+
+ interface Connection extends events.EventEmitter {
+ close(): when.Promise;
+ createChannel(): when.Promise;
+ createConfirmChannel(): when.Promise;
+ }
+
+ module Replies {
+ interface Empty {
+ }
+ interface AssertQueue {
+ queue: string;
+ messageCount: number;
+ consumerCount: number;
+ }
+ interface DeleteQueue {
+ messageCount: number;
+ }
+ interface AssertExchange {
+ exchange: string;
+ }
+ interface Consume {
+ consumerTag: string;
+ }
+ }
+
+ module Options {
+ interface AssertQueue {
+ exclusive?: boolean;
+ durable?: boolean;
+ autoDelete?: boolean;
+ arguments?: any;
+ messageTtl?: number;
+ expires?: number;
+ deadLetterExchange?: string;
+ maxLength?: number;
+ }
+ interface DeleteQueue {
+ ifUnused?: boolean;
+ ifEmpty?: boolean;
+ }
+ interface AssertExchange {
+ durable?: boolean;
+ internal?: boolean;
+ autoDelete?: boolean;
+ alternateExchange?: string;
+ arguments?: any;
+ }
+ interface DeleteExchange {
+ ifUnused?: boolean;
+ }
+ interface Publish {
+ expiration?: string;
+ userId?: string;
+ CC?: string | string[];
+
+ mandatory?: boolean;
+ persistent?: boolean;
+ deliveryMode?: boolean | number;
+ BCC?: string | string[];
+
+ contentType?: string;
+ contentEncoding?: string;
+ headers?: Object;
+ priority?: number;
+ correlationId?: string;
+ replyTo?: string;
+ messageId?: string;
+ timestamp?: number;
+ type?: string;
+ appId?: string;
+ }
+ interface Consume {
+ consumerTag?: string;
+ noLocal?: boolean;
+ noAck?: boolean;
+ exclusive?: boolean;
+ priority?: number;
+ arguments?: Object;
+ }
+ interface Get {
+ noAck?: boolean;
+ }
+ }
+
+ interface Message {
+ content: Buffer;
+ fields: Object;
+ properties: Object;
+ }
+
+ interface Channel extends events.EventEmitter {
+ close(): when.Promise;
+
+ assertQueue(queue: string, options?: Options.AssertQueue): when.Promise;
+ checkQueue(queue: string): when.Promise;
+
+ deleteQueue(queue: string, options?: Options.DeleteQueue): when.Promise;
+ purgeQueue(queue: string): when.Promise;
+
+ bindQueue(queue: string, source: string, pattern: string, args?: any): when.Promise;
+ unbindQueue(queue: string, source: string, pattern: string, args?: any): when.Promise;
+
+ assertExchange(exchange: string, type: string, options?: Options.AssertExchange): when.Promise;
+ checkExchange(exchange: string): when.Promise;
+
+ deleteExchange(exchange: string, options?: Options.DeleteExchange): when.Promise;
+
+ bindExchange(destination: string, source: string, pattern: string, args?: any): when.Promise;
+ unbindExchange(destination: string, source: string, pattern: string, args?: any): when.Promise;
+
+ publish(exchange: string, routingKey: string, content: Buffer, options?: Options.Publish): boolean;
+ sendToQueue(queue: string, content: Buffer, options?: Options.Publish): boolean;
+
+ consume(queue: string, onMessage: (msg: Message) => any, options?: Options.Consume): when.Promise;
+
+ cancel(consumerTag: string): when.Promise;
+ get(queue: string, options?: Options.Get): when.Promise;
+
+ ack(message: Message, allUpTo?: boolean): void;
+ ackAll(): void;
+
+ nack(message: Message, allUpTo?: boolean, requeue?: boolean): void;
+ nackAll(requeue?: boolean): void;
+ reject(message: Message, requeue?: boolean): void;
+
+ prefetch(count: number, global?: boolean): when.Promise;
+ recover(): when.Promise;
+ }
+
+ function connect(url: string, socketOptions?: any): when.Promise;
+}