UNPKG

ngx-soap-next

Version:

SOAP service for Angular

1 lines 218 kB
{"version":3,"file":"ngx-soap-next.mjs","sources":["../../../projects/ngx-soap/src/lib/soap/nscontext.ts","../../../projects/ngx-soap/src/lib/soap/utils.ts","../../../projects/ngx-soap/src/lib/soap/wsdl.ts","../../../projects/ngx-soap/src/lib/soap/security/BasicAuthSecurity.ts","../../../projects/ngx-soap/src/lib/soap/security/WSSecurity.ts","../../../projects/ngx-soap/src/lib/soap/security/BearerSecurity.ts","../../../projects/ngx-soap/src/lib/soap/security/NTLMSecurity.ts","../../../projects/ngx-soap/src/lib/soap/security/security.ts","../../../projects/ngx-soap/src/lib/soap/multipart.ts","../../../projects/ngx-soap/src/lib/soap/soapAttachment.ts","../../../projects/ngx-soap/src/lib/soap/client.ts","../../../projects/ngx-soap/src/lib/soap/soap.ts","../../../projects/ngx-soap/src/lib/ngx-soap.service.ts","../../../projects/ngx-soap/src/lib/ngx-soap.module.ts","../../../projects/ngx-soap/src/public_api.ts","../../../projects/ngx-soap/src/ngx-soap-next.ts"],"sourcesContent":["'use strict';\n\nexport class NamespaceScope {\n  parent: any;\n  namespaces: any;\n  constructor(parent: any) {\n    if (!(this instanceof NamespaceScope)) {\n      return new NamespaceScope(parent);\n    }\n    this.parent = parent;\n    this.namespaces = {};  \n  }\n\n  getNamespaceURI = function(prefix, localOnly) {\n    switch (prefix) {\n      case 'xml':\n        return 'http://www.w3.org/XML/1998/namespace';\n      case 'xmlns':\n        return 'http://www.w3.org/2000/xmlns/';\n      default:\n        var nsUri = this.namespaces[prefix];\n        /*jshint -W116 */\n        if (nsUri != null) {\n          return nsUri.uri;\n        } else if (!localOnly && this.parent) {\n          return this.parent.getNamespaceURI(prefix);\n        } else {\n          return null;\n        }\n    }\n  }\n\n  getNamespaceMapping = function(prefix) {\n    switch (prefix) {\n      case 'xml':\n        return {\n          uri: 'http://www.w3.org/XML/1998/namespace',\n          prefix: 'xml',\n          declared: true\n        };\n      case 'xmlns':\n        return {\n          uri: 'http://www.w3.org/2000/xmlns/',\n          prefix: 'xmlns',\n          declared: true\n        };\n      default:\n        var mapping = this.namespaces[prefix];\n        /*jshint -W116 */\n        if (mapping != null) {\n          return mapping;\n        } else if (this.parent) {\n          return this.parent.getNamespaceMapping(prefix);\n        } else {\n          return null;\n        }\n    }\n  }\n\n  getPrefix = function(nsUri, localOnly) {\n    switch (nsUri) {\n      case 'http://www.w3.org/XML/1998/namespace':\n        return 'xml';\n      case 'http://www.w3.org/2000/xmlns/':\n        return 'xmlns';\n      default:\n        for (var p in this.namespaces) {\n          if (this.namespaces[p].uri === nsUri) {\n            return p;\n          }\n        }\n        if (!localOnly && this.parent) {\n          return this.parent.getPrefix(nsUri);\n        } else {\n          return null;\n        }\n    }\n  }\n}\n\nexport class NamespaceContext {\n  scopes: any[];\n  prefixCount: number; \n\n  constructor() {\n    if (!(this instanceof NamespaceContext)) {\n      return new NamespaceContext();\n    }\n    this.scopes = [];\n    this.pushContext();\n    this.prefixCount = 0;\n  }\n\n  addNamespace = function(prefix, nsUri, localOnly) {\n    if (this.getNamespaceURI(prefix, localOnly) === nsUri) {\n      return false;\n    }\n    if (this.currentScope) {\n      this.currentScope.namespaces[prefix] = {\n        uri: nsUri,\n        prefix: prefix,\n        declared: false\n      };\n      return true;\n    }\n    return false;\n  }\n\n  pushContext = function() {\n    var scope = new NamespaceScope(this.currentScope);\n    this.scopes.push(scope);\n    this.currentScope = scope;\n    return scope;\n  }\n\n  popContext = function() {\n    var scope = this.scopes.pop();\n    if (scope) {\n      this.currentScope = scope.parent;\n    } else {\n      this.currentScope = null;\n    }\n    return scope;\n  }\n\n  getNamespaceURI = function(prefix, localOnly) {\n    return this.currentScope && this.currentScope.getNamespaceURI(prefix, localOnly);\n  }\n\n  getPrefix = function(nsUri, localOnly) {\n    return this.currentScope && this.currentScope.getPrefix(nsUri, localOnly);\n  }\n  \n  registerNamespace = function(nsUri) {\n    var prefix = this.getPrefix(nsUri);\n    if (prefix) {\n      // If the namespace has already mapped to a prefix\n      return prefix;\n    } else {\n      // Try to generate a unique namespace\n      while (true) {\n        prefix = 'ns' + (++this.prefixCount);\n        if (!this.getNamespaceURI(prefix)) {\n          // The prefix is not used\n          break;\n        }\n      }\n    }\n    this.addNamespace(prefix, nsUri, true);\n    return prefix;\n  }\n\n  declareNamespace = function(prefix, nsUri) {\n    if (this.currentScope) {\n      var mapping = this.currentScope.getNamespaceMapping(prefix);\n      if (mapping && mapping.uri === nsUri && mapping.declared) {\n        return false;\n      }\n      this.currentScope.namespaces[prefix] = {\n        uri: nsUri,\n        prefix: prefix,\n        declared: true\n      };\n      return true;\n    }\n    return false;\n  }\n}\n\n/**\n * Scope for XML namespaces\n * @param [parent] Parent scope\n * \n */\n// export function NamespaceScope(parent) {\n//   if (!(this instanceof NamespaceScope)) {\n//     return NamespaceScope(parent);\n//   }\n//   this.parent = parent;\n//   this.namespaces = {};\n// }\n\n// /**\n//  * Namespace context that manages hierarchical scopes\n//  *  {NamespaceContext}\n//  */\n// export function NamespaceContext() {\n//   if (!(this instanceof NamespaceContext)) {\n//     return NamespaceContext();\n//   }\n//   this.scopes = [];\n//   this.pushContext();\n//   this.prefixCount = 0;\n// }\n\n// /**\n//  * Look up the namespace URI by prefix\n//  * @param  prefix Namespace prefix\n//  * @param  [localOnly] Search current scope only\n//  *   Namespace URI\n//  */\n// NamespaceScope.prototype.getNamespaceURI = function(prefix, localOnly) {\n//   switch (prefix) {\n//     case 'xml':\n//       return 'http://www.w3.org/XML/1998/namespace';\n//     case 'xmlns':\n//       return 'http://www.w3.org/2000/xmlns/';\n//     default:\n//       var nsUri = this.namespaces[prefix];\n//       /*jshint -W116 */\n//       if (nsUri != null) {\n//         return nsUri.uri;\n//       } else if (!localOnly && this.parent) {\n//         return this.parent.getNamespaceURI(prefix);\n//       } else {\n//         return null;\n//       }\n//   }\n// };\n\n// NamespaceScope.prototype.getNamespaceMapping = function(prefix) {\n//   switch (prefix) {\n//     case 'xml':\n//       return {\n//         uri: 'http://www.w3.org/XML/1998/namespace',\n//         prefix: 'xml',\n//         declared: true\n//       };\n//     case 'xmlns':\n//       return {\n//         uri: 'http://www.w3.org/2000/xmlns/',\n//         prefix: 'xmlns',\n//         declared: true\n//       };\n//     default:\n//       var mapping = this.namespaces[prefix];\n//       /*jshint -W116 */\n//       if (mapping != null) {\n//         return mapping;\n//       } else if (this.parent) {\n//         return this.parent.getNamespaceMapping(prefix);\n//       } else {\n//         return null;\n//       }\n//   }\n// };\n\n// /**\n//  * Look up the namespace prefix by URI\n//  * @param  nsUri Namespace URI\n//  * @param  [localOnly] Search current scope only\n//  *   Namespace prefix\n//  */\n// NamespaceScope.prototype.getPrefix = function(nsUri, localOnly) {\n//   switch (nsUri) {\n//     case 'http://www.w3.org/XML/1998/namespace':\n//       return 'xml';\n//     case 'http://www.w3.org/2000/xmlns/':\n//       return 'xmlns';\n//     default:\n//       for (var p in this.namespaces) {\n//         if (this.namespaces[p].uri === nsUri) {\n//           return p;\n//         }\n//       }\n//       if (!localOnly && this.parent) {\n//         return this.parent.getPrefix(nsUri);\n//       } else {\n//         return null;\n//       }\n//   }\n// };\n\n// /**\n//  * Add a prefix/URI namespace mapping\n//  * @param  prefix Namespace prefix\n//  * @param  nsUri Namespace URI\n//  * @param  [localOnly] Search current scope only\n//  *  {boolean} true if the mapping is added or false if the mapping\n//  * already exists\n//  */\n// NamespaceContext.prototype.addNamespace = function(prefix, nsUri, localOnly) {\n//   if (this.getNamespaceURI(prefix, localOnly) === nsUri) {\n//     return false;\n//   }\n//   if (this.currentScope) {\n//     this.currentScope.namespaces[prefix] = {\n//       uri: nsUri,\n//       prefix: prefix,\n//       declared: false\n//     };\n//     return true;\n//   }\n//   return false;\n// };\n\n// /**\n//  * Push a scope into the context\n//  *  The current scope\n//  */\n// NamespaceContext.prototype.pushContext = function() {\n//   var scope = NamespaceScope(this.currentScope);\n//   this.scopes.push(scope);\n//   this.currentScope = scope;\n//   return scope;\n// };\n\n// /**\n//  * Pop a scope out of the context\n//  *   The removed scope\n//  */\n// NamespaceContext.prototype.popContext = function() {\n//   var scope = this.scopes.pop();\n//   if (scope) {\n//     this.currentScope = scope.parent;\n//   } else {\n//     this.currentScope = null;\n//   }\n//   return scope;\n// };\n\n// /**\n//  * Look up the namespace URI by prefix\n//  * @param  prefix Namespace prefix\n//  * @param  [localOnly] Search current scope only\n//  *   Namespace URI\n//  */\n// NamespaceContext.prototype.getNamespaceURI = function(prefix, localOnly) {\n//   return this.currentScope && this.currentScope.getNamespaceURI(prefix, localOnly);\n// };\n\n// /**\n//  * Look up the namespace prefix by URI\n//  * @param  nsURI Namespace URI\n//  * @param  [localOnly] Search current scope only\n//  *   Namespace prefix\n//  */\n// NamespaceContext.prototype.getPrefix = function(nsUri, localOnly) {\n//   return this.currentScope && this.currentScope.getPrefix(nsUri, localOnly);\n// };\n\n// /**\n//  * Register a namespace\n//  * @param  nsUri Namespace URI\n//  *   The matching or generated namespace prefix\n//  */\n// NamespaceContext.prototype.registerNamespace = function(nsUri) {\n//   var prefix = this.getPrefix(nsUri);\n//   if (prefix) {\n//     // If the namespace has already mapped to a prefix\n//     return prefix;\n//   } else {\n//     // Try to generate a unique namespace\n//     while (true) {\n//       prefix = 'ns' + (++this.prefixCount);\n//       if (!this.getNamespaceURI(prefix)) {\n//         // The prefix is not used\n//         break;\n//       }\n//     }\n//   }\n//   this.addNamespace(prefix, nsUri, true);\n//   return prefix;\n// };\n\n// /**\n//  * Declare a namespace prefix/uri mapping\n//  * @param  prefix Namespace prefix\n//  * @param  nsUri Namespace URI\n//  *   true if the declaration is created\n//  */\n// NamespaceContext.prototype.declareNamespace = function(prefix, nsUri) {\n//   if (this.currentScope) {\n//     var mapping = this.currentScope.getNamespaceMapping(prefix);\n//     if (mapping && mapping.uri === nsUri && mapping.declared) {\n//       return false;\n//     }\n//     this.currentScope.namespaces[prefix] = {\n//       uri: nsUri,\n//       prefix: prefix,\n//       declared: true\n//     };\n//     return true;\n//   }\n//   return false;\n// };\n","import sha1 from 'crypto-js/sha1';\nimport Base64 from 'crypto-js/enc-base64';\nimport { Buffer } from 'buffer';\n\nexport const passwordDigest = function passwordDigest(nonce, created, password) {\n  const rawNonce = new Buffer(nonce || '', 'base64').toString('binary');\n  return Base64.stringify(sha1(rawNonce + created + password, ''));\n};\n\nexport const TNS_PREFIX = '__tns__'; // Prefix for targetNamespace\n\n/**\n * Find a key from an object based on the value\n * @param  Namespace prefix/uri mapping\n * @param  nsURI value\n * @returns  The matching key\n */\nexport const findPrefix = function(xmlnsMapping, nsURI) {\n  for (const n in xmlnsMapping) {\n    if (n === TNS_PREFIX) { continue; }\n    if (xmlnsMapping[n] === nsURI) {\n      return n;\n    }\n  }\n};\n","/*\n * Copyright (c) 2011 Vinay Pulim <vinay@milewise.com>\n * MIT Licensed\n *\n */\n/*jshint proto:true*/\n\n\"use strict\";\n\nimport * as sax from 'sax';\nimport { HttpClient } from '@angular/common/http';\nimport { NamespaceContext }  from './nscontext';\nimport * as _ from 'lodash';\nimport * as utils from './utils';\nimport * as url from 'url';\nimport { ok as assert } from 'assert';\n\nconst stripBom = (x: string): string => {\n  // Catches EFBBBF (UTF-8 BOM) because the buffer-to-string\n  // conversion translates it to FEFF (UTF-16 BOM)\n  if (x.charCodeAt(0) === 0xFEFF) {\n    return x.slice(1);\n  }\n\n  return x;\n}\n\n\n\n\nlet TNS_PREFIX = utils.TNS_PREFIX;\nlet findPrefix = utils.findPrefix;\n\nlet Primitives = {\n  string: 1,\n  boolean: 1,\n  decimal: 1,\n  float: 1,\n  double: 1,\n  anyType: 1,\n  byte: 1,\n  int: 1,\n  long: 1,\n  short: 1,\n  negativeInteger: 1,\n  nonNegativeInteger: 1,\n  positiveInteger: 1,\n  nonPositiveInteger: 1,\n  unsignedByte: 1,\n  unsignedInt: 1,\n  unsignedLong: 1,\n  unsignedShort: 1,\n  duration: 0,\n  dateTime: 0,\n  time: 0,\n  date: 0,\n  gYearMonth: 0,\n  gYear: 0,\n  gMonthDay: 0,\n  gDay: 0,\n  gMonth: 0,\n  hexBinary: 0,\n  base64Binary: 0,\n  anyURI: 0,\n  QName: 0,\n  NOTATION: 0\n};\n\nfunction splitQName(nsName) {\n  let i = typeof nsName === 'string' ? nsName.indexOf(':') : -1;\n  return i < 0 ? { prefix: TNS_PREFIX, name: nsName } :\n    { prefix: nsName.substring(0, i), name: nsName.substring(i + 1) };\n}\n\nfunction xmlEscape(obj) {\n  if (typeof (obj) === 'string') {\n    if (obj.substr(0, 9) === '<![CDATA[' && obj.substr(-3) === \"]]>\") {\n      return obj;\n    }\n    return obj\n      .replace(/&/g, '&amp;')\n      .replace(/</g, '&lt;')\n      .replace(/>/g, '&gt;')\n      .replace(/\"/g, '&quot;')\n      .replace(/'/g, '&apos;');\n  }\n\n  return obj;\n}\n\nlet trimLeft = /^[\\s\\xA0]+/;\nlet trimRight = /[\\s\\xA0]+$/;\n\nfunction trim(text) {\n  return text.replace(trimLeft, '').replace(trimRight, '');\n}\n\nfunction deepMerge(destination, source) {\n  return _.mergeWith(destination || {}, source, function (a, b) {\n    return _.isArray(a) ? a.concat(b) : undefined;\n  });\n}\n\nlet Element: any = function (nsName, attrs, options) {\n  let parts = splitQName(nsName);\n\n  this.nsName = nsName;\n  this.prefix = parts.prefix;\n  this.name = parts.name;\n  this.children = [];\n  this.xmlns = {};\n\n  this._initializeOptions(options);\n\n  for (let key in attrs) {\n    let match = /^xmlns:?(.*)$/.exec(key);\n    if (match) {\n      this.xmlns[match[1] ? match[1] : TNS_PREFIX] = attrs[key];\n    }\n    else {\n      if (key === 'value') {\n        this[this.valueKey] = attrs[key];\n      } else {\n        this['$' + key] = attrs[key];\n      }\n    }\n  }\n  if (this.$targetNamespace !== undefined) {\n    // Add targetNamespace to the mapping\n    this.xmlns[TNS_PREFIX] = this.$targetNamespace;\n  }\n};\n\nElement.prototype._initializeOptions = function (options) {\n  if (options) {\n    this.valueKey = options.valueKey || '$value';\n    this.xmlKey = options.xmlKey || '$xml';\n    this.ignoredNamespaces = options.ignoredNamespaces || [];\n  } else {\n    this.valueKey = '$value';\n    this.xmlKey = '$xml';\n    this.ignoredNamespaces = [];\n  }\n};\n\nElement.prototype.deleteFixedAttrs = function () {\n  this.children && this.children.length === 0 && delete this.children;\n  this.xmlns && Object.keys(this.xmlns).length === 0 && delete this.xmlns;\n  delete this.nsName;\n  delete this.prefix;\n  delete this.name;\n};\n\nElement.prototype.allowedChildren = [];\n\nElement.prototype.startElement = function (stack, nsName, attrs, options) {\n  if (!this.allowedChildren) {\n    return;\n  }\n\n  let ChildClass = this.allowedChildren[splitQName(nsName).name],\n    element = null;\n\n  if (ChildClass) {\n    stack.push(new ChildClass(nsName, attrs, options));\n  }\n  else {\n    this.unexpected(nsName);\n  }\n\n};\n\nElement.prototype.endElement = function (stack, nsName) {\n  if (this.nsName === nsName) {\n    if (stack.length < 2)\n      return;\n    let parent = stack[stack.length - 2];\n    if (this !== stack[0]) {\n      _.defaultsDeep(stack[0].xmlns, this.xmlns);\n      // delete this.xmlns;\n      parent.children.push(this);\n      parent.addChild(this);\n    }\n    stack.pop();\n  }\n};\n\nElement.prototype.addChild = function (child) {\n  return;\n};\n\nElement.prototype.unexpected = function (name) {\n  throw new Error('Found unexpected element (' + name + ') inside ' + this.nsName);\n};\n\nElement.prototype.description = function (definitions) {\n  return this.$name || this.name;\n};\n\nElement.prototype.init = function () {\n};\n\nElement.createSubClass = function () {\n  let root = this;\n  let subElement = function () {\n    root.apply(this, arguments);\n    this.init();\n  };\n  // inherits(subElement, root);\n  subElement.prototype.__proto__ = root.prototype;\n  return subElement;\n};\n\n\nlet ElementElement = Element.createSubClass();\nlet AnyElement = Element.createSubClass();\nlet InputElement = Element.createSubClass();\nlet OutputElement = Element.createSubClass();\nlet SimpleTypeElement = Element.createSubClass();\nlet RestrictionElement = Element.createSubClass();\nlet ExtensionElement = Element.createSubClass();\nlet ChoiceElement = Element.createSubClass();\nlet EnumerationElement = Element.createSubClass();\nlet ComplexTypeElement = Element.createSubClass();\nlet ComplexContentElement = Element.createSubClass();\nlet SimpleContentElement = Element.createSubClass();\nlet SequenceElement = Element.createSubClass();\nlet AllElement = Element.createSubClass();\nlet MessageElement = Element.createSubClass();\nlet DocumentationElement = Element.createSubClass();\n\nlet SchemaElement = Element.createSubClass();\nlet TypesElement = Element.createSubClass();\nlet OperationElement = Element.createSubClass();\nlet PortTypeElement = Element.createSubClass();\nlet BindingElement = Element.createSubClass();\nlet PortElement = Element.createSubClass();\nlet ServiceElement = Element.createSubClass();\nlet DefinitionsElement = Element.createSubClass();\n\nlet ElementTypeMap = {\n  types: [TypesElement, 'schema documentation'],\n  schema: [SchemaElement, 'element complexType simpleType include import'],\n  element: [ElementElement, 'annotation complexType'],\n  any: [AnyElement, ''],\n  simpleType: [SimpleTypeElement, 'restriction'],\n  restriction: [RestrictionElement, 'enumeration all choice sequence'],\n  extension: [ExtensionElement, 'all sequence choice'],\n  choice: [ChoiceElement, 'element sequence choice any'],\n  // group: [GroupElement, 'element group'],\n  enumeration: [EnumerationElement, ''],\n  complexType: [ComplexTypeElement, 'annotation sequence all complexContent simpleContent choice'],\n  complexContent: [ComplexContentElement, 'extension'],\n  simpleContent: [SimpleContentElement, 'extension'],\n  sequence: [SequenceElement, 'element sequence choice any'],\n  all: [AllElement, 'element choice'],\n\n  service: [ServiceElement, 'port documentation'],\n  port: [PortElement, 'address documentation'],\n  binding: [BindingElement, '_binding SecuritySpec operation documentation'],\n  portType: [PortTypeElement, 'operation documentation'],\n  message: [MessageElement, 'part documentation'],\n  operation: [OperationElement, 'documentation input output fault _operation'],\n  input: [InputElement, 'body SecuritySpecRef documentation header'],\n  output: [OutputElement, 'body SecuritySpecRef documentation header'],\n  fault: [Element, '_fault documentation'],\n  definitions: [DefinitionsElement, 'types message portType binding service import documentation'],\n  documentation: [DocumentationElement, '']\n};\n\nfunction mapElementTypes(types) {\n  let rtn = {};\n  types = types.split(' ');\n  types.forEach(function (type) {\n    rtn[type.replace(/^_/, '')] = (ElementTypeMap[type] || [Element])[0];\n  });\n  return rtn;\n}\n\nfor (let n in ElementTypeMap) {\n  let v = ElementTypeMap[n];\n  v[0].prototype.allowedChildren = mapElementTypes(v[1]);\n}\n\nMessageElement.prototype.init = function () {\n  this.element = null;\n  this.parts = null;\n};\n\nSchemaElement.prototype.init = function () {\n  this.complexTypes = {};\n  this.types = {};\n  this.elements = {};\n  this.includes = [];\n};\n\nTypesElement.prototype.init = function () {\n  this.schemas = {};\n};\n\nOperationElement.prototype.init = function () {\n  this.input = null;\n  this.output = null;\n  this.inputSoap = null;\n  this.outputSoap = null;\n  this.style = '';\n  this.soapAction = '';\n};\n\nPortTypeElement.prototype.init = function () {\n  this.methods = {};\n};\n\nBindingElement.prototype.init = function () {\n  this.transport = '';\n  this.style = '';\n  this.methods = {};\n};\n\nPortElement.prototype.init = function () {\n  this.location = null;\n};\n\nServiceElement.prototype.init = function () {\n  this.ports = {};\n};\n\nDefinitionsElement.prototype.init = function () {\n  if (this.name !== 'definitions') this.unexpected(this.nsName);\n  this.messages = {};\n  this.portTypes = {};\n  this.bindings = {};\n  this.services = {};\n  this.schemas = {};\n};\n\nDocumentationElement.prototype.init = function () {\n};\n\nSchemaElement.prototype.merge = function (source) {\n  assert(source instanceof SchemaElement);\n  if (this.$targetNamespace === source.$targetNamespace) {\n    _.merge(this.complexTypes, source.complexTypes);\n    _.merge(this.types, source.types);\n    _.merge(this.elements, source.elements);\n    _.merge(this.xmlns, source.xmlns);\n  }\n  return this;\n};\n\n\nSchemaElement.prototype.addChild = function (child) {\n  if (child.$name in Primitives)\n    return;\n  if (child.name === 'include' || child.name === 'import') {\n    let location = child.$schemaLocation || child.$location;\n    if (location) {\n      this.includes.push({\n        namespace: child.$namespace || child.$targetNamespace || this.$targetNamespace,\n        location: location\n      });\n    }\n  }\n  else if (child.name === 'complexType') {\n    this.complexTypes[child.$name] = child;\n  }\n  else if (child.name === 'element') {\n    this.elements[child.$name] = child;\n  }\n  else if (child.$name) {\n    this.types[child.$name] = child;\n  }\n  this.children.pop();\n  // child.deleteFixedAttrs();\n};\n//fix#325\nTypesElement.prototype.addChild = function (child) {\n  assert(child instanceof SchemaElement);\n\n  let targetNamespace = child.$targetNamespace;\n\n  if (!this.schemas.hasOwnProperty(targetNamespace)) {\n    this.schemas[targetNamespace] = child;\n  } else {\n    console.error('Target-Namespace \"' + targetNamespace + '\" already in use by another Schema!');\n  }\n};\n\nInputElement.prototype.addChild = function (child) {\n  if (child.name === 'body') {\n    this.use = child.$use;\n    if (this.use === 'encoded') {\n      this.encodingStyle = child.$encodingStyle;\n    }\n    this.children.pop();\n  }\n};\n\nOutputElement.prototype.addChild = function (child) {\n  if (child.name === 'body') {\n    this.use = child.$use;\n    if (this.use === 'encoded') {\n      this.encodingStyle = child.$encodingStyle;\n    }\n    this.children.pop();\n  }\n};\n\nOperationElement.prototype.addChild = function (child) {\n  if (child.name === 'operation') {\n    this.soapAction = child.$soapAction || '';\n    this.style = child.$style || '';\n    this.children.pop();\n  }\n};\n\nBindingElement.prototype.addChild = function (child) {\n  if (child.name === 'binding') {\n    this.transport = child.$transport;\n    this.style = child.$style;\n    this.children.pop();\n  }\n};\n\nPortElement.prototype.addChild = function (child) {\n  if (child.name === 'address' && typeof (child.$location) !== 'undefined') {\n    this.location = child.$location;\n  }\n};\n\nDefinitionsElement.prototype.addChild = function (child) {\n  let self = this;\n  if (child instanceof TypesElement) {\n    // Merge types.schemas into definitions.schemas\n    _.merge(self.schemas, child.schemas);\n  }\n  else if (child instanceof MessageElement) {\n    self.messages[child.$name] = child;\n  }\n  else if (child.name === 'import') {\n    self.schemas[child.$namespace] = new SchemaElement(child.$namespace, {});\n    self.schemas[child.$namespace].addChild(child);\n  }\n  else if (child instanceof PortTypeElement) {\n    self.portTypes[child.$name] = child;\n  }\n  else if (child instanceof BindingElement) {\n    if (child.transport === 'http://schemas.xmlsoap.org/soap/http' ||\n      child.transport === 'http://www.w3.org/2003/05/soap/bindings/HTTP/')\n      self.bindings[child.$name] = child;\n  }\n  else if (child instanceof ServiceElement) {\n    self.services[child.$name] = child;\n  }\n  else if (child instanceof DocumentationElement) {\n  }\n  this.children.pop();\n};\n\nMessageElement.prototype.postProcess = function (definitions) {\n  let part = null;\n  let child = undefined;\n  let children = this.children || [];\n  let ns = undefined;\n  let nsName = undefined;\n  let i = undefined;\n  let type = undefined;\n\n  for (i in children) {\n    if ((child = children[i]).name === 'part') {\n      part = child;\n      break;\n    }\n  }\n\n  if (!part) {\n    return;\n  }\n\n  if (part.$element) {\n    let lookupTypes = [],\n      elementChildren;\n\n    delete this.parts;\n\n    nsName = splitQName(part.$element);\n    ns = nsName.prefix;\n    let schema = definitions.schemas[definitions.xmlns[ns]];\n    this.element = schema.elements[nsName.name];\n    if (!this.element) {\n      // debug(nsName.name + \" is not present in wsdl and cannot be processed correctly.\");\n      return;\n    }\n    this.element.targetNSAlias = ns;\n    this.element.targetNamespace = definitions.xmlns[ns];\n\n    // set the optional $lookupType to be used within `client#_invoke()` when\n    // calling `wsdl#objectToDocumentXML()\n    this.element.$lookupType = part.$element;\n\n    elementChildren = this.element.children;\n\n    // get all nested lookup types (only complex types are followed)\n    if (elementChildren.length > 0) {\n      for (i = 0; i < elementChildren.length; i++) {\n        lookupTypes.push(this._getNestedLookupTypeString(elementChildren[i]));\n      }\n    }\n\n    // if nested lookup types where found, prepare them for furter usage\n    if (lookupTypes.length > 0) {\n      lookupTypes = lookupTypes.\n        join('_').\n        split('_').\n        filter(function removeEmptyLookupTypes(type) {\n          return type !== '^';\n        });\n\n      let schemaXmlns = definitions.schemas[this.element.targetNamespace].xmlns;\n\n      for (i = 0; i < lookupTypes.length; i++) {\n        lookupTypes[i] = this._createLookupTypeObject(lookupTypes[i], schemaXmlns);\n      }\n    }\n\n    this.element.$lookupTypes = lookupTypes;\n\n    if (this.element.$type) {\n      type = splitQName(this.element.$type);\n      let typeNs = schema.xmlns && schema.xmlns[type.prefix] || definitions.xmlns[type.prefix];\n\n      if (typeNs) {\n        if (type.name in Primitives) {\n          // this.element = this.element.$type;\n        }\n        else {\n          // first check local mapping of ns alias to namespace\n          schema = definitions.schemas[typeNs];\n          let ctype = schema.complexTypes[type.name] || schema.types[type.name] || schema.elements[type.name];\n\n\n          if (ctype) {\n            this.parts = ctype.description(definitions, schema.xmlns);\n          }\n        }\n      }\n    }\n    else {\n      let method = this.element.description(definitions, schema.xmlns);\n      this.parts = method[nsName.name];\n    }\n\n\n    this.children.splice(0, 1);\n  } else {\n    // rpc encoding\n    this.parts = {};\n    delete this.element;\n    for (i = 0; part = this.children[i]; i++) {\n      if (part.name === 'documentation') {\n        // <wsdl:documentation can be present under <wsdl:message>\n        continue;\n      }\n      assert(part.name === 'part', 'Expected part element');\n      nsName = splitQName(part.$type);\n      ns = definitions.xmlns[nsName.prefix];\n      type = nsName.name;\n      let schemaDefinition = definitions.schemas[ns];\n      if (typeof schemaDefinition !== 'undefined') {\n        this.parts[part.$name] = definitions.schemas[ns].types[type] || definitions.schemas[ns].complexTypes[type];\n      } else {\n        this.parts[part.$name] = part.$type;\n      }\n\n      if (typeof this.parts[part.$name] === 'object') {\n        this.parts[part.$name].prefix = nsName.prefix;\n        this.parts[part.$name].xmlns = ns;\n      }\n\n      this.children.splice(i--, 1);\n    }\n  }\n  this.deleteFixedAttrs();\n};\n\n/**\n * Takes a given namespaced String(for example: 'alias:property') and creates a lookupType\n * object for further use in as first (lookup) `parameterTypeObj` within the `objectToXML`\n * method and provides an entry point for the already existing code in `findChildSchemaObject`.\n *\n * @method _createLookupTypeObject\n * @param {String}            nsString          The NS String (for example \"alias:type\").\n * @param {Object}            xmlns       The fully parsed `wsdl` definitions object (including all schemas).\n * @returns {Object}\n * @private\n */\nMessageElement.prototype._createLookupTypeObject = function (nsString, xmlns) {\n  let splittedNSString = splitQName(nsString),\n    nsAlias = splittedNSString.prefix,\n    splittedName = splittedNSString.name.split('#'),\n    type = splittedName[0],\n    name = splittedName[1],\n    lookupTypeObj: any = {};\n\n  lookupTypeObj.$namespace = xmlns[nsAlias];\n  lookupTypeObj.$type = nsAlias + ':' + type;\n  lookupTypeObj.$name = name;\n\n  return lookupTypeObj;\n};\n\n/**\n * Iterates through the element and every nested child to find any defined `$type`\n * property and returns it in a underscore ('_') separated String (using '^' as default\n * value if no `$type` property was found).\n *\n * @method _getNestedLookupTypeString\n * @param {Object}            element         The element which (probably) contains nested `$type` values.\n * @returns {String}\n * @private\n */\nMessageElement.prototype._getNestedLookupTypeString = function (element) {\n  let resolvedType = '^',\n    excluded = this.ignoredNamespaces.concat('xs'); // do not process $type values wich start with\n\n  if (element.hasOwnProperty('$type') && typeof element.$type === 'string') {\n    if (excluded.indexOf(element.$type.split(':')[0]) === -1) {\n      resolvedType += ('_' + element.$type + '#' + element.$name);\n    }\n  }\n\n  if (element.children.length > 0) {\n    let self = this;\n\n    element.children.forEach(function (child) {\n      let resolvedChildType = self._getNestedLookupTypeString(child).replace(/\\^_/, '');\n\n      if (resolvedChildType && typeof resolvedChildType === 'string') {\n        resolvedType += ('_' + resolvedChildType);\n      }\n    });\n  }\n\n  return resolvedType;\n};\n\nOperationElement.prototype.postProcess = function (definitions, tag) {\n  let children = this.children;\n  for (let i = 0, child; child = children[i]; i++) {\n    if (child.name !== 'input' && child.name !== 'output')\n      continue;\n    if (tag === 'binding') {\n      this[child.name] = child;\n      children.splice(i--, 1);\n      continue;\n    }\n    let messageName = splitQName(child.$message).name;\n    let message = definitions.messages[messageName];\n    message.postProcess(definitions);\n    if (message.element) {\n      definitions.messages[message.element.$name] = message;\n      this[child.name] = message.element;\n    }\n    else {\n      this[child.name] = message;\n    }\n    children.splice(i--, 1);\n  }\n  this.deleteFixedAttrs();\n};\n\nPortTypeElement.prototype.postProcess = function (definitions) {\n  let children = this.children;\n  if (typeof children === 'undefined')\n    return;\n  for (let i = 0, child; child = children[i]; i++) {\n    if (child.name !== 'operation')\n      continue;\n    child.postProcess(definitions, 'portType');\n    this.methods[child.$name] = child;\n    children.splice(i--, 1);\n  }\n  delete this.$name;\n  this.deleteFixedAttrs();\n};\n\nBindingElement.prototype.postProcess = function (definitions) {\n  let type = splitQName(this.$type).name,\n    portType = definitions.portTypes[type],\n    style = this.style,\n    children = this.children;\n  if (portType) {\n    portType.postProcess(definitions);\n    this.methods = portType.methods;\n\n    for (let i = 0, child; child = children[i]; i++) {\n      if (child.name !== 'operation')\n        continue;\n      child.postProcess(definitions, 'binding');\n      children.splice(i--, 1);\n      child.style || (child.style = style);\n      let method = this.methods[child.$name];\n\n      if (method) {\n        method.style = child.style;\n        method.soapAction = child.soapAction;\n        method.inputSoap = child.input || null;\n        method.outputSoap = child.output || null;\n        method.inputSoap && method.inputSoap.deleteFixedAttrs();\n        method.outputSoap && method.outputSoap.deleteFixedAttrs();\n      }\n    }\n  }\n  delete this.$name;\n  delete this.$type;\n  this.deleteFixedAttrs();\n};\n\nServiceElement.prototype.postProcess = function (definitions) {\n  let children = this.children,\n    bindings = definitions.bindings;\n  if (children && children.length > 0) {\n    for (let i = 0, child; child = children[i]; i++) {\n      if (child.name !== 'port')\n        continue;\n      let bindingName = splitQName(child.$binding).name;\n      let binding = bindings[bindingName];\n      if (binding) {\n        binding.postProcess(definitions);\n        this.ports[child.$name] = {\n          location: child.location,\n          binding: binding\n        };\n        children.splice(i--, 1);\n      }\n    }\n  }\n  delete this.$name;\n  this.deleteFixedAttrs();\n};\n\n\nSimpleTypeElement.prototype.description = function (definitions) {\n  let children = this.children;\n  for (let i = 0, child; child = children[i]; i++) {\n    if (child instanceof RestrictionElement)\n      return this.$name + \"|\" + child.description();\n  }\n  return {};\n};\n\nRestrictionElement.prototype.description = function (definitions, xmlns) {\n  let children = this.children;\n  let desc;\n  for (let i = 0, child; child = children[i]; i++) {\n    if (child instanceof SequenceElement ||\n      child instanceof ChoiceElement) {\n      desc = child.description(definitions, xmlns);\n      break;\n    }\n  }\n  if (desc && this.$base) {\n    let type = splitQName(this.$base),\n      typeName = type.name,\n      ns = xmlns && xmlns[type.prefix] || definitions.xmlns[type.prefix],\n      schema = definitions.schemas[ns],\n      typeElement = schema && (schema.complexTypes[typeName] || schema.types[typeName] || schema.elements[typeName]);\n\n    desc.getBase = function () {\n      return typeElement.description(definitions, schema.xmlns);\n    };\n    return desc;\n  }\n\n  // then simple element\n  let base = this.$base ? this.$base + \"|\" : \"\";\n  return base + this.children.map(function (child) {\n    return child.description();\n  }).join(\",\");\n};\n\nExtensionElement.prototype.description = function (definitions, xmlns) {\n  let children = this.children;\n  let desc = {};\n  for (let i = 0, child; child = children[i]; i++) {\n    if (child instanceof SequenceElement ||\n      child instanceof ChoiceElement) {\n      desc = child.description(definitions, xmlns);\n    }\n  }\n  if (this.$base) {\n    let type = splitQName(this.$base),\n      typeName = type.name,\n      ns = xmlns && xmlns[type.prefix] || definitions.xmlns[type.prefix],\n      schema = definitions.schemas[ns];\n\n    if (typeName in Primitives) {\n      return this.$base;\n    }\n    else {\n      let typeElement = schema && (schema.complexTypes[typeName] ||\n        schema.types[typeName] || schema.elements[typeName]);\n\n      if (typeElement) {\n        let base = typeElement.description(definitions, schema.xmlns);\n        desc = _.defaultsDeep(base, desc);\n      }\n    }\n  }\n  return desc;\n};\n\nEnumerationElement.prototype.description = function () {\n  return this[this.valueKey];\n};\n\nComplexTypeElement.prototype.description = function (definitions, xmlns) {\n  let children = this.children || [];\n  for (let i = 0, child; child = children[i]; i++) {\n    if (child instanceof ChoiceElement ||\n      child instanceof SequenceElement ||\n      child instanceof AllElement ||\n      child instanceof SimpleContentElement ||\n      child instanceof ComplexContentElement) {\n\n      return child.description(definitions, xmlns);\n    }\n  }\n  return {};\n};\n\nComplexContentElement.prototype.description = function (definitions, xmlns) {\n  let children = this.children;\n  for (let i = 0, child; child = children[i]; i++) {\n    if (child instanceof ExtensionElement) {\n      return child.description(definitions, xmlns);\n    }\n  }\n  return {};\n};\n\nSimpleContentElement.prototype.description = function (definitions, xmlns) {\n  let children = this.children;\n  for (let i = 0, child; child = children[i]; i++) {\n    if (child instanceof ExtensionElement) {\n      return child.description(definitions, xmlns);\n    }\n  }\n  return {};\n};\n\nElementElement.prototype.description = function (definitions, xmlns) {\n  let element = {},\n    name = this.$name;\n  let isMany = !this.$maxOccurs ? false : (isNaN(this.$maxOccurs) ? (this.$maxOccurs === 'unbounded') : (this.$maxOccurs > 1));\n  if (this.$minOccurs !== this.$maxOccurs && isMany) {\n    name += '[]';\n  }\n\n  if (xmlns && xmlns[TNS_PREFIX]) {\n    this.$targetNamespace = xmlns[TNS_PREFIX];\n  }\n  let type = this.$type || this.$ref;\n  if (type) {\n    type = splitQName(type);\n    let typeName = type.name,\n      ns = xmlns && xmlns[type.prefix] || definitions.xmlns[type.prefix],\n      schema = definitions.schemas[ns],\n      typeElement = schema && (this.$type ? schema.complexTypes[typeName] || schema.types[typeName] : schema.elements[typeName]);\n\n    if (ns && definitions.schemas[ns]) {\n      xmlns = definitions.schemas[ns].xmlns;\n    }\n\n    if (typeElement && !(typeName in Primitives)) {\n\n      if (!(typeName in definitions.descriptions.types)) {\n\n        let elem: any = {};\n        definitions.descriptions.types[typeName] = elem;\n        let description = typeElement.description(definitions, xmlns);\n        if (typeof description === 'string') {\n          elem = description;\n        }\n        else {\n          Object.keys(description).forEach(function (key) {\n            elem[key] = description[key];\n          });\n        }\n\n        if (this.$ref) {\n          element = elem;\n        }\n        else {\n          element[name] = elem;\n        }\n\n        if (typeof elem === 'object') {\n          elem.targetNSAlias = type.prefix;\n          elem.targetNamespace = ns;\n        }\n\n        definitions.descriptions.types[typeName] = elem;\n      }\n      else {\n        if (this.$ref) {\n          element = definitions.descriptions.types[typeName];\n        }\n        else {\n          element[name] = definitions.descriptions.types[typeName];\n        }\n      }\n\n    }\n    else {\n      element[name] = this.$type;\n    }\n  }\n  else {\n    let children = this.children;\n    element[name] = {};\n    for (let i = 0, child; child = children[i]; i++) {\n      if (child instanceof ComplexTypeElement) {\n        element[name] = child.description(definitions, xmlns);\n      }\n    }\n  }\n  return element;\n};\n\nAllElement.prototype.description =\n  SequenceElement.prototype.description = function (definitions, xmlns) {\n    let children = this.children;\n    let sequence = {};\n    for (let i = 0, child; child = children[i]; i++) {\n      if (child instanceof AnyElement) {\n        continue;\n      }\n      let description = child.description(definitions, xmlns);\n      for (let key in description) {\n        sequence[key] = description[key];\n      }\n    }\n    return sequence;\n  };\n\nChoiceElement.prototype.description = function (definitions, xmlns) {\n  let children = this.children;\n  let choice = {};\n  for (let i = 0, child; child = children[i]; i++) {\n    let description = child.description(definitions, xmlns);\n    for (let key in description) {\n      choice[key] = description[key];\n    }\n  }\n  return choice;\n};\n\nMessageElement.prototype.description = function (definitions) {\n  if (this.element) {\n    return this.element && this.element.description(definitions);\n  }\n  let desc = {};\n  desc[this.$name] = this.parts;\n  return desc;\n};\n\nPortTypeElement.prototype.description = function (definitions) {\n  let methods = {};\n  for (let name in this.methods) {\n    let method = this.methods[name];\n    methods[name] = method.description(definitions);\n  }\n  return methods;\n};\n\nOperationElement.prototype.description = function (definitions) {\n  let inputDesc = this.input ? this.input.description(definitions) : null;\n  let outputDesc = this.output ? this.output.description(definitions) : null;\n  return {\n    input: inputDesc && inputDesc[Object.keys(inputDesc)[0]],\n    output: outputDesc && outputDesc[Object.keys(outputDesc)[0]]\n  };\n};\n\nBindingElement.prototype.description = function (definitions) {\n  let methods = {};\n  for (let name in this.methods) {\n    let method = this.methods[name];\n    methods[name] = method.description(definitions);\n  }\n  return methods;\n};\n\nServiceElement.prototype.description = function (definitions) {\n  let ports = {};\n  for (let name in this.ports) {\n    let port = this.ports[name];\n    ports[name] = port.binding.description(definitions);\n  }\n  return ports;\n};\n\nexport let WSDL = function (definition, uri, options) {\n  let self = this,\n    fromFunc;\n\n  this.uri = uri;\n  this.callback = function () {\n  };\n  this._includesWsdl = [];\n\n  // initialize WSDL cache\n  this.WSDL_CACHE = (options || {}).WSDL_CACHE || {};\n\n  this._initializeOptions(options);\n\n  if (typeof definition === 'string') {\n    definition = stripBom(definition);\n    fromFunc = this._fromXML;\n  }\n  else if (typeof definition === 'object') {\n    fromFunc = this._fromServices;\n  }\n  else {\n    throw new Error('WSDL letructor takes either an XML string or service definition');\n  }\n\n  Promise.resolve(true).then(() => {\n    try {\n      fromFunc.call(self, definition);\n    } catch (e) {\n      return self.callback(e.message);\n    }\n\n    self.processIncludes().then(() => {\n      self.definitions.deleteFixedAttrs();\n      let services = self.services = self.definitions.services;\n      if (services) {\n        for (const name in services) {\n          services[name].postProcess(self.definitions);\n        }\n      }\n      let complexTypes = self.definitions.complexTypes;\n      if (complexTypes) {\n        for (const name in complexTypes) {\n          complexTypes[name].deleteFixedAttrs();\n        }\n      }\n\n      // for document style, for every binding, prepare input message element name to (methodName, output message element name) mapping\n      let bindings = self.definitions.bindings;\n      for (let bindingName in bindings) {\n        let binding = bindings[bindingName];\n        if (typeof binding.style === 'undefined') {\n          binding.style = 'document';\n        }\n        if (binding.style !== 'document')\n          continue;\n        let methods = binding.methods;\n        let topEls = binding.topElements = {};\n        for (let methodName in methods) {\n          if (methods[methodName].input) {\n            let inputName = methods[methodName].input.$name;\n            let outputName = \"\";\n            if (methods[methodName].output)\n              outputName = methods[methodName].output.$name;\n            topEls[inputName] = { \"methodName\": methodName, \"outputName\": outputName };\n          }\n        }\n      }\n\n      // prepare soap envelope xmlns definition string\n      self.xmlnsInEnvelope = self._xmlnsMap();\n      self.callback(null, self);\n    }).catch(err => self.callback(err));\n\n  });\n\n  // process.nextTick(function() {\n  //   try {\n  //     fromFunc.call(self, definition);\n  //   } catch (e) {\n  //     return self.callback(e.message);\n  //   }\n\n  //   self.processIncludes(function(err) {\n  //     let name;\n  //     if (err) {\n  //       return self.callback(err);\n  //     }\n\n  //     self.definitions.deleteFixedAttrs();\n  //     let services = self.services = self.definitions.services;\n  //     if (services) {\n  //       for (name in services) {\n  //         services[name].postProcess(self.definitions);\n  //       }\n  //     }\n  //     let complexTypes = self.definitions.complexTypes;\n  //     if (complexTypes) {\n  //       for (name in complexTypes) {\n  //         complexTypes[name].deleteFixedAttrs();\n  //       }\n  //     }\n\n  //     // for document style, for every binding, prepare input message element name to (methodName, output message element name) mapping\n  //     let bindings = self.definitions.bindings;\n  //     for (let bindingName in bindings) {\n  //       let binding = bindings[bindingName];\n  //       if (typeof binding.style === 'undefined') {\n  //         binding.style = 'document';\n  //       }\n  //       if (binding.style !== 'document')\n  //         continue;\n  //       let methods = binding.methods;\n  //       let topEls = binding.topElements = {};\n  //       for (let methodName in methods) {\n  //         if (methods[methodName].input) {\n  //           let inputName = methods[methodName].input.$name;\n  //           let outputName=\"\";\n  //           if(methods[methodName].output )\n  //             outputName = methods[methodName].output.$name;\n  //           topEls[inputName] = {\"methodName\": methodName, \"outputName\": outputName};\n  //         }\n  //       }\n  //     }\n\n  //     // prepare soap envelope xmlns definition string\n  //     self.xmlnsInEnvelope = self._xmlnsMap();\n\n  //     self.callback(err, self);\n  //   });\n\n  // });\n};\n\nWSDL.prototype.ignoredNamespaces = ['tns', 'targetNamespace', 'typedNamespace'];\n\nWSDL.prototype.ignoreBaseNameSpaces = false;\n\nWSDL.prototype.valueKey = '$value';\nWSDL.prototype.xmlKey = '$xml';\n\nWSDL.prototype._initializeOptions = function (options) {\n  this._originalIgnoredNamespaces = (options || {}).ignoredNamespaces;\n  this.options = {};\n\n  let ignoredNamespaces = options ? options.ignoredNamespaces : null;\n\n  if (ignoredNamespaces &&\n    (Array.isArray(ignoredNamespaces.namespaces) || typeof ignoredNamespaces.namespaces === 'string')) {\n    if (ignoredNamespaces.override) {\n      this.options.ignoredNamespaces = ignoredNamespaces.namespaces;\n    } else {\n      this.options.ignoredNamespaces = this.ignoredNamespaces.concat(ignoredNamespaces.namespaces);\n    }\n  } else {\n    this.options.ignoredNamespaces = this.ignoredNamespaces;\n  }\n\n  this.options.valueKey = options.valueKey || this.valueKey;\n  this.options.xmlKey = options.xmlKey || this.xmlKey;\n  if (options.escapeXML !== undefined) {\n    this.options.escapeXML = options.escapeXML;\n  } else {\n    this.options.escapeXML = true;\n  }\n  if (options.returnFault !== undefined) {\n    this.options.returnFault = options.returnFault;\n  } else {\n    this.options.returnFault = false;\n  }\n  this.options.handleNilAsNull = !!options.handleNilAsNull;\n\n  if (options.namespaceArrayElements !== undefined) {\n    this.options.namespaceArrayElements = options.namespaceArrayElements;\n  } else {\n    this.options.namespaceArrayElements = true;\n  }\n\n  // Allow any request headers to keep passing through\n  this.options.wsdl_headers = options.wsdl_headers;\n  this.options.wsdl_options = options.wsdl_options;\n  if (options.httpClient) {\n    this.options.httpClient = options.httpClient;\n  }\n\n  // The supplied request-object should be passed through\n  if (options.request) {\n    this.options.request = options.request;\n  }\n\n  let ignoreBaseNameSpaces = options ? options.ignoreBaseNameSpaces : null;\n  if (ignoreBaseNameSpaces !== null && typeof ignoreBaseNameSpaces !== 'undefined') {\n    this.options.ignoreBaseNameSpaces = ignoreBaseNameSpaces;\n  } else {\n    this.options.ignoreBaseNameSpaces = this.ignoreBaseNameSpaces;\n  }\n\n  // Works only in client\n  this.options.forceSoap12Headers = options.forceSoap12Headers;\n  this.options.customDeserializer = options.customDeserializer;\n\n  if (options.overrideRootElement !== undefined) {\n    this.options.overrideRootElement = options.overrideRootElement;\n  }\n\n  this.options.useEmptyTag = !!options.useEmptyTag;\n};\n\nWSDL.prototype.onReady = function (callback) {\n  if (callback)\n    this.callback = callback;\n};\n\nWSDL.prototype._processNextInclude = async function (includes) {\n  let self = this,\n    include = includes.shift(),\n    options;\n\n  if (!include)\n    return; // callback();\n\n  let includePath;\n  if (!/^https?:/.test(self.uri) && !/^https?:/.test(include.location)) {\n    // includePath = path.resolve(path.dirname(self.uri), include.location);\n  } else {\n    includePath = url.resolve(self.uri || '', include.location);\n  }\n\n  options = _.assign({}, this.options);\n  // follow supplied ignoredNamespaces option\n  options.ignoredNamespaces = this._originalIgnoredNamespaces || this.options.ignoredNamespaces;\n  options.WSDL_CACHE = this.WSDL_CACHE;\n\n  const wsdl = await open_wsdl_recursive(includePath, options)\n  self._includesWsdl.push(wsdl);\n\n  if (wsdl.definitions instanceof DefinitionsElement) {\n    _.mergeWith(self.definitions, wsdl.definitions, function (a, b) {\n      return (a instanceof SchemaElement) ? a.merge(b) : undefined;\n    });\n  } else {\n    self.definitions.schemas[include.namespace || wsdl.definitions.$targetNamespace] = deepMerge(self.definitions.schemas[include.namespace || wsdl.definitions.$targetNamespace], wsdl.definitions);\n  }\n\n  return self._processNextInclude(includes);\n\n  // open_wsdl_recursive(includePath, options, function(err, wsdl) {\n  //   if (err) {\n  //     return callback(err);\n  //   }\n\n  //   self._includesWsdl.push(wsdl);\n\n  //   if (wsdl.definitions instanceof DefinitionsElement) {\n  //     _.mergeWith(self.definitions, wsdl.definitions, function(a,b) {\n  //       return (a instanceof SchemaElement) ? a.merge(b) : undefined;\n  //     });\n  //   } else {\n  //     self.definitions.schemas[include.namespace || wsdl.definitions.$targetNamespace] = deepMerge(self.definitions.schemas[include.namespace || wsdl.definitions.$targetNamespace], wsdl.definitions);\n  //   }\n  //   self._processNextInclude(includes, function(err) {\n  //     callback(err);\n  //   });\n  // });\n};\n\nWSDL.prototype.processIncludes = async function () {\n  let schemas = this.definitions.schemas,\n    includes = [];\n\n  for (let ns in schemas) {\n    let schema = schemas[ns];\n    includes = includes.concat(schema.includes || []);\n  }\n\n  return this._processNextInclude(includes);\n};\n\nWSDL.prototype.describeServices = function () {\n  let services = {};\n  for (let name in this.services) {\n    let service = this.services[name];\n    services[name] = service.description(this.definitions);\n  }\n  return services;\n};\n\nWSDL.prototype.toXML = function () {\n  return this.xml || '';\n};\n\nWSDL.prototype.xmlToObject = function (xml, callback) {\n  let self = this;\n  let p = typeof callback === 'function' ? {} : sax.parser(true);\n  let objectName = null;\n  let root: any = {};\n  let schema = {\n    Envelope: {\n      Header: {\n        Security: {\n          UsernameToken: {\n            Username: 'string',\n            Password: 'string'\n          }\n        }\n      },\n      Body: {\n        Fault: {\n          faultcode: 'string',\n          faultstring: 'string',\n          detail: 'string'\n        }\n      }\n    }\n  };\n  let stack: any[] = [{ name: null, object: root, schema: schema }];\n  let xmlns: any = {};\n\n  let refs = {}, id; // {id:{hrefs:[],obj:}, ...}\n\n  p.onopentag = function (node) {\n    let nsName = node.name;\n    let attrs: any = node.attributes;\n    let name = splitQName(nsName).name,\n      attributeName,\n      top = stack[stack.length - 1],\n      topSchema = top.schema,\n      elementAttributes = {},\n      hasNonXmlnsAttribute = false,\n      hasNilAttribute = false,\n      obj = {};\n    let originalName = name;\n\n    if (!objectName && top.name === 'Body' && name !== 'Fault') {\n      let message = self.definitions.messages[name];\n      // Support RPC/literal messages where response body contains one element named\n      // after the operation + 'Response'. See http://www.w3.org/TR/wsdl#_names\n      if (!message) {\n        try {\n          // Determine if this is request or response\n          let isInput = false;\n          let isOutput = false;\n          if ((/Response$/).test(name)) {\n            isOutput = true;\n            name = name.replace(/Response$/, '');\n          } else if ((/Request$/).test(name)) {\n            isInput = true;\n            name = name.replace(/Request$/, '');\n          } else if ((/Solicit$/).test(name)) {\n            isInput = true;\n            name = name.replace(/Solicit$/, '');\n          }\n          // Look up the appropriate message as given in the portType's operations\n          let portTypes = self.definitions.portTypes;\n          let portTypeNames = Object.keys(portTypes);\n          // Currently this supports only one portType definition.\n          let portType = portTypes[portTypeNames[0]];\n          if (isInput) {\n            name = portType.methods[name].input.$name;\n          } else {\n            name = portType.methods[name].output.$name;\n          }\n          message = self.definitions.messages[name];\n          // 'cache' this alias to speed future lookups\n          self.definitions.messages[originalName] = self.definitions.messages[name];\n        } catch (e) {\n          if (self.options.returnFault) {\n            p.onerror(e);\n          }\n        }\n      }\n\n      topSchema = message.description(self.definitions);\n      objectName = originalName;\n    }\n\n    if (attrs.href) {\n      id = attrs.href.substr(1);\n      if (!refs[id]) {\n        refs[id] = { hrefs: [], obj: null };\n      }\n      refs[id].hrefs.push({ par: top.object, key: name, obj: obj });\n    }\n    if (id = attrs.id) {\n      if (!refs[id]) {\n        refs[id] = { hrefs: [], obj: null };\n      }\n    }\n\n    //Handle element attributes\n    for (attributeName in attrs) {\n      if (/^xmlns:|^xmlns$/.test(attributeName)) {\n        xmlns[splitQName(attributeName).name] = attrs[attributeName];\n        continue;\n      }\n      hasNonXmlnsAttribute = true;\n      elementAttributes[attributeName] = attrs[attributeName];\n    }\n\n    for (attributeName in elementAttributes) {\n      let res = splitQName(attributeName);\n      if (res.name === 'nil' && xmlns[res.prefix] === 'http://www.w3.org/2001/XMLSchema-instance' && elementAttributes[attributeName] &&\n        (elementAttributes[attributeName].toLowerCase() === 'true' || elementAttributes[attributeName] === '1')\n      ) {\n        hasNilAttribute = true;\n        break;\n      }\n    }\n\n    if (hasNonXmlnsAttribute) {\n      obj[self.options.attributesKey] = elementAttributes;\n    }\n\n    // Pick up the schema for the type specified in element's xsi:type attribute.\n    let xsiTypeSchema;\n    let xsiType = elementAttributes['xsi:type'];\n    if (xsiType) {\n      let type = splitQName(xsiType);\n      let typeURI;\n      if (type.prefix === TNS_PREFIX) {\n        // In case of xsi:type = \"MyType\"\n        typeURI = xmlns[type.prefix] || xmlns.xmlns;\n      } else {\n        typeURI = xmlns[type.prefix];\n      }\n      let typeDef = self.findSchemaObject(typeURI, type.name);\n      if (typeDef) {\n        xsiTypeSchema = typeDef.description(self.definitions);\n      }\n    }\n\n    if (topSchema && topSchema[name + '[]']) {\n      name = name + '[]';\n    }\n    stack.push({\n      name: originalName,\n      object: obj,\n      schema: (xsiTypeSchema || (topSchema && topSchema[name])),\n      id: attrs.id,\n      nil: hasNilAttribute\n    });\n  };\n\n  p.onclosetag = function (nsName) {\n    let cur: any = stack.pop(),\n      obj = cur.object,\n      top = stack[stack.length - 1],\n      topObject = top.object,\n      topSchema = top.schema,\n      name = splitQName(nsName).name;\n\n    if (typeof cur.schema === 'string' && (cur.schema === 'string' || (<string>cur.schema).split(':')[1] === 'string')) {\n      if (typeof obj === 'object' && Object.keys(obj).length === 0) obj = cur.object = '';\n    }\n\n    if (cur.nil === true) {\n      if (self.options.handleNilAsNull) {\n        obj = null;\n      } else {\n        return;\n      }\n    }\n\n    if (_.isPlainObject(obj) && !Object.keys(obj).length) {\n      obj = null;\n    }\n\n    if (topSchema && topSchema[name + '[]']) {\n      if (!topObject[name]) {\n        topObject[name] = [];\n      }\n      topObject[name].push(obj);\n    } else if (name in topObject) {\n      if (!Array.isArray(topObject[name])) {\n        topObject[name] = [topObject[name]];\n      }\n      topObject[name].push(obj);\n    } else {\n      topObject[name] = obj;\n    }\n\n    if (cur.id) {\n      refs[cur.id].obj = obj;\n    }\n  };\n\n  p.oncdata = function (text) {\n    let originalText = text;\n    text = trim(text);\n    if (!text.length) {\n      return;\n    }\n\n    if (/<\\?xml[\\s\\S]+\\?>/.test(text)) {\n      let top = stack[stack.length - 1];\n      let value = self.xmlToObject(text);\n      if (top.object[self.options.attributesKey]) {\n        top.object[self.options.valueKey] = value;\n      } else {\n        top.object = value;\n      }\n    } else {\n      p.ontext(originalText);\n    }\n  };\n\n  p.onerror = function (e) {\n    p.resume();\n    throw {\n      Fault: {\n        faultcode: 500,\n        faultstring: 'Invalid XML',\n        detail: new Error(e).message,\n        statusCode: 500\n      }\n    };\n  };\n\n  p.ontext = function (text) {\n    let originalText = text;\n    text = trim(text);\n    if (!text.length) {\n      return;\n    }\n\n    let top = stack[stack.length - 1];\n    let name = splitQName(top.schema).name,\n      value;\n    if (self.options && self.options.customDeserializer && self.options.customDeserializer[name]) {\n      value = self.options.customDeserializer[name](text, top);\n    }\n    else {\n      if (name === 'int' || name === 'integer') {\n        value = parseInt(text, 10);\n      } else if (name === 'bool' || name === 'boolean') {\n        value = text.toLowerCase() === 'true' || text === '1';\n      } else if (name === 'dateTime' || name === 'date') {\n        value = new Date(text);\n      } else {\n        if (self.options.preserveWhitespace) {\n          text = originalText;\n        }\n        // handle string or other types\n        if (typeof top.object !== 'string') {\n          value = text;\n        } else {\n          value = top.object + text;\n        }\n      }\n    }\n\n    if (top.object[self.options.attributesKey]) {\n      top.object[self.options.valueKey] = value;\n    } else {\n      top.object = value;\n    }\n  };\n\n  if (typeof callback === 'function') {\n    // we be streaming\n    let saxStream = sax.createStream(true);\n    saxStream.on('opentag', p.onopentag);\n    saxStream.on('closetag', p.onclosetag);\n    saxStream.on('cdata', p.oncdata);\n    saxStream.on('text', p.ontext);\n    xml.pipe(saxStream)\n      .on('error', function (err) {\n        callback(err);\n      })\n      .on('end', function () {\n        let r;\n        try {\n          r = finish();\n        } catch (e) {\n          return callback(e);\n        }\n        callback(null, r);\n      });\n    return;\n  }\n  p.write(xml).close();\n\n  return finish();\n\n  function finish() {\n    // MultiRef support: merge objects instead of replacing\n    for (let n in refs) {\n      let ref = refs[n];\n      for (let i = 0; i < ref.hrefs.length; i++) {\n        _.assign(ref.hrefs[i].obj, ref.obj);\n      }\n    }\n\n    if (root.Envelope) {\n      let body = root.Envelope.Body;\n      if (body && body.Fault) {\n        let code = body.Fault.faultcode && body.Fault.faultcode.$value;\n        let string = body.Fault.faultstring && body.Fault.faultstring.$value;\n        let detail = body.Fault.detail && body.Fault.detail.$value;\n\n        code = code || body.Fault.faultcode;\n        string = string || body.Fault.faultstring;\n        detail = detail || body.Fault.detail;\n\n        let error: any = new Error(code + ': ' + string + (detail ? ': ' + detail : ''));\n\n        error.root = root;\n        throw error;\n      }\n      return root.Envelope;\n    }\n    return root;\n  }\n};\n\n/**\n * Look up a XSD type or element by namespace URI and name\n * @param {String} nsURI Namespace URI\n * @param {String} qname Local or qualified name\n * @returns {*} The XSD type/element definition\n */\nWSDL.prototype.findSchemaObject = function (nsURI, qname) {\n  if (!nsURI || !qname) {\n    return null;\n  }\n\n  let def = null;\n\n  if (this.definitions.schemas) {\n    let schema = this.definitions.schemas[nsURI];\n    if (schema) {\n      if (qname.indexOf(':') !== -1) {\n        qname = qname.substring(qname.indexOf(':') + 1, qname.length);\n      }\n\n      // if the client passed an input element which has a `$lookupType` property instead of `$type`\n      // the `def` is found in `schema.elements`.\n      def = schema.complexTypes[qname] || schema.types[qname] || schema.elements[qname];\n    }\n  }\n\n  return def;\n};\n\n/**\n * Create document style xml string from the parameters\n * @param {String} name\n * @param {*} params\n * @param {String} nsPrefix\n * @param {String} nsURI\n * @param {String} type\n */\nWSDL.prototype.objectToDocumentXML = function (name, params, nsPrefix, nsURI, type) {\n  //If user supplies XML already, just use that.  XML Declaration should not be present.\n  if (params && params._xml) {\n    return params._xml;\n  }\n  let args = {};\n  args[name] = params;\n  let parameterTypeObj = type ? this.findSchemaObject(nsURI, type) : null;\n  return this.objectToXML(args, null, nsPrefix, nsURI, true, null, parameterTypeObj);\n};\n\n/**\n * Create RPC style xml string from the parameters\n * @param {String} name\n * @param {*} params\n * @param {String} nsPrefix\n * @param {String} nsURI\n * @returns {string}\n */\nWSDL.prototype.objectToRpcXML = function (name, params, nsPrefix, nsURI, isParts) {\n  let parts = [];\n  let defs = this.definitions;\n  let nsAttrName = '_xmlns';\n\n  nsPrefix = nsPrefix || findPrefix(defs.xmlns, nsURI);\n\n  nsURI = nsURI || defs.xmlns[nsPrefix];\n  nsPrefix = nsPrefix === TNS_PREFIX ? '' : (nsPrefix + ':');\n\n  parts.push(['<', nsPrefix, name, '>'].join(''));\n\n  for (let key in params) {\n    if (!params.hasOwnProperty(key)) {\n      continue;\n    }\n    if (key !== nsAttrName) {\n      let value = params[key];\n      let prefixedKey = (isParts ? '' : nsPrefix) + key;\n      let attributes = [];\n      if (typeof value === 'object' && value.hasOwnProperty(this.options.attributesKey)) {\n        let attrs = value[this.options.attributesKey];\n        for (let n in attrs) {\n          attributes.push(' ' + n + '=' + '\"' + attrs[n] + '\"');\n        }\n      }\n      parts.push(['<', prefixedKey].concat(attributes).concat('>').join(''));\n      parts.push((typeof value === 'object') ? this.objectToXML(value, key, nsPrefix, nsURI) : xmlEscape(value));\n      parts.push(['</', prefixedKey, '>'].join(''));\n    }\n  }\n  parts.push(['</', nsPrefix, name, '>'].join(''));\n  return parts.join('');\n};\n\n\nfunction appendColon(ns) {\n  return (ns && ns.charAt(ns.length - 1) !== ':') ? ns + ':' : ns;\n}\n\nfunction noColonNameSpace(ns) {\n  return (ns && ns.charAt(ns.length - 1) === ':') ? ns.substring(0, ns.length - 1) : ns;\n}\n\nWSDL.prototype.isIgnoredNameSpace = function (ns) {\n  return this.options.ignoredNamespaces.indexOf(ns) > -1;\n};\n\nWSDL.prototype.filterOutIgnoredNameSpace = function (ns) {\n  let namespace = noColonNameSpace(ns);\n  return this.isIgnoredNameSpace(namespace) ? '' : namespace;\n};\n\n\n\n/**\n * Convert an object to XML.  This is a recursive method as it calls itself.\n *\n * @param {Object} obj the object to convert.\n * @param {String} name the name of the element (if the object being traversed is\n * an element).\n * @param {String} nsPrefix the namespace prefix of the object I.E. xsd.\n * @param {String} nsURI the full namespace of the object I.E. http://w3.org/schema.\n * @param {Boolean} isFirst whether or not this is the first item being traversed.\n * @param {?} xmlnsAttr\n * @param {?} parameterTypeObject\n * @param {NamespaceContext} nsContext Namespace context\n */\nWSDL.prototype.objectToXML = function (obj, name, nsPrefix, nsURI, isFirst, xmlnsAttr, schemaObject, nsContext) {\n  const schema = this.definitions.schemas[nsURI];\n\n  let parentNsPrefix = nsPrefix ? nsPrefix.parent : undefined;\n  if (typeof parentNsPrefix !== 'undefined') {\n    // we got the parentNsPrefix for our array. setting the namespace-variable back to the current namespace string\n    nsPrefix = nsPrefix.current;\n  }\n\n  parentNsPrefix = noColonNameSpace(parentNsPrefix);\n  if (this.isIgnoredNameSpace(parentNsPrefix)) {\n    parentNsPrefix = '';\n  }\n\n  const soapHeader = !schema;\n  const qualified = schema && schema.$elementFormDefault === 'qualified';\n  const parts = [];\n  const prefixNamespace = (nsPrefix || qualified) && nsPrefix !== TNS_PREFIX;\n\n  let xmlnsAttrib = '';\n  if (nsURI && isFirst) {\n    if (this.options.overrideRootElement && this.options.overrideRootElement.xmlnsAttributes) {\n      this.options.overrideRootElement.xmlnsAttributes.forEach((attribute) => {\n        xmlnsAttrib += ' ' + attribute.name + '=\"' + attribute.value + '\"';\n      });\n    } else {\n      if (prefixNamespace && !this.isIgnoredNameSpace(nsPrefix)) {\n        // resolve the prefix namespace\n        xmlnsAttrib += ' xmlns:' + nsPrefix + '=\"' + nsURI + '\"';\n      }\n      // only add default namespace if the schema elementFormDefault is qualified\n      if (qualified || soapHeader) { xmlnsAttrib += ' xmlns=\"' + nsURI + '\"'; }\n    }\n  }\n\n  if (!nsContext) {\n    nsContext = new NamespaceContext();\n    nsContext.declareNamespace(nsPrefix, nsURI);\n  } else {\n    nsContext.pushContext();\n  }\n\n  // explicitly use xmlns attribute if available\n  if (xmlnsAttr && !(this.options.overrideRootElement && this.options.overrideRootElement.xmlnsAttributes)) {\n    xmlnsAttrib = xmlnsAttr;\n  }\n\n  let ns = '';\n\n  if (this.options.overrideRootElement && isFirst) {\n    ns = this.options.overrideRootElement.namespace;\n  } else if (prefixNamespace && (qualified || isFirst || soapHeader) && !this.isIgnoredNameSpace(nsPrefix)) {\n    ns = nsPrefix;\n  }\n\n  let i;\n  let n;\n  // start building out XML string.\n  if (Array.isArray(obj)) {\n    let nonSubNameSpace = '';\n    let emptyNonSubNameSpaceForArray = false;\n    const nameWithNsRegex = /^([^:]+):([^:]+)$/.exec(name);\n    if (nameWithNsRegex) {\n      nonSubNameSpace = nameWithNsRegex[1];\n      name = nameWithNsRegex[2];\n    } else if (name[0] === ':') {\n      emptyNonSubNameSpaceForArray = true;\n      name = name.substr(1);\n    }\n\n    for (i = 0, n = obj.length; i < n; i++) {\n      const item = obj[i];\n      const arrayAttr = this.processAttributes(item, nsContext);\n      const correctOuterNsPrefix = nonSubNameSpace || parentNsPrefix || ns; // using the parent namespace prefix if given\n\n      const body = this.objectToXML(item, name, nsPrefix, nsURI, false, null, schemaObject, nsContext);\n\n      let openingTagParts = ['<', name, arrayAttr, xmlnsAttrib];\n      if (!emptyNonSubNameSpaceForArray) {\n        openingTagParts = ['<', appendColon(correctOuterNsPrefix), name, arrayAttr, xmlnsAttrib];\n      }\n\n      if (body === '' && this.options.useEmptyTag) {\n        // Use empty (self-closing) tags if no contents\n        openingTagParts.push(' />');\n        parts.push(openingTagParts.join(''));\n      } else {\n        openingTagParts.push('>');\n        if (this.options.namespaceArrayElements || i === 0) {\n          parts.push(openingTagParts.join(''));\n        }\n        parts.push(body);\n        if (this.options.namespaceArrayElements || i === n - 1) {\n          if (emptyNonSubNameSpaceForArray) {\n            parts.push(['</', name, '>'].join(''));\n          } else {\n            parts.push(['</', appendColon(correctOuterNsPrefix), name, '>'].join(''));\n          }\n        }\n      }\n    }\n  } else if (typeof obj === 'object') {\n    for (name in obj) {\n      if (!obj.hasOwnProperty(name)) { continue; }\n      // don't process attributes as element\n      if (name === this.options.attributesKey) {\n        continue;\n      }\n      // Its the value of a xml object. Return it directly.\n      if (name === this.options.xmlKey) {\n        nsContext.popContext();\n        return obj[name];\n      }\n      // Its the value of an item. Return it directly.\n      if (name === this.options.valueKey) {\n        nsContext.popContext();\n        return xmlEscape(obj[name]);\n      }\n\n      const child = obj[name];\n      if (typeof child === 'undefined') {\n        continue;\n      }\n\n      const attr = this.processAttributes(child, nsContext);\n\n      let value = '';\n      let nonSubNameSpace = '';\n      let emptyNonSubNameSpace = false;\n\n      const nameWithNsRegex = /^([^:]+):([^:]+)$/.exec(name);\n      if (nameWithNsRegex) {\n        nonSubNameSpace = nameWithNsRegex[1] + ':';\n        name = nameWithNsRegex[2];\n      } else if (name[0] === ':') {\n        emptyNonSubNameSpace = true;\n        name = name.substr(1);\n      }\n\n      if (isFirst) {\n        value = this.objectToXML(child, name, nsPrefix, nsURI, false, null, schemaObject, nsContext);\n      } else {\n\n        if (this.definitions.schemas) {\n          if (schema) {\n            const childSchemaObject = this.findChildSchemaObject(schemaObject, name);\n            // find sub namespace if not a primitive\n            if (childSchemaObject &&\n                ((childSchemaObject.$type && (childSchemaObject.$type.indexOf('xsd:') === -1)) ||\n                    childSchemaObject.$ref || childSchemaObject.$name)) {\n              /*if the base name space of the children is not in the ingoredSchemaNamspaces we use it.\n               This is because in some services the child nodes do not need the baseNameSpace.\n               */\n\n              let childNsPrefix: any = '';\n              let childName = '';\n              let childNsURI;\n              let childXmlnsAttrib = '';\n\n              let elementQName = childSchemaObject.$ref || childSchemaObject.$name;\n              if (elementQName) {\n                elementQName = splitQName(elementQName);\n                childName = elementQName.name;\n                if (elementQName.prefix === TNS_PREFIX) {\n                  // Local element\n                  childNsURI = childSchemaObject.$targetNamespace;\n                  childNsPrefix = nsContext.registerNamespace(childNsURI);\n                  if (this.isIgnoredNameSpace(childNsPrefix)) {\n                    childNsPrefix = nsPrefix;\n                  }\n                } else {\n                  childNsPrefix = elementQName.prefix;\n                  if (this.isIgnoredNameSpace(childNsPrefix)) {\n                    childNsPrefix = nsPrefix;\n                  }\n                  childNsURI = schema.xmlns[childNsPrefix] || this.definitions.xmlns[childNsPrefix];\n                }\n\n                let unqualified = false;\n                // Check qualification form for local elements\n                if (childSchemaObject.$name && childSchemaObject.targetNamespace === undefined) {\n                  if (childSchemaObject.$form === 'unqualified') {\n                    unqualified = true;\n                  } else if (childSchemaObject.$form === 'qualified') {\n                    unqualified = false;\n                  } else {\n                    unqualified = schema.$elementFormDefault !== 'qualified';\n                  }\n                }\n                if (unqualified) {\n                  childNsPrefix = '';\n                }\n\n                if (childNsURI && childNsPrefix) {\n                  if (nsContext.declareNamespace(childNsPrefix, childNsURI)) {\n                    childXmlnsAttrib = ' xmlns:' + childNsPrefix + '=\"' + childNsURI + '\"';\n                    xmlnsAttrib += childXmlnsAttrib;\n                  }\n                }\n              }\n\n              let resolvedChildSchemaObject;\n              if (childSchemaObject.$type) {\n                const typeQName = splitQName(childSchemaObject.$type);\n                const typePrefix = typeQName.prefix;\n                const typeURI = schema.xmlns[typePrefix] || this.definitions.xmlns[typePrefix];\n                childNsURI = typeURI;\n                if (typeURI !== 'http://www.w3.org/2001/XMLSchema' && typePrefix !== TNS_PREFIX) {\n                  // Add the prefix/namespace mapping, but not declare it\n                  nsContext.addNamespace(typePrefix, typeURI);\n                }\n                resolvedChildSchemaObject =\n                    this.findSchemaType(typeQName.name, typeURI) || childSchemaObject;\n              } else {\n                resolvedChildSchemaObject =\n                    this.findSchemaObject(childNsURI, childName) || childSchemaObject;\n              }\n\n              if (childSchemaObject.$baseNameSpace && this.options.ignoreBaseNameSpaces) {\n                childNsPrefix = nsPrefix;\n                childNsURI = nsURI;\n              }\n\n              if (this.options.ignoreBaseNameSpaces) {\n                childNsPrefix = '';\n                childNsURI = '';\n              }\n\n              ns = childNsPrefix;\n\n              if (Array.isArray(child)) {\n                // for arrays, we need to remember the current namespace\n                childNsPrefix = {\n                  current: childNsPrefix,\n                  parent: ns,\n                };\n              } else {\n                // parent (array) already got the namespace\n                childXmlnsAttrib = null;\n              }\n\n              value = this.objectToXML(child, name, childNsPrefix, childNsURI,\n                  false, childXmlnsAttrib, resolvedChildSchemaObject, nsContext);\n            } else if (obj[this.options.attributesKey] && obj[this.options.attributesKey].xsi_type) {\n              // if parent object has complex type defined and child not found in parent\n              const completeChildParamTypeObject = this.findChildSchemaObject(\n                  obj[this.options.attributesKey].xsi_type.type,\n                  obj[this.options.attributesKey].xsi_type.xmlns);\n\n              nonSubNameSpace = obj[this.options.attributesKey].xsi_type.prefix;\n              nsContext.addNamespace(obj[this.options.attributesKey].xsi_type.prefix,\n                  obj[this.options.attributesKey].xsi_type.xmlns);\n              value = this.objectToXML(child, name, obj[this.options.attributesKey].xsi_type.prefix,\n                  obj[this.options.attributesKey].xsi_type.xmlns, false, null, null, nsContext);\n            } else {\n              if (Array.isArray(child)) {\n                if (emptyNonSubNameSpace) {\n                  name = ':' + name;\n                } else {\n                  name = nonSubNameSpace + name;\n                }\n              }\n\n              value = this.objectToXML(child, name, nonSubNameSpace || nsPrefix, nsURI, false, null, null, nsContext);\n            }\n          } else {\n            value = this.objectToXML(child, name, nonSubNameSpace || nsPrefix, nsURI, false, null, null, nsContext);\n          }\n        }\n      }\n\n      ns = noColonNameSpace(ns);\n      if (prefixNamespace && !qualified && isFirst && !this.options.overrideRootElement) {\n        ns = nsPrefix;\n      } else if (this.isIgnoredNameSpace(ns)) {\n        ns = '';\n      }\n\n      const useEmptyTag = !value && this.options.useEmptyTag;\n      if (!Array.isArray(child)) {\n        // start tag\n        parts.push(['<', emptyNonSubNameSpace ? '' : appendColon(nonSubNameSpace || ns), name, attr, xmlnsAttrib,\n          (child === null ? ' xsi:nil=\"true\"' : ''),\n          useEmptyTag ? ' />' : '>',\n        ].join(''));\n      }\n\n      if (!useEmptyTag) {\n        parts.push(value);\n        if (!Array.isArray(child)) {\n          // end tag\n          parts.push(['</', emptyNonSubNameSpace ? '' : appendColon(nonSubNameSpace || ns), name, '>'].join(''));\n        }\n      }\n    }\n  } else if (obj !== undefined) {\n    parts.push((this.options.escapeXML) ? xmlEscape(obj) : obj);\n  }\n  nsContext.popContext();\n  return parts.join('');\n};\n\nWSDL.prototype.processAttributes = function (child, nsContext) {\n  let attr = '';\n\n  if (child === null) {\n    child = [];\n  }\n\n  let attrObj = child[this.options.attributesKey];\n  if (attrObj && attrObj.xsi_type) {\n    let xsiType = attrObj.xsi_type;\n\n    let prefix = xsiType.prefix || xsiType.namespace;\n    // Generate a new namespace for complex extension if one not provided\n    if (!prefix) {\n      prefix = nsContext.registerNamespace(xsiType.xmlns);\n    } else {\n      nsContext.declareNamespace(prefix, xsiType.xmlns);\n    }\n    xsiType.prefix = prefix;\n  }\n\n\n  if (attrObj) {\n    for (let attrKey in attrObj) {\n      //handle complex extension separately\n      if (attrKey === 'xsi_type') {\n        let attrValue = attrObj[attrKey];\n        attr += ' xsi:type=\"' + attrValue.prefix + ':' + attrValue.type + '\"';\n        attr += ' xmlns:' + attrValue.prefix + '=\"' + attrValue.xmlns + '\"';\n\n        continue;\n      } else {\n        attr += ' ' + attrKey + '=\"' + xmlEscape(attrObj[attrKey]) + '\"';\n      }\n    }\n  }\n\n  return attr;\n};\n\n/**\n * Look up a schema type definition\n * @param name\n * @param nsURI\n * @returns {*}\n */\nWSDL.prototype.findSchemaType = function (name, nsURI) {\n  if (!this.definitions.schemas || !name || !nsURI) {\n    return null;\n  }\n\n  let schema = this.definitions.schemas[nsURI];\n  if (!schema || !schema.complexTypes) {\n    return null;\n  }\n\n  return schema.complexTypes[name];\n};\n\nWSDL.prototype.findChildSchemaObject = function (parameterTypeObj, childName, backtrace) {\n  if (!parameterTypeObj || !childName) {\n    return null;\n  }\n\n  if (!backtrace) {\n    backtrace = [];\n  }\n\n  if (backtrace.indexOf(parameterTypeObj) >= 0) {\n    // We've recursed back to ourselves; break.\n    return null;\n  } else {\n    backtrace = backtrace.concat([parameterTypeObj]);\n  }\n\n  let found = null,\n    i = 0,\n    child,\n    ref;\n\n  if (Array.isArray(parameterTypeObj.$lookupTypes) && parameterTypeObj.$lookupTypes.length) {\n    let types = parameterTypeObj.$lookupTypes;\n\n    for (i = 0; i < types.length; i++) {\n      let typeObj = types[i];\n\n      if (typeObj.$name === childName) {\n        found = typeObj;\n        break;\n      }\n    }\n  }\n\n  let object = parameterTypeObj;\n  if (object.$name === childName && object.name === 'element') {\n    return object;\n  }\n  if (object.$ref) {\n    ref = splitQName(object.$ref);\n    if (ref.name === childName) {\n      return object;\n    }\n  }\n\n  let childNsURI;\n\n  // want to avoid unecessary recursion to improve performance\n  if (object.$type && backtrace.length === 1) {\n    let typeInfo = splitQName(object.$type);\n    if (typeInfo.prefix === TNS_PREFIX) {\n      childNsURI = parameterTypeObj.$targetNamespace;\n    } else {\n      childNsURI = this.definitions.xmlns[typeInfo.prefix];\n    }\n    let typeDef = this.findSchemaType(typeInfo.name, childNsURI);\n    if (typeDef) {\n      return this.findChildSchemaObject(typeDef, childName, backtrace);\n    }\n  }\n\n  if (object.children) {\n    for (i = 0, child; child = object.children[i]; i++) {\n      found = this.findChildSchemaObject(child, childName, backtrace);\n      if (found) {\n        break;\n      }\n\n      if (child.$base) {\n        let baseQName = splitQName(child.$base);\n        let childNameSpace = baseQName.prefix === TNS_PREFIX ? '' : baseQName.prefix;\n        childNsURI = child.xmlns[baseQName.prefix] || this.definitions.xmlns[baseQName.prefix];\n\n        let foundBase = this.findSchemaType(baseQName.name, childNsURI);\n\n        if (foundBase) {\n          found = this.findChildSchemaObject(foundBase, childName, backtrace);\n\n          if (found) {\n            found.$baseNameSpace = childNameSpace;\n            found.$type = childNameSpace + ':' + childName;\n            break;\n          }\n        }\n      }\n    }\n\n  }\n\n  if (!found && object.$name === childName) {\n    return object;\n  }\n\n  return found;\n};\n\nWSDL.prototype._parse = function (xml) {\n  let self = this,\n    p = sax.parser(true),\n    stack = [],\n    root = null,\n    types = null,\n    schema = null,\n    options = self.options;\n\n  p.onopentag = function (node) {\n    let nsName = node.name;\n    let attrs = node.attributes;\n\n    let top = stack[stack.length - 1];\n    let name;\n    if (top) {\n      try {\n        top.startElement(stack, nsName, attrs, options);\n      } catch (e) {\n        if (self.options.strict) {\n          throw e;\n        } else {\n          stack.push(new Element(nsName, attrs, options));\n        }\n      }\n    } else {\n      name = splitQName(nsName).name;\n      if (name === 'definitions') {\n        root = new DefinitionsElement(nsName, attrs, options);\n        stack.push(root);\n      } else if (name === 'schema') {\n        // Shim a structure in here to allow the proper objects to be created when merging back.\n        root = new DefinitionsElement('definitions', {}, {});\n        types = new TypesElement('types', {}, {});\n        schema = new SchemaElement(nsName, attrs, options);\n        types.addChild(schema);\n        root.addChild(types);\n        stack.push(schema);\n      } else {\n        throw new Error('Unexpected root element of WSDL or include');\n      }\n    }\n  };\n\n  p.onclosetag = function (name) {\n    let top = stack[stack.length - 1];\n    assert(top, 'Unmatched close tag: ' + name);\n\n    top.endElement(stack, name);\n  };\n\n  p.write(xml).close();\n\n  return root;\n};\n\nWSDL.prototype._fromXML = function (xml) {\n  this.definitions = this._parse(xml);\n  this.definitions.descriptions = {\n    types: {}\n  };\n  this.xml = xml;\n};\n\nWSDL.prototype._fromServices = function (services) {\n\n};\n\n\n\nWSDL.prototype._xmlnsMap = function () {\n  let xmlns = this.definitions.xmlns;\n  let str = '';\n  for (let alias in xmlns) {\n    if (alias === '' || alias === TNS_PREFIX) {\n      continue;\n    }\n    let ns = xmlns[alias];\n    switch (ns) {\n      case \"http://xml.apache.org/xml-soap\": // apachesoap\n      case \"http://schemas.xmlsoap.org/wsdl/\": // wsdl\n      case \"http://schemas.xmlsoap.org/wsdl/soap/\": // wsdlsoap\n      case \"http://schemas.xmlsoap.org/wsdl/soap12/\": // wsdlsoap12\n      case \"http://schemas.xmlsoap.org/soap/encoding/\": // soapenc\n      case \"http://www.w3.org/2001/XMLSchema\": // xsd\n        continue;\n    }\n    if (~ns.indexOf('http://schemas.xmlsoap.org/')) {\n      continue;\n    }\n    if (~ns.indexOf('http://www.w3.org/')) {\n      continue;\n    }\n    if (~ns.indexOf('http://xml.apache.org/')) {\n      continue;\n    }\n    str += ' xmlns:' + alias + '=\"' + ns + '\"';\n  }\n  return str;\n};\n\n/*\n * Have another function to load previous WSDLs as we\n * don't want this to be invoked externally (expect for tests)\n * This will attempt to fix circular dependencies with XSD files,\n * Given\n * - file.wsdl\n *   - xs:import namespace=\"A\" schemaLocation: A.xsd\n * - A.xsd\n *   - xs:import namespace=\"B\" schemaLocation: B.xsd\n * - B.xsd\n *   - xs:import namespace=\"A\" schemaLocation: A.xsd\n * file.wsdl will start loading, import A, then A will import B, which will then import A\n * Because A has already started to load previously it will be returned right away and\n * have an internal circular reference\n * B would then complete loading, then A, then file.wsdl\n * By the time file A starts processing its includes its definitions will be already loaded,\n * this is the only thing that B will depend on when \"opening\" A\n */\nfunction open_wsdl_recursive(uri, options): Promise<any> {\n  let fromCache,\n    WSDL_CACHE;\n\n  // if (typeof options === 'function') {\n  //   callback = options;\n  //   options = {};\n  // }\n\n  WSDL_CACHE = options.WSDL_CACHE;\n\n  if (fromCache = WSDL_CACHE[uri]) {\n    // return callback.call(fromCache, null, fromCache);\n    return fromCache;\n  }\n\n  return open_wsdl(uri, options);\n}\n\nexport async function open_wsdl(uri, options): Promise<any> {\n  // if (typeof options === 'function') {\n  //   callback = options;\n  //   options = {};\n  // }\n\n  // initialize cache when calling open_wsdl directly\n  let WSDL_CACHE = options.WSDL_CACHE || {};\n  let request_headers = options.wsdl_headers;\n  let request_options = options.wsdl_options;\n\n  // let wsdl;\n  // if (!/^https?:/.test(uri)) {\n  //   // debug('Reading file: %s', uri);\n  //   // fs.readFile(uri, 'utf8', function(err, definition) {\n  //   //   if (err) {\n  //   //     callback(err);\n  //   //   }\n  //   //   else {\n  //   //     wsdl = new WSDL(definition, uri, options);\n  //   //     WSDL_CACHE[ uri ] = wsdl;\n  //   //     wsdl.WSDL_CACHE = WSDL_CACHE;\n  //   //     wsdl.onReady(callback);\n  //   //   }\n  //   // });\n  // }\n  // else {\n  //   debug('Reading url: %s', uri);\n  //   let httpClient = options.httpClient || new HttpClient(options);\n  //   httpClient.request(uri, null /* options */, function(err, response, definition) {\n  //     if (err) {\n  //       callback(err);\n  //     } else if (response && response.statusCode === 200) {\n  //       wsdl = new WSDL(definition, uri, options);\n  //       WSDL_CACHE[ uri ] = wsdl;\n  //       wsdl.WSDL_CACHE = WSDL_CACHE;\n  //       wsdl.onReady(callback);\n  //     } else {\n  //       callback(new Error('Invalid WSDL URL: ' + uri + \"\\n\\n\\r Code: \" + response.statusCode + \"\\n\\n\\r Response Body: \" + response.body));\n  //     }\n  //   }, request_headers, request_options);\n  // }\n  // return wsdl;\n\n  const httpClient: HttpClient = options.httpClient;\n  const wsdlDef = await httpClient.get(uri, { responseType: 'text' }).toPromise();\n  const wsdlObj = await new Promise((resolve) => {\n    const wsdl = new WSDL(wsdlDef, uri, options);\n    WSDL_CACHE[uri] = wsdl;\n    wsdl.WSDL_CACHE = WSDL_CACHE;\n    wsdl.onReady(resolve(wsdl));\n  });\n  return wsdlObj;\n}\n","import * as _ from 'lodash';\nimport { Buffer } from 'buffer';\n\nexport function BasicAuthSecurity(username, password, defaults) {\n  this._username = username;\n  this._password = password;\n  this.defaults = {};\n  _.merge(this.defaults, defaults);\n}\n\nBasicAuthSecurity.prototype.addHeaders = function(headers) {\n  headers.Authorization = 'Basic ' + new Buffer((this._username + ':' + this._password) || '').toString('base64');\n};\n\nBasicAuthSecurity.prototype.toXML = function() {\n  return '';\n};\n\nBasicAuthSecurity.prototype.addOptions = function(options) {\n  _.merge(options, this.defaults);\n};\n","\"use strict\";\n\n// var crypto = require('crypto');\nimport sha1 from 'crypto-js/sha1';\nimport Base64 from 'crypto-js/enc-base64';\n\n// var passwordDigest = require('../utils').passwordDigest;\nimport { passwordDigest } from '../utils';\n\nvar validPasswordTypes = ['PasswordDigest', 'PasswordText'];\n\nexport function WSSecurity(username, password, options) {\n  options = options || {};\n  this._username = username;\n  this._password = password;\n  //must account for backward compatibility for passwordType String param as well as object options defaults: passwordType = 'PasswordText', hasTimeStamp = true   \n  if (typeof options === 'string') {\n    this._passwordType = options ? options : 'PasswordText';\n    options = {};\n  } else {\n    this._passwordType = options.passwordType ? options.passwordType : 'PasswordText';\n  }\n\n  if (validPasswordTypes.indexOf(this._passwordType) === -1) {\n    this._passwordType = 'PasswordText';\n  }\n\n  this._hasTimeStamp = options.hasTimeStamp || typeof options.hasTimeStamp === 'boolean' ? !!options.hasTimeStamp : true;\n  /*jshint eqnull:true */\n  if (options.hasNonce != null) {\n    this._hasNonce = !!options.hasNonce;\n  }\n  this._hasTokenCreated = options.hasTokenCreated || typeof options.hasTokenCreated === 'boolean' ? !!options.hasTokenCreated : true;\n  if (options.actor != null) {\n    this._actor = options.actor;\n  }\n  if (options.mustUnderstand != null) {\n    this._mustUnderstand = !!options.mustUnderstand;\n  }\n}\n\nWSSecurity.prototype.toXML = function() {\n  // avoid dependency on date formatting libraries\n  function getDate(d) {\n    function pad(n) {\n      return n < 10 ? '0' + n : n;\n    }\n    return d.getUTCFullYear() + '-'\n      + pad(d.getUTCMonth() + 1) + '-'\n      + pad(d.getUTCDate()) + 'T'\n      + pad(d.getUTCHours()) + ':'\n      + pad(d.getUTCMinutes()) + ':'\n      + pad(d.getUTCSeconds()) + 'Z';\n  }\n  var now = new Date();\n  var created = getDate(now);\n  var timeStampXml = '';\n  if (this._hasTimeStamp) {\n    var expires = getDate( new Date(now.getTime() + (1000 * 600)) );\n    timeStampXml = \"<wsu:Timestamp wsu:Id=\\\"Timestamp-\"+created+\"\\\">\" +\n      \"<wsu:Created>\"+created+\"</wsu:Created>\" +\n      \"<wsu:Expires>\"+expires+\"</wsu:Expires>\" +\n      \"</wsu:Timestamp>\";\n  }\n\n  var password, nonce;\n  if (this._hasNonce || this._passwordType !== 'PasswordText') {\n    // nonce = base64 ( sha1 ( created + random ) )\n    // var nHash = crypto.createHash('sha1');\n    // nHash.update(created + Math.random());\n    // nonce = nHash.digest('base64');\n    nonce = Base64.stringify(sha1(created + Math.random(), ''));\n  }\n  if (this._passwordType === 'PasswordText') {\n    password = \"<wsse:Password Type=\\\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText\\\">\" + this._password + \"</wsse:Password>\";\n    if (nonce) {\n      password += \"<wsse:Nonce EncodingType=\\\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary\\\">\" + nonce + \"</wsse:Nonce>\";\n    }\n  } else {\n    password = \"<wsse:Password Type=\\\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest\\\">\" + passwordDigest(nonce, created, this._password) + \"</wsse:Password>\" +\n      \"<wsse:Nonce EncodingType=\\\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary\\\">\" + nonce + \"</wsse:Nonce>\";\n  }\n\n  return \"<wsse:Security \" + (this._actor ? \"soap:actor=\\\"\" + this._actor + \"\\\" \" : \"\") +\n    (this._mustUnderstand ? \"soap:mustUnderstand=\\\"1\\\" \" : \"\") +\n    \"xmlns:wsse=\\\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\\\" xmlns:wsu=\\\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\\\">\" +\n    timeStampXml +\n    \"<wsse:UsernameToken xmlns:wsu=\\\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\\\" wsu:Id=\\\"SecurityToken-\" + created + \"\\\">\" +\n    \"<wsse:Username>\" + this._username + \"</wsse:Username>\" +\n    password +\n    (this._hasTokenCreated ? \"<wsu:Created>\" + created + \"</wsu:Created>\" : \"\") +\n    \"</wsse:UsernameToken>\" +\n    \"</wsse:Security>\";\n};\n\n// module.exports = WSSecurity;\n","\"use strict\";\n\n// var _ = require('lodash');\nimport * as _ from 'lodash';\n\nexport function BearerSecurity(token, defaults) {\n\tthis._token = token;\n\tthis.defaults = {};\n\t_.merge(this.defaults, defaults);\n}\n\nBearerSecurity.prototype.addHeaders = function(headers) {\n\theaders.Authorization = \"Bearer \" + this._token;\n};\n\nBearerSecurity.prototype.toXML = function() {\n\treturn '';\n};\n\nBearerSecurity.prototype.addOptions = function(options) {\n  _.merge(options, this.defaults);\n};\n\n// module.exports = BearerSecurity;\n","\"use strict\";\n\n// var _ = require('lodash');\nimport * as _ from 'lodash';\n\nexport function NTLMSecurity(username, password, domain, workstation) {\n  if (typeof username === \"object\") {\n    this.defaults = username;\n    this.defaults.ntlm = true;\n  } else {\n    this.defaults = {\n      ntlm: true,\n      username: username,\n      password: password,\n      domain: domain,\n      workstation: workstation\n    };\n  }\n}\n\nNTLMSecurity.prototype.addHeaders = function (headers) {\n  headers.Connection = 'keep-alive';\n};\n\nNTLMSecurity.prototype.toXML = function () {\n  return '';\n};\n\nNTLMSecurity.prototype.addOptions = function (options) {\n  _.merge(options, this.defaults);\n};\n\n// module.exports = NTLMSecurity;\n","\"use strict\";\n\nimport { BasicAuthSecurity } from './BasicAuthSecurity';\nimport { WSSecurity } from './WSSecurity';\n// import { WSSecurityCert } from './WSSecurityCert';\nimport { BearerSecurity } from './BearerSecurity';\nimport { NTLMSecurity } from './NTLMSecurity';\n\nexport const security = { \n  BasicAuthSecurity,\n  BearerSecurity,\n  WSSecurity,\n  // WSSecurityCert,\n  NTLMSecurity,\n  // ClientSSLSecurity,\n  // ClientSSLSecurityPFX\n};","export class Multipart  {\n  preambleCRLF = true;\n  postambleCRLF = true;\n\n  build(parts, boundary) {\n    const body = [];\n\n    function add (part) {\n      if (typeof part === 'number') {\n        part = part.toString();\n      }\n      return body.push(part)\n    }\n\n    if (this.preambleCRLF) {\n      add('\\r\\n')\n    }\n\n    parts.forEach(function (part) {\n      let preamble = '--' + boundary + '\\r\\n';\n      Object.keys(part).forEach(function (key) {\n        if (key === 'body') { return }\n        preamble += key + ': ' + part[key] + '\\r\\n'\n      });\n      preamble += '\\r\\n';\n      add(preamble);\n      add(part.body);\n      add('\\r\\n');\n    });\n    add('--' + boundary + '--');\n\n    if (this.postambleCRLF) {\n      add('\\r\\n');\n    }\n\n    const size = body.map((part) => {\n      if (typeof part === 'string') {\n        return part.length\n      } else {\n        return part.byteLength;\n      }\n    }).reduce((a, b) => a + b, 0);\n\n    let uint8array = new Uint8Array(size);\n    let i = 0;\n    body.forEach((part) => {\n      if (typeof part === 'string') {\n        for (let j = 0; j < part.length; i++, j++) {\n          uint8array[i] = part.charCodeAt(j) & 0xff;\n        }\n      } else {\n        for (let j = 0; j < part.byteLength; i++, j++) {\n          uint8array[i] = part[j];\n        }\n      }\n    });\n    return uint8array.buffer;\n  }\n\n}\n","export class SoapAttachment {\n\n  constructor(\n    public mimetype: string,\n    public contentId: string,\n    public name: string,\n    public body: any\n  ) {\n\n  }\n\n  static fromFormFiles(files: FileList | File[] = []): Promise<any> {\n    if (files instanceof FileList) {\n      files = Array.from(files);\n    }\n\n    const promises = files.map((file: any) => {\n      return new Promise(function(resolve) {\n        const reader = new FileReader();\n        reader.readAsArrayBuffer(file);\n        reader.onload = function (e) {\n          const arrayBuffer = (e.target as any).result;\n          const bytes = new Uint8Array(arrayBuffer);\n          const attachment = new SoapAttachment(file.type, file.contentId || file.name, file.name, bytes);\n          resolve(attachment);\n        }\n      });\n    });\n\n   return Promise.all(promises);\n  }\n\n}\n","/*\n * Copyright (c) 2011 Vinay Pulim <vinay@milewise.com>\n * MIT Licensed\n */\n\nimport { HttpClient, HttpResponse } from '@angular/common/http';\nimport * as assert from 'assert';\nimport { findPrefix } from './utils';\nimport * as _ from 'lodash';\nimport uuid4 from 'uuid/v4';\nimport { from, Observable, throwError } from 'rxjs';\nimport { mergeMap, map } from 'rxjs/operators';\nimport { Multipart } from './multipart';\nimport { SoapAttachment } from './soapAttachment';\n\nconst nonIdentifierChars = /[^a-z$_0-9]/i;\n\nexport const Client = function(wsdl, endpoint, options) {\n    options = options || {};\n    this.wsdl = wsdl;\n    this._initializeOptions(options);\n    this._initializeServices(endpoint);\n    this.httpClient = options.httpClient as HttpClient;\n    const promiseOptions: any = { multiArgs: true };\n    if (options.overridePromiseSuffix) {\n        promiseOptions.suffix = options.overridePromiseSuffix;\n    }\n    Promise.all([this, promiseOptions]);\n};\n\nClient.prototype.addSoapHeader = function(soapHeader, name, namespace, xmlns) {\n    if (!this.soapHeaders) {\n        this.soapHeaders = [];\n    }\n    if (typeof soapHeader === 'object') {\n        soapHeader = this.wsdl.objectToXML(soapHeader, name, namespace, xmlns, true);\n    }\n    return this.soapHeaders.push(soapHeader) - 1;\n};\n\nClient.prototype.changeSoapHeader = function(index, soapHeader, name, namespace, xmlns) {\n    if (!this.soapHeaders) {\n        this.soapHeaders = [];\n    }\n    if (typeof soapHeader === 'object') {\n        soapHeader = this.wsdl.objectToXML(soapHeader, name, namespace, xmlns, true);\n    }\n    this.soapHeaders[index] = soapHeader;\n};\n\nClient.prototype.getSoapHeaders = function() {\n    return this.soapHeaders;\n};\n\nClient.prototype.clearSoapHeaders = function() {\n    this.soapHeaders = null;\n};\n\nClient.prototype.addHttpHeader = function(name, value) {\n    if (!this.httpHeaders) {\n        this.httpHeaders = {};\n    }\n    this.httpHeaders[name] = value;\n};\n\nClient.prototype.getHttpHeaders = function() {\n    return this.httpHeaders;\n};\n\nClient.prototype.clearHttpHeaders = function() {\n    this.httpHeaders = {};\n};\n\nClient.prototype.addBodyAttribute = function(bodyAttribute, name, namespace, xmlns) {\n    if (!this.bodyAttributes) {\n        this.bodyAttributes = [];\n    }\n    if (typeof bodyAttribute === 'object') {\n        let composition = '';\n        Object.getOwnPropertyNames(bodyAttribute).forEach(function(prop, idx, array) {\n            composition += ' ' + prop + '=\"' + bodyAttribute[prop] + '\"';\n        });\n        bodyAttribute = composition;\n    }\n    if (bodyAttribute.substr(0, 1) !== ' ') bodyAttribute = ' ' + bodyAttribute;\n    this.bodyAttributes.push(bodyAttribute);\n};\n\nClient.prototype.getBodyAttributes = function() {\n    return this.bodyAttributes;\n};\n\nClient.prototype.clearBodyAttributes = function() {\n    this.bodyAttributes = null;\n};\n\nClient.prototype.setEndpoint = function(endpoint) {\n    this.endpoint = endpoint;\n    this._initializeServices(endpoint);\n};\n\nClient.prototype.describe = function() {\n    const types = this.wsdl.definitions.types;\n    return this.wsdl.describeServices();\n};\n\nClient.prototype.setSecurity = function(security) {\n    this.security = security;\n};\n\nClient.prototype.setSOAPAction = function(SOAPAction) {\n    this.SOAPAction = SOAPAction;\n};\n\nClient.prototype._initializeServices = function(endpoint) {\n    const definitions = this.wsdl.definitions,\n        services = definitions.services;\n    for (const name in services) {\n        this[name] = this._defineService(services[name], endpoint);\n    }\n};\n\nClient.prototype._initializeOptions = function(options) {\n    this.streamAllowed = options.stream;\n    this.normalizeNames = options.normalizeNames;\n    this.wsdl.options.attributesKey = options.attributesKey || 'attributes';\n    this.wsdl.options.envelopeKey = options.envelopeKey || 'soap';\n    this.wsdl.options.preserveWhitespace = !!options.preserveWhitespace;\n    if (options.ignoredNamespaces !== undefined) {\n        if (options.ignoredNamespaces.override !== undefined) {\n            if (options.ignoredNamespaces.override === true) {\n                if (options.ignoredNamespaces.namespaces !== undefined) {\n                    this.wsdl.options.ignoredNamespaces = options.ignoredNamespaces.namespaces;\n                }\n            }\n        }\n    }\n    if (options.overrideRootElement !== undefined) {\n        this.wsdl.options.overrideRootElement = options.overrideRootElement;\n    }\n    this.wsdl.options.forceSoap12Headers = !!options.forceSoap12Headers;\n};\n\nClient.prototype._defineService = function(service, endpoint) {\n    const ports = service.ports,\n        def = {};\n    for (const name in ports) {\n        def[name] = this._definePort(ports[name], endpoint ? endpoint : ports[name].location);\n    }\n    return def;\n};\n\nClient.prototype._definePort = function(port, endpoint) {\n    const location = endpoint,\n        binding = port.binding,\n        methods = binding.methods,\n        def = {};\n    for (const name in methods) {\n        def[name] = this._defineMethod(methods[name], location);\n        const methodName = this.normalizeNames ? name.replace(nonIdentifierChars, '_') : name;\n        this[methodName] = def[name];\n    }\n    return def;\n};\n\nClient.prototype._defineMethod = function(method, location) {\n    const self = this;\n    let temp = null;\n    return function(args, options, extraHeaders): Observable<any> {\n        return self._invoke(method, args, location, options, extraHeaders);\n    };\n};\n\nClient.prototype._invoke = function(method, args, location, options, extraHeaders): Observable<any> {\n    let self = this,\n        name = method.$name,\n        input = method.input,\n        output = method.output,\n        style = method.style,\n        defs = this.wsdl.definitions,\n        envelopeKey = this.wsdl.options.envelopeKey,\n        ns = defs.$targetNamespace,\n        encoding = '',\n        message = '',\n        xml = null,\n        req = null,\n        soapAction = null,\n        alias = findPrefix(defs.xmlns, ns),\n        headers: any = {\n            'Content-Type': 'text/xml; charset=utf-8'\n        },\n        xmlnsSoap = 'xmlns:' + envelopeKey + '=\"http://schemas.xmlsoap.org/soap/envelope/\"';\n\n    if (this.wsdl.options.forceSoap12Headers) {\n        headers['Content-Type'] = 'application/soap+xml; charset=utf-8';\n        xmlnsSoap = 'xmlns:' + envelopeKey + '=\"http://www.w3.org/2003/05/soap-envelope\"';\n    }\n\n    if (this.SOAPAction) {\n        soapAction = this.SOAPAction;\n    } else if (method.soapAction !== undefined && method.soapAction !== null) {\n        soapAction = method.soapAction;\n    } else {\n        soapAction = (ns.lastIndexOf('/') !== ns.length - 1 ? ns + '/' : ns) + name;\n    }\n\n    if (!this.wsdl.options.forceSoap12Headers) {\n        headers.SOAPAction = '\"' + soapAction + '\"';\n    }\n\n    options = options || {};\n\n    //Add extra headers\n    for (const header in this.httpHeaders) {\n        headers[header] = this.httpHeaders[header];\n    }\n    for (const attr in extraHeaders) {\n        headers[attr] = extraHeaders[attr];\n    }\n\n    // Allow the security object to add headers\n    if (self.security && self.security.addHeaders) self.security.addHeaders(headers);\n    if (self.security && self.security.addOptions) self.security.addOptions(options);\n\n    if (style === 'rpc' && (input.parts || input.name === 'element' || args === null)) {\n        assert.ok(!style || style === 'rpc', 'invalid message definition for document style binding');\n        message = self.wsdl.objectToRpcXML(name, args, alias, ns, input.name !== 'element');\n        method.inputSoap === 'encoded' && (encoding = 'soap:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" ');\n    } else {\n        assert.ok(!style || style === 'document', 'invalid message definition for rpc style binding');\n        // pass `input.$lookupType` if `input.$type` could not be found\n        message = self.wsdl.objectToDocumentXML(input.$name, args, input.targetNSAlias, input.targetNamespace, input.$type || input.$lookupType);\n    }\n    xml =\n        '<?xml version=\"1.0\" encoding=\"utf-8\"?>' +\n        '<' +\n        envelopeKey +\n        ':Envelope ' +\n        xmlnsSoap +\n        ' ' +\n        'xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ' +\n        encoding +\n        this.wsdl.xmlnsInEnvelope +\n        '>' +\n        (self.soapHeaders || self.security\n            ? '<' +\n              envelopeKey +\n              ':Header>' +\n              (self.soapHeaders ? self.soapHeaders.join('\\n') : '') +\n              (self.security && !self.security.postProcess ? self.security.toXML() : '') +\n              '</' +\n              envelopeKey +\n              ':Header>'\n            : '') +\n        '<' +\n        envelopeKey +\n        ':Body' +\n        (self.bodyAttributes ? self.bodyAttributes.join(' ') : '') +\n        (self.security && self.security.postProcess ? ' Id=\"_0\"' : '') +\n        '>' +\n        message +\n        '</' +\n        envelopeKey +\n        ':Body>' +\n        '</' +\n        envelopeKey +\n        ':Envelope>';\n\n    if (self.security && self.security.postProcess) {\n        xml = self.security.postProcess(xml, envelopeKey);\n    }\n\n    if (options && options.postProcess) {\n        xml = options.postProcess(xml);\n    }\n\n    self.lastMessage = message;\n    self.lastRequest = xml;\n    self.lastEndpoint = location;\n\n    const tryJSONparse = function(body) {\n        try {\n            return JSON.parse(body);\n        } catch (err) {\n            return undefined;\n        }\n    };\n\n    return from(SoapAttachment.fromFormFiles(options.attachments)).pipe(\n        map((soapAttachments: SoapAttachment[]) => {\n            if (!soapAttachments.length) {\n                return xml;\n            }\n\n            if (options.forceMTOM || soapAttachments.length > 0) {\n                const start = uuid4();\n                const boundry = uuid4();\n                let action = null;\n                if (headers['Content-Type'].indexOf('action') > -1) {\n                    for (const ct of headers['Content-Type'].split('; ')) {\n                        if (ct.indexOf('action') > -1) {\n                            action = ct;\n                        }\n                    }\n                }\n\n                headers['Content-Type'] =\n                    'multipart/related; type=\"application/xop+xml\"; start=\"<' + start + '>\"; start-info=\"text/xml\"; boundary=\"' + boundry + '\"';\n                if (action) {\n                    headers['Content-Type'] = headers['Content-Type'] + '; ' + action;\n                }\n\n                const multipart: any[] = [\n                    {\n                        'Content-Type': 'application/xop+xml; charset=UTF-8; type=\"text/xml\"',\n                        'Content-ID': '<' + start + '>',\n                        body: xml\n                    }\n                ];\n\n                soapAttachments.forEach((attachment: SoapAttachment) => {\n                    multipart.push({\n                        'Content-Type': attachment.mimetype + ';',\n                        'Content-Transfer-Encoding': 'binary',\n                        'Content-ID': '<' + (attachment.contentId || attachment.name) + '>',\n                        'Content-Disposition': 'attachment; name=\"' + attachment.name + '\"; filename=\"' + attachment.name + '\"',\n                        body: attachment.body\n                    });\n                });\n\n                return new Multipart().build(multipart, boundry);\n            }\n        }),\n        mergeMap((body: any) =>\n            (self.httpClient)\n                .post(location, body, {\n                    headers: headers,\n                    responseType: 'text',\n                    observe: 'response'\n                })\n                .pipe(\n                    map((response: HttpResponse<any>) => {\n                        self.lastResponse = response.body;\n                        self.lastResponseHeaders = response && response.headers;\n                        return parseSync(response.body, response);\n                    })\n                )\n        )\n    );\n\n    function parseSync(body, response: HttpResponse<any>) {\n        let obj;\n        try {\n            obj = self.wsdl.xmlToObject(body);\n        } catch (error) {\n            //  When the output element cannot be looked up in the wsdl and the body is JSON\n            //  instead of sending the error, we pass the body in the response.\n            if (!output || !output.$lookupTypes) {\n                // debug('Response element is not present. Unable to convert response xml to json.');\n                //  If the response is JSON then return it as-is.\n                const json = _.isObject(body) ? body : tryJSONparse(body);\n                if (json) {\n                    return { err: null, response, responseBody: json, header: undefined, xml };\n                }\n            }\n            error.response = response;\n            error.body = body;\n            // self.emit('soapError', error, eid);\n            throw error;\n        }\n        return finish(obj, body, response);\n    }\n\n    function finish(obj, responseBody, response) {\n        let result = null;\n\n        if (!output) {\n            // one-way, no output expected\n            return { err: null, response: null, responseBody, header: obj.Header, xml };\n        }\n\n        // If it's not HTML and Soap Body is empty\n        if (!obj.html && !obj.Body) {\n            return { err: null, obj, responseBody, header: obj.Header, xml };\n        }\n\n        if (typeof obj.Body !== 'object') {\n            const error: any = new Error('Cannot parse response');\n            error.response = response;\n            error.body = responseBody;\n            return { err: error, obj, responseBody, header: undefined, xml };\n        }\n\n        result = obj.Body[output.$name];\n        // RPC/literal response body may contain elements with added suffixes I.E.\n        // 'Response', or 'Output', or 'Out'\n        // This doesn't necessarily equal the ouput message name. See WSDL 1.1 Section 2.4.5\n        if (!result) {\n            result = obj.Body[output.$name.replace(/(?:Out(?:put)?|Response)$/, '')];\n        }\n        if (!result) {\n            ['Response', 'Out', 'Output'].forEach(function(term) {\n                if (obj.Body.hasOwnProperty(name + term)) {\n                    return (result = obj.Body[name + term]);\n                }\n            });\n        }\n\n        return { err: null, result, responseBody, header: obj.Header, xml };\n    }\n};\n\nClient.prototype.call = function(method: string, body: any, options?: any, extraHeaders?: any): Observable<any> {\n    // console.log('call', method);\n\n    if (!this[method]) {\n        return throwError(`Method ${method} not found`);\n    }\n\n    return (<Function>this[method]).call(this, body, options, extraHeaders);\n};\n","/*\n * Copyright (c) 2011 Vinay Pulim <vinay@milewise.com>\n * MIT Licensed\n */\n\nimport * as wsdl from './wsdl';\nimport { security } from './security/security';\nimport { Client } from './client';\nexport { Client } from './client';\nexport { security  } from './security/security';\n\nexport { passwordDigest } from './utils'\nexport const WSDL = wsdl.WSDL;\n\nconst cache = {}; // TODO some caching?\n\nconst getFromCache = async (url, options) => {\n  // console.log('Getting from cache', url);\n  // console.log('Cache', cache)\n  if (cache[url]) {\n    // console.log('Found in cache', url);\n    return cache[url];\n  } else {\n    return wsdl.open_wsdl(url, options).then(wsdl => {\n      cache[url] = wsdl;\n      return wsdl;\n    })\n  }\n};\n\nasync function _requestWSDL(url, options) {\n  if (options.disableCache === true) {\n    return wsdl.open_wsdl(url, options);\n  } else {\n    return getFromCache(url, options);\n  }\n}\n\nexport async function createClient(url, options, endpoint): Promise<any> {\n  if (typeof options === 'undefined') {\n    options = {};\n  }\n  // console.log(\"createClient\", options)\n  endpoint = options.endpoint || endpoint;\n  \n  const wsdl = await _requestWSDL(url, options);\n  const client = new Client(wsdl, endpoint, options);\n  return client;\n}\n\nexport const BasicAuthSecurity = security.BasicAuthSecurity;\nexport const NTLMSecurity = security.NTLMSecurity;\nexport const WSSecurity = security.WSSecurity;\n// export const WSSecurityCert = security.WSSecurityCert;\nexport const BearerSecurity = security.BearerSecurity;\n// export const ClientSSLSecurity = security.ClientSSLSecurity;\n// export const ClientSSLSecurityPFX = security.ClientSSLSecurityPFX;\n","import { Injectable } from '@angular/core';\nimport { createClient } from './soap/soap';\nimport { HttpClient } from '@angular/common/http';\nimport { Client } from './soap/interfaces';\n\nexport {\n  Client,\n  WSDL,\n  ISoapMethod,\n  ISoapMethodResponse,\n  BasicAuthSecurity,\n  BearerSecurity,\n  // WSSecurityCert,\n  WSSecurity,\n  NTLMSecurity\n} from './soap/interfaces';\n\nexport { security } from './soap/security/security'\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class NgxSoapService {\n\n  constructor(private http: HttpClient) { }\n\n  createClient(wsdlUrl: string, options: any = {}, endpoint?: string): Promise<Client> {\n    options.httpClient = this.http;\n    return createClient(wsdlUrl, options, endpoint);\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { HttpClientModule } from '@angular/common/http';\n\n@NgModule({\n  imports: [\n    HttpClientModule\n  ],\n  exports: []\n})\nexport class NgxSoapModule { }\n","/*\n * Public API Surface of ngx-soap\n */\n\nexport * from './lib/ngx-soap.service';\nexport * from './lib/ngx-soap.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["TNS_PREFIX","findPrefix","utils.TNS_PREFIX","utils.findPrefix","assert","WSDL","BasicAuthSecurity","WSSecurity","BearerSecurity","NTLMSecurity","wsdl.WSDL","wsdl.open_wsdl"],"mappings":"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"}