{"version":3,"sources":["../src/user/user.schemas.ts"],"names":["HostProfileResponseSchema","z","EventCategory","VendorProfileResponseSchema","VendorTeamSize","VendorExperienceLevel","PublicVendorListCategorySchema","VendorCrewCategorySchema","VendorVerificationStatus","UserResponseSchema","AccountStatus","KycStatus","UpdateUserRequestSchema","CreateHostProfileRequestSchema","UpdateHostProfileRequestSchema","CreateVendorProfileRequestSchema","UpsertVendorCrewCategoryRequestSchema","SetProfilePinSchema","RESERVED_DISPLAY_NAMES","DisplayNameSchema","v","UpdateViewerProfileRequestSchema","UpdateViewerCurrencyRequestSchema","USER_CATEGORY","NotificationCategory","NotificationPreferenceItemSchema","UpdateNotificationPreferencesRequestSchema","items","i","SendFeedbackRequestSchema","FeedbackCategory","ViewerMeResponseSchema","NotificationPreferencesResponseSchema","SendFeedbackResponseSchema"],"mappings":"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","file":"chunk-VRVEWNG3.mjs","sourcesContent":["import { z } from 'zod';\nimport {\n  AccountStatus,\n  FeedbackCategory,\n  KycStatus,\n  NotificationCategory,\n  VendorExperienceLevel,\n  VendorTeamSize,\n  VendorVerificationStatus,\n} from './user.enums';\nimport { EventCategory } from '../event';\nimport {\n  PublicVendorListCategorySchema,\n  UpsertVendorCrewCategoryRequestSchema,\n  VendorCrewCategorySchema,\n} from '../marketplace';\n\nexport const HostProfileResponseSchema = z.object({\n  id: z.uuid(),\n  userId: z.uuid(),\n  businessName: z.string(),\n  totalEvents: z.number(),\n  totalSpent: z.number(),\n  averageRating: z.number(),\n  /** Count of vendor→host marketplace reviews reflected in `averageRating`. */\n  totalReviews: z.number().int().nonnegative(),\n  defaultCurrency: z.string(),\n  description: z.string().optional(),\n  category: z.array(z.enum(EventCategory)),\n  logoUrl: z.url().optional(),\n  hasPin: z.boolean(),\n  businessRegNumber: z.string().optional(),\n  taxId: z.string().optional(),\n  settlementBankCode: z.string().optional(),\n  settlementAccountNumber: z.string().optional(),\n  settlementAccountName: z.string().optional(),\n  /** Provider-neutral settlement sub-account handle. Was `paystackSubaccountCode`. */\n  providerSubaccountRef: z.string().optional(),\n  createdAt: z.iso.datetime(),\n});\n\nexport const VendorProfileResponseSchema = z.object({\n  id: z.uuid(),\n  userId: z.uuid(),\n  companyName: z.string(),\n  bio: z.string(),\n  /** Where the crew member works out of, e.g. \"Lagos, Nigeria\". */\n  location: z.string().max(160).optional(),\n  /** Featured work. One link; the portfolio item list is separate. */\n  portfolioUrl: z.url().optional(),\n  yearsExperience: z.number().optional(),\n  teamSize: z.enum(VendorTeamSize).optional(),\n  /** One level for the person, across every category they work in. */\n  experienceLevel: z.enum(VendorExperienceLevel),\n  equipmentManifest: z.array(z.record(z.string(), z.any())),\n  serviceCategories: z.array(PublicVendorListCategorySchema),\n  /** The categories the crew member works in, each with its own skills. */\n  crewCategories: z.array(VendorCrewCategorySchema).default([]),\n  equipmentItems: z.array(PublicVendorListCategorySchema),\n  verificationStatus: z.enum(VendorVerificationStatus),\n  averageRating: z.number().positive().multipleOf(0.01),\n  totalReviews: z.number(),\n  completionRate: z.number(),\n  isAvailable: z.boolean(),\n  hasPin: z.boolean(),\n  createdAt: z.iso.datetime(),\n});\n\nexport const UserResponseSchema = z.object({\n  id: z.uuid(),\n  email: z.email().toLowerCase(),\n  emailVerified: z.boolean(),\n  emailVerifiedAt: z.iso.datetime().optional(),\n  phoneNumber: z.string().optional(),\n  firstName: z.string().optional(),\n  lastName: z.string().optional(),\n  displayName: z.string().optional(),\n  avatarUrl: z.url().optional(),\n  roles: z.number().min(1).max(15),\n  accountStatus: z.enum(AccountStatus),\n  kycStatus: z.enum(KycStatus),\n  hostProfile: HostProfileResponseSchema.optional(),\n  vendorProfile: VendorProfileResponseSchema.optional(),\n  createdAt: z.iso.datetime(),\n  updatedAt: z.iso.datetime(),\n  eventCategory: z.array(z.enum(EventCategory)).optional(),\n  /**\n   * Signed up from an invite and skipped picking interests; the app asks\n   * with a pop-up on the next sign-in instead of the onboarding page.\n   */\n  interestsDeferred: z.boolean().optional(),\n});\n\nexport const UpdateUserRequestSchema = z.object({\n  firstName: z.string().optional(),\n  lastName: z.string().optional(),\n  displayName: z.string().optional(),\n  avatarUrl: z.url().optional(),\n  phoneNumber: z.string().optional(),\n  eventCategory: z.array(z.enum(EventCategory)).optional(),\n});\n\nexport const CreateHostProfileRequestSchema = z.object({\n  businessName: z.string(),\n  description: z.string().optional(),\n  logoUrl: z.string().optional(),\n  category: z.array(z.enum(EventCategory)).min(1),\n});\n\nexport const UpdateHostProfileRequestSchema = z.object({\n  businessName: z.string().min(1).max(120).optional(),\n  description: z.string().max(2000).optional(),\n  logoUrl: z.string().optional(),\n  category: z.array(z.enum(EventCategory)).min(1).optional(),\n  businessRegNumber: z.string().max(64).optional(),\n  taxId: z.string().max(64).optional(),\n});\n\nexport const CreateVendorProfileRequestSchema = z.object({\n  companyName: z.string(),\n  bio: z.string(),\n  logoUrl: z.string().optional(),\n  serviceCategoryIds: z.array(z.uuid()).optional(),\n  serviceCategoryCodes: z.array(z.string().min(1).max(64)).optional(),\n  equipmentItemIds: z.array(z.uuid()).optional(),\n  equipmentItemCodes: z.array(z.string().min(1).max(64)).optional(),\n  location: z.string().trim().max(160).optional(),\n  portfolioUrl: z.url().optional(),\n  yearsExperience: z.number(),\n  /** One level and one fee range for the person, not per category. */\n  experienceLevel: z.enum(VendorExperienceLevel),\n  teamSize: z.enum(VendorTeamSize).optional(),\n  /** Fee range in major units (naira); stored as minor units. */\n  minFee: z.number(),\n  maxFee: z.number(),\n  /** The categories this crew member works in, each with its own skills. */\n  crewCategories: z.array(UpsertVendorCrewCategoryRequestSchema).optional(),\n  isAvailable: z.boolean(),\n});\n\nexport const SetProfilePinSchema = z.object({\n  pin: z\n    .string()\n    .trim()\n    .regex(/^\\d{5}$/, 'pin must be 5 digits'),\n  currentPin: z\n    .string()\n    .trim()\n    .regex(/^\\d{5}$/, 'currentPin must be 5 digits')\n    .optional(),\n});\n\nexport const RESERVED_DISPLAY_NAMES: ReadonlySet<string> = new Set([\n  'admin',\n  'support',\n  'livdot',\n  'host',\n  'vendor',\n  'system',\n  'null',\n  'undefined',\n  'me',\n  'settings',\n  'viewer',\n  'auth',\n  'events',\n  'streaming',\n  'vendors',\n  'marketplace',\n  'users',\n]);\n\n/** Handle constraints — see viewer-settings.md §3.1. */\nexport const DisplayNameSchema = z\n  .string()\n  .trim()\n  .toLowerCase()\n  .min(3, 'Display name must be at least 3 characters')\n  .max(30, 'Display name must be at most 30 characters')\n  .regex(/^[a-z0-9_]+$/, 'Display name may only contain lowercase letters, digits, and underscores')\n  .refine((v) => !RESERVED_DISPLAY_NAMES.has(v), {\n    message: 'This display name is reserved',\n  });\n\nexport const UpdateViewerProfileRequestSchema = z\n  .object({\n    displayName: DisplayNameSchema,\n  })\n  .strict();\n\nexport const UpdateViewerCurrencyRequestSchema = z\n  .object({\n    preferredCurrency: z\n      .string()\n      .trim()\n      .toUpperCase()\n      .length(3)\n      .regex(/^[A-Z]{3}$/),\n  })\n  .strict();\nconst USER_CATEGORY = z.enum([\n  NotificationCategory.LIVE_ALERTS,\n  NotificationCategory.RECOMMENDATIONS,\n  NotificationCategory.EVENT_REMINDERS,\n]);\n\nexport const NotificationPreferenceItemSchema = z.object({\n  category: USER_CATEGORY,\n  enabled: z.boolean(),\n});\n\nexport const UpdateNotificationPreferencesRequestSchema = z\n  .object({\n    preferences: z\n      .array(NotificationPreferenceItemSchema)\n      .min(1)\n      .max(10)\n      .refine((items) => new Set(items.map((i) => i.category)).size === items.length, {\n        message: 'Duplicate category in preferences',\n      }),\n  })\n  .strict();\n\nexport const SendFeedbackRequestSchema = z\n  .object({\n    category: z.enum(FeedbackCategory),\n    message: z.string().trim().min(10).max(2000),\n  })\n  .strict();\n\nexport const ViewerMeResponseSchema = z.object({\n  id: z.uuid(),\n  email: z.email(),\n  emailVerified: z.boolean(),\n  displayName: z.string().nullable(),\n  avatarUrl: z.url().nullable(),\n  roles: z.number().int(),\n  preferredCurrency: z.string(),\n  notificationsEnabledCount: z.number().int(),\n  hasPushDevice: z.boolean(),\n});\n\nexport const NotificationPreferencesResponseSchema = z.object({\n  preferences: z.record(USER_CATEGORY, z.boolean()),\n});\n\nexport const SendFeedbackResponseSchema = z.object({\n  id: z.uuid(),\n});\n"]}