<?xml version="1.0" encoding="UTF-8"?>
<!--
  =====================================================
  WSDL SMAPI 1.1 — Service Sonos Korgi
  =====================================================
  Descriptor SOAP/WSDL conforme à la spec Sonos Music API (SMAPI) 1.1.
  Référence : https://docs.sonos.com/docs/sonos-music-api
  Namespace : http://www.sonos.com/Services/1.1

  Ce fichier est servi sur GET /wsdl (et /SMAPI?wsdl pour compat).
  Il DOIT être accessible en HTTPS sur sonos.korgi.fr/wsdl.

  Opérations implémentées par korgi-sonos :
    - getAppLink
    - getDeviceAuthToken
    - refreshAuthToken
    - getMetadata
    - getMediaMetadata
    - getExtendedMetadata
    - getMediaURI
    - search
    - getLastUpdate
    - getScrollCount
    - getExtendedMetadataText
    - rateItem
    - reportPlayStatus
    - getPlaylists

  Opérations déclarées mais non implémentées (retournent Client.NotImplemented) :
    - createFavorite / deleteFavorite / getFavorites (post-MVP)
    - reportStatus
    - setPlayed
    - getUserInfo
    - getAccount
    - getAccountThumbnails
    - getServerDate
    - getItemMetadata
-->
<wsdl:definitions
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:tns="http://www.sonos.com/Services/1.1"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.sonos.com/Services/1.1"
    name="Sonos">

  <!-- =====================================================
       TYPES — schéma XML SMAPI 1.1
       ===================================================== -->
  <wsdl:types>
    <xsd:schema targetNamespace="http://www.sonos.com/Services/1.1"
                elementFormDefault="qualified"
                attributeFormDefault="unqualified">

      <!-- ---- Types de base ---- -->
      <xsd:simpleType name="id">
        <xsd:restriction base="xsd:string">
          <xsd:maxLength value="255"/>
        </xsd:restriction>
      </xsd:simpleType>

      <xsd:simpleType name="deviceId">
        <xsd:restriction base="xsd:string">
          <xsd:maxLength value="255"/>
        </xsd:restriction>
      </xsd:simpleType>

      <xsd:simpleType name="householdId">
        <xsd:restriction base="xsd:string">
          <xsd:maxLength value="255"/>
        </xsd:restriction>
      </xsd:simpleType>

      <xsd:simpleType name="authToken">
        <xsd:restriction base="xsd:string">
          <xsd:maxLength value="2048"/>
        </xsd:restriction>
      </xsd:simpleType>

      <xsd:simpleType name="refreshToken">
        <xsd:restriction base="xsd:string">
          <xsd:maxLength value="2048"/>
        </xsd:restriction>
      </xsd:simpleType>

      <xsd:simpleType name="linkCode">
        <xsd:restriction base="xsd:string">
          <xsd:maxLength value="32"/>
        </xsd:restriction>
      </xsd:simpleType>

      <xsd:simpleType name="regUrl">
        <xsd:restriction base="xsd:string">
          <xsd:maxLength value="2048"/>
        </xsd:restriction>
      </xsd:simpleType>

      <xsd:simpleType name="redirectUri">
        <xsd:restriction base="xsd:string">
          <xsd:maxLength value="2048"/>
        </xsd:restriction>
      </xsd:simpleType>

      <!-- ---- itemType ---- -->
      <xsd:simpleType name="itemType">
        <xsd:restriction base="xsd:string">
          <xsd:enumeration value="artist"/>
          <xsd:enumeration value="album"/>
          <xsd:enumeration value="track"/>
          <xsd:enumeration value="stream"/>
          <xsd:enumeration value="genre"/>
          <xsd:enumeration value="playlist"/>
          <xsd:enumeration value="show"/>
          <xsd:enumeration value="episode"/>
          <xsd:enumeration value="audiobook"/>
          <xsd:enumeration value="podcast"/>
          <xsd:enumeration value="video"/>
          <xsd:enumeration value="movie"/>
          <xsd:enumeration value="tvShow"/>
          <xsd:enumeration value="tvEpisode"/>
          <xsd:enumeration value="folder"/>
          <xsd:enumeration value="container"/>
          <xsd:enumeration value="other"/>
        </xsd:restriction>
      </xsd:simpleType>

      <!-- ---- mediaMetadata ---- -->
      <xsd:complexType name="trackMetadata">
        <xsd:sequence>
          <xsd:element name="artistId" type="tns:id" minOccurs="0"/>
          <xsd:element name="artist" type="xsd:string" minOccurs="0"/>
          <xsd:element name="albumId" type="tns:id" minOccurs="0"/>
          <xsd:element name="album" type="xsd:string" minOccurs="0"/>
          <xsd:element name="albumArtURI" type="xsd:string" minOccurs="0"/>
          <xsd:element name="duration" type="xsd:int" minOccurs="0"/>
          <xsd:element name="trackTitle" type="xsd:string" minOccurs="0"/>
          <xsd:element name="canPlay" type="xsd:boolean" minOccurs="0"/>
          <xsd:element name="canSkip" type="xsd:boolean" minOccurs="0"/>
          <xsd:element name="canResume" type="xsd:boolean" minOccurs="0"/>
          <xsd:element name="canAddToFavorites" type="xsd:boolean" minOccurs="0"/>
          <xsd:element name="rating" type="xsd:int" minOccurs="0"/>
          <xsd:element name="trackNumber" type="xsd:int" minOccurs="0"/>
          <xsd:element name="composerId" type="tns:id" minOccurs="0"/>
          <xsd:element name="composer" type="xsd:string" minOccurs="0"/>
        </xsd:sequence>
      </xsd:complexType>

      <xsd:complexType name="mediaMetadata">
        <xsd:sequence>
          <xsd:element name="id" type="tns:id"/>
          <xsd:element name="itemType" type="tns:itemType"/>
          <xsd:element name="mimeType" type="xsd:string" minOccurs="0"/>
          <xsd:element name="title" type="xsd:string" minOccurs="0"/>
          <xsd:element name="trackMetadata" type="tns:trackMetadata" minOccurs="0"/>
          <xsd:element name="canPlay" type="xsd:boolean" minOccurs="0"/>
          <xsd:element name="userPlayCount" type="xsd:int" minOccurs="0"/>
          <xsd:element name="relatedText" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="dynamic" type="xsd:boolean" minOccurs="0"/>
        </xsd:sequence>
      </xsd:complexType>

      <!-- ---- mediaCollection ---- -->
      <xsd:complexType name="mediaCollection">
        <xsd:sequence>
          <xsd:element name="id" type="tns:id"/>
          <xsd:element name="itemType" type="tns:itemType"/>
          <xsd:element name="title" type="xsd:string" minOccurs="0"/>
          <xsd:element name="artistId" type="tns:id" minOccurs="0"/>
          <xsd:element name="artist" type="xsd:string" minOccurs="0"/>
          <xsd:element name="albumArtURI" type="xsd:string" minOccurs="0"/>
          <xsd:element name="canPlay" type="xsd:boolean" minOccurs="0"/>
          <xsd:element name="canScroll" type="xsd:boolean" minOccurs="0"/>
          <xsd:element name="canAddToFavorites" type="xsd:boolean" minOccurs="0"/>
          <xsd:element name="userPlayCount" type="xsd:int" minOccurs="0"/>
          <xsd:element name="relatedText" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="dynamic" type="xsd:boolean" minOccurs="0"/>
        </xsd:sequence>
      </xsd:complexType>

      <!-- ---- abstractMedia (union) ---- -->
      <xsd:complexType name="abstractMedia">
        <xsd:choice>
          <xsd:element name="mediaMetadata" type="tns:mediaMetadata"/>
          <xsd:element name="mediaCollection" type="tns:mediaCollection"/>
        </xsd:choice>
      </xsd:complexType>

      <!-- ---- mediaList (résultat getMetadata) ---- -->
      <xsd:complexType name="mediaList">
        <xsd:sequence>
          <xsd:element name="count" type="xsd:int"/>
          <xsd:element name="index" type="xsd:int"/>
          <xsd:element name="total" type="xsd:int"/>
          <xsd:element name="mediaCollection" type="tns:mediaCollection" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="mediaMetadata" type="tns:mediaMetadata" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:complexType>

      <!-- ---- searchResult ---- -->
      <xsd:complexType name="searchResult">
        <xsd:sequence>
          <xsd:element name="index" type="xsd:int"/>
          <xsd:element name="count" type="xsd:int"/>
          <xsd:element name="total" type="xsd:int"/>
          <xsd:element name="mediaCollection" type="tns:mediaCollection" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="mediaMetadata" type="tns:mediaMetadata" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:complexType>

      <xsd:complexType name="section">
        <xsd:sequence>
          <xsd:element name="id" type="tns:id"/>
          <xsd:element name="title" type="xsd:string"/>
          <xsd:element name="type" type="xsd:string"/>
          <xsd:element name="map" type="tns:searchResult" minOccurs="0"/>
        </xsd:sequence>
      </xsd:complexType>

      <xsd:complexType name="searchResultList">
        <xsd:sequence>
          <xsd:element name="section" type="tns:section" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:complexType>

      <!-- ---- lastUpdate ---- -->
      <xsd:complexType name="lastUpdate">
        <xsd:sequence>
          <xsd:element name="catalog" type="xsd:string"/>
          <xsd:element name="favorites" type="xsd:string" minOccurs="0"/>
          <xsd:element name="autoPlayEnabled" type="xsd:boolean" minOccurs="0"/>
        </xsd:sequence>
      </xsd:complexType>

      <!-- ---- appLinkResult ---- -->
      <xsd:complexType name="appLinkResult">
        <xsd:sequence>
          <xsd:element name="regUrl" type="tns:regUrl"/>
          <xsd:element name="deviceId" type="tns:deviceId" minOccurs="0"/>
          <xsd:element name="householdId" type="tns:householdId" minOccurs="0"/>
        </xsd:sequence>
      </xsd:complexType>

      <!-- ---- deviceAuthTokenResult ---- -->
      <xsd:complexType name="deviceAuthTokenResult">
        <xsd:sequence>
          <xsd:element name="authToken" type="tns:authToken"/>
          <xsd:element name="privateCacheDuration" type="xsd:long" minOccurs="0"/>
          <xsd:element name="userInfo" type="xsd:string" minOccurs="0"/>
          <xsd:element name="refreshToken" type="tns:refreshToken" minOccurs="0"/>
        </xsd:sequence>
      </xsd:complexType>

      <!-- ---- Éléments de requête (wrappers) ---- -->

      <!-- getAppLink -->
      <xsd:element name="getAppLink">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="deviceId" type="tns:deviceId"/>
            <xsd:element name="householdId" type="tns:householdId" minOccurs="0"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="getAppLinkResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="getAppLinkResult" type="tns:appLinkResult"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <!-- getDeviceAuthToken -->
      <xsd:element name="getDeviceAuthToken">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="deviceId" type="tns:deviceId"/>
            <xsd:element name="linkCode" type="tns:linkCode"/>
            <xsd:element name="householdId" type="tns:householdId" minOccurs="0"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="getDeviceAuthTokenResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="getDeviceAuthTokenResult" type="tns:deviceAuthTokenResult"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <!-- refreshAuthToken -->
      <xsd:element name="refreshAuthToken">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="refreshToken" type="tns:refreshToken"/>
            <xsd:element name="deviceId" type="tns:deviceId" minOccurs="0"/>
            <xsd:element name="householdId" type="tns:householdId" minOccurs="0"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="refreshAuthTokenResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="refreshAuthTokenResult" type="tns:deviceAuthTokenResult"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <!-- getMetadata -->
      <xsd:element name="getMetadata">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="id" type="tns:id"/>
            <xsd:element name="index" type="xsd:int"/>
            <xsd:element name="count" type="xsd:int"/>
            <xsd:element name="recursive" type="xsd:boolean" minOccurs="0"/>
            <xsd:element name="authToken" type="tns:authToken"/>
            <xsd:element name="deviceId" type="tns:deviceId" minOccurs="0"/>
            <xsd:element name="householdId" type="tns:householdId" minOccurs="0"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="getMetadataResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="getMetadataResult" type="tns:mediaList"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <!-- getMediaMetadata -->
      <xsd:element name="getMediaMetadata">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="id" type="tns:id"/>
            <xsd:element name="authToken" type="tns:authToken"/>
            <xsd:element name="deviceId" type="tns:deviceId" minOccurs="0"/>
            <xsd:element name="householdId" type="tns:householdId" minOccurs="0"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="getMediaMetadataResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="getMediaMetadataResult" type="tns:mediaMetadata"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <!-- getExtendedMetadata -->
      <xsd:element name="getExtendedMetadata">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="id" type="tns:id"/>
            <xsd:element name="index" type="xsd:int" minOccurs="0"/>
            <xsd:element name="count" type="xsd:int" minOccurs="0"/>
            <xsd:element name="authToken" type="tns:authToken"/>
            <xsd:element name="deviceId" type="tns:deviceId" minOccurs="0"/>
            <xsd:element name="householdId" type="tns:householdId" minOccurs="0"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="getExtendedMetadataResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="getExtendedMetadataResult">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="mediaMetadata" type="tns:mediaMetadata" minOccurs="0"/>
                  <xsd:element name="mediaCollection" type="tns:mediaCollection" minOccurs="0"/>
                  <xsd:element name="relatedBrowse" type="tns:mediaCollection" minOccurs="0" maxOccurs="unbounded"/>
                  <xsd:element name="relatedText" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <!-- getMediaURI -->
      <xsd:element name="getMediaURI">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="id" type="tns:id"/>
            <xsd:element name="action" type="xsd:string" minOccurs="0"/>
            <xsd:element name="authToken" type="tns:authToken"/>
            <xsd:element name="deviceId" type="tns:deviceId" minOccurs="0"/>
            <xsd:element name="householdId" type="tns:householdId" minOccurs="0"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="getMediaURIResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="getMediaURIResult">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="uri" type="xsd:string" minOccurs="0"/>
                  <xsd:element name="httpHeaders" type="xsd:string" minOccurs="0"/>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <!-- search -->
      <xsd:element name="search">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="id" type="tns:id"/>
            <xsd:element name="term" type="xsd:string"/>
            <xsd:element name="index" type="xsd:int"/>
            <xsd:element name="count" type="xsd:int"/>
            <xsd:element name="authToken" type="tns:authToken"/>
            <xsd:element name="deviceId" type="tns:deviceId" minOccurs="0"/>
            <xsd:element name="householdId" type="tns:householdId" minOccurs="0"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="searchResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="searchResult" type="tns:searchResultList"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <!-- getLastUpdate -->
      <xsd:element name="getLastUpdate">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="authToken" type="tns:authToken" minOccurs="0"/>
            <xsd:element name="deviceId" type="tns:deviceId" minOccurs="0"/>
            <xsd:element name="householdId" type="tns:householdId" minOccurs="0"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="getLastUpdateResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="getLastUpdateResult" type="tns:lastUpdate"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <!-- getScrollCount -->
      <xsd:element name="getScrollCount">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="id" type="tns:id"/>
            <xsd:element name="authToken" type="tns:authToken"/>
            <xsd:element name="deviceId" type="tns:deviceId" minOccurs="0"/>
            <xsd:element name="householdId" type="tns:householdId" minOccurs="0"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="getScrollCountResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="getScrollCountResult">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="scrollCount" type="xsd:int"/>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <!-- getExtendedMetadataText -->
      <xsd:element name="getExtendedMetadataText">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="id" type="tns:id"/>
            <xsd:element name="type" type="xsd:string"/>
            <xsd:element name="authToken" type="tns:authToken"/>
            <xsd:element name="deviceId" type="tns:deviceId" minOccurs="0"/>
            <xsd:element name="householdId" type="tns:householdId" minOccurs="0"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="getExtendedMetadataTextResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="getExtendedMetadataTextResult">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="metadata" type="xsd:string" minOccurs="0"/>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <!-- rateItem -->
      <xsd:element name="rateItem">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="id" type="tns:id"/>
            <xsd:element name="rating" type="xsd:int"/>
            <xsd:element name="authToken" type="tns:authToken"/>
            <xsd:element name="deviceId" type="tns:deviceId" minOccurs="0"/>
            <xsd:element name="householdId" type="tns:householdId" minOccurs="0"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="rateItemResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="rateItemResult">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="shouldSkip" type="xsd:boolean" minOccurs="0"/>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <!-- reportPlayStatus -->
      <xsd:element name="reportPlayStatus">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="id" type="tns:id"/>
            <xsd:element name="status" type="xsd:int"/>
            <xsd:element name="seconds" type="xsd:int" minOccurs="0"/>
            <xsd:element name="authToken" type="tns:authToken"/>
            <xsd:element name="deviceId" type="tns:deviceId" minOccurs="0"/>
            <xsd:element name="householdId" type="tns:householdId" minOccurs="0"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="reportPlayStatusResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="reportPlayStatusResult">
              <xsd:complexType>
                <xsd:sequence/>
              </xsd:complexType>
            </xsd:element>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <!-- getPlaylists -->
      <xsd:element name="getPlaylists">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="id" type="tns:id" minOccurs="0"/>
            <xsd:element name="index" type="xsd:int"/>
            <xsd:element name="count" type="xsd:int"/>
            <xsd:element name="authToken" type="tns:authToken"/>
            <xsd:element name="deviceId" type="tns:deviceId" minOccurs="0"/>
            <xsd:element name="householdId" type="tns:householdId" minOccurs="0"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="getPlaylistsResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="getPlaylistsResult" type="tns:mediaList"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <!-- createFavorite -->
      <xsd:element name="createFavorite">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="id" type="tns:id"/>
            <xsd:element name="favoriteId" type="tns:id" minOccurs="0"/>
            <xsd:element name="authToken" type="tns:authToken"/>
            <xsd:element name="deviceId" type="tns:deviceId" minOccurs="0"/>
            <xsd:element name="householdId" type="tns:householdId" minOccurs="0"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="createFavoriteResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="createFavoriteResult">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="id" type="tns:id" minOccurs="0"/>
                  <xsd:element name="itemType" type="tns:itemType" minOccurs="0"/>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <!-- deleteFavorite -->
      <xsd:element name="deleteFavorite">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="id" type="tns:id"/>
            <xsd:element name="authToken" type="tns:authToken"/>
            <xsd:element name="deviceId" type="tns:deviceId" minOccurs="0"/>
            <xsd:element name="householdId" type="tns:householdId" minOccurs="0"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="deleteFavoriteResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="deleteFavoriteResult">
              <xsd:complexType>
                <xsd:sequence/>
              </xsd:complexType>
            </xsd:element>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <!-- getFavorites -->
      <xsd:element name="getFavorites">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="index" type="xsd:int"/>
            <xsd:element name="count" type="xsd:int"/>
            <xsd:element name="authToken" type="tns:authToken"/>
            <xsd:element name="deviceId" type="tns:deviceId" minOccurs="0"/>
            <xsd:element name="householdId" type="tns:householdId" minOccurs="0"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="getFavoritesResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="getFavoritesResult" type="tns:mediaList"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <!-- reportStatus -->
      <xsd:element name="reportStatus">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="id" type="tns:id"/>
            <xsd:element name="status" type="xsd:int"/>
            <xsd:element name="authToken" type="tns:authToken"/>
            <xsd:element name="deviceId" type="tns:deviceId" minOccurs="0"/>
            <xsd:element name="householdId" type="tns:householdId" minOccurs="0"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="reportStatusResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="reportStatusResult">
              <xsd:complexType>
                <xsd:sequence/>
              </xsd:complexType>
            </xsd:element>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <!-- setPlayed -->
      <xsd:element name="setPlayed">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="id" type="tns:id"/>
            <xsd:element name="authToken" type="tns:authToken"/>
            <xsd:element name="deviceId" type="tns:deviceId" minOccurs="0"/>
            <xsd:element name="householdId" type="tns:householdId" minOccurs="0"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="setPlayedResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="setPlayedResult">
              <xsd:complexType>
                <xsd:sequence/>
              </xsd:complexType>
            </xsd:element>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <!-- getUserInfo -->
      <xsd:element name="getUserInfo">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="authToken" type="tns:authToken"/>
            <xsd:element name="deviceId" type="tns:deviceId" minOccurs="0"/>
            <xsd:element name="householdId" type="tns:householdId" minOccurs="0"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="getUserInfoResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="getUserInfoResult">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="isUserInitialized" type="xsd:boolean" minOccurs="0"/>
                  <xsd:element name="nickname" type="xsd:string" minOccurs="0"/>
                  <xsd:element name="isTrial" type="xsd:boolean" minOccurs="0"/>
                  <xsd:element name="trialExpiry" type="xsd:dateTime" minOccurs="0"/>
                  <xsd:element name="credentials" type="xsd:string" minOccurs="0"/>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <!-- getAccount -->
      <xsd:element name="getAccount">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="authToken" type="tns:authToken"/>
            <xsd:element name="deviceId" type="tns:deviceId" minOccurs="0"/>
            <xsd:element name="householdId" type="tns:householdId" minOccurs="0"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="getAccountResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="getAccountResult">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="accountType" type="xsd:string" minOccurs="0"/>
                  <xsd:element name="isExpired" type="xsd:boolean" minOccurs="0"/>
                  <xsd:element name="accountUDN" type="xsd:string" minOccurs="0"/>
                  <xsd:element name="accountDescriptor" type="xsd:string" minOccurs="0"/>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <!-- getServerDate -->
      <xsd:element name="getServerDate">
        <xsd:complexType>
          <xsd:sequence/>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="getServerDateResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="getServerDateResult">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="serverDate" type="xsd:dateTime"/>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <!-- getItemMetadata -->
      <xsd:element name="getItemMetadata">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="id" type="tns:id"/>
            <xsd:element name="authToken" type="tns:authToken"/>
            <xsd:element name="deviceId" type="tns:deviceId" minOccurs="0"/>
            <xsd:element name="householdId" type="tns:householdId" minOccurs="0"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="getItemMetadataResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="getItemMetadataResult" type="tns:mediaMetadata"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

    </xsd:schema>
  </wsdl:types>

  <!-- =====================================================
       MESSAGES
       ===================================================== -->

  <wsdl:message name="getAppLinkRequest">
    <wsdl:part name="parameters" element="tns:getAppLink"/>
  </wsdl:message>
  <wsdl:message name="getAppLinkResponse">
    <wsdl:part name="parameters" element="tns:getAppLinkResponse"/>
  </wsdl:message>

  <wsdl:message name="getDeviceAuthTokenRequest">
    <wsdl:part name="parameters" element="tns:getDeviceAuthToken"/>
  </wsdl:message>
  <wsdl:message name="getDeviceAuthTokenResponse">
    <wsdl:part name="parameters" element="tns:getDeviceAuthTokenResponse"/>
  </wsdl:message>

  <wsdl:message name="refreshAuthTokenRequest">
    <wsdl:part name="parameters" element="tns:refreshAuthToken"/>
  </wsdl:message>
  <wsdl:message name="refreshAuthTokenResponse">
    <wsdl:part name="parameters" element="tns:refreshAuthTokenResponse"/>
  </wsdl:message>

  <wsdl:message name="getMetadataRequest">
    <wsdl:part name="parameters" element="tns:getMetadata"/>
  </wsdl:message>
  <wsdl:message name="getMetadataResponse">
    <wsdl:part name="parameters" element="tns:getMetadataResponse"/>
  </wsdl:message>

  <wsdl:message name="getMediaMetadataRequest">
    <wsdl:part name="parameters" element="tns:getMediaMetadata"/>
  </wsdl:message>
  <wsdl:message name="getMediaMetadataResponse">
    <wsdl:part name="parameters" element="tns:getMediaMetadataResponse"/>
  </wsdl:message>

  <wsdl:message name="getExtendedMetadataRequest">
    <wsdl:part name="parameters" element="tns:getExtendedMetadata"/>
  </wsdl:message>
  <wsdl:message name="getExtendedMetadataResponse">
    <wsdl:part name="parameters" element="tns:getExtendedMetadataResponse"/>
  </wsdl:message>

  <wsdl:message name="getMediaURIRequest">
    <wsdl:part name="parameters" element="tns:getMediaURI"/>
  </wsdl:message>
  <wsdl:message name="getMediaURIResponse">
    <wsdl:part name="parameters" element="tns:getMediaURIResponse"/>
  </wsdl:message>

  <wsdl:message name="searchRequest">
    <wsdl:part name="parameters" element="tns:search"/>
  </wsdl:message>
  <wsdl:message name="searchResponse">
    <wsdl:part name="parameters" element="tns:searchResponse"/>
  </wsdl:message>

  <wsdl:message name="getLastUpdateRequest">
    <wsdl:part name="parameters" element="tns:getLastUpdate"/>
  </wsdl:message>
  <wsdl:message name="getLastUpdateResponse">
    <wsdl:part name="parameters" element="tns:getLastUpdateResponse"/>
  </wsdl:message>

  <wsdl:message name="getScrollCountRequest">
    <wsdl:part name="parameters" element="tns:getScrollCount"/>
  </wsdl:message>
  <wsdl:message name="getScrollCountResponse">
    <wsdl:part name="parameters" element="tns:getScrollCountResponse"/>
  </wsdl:message>

  <wsdl:message name="getExtendedMetadataTextRequest">
    <wsdl:part name="parameters" element="tns:getExtendedMetadataText"/>
  </wsdl:message>
  <wsdl:message name="getExtendedMetadataTextResponse">
    <wsdl:part name="parameters" element="tns:getExtendedMetadataTextResponse"/>
  </wsdl:message>

  <wsdl:message name="rateItemRequest">
    <wsdl:part name="parameters" element="tns:rateItem"/>
  </wsdl:message>
  <wsdl:message name="rateItemResponse">
    <wsdl:part name="parameters" element="tns:rateItemResponse"/>
  </wsdl:message>

  <wsdl:message name="reportPlayStatusRequest">
    <wsdl:part name="parameters" element="tns:reportPlayStatus"/>
  </wsdl:message>
  <wsdl:message name="reportPlayStatusResponse">
    <wsdl:part name="parameters" element="tns:reportPlayStatusResponse"/>
  </wsdl:message>

  <wsdl:message name="getPlaylistsRequest">
    <wsdl:part name="parameters" element="tns:getPlaylists"/>
  </wsdl:message>
  <wsdl:message name="getPlaylistsResponse">
    <wsdl:part name="parameters" element="tns:getPlaylistsResponse"/>
  </wsdl:message>

  <wsdl:message name="createFavoriteRequest">
    <wsdl:part name="parameters" element="tns:createFavorite"/>
  </wsdl:message>
  <wsdl:message name="createFavoriteResponse">
    <wsdl:part name="parameters" element="tns:createFavoriteResponse"/>
  </wsdl:message>

  <wsdl:message name="deleteFavoriteRequest">
    <wsdl:part name="parameters" element="tns:deleteFavorite"/>
  </wsdl:message>
  <wsdl:message name="deleteFavoriteResponse">
    <wsdl:part name="parameters" element="tns:deleteFavoriteResponse"/>
  </wsdl:message>

  <wsdl:message name="getFavoritesRequest">
    <wsdl:part name="parameters" element="tns:getFavorites"/>
  </wsdl:message>
  <wsdl:message name="getFavoritesResponse">
    <wsdl:part name="parameters" element="tns:getFavoritesResponse"/>
  </wsdl:message>

  <wsdl:message name="reportStatusRequest">
    <wsdl:part name="parameters" element="tns:reportStatus"/>
  </wsdl:message>
  <wsdl:message name="reportStatusResponse">
    <wsdl:part name="parameters" element="tns:reportStatusResponse"/>
  </wsdl:message>

  <wsdl:message name="setPlayedRequest">
    <wsdl:part name="parameters" element="tns:setPlayed"/>
  </wsdl:message>
  <wsdl:message name="setPlayedResponse">
    <wsdl:part name="parameters" element="tns:setPlayedResponse"/>
  </wsdl:message>

  <wsdl:message name="getUserInfoRequest">
    <wsdl:part name="parameters" element="tns:getUserInfo"/>
  </wsdl:message>
  <wsdl:message name="getUserInfoResponse">
    <wsdl:part name="parameters" element="tns:getUserInfoResponse"/>
  </wsdl:message>

  <wsdl:message name="getAccountRequest">
    <wsdl:part name="parameters" element="tns:getAccount"/>
  </wsdl:message>
  <wsdl:message name="getAccountResponse">
    <wsdl:part name="parameters" element="tns:getAccountResponse"/>
  </wsdl:message>

  <wsdl:message name="getServerDateRequest">
    <wsdl:part name="parameters" element="tns:getServerDate"/>
  </wsdl:message>
  <wsdl:message name="getServerDateResponse">
    <wsdl:part name="parameters" element="tns:getServerDateResponse"/>
  </wsdl:message>

  <wsdl:message name="getItemMetadataRequest">
    <wsdl:part name="parameters" element="tns:getItemMetadata"/>
  </wsdl:message>
  <wsdl:message name="getItemMetadataResponse">
    <wsdl:part name="parameters" element="tns:getItemMetadataResponse"/>
  </wsdl:message>

  <!-- =====================================================
       PORT TYPE
       ===================================================== -->
  <wsdl:portType name="SonosSoap">

    <wsdl:operation name="getAppLink">
      <wsdl:input message="tns:getAppLinkRequest"/>
      <wsdl:output message="tns:getAppLinkResponse"/>
    </wsdl:operation>

    <wsdl:operation name="getDeviceAuthToken">
      <wsdl:input message="tns:getDeviceAuthTokenRequest"/>
      <wsdl:output message="tns:getDeviceAuthTokenResponse"/>
    </wsdl:operation>

    <wsdl:operation name="refreshAuthToken">
      <wsdl:input message="tns:refreshAuthTokenRequest"/>
      <wsdl:output message="tns:refreshAuthTokenResponse"/>
    </wsdl:operation>

    <wsdl:operation name="getMetadata">
      <wsdl:input message="tns:getMetadataRequest"/>
      <wsdl:output message="tns:getMetadataResponse"/>
    </wsdl:operation>

    <wsdl:operation name="getMediaMetadata">
      <wsdl:input message="tns:getMediaMetadataRequest"/>
      <wsdl:output message="tns:getMediaMetadataResponse"/>
    </wsdl:operation>

    <wsdl:operation name="getExtendedMetadata">
      <wsdl:input message="tns:getExtendedMetadataRequest"/>
      <wsdl:output message="tns:getExtendedMetadataResponse"/>
    </wsdl:operation>

    <wsdl:operation name="getMediaURI">
      <wsdl:input message="tns:getMediaURIRequest"/>
      <wsdl:output message="tns:getMediaURIResponse"/>
    </wsdl:operation>

    <wsdl:operation name="search">
      <wsdl:input message="tns:searchRequest"/>
      <wsdl:output message="tns:searchResponse"/>
    </wsdl:operation>

    <wsdl:operation name="getLastUpdate">
      <wsdl:input message="tns:getLastUpdateRequest"/>
      <wsdl:output message="tns:getLastUpdateResponse"/>
    </wsdl:operation>

    <wsdl:operation name="getScrollCount">
      <wsdl:input message="tns:getScrollCountRequest"/>
      <wsdl:output message="tns:getScrollCountResponse"/>
    </wsdl:operation>

    <wsdl:operation name="getExtendedMetadataText">
      <wsdl:input message="tns:getExtendedMetadataTextRequest"/>
      <wsdl:output message="tns:getExtendedMetadataTextResponse"/>
    </wsdl:operation>

    <wsdl:operation name="rateItem">
      <wsdl:input message="tns:rateItemRequest"/>
      <wsdl:output message="tns:rateItemResponse"/>
    </wsdl:operation>

    <wsdl:operation name="reportPlayStatus">
      <wsdl:input message="tns:reportPlayStatusRequest"/>
      <wsdl:output message="tns:reportPlayStatusResponse"/>
    </wsdl:operation>

    <wsdl:operation name="getPlaylists">
      <wsdl:input message="tns:getPlaylistsRequest"/>
      <wsdl:output message="tns:getPlaylistsResponse"/>
    </wsdl:operation>

    <wsdl:operation name="createFavorite">
      <wsdl:input message="tns:createFavoriteRequest"/>
      <wsdl:output message="tns:createFavoriteResponse"/>
    </wsdl:operation>

    <wsdl:operation name="deleteFavorite">
      <wsdl:input message="tns:deleteFavoriteRequest"/>
      <wsdl:output message="tns:deleteFavoriteResponse"/>
    </wsdl:operation>

    <wsdl:operation name="getFavorites">
      <wsdl:input message="tns:getFavoritesRequest"/>
      <wsdl:output message="tns:getFavoritesResponse"/>
    </wsdl:operation>

    <wsdl:operation name="reportStatus">
      <wsdl:input message="tns:reportStatusRequest"/>
      <wsdl:output message="tns:reportStatusResponse"/>
    </wsdl:operation>

    <wsdl:operation name="setPlayed">
      <wsdl:input message="tns:setPlayedRequest"/>
      <wsdl:output message="tns:setPlayedResponse"/>
    </wsdl:operation>

    <wsdl:operation name="getUserInfo">
      <wsdl:input message="tns:getUserInfoRequest"/>
      <wsdl:output message="tns:getUserInfoResponse"/>
    </wsdl:operation>

    <wsdl:operation name="getAccount">
      <wsdl:input message="tns:getAccountRequest"/>
      <wsdl:output message="tns:getAccountResponse"/>
    </wsdl:operation>

    <wsdl:operation name="getServerDate">
      <wsdl:input message="tns:getServerDateRequest"/>
      <wsdl:output message="tns:getServerDateResponse"/>
    </wsdl:operation>

    <wsdl:operation name="getItemMetadata">
      <wsdl:input message="tns:getItemMetadataRequest"/>
      <wsdl:output message="tns:getItemMetadataResponse"/>
    </wsdl:operation>

  </wsdl:portType>

  <!-- =====================================================
       BINDING (SOAP 1.1, document/literal)
       ===================================================== -->
  <wsdl:binding name="SonosSoap" type="tns:SonosSoap">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>

    <wsdl:operation name="getAppLink">
      <soap:operation soapAction="http://www.sonos.com/Services/1.1#getAppLink"/>
      <wsdl:input><soap:body use="literal"/></wsdl:input>
      <wsdl:output><soap:body use="literal"/></wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="getDeviceAuthToken">
      <soap:operation soapAction="http://www.sonos.com/Services/1.1#getDeviceAuthToken"/>
      <wsdl:input><soap:body use="literal"/></wsdl:input>
      <wsdl:output><soap:body use="literal"/></wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="refreshAuthToken">
      <soap:operation soapAction="http://www.sonos.com/Services/1.1#refreshAuthToken"/>
      <wsdl:input><soap:body use="literal"/></wsdl:input>
      <wsdl:output><soap:body use="literal"/></wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="getMetadata">
      <soap:operation soapAction="http://www.sonos.com/Services/1.1#getMetadata"/>
      <wsdl:input><soap:body use="literal"/></wsdl:input>
      <wsdl:output><soap:body use="literal"/></wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="getMediaMetadata">
      <soap:operation soapAction="http://www.sonos.com/Services/1.1#getMediaMetadata"/>
      <wsdl:input><soap:body use="literal"/></wsdl:input>
      <wsdl:output><soap:body use="literal"/></wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="getExtendedMetadata">
      <soap:operation soapAction="http://www.sonos.com/Services/1.1#getExtendedMetadata"/>
      <wsdl:input><soap:body use="literal"/></wsdl:input>
      <wsdl:output><soap:body use="literal"/></wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="getMediaURI">
      <soap:operation soapAction="http://www.sonos.com/Services/1.1#getMediaURI"/>
      <wsdl:input><soap:body use="literal"/></wsdl:input>
      <wsdl:output><soap:body use="literal"/></wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="search">
      <soap:operation soapAction="http://www.sonos.com/Services/1.1#search"/>
      <wsdl:input><soap:body use="literal"/></wsdl:input>
      <wsdl:output><soap:body use="literal"/></wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="getLastUpdate">
      <soap:operation soapAction="http://www.sonos.com/Services/1.1#getLastUpdate"/>
      <wsdl:input><soap:body use="literal"/></wsdl:input>
      <wsdl:output><soap:body use="literal"/></wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="getScrollCount">
      <soap:operation soapAction="http://www.sonos.com/Services/1.1#getScrollCount"/>
      <wsdl:input><soap:body use="literal"/></wsdl:input>
      <wsdl:output><soap:body use="literal"/></wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="getExtendedMetadataText">
      <soap:operation soapAction="http://www.sonos.com/Services/1.1#getExtendedMetadataText"/>
      <wsdl:input><soap:body use="literal"/></wsdl:input>
      <wsdl:output><soap:body use="literal"/></wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="rateItem">
      <soap:operation soapAction="http://www.sonos.com/Services/1.1#rateItem"/>
      <wsdl:input><soap:body use="literal"/></wsdl:input>
      <wsdl:output><soap:body use="literal"/></wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="reportPlayStatus">
      <soap:operation soapAction="http://www.sonos.com/Services/1.1#reportPlayStatus"/>
      <wsdl:input><soap:body use="literal"/></wsdl:input>
      <wsdl:output><soap:body use="literal"/></wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="getPlaylists">
      <soap:operation soapAction="http://www.sonos.com/Services/1.1#getPlaylists"/>
      <wsdl:input><soap:body use="literal"/></wsdl:input>
      <wsdl:output><soap:body use="literal"/></wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="createFavorite">
      <soap:operation soapAction="http://www.sonos.com/Services/1.1#createFavorite"/>
      <wsdl:input><soap:body use="literal"/></wsdl:input>
      <wsdl:output><soap:body use="literal"/></wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="deleteFavorite">
      <soap:operation soapAction="http://www.sonos.com/Services/1.1#deleteFavorite"/>
      <wsdl:input><soap:body use="literal"/></wsdl:input>
      <wsdl:output><soap:body use="literal"/></wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="getFavorites">
      <soap:operation soapAction="http://www.sonos.com/Services/1.1#getFavorites"/>
      <wsdl:input><soap:body use="literal"/></wsdl:input>
      <wsdl:output><soap:body use="literal"/></wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="reportStatus">
      <soap:operation soapAction="http://www.sonos.com/Services/1.1#reportStatus"/>
      <wsdl:input><soap:body use="literal"/></wsdl:input>
      <wsdl:output><soap:body use="literal"/></wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="setPlayed">
      <soap:operation soapAction="http://www.sonos.com/Services/1.1#setPlayed"/>
      <wsdl:input><soap:body use="literal"/></wsdl:input>
      <wsdl:output><soap:body use="literal"/></wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="getUserInfo">
      <soap:operation soapAction="http://www.sonos.com/Services/1.1#getUserInfo"/>
      <wsdl:input><soap:body use="literal"/></wsdl:input>
      <wsdl:output><soap:body use="literal"/></wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="getAccount">
      <soap:operation soapAction="http://www.sonos.com/Services/1.1#getAccount"/>
      <wsdl:input><soap:body use="literal"/></wsdl:input>
      <wsdl:output><soap:body use="literal"/></wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="getServerDate">
      <soap:operation soapAction="http://www.sonos.com/Services/1.1#getServerDate"/>
      <wsdl:input><soap:body use="literal"/></wsdl:input>
      <wsdl:output><soap:body use="literal"/></wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="getItemMetadata">
      <soap:operation soapAction="http://www.sonos.com/Services/1.1#getItemMetadata"/>
      <wsdl:input><soap:body use="literal"/></wsdl:input>
      <wsdl:output><soap:body use="literal"/></wsdl:output>
    </wsdl:operation>

  </wsdl:binding>

  <!-- =====================================================
       SERVICE
       ===================================================== -->
  <wsdl:service name="Sonos">
    <wsdl:port name="SonosSoap" binding="tns:SonosSoap">
      <!-- L'URL du endpoint SOAP. En production : https://sonos.korgi.fr/ -->
      <soap:address location="https://sonos.korgi.fr/"/>
    </wsdl:port>
  </wsdl:service>

</wsdl:definitions>
