Stirling-Tools/Stirling-PDF · error · Error

Supabase is not configured. License key lookup is not availa

Error message

Supabase is not configured. License key lookup is not available.

What it means

Thrown by checkLicenseKey when Supabase isn't configured. License-key lookup is performed by the Supabase edge function get-license-key (mapping an installation_id to a license), so without Supabase the lookup can't run. The guard fails fast with a message naming the unavailable capability (license key lookup).

Source

Thrown at frontend/editor/src/proprietary/services/licenseService.ts:430

  async getInstallationId(): Promise<string> {
    try {
      const response = await apiClient.get("/api/v1/admin/installation-id");

      const data: InstallationIdResponse = await response.data;
      return data.installationId;
    } catch (error) {
      console.error("Error fetching installation ID:", error);
      throw error;
    }
  },

  /**
   * Check if license key is ready for the given installation ID
   */
  async checkLicenseKey(installationId: string): Promise<LicenseKeyResponse> {
    // Check if Supabase is configured
    if (!isSupabaseConfigured || !supabase) {
      throw new Error(
        "Supabase is not configured. License key lookup is not available.",
      );
    }

    const { data, error } = await supabase.functions.invoke("get-license-key", {
      body: {
        installation_id: installationId,
      },
    });

    if (error) {
      throw new Error(`Failed to check license key: ${error.message}`);
    }

    return data as LicenseKeyResponse;
  },

  /**

View on GitHub (pinned to 9ef20dcab8)

Solutions

  1. Gate the license-activation UI on isSupabaseConfigured.
  2. Set VITE_SUPABASE_URL/VITE_SUPABASE_ANON_KEY in the active env layer.
  3. Catch the error and show a 'license lookup unavailable in this mode' message.

Example fix

// before
const res = await licenseService.checkLicenseKey(installationId);

// after
if (!isSupabaseConfigured) {
  showToast(t('license.lookupUnavailable'));
  return;
}
const res = await licenseService.checkLicenseKey(installationId);
Defensive patterns

Strategy: validation

Validate before calling

if (!isSupabaseConfigured) {
  showToast(t('license.lookupUnavailable'));
  return;
}

Type guard

export function canLookupLicenseKey(): boolean {
  return isSupabaseConfigured;
}

Try / catch

try {
  await licenseService.checkLicenseKey(installationId);
} catch (e) {
  if (/not configured/i.test(e instanceof Error ? e.message : "")) {
    showToast(t('license.lookupUnavailable'));
  } else throw e;
}

Prevention

When it happens

Trigger: Calling checkLicenseKey(installationId) in a build without Supabase configured; isSupabaseConfigured false because env vars missing; activation flow run in a flavor that omits Supabase.

Common situations: Self-hosted deploy without Supabase env vars; dev environment without .local Supabase keys; the license-activation UI rendered when the licensing backend is unavailable.

Related errors


AI-assisted analysis of Stirling-Tools/Stirling-PDF@9ef20dcab8 (2026-08-13). Data as JSON: /api/errors/da2ef56617c3083d. Report an issue: GitHub.