diff --git a/sails.io.js/index.d.ts b/sails.io.js/index.d.ts
new file mode 100644
index 0000000000..193feb3e9b
--- /dev/null
+++ b/sails.io.js/index.d.ts
@@ -0,0 +1,101 @@
+// Type definitions for sails.io.js 1.0.1
+// Project: http://sailsjs.org/documentation/reference/web-sockets/socket-client
+// Definitions by: Arvitaly
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+///
+declare namespace SailsIOJS {
+ export interface SDKInfo {
+ version?: string;
+ language?: string;
+ platform?: "browser" | "node";
+ versionString?: string;
+ }
+ export interface ClientSails {
+ url?: string;
+ autoConnect?: boolean;
+ headers?: { [index: string]: string };
+ transports?: Array<"websocket" | "polling">;
+ rejectUnauthorized?: boolean;
+ reconnection?: boolean;
+ reconnectionAttempts?: number;
+ reconnectionDelay?: number;
+ reconnectionDelayMax?: number;
+ useCORSRouteToGetCookie?: boolean;
+ query?: string;
+ path?: string;
+ // All logs are disabled when `io.sails.environment = 'production'`
+ environment?: "production" | string;
+ connect(url?: string, config?: ConnectConfig): Socket;
+ initialConnectionHeaders?: InitialConnectionHeaders;
+ strict?: boolean;
+ sdk?: SDKInfo;
+ }
+ export interface ConnectConfig {
+ initialConnectionHeaders?: InitialConnectionHeaders
+ }
+ export interface InitialConnectionHeaders {
+ nosession?: boolean;
+ }
+ export interface Client {
+ socket: Socket;
+ sails: ClientSails;
+ }
+ export interface Headers { [index: string]: string }
+ export interface RequestOptions {
+ url: string;
+ method?: string;
+ headers?: Headers;
+ params?: any;
+ data?: any;
+ }
+ export interface JWR {
+ headers: Headers;
+ statusCode: number;
+ body: any;
+ error?: Error;
+ toString: () => string;
+ toPOJO: () => {
+ body: any;
+ headers: Headers;
+ statusCode: number;
+ }
+ pipe: () => Error;
+ }
+ export type RequestCallback = {
+ (body: any, jwr: JWR): any;
+ }
+ export type Data = Object;
+ export interface Socket {
+ get(url: string, data?: Data): void;
+ get(url: string, cb?: RequestCallback): void;
+ get(url: string, data: Data, cb: RequestCallback): void;
+ post(url: string, data?: Data): void;
+ post(url: string, cb?: RequestCallback): void;
+ post(url: string, data: Data, cb: RequestCallback): void;
+ put(url: string, data?: Data): void;
+ put(url: string, cb?: RequestCallback): void;
+ put(url: string, data: Data, cb: RequestCallback): void;
+ delete(url: string, data?: Data): void;
+ delete(url: string, cb?: RequestCallback): void;
+ delete(url: string, data: Data, cb: RequestCallback): void;
+ request(options: RequestOptions, cb?: RequestCallback): void;
+ on(event: string, cb: (...args: Array) => any): Socket;
+ on(event: "connect", cb: () => any): Socket;
+ on(event: "disconnect", cb: () => any): Socket;
+ on(event: "reconnecting", cb: (numAttempts: number) => any): Socket;
+ on(event: "reconnect", cb: (transport: string, numAttempts: number) => any): Socket;
+ on(event: "error", cb: (err: any) => any): Socket;
+ off(event: string, cb: () => any): Socket
+ removeAllListeners(): Socket;
+ isConnecting(): boolean;
+ isConnected(): boolean;
+ reconnect(): Socket;
+ mightBeAboutToAutoConnect(): boolean;
+ replay(): Socket;
+ }
+}
+declare function SailsIOJS(client: SocketIOClientStatic): SailsIOJS.Client;
+declare module 'sails.io.js' {
+ export = SailsIOJS;
+}
\ No newline at end of file
diff --git a/sails.io.js/sails.io.js-tests.ts b/sails.io.js/sails.io.js-tests.ts
new file mode 100644
index 0000000000..5350b0ae71
--- /dev/null
+++ b/sails.io.js/sails.io.js-tests.ts
@@ -0,0 +1,89 @@
+///
+import * as SocketIO from 'socket.io-client';
+import * as SailsIOJS from 'sails.io.js';
+const io = SailsIOJS(SocketIO);
+io.sails.autoConnect = true;
+io.sails.connect();
+io.sails.connect("url");
+io.sails.connect("url", {});
+io.sails.connect("url", {
+ initialConnectionHeaders: {
+ nosession: true
+ }
+});
+io.sails.environment = "production";
+io.sails.headers = { "test": "1" };
+io.sails.initialConnectionHeaders = { nosession: false };
+io.sails.path = "path";
+io.sails.query = "query";
+io.sails.reconnection = true;
+io.sails.reconnectionAttempts = 5;
+io.sails.reconnectionDelay = 1;
+io.sails.reconnectionDelayMax = 5;
+io.sails.rejectUnauthorized = true;
+io.sails.sdk = {
+ language: "lang",
+ platform: "node",
+ version: "1.0",
+ versionString: "1.0"
+}
+io.sails.strict = true;
+io.sails.transports = ["websocket", "polling"];
+io.sails.url = "url1";
+io.sails.useCORSRouteToGetCookie = true;
+io.socket.get("p");
+io.socket.get("p", {});
+io.socket.get("p", "test", (data: Date, jwr: any) => {
+ data.getDate();
+ const a: SailsIOJS.JWR = jwr;
+});
+io.socket.post("p");
+io.socket.post("p", { val: 1 });
+io.socket.put("p", "test", (data: number, jwr: any) => {
+ data.toFixed();
+ const a: SailsIOJS.JWR = jwr;
+});
+io.socket.put("p");
+io.socket.put("p", {});
+io.socket.post("p", "test", (data, jwr) => {
+ const a: SailsIOJS.JWR = jwr;
+});
+io.socket.delete("p");
+io.socket.delete("p", {});
+io.socket.delete("p", "test", (data, jwr) => {
+ const a: SailsIOJS.JWR = jwr;
+});
+io.socket.request({ url: "url" });
+io.socket.request({ url: "url" }, (data: number, jwr: any) => {
+ data.toExponential();
+ jwr.body.toExponential();
+ jwr.error.message;
+ jwr.pipe.apply(this);
+ jwr.statusCode.toFixed();
+ const podo = jwr.toPOJO();
+ podo.body.toExponential();
+ podo.headers["test"] = "15";
+ podo.statusCode = 200;
+ jwr.toString().charAt(0);
+})
+io.socket.isConnected() === true;
+io.socket.isConnecting() === true;
+io.socket.mightBeAboutToAutoConnect() === false;
+io.socket.on("connect", () => { })
+ .on("disconnect", () => {
+
+ })
+ .on("reconnecting", (num) => {
+ num = 15;
+ })
+ .on("reconnect", (transport, num) => {
+ transport.toLowerCase();
+ num = 16;
+ })
+ .on("error", (err) => { })
+ .on("any", (a, b, c) => {
+
+ })
+ .removeAllListeners()
+ .off("error", () => { })
+ .replay();
\ No newline at end of file
diff --git a/sails.io.js/tsconfig.json b/sails.io.js/tsconfig.json
new file mode 100644
index 0000000000..2e73761b08
--- /dev/null
+++ b/sails.io.js/tsconfig.json
@@ -0,0 +1,19 @@
+{
+ "compilerOptions": {
+ "module": "commonjs",
+ "target": "es6",
+ "noImplicitAny": true,
+ "strictNullChecks": true,
+ "baseUrl": "../",
+ "typeRoots": [
+ "../"
+ ],
+ "types": [],
+ "noEmit": true,
+ "forceConsistentCasingInFileNames": true
+ },
+ "files": [
+ "index.d.ts",
+ "sails.io.js-tests.ts"
+ ]
+}
\ No newline at end of file