/// <summary>
 /// Purges all node item.
 /// </summary>
 /// <param name="iqSender">The <see cref="IClientIqSender"/></param>
 /// <param name="to">Jid of the pubsub service for this request</param>
 /// <param name="node">The node.</param>
 /// <param name="timeout">The timeout in milliseconds.</param>
 /// <param name="cancellationToken">The cancellation token used to cancel the request.</param>
 /// <returns></returns>
 /// <remarks>
 /// If a service persists published items, a node owner may want to purge
 /// the node of all published items (thus removing all items from the
 /// persistent store, with the exception of the last published item,
 /// which MAY be cached). It is OPTIONAL for a service to implement this
 /// feature.
 /// </remarks>
 public static async Task <Iq> PurgeNodeAsync(
     this IClientIqSender iqSender, Jid to, string node, int timeout, CancellationToken cancellationToken)
 {
     return(await iqSender.SendIqAsync(PubSubBuilder.PurgeNode(to, node), timeout, cancellationToken));
 }
 /// <summary>
 /// Create an instant node
 /// </summary>
 /// <param name="iqSender">The <see cref="IClientIqSender"/></param>
 /// <param name="to">Jid of the PubSub service.</param>
 /// <param name="timeout">The timeout in milliseconds.</param>
 /// <param name="cancellationToken">The cancellation token used to cancel the request.</param>
 /// <returns></returns>
 /// <remarks>
 /// Instant nodes are nodes whose node is is automatically generated by a pubsub service.
 /// </remarks>
 public static async Task <Iq> CreateInstantNodeAsync(
     this IClientIqSender iqSender, Jid to, int timeout, CancellationToken cancellationToken)
 {
     return(await iqSender.SendIqAsync(PubSubBuilder.CreateInstantNode(to), timeout, cancellationToken));
 }
 /// <summary>
 /// Retrieve Subscriptions List
 /// </summary>
 /// <param name="iqSender">The <see cref="IClientIqSender"/></param>
 /// <param name="to">To.</param>
 /// <param name="node">The node.</param>
 /// <param name="timeout">The timeout in milliseconds.</param>
 /// <param name="cancellationToken">The cancellation token used to cancel the request.</param>
 /// <returns></returns>
 public static async Task <Iq> RequestSubscriptionsListAsync(
     this IClientIqSender iqSender, Jid to, string node, int timeout, CancellationToken cancellationToken)
 {
     return(await iqSender.SendIqAsync(PubSubBuilder.RequestSubscriptionsList(to, node), timeout, cancellationToken));
 }
 /// <summary>
 /// Unsubscribes from a node.
 /// </summary>
 /// <param name="iqSender">The <see cref="IClientIqSender"/></param>
 /// <param name="to">To.</param>
 /// <param name="node">The node.</param>
 /// <param name="subId">The sub id.</param>
 /// <param name="jid">The jid.</param>
 /// <param name="timeout">The timeout in milliseconds.</param>
 /// <param name="cancellationToken">The cancellation token used to cancel the request.</param>
 /// <returns></returns>
 public static async Task <Iq> UnsubscribeAsync(
     this IClientIqSender iqSender, Jid to, string node, string subId, Jid jid, int timeout, CancellationToken cancellationToken)
 {
     return(await iqSender.SendIqAsync(PubSubBuilder.Unsubscribe(to, node, subId, jid), timeout, cancellationToken));
 }
 /// <summary>
 /// Submits the node configuration.
 /// </summary>
 /// <param name="iqSender">The <see cref="IClientIqSender"/></param>
 /// <param name="to">To.</param>
 /// <param name="node">The node.</param>
 /// <param name="form">The configuration form.</param>
 /// <param name="timeout">The timeout in milliseconds.</param>
 /// <param name="cancellationToken">The cancellation token used to cancel the request.</param>
 /// <returns></returns>
 public static async Task <Iq> SubmitNodeConfigurationAsync(
     this IClientIqSender iqSender, Jid to, string node, XData form, int timeout, CancellationToken cancellationToken)
 {
     return(await iqSender.SendIqAsync(PubSubBuilder.SubmitNodeConfiguration(to, node, form), timeout, cancellationToken));
 }
 /// <summary>
 /// Retracts the items.
 /// </summary>
 /// <param name="iqSender">The <see cref="IClientIqSender"/></param>
 /// <param name="to">Jid of the pubsub service for this request</param>
 /// <param name="node">The node.</param>
 /// <param name="itemIds">The item ids.</param>
 /// <param name="timeout">The timeout in milliseconds.</param>
 /// <param name="cancellationToken">The cancellation token used to cancel the request.</param>
 /// <returns></returns>
 public static async Task <Iq> RetractItemsAsync(
     this IClientIqSender iqSender, Jid to, string node, string[] itemIds, int timeout, CancellationToken cancellationToken)
 {
     return(await iqSender.SendIqAsync(PubSubBuilder.RetractItems(to, node, itemIds), timeout, cancellationToken));
 }
 /// <summary>
 /// Edit the affiliations of an entity associated with a given node or set the affiliations for a new entity.
 /// The owner MUST send only modified affiliations (i.e., a "delta"), not the complete list.
 /// </summary>
 /// <param name="iqSender">The <see cref="IClientIqSender"/></param>
 /// <param name="to">Jid of the PubSub service.</param>
 /// <param name="node">The node.</param>
 /// <param name="affiliations">The affiliations.</param>
 /// <param name="timeout">The timeout in milliseconds.</param>
 /// <param name="cancellationToken">The cancellation token used to cancel the request.</param>
 /// <returns></returns>
 public static async Task <Iq> ModifyAffiliationsListAsync(
     this IClientIqSender iqSender, Jid to, string node, Xmpp.PubSub.Owner.Affiliation[] affiliations, int timeout, CancellationToken cancellationToken)
 {
     return(await iqSender.SendIqAsync(PubSubBuilder.ModifyAffiliations(to, node, affiliations), timeout, cancellationToken));
 }
 /// <summary>
 /// Creates a new node.
 /// </summary>
 /// <param name="iqSender">The <see cref="IClientIqSender"/></param>
 /// <param name="to">To.</param>
 /// <param name="node">The node.</param>
 /// <param name="config">The config.</param>
 /// <param name="timeout">The timeout in milliseconds.</param>
 /// <param name="cancellationToken">The cancellation token used to cancel the request.</param>
 /// <returns></returns>
 public static async Task <Iq> CreateNodeAsync(
     this IClientIqSender iqSender, Jid to, string node, Configure config, int timeout, CancellationToken cancellationToken)
 {
     return(await iqSender.SendIqAsync(PubSubBuilder.CreateNode(to, node, config), timeout, cancellationToken));
 }