Skip to content

Conversation

@xmok
Copy link
Contributor

@xmok xmok commented Jan 10, 2026

Description

This is a Raycast extension for managing MXroute using the newly introduced API.

Screencast

N/A as don't want to expose details but screenshots are available!

Checklist

@raycastbot
Copy link
Collaborator

Congratulations on your new Raycast extension! 🚀

Due to our current reduced availability, the initial review may take up to 10-15 business days.

Once the PR is approved and merged, the extension will be available on our Store.

@xmok xmok marked this pull request as ready for review January 10, 2026 06:41
@greptile-apps
Copy link
Contributor

greptile-apps bot commented Jan 10, 2026

Greptile Overview

Greptile Summary

This PR introduces a new Raycast extension for managing MXroute email hosting services through their API. The extension provides comprehensive domain, email account, forwarder, and DNS management capabilities.

What Changed

  • Added complete MXroute extension with domain management, email accounts, forwarders, and advanced settings
  • Implements API client with proper authentication headers (X-Api-Key, X-Server, X-Username)
  • Provides UI for managing catch-all email settings and viewing DNS configuration
  • Includes proper metadata screenshots and documentation

Critical Issues Found

Logic Errors (Must Fix)

  1. Icon display bug in domain list - domain.pointers is an array but treated as a number, causing incorrect Icon property access
  2. Validation rejects valid values - quota and limit fields reject "0" (which means unlimited) due to flawed !Number(value) logic
  3. ESLint configuration error - incorrect import path eslint/config will prevent linting from working

Missing Validations (Should Fix)

  • Email forwarder destinations lack validation - users can submit empty or invalid emails
  • Catch-all forward address has no email validation
  • Forwarder parsing only handles comma-separated format despite UI claiming "one per line or comma-separated"

Positive Aspects

  • Good use of Raycast utilities (useCachedPromise, useForm, getFavicon)
  • Proper TypeScript types defined
  • Follows Raycast patterns for confirmation dialogs and toast notifications
  • Metadata screenshots included as required
  • CHANGELOG.md present

Confidence Score: 2/5

  • This PR has critical logic bugs that will cause runtime errors and prevent core functionality from working correctly
  • Three critical bugs must be fixed before merge: (1) ESLint config syntax error prevents linting, (2) Icon lookup will fail due to array-to-string conversion, (3) Form validation incorrectly rejects valid "0" values. Additionally, missing email validation could lead to poor UX with API errors for invalid input.
  • Priority fixes needed in eslint.config.js (syntax error), manage-domains.tsx (icon bug), and email-accounts.tsx (validation logic). Review email-forwarders.tsx and advanced.tsx for missing validations.

Important Files Changed

File Analysis

Filename Score Overview
extensions/mxroute/src/manage-domains.tsx 2/5 Main domain management UI - contains critical bug in icon display logic (treating array as number)
extensions/mxroute/src/email-accounts.tsx 2/5 Email account management - contains validation bugs that reject valid "0" values for quota/limit fields
extensions/mxroute/src/email-forwarders.tsx 3/5 Email forwarder management - missing validation for destination emails and incomplete parsing logic
extensions/mxroute/src/advanced.tsx 3/5 Catch-all settings management - missing validation for forward email address
extensions/mxroute/eslint.config.js 1/5 ESLint configuration - contains syntax error in import statement that will prevent linting

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

9 files reviewed, 9 comments

Edit Code Review Agent Settings | Greptile

@greptile-apps
Copy link
Contributor

greptile-apps bot commented Jan 10, 2026

Additional Comments (1)

extensions/mxroute/eslint.config.js
The import path eslint/config is incorrect. There is no config export from the eslint package in this way. This will cause a runtime error when trying to run eslint.

The correct syntax for ESLint flat config is:

const { defineConfig } = require("@eslint/js");

Or simply remove the destructuring since Raycast's config works without it:

const raycastConfig = require("@raycast/eslint-config");

Copy link
Collaborator

@pernielsentikaer pernielsentikaer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me, approved 🔥

@raycastbot raycastbot merged commit e2211d5 into raycast:main Jan 12, 2026
@github-actions
Copy link
Contributor

Published to the Raycast Store:
https://raycast.com/xmok/mxroute

@raycastbot
Copy link
Collaborator

🎉 🎉 🎉

We've rewarded your Raycast account with some credits. You will soon be able to exchange them for some swag.

@xmok xmok deleted the ext/mxroute branch January 25, 2026 16:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels