diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index f39e1f53d6..f26669b9cb 100644
--- a/CONTRIBUTORS.md
+++ b/CONTRIBUTORS.md
@@ -21,6 +21,7 @@ All definitions files include a header with the author and editors, so at some p
* [asciify](https://github.com/olizilla/asciify) (by [Alan](http://alan.norbauer.com))
* [assert](https://github.com/Jxck/assert) (by [vvakame](https://github.com/vvakame))
* [async](https://github.com/caolan/async) (by [Boris Yankov](https://github.com/borisyankov))
+* [atmosphere](https://github.com/Atmosphere/atmosphere-javascript) (by [Kai Toedter](https://github.com/toedter))
* [Atom](https://atom.io/) (by [vvakame](https://github.com/vvakame))
* [aws-sdk-js](https://github.com/aws/aws-sdk-js) (by [midknight41](https://github.com/midknight41))
* [Backbone.js](http://backbonejs.org/) (by [Boris Yankov](https://github.com/borisyankov))
diff --git a/atmosphere/atmosphere-tests.ts b/atmosphere/atmosphere-tests.ts
new file mode 100644
index 0000000000..44c2880a35
--- /dev/null
+++ b/atmosphere/atmosphere-tests.ts
@@ -0,0 +1,46 @@
+///
+
+var socket = atmosphere;
+
+var request1:Atmosphere.Request = new atmosphere.AtmosphereRequest();
+
+request1.url = document.location.toString() + 'chat';
+request1.contentType = "application/json";
+request1.transport = 'websocket';
+request1.fallbackTransport = 'long-polling';
+
+var request2:Atmosphere.Request = {
+ url: 'http://localhost:8080/chat',
+ contentType: "application/json",
+ logLevel: 'debug',
+ transport: 'websocket',
+ fallbackTransport: 'long-polling'
+};
+
+request1.onError = function (response?:Atmosphere.Response) {};
+request1.onClose = function (response?:Atmosphere.Response) {};
+request1.onOpen = function (response?:Atmosphere.Response) {};
+request1.onMessage = function (response:Atmosphere.Response) {};
+request1.onReopen = function (request?:Atmosphere.Request, response?:Atmosphere.Response) {};
+request1.onReconnect = function (request?:Atmosphere.Request, response?:Atmosphere.Response) {};
+request1.onMessagePublished = function (response?:Atmosphere.Response) {};
+request1.onTransportFailure = function (reason?:string, response?:Atmosphere.Response) {};
+request1.onLocalMessage = function (request?:Atmosphere.Request) {};
+request1.onFailureToReconnect = function (request?:Atmosphere.Request, response?:Atmosphere.Response) {};
+request1.onClientTimeout = function (request?:Atmosphere.Request) {};
+
+request1.subscribe = function (options:Atmosphere.Request) {};
+request1.execute = function () {};
+request1.close = function () {};
+request1.disconnect = function () {};
+request1.getUrl = function ():string { return "http://www.toedter.com" };
+request1.push = function (message:string, dispatchUrl?:string) {};
+request1.getUUID = function () {};
+request1.pushLocal = function (message:string) {};
+
+var subSocket:Atmosphere.Request = socket.subscribe(request1);
+var subSocket2:Atmosphere.Request = socket.subscribe('http://chat.com', function() {}, request2);
+subSocket2.close();
+
+subSocket.push("test");
+socket.unsubscribe();
\ No newline at end of file
diff --git a/atmosphere/atmosphere.d.ts b/atmosphere/atmosphere.d.ts
new file mode 100644
index 0000000000..59d743a4b9
--- /dev/null
+++ b/atmosphere/atmosphere.d.ts
@@ -0,0 +1,106 @@
+// Type definitions for Atmosphere v2.1.5
+// Project: https://github.com/Atmosphere/atmosphere-javascript
+// Definitions by: Kai Toedter
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+declare module Atmosphere {
+ interface Atmosphere {
+ /**
+ * The atmosphere API is a little bit special here: the first parameter can either be
+ * a URL string or a Request object. If it is a URL string, then the additional parameters are expected.
+ */
+ subscribe?: (requestOrUrl:any, callback?:Function, request?:Request) => Request;
+ unsubscribe?: () => void;
+
+ AtmosphereRequest?: AtmosphereRequest;
+ }
+
+ // needed to fit JavaScript "new atmosphere.AtmosphereRequest()"
+ // and compile with --noImplicitAny
+ interface AtmosphereRequest {
+ new(): Request;
+ }
+
+ interface Request {
+ timeout?: number;
+ method?: string;
+ headers?: any;
+ contentType?: string;
+ callback?: Function;
+ url?: string;
+ data?: string;
+ suspend?: boolean;
+ maxRequest?: number;
+ reconnect?: boolean;
+ maxStreamingLength?: number;
+ lastIndex?: number;
+ logLevel?: string;
+ requestCount?: number;
+ fallbackMethod?: string;
+ fallbackTransport?: string;
+ transport?: string;
+ webSocketImpl?: any;
+ webSocketBinaryType?: any;
+ dispatchUrl?: string;
+ webSocketPathDelimiter?: string;
+ enableXDR?: boolean;
+ rewriteURL?: boolean;
+ attachHeadersAsQueryString?: boolean;
+ executeCallbackBeforeReconnect?: boolean;
+ readyState?: number;
+ lastTimestamp?: number;
+ withCredentials?: boolean;
+ trackMessageLength?: boolean;
+ messageDelimiter?: string;
+ connectTimeout?: number;
+ reconnectInterval?: number;
+ dropHeaders?: boolean;
+ uuid?: number;
+ async?: boolean;
+ shared?: boolean;
+ readResponsesHeaders?: boolean;
+ maxReconnectOnClose?: number;
+ enableProtocol?: boolean;
+ pollingInterval?: number;
+
+ onError?: (response?:Response) => void;
+ onClose?: (response?:Response) => void;
+ onOpen?: (response?:Response) => void;
+ onMessage?: (response:Response) => void;
+ onReopen?: (request?:Request, response?:Response) => void;
+ onReconnect?: (request?:Request, response?:Response) => void;
+ onMessagePublished?: (response?:Response) => void;
+ onTransportFailure?: (reason?:string, response?:Response) => void;
+ onLocalMessage?: (request?:Request) => void;
+ onFailureToReconnect?: (request?:Request, response?:Response) => void;
+ onClientTimeout?: (request?:Request) => void;
+
+ subscribe?: (options:Request) => void;
+ execute?: () => void;
+ close?: () => void;
+ disconnect?: () => void;
+ getUrl?: () => string;
+ push?: (message:string, dispatchUrl?:string) => void;
+ getUUID?: () => void;
+ pushLocal?: (message:string) => void;
+ }
+
+ interface Response {
+ status?: number;
+ reasonPhrase?: string;
+ responseBody?: string;
+ messages?: string[];
+ headers?: string[];
+ state?: string;
+ transport?: string;
+ error?: string;
+ request?: Request;
+ partialMessage?: string;
+ errorHandled?: boolean;
+ closedByClientTimeout?: boolean;
+ }
+}
+
+declare var atmosphere:Atmosphere.Atmosphere;
+
+