Pumpkin-MC/Pumpkin · error · LicenseError

License was revoked or refunded

Error message

License was revoked or refunded: {0}

What it means

LicenseError::Revoked means the marketplace reports the plugin's license as revoked or refunded, so the plugin is no longer licensed to run. The license string/identifier is included via {0}. This is a definitive licensing decision from the server, not a transient failure.

Solutions

  1. Purchase a new/valid license for the plugin on the marketplace.
  2. Verify you are using the correct license key/account (transfers may have moved it).
  3. Contact marketplace support if the revocation appears erroneous.
  4. Remove or disable the plugin if no valid license is obtained.
  5. Check the marketplace account email for refund/revocation notices.

Example fix

// before
let license = manager.verify()?; // fails with Revoked
// after
match manager.verify() {
    Ok(l) => enable_plugin(l),
    Err(LicenseError::Revoked(id)) => {
        tracing::error!("license {id} revoked — disable paid features");
        disable_paid_features();
    }
    Err(e) => return Err(e.into()),
}
Defensive patterns

Strategy: try-catch

Type guard

fn is_revoked(e: &LicenseError) -> bool {
    matches!(e, LicenseError::Revoked(_))
}

Try / catch

match manager.verify() {
    Ok(l) => activate(l),
    Err(LicenseError::Revoked(id)) => {
        tracing::error!("license {id} revoked/refunded — disabling plugin");
        disable_plugin();
    }
    Err(e) => return Err(e.into()),
}

Prevention

When it happens

Trigger: License verification against the marketplace returns a revoked/refunded status for the plugin's license; occurs on initial check and on periodic re-validation or offline-grace expiry followed by re-check.

Common situations: User requested a refund on the marketplace; license was revoked for terms-of-service violations; license transferred to another account/server; shared license key used beyond its entitlement.

Related errors


AI-assisted analysis of Pumpkin-MC/Pumpkin@8d4639e25a (2026-09-09). Data as JSON: /api/errors/4bf9e67c6cce0ba8. Report an issue: GitHub.

Appendix: source

Thrown at crates/pumpkin-plugin-utils/src/license.rs:24

};
use std::{
    path::{Path, PathBuf},
    time::{Duration, SystemTime, UNIX_EPOCH},
};
use thiserror::Error;
use tracing::{debug, info};

/// License checking and verification errors.
#[derive(Debug, Error)]
pub enum LicenseError {
    /// HTTP communication error with marketplace.
    #[error("Marketplace HTTP error: {0}")]
    Http(#[from] HttpError),
    /// Metadata validation error (e.g. missing license on paid plugin).
    #[error("License metadata mismatch: {0}")]
    MetadataMismatch(String),
    /// License revoked or refunded by marketplace.
    #[error("License was revoked or refunded: {0}")]
    Revoked(String),
    /// License is expired.
    #[error("License has expired on {0}")]
    Expired(String),
    /// I/O error reading/writing license cache.
    #[error("I/O error with license storage: {0}")]
    Io(#[from] std::io::Error),
    /// JSON serialization error.
    #[error("JSON serialization error: {0}")]
    Json(#[from] serde_json::Error),
    /// Plugin is unsigned or missing marketplace metadata.
    #[error("Plugin is unsigned or missing marketplace metadata")]
    UnsignedPlugin,
    /// Plugin has not been initialized.
    #[error(
        "Plugin-utils has not been initialized (call pumpkin_plugin_utils::init(context) first)"
    )]
    NotInitialized,

View on GitHub (pinned to 8d4639e25a)