UNPKG

ngx-soap-next

Version:

SOAP service for Angular

1 lines 248 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/WSSecurityCert.ts","../../../projects/ngx-soap/src/lib/soap/security/WSSecurityCertWithToken.ts","../../../projects/ngx-soap/src/lib/soap/security/WSSecurityPlusCert.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: Map<string, {uri: string, prefix: string, declared: boolean}>;\n  constructor(parent: any) {\n    if (!(this instanceof NamespaceScope)) {\n      return new NamespaceScope(parent);\n    }\n    this.parent = parent;\n    this.namespaces = new Map();  \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.get(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.get(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 (const [prefix, mapping] of this.namespaces) {\n          if (mapping.uri === nsUri) {\n            return prefix;\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.set(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.set(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';\nimport debugBuilder from 'debug';\n\nconst debug = debugBuilder('ngx-soap:wsdl');\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\nfunction trim(text: string): string {\n  return text.trim();\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  // Fallback to include namespace if targetNamespace is missing\n  let childInclude = child.includes && child.includes.find(function(e) {\n    return e.hasOwnProperty('namespace');\n  });\n  let childIncludeNs = childInclude && childInclude.namespace;\n  let targetNamespace = child.$targetNamespace || (child.includes && child.includes[0] && child.includes[0].namespace) || childIncludeNs;\n\n  if (!this.schemas.hasOwnProperty(targetNamespace)) {\n    this.schemas[targetNamespace] = child;\n  } else {\n    // Merge schemas with duplicate namespaces instead of error\n    this.schemas[targetNamespace].merge(child);\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    \n    // Handle missing message definitions gracefully\n    if (!message) {\n      debug(`Warning: Message definition '${messageName}' not found in WSDL for operation '${this.$name}'`);\n      children.splice(i--, 1);\n      continue;\n    }\n    \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    // Handle both ExtensionElement and RestrictionElement in ComplexContent\n    if (child instanceof ExtensionElement || child instanceof RestrictionElement) {\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  \n  // Apply element key override if configured (for element renaming)\n  if (definitions.options && definitions.options.overrideElementKey && definitions.options.overrideElementKey[name]) {\n    name = definitions.options.overrideElementKey[name];\n    debug('Element key overridden: %s -> %s', this.$name, name);\n  }\n  \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          // For element refs, preserve maxOccurs/minOccurs from the referring element\n          // If the referring element has maxOccurs/minOccurs, apply array notation\n          if (isMany && typeof elem === 'object') {\n            // Apply array notation to the referenced element's name\n            let refElemName = Object.keys(elem)[0];\n            if (refElemName && !refElemName.endsWith('[]')) {\n              let refValue = elem[refElemName];\n              delete elem[refElemName];\n              elem[refElemName + '[]'] = refValue;\n            }\n          }\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          // Apply maxOccurs/minOccurs from referring element to cached description\n          let cachedElem = definitions.descriptions.types[typeName];\n          if (isMany && typeof cachedElem === 'object') {\n            let refElemName = Object.keys(cachedElem)[0];\n            if (refElemName && !refElemName.endsWith('[]')) {\n              // Create a new object with array notation\n              element = {};\n              element[refElemName + '[]'] = cachedElem[refElemName];\n            } else {\n              element = cachedElem;\n            }\n          } else {\n            element = cachedElem;\n          }\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  // Configuration options\n  this.options.useEmptyTag = options.useEmptyTag !== undefined ? options.useEmptyTag : false;\n  this.options.preserveWhitespace = options.preserveWhitespace !== undefined ? options.preserveWhitespace : false;\n  this.options.normalizeNames = options.normalizeNames !== undefined ? options.normalizeNames : false;\n  this.options.suppressStack = options.suppressStack !== undefined ? options.suppressStack : false;\n  this.options.forceUseSchemaXmlns = options.forceUseSchemaXmlns !== undefined ? options.forceUseSchemaXmlns : false;\n  this.options.envelopeKey = options.envelopeKey || 'soap';\n  this.options.overridePromiseSuffix = options.overridePromiseSuffix || 'Async';\n\n  // Multi-service/multi-port support\n  this.options.serviceName = options.serviceName;\n  this.options.portName = options.portName;\n\n  // Element key override support\n  this.options.overrideElementKey = options.overrideElementKey;\n\n  // Custom SOAP envelope URL support\n  this.options.envelopeSoapUrl = options.envelopeSoapUrl;\n\n  // Response encoding support\n  this.options.encoding = options.encoding || 'utf-8';\n\n  // Custom WSDL cache support\n  this.options.wsdlCache = options.wsdlCache;\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\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        const fault = body.Fault;\n        let code, string, actor, detail, statusCode;\n\n        // SOAP 1.1 Fault\n        if (fault.faultcode) {\n          code = fault.faultcode && fault.faultcode.$value || fault.faultcode;\n          string = fault.faultstring && fault.faultstring.$value || fault.faultstring;\n          actor = fault.faultactor && fault.faultactor.$value || fault.faultactor;\n          detail = fault.detail && fault.detail.$value || fault.detail;\n          statusCode = fault.statusCode;\n        }\n        // SOAP 1.2 Fault\n        else if (fault.Code) {\n          code = fault.Code.Value;\n          string = fault.Reason && fault.Reason.Text && fault.Reason.Text.$value\n            || fault.Reason && fault.Reason.Text\n            || '';\n          actor = fault.Role;\n          detail = fault.Detail;\n          statusCode = fault.statusCode;\n        }\n\n        const error: any = new Error(string || code);\n        error.root = root;\n        error.Fault = fault;\n        error.code = code;\n        error.string = string;\n        error.actor = actor;\n        error.detail = detail;\n        error.statusCode = statusCode || 500;\n\n        // If returnFault option is enabled, return the fault in the response instead of throwing\n        if (self.options.returnFault) {\n          debug('SOAP Fault (returnFault=true): %s', string || code);\n          return root.Envelope;\n        }\n\n        debug('SOAP Fault: %s', string || code);\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                // For arrays without schema, pass namespace information as object\n                const arrayNsPrefix = {\n                  current: nonSubNameSpace || nsPrefix,\n                  parent: ns || nsPrefix\n                };\n                value = this.objectToXML(child, name, arrayNsPrefix, nsURI, false, null, null, nsContext);\n              } else {\n                value = this.objectToXML(child, name, nonSubNameSpace || nsPrefix, nsURI, false, null, null, nsContext);\n              }\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            // Clone the found object to prevent mutating the original schema\n            // This prevents state pollution between multiple requests\n            found = _.cloneDeep(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  debug('Parsing WSDL XML, length: %d', xml?.length || 0);\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\n/**\n * Generate a UUID using native crypto API with fallback for non-secure contexts\n * Uses crypto.randomUUID() when available, with fallback for HTTP contexts\n */\nfunction generateUUID(): string {\n  if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n    return crypto.randomUUID();\n  }\n  // Fallback for non-secure contexts (HTTP)\n  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n    const r = (Math.random() * 16) | 0;\n    const v = c === 'x' ? r : (r & 0x3) | 0x8;\n    return v.toString(16);\n  });\n}\n\nfunction generateId() {\n  return generateUUID().replace(/-/gm, '');\n}\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  // Custom SOAP envelope prefix (e.g., 'SOAP-ENV', 'soapenv')\n  this._envelopeKey = options.envelopeKey || 'soap';\n  // Custom XML to append to security header (e.g., session tokens)\n  this._appendElement = options.appendElement || '';\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    // Use unique ID for timestamp (dynamic UUID generation)\n    var timestampId = 'Timestamp-' + generateId();\n    timeStampXml = \"<wsu:Timestamp wsu:Id=\\\"\" + timestampId + \"\\\">\" +\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  // Proper spacing after xmlns attributes to prevent xmldom warnings\n  // Use envelopeKey for actor/mustUnderstand attributes\n  return \"<wsse:Security \" + (this._actor ? this._envelopeKey + \":actor=\\\"\" + this._actor + \"\\\" \" : \"\") +\n    (this._mustUnderstand ? this._envelopeKey + \":mustUnderstand=\\\"1\\\" \" : \"\") +\n    \"xmlns:wsse=\\\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\\\" \" +\n    \"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    this._appendElement +\n    \"</wsse:Security>\";\n};\n\n// module.exports = WSSecurity;\n","\"use strict\";\n\n// var fs = require('fs');\n// var path = require('path');\n// var ejs = require('ejs');\n// var SignedXml = require('xml-crypto').SignedXml;\n\nimport { SignedXml } from 'xml-crypto';\n\nlet wsseSecurityHeaderTemplate;\nlet wsseSecurityTokenTemplate;\n\nfunction addMinutes(date, minutes) {\n  return new Date(date.getTime() + minutes * 60000);\n}\n\nfunction dateStringForSOAP(date) {\n  return date.getUTCFullYear() + '-' + ('0' + (date.getUTCMonth() + 1)).slice(-2) + '-' +\n    ('0' + date.getUTCDate()).slice(-2) + 'T' + ('0' + date.getUTCHours()).slice(-2) + \":\" +\n    ('0' + date.getUTCMinutes()).slice(-2) + \":\" + ('0' + date.getUTCSeconds()).slice(-2) + \"Z\";\n}\n\nfunction generateCreated() {\n  return dateStringForSOAP(new Date());\n}\n\nfunction generateExpires() {\n  return dateStringForSOAP(addMinutes(new Date(), 10));\n}\n\nfunction insertStr(src, dst, pos) {\n  return [dst.slice(0, pos), src, dst.slice(pos)].join('');\n}\n\n/**\n * Generate a UUID using native crypto API with fallback for non-secure contexts\n */\nfunction generateUUID(): string {\n  if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n    return crypto.randomUUID();\n  }\n  // Fallback for non-secure contexts (HTTP)\n  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n    const r = (Math.random() * 16) | 0;\n    const v = c === 'x' ? r : (r & 0x3) | 0x8;\n    return v.toString(16);\n  });\n}\n\nfunction generateId() {\n  return generateUUID().replace(/-/gm, '');\n}\n\nexport function WSSecurityCert(privatePEM, publicP12PEM, password, options?) {\n  options = options || {};\n  \n  this.publicP12PEM = publicP12PEM.toString().replace('-----BEGIN CERTIFICATE-----', '').replace('-----END CERTIFICATE-----', '').replace(/(\\r\\n|\\n|\\r)/gm, '');\n\n  // Store algorithm options\n  this.digestAlgorithm = options.digestAlgorithm || 'sha256';\n  this.signatureAlgorithm = options.signatureAlgorithm || 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256';\n  \n  // Store reference exclusion options\n  this.excludeReferencesFromSigning = options.excludeReferencesFromSigning || [];\n  \n  // Custom XML to append to security header (e.g., custom authentication elements)\n  this.appendElement = options.appendElement || '';\n\n  this.signer = new SignedXml();\n  this.signer.signatureAlgorithm = this.signatureAlgorithm;\n  this.signer.canonicalizationAlgorithm = 'http://www.w3.org/2001/10/xml-exc-c14n#';\n  this.signer.signingKey = {\n    key: privatePEM,\n    passphrase: password\n  };\n  this.x509Id = \"x509-\" + generateId();\n\n  var _this = this;\n  this.signer.keyInfoProvider = {};\n  this.signer.keyInfoProvider.getKeyInfo = function (key) {\n    if (!wsseSecurityTokenTemplate) {\n      // wsseSecurityTokenTemplate = ejs.compile(fs.readFileSync(path.join(__dirname, 'templates', 'wsse-security-token.ejs')).toString());\n    }\n\n    // return wsseSecurityTokenTemplate({ x509Id: _this.x509Id });\n    return `\n      <wsse:SecurityTokenReference>\n        <wsse:Reference URI=\"#${this.x509Id}\" ValueType=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3\"/>\n      </wsse:SecurityTokenReference>\n    `;\n  };\n}\n\nWSSecurityCert.prototype.postProcess = function (xml, envelopeKey) {\n  this.created = generateCreated();\n  this.expires = generateExpires();\n\n  if (!wsseSecurityHeaderTemplate) {\n    // wsseSecurityHeaderTemplate = ejs.compile(fs.readFileSync(path.join(__dirname, 'templates', 'wsse-security-header.ejs')).toString());\n  }\n\n  // var secHeader = wsseSecurityHeaderTemplate({\n  //   binaryToken: this.publicP12PEM,\n  //   created: this.created,\n  //   expires: this.expires,\n  //   id: this.x509Id\n  // });\n\n  // Build security header with optional custom XML element\n  var secHeader = `\n    <wsse:Security xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\"\n                  xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\"\n                  soap:mustUnderstand=\"1\">\n      <wsse:BinarySecurityToken   \n          EncodingType=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary\" \n          ValueType=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3\" \n          wsu:Id=\"${this.x509Id}\">${this.publicP12PEM}</wsse:BinarySecurityToken>\n      <Timestamp xmlns=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\" Id=\"_1\"> \n        <Created>${this.created}</Created>\n        <Expires>${this.expires}</Expires>\n      </Timestamp>${this.appendElement}\n    </wsse:Security>\n  `;\n\n  var xmlWithSec = insertStr(secHeader, xml, xml.indexOf('</soap:Header>'));\n\n  var references = [\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\",\n    \"http://www.w3.org/2001/10/xml-exc-c14n#\"];\n\n  // Add references conditionally based on excludeReferencesFromSigning option\n  const shouldExclude = (refName) => {\n    return this.excludeReferencesFromSigning && \n           this.excludeReferencesFromSigning.some(excluded => \n             refName.toLowerCase().includes(excluded.toLowerCase())\n           );\n  };\n\n  // Use the configured digest algorithm for references\n  if (!shouldExclude('Body')) {\n    this.signer.addReference({\n      xpath: \"//*[name(.)='\" + envelopeKey + \":Body']\",\n      transforms: references,\n      digestAlgorithm: 'http://www.w3.org/2001/04/xmlenc#' + this.digestAlgorithm\n    });\n  }\n  \n  if (!shouldExclude('Timestamp')) {\n    this.signer.addReference({\n      xpath: \"//*[name(.)='wsse:Security']/*[local-name(.)='Timestamp']\",\n      transforms: references,\n      digestAlgorithm: 'http://www.w3.org/2001/04/xmlenc#' + this.digestAlgorithm\n    });\n  }\n\n  this.signer.computeSignature(xmlWithSec);\n\n  return insertStr(this.signer.getSignatureXml(), xmlWithSec, xmlWithSec.indexOf('</wsse:Security>'));\n};\n\n// module.exports = WSSecurityCert;\n","\"use strict\";\n\nimport { WSSecurity } from './WSSecurity';\nimport { WSSecurityCert } from './WSSecurityCert';\n\n/**\n * WS-Security with both certificate and username token\n * Combines WSSecurityCert with UsernameToken for dual authentication\n * \n * @param privatePEM - Private key in PEM format\n * @param publicP12PEM - Public certificate in P12/PEM format\n * @param password - Certificate password\n * @param options - Additional options\n * @param options.username - Username for token authentication\n * @param options.password - Password for token authentication\n * @param options.passwordType - Type of password encoding ('PasswordText' or 'PasswordDigest')\n * @param options.hasTimeStamp - Include timestamp in security header (default: true)\n * @param options.hasNonce - Include nonce in security header\n * @param options.hasTokenCreated - Include created timestamp in token (default: true)\n * @param options.digestAlgorithm - Digest algorithm for signing (default: 'sha256')\n * @param options.signatureAlgorithm - Signature algorithm for signing\n * @param options.excludeReferencesFromSigning - Array of element names to exclude from signing\n * @param options.appendElement - Custom XML to append to security header\n * @param options.envelopeKey - Custom SOAP envelope prefix (default: 'soap')\n */\nexport function WSSecurityCertWithToken(\n  privatePEM: string | Buffer,\n  publicP12PEM: string | Buffer,\n  password: string,\n  options: any\n) {\n  options = options || {};\n  \n  // Initialize certificate security with all supported options\n  this.cert = new (WSSecurityCert as any)(privatePEM, publicP12PEM, password, {\n    digestAlgorithm: options.digestAlgorithm,\n    signatureAlgorithm: options.signatureAlgorithm,\n    excludeReferencesFromSigning: options.excludeReferencesFromSigning,\n    appendElement: options.appendElement\n  });\n  \n  // Initialize username token security with all supported options\n  if (options.username && options.password) {\n    this.token = new (WSSecurity as any)(options.username, options.password, {\n      passwordType: options.passwordType,\n      hasTimeStamp: options.hasTimeStamp,\n      hasNonce: options.hasNonce,\n      hasTokenCreated: options.hasTokenCreated,\n      actor: options.actor,\n      mustUnderstand: options.mustUnderstand,\n      envelopeKey: options.envelopeKey,\n      appendElement: options.appendElement\n    });\n  }\n}\n\n/**\n * Generate the WS-Security XML header\n * Returns username token XML (certificate is added via postProcess)\n */\nWSSecurityCertWithToken.prototype.toXML = function(): string {\n  // Only return username token if provided\n  // Certificate security is handled via postProcess\n  if (this.token) {\n    return this.token.toXML();\n  }\n  return '';\n};\n\n/**\n * Post-process the SOAP envelope to add signature\n */\nWSSecurityCertWithToken.prototype.postProcess = function(xml: string, envelopeKey: string): string {\n  if (this.cert && this.cert.postProcess) {\n    return this.cert.postProcess(xml, envelopeKey);\n  }\n  return xml;\n};\n\n/**\n * Add additional options to the security configuration\n */\nWSSecurityCertWithToken.prototype.addOptions = function(options: any): void {\n  if (this.token && options.username) {\n    this.token._username = options.username;\n  }\n  if (this.token && options.password) {\n    this.token._password = options.password;\n  }\n};\n\n","\"use strict\";\n\nimport { WSSecurity } from './WSSecurity';\nimport { WSSecurityCert } from './WSSecurityCert';\n\n/**\n * Combined WSSecurity and WSSecurityCert\n * Allows using both username token and certificate security together\n * \n * @param wsSecurity - WSSecurity instance for username token\n * @param wsSecurityCert - WSSecurityCert instance for certificate\n */\nexport function WSSecurityPlusCert(\n  wsSecurity: any,\n  wsSecurityCert: any\n) {\n  if (!wsSecurity) {\n    throw new Error('WSSecurity instance is required');\n  }\n  if (!wsSecurityCert) {\n    throw new Error('WSSecurityCert instance is required');\n  }\n  \n  this.wsSecurity = wsSecurity;\n  this.wsSecurityCert = wsSecurityCert;\n}\n\n/**\n * Generate the WS-Security XML header\n * Returns username token XML (certificate is added via postProcess)\n */\nWSSecurityPlusCert.prototype.toXML = function(): string {\n  // Only return WSSecurity (username token)\n  // Certificate security is handled via postProcess\n  if (this.wsSecurity && this.wsSecurity.toXML) {\n    return this.wsSecurity.toXML();\n  }\n  return '';\n};\n\n/**\n * Post-process the SOAP envelope to add signature\n */\nWSSecurityPlusCert.prototype.postProcess = function(xml: string, envelopeKey: string): string {\n  // Apply certificate post-processing if available\n  if (this.wsSecurityCert && this.wsSecurityCert.postProcess) {\n    return this.wsSecurityCert.postProcess(xml, envelopeKey);\n  }\n  return xml;\n};\n\n/**\n * Add additional options to both security configurations\n */\nWSSecurityPlusCert.prototype.addOptions = function(options: any): void {\n  if (this.wsSecurity && options.username) {\n    this.wsSecurity._username = options.username;\n  }\n  if (this.wsSecurity && options.password) {\n    this.wsSecurity._password = options.password;\n  }\n};\n\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';\nimport { WSSecurityCert } from './WSSecurityCert';\nimport { WSSecurityCertWithToken } from './WSSecurityCertWithToken';\nimport { WSSecurityPlusCert } from './WSSecurityPlusCert';\nimport { BearerSecurity } from './BearerSecurity';\nimport { NTLMSecurity } from './NTLMSecurity';\n\nexport const security = { \n  BasicAuthSecurity,\n  BearerSecurity,\n  WSSecurity,\n  WSSecurityCert,\n  WSSecurityCertWithToken,\n  WSSecurityPlusCert,\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 { from, Observable, throwError } from 'rxjs';\nimport { mergeMap, map } from 'rxjs/operators';\nimport { Multipart } from './multipart';\nimport { SoapAttachment } from './soapAttachment';\nimport debugBuilder from 'debug';\n\nconst debug = debugBuilder('ngx-soap:client');\n\nconst nonIdentifierChars = /[^a-z$_0-9]/i;\n\n/**\n * Generate a UUID using native crypto API with fallback for non-secure contexts\n */\nfunction generateUUID(): string {\n  if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n    return crypto.randomUUID();\n  }\n  // Fallback for non-secure contexts (HTTP)\n  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n    const r = (Math.random() * 16) | 0;\n    const v = c === 'x' ? r : (r & 0x3) | 0x8;\n    return v.toString(16);\n  });\n}\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._processSoapHeader = function(soapHeader, name, namespace, xmlns) {\n    switch (typeof soapHeader) {\n        case 'object':\n            return this.wsdl.objectToXML(soapHeader, name, namespace, xmlns, true);\n        case 'function':\n            const self = this;\n            return function() {\n                const result = soapHeader.apply(null, arguments);\n                if (typeof result === 'object') {\n                    return self.wsdl.objectToXML(result, name, namespace, xmlns, true);\n                }\n                return result;\n            };\n        default:\n            return soapHeader;\n    }\n};\n\nClient.prototype.addSoapHeader = function(soapHeader, name, namespace, xmlns) {\n    if (!this.soapHeaders) {\n        this.soapHeaders = [];\n    }\n    soapHeader = this._processSoapHeader(soapHeader, name, namespace, xmlns);\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    soapHeader = this._processSoapHeader(soapHeader, name, namespace, xmlns);\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    \n    // Support selecting specific service from WSDL\n    const selectedServiceName = this.wsdl.options.serviceName;\n    \n    if (selectedServiceName) {\n        // Initialize only the selected service\n        if (services[selectedServiceName]) {\n            this[selectedServiceName] = this._defineService(services[selectedServiceName], endpoint);\n            debug('Initialized selected service: %s', selectedServiceName);\n        } else {\n            debug('Warning: Selected service \"%s\" not found in WSDL. Available services: %s', \n                selectedServiceName, Object.keys(services).join(', '));\n        }\n    } else {\n        // Initialize all services (backward compatible)\n        for (const name in services) {\n            this[name] = this._defineService(services[name], endpoint);\n        }\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    \n    // Support selecting specific service/port from WSDL\n    this.wsdl.options.serviceName = options.serviceName;\n    this.wsdl.options.portName = options.portName;\n    \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    \n    // Support selecting specific port from service\n    const selectedPortName = this.wsdl.options.portName;\n    \n    if (selectedPortName) {\n        // Initialize only the selected port\n        if (ports[selectedPortName]) {\n            def[selectedPortName] = this._definePort(ports[selectedPortName], endpoint ? endpoint : ports[selectedPortName].location);\n            debug('Initialized selected port: %s', selectedPortName);\n        } else {\n            debug('Warning: Selected port \"%s\" not found in service. Available ports: %s', \n                selectedPortName, Object.keys(ports).join(', '));\n        }\n    } else {\n        // Initialize all ports (backward compatible)\n        for (const name in ports) {\n            def[name] = this._definePort(ports[name], endpoint ? endpoint : ports[name].location);\n        }\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    // Ensure options is defined\n    options = options || {};\n    \n    // Generate or use provided exchange ID for request tracking\n    const eid = options.exchangeId || generateUUID();\n    debug('Invoking SOAP method: %s (EID: %s)', method.$name, eid);\n    \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    // Support custom SOAP envelope URL\n    if (this.wsdl.options.envelopeSoapUrl && !this.wsdl.options.forceSoap12Headers) {\n        xmlnsSoap = 'xmlns:' + envelopeKey + '=\"' + this.wsdl.options.envelopeSoapUrl + '\"';\n    }\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 = generateUUID();\n                const boundry = generateUUID();\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        // Handle empty or null body\n        if (!body || typeof body !== 'string' || body.trim().length === 0) {\n            debug('Received empty SOAP body');\n            if (!output) {\n                // One-way operation, no response expected\n                return { err: null, response: null, responseBody: body, header: undefined, xml };\n            }\n            return { err: null, result: {}, responseBody: body, header: undefined, xml };\n        }\n\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    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  if (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  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, IOptions } from './soap/interfaces';\n\nexport {\n  Client,\n  WSDL,\n  IOptions,\n  IWsdlBaseOptions,\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/**\n * NgxSoapService - SOAP client service for Angular\n * \n * **Backwards Compatible:** Works with Angular 10+ (NgModule or standalone)\n * \n * This service creates SOAP clients from WSDL files and returns Promises for compatibility.\n * The returned Promise can be wrapped in Angular 20+ resource() or used directly.\n * \n * @example Basic usage (works in all Angular versions)\n * ```typescript\n * constructor(private soap: NgxSoapService) {\n *   this.soap.createClient('assets/service.wsdl')\n *     .then(client => this.client = client)\n *     .catch(err => console.error(err));\n * }\n * ```\n * \n * @example Angular 20+ with resource() API\n * ```typescript\n * import { inject, resource } from '@angular/core';\n * \n * private soap = inject(NgxSoapService);\n * \n * soapClient = resource({\n *   loader: () => this.soap.createClient('assets/service.wsdl')\n * });\n * ```\n * \n * @example Angular 16+ with signals\n * ```typescript\n * import { inject, signal } from '@angular/core';\n * \n * private soap = inject(NgxSoapService);\n * client = signal<Client | null>(null);\n * \n * constructor() {\n *   this.soap.createClient('assets/service.wsdl')\n *     .then(client => this.client.set(client));\n * }\n * ```\n * \n * @since 0.10.0\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class NgxSoapService {\n\n  constructor(private http: HttpClient) { }\n\n  /**\n   * Creates a SOAP client from a WSDL URL\n   * \n   * @param wsdlUrl - URL to the WSDL file (can be relative or absolute)\n   * @param options - Optional SOAP client configuration options\n   * @param endpoint - Optional endpoint override (overrides WSDL endpoint)\n   * @returns Promise that resolves to a SOAP Client\n   * \n   * @example\n   * ```typescript\n   * const client = await this.soap.createClient('assets/calculator.wsdl');\n   * (client as any).Add({ intA: 1, intB: 2 }).subscribe(result => {\n   *   console.log(result.AddResult);\n   * });\n   * ```\n   */\n  createClient(wsdlUrl: string, options: IOptions = {}, endpoint?: string): Promise<Client> {\n    options.httpClient = this.http;\n    return createClient(wsdlUrl, options, endpoint);\n  }\n}\n","import { NgModule, EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\nimport { NgxSoapService } from './ngx-soap.service';\n\n/**\n * Provides NgxSoap services for standalone applications (Angular 14+)\n * \n * **Recommended for Angular 14+ standalone applications**\n * \n * This is the modern approach for Angular 14+ projects using standalone components.\n * Works seamlessly with Angular 20 features like signals, computed(), and resource().\n * \n * @example\n * ```typescript\n * import { bootstrapApplication } from '@angular/platform-browser';\n * import { provideHttpClient } from '@angular/common/http';\n * import { provideNgxSoap } from 'ngx-soap-next';\n * \n * bootstrapApplication(AppComponent, {\n *   providers: [\n *     provideHttpClient(),\n *     provideNgxSoap()\n *   ]\n * });\n * ```\n * \n * @since 0.17.0 (Angular 14+)\n */\nexport function provideNgxSoap(): EnvironmentProviders {\n  return makeEnvironmentProviders([\n    NgxSoapService\n  ]);\n}\n\n/**\n * NgxSoapModule for traditional NgModule-based applications\n * \n * **Fully supported for NgModule-based applications (Angular 10+)**\n * \n * Use this module in traditional NgModule-based Angular applications.\n * Both NgModule and standalone approaches are fully supported for backwards compatibility.\n * \n * For new standalone applications, consider using `provideNgxSoap()` instead.\n * \n * @example NgModule-based application\n * ```typescript\n * import { NgModule } from '@angular/core';\n * import { NgxSoapModule } from 'ngx-soap-next';\n * import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\n * \n * @NgModule({\n *   imports: [NgxSoapModule],\n *   // Or provide HttpClient separately:\n *   // providers: [provideHttpClient(withInterceptorsFromDi())]\n * })\n * export class AppModule { }\n * ```\n * \n * @since 0.10.0 (Angular 10+)\n */\n@NgModule({ \n  exports: [], \n  imports: [], \n  providers: [\n    NgxSoapService,\n    provideHttpClient(withInterceptorsFromDi())\n  ] \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","debug","utils.TNS_PREFIX","utils.findPrefix","assert","WSDL","BasicAuthSecurity","generateUUID","generateId","WSSecurity","BearerSecurity","NTLMSecurity","wsdl.WSDL","wsdl.open_wsdl"],"mappings":"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"}