fix: do not limit users when self-hosting#225
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
WalkthroughThe team invite member-limit check in apps/web/src/server/service/team-service.ts was refactored to delegate to LimitService. The previous logic that computed limits using PLAN_LIMITS and member counts was removed. In createTeamInvite, a single call to LimitService.checkTeamMemberLimit(teamId) now determines if the limit is reached and throws the same UnsendApiError when exceeded. Imports were updated to remove PLAN_LIMITS and add LimitService. No exported/public entity signatures were changed. Possibly related PRs
Pre-merge checks (2 passed, 1 warning)❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
Tip 👮 Agentic pre-merge checks are now available in preview!Pro plan users can now enable pre-merge checks in their settings to enforce checklists before merging PRs.
Please see the documentation for more information. Example: reviews:
pre_merge_checks:
custom_checks:
- name: "Undocumented Breaking Changes"
mode: "warning"
instructions: |
Pass/fail criteria: All breaking changes to public APIs, CLI flags, environment variables, configuration keys, database schemas, or HTTP/GraphQL endpoints must be documented in the "Breaking Change" section of the PR description and in CHANGELOG.md. Exclude purely internal or private changes (e.g., code not exported from package entry points or explicitly marked as internal).Please share your feedback with us on this Discord post. ✨ Finishing Touches
🧪 Generate unit tests
Comment |
Deploying usesend with
|
| Latest commit: |
7b3bd10
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://323032aa.usesend.pages.dev |
| Branch Preview URL: | https://km-2025-09-11-team-limit-sel.usesend.pages.dev |
There was a problem hiding this comment.
Actionable comments posted: 0
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
apps/web/src/server/service/team-service.ts (1)
165-171: Re-validate team member limit in invite acceptance
In apps/web/src/server/api/routers/invitiation.ts (at thectx.db.teamUser.createcall around line 60), invokeLimitService.checkTeamMemberLimit(invite.teamId)and throw ifisLimitReachedbefore creating the teamUser to prevent a TOCTOU race.
🧹 Nitpick comments (1)
apps/web/src/server/service/team-service.ts (1)
9-10: Use ~/ alias for LimitService import to match apps/web conventions.Follow the repo guideline for src imports in apps/web.
Apply:
-import { LimitService } from "./limit-service"; +import { LimitService } from "~/server/service/limit-service";
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
apps/web/src/server/service/team-service.ts(2 hunks)
🧰 Additional context used
📓 Path-based instructions (4)
**/*.{js,jsx,ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/general.mdc)
Include all required imports, and ensure proper naming of key components.
Files:
apps/web/src/server/service/team-service.ts
**/*.{ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
**/*.{ts,tsx}: Use 2-space indentation in TypeScript code (enforced by Prettier)
Use semicolons in TypeScript code (enforced by Prettier)
Do not use dynamic imports
Files:
apps/web/src/server/service/team-service.ts
**/*.{ts,tsx,md}
📄 CodeRabbit inference engine (AGENTS.md)
Format code with Prettier 3 via pnpm format for TypeScript and Markdown files
Files:
apps/web/src/server/service/team-service.ts
apps/web/**/*.{ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
In apps/web, use the
/ alias for src imports (e.g., import { x } from "/utils/x")
Files:
apps/web/src/server/service/team-service.ts
🧠 Learnings (1)
📚 Learning: 2025-09-10T12:33:42.627Z
Learnt from: KMKoushik
PR: usesend/useSend#224
File: apps/web/src/server/public-api/api/emails/get-email.ts:63-74
Timestamp: 2025-09-10T12:33:42.627Z
Learning: In the useSend project, Prisma's findUnique method works with composite where clauses including id, teamId, and optional domainId fields in apps/web/src/server/public-api/api/emails/get-email.ts
Applied to files:
apps/web/src/server/service/team-service.ts
🧬 Code graph analysis (1)
apps/web/src/server/service/team-service.ts (1)
apps/web/src/server/service/limit-service.ts (1)
LimitService(14-241)
🔇 Additional comments (1)
apps/web/src/server/service/team-service.ts (1)
165-166: LGTM: centralized limit check correctly skips self-hosted.Delegating to LimitService honors the cloud-only gating and aligns with “do not limit users when self-hosting.”
Summary by CodeRabbit