Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions apps/web/app/(ee)/api/cron/payouts/process/process-payouts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion apps/web/app/(ee)/api/embed/referrals/earnings/route.ts
Original file line number Diff line number Diff line change
@@ -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";
Expand Down
2 changes: 1 addition & 1 deletion apps/web/app/(ee)/api/partner-profile/invites/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
@@ -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";
Expand Down
Original file line number Diff line number Diff line change
@@ -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";
Expand Down
2 changes: 1 addition & 1 deletion apps/web/app/(ee)/app.dub.co/embed/referrals/earnings.tsx
Original file line number Diff line number Diff line change
@@ -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 {
Expand Down
Original file line number Diff line number Diff line change
@@ -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 {
Expand Down
Original file line number Diff line number Diff line change
@@ -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";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down
Original file line number Diff line number Diff line change
@@ -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";
Expand Down
Original file line number Diff line number Diff line change
@@ -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";
Expand Down
Original file line number Diff line number Diff line change
@@ -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,
Expand Down Expand Up @@ -252,7 +252,7 @@ export const GET = withPartnerProfile(async ({ partner, params }) => {
</Document>,
);

return new Response(pdf, {
return new Response(new Uint8Array(pdf), {
headers: {
"Content-Type": "application/pdf",
"Content-Disposition": `inline; filename="payout-invoice-${payout.id}.pdf"`,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down
Original file line number Diff line number Diff line change
@@ -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 {
Expand Down
Original file line number Diff line number Diff line change
@@ -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";
Expand Down
Original file line number Diff line number Diff line change
@@ -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";
Expand Down
Original file line number Diff line number Diff line change
@@ -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";
Expand Down
Original file line number Diff line number Diff line change
@@ -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";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down
Original file line number Diff line number Diff line change
@@ -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";
Expand Down
Original file line number Diff line number Diff line change
@@ -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";
Expand Down
4 changes: 2 additions & 2 deletions apps/web/lib/actions/partners/confirm-payouts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down
14 changes: 8 additions & 6 deletions apps/web/lib/actions/partners/create-bounty-submission.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand All @@ -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()
Expand Down
2 changes: 1 addition & 1 deletion apps/web/lib/actions/partners/reject-bounty-submission.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down
19 changes: 19 additions & 0 deletions apps/web/lib/constants/bounties.ts
Original file line number Diff line number Diff line change
@@ -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;
2 changes: 2 additions & 0 deletions apps/web/lib/constants/misc.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export const REFERRALS_EMBED_EARNINGS_LIMIT = 8;
export const CUSTOMER_PAGE_EVENTS_LIMIT = 8;
2 changes: 2 additions & 0 deletions apps/web/lib/constants/partner-profile.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export const MAX_INVITES_PER_REQUEST = 5;
export const MAX_PARTNER_USERS = 10;
Original file line number Diff line number Diff line change
@@ -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%
Expand All @@ -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;
Expand Down Expand Up @@ -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;
29 changes: 29 additions & 0 deletions apps/web/lib/constants/program.ts
Original file line number Diff line number Diff line change
@@ -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;
Loading