/**
  * cancel a subscription
  *
  * @param CancelSubscriptionRequest|array|string $packageNameOrRequestOrArray
  * @param string|null $subscriptionId
  * @param string|null $purchaseToken
  * @return \Nikapps\BazaarApiPhp\Models\Responses\CancelSubscription
  * @throws ExpiredAccessTokenException
  * @throws \Nikapps\BazaarApiPhp\Exceptions\InvalidPackageNameException
  * @throws \Nikapps\BazaarApiPhp\Exceptions\InvalidTokenException
  * @throws \Nikapps\BazaarApiPhp\Exceptions\NetworkErrorException
  * @throws \Nikapps\BazaarApiPhp\Exceptions\NotFoundException
  * @throws \Nikapps\BazaarApiPhp\Exceptions\InvalidJsonException
  */
 public function cancelSubscription($packageNameOrRequestOrArray, $subscriptionId = null, $purchaseToken = null)
 {
     $cancelSubscriptionRequest = $this->makeCancelSubscriptionRequest($packageNameOrRequestOrArray, $subscriptionId, $purchaseToken);
     try {
         return $this->bazaarApi->cancelSubscription($cancelSubscriptionRequest);
     } catch (ExpiredAccessTokenException $e) {
         if (!$this->config->get('bazaar-api-laravel::api.auto_refresh_token')) {
             //auto refresh token is disabled
             throw new ExpiredAccessTokenException();
         } else {
             //refresh access token
             $this->refreshToken();
             //retry request
             return $this->cancelSubscription($cancelSubscriptionRequest);
         }
     }
 }