From 0b581e3816b5e95cf79e7805fbed00b5a1c7f7ba Mon Sep 17 00:00:00 2001 From: Steven Tey Date: Sun, 9 Nov 2025 12:13:50 -0800 Subject: [PATCH] Rearrange constants files --- .../cron/payouts/process/process-payouts.ts | 4 +- .../api/embed/referrals/earnings/route.ts | 2 +- .../(ee)/api/partner-profile/invites/route.ts | 2 +- .../programs/[programId]/analytics/route.ts | 2 +- .../customers/[customerId]/route.ts | 2 +- .../programs/[programId]/events/route.ts | 2 +- .../utils/process-payout-invoice-failure.ts | 2 +- .../[slug]/program/new/partners/form.tsx | 2 +- .../app.dub.co/embed/referrals/earnings.tsx | 2 +- .../[invoiceId]/partner-payout-invoice.tsx | 2 +- .../payouts/partner-payout-details-sheet.tsx | 2 +- .../(dashboard)/payouts/payout-stats.tsx | 2 +- .../(dashboard)/payouts/payout-table.tsx | 2 +- .../customers/[customerId]/page-client.tsx | 2 +- .../invoices/[payoutId]/route.tsx | 4 +- .../billing/payment-methods/route.ts | 2 +- .../customers/[customerId]/page-client.tsx | 2 +- .../bounty-submission-details-sheet.tsx | 2 +- .../bounties/add-edit-bounty-sheet.tsx | 2 +- .../partners/import-export-buttons.tsx | 2 +- .../program/payouts/payout-details-sheet.tsx | 2 +- .../payouts/program-payout-settings-sheet.tsx | 2 +- .../settings/billing/invoices/page-client.tsx | 2 +- .../(ee)/settings/billing/payment-methods.tsx | 2 +- .../lib/actions/partners/confirm-payouts.ts | 4 +- .../partners/create-bounty-submission.ts | 14 ++++--- .../partners/reject-bounty-submission.ts | 2 +- apps/web/lib/constants/bounties.ts | 19 ++++++++++ apps/web/lib/constants/misc.ts | 2 + apps/web/lib/constants/partner-profile.ts | 2 + .../constants.ts => constants/payouts.ts} | 37 ------------------- apps/web/lib/constants/program.ts | 29 +++++++++++++++ .../lib/partners/create-stripe-transfer.ts | 8 ++-- apps/web/lib/stripe/payment-methods.ts | 2 +- apps/web/lib/swr/use-program-enrollment.ts | 2 +- apps/web/lib/types.ts | 4 +- apps/web/lib/zod/schemas/bounties.ts | 28 ++++---------- .../web/lib/zod/schemas/program-onboarding.ts | 2 +- apps/web/lib/zod/schemas/programs.ts | 2 +- .../backfill-invoice-payment-method.ts | 2 +- .../scripts/stripe/fix-processed-payouts.ts | 2 +- .../ui/modals/add-payment-method-modal.tsx | 2 +- .../ui/modals/invite-partner-user-modal.tsx | 2 +- .../partners/bounties/claim-bounty-modal.tsx | 26 +++++++------ .../web/ui/partners/confirm-payouts-sheet.tsx | 2 +- .../ui/partners/payout-status-descriptions.ts | 2 +- .../reject-bounty-submission-modal.tsx | 16 ++++---- 47 files changed, 134 insertions(+), 129 deletions(-) create mode 100644 apps/web/lib/constants/bounties.ts create mode 100644 apps/web/lib/constants/misc.ts create mode 100644 apps/web/lib/constants/partner-profile.ts rename apps/web/lib/{partners/constants.ts => constants/payouts.ts} (67%) create mode 100644 apps/web/lib/constants/program.ts diff --git a/apps/web/app/(ee)/api/cron/payouts/process/process-payouts.ts b/apps/web/app/(ee)/api/cron/payouts/process/process-payouts.ts index 3708f7fa6aa..641ad00c76b 100644 --- a/apps/web/app/(ee)/api/cron/payouts/process/process-payouts.ts +++ b/apps/web/app/(ee)/api/cron/payouts/process/process-payouts.ts @@ -2,12 +2,12 @@ import { recordAuditLog } from "@/lib/api/audit-logs/record-audit-log"; import { exceededLimitError } from "@/lib/api/errors"; import { getEffectivePayoutMode } from "@/lib/api/payouts/get-effective-payout-mode"; import { getPayoutEligibilityFilter } from "@/lib/api/payouts/payout-eligibility-filter"; -import { queueBatchEmail } from "@/lib/email/queue-batch-email"; import { DIRECT_DEBIT_PAYMENT_METHOD_TYPES, FAST_ACH_FEE_CENTS, FOREX_MARKUP_RATE, -} from "@/lib/partners/constants"; +} from "@/lib/constants/payouts"; +import { queueBatchEmail } from "@/lib/email/queue-batch-email"; import { CUTOFF_PERIOD, CUTOFF_PERIOD_TYPES, diff --git a/apps/web/app/(ee)/api/embed/referrals/earnings/route.ts b/apps/web/app/(ee)/api/embed/referrals/earnings/route.ts index 841b4700142..d46ac0edff4 100644 --- a/apps/web/app/(ee)/api/embed/referrals/earnings/route.ts +++ b/apps/web/app/(ee)/api/embed/referrals/earnings/route.ts @@ -1,6 +1,6 @@ +import { REFERRALS_EMBED_EARNINGS_LIMIT } from "@/lib/constants/misc"; import { withReferralsEmbedToken } from "@/lib/embed/referrals/auth"; import { generateRandomName } from "@/lib/names"; -import { REFERRALS_EMBED_EARNINGS_LIMIT } from "@/lib/partners/constants"; import { PartnerEarningsSchema } from "@/lib/zod/schemas/partner-profile"; import { prisma } from "@dub/prisma"; import { NextResponse } from "next/server"; diff --git a/apps/web/app/(ee)/api/partner-profile/invites/route.ts b/apps/web/app/(ee)/api/partner-profile/invites/route.ts index dbcbcea9fb6..4ee2e757819 100644 --- a/apps/web/app/(ee)/api/partner-profile/invites/route.ts +++ b/apps/web/app/(ee)/api/partner-profile/invites/route.ts @@ -5,7 +5,7 @@ import { withPartnerProfile } from "@/lib/auth/partner"; import { MAX_INVITES_PER_REQUEST, MAX_PARTNER_USERS, -} from "@/lib/partners/constants"; +} from "@/lib/constants/partner-profile"; import { getPartnerUsersQuerySchema, invitePartnerUserSchema, diff --git a/apps/web/app/(ee)/api/partner-profile/programs/[programId]/analytics/route.ts b/apps/web/app/(ee)/api/partner-profile/programs/[programId]/analytics/route.ts index c17a863db23..c5f7916df04 100644 --- a/apps/web/app/(ee)/api/partner-profile/programs/[programId]/analytics/route.ts +++ b/apps/web/app/(ee)/api/partner-profile/programs/[programId]/analytics/route.ts @@ -2,7 +2,7 @@ import { getAnalytics } from "@/lib/analytics/get-analytics"; import { DubApiError } from "@/lib/api/errors"; import { getProgramEnrollmentOrThrow } from "@/lib/api/programs/get-program-enrollment-or-throw"; import { withPartnerProfile } from "@/lib/auth/partner"; -import { LARGE_PROGRAM_MIN_TOTAL_COMMISSIONS_CENTS } from "@/lib/partners/constants"; +import { LARGE_PROGRAM_MIN_TOTAL_COMMISSIONS_CENTS } from "@/lib/constants/program"; import { partnerProfileAnalyticsQuerySchema } from "@/lib/zod/schemas/partner-profile"; import { NextResponse } from "next/server"; diff --git a/apps/web/app/(ee)/api/partner-profile/programs/[programId]/customers/[customerId]/route.ts b/apps/web/app/(ee)/api/partner-profile/programs/[programId]/customers/[customerId]/route.ts index 41ca8de224f..381cf3ac96f 100644 --- a/apps/web/app/(ee)/api/partner-profile/programs/[programId]/customers/[customerId]/route.ts +++ b/apps/web/app/(ee)/api/partner-profile/programs/[programId]/customers/[customerId]/route.ts @@ -3,8 +3,8 @@ import { transformCustomer } from "@/lib/api/customers/transform-customer"; import { DubApiError } from "@/lib/api/errors"; import { getProgramEnrollmentOrThrow } from "@/lib/api/programs/get-program-enrollment-or-throw"; import { withPartnerProfile } from "@/lib/auth/partner"; +import { LARGE_PROGRAM_MIN_TOTAL_COMMISSIONS_CENTS } from "@/lib/constants/program"; import { generateRandomName } from "@/lib/names"; -import { LARGE_PROGRAM_MIN_TOTAL_COMMISSIONS_CENTS } from "@/lib/partners/constants"; import { PartnerProfileCustomerSchema } from "@/lib/zod/schemas/partner-profile"; import { prisma } from "@dub/prisma"; import { NextResponse } from "next/server"; diff --git a/apps/web/app/(ee)/api/partner-profile/programs/[programId]/events/route.ts b/apps/web/app/(ee)/api/partner-profile/programs/[programId]/events/route.ts index 3cfa7e768b0..cb1af821318 100644 --- a/apps/web/app/(ee)/api/partner-profile/programs/[programId]/events/route.ts +++ b/apps/web/app/(ee)/api/partner-profile/programs/[programId]/events/route.ts @@ -2,8 +2,8 @@ import { getEvents } from "@/lib/analytics/get-events"; import { DubApiError } from "@/lib/api/errors"; import { getProgramEnrollmentOrThrow } from "@/lib/api/programs/get-program-enrollment-or-throw"; import { withPartnerProfile } from "@/lib/auth/partner"; +import { LARGE_PROGRAM_MIN_TOTAL_COMMISSIONS_CENTS } from "@/lib/constants/program"; import { generateRandomName } from "@/lib/names"; -import { LARGE_PROGRAM_MIN_TOTAL_COMMISSIONS_CENTS } from "@/lib/partners/constants"; import { PartnerProfileLinkSchema, partnerProfileEventsQuerySchema, diff --git a/apps/web/app/(ee)/api/stripe/webhook/utils/process-payout-invoice-failure.ts b/apps/web/app/(ee)/api/stripe/webhook/utils/process-payout-invoice-failure.ts index 361694764d1..ded6599952f 100644 --- a/apps/web/app/(ee)/api/stripe/webhook/utils/process-payout-invoice-failure.ts +++ b/apps/web/app/(ee)/api/stripe/webhook/utils/process-payout-invoice-failure.ts @@ -1,7 +1,7 @@ import { DIRECT_DEBIT_PAYMENT_METHOD_TYPES, PAYOUT_FAILURE_FEE_CENTS, -} from "@/lib/partners/constants"; +} from "@/lib/constants/payouts"; import { createPaymentIntent } from "@/lib/stripe/create-payment-intent"; import { sendBatchEmail } from "@dub/email"; import PartnerPayoutFailed from "@dub/email/templates/partner-payout-failed"; diff --git a/apps/web/app/(ee)/app.dub.co/(new-program)/[slug]/program/new/partners/form.tsx b/apps/web/app/(ee)/app.dub.co/(new-program)/[slug]/program/new/partners/form.tsx index f982aa35970..2d3f6c6e062 100644 --- a/apps/web/app/(ee)/app.dub.co/(new-program)/[slug]/program/new/partners/form.tsx +++ b/apps/web/app/(ee)/app.dub.co/(new-program)/[slug]/program/new/partners/form.tsx @@ -1,7 +1,7 @@ "use client"; import { onboardProgramAction } from "@/lib/actions/partners/onboard-program"; -import { PROGRAM_ONBOARDING_PARTNERS_LIMIT } from "@/lib/partners/constants"; +import { PROGRAM_ONBOARDING_PARTNERS_LIMIT } from "@/lib/constants/program"; import useWorkspace from "@/lib/swr/use-workspace"; import { ProgramData } from "@/lib/types"; import { Button, Input } from "@dub/ui"; diff --git a/apps/web/app/(ee)/app.dub.co/embed/referrals/earnings.tsx b/apps/web/app/(ee)/app.dub.co/embed/referrals/earnings.tsx index e82bc58c0c6..dd14e0a2f7f 100644 --- a/apps/web/app/(ee)/app.dub.co/embed/referrals/earnings.tsx +++ b/apps/web/app/(ee)/app.dub.co/embed/referrals/earnings.tsx @@ -1,4 +1,4 @@ -import { REFERRALS_EMBED_EARNINGS_LIMIT } from "@/lib/partners/constants"; +import { REFERRALS_EMBED_EARNINGS_LIMIT } from "@/lib/constants/misc"; import { PartnerEarningsResponse } from "@/lib/types"; import { CommissionStatusBadges } from "@/ui/partners/commission-status-badges"; import { diff --git a/apps/web/app/(ee)/app.dub.co/invoices/[invoiceId]/partner-payout-invoice.tsx b/apps/web/app/(ee)/app.dub.co/invoices/[invoiceId]/partner-payout-invoice.tsx index 12bb6c9048e..1eeff7d8038 100644 --- a/apps/web/app/(ee)/app.dub.co/invoices/[invoiceId]/partner-payout-invoice.tsx +++ b/apps/web/app/(ee)/app.dub.co/invoices/[invoiceId]/partner-payout-invoice.tsx @@ -1,4 +1,4 @@ -import { FAST_ACH_FEE_CENTS } from "@/lib/partners/constants"; +import { FAST_ACH_FEE_CENTS } from "@/lib/constants/payouts"; import { stripe } from "@/lib/stripe"; import { prisma } from "@dub/prisma"; import { diff --git a/apps/web/app/(ee)/partners.dub.co/(dashboard)/payouts/partner-payout-details-sheet.tsx b/apps/web/app/(ee)/partners.dub.co/(dashboard)/payouts/partner-payout-details-sheet.tsx index 855d98e28a4..6531fcc1a16 100644 --- a/apps/web/app/(ee)/partners.dub.co/(dashboard)/payouts/partner-payout-details-sheet.tsx +++ b/apps/web/app/(ee)/partners.dub.co/(dashboard)/payouts/partner-payout-details-sheet.tsx @@ -1,7 +1,7 @@ import { INVOICE_AVAILABLE_PAYOUT_STATUSES, PAYOUTS_SHEET_ITEMS_LIMIT, -} from "@/lib/partners/constants"; +} from "@/lib/constants/payouts"; import usePartnerProfile from "@/lib/swr/use-partner-profile"; import { PartnerEarningsResponse, PartnerPayoutResponse } from "@/lib/types"; import { CommissionTypeIcon } from "@/ui/partners/comission-type-icon"; diff --git a/apps/web/app/(ee)/partners.dub.co/(dashboard)/payouts/payout-stats.tsx b/apps/web/app/(ee)/partners.dub.co/(dashboard)/payouts/payout-stats.tsx index b1f46410212..dbe1b5a08d9 100644 --- a/apps/web/app/(ee)/partners.dub.co/(dashboard)/payouts/payout-stats.tsx +++ b/apps/web/app/(ee)/partners.dub.co/(dashboard)/payouts/payout-stats.tsx @@ -4,7 +4,7 @@ import { forceWithdrawalAction } from "@/lib/actions/partners/force-withdrawal"; import { BELOW_MIN_WITHDRAWAL_FEE_CENTS, MIN_WITHDRAWAL_AMOUNT_CENTS, -} from "@/lib/partners/constants"; +} from "@/lib/constants/payouts"; import usePartnerPayoutsCount from "@/lib/swr/use-partner-payouts-count"; import usePartnerProfile from "@/lib/swr/use-partner-profile"; import { PayoutsCount } from "@/lib/types"; diff --git a/apps/web/app/(ee)/partners.dub.co/(dashboard)/payouts/payout-table.tsx b/apps/web/app/(ee)/partners.dub.co/(dashboard)/payouts/payout-table.tsx index 8fc5b421e86..d3b5588e049 100644 --- a/apps/web/app/(ee)/partners.dub.co/(dashboard)/payouts/payout-table.tsx +++ b/apps/web/app/(ee)/partners.dub.co/(dashboard)/payouts/payout-table.tsx @@ -1,6 +1,6 @@ "use client"; -import { INVOICE_AVAILABLE_PAYOUT_STATUSES } from "@/lib/partners/constants"; +import { INVOICE_AVAILABLE_PAYOUT_STATUSES } from "@/lib/constants/payouts"; import usePartnerPayouts from "@/lib/swr/use-partner-payouts"; import usePartnerPayoutsCount from "@/lib/swr/use-partner-payouts-count"; import { PartnerPayoutResponse } from "@/lib/types"; diff --git a/apps/web/app/(ee)/partners.dub.co/(dashboard)/programs/[programSlug]/(enrolled)/customers/[customerId]/page-client.tsx b/apps/web/app/(ee)/partners.dub.co/(dashboard)/programs/[programSlug]/(enrolled)/customers/[customerId]/page-client.tsx index d4294b48662..eb5511cc401 100644 --- a/apps/web/app/(ee)/partners.dub.co/(dashboard)/programs/[programSlug]/(enrolled)/customers/[customerId]/page-client.tsx +++ b/apps/web/app/(ee)/partners.dub.co/(dashboard)/programs/[programSlug]/(enrolled)/customers/[customerId]/page-client.tsx @@ -1,6 +1,6 @@ "use client"; -import { CUSTOMER_PAGE_EVENTS_LIMIT } from "@/lib/partners/constants"; +import { CUSTOMER_PAGE_EVENTS_LIMIT } from "@/lib/constants/misc"; import usePartnerCustomer from "@/lib/swr/use-partner-customer"; import useProgramEnrollment from "@/lib/swr/use-program-enrollment"; import { PartnerEarningsResponse } from "@/lib/types"; diff --git a/apps/web/app/(ee)/partners.dub.co/invoices/[payoutId]/route.tsx b/apps/web/app/(ee)/partners.dub.co/invoices/[payoutId]/route.tsx index cf96c48d083..8b2abb82dc5 100644 --- a/apps/web/app/(ee)/partners.dub.co/invoices/[payoutId]/route.tsx +++ b/apps/web/app/(ee)/partners.dub.co/invoices/[payoutId]/route.tsx @@ -1,6 +1,6 @@ import { DubApiError } from "@/lib/api/errors"; import { withPartnerProfile } from "@/lib/auth/partner"; -import { INVOICE_AVAILABLE_PAYOUT_STATUSES } from "@/lib/partners/constants"; +import { INVOICE_AVAILABLE_PAYOUT_STATUSES } from "@/lib/constants/payouts"; import { prisma } from "@dub/prisma"; import { currencyFormatter, @@ -252,7 +252,7 @@ export const GET = withPartnerProfile(async ({ partner, params }) => { , ); - return new Response(pdf, { + return new Response(new Uint8Array(pdf), { headers: { "Content-Type": "application/pdf", "Content-Disposition": `inline; filename="payout-invoice-${payout.id}.pdf"`, diff --git a/apps/web/app/api/workspaces/[idOrSlug]/billing/payment-methods/route.ts b/apps/web/app/api/workspaces/[idOrSlug]/billing/payment-methods/route.ts index 6943a9fd961..be46b7f27d4 100644 --- a/apps/web/app/api/workspaces/[idOrSlug]/billing/payment-methods/route.ts +++ b/apps/web/app/api/workspaces/[idOrSlug]/billing/payment-methods/route.ts @@ -5,7 +5,7 @@ import { DIRECT_DEBIT_PAYMENT_METHOD_TYPES, DIRECT_DEBIT_PAYMENT_TYPES_INFO, PAYMENT_METHOD_TYPES, -} from "@/lib/partners/constants"; +} from "@/lib/constants/payouts"; import { stripe } from "@/lib/stripe"; import { APP_DOMAIN } from "@dub/utils"; import { NextResponse } from "next/server"; diff --git a/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/customers/[customerId]/page-client.tsx b/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/customers/[customerId]/page-client.tsx index 47e7c0bff7d..a128b26e039 100644 --- a/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/customers/[customerId]/page-client.tsx +++ b/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/customers/[customerId]/page-client.tsx @@ -1,6 +1,6 @@ "use client"; -import { CUSTOMER_PAGE_EVENTS_LIMIT } from "@/lib/partners/constants"; +import { CUSTOMER_PAGE_EVENTS_LIMIT } from "@/lib/constants/misc"; import useCustomer from "@/lib/swr/use-customer"; import useWorkspace from "@/lib/swr/use-workspace"; import { diff --git a/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/bounties/[bountyId]/bounty-submission-details-sheet.tsx b/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/bounties/[bountyId]/bounty-submission-details-sheet.tsx index 857fcc47ed0..0f460c31305 100644 --- a/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/bounties/[bountyId]/bounty-submission-details-sheet.tsx +++ b/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/bounties/[bountyId]/bounty-submission-details-sheet.tsx @@ -1,11 +1,11 @@ "use client"; import { approveBountySubmissionAction } from "@/lib/actions/partners/approve-bounty-submission"; +import { REJECT_BOUNTY_SUBMISSION_REASONS } from "@/lib/constants/bounties"; import { mutatePrefix } from "@/lib/swr/mutate"; import useBounty from "@/lib/swr/use-bounty"; import useWorkspace from "@/lib/swr/use-workspace"; import { BountySubmissionProps } from "@/lib/types"; -import { REJECT_BOUNTY_SUBMISSION_REASONS } from "@/lib/zod/schemas/bounties"; import { useConfirmModal } from "@/ui/modals/confirm-modal"; import { PartnerInfoSection } from "@/ui/partners/partner-info-section"; import { useRejectBountySubmissionModal } from "@/ui/partners/reject-bounty-submission-modal"; diff --git a/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/bounties/add-edit-bounty-sheet.tsx b/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/bounties/add-edit-bounty-sheet.tsx index 896d23e5367..984a61d7eda 100644 --- a/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/bounties/add-edit-bounty-sheet.tsx +++ b/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/bounties/add-edit-bounty-sheet.tsx @@ -1,6 +1,6 @@ import { generatePerformanceBountyName } from "@/lib/api/bounties/generate-performance-bounty-name"; import { isCurrencyAttribute } from "@/lib/api/workflows/utils"; -import { BOUNTY_DESCRIPTION_MAX_LENGTH } from "@/lib/partners/constants"; +import { BOUNTY_DESCRIPTION_MAX_LENGTH } from "@/lib/constants/bounties"; import { mutatePrefix } from "@/lib/swr/mutate"; import { useApiMutation } from "@/lib/swr/use-api-mutation"; import useProgram from "@/lib/swr/use-program"; diff --git a/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/partners/import-export-buttons.tsx b/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/partners/import-export-buttons.tsx index ba4325a1317..ce212462786 100644 --- a/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/partners/import-export-buttons.tsx +++ b/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/partners/import-export-buttons.tsx @@ -1,6 +1,6 @@ "use client"; -import { PROGRAM_IMPORT_SOURCES } from "@/lib/partners/constants"; +import { PROGRAM_IMPORT_SOURCES } from "@/lib/constants/program"; import useWorkspace from "@/lib/swr/use-workspace"; import { useExportPartnersModal } from "@/ui/modals/export-partners-modal"; import { useImportFirstPromoterModal } from "@/ui/modals/import-firstpromoter-modal"; diff --git a/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/payouts/payout-details-sheet.tsx b/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/payouts/payout-details-sheet.tsx index 8b546c40ac4..ccba54741ac 100644 --- a/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/payouts/payout-details-sheet.tsx +++ b/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/payouts/payout-details-sheet.tsx @@ -1,4 +1,4 @@ -import { PAYOUTS_SHEET_ITEMS_LIMIT } from "@/lib/partners/constants"; +import { PAYOUTS_SHEET_ITEMS_LIMIT } from "@/lib/constants/payouts"; import useWorkspace from "@/lib/swr/use-workspace"; import { CommissionResponse, PayoutResponse } from "@/lib/types"; import { CommissionTypeIcon } from "@/ui/partners/comission-type-icon"; diff --git a/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/payouts/program-payout-settings-sheet.tsx b/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/payouts/program-payout-settings-sheet.tsx index e54ad270e8e..8221320cc81 100644 --- a/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/payouts/program-payout-settings-sheet.tsx +++ b/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/payouts/program-payout-settings-sheet.tsx @@ -2,7 +2,7 @@ import { parseActionError } from "@/lib/actions/parse-action-errors"; import { updateProgramAction } from "@/lib/actions/partners/update-program"; -import { ALLOWED_MIN_PAYOUT_AMOUNTS } from "@/lib/partners/constants"; +import { ALLOWED_MIN_PAYOUT_AMOUNTS } from "@/lib/constants/payouts"; import { mutatePrefix } from "@/lib/swr/mutate"; import useProgram from "@/lib/swr/use-program"; import useWorkspace from "@/lib/swr/use-workspace"; diff --git a/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/settings/billing/invoices/page-client.tsx b/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/settings/billing/invoices/page-client.tsx index 4dc5248584a..727c169cadb 100644 --- a/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/settings/billing/invoices/page-client.tsx +++ b/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/settings/billing/invoices/page-client.tsx @@ -1,6 +1,6 @@ "use client"; -import { INVOICE_PAYMENT_METHODS } from "@/lib/partners/constants"; +import { INVOICE_PAYMENT_METHODS } from "@/lib/constants/payouts"; import useWorkspace from "@/lib/swr/use-workspace"; import { InvoiceProps } from "@/lib/types"; import { PayoutStatusBadges } from "@/ui/partners/payout-status-badges"; diff --git a/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/settings/billing/payment-methods.tsx b/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/settings/billing/payment-methods.tsx index 91678c68069..5e817fd9671 100644 --- a/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/settings/billing/payment-methods.tsx +++ b/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/settings/billing/payment-methods.tsx @@ -1,6 +1,6 @@ "use client"; -import { DIRECT_DEBIT_PAYMENT_METHOD_TYPES } from "@/lib/partners/constants"; +import { DIRECT_DEBIT_PAYMENT_METHOD_TYPES } from "@/lib/constants/payouts"; import usePaymentMethods from "@/lib/swr/use-payment-methods"; import useWorkspace from "@/lib/swr/use-workspace"; import { useAddPaymentMethodModal } from "@/ui/modals/add-payment-method-modal"; diff --git a/apps/web/lib/actions/partners/confirm-payouts.ts b/apps/web/lib/actions/partners/confirm-payouts.ts index 3368ca7cd5b..adf7b06d623 100644 --- a/apps/web/lib/actions/partners/confirm-payouts.ts +++ b/apps/web/lib/actions/partners/confirm-payouts.ts @@ -5,11 +5,11 @@ import { exceededLimitError } from "@/lib/api/errors"; import { getEligiblePayouts } from "@/lib/api/payouts/get-eligible-payouts"; import { getDefaultProgramIdOrThrow } from "@/lib/api/programs/get-default-program-id-or-throw"; import { getProgramOrThrow } from "@/lib/api/programs/get-program-or-throw"; -import { qstash } from "@/lib/cron"; import { PAYMENT_METHOD_TYPES, STRIPE_PAYMENT_METHOD_NORMALIZATION, -} from "@/lib/partners/constants"; +} from "@/lib/constants/payouts"; +import { qstash } from "@/lib/cron"; import { CUTOFF_PERIOD_ENUM } from "@/lib/partners/cutoff-period"; import { stripe } from "@/lib/stripe"; import { getWebhooks } from "@/lib/webhook/get-webhooks"; diff --git a/apps/web/lib/actions/partners/create-bounty-submission.ts b/apps/web/lib/actions/partners/create-bounty-submission.ts index 4f1d351f434..0f8c5631a27 100644 --- a/apps/web/lib/actions/partners/create-bounty-submission.ts +++ b/apps/web/lib/actions/partners/create-bounty-submission.ts @@ -3,11 +3,13 @@ import { createId } from "@/lib/api/create-id"; import { getWorkspaceUsers } from "@/lib/api/get-workspace-users"; import { getProgramEnrollmentOrThrow } from "@/lib/api/programs/get-program-enrollment-or-throw"; +import { + BOUNTY_MAX_SUBMISSION_DESCRIPTION_LENGTH, + BOUNTY_MAX_SUBMISSION_FILES, + BOUNTY_MAX_SUBMISSION_URLS, +} from "@/lib/constants/bounties"; import { BountySubmissionFileSchema, - MAX_BOUNTY_SUBMISSION_DESCRIPTION_LENGTH, - MAX_SUBMISSION_FILES, - MAX_SUBMISSION_URLS, submissionRequirementsSchema, } from "@/lib/zod/schemas/bounties"; import { sendBatchEmail, sendEmail } from "@dub/email"; @@ -25,13 +27,13 @@ const schema = z.object({ bountyId: z.string(), files: z .array(BountySubmissionFileSchema) - .max(MAX_SUBMISSION_FILES) + .max(BOUNTY_MAX_SUBMISSION_FILES) .default([]), - urls: z.array(z.string().url()).max(MAX_SUBMISSION_URLS).default([]), + urls: z.array(z.string().url()).max(BOUNTY_MAX_SUBMISSION_URLS).default([]), description: z .string() .trim() - .max(MAX_BOUNTY_SUBMISSION_DESCRIPTION_LENGTH) + .max(BOUNTY_MAX_SUBMISSION_DESCRIPTION_LENGTH) .optional(), isDraft: z .boolean() diff --git a/apps/web/lib/actions/partners/reject-bounty-submission.ts b/apps/web/lib/actions/partners/reject-bounty-submission.ts index b0ad2bdbe76..3fe0c1b0619 100644 --- a/apps/web/lib/actions/partners/reject-bounty-submission.ts +++ b/apps/web/lib/actions/partners/reject-bounty-submission.ts @@ -2,9 +2,9 @@ import { recordAuditLog } from "@/lib/api/audit-logs/record-audit-log"; import { getDefaultProgramIdOrThrow } from "@/lib/api/programs/get-default-program-id-or-throw"; +import { REJECT_BOUNTY_SUBMISSION_REASONS } from "@/lib/constants/bounties"; import { BountySubmissionSchema, - REJECT_BOUNTY_SUBMISSION_REASONS, rejectBountySubmissionSchema, } from "@/lib/zod/schemas/bounties"; import { sendEmail } from "@dub/email"; diff --git a/apps/web/lib/constants/bounties.ts b/apps/web/lib/constants/bounties.ts new file mode 100644 index 00000000000..e14b0585405 --- /dev/null +++ b/apps/web/lib/constants/bounties.ts @@ -0,0 +1,19 @@ +export const BOUNTY_DESCRIPTION_MAX_LENGTH = 5000; + +export const BOUNTY_MAX_SUBMISSION_FILES = 4; + +export const BOUNTY_MAX_SUBMISSION_URLS = 100; + +export const BOUNTY_MAX_SUBMISSION_DESCRIPTION_LENGTH = 1000; + +export const BOUNTY_MAX_SUBMISSION_REJECTION_NOTE_LENGTH = 5000; + +export const BOUNTY_SUBMISSION_REQUIREMENTS = ["image", "url"] as const; + +export const REJECT_BOUNTY_SUBMISSION_REASONS = { + invalidProof: "Invalid proof", + duplicateSubmission: "Duplicate submission", + outOfTimeWindow: "Out of time window", + didNotMeetCriteria: "Did not meet criteria", + other: "Other", +} as const; diff --git a/apps/web/lib/constants/misc.ts b/apps/web/lib/constants/misc.ts new file mode 100644 index 00000000000..81fd4ad23ba --- /dev/null +++ b/apps/web/lib/constants/misc.ts @@ -0,0 +1,2 @@ +export const REFERRALS_EMBED_EARNINGS_LIMIT = 8; +export const CUSTOMER_PAGE_EVENTS_LIMIT = 8; diff --git a/apps/web/lib/constants/partner-profile.ts b/apps/web/lib/constants/partner-profile.ts new file mode 100644 index 00000000000..ed9b55214a9 --- /dev/null +++ b/apps/web/lib/constants/partner-profile.ts @@ -0,0 +1,2 @@ +export const MAX_INVITES_PER_REQUEST = 5; +export const MAX_PARTNER_USERS = 10; diff --git a/apps/web/lib/partners/constants.ts b/apps/web/lib/constants/payouts.ts similarity index 67% rename from apps/web/lib/partners/constants.ts rename to apps/web/lib/constants/payouts.ts index fc05dcad263..fab66acd783 100644 --- a/apps/web/lib/partners/constants.ts +++ b/apps/web/lib/constants/payouts.ts @@ -1,14 +1,7 @@ import Stripe from "stripe"; import { PaymentMethodOption } from "../types"; -export const PROGRAM_ONBOARDING_PARTNERS_LIMIT = 5; export const PAYOUTS_SHEET_ITEMS_LIMIT = 10; -export const BOUNTY_DESCRIPTION_MAX_LENGTH = 5000; -export const REFERRALS_EMBED_EARNINGS_LIMIT = 8; -export const CUSTOMER_PAGE_EVENTS_LIMIT = 8; - -export const LARGE_PROGRAM_MIN_TOTAL_COMMISSIONS_CENTS = 500000; // $5000 - export const PAYOUT_FAILURE_FEE_CENTS = 1000; // 10 USD export const FAST_ACH_FEE_CENTS = 2500; // $25 export const FOREX_MARKUP_RATE = 0.005; // 0.5% @@ -17,9 +10,6 @@ export const ALLOWED_MIN_PAYOUT_AMOUNTS = [0, 1000, 2000, 5000, 10000]; export const MIN_WITHDRAWAL_AMOUNT_CENTS = 1000; // $10 export const BELOW_MIN_WITHDRAWAL_FEE_CENTS = 50; // $0.50 -export const MAX_INVITES_PER_REQUEST = 5; -export const MAX_PARTNER_USERS = 10; - // Direct debit payment types for Partner payout export const DIRECT_DEBIT_PAYMENT_TYPES_INFO: { type: Stripe.PaymentMethod.Type; @@ -109,30 +99,3 @@ export const INVOICE_AVAILABLE_PAYOUT_STATUSES = [ "sent", "completed", ]; - -export const PROGRAM_IMPORT_SOURCES = [ - { - id: "rewardful", - value: "Rewardful", - image: "https://assets.dub.co/misc/icons/rewardful.svg", - helpUrl: "https://dub.co/help/article/migrating-from-rewardful", - }, - { - id: "tolt", - value: "Tolt", - image: "https://assets.dub.co/misc/icons/tolt.svg", - helpUrl: "https://dub.co/help/article/migrating-from-tolt", - }, - { - id: "partnerstack", - value: "PartnerStack", - image: "https://assets.dub.co/misc/icons/partnerstack.svg", - helpUrl: "https://dub.co/help/article/migrating-from-partnerstack", - }, - { - id: "firstpromoter", - value: "FirstPromoter", - image: "https://assets.dub.co/misc/icons/firstpromoter.svg", - helpUrl: "https://dub.co/help/article/migrating-from-firstpromoter", - }, -] as const; diff --git a/apps/web/lib/constants/program.ts b/apps/web/lib/constants/program.ts new file mode 100644 index 00000000000..e27083fdddb --- /dev/null +++ b/apps/web/lib/constants/program.ts @@ -0,0 +1,29 @@ +export const PROGRAM_ONBOARDING_PARTNERS_LIMIT = 5; +export const LARGE_PROGRAM_MIN_TOTAL_COMMISSIONS_CENTS = 500000; // $5000 + +export const PROGRAM_IMPORT_SOURCES = [ + { + id: "rewardful", + value: "Rewardful", + image: "https://assets.dub.co/misc/icons/rewardful.svg", + helpUrl: "https://dub.co/help/article/migrating-from-rewardful", + }, + { + id: "tolt", + value: "Tolt", + image: "https://assets.dub.co/misc/icons/tolt.svg", + helpUrl: "https://dub.co/help/article/migrating-from-tolt", + }, + { + id: "partnerstack", + value: "PartnerStack", + image: "https://assets.dub.co/misc/icons/partnerstack.svg", + helpUrl: "https://dub.co/help/article/migrating-from-partnerstack", + }, + { + id: "firstpromoter", + value: "FirstPromoter", + image: "https://assets.dub.co/misc/icons/firstpromoter.svg", + helpUrl: "https://dub.co/help/article/migrating-from-firstpromoter", + }, +] as const; diff --git a/apps/web/lib/partners/create-stripe-transfer.ts b/apps/web/lib/partners/create-stripe-transfer.ts index c9bbf2c03b5..adf2dfc178f 100644 --- a/apps/web/lib/partners/create-stripe-transfer.ts +++ b/apps/web/lib/partners/create-stripe-transfer.ts @@ -1,11 +1,11 @@ +import { + BELOW_MIN_WITHDRAWAL_FEE_CENTS, + MIN_WITHDRAWAL_AMOUNT_CENTS, +} from "@/lib/constants/payouts"; import { stripe } from "@/lib/stripe"; import { prisma } from "@dub/prisma"; import { Partner, Payout } from "@dub/prisma/client"; import { currencyFormatter, pluralize } from "@dub/utils"; -import { - BELOW_MIN_WITHDRAWAL_FEE_CENTS, - MIN_WITHDRAWAL_AMOUNT_CENTS, -} from "./constants"; type PayoutWithProgramName = Pick & { program: { diff --git a/apps/web/lib/stripe/payment-methods.ts b/apps/web/lib/stripe/payment-methods.ts index d3354325d66..dcead782733 100644 --- a/apps/web/lib/stripe/payment-methods.ts +++ b/apps/web/lib/stripe/payment-methods.ts @@ -1,6 +1,6 @@ +import { DIRECT_DEBIT_PAYMENT_METHOD_TYPES } from "@/lib/constants/payouts"; import { CreditCard, GreekTemple } from "@dub/ui"; import Stripe from "stripe"; -import { DIRECT_DEBIT_PAYMENT_METHOD_TYPES } from "../partners/constants"; export const calculatePayoutFeeForMethod = ({ paymentMethod, diff --git a/apps/web/lib/swr/use-program-enrollment.ts b/apps/web/lib/swr/use-program-enrollment.ts index 4e96d968f07..42c89e5a8c5 100644 --- a/apps/web/lib/swr/use-program-enrollment.ts +++ b/apps/web/lib/swr/use-program-enrollment.ts @@ -1,8 +1,8 @@ +import { LARGE_PROGRAM_MIN_TOTAL_COMMISSIONS_CENTS } from "@/lib/constants/program"; import { fetcher } from "@dub/utils"; import { useSession } from "next-auth/react"; import { useParams } from "next/navigation"; import useSWR, { SWRConfiguration } from "swr"; -import { LARGE_PROGRAM_MIN_TOTAL_COMMISSIONS_CENTS } from "../partners/constants"; import { ProgramEnrollmentProps } from "../types"; export default function useProgramEnrollment({ diff --git a/apps/web/lib/types.ts b/apps/web/lib/types.ts index b49fffb29f5..27650254f58 100644 --- a/apps/web/lib/types.ts +++ b/apps/web/lib/types.ts @@ -23,6 +23,7 @@ import { } from "@dub/prisma/client"; import { z } from "zod"; import { RESOURCE_COLORS } from "../ui/colors"; +import { BOUNTY_SUBMISSION_REQUIREMENTS } from "./constants/bounties"; import { FOLDER_PERMISSIONS, FOLDER_WORKSPACE_ACCESS, @@ -33,7 +34,6 @@ import { BountySchema, BountySubmissionExtendedSchema, getBountySubmissionsQuerySchema, - SUBMISSION_REQUIREMENTS, } from "./zod/schemas/bounties"; import { CampaignListSchema, @@ -591,7 +591,7 @@ export type BountySubmissionProps = z.infer< >; export type BountySubmissionRequirement = - (typeof SUBMISSION_REQUIREMENTS)[number]; + (typeof BOUNTY_SUBMISSION_REQUIREMENTS)[number]; export type WorkflowCondition = z.infer; diff --git a/apps/web/lib/zod/schemas/bounties.ts b/apps/web/lib/zod/schemas/bounties.ts index 94232983901..db6028aaff1 100644 --- a/apps/web/lib/zod/schemas/bounties.ts +++ b/apps/web/lib/zod/schemas/bounties.ts @@ -1,4 +1,8 @@ -import { BOUNTY_DESCRIPTION_MAX_LENGTH } from "@/lib/partners/constants"; +import { + BOUNTY_DESCRIPTION_MAX_LENGTH, + BOUNTY_MAX_SUBMISSION_REJECTION_NOTE_LENGTH, + BOUNTY_SUBMISSION_REQUIREMENTS, +} from "@/lib/constants/bounties"; import { BountyPerformanceScope, BountySubmissionRejectionReason, @@ -14,26 +18,8 @@ import { UserSchema } from "./users"; import { parseDateSchema } from "./utils"; import { workflowConditionSchema } from "./workflows"; -export const SUBMISSION_REQUIREMENTS = ["image", "url"] as const; - -export const MAX_SUBMISSION_FILES = 4; - -export const MAX_SUBMISSION_URLS = 20; - -export const MAX_BOUNTY_SUBMISSION_DESCRIPTION_LENGTH = 1000; - -export const MAX_BOUNTY_SUBMISSION_REJECTION_NOTE_LENGTH = 5000; - -export const REJECT_BOUNTY_SUBMISSION_REASONS = { - invalidProof: "Invalid proof", - duplicateSubmission: "Duplicate submission", - outOfTimeWindow: "Out of time window", - didNotMeetCriteria: "Did not meet criteria", - other: "Other", -} as const; - export const submissionRequirementsSchema = z - .array(z.enum(SUBMISSION_REQUIREMENTS)) + .array(z.enum(BOUNTY_SUBMISSION_REQUIREMENTS)) .min(0) .max(2); @@ -168,7 +154,7 @@ export const rejectBountySubmissionSchema = z.object({ rejectionNote: z .string() .trim() - .max(MAX_BOUNTY_SUBMISSION_REJECTION_NOTE_LENGTH) + .max(BOUNTY_MAX_SUBMISSION_REJECTION_NOTE_LENGTH) .optional(), }); diff --git a/apps/web/lib/zod/schemas/program-onboarding.ts b/apps/web/lib/zod/schemas/program-onboarding.ts index cb2d0cfb69a..b7771583c3a 100644 --- a/apps/web/lib/zod/schemas/program-onboarding.ts +++ b/apps/web/lib/zod/schemas/program-onboarding.ts @@ -1,4 +1,4 @@ -import { PROGRAM_ONBOARDING_PARTNERS_LIMIT } from "@/lib/partners/constants"; +import { PROGRAM_ONBOARDING_PARTNERS_LIMIT } from "@/lib/constants/program"; import { PartnerLinkStructure, RewardStructure } from "@dub/prisma/client"; import { z } from "zod"; import { maxDurationSchema } from "./misc"; diff --git a/apps/web/lib/zod/schemas/programs.ts b/apps/web/lib/zod/schemas/programs.ts index 698c39aa15f..b78809c6f33 100644 --- a/apps/web/lib/zod/schemas/programs.ts +++ b/apps/web/lib/zod/schemas/programs.ts @@ -2,7 +2,7 @@ import { DATE_RANGE_INTERVAL_PRESETS, DUB_PARTNERS_ANALYTICS_INTERVAL, } from "@/lib/analytics/constants"; -import { ALLOWED_MIN_PAYOUT_AMOUNTS } from "@/lib/partners/constants"; +import { ALLOWED_MIN_PAYOUT_AMOUNTS } from "@/lib/constants/payouts"; import { EventType, PartnerBannedReason, diff --git a/apps/web/scripts/migrations/backfill-invoice-payment-method.ts b/apps/web/scripts/migrations/backfill-invoice-payment-method.ts index e9f2ee37d77..3390eedc9fe 100644 --- a/apps/web/scripts/migrations/backfill-invoice-payment-method.ts +++ b/apps/web/scripts/migrations/backfill-invoice-payment-method.ts @@ -1,4 +1,4 @@ -import { STRIPE_PAYMENT_METHOD_NORMALIZATION } from "@/lib/partners/constants"; +import { STRIPE_PAYMENT_METHOD_NORMALIZATION } from "@/lib/constants/payouts"; import { prisma } from "@dub/prisma"; import { Invoice } from "@dub/prisma/client"; import "dotenv-flow/config"; diff --git a/apps/web/scripts/stripe/fix-processed-payouts.ts b/apps/web/scripts/stripe/fix-processed-payouts.ts index ec6fb12d6f2..3b2ab77fef6 100644 --- a/apps/web/scripts/stripe/fix-processed-payouts.ts +++ b/apps/web/scripts/stripe/fix-processed-payouts.ts @@ -1,4 +1,4 @@ -import { MIN_WITHDRAWAL_AMOUNT_CENTS } from "@/lib/partners/constants"; +import { MIN_WITHDRAWAL_AMOUNT_CENTS } from "@/lib/constants/payouts"; import { prisma } from "@dub/prisma"; import { currencyFormatter } from "@dub/utils"; import "dotenv-flow/config"; diff --git a/apps/web/ui/modals/add-payment-method-modal.tsx b/apps/web/ui/modals/add-payment-method-modal.tsx index 9232bf53d76..45e0b20caf8 100644 --- a/apps/web/ui/modals/add-payment-method-modal.tsx +++ b/apps/web/ui/modals/add-payment-method-modal.tsx @@ -1,6 +1,6 @@ "use client"; -import { DIRECT_DEBIT_PAYMENT_TYPES_INFO } from "@/lib/partners/constants"; +import { DIRECT_DEBIT_PAYMENT_TYPES_INFO } from "@/lib/constants/payouts"; import useWorkspace from "@/lib/swr/use-workspace"; import { X } from "@/ui/shared/icons"; import { AnimatedSizeContainer, GreekTemple, Modal } from "@dub/ui"; diff --git a/apps/web/ui/modals/invite-partner-user-modal.tsx b/apps/web/ui/modals/invite-partner-user-modal.tsx index 273f613bb46..420d188e676 100644 --- a/apps/web/ui/modals/invite-partner-user-modal.tsx +++ b/apps/web/ui/modals/invite-partner-user-modal.tsx @@ -1,4 +1,4 @@ -import { MAX_INVITES_PER_REQUEST } from "@/lib/partners/constants"; +import { MAX_INVITES_PER_REQUEST } from "@/lib/constants/partner-profile"; import { mutatePrefix } from "@/lib/swr/mutate"; import usePartnerProfile from "@/lib/swr/use-partner-profile"; import { invitePartnerUserSchema } from "@/lib/zod/schemas/partner-profile"; diff --git a/apps/web/ui/partners/bounties/claim-bounty-modal.tsx b/apps/web/ui/partners/bounties/claim-bounty-modal.tsx index 410e8bacf3a..4400a9f8f77 100644 --- a/apps/web/ui/partners/bounties/claim-bounty-modal.tsx +++ b/apps/web/ui/partners/bounties/claim-bounty-modal.tsx @@ -1,15 +1,15 @@ import { createBountySubmissionAction } from "@/lib/actions/partners/create-bounty-submission"; import { uploadBountySubmissionFileAction } from "@/lib/actions/partners/upload-bounty-submission-file"; +import { + BOUNTY_MAX_SUBMISSION_DESCRIPTION_LENGTH, + BOUNTY_MAX_SUBMISSION_FILES, + BOUNTY_MAX_SUBMISSION_URLS, + REJECT_BOUNTY_SUBMISSION_REASONS, +} from "@/lib/constants/bounties"; import { getBountyRewardDescription } from "@/lib/partners/get-bounty-reward-description"; import { mutatePrefix } from "@/lib/swr/mutate"; import useProgramEnrollment from "@/lib/swr/use-program-enrollment"; import { PartnerBountyProps } from "@/lib/types"; -import { - MAX_BOUNTY_SUBMISSION_DESCRIPTION_LENGTH, - MAX_SUBMISSION_FILES, - MAX_SUBMISSION_URLS, - REJECT_BOUNTY_SUBMISSION_REASONS, -} from "@/lib/zod/schemas/bounties"; import { useConfirmModal } from "@/ui/modals/confirm-modal"; import { X } from "@/ui/shared/icons"; import { Markdown } from "@/ui/shared/markdown"; @@ -500,7 +500,9 @@ function ClaimBountyModalContent({ bounty }: ClaimBountyModalProps) { onChange={async ({ file }) => await handleUpload(file) } - disabled={files.length >= MAX_SUBMISSION_FILES} + disabled={ + files.length >= BOUNTY_MAX_SUBMISSION_FILES + } maxFileSizeMB={5} /> @@ -551,7 +553,7 @@ function ClaimBountyModalContent({ bounty }: ClaimBountyModalProps) { )} ))} - {urls.length < MAX_SUBMISSION_URLS && ( + {urls.length < BOUNTY_MAX_SUBMISSION_URLS && (