diff --git a/jquery.soap/jquery.soap-tests.ts b/jquery.soap/jquery.soap-tests.ts
new file mode 100644
index 000000000..acef40d8c
--- /dev/null
+++ b/jquery.soap/jquery.soap-tests.ts
@@ -0,0 +1,296 @@
+///
+
+$.soap({
+ url: 'http://my.server.com/soapservices/',
+ method: 'helloWorld',
+
+ data: {
+ name: 'Remy Blom',
+ msg: 'Hi!'
+ },
+
+ success: function(soapResponse) {
+ // do stuff with soapResponse
+ // if you want to have the response as JSON use soapResponse.toJSON();
+ // or soapResponse.toString() to get XML string
+ // or soapResponse.toXML() to get XML DOM
+ },
+ error: function(SOAPResponse) {
+ // show error
+ }
+});
+
+$.soap({
+ url: 'http://my.server.com/soapservices/', //endpoint address for the service
+ method: 'helloWorld', // service operation name
+ // 1) will be appended to url if appendMethodToURL=true
+ // 2) will be used for request element name when building xml from JSON 'params' (unless 'elementName' is provided)
+ // 3) will be used to set SOAPAction request header if no SOAPAction is specified
+ appendMethodToURL: true, // method name will be appended to URL defaults to true
+ SOAPAction: 'action', // manually set the Request Header 'SOAPAction', defaults to the method specified above (optional)
+ soap12: false, // use SOAP 1.2 namespace and HTTP headers - default to false
+ context: document.body, // Used to set this in beforeSend, success, error and data callback functions
+
+ // addional headers and namespaces
+ envAttributes: { // additional attributes (like namespaces) for the Envelope:
+ 'xmlns:another': 'http://anotherNamespace.com/'
+ },
+ HTTPHeaders: { // additional http headers send with the $.ajax call, will be given to $.ajax({ headers: })
+ 'Authorization': 'Basic ' + btoa('user:pass')
+ },
+
+ //data can be XML DOM, XML String, JSON or a function
+ data: { // JSON structure used to build request XML - SHOULD be coupled with ('namespaceQualifier' AND 'namespaceURL') AND ('method' OR 'elementName')
+ name: 'Remy Blom',
+ msg: 'Hi!'
+ },
+
+ //these options ONLY apply when the request XML is going to be built from JSON 'params'
+ namespaceQualifier: 'myns', // used as namespace prefix for all elements in request (optional)
+ namespaceURL: 'urn://service.my.server.com', // namespace url added to parent request element (optional)
+ noPrefix: false, // set to true if you don't want the namespaceQualifier to be the prefix for the nodes in params. defaults to false (optional)
+ elementName: 'requestElementName', // override 'method' as outer element (optional)
+
+ //callback functions
+ beforeSend: function(SOAPEnvelope) { }, // callback function - SOAPEnvelope object is passed back prior to ajax call (optional)
+ success: function(SOAPResponse) { }, // callback function to handle successful return (optional)
+ error: function(SOAPResponse) { }, // callback function to handle fault return (optional)
+ statusCode: { // callback functions based on statusCode
+ 404: function() {
+ console.log('404 Not Found')
+ },
+ 200: function() {
+ console.log('200 OK')
+ }
+ },
+
+ // WS-Security
+ wss: {
+ username: 'user',
+ password: 'pass',
+ nonce: 'w08370jf7340qephufqp3r4',
+ created: new Date().getTime()
+ },
+
+ // debugging
+ enableLogging: false // to enable the local log function set to true, defaults to false (optional)
+})
+
+$.soap({
+
+}).done(function(data, textStatus, jqXHR) {
+ // do stuff on success here...
+}).fail(function(jqXHR, textStatus, errorThrown) {
+ // do stuff on error here...
+})
+
+$.soap({
+ url: 'http://my.server.com/soapservices/',
+ namespaceQualifier: 'myns',
+ namespaceURL: 'urn://service.my.server.com',
+ error: function(soapResponse) {
+ // show error
+ }
+});
+
+$.soap({
+ method: 'helloWorld',
+ data: {
+ name: 'Remy Blom',
+ msg: 'Hi!'
+ },
+ success: function(soapResponse) {
+ // do stuff with soapResponse
+ }
+});
+
+$.soap({
+ method: 'doSomethingElse',
+ data: {},
+ success: function(soapResponse) {
+ // do stuff with soapResponse
+ }
+});
+
+$.soap({
+ url: 'http://another.server.com/anotherService',
+ method: 'helloWorld',
+ data: {
+ name: 'Remy Blom',
+ msg: 'Hi!'
+ },
+ success: function(soapResponse) {
+ // do stuff with soapResponse
+ },
+ error: function(soapResponse) {
+ alert('that other server might be down...')
+ }
+});
+
+$.soap({
+ // other parameters..
+
+ // WS-Security
+ wss: {
+ username: 'user',
+ password: 'pass',
+ nonce: 'w08370jf7340qephufqp3r4',
+ created: new Date().getTime()
+ }
+});
+
+var username = 'foo';
+var password = 'bar';
+
+$.soap({
+ // other parameters...
+
+ HTTPHeaders: {
+ Authorization: 'Basic ' + btoa(username + ':' + password)
+ }
+});
+
+// jquery.soap/doc/options.md
+
+$.soap({
+ url: 'http://server.com/webServices/',
+ method: 'getItem',
+ appendMethodToURL: false
+})
+
+$.soap({
+ beforeSend: function(SOAPEnvelope) {
+ console.log(SOAPEnvelope.toString());
+ }
+});
+
+$.soap({
+ context: document.body,
+ success: function(SOAPResponse) {
+ console.log(this);
+ }
+});
+
+var xml =
+ ['',
+ '',
+ '',
+ '',
+ '',
+ ''];
+
+$.soap({
+ data: xml.join('')
+});
+
+$.soap({
+ method: 'requestNode',
+ data: {
+ name: 'Remy Blom',
+ msg: 'Hi!'
+ }
+});
+
+$.soap({
+ envAttributes: {
+ 'xmlns:another': 'http://anotherNamespace.com/'
+ }
+})
+
+$.soap({
+ method: 'helloWorld',
+ elementName: 'requestNode'
+})
+
+$.soap({
+ enableLogging: true
+})
+
+$.soap({
+ error: function(SOAPResponse) {
+ console.log(SOAPResponse.toString())
+ }
+})
+
+$.soap({
+ HTTPHeaders: {
+ 'Authorization': 'Basic ' + btoa('user:pass')
+ }
+})
+
+$.soap({
+ url: 'http://server.com/webServices/',
+ method: 'getItem'
+})
+
+$.soap({
+ method: 'helloWorld',
+ namespaceQualifier: 'myns',
+ namespaceURL: 'urn://service.my.server.com'
+})
+
+$.soap({
+ method: 'helloWorld',
+ namespaceQualifier: 'myns',
+ namespaceURL: 'urn://service.my.server.com'
+})
+
+$.soap({
+ method: 'helloWorld',
+ namespaceQualifier: 'myns',
+ namespaceURL: 'urn://service.my.server.com',
+ noPrefix: true
+})
+
+$.soap({
+ request: function(SOAPEnvelope) {
+ console.log(SOAPEnvelope.toString());
+ }
+})
+
+$.soap({
+ soap12: true
+})
+
+$.soap({
+ url: 'http://server.com/webServices/',
+ method: 'getItem',
+ SOAPAction: 'getAnItem'
+})
+
+$.soap({
+ SOAPHeader: {
+ test: [1, 2, 3]
+ }
+})
+
+$.soap({
+ statusCode: {
+ 404: function() {
+ console.log('404 Not Found')
+ },
+ 200: function() {
+ console.log('200 OK')
+ }
+ }
+})
+
+$.soap({
+ success: function(SOAPResponse) {
+ console.log(SOAPResponse.toString());
+ }
+})
+
+$.soap({
+ url: 'http://server.com/webServices/',
+ method: 'getItem'
+})
+
+$.soap({
+ wss: {
+ username: 'user',
+ password: 'pass',
+ nonce: 'w08370jf7340qephufqp3r4',
+ created: new Date().getTime()
+ }
+})
\ No newline at end of file
diff --git a/jquery.soap/jquery.soap.d.ts b/jquery.soap/jquery.soap.d.ts
new file mode 100644
index 000000000..7b7eeedbb
--- /dev/null
+++ b/jquery.soap/jquery.soap.d.ts
@@ -0,0 +1,83 @@
+// Type definitions for jQuery.SOAP 1.6.7
+// Project: https://github.com/doedje/jquery.soap
+// Definitions by: Roland Greim
+// Definitions: https://github.com/borisyankov/DefinitelyTyped/
+
+///
+
+declare module JQuerySOAP {
+ interface SOAPEnvelope {
+ attributes: Object
+ bodies: Array
+ headers: Array
+ prefix: string
+ soapConfig: any
+ typeOf: string
+ addAttribute(name: String, value: string): void
+ addAttribute(name: String, value: number): void
+ addBody(soapObject: SOAPObject): void
+ addHeader(soapObject: SOAPObject): void
+ addNamespace(name: String, uri: string): void
+ toString(): string
+ send(options: Options): void
+ }
+ interface SOAPResponse {
+ toJSON(): any
+ toString(): String
+ toXML(): XMLDocument
+ }
+
+ interface SOAPObject {
+ attributes: Object
+ children: Array
+ name: string
+ ns: Object
+ _parent: SOAPObject
+ value: any
+ typeOf: string
+ addNamespace(name: String, url: string): void
+ addParameter(name: String, value: string): void
+ addParameter(name: String, value: number): void
+ appendChild(soapObject: SOAPObject): SOAPObject
+ attr(name: string, value: string): Object
+ attr(name: string, value: number): Object
+ end(): SOAPObject
+ find(name: string): SOAPObject
+ hasChildren(): boolean
+ newChild(name: string): SOAPObject
+ parent(): SOAPObject
+ toString(): string
+ val(value: string): SOAPObject
+ val(value: number): SOAPObject
+ }
+ interface Options {
+ appendMethodToURL?: boolean;
+ async?: boolean;
+ beforeSend?: (SOAPEnvelope: SOAPEnvelope) => void;
+ context?: any;
+ data?: Object;
+ envAttributes?: any;
+ elementName?: string;
+ enableLogging?: boolean;
+ error?: (SOAPResponse: SOAPResponse) => void;
+ HTTPHeaders?: Object;
+ method?: string;
+ namespaceQualifier?: string;
+ namespaceURL?: string;
+ noPrefix?: boolean;
+ request?: (SOAPEnvelope: SOAPEnvelope) => void;
+ soap12?: boolean;
+ SOAPAction?: string;
+ SOAPHeader?: Object;
+ statusCode?: Object;
+ success?: (SOAPResponse: SOAPResponse) => void;
+ url?: string;
+ wss?: Object;
+ }
+ interface SOAP {
+ (options?: Options): JQueryXHR;
+ }
+}
+interface JQueryStatic {
+ soap: JQuerySOAP.SOAP;
+}
diff --git a/js-md5/md5-tests.ts b/js-md5/md5-tests.ts
new file mode 100644
index 000000000..a536773aa
--- /dev/null
+++ b/js-md5/md5-tests.ts
@@ -0,0 +1,20 @@
+///
+
+md5('Message to hash');
+md5('');
+md5('中文');
+md5([]);
+md5(new Uint8Array([]));
+
+$.md5('message');
+$.md5('Message to hash');
+$.md5('');
+$.md5('中文');
+$.md5([]);
+$.md5(new Uint8Array([]));
+
+'message'.md5('Message to hash');
+'message'.md5('');
+'message'.md5('中文');
+'message'.md5([]);
+'message'.md5(new Uint8Array([]));
\ No newline at end of file
diff --git a/js-md5/md5.d.ts b/js-md5/md5.d.ts
new file mode 100644
index 000000000..b944b134f
--- /dev/null
+++ b/js-md5/md5.d.ts
@@ -0,0 +1,32 @@
+// Type definitions for js-md5 v0.3.0
+// Project: https://github.com/emn178/js-md5
+// Definitions by: Roland Greim
+// Definitions: https://github.com/borisyankov/DefinitelyTyped/
+
+///
+
+interface JQuery {
+ md5(value: string): string;
+ md5(value: Array): string;
+ md5(value: Uint8Array): string;
+}
+
+interface JQueryStatic {
+ md5(value: string): string;
+ md5(value: Array): string;
+ md5(value: Uint8Array): string;
+}
+
+interface md5 {
+ (value: string): string;
+ (value: Array): string;
+ (value: Uint8Array): string;
+}
+
+interface String {
+ md5(value: string): string;
+ md5(value: Array): string;
+ md5(value: Uint8Array): string;
+}
+
+declare var md5: md5;