static async apiList (req, res, next) {
    const results = {};
    const integrations = Integration.#integrations.all;

    const keys = req.user.getCont3xtKeys();

    for (const integration of integrations) {
      if (Object.keys(integration.itypes).length === 0) { continue; }

      let doable = true;

      // First check if user has disabled integration
      const disabled = keys?.[integration.name]?.disabled;
      if (disabled === true || disabled === 'true') {
        doable = false;
      }

      // If still doable check to see if all settings set
      if (doable && integration.settings) {
        for (const setting in integration.settings) {
          if (integration.settings[setting].required && !integration.getUserConfig(req.user, setting)) {
            doable = false;
            break;
          }
        }
      }

      // Check if integration has roles that can use integration
      if (doable && integration.viewRoles && !req.user.hasRole(integration.viewRoles)) {
        doable = false;
      }

      // Gather settings to be made accessible from the UI
      const uiSettings = Object.fromEntries(
        Object.entries(keys?.[integration.name] ?? {})
          .filter(([key, _]) => integration?.settings?.[key]?.uiSetting)
      );

      // User can override card display
      let card = integration.card;
      const cardstr = integration.getUserConfig(req.user, 'card');
      if (cardstr) {
        card = JSON.parse(cardstr);
        // Should normalize here
      }

      // User can override order
      const order = integration.getUserConfig(req.user, 'order', integration.order);

      results[integration.name] = {
        doable,
        cacheTimeout: integration.cacheable ? integration.cacheTimeout : -1,
        cachePolicy: integration.cachePolicy,
        icon: integration.icon,
        card,
        order,
        tidbits: integration.tidbits?.fields || [],
        uiSettings: uiSettings || {},
        locked: integration.locked
      };
    }

    return res.send({ success: true, integrations: results });
  }
GET - /api/integration

List out all the integrations. Integrations without any itypes are skipped.
@name /integration
@returns {Integrations[]} integrations - A map of integrations that the logged in user has configured
@returns {boolean} success - True if the request was successful, false otherwise