-
-
Notifications
You must be signed in to change notification settings - Fork 257
chore: rename public API error class #299
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Deploying usesend with
|
| Latest commit: |
a924a49
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://8a8c8fc8.usesend.pages.dev |
| Branch Preview URL: | https://codex-rename-unsendapierror.usesend.pages.dev |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
WalkthroughThis pull request renames the exported API error class from Possibly related PRs
Pre-merge checks❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No issues found across 17 files
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (2)
apps/web/src/server/public-api/api/emails/get-email.ts (1)
6-6: UseSendApiError usage is correct; consider aligning handler name with routeThe route now correctly uses
UseSendApiErrorfor theNOT_FOUNDcase with unchanged semantics. As a minor nit, the handler function is still namedsendin aget-emailroute file; consider renaming it (e.g.,getEmail) in a future cleanup for clarity across the codebase.Also applies to: 58-99, 91-94
apps/web/src/server/public-api/api-error.ts (1)
62-75: UseSendApiError class rename is complete and properly implemented; no backwards-compatibility alias addedThe rename from the previous class name to
UseSendApiErrorhas been fully migrated throughout the codebase with 50+ consistent usages across API endpoints, schemas, services, and handlers. ThehandleErrorfunction correctly usesinstanceof UseSendApiErrorat line 81, and error code mapping is preserved. However, no backwards-compatibility alias (e.g.,export { UseSendApiError as UnsendApiError }) has been added. Given this class resides in the public API surface (apps/web/src/server/public-api/), confirm whether external API consumers have been notified of this breaking change or whether a compatibility alias should be exported.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (17)
apps/web/src/server/public-api/api-error.ts(2 hunks)apps/web/src/server/public-api/api-utils.ts(4 hunks)apps/web/src/server/public-api/api/contacts/get-contact.ts(2 hunks)apps/web/src/server/public-api/api/contacts/get-contacts.ts(1 hunks)apps/web/src/server/public-api/api/domains/delete-domain.ts(3 hunks)apps/web/src/server/public-api/api/domains/get-domain.ts(3 hunks)apps/web/src/server/public-api/api/emails/get-email.ts(2 hunks)apps/web/src/server/public-api/auth.ts(5 hunks)apps/web/src/server/public-api/hono.ts(3 hunks)apps/web/src/server/public-api/schemas/campaign-schema.ts(2 hunks)apps/web/src/server/service/campaign-service.ts(13 hunks)apps/web/src/server/service/contact-book-service.ts(2 hunks)apps/web/src/server/service/domain-service.ts(6 hunks)apps/web/src/server/service/email-service.ts(10 hunks)apps/web/src/server/service/idempotency-service.ts(4 hunks)apps/web/src/server/service/suppression-service.ts(6 hunks)apps/web/src/server/service/team-service.ts(2 hunks)
🧰 Additional context used
📓 Path-based instructions (5)
**/*.{tsx,ts,jsx,js}
📄 CodeRabbit inference engine (.cursor/rules/general.mdc)
Include all required imports and ensure proper naming of key components in React/NextJS code
Files:
apps/web/src/server/service/suppression-service.tsapps/web/src/server/service/domain-service.tsapps/web/src/server/service/contact-book-service.tsapps/web/src/server/service/team-service.tsapps/web/src/server/public-api/api/contacts/get-contact.tsapps/web/src/server/public-api/api/emails/get-email.tsapps/web/src/server/public-api/hono.tsapps/web/src/server/public-api/api/contacts/get-contacts.tsapps/web/src/server/service/campaign-service.tsapps/web/src/server/public-api/api-utils.tsapps/web/src/server/public-api/api-error.tsapps/web/src/server/public-api/api/domains/delete-domain.tsapps/web/src/server/public-api/api/domains/get-domain.tsapps/web/src/server/public-api/auth.tsapps/web/src/server/service/idempotency-service.tsapps/web/src/server/service/email-service.tsapps/web/src/server/public-api/schemas/campaign-schema.ts
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (AGENTS.md)
**/*.{ts,tsx,js,jsx}: Use TypeScript-first approach with 2-space indent and semicolons enabled by Prettier in apps/web (Next.js), apps/marketing, apps/smtp-server, and all packages
Never use dynamic imports; always import on the top level
Run ESLint via @usesend/eslint-config and ensure no warnings remain before submitting PRs
Files:
apps/web/src/server/service/suppression-service.tsapps/web/src/server/service/domain-service.tsapps/web/src/server/service/contact-book-service.tsapps/web/src/server/service/team-service.tsapps/web/src/server/public-api/api/contacts/get-contact.tsapps/web/src/server/public-api/api/emails/get-email.tsapps/web/src/server/public-api/hono.tsapps/web/src/server/public-api/api/contacts/get-contacts.tsapps/web/src/server/service/campaign-service.tsapps/web/src/server/public-api/api-utils.tsapps/web/src/server/public-api/api-error.tsapps/web/src/server/public-api/api/domains/delete-domain.tsapps/web/src/server/public-api/api/domains/get-domain.tsapps/web/src/server/public-api/auth.tsapps/web/src/server/service/idempotency-service.tsapps/web/src/server/service/email-service.tsapps/web/src/server/public-api/schemas/campaign-schema.ts
apps/web/**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (AGENTS.md)
Use alias
~/for src imports in apps/web (e.g.,import { x } from "~/utils/x")
Files:
apps/web/src/server/service/suppression-service.tsapps/web/src/server/service/domain-service.tsapps/web/src/server/service/contact-book-service.tsapps/web/src/server/service/team-service.tsapps/web/src/server/public-api/api/contacts/get-contact.tsapps/web/src/server/public-api/api/emails/get-email.tsapps/web/src/server/public-api/hono.tsapps/web/src/server/public-api/api/contacts/get-contacts.tsapps/web/src/server/service/campaign-service.tsapps/web/src/server/public-api/api-utils.tsapps/web/src/server/public-api/api-error.tsapps/web/src/server/public-api/api/domains/delete-domain.tsapps/web/src/server/public-api/api/domains/get-domain.tsapps/web/src/server/public-api/auth.tsapps/web/src/server/service/idempotency-service.tsapps/web/src/server/service/email-service.tsapps/web/src/server/public-api/schemas/campaign-schema.ts
apps/web/**/*.{ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
apps/web/**/*.{ts,tsx}: Prefer to use TRPC for client-server communication unless explicitly asked otherwise in apps/web
Use Prisma for database access in apps/web
Files:
apps/web/src/server/service/suppression-service.tsapps/web/src/server/service/domain-service.tsapps/web/src/server/service/contact-book-service.tsapps/web/src/server/service/team-service.tsapps/web/src/server/public-api/api/contacts/get-contact.tsapps/web/src/server/public-api/api/emails/get-email.tsapps/web/src/server/public-api/hono.tsapps/web/src/server/public-api/api/contacts/get-contacts.tsapps/web/src/server/service/campaign-service.tsapps/web/src/server/public-api/api-utils.tsapps/web/src/server/public-api/api-error.tsapps/web/src/server/public-api/api/domains/delete-domain.tsapps/web/src/server/public-api/api/domains/get-domain.tsapps/web/src/server/public-api/auth.tsapps/web/src/server/service/idempotency-service.tsapps/web/src/server/service/email-service.tsapps/web/src/server/public-api/schemas/campaign-schema.ts
**/*.{ts,tsx,md}
📄 CodeRabbit inference engine (AGENTS.md)
Run Prettier 3 for code formatting on TypeScript, TSX, and Markdown files
Files:
apps/web/src/server/service/suppression-service.tsapps/web/src/server/service/domain-service.tsapps/web/src/server/service/contact-book-service.tsapps/web/src/server/service/team-service.tsapps/web/src/server/public-api/api/contacts/get-contact.tsapps/web/src/server/public-api/api/emails/get-email.tsapps/web/src/server/public-api/hono.tsapps/web/src/server/public-api/api/contacts/get-contacts.tsapps/web/src/server/service/campaign-service.tsapps/web/src/server/public-api/api-utils.tsapps/web/src/server/public-api/api-error.tsapps/web/src/server/public-api/api/domains/delete-domain.tsapps/web/src/server/public-api/api/domains/get-domain.tsapps/web/src/server/public-api/auth.tsapps/web/src/server/service/idempotency-service.tsapps/web/src/server/service/email-service.tsapps/web/src/server/public-api/schemas/campaign-schema.ts
🧬 Code graph analysis (14)
apps/web/src/server/service/suppression-service.ts (1)
apps/web/src/server/public-api/api-error.ts (1)
UseSendApiError(62-75)
apps/web/src/server/service/domain-service.ts (1)
apps/web/src/server/public-api/api-error.ts (1)
UseSendApiError(62-75)
apps/web/src/server/service/contact-book-service.ts (1)
apps/web/src/server/public-api/api-error.ts (1)
UseSendApiError(62-75)
apps/web/src/server/service/team-service.ts (1)
apps/web/src/server/public-api/api-error.ts (1)
UseSendApiError(62-75)
apps/web/src/server/public-api/api/contacts/get-contact.ts (1)
apps/web/src/server/public-api/api-error.ts (1)
UseSendApiError(62-75)
apps/web/src/server/public-api/api/emails/get-email.ts (1)
apps/web/src/server/public-api/api-error.ts (1)
UseSendApiError(62-75)
apps/web/src/server/public-api/hono.ts (1)
apps/web/src/server/public-api/api-error.ts (1)
UseSendApiError(62-75)
apps/web/src/server/service/campaign-service.ts (1)
apps/web/src/server/public-api/api-error.ts (1)
UseSendApiError(62-75)
apps/web/src/server/public-api/api-utils.ts (1)
apps/web/src/server/public-api/api-error.ts (1)
UseSendApiError(62-75)
apps/web/src/server/public-api/api/domains/get-domain.ts (1)
apps/web/src/server/public-api/api-error.ts (1)
UseSendApiError(62-75)
apps/web/src/server/public-api/auth.ts (1)
apps/web/src/server/public-api/api-error.ts (1)
UseSendApiError(62-75)
apps/web/src/server/service/idempotency-service.ts (1)
apps/web/src/server/public-api/api-error.ts (1)
UseSendApiError(62-75)
apps/web/src/server/service/email-service.ts (1)
apps/web/src/server/public-api/api-error.ts (1)
UseSendApiError(62-75)
apps/web/src/server/public-api/schemas/campaign-schema.ts (1)
apps/web/src/server/public-api/api-error.ts (1)
UseSendApiError(62-75)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
- GitHub Check: cubic · AI code reviewer
- GitHub Check: Cloudflare Pages
🔇 Additional comments (16)
apps/web/src/server/public-api/api/domains/delete-domain.ts (1)
4-4: UseSendApiError rename in domain delete route is consistent and correctImport path and both throw sites now use
UseSendApiErrorwith the sameFORBIDDEN/NOT_FOUNDcodes and messages as before; behavior is preserved.Also applies to: 64-67, 78-81
apps/web/src/server/public-api/api-utils.ts (1)
3-3: Error helper functions now correctly use UseSendApiErrorThe import and all throw sites in
getContactBookand email validation helpers are updated toUseSendApiErrorwith unchanged error codes and messages, so semantics remain intact.Also applies to: 9-12, 20-23, 33-34, 54-55
apps/web/src/server/public-api/api/domains/get-domain.ts (1)
4-4: UseSendApiError adoption in get-domain handler looks goodThe handler now imports and throws
UseSendApiErrorfor both the domain restriction and service error paths, preserving existing codes (NOT_FOUND,INTERNAL_SERVER_ERROR) and behavior.Also applies to: 38-41, 49-52
apps/web/src/server/public-api/schemas/campaign-schema.ts (1)
3-3: Campaign schema date parsing now throws UseSendApiError as expectedThe import and BAD_REQUEST throw in
parseScheduledAthave been switched toUseSendApiErrorwithout changing validation behavior or messaging.Also applies to: 25-28
apps/web/src/server/service/idempotency-service.ts (1)
3-3: IdempotencyService now correctly uses UseSendApiError for validation conflictsAll idempotency-related errors (invalid key length and NOT_UNIQUE scenarios) now instantiate
UseSendApiErrorwith the same codes/messages, so external API behavior remains consistent with the previous implementation.Also applies to: 101-105, 123-127, 143-147, 149-153
apps/web/src/server/service/domain-service.ts (1)
7-7: Domain service errors now consistently use UseSendApiErrorThe service correctly imports
UseSendApiErrorand all validation/authorization/not-found branches now throw it with the sameBAD_REQUEST,FORBIDDEN, andNOT_FOUNDcodes and messages as before, maintaining existing behavior.Also applies to: 103-107, 114-118, 121-125, 145-148, 178-182, 219-223
apps/web/src/server/service/suppression-service.ts (1)
3-338: UseSendApiError rename in suppression service is consistentImport and all throw sites correctly switch to
UseSendApiErrorwith unchanged codes/messages and no behavioral changes.apps/web/src/server/public-api/api/contacts/get-contacts.ts (1)
5-5: Updated error import path looks correct
UseSendApiErroris imported from"../../api-error", which correctly resolves to the shared API error module; no runtime behavior change here.apps/web/src/server/service/team-service.ts (1)
7-170: Team invite limit error now uses UseSendApiError consistentlyImport path and the
createTeamInvitelimit check now useUseSendApiErrorwith the sameFORBIDDENcode and message as before; behavior is preserved.apps/web/src/server/public-api/api/contacts/get-contact.ts (1)
5-69: Contact NOT_FOUND handling correctly migrated to UseSendApiErrorThe import and the missing-contact branch now use
UseSendApiErrorwith the sameNOT_FOUNDcode and message; behavior remains the same.apps/web/src/server/service/contact-book-service.ts (1)
4-28: Contact book limit error updated to UseSendApiError without behavior change
UseSendApiErroris imported from the shared API error module and used in the limit check with the sameFORBIDDENcode/message; rename is consistent.apps/web/src/server/public-api/auth.ts (1)
3-45: Auth error paths now consistently use UseSendApiErrorAll authorization and token-validation failures correctly throw
UseSendApiErrorwith the same codes/messages (UNAUTHORIZED/FORBIDDEN); only the error type changed.apps/web/src/server/public-api/hono.ts (1)
9-110: Middleware and rate limiter correctly migrated to UseSendApiErrorThe auth middleware
instanceofcheck and both authentication and rate-limit error throws now useUseSendApiErrorwith the same codes/messages (INTERNAL_SERVER_ERROR,RATE_LIMITED), preserving existing semantics.apps/web/src/server/service/email-service.ts (1)
3-754: Email service error handling fully aligned with UseSendApiErrorAcross
checkIfValidEmail,sendEmail,updateEmail,cancelEmail, andsendBulkEmails, all previousUnsendApiErrorusages are nowUseSendApiErrorwith identical codes and messages, and the shared import is correct; no behavioral changes detected.apps/web/src/server/service/campaign-service.ts (2)
21-21: LGTM: Import updated correctly.The import statement has been correctly updated to use the renamed
UseSendApiErrorclass.
193-519: LGTM: All error throw sites updated consistently.All public API error throw sites throughout the file have been correctly updated to use
UseSendApiError. The error codes, messages, and logic remain unchanged. The distinction between public API errors (UseSendApiError) and internal service errors (Error) is appropriately maintained.
Summary
UnsendApiErrortoUseSendApiErrorand update all usagesLinked Issues
Screenshots
Migration Notes
Verification
Codex Task
Summary by cubic
Renamed the public API error class from UnsendApiError to UseSendApiError across the codebase. This is a naming cleanup with no behavior changes.
Written for commit a924a49. Summary will update automatically on new commits.
Summary by CodeRabbit
Release Notes
✏️ Tip: You can customize this high-level summary in your review settings.